[Pkg-utopia-commits] r672 - packages/unstable/dbus/debian/patches
Sjoerd Simons
sjoerd at costa.debian.org
Mon Feb 27 22:03:39 UTC 2006
Author: sjoerd
Date: 2006-02-27 21:59:09 +0000 (Mon, 27 Feb 2006)
New Revision: 672
Modified:
packages/unstable/dbus/debian/patches/dbus-update-automake.patch
Log:
Another update, hopefully right this time
Modified: packages/unstable/dbus/debian/patches/dbus-update-automake.patch
===================================================================
--- packages/unstable/dbus/debian/patches/dbus-update-automake.patch 2006-02-27 21:54:08 UTC (rev 671)
+++ packages/unstable/dbus/debian/patches/dbus-update-automake.patch 2006-02-27 21:59:09 UTC (rev 672)
@@ -1,17708 +1,48 @@
-diff -Naur dbus-0.61.orig/AUTHORS dbus-0.61/AUTHORS
---- dbus-0.61.orig/AUTHORS 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/AUTHORS 2005-11-07 22:57:13.000000000 +0100
-@@ -0,0 +1,16 @@
-+Olivier Andrieu <oliv__a at users.sourceforge.net>
-+Philip Blundell <pb at nexus.co.uk>
-+Anders Carlsson <andersca at gnome.org>
-+Kristian Hogsberg <krh at redhat.com>
-+Alex Larsson <alexl at redhat.com>
-+Robert McQueen <robot101 at debian.org>
-+Michael Meeks <michael at ximian.com>
-+Seth Nickell <seth at gnome.org>
-+John (J5) Palmieri <johnp at redhat.com>
-+Havoc Pennington <hp at redhat.com>
-+Harri Porten <porten at kde.org>
-+Matthew Rickard <mjricka at epoch.ncsc.mil>
-+Zack Rusin <zack at kde.org>
-+Joe Shaw <joe at assbarn.com>
-+Colin Walters <walters at verbum.org>
-+David Zeuthen <david at fubar.dk>
-diff -Naur dbus-0.61.orig/COPYING dbus-0.61/COPYING
---- dbus-0.61.orig/COPYING 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/COPYING 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,551 @@
-+D-BUS is licensed to you under your choice of the Academic Free
-+License version 2.1, or the GNU General Public License version 2.
-+Both licenses are included here. Some of the standalone binaries are
-+under the GPL only; in particular, but not limited to,
-+tools/dbus-cleanup-sockets.c and test/decode-gcov.c. Each source code
-+file is marked with the proper copyright information.
-+
-+
-+
-+The Academic Free License
-+v. 2.1
-+
-+This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work:
-+
-+Licensed under the Academic Free License version 2.1
-+
-+1) Grant of Copyright License. Licensor hereby grants You a
-+world-wide, royalty-free, non-exclusive, perpetual, sublicenseable
-+license to do the following:
-+
-+a) to reproduce the Original Work in copies;
-+
-+b) to prepare derivative works ("Derivative Works") based upon the Original Work;
-+
-+c) to distribute copies of the Original Work and Derivative Works to the public;
-+
-+d) to perform the Original Work publicly; and
-+
-+e) to display the Original Work publicly.
-+
-+2) Grant of Patent License. Licensor hereby grants You a world-wide,
-+royalty-free, non-exclusive, perpetual, sublicenseable license, under
-+patent claims owned or controlled by the Licensor that are embodied in
-+the Original Work as furnished by the Licensor, to make, use, sell and
-+offer for sale the Original Work and Derivative Works.
-+
-+3) Grant of Source Code License. The term "Source Code" means the
-+preferred form of the Original Work for making modifications to it and
-+all available documentation describing how to modify the Original
-+Work. Licensor hereby agrees to provide a machine-readable copy of the
-+Source Code of the Original Work along with each copy of the Original
-+Work that Licensor distributes. Licensor reserves the right to satisfy
-+this obligation by placing a machine-readable copy of the Source Code
-+in an information repository reasonably calculated to permit
-+inexpensive and convenient access by You for as long as Licensor
-+continues to distribute the Original Work, and by publishing the
-+address of that information repository in a notice immediately
-+following the copyright notice that applies to the Original Work.
-+
-+4) Exclusions From License Grant. Neither the names of Licensor, nor
-+the names of any contributors to the Original Work, nor any of their
-+trademarks or service marks, may be used to endorse or promote
-+products derived from this Original Work without express prior written
-+permission of the Licensor. Nothing in this License shall be deemed to
-+grant any rights to trademarks, copyrights, patents, trade secrets or
-+any other intellectual property of Licensor except as expressly stated
-+herein. No patent license is granted to make, use, sell or offer to
-+sell embodiments of any patent claims other than the licensed claims
-+defined in Section 2. No right is granted to the trademarks of
-+Licensor even if such marks are included in the Original Work. Nothing
-+in this License shall be interpreted to prohibit Licensor from
-+licensing under different terms from this License any Original Work
-+that Licensor otherwise would have a right to license.
-+
-+5) This section intentionally omitted.
-+
-+6) Attribution Rights. You must retain, in the Source Code of any
-+Derivative Works that You create, all copyright, patent or trademark
-+notices from the Source Code of the Original Work, as well as any
-+notices of licensing and any descriptive text identified therein as an
-+"Attribution Notice." You must cause the Source Code for any
-+Derivative Works that You create to carry a prominent Attribution
-+Notice reasonably calculated to inform recipients that You have
-+modified the Original Work.
-+
-+7) Warranty of Provenance and Disclaimer of Warranty. Licensor
-+warrants that the copyright in and to the Original Work and the patent
-+rights granted herein by Licensor are owned by the Licensor or are
-+sublicensed to You under the terms of this License with the permission
-+of the contributor(s) of those copyrights and patent rights. Except as
-+expressly stated in the immediately proceeding sentence, the Original
-+Work is provided under this License on an "AS IS" BASIS and WITHOUT
-+WARRANTY, either express or implied, including, without limitation,
-+the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A
-+PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL
-+WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential
-+part of this License. No license to Original Work is granted hereunder
-+except under this disclaimer.
-+
-+8) Limitation of Liability. Under no circumstances and under no legal
-+theory, whether in tort (including negligence), contract, or
-+otherwise, shall the Licensor be liable to any person for any direct,
-+indirect, special, incidental, or consequential damages of any
-+character arising as a result of this License or the use of the
-+Original Work including, without limitation, damages for loss of
-+goodwill, work stoppage, computer failure or malfunction, or any and
-+all other commercial damages or losses. This limitation of liability
-+shall not apply to liability for death or personal injury resulting
-+from Licensor's negligence to the extent applicable law prohibits such
-+limitation. Some jurisdictions do not allow the exclusion or
-+limitation of incidental or consequential damages, so this exclusion
-+and limitation may not apply to You.
-+
-+9) Acceptance and Termination. If You distribute copies of the
-+Original Work or a Derivative Work, You must make a reasonable effort
-+under the circumstances to obtain the express assent of recipients to
-+the terms of this License. Nothing else but this License (or another
-+written agreement between Licensor and You) grants You permission to
-+create Derivative Works based upon the Original Work or to exercise
-+any of the rights granted in Section 1 herein, and any attempt to do
-+so except under the terms of this License (or another written
-+agreement between Licensor and You) is expressly prohibited by
-+U.S. copyright law, the equivalent laws of other countries, and by
-+international treaty. Therefore, by exercising any of the rights
-+granted to You in Section 1 herein, You indicate Your acceptance of
-+this License and all of its terms and conditions.
-+
-+10) Termination for Patent Action. This License shall terminate
-+automatically and You may no longer exercise any of the rights granted
-+to You by this License as of the date You commence an action,
-+including a cross-claim or counterclaim, against Licensor or any
-+licensee alleging that the Original Work infringes a patent. This
-+termination provision shall not apply for an action alleging patent
-+infringement by combinations of the Original Work with other software
-+or hardware.
-+
-+11) Jurisdiction, Venue and Governing Law. Any action or suit relating
-+to this License may be brought only in the courts of a jurisdiction
-+wherein the Licensor resides or in which Licensor conducts its primary
-+business, and under the laws of that jurisdiction excluding its
-+conflict-of-law provisions. The application of the United Nations
-+Convention on Contracts for the International Sale of Goods is
-+expressly excluded. Any use of the Original Work outside the scope of
-+this License or after its termination shall be subject to the
-+requirements and penalties of the U.S. Copyright Act, 17 U.S.C. ç 101
-+et seq., the equivalent laws of other countries, and international
-+treaty. This section shall survive the termination of this License.
-+
-+12) Attorneys Fees. In any action to enforce the terms of this License
-+or seeking damages relating thereto, the prevailing party shall be
-+entitled to recover its costs and expenses, including, without
-+limitation, reasonable attorneys' fees and costs incurred in
-+connection with such action, including any appeal of such action. This
-+section shall survive the termination of this License.
-+
-+13) Miscellaneous. This License represents the complete agreement
-+concerning the subject matter hereof. If any provision of this License
-+is held to be unenforceable, such provision shall be reformed only to
-+the extent necessary to make it enforceable.
-+
-+14) Definition of "You" in This License. "You" throughout this
-+License, whether in upper or lower case, means an individual or a
-+legal entity exercising rights under, and complying with all of the
-+terms of, this License. For legal entities, "You" includes any entity
-+that controls, is controlled by, or is under common control with
-+you. For purposes of this definition, "control" means (i) the power,
-+direct or indirect, to cause the direction or management of such
-+entity, whether by contract or otherwise, or (ii) ownership of fifty
-+percent (50%) or more of the outstanding shares, or (iii) beneficial
-+ownership of such entity.
-+
-+15) Right to Use. You may use the Original Work in all ways not
-+otherwise restricted or conditioned by this License or by law, and
-+Licensor promises not to interfere with or be responsible for such
-+uses by You.
-+
-+This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights
-+reserved. Permission is hereby granted to copy and distribute this
-+license without modification. This license may not be modified without
-+the express written permission of its copyright owner.
-+
-+
-+--
-+END OF ACADEMIC FREE LICENSE. The following is intended to describe the essential
-+differences between the Academic Free License (AFL) version 1.0 and other
-+open source licenses:
-+
-+The Academic Free License is similar to the BSD, MIT, UoI/NCSA and Apache
-+licenses in many respects but it is intended to solve a few problems with
-+those licenses.
-+
-+* The AFL is written so as to make it clear what software is being
-+licensed (by the inclusion of a statement following the copyright notice
-+in the software). This way, the license functions better than a template
-+license. The BSD, MIT and UoI/NCSA licenses apply to unidentified software.
-+
-+* The AFL contains a complete copyright grant to the software. The BSD
-+and Apache licenses are vague and incomplete in that respect.
-+
-+* The AFL contains a complete patent grant to the software. The BSD, MIT,
-+UoI/NCSA and Apache licenses rely on an implied patent license and contain
-+no explicit patent grant.
-+
-+* The AFL makes it clear that no trademark rights are granted to the
-+licensor's trademarks. The Apache license contains such a provision, but the
-+BSD, MIT and UoI/NCSA licenses do not.
-+
-+* The AFL includes the warranty by the licensor that it either owns the
-+copyright or that it is distributing the software under a license. None of
-+the other licenses contain that warranty. All other warranties are disclaimed,
-+as is the case for the other licenses.
-+
-+* The AFL is itself copyrighted (with the right granted to copy and distribute
-+without modification). This ensures that the owner of the copyright to the
-+license will control changes. The Apache license contains a copyright notice,
-+but the BSD, MIT and UoI/NCSA licenses do not.
-+--
-+START OF GNU GENERAL PUBLIC LICENSE
-+--
-+
-+ GNU GENERAL PUBLIC LICENSE
-+ Version 2, June 1991
-+
-+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+
-+ Everyone is permitted to copy and distribute verbatim copies
-+ of this license document, but changing it is not allowed.
-+
-+ Preamble
-+
-+ The licenses for most software are designed to take away your
-+freedom to share and change it. By contrast, the GNU General Public
-+License is intended to guarantee your freedom to share and change free
-+software--to make sure the software is free for all its users. This
-+General Public License applies to most of the Free Software
-+Foundation's software and to any other program whose authors commit to
-+using it. (Some other Free Software Foundation software is covered by
-+the GNU Library General Public License instead.) You can apply it to
-+your programs, too.
-+
-+ When we speak of free software, we are referring to freedom, not
-+price. Our General Public Licenses are designed to make sure that you
-+have the freedom to distribute copies of free software (and charge for
-+this service if you wish), that you receive source code or can get it
-+if you want it, that you can change the software or use pieces of it
-+in new free programs; and that you know you can do these things.
-+
-+ To protect your rights, we need to make restrictions that forbid
-+anyone to deny you these rights or to ask you to surrender the rights.
-+These restrictions translate to certain responsibilities for you if you
-+distribute copies of the software, or if you modify it.
-+
-+ For example, if you distribute copies of such a program, whether
-+gratis or for a fee, you must give the recipients all the rights that
-+you have. You must make sure that they, too, receive or can get the
-+source code. And you must show them these terms so they know their
-+rights.
-+
-+ We protect your rights with two steps: (1) copyright the software, and
-+(2) offer you this license which gives you legal permission to copy,
-+distribute and/or modify the software.
-+
-+ Also, for each author's protection and ours, we want to make certain
-+that everyone understands that there is no warranty for this free
-+software. If the software is modified by someone else and passed on, we
-+want its recipients to know that what they have is not the original, so
-+that any problems introduced by others will not reflect on the original
-+authors' reputations.
-+
-+ Finally, any free program is threatened constantly by software
-+patents. We wish to avoid the danger that redistributors of a free
-+program will individually obtain patent licenses, in effect making the
-+program proprietary. To prevent this, we have made it clear that any
-+patent must be licensed for everyone's free use or not licensed at all.
-+
-+ The precise terms and conditions for copying, distribution and
-+modification follow.
-+
-+ GNU GENERAL PUBLIC LICENSE
-+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-+
-+ 0. This License applies to any program or other work which contains
-+a notice placed by the copyright holder saying it may be distributed
-+under the terms of this General Public License. The "Program", below,
-+refers to any such program or work, and a "work based on the Program"
-+means either the Program or any derivative work under copyright law:
-+that is to say, a work containing the Program or a portion of it,
-+either verbatim or with modifications and/or translated into another
-+language. (Hereinafter, translation is included without limitation in
-+the term "modification".) Each licensee is addressed as "you".
-+
-+Activities other than copying, distribution and modification are not
-+covered by this License; they are outside its scope. The act of
-+running the Program is not restricted, and the output from the Program
-+is covered only if its contents constitute a work based on the
-+Program (independent of having been made by running the Program).
-+Whether that is true depends on what the Program does.
-+
-+ 1. You may copy and distribute verbatim copies of the Program's
-+source code as you receive it, in any medium, provided that you
-+conspicuously and appropriately publish on each copy an appropriate
-+copyright notice and disclaimer of warranty; keep intact all the
-+notices that refer to this License and to the absence of any warranty;
-+and give any other recipients of the Program a copy of this License
-+along with the Program.
-+
-+You may charge a fee for the physical act of transferring a copy, and
-+you may at your option offer warranty protection in exchange for a fee.
-+
-+ 2. You may modify your copy or copies of the Program or any portion
-+of it, thus forming a work based on the Program, and copy and
-+distribute such modifications or work under the terms of Section 1
-+above, provided that you also meet all of these conditions:
-+
-+ a) You must cause the modified files to carry prominent notices
-+ stating that you changed the files and the date of any change.
-+
-+ b) You must cause any work that you distribute or publish, that in
-+ whole or in part contains or is derived from the Program or any
-+ part thereof, to be licensed as a whole at no charge to all third
-+ parties under the terms of this License.
-+
-+ c) If the modified program normally reads commands interactively
-+ when run, you must cause it, when started running for such
-+ interactive use in the most ordinary way, to print or display an
-+ announcement including an appropriate copyright notice and a
-+ notice that there is no warranty (or else, saying that you provide
-+ a warranty) and that users may redistribute the program under
-+ these conditions, and telling the user how to view a copy of this
-+ License. (Exception: if the Program itself is interactive but
-+ does not normally print such an announcement, your work based on
-+ the Program is not required to print an announcement.)
-+
-+These requirements apply to the modified work as a whole. If
-+identifiable sections of that work are not derived from the Program,
-+and can be reasonably considered independent and separate works in
-+themselves, then this License, and its terms, do not apply to those
-+sections when you distribute them as separate works. But when you
-+distribute the same sections as part of a whole which is a work based
-+on the Program, the distribution of the whole must be on the terms of
-+this License, whose permissions for other licensees extend to the
-+entire whole, and thus to each and every part regardless of who wrote it.
-+
-+Thus, it is not the intent of this section to claim rights or contest
-+your rights to work written entirely by you; rather, the intent is to
-+exercise the right to control the distribution of derivative or
-+collective works based on the Program.
-+
-+In addition, mere aggregation of another work not based on the Program
-+with the Program (or with a work based on the Program) on a volume of
-+a storage or distribution medium does not bring the other work under
-+the scope of this License.
-+
-+ 3. You may copy and distribute the Program (or a work based on it,
-+under Section 2) in object code or executable form under the terms of
-+Sections 1 and 2 above provided that you also do one of the following:
-+
-+ a) Accompany it with the complete corresponding machine-readable
-+ source code, which must be distributed under the terms of Sections
-+ 1 and 2 above on a medium customarily used for software interchange; or,
-+
-+ b) Accompany it with a written offer, valid for at least three
-+ years, to give any third party, for a charge no more than your
-+ cost of physically performing source distribution, a complete
-+ machine-readable copy of the corresponding source code, to be
-+ distributed under the terms of Sections 1 and 2 above on a medium
-+ customarily used for software interchange; or,
-+
-+ c) Accompany it with the information you received as to the offer
-+ to distribute corresponding source code. (This alternative is
-+ allowed only for noncommercial distribution and only if you
-+ received the program in object code or executable form with such
-+ an offer, in accord with Subsection b above.)
-+
-+The source code for a work means the preferred form of the work for
-+making modifications to it. For an executable work, complete source
-+code means all the source code for all modules it contains, plus any
-+associated interface definition files, plus the scripts used to
-+control compilation and installation of the executable. However, as a
-+special exception, the source code distributed need not include
-+anything that is normally distributed (in either source or binary
-+form) with the major components (compiler, kernel, and so on) of the
-+operating system on which the executable runs, unless that component
-+itself accompanies the executable.
-+
-+If distribution of executable or object code is made by offering
-+access to copy from a designated place, then offering equivalent
-+access to copy the source code from the same place counts as
-+distribution of the source code, even though third parties are not
-+compelled to copy the source along with the object code.
-+
-+ 4. You may not copy, modify, sublicense, or distribute the Program
-+except as expressly provided under this License. Any attempt
-+otherwise to copy, modify, sublicense or distribute the Program is
-+void, and will automatically terminate your rights under this License.
-+However, parties who have received copies, or rights, from you under
-+this License will not have their licenses terminated so long as such
-+parties remain in full compliance.
-+
-+ 5. You are not required to accept this License, since you have not
-+signed it. However, nothing else grants you permission to modify or
-+distribute the Program or its derivative works. These actions are
-+prohibited by law if you do not accept this License. Therefore, by
-+modifying or distributing the Program (or any work based on the
-+Program), you indicate your acceptance of this License to do so, and
-+all its terms and conditions for copying, distributing or modifying
-+the Program or works based on it.
-+
-+ 6. Each time you redistribute the Program (or any work based on the
-+Program), the recipient automatically receives a license from the
-+original licensor to copy, distribute or modify the Program subject to
-+these terms and conditions. You may not impose any further
-+restrictions on the recipients' exercise of the rights granted herein.
-+You are not responsible for enforcing compliance by third parties to
-+this License.
-+
-+ 7. If, as a consequence of a court judgment or allegation of patent
-+infringement or for any other reason (not limited to patent issues),
-+conditions are imposed on you (whether by court order, agreement or
-+otherwise) that contradict the conditions of this License, they do not
-+excuse you from the conditions of this License. If you cannot
-+distribute so as to satisfy simultaneously your obligations under this
-+License and any other pertinent obligations, then as a consequence you
-+may not distribute the Program at all. For example, if a patent
-+license would not permit royalty-free redistribution of the Program by
-+all those who receive copies directly or indirectly through you, then
-+the only way you could satisfy both it and this License would be to
-+refrain entirely from distribution of the Program.
-+
-+If any portion of this section is held invalid or unenforceable under
-+any particular circumstance, the balance of the section is intended to
-+apply and the section as a whole is intended to apply in other
-+circumstances.
-+
-+It is not the purpose of this section to induce you to infringe any
-+patents or other property right claims or to contest validity of any
-+such claims; this section has the sole purpose of protecting the
-+integrity of the free software distribution system, which is
-+implemented by public license practices. Many people have made
-+generous contributions to the wide range of software distributed
-+through that system in reliance on consistent application of that
-+system; it is up to the author/donor to decide if he or she is willing
-+to distribute software through any other system and a licensee cannot
-+impose that choice.
-+
-+This section is intended to make thoroughly clear what is believed to
-+be a consequence of the rest of this License.
-+
-+ 8. If the distribution and/or use of the Program is restricted in
-+certain countries either by patents or by copyrighted interfaces, the
-+original copyright holder who places the Program under this License
-+may add an explicit geographical distribution limitation excluding
-+those countries, so that distribution is permitted only in or among
-+countries not thus excluded. In such case, this License incorporates
-+the limitation as if written in the body of this License.
-+
-+ 9. The Free Software Foundation may publish revised and/or new versions
-+of the General Public License from time to time. Such new versions will
-+be similar in spirit to the present version, but may differ in detail to
-+address new problems or concerns.
-+
-+Each version is given a distinguishing version number. If the Program
-+specifies a version number of this License which applies to it and "any
-+later version", you have the option of following the terms and conditions
-+either of that version or of any later version published by the Free
-+Software Foundation. If the Program does not specify a version number of
-+this License, you may choose any version ever published by the Free Software
-+Foundation.
-+
-+ 10. If you wish to incorporate parts of the Program into other free
-+programs whose distribution conditions are different, write to the author
-+to ask for permission. For software which is copyrighted by the Free
-+Software Foundation, write to the Free Software Foundation; we sometimes
-+make exceptions for this. Our decision will be guided by the two goals
-+of preserving the free status of all derivatives of our free software and
-+of promoting the sharing and reuse of software generally.
-+
-+ NO WARRANTY
-+
-+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-+REPAIR OR CORRECTION.
-+
-+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-+POSSIBILITY OF SUCH DAMAGES.
-+
-+ END OF TERMS AND CONDITIONS
-+
-+ How to Apply These Terms to Your New Programs
-+
-+ If you develop a new program, and you want it to be of the greatest
-+possible use to the public, the best way to achieve this is to make it
-+free software which everyone can redistribute and change under these terms.
-+
-+ To do so, attach the following notices to the program. It is safest
-+to attach them to the start of each source file to most effectively
-+convey the exclusion of warranty; and each file should have at least
-+the "copyright" line and a pointer to where the full notice is found.
-+
-+ <one line to give the program's name and a brief idea of what it does.>
-+ Copyright (C) <year> <name of author>
-+
-+ 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 2 of the License, or
-+ (at your option) 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, write to the Free Software
-+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+
-+
-+Also add information on how to contact you by electronic and paper mail.
-+
-+If the program is interactive, make it output a short notice like this
-+when it starts in an interactive mode:
-+
-+ Gnomovision version 69, Copyright (C) year name of author
-+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-+ This is free software, and you are welcome to redistribute it
-+ under certain conditions; type `show c' for details.
-+
-+The hypothetical commands `show w' and `show c' should show the appropriate
-+parts of the General Public License. Of course, the commands you use may
-+be called something other than `show w' and `show c'; they could even be
-+mouse-clicks or menu items--whatever suits your program.
-+
-+You should also get your employer (if you work as a programmer) or your
-+school, if any, to sign a "copyright disclaimer" for the program, if
-+necessary. Here is a sample; alter the names:
-+
-+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
-+
-+ <signature of Ty Coon>, 1 April 1989
-+ Ty Coon, President of Vice
-+
-+This General Public License does not permit incorporating your program into
-+proprietary programs. If your program is a subroutine library, you may
-+consider it more useful to permit linking proprietary applications with the
-+library. If this is what you want to do, use the GNU Library General
-+Public License instead of this License.
-diff -Naur dbus-0.61.orig/ChangeLog dbus-0.61/ChangeLog
---- dbus-0.61.orig/ChangeLog 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/ChangeLog 2006-02-24 18:21:24.000000000 +0100
-@@ -0,0 +1,13082 @@
-+2006-02-24 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * Released 0.61
-+
-+2006-02-24 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * proxies.py: Fix the callchain
-+
-+2006-02-24 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * patch from Sjoerd Simons <sjoerd at debian.org>:
-+
-+ * dbus/dbus-sysdeps-util.c (_dbus_group_info_free): Moved to
-+ dbus/dbus-sysdeps.c
-+
-+ * dbus/dbus-userdb.c (_dbus_group_info_free_allocated): Don't
-+ call _dbus_group_info_free_allocated which causes infinite loop,
-+ correctly call _dbus_group_info_free
-+
-+2006-02-20 Thiago Macieira <thiago.macieira at trolltech.com>
-+
-+ * qt/qdbusinterface_p.h:
-+ * qt/qdbusinterface.cpp: Use the standard
-+ org.freedesktop.DBus.Method.NoReply annotation for the "async"
-+ calls instead of creating one for us.
-+
-+ * qt/qdbusconnection_p.h:
-+ * qt/qdbusintegrator.cpp: Remove debugging code.
-+
-+ * qt/qdbusintegrator.cpp:
-+ * qt/qdbusmessage.cpp:
-+ * qt/qdbusmessage_p.h:
-+ * qt/qdbusmessage.h: Change the behaviour of automatic
-+ reply-sending: now a reply is always sent, unless the caller
-+ didn't request one or if the user slot has already sent one.
-+
-+2006-02-16 Robert McQueen <robot101 at debian.org>
-+
-+ * configure.in: Patch from Debian packages by Sjoerd Simons
-+ <sjoerd at debian.org> to add --with-qt-moc and --with-qt3-moc
-+ arguments so it's possible to build both bindings in the
-+ same tree.
-+
-+ * qt/Makefile.am: Fix truncated value so that make dist works.
-+
-+2006-02-16 Robert McQueen <robot101 at debian.org>
-+
-+ * acinclude.m4, configure.in: Patch from Brad Hards
-+ <bradh at frogmouth.net> to avoid warnings from autoconf 1.9 by
-+ improving quoting, re-ordering a few checks, and a few other
-+ aesthetic tidy-ups.
-+
-+2006-02-16 Robert McQueen <robot101 at debian.org>
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_fixed_array):
-+ Patch from Rob Taylor <rob.taylor at collabora.co.uk> to correct a bogus
-+ assertion that the next element to read from the iter is fixed in
-+ size. This is not the case when you are at the end of the iter,
-+ because the next element type is INVALID.
-+
-+ * dbus/dbus-string.c (_dbus_string_init_const_len): Correct a
-+ a bogus assert which means that you may not initialise a 0-length
-+ string unless you provide a non-NULL pointer. This prevented
-+ you from marshalling messages containing zero-length arrays in
-+ some cases.
-+
-+ * glib/dbus-gvalue.c (demarshal_collection_array): Another patch
-+ from Rob to correct bogus asserts when trying to demarshal an
-+ array and get_fixed_array got you 0 elements. Append nothing to
-+ the GArray in this case.
-+
-+ * test/glib/test-dbus-glib.c: Add a test case for round-tripping
-+ an empty array via the glib bindings. Without all of the above
-+ patches, this new test fails.
-+
-+2006-02-16 Robert McQueen <robot101 at debian.org>
-+
-+ * glib/dbus-gmain.c: Make the previous commit compile.
-+
-+ * python/_dbus.py, python/matchrules.py: Patch from Ole Andre
-+ Ravnaas <ole.andre.ravnaas at collabora.co.uk> to allow you to
-+ specify sender_keyword="foo", path_keyword="bar" when adding
-+ a signal listener, so that you can bind to signals generically
-+ but still do something useful in your callback.
-+
-+ * python/dbus_bindings.pyx: Demarshal the byte type as unsigned
-+ chars so that they're not cast to chars and made negative. Thanks
-+ to Jakub Stachowski for reporting this and testing the fix.
-+
-+2006-02-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-glib.h:
-+ * glib/dbus-gmain.h:
-+ (dbus_g_connection_open): new method for openning
-+ a connection to an arbitrary address in the glib bindings
-+
-+ * ChangeLog: checkin last entry which doesn't seem to be commited
-+
-+2006-02-13 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * tools/dbus-launch.c: Fixed sh syntax output
-+
-+2006-02-13 Robert McQueen <robot101 at debian.org>
-+
-+ * glib/dbus-binding-tool-glib.c, glib/dbus-gmain.c,
-+ glib/dbus-gsignature.c, glib/dbus-gtype-specialized.c,
-+ glib/dbus-gtype-specialized.h, glib/dbus-gvalue-utils.c,
-+ glib/dbus-gvalue-utils.h, glib/dbus-gvalue.c:
-+ Patch from Rob Taylor <rob.taylor at collabora.co.uk> to add a big
-+ missing piece of the glib bindings jigsaw puzzle. This modifies
-+ the existing specialised types to have N type parameters (rather
-+ than the current 1 or 2 for arrays and dictionaries respectively).
-+ You can then use this to get a glib type to represent any arbitrary
-+ D-Bus struct type using dbus_g_type_get_struct. The only
-+ implementation of these types is with GValueArrays as before,
-+ but it's now possible to store these in arrays, emit them in
-+ signals, etc.
-+
-+2006-02-10 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-signature.c (dbus_signature_iter_recurse): Correctly
-+ deal with nested arrays (Bug #5823) Patch by Thiago Macieira
-+ <thiago.macieira at trolltech.com>
-+
-+2006-02-10 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * mono/doc/Makefile.am: Fix parallel make problem with mono-doc
-+ (Bug #4213) Patch from Doug Goldstein <cardoe at gentoo.org>
-+
-+2006-02-10 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * bus/connection.c (bus_connections_expect_reply): Make
-+ pending reply limit not common to all connections (Bug #5416)
-+ Patch from Kimmo Hämäläinen <kimmo.hamalainen at nokia.com>
-+
-+2006-02-10 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * tools/dbus-launch.c: Fixed csh syntax output (Bug #5720)
-+
-+2006-02-10 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * gcj/Makefile.am: point to correct jar command (Bug #4529)
-+ patch from Doug Goldstein <cardoe at gentoo.org>
-+
-+2006-02-09 Joe Shaw <joeshaw at novell.com>
-+
-+ * mono/Arguments.cs: Fix a magic number in the mono bindings
-+ that doesn't work on 64 bit arches. Patch from Peter Johanson.
-+
-+2006-01-27 Robert McQueen <robot101 at debian.org>
-+
-+ * glib/dbus-binding-tool-glib.[ch]: Patch based on Ricardo Kekki's
-+ patch to use an annotation org.freedesktop.DBus.GLib.ClientCSymbol
-+ when generating the client-side methods, instead of overloading
-+ CSymbol which broke everything horribly. My apologies.
-+
-+2006-01-27 Robert McQueen <robot101 at debian.org>
-+
-+ * glib/dbus-gtype-specialized.[ch], glib/dbus-gvalue-utils.c: Patch
-+ by me and Rob Taylor to add a simple_free function to D-Bus map
-+ and collection types, which allows those types which can be freed
-+ with a GDestroyNotify (such as GHashTables and GArrays, but not
-+ GPtrArrays) to be stored as the values in hashtables.
-+
-+ * test/glib/test-dbus-glib.c, test/glib/test-service-glib.{c,xml}:
-+ Patch by Rob Taylor to add nested dicts to the glib tests to check
-+ the above code works, and appears not to leak when called repeatedly.
-+
-+2006-01-27 Robert McQueen <robot101 at debian.org>
-+
-+ * glib/dbus-gvalue.c (demarshal_valuearray): Patch from Rob Taylor
-+ to free a D-Bus allocated string with dbus_free () instead of
-+ g_free ().
-+
-+2006-01-27 Iain Holmes <iain at openedhand.com>
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_dispose): Protect the dispose
-+ method from being called multiple times.
-+
-+2006-01-19 Robert McQueen <robot101 at debian.org>
-+
-+ * glib/dbus-binding-tool-glib.c: Patch from Rob Taylor
-+ <rob.taylor at collabora.co.uk> to add support for generating bindings
-+ to arrays that are represented as GPtrArrays rather than GArrays (ie
-+ size-variable things, such as strings, objects, structs, etc).
-+
-+2006-01-05 Robert McQueen <robot101 at debian.org>
-+
-+ * dbus/dbus-glib.h, glib/dbus-gproxy.c: Patch from Ricardo Kekki
-+ <ricardo.kekki at movial.fi> to make it possible to inherit from
-+ DBusGProxy, by splitting the DBusGProxy struct into a public part and
-+ a private part, and moving the setting of the DBusGProxyManager into a
-+ connection property, allowing proper GObject construction.
-+
-+2006-01-05 Robert McQueen <robot101 at debian.org>
-+
-+ * glib/dbus-binding-tool-glib.c: Patch from Ricardo Kekki
-+ <ricardo.kekki at movial.fi> to make dbus-binding-tool heed C symbol name
-+ annotations when generating glib client bindings.
-+
-+2005-12-19 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-shared.h: Call it shared constants instead of shared macros
-+
-+ * dbus/dbus-protocol.h: add DOxygen markup to quiet warnings
-+
-+2005-12-19 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-shared.h: add DOxygen markup to quiet warnings
-+
-+2005-12-19 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-macros.h: correct DOxygen end of section (s/}@/@})
-+
-+2005-12-19 Ross Burton <ross at openedhand.com>
-+
-+ * doc/dbus-tutorial.xml:
-+ Document the Glib client-side bindings, and list all possible annotations.
-+
-+2005-12-19 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/bus.c (dbus_bus_release_name): Add documentation
-+
-+2005-12-06 Robert McQueen <robot101 at debian.org>
-+
-+ * python/service.py: s/sucessful/successful/ so we're allocating to
-+ and reading from the same variable. Oops.
-+
-+2005-11-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * Released 0.60
-+
-+2005-11-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * test/qt/Makefile.am: build from srcdir
-+
-+ * qt/qtconnection.cpp (requestName): Changed PROHIBIT_REPLACE to ALLOW_REPLACE
-+ Note - this code is wrong and needs to be fixed by the Qt binding
-+ developers. The flags should be treated as bitfields and not enums.
-+
-+ * qt/qtconnection.h: Change ProhibitReplace to AllowReplace
-+
-+2005-11-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-list.c (_dbus_list_insert_after_link, _dbus_list_insert_after,
-+ link_after): remove #ifdef DBUS_BUILD_TESTS since we use these methods
-+ in production code
-+
-+2005-11-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_read_write): Add new
-+ method for getting messages off the bus in the absence of a
-+ mainloop. This method is much like
-+ dbus_connection_read_write_dispatch except it does not dispatch
-+ the messages to a registered filter function. Instead it
-+ allows a developer to process messages by directly popping
-+ them off the bus.
-+
-+2005-11-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * bus/desktop-file.c (parse_key_value): Ignore locales allowing
-+ the parser to continue instead of returning error
-+ (bus_desktop_file_load): Do not free parser data when
-+ parse_section_start or parse_key_value fails because it was
-+ already freed by parser_free (patch from Carlos Garcia Campos
-+ <carlosgc at gnome.org>)
-+
-+2005-11-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-auth.c, dbus/dbus-connection.c, dbus/dbus-keyring.c,
-+ dbus/dbus-server-debug-pipe.c, glib/dbus-binding-tool-glib.c
-+ glib/dbus-glib-tool.c, glib/dbus-gparser.c, glib/dbus-gproxy.c
-+ test/test-segfault.c, test/test-utils.c,
-+ test/glib/test-dbus-glib.c, tools/dbus-cleanup-sockets.c
-+ tools/dbus-launch.c, tools/dbus-tree-view.c, tools/dbus-viewer.c:
-+ Various cleanup of dead code and compiler warnings (patch from
-+ Kjartan Maraas <kmaraas at gnome.org>)
-+
-+2005-11-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * glib/dbus-gmain.c (connection_setup_add_watch): plugged a leak
-+ (patch from Carlos Garnacho Parro <carlosg at gnome.org>
-+
-+2005-11-27 Robert McQueen <robot101 at debian.org>
-+
-+ * python/dbus_bindings.pyx: Repair my previous commit which reverted
-+ part of the preceding one. Oops. Merge patch by Johan Hedberg
-+ <johan.hedberg at nokia.com> to fix marshalling of 16-bit integer values
-+ on big-endian platforms.
-+
-+ * test/python/test-client.py: Add some 16-bit integers to the test
-+ values.
-+
-+2005-11-27 Carlos Garcia Campos <carlosgc at gnome.org>
-+
-+ * glib/dbus-gobject.c: Append a GValue instead of a basic type in
-+ method return message for property getters
-+
-+2005-11-27 Robert McQueen <robot101 at debian.org>
-+
-+ * python/dbus_bindings.pyx: Fix a bug where doing a strict append
-+ with type v of an instance of dbus.Variant(foo, type='x') caused
-+ it to be boxed twice before sending over the bus.
-+
-+ * python/dbus_bindings.pyx, python/service.py,
-+ test/python/test-client.py: Update the constants for the new
-+ request_name flags, and update comments/test cases now that queueing
-+ is the default action.
-+
-+2005-11-22 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * configure.in:
-+ - Change version to 0.60 for impending release
-+ - upped the sonames because of ABI and API breakage
-+
-+2005-11-22 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * configure.in: Add test/name-test/Makefile to the generated
-+ Makefile list
-+
-+ * dbus/dbus-shared.h (#define DBUS_NAME_FLAG_ALLOW_REPLACEMENT):
-+ New flag which replaces DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT
-+ (#define DBUS_NAME_FLAG_DO_NOT_QUEUE): New flag for specifying
-+ not to queue an ower if it can't be the primary owner
-+
-+ * bus/bus.h: Add new internal BusOwner struct
-+
-+ * bus/driver.c (bus_driver_handle_hello): Send flags (0 for default)
-+ to bus_registry_ensure and don't set the prohibit_replacement flag
-+ since they are now set per BusOwner and not per name.
-+ (bus_driver_handle_list_queued_owners): bus method (ListQueuedOwners)
-+ that returns the list of connections in a name's connection queue
-+
-+ * bus/services.c (struct BusService): remove prohibit_replacement field
-+ (struct BusOwner): new struct for keeping track of queued connections
-+ and their associated flags for the queue
-+ (struct BusRegistry): add a BusOwner memory pool
-+ (bus_registry_new): initialize the BusOwner memory pool
-+ (bus_registry_unref): free the BusOwner memory pool
-+ (_bus_service_find_owner_link): new internal method for
-+ searching the queue for a specific connection
-+ (bus_owner_set_flags): new method for adding setting the flags on a
-+ bus owner
-+ (bus_owner_new): new method that creates a BusOwner object from the
-+ pool and sets its flags
-+ (bus_owner_ref, bus_owner_unref): ref counting for BusOwner objects
-+ (bus_registry_ensure): Add the flags parameter
-+ (bus_registry_acquire_service): Switch from using raw connections to
-+ using the BusOwner struct
-+ Add new state machine for dealing with the new set of flags
-+ (bus_registry_set_service_context_table, struct OwnershipCancelData,
-+ cancel_ownership, free_ownership_cancel_data,
-+ add_cancel_ownership_to_transaction, struct OwnershipRestoreData,
-+ restore_ownership, free_ownership_restore_data,
-+ add_restore_ownership_to_transaction): Switch to using BusOwner
-+ instead of raw connections
-+ (bus_service_add_owner): Add flags parameter
-+ Switch to using BusOwner instead of raw connections
-+ Add state machine for dealing with the new set of flags
-+ (bus_service_swap_owner): Swaps the first and second owners in the
-+ queue. Used to make sure proper signals are sent when a service looses
-+ or gains primary ownership. We never insert an owner at the top of the
-+ queue. Instead we insert it in the second position and then swap.
-+ (bus_service_remove_owner): Remove the owner from the queue sending
-+ out the NameLost and NameOwnerChanged signals if the we were the
-+ primary owner
-+ (bus_service_get_primary_owners_connection): New method that extracts
-+ the connection from the primary owner
-+ (bus_service_get_primary_owner): Returns the BusOwner instead of the
-+ connection
-+ (bus_service_get_allow_replacement): Changed from the old
-+ bus_service_get_prohibit_replacement method. Checks the flags of the
-+ primary owner and returns if it can be replaced or not
-+ (bus_service_set_prohibit_replacement): removed
-+ (bus_service_has_owner): returns TRUE if and owner with
-+ the specified connection exists in the queue
-+
-+ * dbus/dbus-bus.c (dbus_bus_connection_get_unique_name): New helper
-+ method that only compiles if tests are enabled. Allows us to get the
-+ unique name of a connection so we can check it against the queue when
-+ doing regression tests
-+
-+ * bus/activation.c (bus_activation_send_pending_auto_activate),
-+ bus/dispatch.c (bus_dispatch),
-+ bus/driver.c (bus_driver_handle_get_service_owner,
-+ bus_driver_handle_get_connection_unix_user,
-+ bus_driver_handle_get_connection_unix_process_id,
-+ bus_driver_handle_get_connection_selinux_security_context),
-+ bus/signals.c (connection_is_primary_owner):
-+ use bus_service_get_primary_owners_connection instead of
-+ bus_service_get_primary_owner
-+
-+ * dbus/dbus-sysdeps.c (_dbus_connect_unix_socket,
-+ _dbus_listen_unix_socket): Calculate the length of the socket
-+ path and use that instead of using a fixed length which was
-+ causing socket names to contain many trailing Nul bytes.
-+
-+ * dbus/dbus-glib-lowlevel.h, glib/dbus-gobject.c
-+ (dbus_g_method_get_sender): New method for extracting the sender
-+ from a DBusGMethodInvocation
-+ (dbus_g_method_return_get_reply): changed name to
-+ dbus_g_method_get_reply
-+ (dbus_g_method_return_send_reply): changed name to
-+ dbus_g_method_send reply
-+
-+ * doc/dbus-specification.xml: New docs that describe how the new
-+ queueing system works and talks about the changes to the how
-+ we specify socket names
-+
-+ * glib/examples/example-service.c,
-+ glib/examples/example-signal-emitter.c,
-+ glib/examples/statemachine/statemachine-server.c:
-+ Changed the RequestName flags to the new system
-+
-+ * test/name-test/ (test-names.c, run-test.sh, Makefile.am): New
-+ regression test suite for testing various states of the new
-+ queueing system
-+
-+2005-11-15 Robert McQueen <robot101 at debian.org>
-+
-+ * dbus/dbus-glib-lowlevel.h, glib/dbus-gobject.c: Patch from Rob
-+ Taylor to add two methods, dbus_g_method_return_get_reply and
-+ dbus_g_method_return_send_reply, to allow you to get the reply
-+ message from a DBusGMethodInvocation, append arbitrary stuff to it,
-+ and send it. The GLib bindings can't marshal a return value of
-+ something like a(s) if the array is empty - ultimately they should be
-+ made to heed the signature of the out arguments as the Python bindings
-+ now can, but this is a workable interim solution which might have
-+ other applications.
-+
-+2005-11-15 Robert McQueen <robot101 at debian.org>
-+
-+ * bus/driver.c, bus/services.c, bus/services.h: Add a ReleaseName
-+ method to org.freedesktop.DBus to release a bus name or give up
-+ waiting in the queue for it.
-+
-+ * dbus/dbus-bus.c, dbus/dbus-bus.h, dbus/dbus-shared.h: Add a
-+ dbus_bus_release_name method to send the ReleaseName method calls.
-+ Add constants for the return values to dbus/dbus-shared.h.
-+
-+ * doc/dbus-specification.xml: Document the new ReleaseName method
-+ in the specification.
-+
-+ * python/dbus_bindings.pyx: Add a low-level python binding for the
-+ release name method.
-+
-+ * python/exceptions.py, python/service.py: Make freeing BusName
-+ objects release the name. Add a NameExistsException, and fix a
-+ bug with creating UnknownMethodException.
-+
-+ * test/python/test-client.py: Add tests for freeing BusName
-+ objects causing names to be released.
-+
-+2005-11-14 Robert McQueen <robot101 at debian.org>
-+
-+ * python/service.py: Include the traceback in the error reply when we
-+ send an exception over the bus. _BEST_ _PATCH_ _EVER_
-+
-+2005-11-14 David Zeuthen <davidz at redhat.com>
-+
-+ Patch from Timo Hoenig <thoenig at suse.de>.
-+
-+ * bus/bus.c: I've recently investigated why the automatic reload
-+ of configuration files does not work as expected.
-+
-+ Currently, reloading configuration files does only work when
-+ running dbus-daemon with --nodaemon. If we are running as daemon
-+ we're hitting a dnotify bug once we fork the process.
-+
-+ We're initializing the dnotify fds before calling fork(). Once
-+ the child process forked it does still have the fds (and they
-+ still show up in /proc/`pidof dbus-daemon`/fd/) but we're not
-+ getting SIGIO as changes are made to the configuration files.
-+
-+ The attached patch moves the initialization of the dnotify fds to
-+ process_config_postinit(). This is safe for all current code
-+ paths and solves the dnotify disfunction. If we're running
-+ dbus-daemon as daemon the fds for dnotify are now being
-+ initialized after fork() for the child process.
-+
-+ * configure.in: The current configure.in check for dnotify probes
-+ 'x$target_os' for being 'xlinux-gnu'. I've changed the check to
-+ match for 'xlinux', too. Additionally I have adapted the configure
-+ option's style to match with the others.
-+
-+2005-11-14 Robert McQueen <robot101 at debian.org>
-+
-+ * python/decorators.py, python/service.py: Add a new argument to the
-+ dbus.service.method decorator called sender_keyword, which if set,
-+ specifies the name of an argument which will be provided the bus
-+ name of the method caller.
-+
-+ * test/python/test-client.py, test/python/test-service.py: Add a
-+ method and test to check the sender_keyword functionality.
-+
-+2005-11-07 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * bus/driver.c (bus_driver_handle_reload_config): Make sure we send an
-+ empty reply so blocking calls don't block forever (Patch from Sjoerd
-+ Simons <sjoerd at luon.net>)
-+
-+ * AUTHORS: Add Robert McQueen for his work on the Python
-+ Bindings and other parts of D-Bus
-+
-+2005-11-07 Robert McQueen <robot101 at debian.org>
-+
-+ * python/decorators.py: Change emit_signal function to use the
-+ signature annotation of the signal when marhsalling the arguments from
-+ the service. Fix a bug where the code checking signature length
-+ against argument length referenced the wrong variable.
-+
-+ * python/introspect_parser.py: Avoid adding the type signature of
-+ signal arguments to any methods which occur after them in the
-+ introspection data (!) by making the parser a little more careful
-+ about its current state.
-+
-+ * python/service.py: Remove debug prints from last commit (again :D).
-+
-+ * test/python/test-client.py, test/python/test-service.py: Add test
-+ signals with signature decorators to test the strict marshalling code
-+ gives errors at the right time. Could do with checking the signals
-+ actually get emitted too, given that the test does nothing with
-+ signals at the moment...
-+
-+2005-11-07 Robert McQueen <robot101 at debian.org>
-+
-+ * python/_dbus.py: Add WeakReferenceDictionary cache of dbus.Bus
-+ instances to stop madness of creating new instances representing
-+ the same bus connection all the time, rendering any tracking of
-+ match rules and bus names quite meaningless. Caught a bug where
-+ the private argument to SessionBus() and friends was being passed
-+ in as use_default_mainloop by mistake. Still some problems with
-+ multiple dbus_binding.Connection instances representing the same
-+ low-level connection (eg when you use both SessionBus() and
-+ StarterBus() in same process), but it's a lot better now than it
-+ was.
-+
-+ * python/dbus_bindings.pyx: Add constants with the return values
-+ for bus_request_name().
-+
-+ * python/service.py: Store bus name instances in a per-dbus.Bus cache
-+ and retrieve the same instances for the same name, so deletion can be
-+ done with refcounting. Also now throws some kind of error if you
-+ don't actually get the name you requested, unlike previously...
-+
-+ * test/python/test-client.py: Add tests for instance caching of buses
-+ and bus name objects.
-+
-+2005-11-04 Robert McQueen <robot101 at debian.org>
-+
-+ * python/dbus_bindings.pyx, test/python/test-client.py: Fix
-+ marshalling of boolean values. Add some booleans to the values in
-+ the test client.
-+
-+ * python/decorators.py, python/service.py: Add an 'async_callbacks'
-+ argument to the dbus.service.method decorator, which allows you to
-+ name arguments to take two callback functions for replying with
-+ return values or an exception.
-+
-+ * test/python/test-client.py, test/python/test-service.py: Add test
-+ case using asynchronous method reply functions, both return values and
-+ errors, and from within both the function itself and from a mainloop
-+ callback.
-+
-+ * python/decorators.py, python/service.py: Perform checking that the
-+ number of method/signal arguments matches the number of types in the
-+ signature at class loading time, not when you first introspect the
-+ class.
-+
-+ * python/service.py: Remove debug print left by the last commit.
-+
-+2005-11-03 Robert McQueen <robot101 at debian.org>
-+
-+ * python/service.py: Heavy refactoring of method invocation, with
-+ hopefully no effect on functionality. Nuked _dispatch_dbus_method_call
-+ in favour of a new _message_cb that uses seperate functions for
-+ looking up the method to call, marshalling the return values, and
-+ sending exceptions as errors, and is easier to follow as a
-+ consequence. Fixes some corner cases about returning things that
-+ don't match your declared out_signature, allows exceptions to define
-+ _dbus_error_name and have it be sent over the bus as the error name,
-+ and paves the way for cool stuff like heeding the message no reply
-+ flag, asynchronous method implementations, informing the method of the
-+ sender, and including backtraces in the error messages.
-+
-+ * test/python/test-client.py: Catch and print exceptions thrown in the
-+ async callback tests, rather than passing them to the low-level
-+ bindings to be ignored in a noisy and frustrating manner.
-+
-+2005-11-03 Robert McQueen <robot101 at debian.org>
-+
-+ * python/_dbus.py, python/proxies.py, python/service.py: Add __repr__
-+ functions to dbus.Bus, dbus.service.BusName and dbus.service.Object,
-+ tweak others to be consistent.
-+
-+ * test/python/test-client.py: Tweak output of testInheritance.
-+
-+2005-10-29 Robert McQueen <robot101 at debian.org>
-+
-+ * python/service.py: Major changes to allow multiple inheritance
-+ from classes that define D-Bus interfaces:
-+
-+ 1. Create a new Interface class which is the parent class of
-+ Object, and make the ObjectType metaclass into InterfaceType.
-+
-+ 2. Patch written with Rob Taylor to replace use of method_vtable
-+ with code that walks the class's __MRO__ (method resolution order)
-+ to behave like Python does when invoking methods and allow
-+ overriding as you'd expect. Code is quite tricky because
-+ we have to find two methods, the one to invoke which has the
-+ right name and isn't decorated with the /wrong/ interface,
-+ and the one to pick up the signatures from which is decorated
-+ with the right interface.
-+
-+ The same caveats apply as to normal multiple inheritance -
-+ this has undefined behaviour if you try and inherit from two
-+ classes that define a method with the same name but are
-+ decorated with different interfaces. You should decorate
-+ your overriding method with the interface you want.
-+
-+ 3. Replace grungy introspection XML generation code in the metaclass
-+ with dictionaries that cope correctly with multiple inheritance
-+ and the overriding of methods. This also uses the signature
-+ decorations to provide correct introspection data, including
-+ the debut appearance of the types of your return values. :D
-+
-+ * test/python/test-client.py, test/python/test-service.py: Add a test
-+ case to try invoking an method that overrides one inherited from a
-+ D-Bus interface class.
-+
-+2005-10-29 Robert McQueen <robot101 at debian.org>
-+
-+ * python/dbus_bindings.pyx: Tweak 'raise AssertionError' to assert().
-+ Add checking for the end of struct character when marshalling a
-+ struct in MessageIter.append_strict.
-+
-+ * python/examples/example-service.py,
-+ python/examples/gconf-proxy-service.py,
-+ python/examples/gconf-proxy-service2.py: Update to use gobject
-+ mainloop directly rather than appearing to depend on gtk.
-+
-+ * python/test/test-client.py, python/test/test-server.py: Remove
-+ obsolete and broken test scripts for old bindings. We have up to date
-+ and working tests in test/python/.
-+
-+2005-10-29 Robert McQueen <robot101 at debian.org>
-+
-+ * python/decorators.py: Add optional arguments to the method and
-+ signal decorators to allow you to specify the signature of arguments
-+ and return values. Preserve the doc strings of signal functions in the
-+ decorated version, for pydoc and friends.
-+
-+ * python/dbus_bindings.pyx, python/proxies.py: Replace the
-+ parse_signature_block function with an iterable dbus.Signature()
-+ type. Fix a bug in MessageIter.append_strict where you could append
-+ anything by claiming it was a string.
-+
-+ * python/service.py: Use the out_signature decoration on methods to
-+ marshal return values, meaning you no longer require dbus.Array()
-+ or dbus.Dictionary() to indicate the type when returning empty
-+ arrays or dictionaries. Fix a bug where exceptions which are defined
-+ in __main__ are not turned into error replies.
-+
-+ * test/python/test-client.py, test/python/test-service.py: Add test
-+ for correct marshalling of return values according to out_signature.
-+ Fix a bug in the async call test where the error_handler is missing a
-+ self argument.
-+
-+2005-10-29 Robert McQueen <robot101 at debian.org>
-+
-+ * glib/Makefile.am, glib/examples/Makefile.am,
-+ glib/examples/statemachine/Makefile.am: Merge patch from Ubuntu by
-+ Daniel Stone to replace explicit calls to libtool with $(LIBTOOL).
-+
-+ * test/python/.cvsignore: Add run-with-tmp-session-bus.conf.
-+
-+ * tools/dbus-monitor.1, tools/dbus-monitor.c: Merge dbus-monitor patch
-+ from Ubuntu by Daniel Silverstone to allow specifying match rules on
-+ the command line.
-+
-+2005-10-27 Ross Burton <ross at openedhand.com>
-+
-+ * dbus/dbus-marshal-header.c:
-+ Remove dead code.
-+
-+ * glib/dbus-gobject.c:
-+ Stop compiler warning.
-+
-+2005-10-25 Ross Burton <ross at openedhand.com>
-+
-+ * dbus/dbus-auth.c:
-+ * dbus/dbus-server-unix.c:
-+ * dbus/dbus-transport-unix.c:
-+ * glib/dbus-gmain.c:
-+ * glib/dbus-gobject.c:
-+ Add some const keywords.
-+
-+2005-10-25 Ross Burton <ross at openedhand.com>
-+
-+ * doc/dbus-specification.xml:
-+ Document the NoReply annotation.
-+
-+ * glib/dbus-binding-tool-glib.h:
-+ * glib/dbus-binding-tool-glib.c:
-+ Respect the NoReply annotation.
-+
-+2005-10-24 Robert McQueen <robot101 at debian.org>
-+
-+ * python/dbus_bindings.pyx (String, MessageIter): make D-Bus strings
-+ derive from unicode instead of str, and encode/decode UTF-8 when
-+ marshalling/unmarshalling bus messages
-+
-+ * python/introspect_parser.py: encode introspection data as UTF-8
-+ before passing the buffer into libxml2
-+
-+ * test/python/test-client.py: add unicode test strings
-+
-+ * test/data/valid-service-files/.cvsignore, test/python/.cvsignore:
-+ ignore generated python test files
-+
-+2005-10-17 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * glib/dbus-gvalue-utils.c (hash_free_from_gtype): handle gdouble
-+ and G_TYPE_VALUE_ARRAY (DBUS_TYPE_STRUCT)
-+ (gvalue_from_hash_value, hash_value_from_gvalue): handle gdouble
-+
-+ * glib/dbus-gvalue.c (dbus_gvalue_to_signature): add missing
-+ DBUS_STRUCT_BEGIN_CHAR and DBUS_STRUCT_END_CHAR charaters
-+ when constructing struct signatures
-+
-+ * python/_dbus.py (Bus): handle private connections using the
-+ private keyword in the constructor. defaults to private=False
-+ (Bus::close): new method to close a connection to the bus
-+
-+ * python/dbus_bindings.pyx (Connection::close): renamed method
-+ was previously called disconnect
-+ (bus_get): now supports getting a private connection
-+
-+ * python/proxies.py (ProxyMethod::__call__): check if ignore_reply
-+ keyword is set to True. if it is, execute the method without waiting
-+ for a reply
-+ (ProxyObject::_introspect_execute_queue): new method for executing
-+ all the pending methods that were waiting for the introspect to
-+ finish. this is called when introspect either succeeds or fails
-+ (ProxyObject::_introspect_error_handler): call queued methods
-+
-+2005-10-14 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx (MessageIter::append_strict): check for
-+ STRUCT_BEGIN not TYPE_STRUCT in indicate we are marshalling a struct
-+
-+ * python/service.py (Object::_message_cb): handle exceptions correctly
-+ by sending them over the wire to the calling app. This makes sure
-+ the client returns immediately instead of waiting the 15 seconds to
-+ timeout.
-+
-+ * test/python/test-client.py (TestDBusBindings::testBenchmarkIntrospect):
-+ Add a test to benchmark how long it takes to introspect a service and
-+ call a method which returns a large element (pretty fast)
-+
-+ * test/python/test-service.py (TestObject::GetComplexArray): new test
-+ method which pushes a lot of data
-+
-+2005-10-13 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/service.py(ObjectType::_reflect_on_signal, _reflect_on_method):
-+ reclaim memory outside of the loop and use del istead of just setting
-+ the key to None
-+
-+2005-10-13 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/service.py (ObjectType::_reflect_on_signal): Always close
-+ signal tag even when there are no arguments
-+
-+2005-10-13 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * configure.in: Set mono, mono-docs and Qt3 to default
-+ to no instead of auto when building. These bindings do not
-+ have full time maintainers and will not be supported for the
-+ 1.0 release.
-+
-+2005-10-12 John (J5) Palmieri <johnp at redhat.com>
-+
-+ patches from Michael Krivoruchko <misha at sun.com>:
-+
-+ * dbus/dbus-connection.c (_dbus_connection_queue_received_message_link,
-+ _dbus_connection_message_sent,
-+ _dbus_connection_send_preallocated_unlocked_no_update,
-+ _dbus_connection_pop_message_link_unlocked): handle the case when path
-+ is NULL when calling _dbus_verbose
-+
-+ * configure.in: check for functions getpeerucred and getpeereid
-+
-+ * dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): provides
-+ support of auth EXTERNAL on Solaris 10+ (getpeerucred), FreeBSD 4.6+,
-+ OpenBSD 3.0+ and FreeBSD 5.0+ as well as MacOSX 10.2+ (getpeereid).
-+ Patch was only tested on Solaris 10 x86 so it might be issues
-+ with other platforms (i.e. BSDs and MacOSX)
-+
-+
-+2005-10-05 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * glib/dbus-gvalue.c (marshal_variant): call _dbus_gvalue_marshal
-+ instead of marshal basic so we can handle recursive types in a variant
-+
-+ * test/glib/test-dbus-glib.c: Add test for marshaling recurive types
-+ in variants
-+
-+ * test/glib/test-service-glib.c, test-service-glib.xml
-+ (my_object_echo_variant [EchoVariant],
-+ my_object_process_variant_of_array_of_ints123
-+ [ProcessVariantOfArrayOfInts123]):
-+ Add two test methods
-+
-+ * python/introspect_parser.py: New module for parsing introspect
-+ data.
-+
-+ * python/dbus_bindings.pyx:
-+ (various places): when throwing errors fix to use errormsg instead
-+ of message local variable because Pyrex can get confused with other
-+ message variables (initial patch by Robert McQueen
-+ <robert.mcqueen at collabora.co.uk>)
-+ (MessageIter::parse_signature_block): new method for getting the next
-+ block in a signiture.
-+ (MessageIter::append_strict): new method for appending values strictly
-+ using the passed in signature instead of guessing at the type
-+ (MessageItter:: append_dict, append_struct, append_array): use
-+ signatures to marshal children if the signature is available
-+
-+ * python/exceptions.py (IntrospectionParserException): new exception
-+
-+ * python/proxies.py (ProxyMethod::__call__): Marshal args with
-+ introspected signatures if available, else we fall back to the
-+ old way of doing things.
-+ (ProxyObject::_introspect_reply_handler ): parse introspection data
-+
-+ * python/service.py (ObjectType::_reflect_on_method): Properly
-+ terminate <method> if there are no args in the reflection data
-+
-+ * test/python/test-client.py: add tests for talking with the GLib
-+ test server. This gives us better coverage for introspection since
-+ python to python will always generate arguments as variants. It also
-+ allows us to test the robustness of the GLib bindings and interlanguage
-+ communications.
-+
-+
-+2005-10-03 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * bus/driver.c (bus_driver_handle_introspect): Add signals
-+ to the introspect data. (patch from Daniel P. Berrange
-+ <dan at berrange.com>)
-+
-+ * bus/dispatch.c (check_existent_ping): Add testcase for Ping
-+
-+ * dbus/dbus-connection.c (_dbus_connection_peer_filter,
-+ _dbus_connection_run_builtin_filters): Changed these to
-+ be unlock_no_update functions and call
-+ _dbus_connection_send_unlocked_no_update instead of
-+ dbus_connection_send to avoid locking errors.
-+
-+ * doc/TODO: Removed the make Ping test TODO
-+
-+2005-09-26 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/Python.pyx: Fixed memory leaks when throwing errors.
-+ We now copy the message from a DBusError and then free
-+ the error object befor throwing the error
-+
-+ * glib/dbus-glib-tool.c: removed extra comma at the end of the
-+ DBusBindingOutputMode enum which was causing a warning.
-+ #include <time.h> so using time_t is explicitly defined
-+
-+2005-09-26 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * Integrate patches from Lennart Poettering <mzsqb at 0pointer.de>:
-+ - dbus/dbus-bus.c
-+ (internal_bus_get): new method that take over the heavy lifting
-+ of dbus_bus_get and adds the ability to get a private connection
-+ to the bus
-+ (dbus_bus_get): wrapper to internal_bus_get that provides the same
-+ interface as in previous versions
-+ (dbus_bus_get_private): new method that is a wrapper to
-+ internal_bus_get to get a private connection to the bus
-+
-+ - dbus/dbus-bus.h
-+ (dbus_bus_get_private): add as a public libdbus interface
-+
-+ - dbus-1.pc.in: output system_bus_default_address and
-+ sysconfdir variables so apps can use them when compiling
-+
-+2005-09-23 Harald Fernengel <harry at kdevelop.org>
-+ * dbus/qt: New Qt bindings
-+
-+2005-09-12 Waldo Bastian <bastian at kde.org>
-+
-+ * dbus/dbus-marshal-validate.c,
-+ doc/dbus-specification.xml, test/Makefile.am,
-+ test/test-names.c: allow hyphens in bus names.
-+
-+2005-09-11 Mark McLoughlin <mark at skynet.ie>
-+
-+ * test/data/auth/fallback.auth-script: we don't
-+ retry the EXTERNAL method when we know its going
-+ to fail anymore.
-+
-+2005-09-11 Mark McLoughlin <mark at skynet.ie>
-+
-+ * dbus/dbus-connection-internal.h: rename
-+ (add|remove|toggle)_(watch|timeout) to unlocked()
-+
-+ * dbus/dbus-connection.c: ditto.
-+
-+ * dbus/dbus-timeout.c, dbus/dbus-transport-unix.c:
-+ Update some callers for the renaming.
-+
-+2005-09-10 Mark McLoughlin <mark at skynet.ie>
-+
-+ * dbus/dbus-auth.c: (record_mechanisms): don't
-+ retry the first auth mechanism because we know
-+ we're just going to get rejected again.
-+
-+ * dbus/dbus-keyring.c: (_dbus_keyring_reload):
-+ Fix thinko ... and what a nasty little bugger to
-+ track down you were ...
-+
-+ * dbus/dbus-connection.c:
-+ (_dbus_connection_add_watch),
-+ (_dbus_connection_remove_watch): add note about
-+ these needing the connection to be locked.
-+ (_dbus_connection_get_dispatch_status_unlocked):
-+ set status to DATA_REMAINS when we queue the
-+ disconnected message.
-+
-+ * bus/dispatch.c:
-+ (bus_dispatch): fix warning.
-+ (check_existent_service_no_auto_start):
-+ Expect ChildSignaled error too.
-+ (check_existent_hello_from_self): fix another
-+ couple of warnings.
-+
-+2005-09-08 Joe Shaw <joeshaw at novell.com>
-+
-+ Patches from James Willcox <snorp at snorp.net>
-+
-+ * mono/Makefile.am: Add Int16.cs and UInt16.cs
-+
-+ * mono/DBusType/Array.cs: Handle multidimensional arrays, and
-+ support array "out" parameters.
-+
-+ * mono/DBusType/Int16.cs, mono/DBusType/UInt16.cs: New files,
-+ for 16-bit int support.
-+
-+2005-09-06 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * Released 0.50
-+
-+ * Patch from Steve Grubb:
-+ - bus/activation.c (bus_activation_service_reload_test): clean up
-+ some indentation
-+ - dbus/dbus-keyring.c (_dbus_keyring_reload): fix conditional
-+ - dbus/dbus-message-factory.c (generate_special): fix a couple of
-+ buffer overflows in the test suite. This is non critical because
-+ it can not be exploited and this code is only run when doing a
-+ make check.
-+
-+ * Patch from Yaakov Selkowitz: Build fixes for Cygwin
-+ - configure.in: Don't check and link against kdecore, only qt headers
-+ - dbus/Makefile.am: Add -no-undefined to libdbus_1_la_LDFLAGS
-+ - gcj/org/freedesktop/dbus/Makefile.am:
-+ add libdbus_gcj_1_la_LDFLAGS = -no-undefined
-+ - glib/Makefile.am: Add -no-undefined to libdbus_glib_1_la_LDFLAGS
-+ and $(DBUS_GLIB_LIBS) to dbus_binding_tool_LDADD
-+ - qt/Makefile.am: Add -no-undefined to libdbus_qt_1_la_LDFLAGS
-+ - tools/Makefile.am: Add platform extentions to binaries
-+ (i.e. .exe on windows)
-+
-+ * configure.in:
-+ - Make it so if no suitable version of python is found we only
-+ disable building python instead of exiting the configure script
-+ - Require version 2.4 of glib for glib bindings
-+ - Up version to 0.50
-+
-+ * python/__init__.py: Sync version with libdbus to (0,50,0)
-+
-+2005-09-05 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-object-tree.c (find_subtree_recurse):
-+ a couple of optimizations (bug #710):
-+ - do a binary search in the tree
-+ - insert a new child at the right place directly, no need for
-+ qsort anymore
-+ - do the "double alloc" thing when allocating children
-+
-+2005-08-31 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/Makefile.am: Break on pyrexc errors instead of ignoring them
-+
-+ * python/dbus_bindings.pyx: Memory management foo
-+ (global): remove hacky _user_data_references global list
-+ (GIL_safe_cunregister_function_handler): userdata now stuffed into
-+ tuples. Unref user_data
-+ (GIL_safe_cmessage_function_handler): userdata now stuffed into tuples
-+ (Connection::__del__): Remove and replace with __dealloc__ method
-+ (Connection::add_filter): Stuff user_data into a tuple. Use Py_INCREF
-+ to keep tuple from being deallocated instead of the global var hack
-+ (Connection::register_object_path): Stuff user_data into a tuple.
-+ Use Py_INCREF to keep tuple from being deallocated instead of the
-+ global var hack
-+ (Connection::register_fallback): Stuff user_data into a tuple.
-+ Use Py_INCREF to keep tuple from being deallocated instead of the
-+ global var hack
-+ (GIL_safe_pending_call_notification): Don't unref the message
-+ because it gets unreffed when going out of scope. Py_XDECREF
-+ the user_data
-+ (PendingCall::__del__): Remove and replace with __dealloc__ method
-+ (PendingCall::set_notify): ref the pending call because we will
-+ need it to stick around for when the notify callback gets called
-+ (Message::__del__): Remove and replace with __dealloc__ method
-+
-+ * python/dbus_glib_bindings.pyx (init_gthreads): Changed to
-+ gthreads_init to match up with the dbus call
-+
-+ * python/glib.py (init_threads): Changed to threads_init to match
-+ up with gobject.threads_init(). init_threads is kept for backwards
-+ compat but will most likely be deprecated in the future
-+
-+ * test/python/test-client.py:
-+ - revamp to use Python's unittest functionality
-+ - add async call tests
-+ - setup threads in glib and dbus so we make sure locks are working
-+
-+2005-08-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx
-+ (_pending_call_notification, cunregister_function_handler,
-+ cmessage_function_handler): All callback functions have been rearranged
-+ to workaround a bug in Pyrex when working with the GIL which is Python's
-+ global lock when dealing with threads. They have been split into
-+ a wrapper function (which assumes the name of the old function) and
-+ a _GIL_safe_<function name> function which contains the functionality
-+ of the old function. This ensures that Pyrex does not write code
-+ the lock is released.
-+
-+
-+2005-08-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx (_pending_call_notification): Obtain the
-+ GIL global lock when calling back into Python
-+
-+2005-08-29 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * Release 0.36.2
-+
-+ * Add Havoc's patch that never got applied to HEAD (Bug #2436):
-+
-+ * bus/policy.c (bus_policy_allow_user): change default "user is
-+ allowed" to be "user has same uid as the bus itself"; any
-+ allow/deny rules will override.
-+
-+ * bus/session.conf.in: don't allow all users, since now by default
-+ the user that ran the bus can connect.
-+
-+2005-08-26 Colin Walters <walters at verbum.org>
-+
-+ * tools/dbus-print-message.c (print_message): Flush stdout
-+ after printing a message, so that redirecting to a file, then
-+ hitting Ctrl-C works.
-+
-+2005-08-25 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx: Tracked down a major memleak and fixed it
-+ (EmptyMessage): new class that subclasses Message. This is a workaround
-+ to a Pyrex bug that fails to call __del__ when the Message object goes out
-+ of scope. For some reason subclassing Message fixes this bug
-+ (Bus::send_with_reply_and_block): use EmptyMessage instead of Message
-+ - s/Message(_create=0)/EmptyMessage everywhere else
-+
-+ * test/python/test-{server|client}.py: add the python/.libs directory
-+ to the lookup path so dbus_bindings and dbus_glib_bindings don't
-+ get picked up from the system
-+
-+2005-08-25 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_call): Doc update, thanks
-+ to Ryan Lortie for the suggestion.
-+
-+2005-08-24 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * test/python: Add python regression test
-+
-+ * configure.in: Add test/python/Makefile
-+
-+ * test/Makefile.am: Add the python directory to SUBDIRS
-+
-+2005-08-24 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * Release 0.36.1
-+
-+ * python/_dbus.py:
-+ (Interface::connect_to_signal): propigate keywords for match on args
-+ (Bus::add_signal_receiver): Fix typo s/dbus_inteface/dbus_interface
-+
-+ * python/proxies.py (ProxyObject::connect_to_signal):
-+ propigate keywords for match on args
-+
-+ * Makefile.am: point everything to pyexecdir since python borks
-+ on multilib
-+
-+2005-08-23 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * Release 0.36
-+
-+2005-08-23 Colin Walters <walters at verbum.org>
-+
-+ * test/glib/Makefile.am: Don't multiply-define EXTRA_DIST.
-+
-+2005-08-23 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_glib_bindings.pyx: reorder imports and c definitions
-+ to fix some wranings. We now use dbus_bindings.DBusConnection instead
-+ of defining DBusConnection ourselves.
-+
-+2005-08-18 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus.pth: New path file to fix up problems when installing
-+ c libraries to lib64 and python files to lib.
-+
-+ * python/Makefile.am: install dbus.pth in the correct spot
-+
-+2005-08-17 John (J5) Palmieri <johnp at redhat.com>
-+ * ChangeLog: clean up my last entry a bit
-+
-+ * doc/introspect.xsl: New stylesheet for converting introspection data
-+ into browser renderable xhtml. Contributed by Lennart Poettering.
-+
-+ * doc/introspect.dtd: Fixups in the introspect format from Lennart
-+ Poettering.
-+
-+ * doc/dbus-tutorial.xml:
-+ - Add Colin Walter to the Authors section for authoring the GLib
-+ section
-+ - Add descriptions of the new signature and type functionality
-+ in the Python complex type mapping section
-+ - Add a sidenote on the new args matching functionality in
-+ the Python bindings
-+ - Fixed up some of the examples to use the gobject.MainLoop
-+ instead of gtk.main
-+
-+ * python/_dbus.py:
-+ (Bus::_create_args_dict): New. Converts a hash of arg matches
-+ to a more useable format
-+ (Bus::add_signal_receiver): add a **keywords parameter for catching
-+ arg match parameters
-+ (Bus::remove_signal_receiver): add a **keywords parameter for catching
-+ arg match parameters
-+
-+ * python/matchrules.py:
-+ (MatchTree::exec_matches): Check for arg matches
-+ (SignalMatchRule::add_args_match): New method
-+ (SignalMatchRule::execute): Added args_list parameter as an optimization
-+ so we don't have to marshal the args more than once
-+ (SignalMatchRule::match_args_from_list): New method that checks to see
-+ if the rule's arg matches match an argument list. Only arguments
-+ set in the rule are checked.
-+ (SignalMatchRule::match_args_from_rule): New method that checks to see
-+ if the rule's arg matches match another rule's. All args have to match
-+ in order for this method to return true. If either rule has more args
-+ then it is not a match.
-+ (SignalMatchRule::is_match): Add args match
-+ (SignalMatchRule::repr): Add args to the final output if they exist
-+
-+2005-08-17 Ross Burton <ross at burtonini.com>
-+
-+ * glib/dbus-gproxy.c:
-+ (dbus_g_proxy_call_no_reply): unref the message once sent.
-+ (dbus_g_proxy_call): protect against NULL proxy.
-+
-+2005-08-16 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/__init__.py: Version updated (0, 43, 0)
-+
-+ * python/dbus_bindings.pyx:
-+ - Fixed type objects to have self passed into __init__
-+ - Added the Variant type
-+ - Add the ability to specify types or signatures for Array, Variant
-+ and Dictionary
-+ (Connection::send_with_reply_handlers): return a PendingCall object
-+ (_pending_call_notification): handle the case when an error is returned
-+ without an error message in the body
-+ (MessageIter::get_boolean): return True or False instead of an integer
-+ (MessageIter::python_value_to_dbus_sig): add direct checking of types
-+ and add checks for objects with embeded signatures or types (Array,
-+ Variant and Dictionary)
-+ (MessageIter::append_byte): handle case when the value is a dbus.Byte
-+ (MessageIter::append_dict): handle embeded types or signatures
-+ (MessageIter::append_array): handle embeded types or signatures
-+ (MessageIter::append_variant): new method
-+
-+ * python/proxies.py:
-+ (DeferedMethod): New. Dummy executable object used when queuing calls
-+ blocking on introspection data
-+ (ProxyMethod::__call__): add the timeout keyword for specifying longer
-+ or shorter timeouts for method calls
-+ (ProxyObject): Add first pass at an introspection state machine
-+ (ProxyObject::__init__): Add introspect keyword for turing off an on
-+ introspection.
-+ (ProxyObject::_Introspect): Internal Introspect call that bypasses
-+ the usual mechanisms for sending messages. This is to avoid a deadlock
-+ where the Intospect call would be queued waiting for the Introspect
-+ call to finish ;-)
-+ (ProxyObject::_introspect_reply_handler): New. This method is called
-+ when introspection returns with no error
-+ (ProxyObject::_introspect_error_handler): New. This method is called
-+ when introspection encounters an error
-+ (ProxyObject::__getattr__): Code to handle different introspection
-+ states. Queue async calls or block blocking calls if we are
-+ introspecting. Pass through as normal if we are not or are done with
-+ introspecting.
-+
-+ * python/service.py: Import signal and method from decorators.py
-+
-+ * python/types.py: Add Variant type
-+
-+2005-08-16 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gobject.c (dbus_set_g_error): Don't lose if the
-+ DBusError message is NULL.
-+
-+2005-08-09 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-errors.c: apply patch from Timo Teras to make a
-+ malloc'd copy of the name parameter
-+
-+2005-08-09 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c (dbus_message_set_reply_serial): print
-+ warning if the reply serial is set to 0
-+
-+2005-08-04 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gvalue-utils.h (_dbus_g_type_specialized_builtins_init)
-+ (dbus_g_type_is_fixed, dbus_g_type_fixed_get_size)
-+ (dbus_gvalue_set_from_pointer, dbus_g_hash_table_value_foreach)
-+ (dbus_g_hash_table_insert_values, dbus_g_hash_table_insert_steal_values)
-+ (dbus_gtype_is_valid_hash_key, dbus_gtype_is_valid_hash_value)
-+ (dbus_g_hash_func_from_gtype, dbus_g_hash_free_from_gtype)
-+ (dbus_g_hash_equal_from_gtype, dbus_gvalue_stor, dbus_gvalue_take):
-+ * glib/dbus-gvalue.h (dbus_g_value_types_init)
-+ (dbus_gvalue_demarshal, dbus_gvalue_demarshal_variant)
-+ (dbus_gvalue_demarshal_message, dbus_gvalue_marshal):
-+
-+ Prefix name with _ to ensure they're not exported. All callers
-+ updated.
-+
-+ * glib/dbus-gvalue.c (typecode_to_gtype)
-+ (dbus_typecode_maps_to_basic, basic_typecode_to_gtype)
-+ (signature_iter_to_g_type_dict)
-+ (signature_iter_to_g_type_array)
-+ (dbus_gtype_from_signature_iter, dbus_gtype_from_signature)
-+ (dbus_gtypes_from_arg_signature):
-+ Move to dbus-gsignature.c.
-+
-+ * glib/dbus-binding-tool-glib.c (dbus_binding_tool_output_glib_server): Call
-+ dbus_g_type_specialized_builtins_init instead of dbus_g_value_types_init.
-+ (dbus_binding_tool_output_glib_client): Ditto.
-+
-+ * glib/Makefile.am (DBUS_GLIB_INTERNALS): Add dbus-gsignature.c
-+ and dbus-gsignature.h
-+
-+ * test/glib/test-service-glib.c (my_object_rec_arrays): Delete
-+ unused variable.
-+
-+2005-08-03 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gobject.c: Add tests on hardcoded object info; this should
-+ catch any incompatible changes accidentally made.
-+
-+2005-08-03 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): fix
-+ typo, from Julien Puydt
-+
-+ * bus/connection.c (bus_connection_disconnected): we were always
-+ doing a wait_for_memory due to a buggy loop, found by Timo Hoenig
-+
-+2005-08-01 Colin Walters <walters at verbum.org>
-+
-+ Patch from Joe Markus Clarke:
-+
-+ * glib/dbus-gidl.c (property_info_unref, arg_info_unref): Fix
-+ use-after-free.
-+
-+2005-08-01 Colin Walters <walters at verbum.org>
-+
-+ Patch from Joe Markus Clarke:
-+
-+ * tools/dbus-send.c (main):
-+
-+ Don't use C99 style initializers (bug #3933).
-+
-+2005-08-01 Colin Walters <walters at verbum.org>
-+
-+ Patch from Joe Markus Clarke:
-+
-+ * glib/dbus-gvalue.c (dbus_g_value_types_init):
-+ * glib/dbus-gvalue-utils.c (dbus_g_type_specialized_builtins_init)
-+ * glib/dbus-gobject.c (write_interface):
-+
-+ Don't use C99 style initializers (bug #3933).
-+
-+2005-07-31 Havoc Pennington <hp at redhat.com>
-+
-+ * tools/dbus-viewer.c (load_child_nodes): fix invocation of
-+ dbus_g_proxy_call, fix from Piotr Zielinski bug #3920
-+
-+2005-07-30 Havoc Pennington <hp at redhat.com>
-+
-+ * fix a bunch of Doxygen warnings and mistakes
-+
-+2005-07-30 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_string_parse_uint): remove #ifdef
-+ DBUS_BUILD_TESTS since it's now used in production code
-+
-+2005-07-29 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c (write_junk): initialize the junk
-+ buffer so valgrind doesn't have a breakdown
-+
-+2005-07-29 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/signals.c (bus_signals_test): add match_rule_equal() tests
-+ (match_rule_matches): remove unused arg
-+ (test_matching): add tests for match_rule_matches()
-+
-+ * bus/signals.c (bus_match_rule_parse_arg_match): add ability to
-+ do arg0='foo' arg5='bar' in the match rules
-+ (match_rule_matches): don't match if the arg0='foo' doesn't match.
-+
-+ * dbus/dbus-protocol.h (DBUS_MAXIMUM_MATCH_RULE_ARG_NUMBER): add this
-+
-+2005-07-29 Ross Burton <ross at openedhand.com>
-+
-+ * dbus/dbus-connection.c:
-+ Don't create a DBusCondVar which is never used.
-+
-+2005-07-27 Ross Burton <ross at openedhand.com>
-+
-+ * dbus/dbus-message.c:
-+ Reduce the size of the maximum cached message to 10K.
-+
-+2005-07-25 Ross Burton <ross at openedhand.com>
-+
-+ * glib/dbus-gproxy.c:
-+ Remove matches when all proxies are unregistered.
-+
-+2005-07-24 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gvalue.c (signature_iter_to_g_type_array): Don't require
-+ typedata; recursive arrays won't have it.
-+
-+ * test/glib/test-dbus-glib.c:
-+ * test/glib/test-service-glib.c:
-+ * test/glib/test-service-glib.xml: Add recursive arrays tests.
-+
-+2005-07-20 John (J5) Palmieir <johnp at redhat.com>
-+
-+ * python/_dbus.py, _util.py, decorators.py, extract.py, matchrules.py.
-+ proxies.py, service.py: Cleanup of code after running it through the
-+ pyflakes code checker mostly dealing with undefined names.
-+ (Bug #3828, Patch from Anthony Baxter <anthony at interlink.com.au>)
-+
-+2005-07-17 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * NEWS: Update to 0.35.2
-+
-+2005-07-17 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/_dbus.py: Remove import of the dbus.services
-+ module as it no longer exists (patch from Dimitur Kirov)
-+
-+ * python/service.py (Object::__init__): Fixed typo
-+ s/name/bus_name (patch from Dimitur Kirov)
-+
-+ * python/examples/example-signal-emitter.py: import dbus.glib
-+ to get the main loop and use glib mainloop instead of gtk so
-+ X doesn't have to be running.
-+
-+ * python/examples/example-signal-recipient.py: import dbus.glib
-+ to get the main loop and use glib mainloop instead of gtk so
-+ X doesn't have to be running. Import the decorators module
-+ directly.
-+
-+ * test/glib/Makefile.am: Added DIST_EXTRA files that distcheck
-+ didn't pick up on but are needed to build
-+
-+ * configure.in: upped version to 0.35.2
-+
-+ * bus/driver.c, bus/selinux.c, bus/selinux.h, dbus/dbus-protocol.h:
-+ added Colin Walters' SELinux API rename patch from head
-+ s/unix sercurity context/selinux security context/
-+
-+2005-07-16 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/Makefile.am: dbus_binding.pxd.in should be included
-+ in EXTRA_DIST not dbus_binding.pxd
-+ fix up $(srcdir) hopefully for the last time
-+
-+ * NEWS: Update to 0.35.1
-+
-+2005-07-16 Colin Walters <walters at verbum.org>
-+
-+ * bus/driver.c (bus_driver_handle_get_connection_selinux_security_context): Renamed
-+ from bus_driver_handle_get_connection_unix_security_context. Update for
-+ error usage.
-+ (message_handlers): Update for renames.
-+
-+ * bus/selinux.c (bus_selinux_allows_send): Handle OOM on
-+ _dbus_string_init failure correctly.
-+ (bus_selinux_append_context): Convert SID to context. Append it
-+ as a byte array.
-+ (bus_selinux_shutdown): Handle the case where bus_selinux_full_init
-+ hasn't been called.
-+
-+ * bus/selinux.h: Update prototype.
-+
-+ * dbus/dbus-protocol.h (DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN): Renamed
-+ from DBUS_ERROR_UNIX_SECURITY_CONTEXT_UNKNOWN.
-+
-+2005-07-15 Colin Walters <walters at verbum.org>
-+
-+ * doc/TODO: Add note about convenience wrappers.
-+
-+2005-07-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * NEWS: Update to 0.35
-+
-+2005-07-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * glib/Makefile.am: Add make-dbus-glib-error-switch.sh to EXTRA_DIST
-+ so distcheck doesn't fail
-+
-+ * glib/examples/Makefile.am: Add example-service.xml and
-+ example-signal-emitter.xml to EXTRA_DIST so distcheck doesn't fail
-+
-+ * glib/examples/statemachine/Makefile.am: Add statemachine.xml and
-+ statemachine-server.xml to EXTRA_DIST so distcheck doesn't fail
-+
-+ * python/Makefile.am: Preprend $(srcdir)/ to source files so the
-+ compiler looks in the right places during distcheck
-+
-+2005-07-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * glib/example/Makefile.am: Fix a typo which cause make distcheck
-+ to fail
-+
-+2005-07-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/examples/example-service.py,
-+ python/examples/example-signal-emitter.py: Fixed up examples
-+ for API changes
-+
-+2005-07-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/__init__.py: Upped to version (0,42,0) because of
-+ the API change
-+
-+2005-07-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * ChangeLog: fix date in last entry
-+
-+ * configure.in, bus/system.conf.in: add the ability to configure
-+ the system bus user at compiletime with the --with-dbus-user flag
-+ (patch from Kristof Vansant)
-+
-+2005-07-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * bus/dispatch.c, test/test-service.c: Add testcase
-+ for sending messages to oneself (TODO item).
-+
-+ * python/service.py (class Object): Swap ordering of bus_name
-+ and object_path parameters to better support inheritance.
-+
-+ * doc/dbus-tutorial.xml: change Python docs to reflect change
-+ in parameter ordering and fix the inheritance section.
-+
-+ * doc/TODO: remove sending message to oneself TODO item
-+
-+2005-07-15 Ross Burton <ross at openedhand.com>
-+
-+ * glib/dbus-gproxy.c:
-+ Fix a leak when calling methods via the proxy.
-+
-+2005-07-15 Colin Walters <walters at verbum.org>
-+
-+ * bus/selinux.c (bus_selinux_append_context): Wrap in
-+ HAVE_SELINUX.
-+
-+2005-07-14 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/_dbus.py (Bus::remove_signal_receiver):
-+ don't add a callback to the match if none has been passed in
-+
-+ * python/matchrules.py (SignalMatchTree::remove): if the rule
-+ being matched does not have a callback treat it as a wildcard
-+ fix matching logic
-+
-+ * doc/dbus-tutorial.xml: Add Python tutorial
-+
-+2005-07-14 Colin Walters <walters at verbum.org>
-+
-+ * bus/driver.c
-+ (bus_driver_handle_get_connection_unix_security_context): New function.
-+ (message_handlers): Add.
-+
-+ * bus/selinux.c (bus_selinux_append_context): New function; appends
-+ security context to message.
-+
-+ * bus/selinux.h: Prototype.
-+
-+ * dbus/dbus-protocol.h (DBUS_ERROR_UNIX_SECURITY_CONTEXT_UNKNOWN): New.
-+
-+2005-07-14 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * bus/activation.c: clean up all tabs to be 8 spaces
-+ (bus_activation_activate_service): make sure we clean up
-+ if activation fails
-+
-+ * bus/dispatch.c: clean up all tabs to be 8 spaces
-+ (check_shell_fail_service_auto_start): New function
-+ tests to make sure we get fail properly when trying to auto start a service
-+ with a faulty command line
-+ (check_shell_service_success_auto_start): New function tests to make sure
-+ auto started services get the arguments on the command line
-+
-+ * test/test-shell-service.c: Added service for testing auto-starting with
-+ command line arguments
-+
-+ * test/data/valid-service-files/debug-shell-echo-fail.service.in,
-+ test/data/valid-service-files/debug-shell-echo-success.service.in:
-+ Added service files for testing auto-starting with command line arguments
-+
-+ * */.cvsignore: added a bunch of generated files to various .cvsignore files
-+
-+2005-07-14 Rodrigo Moya <rodrigo at novell.com>
-+
-+ * dbus/dbus-shell.[ch]: copy/pasted code from GLib.
-+
-+ * dbus/Makefile.am: added new files to build.
-+
-+ * bus/activation.c (bus_activation_activate_service): support
-+ activation commands with parameters.
-+
-+ * test/shell-test.c: added test program for the shell parsing
-+ code.
-+
-+2005-07-13 David Zeuthen <davidz at redhat.com>
-+
-+ * tools/dbus-send.c (append_arg, type_from_name): Also support 16 and
-+ 64 bit signed and unsigned parameters
-+
-+2005-07-13 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/.cvsignore: remove dbus_bindings.pyx, add dbus_bindings.pxd
-+
-+ * python/service.py (class Name): renamed BusName to make it clearer
-+ what the object is for (a name on the bus)
-+
-+ * python/examples/example-service.py,
-+ python/examples/example-signal-emitter.py: change the Name object to
-+ BusName
-+
-+2005-07-12 Colin Walters <walters at verbum.org>
-+
-+ Patch from Jim Gettys <Jim.Gettys at hp.com>.
-+
-+ * tools/dbus-launch.c: Include sys/select.h.
-+
-+2005-07-12 John (J5) Palmieri <johnp at redhat.com>
-+ * python/dbus_bindings.pyx.in: removed
-+
-+ * python/dbus_bindings.pyx: Added.
-+ - Fixed some memleaks (patch from
-+ Sean Meiners <sean.meiners at linspireinc.com>)
-+ - Broke out the #include "dbus_h_wrapper.h" and put it in its
-+ own pxd file (Pyrex definition)
-+ - Broke out glib dependancies into its own pyx module
-+
-+ * python/dbus_bindings.pdx: Added.
-+ - Defines C class Connection for exporting to other modules
-+
-+ * python/dbus_glib_bindings.pyx: Added.
-+ - New module to handle lowlevel dbus-glib mainloop integration
-+
-+ * python/glib.py: Added.
-+ - Registers the glib mainloop when you import this module
-+
-+ * python/services.py: Removed (renamed to service.py)
-+
-+ * python/service.py: Added.
-+ - (class Server): renamed Name
-+
-+ * python/__init__.py: Bump ro version (0,41,0)
-+ -don't import the decorators or service module
-+ by default. These now reside in the dbus.service namespace
-+
-+ * python/_dbus.py (Bus::__init__): Add code run the main loop
-+ setup function on creation
-+
-+ * python/examples/example-service.py,
-+ python/examples/example-signal-emitter.py: update examples
-+
-+ * python/examples/gconf-proxy-service.py,
-+ python/examples/gconf-proxy-service2.py: TODO fix these up
-+
-+ * doc/TODO: Addition
-+ - Added a Python Bindings 1.0 section
-+ - added "Add match on args or match on details to match rules"
-+
-+
-+2005-07-12 Colin Walters <walters at verbum.org>
-+
-+ * glib/examples/statemachine/Makefile.am (statemachine-server-glue.h)
-+ (statemachine-glue.h):
-+ * glib/examples/Makefile.am (example-service-glue.h)
-+ (example-signal-emitter-glue.h):
-+ * glib/Makefile.am (dbus-glib-error-switch.h):
-+ Add libtool --mode=execute so we use the built library instead
-+ of any installed one.
-+
-+2005-07-11 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gvalue.c (struct _DBusGValue): Delete.
-+ (dbus_g_value_types_init): Remove assertion.
-+ (dbus_g_value_get_g_type, dbus_g_value_open)
-+ (dbus_g_value_iterator_get_values, dbus_g_value_get_signature)
-+ (dbus_g_value_copy, dbus_g_value_free): Delete unimplemented
-+ functions related to DBusGValue. Now we marshal/demarshal
-+ structures as GValueArray.
-+ (dbus_gtype_from_signature_iter): Return G_TYPE_VALUE_ARRAY for
-+ structures.
-+ (signature_iter_to_g_type_array): Don't call
-+ signature_iter_to_g_type_struct.
-+ (signature_iter_to_g_type_struct): Delete.
-+ (dbus_gvalue_to_signature): Delete.
-+ (dbus_gvalue_to_signature): New function with same name as other
-+ one; we can convert structures to signatures.
-+ (demarshal_valuearray): New function.
-+ (get_type_demarshaller): Use it.
-+ (demarshal_recurse): Delete.
-+ (marshal_proxy): New function.
-+ (marshal_map): Warn if we can't determine signature from type.
-+ (marshal_collection_ptrarray): Ditto.
-+ (marshal_collection_array): Ditto.
-+ (get_type_marshaller): Use marshal_valuearray.
-+ (marshal_recurse): Delete.
-+ (_dbus_gvalue_test): Add some tests.
-+
-+ * dbus/dbus-glib.h (struct _DBusGValueIterator):
-+ (dbus_g_value_get_g_type, DBUS_TYPE_G_VALUE)
-+ (dbus_g_value_open, dbus_g_value_iterator_get_value)
-+ (dbus_g_value_iterator_get_values, dbus_g_value_iterator_recurse)
-+ (dbus_g_value_free): Remove prototypes.
-+
-+ * glib/dbus-binding-tool-glib.c (dbus_g_type_get_lookup_function): Handle
-+ G_TYPE_VALUE_ARRAY.
-+
-+ * glib/examples/example-service.c:
-+ * glib/examples/example-client.c: Implement GetTuple.
-+
-+ * test/glib/test-dbus-glib.c:
-+ * test/glib/test-service-glib.c:
-+ * test/glib/test-service-glib.xml: Add structure tests.
-+
-+2005-07-10 Colin Walters <walters at verbum.org>
-+
-+ * doc/TODO: Knock off some GLib items with this patch.
-+
-+ * glib/dbus-gvalue-utils.c (_dbus_gtype_can_signal_error)
-+ (_dbus_gvalue_signals_error): New functions.
-+
-+ * glib/dbus-gvalue-utils.h: Prototype them.
-+
-+ * glib/dbus-gobject.c (arg_iterate): Update to handle return vals
-+ and change to not output const/retval flags for input args. All
-+ callers updated.
-+ (invoke_object_method): Refactor to handle return values. Add
-+ some more comments in various places. Remove debug g_print.
-+
-+ * glib/dbus-binding-tool-glib.h (DBUS_GLIB_ANNOTATION_RETURNVAL): New.
-+
-+ * glib/dbus-binding-tool-glib.c (dbus_g_type_get_marshal_name):
-+ Handle G_TYPE_NONE.
-+ (compute_gsignature): New function; refactored from code from
-+ compute_marshaller and compute_marshaller_name. Enhance to
-+ handle return values and async ops more cleanly. Update for
-+ async ops returning NONE instead of BOOLEAN.
-+ (compute_marshaller, compute_marshaller_name): Call compute_gsignature
-+ and output appropriate string.
-+ (generate_glue): Handle return value annotation. Also don't dump
-+ constness flag for input arguments.
-+
-+ * glib/Makefile.am (DBUS_GLIB_INTERNALS): New variable; contains
-+ files shared between installed library and utilities.
-+ (libdbus_glib_1_la_SOURCES): Move some stuf into DBUS_GLIB_INTERNALS.
-+ (libdbus_gtool_la_SOURCES): Suck in DBUS_GLIB_INTERNALS so the
-+ binding tool can access gtype utility functions.
-+
-+ * test/glib/test-service-glib.c:
-+ * test/glib/test-service-glib.xml:
-+ * test/glib/test-dbus-glib.c: Add some tests for return values.
-+
-+2005-07-09 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gparser.c (parse_annotation): Add annotations to
-+ argument if available, not method.
-+
-+ * glib/dbus-gobject.c (arg_iterate): More verbose warnings.
-+ (invoke_object_method): First, remove some redundant
-+ GValues (object_value, error_value) in favor of working on
-+ array directly. Second, rework constness to be less buggy.
-+ Now we iterate directly over the argument metadata instead
-+ of parallel iterating over output signature and metadata.
-+
-+ * glib/dbus-glib-tool.h: Add INVALID_ANNOTATION error.
-+
-+ * glib/dbus-binding-tool-glib.c (generate_glue): Barf on const
-+ annotation on input args.
-+
-+2005-07-09 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-binding-tool-glib.h (DBUS_GLIB_ANNOTATION_CONST):
-+ Define.
-+
-+ * glib/dbus-binding-tool-glib.c (generate_glue): Handle Const
-+ annotation.
-+
-+ * glib/dbus-gobject.c (arg_iterate): Update to parse constval too.
-+ (method_dir_signature_from_object_info): Handle arg_iterate change.
-+ (write_interface): Ditto.
-+ (lookup_object_info): Don't barf if format_version is > 0.
-+ (invoke_object_method): Handle arg constness.
-+
-+ * glib/dbus-gidl.c (struct ArgInfo): Add annotations.
-+ (arg_info_new): Create.
-+ (arg_info_unref): Destroy.
-+ (arg_info_get_annotations, arg_info_get_annotation)
-+ (arg_info_add_annotation): New functions.
-+
-+ * glib/dbus-gidl.h: Prototype them.
-+
-+ * glib/dbus-gparser.c (parse_annotation): Allow annotations in
-+ args, disallow them in properties.
-+ (parse_annotation): Handle arg annotations.
-+
-+ * test/glib/test-service-glib.xml:
-+ * test/glib/test-service-glib.c: Update to make some methods
-+ const.
-+
-+2005-07-08 Colin Walters <walters at verbum.org>
-+
-+ * test/glib/test-service-glib.xml:
-+ * test/glib/test-service-glib.c:
-+ * test/glib/test-dbus-glib.c: Test a{sv}.
-+
-+ * glib/examples/statemachine/statemachine.c:
-+ * glib/examples/statemachine/statemachine-server.c:
-+ * glib/examples/statemachine/statemachine-client.c: Fix some bugs,
-+ add progress bar, etc.
-+
-+ * glib/dbus-gvalue.c (register_array, register_dict): Delete; not
-+ needed anymore due to generic array/map marshalling.
-+ (dbus_g_value_types_init): Don't register basic arrays or the
-+ string/string hash.
-+ (dbus_gtype_from_signature_iter): Don't try to recurse into
-+ variants.
-+ (dbus_gtype_to_signature): Check collection/map before type
-+ metadata.
-+ (demarshal_garray_basic): Renamed to demarshal_collection_array.
-+ (demarshal_ghashtable): Renamed to demarshal_map; fix to use new
-+ generic map creation/append functions instead of hash table
-+ specifically.
-+ (get_type_demarshaller): Handle maps.
-+ (demarshal_collection): Dispatch on collection type to either
-+ demarshal_collection_ptrarray or demarshal_collection_array.
-+ (get_type_marshaller): Handle maps.
-+ (marshal_collection): Dispatch collection type to either
-+ marshal_collection_ptrarray or marshal_collection_array.
-+ (_dbus_gvalue_test): New test.
-+
-+ * glib/dbus-gvalue-utils.c (unset_and_free_g_value): New function.
-+ (hash_free_from_gtype): Use it to free GValues.
-+ (hashtable_append): New function.
-+ (ptrarray_append): Fix prototype.
-+ (slist_append): Ditto.
-+ (_dbus_gvalue_utils_test): Extend tests.
-+
-+ * glib/dbus-gtype-specialized.c
-+ (dbus_g_type_specialized_init_append): Renamed from
-+ dbus_g_type_specialized_collection_init_append. Remove const from
-+ value, since we steal it.
-+ (dbus_g_type_specialized_map_append): New function.
-+
-+ * glib/dbus-gtype-specialized.h: Update prototypes.
-+ Add DBusGTypeSpecializedMapAppendFunc.
-+
-+ * glib/dbus-gtest.c (dbus_glib_internal_do_not_use_run_tests): Run
-+ _dbus_gvalue_test.
-+
-+ * glib/dbus-gtest.h: Prototype it.
-+
-+2005-07-08 Ross Burton <ross at openedhand.com>
-+
-+ * dbus/dbus-glib.h:
-+ Add DBysGAsyncData for the async bindings.
-+
-+ * glib/dbus-binding-tool-glib.c:
-+ Re-enable the async bindings.
-+
-+ * test/glib/test-dbus-glib.c:
-+ Add a test for the generated async bindings.
-+
-+2005-07-08 Colin Walters <walters at verbum.org>
-+
-+ * doc/TODO: Update GLib todo bits, also add a post-1.0 TODO for a
-+ connection concept.
-+
-+2005-07-08 Colin Walters <walters at verbum.org>
-+
-+ * tools/Makefile.am: Kill of print-introspect in favor of using
-+ dbus-send --print-reply=literal.
-+
-+ * test/glib/test-service-glib.xml:
-+ * test/glib/test-service-glib.c (my_object_get_objs): New test
-+ for "ao".
-+
-+ * test/glib/test-dbus-glib.c (echo_received_cb): Free echo data.
-+ (main): Test GetObjs.
-+
-+ * glib/examples/statemachine/Makefile.am:
-+ * glib/examples/statemachine/sm-marshal.list:
-+ * glib/examples/statemachine/statemachine-client.c:
-+ * glib/examples/statemachine/statemachine-server.c:
-+ * glib/examples/statemachine/statemachine-server.xml:
-+ * glib/examples/statemachine/statemachine.c:
-+ * glib/examples/statemachine/statemachine.h:
-+ * glib/examples/statemachine/statemachine.xml:
-+
-+ New example.
-+
-+ * glib/examples/example-service.c (main): Move invocation
-+ of dbus_g_object_type_install_info earlier, to emphasize it
-+ should only be done once.
-+
-+ * glib/examples/example-signal-emitter.c (main): Ditto.
-+
-+ * glib/examples/Makefile.am (SUBDIRS): Include statemachine.
-+
-+ * glib/dbus-gvalue.h (dbus_gtype_to_signature)
-+ (dbus_gvalue_marshal): Update prototypes.
-+
-+ * glib/dbus-gvalue.c: Update all marshalling functions to take
-+ const GValue instead of GValue.
-+ (signature_iter_to_g_type_array): Return a GPtrArray for nonfixed
-+ types.
-+ (dbus_gvalue_to_signature): Update for dbus_gtype_to_signature
-+ change.
-+ (dbus_gtype_to_signature): Handle generic collecitons and maps.
-+ Return a newly-allocated string.
-+ (demarshal_proxy, demarshal_object_path, demarshal_object)
-+ (demarshal_strv, demarshal_ghashtable): Set error, don't assert if
-+ we get the wrong types from message.
-+ (get_type_demarshaller): New function, extracted from
-+ dbus_gvalue_demarshal.
-+ (demarshal_collection): New function, demarshals generic
-+ collection.
-+ (dbus_gvalue_demarshal): Just invoke result of
-+ get_type_demarshaller. Throw error if we don't have one.
-+ (marshal_garray_basic): Abort on OOM.
-+ (get_type_marshaller): New function, extracted from
-+ dbus_gvalue_marshal.
-+ (collection_marshal_iterator, marshal_collection): New functions;
-+ implements generic marshalling for an iteratable specialized
-+ collection.
-+ (dbus_gvalue_marshal): Just invoke result of get_type_marshaller.
-+
-+ * glib/dbus-gvalue-utils.c (gvalue_from_ptrarray_value): Handle
-+ G_TYPE_STRING.
-+ (ptrarray_value_from_gvalue): Ditto.
-+ (ptrarray_append, ptrarray_free): New functions.
-+ (slist_constructor, slist_iterator, slist_copy_elt, slist_copy)
-+ (slist_append, slist_end_append, slist_free): New functions.
-+ (dbus_g_type_specialized_builtins_init): Add append fuctions
-+ for GPtrArray and GSList. Register GSList.
-+ (test_specialized_hash, _dbus_gvalue_utils_test): New functions.
-+
-+ * glib/dbus-gtype-specialized.h (DBusGTypeSpecializedAppendContext):
-+ New.
-+ (dbus_g_type_specialized_collection_init_append)
-+ (dbus_g_type_specialized_collection_append)
-+ (dbus_g_type_specialized_collection_end_append): Prototype.
-+ (DBusGTypeSpecializedCollectionVtable): Add append_func and
-+ end_append_func.
-+
-+ * glib/dbus-gtype-specialized.c (dbus_g_type_specialized_collection_init_append)
-+ (dbus_g_type_specialized_collection_append)
-+ (dbus_g_type_specialized_collection_end_append): New functions.
-+ (dbus_g_type_map_value_iterate): Take const GValue.
-+ (dbus_g_type_collection_value_iterate): Ditto.
-+
-+ * glib/dbus-gtest.c (dbus_glib_internal_do_not_use_run_tests): Run
-+ _dbus_gvalue_utils_test.
-+
-+ * glib/dbus-gtest.h: Prototype it.
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_manager_filter): Avoid
-+ using uninitialized owner_list.
-+ (dbus_g_proxy_begin_call_internal): Move return_if_fail to
-+ public API.
-+ (dbus_g_proxy_end_call_internal): Update to use error set
-+ from dbus_gvalue_demarshal instead of setting it here.
-+ (dbus_g_proxy_begin_call): Move return_if_fail here.
-+
-+ * glib/dbus-gobject.c (write_interface): Update for
-+ dbus_gtype_to_signature returning new string.
-+
-+ * configure.in: Add glib/examples/statemachine.
-+
-+2005-07-08 Joe Shaw <joeshaw at novell.com>
-+
-+ * configure.in: Add a configure option, --with-console-auth-dir
-+
-+ * dbus/dbus-sysdeps-util.c (_dbus_user_at_console): Use the
-+ new setting. Patch from Kay Sievers.
-+
-+2005-07-06 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-glib.h (DBusGPendingCall, DBusGPendingCallNotify)
-+ (DBUS_TYPE_G_PENDING_CALL, dbus_g_pending_call_get_g_type)
-+ (dbus_g_pending_call_ref, dbus_g_pending_call_unref): Delete.
-+ (dbus_g_pending_call_set_notify, dbus_g_pending_call_cancel):
-+ Delete in favor of dbus_g_proxy_begin_call and
-+ dbus_g_proxy_cancel_call.
-+ (DBusGProxyCall, DBusGProxyCallNotify): New.
-+ (dbus_g_proxy_begin_call): Change prototype to take callback, user
-+ data, and destroy function. This replaces
-+ dbus_g_pending_call_set_notify.
-+ (dbus_g_proxy_cancel_call): Prototype.
-+ (DBusGAsyncData): Delete, shouldn't be needed anymore.
-+
-+ * glib/dbus-gproxy.c (struct _DBusGProxy): Add call_id_counter and
-+ pending_calls map.
-+ (struct _DBusGProxyManager): Add bus_proxy member, which is an
-+ internal proxy for calls to the bus. Remove
-+ pending_nameowner_calls, now the internal proxy keeps track.
-+ (dbus_g_proxy_manager_unref): Unref bus proxy, remove reference to
-+ pending_nameowner_calls.
-+ (got_name_owner_cb): Update prototype, and use
-+ dbus_g_proxy_end_call.
-+ (got_name_owner_cb): Remove reference to pending_nameowner_calls.
-+ (dbus_g_proxy_manager_register): Delete directly libdbus code in
-+ favor of using internal proxy.
-+ (dbus_g_proxy_manager_unregister): Update to use
-+ dbus_g_proxy_cancel_call for any pending GetNameOwner call.
-+ (dbus_g_proxy_init): Initialize pending calls map.
-+ (dbus_g_proxy_constructor): New.
-+ (dbus_g_proxy_class_init): Add get/set property functions,
-+ constructor, and add NAME, PATH, and INTERFACE properties.
-+ (cancel_pending_call): New function.
-+ (dbus_g_proxy_dispose): Iterate over any outstanding calls and
-+ cancel them.
-+ (dbus_g_proxy_set_property, dbus_g_proxy_get_property): New.
-+ (GPendingNotifyClosure): New structure.
-+ (d_pending_call_notify, d_pending_call_free): Moved here from
-+ dbus-glib.c.
-+ (DBUS_G_VALUE_ARRAY_COLLECT_ALL): Moved around to satisfy function
-+ ordering.
-+ (manager_begin_bus_call): New internal function for talking to
-+ internal bus proxy.
-+ (dbus_g_proxy_new): Construct object using GObjet properties.
-+ (dbus_g_proxy_begin_call_internal): Update to take user data, etc.
-+ Create closure of same, and insert call into map of pending calls.
-+ (dbus_g_proxy_end_call_internal): Take call id instead of pending
-+ call. Look up pending call in current set. Remove it when we've
-+ completed.
-+ (dbus_g_pending_call_end, dbus_g_proxy_end_call_internal): Delete.
-+ (dbus_g_proxy_begin_call): Change API to take callback, user data,
-+ and destroy function directly.
-+ (dbus_g_proxy_end_call): Update to take DBusGProxyCall.
-+ (dbus_g_proxy_call): Invoke with NULL callback.
-+ (dbus_g_proxy_cancel_call): New function, replaces
-+ dbus_g_pending_call_cancel.
-+
-+ * glib/dbus-gparser.c (validate_signature): Fix call to
-+ dbus_set_g_error.
-+
-+ * glib/dbus-gobject.c (dbus_g_object_type_dbus_metadata_quark):
-+ New quark for attaching metadata to GType.
-+ (info_hash): Delete.
-+ (lookup_object_info): Look up using quark.
-+ (dbus_g_object_type_install_info): Check that a type is classed,
-+ not that it's an object. Also just install type data using quark
-+ instead of using global hash.
-+
-+ * glib/dbus-glib.c (dbus_g_pending_call_ref)
-+ (dbus_g_pending_call_unref, dbus_pending_call_get_g_type)
-+ (GPendingNotifyClosure): Delete.
-+ (d_pending_call_notify, d_pending_call_free): Move to dbus-gproxy.c.
-+ (dbus_g_pending_call_set_notify, dbus_g_pending_call_cancel): Delete.
-+
-+ * glib/dbus-binding-tool-glib.c (generate_client_glue): Disable async
-+ client method generation until we can fix it...
-+
-+ * tools/dbus-viewer.c (load_child_nodes): Use dbus_g_proxy_call.
-+ (load_from_service_thread_func): Ditto.
-+
-+ * tools/dbus-names-model.c (struct NamesModel): Hold
-+ DBusGProxyCall.
-+ (have_names_notify): Update prototype, use
-+ dbus_g_proxy_cancel_call.
-+ (names_model_reload): Update for new dbus_g_proxy_begin_call API.
-+
-+ * tools/dbus-monitor.c (filter_func): Update for print_message
-+ API change.
-+
-+ * test/glib/test-dbus-glib.c: Add more tests for async
-+ invocations. Update many begin_call/end_call pairs to just use
-+ dbus_g_proxy_call.
-+
-+ * tools/dbus-send.c (main): Add --print-reply=literal mode. This
-+ allows us to dump print-introspect.c.
-+
-+ * tools/dbus-print-message.h (print_message): Add literal argument
-+ to print_message which is intended to allow printing arguments without
-+ metadata like "string=".
-+
-+ * tools/dbus-print-message.c (print_iter): Add literal argument.
-+ (print_message): Allow printing string messages literally.
-+
-+2005-07-05 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gproxy.c (marshal_dbus_message_to_g_marshaller):
-+ Remove value refcount leak, original patch from Jorn Baayen
-+ <jorn at openedhand.com>. Also remove useless extra value in favor
-+ of prepending to value array directly.
-+
-+2005-07-02 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gmain.c (_dbus_gmain_test): Fix test.
-+
-+2005-07-01 Colin Walters <walters at verbum.org>
-+
-+ Patch from Jonathan Matthew <jonathan at kaolin.hn.org>
-+
-+ * glib/dbus-gvalue.c (basic_typecode_to_gtype): Fix return type.
-+ (dbus_g_value_types_init): Marshal G_TYPE_CHAR as DBUS_TYPE_BYTE,
-+ G_TYPE_LONG as DBUS_TYPE_INT32, G_TYPE_ULONG as DBUS_TYPE_UINT32,
-+ and G_TYPE_FLOAT as DBUS_TYPE_DOUBLE.
-+
-+2005-06-30 Colin Walters <walters at verbum.org>
-+
-+ * test/glib/test-dbus-glib.c:
-+ * test/glib/test-service-glib.c:
-+ * test/glib/test-service-glib.xml: Update tests for new error
-+ setting bits, also add async tests (patch from Ross Burton).
-+
-+ * test/glib/Makefile.am (test_service_glib_LDADD): Add
-+ DBUS_GLIB_THREADS_LIBS.
-+
-+ * glib/dbus-gproxy.c (get_name_owner)
-+ (dbus_g_pending_call_end_valist): Ditto.
-+
-+ * glib/dbus-gobject.c (error_metadata): New mapping from GError
-+ domain (GQuark) to DBusGErrorInfo.
-+ (gerror_domaincode_to_dbus_error_name): Attempt to look up error
-+ quark in error_metadata. Take message interface as default
-+ error message interface.
-+ (gerror_to_dbus_error_message): Pass message interface.
-+ (dbus_set_g_error): Resurrected.
-+ (dbus_g_error_info_free): New function.
-+ (dbus_g_object_type_install_info): Use g_type_class_ref instead
-+ of _peek to actually create the object class if it hasn't been
-+ created yet.
-+ (dbus_g_error_domain_register): New function.
-+
-+ * glib/dbus-gmain.c (dbus_g_bus_get): Switch to dbus_set_g_error.
-+
-+ * glib/dbus-gparser.c (validate_signature): Ditto.
-+
-+ * dbus/dbus-glib.h (dbus_g_error_set): Delete.
-+ (dbus_g_error_domain_register): Prototype.
-+
-+ * glib/dbus-glib.c (dbus_g_error_set): Delete.
-+ Update tests.
-+
-+2005-06-29 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-glib.h: Delete DBUS_TYPE_G_PROXY_ARRAY. Add
-+ DBUS_TYPE_G_OBJECT_PATH.
-+
-+ * glib/dbus-gvalue.c (dbus_g_value_types_init): Remove marshallers
-+ for G_TYPE_OBJECT and DBUS_TYPE_G_PROXY_ARRAY (the latter should
-+ be handled more generically). Add DBUS_TYPE_G_OBJECT_PATH.
-+ (dbus_g_object_path_get_g_type): New function.
-+ (dbus_gtype_from_signature_iter): Map DBUS_TYPE_OBJECT_PATH
-+ to DBUS_TYPE_G_OBJECT_PATH by default.
-+ (demarshal_proxy): Remove unused name variable.
-+ (demarshal_object_path, marshal_object_path): New functions.
-+ (demarshal_proxy_array, marshal_proxy_array): Delete.
-+
-+ * glib/dbus-binding-tool-glib.c (dbus_g_type_get_c_name): Map
-+ DBUS_TYPE_G_OBJECT_PATH to char *.
-+ (dbus_g_type_get_lookup_function): Map builtin
-+ DBUS_TYPE_G_OBJECT_PATH.
-+
-+ * test/glib/test-dbus-glib.c
-+ * test/glib/test-service-glib.c (my_object_objpath):
-+ Adapt tests to new object path marshalling.
-+
-+2005-06-29 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * configure.in: force check for Python >= 2.4
-+
-+2005-06-29 Colin Walters <walters at verbum.org>
-+
-+ Patch from Ross Burton <ross at openedhand.com>
-+
-+ * glib/dbus-gobject.c (invoke_object_method): Unset object
-+ value in all cases, not only in async case.
-+
-+2005-06-29 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gproxy.c (struct _DBusGProxy): Add new member
-+ name_call for keeping track of any outgoing GetNameOwner call.
-+ Also add for_owner and associated.
-+ (struct _DBusGProxyManager): Add owner_names, which is hash table
-+ that maps a base name to a list of names it owns (that we're
-+ interested in). Add pending_nameowner_calls which is a list of
-+ all outstanding GetNameOwner; avoids us having to iterate over
-+ every proxy. Add unassociated_proxies which keeps track of name
-+ proxies with no associated name owner.
-+ (dbus_g_proxy_manager_unref): Destroy owner_names.
-+ (struct DBusGProxyNameOwnerInfo): New struct for keeping track of
-+ name refcounts.
-+ (find_name_in_info, name_owner_foreach)
-+ (dbus_g_proxy_manager_lookup_name_owner, insert_nameinfo)
-+ (dbus_g_proxy_manager_monitor_name_owner)
-+ (dbus_g_proxy_manager_unmonitor_name_owner)
-+ (unassociate_proxies, dbus_g_proxy_manager_replace_name_owner):
-+ New functions; they manipulate the owner_names mapping.
-+ (got_name_owner_cb): New function.
-+ (get_name_owner): New function, extracted from
-+ dbus_g_proxy_new_for_name_owner.
-+ (dbus_g_proxy_manager_register): For now we need to keep track of
-+ all NameOwnerChanged. Also if the proxy is for a name, if we
-+ don't already know the name owner, queue a new GetNameOwner
-+ request and add it to our list of unassociated proxies. Otherwise
-+ inc the refcount.
-+ (dbus_g_proxy_manager_unregister): If this proxy is for a name,
-+ cancel any pending GetNameOwner call, etc.
-+ (dbus_g_proxy_manager_filter): Handle NameOwnerChanged. Also use
-+ the owner_names mapping to look up the current names for the
-+ signal source, and dispatch to any proxies for that name.
-+ (dbus_g_proxy_new): Initialize new members.
-+ (dbus_g_proxy_new_for_name): Delete unused proxy variable.
-+ (dbus_g_proxy_new_for_name_owner): Use get_name_owner.
-+ (dbus_g_pending_call_end_valist): New function, extracted from
-+ dbus_g_proxy_end_call_internal. Useful when we don't have a proxy
-+ but want to use the GLib infrastructure. Also note how many
-+ arguments in reply were over.
-+ (dbus_g_pending_call_end): New function, just call
-+ dbus_g_pending_call_end_valist.
-+ (dbus_g_proxy_end_call_internal): Just call
-+ dbus_g_pending_call_end_valist.
-+
-+ * glib/dbus-gobject.c (_dbus_gobject_lookup_marshaller): Fix lookup
-+ of builtin marshaller for STRING_STRING_STRING.
-+
-+ * test/glib/test-dbus-glib.c:
-+ * test/glib/test-service-glib.c:
-+ * test/glib/test-service-glib.xml:
-+ Extend tests to cover name proxies, destruction of owner proxies,
-+ etc.
-+
-+ * glib/examples/example-signal-recipient.c
-+ (dbus_g_proxy_new_for_name_owner): Create a name proxy.
-+
-+ * tools/dbus-send.c (main): Print D-BUS error name in addition
-+ to message.
-+
-+2005-06-28 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in (cunregister_function_handler,
-+ cmessage_function_handler): Patch from
-+ Anthony Baxter <anthony at interlink.com.au> fixes threading problems
-+ by using the Py_GILState_Ensure/Release to synchronize with the
-+ python runtime.
-+
-+2005-06-28 Ray Strode <rstrode at redhat.com>
-+
-+ * dbus/dbus-spawn.c (_dbus_babysitter_unref): kill
-+ babysitter helper process on last unref, bug #2813.
-+
-+2005-06-27 Colin Walters <walters at verbum.org>
-+
-+ * test/glib/test-dbus-glib.c:
-+ * test/glib/test-service-glib.c:
-+ * test/glib/test-service-glib.xml:
-+ Test hash table signal emitting.
-+
-+ * glib/dbus-gobject.c (_dbus_gobject_lookup_marshaller): Convert
-+ types to their fundamental basis types, since this is what
-+ marshallers operate on. Also add an entry for VOID__BOXED.
-+ (dbus_g_object_register_marshaller_array): Convert to fundamental.
-+
-+2005-06-26 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-tutorial.xml: fix names of interface/service/path, fix
-+ from Don Park
-+
-+2005-06-26 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-glib.c (dbus_set_g_error): Delete.
-+ (dbus_g_error_set): New public function from its ashes; used by
-+ both service-side method implementation and GLib bindings
-+ internals.
-+ (dbus_g_error_has_name, dbus_g_error_get_name): New function.
-+ (_dbus_glib_test): Add some tests.
-+
-+ * test/glib/test-dbus-glib.c (main): Test dbus_g_error_has_name.
-+
-+ * test/glib/test-service-glib.c (my_object_throw_error): Use
-+ dbus_g_error_set.
-+
-+ * glib/dbus-gobject.c (gerror_to_dbus_error_message): Handle
-+ errors thrown by dbus_g_error_set.
-+
-+ * glib/dbus-gmain.c (dbus_g_bus_get): Change to dbus_g_error_set.
-+
-+ * glib/dbus-gparser.c (validate_signature): Ditto.
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_new_for_name_owner)
-+ (dbus_g_proxy_end_call_internal): Ditto.
-+
-+ * glib/Makefile.am: Generate dbus-glib-error-switch.h, which
-+ converts DBUS_ERROR_x to DBUS_GERROR_x.
-+ (libdbus_glib_1_la_SOURCES, BUILT_SOURCES, CLEANFILES): Add it.
-+
-+ * doc/TODO: Remove error TODO.
-+
-+ * doc/dbus-tutorial.xml: Update with documentation about error
-+ handling.
-+
-+ * dbus/make-dbus-glib-error-enum.sh: Tighten up regexp to make
-+ sure we only change DBUS_ERROR to DBUS_GERROR, not all ERROR to
-+ GERROR. Also add DBUS_GERROR_REMOTE_EXCEPTION.
-+
-+2005-06-22 Colin Walters <walters at verbum.org>
-+
-+ Patch from Ross Burton <ross at openedhand.com>
-+
-+ * glib/dbus-gobject.c (dbus_g_method_return): Free out_sig.
-+
-+2005-06-20 Colin Walters <walters at verbum.org>
-+
-+ * configure.in: Add glib/examples.
-+
-+ * glib/Makefile.am: Add examples/
-+
-+ * glib/examples/.cvsignore
-+ * glib/examples/Makefile.am
-+ * glib/examples/example-client.c
-+ * glib/examples/example-service.c
-+ * glib/examples/example-service.xml
-+ * glib/examples/example-signal-emitter.c
-+ * glib/examples/example-signal-emitter.xml
-+ * glib/examples/example-signal-recipient.c:
-+ New files; GLib binding examples, ported from
-+ python/examples.
-+
-+2005-06-20 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-glib.h:
-+ * glib/dbus-gproxy.c: Rename dbus_g_proxy_invoke to
-+ dbus_g_proxy_call.
-+
-+ * glib/dbus-binding-tool-glib.c:
-+ * doc/dbus-tutorial.xml:
-+ * test/glib/test-dbus-glib.c: Update for rename.
-+
-+2005-06-20 Colin Walters <walters at verbum.org>
-+
-+ Patch suggested by Ross Burton <ross at openedhand.com>
-+
-+ * glib/dbus-gobject.c (export_signals): Free signal name.
-+ (g_value_init): Use G_VALUE_NOCOPY_CONTENTS to plug
-+ memory leak. Add a bit of documentation.
-+ (dbus_g_method_return_error): Free context, and note we do
-+ so.
-+
-+2005-06-18 Murray Cumming <murrayc at murrayc.com>
-+
-+ * dbus/dbus-glib.h:
-+ * glib/dbus-gobject.c:
-+ * glib/dbus-gproxy.c:
-+ * glib/dbus-gvalue.c: Predeclare structs as
-+ typedef struct _Something Something instead of
-+ typedef struct Something Something, so we can
-+ redeclare the prototypes. Other GNOME libraries
-+ do this already.
-+
-+2005-06-17 Colin Walters <walters at verbum.org>
-+
-+ * tools/dbus-names-model.c (have_names_notify): Fix call
-+ to dbus_g_proxy_end_call.
-+
-+2005-06-17 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_emit_remote_signal): Don't
-+ spew warnings if we get malformed remote signals.
-+
-+ * glib/dbus-gobject.c (propsig_iterate): New function.
-+ (lookup_object_info): New function, extracted from
-+ lookup_object_and_method.
-+ (introspect_properties, introspect_signals): Delete; these
-+ are merged into write_interface.
-+ (write_interface): Write out signals and properties here;
-+ dump the org.gtk.object stuff and use the interface given
-+ in the introspection data blob. Also fix up property XML.
-+ (lookup_values): New function.
-+ (introspect_interfaces): Gather a mapping from interface to a
-+ list of its methods, signals, and properties, then write out
-+ each interface.
-+ (lookup_object_and_method): Use lookup_object_info.
-+ (struct DBusGSignalClosure): Add interface.
-+ (dbus_g_signal_closure_new): Add interface. Don't dup signame;
-+ we can just use the constant data.
-+ (dbus_g_signal_closure_finalize): Don't free signal name.
-+ (signal_emitter_marshaller): Use interface from signal closure.
-+ (export_signals): Only export signals mentioned in introspection
-+ blob.
-+ (dbus_g_connection_register_g_object): Warn if we have no
-+ introspection data for an object.
-+ (funcsig_equal): Remove unused variable.
-+ (dbus_g_object_register_marshaller): Take varargs instead of
-+ list.
-+ (dbus_g_object_register_marshaller_array): New function,
-+ extracted from old dbus_g_object_register_marshaller.
-+
-+ * glib/dbus-binding-tool-glib.c (struct DBusBindingToolCData): Add
-+ signals and property data.
-+ (write_quoted_string): New function, extracted from generate_glue.
-+ (generate_glue): Write signals and properties to introspection
-+ blob.
-+
-+ * dbus/dbus-glib.h (struct DBusGObjectInfo): Include
-+ exported_signals and exported_properties.
-+ (dbus_g_object_register_marshaller): Update prototype.
-+ (dbus_g_object_register_marshaller_array): Prototype.
-+
-+ * test/glib/test-dbus-glib.c: Extend testing to cover new signals.
-+
-+ * test/glib/test-service-glib.c: Add new test signals and method
-+ to emit them.
-+
-+ * test/glib/test-service-glib.xml: Add some test signals.
-+
-+ * test/glib/Makefile.am (BUILT_SOURCES): Add my-object-marshal.c
-+ and my-object-marshal.h
-+ (test_service_glib_SOURCES, test_dbus_glib_SOURCES): Add
-+ my-object-marshal.c.
-+ (my-object-marshal.c, my-object-marshal.h): Implement.
-+
-+ * test/glib/.cvsignore: Update.
-+
-+ * doc/TODO: Remove two GLib TODO items fixed by this
-+ patch.
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * doc/TODO: Update for GLib bindings.
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-binding-tool-glib.c:
-+ * glib/dbus-gobject.c:
-+ * glib/dbus-gproxy.c: Add Nokia copyright; Patch
-+ from Ross Burton, for his GLib bindings work.
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gobject.c (funcsig_hash, funcsig_equal): Use n_params
-+ to iterate instead of walking to G_TYPE_INVALID.
-+
-+ Patch based on a patch from Ryan Gammon.
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * bus/bus.c (bus_context_new): Set parser to NULL
-+ after we unref it (Patch from Chris Boscolo, #2174).
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * python/dbus_bindings.pyx.in: Import size_t,
-+ __int64_t, __uint64_t, and __signed.
-+
-+ * dbus/dbus-sysdeps.c <HAVE_CMSGCRED> (write_credentials_byte):
-+ Define cmsg struct, output it.
-+ (_dbus_read_credentials_unix_socket):
-+ Use cmsg struct.
-+
-+ Patch from Joe Markus Clarke for FreeBSD support.
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * tools/dbus-send.c (append_array): Use strtok.
-+ (append_dict): New function.
-+ (type_from_name): New function, extracted from main.
-+ (main): Handle sending dicts.
-+
-+ * tools/dbus-print-message.c (print_iter): Print dict
-+ entries.
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gvalue.c (marshal_basic): Marshal NULL string
-+ values as the empty string (#2948).
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * dbus/Makefile.am:
-+ * mono/doc/Makefile.am:
-+ * test/glib/Makefile.am:
-+
-+ Fix srcdir != builddir issues (Patch from Chris Wilson, #3477)
-+
-+2005-06-16 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-marshal-header.c (_dbus_header_load): Set
-+ header byte order from expected byte order (Patch from Chris Wilson, #3475).
-+
-+ * dbus/dbus-marshal-byteswap.c (byteswap_body_helper):
-+ Increment pointer after swapping fixed array. Add assertion
-+ for array length.
-+
-+2005-06-15 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-sysdeps.c <HAVE_CMSGCRED> (_dbus_read_credentials_unix_socket):
-+ Fix call to dbus_set_error. (Patch from Michael Banck, #3461)
-+
-+2005-06-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * NEWS: Update to 0.34
-+
-+2005-06-15 David Zeuthen <davidz at redhat.com>
-+
-+ * configure.in (LT_CURRENT): Revert back to 1 as the library
-+ hasn't changed and we've certainly not committed to protocol
-+ stability yet. All this does is to break ABI. See commit note
-+ from hp at redhat.com 2005-05-05 for details.
-+
-+2005-06-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-connection.c (_dbus_connection_peer_filter): New method
-+ (_dbus_connection_run_builtin_filters): New method
-+ (dbus_connection_dispatch): Run the builtin filters which in turn
-+ runs the peer filter which handles Ping messages.
-+
-+ * doc/TODO:
-+ - Ping isn't handled: This patch fixes it
-+
-+ - Add a test case for the Ping message: added TODO item
-+
-+2005-06-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-message.c:
-+ (dbus_message_has_path): New method
-+ (dbus_message_has_interface): New method
-+ (dbus_message_has_member): New method
-+
-+ * dbus/dbus/dbus-sysdeps.c (_dbus_check_dir_is_private_to_user):
-+ New method
-+
-+ * dbus/dbus-keyring.c (_dbus_keyring_reload): Check to see that
-+ the keyring directory is private to the user
-+
-+ * doc/TODO:
-+ - The convenience functions in dbus-bus.h should perhaps have
-+ the signatures that they would have if they were autogenerated
-+ stubs. e.g. the acquire service function. We should also evaluate
-+ which of these functions to include, in light of the fact that
-+ GLib/Qt native stubs will probably also exist.: Punted
-+
-+ - add dbus_message_has_path(), maybe has_member/interface:
-+ fixed in this patch
-+
-+ - in dbus-keyring.c, enforce that the keyring dir is not
-+ world readable/writable: Fixed in this patch
-+
-+2005-06-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-marshal-validate.h: Added a new validation
-+ error code DBUS_VALIDITY_UNKNOWN_OOM_ERROR = -4 for
-+ out of memory errors when validating signitures
-+
-+ * dbus/dbus-marshal-header.c: use DBUS_VALIDITY_UNKNOWN_OOM_ERROR
-+ in places where we previously used DBUS_VALID and a FALSE return
-+ value to indicate OOM
-+
-+ * dbus/dbus-marshal-validate.c (_dbus_validate_signature_with_reason):
-+ Use a stack to track the number of elements inside containers. The
-+ stack values are then used to validate that dict entries have only two
-+ elements within them.
-+ (validate_body_helper): check the reason for failure when validating
-+ varients
-+
-+ * dbus/dbus-message.c (load_message): use
-+ DBUS_VALIDITY_UNKNOWN_OOM_ERROR in places where we previously used
-+ DBUS_VALID and a FALSE return value to indicate OOM
-+
-+ * doc/TODO: remove "- validate dict entry number of fields" as this
-+ patch fixes it
-+
-+2005-06-14 David Zeuthen <davidz at redhat.com>
-+
-+ * bus/bus.c (process_config_every_time): Drop existing conf-dir
-+ watches (if applicable) and add new watches
-+
-+ * bus/main.c (signal_handler): Handle SIGIO if using D_NOTIFY
-+ (main): Setup SIGIO signal handler if using D_NOTIFY
-+
-+ * bus/config-parser.h: Add prototype bus_config_parser_get_conf_dirs
-+
-+ * bus/config-parser.c (struct BusConfigParser): Add conf_dirs list
-+ (merge_included): Also merge conf_dirs list
-+ (bus_config_parser_unref): Clear conf_dirs list
-+ (include_dir): Add directory to conf_dirs list
-+ (bus_config_parser_get_conf_dirs): New function
-+
-+ * bus/dir-watch.[ch]: New files
-+
-+ * bus/Makefile.am (BUS_SOURCES): Add dir-watch.[ch]
-+
-+ * configure.in: Add checks for D_NOTIFY on Linux
-+
-+2005-06-14 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-binding-tool-glib.c:
-+ * glib/dbus-gobject.c:
-+ * glib/dbus-gvalue.c: Fix indentation and brace style.
-+
-+2005-06-14 Ross Burton <ross at openedhand.com>.
-+
-+ * glib/dbus-glib.h: Make DBusGMethodInvocation
-+ a private structure. Rearrange prototypes a bit.
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_invoke): Add
-+ documentation for first_arg_type.
-+
-+ * glib/dbus-gobject.c: Move DBusGMethodInvocation
-+ here, add documentation. Move dbus_g_method_return
-+ and dbus_g_method_return_error into public API
-+ section.
-+
-+2005-06-14 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gobject.c (_dbus_gobject_lookup_marshaller):
-+ Add missing return statements, noticed by Ross Burton.
-+
-+2005-06-13 Ross Burton <ross at openedhand.com>.
-+
-+ * glib/dbus-gobject.c: Handle errors on message
-+ demarshalling by sending error message back.
-+ * glib/dbus-gvalue.c: Initialize return variables.
-+
-+2005-06-13 Colin Walters <walters at verbum.org>
-+
-+ * glib/Makefile.am: Fix thinko in last patch.
-+
-+2005-06-13 Colin Walters <walters at verbum.org>
-+
-+ * glib/Makefile.am: Move dbus-gtype-specialized.c
-+ and dbus-gtype-specialized.h into a _HEADERS variable,
-+ install them.
-+
-+2005-06-12 Colin Walters <walters at verbum.org>
-+
-+ Async signals and various bugfixes and testing by
-+ Ross Burton <ross at openedhand.com>.
-+
-+ * glib/dbus-gvalue.h: (struct DBusBasicGValue): Delete.
-+ (dbus_gvalue_genmarshal_name_from_type)
-+ (dbus_gvalue_ctype_from_type): Moved to dbus-binding-tool-glib.c.
-+ (dbus_gtype_to_dbus_type): Renamed to dbus_gtype_from_signature.
-+ (dbus_g_value_types_init, dbus_gtype_from_signature)
-+ (dbus_gtype_from_signature_iter, dbus_gtype_to_signature)
-+ (dbus_gtypes_from_arg_signature): New function prototypes.
-+ (dbus_gvalue_demarshal): Take context and error arguments.
-+ (dbus_gvalue_demarshal_variant): New function.
-+ (dbus_gvalue_demarshal_message): New function.
-+ (dbus_gvalue_store): Delete.
-+
-+ * glib/dbus-gvalue.c:
-+
-+ File has been almost entirely rewritten; now we special-case
-+ more types such as DBUS_TYPE_SIGNATURE, handle arrays and
-+ hash tables correctly, etc. Full support for recursive values
-+ is not yet complete.
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_class_init): Change last
-+ argument of signal to G_TYPE_POINTER since we now pass a
-+ structure.
-+ (lookup_g_marshaller): Delete in favor of
-+ _dbus_gobject_lookup_marshaller.
-+ (marshal_dbus_message_to_g_marshaller): Use
-+ _dbus_gobject_lookup_marshaller and dbus_gvalue_demarshal_message
-+ to handle remote signal callbacks.
-+ (dbus_g_proxy_new_from_proxy): New function; creates a new
-+ DBusGProxy by copying an existing one.
-+ (dbus_g_proxy_get_interface, dbus_g_proxy_set_interface)
-+ (dbus_g_proxy_get_path): New functions.
-+ (dbus_g_proxy_marshal_args_to_message): New function;
-+ factored out of existing code.
-+ (DBUS_G_VALUE_ARRAY_COLLECT_ALL): Collect all arguments
-+ from a varargs array.
-+ (dbus_g_proxy_begin_call_internal): New function.
-+ (dbus_g_proxy_end_call_internal): New function.
-+ (dbus_g_proxy_begin_call): Take GTypes instead of DBus types
-+ as arguments; simply invoke dbus_g_proxy_begin_call_internal
-+ after collecting args into value array.
-+ (dbus_g_proxy_end_call): Take GTypes instead of DBus types;
-+ invoke dbus_g_proxy_end_call_internal.
-+ (dbus_g_proxy_invoke): Simply invoke begin_call_interanl and
-+ end_call_internal.
-+ (dbus_g_proxy_call_no_reply): Take GTypes instead of DBus
-+ types.
-+ (array_free_all): New function.
-+ (dbus_g_proxy_add_signal): Take GTypes.
-+
-+ * glib/dbus-gobject.h:
-+ (_dbus_glib_marshal_dbus_message_to_gvalue_array): Delete.
-+ (_dbus_gobject_get_path, _dbus_gobject_lookup_marshaller):
-+ Prototype.
-+
-+ * glib/dbus-gobject.c: Add a global marshal_table hash which
-+ stores mappings from type signatures to marshallers. Change lots
-+ of invocations of dbus_gtype_to_dbus_type to
-+ dbus_gtype_to_signature.
-+ (_dbus_glib_marshal_dbus_message_to_gvalue_array): Delete.
-+ (introspect_signals): Fix test for query.return_type.
-+ (set_object_property): Update invocation of dbus_gvalue_demarshal.
-+ (invoke_object_method): Many changes. Handle asynchronous
-+ invocations. Convert arguments with
-+ dbus_gvalue_demarshal_message. Handle errors. Use
-+ DBusSignatureIter instead of strlen on args. Handle all arguments
-+ generically. Special-case variants.
-+ (dbus_g_method_return, dbus_g_method_return_error): New function.
-+ (DBusGSignalClosure): New structure, closes over signal
-+ information.
-+ (dbus_g_signal_closure_new): New function.
-+ (dbus_g_signal_closure_finalize): New function.
-+ (signal_emitter_marshaller): New function; is special marshaller
-+ which emits signals on bus.
-+ (export_signals): New function; introspects object signals and
-+ connects to them.
-+ (dbus_g_object_type_install_info): Take GType instead of
-+ GObjectClass.
-+ (dbus_g_connection_register_g_object): Invoke export_signals.
-+ (dbus_g_connection_lookup_g_object): New function.
-+ (DBusGFuncSignature) New structure; used for mapping type
-+ signatures to marshallers.
-+ (funcsig_hash): New function; hashes DBusGFuncSignature.
-+ (funcsig_equal): New function; compares DBusGFuncSignature.
-+ (_dbus_gobject_lookup_marshaller): New function.
-+ (dbus_g_object_register_marshaller): New function; used to
-+ register a marshaller at runtime for a particular signature.
-+
-+ * glib/dbus-gmain.c (_dbus_gmain_test): Add various tests.
-+
-+ * glib/dbus-binding-tool-glib.h: Add DBUS_GLIB_ANNOTATION_ASYNC
-+ which notes a server method implementation should be
-+ asynchronous.
-+
-+ * glib/dbus-binding-tool-glib.c
-+ (dbus_binding_tool_output_glib_server): Call
-+ dbus_g_value_types_init.
-+ (write_formal_parameters): Use dbus_gtype_from_signature. Handle
-+ variants specially.
-+ (dbus_g_type_get_lookup_function): Turn GType into an invocation
-+ of a lookup function.
-+ (write_args_for_direction): Use dbus_g_type_get_lookup_function.
-+ (write_untyped_out_args): New method; write output arguments.
-+ (write_formal_declarations_for_direction): Function for
-+ writing prototypes.
-+ (write_formal_parameters_for_direction): Function for
-+ writing implementations.
-+ (write_typed_args_for_direction): Function for writing
-+ arguments prefixed with GTypes.
-+ (write_async_method_client): Write out async version
-+ of method.
-+
-+ * glib/dbus-binding-tool-glib.c: Include dbus-gvalue-utils.h.
-+ (dbus_g_type_get_marshal_name): Move mapping from GType
-+ to marshal name into here.
-+ (dbus_g_type_get_c_name): Move into here.
-+ (compute_marshaller): Convert signature to type with
-+ dbus_gtype_from_signature, use dbus_g_type_get_marshal_name.
-+ (compute_marshaller_name): Ditto.
-+ (compute_marshaller): Handle async signal annotations.
-+ (gather_marshallers): Return if we don't have a known
-+ prefix.
-+ (generate_glue): Collect introspection blob here, and
-+ write all of the blob at the end. This allows an object
-+ with multiple interfaces to work.
-+ Mark async methods in introspection blob.
-+
-+ * glib/Makefile.am (libdbus_glib_1_la_SOURCES): Add
-+ dbus-gtype-specialized.c, dbus-gtype-specialized.h,
-+ dbus-gvalue-utils.h, dbus-gvalue-utils.c.
-+
-+ * dbus/dbus-glib.h: Don't include dbus-protocol.h; this
-+ avoids people accidentally using DBUS_TYPE_* which should
-+ not be necessary anymore.
-+ Do include dbus-gtype-specialized.h, which are utilities
-+ for GLib container types.
-+ Add various #defines for types such as
-+ DBUS_TYPE_G_BOOLEAN_ARRAY.
-+ (DBusGValueIterator, DBusGValue): Define, not fully used
-+ yet.
-+ (dbus_g_value_get_g_type): Type for recursive value.
-+ (dbus_g_value_open, dbus_g_value_iterator_get_value)
-+ (dbus_g_value_iterator_get_values, dbus_g_value_iterator_recurse)
-+ (dbus_g_value_free): Prototypes.
-+ (dbus_g_object_register_marshaller, dbus_g_proxy_new_from_proxy): Prototype.
-+ (dbus_g_proxy_set_interface): Prototype.
-+ (dbus_g_proxy_begin_call, dbus_g_proxy_end_call)
-+ (dbus_g_proxy_call_no_reply): Take GLib types instead of DBus
-+ types.
-+ (dbus_g_proxy_get_path, dbus_g_proxy_get_interface):
-+ Accessors.
-+ (DBusGAsyncData, DBusGMethodInvocation): Structures for
-+ doing async invocations.
-+ (dbus_g_method_return, dbus_g_method_return_error):
-+ Prototypes.
-+ * doc/dbus-tutorial.xml: Update GLib section.
-+
-+ * tools/dbus-viewer.c (load_child_nodes): Update
-+ for new invocation type of dbus_g_proxy_end_call.
-+ (load_from_service_thread_func): Ditto.
-+
-+ * tools/print-introspect.c (main): Ditto.
-+
-+ * tools/dbus-names-model.c (have_names_notify)
-+ (names_model_reload, names_model_set_connection)
-+ Use GTypes.
-+
-+ * python/Makefile.am (INCLUDES): Define DBUS_COMPILATION,
-+ needed since Python bindings use GLib bindings.
-+
-+ * test/glib/Makefile.am (INCLUDES): Define DBUS_COMPILATION.
-+ Add --prefix argument.
-+
-+ * tools/Makefile.am: Define DBUS_COMPILATION. Remove
-+ unneeded --ignore-unsupported arg.
-+
-+ * test/glib/test-service-glib.c:
-+ * test/glib/test-service-glib.xml:
-+ * test/glib/test-dbus-glib.c: Add many more tests.
-+
-+2005-06-06 David Zeuthen <davidz at redhat.com>
-+
-+ * doc/TODO: Add item about need to remove deprecated functions.
-+
-+ * dbus/dbus-connection.h: Add prototype for dbus_connection_disconnect
-+
-+ * dbus/dbus-connection.c (dbus_connection_disconnect): New function
-+ to repair the ABI which was broken with the last commit.
-+
-+2005-06-02 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-connection.c, dbus/dbus-connection.h
-+ (dbus_connection_disconnect): renamed to dbus_connection_close
-+ for API symmetry with dbus_connection_open
-+ (_dbus_connection_open_internal):
-+ s/dbus_connection_disconnect/dbus_connection_close
-+
-+ * dbus/dbus-bus.c (dbus_bus_get):
-+ s/dbus_connection_disconnect/dbus_connection_close
-+
-+ * bus/connection.c (bus_connections_unref,
-+ bus_connections_setup_connection, bus_connections_expire_incomplete):
-+ s/dbus_connection_disconnect/dbus_connection_close
-+
-+ * bus/dispatch.c (bus_dispatch, kill_client_connection,
-+ kill_client_connection_unchecked, check_hello_connection):
-+ s/dbus_connection_disconnect/dbus_connection_close
-+
-+ * bus/bus.c (new_connection_callback):
-+ s/dbus_connection_disconnect/dbus_connection_close
-+
-+ * tools/dbus-send.c (main):
-+ s/dbus_connection_disconnect/dbus_connection_close
-+
-+ * test/glib/test-profile.c (no_bus_thread_func, with_bus_thread_func):
-+ s/dbus_connection_disconnect/dbus_connection_close
-+
-+ * test/test-service.c (path_message_func, filter_func):
-+ s/dbus_connection_disconnect/dbus_connection_close
-+
-+ * doc/TODO: remove connection_open/connection_disconnect lacks symmetry item that was just fixed
-+
-+2005-05-25 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-protocol.h: Move various bus service #defines such
-+ as DBUS_SERVICE_DBUS and DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT to
-+ dbus/dbus-shared.h.
-+ * dbus/dbus-shared.h: Various defines moved here.
-+ * dbus/dbus-marshal-header.c: Include dbus-shared.h.
-+
-+2005-05-25 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/__init__.py: Python bindings deserve a minor version
-+ update. Upped to (0, 40, 2)
-+
-+2005-05-24 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/decorators.py: add explicitly_pass_message decorator
-+ for passing in the dbus message as keyword for edge case signal
-+ handling
-+
-+ * python/matchrules.py (SignalMatchRule.__repr__): fix output
-+ to conform with what dbus expects for match rules
-+ (SignalMatchRule.execute): add the dbus message as a keyword
-+ if the signal handler has requested it
-+
-+ * python/examples/example/signal-recipient.py: added some more
-+ examples on how to hook up to signals
-+
-+2005-05-23 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/decorators.py: import dbus_bindings
-+
-+ * python/matchrules.py (SignalMatchRule, SignalMatchTree,
-+ SignalMatchNode): new classes that implement wildcard signal
-+ callback matching using a tree lookup. Heavily modified from a
-+ patch sent by Celso Pinto (fd.o bug #3241)
-+
-+ * _dbus.py (add_signal_receiver, remove_signal_receiver, _signal_func):
-+ use new match classes to handle signals.
-+
-+2005-05-19 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in: s/TYPE_PATH/TYPE_OBJECT_PATH
-+
-+2005-05-18 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: use GLIB_GNU_GETTEXT to get INTLLIBS and require
-+ gettext. Not really worth requiring yet perhaps, but any
-+ production quality 1.0 would require it so we should go ahead and
-+ get things set up. We do have a couple token calls to
-+ bindtextdomain in the code already.
-+
-+2005-05-16 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * glib/dbus-gmain.c (io_handler_dispatch): fix deadlock
-+ when using recursive g_main_loops
-+
-+ * python/_dbus.py (class Bus): add the ProxyObjectClass
-+ alias for ProxyObject to make it easier for the Twisted
-+ networking framework to integrate dbus.
-+
-+ * python/proxies.py (class ProxyObject): add the ProxyMethodClass
-+ alias for ProxyMethod to make it easier for the Twisted
-+ networking framework to integrate dbus.
-+
-+2005-05-11 Ross Burton <ross at openedhand.com>
-+
-+ * glib/dbus-glib-tool.c: Add --prefix argument.
-+ * glib/dbus-binding-tool-glib.h: Add prefix argument.
-+ * glib/dbus-binding-tool-glib.c (compute_marshaller_name):
-+ Add prefix argument.
-+ (generate_glue): Pass prefix argument down.
-+ (dbus_binding_tool_output_glib_server): Pass prefix to
-+ glib-genmarshal.
-+
-+2005-05-11 Colin Walters <walters at verbum.org>
-+
-+ * tools/dbus-send.c (append_array): New function.
-+ (append_arg): Broken out from main.
-+ (main): Add cheesy hack to send arrays and variants.
-+ (usage): Update.
-+ * tools/dbus-print-message.c (print_iter): Broken out
-+ from main.
-+
-+2005-05-11 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-signature.c (dbus_signature_iter_get_signature):
-+ New function, returns signature string for signature iter.
-+ * dbus/dbus-signature.h: Prototype it.
-+ * dbus/dbus-message.c (dbus_message_iter_get_signature):
-+ New function, returns signature string for message iter.
-+ (dbus_message_iter_get_array_len): New function, returns
-+ length of array.
-+ (dbus_message_iter_get_fixed_array): Fix assertion; this
-+ function should be used when the iter is pointing to the
-+ contents of an array
-+ * dbus/dbus-message.h: Prototypes.
-+ * dbus/dbus-marshal-recursive.c (_dbus_type_reader_get_array_length):
-+ New function; returns length of an array.
-+ * dbus/dbus-marshal-recursive.h: Prototype it.
-+
-+2005-05-11 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-sysdeps-util.c <!HAVE_POSIX_GETPWNAM_R>: Fix
-+ compilation error.
-+
-+2005-05-08 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps-util.c (_dbus_become_daemon): write the
-+ daemon's pid, not the parent's pid, to the file descriptor.
-+ Reported by Taj Morton.
-+
-+2005-05-05 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in (LT_*): add notes on how the libtool versioning
-+ works to save thinking. Increment soname to indicate protocol
-+ breakage (though really the library interface hasn't changed I
-+ guess)
-+
-+ * dbus/dbus-transport.c (_dbus_transport_get_is_authenticated):
-+ verify the GUID received from server matches what we were
-+ expecting, if we had an expectation
-+
-+ * dbus/dbus-auth.c (send_ok): send GUID along with the OK command
-+ (_dbus_auth_get_guid_from_server): new function
-+ (send_begin): parse the OK args
-+
-+ * doc/dbus-specification.xml: add GUID to the auth protocol
-+
-+2005-05-05 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * Fix my name in previous changelog ;)
-+
-+ * python/proxies.py (ProxyObject.__getattr__): add further patch
-+ from Anthony Baxter to throw an AttributeError when python
-+ __special__ functions are called instead of marshling them over
-+ the bus (Bug#1685 comment 3).
-+
-+2005-05-04 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/Makefile.am: changed to use pyexecdir for the binding
-+ shared libraries (Bug#2494)
-+
-+ * python/exceptions.py: bring exceptions over from the bindings
-+ so they can be used in applications (Bug#2036)
-+ Make all exceptions derive from DBusException
-+
-+ * python/_dbus.py, python/proxies.py: implement __repr__ in a couple
-+ of classes so that print obj doesn't throw an exception (Bug #1685)
-+
-+2005-05-03 Ross Burton <ross at openedhand.com>
-+
-+ * glib/dbus-gobject.c (dbus_g_connection_register_g_object):
-+ Return if we get an error during registration. Set up a
-+ weak reference on object to unregister if object is destroyed.
-+ (unregister_gobject): New function.
-+
-+2005-05-01 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in:
-+ - added new type classes for hinting to the marashaler what type
-+ to send over the wire
-+ - added int16 and uint16 marshalers
-+ - Fixed a bug in the type constants that caused int32 to go out
-+ as uint16 over the wire
-+ * python/dbus.py: split up into different files and renamed _dbus.py
-+ * python/__init__.py, python/_util.py, python/decorators.py,
-+ python/exceptions.py, python/proxies.py, python/services.py,
-+ python/types.py: new files split off from dbus.py
-+ * python/Makefile.am: Add new files, remove dbus.py and
-+ install all python files to <python module dir>/dbus
-+ * python/examples/*: Added #!/usr/bin/env python to the top of
-+ every example. Patch provided by Tatavarty Kalyan
-+
-+2005-04-25 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * NEWS: Update to 0.33
-+
-+2005-04-25 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in (send_with_reply_handlers): New send
-+ method for doing async calls
-+ (_pending_call_notification): New C function for handling pendning call
-+ callbacks
-+ (set_notify): New method for setting pending call notification
-+
-+ * python/dbus.py: new version tuple "version" is set at (0, 40, 0)
-+ Async capabilities added to remote method calls
-+ (Sender): class removed
-+ (RemoteService): class removed
-+ (ObjectTree): class removed for now
-+ (RemoteObject): Renamed to ProxyObject
-+ (RemoteMethod): Renamed to ProxyMethod
-+ (method): Decorator added for decorating python methods as dbus methods
-+ (signal): Decorator added for decorating python methods as signal emitters
-+ (ObjectType): Metaclass added for generating introspection data and the
-+ method callback vtable
-+ (Interface): Wrapper class added to wrap objects in a dbus interface
-+ (Object): Uses ObjectType as its metaclass and exports Introspect
-+ of the org.freedesktop.DBus.Introspectable interface
-+ (ValidationException, UnknownMethodException): new exceptions
-+
-+ * python/examples/*: Modified to fit with the new bindings
-+
-+2005-04-23 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c (dbus_message_append_args): fix doc comment,
-+ reported by Tony Houghton
-+
-+ * test/test-service.c (main): test
-+ dbus_connection_get_object_path_data()
-+
-+ * dbus/dbus-object-tree.c (find_handler): be sure we always init
-+ the exact_match
-+ (_dbus_object_tree_get_user_data_unlocked): new function used by
-+ dbus_connection_get_object_path_data()
-+ (do_register): add assertion test for get_user_data_unlocked
-+ (object_tree_test_iteration): more tests
-+
-+ * dbus/dbus-connection.c (dbus_connection_get_object_path_data):
-+ new function from Dan Reed to let you get the user data from
-+ dbus_connection_register_object_path()
-+
-+2005-04-23 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-marshal-recursive-util.c: Fixed buffer overflow
-+ in numerous places that did not account for the NULL terminator
-+ (signature_from_seed): changed the manual string copy loop to
-+ just use strcpy instead
-+ make check should now pass
-+
-+2005-04-19 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-marshal-header.c (_dbus_header_create): Fix assert
-+ so that it allows messages that are not signals to pass in
-+ NULL as the interface.
-+
-+2005-04-18 David Zeuthen <davidz at redhat.com>
-+
-+ * glib/dbus-gmain.c (io_handler_destroy_source):
-+ (timeout_handler_destroy_source, connection_setup_free):
-+ Also unref the source to avoid memory leaks.
-+
-+2005-04-13 David Zeuthen <davidz at redhat.com>
-+
-+ * bus/config-parser.c (bus_config_parser_new): Bump this to a
-+ more reasonable, yet still totally arbitrary, value :-).
-+
-+2005-04-13 David Zeuthen <davidz at redhat.com>
-+
-+ * doc/TODO: Added an "important for 1.0" item about selinux
-+ allow/deny messages
-+
-+2005-04-13 David Zeuthen <davidz at redhat.com>
-+
-+ * bus/selinux.c: Add c-file-style to top of file
-+ (log_audit_callback): Don't free the data here anymore
-+ (bus_selinux_check): Don't take spid and tpid since appending
-+ that to auxdata may OOM.
-+ (bus_selinux_allows_acquire_service): Handle OOM and signal back
-+ to the caller if we are OOM by taking an error object.
-+ (bus_selinux_allows_send): -do-
-+
-+ * bus/selinux.h: Fix prototypes for bus_selinux_allows_acquire_service
-+ and bus_selinux_allows_send
-+
-+ * bus/bus.c (bus_context_check_security_policy): Pass error and
-+ pass on OOM thrown by bus_selinux_allows_send()
-+
-+ * bus/services.c (bus_registry_acquire_service): Pass error and
-+ pass on OOM thrown by bus_selinux_allows_acquire_service()
-+
-+2005-04-13 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gmain.c (message_queue_dispatch): only dispatch one
-+ message at a time to avoid monopolizing the main loop, bug
-+ #2953 from Benjamin Otte
-+
-+2005-04-09 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-string.c (copy): change a memcpy to memmove due to
-+ possible overlap, fix from Daniel Reed
-+ (fixup_alignment): fix signedness warnings
-+ (_dbus_string_append_unichar): ditto
-+
-+2005-04-09 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message-util.c (_dbus_message_test): fix signedness warning
-+
-+ * glib/dbus-glib-tool.c (main): fix warning
-+
-+ * glib/dbus-binding-tool-glib.c (generate_glue): fix warning
-+
-+ * dbus/dbus-connection.c (dbus_connection_read_write_dispatch):
-+ add a new function that can be used in simple applications that
-+ don't have a main loop and are willing to block
-+
-+2005-04-05 David Zeuthen <davidz at redhat.com>
-+
-+ Fix https://bugs.freedesktop.org/show_bug.cgi?id=2889
-+
-+ * glib/dbus-gmain.c:
-+ (io_handler_destroy_source): Remove from list of IO handlers
-+ of the ConnectionSetup object
-+ (timeout_handler_destroy_source): -do- for timeout handlers
-+ (io_handler_source_finalized): Don't remove from list since
-+ we now do that in io_handler_destroy_source(). Renamed from
-+ io_handler_source_destroyed
-+ (timeout_handler_source_destroyed): -do- for timeout handlers
-+ (connection_setup_free): It is now safe to iterate over all
-+ IO and timeout handlers as the _destroy_source removes them
-+ from the list synchronously
-+
-+2005-03-30 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: change check to gtk 2.4
-+
-+ * tools/dbus-viewer.c (name_combo_changed_callback): remove
-+ gtk_combo_box_get_active_text() usage to decrement GTK requirement
-+ to 2.4
-+
-+2005-03-29 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * News: Update 0.32
-+
-+ * HACKING: Fixed realease instructions. configure.in should be updated to
-+ the next release by the person who made the last release.
-+
-+2005-03-29 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/lvalue_cast_post_process.py - removed. Patch has been
-+ submitted to Pyrex maintainers that fixes gcc4.0 errors
-+
-+ * python/Makefile.am: removed refrences to lvalue_cast_post_process.py
-+
-+2005-03-24 Daniel Reed <n at ml.org>
-+
-+ * tools/Makefile.am: Make print-introspect and
-+ dbus-bus-introspect.xml building conditional on HAVE_GLIB.
-+
-+2005-03-22 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * tools/Makefile.am: Patch by Colin Walters that fixes distcheck
-+
-+ * dbus/dbus-userdb.c, dbus/dbus-userdb-util.c: Add patch we have
-+ had in Red Hat packages for a while but for some reason never
-+ got merged upstream
-+ (_dbus_is_a_number): New checks if a string
-+ can be converted to a number and does the conversion if it can
-+ (_dbus_user_database_lookup): Add check to see if the given username
-+ is a udi. This allows udi's to be used instead of usernames in the
-+ config file.
-+ (_dbus_user_database_lookup_group): Add check to see if the given groupname
-+ is a gdi. This allows gdi's to be used instead of groupnames in the
-+ config file.
-+
-+2005-03-21 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/lvalue_cast_post_process.py - added post processor to fix Pyrex
-+ code so that it compiles with gcc4.0
-+
-+ * python/Makefile.am: Added lvalue_cast_post_process.py to EXTRA_DIST
-+ run dbus_bindings.c through lvalue_cast_post_process.py and copy the
-+ results back to dbus_binding.c
-+
-+2005-03-20 Colin Walters <walters at verbum.org>
-+
-+ Patch suggested by Inguva Rajasekhar <ringuva at novell.com>.
-+
-+ * configure.in: Require GTK+ 2.6.
-+
-+2005-03-20 Colin Walters <walters at verbum.org>
-+
-+ * Makefile.am (SUBDIRS, DIST_SUBDIRS): Build tools before test.
-+
-+2005-03-17 Tom Parker <palfrey at tevp.net>
-+
-+ * dbus/dbus-userdb.c (_dbus_user_database_lookup): Don't
-+ print DBUS_UID_UNSET; instead print passed username. Also
-+ be sure to actually use gid looked up in cache.
-+
-+ * dbus/dbus-userdb-util.c (_dbus_user_database_lookup_group): Ditto
-+ for DBUS_GID_UNSET and groupname.
-+
-+2005-03-17 Colin Walters <walters at verbum.org>
-+
-+ * bus/print-introspect.c: Move to tools/.
-+ * bus/run-with-tmp-session-bus.sh: Ditto.
-+
-+ * glib/Makefile.am (dbus-glib-bindings.h): Move
-+ generation to tools/Makefile.am.
-+
-+ * test/glib/run-test.sh: Update to handle move
-+ of run-with-tmp-session-bus.sh.
-+
-+ * test/glib/test-service-glib.c: Update to handle
-+ move of dbus-glib-bindings.h.
-+
-+ * tools/print-introspect.c: Moved here
-+ from bus/, and ported to GLib bindings.
-+
-+ * tools/run-with-tmp-session-bus.sh: Moved here
-+ from bus/.
-+
-+ * tools/Makefile.am: Generate dbus-glib-bindings.h
-+ and dbus-bus-introspect.xml here.
-+
-+ * tools/.cvsignore, glib/.cvsignore, bus/.cvsignore:
-+ Update.
-+
-+2005-03-17 Colin Walters <walters at verbum.org>
-+
-+ * bus/driver.c (write_args_for_direction): Use
-+ _dbus_string_get_const_data to retrieve string;
-+ _dbus_string_get_const_data_len doesn't actually return
-+ a NULL-terminated substring.
-+
-+ * test/glib/test-service-glib.c: Include dbus-glib-bindings.h.
-+ (main): Change to use org_freedesktop_DBus_request_name
-+ instead of using g_proxy_begin_call/end_call.
-+
-+2005-03-15 Joe Shaw <joeshaw at novell.com>
-+
-+ * mono/ProxyBuilder.cs (BuildFinalizer): Fix some invalid IL when
-+ generating the finalizer. Fixes from Ben Maurer.
-+
-+2005-03-12 Joe Shaw <joeshaw at novell.com>
-+
-+ * mono/BusDriver.cs: Update method names: ListServices
-+ becomes ListNames; GetOwner becomes GetNameOwner.
-+
-+ * mono/ProxyBuilder.cs (BuildFinalizer): Need to load arg 0
-+ onto the eval stack when removing the delegate.
-+
-+2005-03-12 Joe Shaw <joeshaw at novell.com>
-+
-+ * mono/dbus-sharp.dll.config.in: Don't hardcode 0 for
-+ LT_CURRENT. Set it to the autoconf variable.
-+
-+ * mono/ProxyBuilder.cs: Add a finalizer to the generated proxy
-+ classes that disconnects the signal handler delegate from the
-+ service object. Fixes a big leak of proxy objects on the
-+ client side of things. Patch from Ben Maurer
-+ <bmaurer at ximian.com>
-+
-+2005-03-12 Colin Walters <walters at verbum.org>
-+
-+ * bus/driver.c (write_args_for_direction): New function,
-+ parses a type signature into arguments and outputs to
-+ XML.
-+ (bus_driver_handle_introspect): Use it instead of
-+ hardcoding XML for certain signatures.
-+
-+ * bus/Makefile.am (dbus-bus-introspect.xml): Add
-+ dependency on dbus-daemon.
-+
-+ * glib/dbus-glib-tool.c (main): Parse ignore_unsupported
-+ argument, pass it to dbus_binding_tool_output_glib_client.
-+
-+ * glib/dbus-binding-tool-glib.c
-+ (generate_client_glue): Protect against multiple inclusion.
-+ (dbus_binding_tool_output_glib_client): Add
-+ G_BEGIN_DECLS/G_END_DECLS.
-+
-+ * glib/dbus-binding-tool-glib.c (compute_client_method_name):
-+ Change to just take iface prefix directly.
-+ (write_formal_parameters): Clarify error message.
-+ (check_supported_parameters): New function; checks to see type
-+ signatures of method parameters are supported.
-+ (generate_client_glue): Handle ignore_unsupported flag.
-+ (dbus_binding_tool_output_glib_client): Handle ignore_unsupported
-+ parameter.
-+
-+ * glib/Makefile.am (dbus-glib-bindings.h): Pass
-+ --ignore-unsupported by default until glib bindings
-+ support arrays.
-+
-+2005-03-11 Colin Walters <walters at verbum.org>
-+
-+ * glib/Makefile.am: Generate dbus-glib-bindings.h and
-+ install it.
-+
-+ * bus/print-introspect.c: New file; prints introspection
-+ data for a given name and object path.
-+
-+ * bus/run-with-tmp-session-bus.sh: New file, refactored
-+ from test/glib/run-test.sh. Creates a temporary session
-+ bus and runs another program.
-+
-+ * test/glib/run-test.sh: Refactor to invoke
-+ run-with-tmp-session-bus.sh.
-+
-+ * bus/driver.c (bus_driver_handle_introspect): Fix to print new
-+ introspection format. Also change to use DBUS_TYPE_x_AS_STRING
-+ macros instead of hardcoding.
-+
-+ * glib/.cvsignore, bus/.cvsignore, test/glib/.cvsignore: Update.
-+
-+2005-03-11 Joe Shaw <joeshaw at novell.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_send_with_reply): Remove
-+ this unref; it doesn't match up evenly in some codepaths.
-+ (_dbus_connection_block_pending_call): Unref at every exitpoint;
-+ this evenly matches with the ref near the top of this function.
-+
-+2005-03-09 Joe Shaw <joeshaw at novell.com>
-+
-+ * dbus/dbus-object-tree.c
-+ (_dbus_object_tree_unregister_and_unlock): If checks are enabled
-+ and we try to unregister a path that's not registered, still go
-+ through the process of unlocking and don't just return.
-+
-+2005-03-09 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_invoke): New method; calls
-+ to this are generated for client-side wrappers. Invokes a
-+ D-BUS method and returns reply values.
-+
-+ * glib/dbus-binding-tool-glib.c (write_args_sig_for_direction): New
-+ function; writes signature string for argument direction.
-+ (write_args_for_direction): Change to pass input values directly
-+ instead of via address, and fix indentation.
-+ (generate_client_glue): Change to invoke dbus_g_proxy_invoke. Also
-+ make generated wrappers inlineable.
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_fixed_array): Add
-+ note about using dbus_type_is_fixed.
-+
-+ * dbus/dbus-marshal-basic.c (_dbus_type_is_fixed): Moved to
-+ dbus/dbus-signature.c as dbus_type_is_fixed.
-+
-+ All callers updated.
-+
-+ * dbus/dbus-signature.c (dbus_type_is_fixed): Moved here
-+ from dbus/dbus-marshal-basic.c:_dbus_type_is_fixed.
-+
-+ * dbus/dbus-signature.h: Prototype.
-+
-+ * glib/dbus-binding-tool-glib.c (compute_marshaller_name): Fix
-+ error printf code.
-+
-+ * test/glib/test-dbus-glib.c (main): Be sure to clear error as
-+ appropriate instead of just freeing it.
-+ (main): Free returned strings using g_free.
-+
-+ * test/glib/Makefile.am (test-service-glib-glue.h)
-+ (test-service-glib-bindings.h): Add dependency on dbus-binding-tool.
-+
-+ * glib/dbus-gvalue.c (MAP_BASIC): Refactored from MAP_BASIC_INIT;
-+ simply maps a simple D-BUS type to GType.
-+ (dbus_dbus_type_to_gtype): Function which maps D-BUS type to
-+ GType.
-+ (dbus_gvalue_init): Just invoke dbus_dbus_type_to_gtype and
-+ initialize the value with it.
-+ (dbus_gvalue_binding_type_from_type): Unused, delete.
-+ (dbus_gvalue_demarshal): Switch to hardcoding demarshalling for
-+ various types instead of unmarshalling to value data directly.
-+ Remove can_convert boolean.
-+ (dbus_gvalue_marshal): Remove duplicate initialization; switch to
-+ returning directly instead of using can_convert boolean.
-+ (dbus_gvalue_store): New function; not related to D-BUS per-se.
-+ Stores a GValue in a pointer to a value of its corresponding C
-+ type.
-+
-+ * glib/dbus-gvalue.h: Remove dbus_gvalue_binding_type_from_type,
-+ add dbus_gvalue_store.
-+
-+2005-03-08 Joe Shaw <joeshaw at novell.com>
-+
-+ Fix a bunch of lifecycle and memory management problems
-+ in the mono bindings.
-+
-+ * mono/Arguments.cs (Arguments): Implement IDisposable
-+
-+ * mono/Bus.cs (Bus): Don't allow public instantiation. This is
-+ strictly a static class.
-+
-+ * mono/Connection.cs: Move the DBusObjectPathVTable and associated
-+ delegates into this file.
-+ (Connection): Implement IDisposable.
-+ (Dispose): Disconnect the connection and set the raw connection
-+ pointer to IntPtr.Zero.
-+ (~Connection): Call Dispose().
-+ (RegisterObjectPath): Added. Manages the registration of object
-+ paths so we can cleanly disconnect them at dispose/finalize time.
-+ (UnregisterObjectPath): Ditto.
-+ (set_RawConnection): Unregister all of the object paths when
-+ changing the underlying DBusConnection. Add them back onto the
-+ new connection, if any.
-+
-+ * mono/Handler.cs: Don't implement IDisposable; it doesn't use any
-+ more unmanaged resources anymore, so it's not necessary. Move all
-+ the DBusObjectPathVTable stuff out of here.
-+ (Handler): Save references to our delegates so that they don't get
-+ finalized. Call Connection.RegisterObjectPath() instead of
-+ dbus_connection_register_object_path() directly.
-+ (Message_Called): Dispose the message after we're finished with
-+ it.
-+
-+ * mono/Message.cs (Message): Implement IDisposable.
-+ (Dispose): Dispose the Arguments, and set the RawMessage to
-+ IntPtr.Zero.
-+ (SendWithReplyAndBlock): We own the ref to the reply that comes
-+ back from dbus_connection_send_with_reply_and_block() so add a
-+ comment about that and unref it after we've constructed a managed
-+ MethodReturn class around it. Fixes a big, big leak.
-+
-+ * mono/ProxyBuilder.cs: Reflect into Message to get the Dispose
-+ method.
-+ (BuildSignalHandler): After we've sent the Signal message, dispose
-+ of it.
-+ (BuildMethod): Dispose of the method call and reply messages after
-+ we've sent the message and extracted the data we want from the
-+ reply.
-+
-+ * mono/Service.cs (UnregisterObject): Don't call handler.Dispose()
-+ anymore.
-+ (Service_FilterCalled): Dispose of the message after we're
-+ finished with it.
-+
-+2005-03-08 Joe Shaw <joeshaw at novell.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_send_with_reply):
-+ After we attach our pending call to the connection, unref
-+ it. Fixes a leak.
-+
-+ * mono/Connection.cs (set_RawConnection): Disconnect our
-+ filter and match callbacks from the old connection and
-+ reconnect them to the new connection, if any.
-+
-+ * mono/DBusType/Array.cs: "Code" is a static member, so
-+ don't use "this" to refer to it. Fix for stricter checking
-+ in Mono 1.1.4.
-+
-+ * mono/DBusType/ObjectPath.cs (Append): Don't leak the
-+ object path that we pass into unmanaged code.
-+
-+ * mono/DBusType/String.cs (Append): Don't leak the string
-+ that we pass into unmanged code.
-+
-+2005-03-07 John (J5) Palmieri <johnp at redhat.com>
-+ * NEWS: Update for 0.31
-+
-+ * configure.in: Release 0.31
-+ add LT_CURRENT, LT_REVISION, LT_AGE for easy soname bumping
-+
-+ * qt/Makefile.am: fixed build
-+
-+ * dbus/Makefile.am: soname bump for libdbus
-+
-+ * glib/Makefile.am: soname bump for libdbus-glib
-+
-+2005-03-05 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c:
-+ (pseudorandom_generate_random_bytes_buffer): fix to have no return
-+ value
-+ (_dbus_generate_random_bytes_buffer): fix return value
-+
-+ * dbus/dbus-sysdeps-util.c: s/GETPWNAME/GETPWNAM/ so configure
-+ checks actually work, from Tom Parker <fdo at tevp.net>
-+
-+2005-03-01 Colin Walters <walters at verbum.org>
-+
-+ * test/glib/test-dbus-glib.c (lose, lose_gerror): Utility
-+ functions copied from dbus-glib-tool.c.
-+ (main): Convert lots of error code to use them.
-+ Also add some testing for introspection bits.
-+
-+2005-03-01 Colin Walters <walters at verbum.org>
-+
-+ * doc/TODO: Remove introspection signature TODO.
-+
-+2005-02-27 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gidl.c (property_info_get_type, arg_info_get_type):
-+ Change return value to const char * instead of int so we can do
-+ full signatures.
-+ (struct PropertyInfo, struct ArgInfo): Store char *.
-+ (property_info_new, arg_info_new): Update parameters, strdup.
-+ (property_info_unref, arg_info_unref): Free.
-+
-+ * glib/dbus-gidl.h: Update prototypes.
-+
-+ * glib/dbus-gparser.c (basic_type_from_string): Delete.
-+ (validate_signature): New function, just validates signature and
-+ sets GError.
-+ (parse_property, parse_arg): Invoke validate_signature. Store
-+ signature instead of just type code.
-+
-+ * glib/dbus-gvalue.c (base_type_from_signature): New utility
-+ function to return a primary type for a signature, dropping
-+ information about types in container types.
-+ (dbus_gvalue_genmarshal_name_from_type)
-+ (dbus_gvalue_binding_type_from_type)
-+ (dbus_gvalue_ctype_from_type): Update to take full signature
-+ instead of type code.
-+ (dbus_gtype_to_dbus_type): Moved here from glib/dbus-gobject.c.
-+
-+ * glib/dbus-gvalue.h: Update prototypes for above.
-+
-+ * glib/dbus-gobject.c (gtype_to_dbus_type): Moved to
-+ glib/dbus-gvalue.c as dbus_gtype_to_dbus_type.
-+ (introspect_properties, introspect_signals, write_interface):
-+ Update to handle signatures, and remove usage of
-+ _dbus_gutils_type_to_string.
-+ (handle_introspect): Print out type codes instead of e.g. "string"
-+ in hardcoded introspection XML; also use x_AS_STRING constants
-+ instead of hardcoding in string.
-+
-+ * glib/dbus-glib-tool.c (pretty_print): Handle signature change
-+ to string. Remove usage of _dbus_gutils_type_to_string.
-+
-+ * glib/dbus-gutils.c (_dbus_gutils_type_to_string): Delete.
-+
-+ * glib/dbus-gutils.h (_dbus_gutils_type_to_string): Update for
-+ deletion.
-+
-+ * glib/dbus-binding-tool-glib.c (compute_marshaller)
-+ (compute_marshaller_name, generate_glue): Handle signature change
-+ to string.
-+ (write_formal_parameters, write_args_for_direction): Ditto, and
-+ remove FIXME.
-+
-+ * tools/dbus-tree-view.c (type_to_string): Delete.
-+ (info_set_func_text): Update to print full signatures.
-+
-+ * test/glib/test-service-glib.xml: Change types to new
-+ introspection format.
-+
-+2005-02-26 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/TODO: remove the "guid" item
-+
-+ * test/glib/test-profile.c (no_bus_thread_func): use open_private
-+ (with_bus_thread_func): use open_private
-+
-+ * dbus/dbus-connection.c (dbus_connection_open_private): new
-+ function that works like the old dbus_connection_open()
-+ (dbus_connection_open): now returns an existing connection if
-+ possible
-+
-+ * dbus/dbus-server-unix.c (handle_new_client_fd_and_unlock): pass
-+ through the GUID to the transport
-+
-+ * dbus/dbus-server.c (_dbus_server_init_base): keep around the
-+ GUID in hex-encoded form.
-+
-+ * dbus/dbus-server-debug-pipe.c (_dbus_transport_debug_pipe_new):
-+ pass GUID argument in to the transport
-+
-+ * dbus/dbus-transport-unix.c (_dbus_transport_new_for_fd): add
-+ guid argument
-+
-+ * dbus/dbus-transport.c (_dbus_transport_init_base): add guid argument
-+
-+ * dbus/dbus-auth.c (_dbus_auth_server_new): add guid argument
-+
-+2005-02-25 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-specification.xml: document the GUID thing
-+
-+ * dbus/dbus-server.c (_dbus_server_init_base): initialize a
-+ globally unique ID for the server, and put a "guid=hexencoded"
-+ field in the address
-+
-+ * dbus/dbus-bus.c: fix missing #include of dbus-threads-internal.h
-+
-+ * dbus/dbus-message.c: ditto
-+
-+ * dbus/dbus-dataslot.c: ditto
-+
-+ * dbus/dbus-list.c: ditto
-+
-+ * dbus/dbus-internals.h: wait, just include
-+ dbus-threads-internal.h here
-+
-+ * dbus/dbus-string.c (_dbus_string_copy_to_buffer): move back for
-+ use in main library
-+
-+ * dbus/dbus-sysdeps.c (_dbus_generate_random_bytes_buffer): new function
-+
-+2005-02-24 Colin Walters <walters at verbum.org>
-+
-+ * test/glib/Makefile.am (EXTRA_DIST): Add test-service-glib.xml
-+
-+2005-02-24 John (J5) Palmieir <johnp at redhat.com>
-+
-+ * glib/Makefile.am: added dbus-gobject.h to sources list
-+ so distcheck doesn't fail
-+
-+2005-02-24 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-server.c, dbus/dbus-server-unix.c: change semantics so
-+ you must disconnect before unref, since locking and other things
-+ are screwed up otherwise. Fix assorted other locking stuff.
-+
-+ * dbus/dbus-signature.c (dbus_signature_iter_get_element_type):
-+ fix compilation
-+
-+ * dbus/dbus-threads-internal.h: move the mutex/condvar wrappers
-+ into a private header and don't export from the library
-+
-+ * throughout - call _dbus_thread_stuff vs. dbus_thread_stuff
-+
-+2005-02-24 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-signature.c: New file; implements various functions
-+ related to type signatures. Includes an interator for parsing,
-+ validation functions.
-+ (dbus_type_is_basic): Moved here from
-+ dbus-marshal-basic.c:_dbus_type_is_basic.
-+ (dbus_type_is_container): Moved here from
-+ dbus-marshal-basic.c:_dbus_type_is_container.
-+
-+ All callers of _dbus_type_is_container and _dbus_type_is_basic
-+ updated, and include dbus-signature.h.
-+
-+ * dbus/dbus-signature.h: New file; prototypes for the above.
-+
-+ * dbus/Makefile.am (DBUS_LIB_SOURCES): Add dbus-signature.c,
-+ dbus-signature.h.
-+
-+ * dbus/dbus-marshal-basic.c (map_type_char_to_type): New utility
-+ function factored out of _dbus_first_type_in_signature.
-+ (_dbus_first_type_in_signature_c_str): New function; returns first
-+ type code for a type signature character.
-+
-+ * dbus/dbus-marshal-basic.h: Prototype _dbus_first_type_in_signature_c_str,
-+ handle function moves.
-+
-+ * dbus/dbus-marshal-recursive.h: Export _dbus_type_signature_next.
-+
-+ * dbus/dbus-marshal-recursive.c (_dbus_type_signature_next): New
-+ function; skips to next complete type in type signature.
-+ Implemented using previous skip_one_complete_type. Now
-+ skip_one_complete_type just delegates to
-+ _dbus_type_signature_next.
-+
-+ * dbus/dbus-marshal-basic.c (_dbus_type_is_basic): Moved
-+ to dbus-signature.c
-+ (_dbus_type_is_container): Ditto.
-+
-+ * doc/dbus-specification.xml: Update introspection sample to
-+ use real type signatures.
-+
-+ * dbus/dbus-test.h: Prototype signature test.
-+
-+ * dbus/dbus-test.c (dbus_internal_do_not_use_run_tests): Run
-+ signature tests.
-+
-+ * dbus/dbus-protocol.h (DBUS_ERROR_INVALID_SIGNATURE): New error.
-+
-+2005-02-23 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in (PendingCall::get_reply):
-+ s/dbus_pending_call_get_reply/dbus_pending_call_steal_reply
-+
-+2005-02-21 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-test-main.c (main): Take optional specific test
-+ argument.
-+
-+ * dbus/dbus-test.c (run_test): New function, runs a test function
-+ with no data directory.
-+ (run_data_test): Like above, but takes data directory.
-+ (dbus_internal_do_not_use_run_tests): Take
-+ specific test argument. Replace lots of cut n' paste code
-+ with run_test and run_data_test.
-+
-+ * dbus/dbus-test.h: Update prototype for
-+ dbus_internal_do_not_use_run_tests.
-+
-+2005-02-20 Havoc Pennington <hp at redhat.com>
-+
-+ Fix bugs reported by Daniel P. Berrange
-+
-+ * dbus/dbus-server.c (_dbus_server_unref_unlocked): new function
-+ (protected_change_watch): new function
-+ (_dbus_server_toggle_watch, _dbus_server_remove_watch)
-+ (_dbus_server_add_watch): change to work like the
-+ dbus-connection.c equivalents; like those, probably kind of
-+ busted, but should at least mostly work for now
-+ (dbus_server_disconnect): drop the lock if we were already
-+ disconnected, patch from Daniel P. Berrange
-+
-+ * dbus/dbus-server.c (_dbus_server_toggle_timeout)
-+ (_dbus_server_remove_timeout, _dbus_server_add_timeout): all the
-+ same stuff
-+
-+ * doc/TODO: todo about unscrewing this mess
-+
-+2005-02-19 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-binding-tool-glib.c
-+ (dbus_binding_tool_output_glib_server): Fix iochannel refcounting.
-+
-+ * glib/dbus-glib-tool.c: Include dbus-glib-tool.h, as well
-+ as errno.h and sys/stat.h.
-+ (lose): New function, prints error with
-+ newline and exits.
-+ (lose_gerror): Similar, but takes GError for message.
-+ (main): Add --output argument to specify output file to write to,
-+ instead of always printing to stdout. In this mode, determine
-+ timestamps on source files to see whether any are newer than the
-+ target file. If not, exit. Also convert a number of error
-+ messages to use lose (since it's shorter), and switch to using
-+ g_io_channel_shutdown.
-+
-+2005-02-19 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gobject.c
-+ (_dbus_glib_marshal_dbus_message_to_gvalue_array): add docs
-+
-+ * glib/dbus-glib.c: fix doxygen warnings
-+
-+ * glib/dbus-gparser.c (parse_annotation): error if an annotation
-+ is found on an <arg>
-+
-+2005-02-17 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gobject.h: Don't export
-+ _dbus_glib_marshal_dbus_message_to_gvalue_array.
-+
-+ * glib/dbus-gobject.c (_dbus_glib_marshal_dbus_message_to_gvalue_array): Do rename.
-+ (invoke_object_method): Handle it.
-+
-+ * glib/dbus-gproxy.c (marshal_dbus_message_to_g_marshaller):
-+ Handle rename.
-+
-+2005-02-17 Colin Walters <walters at verbum.org>
-+
-+ * bus/.cvsignore, doc/.cvsignore
-+ * test/data/valid-service-files/.cvsignore, test/glib/.cvsignore:
-+ Update.
-+
-+2005-02-17 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-protocol.h (DBUS_SERVICE_ORG_FREEDESKTOP_DBUS):
-+ Rename to DBUS_SERVICE_DBUS.
-+ (DBUS_PATH_ORG_FREEDESKTOP_DBUS): Rename to DBUS_PATH_DBUS.
-+ (DBUS_PATH_ORG_FREEDESKTOP_LOCAL): Rename to DBUS_PATH_LOCAL.
-+ Change the value from "org.freedesktop.Local"
-+ to "org.freedesktop.DBus.Local".
-+ (DBUS_INTERFACE_ORG_FREEDESKTOP_DBUS): Rename to DBUS_INTERFACE_DBUS.
-+ (DBUS_INTERFACE_ORG_FREEDESKTOP_INTROSPECTABLE): Rename to
-+ DBUS_INTERFACE_INTROSPECTABLE.
-+ Change the value from "org.freedesktop.Introspectable"
-+ to "org.freedesktop.DBus.Introspectable".
-+ (DBUS_INTERFACE_ORG_FREEDESKTOP_PROPERTIES): Rename to
-+ DBUS_INTERFACE_PROPERTIES.
-+ Change the value from "org.freedesktop.Properties"
-+ to "org.freedesktop.DBus.Properties".
-+ (DBUS_INTERFACE_ORG_FREEDESKTOP_PEER): Rename to
-+ DBUS_INTERFACE_PEER.
-+ Change the value from "org.freedesktop.Peer"
-+ to "org.freedesktop.DBus.Peer".
-+ (DBUS_INTERFACE_ORG_FREEDESKTOP_LOCAL):
-+ DBUS_INTERFACE_LOCAL.
-+ Change the value from "org.freedesktop.Local"
-+ to "org.freedesktop.DBus.Local".
-+
-+ All other users of those constants have been changed.
-+
-+ * bus/driver.c (bus_driver_handle_introspect): Use constants.
-+
-+ * glib/dbus-gobject.c (handle_introspect): Use constants.
-+
-+ * doc/dbus-faq.xml, doc/dbus-specification.xml: Update for rename.
-+
-+2005-02-17 Colin Walters <walters at verbum.org>
-+
-+ * glib/dbus-gparser.c (struct Parser): Add in_annotation boolean.
-+ (parse_node, parse_interface, parse_method, parse_signal)
-+ (parse_property, parse_annotation): Lose if we're currently in an
-+ annotation.
-+ (parse_annotation): New function.
-+ (parser_start_element, parser_end_element): Handle annotation.
-+ (parse_method, parse_interface): Remove support for c_name attribute,
-+ switch to annotations.
-+
-+ * glib/dbus-gidl.h (interface_info_get_binding_names)
-+ (method_info_get_binding_names)
-+ (interface_info_get_binding_name, method_info_get_binding_name)
-+ (interface_info_set_binding_name, method_info_set_binding_name):
-+ Remove.
-+ (interface_info_get_annotations, method_info_get_annotations)
-+ (interface_info_get_annotation, method_info_get_annotation)
-+ (interface_info_add_annotation, method_info_add_annotation):
-+ Prototype.
-+
-+ * glib/dbus-gidl.c (struct InterfaceInfo): Substitute "annotations"
-+ for "bindings".
-+ (struct MethodInfo): Ditto.
-+ Straightfoward conversion of binding methods into annotation methods
-+ as prototyped.
-+
-+ * glib/dbus-glib-tool.c (pretty_print): Print annotations.
-+
-+ * glib/dbus-binding-tool-glib.h (DBUS_GLIB_ANNOTATION_C_SYMBOL): Define.
-+
-+ * glib/dbus-binding-tool-glib.c (gather_marshallers, generate_glue):
-+ Use new annotation API.
-+
-+ * doc/introspect.dtd: Fix a number of DTD syntax errors. Add
-+ annotation element.
-+
-+ * doc/dbus-specification.xml: Discuss introspection annotations,
-+ include list of well-known annotations.
-+
-+ * test/glib/test-service-glib.xml: Make validate against new DTD.
-+
-+2005-02-17 Colin Walters <walters at verbum.org>
-+
-+ This patch is based on initial work from
-+ Paul Kuliniewicz <kuliniew at purdue.edu>.
-+
-+ * glib/dbus-gvalue.c (dbus_gvalue_init): New function; move
-+ initialization of GValue from dbus type to here.
-+ (dbus_gvalue_genmarshal_name_from_type): New function; generates a string
-+ for the "glib-genmarshal" program from a DBus type.
-+ (dbus_gvalue_binding_type_from_type): New function; turns a DBus type
-+ into the C name for it we use in the glib bindings.
-+ (dbus_gvalue_ctype_from_type): New function; maps a DBus type into a
-+ glib C type (not GValue).
-+ (dbus_gvalue_demarshal): invoke dbus_gvalue_init.
-+
-+ * glib/dbus-gutils.c (_dbus_gutils_wincaps_to_uscore): Moved here
-+ from dbus-gobject.c.
-+
-+ * glib/dbus-gutils.h: Prototype it.
-+
-+ * glib/dbus-gproxy.c: Include new dbus-gobject.h.
-+ (marshal_dbus_message_to_g_marshaller): Use new shared function
-+ dbus_glib_marshal_dbus_message_to_gvalue_array.
-+
-+ * glib/dbus-gparser.c (parse_interface, parse_method): Handle c_name attribute.
-+ Will be changed once we have annotations.
-+
-+ * glib/dbus-gobject.c: Change info_hash_mutex from GStaticMutex to
-+ GStaticRWLock. Callers updated.
-+ (wincaps_to_uscore): Move to dbus-gutils.c. Callers updated.
-+ (string_table_next): New function for iterating over zero-terminated
-+ string value array.
-+ (string_table_lookup): New function; retrieves specific entry in
-+ array.
-+ (get_method_data): New function; look up method data in object data chunk.
-+ (object_error_domain_prefix_from_object_info)
-+ (object_error_code_from_object_info): New functions, but not implemented yet.
-+ (method_interface_from_object_info): New function; retrieve interface name.
-+ (method_name_from_object_info): New function; retrieve method name.
-+ (method_arg_info_from_object_info): New function; retrieve argument data.
-+ (arg_iterate): New function; iterates over serialized argument data.
-+ (method_dir_signature_from_object_info): New function; returns a
-+ GString holding type signature for arguments for just one
-+ direction (input or output).
-+ (method_input_signature_from_object_info)
-+ (method_output_signature_from_object_info): New functions.
-+ (dbus_glib_marshal_dbus_message_to_gvalue_array): New shared function;
-+ converts dbus message arguments into a GValue array. Used for both
-+ signal handling and method invocation.
-+ (struct DBusGlibWriteIterfaceData): New utility structure.
-+ (write_interface): New function; generate introspection XML for
-+ an interface.
-+ (introspect_interfaces): New function; gathers all interface->methods,
-+ generates introspection XML for them.
-+ (handle_introspect): Invoke introspect_interfaces.
-+ (get_object_property): Be sure to zero-initalize stack-allocated GValue.
-+ (lookup_object_and_method): New function; examines an incoming message
-+ and attempts to match it up (via interface, method name, and argument
-+ signature) with a known object and method.
-+ (gerror_domaincode_to_dbus_error_name): New function; converts a
-+ GError domain and code into a DBus error name. Needs GError data
-+ added to object introspection to work well.
-+ (gerror_to_dbus_error_message): Creates a DBusMessage error return from
-+ GError.
-+ (invoke_object_method): New function to invoke an object method
-+ looked up via lookup_object_and_method. Parses the incoming
-+ message, turns it into a GValue array, then invokes the marshaller
-+ specified in the DBusGMethodInfo. Creates a new message with
-+ either return values or error message as appropriate.
-+ (gobject_message_function): Invoke lookup_object_and_method and
-+ invoke_object_method.
-+
-+ * glib/dbus-glib-tool.c: Include dbus-binding-tool-glib.h.
-+ (enum DBusBindingOutputMode): New enum for binding output modes.
-+ (pretty_print): Print binding names.
-+ (dbus_binding_tool_error_quark): GError bits.
-+ (version): Fix typo.
-+ (main): Create GIOChannel for output. Parse new --mode argument,
-+ possible values are "pretty-print", "glib-server", "glib-client".
-+ Use mode to invoke appropriate function.
-+
-+ * glib/dbus-gobject.h: Prototype dbus_glib_marshal_dbus_message_to_gvalue_array.
-+
-+ * glib/dbus-glib-tool.h: New header, just includes GError bits
-+ for now.
-+
-+ * glib/dbus-gidl.c (struct InterfaceInfo): Add bindings hashtable;
-+ maps binding style to name.
-+ (struct MethodInfo): Ditto.
-+ (get_hash_keys, get_hash_key): Utility function, returns keys for
-+ a GHashTable.
-+ (interface_info_new, method_info_new): Initialize bindings.
-+ (interface_info_unref, method_info_unref): Destroy bindings.
-+ (method_info_get_binding_names, method_info_get_binding_name)
-+ (interface_info_get_binding_names, interface_info_get_binding_name):
-+ Functions for retrieving binding names.
-+ (method_info_set_binding_name, interface_info_set_binding_name):
-+ Functions for setting binding names.
-+
-+ * glib/dbus-binding-tool-glib.h: New file, has prototypes
-+ for glib binding generation.
-+
-+ * glib/dbus-binding-tool-glib.c: New file, implements server-side
-+ and client-side glib glue generation.
-+
-+ * glib/Makefile.am (dbus_binding_tool_SOURCES): Add
-+ dbus-binding-tool-glib.c, dbus-binding-tool-glib.h,
-+ dbus-glib-tool.h.
-+
-+ * dbus/dbus-glib.h (struct DBusGMethodMarshaller): Remove in favor
-+ of using GClosureMarshal directly.
-+ (struct DBusGObjectInfo): Add n_infos member.
-+
-+ * test/glib/test-service-glib.xml: New file; contains introspection data
-+ for MyTestObject used in test-service-glib.c.
-+
-+ * test/glib/test-service-glib.c (enum MyObjectError): New GError enum.
-+ (my_object_do_nothing, my_object_increment, my_object_throw_error)
-+ (my_object_uppercase, my_object_many_args): New test methods.
-+ (main): Use dbus_g_object_class_install_info to include generated object
-+ info.
-+
-+ * test/glib/Makefile.am: Generate server-side glue for test-service-glib.c,
-+ as well as client-side bindings.
-+
-+ * test/glib/test-dbus-glib.c: Include test-service-glib-bindings.h.
-+ (main): Activate TestSuiteGLibService; test invoke a bunch of its methods
-+ using both the dbus_gproxy stuff directly as well as the generated bindings.
-+
-+2005-02-15 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_dispatch): always
-+ complete a pending call, don't run filters first.
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_end_call): change to use
-+ dbus_pending_call_steal_reply
-+
-+ * dbus/dbus-pending-call.c (dbus_pending_call_block): just call
-+ _dbus_connection_block_pending_call
-+ (dbus_pending_call_get_reply): change to steal_reply and return a
-+ ref
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_send_with_reply_and_block): port to work in terms
-+ of DBusPendingCall
-+ (_dbus_connection_block_pending_call): replace block_for_reply
-+ with this
-+
-+2005-02-14 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-userdb-util.c (_dbus_user_database_lookup_group):
-+ properly handle looking up group information by name; fix
-+ from j at bootlab.org
-+
-+2005-02-13 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_return_message)
-+ (dbus_connection_borrow_message): hold dispatch lock while message
-+ is outstanding
-+ (_dbus_connection_block_for_reply): hold dispatch lock while we
-+ block for the reply, so nobody steals our reply
-+ (dbus_connection_pop_message): hold the dispatch lock while we
-+ pluck the message
-+
-+2005-02-13 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-connection.c (_dbus_connection_acquire_dispatch)
-+ (_dbus_connection_release_dispatch)
-+ (_dbus_connection_acquire_io_path)
-+ (_dbus_connection_release_io_path): make the mutex and condvar
-+ control access to the "acquired" flag. Drop the connection lock
-+ while waiting on the condvar. Hopefully these are baby steps in
-+ roughly the right direction.
-+
-+2005-02-13 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-connection.c: use separate mutexes for the condition
-+ variables; this is some kind of baseline for sanity, but the
-+ condition variables still aren't used correctly afaict
-+
-+2005-02-13 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-object-tree.c (handle_default_introspect_and_unlock):
-+ fix a double-unlock
-+
-+ * dbus/dbus-connection.c
-+ (_dbus_connection_detach_pending_call_unlocked): add this
-+
-+ Initial semi-correct pass through to fix thread locking; there are
-+ still some issues with the condition variable paths I'm pretty
-+ sure
-+
-+ * dbus/dbus-server.c: add a mutex on DBusServer and appropriate
-+ lock/unlock calls
-+
-+ * dbus/dbus-connection.c (_dbus_connection_do_iteration_unlocked):
-+ rename to add _unlocked
-+ (struct DBusConnection): move "dispatch_acquired" and
-+ "io_path_acquired" to use only one bit each.
-+ (CONNECTION_LOCK, CONNECTION_UNLOCK): add checks with !DBUS_DISABLE_CHECKS
-+ (dbus_connection_set_watch_functions): hacky fix to reentrancy
-+ (_dbus_connection_add_watch, _dbus_connection_remove_watch)
-+ (_dbus_connection_toggle_watch, _dbus_connection_add_timeout)
-+ (_dbus_connection_remove_timeout)
-+ (_dbus_connection_toggle_timeout): drop lock when calling out to
-+ user functions; done in a hacky/bad way.
-+ (_dbus_connection_send_and_unlock): add a missing unlock
-+ (_dbus_connection_block_for_reply): add a missing unlock
-+
-+ * dbus/dbus-transport.c (_dbus_transport_get_is_authenticated):
-+ drop lock in a hacky probably unsafe way to call out to user
-+ function
-+
-+2005-02-12 Havoc Pennington <hp at redhat.com>
-+
-+ * tools/dbus-tree-view.c (info_set_func_text): display more
-+ details on args
-+
-+ * bus/driver.c (bus_driver_handle_list_services): list the bus
-+ driver
-+
-+ * glib/dbus-gparser.c (parse_arg): generate an arg name if none is supplied
-+
-+ * glib/dbus-gidl.c (signal_info_get_n_args): new function
-+ (method_info_get_n_args): new function
-+
-+2005-02-12 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/driver.c (bus_driver_handle_introspect): add introspection
-+ for bus driver
-+
-+2005-02-12 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/driver.c: put the signature of each bus driver method in the
-+ table of handlers and check it on incoming calls; this isn't
-+ really useful, but going to add introspect support in a minute.
-+
-+2005-02-11 Joe Shaw <joeshaw at novell.com>
-+
-+ * mono/Connection.cs: The unpredictability of finalizers in mono
-+ prevents us from deterministically disconnecting the filters from
-+ the Service class's finalizer, so move tracking of filters and
-+ matches here. Add API for that.
-+
-+ * mono/Service.cs: Remove the code, add code which calls the
-+ methods now on the Connection class.
-+
-+2005-02-11 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus.py (class Sender): added to support dbus signals better
-+ (Bus::add_signal_receiver): added expand_args parameter which defaults
-+ to True. When expand args is True the signal handler will pass the
-+ message arguments as parameters to the signal handler. If False
-+ revert to previous behavior where the signal handler must get the
-+ argument list from the message. This is to help port applications
-+ like HAL that have a tendancy to send variable length argument lists.
-+ self._match_rule_to_receivers is now a dict of dicts.
-+ (Bus::remove_signal_receiver): pop handler off the dict intead of
-+ removing it from a list
-+ (Bus::_signal_func): change signal handlers so that interface,
-+ signal_name, service, path and message are packed into a Sender
-+ object and that is passed to the handler. If expand_args is True
-+ extract the args list from the message and append it to the parameter
-+ list
-+
-+ * python/dbus_bindings.pyx.in (class Signature): added to support
-+ signiature types
-+ (MessageIter::__init__): changed iteration limit to match D-BUS
-+ (MessageIter::get*): added INT16, UINT16, SIGNATURE, DICT_ENTRY,
-+ STRUCT and VARIENT type support
-+ (MessageIter::python_value_to_dbus_sig): made recursive to support
-+ recursive types
-+ (MessageIter::append*): added Signature, dict, tuple
-+ support
-+
-+ * python/examples/example-client.py: added examples of getting tuples
-+ and dicts
-+
-+ * python/examples/example-service.py: added examples of sending tuples
-+ and dicts
-+
-+ * python/examples/example-signal-recipient.py: Fixed to handle new
-+ signal callback format
-+
-+2005-02-10 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-dbus-glib.c (main): fix so this test doesn't fail
-+ (call dbus_g_proxy_add_signal)
-+
-+ * dbus/dbus-server-unix.c (_dbus_server_new_for_tcp_socket):
-+ escape the hostname
-+ (_dbus_server_new_for_domain_socket): escape the path
-+
-+ * dbus/dbus-address.c (dbus_address_escape_value): new
-+ (dbus_address_unescape_value): new
-+ (dbus_parse_address): unescape values
-+
-+ * dbus/dbus-string.c (_dbus_string_append_byte_as_hex): new function
-+
-+ * doc/dbus-specification.xml: explain how to escape values in
-+ addresses
-+
-+2005-02-10 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message-factory.c (generate_special): modify test to
-+ avoid using a non-basic dict key
-+
-+ * dbus/dbus-marshal-validate-util.c: add test for the below
-+
-+ * doc/dbus-specification.xml: require that dict keys are a basic
-+ type
-+
-+ * dbus/dbus-marshal-validate.c
-+ (_dbus_validate_signature_with_reason): require that dict key is a
-+ basic type
-+
-+2005-02-10 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-object-tree.c (handle_default_introspect_and_unlock):
-+ change to be _and_unlock instead of _unlocked
-+
-+ * dbus/dbus-connection.c
-+ (_dbus_connection_send_preallocated_unlocked_no_update): rename to
-+ have no_update so we can find this bug quickly in future
-+
-+2005-02-10 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message-util.c (verify_test_message): tests for string
-+ array
-+
-+ * dbus/dbus-message.c (dbus_message_append_args_valist): add
-+ support for arrays of string/signature/path
-+
-+2005-02-10 Joe Shaw <joeshaw at novell.com>
-+
-+ * dbus/dbus-connection.c
-+ (_dbus_connection_queue_received_message_link,
-+ _dbus_connection_message_sent): Add the path to
-+ the verbose output.
-+ (_dbus_connection_send_preallocated_and_unlock): Added. Calls
-+ _dbus_connection_send_preallocated_unlocked(), updated the
-+ dispatch status, and unlocks. Fixes a bug where certain
-+ situations (like a broken pipe) could cause a Disconnect message
-+ to not be sent, tricking the bus into thinking a service was still
-+ there when the process had quit.
-+ (_dbus_connection_send_preallocated): Call
-+ _dbus_connection_send_preallocated_and_unlock().
-+ (_dbus_connection_send_and_unlock): Added. Calls
-+ _dbus_connection_send_preallocated_and_unlock().
-+ (dbus_connection_send): Call _dbus_connection_send_and_unlock().
-+ (dbus_connection_send_with_reply): Update the dispatch status and
-+ unlock.
-+
-+ * mono/Service.cs (~Service): Added. Removes the filter so that
-+ we don't get unmanaged code calling back into a GCed delegate.
-+ (RemoveFilter); Added.
-+
-+2005-02-09 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-message.c (dbus_message_iter_open_container):
-+ - Removed check for iterator type being an array because
-+ get_arg_type does not work with writer iterators
-+ - Pass NULL to _dbus_type_writer_recurse if signiture is NULL
-+
-+2005-02-07 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-specification.xml: some more language cleanups; add
-+ stuff about how to deal with invalid protocol and extension
-+ points; add _ to allowed chars in auth commands; add EXTENSION_
-+ auth command prefix
-+
-+2005-02-06 Havoc Pennington <hp at redhat.com>
-+
-+ * s/expected/required/ in a couple places for clarity
-+
-+2005-02-07 Colin Walters <walters at verbum.org>
-+
-+ * bus/selinux.c (bus_selinux_allows_send): Handle NULL for
-+ sender or proposed_recipient.
-+
-+2005-02-06 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message-factory.c (generate_special): more tests
-+
-+ * dbus/dbus-marshal-validate.c (validate_body_helper): detect
-+ array length that exceeds the maximum
-+
-+2005-02-05 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message-factory.c (generate_special): more test cases,
-+ increasing coverage
-+
-+ * dbus/dbus-marshal-validate.c (validate_body_helper): return the
-+ reason why a signature was invalid
-+
-+ * dbus/dbus-marshal-header.c (load_and_validate_field): fix to
-+ skip the length of the string before we look at it in validation
-+
-+ * dbus/dbus-string-util.c (_dbus_string_test): add tests for
-+ equal_substring
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_new): default
-+ max_message_length to DBUS_MAXIMUM_MESSAGE_LENGTH
-+
-+2005-02-05 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-marshal-validate.c (validate_body_helper): fix crash
-+ if the signature of a variant was empty
-+ (_dbus_validate_signature_with_reason): catch "(a)" (array inside
-+ struct with no element type)
-+
-+ * dbus/dbus-message-factory.c (generate_uint32_changed): add more
-+ mangled messages to break things
-+
-+2005-02-04 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_disconnect_signal): use
-+ g_quark_try_string() so it actually can return 0
-+ (dbus_g_proxy_connect_signal): ditto
-+
-+2005-02-04 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_emit_remote_signal): fix a
-+ bogus warning
-+ (tristring_from_message): assert cleanly on null path/interface
-+ (should not be possible though I decided later)
-+ (dbus_g_proxy_dispose): move proxy manager unregistration here
-+ (DBUS_G_PROXY_DESTROYED): add this macro, and use it in a bunch of
-+ g_return_if_fail() checks
-+
-+2005-02-04 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/Makefile.am (EXTRA_DIST): add DTDs to makefile
-+
-+ * doc/introspect.dtd: add introspect.dtd from David A. Wheeler
-+ (with some minor changes)
-+
-+ * doc/dbus-specification.xml: add deprecated attribute to
-+ introspection format
-+
-+2005-01-31 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gproxy.c: rewrite how signals work again, this time I
-+ think it's sort of right
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ * tools/dbus-viewer.c: kind of half-ass hook up the option menu.
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ * tools/dbus-names-model.c: dynamically watch NameOwnerChanged
-+
-+ * autogen.sh: change to autotools 1.9
-+
-+ * glib/dbus-gproxy.c: completely change how signals work
-+ (dbus_g_proxy_add_signal): new function to specify signature of a
-+ signal
-+ (dbus_g_proxy_emit_received): marshal the dbus message to GValues,
-+ and g_warning if the incoming message has the wrong signature.
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ * tools/dbus-names-model.c (have_names_notify): fix this
-+
-+ * dbus/dbus-message.c (_dbus_message_iter_get_args_valist): clean
-+ up the string array handling a bit
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-glib.c (dbus_g_pending_call_set_notify): new function
-+ (dbus_g_pending_call_cancel): new function
-+
-+ * dbus/dbus-glib.h: move GType decls for connection/message here;
-+ * dbus/dbus-glib.c: move all the g_type and ref/unref stuff in
-+ here, just kind of rationalizing how we handle all that
-+
-+ * tools/dbus-names-model.c: new file for a tree model listing the
-+ services on a bus
-+
-+ * tools/dbus-tree-view.c (model_new): use proper typing on the
-+ model rows
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gmain.c: add a custom GSource back that just checks
-+ whether the message queue has anything in it; otherwise, there are
-+ cases where we won't see messages in the queue since there was no
-+ IO visible to the glib main loop
-+
-+ * dbus/dbus-connection-internal.h (_DBUS_DEFAULT_TIMEOUT_VALUE):
-+ increase default message timeout to 25 seconds
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c (no_bus_stop_server): remove the
-+ warning about the g_warning that I just fixed
-+
-+ * glib/dbus-gmain.c: rewrite the main loop stuff to avoid the
-+ custom source, seems to be a lot easier to understand and work
-+ better.
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ I think this main loop thing is conceptually broken, but here are
-+ some band aids. I'll maybe rewrite it in a minute.
-+
-+ * glib/dbus-gmain.c (add_timeout): timeout stuff doesn't use the
-+ custom GSource, so don't pass it in; confusing
-+ (gsource_server_finalize, gsource_connection_finalize): add
-+ finalize handlers that remove all the watches.
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gobject.c (introspect_properties): fix the XML
-+ generated
-+
-+ * dbus/dbus-message.c (dbus_message_unref): add an in_cache flag
-+ which effectively detects the use of freed messages
-+
-+ * glib/dbus-gobject.c (handle_introspect): modify and return the
-+ reply message instead of the incoming message
-+
-+ * dbus/dbus-object-tree.c (handle_default_introspect_unlocked):
-+ gee, maybe it should SEND THE XML instead of just making a string
-+ and freeing it again ;-)
-+
-+ * tools/dbus-print-message.c (print_message): improve printing of
-+ messages
-+
-+ * configure.in: add debug-glib.service to the output
-+
-+2005-01-30 Havoc Pennington <hp at redhat.com>
-+
-+ dbus-viewer introspected and displayed the bus driver
-+
-+ * dbus/dbus-object-tree.c
-+ (object_tree_test_iteration): add tests for a handler registered on "/"
-+
-+ * dbus/dbus-object-tree.c
-+ (_dbus_decompose_path): fix to handle path "/" properly
-+ (run_decompose_tests): add tests for path decomposition
-+
-+ * glib/dbus-gutils.c (_dbus_gutils_split_path): fix to handle "/"
-+ properly
-+
-+ * glib/dbus-gobject.c (handle_introspect): fix quotes
-+
-+ * test/glib/run-test.sh: support launching the bus, then running
-+ dbus-viewer
-+
-+ * test/glib/test-service-glib.c (main): put in a trivial gobject
-+ subclass and register it on the connection
-+
-+ * bus/driver.c (bus_driver_handle_introspect): implement
-+ introspection of the bus driver service
-+
-+ * dbus/dbus-protocol.h: add #defines for the XML namespace,
-+ identifiers, doctype decl
-+
-+ * bus/driver.c (bus_driver_handle_get_service_owner): handle
-+ attempts to get owner of DBUS_SERVICE_ORG_FREEDESKTOP_DBUS by
-+ returning the service unchanged.
-+ (bus_driver_handle_message): remove old check for reply_serial in
-+ method calls, now the message type deals with that
-+ (bus_driver_handle_message): handle NULL interface
-+
-+ * glib/dbus-gproxy.c (dbus_g_proxy_get_bus_name): new function
-+
-+ * glib/dbus-gloader-expat.c (description_load_from_string): allow
-+ -1 for len
-+
-+ * tools/dbus-viewer.c: add support for introspecting a service on
-+ a bus
-+
-+ * glib/dbus-gproxy.c (dbus_g_pending_call_ref): add
-+ (dbus_g_pending_call_unref): add
-+
-+2005-01-29 Havoc Pennington <hp at redhat.com>
-+
-+ * tools/dbus-tree-view.c: add support for displaying properties.
-+ (run dbus-viewer with an introspect xml file as arg, then resize
-+ the window so the tree elements show up, not sure what that is)
-+
-+ * glib/dbus-gobject.c (handle_introspect): return
-+ org.freedesktop.Properties and org.freedesktop.Introspectable
-+ interfaces when we are introspected.
-+
-+ * doc/dbus-specification.xml: allow empty interface name when
-+ Get/Set a property
-+
-+2005-01-29 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/Makefile.am: rename dbus-glib-tool to dbus-binding-tool;
-+ though it uses glib, it could be extended for any binding in
-+ principle
-+
-+ * glib/dbus-gobject.c (gobject_message_function): change to the
-+ new way properties work
-+
-+ * dbus/dbus-protocol.h: add the new interfaces
-+
-+ * doc/dbus-specification.xml: document the introspection format,
-+ Introspectable interface, and add an org.freedesktop.Properties
-+ interface.
-+
-+ * glib/dbus-gparser.c: add support for a <property> element
-+
-+ * glib/dbus-gidl.c: add PropertyInfo
-+
-+ * glib/dbus-gobject.c (handle_introspect): put the outermost
-+ <node> outside the signal and property descriptions.
-+ (introspect_properties): export properties as <property> rather
-+ than as method calls
-+
-+2005-01-28 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/TODO, doc/dbus-specification.xml: spec and TODO tweaks
-+ related to authentication protocol
-+
-+2005-01-28 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in: Updated to handle new D-BUS type system
-+ - BUS_ACTIVATION -> BUS_STARTER
-+ - DBUS_BUS_ACTIVATION -> DBUS_BUS_STARTER
-+ - class MessageIter (__init__): Added recursion checking
-+ so we throw a nice error instead of just disconnecting from the
-+ bus.
-+ (get): Added arg_type parameter for recursion.
-+ Removed the nil type
-+ Added signiture type placeholder (not implemented)
-+ Added struct type placeholder (not implemented)
-+ Added varient type placeholder (not implemented)
-+ Commented out dict type for now
-+ (get_element_type): renamed from get_array_type
-+ (get_*): changed to use the dbus_message_iter_get_basic API
-+ (get_*_array): removed in favor of recursive get_array method
-+ (get_array): new recursive method which calls get to marshal
-+ the elements of the array
-+ (value_to_dbus_sig): New method returns the corrasponding
-+ dbus signiture to a python value
-+ (append): Comment out dict handling for now
-+ Handle lists with the new recursive API
-+ Comment out None handling for now
-+ (append_nil): removed
-+ (append_*): changed to use dbus_message_iter_append_basic API
-+ (append_*_array): removed in favor of recursive append_array
-+ method
-+ (__str__): Make it easier to print out recursive iterators
-+ for debugging
-+ - class Message (__str__): moved type inspection to the
-+ MessageIter class' __str__ method
-+ (get_iter): Added an append parameter wich defaults to False
-+ If True use the new API's to create an append iterator
-+
-+ * python/dbus.py: Update to use new bindings API
-+ - TYPE_ACTIVATION -> TYPE_STARTER
-+ - class Bus (_get_match_rule): GetServiceOwner -> GetNameOwner
-+ - class ActivationBus -> class StarterBus
-+ - class RemoteObject (__call__): get an append iterator
-+ - (_dispatch_dbus_method_call): get an append iterator
-+ - class Object (emit_signal): get an append iterator
-+
-+ * python/examples/: Fixed up the examples to work with the new API
-+
-+2005-01-28 Joe Shaw <joeshaw at novell.com>
-+
-+ * configure.in: Bump version up to 0.30.
-+
-+ * HACKING: Add a release item to bump the version number up after
-+ a release.
-+
-+2005-01-28 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-specification.xml: update to describe 16-bit types and
-+ dict entries
-+
-+ * dbus/dbus-marshal-basic.c (_dbus_unpack_uint16): fix broken
-+ assertion
-+
-+ * dbus/dbus-protocol.h (DBUS_TYPE_DICT_ENTRY): add DICT_ENTRY as a
-+ type
-+
-+ * dbus/dbus-marshal-recursive.c: implement
-+
-+2005-01-27 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-arch-deps.h.in: add 16/32-bit types
-+
-+ * configure.in: find the right type for 16 and 32 bit ints as well
-+ as 64
-+
-+ * dbus/dbus-protocol.h (DBUS_TYPE_INT16, DBUS_TYPE_UINT16): add
-+ the 16-bit types so people don't have to stuff them in 32-bit or
-+ byte arrays.
-+
-+2005-01-27 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c: byteswap the message if you init an
-+ iterator to read/write from it
-+
-+ * dbus/dbus-marshal-byteswap.c: new file implementing
-+ _dbus_marshal_byteswap()
-+
-+ * dbus/dbus-marshal-basic.c: add _dbus_swap_array()
-+
-+2005-01-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-marshal-validate-util.c: break this out (and fix
-+ build, apparently - nobody noticed?)
-+
-+2005-01-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-marshal-recursive.h: remove todo comment
-+
-+2005-01-25 Joe Shaw <joeshaw at novell.com>
-+
-+ * Land the mono binding changes to conform to the new APIs.
-+
-+ * mono/Makefile.am: Remove Custom.cs, DBusType/Custom.cs,
-+ DBusType/Dict.cs, and DBusType/Nil.cs from the build.
-+
-+ * mono/Arguments.cs (GetCodeAsString): Added. Returns the dbus
-+ type code as a string.
-+ (InitAppending): Rename dbus_message_append_iter_init() to
-+ dbus_message_iter_init_append().
-+
-+ * mono/BusDriver.cs: Rename ServiceEventHandler to
-+ NameOwnerChangedHandler. Rename GetServiceOwner to GetOwner.
-+ Rename ServiceOwnerChanged to NameOwnerChanged.
-+
-+ * mono/Connection.cs: Rename BaseService to UniqueName, and the
-+ underlying C call.
-+
-+ * mono/Custom.cs: Removed. The CUSTOM type has been removed.
-+
-+ * mono/Service.cs: Rename Exists to HasOwner, internally rename
-+ dbus_bus_acquire_service() to dbus_bus_request_name().
-+
-+ * mono/DBusType/Array.cs (ctor): Use Type.GetElementType() instead
-+ of Type.UnderlyingSystemType to get the correct element type for
-+ the array.
-+ (ctor): Update code for new APIs: use dbus_message_iter_recurse(),
-+ dbus_message_get_{element|arg}_type() instead of
-+ dbus_message_iter_init_array_iterator().
-+ (Append): Replace dbus_message_iter_append_array() with
-+ dbus_message_iter_open_container() and
-+ dbus_message_iter_close_container().
-+
-+ * mono/DBusType/Custom.cs, mono/DBusType/Nil.cs: Removed. These
-+ types have been removed.
-+
-+ * mono/DBusType/*.cs: Replace calls of
-+ dbus_message_iter_get_[type]() to dbus_message_iter_get_basic(),
-+ but specify the type in the DllImport extern declaration. Ditto
-+ for dbus_message_iter_append_[type]() ->
-+ dbus_message_iter_append_basic().
-+
-+ * mono/example/BusListener.cs: Update for ServiceEventHandler ->
-+ NameOwnerChangedHandler.
-+
-+2005-01-25 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in: Rename of methods and bindings
-+ - get_base_service -> get_unique_name
-+ - bus_get_base_service -> bus_get_unique_name
-+ - dbus_bus_get_base_service -> dbus_bus_get_unique_name
-+ - ACTIVATION_REPLY_ACTIVATED -> DBUS_START_REPLY_SUCCESS
-+ - ACTIVATION_REPLY_ALREADY_ACTIVE -> DBUS_START_REPLY_ALREADY_RUNNING
-+ - bus_activate_service -> bus_start_service_by_name
-+ - dbus_bus_activate_service -> dbus_bus_start_service_by_name
-+ - bus_acquire_service -> bus_request_name
-+ - dbus_bus_acquire_service -> dbus_bus_request_name
-+ - bus_service_exists -> bus_name_has_owner
-+ - dbus_bus_service_exists -> dbus_bus_name_has_owner
-+
-+ * python/dbus.py: Rename of methods
-+ - activate_service -> start_service_by_name
-+ - bus_acquire_service -> bus_request_name
-+ - ACTIVATION_REPLY_ACTIVATED -> START_REPLY_SUCCESS
-+ - ACTIVATION_REPLY_ALREADY_ACTIVE -> START_REPLY_ALREADY_RUNNING
-+
-+
-+2005-01-24 Joe Shaw <joeshaw at novell.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_dispatch): Print out the
-+ signature for the method that can't be found.
-+
-+ * dbus/dbus-message.c (dbus_message_iter_init): To check to see if
-+ the message has any arguments, we need to call
-+ _dbus_type_reader_get_current_type(), not
-+ _dbus_type_reader_has_next().
-+
-+2005-01-24 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message-factory.c: more testing of message validation
-+
-+ * dbus/dbus-protocol.h (DBUS_MINIMUM_HEADER_SIZE): move to this
-+ header
-+
-+2005-01-23 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message-factory.c, dbus/dbus-message-util.c:
-+ get this all working, not many tests in the framework yet though
-+
-+2005-01-22 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-faq.xml, doc/dbus-tutorial: add a FAQ and update
-+ tutorial, based on work from David Wheeler.
-+
-+2005-01-21 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-bus.c: add more return_if_fail checks
-+
-+ * dbus/dbus-message.c (load_message): have the "no validation"
-+ mode (have to edit the code to toggle the mode for now though)
-+
-+ * dbus/dbus-marshal-header.c (_dbus_header_load): have a mode that
-+ skips all validation; I want to use this at least for benchmark
-+ baseline, I'm not sure if it should be a publicly-available switch.
-+
-+2005-01-21 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gmain.c: don't put the GLib bindings in the same
-+ toplevel doxygen group as the low-level API stuff
-+
-+ * dbus/dbus.h: note that libdbus is the low-level API
-+
-+2005-01-20 Havoc Pennington <hp at redhat.com>
-+
-+ * update-dbus-docs.sh: script to update docs on the web site, only
-+ works for me though. neener.
-+
-+2005-01-20 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_poll): amazingly, trying to compile
-+ code can reveal bugs in it
-+
-+2005-01-20 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_poll): fix several bugs in the
-+ select() version, patches from Tor Lillqvist
-+
-+2005-01-20 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-tutorial.xml: replace > with >
-+
-+ * bus/services.c (bus_registry_acquire_service): validate the name
-+ and return a better error if it's no good.
-+
-+ * doc/dbus-specification.xml: note NO_AUTO_START change
-+
-+ * dbus/dbus-protocol.h (DBUS_HEADER_FLAG_NO_AUTO_START): change
-+ from AUTO_START, we're toggling the default
-+
-+ * bus/dispatch.c: adapt the tests to change of auto-start default
-+
-+2005-01-18 Havoc Pennington <hp at redhat.com>
-+
-+ * rename dbus-daemon-1 to dbus-daemon throughout
-+
-+2005-01-18 Havoc Pennington <hp at redhat.com>
-+
-+ * Throughout, grand renaming to strip out the use of "service",
-+ just say "name" instead (or "bus name" when ambiguous). Did not
-+ change the internal code of the message bus itself, only the
-+ programmer-facing API and messages.
-+
-+ * doc/dbus-specification.xml: further update the message bus section
-+
-+ * bus/config-parser.c (all_are_equiv): fix bug using freed string
-+ in error case
-+
-+2005-01-17 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-types.h: remove 16-bit types since we don't use them
-+ ever
-+
-+ * dbus/dbus-marshal-validate.c (_dbus_validate_path): disallow any
-+ "invalid name character" not only non-ASCII
-+
-+ * doc/dbus-specification.xml: further update spec, message bus
-+ parts are still out-of-date but the marshaling etc. stuff is now
-+ accurate-ish
-+
-+2005-01-17 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-specification.xml: partially update spec
-+
-+2005-01-17 Havoc Pennington <hp at redhat.com>
-+
-+ * Throughout, align variant bodies according to the contained
-+ type, rather than always to 8. Should save a fair bit of space in
-+ message headers.
-+
-+ * dbus/dbus-marshal-validate.c (_dbus_validate_body_with_reason):
-+ fix handling of case where p == end
-+
-+ * doc/TODO: remove the dbus_bool_t item and variant alignment items
-+
-+2005-01-17 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-types.h: hardcode dbus_bool_t to 32 bits
-+
-+ * Throughout: modify DBUS_TYPE_BOOLEAN to be a 32-bit type instead
-+ of an 8-bit type. Now dbus_bool_t is the type to use whenever you
-+ are marshaling/unmarshaling a boolean.
-+
-+2005-01-16 Havoc Pennington <hp at redhat.com>
-+
-+ This is about it on what can be disabled/deleted from libdbus
-+ easily, back below 150K anyhow. Deeper cuts are more work than
-+ just turning the code off as I've done here.
-+
-+ * dbus/dbus-marshal-basic.c (_dbus_pack_int32): we don't need the
-+ signed int convenience funcs
-+
-+ * dbus/dbus-internals.c (_dbus_verbose_real): omit when not in
-+ verbose mode
-+
-+ * dbus/dbus-string-util.c, dbus/dbus-string.c: more breaking
-+ things out of libdbus
-+
-+ * dbus/dbus-sysdeps.c, dbus/dbus-sysdeps-util.c: same
-+
-+ * dbus/dbus-hash.c: purge the TWO_STRINGS crap (well, make it
-+ tests-enabled-only, though it should probably be deleted)
-+
-+ * dbus/dbus-message-util.c: same stuff
-+
-+ * dbus/dbus-auth-util.c: same stuff
-+
-+2005-01-16 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-userdb-util.c: split out part of dbus-userdb.c
-+
-+ * dbus/dbus-sysdeps.c (_dbus_uid_from_string): move here to pave
-+ way for stripping down dbus-userdb.c stuff included in libdbus.
-+ Rename _dbus_parse_uid for consistency.
-+
-+2005-01-16 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-internals.c (_dbus_real_assert): print the function
-+ name the assertion failed in
-+
-+ * dbus/dbus-internals.h (_dbus_return_if_fail)
-+ (_dbus_return_val_if_fail): assert that the name of the function
-+ containing the check doesn't start with '_', since we only want to
-+ use checks on public functions
-+
-+ * dbus/dbus-connection.c (_dbus_connection_ref_unlocked): change
-+ checks to assertions
-+
-+ * dbus/dbus-marshal-header.c (_dbus_header_set_field_basic):
-+ change checks to asserts for private function
-+
-+ * dbus/dbus-message.c (_dbus_message_set_serial): checks
-+ to asserts for private function
-+
-+ * dbus/dbus-marshal-recursive.c (skip_one_complete_type): remove
-+ broken assertion that was breaking make check
-+ (_dbus_type_reader_array_is_empty): remove this rather than fix
-+ it, was only used in assertions
-+
-+2005-01-16 Havoc Pennington <hp at redhat.com>
-+
-+ * test/unused-code-gc.py: hacky script to find code that's used
-+ only by the bus (not libdbus) or used only by tests or not used at
-+ all. It has some false alarms, but looks like we can clean up a
-+ lot of size from libdbus.
-+
-+ * dbus/dbus-sysdeps.c, dbus/dbus-sysdeps-utils.c,
-+ dbus/Makefile.am: initially move 10K of binary size out of libdbus
-+
-+2005-01-16 Havoc Pennington <hp at redhat.com>
-+
-+ * Add and fix docs according to Doxygen warnings throughout
-+ source.
-+
-+ * dbus/dbus-marshal-recursive.c
-+ (_dbus_type_reader_array_is_empty): change this to just call
-+ array_reader_get_array_len() and make it static
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_element_type): rename
-+ from get_array_type
-+ (dbus_message_iter_init_append): rename from append_iter_init
-+
-+ * dbus/dbus-marshal-recursive.c
-+ (_dbus_type_reader_get_element_type): rename from
-+ _dbus_type_reader_get_array_type
-+
-+2005-01-15 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c (with_bus_server_filter): fix crash
-+
-+ * dbus/dbus-marshal-basic.c (_dbus_unpack_uint32): inline as macro
-+ when DBUS_DISABLE_ASSERT
-+ (_dbus_marshal_set_basic): be sure we align for the string length
-+
-+ * dbus/dbus-marshal-recursive.c (skip_one_complete_type): make
-+ this look faster
-+
-+ * dbus/dbus-string.c (_dbus_string_get_const_data_len): add an
-+ inline macro version
-+ (_dbus_string_set_byte): provide inline macro version
-+
-+2005-01-15 Havoc Pennington <hp at redhat.com>
-+
-+ * Land the new message args API and type system.
-+
-+ This patch is huge, but the public API change is not
-+ really large. The set of D-BUS types has changed somewhat,
-+ and the arg "getters" are more geared toward language bindings;
-+ they don't make a copy, etc.
-+
-+ There are also some known issues. See these emails for details
-+ on this huge patch:
-+ http://lists.freedesktop.org/archives/dbus/2004-December/001836.html
-+ http://lists.freedesktop.org/archives/dbus/2005-January/001922.html
-+
-+ * dbus/dbus-marshal-*: all the new stuff
-+
-+ * dbus/dbus-message.c: basically rewritten
-+
-+ * dbus/dbus-memory.c (check_guards): with "guards" enabled, init
-+ freed blocks to be all non-nul bytes so using freed memory is less
-+ likely to work right
-+
-+ * dbus/dbus-internals.c (_dbus_test_oom_handling): add
-+ DBUS_FAIL_MALLOC=N environment variable, so you can do
-+ DBUS_FAIL_MALLOC=0 to skip the out-of-memory checking, or
-+ DBUS_FAIL_MALLOC=10 to make it really, really, really slow and
-+ thorough.
-+
-+ * qt/message.cpp: port to the new message args API
-+ (operator<<): use str.utf8() rather than str.unicode()
-+ (pretty sure this is right from the Qt docs?)
-+
-+ * glib/dbus-gvalue.c: port to the new message args API
-+
-+ * bus/dispatch.c, bus/driver.c: port to the new message args API
-+
-+ * dbus/dbus-string.c (_dbus_string_init_const_len): initialize the
-+ "locked" flag to TRUE and align_offset to 0; I guess we never
-+ looked at these anyhow, but seems cleaner.
-+
-+ * dbus/dbus-string.h (_DBUS_STRING_ALLOCATION_PADDING):
-+ move allocation padding macro to this header; use it to implement
-+ (_DBUS_STRING_STATIC): ability to declare a static string.
-+
-+ * dbus/dbus-message.c (_dbus_message_has_type_interface_member):
-+ change to return TRUE if the interface is not set.
-+
-+ * dbus/dbus-string.[hc]: move the D-BUS specific validation stuff
-+ to dbus-marshal-validate.[hc]
-+
-+ * dbus/dbus-marshal-basic.c (_dbus_type_to_string): move here from
-+ dbus-internals.c
-+
-+ * dbus/Makefile.am: cut over from dbus-marshal.[hc]
-+ to dbus-marshal-*.[hc]
-+
-+ * dbus/dbus-object-tree.c (_dbus_decompose_path): move this
-+ function here from dbus-marshal.c
-+
-+2005-01-12 Joe Shaw <joeshaw at novell.com>
-+
-+ * NEWS: Update for 0.23.
-+
-+ * configure.in: Release 0.23.
-+
-+2005-01-12 Joe Shaw <joeshaw at novell.com>
-+
-+ * mono/Makefile.am, mono/example/Makefile.am: Always build the
-+ dbus DLL with --debug. Clean up after the .mdb files this leaves
-+ behind.
-+
-+ * mono/doc/Makefile.am: Need to uninstall the docs on "make
-+ uninstall"
-+
-+ * mono/Arguments.cs (GetDBusTypeConstructor): If the type
-+ is an enum, get the enum's underlying type. Another mono
-+ 1.1.3 fix.
-+
-+2005-01-11 Joe Shaw <joeshaw at novell.com>
-+
-+ Patch from Sjoerd Simons <sjoerd at luon.net>
-+
-+ * mono/Makefile.am, mono/example/Makefile.am: Don't redefine
-+ DESTDIR. It breaks stuff.
-+
-+2005-01-11 Joe Shaw <joeshaw at novell.com>
-+
-+ Patch from Tambet Ingo <tambet at ximian.com>
-+
-+ * mono/DBusType/Array.cs (Get): Get the underlying element type by
-+ calling type.GetElementType(). The code previously depended on
-+ broken Mono behavior, which was fixed in Mono 1.1.3.
-+
-+ * mono/DBusType/Dict.cs (constructor): Fix the parameters for
-+ Activator.CreateInstance() so that the class's constructor is
-+ called with the right parameters.
-+
-+2005-01-11 Joe Shaw <joeshaw at novell.com>
-+
-+ Patch from Timo Teräs <ext-timo.teras at nokia.com>
-+
-+ * dbus/dbus-connection.c
-+ (_dbus_connection_queue_received_message_link): Call
-+ _dbus_connection_remove_timeout() instead of the _locked()
-+ variant, since it's always called from
-+ _dbus_connection_handle_watch(), which handles the locking.
-+ Removed the _locked() variant since it's no longer used.
-+
-+2005-01-03 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-internals.h: I'm an idiot, _dbus_assert certainly can
-+ return
-+
-+2004-12-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-internals.h: add _DBUS_GNUC_NORETURN to _dbus_assert
-+
-+2005-01-03 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_sysdeps_test): fix using == on
-+ floating point
-+
-+ * dbus/dbus-string.c (_dbus_string_insert_alignment): new function
-+
-+2005-01-02 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-internals.h (_DBUS_ALIGN_OFFSET): new macro
-+
-+2005-01-01 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: add -Wfloat-equal
-+
-+2005-01-01 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.h: add _DBUS_DOUBLES_BITWISE_EQUAL macro,
-+ for a variety of reasons '==' doesn't do this.
-+
-+2004-12-31 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_equal_substrings): new function
-+ I keep wishing I had
-+
-+2004-12-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus.py: s/ACTIVATION_REPLY_ACTIVE/ACTIVATION_REPLY_ACTIVATED
-+
-+2004-12-30 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in: Change DBUS_ACTIVATION_REPLY_ACTIVATED
-+ and DBUS_ACTIVATION_REPLY_ALREADY_ACTIVE to match the values in
-+ dbus-protocol.h. Because they are defines and not enums they are not
-+ autogenerated.
-+
-+2004-12-26 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in (bus_activate_service): Bind
-+ dbus_bus_activate_service
-+
-+ * python/dbus.py (Bus.activate_service): activate a service on the
-+ bus.
-+
-+2004-12-24 Havoc Pennington <hp at redhat.com>
-+
-+ * test/decode-gcov.c: change to use .gcno and .gcda files, but the
-+ file format has also changed and I haven't adapted to that yet
-+
-+ * Makefile.am: load .gcno files from latest gcc
-+
-+2004-12-23 John (J5) Palmieri <johnp at redhat.com>
-+ * Patch from Rob Taylor <robtaylor at fastmail.fm>
-+
-+ * python/dbus_bindings.pyx.in (bus_get_unix_user): New
-+ lowlevel binding
-+
-+ * python/dbus.py (get_unix_user): Added binding to
-+ call dbus_bindings.bus_get_unix_user
-+
-+ * python/extract.py: Modified the proto_pat regex to
-+ handle unsigned long
-+
-+2004-12-21 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/make-dbus-glib-error-enum.sh: omit the function keyword for
-+ better POSIX compliance.
-+
-+2004-12-19 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_insert_4_aligned)
-+ (_dbus_string_insert_8_aligned): new functions
-+
-+ * dbus/dbus-string.c (_dbus_string_alloc_space): new function
-+
-+2004-12-18 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_ascii): use ISASCII
-+ macro
-+
-+ * dbus/dbus-message.c: fix a comment, and add a still-unused
-+ not-implemented function
-+
-+ * dbus/dbus-marshal.h: fix comment
-+
-+ * dbus/dbus-internals.h (_DBUS_ISASCII): new macro
-+
-+2004-12-17 Joe Shaw <joeshaw at novell.com>
-+
-+ * mono/DBusType/Byte.cs, mono/DBusType/Int32.cs,
-+ mono/DBusType/Int64.cs, mono/DBusType/UInt32.cs,
-+ mono/DBusType/UInt64.cs: Use Enum.GetUnderlyingType() instead of
-+ Type.UnderlyingSystemType to get the actual system type
-+ underneath. This code previously depended on the broken Mono
-+ behavior, which was fixed in 1.1.3.
-+
-+2004-11-27 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-string.h (_dbus_string_get_byte): inline when asserts
-+ are disabled
-+ (_dbus_string_get_const_data): inline when asserts are disabled
-+
-+ * dbus/dbus-message.c: record the _dbus_current_generation of
-+ creation so we can complain if dbus_shutdown() is used improperly.
-+ Do this only if checks are enabled.
-+
-+ * dbus/dbus-connection.c: ditto
-+
-+2004-11-26 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c: add with_bus mode to profile echoes
-+ that go through the bus.
-+
-+ * test/glib/run-test.sh: add ability to run test-profile
-+
-+ * bus/dbus-daemon-1.1.in: fix to say that SIGHUP causes partial
-+ config file reload.
-+
-+2004-11-26 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c: clean up how the fake_malloc_overhead
-+ thing was implemented
-+
-+2004-11-26 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c: tweak a bit, add support for some
-+ made-up minimal malloc overhead with plain sockets, since in
-+ real life some sort of buffers are unavoidable thus we could
-+ count them in the theoretical best case
-+
-+2004-11-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c (dbus_message_cache_or_finalize): fix bug
-+ where I was trying to cache one too many messages
-+
-+2004-11-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c: reimplement message cache as an array which
-+ makes the cache about twice as fast and saves maybe 1.5% overall
-+
-+2004-11-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-threads.c (init_global_locks): forgot to put the
-+ message cache lock here
-+
-+2004-11-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c (struct DBusMessage): put the locked bit and
-+ the "char byte_order" next to each other to save 4 bytes
-+ (dbus_message_new_empty_header): reduce preallocation, since the
-+ message cache should achieve a similar effect
-+ (dbus_message_cache_or_finalize, dbus_message_get_cached): add a
-+ message cache that keeps a few DBusMessage around in a pool,
-+ another 8% speedup or so.
-+
-+ * dbus/dbus-dataslot.c (_dbus_data_slot_list_clear): new function
-+
-+2004-11-25 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-transport-unix.c (unix_do_iteration): if we're going
-+ to write, without reading or blocking, try it before the poll()
-+ and skip the poll() if nothing remains to write. This is about a
-+ 3% speedup in the echo client/server
-+
-+2004-11-25 Havoc Pennington <hp at redhat.com>
-+
-+ The primary change here is to always write() once before adding
-+ the write watch, which gives us about a 10% performance increase.
-+
-+ * dbus/dbus-transport-unix.c: a number of modifications to cope
-+ with removing messages_pending
-+ (check_write_watch): properly handle
-+ DBUS_AUTH_STATE_WAITING_FOR_MEMORY; adapt to removal of
-+ messages_pending stuff
-+ (check_read_watch): properly handle WAITING_FOR_MEMORY and
-+ AUTHENTICATED cases
-+ (unix_handle_watch): after writing, see if the write watch can be
-+ removed
-+ (unix_do_iteration): assert that write_watch/read_watch are
-+ non-NULL rather than testing that they aren't, since they
-+ aren't allowed to be NULL. check_write_watch() at the end so
-+ we add the watch if we did not finish writing (e.g. got EAGAIN)
-+
-+ * dbus/dbus-transport-protected.h: remove messages_pending call,
-+ since it resulted in too much inefficient watch adding/removing;
-+ instead we now require that the transport user does an iteration
-+ after queueing outgoing messages, and after trying the first
-+ write() we add a write watch if we got EAGAIN or exceeded our
-+ max bytes to write per iteration setting
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_signature): add this
-+ function
-+
-+ * dbus/dbus-server-unix.c (unix_finalize): the socket name was
-+ freed and then accessed, valgrind flagged this bug, fix it
-+
-+ * dbus/dbus-message.c: fix several bugs where HEADER_FIELD_LAST was taken
-+ as the last valid field plus 1, where really it is equal to the
-+ last valid field. Corrects some message corruption issues.
-+
-+ * dbus/dbus-mainloop.c: verbosity changes
-+
-+ * dbus/dbus-keyring.c (_dbus_keyring_new_homedir): handle OOM
-+ instead of aborting in one of the test codepaths
-+
-+ * dbus/dbus-internals.c (_dbus_verbose_real): fix a bug that
-+ caused not printing the pid ever again if a verbose was missing
-+ the newline at the end
-+ (_dbus_header_field_to_string): add HEADER_FIELD_SIGNATURE
-+
-+ * dbus/dbus-connection.c: verbosity changes;
-+ (dbus_connection_has_messages_to_send): new function
-+ (_dbus_connection_message_sent): no longer call transport->messages_pending
-+ (_dbus_connection_send_preallocated_unlocked): do one iteration to
-+ try to write() immediately, so we can avoid the write watch. This
-+ is the core purpose of this patchset
-+ (_dbus_connection_get_dispatch_status_unlocked): if disconnected,
-+ dump the outgoing message queue, so nobody will get confused
-+ trying to send them or thinking stuff is pending to be sent
-+
-+ * bus/test.c: verbosity changes
-+
-+ * bus/driver.c: verbosity/assertion changes
-+
-+ * bus/dispatch.c: a bunch of little tweaks to get it working again
-+ because this patchset changes when/where you need to block.
-+
-+2004-11-23 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c: modify to accept a plain_sockets
-+ argument in which case it will bench plain sockets instead of
-+ libdbus, for comparison purposes.
-+
-+2004-11-22 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c (N_CLIENT_THREADS): run multiple
-+ threads for more time, so sysprof can get a grip on it.
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_utf8): remove
-+ pointless variable
-+
-+2004-11-13 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-profile.c: fix this thing up a bit
-+
-+ * dbus/dbus-message.c (dbus_message_new_empty_header): increase
-+ preallocation sizes by a fair bit; not sure if this will be an
-+ overall performance win or not, but it does reduce reallocs.
-+
-+ * dbus/dbus-string.c (set_length, reallocate_for_length): ignore
-+ the test hack that forced constant realloc if asserts are
-+ disabled, so we can profile sanely. Sprinkle in some
-+ _DBUS_UNLIKELY() which are probably pointless, but before I
-+ noticed the real performance problem I put them in.
-+ (_dbus_string_validate_utf8): micro-optimize this thing a little
-+ bit, though callgrind says it didn't help; then special-case
-+ ascii, which did help a lot; then be sure we detect nul bytes as
-+ invalid, which is a bugfix.
-+ (align_length_then_lengthen): add some more _DBUS_UNLIKELY
-+ superstition; use memset to nul the padding instead of a manual
-+ loop.
-+ (_dbus_string_get_length): inline this as a
-+ macro; it showed up in the profile because it's used for loop
-+ tests and so forth
-+
-+2004-11-10 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-spawn.c (check_babysit_events): Handle EINTR,
-+ for extra paranoia.
-+
-+2004-11-09 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-string.c (_dbus_string_get_length): New
-+ function, writes DBusString to C buffer.
-+
-+ * dbus/dbus-string.h: Prototype it.
-+
-+ * dbus/dbus-message.c (dbus_message_type_to_string): New
-+ function, converts message type into C string.
-+
-+ * dbus/dbus-message.h: Prototype it.
-+
-+ * bus/selinux.c (bus_selinux_check): Take source pid,
-+ target pid, and audit data. Pass audit data to
-+ avc_has_perm.
-+ (log_audit_callback): New function, appends extra
-+ audit information.
-+ (bus_selinux_allows_acquire_service): Also take
-+ service name, add it to audit data.
-+ (bus_selinux_allows_send): Also take message
-+ type, interface, method member, error name,
-+ and destination, and add them to audit data.
-+ (log_cb): Initialize func_audit.
-+
-+ * bus/selinux.h (bus_selinux_allows_acquire_service)
-+ (bus_selinux_allows_send): Update prototypes
-+
-+ * bus/services.c (bus_registry_acquire_service): Pass
-+ service name to bus_selinux_allows_acquire_service.
-+
-+ * bus/bus.c (bus_context_check_security_policy): Pass
-+ additional audit data. Move assignment of dest
-+ to its own line.
-+
-+2004-11-07 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-transport-unix.c (do_authentication): Always
-+ initialize auth_completed.
-+
-+2004-11-07 Colin Walters <walters at verbum.org>
-+
-+ * bus/bus.c (load_config): Break into three
-+ separate functions: process_config_first_time_only,
-+ process_config_every_time, and process_config_postinit.
-+ (process_config_every_time): Move call of
-+ bus_registry_set_service_context_table into
-+ process_config_postinit.
-+ (process_config_postinit): New function, does
-+ any processing that needs to happen late
-+ in initialization (and also on reload).
-+ (bus_context_new): Instead of calling load_config,
-+ open config parser here and call process_config_first_time_only
-+ and process_config_every_time directly. Later, after
-+ we have forked but before changing UID,
-+ invoke bus_selinux_full_init, and then call
-+ process_config_postinit.
-+ (bus_context_reload_config): As in bus_context_new,
-+ load parse file inside here, and call process_config_every_time
-+ and process_config_postinit.
-+
-+ * bus/services.h, bus/services.c
-+ (bus_registry_set_service_context_table): Rename
-+ from bus_registry_set_sid_table. Take string hash from config
-+ parser, and convert them here into SIDs.
-+
-+ * bus/config-parser.c (struct BusConfigParser): Have
-+ config parser only store a mapping of service->context
-+ string.
-+ (merge_service_context_hash): New function.
-+ (merge_included): Merge context string hashes instead
-+ of using bus_selinux_id_table_union.
-+ (bus_config_parser_new): Don't use bus_selinux_id_table_new;
-+ simply create a new string hash.
-+ (bus_config_parser_unref): Unref it.
-+ (start_selinux_child): Simply insert strings into hash,
-+ don't call bus_selinux_id_table_copy_over.
-+
-+ * bus/selinux.h, bus/selinux.c (bus_selinux_id_table_union)
-+ (bus_selinux_id_table_copy_over): Delete.
-+
-+2004-11-03 Colin Walters <walters at verbum.org>
-+
-+ * bus/selinux.c (bus_selinux_pre_init): Kill some unused
-+ variables.
-+
-+2004-11-03 Colin Walters <walters at verbum.org>
-+
-+ * bus/test-main.c (test_pre_hook): Fix test logic,
-+ thanks Joerg Barfurth <Joerg.Barfurth at Sun.COM>.
-+
-+2004-11-02 Colin Walters <walters at redhat.com>
-+
-+ * bus/selinux.c (bus_selinux_init): Split into two functions,
-+ bus_selinux_pre_init and bus_selinux_post_init.
-+ (bus_selinux_pre_init): Just determine whether SELinux is
-+ enabled.
-+ (bus_selinux_post_init): Do everything else.
-+
-+ * bus/main.c (main): Call bus_selinux_pre_init before parsing
-+ config file, and bus_selinux_post_init after. This ensures that
-+ we don't lose the policyreload notification thread that
-+ bus_selinux_init created before forking previously.
-+
-+ * bus/test-main.c (test_pre_hook): Update for split.
-+
-+2004-10-31 Owen Fraser-Green <owen at discobabe.net>
-+
-+ Patch from Johan Fischer <linux at fischaz.com>
-+
-+ * mono/doc/Makefile.am (install-data-local): Added directory
-+ install for DESTDIR
-+
-+2004-10-29 Colin Walters <walters at redhat.com>
-+
-+ * dbus/dbus-sysdeps.h (_dbus_become_daemon): Also take
-+ parameter for fd to write pid to.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_become_daemon): Implement it.
-+
-+ * bus/bus.c (bus_context_new): Pass print_pid_fd
-+ to _dbus_become_daemon (bug #1720)
-+
-+2004-10-29 Colin Walters <walters at redhat.com>
-+
-+ Patch from Ed Catmur <ed at catmur.co.uk>
-+
-+ * mono/doc/Makefile.am (install-data-local): Handle
-+ DESTDIR.
-+
-+2004-10-29 Colin Walters <walters at redhat.com>
-+
-+ * bus/.cvsignore, qt/.cvsignore: Update.
-+
-+2004-10-29 Colin Walters <walters at redhat.com>
-+
-+ Patch from Kristof Vansant <de_lupus at pandora.be>
-+
-+ * configure.in: Detect Slackware.
-+ * bus/Makefile.am (SCRIPT_IN_FILES): Add rc.messagebus.in.
-+ * bus/rc.messagebus.in: New file.
-+
-+2004-10-29 Colin Walters <walters at redhat.com>
-+
-+ * tools/dbus-monitor.c (filter_func): Return
-+ DBUS_HANDLER_RESULT_HANDLED in filter function
-+ for now. See:
-+ http://freedesktop.org/pipermail/dbus/2004-August/001433.html
-+
-+2004-10-29 Colin Walters <walters at redhat.com>
-+
-+ Patch from Matthew Rickard <mjricka at epoch.ncsc.mil>
-+
-+ * bus/services.c (bus_registry_acquire_service):
-+ Correctly retrieve service name from DBusString
-+ for printing.
-+
-+2004-10-29 Colin Walters <walters at redhat.com>
-+
-+ * dbus/dbus-glib.h: Update documentation to not
-+ refer to internal APIs.
-+
-+2004-10-27 Joe Shaw <joeshaw at novell.com>
-+
-+ * mono/Arguments.cs (GetDBusTypeConstructor):
-+ type.UnderlyingSystemType will return "System.Byte" if you do it
-+ on "byte[]", which is not what we want. So check the type.IsArray
-+ property and use System.Array instead.
-+
-+2004-10-25 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (fill_user_info): On errors do not free
-+ the DBusUserInfo structure since this is passed into the function.
-+ This would cause a double free when the function that allocated
-+ the structure would try to free it when an error occured.
-+
-+ * (bus/session.conf.in, bus/Makefile.am, dbus/configure.in):
-+ use /usr/share/dbus-1/services instead of /usr/lib/dbus-1.0/services
-+ for service activation to avoid 32bit/64bit parallel install issues
-+
-+2004-10-21 Colin Walters <walters at verbum.org>
-+
-+ * AUTHORS: Fix my email address, the @gnu.org one
-+ has been bouncing for some time. Also add J5.
-+
-+2004-10-21 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-transport-unix.c (do_authentication): Return
-+ authentication status to callers.
-+ (unix_handle_watch): If we completed authentication this round,
-+ don't do another read. Instead wait until the next iteration,
-+ after we've read any pending data in the auth buffer.
-+ (unix_do_iteration): Ditto.
-+ (unix_handle_watch): Updated for new do_authentication prototype.
-+
-+2004-10-18 Colin Walters <walters at verbum.org>
-+
-+ * bus/selinux.c (bus_selinux_enabled): Handle
-+ --disable-selinux case.
-+
-+2004-10-18 Colin Walters <walters at verbum.org>
-+
-+ * bus/selinux.h: Add bus_selinux_enabled.
-+
-+ * bus/selinux.c (bus_selinux_enabled): Implement it.
-+
-+ * bus/config-parser.c (struct include): Add
-+ if_selinux_enabled member.
-+ (start_busconfig_child): Parse if_selinux_enabled
-+ attribute for include.
-+ (bus_config_parser_content): Handle it.
-+
-+ * bus/session.conf.in, bus/system.conf.in: Add
-+ inclusion of context mapping to default config files;
-+ conditional on SELinux being enabled.
-+
-+ * doc/busconfig.dtd: Add to if_selinux_enabled to default DTD.
-+
-+ * test/data/invalid-config-files/badselinux-1.conf,
-+ test/data/invalid-config-files/badselinux-2.conf:
-+ Test files for bad syntax.
-+
-+2004-10-17 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-memory.c (_dbus_initialize_malloc_debug, check_guards)
-+ (dbus_malloc, dbus_malloc0, dbus_realloc): Fix up printf
-+ format specifier mismatches.
-+
-+2004-10-07 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_file_get_contents): fix an incorrect
-+ format string.
-+
-+ * glib/dbus-dbus-gmain.c (dbus_g_bus_get): do not mangle NULL
-+ pointer (bug #1540, Leonardo Boiko).
-+
-+2004-09-28 Jon Trowbridge <trow at ximian.com>
-+
-+ * mono/BusDriver.cs: Changed BusDriver struct to remove
-+ the ServiceCreated and ServiceDeleted events and replace them
-+ with the new ServiceOwnerChanged event.
-+
-+ * mono/example/BusListener.cs: Added a new example program,
-+ which listens for and reports any ServiceOwnerChanged events
-+ on the bus driver.
-+
-+ * mono/example/Makefile.am (DESTDIR): Build changes for the
-+ new BusListener.cs example.
-+
-+2004-09-27 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * bus/signals.c (bus_match_rule_parse): validate the components of
-+ match rules (bug #1439).
-+
-+ * dbus/dbus-bus.c (dbus_bus_add_match): add a missing OOM test.
-+
-+2004-09-24 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * doc/dbus-specification.xml: document ServiceOwnerChanged
-+ signal.
-+
-+ * bus/driver.c, bus/driver.h, bus/services.c: Use
-+ ServiceOwnerChanged signal instead of ServiceCreated and
-+ ServiceDeleted.
-+
-+ * bus/dispatch.c: update testcase for the new signal.
-+
-+2004-09-20 Jon Trowbridge <trow at ximian.com>
-+
-+ Patch from Nat Friedman <nat at novell.com>
-+
-+ * mono/Makefile.am: A number of small build fixes to allow "make
-+ distcheck" to succeed.
-+
-+ * mono/example/Makefile.am: "make distcheck" fixes.
-+
-+ * mono/AssemblyInfo.cs.in: When signing the assembly, look for the
-+ key in @srcdir at .
-+
-+ * test/Makefile.am: "make distcheck" fixes.
-+
-+2004-09-17 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_user_at_console): fix memleak in OOM.
-+
-+ * doc/busconfig.dtd: update the DTD for the at_console attribute.
-+
-+ * bus/driver.c (bus_driver_handle_hello): correctly handle Hello
-+ messages after the first one (bug #1389).
-+
-+ * bus/dispatch.c (check_double_hello_message): add a test case for
-+ the double hello message bug.
-+ (check_existent_service_activation): fix check of spawning error.
-+
-+2004-09-16 David Zeuthen <david at fubar.dk>
-+
-+ * python/dbus_bindings.pyx.in: Add support for int64 and uint64
-+
-+2004-09-12 David Zeuthen <david at fubar.dk>
-+
-+ Patch from Kay Sievers <kay.sievers at vrfy.org>
-+
-+ * bus/bus.c (bus_context_new):
-+ * bus/bus.h:
-+ * bus/main.c (usage)
-+ (main):
-+ Add commandline option --nofork to override configuration file
-+ setting.
-+
-+2004-09-09 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-*.h: remove the ; after DBUS_(BEGIN|END)_DECLS. Some C
-+ compilers don't like it (bug #974).
-+
-+2004-09-04 Harald Fernengel <harry at kdevelop.org>
-+
-+ * qt/connection.*: Applied patch by Jérôme Lodewyck
-+ <lodewyck at clipper.ens.fr> to integrate an existing
-+ connection into the Qt eventloop
-+
-+2004-08-30 Jon Trowbridge <trow at ximian.com>
-+
-+ * mono/BusDriver.cs: Added. This is a class for interacting with
-+ the org.freedesktop.DBus service.
-+
-+ * mono/Message.cs: Added a mechanism to expose the message that is
-+ currently being dispatched via the static Message.Current
-+ property. Added Message.Sender and Message.Destination
-+ properties.
-+
-+ * mono/Handler.cs: Expose the dispatched message via
-+ Message.Current when handling method calls.
-+
-+ * mono/Service.cs: Expose the dispatched message via
-+ Message.Current when handling signal emissions.
-+
-+ * mono/Connection.cs: Bind dbus_bus_get_base_service via the
-+ Connection.BaseService property.
-+
-+2004-08-28 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-userdb.c (_dbus_is_console_user): remove unused variable
-+
-+ More fixes from Steve Grubb
-+
-+ * dbus/dbus-sysdeps.c (_dbus_connect_tcp_socket): fix fd leak
-+ (_dbus_listen_tcp_socket): fix fd leak
-+
-+ * dbus/dbus-spawn.c (read_pid, read_ints): move the "again:" for
-+ EINTR to a bit lower in the code
-+
-+2004-08-26 Jon Trowbridge <trow at ximian.com>
-+
-+ * bus/driver.c (bus_driver_handle_service_exists): Respond with
-+ TRUE if we are inquiring about the existence of the built-in
-+ org.freedesktop.DBus service.
-+
-+2004-08-25 John Palmieri <johnp at redhat.com>
-+ * bus/config-parser.c:
-+ (struct PolicyType): Add POLICY_CONSOLE
-+ (struct Element.d.policy): s/gid_or_uid/gid_uid_or_at_console
-+ (start_busconfig_child): Sets up console element when
-+ <policy at_console=""> is encountered in a policy file
-+ (append_rule_from_element): Convert console elements to console
-+ rules.
-+
-+ * bus/policy.c:
-+ (bus_policy_create_client_policy): Add console rules to the client
-+ policy based on if the client is at the console
-+ (bus_policy_append_console_rule): New function for adding a
-+ console rule to a policy
-+ (bus_policy_merge): Handle console rule merging
-+
-+ * dbus/dbus-sysdeps.h: Added the DBUS_CONSOLE_DIR constant
-+ where we check for console user files
-+
-+ * dbus/dbus-sysdeps.c:
-+ (_dbus_file_exists): New function which checks if the given
-+ file exists
-+ (_dbus_user_at_console): New function which does the system
-+ specific process of checking if the user is at the console
-+
-+ * dbus/dbus-userdb.c:
-+ (_dbus_is_console_user): New function converts a UID to user name
-+ and then calls the system specific _dbus_user_at_console to
-+ see if the user is at the console and therefor a console user
-+
-+2004-08-25 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * bus/config-parser.c (set_limit):
-+ * bus/dbus-daemon-1.1.in:
-+ * test/data/valid-config-files/many-rules.conf: set the
-+ max_match_rules_per_connection limt from the config file.
-+
-+ * doc/busconfig.dtd: update the DTD.
-+
-+ * bus/driver.c: remove some unused variables.
-+
-+2004-08-24 Mikael Hallendal <micke at imendio.com>
-+
-+ * dbus/dbus-glib-lowlevel.h: Removed dbus_bus_get_with_g_main since
-+ it's been replaced by dbus_g_bus_get
-+
-+2004-08-23 Colin Walters <walters at redhat.com>
-+
-+ Updated SELinux support from Matthew Rickard <mjricka at epoch.ncsc.mil>
-+
-+ * bus/selinux.h: Prototype bus_selinux_get_policy_root.
-+
-+ * bus/selinux.c: Create a thread for policy reload notification.
-+ (bus_selinux_get_policy_root): Implement.
-+
-+ * bus/config-parser.c (start_busconfig_child)
-+ (bus_config_parser_content): Support SELinux-root relative
-+ inclusion.
-+
-+ * configure.in <HAVE_SELINUX>: Add -lpthread.
-+
-+ * bus/test-main.c (test_pre_hook, test_post_hook): New.
-+ (test_post_hook): Move memory checking into here.
-+ (test_pre_hook, test_post_hook): Move SELinux checks in
-+ here, but conditional on a DBUS_TEST_SELINUX environment
-+ variable. Unfortunately we can't run the SELinux checks
-+ as a normal user, since they won't have any permissions
-+ for /selinux. So this will have to be tested manually
-+ for now, until we have virtualization for most of
-+ libselinux.
-+
-+2004-08-23 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_change_identity): add setgroups() to
-+ drop supplementary groups, suggested by Steve Grubb
-+
-+2004-08-20 Colin Walters <walters at redhat.com>
-+
-+ * bus/config-parser.c (start_busconfig_child): Remove some unused
-+ variables.
-+
-+ * bus/selinux.c (bus_selinux_id_table_insert): Avoid compiler
-+ warning.
-+
-+2004-08-17 Joe Shaw <joeshaw at novell.com>
-+
-+ * configure.in: If --enable-mono is passed in, if we can't find
-+ mono error out.
-+
-+ * mono/Makefile.am: Use /gacutil to install assemblies into the
-+ GAC and not /root.
-+
-+2004-08-12 Havoc Pennington <hp at redhat.com>
-+
-+ * NEWS: update for 0.22
-+
-+ * configure.in: release 0.22
-+
-+2004-08-11 Colin Walters <walters at redhat.com>
-+
-+ * tools/dbus-send.c (main, usage): Add --reply-timeout
-+ argument.
-+
-+2004-08-10 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * bus/bus.c (process_config_first_time_only): get rid of an unused
-+ DBusError that was causing a memoy leak (bug #989).
-+
-+ * dbus/dbus-keyring.c, dbus/dbus-message.c:
-+ fix compilation on Solaris/Forte C (bug #974)
-+
-+ * bus/main.c (main): plug two minuscule memleaks.
-+
-+2004-08-10 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-tutorial.xml: add some more info on GLib bindings
-+
-+2004-08-09 Havoc Pennington <hp at redhat.com>
-+
-+ * COPYING: switch to Academic Free License version 2.1 instead of
-+ 2.0, to resolve complaints about patent termination clause.
-+
-+2004-07-31 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * README: added documentation for the --enable-python
-+ configure switch.
-+
-+2004-07-31 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * bus/config-parser.c (bus_config_parser_new): fix an invalid
-+ _unref in the SELinux support.
-+
-+ * doc/busconfig.dtd: update DTD for SELinux support.
-+
-+ * bus/config-loader-libxml.c: fix error handler and parser
-+ initialisation/cleanup. OOM test now works with libxml2 HEAD.
-+
-+ * configure.in: remove the warning about libxml2.
-+
-+ * dbus/dbus-bus.c: silence doxygen warning.
-+
-+2004-07-31 Colin Walters <walters at redhat.com>
-+
-+ * configure.in: Move #error in SELinux check to its own line.
-+
-+2004-07-31 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-internals.h (_DBUS_SET_OOM):
-+ * bus/utils.h (BUS_SET_OOM): use dbus_error_set_const instead of
-+ dbus_error_set.
-+
-+ * bus/dispatch.c (check_send_exit_to_service): fix the test case,
-+ broken by the change in the _SET_OOM macros.
-+
-+2004-07-31 Colin Walters <walters at redhat.com>
-+
-+ * bus/selinux.c <HAVE_SELINUX>: Include utils.h to get
-+ BUS_SET_OOM.
-+
-+2004-07-31 Colin Walters <walters at redhat.com>
-+
-+ * configure.in: Use AC_TRY_COMPILE instead of AC_EGREP_HEADER
-+ to correctly detect DBUS__ACQUIRE_SVC. Also add an
-+ AC_MSG_CHECKING.
-+
-+2004-07-24 Havoc Pennington <hp at redhat.com>
-+
-+ SELinux support from Matthew Rickard <mjricka at epoch.ncsc.mil>
-+
-+ * bus/selinux.c, bus/selinux.h: new file encapsulating selinux
-+ functionality
-+
-+ * configure.in: add --enable-selinux
-+
-+ * bus/policy.c (bus_policy_merge): add FIXME to a comment
-+
-+ * bus/main.c (main): initialize and shut down selinux
-+
-+ * bus/connection.c: store SELinux ID on each connection, to avoid
-+ repeated getting of the string context and converting it into
-+ an ID
-+
-+ * bus/bus.c (bus_context_get_policy): new accessor, though it
-+ isn't used
-+ (bus_context_check_security_policy): check whether the security
-+ context of sender connection can send to the security context of
-+ recipient connection
-+
-+ * bus/config-parser.c: add parsing for <selinux> and <associate>
-+
-+ * dbus/dbus-transport.c (_dbus_transport_get_unix_fd): to
-+ implement dbus_connection_get_unix_fd()
-+
-+ * dbus/dbus-connection.c (dbus_connection_get_unix_fd): new
-+ function, used by the selinux stuff
-+
-+2004-07-29 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * bus/config-loader-libxml.c: complete the implementation of
-+ libxml backend for config file loader. Doesn't work with full OOM
-+ test yet.
-+
-+ * configure.in: change error when selecting libxml into a warning.
-+
-+ * test/data/invalid-config-files: add two non-well-formed XML
-+ files.
-+
-+ * glib/Makefile.am: libdbus_gtool always uses expat, not libxml.
-+
-+ * dbus/dbus-transport-unix.c (unix_handle_watch): do not
-+ disconnect in case of DBUS_WATCH_HANGUP, several do_reading() may
-+ be necessary to read all the buffer. (bug #894)
-+
-+ * bus/activation.c (bus_activation_activate_service): fix a
-+ potential assertion failure (bug #896). Small optimization in the
-+ case of auto-activation messages.
-+
-+ * dbus/dbus-message.c (verify_test_message, _dbus_message_test):
-+ add test case for byte-through-vararg bug (#901). patch by Kimmo
-+ Hämäläinen.
-+
-+2004-07-28 Anders Carlsson <andersca at gnome.org>
-+
-+ * python/dbus.py:
-+ * python/dbus_bindings.pyx.in:
-+ Add dbus.init_gthreads (), allow emit_signal to pass
-+ arguments to the signal.
-+
-+2004-07-24 Havoc Pennington <hp at redhat.com>
-+
-+ * AUTHORS: add some people, not really comprehensively, let me
-+ know if I missed you
-+
-+2004-07-24 Havoc Pennington <hp at redhat.com>
-+
-+ * Makefile.am (DIST_SUBDIRS): add DIST_SUBDIRS, problem solved by
-+ Owen
-+
-+ * test/Makefile.am (DIST_SUBDIRS): here also
-+
-+2004-07-22 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-sysdeps.c (fill_user_info): fix inexistent label name,
-+ breaking build on Solaris, reported by Farhad Saberi on the ML.
-+
-+ * dbus/dbus-message.c (dbus_message_append_args_valist): fix the
-+ va_arg invocation to account for integer promotion in the case of
-+ DBUS_TYPE_BYTE (unsigned char is promoted to int). (bug #901)
-+
-+ * bus/services.c (bus_service_remove_owner): fix bug #902, use
-+ _dbus_list_get_first_link, not _dbus_list_get_first.
-+
-+ * dbus/dbus-bus.c (dbus_bus_service_exists): plug a memory leak.
-+
-+ * dbus/dbus-object-tree.c (free_subtree_recurse): always null
-+ handler functions so that the asserts in _dbus_object_subtree_unref
-+ do not fail.
-+
-+ * dbus/dbus-transport-unix.c (do_reading):
-+ _dbus_transport_queue_messages return value is of type
-+ dbus_bool_t, not DBusDispatchStatus.
-+
-+2004-07-19 David Zeuthen <david at fubar.dk>
-+
-+ * dbus/dbus-protocol.h: Add DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN
-+
-+ * bus/dispatch.c:
-+ (check_get_connection_unix_user): Debug says GetProperty; but the
-+ method is called GetConnectionUnixUser
-+ (check_get_connection_unix_process_id): New function
-+ (bus_dispatch_test): Actually call check_get_connection_unix_user();
-+ also call check_get_connection_unix_process_id()
-+
-+ * bus/driver.c:
-+ (bus_driver_handle_get_connection_unix_process_id): New function,
-+ handles GetConnectionUnixProcessID on the org.freedesktop.DBus
-+ interface
-+
-+ * dbus/dbus-auth.c:
-+ (handle_server_data_external_mech): Set pid from the credentials
-+ obtained from the socket
-+
-+ * dbus/dbus-connection.c:
-+ (dbus_connection_get_unix_process_id): New function
-+
-+ * dbus/dbus-connection.h:
-+ Add prototype for dbus_connection_get_unix_process_id
-+
-+ * dbus/dbus-transport.c:
-+ (_dbus_transport_get_unix_process_id): New function
-+
-+ * dbus/dbus-transport.h:
-+ Add prototype for _dbus_transport_get_unix_process_id
-+
-+2004-07-19 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-message.c: Message counter fix, patch by Christian
-+ Hammond <chipx86 at gnupdate.org>
-+
-+2004-07-18 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+ * python/dbus_bindings.pyx.in:
-+ * python/tests/test-client.py:
-+
-+ Add dbus.ByteArray and dbus_bindings.ByteArray
-+ types so that byte streams can be passed back.
-+
-+ Give jdahlin the heaps of credit that are so
-+ rightfully his.
-+
-+2004-07-12 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+
-+ Add message argument to the default object_method_handler
-+ function.
-+
-+ * python/dbus_bindings.pyx.in:
-+
-+ Automatically return NIL when passed an empty list
-+ (we can't pass back a list since lists are typed
-+ and we don't have any idea what type the the client
-+ intended the list to be... :-( )
-+
-+2004-07-10 Seth Nickell <seth at gnome.org>
-+
-+ * python/examples/Makefile.am:
-+
-+ Fix distcheck breakage caused by new examples.
-+
-+2004-07-10 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+
-+ Add "message" argument to service-side dbus.Object
-+ methods. This will break existing services written
-+ using the python bindings, but will allow extraction
-+ of all the message information (e.g. who its from).
-+
-+ Add improved "object oriented" signal handling/emission.
-+
-+ * python/examples/example-service.py:
-+
-+ Nix this example.
-+
-+ * python/examples/example-signal-emitter.py:
-+ * python/examples/example-signal-recipient.py:
-+
-+ Two new examples that show how to emit and receive
-+ signals using the new APIs.
-+
-+ * python/examples/example-signals.py:
-+ * python/examples/gconf-proxy-service.py:
-+ * python/examples/gconf-proxy-service2.py:
-+
-+ Add "message" argument to service methods.
-+
-+2004-06-28 Kay Sievers <kay.sievers at vrfy.org>
-+
-+ * bus/driver.c (bus_driver_handle_get_connection_unix_user)
-+ * dbus/bus.c (dbus_bus_get_unix_user)
-+ * doc/dbus-specification.xml: implement GetConnectionUnixUser
-+ method of org.freedesktop.DBus interface.
-+
-+ * bus/dispatch.c: test case
-+
-+2004-06-23 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/Makefile.am: switched include directory from glib/ to dbus/
-+ since dbus-glib.h moved
-+
-+2004-06-22 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * configure.in: prevent building the gcj stuff and libxml loader
-+ since they are broken.
-+
-+2004-06-20 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-glib-error-enum.h: autogenerate the GError enum
-+ codes from the dbus error names
-+
-+ * glib/dbus-glib.h: move to subdir dbus/ since it's included
-+ as dbus/dbus-glib.h and that breakage is now visible due to
-+ including dbus/dbus-glib.h in dbus-glib-lowlevel.h
-+
-+ * glib/dbus-glib.h: s/gproxy/g_proxy/
-+
-+ * dbus/dbus-shared.h: new header to hold stuff shared with
-+ binding APIs
-+
-+ * dbus/dbus-protocol.h (DBUS_ERROR_*): move errors here rather
-+ than dbus-errors.h
-+
-+ * glib/dbus-glib.h (dbus_set_g_error): move to
-+ dbus-glib-lowlevel.h
-+
-+ * glib/dbus-glib.h: remove dbus/dbus.h from here; change a bunch
-+ of stuff to enable this
-+
-+ * dbus/dbus-glib-lowlevel.h: put dbus/dbus.h here
-+
-+ * a bunch of other changes with the same basic "separate glib
-+ bindings from dbus.h" theme
-+
-+2004-06-10 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * dbus-sharp.pc.in: Removed glib-sharp inclusion in Libs.
-+
-+ * python/examples/Makefile.am: Fixed typo in EXTRA_DIST.
-+
-+2004-06-09 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * bus/driver.c, dbus/dbus-bus.c: use BOOLEAN instead of UINT32 for
-+ the reply value of the ServiceExists message.
-+
-+2004-06-07 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus_bindings.pyx.in: No longer need to parse path
-+ elements and pass them as arrays of strings. The C API now
-+ accepts plain path strings.
-+ (_build_parsed_path): removed
-+
-+2004-06-07 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/TODO: remove auto-activation item since it's done; sort
-+ items by importance/milestone
-+
-+2004-06-07 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message-builder.c (_dbus_message_data_load): append
-+ random signature when using REQUIRED_FIELDS (this hack won't work
-+ in the long term)
-+
-+ * dbus/dbus-message.c: change the signature to be a header field,
-+ instead of message->signature special-case string. Incremental
-+ step forward. Then we can fix up code to send the signature in the
-+ message, then fix up code to validate said signature, then fix up
-+ code to not put the typecodes inline, etc.
-+ (load_one_message): don't make up the signature after the fact
-+ (decode_header_data): require signature field for the known
-+ message types
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_string_len): new
-+
-+ * dbus/dbus-protocol.h: add DBUS_HEADER_FIELD_SIGNATURE
-+
-+2004-06-07 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * mono/DBusType/ObjectPath.cs: Renamed PathName argument to Path
-+
-+ * mono/Handler.cs: Updated to follow new path argument for
-+ (un-)registering objects.
-+
-+ * mono/example/Makefile.am:
-+ * mono/Makefile.am:
-+ * configure.in: Bumped required version for mono and use new -pkg
-+ syntax for deps
-+
-+2004-06-05 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-connection.h, dbus/dbus-connection.c: have object path
-+ registration functions take the path argument as char* instead of
-+ char**.
-+
-+ * dbus/dbus-marshal.h, dbus/dbus-marshal.c (_dbus_decompose_path):
-+ split off the path decompostion part of
-+ _dbus_demarshal_object_path. Some misc. fixes to silence compiler
-+ warnings.
-+
-+ * glib/dbus-gobject.c, test/test-service.c: update accordingly.
-+
-+2004-06-02 Kristian Høgsberg <krh at redhat.com>
-+
-+ * dbus/dbus-auth.c: Rewrite auth protocol handling to use a state
-+ machine approach. A state is implemented as a function that
-+ handles incoming events as specified for that state.
-+
-+ * doc/dbus-specification.xml: Update auth protocol state machine
-+ specification to match implementation. Remove some leftover
-+ base64 examples.
-+
-+2004-06-02 Kristian Høgsberg <krh at redhat.com>
-+
-+ * glib/dbus-gproxy.c, glib/dbus-gmain.c, dbus/dbus-string.c,
-+ dbus/dbus-object-tree.c, dbus/dbus-message.c: add comments to
-+ quiet doxygen.
-+
-+ * Doxyfile.in: remove deprecated options.
-+
-+ * dbus/dbus-message-handler.c, dbus/dbus-message-handler.h,
-+ glib/test-thread.h, glib/test-thread-client.c,
-+ glib/test-thread-server.c, glib/test-profile.c,
-+ glib/test-dbus-glib.c: remove these unused files.
-+
-+2004-06-01 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-object-tree.c
-+ (_dbus_object_tree_dispatch_and_unlock): fix dispatch for
-+ non-fallback handlers (bug #684).
-+ (_dbus_object_subtree_new): initialize invoke_as_fallback field.
-+ (find_subtree_recurse): report wether the returned subtree is an
-+ exact match or a "fallback" match higher up in the tree.
-+ (object_tree_test_iteration): update test case.
-+
-+2004-06-01 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus_bindings.pyx.in:
-+ * python/tests/test-client.py:
-+
-+ Round off basic type support. Add dicts (yay!), and
-+ remaining array types.
-+
-+ Make MessageIter more general so it works for dicts too.
-+
-+ Mark all loop variables as C integers.
-+
-+2004-05-31 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gidl.c (method_info_add_arg): keep args sorted with
-+ "in" before "out"
-+
-+ * glib/dbus-gobject.c (dbus_type_to_string): move to dbus-gutils.c
-+
-+ * glib/dbus-glib-tool.c (main): set up to have a --self-test
-+ option that runs the tests, and start filling in some code
-+ including for starters just dumping the interfaces to stdout
-+
-+ * glib/Makefile.am (INCLUDES): define DBUS_LOCALEDIR
-+
-+ * test/data/valid-introspection-files/lots-of-types.xml: test of
-+ an example introspection file
-+
-+ * glib/dbus-gparser.c (parser_check_doctype): doctype should be
-+ "node" (I think...)
-+
-+2004-05-31 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus_bindings.pyx.in:
-+ * python/tests/test-client.py:
-+
-+ Test Suite: 1
-+ Python Bindings: 0
-+
-+ Fix string array memory trashing bug... oops...
-+
-+2004-05-30 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+
-+ Add a nicer-but-less-flexible alternate API for handling
-+ calls to virtual objects in dbus.ObjectTree.
-+
-+ Screw up the argument order to the dbus.Object constructor
-+ for consistency with dbus.ObjectTree (and to make dbus_methods
-+ optional for future extension)
-+
-+ * python/examples/Makefile.am:
-+ * python/examples/gconf-proxy-service.py:
-+ * python/examples/gconf-proxy-service2.py:
-+
-+ Alternate implementation of gconf-proxy-service using the
-+ nicer dbus.ObjectTree API.
-+
-+ * python/examples/example-service.py:
-+ * python/tests/test-server.py
-+
-+ Reverse the argument order to deal with dbus.Object constructor
-+ changes.
-+
-+2004-05-30 Seth Nickell <seth at gnome.org>
-+
-+ * python/examples/example-client.py:
-+ * python/examples/example-service.py:
-+
-+ Take it back. Lists seem to work but they're broken
-+ in the test suite. Make the base examples use
-+ lists (works fine).
-+
-+2004-05-30 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus_bindings.pyx.in:
-+ * python/tests/test-client.py:
-+
-+ Add some more tests and fix errors that crop up.
-+ Unfortunately, currently it seems like marshalling
-+ and unmarshalling of lists is completely broken :-(
-+
-+2004-05-30 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus_bindings.pyx.in:
-+
-+ Add support for ObjectPath type.
-+
-+ * python/dbus.py:
-+
-+ Refactor message handling code to a common function.
-+
-+ * python/tests/test-client.py:
-+ * python/tests/test-server.py:
-+
-+ Add tests that check to make sure values of all types
-+ can be echoed from a service w/o mangling.
-+
-+2004-05-29 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+
-+ Add ObjectTree class which allows implementation
-+ of trees of "virtual" objects. Basically the python
-+ wrapper for "register_fallback".
-+
-+ * python/examples/Makefile.am
-+ * python/examples/gconf-proxy-client.py:
-+ * python/examples/gconf-proxy-service.py:
-+
-+ Implement a simple GConf proxy service that supports
-+ get/set on string and int GConf keys using the ObjectTree.
-+
-+2004-05-29 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+ * python/examples/example-client.py:
-+ * python/examples/example-service.py:
-+ * python/examples/list-system-services.py:
-+
-+ Add SessionBus, SystemBus and ActivationBus classes
-+ so you don't need to know the special little BUS_TYPE
-+ flag.
-+
-+2004-05-29 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/config-parser.c (process_test_valid_subdir): temporarily
-+ stop testing config parser OOM handling, since expat has issues
-+ http://freedesktop.org/pipermail/dbus/2004-May/001153.html
-+
-+ * bus/dbus-daemon-1.1.in: change requested_reply to
-+ send_requested_reply/receive_requested_reply so we can send the
-+ replies, not just receive them.
-+
-+ * bus/config-parser.c: parse the new
-+ send_requested_reply/receive_requested_reply
-+
-+ * bus/policy.c (bus_client_policy_check_can_send): add
-+ requested_reply argument and use it
-+
-+ * bus/bus.c (bus_context_check_security_policy): pass through
-+ requested_reply status to message send check
-+
-+ * bus/system.conf.in: adapt to requested_reply change
-+
-+2004-05-28 Havoc Pennington <hp at redhat.com>
-+
-+ * test/glib/test-service-glib.c (main): remove unused variable
-+
-+ * glib/dbus-gidl.c (base_info_ref): fix a silly compiler warning
-+
-+ * dbus/dbus-auth.h (enum): remove AUTHENTICATED_WITH_UNUSED_BYTES
-+ from the enum, no longer in use.
-+
-+ * dbus/dbus-sysdeps.h: include config.h so DBUS_VA_COPY actually
-+ works right.
-+
-+ * dbus/dbus-message.c: add various _dbus_return_val_if_fail for
-+ whether error_name passed in is a valid error name.
-+
-+2004-05-28 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-message.c (dbus_message_get_args): Added support for
-+ OBJECT_PATH and OBJECT_PATH_ARRAY
-+
-+2004-05-28 Seth Nickell <seth at gnome.org>
-+
-+ * python/examples/Makefile.am:
-+
-+ Forget to add Makefile.am. Do not pass go.
-+
-+2004-05-28 Michael Meeks <michael at ximian.com>
-+
-+ * glib/dbus-gvalue.c (dbus_gvalue_marshal, dbus_gvalue_demarshal):
-+ fix no int64 case.
-+
-+ * dbus/dbus-string.c (_dbus_string_parse_basic_type): impl.
-+
-+ * dbus/dbus-message.c (_dbus_message_iter_get_basic_type),
-+ (_dbus_message_iter_get_basic_type_array): impl.
-+ drastically simplify ~all relevant _get methods to use these.
-+ (_dbus_message_iter_append_basic_array),
-+ (dbus_message_iter_append_basic): impl
-+ drastically simplify ~all relevant _append methods to use these.
-+
-+ * dbus/dbus-message-builder.c (parse_basic_type)
-+ (parse_basic_array, lookup_basic_type): impl.
-+ (_dbus_message_data_load): prune scads of duplicate /
-+ cut & paste coding.
-+
-+ * dbus/dbus-marshal.c (_dbus_demarshal_basic_type_array)
-+ (_dbus_demarshal_basic_type): implement,
-+ (demarshal_and_validate_len/arg): beef up debug.
-+ (_dbus_marshal_basic_type, _dbus_marshal_basic_type_array): impl.
-+
-+2004-05-27 Seth Nickell <seth at gnome.org>
-+
-+ * configure.in:
-+ * python/Makefile.am:
-+
-+ Include the example python apps in the tarball.
-+
-+ * python/examples/list-system-services.py
-+
-+ Add a python new example that fetches the list of services
-+ from the system bus.
-+
-+2004-05-27 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+ * python/dbus_bindings.pyx.in:
-+
-+ Fix failure to notify that a signal was not handled,
-+ resulted in hung functions.
-+
-+2004-05-25 Colin Walters <walters at redhat.com>
-+
-+ * tools/dbus-monitor.c (main): Monitor all types of messages.
-+
-+2004-05-23 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * mono/Handler.cs, mono/Service.cs: Added UnregisterObject method
-+ which unregisters the object path and disposes the handler.
-+
-+2004-05-23 Kristian Høgsberg <krh at redhat.com>
-+
-+ Patch from Timo Teräs <ext-timo.teras at nokia.com> (#614):
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_args_valist): Swap
-+ operands to && so we call dbus_message_iter_next () for the last
-+ argument also.
-+
-+2004-05-21 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-object-tree.c
-+ (_dbus_object_tree_list_registered_unlock, lookup_subtree): return
-+ children even if the requested path isn't registered.
-+ (object_tree_test_iteration): test object_tree_list_registered.
-+
-+ * configure.in: undefine HAVE_ABSTRACT_SOCKETS instead of defining
-+ it to 0.
-+
-+2004-05-20 Kristian Høgsberg <krh at redhat.com>
-+
-+ * doc/TODO: Remove resolved items.
-+
-+ * bus/expirelist.h (struct BusExpireList): remove unused n_items
-+ field.
-+
-+ * bus/connection.c (bus_connections_expect_reply): Enforce the
-+ per-connection limit on pending replies.
-+
-+ Patch from Jon Trowbridge <trow at ximian.com>:
-+
-+ * bus/main.c (setup_reload_pipe): Added. Creates a pipe and sets
-+ up a watch that triggers a config reload when one end of the pipe
-+ becomes readable.
-+ (signal_handler): Instead of doing the config reload in our SIGHUP
-+ handler, just write to the reload pipe and let the associated
-+ watch handle the reload when control returns to the main loop.
-+
-+ * bus/driver.c (bus_driver_handle_reload_config): Added.
-+ Implements a ReloadConfig method for requesting a configuration
-+ file reload via the bus driver.
-+
-+2004-05-19 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * HACKING: Updated release instructions concerning the wiki page.
-+
-+2004-05-18 Kristian Høgsberg <krh at redhat.com>
-+
-+ * dbus/dbus-auth.c (client_try_next_mechanism): Remove logic to
-+ filter against auth->allowed_mechs; we only add allowed mechs in
-+ record_mechanisms().
-+
-+ * dbus/dbus-auth-script.c (_dbus_auth_script_run): Add an
-+ ALLOWED_MECHS to auth-script format so we can set the list of
-+ allowed mechanisms.
-+
-+ * data/auth/client-out-of-mechanisms.auth-script: New test to
-+ check client disconnects when it is out of mechanisms to try.
-+
-+ * dbus/dbus-auth.c (process_command): Remove check for lines
-+ longer that 1 MB; we only buffer up maximum 16 kB.
-+
-+ * dbus/dbus-transport.c, dbus/dbus-transport-unix.c,
-+ dbus/dbus-auth-script.c, dbus/dbus-auth.c, dbus/dbus-auth.h:
-+ Remove auth state AUTHENTICATED_WITH_UNUSED_BYTES, instead always
-+ assume there might be unused bytes.
-+
-+ * dbus/dbus-auth.c (_dbus_auth_do_work): Remove check for
-+ client-out-of-mechs, it is handled in process_reject(). Move check
-+ for max failures to send_rejected(), as it's a server-only thing.
-+
-+ * dbus/dbus-auth.c: Factor out protocol reply code into functions
-+ send_auth(), send_data(), send_rejected(), send_error(),
-+ send_ok(), send_begin() and send_cancel().
-+
-+2004-05-17 Kristian Høgsberg <krh at redhat.com>
-+
-+ Remove base64 encoding, replace with hex encoding. Original patch
-+ from trow at ximian.com, added error handling.
-+
-+ * dbus/dbus-string.c (_dbus_string_base64_encode)
-+ (_dbus_string_base64_decode): Remove.
-+ (_dbus_string_hex_decode): Add end_return argument so we can
-+ distinguish between OOM and invalid hex encoding.
-+ (_dbus_string_test): Remove base64 tests and add test case for
-+ invalid hex.
-+
-+ * dbus/dbus-keyring.c, dbus/dbus-auth-script.c, dbus/dbus-auth.c:
-+ Replace base64 with hex.
-+
-+ * test/data/auth/invalid-hex-encoding.auth-script: New test case
-+ for invalid hex encoded data in auth protocol.
-+
-+2004-05-17 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-connection.c (check_for_reply_unlocked): plug a memory
-+ leak.
-+
-+2004-05-15 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * mono/dbus-sharp.dll.config.in: Added for GAC
-+ * mono/dbus-sharp.snk: Added for GAC
-+ * mono/Assembly.cs.in: Added for GAC
-+ * mono/Makefile.am: Changes for GAC installation
-+ * configure.in: Added refs for dbus-sharp.dll.config.in and
-+ Assembly.cs.in. More fixes for mono testing
-+ * mono/example/Makefile.am: Changed var to CSC
-+ * Makefile.am: Changed flag name to DBUS_USE_CSC
-+
-+2004-05-15 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * mono/Makefile.am: Added SUBDIRS for docs. Changed SUBDIRS order
-+ * mono/doc/*: Added documentation framework
-+ * configure.in: Added monodoc check
-+ * README: Added description of mono configure flags
-+
-+2004-05-11 John (J5) Palmieri <johnp at redhat.com>:
-+
-+ * doc/dbus-specification.xml: Added a "Required" column to the
-+ header fields table and changed the "zero or more" verbage in
-+ the above paragraph to read "The header must contain the required
-+ named header fields and zero or more of the optional named header
-+ fields".
-+ * test/data/invalid-messages/*.message: Added the required PATH
-+ named header field to the tests so that they don't fail on
-+ 'Missing path field'
-+
-+2004-05-07 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * python/dbus-bindings.pyx.in: Stopped the bindings from trashing
-+ the stack by implicitly defining variable and parameter types and
-+ removing the hack of defining C pointers as python objects and later
-+ casting them.
-+
-+2004-05-02 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * mono/Makefile.am: Removed test-dbus-sharp.exe from all target
-+
-+2004-05-01 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * mono/DBusType/Dict.cs: Handle empty dicts
-+ * mono/DBusType/Array.cs: Handle empty arrays
-+ * mono/Arguments.cs: Handle empty arguments
-+
-+2004-04-30 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * dbus-sharp.pc.in: Modified to include include Libs and Requires
-+ field
-+
-+2004-04-25 Kristian Høgsberg <krh at redhat.com>
-+
-+ * test/data/valid-messages/standard-*.message: Update message
-+ test scripts to new header field names.
-+
-+2004-04-22 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * test/break-loader.c (randomly_do_n_things): tracked down buffer
-+ overflow to times_we_did_each_thing array which would chop off the
-+ first character of the failure_dir string. Increased the size of
-+ the array to 7 to reflect the number of random mutation functions
-+ we have.
-+
-+2004-04-21 Kristian Høgsberg <krh at redhat.com>
-+
-+ * dbus/dbus-server-unix.c (unix_finalize): Don't unref
-+ unix_server->watch here, it is unreffed in disconnect.
-+ (_dbus_server_new_for_tcp_socket): convert NULL host to
-+ "localhost" here so we don't append NULL to address.
-+
-+ * dbus/dbus-server.c (_dbus_server_test): Add test case for
-+ various addresses, including tcp with no explicit host.
-+
-+2004-04-21 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-message.c (decode_header_data, decode_string_field):
-+ fix incorrect setting of .name_offset in the HeaderField (it was
-+ off by two bytes, positioned right after the name and typecode)
-+
-+ * bus/bus.c (bus_context_new, bus_context_unref): test before
-+ calling dbus_server_free_data_slot and _dbus_user_database_unref
-+ in case of an error.
-+
-+ * tools/Makefile.am: add $(DBUS_GLIB_TOOL_LIBS), xml libs needed
-+ by libdbus-gtool.
-+
-+2004-04-19 Kristian Høgsberg <krh at redhat.com>
-+
-+ * dbus/dbus-transport-unix.c (unix_do_iteration): Rewrite to use
-+ _dbus_poll() instead of select().
-+
-+2004-04-15 Jon Trowbridge <trow at ximian.com>
-+
-+ * bus/main.c (signal_handler): Reload the configuration files
-+ on SIGHUP.
-+ (main): Set up our SIGHUP handler.
-+
-+ * bus/bus.c (struct BusContext): Store the config file, user and
-+ fork flag in the BusContext.
-+ (process_config_first_time_only): Added. Contains the code
-+ (previously in bus_context_new) for setting up the BusContext from
-+ the BusConfigParser that should only be run the first time the
-+ config files are read.
-+ (process_config_every_time): Added. Contains the code (previously
-+ in bus_context_new) for setting up the BusContext from the
-+ BusConfigParser that should be run every time the config files are
-+ read.
-+ (load_config): Added. Builds a BusConfigParser from the config
-+ files and passes the resulting structure off to
-+ process_config_first_time_only (assuming this is the first time)
-+ and process_config_every_time.
-+ (bus_context_new): All of the config-related code has been moved
-+ to process_config_first_time_only and process_config_every_time.
-+ Now this function just does the non-config-related initializations
-+ and calls load_config.
-+ (bus_context_reload_config): Added.
-+
-+2004-04-15 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * bus/driver.c (bus_driver_handle_get_service_owner):
-+ implement a GetServiceOwner method.
-+ * doc/dbus-specification.xml: document it.
-+ * dbus/dbus-errors.h: add a 'ServiceHasNoOwner' error.
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_new_for_service_owner):
-+ implement, using the bus GetServiceOwner method.
-+
-+ * test/glib/test-dbus-glib.c:
-+ use dbus_gproxy_new_for_service_owner so that we can receive the
-+ signal.
-+
-+2004-04-15 John (J5) Palmieri <johnp at redhat.com>
-+
-+ * dbus/dbus-internals.c, dbus/dbus-message-builder.c,
-+ dbus/dbus-message.c, dbus/dbus-protocol.h
-+ (DBUS_HEADER_FIELD_SERVICE): renamed DBUS_HEADER_FIELD_DESTINATION
-+
-+ * dbus/dbus-internals.c, dbus/dbus-message-builder.c,
-+ dbus/dbus-message.c, dbus/dbus-protocol.h
-+ (DBUS_HEADER_FIELD_SENDER_SERVICE): renamed DBUS_HEADER_FIELD_SENDER
-+
-+ * dbus/dbus-internals.c (_dbus_header_field_to_string):
-+ DBUS_HEADER_FIELD_DESTINATION resolves to "destination"
-+ DBUS_HEADER_FIELD_SENDER resolves to "sender"
-+
-+ * doc/dbus-specification.xml (Header Fields Table):
-+ s/SERVICE/DESTINATION
-+ s/SENDER_SERVICE/SENDER
-+
-+
-+2004-04-14 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * test/glib/test-dbus-glib.c (timed_exit): fail the test after
-+ a few seconds.
-+
-+2004-04-13 Michael Meeks <michael at ximian.com>
-+
-+ * glib/dbus-gobject.c (handle_introspect): split out
-+ (introspect_properties): this.
-+ (handle_introspect): implement this.
-+
-+ * test/glib/Makefile.am: use the absolute path so the bus
-+ daemon's chdir ("/") doesn't kill us dead.
-+
-+ * configure.in: subst ABSOLUTE_TOP_BUILDDIR
-+
-+2004-04-12 Jon Trowbridge <trow at ximian.com>
-+
-+ * bus/config-parser.c (struct BusConfigParser): Added
-+ included_files field.
-+ (seen_include): Added. Checks whether or not a file has already
-+ been included by any parent BusConfigParser.
-+ (bus_config_parser_new): Copy the parent's included_files.
-+ (include_file): Track which files have been included, and fail on
-+ circular inclusions.
-+ (process_test_valid_subdir): Changed printf to report if we are
-+ testing valid or invalid conf files.
-+ (all_are_equiv): Changed printf to be a bit clearer about
-+ what we are actually doing.
-+ (bus_config_parser_test): Test invalid configuration files.
-+
-+2004-04-09 Jon Trowbridge <trow at ximian.com>
-+
-+ * bus/config-parser.c (bus_config_parser_new): Added a 'parent'
-+ argument. If non-null, the newly-constructed BusConfigParser will
-+ be initialized with the parent's BusLimits instead of the default
-+ values.
-+ (include_file): When including a config file, pass in
-+ the current parser as the parent and then copy the BusLimits
-+ from the included BusConfigParser pack to the current parser.
-+ (process_test_valid_subdir): Renamed from process_test_subdir.
-+ (process_test_equiv_subdir): Added. Walks through a directory,
-+ descending into each subdirectory and loading the config files
-+ it finds there. If any subdirectory contains two config files
-+ that don't produce identical BusConfigParser structs, fail.
-+ For now, the BusConfigParser's BusPolicies are not compared.
-+ (bus_config_parser_test): Call both process_test_valid_subdir and
-+ process_test_equiv_subdir.
-+
-+ * bus/config-loader-libxml.c (bus_config_load): Take a parent
-+ argument and pass it along to the call to bus_config_parser_new.
-+ Also made a few small changes to allow this code to compile.
-+
-+ * bus/config-loader-expat.c (bus_config_load): Take a parent
-+ argument and pass it along to the call to bus_config_parser_new.
-+
-+ * bus/bus.c (bus_context_new): Load the config file
-+ with a NULL parent argument.
-+
-+2004-03-29 Michael Meeks <michael at ximian.com>
-+
-+ * glib/dbus-gobject.c (introspect_properties): split
-+ out, fix mangled 'while' flow control.
-+ (introspect_signals): implement.
-+ (handle_introspect): update.
-+
-+2004-03-29 Michael Meeks <michael at ximian.com>
-+
-+ * glib/dbus-gobject.c (set_object_property): split out /
-+ re-work, use the property type, and not the message type(!)
-+ (get_object_property): ditto.
-+
-+ * glib/dbus-gvalue.c (dbus_gvalue_demarshal),
-+ (dbus_gvalue_marshal): make this code re-usable, needed
-+ for signals too, also on both proxy and server side.
-+ Re-write for more efficiency / readability.
-+
-+2004-03-29 Michael Meeks <michael at ximian.com>
-+
-+ * dbus/dbus-message.c
-+ (dbus_message_new_error_printf): impl.
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_unregister_object_path): fix warning.
-+
-+ * configure.in: fix no-mono-installed situation.
-+
-+2004-03-27 Havoc Pennington <hp at redhat.com>
-+
-+ Patch from Timo Teräs:
-+
-+ * tools/dbus-send.c (main): if --print-reply, assume type is
-+ method call; support boolean type args
-+
-+ * dbus/dbus-connection.c (dbus_connection_send_with_reply): fix a
-+ bunch of memleak and logic bugs
-+
-+2004-03-23 Owen Fraser-Green <owen at discobabe.net>
-+
-+ * mono/Arguments.cs:
-+ * mono/Introspector.cs:
-+ * mono/Handler.cs:
-+ * mono/InterfaceProxy.cs:
-+ * mono/Message.cs
-+ * mono/ProxyBuilder.cs:
-+ * mono/Service.cs:
-+ Added InterfaceProxy class to avoid building proxies for every
-+ object.
-+
-+ * dbus-message.h:
-+ * dbus-message.c (dbus_message_append_args_valist)
-+ (dbus_message_iter_get_object_path)
-+ (dbus_message_iter_get_object_path_array)
-+ (dbus_message_iter_append_object_path)
-+ (dbus_message_iter_append_object_path_array):
-+ Added object_path iter functions to handle OBJECT_PATH arguments
-+
-+2004-03-23 Owen Fraser-Green <owen at discobabe.net>
-+
-+ First checkin of mono bindings.
-+ * configure.in:
-+ * Makefile.am:
-+ Build stuff for the bindings
-+ * dbus-sharp.pc.in: Added for pkgconfig
-+
-+2004-03-21 Havoc Pennington <hp at redhat.com>
-+
-+ * test/test-service.c (main): remove debug spew
-+
-+2004-03-21 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_validate_arg): accept empty
-+ arrays
-+
-+ * dbus/dbus-message.h, bus/dbus-message.c (dbus_message_iter_init)
-+ (dbus_message_iter_init_array_iterator)
-+ (dbus_message_iter_init_dict_iterator): return a dbus_bool_t to
-+ indicate whether the iterator is empty
-+
-+ * dbus/dbus-pending-call.c, dbus/dbus-server.c: silence compiler
-+ warnings
-+
-+2004-03-19 Havoc Pennington <hp at redhat.com>
-+
-+ * NEWS: 0.21 updates
-+
-+ * configure.in: 0.21
-+
-+ * doc/Makefile.am: add all XMLTO usage to DBUS_XML_DOCS_ENABLED
-+
-+ * python/Makefile.am: change to avoid dist of dbus_bindings.c so
-+ you don't need pyrex to make dist
-+
-+ * qt/Makefile.am (libdbus_qt_1_la_SOURCES): add integrator.h to
-+ sources; run moc
-+
-+2004-03-18 Richard Hult <richard at imendio.com>
-+
-+ * dbus/dbus-message.c (dbus_message_get_auto_activation)
-+ (dbus_message_set_auto_activation): Add doxygen docs.
-+
-+2004-03-16 Richard Hult <richard at imendio.com>
-+
-+ * bus/activation.c: (bus_activation_service_created),
-+ (bus_activation_send_pending_auto_activation_messages),
-+ (bus_activation_activate_service):
-+ * bus/activation.h:
-+ * bus/dispatch.c: (bus_dispatch),
-+ (check_nonexistent_service_auto_activation),
-+ (check_service_auto_activated),
-+ (check_segfault_service_auto_activation),
-+ (check_existent_service_auto_activation), (bus_dispatch_test):
-+ * bus/driver.c: (bus_driver_handle_activate_service):
-+ * bus/services.c: (bus_registry_acquire_service):
-+ * dbus/dbus-message.c: (dbus_message_set_auto_activation),
-+ (dbus_message_get_auto_activation):
-+ * dbus/dbus-message.h:
-+ * dbus/dbus-protocol.h: Implement auto-activation.
-+
-+ * doc/dbus-specification.xml: Add auto-activation to the spec.
-+
-+2004-03-12 Olivier Andrieu <oliv__a at users.sourceforge.net>
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_get_arg_end_pos):
-+ fix a bug with CUSTOM types.
-+
-+ * dbus/dbus-message.c (message_iter_test, _dbus_message_test): add
-+ a unit test for this bug (used to fail).
-+
-+2004-03-12 Mikael Hallendal <micke at imendio.com>
-+
-+ * bus/activation.c:
-+ (babysitter_watch_callback): notify all pending activations waiting for
-+ the same exec that the activation failed.
-+ (bus_activation_activate_service): shortcut the activation if we
-+ already waiting for the same executable to start up.
-+
-+2004-03-12 Mikael Hallendal <micke at imendio.com>
-+
-+ * bus/activation.c:
-+ - Added service file reloading.
-+ Each service files directory is kept in an hash table in
-+ BusActivation and each BusActivationEntry knows what .service-file it
-+ was read from. So when you try to activate a service the bus will
-+ check if it's been updated, removed or if new .service-files has
-+ been installed.
-+ - Test code at the bottom for the service file reloading.
-+ * bus/test-main.c: (main):
-+ * bus/test.h:
-+ - added service reloading test.
-+ * dbus/dbus-sysdeps.c:
-+ * dbus/dbus-sysdeps.h: (_dbus_delete_directory): Added.
-+
-+2004-03-08 Michael Meeks <michael at ximian.com>
-+
-+ * dbus/dbus-connection.c (_dbus_connection_block_for_reply):
-+ bail immediately if disconnected, to avoid busy loop.
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_args_valist):
-+ cleanup cut/paste/inefficiency.
-+
-+2004-03-01 David Zeuthen <david at fubar.dk>
-+
-+ * dbus/dbus-string.c (_dbus_string_append_printf_valist): Fix a
-+ bug where args were used twice. This bug resulted in a segfault
-+ on a Debian/PPC system when starting the messagebus daemon. Include
-+ dbus-sysdeps.h for DBUS_VA_COPY
-+
-+ * dbus/dbus-sysdeps.h: Define DBUS_VA_COPY if neccessary. From GLib
-+
-+ * configure.in: Check for va_copy; define DBUS_VA_COPY to the
-+ appropriate va_copy implementation. From GLib
-+
-+2004-02-24 Joe Shaw <joe at ximian.com>
-+
-+ * bus/services.c (bus_registry_acquire_service): We need to pass
-+ in the service name to dbus_set_error() to prevent a crash.
-+
-+2003-12-26 Anders Carlsson <andersca at gnome.org>
-+
-+ * AUTHORS: Reveal my True identity.
-+
-+2003-12-17 Mikael Hallendal <micke at imendio.com>
-+
-+ * dbus/dbus-message.c: (dbus_message_append_args_valist):
-+ - Added case for DBUS_TYPE_BYTE, patch from Johan Hedberg.
-+
-+2003-12-13 Mikael Hallendal <micke at imendio.com>
-+
-+ * doc/TODO: Added not about better error check of configuration files.
-+
-+2003-12-02 Richard Hult <richard at imendio.com>
-+
-+ * Update AFL version to 2.0 throughout the source files to reflect
-+ the update that was done a while ago.
-+
-+2003-12-02 Richard Hult <richard at imendio.com>
-+
-+ * dbus/dbus-message.c (dbus_message_iter_append_dict): Set
-+ wrote_dict_key to FALSE on the iter that the dict is appended to,
-+ just like when appending other types. Fixes a bug where a dict
-+ couldn't be put inside a dict.
-+ (dbus_message_iter_append_dict_key): Fix typo in warning message.
-+ (message_iter_test, _dbus_message_test): Add test case for dict
-+ inside dict.
-+
-+2003-12-01 David Zeuthen <david at fubar.dk>
-+
-+ * python/dbus.py: Add the actual message when calling the reciever
-+ of a signal such that parameters can be inspected. Add the method
-+ remove_signal_receiver
-+
-+2003-11-26 Mikael Hallendal <micke at imendio.com>
-+
-+ * bus/*.[ch]:
-+ * dbus/*.[ch]:
-+ * glib/*.[ch]: Made ref functions return the pointer
-+
-+2003-11-25 Zack Rusin <zack at kde.org>
-+
-+ * qt/integrator.h, qt/integrator.cpp: Adding handling of DBusServer,
-+
-+ * qt/server.h, qt/server.cpp, qt/Makefile.am: Adding DBusServer
-+ wrappers,
-+
-+ * qt/connection.h, qt/connection.cpp: Adjusting to changes in
-+ the Integrator and to better fit with the server,
-+
-+2003-11-24 Zack Rusin <zack at kde.org>
-+
-+ * qt/connection.h, qt/connection.cpp: removing initDbus method since
-+ the integrator handles it now
-+
-+ * qt/integrator.h, qt/integrator.cpp: reworking handling of timeouts,
-+ since QTimer wasn't really meant to be used the way DBusTimeout is
-+
-+2003-11-24 Zack Rusin <zack at kde.org>
-+
-+ * qt/integrator.h, qt/integrator.cpp, Makefile.am: Adding
-+ Integrator class which integrates D-BUS with the Qt event loop,
-+
-+ * qt/connection.h, qt/connection.cpp: Move all the code which
-+ was dealing with D-BUS integration to the Integrator class,
-+ and start using Integrator,
-+
-+2003-11-23 Zack Rusin <zack at kde.org>
-+
-+ * qt/connection.h, qt/connection.cpp: Adding the DBusConnection
-+ wrapper
-+
-+ * qt/message.h, qt/message.cpp: updating to the current D-BUS api,
-+ switching namespaces to DBusQt, reworking the class,
-+
-+ * Makefile.cvs: switching dependencies so that it matches KDE
-+ schematics,
-+
-+ * qt/Makefile.am: adding connection.{h,cpp} and message.{h,cpp} to
-+ the library
-+
-+2003-11-19 Havoc Pennington <hp at redhat.com>
-+
-+ * NEWS: update
-+
-+ * configure.in: bump version to 0.20
-+
-+ * configure.in (have_qt): add yet another place to look for qt
-+ (someone hand trolltech a .pc file...)
-+
-+2003-11-01 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-specification.xml: add state machine docs on the auth
-+ protocol; just a first draft, I'm sure it's wrong.
-+
-+2003-10-28 David Zeuthen <david at fubar.dk>
-+
-+ * python/dbus_bindings.pyx.in: add get_dict to handle dictionaries
-+ return types. Fixup TYPE_* to reflect changes in dbus/dbus-protocol.h
-+
-+2003-10-28 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c (get_next_field): delete unused function
-+
-+2003-10-28 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/expirelist.c (do_expiration_with_current_time): detect
-+ failure of the expire_func due to OOM
-+
-+ * bus/connection.c (bus_pending_reply_expired): return FALSE on OOM
-+
-+ * bus/dispatch.c (check_send_exit_to_service): fix to handle the
-+ NoReply error that's now created by the bus when the service exits
-+
-+2003-10-28 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c (_dbus_message_test): enable and fix the
-+ tests for set_path, set_interface, set_member, etc.
-+
-+ * dbus/dbus-string.c (_dbus_string_insert_bytes): allow 0 bytes
-+
-+ * dbus/dbus-message.c (set_string_field): always just delete and
-+ re-append the field; accept NULL for deletion
-+ (re_align_fields_recurse): reimplement
-+
-+2003-10-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-connection.c: fix docs to properly describe the
-+ disconnected message
-+ (_dbus_connection_notify_disconnected): remove this function;
-+ we can't synchronously add the disconnected message, we have to
-+ do it after we've queued any remaining real messages
-+ (_dbus_connection_get_dispatch_status_unlocked): queue the
-+ disconnect message only if the transport has finished queueing all
-+ its real messages and is disconnected.
-+ (dbus_connection_disconnect): update the dispatch status here
-+
-+2003-10-22 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/bus.c (bus_context_check_security_policy): fix up assertion
-+
-+ * bus/connection.c (bus_transaction_send_from_driver): set the
-+ destination to the connection's base service
-+
-+2003-10-20 Havoc Pennington <hp at redhat.com>
-+
-+ hmm, make check is currently not passing.
-+
-+ * doc/dbus-specification.xml: add requirement that custom type
-+ names follow the same rules as interface names.
-+
-+ * dbus/dbus-protocol.h: change some of the byte codes, to avoid
-+ duplication and allow 'c' to be 'custom'; dict is now 'm' for
-+ 'map'
-+
-+ * doc/dbus-specification.xml: update type codes to match
-+ dbus-protocol.h, using the ASCII byte values. Rename type NAMED to
-+ CUSTOM. Add type OBJECT_PATH to the spec.
-+
-+2003-10-17 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/driver.c (create_unique_client_name): use "." as separator
-+ in base service names instead of '-'
-+
-+ * dbus/dbus-string.c (_dbus_string_get_byte): allow getting nul
-+ byte at the end of the string
-+
-+ * dbus/dbus-internals.h (_DBUS_LIKELY, _DBUS_UNLIKELY): add
-+ optimization macros since string validation seems to be a slow
-+ point.
-+
-+ * doc/dbus-specification.xml: restrict valid
-+ service/interface/member/error names. Add test suite code for the
-+ name validation.
-+
-+ * dbus/dbus-string.c: limit service/interface/member/error names
-+ to [0-9][A-Z][a-z]_
-+
-+ * dbus/dbus-connection.c (dbus_connection_dispatch): add missing
-+ format arg to verbose spew
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_call_no_reply): if not out of
-+ memory, return instead of g_error
-+
-+ * test/test-service.c (path_message_func): support emitting a
-+ signal on request
-+
-+ * dbus/dbus-bus.c (init_connections_unlocked): only fill in
-+ activation bus type if DBUS_BUS_ACTIVATION was set; default to
-+ assuming the activation bus was the session bus so that services
-+ started manually will still register.
-+ (init_connections_unlocked): fix so that in OOM situation we get
-+ the same semantics when retrying the function
-+
-+ * test/test-service.c (main): change to use path registration, to
-+ test those codepaths; register with DBUS_BUS_ACTIVATION rather
-+ than DBUS_BUS_SESSION
-+
-+2003-10-16 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gtest-main.c: bracket with #ifdef DBUS_BUILD_TESTS
-+
-+ * Makefile.am (GCOV_DIRS): remove "test", we don't care about test
-+ coverage of the tests
-+ (coverage-report.txt): don't move the .da and .bbg files around
-+
-+2003-10-16 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/bus.c (struct BusContext): remove struct field I didn't mean
-+ to put there
-+
-+2003-10-16 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/connection.c (bus_pending_reply_expired): either cancel or
-+ execute, not both
-+ (bus_connections_check_reply): use unlink, not remove_link, as we
-+ don't want to free the link; fixes double free mess
-+
-+ * dbus/dbus-pending-call.c (dbus_pending_call_block): fix in case
-+ where no reply was received
-+
-+ * dbus/dbus-connection.c (_dbus_pending_call_complete_and_unlock):
-+ fix a refcount leak
-+
-+ * bus/signals.c (match_rule_matches): add special cases for the
-+ bus driver, so you can match on sender/destination for it.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_abort): print backtrace if
-+ DBUS_PRINT_BACKTRACE is set
-+
-+ * dbus/dbus-internals.c: add pid to assertion failure messages
-+
-+ * dbus/dbus-connection.c: add message type code to the debug spew
-+
-+ * glib/dbus-gproxy.c (gproxy_get_match_rule): match rules want
-+ sender=foo not service=foo
-+
-+ * dbus/dbus-bus.c (dbus_bus_get): if the activation bus is the
-+ session bus but DBUS_SESSION_BUS_ADDRESS isn't set, use
-+ DBUS_ACTIVATION_ADDRESS instead
-+
-+ * bus/activation.c: set DBUS_SESSION_BUS_ADDRESS,
-+ DBUS_SYSTEM_BUS_ADDRESS if appropriate
-+
-+ * bus/bus.c (bus_context_new): handle OOM copying bus type into
-+ context struct
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_object_path): new function
-+ (dbus_message_iter_get_object_path_array): new function (half
-+ finished, disabled for the moment)
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_end_call): properly handle
-+ DBUS_MESSAGE_TYPE_ERROR
-+
-+ * tools/dbus-launch.c (babysit): support DBUS_DEBUG_OUTPUT to
-+ avoid redirecting stderr to /dev/null
-+ (babysit): close stdin if not doing the "exit_with_session" thing
-+
-+ * dbus/dbus-sysdeps.c (_dbus_become_daemon): delete some leftover
-+ debug code; change DBUS_DEBUG_OUTPUT to only enable stderr, not
-+ stdout/stdin, so things don't get confused
-+
-+ * bus/system.conf.in: fix to allow replies, I modified .conf
-+ instead of .conf.in again.
-+
-+2003-10-14 David Zeuthen <david at fubar.dk>
-+
-+ * python/dbus_bindings.pyx.in (MessageIter.get): fixed typo in
-+ argtype to arg_type when raising unknown arg type exception.
-+ Changed type list to reflect the changes in dbus-protocol.h so
-+ the bindings actually work.
-+
-+2003-10-14 Havoc Pennington <hp at redhat.com>
-+
-+ * test/decode-gcov.c: support gcc 3.3 also, though gcc 3.3 seems
-+ to have a bug keeping it from outputting the .da files sometimes
-+ (string_get_string): don't append garbage nul bytes to the string.
-+
-+2003-10-15 Seth Nickell <seth at gnome.org>
-+
-+ * python/Makefile.am:
-+
-+ Include dbus_h_wrapper.h in the dist tarball.
-+
-+2003-10-14 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/bus.c (bus_context_check_security_policy): revamp this to
-+ work more sanely with new policy-based requested reply setup
-+
-+ * bus/connection.c (bus_transaction_send_from_driver): set bus
-+ driver messages as no reply
-+
-+ * bus/policy.c (bus_client_policy_check_can_receive): handle a
-+ requested_reply attribute on allow/deny rules
-+
-+ * bus/system.conf: add <allow requested_reply="true"/>
-+
-+ * bus/driver.c (bus_driver_handle_message): fix check for replies
-+ sent to the bus driver, which was backward. How did this ever work
-+ at all though? I think I'm missing something.
-+
-+ * dbus/dbus-message.c (decode_header_data): require error and
-+ method return messages to have a reply serial field to be valid
-+ (_dbus_message_loader_queue_messages): break up this function;
-+ validate that reply serial and plain serial are nonzero;
-+ clean up the OOM/error handling.
-+ (get_uint_field): don't return -1 from this
-+ (dbus_message_create_header): fix signed/unsigned bug
-+
-+ * bus/connection.c (bus_connections_expect_reply): save serial of
-+ the incoming message, not reply serial
-+
-+2003-10-14 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/connection.c: implement pending reply tracking using
-+ BusExpireList
-+
-+ * bus/bus.c (bus_context_check_security_policy): verify that a
-+ reply is pending in order to allow a reply to be sent. Deny
-+ messages of unknown type.
-+
-+ * bus/dbus-daemon-1.1.in: update to mention new resource limits
-+
-+ * bus/bus.c (bus_context_get_max_replies_per_connection): new
-+ (bus_context_get_reply_timeout): new
-+
-+2003-10-13 Seth Nickell <seth at gnome.org>
-+
-+ * python/Makefile.am:
-+
-+ Pass "make distcheck": remove a couple files from DIST_FILES
-+ that weren't included in the final version.
-+
-+2003-10-12 Havoc Pennington <hp at pobox.com>
-+
-+ Added test code that 1) starts an actual bus daemon and 2) uses
-+ DBusGProxy; fixed bugs that were revealed by the test. Lots
-+ more testing possible, but this is the basic framework.
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_manager_unregister): remove
-+ empty proxy lists from the proxy list hash
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_args_valist): add a
-+ couple of return_if_fail checks
-+
-+ * dbus/dbus-pending-call.c (_dbus_pending_call_new): use dbus_new0
-+ to allocate, so everything is cleared to NULL as it should be.
-+
-+ * glib/dbus-gmain.c (dbus_connection_setup_with_g_main): pass
-+ source as data to dbus_connection_set_timeout_functions() as the
-+ timeout functions expected
-+
-+ * test/glib/run-test.sh: add a little script to start up a message
-+ bus and run tests using it
-+
-+ * tools/dbus-launch.1: updates
-+
-+ * tools/dbus-launch.c (main): add --config-file option
-+
-+ * tools/dbus-launch.c (main): remove confusing else if (runprog)
-+ that could never be reached.
-+
-+ * dbus/dbus-message.c (dbus_message_new_method_return)
-+ (dbus_message_new_error, dbus_message_new_signal): set the
-+ no-reply-expected flag on all these. Redundant, but may
-+ as well be consistent.
-+
-+2003-10-11 Havoc Pennington <hp at pobox.com>
-+
-+ * test/decode-gcov.c (function_solve_graph): make broken block
-+ graph a nonfatal error since it seems to be broken. Need to debug
-+ this.
-+
-+ * dbus/dbus-marshal.c (_dbus_type_is_valid): new function since we
-+ can't just check type > INVALID < LAST anymore
-+
-+ * dbus/dbus-message.c (dbus_message_get_signature): new function
-+ (dbus_message_has_signature): new function
-+ (struct DBusMessage): add signature field (right now it isn't sent
-+ over the wire, just generated on the fly)
-+ (dbus_message_copy): copy the signature, and init strings to
-+ proper length to avoid some reallocs
-+ (dbus_message_iter_init_array_iterator): return void, since it
-+ can't fail
-+ (dbus_message_iter_init_dict_iterator): return void since it can't fail
-+ (_dbus_message_loader_queue_messages): add silly temporary hack to
-+ fill in message->signature on load
-+
-+ * dbus/dbus-protocol.h: change DBUS_TYPE_* values to be ASCII
-+ characters, so they are relatively human-readable.
-+
-+2003-10-11 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (_dbus_message_test): add more test
-+ coverage, but #if 0 for now since they uncover a bug
-+ not fixed yet; I think in re_align_field_recurse()
-+ (re_align_field_recurse): add FIXME about broken assertion
-+
-+ * dbus/dbus-sysdeps.c (_dbus_sysdeps_test): add more test coverage
-+
-+ * bus/connection.c: share a couple code bits with expirelist.c
-+
-+ * bus/expirelist.h, bus/expirelist.c: implement a generic
-+ expire-items-after-N-seconds facility, was going to share between
-+ expiring connections and replies, decided not to use for expiring
-+ connections for now.
-+
-+ * COPYING: include AFL 2.0 (still need to change all the file headers)
-+
-+2003-10-09 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: define DBUS_HAVE_GCC33_GCOV if we have
-+ gcc 3.3. Not that we do anything about it yet.
-+
-+ * bus/signals.c (bus_match_rule_parse): impose max length on the
-+ match rule text
-+
-+ * dbus/dbus-protocol.h: add DBUS_MAXIMUM_MATCH_RULE_LENGTH
-+
-+2003-10-09 Havoc Pennington <hp at redhat.com>
-+
-+ Make matching rules theoretically work (add parser).
-+
-+ * bus/bus.c (bus_context_check_security_policy): fix up to handle
-+ the case where destination is explicitly specified as bus driver
-+ and someone else is eavesdropping.
-+
-+ * bus/policy.c (bus_client_policy_check_can_receive): fix up
-+ definition of eavesdropping and assertion
-+
-+ * tools/dbus-send.c (main): use dbus_message_type_from_string
-+
-+ * bus/signals.c (bus_match_rule_parse): implement
-+
-+ * dbus/dbus-message.c (dbus_message_type_from_string): new
-+
-+ * dbus/dbus-errors.h (DBUS_ERROR_MATCH_RULE_INVALID): add
-+
-+2003-10-02 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_call_no_reply): rename from
-+ dbus_gproxy_oneway_call
-+
-+ * glib/dbus-gmain.c (dbus_connection_setup_with_g_main)
-+ (dbus_server_setup_with_g_main): fix to allow calling them more
-+ than once on the same args
-+ (dbus_bus_get_with_g_main): new function
-+
-+2003-10-02 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-tutorial.xml: write some stuff
-+
-+2003-09-29 Havoc Pennington <hp at pobox.com>
-+
-+ * configure.in: split checks for Doxygen from XML docs, check for
-+ xmlto
-+
-+ * doc/Makefile.am: XML-ify all the docs, and add a blank
-+ dbus-tutorial.xml
-+
-+2003-09-29 Havoc Pennington <hp at pobox.com>
-+
-+ * Merge dbus-object-names branch. To see the entire patch
-+ do cvs diff -r DBUS_OBJECT_NAMES_BRANCHPOINT -r dbus-object-names,
-+ it's huuuuge though.
-+ To revert, I tagged DBUS_BEFORE_OBJECT_NAMES_MERGE.
-+
-+2003-09-28 Havoc Pennington <hp at pobox.com>
-+
-+ * HACKING: update to reflect new server
-+
-+2003-09-26 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+ * python/examples/example-signals.py:
-+
-+ Start implementing some notions of signals. The API
-+ is really terrible, but they sort of work (with the
-+ exception of being able to filter by service, and to
-+ transmit signals *as* a particular service). Need to
-+ figure out how to make messages come from the service
-+ we registered :-(
-+
-+ * python/dbus_bindings.pyx.in:
-+
-+ Removed duplicate message_handler callbacks.
-+
-+2003-09-25 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/session.conf.in: fix my mess
-+
-+2003-09-25 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/session.conf.in: fix security policy, reported by Seth Nickell
-+
-+2003-09-25 Seth Nickell <seth at gnome.org>
-+
-+ * python/examples/example-service.py:
-+
-+ Johan notices complete wrong code in example-service, but
-+ completely wrong in a way that works exactly the same (!).
-+ Johan is confused, how could this possibly work? Example
-+ code fails to serve purpose of making things clear.
-+ Seth fixes.
-+
-+2003-09-25 Mark McLoughlin <mark at skynet.ie>
-+
-+ * doc/dbus-specification.sgml: don't require header fields
-+ to be 4-byte aligned and specify that fields should be
-+ distinguished from padding by the fact that zero is not
-+ a valid field name.
-+
-+ * doc/TODO: remove re-alignment item and add item to doc
-+ the OBJECT_PATH type.
-+
-+ * dbus/dbus-message.c:
-+ (HeaderField): rename the original member to value_offset
-+ and introduce a name_offset member to keep track of where
-+ the field actually begins.
-+ (adjust_field_offsets): remove.
-+ (append_int_field), (append_uint_field),
-+ (append_string_field): don't align the start of the header
-+ field to a 4-byte boundary.
-+ (get_next_field): impl finding the next marhsalled field
-+ after a given field.
-+ (re_align_field_recurse): impl re-aligning a number of
-+ already marshalled fields.
-+ (delete_field): impl deleting a field of any type and
-+ re-aligning any following fields.
-+ (delete_int_or_uint_field), (delete_string_field): remove.
-+ (set_int_field), (set_uint_field): no need to re-check
-+ that we have the correct type for the field.
-+ (set_string_field): ditto and impl re-aligning any
-+ following fields.
-+ (decode_header_data): update to take into account that
-+ the fields aren't 4-byte aligned any more and the new
-+ way to distinguish padding from header fields. Also,
-+ don't exit when there is too much header padding.
-+ (process_test_subdir): print the directory.
-+ (_dbus_message_test): add test to make sure a following
-+ field is re-aligned correctly after field deletion.
-+
-+ * dbus/dbus-string.[ch]:
-+ (_dbus_string_insert_bytes): rename from insert_byte and
-+ allow the insert of multiple bytes.
-+ (_dbus_string_test): test inserting multiple bytes.
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_set_string): add
-+ warning note to docs about having to re-align any
-+ marshalled values following the string.
-+
-+ * dbus/dbus-message-builder.c:
-+ (append_string_field), (_dbus_message_data_load):
-+ don't align the header field.
-+
-+ * dbus/dbus-auth.c: (process_test_subdir): print the
-+ directory.
-+
-+ * test/break-loader.c: (randomly_add_one_byte): upd. for
-+ insert_byte change.
-+
-+ * test/data/invalid-messages/bad-header-field-alignment.message:
-+ new test case.
-+
-+ * test/data/valid-messages/unknown-header-field.message: shove
-+ a dict in the unknown field.
-+
-+2003-09-25 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+ * python/dbus_bindings.pyx.in:
-+
-+ Handle return values.
-+
-+ * python/examples/example-client.py:
-+ * python/examples/example-service.py:
-+
-+ Pass back return values from the service to the client.
-+
-+2003-09-24 Seth Nickell <seth at gnome.org>
-+
-+ * python/dbus.py:
-+
-+ Connect Object methods (when you are sharing an object) up... pass
-+ in a list of methods to be shared. Sharing all the methods just
-+ worked out too weird. You can now create nice Services over the
-+ DBus in Python. :-)
-+
-+ * python/dbus_bindings.pyx.in:
-+
-+ Keep references to user_data tuples passed into C functions so
-+ Python doesn't garbage collect on us.
-+
-+ Implement MethodReturn and Error subclasses of Message for creating
-+ DBusMessage's of those types.
-+
-+ * python/examples/example-client.py:
-+ * python/examples/example-service.py:
-+
-+ Simple example code showing both how create DBus services and objects,
-+ and how to use them.
-+
-+2003-09-23 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_manager_filter): implement
-+
-+2003-09-23 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_connect_signal): implement
-+ (dbus_gproxy_disconnect_signal): implement
-+ (dbus_gproxy_manager_remove_signal_match): implement
-+ (dbus_gproxy_manager_add_signal_match): implement
-+ (dbus_gproxy_oneway_call): implement
-+
-+2003-09-23 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gproxy.c (struct DBusGProxy): convert to a GObject
-+ subclass. This means dropping the transparent thread safety of the
-+ proxy; you now need a separate proxy per-thread, or your own
-+ locking on the proxy. Probably right anyway.
-+ (dbus_gproxy_ref, dbus_gproxy_unref): nuke, just use g_object_ref
-+
-+2003-09-22 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_manager_get): implement
-+
-+2003-09-21 Seth Nickell <seth at gnome.org>
-+
-+ First checkin of the Python bindings.
-+
-+ * python/.cvsignore:
-+ * python/Makefile.am:
-+ * python/dbus_bindings.pyx.in:
-+ * python/dbus_h_wrapper.h:
-+
-+ Pieces for Pyrex to operate on, building a dbus_bindings.so
-+ python module for low-level access to the DBus APIs.
-+
-+ * python/dbus.py:
-+
-+ High-level Python module for accessing DBus objects.
-+
-+ * configure.in:
-+ * Makefile.am:
-+
-+ Build stuff for the python bindings.
-+
-+ * acinclude.m4:
-+
-+ Extra macro needed for finding the Python C header files.
-+
-+2003-09-21 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_manager_new): start
-+ implementing the proxy manager, didn't get very far.
-+
-+ * dbus/dbus-bus.c (dbus_bus_add_match): new
-+ (dbus_bus_remove_match): new
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_new_for_service): add a
-+ path_name argument; adjust the other not-yet-implemented
-+ gproxy constructors to be what I think they should be.
-+
-+2003-09-21 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-bus.c (dbus_bus_get): set exit_on_disconnect to TRUE
-+ by default for message bus connections.
-+
-+ * dbus/dbus-connection.c (dbus_connection_dispatch): exit if
-+ exit_on_disconnect flag is set and we process the disconnected
-+ signal.
-+ (dbus_connection_set_exit_on_disconnect): new function
-+
-+2003-09-21 Havoc Pennington <hp at pobox.com>
-+
-+ Get matching rules mostly working in the bus; only actually
-+ parsing the rule text remains. However, the client side of
-+ "signal connections" hasn't been started, this patch is only the
-+ bus side.
-+
-+ * dbus/dispatch.c: fix for the matching rules changes
-+
-+ * bus/driver.c (bus_driver_handle_remove_match)
-+ (bus_driver_handle_add_match): send an ack reply from these
-+ method calls
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_begin_call): fix order of
-+ arguments, reported by Seth Nickell
-+
-+ * bus/config-parser.c (append_rule_from_element): support
-+ eavesdrop=true|false attribute on policies so match rules
-+ can be prevented from snooping on the system bus.
-+
-+ * bus/dbus-daemon-1.1.in: consistently use terminology "sender"
-+ and "destination" in attribute names; fix some docs bugs;
-+ add eavesdrop=true|false attribute
-+
-+ * bus/driver.c (bus_driver_handle_add_match)
-+ (bus_driver_handle_remove_match): handle AddMatch, RemoveMatch
-+ messages
-+
-+ * dbus/dbus-protocol.h (DBUS_SERVICE_ORG_FREEDESKTOP_BROADCAST): get
-+ rid of broadcast service concept, signals are just always broadcast
-+
-+ * bus/signals.c, bus/dispatch.c, bus/connection.c, bus/bus.c:
-+ mostly implement matching rules stuff (currently only exposed as signal
-+ connections)
-+
-+2003-09-21 Mark McLoughlin <mark at skynet.ie>
-+
-+ * doc/dbus-specification.sgml: Change the header field name
-+ to be an enum and update the rest of the spec to reference
-+ the fields using the conventinal name.
-+
-+ * dbus/dbus-protocol.h: update to reflect the spec.
-+
-+ * doc/TODO: add item to remove the 4 byte alignment requirement.
-+
-+ * dbus/dbus-message.c: Remove the code to generalise the
-+ header/body length and serial number header fields as named
-+ header fields so we can reference field names using the
-+ protocol values.
-+ (append_int_field), (append_uint_field), (append_string_field):
-+ Append the field name as a byte rather than four chars.
-+ (delete_int_or_uint_field), (delete_string_field): reflect the
-+ fact that the field name and typecode now occupy 4 bytes instead
-+ of 8.
-+ (decode_string_field), (decode_header_data): update to reflect
-+ protocol changes and move the field specific encoding from
-+ decode_string_field() back into decode_header_data().
-+
-+ * dbus/dbus-internals.[ch]: (_dbus_header_field_to_string):
-+ Add utility to aid debugging.
-+
-+ * dbus/dbus-message-builder.c:
-+ (append_string_field), (_dbus_message_data_load): Update to
-+ reflect protocol changes; Change the FIELD_NAME directive
-+ to HEADER_FIELD and allow it to take the field's conventional
-+ name rather than the actual value.
-+
-+ * test/data/*/*.message: Update to use HEADER_FIELD instead
-+ of FIELD_NAME; Always align the header on an 8 byte boundary
-+ *before* updating the header length.
-+
-+2003-09-15 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-pending-call.c: add the get/set object data
-+ boilerplate as for DBusConnection, etc. Use generic object data
-+ for the notify callback.
-+
-+ * glib/dbus-gparser.c (parse_node): parse child nodes
-+
-+ * tools/dbus-viewer.c: more hacking on the dbus-viewer
-+
-+ * glib/dbus-gutils.c (_dbus_gutils_split_path): add a file to
-+ contain functions shared between the convenience lib and the
-+ installed lib
-+
-+ * glib/Makefile.am (libdbus_glib_1_la_LDFLAGS): add
-+ -export-symbols-regex to the GLib library
-+
-+ * dbus/dbus-object-tree.c (_dbus_object_tree_dispatch_and_unlock):
-+ fix the locking in here, and add a default handler for
-+ Introspect() that just returns sub-nodes.
-+
-+2003-09-14 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gthread.c (dbus_g_thread_init): rename to make g_foo
-+ rather than gfoo consistent
-+
-+ * glib/dbus-gproxy.h: delete for now, move contents to
-+ dbus-glib.h, because the include files don't work right since we
-+ aren't in the dbus/ subdir.
-+
-+ * glib/dbus-gproxy.c (dbus_gproxy_send): finish implementing
-+ (dbus_gproxy_end_call): finish
-+ (dbus_gproxy_begin_call): finish
-+
-+ * glib/dbus-gmain.c (dbus_set_g_error): new
-+
-+ * glib/dbus-gobject.c (handle_introspect): include information
-+ about child nodes in the introspection
-+
-+ * dbus/dbus-connection.c (dbus_connection_list_registered): new
-+ function to help in implementation of introspection
-+
-+ * dbus/dbus-object-tree.c
-+ (_dbus_object_tree_list_registered_and_unlock): new function
-+
-+2003-09-12 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gidl.h: add common base class for all the foo_info
-+ types
-+
-+ * tools/dbus-viewer.c: add GTK-based introspection UI thingy
-+ similar to kdcop
-+
-+ * test/Makefile.am: try test srcdir -ef . in addition to test
-+ srcdir = ., one of them should work (yeah lame)
-+
-+ * glib/Makefile.am: build the "idl" parser stuff as a convenience
-+ library
-+
-+ * glib/dbus-gparser.h: make description_load routines return
-+ NodeInfo* not Parser*
-+
-+ * Makefile.am (SUBDIRS): build test dir after all library dirs
-+
-+ * configure.in: add GTK+ detection
-+
-+2003-09-07 Havoc Pennington <hp at pobox.com>
-+
-+ * Make Doxygen contented.
-+
-+2003-09-07 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: more updates
-+
-+2003-09-06 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: partial updates
-+
-+ * bus/dbus-daemon-1.1.in: fix the config file docs for the
-+ zillionth time; hopefully I edited the right file this time.
-+
-+ * bus/config-parser.c (append_rule_from_element): support
-+ send_type, send_path, receive_type, receive_path
-+
-+ * bus/policy.c: add message type and path to the list of things
-+ that can be "firewalled"
-+
-+2003-09-06 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_register_fallback): add this
-+ (dbus_connection_register_object_path): make this not handle
-+ messages to paths below the given path
-+
-+2003-09-03 Havoc Pennington <hp at pobox.com>
-+
-+ * test/glib/Makefile.am: add this with random glib-linked test
-+ programs
-+
-+ * glib/Makefile.am: remove the random test programs from here,
-+ leave only the unit tests
-+
-+ * glib/dbus-gobject.c (_dbus_gobject_test): add test for
-+ uscore/javacaps conversion, and fix
-+ (get_object_property, set_object_property): change to .NET
-+ convention for mapping props to methods, set_FooBar/get_FooBar,
-+ since one language has such a convention we may as well copy it.
-+ Plus real methods in either getFooBar or get_foo_bar style won't
-+ collide with this convention.
-+
-+2003-09-01 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gparser.c: implement
-+
-+ * glib/dbus-gobject.c: start implementing skeletons support
-+
-+ * configure.in: when disabling checks/assert, also define
-+ G_DISABLE_ASSERT and G_DISABLE_CHECKS
-+
-+2003-09-01 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/Makefile.am: rearrange a bunch of files and get "make
-+ check" framework set up
-+
-+2003-08-31 Havoc Pennington <hp at pobox.com>
-+
-+ * fix build with --disable-tests
-+
-+2003-08-30 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c: purge DBusMessageHandler
-+
-+ * dbus/dbus-message-handler.c: remove DBusMessageHandler, just
-+ use callbacks everywhere
-+
-+2003-08-30 Havoc Pennington <hp at pobox.com>
-+
-+ * test/data/valid-config-files/system.d/test.conf: change to
-+ root for the user so warnings don't get printed
-+
-+ * dbus/dbus-message.c: add dbus_message_get_path,
-+ dbus_message_set_path
-+
-+ * dbus/dbus-object-tree.c (do_test_dispatch): add test of
-+ dispatching to a path
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_path): add
-+
-+ * dbus/dbus-marshal.c (_dbus_demarshal_object_path): implement
-+ (_dbus_marshal_object_path): implement
-+
-+ * dbus/dbus-protocol.h (DBUS_HEADER_FIELD_PATH): new header field
-+ to contain the path to the target object
-+ (DBUS_HEADER_FIELD_SENDER_SERVICE): rename
-+ DBUS_HEADER_FIELD_SENDER to explicitly say it's the sender service
-+
-+2003-08-30 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object-tree.c: write tests and fix the discovered bugs
-+
-+2003-08-29 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object-tree.c: modify to allow overlapping paths to be
-+ registered
-+ (struct DBusObjectSubtree): shrink this
-+ a lot, since we may have a lot of them
-+ (_dbus_object_tree_free_all_unlocked): implement
-+ (_dbus_object_tree_dispatch_and_unlock): implement
-+
-+2003-08-29 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-internals.h: fix _DBUS_N_GLOBAL_LOCKS
-+
-+2003-08-28 Havoc Pennington <hp at pobox.com>
-+
-+ purge DBusObjectID
-+
-+ * dbus/dbus-connection.c: port to no ObjectID, create a
-+ DBusObjectTree, rename ObjectTree to ObjectPath in public API
-+
-+ * dbus/dbus-connection.h (struct DBusObjectTreeVTable): delete
-+ everything except UnregisterFunction and MessageFunction
-+
-+ * dbus/dbus-marshal.c: port away from DBusObjectID,
-+ add DBUS_TYPE_OBJECT_PATH
-+
-+ * dbus/dbus-object-registry.[hc], dbus/dbus-object.[hc],
-+ dbus/dbus-objectid.[hc]: remove these, we are moving to
-+ path-based object IDs
-+
-+2003-08-25 Havoc Pennington <hp at pobox.com>
-+
-+ Just noticed that dbus_message_test is hosed, I wonder when I
-+ broke that. I thought make check was passing earlier...
-+
-+ * dbus/dbus-object-tree.c: add new "object tree" to match DCOP
-+ container tree, will replace most of dbus-object-registry
-+
-+ * dbus/dbus-string.c (_dbus_string_append_printf_valist): fix C99
-+ screwup
-+
-+2003-08-19 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (decode_string_field): support FIELD_SENDER
-+ (dbus_message_is_error): fix this function
-+
-+ * bus/dbus-daemon-1.1: clarify logic on when <deny>/<allow> rules
-+ match
-+
-+ * bus/policy.c (bus_client_policy_check_can_receive): fix code to
-+ reflect clarified man page
-+ (bus_client_policy_check_can_send): ditto
-+
-+ * bus/session.conf.in: fixup
-+
-+ * bus/system.conf.in: fixup
-+
-+2003-08-18 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-hash.c (_dbus_hash_table_insert_two_strings): fix
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_queue_messages): fix
-+ dumb bug created earlier (wrong order of args to
-+ decode_header_data())
-+
-+ * tools/dbus-send.c: port
-+
-+ * tools/dbus-print-message.c (print_message): port
-+
-+ * test/data/*messages: port all messages over
-+
-+ * dbus/dbus-message-builder.c: support including
-+ message type
-+
-+ * bus/driver.c: port over
-+
-+ * bus/dispatch.c: port over to new stuff
-+
-+ * dbus/dbus-connection.c (_dbus_connection_new_for_transport):
-+ rename disconnect signal to "Disconnected"
-+
-+2003-08-17 Havoc Pennington <hp at pobox.com>
-+
-+ This doesn't compile yet, but syncing up so I can hack on it from
-+ work. What are branches for if not broken code? ;-)
-+
-+ * dbus/dbus-protocol.h: remove DBUS_HEADER_FIELD_NAME, add
-+ DBUS_HEADER_FIELD_INTERFACE, DBUS_HEADER_FIELD_MEMBER,
-+ DBUS_HEADER_FIELD_ERROR_NAME
-+
-+ * dbus/dbus-hash.c: Introduce DBUS_HASH_TWO_STRINGS as hack to use
-+ for the interface+member pairs
-+ (string_hash): change to use g_str_hash algorithm
-+ (find_direct_function, find_string_function): refactor these to
-+ share most code.
-+
-+ * dbus/dbus-message.c: port all of this over to support
-+ interface/member fields instead of name field
-+
-+ * dbus/dbus-object-registry.c: port over
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_interface): rename
-+ from _dbus_string_validate_name
-+
-+ * bus/dbus-daemon-1.1: change file format for the
-+ <deny>/<allow> stuff to match new message naming scheme
-+
-+ * bus/policy.c: port over
-+
-+ * bus/config-parser.c: parse new format
-+
-+2003-08-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object-registry.c (add_and_remove_objects): remove
-+ broken assertion
-+
-+ * glib/dbus-gproxy.c: some hacking
-+
-+2003-08-15 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-pending-call.c (dbus_pending_call_block): implement
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_send_with_reply_and_block): factor out internals;
-+ change to convert any error replies to DBusError instead of
-+ returning them as a message
-+
-+2003-08-15 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c,
-+ dbus/dbus-pending-call.c: Finish the pending call stuff
-+
-+2003-08-14 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-pending-call.c: start on new object that will replace
-+ DBusMessageHandler and ReplyHandlerData for tracking outstanding
-+ replies
-+
-+ * dbus/dbus-gproxy.c: start on proxy object used to communicate
-+ with remote interfaces
-+
-+ * dbus/dbus-gidl.c: do the boring boilerplate in here
-+
-+2003-08-12 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/dispatch.c (bus_dispatch): make this return proper
-+ DBusHandlerResult to avoid DBUS_ERROR_UNKNOWN_METHOD
-+
-+ * dbus/dbus-errors.c (dbus_set_error): use
-+ _dbus_string_append_printf_valist
-+
-+ * dbus/dbus-string.c (_dbus_string_append_printf_valist)
-+ (_dbus_string_append_printf): new
-+
-+ * dbus/dbus-errors.h (DBUS_ERROR_UNKNOWN_MESSAGE): change to
-+ UNKNOWN_METHOD
-+
-+ * dbus/dbus-connection.c (dbus_connection_dispatch): handle
-+ DBUS_HANDLER_RESULT_NEED_MEMORY; send default error reply if a
-+ message is unhandled.
-+
-+2003-08-11 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/test.c (client_disconnect_handler): change to return
-+ HANDLED (would have been REMOVE_MESSAGE)
-+
-+ * dbus/dbus-object.h (enum DBusHandlerResult): rename to
-+ HANDLED/NOT_YET_HANDLED instead of
-+ REMOVE_MESSAGE/ALLOW_MORE_HANDLERS to make it clearer how it
-+ should be used.
-+
-+2003-08-10 Havoc Pennington <hp at pobox.com>
-+
-+ * tools/dbus-send.c (main): add --type argument, for now
-+ supporting only method_call and signal types.
-+
-+ * tools/dbus-print-message.c: print message type
-+
-+ * dbus/dbus-connection.c (_dbus_connection_new_for_transport):
-+ init connection->objects
-+
-+ * doc/dbus-specification.sgml: fix sgml
-+
-+ * bus/*.c: port over to object-instance API changes
-+
-+ * test/test-service.c: ditto
-+
-+ * dbus/dbus-message.c (dbus_message_create_header): allow #NULL
-+ name, we will have to fix up the rest of the code to also handle
-+ this
-+ (dbus_message_new): generic message-creation call
-+ (set_string_field): allow appending name field
-+
-+2003-08-06 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object-registry.c: implement signal connection
-+ and dispatch
-+
-+ * dbus/dbus-connection.c (_dbus_connection_unref_unlocked): new
-+
-+ * dbus/dbus-internals.c (_dbus_memdup): new function
-+
-+2003-08-02 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (dbus_message_get_no_reply)
-+ (dbus_message_set_no_reply): add these and remove
-+ set_is_error/get_is_error
-+
-+ * dbus/dbus-protocol.h, doc/dbus-specification.sgml:
-+ remove the ERROR flag, since there's now an ERROR type
-+
-+2003-08-01 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object-registry.c (_dbus_object_registry_handle_and_unlock):
-+ implement
-+
-+ * dbus/dbus-message.c (dbus_message_get_type): new function
-+
-+ * doc/dbus-specification.sgml: add "type" byte to messages
-+
-+2003-08-01 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-protocol.h (DBUS_MESSAGE_TYPE_*): introduce
-+ a message type enum to distinguish kinds of message
-+ (DBUS_HEADER_FLAG_NO_REPLY_EXPECTED): flag for a message
-+ that need not be replied to
-+
-+2003-08-01 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-marshal.c: adapt to DBusObjectID changes
-+ (unpack_8_octets): fix no-64-bit-int bug
-+
-+ * dbus/dbus-object-registry.c (validate_id): validate the
-+ connection ID bits, not just the instance ID.
-+
-+ * dbus/dbus-connection.c (_dbus_connection_init_id): initialize
-+ the connection-global 33 bits of the object ID
-+
-+ * dbus/dbus-object-registry.c (info_from_entry): fill in
-+ object ID in the new way
-+
-+ * dbus/dbus-objectid.h: rather than high/low bits, specifically
-+ define server/client/instance bits.
-+
-+2003-07-30 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_register_object): fix
-+ build
-+
-+2003-07-13 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object.h (struct DBusObjectVTable): add padding
-+ fields to DBusObjectVTable and DBusObjectInfo
-+
-+2003-07-12 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object-registry.c: implement unit test,
-+ fix bugs discovered in process
-+
-+ * dbus/dbus-connection.c: remove handler_table and
-+ register_handler(), add DBusObjectRegistry usage
-+
-+ * dbus/dbus-objectid.c (dbus_object_id_is_null)
-+ (dbus_object_id_set_null): new functions
-+
-+2003-07-08 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object.c: implement some of this
-+
-+ * dbus/dbus-object-registry.c
-+ (_dbus_object_registry_add_and_unlock): fill in the object_id out
-+ param
-+ (_dbus_object_registry_new): handle OOM
-+
-+2003-07-08 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-object.h: sketch out an API for registering objects
-+ with a connection, that allows us to use as little as 24 bytes
-+ per object and lets application code represent an object in
-+ any conceivable way.
-+
-+ * dbus/dbus-object-registry.c: implement the hard bits of the
-+ DBusConnection aspect of object API. Not yet wired up.
-+
-+2003-07-06 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_set_object_id): new function
-+ (_dbus_marshal_object_id): new
-+ (_dbus_demarshal_object_id): new
-+ (_dbus_marshal_get_arg_end_pos): support object ID type, and
-+ consolidate identical switch cases. Don't conditionalize handling
-+ of DBUS_TYPE_UINT64, need to handle the type always.
-+ (_dbus_marshal_validate_arg): consolidate identical cases, and
-+ handle DBUS_TYPE_OBJECT_ID
-+
-+ * dbus/dbus-objectid.c: new file with DBusObjectID data type.
-+
-+ * dbus/dbus-protocol.h: add DBUS_TYPE_OBJECT_ID
-+
-+2003-09-28 Havoc Pennington <hp at pobox.com>
-+
-+ * real 0.13 release
-+
-+2003-09-28 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/Makefile.am (dbus-specification.html): testing a funky hack
-+ to work with Debian db2html
-+
-+2003-09-28 Havoc Pennington <hp at pobox.com>
-+
-+ * configure.in: 0.13
-+
-+ * doc/Makefile.am (dbus-test-plan.html): accept nonexistence of
-+ stylesheet-images for benefit of Debian
-+
-+ Change back to using filesystem-linked sockets for the system
-+ bus, so only root can create the default system bus address.
-+
-+ * bus/system.conf.in: change to use
-+ DBUS_SYSTEM_BUS_DEFAULT_ADDRESS
-+
-+ * dbus/Makefile.am (INCLUDES): remove DBUS_SYSTEM_BUS_PATH define
-+ from here.
-+
-+ * configure.in: define DBUS_SYSTEM_BUS_DEFAULT_ADDRESS
-+ here, and AC_DEFINE DBUS_SYSTEM_PATH
-+
-+2003-08-09 Anders Carlsson <andersca at codefactory.se>
-+
-+ * doc/TODO:
-+ * doc/busconfig.dtd:
-+ Add busconfig DTD.
-+
-+2003-08-09 Anders Carlsson <andersca at codefactory.se>
-+
-+ * doc/dbus-specification.sgml:
-+ Add activation reply values.
-+
-+2003-08-05 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: 0.12
-+
-+2003-08-05 Anders Carlsson <andersca at codefactory.se>
-+
-+ * glib/dbus-gmain.c: (watch_fd_new), (watch_fd_ref),
-+ (watch_fd_unref), (dbus_gsource_check), (dbus_gsource_dispatch),
-+ (add_watch), (remove_watch), (create_source):
-+ Refcount fds, fixes some reentrancy issues.
-+
-+2003-07-30 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-bus.c (init_connections_unlocked): fix default system
-+ bus address to be abstract if we have abstract sockets
-+
-+ * NEWS: update
-+
-+2003-07-28 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/messagebus.in: fix to avoid processname/servicename
-+ confusion, from Michael Kearey
-+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=100965
-+
-+2003-07-23 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_named):
-+ fix from Andy Hanton to remove broken "+1"
-+
-+2003-07-16 Havoc Pennington <hp at pobox.com>
-+
-+ * tools/dbus-launch.c (babysit): close stdout/stderr in the
-+ babysitter process, as suggested by Thomas Leonard, so
-+ an "eval `dbus-launch --exit-with-session`" will actually
-+ return
-+
-+2003-07-16 Havoc Pennington <hp at pobox.com>
-+
-+ * configure.in: print out EXPANDED_* variables in the summary at
-+ the end; clean up the code that computes EXPANDED_ variables and
-+ get the ones using exec_prefix right. Should make things work
-+ when you build without --prefix
-+
-+2003-06-29 Havoc Pennington <hp at pobox.com>
-+
-+ * mono/Test.cs (class Test): fire up a main loop and run it
-+
-+ * mono/DBus.cs (DBus): don't g_thread_init since it can only be
-+ done once, the app has to do it
-+
-+2003-06-26 Havoc Pennington <hp at pobox.com>
-+
-+ * mono/Connection.cs: set up connection with the glib main loop
-+
-+2003-07-01 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-specification.sgml: clarify the format of a type code,
-+ change suggested by Jim Blandy
-+
-+2003-06-29 Miloslav Trmac <mitr at volny.cz>
-+
-+ * doc/Makefile.am:
-+ * tools/Makefile.am: Don't assume srcdir == builddir.
-+
-+ * dbus/dbus-memory.c (dbus_realloc): Don't check guards after shrinking
-+ the allocated block.
-+ (_dbus_memory_test): New function.
-+ * dbus/dbus-test.h: Add _dbus_memory_test ().
-+ * dbus/dbus-test.c (dbus_internal_do_not_use_run_tests): Call it.
-+
-+ * dbus/dbus-message.c (decode_header_data): Use %.4s instead
-+ of %c%c%c%c.
-+ (dbus_message_new): Remove obsolete @todo.
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_set_int64)
-+ (_dbus_marshal_set_uint64): Fix comment.
-+
-+ * dbus/dbus-message.c (append_int_field, append_uint_field): Don't
-+ hardcode FIELD_REPLY_SERIAL.
-+
-+ * dbus/dbus-mainloop.c (_dbus_loop_remove_watch)
-+ (_dbus_loop_remove_timeout): Cast function pointers to (void *) for %p
-+
-+ * configure.in: Add -D_POSIX_C_SOURCE=199309L -DBSD_SOURCE to CFLAGS
-+ and disable DBUS_USE_ATOMIC_INT_486 when --enable-ansi is used
-+
-+2003-06-24 Havoc Pennington <hp at pobox.com>
-+
-+ * mono/*.cs: Use IntPtr.Zero instead of ((IntPtr) 0)
-+
-+2003-06-23 Anders Carlsson <andersca at codefactory.se>
-+
-+ * configure.in:
-+ * gcj/.cvsignore:
-+ * gcj/Hello.java:
-+ * gcj/Makefile.am:
-+ * gcj/TestMessage.java: (TestMessage), (TestMessage.main):
-+ * gcj/org/.cvsignore:
-+ * gcj/org/Makefile.am:
-+ * gcj/org/freedesktop/.cvsignore:
-+ * gcj/org/freedesktop/Makefile.am:
-+ * gcj/org/freedesktop/dbus/.cvsignore:
-+ * gcj/org/freedesktop/dbus/Makefile.am:
-+ * gcj/org/freedesktop/dbus/Message.java: (Message),
-+ (Message.Message):
-+ * gcj/org/freedesktop/dbus/natMessage.cc:
-+ Fix the build system.
-+
-+2003-06-22 Havoc Pennington <hp at pobox.com>
-+
-+ * mono/Connection.cs: add more bindings
-+
-+ * dbus/dbus-threads.c (dbus_threads_init): allow calling this
-+ more than once.
-+
-+2003-06-22 Havoc Pennington <hp at pobox.com>
-+
-+ * mono/Connection.cs, mono/DBus.cs, mono/Error.cs:
-+ Start wrapping more stuff.
-+
-+2003-06-22 Havoc Pennington <hp at pobox.com>
-+
-+ * mono/Message.cs: implement Message.Wrap() that ensures we only
-+ have a single C# wrapper per DBusMessage, assuming it works which
-+ it probably doesn't.
-+
-+ * dbus/dbus-message.c (dbus_message_allocate_data_slot): new
-+ (dbus_message_free_data_slot): new
-+ (dbus_message_set_data): new
-+ (dbus_message_get_data): new
-+
-+2003-06-22 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-dataslot.c (_dbus_data_slot_allocator_unref)
-+ (_dbus_data_slot_allocator_alloc): rework these to keep a
-+ reference count on each slot and automatically manage a global
-+ slot ID variable passed in by address
-+
-+ * bus/bus.c: convert to new dataslot API
-+
-+ * dbus/dbus-bus.c: convert to new dataslot API
-+
-+ * dbus/dbus-connection.c: convert to new dataslot API
-+
-+ * dbus/dbus-server.c: convert to new dataslot API
-+
-+ * glib/dbus-gmain.c: ditto
-+
-+ * bus/test.c: ditto
-+
-+ * bus/connection.c: ditto
-+
-+2003-06-22 Anders Carlsson <andersca at codefactory.se>
-+
-+ * configure.in: Add AM_PROG_GCJ and move AM_PROG_LIBTOOL
-+ after the gcj checks so that the correct configuration tags
-+ will be added to libtool.
-+
-+ * dbus-glib-1.pc.in: No need to specify any includes since
-+ dbus-1.pc.in has those.
-+
-+2003-06-22 Havoc Pennington <hp at pobox.com>
-+
-+ * mono/*, gcj/*, configure.in, Makefile.am:
-+ Check in makefiles and subdirs for mono and gcj bindings.
-+ Neither binding actually exists, just trying to get through
-+ all the build and other boring bits.
-+
-+2003-06-21 Philip Blundell <philb at gnu.org>
-+
-+ * tools/dbus-monitor.1: Updated.
-+
-+ * tools/dbus-send.1: Likewise.
-+
-+2003-06-20 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-transport-unix.c (unix_handle_watch): Check
-+ for hangup and error after checking read so we won't discard
-+ pending data if both hangup and read are set.
-+
-+2003-06-19 Philip Blundell <philb at gnu.org>
-+
-+ * tools/dbus-print-message.c (print_message): Handle BOOLEAN.
-+
-+ * tools/dbus-send.c: Accept both --system and --session.
-+
-+ * tools/dbus-monitor.c: Same here.
-+
-+2003-06-19 Anders Carlsson <andersca at codefactory.se>
-+
-+ * glib/dbus-glib.h: Fix so that dbus-glib.h can be used
-+ from C++ (Patch by Miloslav Trmac).
-+
-+2003-06-15 Joe Shaw <joe at assbarn.com>
-+
-+ * configure.in: Check for socklen_t.
-+
-+ * dbus/dbus-sysdeps.c: Define socklen_t if it's not defined.
-+
-+ * test/test-segfault.c: Add #include <sys/time.h>
-+
-+ * tools/Makefile.am: Add DBUS_X_CFLAGS to the INCLUDES since
-+ dbus-launch needs it.
-+
-+2003-06-09 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_listen_unix_socket): don't use
-+ SUN_LEN, it breaks abstract socket usage
-+
-+ * dbus/dbus-internals.c (_dbus_verbose_real): only print PID at
-+ starts of lines.
-+
-+2003-06-04 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-server.c (dbus_server_listen): allow abstract sockets
-+ using unix:abstract=/foo, and when listening in a tmpdir
-+ i.e. unix:tmpdir=/tmp, always use abstract sockets if we can.
-+
-+ * dbus/dbus-transport.c (_dbus_transport_open): support
-+ unix:abstract=/foo
-+
-+ * dbus/dbus-server-unix.c (_dbus_server_new_for_domain_socket):
-+ support abstract sockets
-+
-+ * dbus/dbus-transport-unix.c
-+ (_dbus_transport_new_for_domain_socket): support abstract sockets
-+
-+ * dbus/dbus-sysdeps.c (_dbus_connect_unix_socket): add "abstract"
-+ toggle as an argument, implement abstract namespace support
-+ (_dbus_listen_unix_socket): ditto
-+
-+ * configure.in: add --enable-abstract-sockets and implement
-+ a configure check for autodetection of the right value.
-+
-+2003-06-01 Havoc Pennington <hp at pobox.com>
-+
-+ * tools/dbus-cleanup-sockets.c: add utility to clean up sockets
-+ in /tmp (though on Linux this will end up being useless,
-+ when we add abstract namespace support)
-+
-+ * configure.in: define DBUS_SESSION_SOCKET_DIR in addition to
-+ subst'ing it
-+
-+2003-05-28 Colin Walters <walters at verbum.org>
-+
-+ * tools/dbus-monitor.c (main): Fix silly typo (s/--session/--system/).
-+
-+2003-05-18 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-message.c (dbus_message_new): Remove @todo.
-+
-+2003-05-17 Colin Walters <walters at gnu.org>
-+
-+ * tools/dbus-send.c: Don't exit with an error code if --help was
-+ passed. Default to using the session bus instead of the system
-+ one.
-+
-+ * tools/dbus-launch.c: Ditto.
-+
-+ * tools/dbus-monitor.c: Ditto.
-+
-+ * tools/dbus-send.1: Update with new arguments.
-+
-+ * tools/dbus-launch.c: Emit code to export variables. New
-+ arguments -s and -c to specify shell syntax, and a bit of code to
-+ autodetect syntax. Also, allow specifying a program to run.
-+
-+ * tools/dbus-launch.1: Update with new arguments.
-+
-+ * tools/dbus-send.1: Ditto.
-+
-+ * tools/dbus-monitor.1: Ditto.
-+
-+2003-05-17 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/config-parser.c (merge_included): merge in policies from
-+ child configuration file.
-+
-+ * bus/policy.c (bus_policy_merge): function to merge two policies
-+ together
-+
-+2003-05-16 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-connection.c: disable verbose lock spew
-+
-+ * tools/dbus-send.c: add --print-reply command line option
-+
-+ * tools/dbus-print-message.h (print_message): new util function
-+ shared by dbus-send and dbus-monitor
-+
-+ * tools/dbus-monitor.c (handler_func): exit on disconnect
-+
-+ * dbus/dbus-transport-unix.c (do_reading): if the transport is
-+ disconnected, don't try to use the read_watch
-+
-+ * dbus/dbus-watch.c (dbus_watch_get_enabled): assert watch != NULL
-+ so we can find this bug more easily
-+
-+2003-05-16 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/policy.c (free_rule_list_func): avoid a crash when passed
-+ NULL as DBusHashTable is annoyingly likely to do.
-+
-+2003-05-16 Colin Walters <walters at verbum.org>
-+
-+ * tools/dbus-monitor.c: Add --session argument and usage()
-+ function.
-+
-+ * tools/dbus-monitor.1: Update with new --session arg.
-+
-+ * bus/Makefile.am (install-data-hook): Create
-+ $(libdir)/dbus-1.0/services so that the session bus is happy.
-+
-+2003-05-15 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_atomic_dec, _dbus_atomic_inc): work
-+ on non-x86. ifdef's are evil.
-+
-+2003-05-15 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: 0.11
-+
-+ * NEWS: update
-+
-+ * bus/Makefile.am (initddir): apparently we are supposed to put
-+ init scripts in /etc/rc.d/init.d not /etc/init.d
-+
-+ * bus/Makefile.am: remove the "you must --enable-tests to make
-+ check" as it broke distcheck
-+
-+ * bus/Makefile.am (install-data-hook): create /etc/dbus-1/system.d
-+
-+2003-05-13 James Willcox <jwillcox at gnome.org>
-+
-+ * configure.in:
-+ * bus/activation.c: (bus_activation_service_created),
-+ (bus_activation_activate_service):
-+ * bus/driver.c: (bus_driver_send_service_deleted),
-+ (bus_driver_send_service_created), (bus_driver_send_service_lost),
-+ (bus_driver_send_service_acquired),
-+ (bus_driver_send_welcome_message),
-+ (bus_driver_handle_list_services):
-+ * bus/session.conf.in:
-+ * dbus/dbus-bus.c: (dbus_bus_acquire_service),
-+ (dbus_bus_service_exists), (dbus_bus_activate_service):
-+ * dbus/dbus-bus.h:
-+
-+ Add some convenience API which lets you activate a service, and did a
-+ bunch of s/0/DBUS_TYPE_INVALID/ in calls to dbus_message_append_args()
-+ and dbus_message_get_args()
-+
-+2003-05-11 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_validate_arg): fix to avoid
-+ calling _dbus_marshal_validate_arg() for every byte in a byte
-+ array, etc.
-+
-+ * dbus/dbus-message-handler.c: use atomic reference counting to
-+ reduce number of locks slightly; the global lock in here sucks
-+
-+ * dbus/dbus-connection.c
-+ (_dbus_connection_update_dispatch_status_and_unlock): variant of
-+ update_dispatch_status that can be called with lock held; then use
-+ in a couple places to reduce locking/unlocking
-+ (dbus_connection_send): hold the lock over the whole function
-+ instead of acquiring it twice.
-+
-+ * dbus/dbus-timeout.c (_dbus_timeout_new): handle OOM
-+
-+ * bus/connection.c (bus_connections_setup_connection): fix access
-+ to already-freed memory.
-+
-+ * dbus/dbus-connection.c: keep a little cache of linked list
-+ nodes, to avoid using the global linked list alloc lock in the
-+ normal send-message case. Instead we just use the connection lock
-+ that we already have to take.
-+
-+ * dbus/dbus-list.c (_dbus_list_find_last): new function
-+
-+ * dbus/dbus-sysdeps.c (_dbus_atomic_inc, _dbus_atomic_dec):
-+ change to use a struct for the atomic type; fix docs,
-+ they return value before increment, not after increment.
-+
-+ * dbus/dbus-string.c (_dbus_string_append_4_aligned)
-+ (_dbus_string_append_8_aligned): new functions to try to
-+ microoptimize this operation.
-+ (reallocate_for_length): break this out of set_length(), to
-+ improve profile info, and also so we can consider inlining the
-+ set_length() part.
-+
-+ * dbus/dbus-message.c (dbus_message_new_empty_header): init data
-+ strings with some preallocation, cuts down on our calls to realloc
-+ a fair bit. Though if we can get the "move entire string to empty
-+ string" optimization below to kick in here, it would be better.
-+
-+ * dbus/dbus-string.c (_dbus_string_move): just call
-+ _dbus_string_move_len
-+ (_dbus_string_move_len): add a special case for moving
-+ an entire string into an empty string; we can just
-+ swap the string data instead of doing any reallocs.
-+ (_dbus_string_init_preallocated): new function
-+
-+2003-05-11 Havoc Pennington <hp at pobox.com>
-+
-+ Write a "test-profile" that does echo client-server with threads;
-+ profile reveals lock contention, memcpy/realloc of buffers, and
-+ UTF-8 validation as hot spots. 20% of lock contention eliminated
-+ with dbus_atomic_inc/dec implementation on x86. Much remaining
-+ contention is global mempool locks for GList and DBusList.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_atomic_inc, _dbus_atomic_dec): add
-+ x86 implementation
-+
-+ * dbus/dbus-connection.c (struct DBusConnection): use
-+ dbus_atomic_t for the reference count
-+
-+ * dbus/dbus-message.c (struct DBusMessage): declare
-+ dbus_atomic_t values as volatile
-+
-+ * configure.in: code to detect ability to use atomic integer
-+ operations in assembly, from GLib patch
-+
-+ * dbus/dbus-internals.c (_dbus_verbose_real): call getpid every
-+ time, tired of it being wrong in threads and forked processes
-+
-+ * glib/test-profile.c: a little program to bounce messages back
-+ and forth between threads and eat CPU
-+
-+ * dbus/dbus-connection.c: add debug spew macros for debugging
-+ thread locks; include config.h at top; fix deadlock in
-+ dbus_connection_flush()
-+
-+2003-05-08 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-spawn.c: s/_exit/exit/ because it was keeping gcov
-+ data from getting written, and there wasn't a good reason to
-+ use _exit really.
-+
-+ * test/decode-gcov.c (mark_inside_dbus_build_tests): don't count
-+ dbus_verbose lines in test coverage
-+ (main): add list of functions sorted by # of untested blocks
-+ to the coverage report
-+
-+ * dbus/dbus-mempool.c: put some test-only code in DBUS_BUILD_TESTS
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_test): extend test coverage
-+
-+ * dbus/dbus-message-handler.c (_dbus_message_handler_test):
-+ extend test coverage
-+
-+ * test/data/auth/cancel.auth-script: test canceling an
-+ authentication
-+
-+ * dbus/Makefile.am: remove dbus-server-debug.[hc] for now, as they
-+ aren't used. in CVS history if we end up needing them.
-+
-+2003-05-04 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message-handler.c (_dbus_message_handler_test): add
-+ unit test
-+
-+ * dbus/dbus-marshal.c (_dbus_demarshal_string_array): fix this
-+ function, which assumed length was in # of strings, not bytes
-+
-+ * dbus/dbus-message.c (_dbus_message_test): add tests for some
-+ missing coverage
-+
-+ * dbus/dbus-connection.c
-+ (_dbus_connection_queue_received_message): disable function for
-+ now, we are only using it in test mode
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_queue_messages):
-+ remove a mistaken FIXME
-+
-+2003-05-04 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_preallocate_send):
-+ unlock mutex on successful return, patch from Anders Gustafsson
-+
-+2003-05-04 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus-glib-1.pc.in (Requires): fix dependencies, from
-+ Anders Gustafsson
-+
-+2003-05-04 Havoc Pennington <hp at pobox.com>
-+
-+ * tools/dbus-launch.c: implement
-+
-+ * bus/main.c (main), bus/bus.c (bus_context_new):
-+ implement --print-pid and --fork
-+
-+2003-05-03 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-address.c (dbus_parse_address): fix bug when a key in
-+ the address had no value, and add to test suite. Fix and
-+ regression test from Miloslav Trmac
-+
-+2003-05-03 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-watch.c (dbus_watch_handle): warn and return if a
-+ watch is invalid when handled
-+
-+ * tools/Makefile.am, tools/dbus-launch.c, tools/dbus-launch.1: add
-+ dbus-launch utility to launch the bus from a shell script. Didn't
-+ actually implement dbus-launch yet, it's just a placeholder still.
-+
-+2003-05-03 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/Makefile.am, bus/dbus-daemon-1.1.in: man page for the
-+ daemon; also documents daemon config file, so replaces
-+ doc/config-file.txt. Corrected some stuff from config-file.txt in
-+ the process of moving it.
-+
-+2003-05-03 Havoc Pennington <hp at pobox.com>
-+
-+ * tools/Makefile.am, tools/dbus-send.1, tools/dbus-monitor.1:
-+ add some man pages
-+
-+2003-05-03 Colin Walters <walters at verbum.org>
-+
-+ * dbus/dbus-sysdeps.c (fill_user_info): Test against
-+ DBUS_UID_UNSET to determine whether to do a uid lookup or not.
-+
-+ * Makefile.am: Update to use new .pc versioning scheme.
-+
-+2003-05-02 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/system.conf.in: allow send/receive to/from message bus
-+ service
-+
-+2003-04-30 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: print a note when building with unit tests and
-+ without assertions
-+
-+2003-04-30 Havoc Pennington <hp at redhat.com>
-+
-+ * Makefile.am: add a check-local that complains if you didn't
-+ configure with --enable-tests
-+
-+2003-04-29 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gmain.c: docs cleanups
-+
-+ * dbus/dbus-types.h: add docs on int64 types
-+
-+ * dbus/dbus-memory.c: fix docs to avoid putting private API in
-+ public API docs section
-+
-+2003-04-29 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus-1.pc.in, dbus-glib-1.pc.in: rename these from
-+ dbus-1.0.pc.in, dbus-glib-1.0.pc.in. As these change with the
-+ parallel install API version, not with the D-BUS package version.
-+
-+ * HACKING: move some of README over here
-+
-+ * README: updates, and document API/ABI policy
-+
-+ * configure.in: reindentation
-+
-+2003-04-29 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus.h: add "you have to define DBUS_API_SUBJECT_TO_CHANGE
-+ to use this library" to be sure people have the right
-+ expectations.
-+
-+2003-04-28 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: add --enable-docs which by default is auto yes if
-+ doxygen and db2html found, no otherwise; but can be forced on/off
-+
-+ * doc/Makefile.am: conditionalize whether to build docs on
-+ --enable-docs
-+
-+2003-04-28 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: 0.10
-+
-+ * NEWS: update
-+
-+ * bus/system.conf.in: add <includedir>system.d</includedir>
-+
-+ * dbus/dbus-userdb.c (_dbus_user_database_lookup): fix bug when
-+ username was provided but not uid
-+
-+ * bus/config-parser.c (struct BusConfigParser): keep track of
-+ whether the parser is toplevel or was included; change some
-+ of the error handling if it's included.
-+
-+2003-04-27 Havoc Pennington <hp at pobox.com>
-+
-+ Unbreak my code...
-+
-+ * dbus/dbus-transport.c (_dbus_transport_get_dispatch_status):
-+ report correct status if we finish processing authentication
-+ inside this function.
-+
-+ * bus/activation.c (try_send_activation_failure): use
-+ bus_transaction_send_error_reply
-+
-+ * bus/connection.c (bus_connection_get_groups): return an error
-+ explaining the problem
-+
-+ * bus/bus.c (bus_context_check_security_policy): implement
-+ restriction here that inactive connections can only send the
-+ hello message. Also, allow bus driver to send anything to
-+ any recipient.
-+
-+ * bus/connection.c (bus_connection_complete): create the
-+ BusClientPolicy here instead of on-demand.
-+ (bus_connection_get_policy): don't return an error
-+
-+ * dbus/dbus-message.c (dbus_message_new_error_reply): allow NULL
-+ sender field in message being replied to
-+
-+ * bus/bus.c (bus_context_check_security_policy): fix silly typo
-+ causing it to return FALSE always
-+
-+ * bus/policy.c (bus_client_policy_check_can_send): fix bug where
-+ we checked sender rather than destination
-+
-+2003-04-25 Havoc Pennington <hp at redhat.com>
-+
-+ test suite is slightly hosed at the moment, will fix soon
-+
-+ * bus/connection.c (bus_connections_expire_incomplete): fix to
-+ properly disable the timeout when required
-+ (bus_connection_set_name): check whether we can remove incomplete
-+ connections timeout after we complete each connection.
-+
-+ * dbus/dbus-mainloop.c (check_timeout): fix this up a bit,
-+ probably still broken.
-+
-+ * bus/services.c (bus_registry_acquire_service): implement max
-+ number of services owned, and honor allow/deny rules on which
-+ services a connection can own.
-+
-+ * bus/connection.c (bus_connection_get_policy): report errors here
-+
-+ * bus/activation.c: implement limit on number of pending
-+ activations
-+
-+2003-04-25 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-transport.c (_dbus_transport_get_unix_user): fix bug
-+ where we used >= 0 instead of != DBUS_UID_UNSET.
-+
-+2003-04-25 Havoc Pennington <hp at redhat.com>
-+
-+ * glib/dbus-gmain.c (remove_watch): fix for a crash when watches
-+ were toggled without add/remove, fix from Anders Gustafsson
-+
-+2003-04-24 Havoc Pennington <hp at redhat.com>
-+
-+ * test/data/valid-config-files/basic.conf: add <limit> tags to
-+ this test
-+
-+ * bus/config-parser.h, bus/config-parser.c, bus/bus.c: Implement
-+ <limit> tag in configuration file.
-+
-+2003-04-24 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/dispatch.c: somehow missed some name_is
-+
-+ * dbus/dbus-timeout.c (_dbus_timeout_set_enabled)
-+ (_dbus_timeout_set_interval): new
-+
-+ * bus/connection.c (bus_connections_setup_connection): record time
-+ when each connection is first set up, and expire them after the
-+ auth timeout passes.
-+
-+2003-04-24 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c (dbus_message_name_is): rename
-+ (dbus_message_service_is): rename
-+ (dbus_message_sender_is): rename
-+ (dbus_message_get_service): rename
-+
-+2003-04-24 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: add --enable-checks
-+
-+ * dbus/dbus-message.c (dbus_message_new): reverse name/service arguments
-+
-+ * dbus/dbus-connection.c (dbus_connection_preallocate_send): fix
-+ to use thread locks.
-+ (_dbus_connection_handler_destroyed_locked): move some private
-+ functions into proper docs group
-+
-+ * dbus/dbus-internals.h: add _dbus_return_if_fail,
-+ _dbus_return_val_if_fail
-+
-+ Throughout: use dbus_return_if_fail
-+
-+2003-04-23 James Willcox <jwillcox at gnome.org>
-+
-+ * glib/dbus-glib.h:
-+ * glib/dbus-gmain.c: (add_timeout), (wakeup_main), (create_source),
-+ (dbus_connection_setup_with_g_main),
-+ (dbus_server_setup_with_g_main):
-+ * glib/test-dbus-glib.c: (main):
-+ * glib/test-thread-client.c: (main):
-+ * glib/test-thread-server.c: (new_connection_callback), (main):
-+ * tools/dbus-monitor.c: (main):
-+
-+ Added a GMainContext argument to dbus_connection_setup_with_g_main()
-+ and dbus_server_setup_with_g_main().
-+
-+2003-04-20 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: document the restrictions on
-+ message and service names
-+
-+2003-04-22 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c, dbus/dbus-marshal.c: add 64-bit integer
-+ support, and do some code cleanups to share more code and
-+ speed up array marshal/demarshal.
-+
-+ * dbus-1.0.pc.in (Cflags): put libdir include file in cflags
-+
-+ * configure.in: generate dbus-arch-deps.h
-+
-+ * dbus/dbus-protocol.h (DBUS_TYPE_INT64, DBUS_TYPE_UINT64): add
-+ 64-bit typecodes
-+
-+2003-04-22 Havoc Pennington <hp at redhat.com>
-+
-+ * test/data/valid-messages/opposite-endian.message: fix test
-+ to use proper type for rply field
-+
-+ * test/data/invalid-messages: add tests for below validation
-+
-+ * dbus/dbus-message.c (decode_header_data): validate field types,
-+ and validate that named fields are valid names
-+ (decode_name_field): consider messages in the
-+ org.freedesktop.Local. namespace to be invalid.
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_name): new
-+
-+2003-04-19 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/driver.c (bus_driver_handle_hello): check limits and
-+ return an error if they are exceeded.
-+
-+ * bus/connection.c: maintain separate lists of active and inactive
-+ connections, and a count of each. Maintain count of completed
-+ connections per user. Implement code to check connection limits.
-+
-+ * dbus/dbus-list.c (_dbus_list_unlink): export
-+
-+ * bus/bus.c (bus_context_check_security_policy): enforce a maximum
-+ number of bytes in the message queue for a connection
-+
-+2003-04-18 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-auth.c (record_mechanisms): memleak fixes
-+
-+ * dbus/dbus-sysdeps.c (_dbus_string_save_to_file): fix some
-+ memleaks
-+
-+ * dbus/dbus-keyring.c (add_new_key): fix a memleak, and
-+ on realloc be sure to update the pointer in the keyring
-+
-+ * dbus/dbus-string.c (_dbus_string_zero): compensate for align
-+ offset to avoid writing to unallocated memory
-+
-+ * dbus/dbus-auth.c (process_rejected): return FALSE if we fail to
-+ try the next mechanism, so we properly handle OOM
-+
-+ * dbus/dbus-keyring.c (_dbus_keyring_new_homedir): fix double-free
-+ on OOM.
-+ (_dbus_keyring_new): fix OOM bug
-+ (_dbus_keyring_new_homedir): always set error; impose a maximum
-+ number of keys we'll load from the file, mostly to speed up the
-+ test suite and make its OOM checks more useful, but also for
-+ general sanity.
-+
-+ * dbus/dbus-auth.c (process_error_server): reject authentication
-+ if we get an error from the client
-+ (process_cancel): on cancel, send REJECTED, per the spec
-+ (process_error_client): send CANCEL if we get an error from the
-+ server.
-+
-+2003-04-18 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-mainloop.c (_dbus_loop_iterate): fix UMR in verbose
-+ debug spew
-+
-+ * dbus/dbus-auth.c (handle_client_data_cookie_sha1_mech): fix OOM
-+ handling problem
-+
-+ * dbus/dbus-keyring.c (_dbus_keyring_new_homedir): only whine
-+ about DBUS_TEST_HOMEDIR once
-+
-+ * bus/Makefile.am (TESTS_ENVIRONMENT): put DBUS_TEST_HOMEDIR in
-+ the environment
-+
-+ * bus/dispatch.c (bus_dispatch_sha1_test): actually load sha1
-+ config file so we test the right thing
-+
-+ Throughout: assorted docs improvements
-+
-+2003-04-18 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gmain.c: adapt to watch changes
-+
-+ * bus/bus.c, bus/activation.c, etc.: adjust to watch changes
-+
-+ * dbus/dbus-server.h: remove dbus_server_handle_watch
-+
-+ * dbus/dbus-connection.h: remove dbus_connection_handle_watch
-+
-+ * dbus/dbus-watch.c (dbus_watch_handle): change DBusWatch to work
-+ like DBusTimeout, so we don't need dbus_connection_handle_watch
-+ etc.
-+
-+2003-04-17 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-userdb.c, dbus/dbus-sysdeps.c: redo all the passwd
-+ database usage so it all goes via the DBusUserDatabase cache.
-+
-+2003-04-17 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-mainloop.c (_dbus_loop_iterate): fix logic so that if
-+ there was an OOM watch we skipped, we always return TRUE so we
-+ iterate again to have a look at it again. Fixes test suite hang.
-+ Code rearrangement also lets us lose some memset and only iterate
-+ over callbacks once.
-+
-+ * bus/driver.c (bus_driver_handle_message): sense of test for
-+ reply was backward
-+
-+2003-04-16 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: make spec say serials are unsigned
-+
-+ * dbus/dbus-message.h: change message serials to unsigned
-+
-+ * dbus/dbus-connection.c: adapt to message serials being unsigned
-+
-+2003-04-15 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/bus.c: create and keep around a shared DBusUserDatabase
-+ object.
-+
-+ * bus/connection.c (bus_connection_get_groups): don't cache
-+ groups for user in the connection object, since user database
-+ object now does that.
-+
-+2003-04-16 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c (_dbus_message_add_size_counter): keep a
-+ list of size counters
-+ (_dbus_message_loader_putback_message_link): put back a popped link
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_set_max_live_messages_size): rename
-+ max_received_size
-+ (dbus_connection_get_outgoing_size): get size of outgoing
-+ queue
-+ (_dbus_connection_set_connection_counter): remove this cruft
-+
-+2003-04-14 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-userdb.c: user database abstraction, mostly to get
-+ caching, but at some point we might want to be able to use a
-+ different database.
-+
-+ * bus/dispatch.c (bus_dispatch_sha1_test): add a test that uses
-+ SHA1 conf file to test the sha1 auth mechanism, since the regular
-+ test always uses EXTERNAL when available.
-+
-+ * configure.in,
-+ test/data/valid-config-files/debug-allow-all-sha1.conf.in:
-+ add conf file that requires use of sha1 auth
-+
-+2003-04-13 Havoc Pennington <hp at pobox.com>
-+
-+ * tools/dbus-send.c, tools/dbus-monitor.c: two utility programs
-+ from Philip Blundell to send messages and monitor them.
-+
-+2003-04-13 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-mainloop.c: fix some reentrancy issues by refcounting
-+ callbacks
-+
-+ * test/data/valid-config-files/debug-allow-all.conf.in: allow all
-+ users
-+
-+ * dbus/dbus-transport.c (_dbus_transport_get_dispatch_status):
-+ fix to only recover unused bytes if we're already authenticated
-+ (_dbus_transport_get_is_authenticated): fix to still mark us
-+ authenticated if there are unused bytes.
-+
-+ * bus/dispatch.c: implement security policy checking
-+
-+ * bus/connection.c (bus_transaction_send_from_driver): new
-+
-+ * bus/bus.c (bus_context_check_security_policy): new
-+
-+ * bus/dispatch.c (send_service_nonexistent_error): delete this,
-+ now we just set the DBusError and it gets converted to an error
-+ reply.
-+
-+ * bus/connection.c (allow_user_function): enable code using actual
-+ data from the config file
-+
-+ * bus/policy.c (list_allows_user): handle wildcard rules for
-+ user/group connection perms
-+
-+2003-04-13 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/config-parser.c: Load up the BusPolicy and BusPolicyRules
-+
-+ * dbus/dbus-sysdeps.c (_dbus_get_user_id): new function
-+
-+ * bus/policy.c (bus_policy_append_mandatory_rule)
-+ (bus_policy_append_default_rule, bus_policy_append_user_rule)
-+ (bus_policy_append_group_rule): new functions
-+
-+2003-04-12 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/config-parser.c (bus_config_parser_new): fix a memleak
-+
-+ * dbus/dbus-sysdeps.c: change DBusCredentials to use longs for
-+ the pid/gid/uid, just for paranoia.
-+
-+ * test/break-loader.c (randomly_do_n_things): find a byte
-+ containing a type code, and randomly change it to a different
-+ type code.
-+
-+2003-04-12 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/policy.h: change BusPolicy to be the thing from the config
-+ file, and rename old BusPolicy to BusClientPolicy
-+
-+ * bus/bus.c, bus/connection.c, bus/config-parser.c: change to
-+ match change in how policy works
-+
-+ * dbus/dbus-internals.h: mark assert_not_reached as
-+ __attribute((noreturn))__
-+
-+2003-04-11 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-specification.sgml: fix a spot with the wrong name for
-+ the broadcast service. Use boolean return for ServiceExists.
-+
-+2003-04-11 Havoc Pennington <hp at redhat.com>
-+
-+ * configure.in: add another directory to look for qt in.
-+
-+2003-04-11 Havoc Pennington <hp at redhat.com>
-+
-+ * AUTHORS: add Colin Walters
-+
-+2003-04-11 Havoc Pennington <hp at redhat.com>
-+
-+ * NEWS: update
-+
-+ * configure.in: 0.9
-+
-+2003-04-11 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/messagebus.in: remove pid file when stopping the
-+ message bus, since the bus won't have privileges to remove it
-+ itself.
-+
-+2003-04-11 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/bus.c (bus_context_new): move credentials change after
-+ creating pidfile
-+
-+2003-04-11 Havoc Pennington <hp at pobox.com>
-+
-+ * test/decode-gcov.c: add "below average functions" to the
-+ coverage report, and change how some of the code works.
-+
-+ * bus/test-main.c: bracket some stuff in DBUS_BUILD_TESTS so it's
-+ not in the coverage stats.
-+
-+ * test/test-service.c (main): use _dbus_verbose not fprintf in a
-+ couple places so running the test suite doesn't result in megaspam.
-+
-+2003-04-11 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/dispatch.c (check_existent_service_activation): accept a no
-+ memory error in a place we didn't before
-+
-+ * bus/test.c (bus_test_run_everything): remove hacky "do it twice
-+ in case the first one failed," since the test suite is less
-+ broken now.
-+
-+2003-04-10 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/dispatch.c (check_segfault_service_activation): add test
-+ for launching an executable that just crashes.
-+
-+ * test/test-segfault.c (main): try setting coredumpsize to 0 so we
-+ don't leave a million cores. We'll see how portable this is.
-+
-+2003-04-10 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-spawn.c (_dbus_spawn_async_with_babysitter): move all
-+ the possible parent failures before we fork, so that we don't
-+ fail to create a babysitter after creating the child.
-+
-+ * bus/activation.c (bus_activation_activate_service): kill child
-+ if we don't successfully complete the activation.
-+
-+2003-04-10 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_flush): don't spin on
-+ the connection if it's disconnected
-+
-+ * bus/activation.c (bus_activation_service_created): use new
-+ transaction features to roll back removal of pending activation if
-+ we don't successfully create the service after all. Don't remove
-+ pending activation if the function fails.
-+
-+ * dbus/dbus-list.c (_dbus_list_insert_before_link)
-+ (_dbus_list_insert_after_link): new code to facilitate
-+ services.c fixes
-+
-+ * dbus/dbus-hash.c (_dbus_hash_table_insert_string_preallocated):
-+ new functionality, so we can preallocate the ability to insert
-+ into a hash table.
-+
-+ * bus/connection.c (bus_transaction_add_cancel_hook): new function
-+ allowing us to put custom hooks in a transaction to be used for
-+ cancelling said transaction
-+
-+ * doc/dbus-specification.sgml: add some discussion of secondary
-+ service owners, and disallow zero-length service names
-+
-+ * bus/services.c (bus_registry_acquire_service): new function,
-+ splits out part of bus_driver_handle_acquire_service() and fixes
-+ a bug where we didn't remove the service doing the acquiring
-+ from the secondary queue if we failed to remove the current owner
-+ from the front of the queue.
-+
-+2003-04-10 Alexander Larsson <alexl at redhat.com>
-+
-+ * doc/dbus-specification.sgml:
-+ s/org.freedesktop.Broadcast/org.freedesktop.DBus.Broadcast/
-+
-+2003-04-10 Alexander Larsson <alexl at redhat.com>
-+
-+ * bus/.cvsignore:
-+ * glib/.cvsignore:
-+ * test/.cvsignore:
-+ Added files to cvsignore
-+
-+ * dbus/dbus-message.h:
-+ * dbus/dbus-message.c: (dbus_message_iter_get_named):
-+ Make get_named() take two out argument and return a boolean.
-+ (dbus_message_iter_get_args_valist):
-+ Update usage of get_named().
-+ (dbus_message_iter_append_byte):
-+ Fix typo
-+ (dbus_message_iter_append_named)
-+ Fix typo
-+ (message_iter_test), (check_message_handling_type), (_dbus_message_test):
-+ More tests.
-+
-+2003-04-10 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-marshal.[ch]:
-+ Add array_type_pos argument to _dbus_marshal_validate_arg.
-+ Let you pass a NULL end_pos to _dbus_marshal_validate_type.
-+
-+ * dbus/dbus-message.[ch]:
-+ Multi-dimensional arrays have full type specification in the
-+ outermost array. Iter code re-arranged to handle this.
-+ Added some more iter tests.
-+
-+ * doc/dbus-specification.sgml:
-+ Add me to authors.
-+ Remove old FIXME.
-+ Update new array encoding description.
-+ Correct DBUS_SERVICE_FLAGS_REPLACE_EXISTING description.
-+
-+ * test/data/invalid-messages/array-with-mixed-types.message:
-+ * test/data/valid-messages/array-of-array-of-uint32.message:
-+ Change to the new array format.
-+
-+ * test/data/invalid-messages/too-short-dict.message:
-+ Fix bug in test.
-+
-+ * test/data/valid-messages/recursive-types.message:
-+ Fix up and extend test.
-+
-+2003-04-10 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/dispatch.c: lots of fixes
-+
-+ * dbus/dbus-mainloop.c (_dbus_loop_dispatch): export
-+ (_dbus_loop_iterate): remove old "quit if no callbacks" code,
-+ that was crack, broke the test service.
-+
-+ * dbus/dbus-transport.c (_dbus_transport_open): fix error
-+ handling to avoid piling up errors if we get a failure on the
-+ first address.
-+
-+ * dbus/dbus-internals.c (_dbus_real_assert_not_reached): include
-+ pid in assertion failures.
-+
-+ * dbus/dbus-mainloop.c (_dbus_loop_iterate): use static arrays up
-+ to some fixed size of file descriptor array. Don't return TRUE
-+ anytime a timeout exists, that led to lots of busy loop silliness
-+ in the tests.
-+
-+2003-04-09 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-mainloop.c (check_timeout): fix timeouts, I thought
-+ I'd checked this in earlier but hadn't.
-+
-+2003-04-09 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/dispatch.c (bus_dispatch_test): get a bit further through
-+ the activation test (man this is getting old!)
-+
-+2003-04-09 Havoc Pennington <hp at redhat.com>
-+
-+ * test/test-utils.c: use dispatch status function to fix this up
-+
-+ * bus/connection.c (connection_watch_callback): don't dispatch
-+ from here
-+ (connection_timeout_callback): don't dispatch from here
-+ (bus_connections_setup_connection): set the dispatch status function
-+ (bus_connection_disconnected): unset it
-+
-+ * dbus/dbus-mainloop.c (_dbus_loop_queue_dispatch): new function
-+ used to add a connection to be dispatched
-+ (_dbus_loop_iterate): do the dispatching at the end of each
-+ iteration
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_set_dispatch_status_function): new function
-+ allowing us to fix up main loop usage
-+ (_dbus_connection_last_unref): free all the various function
-+ user data
-+ (dbus_connection_dispatch): call the DispatchStatusFunction
-+ whenever this function returns
-+ (dbus_connection_handle_watch): call DispatchStatusFunction
-+ (dbus_connection_send_with_reply_and_block): call DispatchStatusFunction
-+ (reply_handler_timeout): call DispatchStatusFunction
-+ (dbus_connection_flush): call DispatchStatusFunction
-+
-+2003-04-09 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-bus.c (dbus_bus_register): fix up error handling and
-+ a memory leak
-+
-+ * bus/dispatch.c (check_service_activated): fix bug in test
-+
-+ * dbus/dbus-mainloop.c (check_timeout): fix this up
-+
-+ * dbus/dbus-internals.c (_dbus_verbose_real): include PID in
-+ verbose output so we can sort out output from different processes,
-+ e.g. in the activation case.
-+
-+2003-04-08 Colin Walters <walters at gnu.org>
-+
-+ * bus/bus.c (struct BusContext) [pidfile]: New member, to store
-+ the pid file.
-+ (bus_context_new): Set it.
-+ (bus_context_unref): Use it to delete the pid file.
-+
-+2003-04-08 Havoc Pennington <hp at redhat.com>
-+
-+ * test/data/invalid-messages/array-with-mixed-types.message:
-+ regression test that fails for the moment
-+
-+ * dbus/dbus-test.c (dbus_internal_do_not_use_run_tests): reorder
-+ tests for convenience
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_validate_arg): don't allow
-+ array of nil, it broke things.
-+
-+ * test/data/invalid-messages/array-of-nil.message: regression test
-+
-+ * test/data/valid-messages/array-of-array-of-uint32.message:
-+ happened to write this so added it to suite
-+
-+2003-04-08 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/driver.c (bus_driver_handle_acquire_service): init
-+ retval/reply before checking name
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_validate_arg): add a
-+ recursion depth argument
-+
-+ * dbus/dbus-message.h (struct DBusMessageIter): put some padding
-+ in the public struct for future extension
-+
-+ * dbus/dbus-message-builder.c (_dbus_message_data_load): fix
-+ typo
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_validate_arg): fix a verbose
-+ message
-+
-+ * doc/dbus-specification.sgml: fix typo
-+
-+2003-04-08 Alexander Larsson <alexl at redhat.com>
-+
-+ Implemented recursive types, named types and new-style iters
-+
-+ * bus/driver.c:
-+ * glib/test-thread-client.c: (thread_func):
-+ * glib/test-thread-server.c: (handle_test_message):
-+ * test/test-service.c: (handle_echo):
-+ Update to new api
-+
-+ * dbus/Makefile.am:
-+ * dbus/dbus-dict.c:
-+ * dbus/dbus-dict.h:
-+ * dbus/dbus.h
-+ Remove DBusDict
-+
-+ * dbus/dbus-internals.c: (_dbus_type_to_string):
-+ Update for new types.
-+
-+ * dbus/dbus-marshal.[ch]:
-+ Implement recursive types and the new marshalling format.
-+ Remove hardcoded dict marshalling.
-+ Marshal named types.
-+
-+ * dbus/dbus-message-builder.c:
-+ Add BYTE_ARRAY.
-+ Remove references to old types
-+
-+ * dbus/dbus-message.[ch]:
-+ New non-refcounted iter API that supports recursive iters.
-+ Use iters for appending, including support for recursive
-+ iters.
-+ Add byte and named type support.
-+ Update everything to new marshalling formats.
-+ Add tests for new API.
-+
-+ * dbus/dbus-protocol.h:
-+ Remove old array types.
-+ Add types: BYTE, ARRAY, DICT, NAMED
-+
-+ * dbus/dbus-string.c:
-+ * dbus/dbus-sysdeps.c:
-+ Make parse_double locale safe.
-+
-+ * dbus/dbus-test-main.c:
-+ Call setlocale.
-+
-+ * dbus/dbus-test.c:
-+ Kill dict test
-+
-+ * doc/dbus-specification.sgml:
-+ Update spec
-+
-+ * test/data/incomplete-messages/missing-body.message:
-+ * test/data/invalid-messages/bad-boolean.message:
-+ * test/data/invalid-messages/bad-boolean-array.message:
-+ * test/data/invalid-messages/boolean-array-length-too-long.message-raw:
-+ * test/data/invalid-messages/boolean-has-no-value.message-raw:
-+ * test/data/invalid-messages/too-short-dict.message:
-+ * test/data/valid-messages/dict-simple.message:
-+ * test/data/valid-messages/dict.message:
-+ * test/data/valid-messages/emptiness.message:
-+ * test/data/valid-messages/lots-of-arguments.message:
-+ * test/data/valid-messages/no-padding.message:
-+ * test/data/valid-messages/recursive-types.message:
-+ Add missing NAME fields
-+ Fix up dicts & arrays
-+
-+ * test/data/invalid-messages/dict-with-nil-value.message:
-+ Removed, this is not invalid anymore.
-+
-+ * test/data/valid-messages/recursive-types.message:
-+ Add new test for deeply recursive types.
-+
-+2003-04-07 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/driver.c (bus_driver_handle_acquire_service): return an
-+ error if you try to acquire a service that starts with ':'
-+
-+2003-04-07 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/dbus-specification.sgml: require that base service names
-+ start with ':' and that the base service is created/deleted
-+ as first and last things a connection does on the bus
-+
-+ * bus/dispatch.c (check_existent_service_activation): lots more
-+ work on the activation test; it doesn't fully pass yet...
-+
-+ * test/test-service.c (main): fix so we don't memleak the
-+ connection to the message bus
-+ (filter_func): accept a message asking us to exit
-+
-+2003-04-06 Havoc Pennington <hp at pobox.com>
-+
-+ * qt/Makefile.am (dbusinclude_HEADERS): install dbus-qt.h,
-+ from Colin Walters
-+
-+ * configure.in: fixes to Qt detection from Colin Walters
-+
-+ * doc/Makefile.am: Only remove generated docbook dirs if they
-+ exist, from Colin Walters
-+
-+ * dbus/dbus-bus.c: change how we set well-known connections to
-+ NULL, so that it works if a single connection is stored in
-+ two well-known array slots.
-+
-+ * test/Makefile.am: remove a lot of stuff that isn't immediately
-+ useful, it's in CVS history if we want it.
-+
-+ * test/test-service.c: use dbus-mainloop instead of that
-+ watch.[hc] crack
-+
-+2003-04-06 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/Makefile.am: split lists of sources into stuff that goes in
-+ the library, util functions that go in the lib and are also used
-+ elsewhere, and util functions that are used in tests/daemon but
-+ don't go in the lib.
-+
-+ * dbus/dbus-mainloop.h, dbus/dbus-mainloop.c: move bus/loop.[hc]
-+ here so it can be used in test binaries also
-+
-+2003-04-06 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_become_daemon): write the pidfile
-+ here in the parent process, so we can return an error if it
-+ fails. Also, move some of the code into the child so the parent
-+ is less hosed if we fail midway through.
-+
-+ * bus/bus.c (bus_context_new): move pidfile detection further up
-+ in the function, before we start overwriting sockets and such.
-+
-+ * bus/messagebus.in: adjust this a bit, not sure if it will work.
-+
-+ * configure.in: add --with-system-pid-file and --with-system-socket
-+
-+2003-04-06 Colin Walters <walters at verbum.org>
-+
-+ * configure.in (DBUS_SYSTEM_PID_FILE): New variable.
-+
-+ * bus/system.conf.in: Declare a pidfile.
-+
-+ * bus/bus.c (bus_context_new): Test for an existing pid file, and
-+ create one (if appropriate).
-+
-+ * bus/config-parser.c (enum ElementType) [ELEMENT_PIDFILE]: New.
-+ (struct BusConfigParser) [pidfile]: New.
-+ (element_type_to_name, merge_included, start_busconfig_child)
-+ (bus_config_parser_end_element, bus_config_parser_content): Handle it.
-+ (bus_config_parser_unref): Free it.
-+ (bus_config_parser_get_pidfile): New function.
-+
-+ * bus/config-parser.h (_dbus_write_pid_file): Prototype.
-+
-+ * dbus/dbus-errors.h (DBUS_ERROR_PIDFILE_EXISTS): New error.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_write_pid_file): New function.
-+
-+ * dbus/dbus-sysdeps.h: Prototype it.
-+
-+2003-04-06 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/bus.c (bus_context_new): print the address in here, rather
-+ than in main(), because we need to do it before forking the daemon
-+
-+ * bus/dispatch.c (send_service_nonexistent_error): set the sender
-+ on the service nonexistent error
-+
-+ * bus/driver.c (bus_driver_handle_acquire_service): set the
-+ sender on the AcquireService reply
-+
-+ * test/data/valid-config-files/debug-allow-all.conf.in: Make test
-+ server also listen on a UNIX socket so services can connect to it.
-+
-+2003-04-06 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-threads.c: Redo how the fake debug mutexes are done
-+ so it detects deadlocks and also we actually init threads when
-+ debugging.
-+
-+2003-04-06 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-server-unix.c (_dbus_server_new_for_domain_socket):
-+ save the domain socket name, and unlink it when we disconnect the
-+ server. Means that at least when we exit normally, we won't leave
-+ a bunch of junk in /tmp
-+
-+ * dbus/dbus-transport-unix.c
-+ (_dbus_transport_new_for_domain_socket): code cleanup (nicer
-+ memory management). (I was making a real change here but then
-+ didn't)
-+
-+2003-04-06 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/bus.c (bus_context_new): fix wrong handling of
-+ server_data_slot_unref() in the error case.
-+
-+ * dbus/dbus-internals.h (_dbus_assert): change so it passes
-+ "(condition) != 0" to _dbus_real_assert so that
-+ "_dbus_assert (pointer)" doesn't cause a warning
-+
-+ * bus/main.c (main): accept --print-address option to print out
-+ the message bus address
-+
-+ * dbus/dbus-sysdeps.c (_dbus_generate_random_ascii): export this
-+
-+ * dbus/dbus-transport.c (_dbus_transport_open): special error for
-+ "tmpdir" option to unix: address on client side
-+
-+ * dbus/dbus-server.c (dbus_server_listen): handle "tmpdir" option
-+ to unix: address
-+
-+ * configure.in (TEST_SOCKET_DIR): locate a temporary directory
-+ we can use to create sockets in the test suite.
-+
-+ * bus/main.c (signal_handler): on SIGTERM, exit the daemon
-+ cleanly. To be used for testing.
-+
-+ * dbus/dbus-spawn.c (babysit): use _dbus_set_signal_handler()
-+
-+ * dbus/dbus-sysdeps.c (_dbus_set_signal_handler): new
-+
-+ * dbus/dbus-server-debug-pipe.c (_dbus_transport_debug_pipe_new):
-+ handle trying to call this when there's no servers active
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * NEWS: update
-+
-+ * configure.in: 0.8
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/bus.c (setup_server): fix this so dbus-daemon-1 doesn't
-+ crash on startup. Need to get "try starting the daemon"
-+ in the test suite I guess. ;-)
-+
-+ * dbus/dbus-server.h, dbus/dbus-server.c: remove the stuff that
-+ tracked the number of open connections; it's better done in
-+ application-specific code as you want it to span all servers etc.
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/Makefile.am (install-data-hook): add missing DESTDIR,
-+ patch from Colin Walters
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/config-file.txt (Elements): fix docs of <auth> to reflect
-+ reality; in fact multiple mechanisms are allowed.
-+
-+ * dbus/dbus-internals.c (_dbus_real_assert)
-+ (_dbus_real_assert_not_reached): move guts of _dbus_assert() and
-+ _dbus_assert_not_reached() into functions, so that they don't show
-+ up in basic block counts for test coverage, and don't use up as
-+ much disk space. Does mean slower execution speed though, so
-+ assumes --disable-asserts is the normal production case.
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * test/Makefile.am (dist-hook): also dist *.in files
-+
-+ * NEWS: update
-+
-+ * configure.in: 0.7
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-string.c: docs warning
-+
-+ * dbus/dbus-spawn.c: missing docs
-+
-+ * dbus/dbus-memory.c (struct ShutdownClosure): missing docs
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/loop.c (bus_loop_iterate): fix the timeout code, using
-+ magic from GLib
-+
-+ * dbus/dbus-spawn.c (_dbus_babysitter_unref): set sitter_pid
-+ to -1 once we've reaped the babysitter
-+ (_dbus_babysitter_handle_watch): do as much work as we can, not
-+ just one go of it
-+
-+ * bus/activation.c: add code using DBusBabysitter so that we
-+ handle it when a service fails to start up properly.
-+ (bus_activation_service_created): don't remove the activation
-+ entries as we go, just let them get removed when we free the pending
-+ activation. Unref reply messages after sending them.
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * test/decode-gcov.c (main): print per-directory stats in the report
-+
-+ * Makefile.am (coverage-report.txt): don't include test/* in gcov stats
-+
-+2003-04-05 Havoc Pennington <hp at pobox.com>
-+
-+ * Makefile.am (coverage-report.txt): add target "coverage-report.txt"
-+
-+ * test/decode-gcov.c: hack up a little program to suck data
-+ out of gcov files. Yes this is sort of silly.
-+
-+ * configure.in: define something in config.h and do an
-+ AM_CONDITIONAL when gcov is enabled
-+
-+2003-04-04 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-spawn.c, dbus/dbus-spawn.h: Change dbus_spawn to
-+ return a "babysitter" object that is used to monitor the status of
-+ the spawned process and reap it when required.
-+
-+ * test/test-segfault.c, test/test-exit.c,
-+ test/test-sleep-forever.c: binaries that do various lame things,
-+ used in the test suite.
-+
-+ * dbus/dbus-sysdeps.c: kill _dbus_errno_to_string()
-+
-+2003-04-03 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-spawn.c: Move dbus-spawn into a separate file
-+ in preparation for modifying it, dbus-sysdeps is getting
-+ a bit unmanageable.
-+
-+2003-04-03 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/loop.h, bus/loop.c: make the mainloop an object so we can
-+ have multiple ones
-+
-+ * bus/*.[hc]: adapt to mainloop change
-+
-+2003-04-03 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/activation.c (load_directory): fix up memleaks
-+ (bus_activation_entry_free): free the entry
-+
-+ * dbus/dbus-bus.c (dbus_bus_acquire_service): return an error if
-+ we get one from the message bus; fix memleaks.
-+
-+ * dbus/dbus-message.c (dbus_set_error_from_message): new function
-+
-+2003-04-03 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/config-parser.c (bus_config_parser_unref): free
-+ list of mechanisms, bug discovered by test suite enhancements
-+ (putting system.conf and session.conf into suite)
-+
-+ * test/Makefile.am, test/test-service.c: add placeholder for a
-+ test service that we'll activate as part of test suite. Doesn't
-+ do anything yet.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_setenv): support unsetenv by
-+ setting NULL value, and use system malloc not dbus_malloc()
-+ when we have unavoidable memleakage.
-+
-+ * dbus/dbus-bus.c (dbus_bus_get): fix bug where bus type of 0
-+ didn't work, and support DBUS_BUS_ACTIVATION.
-+
-+ * bus/activation.c (child_setup): pass our well-known bus type to
-+ the child
-+
-+ * bus/config-parser.c: support <type> to specify well-known type
-+
-+ * doc/dbus-specification.sgml: document the env variables to
-+ locate well-known buses and find service activator
-+
-+2003-04-02 Havoc Pennington <hp at redhat.com>
-+
-+ * test/Makefile.am (all-local): add a rule to copy tests to
-+ builddir, so we can have generated tests. Use this to remove the
-+ silly hack for testing system.conf and session.conf. Will use this
-+ shortly to generate .service files pointing to test binaries.
-+
-+2003-04-02 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-string.c (set_length): fix a bug - we allocated max of
-+ current alloc and needed new length, not max of the doubled
-+ allocation and needed new length. Also, when building tests,
-+ don't do the double-allocation stuff, just realloc every time.
-+
-+2003-04-02 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_file_get_contents): include filenames
-+ in error messages
-+ (_dbus_string_get_dirname): new
-+ (_dbus_sysdeps_test): new
-+ (_dbus_directory_open): include dirnames in error messages
-+
-+ * bus/config-parser.c: interpret <include> and <includedir> and
-+ <servicedir> relative to config file location if the given
-+ filename is not absolute.
-+
-+ * dbus/dbus-string.c (_dbus_string_find_byte_backward): new
-+
-+2003-04-02 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/connection.c (bus_transaction_send_error_reply): set sender
-+ service for the error, and unref the reply on success
-+
-+ * bus/activation.c: convert to use BusTransaction so OOM can be
-+ handled correctly
-+ (bus_activation_service_created): set sender of the message
-+
-+2003-04-01 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/config-parser.c, bus/bus.c: implement <servicedir> and
-+ <includedir> (at least mostly)
-+
-+ * dbus/dbus-sysdeps.c (_dbus_change_identity): set the group ID
-+ first, then the user ID
-+
-+2003-04-01 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-server.c (dbus_server_set_auth_mechanisms): new
-+ function
-+
-+ * dbus/dbus-auth.c (_dbus_auth_set_mechanisms): new
-+
-+ * dbus/dbus-internals.c (_dbus_dup_string_array): new function
-+
-+ * dbus/dbus-sysdeps.c (_dbus_listen_unix_socket): chmod the
-+ socket 0777, and unlink any existing socket.
-+
-+ * bus/bus.c (bus_context_new): change our UID/GID and fork if
-+ the configuration file so specifies; set up auth mechanism
-+ restrictions
-+
-+ * bus/config-parser.c (bus_config_parser_content): add support
-+ for <fork> option and fill in code for <auth>
-+
-+ * bus/system.conf.in: add <fork/> to default configuration,
-+ and limit auth mechanisms to EXTERNAL
-+
-+ * doc/config-file.txt (Elements): add <fork>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_become_daemon): new function
-+ (_dbus_change_identity): new function
-+
-+2003-03-31 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_connect_unix_socket)
-+ (_dbus_listen_unix_socket): fix off-by-one error in null
-+ termination spotted by Nalin
-+
-+2003-03-31 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-keyring.c (_dbus_keyring_new_homedir): allow setting
-+ DBUS_TEST_HOMEDIR when tests are enabled, so we can test without
-+ having a real home directory available.
-+
-+2003-03-31 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/Makefile.am (install-data-hook): create /var/run/dbus
-+
-+ * bus/messagebus.in: add init script for Red Hat /etc/init.d
-+
-+ * configure.in: add support for specifying a style of init script
-+ to install
-+
-+2003-03-31 Havoc Pennington <hp at redhat.com>
-+
-+ Fix some annoying DBusString API and fix all affected code.
-+
-+ * dbus/dbus-string.c (_dbus_string_init): get rid of annoying
-+ max_length argument
-+ (_dbus_string_get_data): change to return string instead of using
-+ an out param
-+ (_dbus_string_get_const_data): ditto
-+ (_dbus_string_get_data_len): ditto
-+ (_dbus_string_get_const_data_len): ditto
-+
-+2003-03-31 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/main.c (main): fix up the command line arguments to be nicer
-+
-+2003-03-31 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/Makefile.am (INCLUDES): use EXPANDED_LOCALSTATEDIR to
-+ define DBUS_SYSTEM_BUS_PATH as we want to compile in the same
-+ final location that lands in the config file
-+
-+ * bus/config-loader-expat.c (bus_config_load): fix type of
-+ XML_Parser variable
-+
-+ * doc/TODO: remove TODO item for dbus_bus_get()
-+
-+ * dbus/dbus-bus.c (bus_data_free): add missing lock/unlock
-+
-+2003-03-31 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-transport-unix.c (_dbus_transport_new_for_domain_socket)
-+ (_dbus_transport_new_for_tcp_socket): these didn't need the "server"
-+ argument since they are always client side
-+
-+ * dbus/dbus-server.c (dbus_server_get_address): new function
-+
-+ * bus/main.c (main): take the configuration file as an argument.
-+
-+ * test/data/valid-config-files/debug-allow-all.conf: new file to
-+ use with dispatch.c tests for example
-+
-+ * bus/test-main.c (main): require test data dir
-+
-+ * bus/bus.c (bus_context_new): change this to take a
-+ configuration file name as argument
-+
-+ * doc/config-file.txt (Elements): add <servicedir>
-+
-+ * bus/system.conf, bus/session.conf: new files
-+
-+ * dbus/dbus-bus.c (dbus_bus_get): look for system bus on
-+ well-known socket if none set
-+
-+ * configure.in: create system.conf and session.conf
-+
-+2003-03-30 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/config-parser.c: hacking
-+
-+ * dbus/dbus-memory.c: don't use DBusList for the list of stuff
-+ to shut down, since it could cause weirdness with the DBusList
-+ lock
-+
-+ * dbus/dbus-list.c (_dbus_list_test): add tests for the
-+ link-oriented stack routines
-+ (alloc_link): free the mempool if the first alloc from it fails
-+
-+ * dbus/dbus-mempool.c (struct DBusMemBlock): fix alignment issue
-+
-+ * dbus/dbus-string.c (UNICODE_VALID): sync new version of this
-+ from GLib
-+ (_dbus_string_skip_white): new
-+
-+ * doc/config-file.txt (Elements): add <includedir>
-+
-+2003-03-28 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_copy_data_len)
-+ (_dbus_string_copy_data): new functions
-+
-+2003-03-28 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-bus.c: (bus_data_free), (dbus_bus_get):
-+ * dbus/dbus-bus.h:
-+ Add dbus_bus_get.
-+
-+ * dbus/dbus-memory.c:
-+ Fix a doc comment.
-+
-+2003-03-28 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/test.c (bus_test_flush_bus): remove the sleep from here,
-+ I think it may have just been superstition. Not sure.
-+
-+ * dbus/dbus-string.c (_dbus_string_base64_decode): catch some OOM
-+ failures that were not being handled.
-+
-+ * dbus/dbus-auth.c (process_auth): fix a memleak in OOM handling
-+
-+ * dbus/dbus-memory.c: add ability to set number of mallocs in a
-+ row that will fail on out-of-memory.
-+
-+ * dbus/dbus-internals.c (_dbus_test_oom_handling): convenience
-+ function for testing out-of-memory handling.
-+
-+ * bus/config-loader-expat.c (memsuite): don't wrap the dbus
-+ allocation functions, they do map exactly to the expat ones.
-+
-+2003-03-27 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/config-loader-libxml.c (bus_config_load): add another error
-+ check
-+
-+2003-03-26 Anders Carlsson <andersca at codefactory.se>
-+
-+ * doc/TODO:
-+ Add note about automatic service activation.
-+
-+ * doc/dbus-specification.sgml:
-+ Rename the specification and clarify a few things.
-+
-+2003-03-26 Anders Carlsson <andersca at codefactory.se>
-+
-+ * Doxyfile.in:
-+ * dbus/dbus-address.c:
-+ * dbus/dbus-dict.c:
-+ * dbus/dbus-marshal.c:
-+ * dbus/dbus-server-debug-pipe.c:
-+ * dbus/dbus-transport-unix.c:
-+ Fix documentation warnings.
-+
-+2003-03-26 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/test-main.c, dbus/dbus-test.c (main): check memleaks
-+ after every test so it's quick and easy to see which leaked, and
-+ so we test multiple dbus_shutdown() calls
-+
-+ * configure.in: change configure.in XML stuff to also support
-+ expat
-+
-+ * config-loader-libxml.c: some hacking
-+
-+ * config-loader-expat.c: some hacking
-+
-+ * config-parser.c: some hacking, plus tests
-+
-+2003-03-25 Havoc Pennington <hp at redhat.com>
-+
-+ * throughout - add more _DBUS_ASSERT_ERROR_IS_CLEAR
-+
-+ * configure.in: add --with-xml option to specify XML library,
-+ right now only libxml is supported.
-+
-+ * bus/config-loader-libxml.c, config-parser.c: sync some minor
-+ nonworking code between home and work, still just stubs
-+
-+2003-03-24 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_set_fd_nonblocking): move to this
-+ file
-+
-+ * dbus/dbus-errors.c (dbus_set_error, dbus_set_error_const): allow
-+ NULL argument for "message" if the error is a well-known one,
-+ fill in a generic message in this case.
-+
-+ * dbus/dbus-errors.h (DBusResultCode): Kill DBusResultCode in
-+ favor of DBusError
-+
-+ * bus/test.c (bus_test_flush_bus): add
-+
-+ * bus/policy.c (bus_policy_test): test code stub
-+
-+2003-03-24 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/connection.c (bus_connections_setup_connection): set up
-+ the "can this user connect" function, but it always returns
-+ TRUE until we have a config file parser so we can have a config
-+ file that allows connections.
-+
-+2003-03-23 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-threads.c (dbus_mutex_new, dbus_condvar_new): with
-+ DBUS_BUILD_TESTS, actually alloc/free a block of memory for
-+ the mutex, so we can check for proper memory management
-+ and OOM handling.
-+
-+ * dbus/dbus-dataslot.c: remove the mutex from
-+ DBusDataSlotAllocator and lock it manually when using it,
-+ to simplify fitting it into the global slots framework.
-+
-+ * dbus/dbus-threads.c (init_static_locks): rework how we're
-+ handling global locks so they are easily shut down.
-+
-+ * bus/policy.c (bus_policy_append_rule): fix
-+
-+ * bus/test-main.c (main): check for memleaks
-+
-+ * dbus/dbus-test.c (dbus_internal_do_not_use_run_tests): make
-+ test suite check for memleaks
-+
-+ * dbus/dbus-memory.c: add support in test mode for tracking
-+ number of outstanding blocks
-+
-+2003-03-23 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/policy.c, bus/bus.c, bus/connection.c: implement allow/deny
-+ policies code
-+
-+ * dbus/dbus-hash.h: add ULONG hash keys
-+
-+ * dbus/dbus-sysdeps.c (_dbus_get_groups): new
-+ (_dbus_get_group_id): new function
-+
-+2003-03-20 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_set_unix_user_function):
-+ new function
-+ (dbus_connection_get_unix_user): new function
-+
-+2003-03-20 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/connection.c (bus_connection_send_oom_error): assert that
-+ message has a sender
-+ (connection_execute_transaction): ditto
-+ (bus_connection_preallocate_oom_error): fix to set the sender, and
-+ set recipient to the destination service, not the bus driver
-+
-+ * bus/policy.c: hacking
-+
-+ * dbus/dbus-message.c (dbus_message_service_is): new function
-+ (dbus_message_sender_is): new
-+
-+2003-03-19 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/policy.c: start sketching code for policy restrictions on
-+ what connections can do.
-+
-+2003-03-18 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/TODO: some notes on high-level todo items. Little nitpick
-+ stuff is all in @todo, so no need to add it here.
-+
-+ * doc/config-file.txt: some notes on how config file might look
-+
-+2003-03-18 Anders Carlsson <andersca at codefactory.se>
-+
-+ * configure.in: 0.6
-+
-+ * NEWS: Update.
-+
-+2003-03-17 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-internals.h: add gcc attributes so that
-+ our printf-style functions warn on bad arguments to
-+ format
-+
-+ * dbus/dbus-sysdeps.c (_dbus_connect_tcp_socket): fix printf
-+ format bug
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_queue_messages): fix
-+ printf format bug
-+
-+2003-03-17 Havoc Pennington <hp at redhat.com>
-+
-+ * bus/test-main.c (main): make it print something as it runs
-+ so make check doesn't look stuck
-+
-+ * doc/negotiation.txt, doc/dbus-sasl-profile.txt: remove
-+ from CVS, now obsolete
-+
-+2003-03-17 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/dispatch.c: (bus_dispatch):
-+ Refetch the service name since it may have been reallocated
-+ when dbus_message_set_sender was called.
-+
-+ * dbus/dbus-sysdeps.c: (_dbus_accept):
-+ Add address and address length variables and use them to stop
-+ valgrind from complaining.
-+
-+2003-03-17 Havoc Pennington <hp at pobox.com>
-+
-+ All tests pass, no memleaks, no valgrind complaints.
-+
-+ * bus/test.c: refcount handler_slot
-+
-+ * bus/connection.c (bus_connections_new): refcount
-+ connection_data_slot
-+
-+ * dbus/dbus-auth-script.c (_dbus_auth_script_run): delete unused
-+ bytes so that auth scripts pass.
-+
-+ * bus/dispatch.c: init message_handler_slot so it gets allocated
-+ properly
-+
-+ * bus/dispatch.c (message_handler_slot_ref): fix memleak
-+
-+ * dbus/dbus-server-debug-pipe.c (_dbus_server_debug_pipe_new):
-+ dealloc server_pipe_hash when no longer used for benefit of
-+ leak checking
-+
-+ * dbus/dbus-auth.c (process_command): memleak fix
-+
-+ * bus/dispatch.c (check_hello_message): memleak fix
-+
-+2003-03-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-bus.c (ensure_bus_data): fix double-unref of the data slot
-+
-+2003-03-17 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/activation.c (bus_activation_activate_service): Append
-+ the pending activation entry to the list of pending activations.
-+
-+2003-03-16 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/dispatch.c (bus_dispatch_test): remove double-unrefs of
-+ connections
-+
-+ * dbus/dbus-address.c (create_entry): fix OOM handling when
-+ failing to alloc entry->method
-+
-+2003-03-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-watch.c (_dbus_watch_new): handle failure to malloc
-+ the watch
-+
-+ * dbus/dbus-server-debug-pipe.c (_dbus_transport_debug_pipe_new):
-+ add some missing dbus_set_result
-+
-+ * bus/dispatch.c (bus_dispatch_add_connection): handle failure to
-+ alloc the DBusMessageHandler
-+
-+ * dbus/dbus-transport.c (_dbus_transport_disconnect): don't ref
-+ the transport here, since we call this from the finalizer; it
-+ resulted in a double-finalize.
-+
-+ * dbus/dbus-transport.c (_dbus_transport_disconnect): fix a bug
-+ where we tried to use transport->connection that was NULL,
-+ happened when transport was disconnected early on due to OOM
-+
-+ * bus/*.c: adapt to handle OOM for watches/timeouts
-+
-+ * dbus/dbus-transport-unix.c: port to handle OOM during
-+ watch handling
-+
-+ * dbus/dbus-auth.c (_dbus_auth_get_unused_bytes): return a
-+ reference to unused bytes instead of a copy
-+
-+ * dbus/dbus-server.c (dbus_server_handle_watch): return FALSE for
-+ out of memory
-+
-+ * dbus/dbus-connection.c (dbus_connection_handle_watch): return
-+ FALSE on OOM
-+
-+ * dbus/dbus-timeout.c (dbus_timeout_handle): return FALSE for out
-+ of memory
-+
-+2003-03-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * doc/dbus-specification.sgml:
-+ Document reply message for ActivateService.
-+
-+2003-03-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/activation.c: (bus_pending_activation_entry_free),
-+ (bus_pending_activation_free), (bus_activation_new),
-+ (bus_activation_unref), (bus_activation_service_created),
-+ (bus_activation_activate_service):
-+ * bus/activation.h:
-+ * bus/bus.c: (bus_context_new):
-+ * bus/desktop-file.c: (new_section):
-+ * bus/driver.c: (bus_driver_send_service_deleted),
-+ (bus_driver_handle_activate_service):
-+ * bus/services.c: (bus_registry_new), (bus_registry_ensure):
-+ * bus/services.h:
-+ * dbus/dbus-connection.c:
-+ (dbus_connection_send_with_reply_and_block):
-+ * dbus/dbus-message.c: (dbus_message_append_args_valist):
-+ * dbus/dbus-protocol.h:
-+ Make activation work better. Now pending activations will be queued
-+ and the daemon won't try to activate services that are already registered.
-+
-+2003-03-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-bus.c (ensure_bus_data): handle failure to set
-+ connection data
-+
-+ * dbus/dbus-memory.c (_dbus_initialize_malloc_debug): support
-+ DBUS_MALLOC_BACKTRACES to print trace when failing an alloc
-+
-+2003-03-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_utf8): oops, unbreak
-+ this. always run the test suite before commit...
-+
-+ * bus/*: adapt to DBusConnection API changes
-+
-+ * glib/dbus-gmain.c: adapt to DBusConnection API changes,
-+ requires renaming stuff to avoid dbus_connection_dispatch name
-+ conflict.
-+
-+ * dbus/dbus-transport.c (_dbus_transport_queue_messages): new
-+ function
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_queue_messages):
-+ separate from _dbus_message_loader_return_buffer()
-+
-+ * dbus/dbus-connection.c (dbus_connection_get_n_messages): remove
-+ this, because it's now always broken to use; the number of
-+ messages in queue vs. the number still buffered by the message
-+ loader is undefined/meaningless. Should use
-+ dbus_connection_get_dispatch_state().
-+ (dbus_connection_dispatch): rename from
-+ dbus_connection_dispatch_message
-+
-+2003-03-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_utf8): copy in a real
-+ implementation
-+
-+2003-03-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-connection.c:
-+ (dbus_connection_send_with_reply_and_block):
-+ Decrease connection->n_incoming when removing an entry
-+ from the list.
-+ * dbus/dbus-dict.c: (dbus_dict_entry_free),
-+ (dbus_dict_set_boolean_array), (dbus_dict_set_int32_array),
-+ (dbus_dict_set_uint32_array), (dbus_dict_set_double_array),
-+ (dbus_dict_set_byte_array), (dbus_dict_set_string_array),
-+ (dbus_dict_get_boolean_array), (dbus_dict_get_double_array),
-+ (dbus_dict_get_byte_array):
-+ Handle NULL arrays and strings. Also add support for byte arrays.
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_byte_array),
-+ (_dbus_marshal_dict), (_dbus_demarshal_byte_array),
-+ (_dbus_demarshal_int32_array), (_dbus_demarshal_uint32_array),
-+ (_dbus_demarshal_double_array), (_dbus_demarshal_string_array),
-+ (_dbus_demarshal_dict), (demarshal_and_validate_len),
-+ (_dbus_marshal_validate_arg), (_dbus_marshal_test):
-+ * dbus/dbus-marshal.h:
-+ Add support for marshalling and demarshalling empty arrays and strings.
-+
-+ * dbus/dbus-message.c: (dbus_message_append_args_valist),
-+ (dbus_message_append_string_array),
-+ (dbus_message_iter_get_boolean),
-+ (dbus_message_iter_get_boolean_array),
-+ (dbus_message_iter_get_int32_array),
-+ (dbus_message_iter_get_uint32_array),
-+ (dbus_message_iter_get_double_array),
-+ (dbus_message_iter_get_byte_array),
-+ (dbus_message_iter_get_string_array), (dbus_message_iter_get_dict),
-+ (check_message_handling):
-+ Add support for getting empty arrays and dicts.
-+
-+ * dbus/dbus-string.c: (_dbus_string_validate_utf8):
-+ Don't do any validation at all for now, that's better than just checking
-+ for ASCII.
-+
-+ * test/data/valid-messages/emptiness.message:
-+ New test message with lots of empty arrays.
-+
-+2003-03-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c
-+ (_dbus_connection_queue_received_message_link): new function that
-+ can't fail due to OOM
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_pop_message_link):
-+ new function pops a message together with a list link
-+ containing it.
-+
-+ * dbus/dbus-transport-unix.c (queue_messages): use new link-based
-+ message queuing functions to avoid needing to alloc memory
-+
-+2003-03-16 Havoc Pennington <hp at pobox.com>
-+
-+ Oops - test code was only testing failure of around 30 of the
-+ mallocs in the test path, but it turns out there are 500+
-+ mallocs. I believe this was due to misguided linking setup such
-+ that there was one copy of dbus_malloc etc. in the daemon and one
-+ in the shared lib, and only daemon mallocs were tested. In any
-+ case, the test case now tests all 500+ mallocs, and doesn't pass
-+ yet, though there are lots of fixes in this patch.
-+
-+ * dbus/dbus-connection.c (dbus_connection_dispatch_message): fix
-+ this so that it doesn't need to allocate memory, since it
-+ has no way of indicating failure due to OOM (and would be
-+ annoying if it did).
-+
-+ * dbus/dbus-list.c (_dbus_list_pop_first_link): new function
-+
-+ * bus/Makefile.am: rearrange to create two self-contained
-+ libraries, to avoid having libraries with overlapping symbols.
-+ that was resulting in weirdness, e.g. I'm pretty sure there
-+ were two copies of global static variables.
-+
-+ * dbus/dbus-internals.c: move the malloc debug stuff to
-+ dbus-memory.c
-+
-+ * dbus/dbus-list.c (free_link): free list mempool if it becomes
-+ empty.
-+
-+ * dbus/dbus-memory.c (_dbus_disable_mem_pools): new function
-+
-+ * dbus/dbus-address.c (dbus_parse_address): free list nodes
-+ on failure.
-+
-+ * bus/dispatch.c (bus_dispatch_add_connection): free
-+ message_handler_slot when no longer using it, so
-+ memory leak checkers are happy for the test suite.
-+
-+ * dbus/dbus-server-debug-pipe.c (debug_finalize): free server name
-+
-+ * bus/bus.c (new_connection_callback): disconnect in here if
-+ bus_connections_setup_connection fails.
-+
-+ * bus/connection.c (bus_connections_unref): fix to free the
-+ connections
-+ (bus_connections_setup_connection): if this fails, don't
-+ disconnect the connection, just be sure there are no side
-+ effects.
-+
-+ * dbus/dbus-string.c (undo_alignment): unbreak this
-+
-+ * dbus/dbus-auth.c (_dbus_auth_unref): free some stuff we were
-+ leaking
-+ (_dbus_auth_new): fix the order in which we free strings
-+ on OOM failure
-+
-+ * bus/connection.c (bus_connection_disconnected): fix to
-+ not send ServiceDeleted multiple times in case of memory
-+ allocation failure
-+
-+ * dbus/dbus-bus.c (dbus_bus_get_base_service): new function to
-+ get the base service name
-+ (dbus_bus_register_client): don't return base service name,
-+ instead store it on the DBusConnection and have an accessor
-+ function for it.
-+ (dbus_bus_register_client): rename dbus_bus_register()
-+
-+ * bus/dispatch.c (check_hello_message): verify that other
-+ connections on the bus also got the correct results, not
-+ just the one sending hello
-+
-+2003-03-15 Havoc Pennington <hp at pobox.com>
-+
-+ Make it pass the Hello handling test including all OOM codepaths.
-+ Now to do other messages...
-+
-+ * bus/services.c (bus_service_remove_owner): fix crash when
-+ removing owner from an empty list of owners
-+ (bus_registry_ensure): don't leave service in the list of
-+ a connection's owned services if we fail to put the service
-+ in the hash table.
-+
-+ * bus/connection.c (bus_connection_preallocate_oom_error): set
-+ error flag on the OOM error.
-+
-+ * dbus/dbus-connection.c (_dbus_connection_new_for_transport):
-+ handle _dbus_transport_set_connection failure
-+
-+ * dbus/dbus-transport-unix.c (_dbus_transport_new_for_fd): modify
-+ to create watches up front and simply enable/disable them as
-+ needed.
-+ (unix_connection_set): this can now fail on OOM
-+
-+ * dbus/dbus-timeout.c, dbus/dbus-watch.c: add concept
-+ of enabling/disabling a watch or timeout.
-+
-+ * bus/loop.c (bus_loop_iterate): don't touch disabled
-+ watches/timeouts
-+
-+ * glib/dbus-gmain.c: adapt to enable/disable watches and timeouts
-+
-+2003-03-15 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/dispatch.c (bus_dispatch_test): OK, now finally actually
-+ write useful test code, after all that futzing around ;-)
-+
-+ Test does not yet pass because we can't handle OOM in
-+ _dbus_transport_messages_pending (basically,
-+ dbus_connection_preallocate_send() does not prealloc the write
-+ watch). To fix this, I think we need to add new stuff to
-+ set_watch_functions, namely a SetEnabled function so we can alloc
-+ the watch earlier, then enable it later.
-+
-+ * dbus/Makefile.am (libdbus_convenience_la_SOURCES): move
-+ dbus-memory.c to the convenience lib
-+
-+ * bus/test.c: rename some static functions to keep them clearly
-+ distinct from stuff in connection.c. Handle client disconnection.
-+
-+2003-03-14 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/dispatch.c (bus_dispatch_test): do test using debug-pipe
-+ transport, tests more of the real codepath. Set up clients
-+ with bus_setup_debug_client.
-+
-+ * bus/test.c (bus_setup_debug_client): function to set up debug
-+ "clients" on the main loop
-+
-+ * dbus/dbus-transport.c (_dbus_transport_open): add debug-pipe
-+ support
-+
-+ * dbus/dbus-server.c (dbus_server_listen): add debug-pipe
-+ server type
-+
-+ * dbus/dbus-server-debug.c: support a debug server based on pipes
-+
-+ * dbus/dbus-sysdeps.c (_dbus_full_duplex_pipe): new function
-+ (_dbus_close): new function
-+
-+ * configure.in: check for socketpair
-+
-+2003-03-14 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-memory.c: add a "detect buffer overwrites on free"
-+ cheesy hack
-+
-+ * dbus/dbus-transport-debug.c: rework this a good bit to be
-+ less complicated. hopefully still works.
-+
-+ * dbus/dbus-server-debug.c (handle_new_client): remove timeout
-+ manually
-+
-+ * glib/dbus-gmain.c (timeout_handler): don't remove timeout
-+ after running it
-+
-+ * dbus/dbus-message.c (dbus_message_copy): rename from
-+ dbus_message_new_from_message, fix it up to copy
-+ all the message fields, add test case
-+
-+ * bus/dispatch.c (bus_dispatch_test): add some more test code,
-+ not quite passing yet
-+
-+2003-03-14 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/loop.c (bus_loop_iterate): add this so we can "run loop
-+ until no work remains" in test code. (the large diff here
-+ is just code movement, no actual changes)
-+
-+ * dbus/dbus-server-debug.c (DEFAULT_INTERVAL): change interval to
-+ 1, no point waiting around for test code.
-+ (_dbus_server_debug_accept_transport): unref the timeout
-+ after adding it (right?)
-+
-+ * dbus/dbus-transport-debug.c (DEFAULT_INTERVAL): ditto
-+
-+2003-03-13 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-timeout.c (_dbus_timeout_list_set_functions): handle
-+ out of memory
-+
-+ * dbus/dbus-watch.c (_dbus_watch_list_set_functions): handle out
-+ of memory
-+
-+ * dbus/dbus-connection.h: Make AddWatchFunction and
-+ AddTimeoutFunction return a bool so they can fail on out-of-memory
-+
-+ * bus/bus.c (bus_context_new): set up timeout handlers
-+
-+ * bus/connection.c (bus_connections_setup_connection): set up
-+ timeout handlers
-+
-+ * glib/dbus-gmain.c: adapt to the fact that set_functions stuff
-+ can fail
-+
-+ * bus/bus.c (bus_context_new): adapt to changes
-+
-+ * bus/connection.c: adapt to changes
-+
-+ * test/watch.c: adapt to DBusWatch changes
-+
-+ * bus/dispatch.c (bus_dispatch_test): started adding this but
-+ didn't finish
-+
-+2003-03-14 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/dispatch.c (send_service_nonexistent_error): Fix typo.
-+
-+2003-03-13 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/test.c, bus/test.h, bus/Makefile.am, bus/test-main.c:
-+ set up a test framework as for the library
-+
-+2003-03-12 Havoc Pennington <hp at pobox.com>
-+
-+ Throughout: purge global variables, introduce BusActivation,
-+ BusConnections, BusRegistry, etc. objects instead.
-+
-+ * bus/bus.h, bus/bus.c: introduce BusContext as a global
-+ message bus object
-+
-+ * test/Makefile.am (TEST_BINARIES): disable bus-test for now,
-+ going to redo this a bit differently I think
-+
-+2003-03-12 Havoc Pennington <hp at redhat.com>
-+
-+ Mega-patch that gets the message bus daemon initially handling
-+ out-of-memory. Work still needed. Also lots of random
-+ moving stuff to DBusError instead of ResultCode.
-+
-+ * dbus/dbus-list.c (_dbus_list_length_is_one): new function
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_send_with_reply_and_block): use DBusError
-+
-+ * dbus/dbus-bus.c: adapt to API changes, make it use DBusError not
-+ DBusResultCode
-+
-+ * dbus/dbus-connection.c (dbus_connection_send): drop the result
-+ code here, as the only failure possible is OOM.
-+
-+ * bus/connection.c (bus_connection_disconnect):
-+ rename bus_connection_disconnected as it's a notification only
-+
-+ * bus/driver.c (bus_driver_handle_acquire_service): don't free
-+ "name" on get_args failure, should be done by get_args;
-+ don't disconnect client for bad args, just return an error.
-+ (bus_driver_handle_service_exists): ditto
-+
-+ * bus/services.c (bus_services_list): NULL-terminate returned array
-+
-+ * bus/driver.c (bus_driver_send_service_lost)
-+ (bus_driver_send_service_acquired): send messages from driver to a
-+ specific client to the client's unique name, not to the broadcast
-+ service.
-+
-+ * dbus/dbus-message.c (decode_header_data): reject messages that
-+ contain no name field
-+ (_dbus_message_get_client_serial): rename to
-+ dbus_message_get_serial and make public
-+ (_dbus_message_set_serial): rename from set_client_serial
-+ (_dbus_message_set_reply_serial): make public
-+ (_dbus_message_get_reply_serial): make public
-+
-+ * bus/connection.c (bus_connection_foreach): allow stopping
-+ iteration by returning FALSE from foreach function.
-+
-+ * dbus/dbus-connection.c (dbus_connection_send_preallocated)
-+ (dbus_connection_free_preallocated_send)
-+ (dbus_connection_preallocate_send): new API for sending a message
-+ without possibility of malloc failure.
-+ (dbus_connection_send_message): rename to just
-+ dbus_connection_send (and same for whole function family)
-+
-+ * dbus/dbus-errors.c (dbus_error_free): make this reinit the error
-+
-+ * dbus/dbus-sysdeps.c (_dbus_exit): new function
-+
-+ * bus/activation.c: handle/return errors
-+
-+ * dbus/dbus-errors.h: add more DBUS_ERROR #define
-+
-+ * dbus/dbus-sysdeps.c (_dbus_directory_open) (_dbus_file_get_contents)
-+ (_dbus_directory_get_next_file): use DBusError instead of DBusResultCode
-+ (_dbus_result_from_errno): move to this file
-+
-+2003-03-10 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c:
-+ (_dbus_marshal_set_string):
-+ Take a length argument so we can marshal the correct string
-+ length.
-+
-+ (_dbus_marshal_dict), (_dbus_demarshal_dict),
-+ (_dbus_marshal_get_arg_end_pos), (_dbus_marshal_validate_arg),
-+ (_dbus_marshal_test):
-+ * dbus/dbus-marshal.h:
-+ Add support for marshalling and demarshalling dicts.
-+
-+ * dbus/dbus-message-builder.c: (_dbus_message_data_load):
-+ Add support for TYPE DICT.
-+
-+ * dbus/dbus-message.c: (set_string_field):
-+ Adjust header padding.
-+
-+ (dbus_message_append_args_valist), (dbus_message_append_dict),
-+ (dbus_message_get_args_valist), (dbus_message_iter_get_arg_type),
-+ (dbus_message_iter_get_dict), (_dbus_message_loader_return_buffer),
-+ (check_message_handling), (check_have_valid_message):
-+ * dbus/dbus-message.h:
-+ Add functions for setting and getting dicts.
-+
-+ * dbus/dbus-protocol.h:
-+ Add DBUS_TYPE_DICT.
-+
-+ * dbus/dbus.h:
-+ Add dbus-dict.h
-+
-+ * doc/dbus-specification.sgml:
-+ Add information about how dicts are marshalled.
-+
-+ * test/data/invalid-messages/dict-with-nil-value.message:
-+ * test/data/invalid-messages/too-short-dict.message:
-+ * test/data/valid-messages/dict-simple.message:
-+ * test/data/valid-messages/dict.message:
-+ Add sample messages containing dicts.
-+
-+2003-03-08 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-dict.h: Add DBUS_END_DECLS.
-+
-+2003-03-07 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/Makefile.am:
-+ * dbus/dbus-dict.c: (dbus_dict_entry_free), (dbus_dict_new),
-+ (dbus_dict_get_keys), (insert_entry), (dbus_dict_set_boolean),
-+ (dbus_dict_set_int32), (dbus_dict_set_uint32),
-+ (dbus_dict_set_double), (dbus_dict_set_string),
-+ (dbus_dict_set_boolean_array), (dbus_dict_set_int32_array),
-+ (dbus_dict_set_uint32_array), (dbus_dict_set_double_array),
-+ (dbus_dict_set_string_array), (_dbus_dict_test):
-+ * dbus/dbus-dict.h:
-+ Fix according to comments from Havoc.
-+
-+2003-03-06 Michael Meeks <michael at server.home>
-+
-+ * configure.in: if we don't have kde-config, disable have_qt.
-+
-+2003-03-07 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/Makefile.am:
-+ Add dbus-dict.[ch]
-+
-+ * dbus/dbus-dict.c: (dbus_dict_entry_free), (dbus_dict_new),
-+ (dbus_dict_ref), (dbus_dict_unref), (dbus_dict_contains),
-+ (dbus_dict_remove), (dbus_dict_get_value_type),
-+ (dbus_dict_get_keys), (dbus_dict_put_boolean),
-+ (dbus_dict_put_int32), (dbus_dict_put_uint32),
-+ (dbus_dict_put_double), (dbus_dict_put_string),
-+ (dbus_dict_put_boolean_array), (dbus_dict_put_int32_array),
-+ (dbus_dict_put_uint32_array), (dbus_dict_put_double_array),
-+ (dbus_dict_put_string_array), (dbus_dict_get_boolean),
-+ (dbus_dict_get_int32), (dbus_dict_get_uint32),
-+ (dbus_dict_get_double), (dbus_dict_get_string),
-+ (dbus_dict_get_boolean_array), (dbus_dict_get_int32_array),
-+ (dbus_dict_get_uint32_array), (dbus_dict_get_double_array),
-+ (dbus_dict_get_string_array), (_dbus_dict_test):
-+ * dbus/dbus-dict.h:
-+ Add DBusDict implementation
-+
-+ * dbus/dbus-test.c: (dbus_internal_do_not_use_run_tests):
-+ * dbus/dbus-test.h:
-+ Add _dbus_dict_test
-+
-+2003-03-04 Havoc Pennington <hp at pobox.com>
-+
-+ * test/data/auth/*: adapt to changes
-+
-+ * dbus/dbus-auth-script.c (_dbus_auth_script_run): add
-+ USERID_BASE64 and change USERNAME_BASE64 to put in username not
-+ userid
-+
-+ * dbus/dbus-keyring.c (_dbus_keyring_validate_context): prevent
-+ more stuff from being in a context name, to make the protocol
-+ simpler to deal with
-+
-+ * dbus/dbus-errors.c (dbus_error_has_name): new function
-+ (dbus_error_is_set): new function
-+
-+ * dbus/dbus-auth.c: replace DBUS_STUPID_TEST_MECH auth
-+ with DBUS_COOKIE_SHA1, implement DBUS_COOKIE_SHA1
-+
-+ * dbus/dbus-connection.c (dbus_connection_flush): also read
-+ messages during a flush operation
-+
-+ * dbus/Makefile.am: remove dbus-md5 since it isn't currently used.
-+
-+2003-03-05 Anders Carlsson <andersca at codefactory.se>
-+
-+ * configure.in: Check for gethostbyname on Solaris.
-+
-+ * dbus/dbus-transport.c: (_dbus_transport_open):
-+ Remove duplicate "tcp" entry.
-+
-+ * doc/dbus-specification.sgml:
-+ Clarify some things.
-+
-+2003-03-05 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-auth.c: (send_rejected), (process_test_subdir):
-+ * dbus/dbus-keyring.c: (_dbus_keyring_new_homedir),
-+ (_dbus_keyring_test):
-+ * dbus/dbus-md5.c: (_dbus_md5_compute):
-+ * dbus/dbus-sha.c: (_dbus_sha_compute):
-+ Plug memory leaks.
-+
-+2003-03-05 Anders Carlsson <andersca at codefactory.se>
-+
-+ * README: Add some things.
-+
-+2003-03-04 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-message.c (dbus_message_append_args_valist): Add a break;
-+ after case DBUS_TYPE_BOOELAN.
-+
-+2003-03-02 Havoc Pennington <hp at pobox.com>
-+
-+ * test/break-loader.c (randomly_set_extreme_ints): add test that
-+ sets really huge and small integers
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_validate_arg): add check
-+ that length of boolean array fits in the string, and that
-+ string has room for boolean value in single-bool case.
-+
-+ * dbus/dbus-message-builder.c (_dbus_message_data_load): add
-+ optional value to "ALIGN" command which is what to fill the
-+ alignment with.
-+
-+ * test/data/valid-messages/no-padding.message: add regression
-+ test for the message padding problem
-+
-+2003-03-02 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (decode_header_data): fix to always init
-+ message_padding, from Benjamin Dauvergne
-+
-+2003-03-02 Havoc Pennington <hp at pobox.com>
-+
-+ * configure.in: 0.5
-+
-+ * NEWS: Update.
-+
-+2003-03-01 Joe Shaw <joe at assbarn.com>
-+
-+ * configure.in: Check for "struct cmsgcred" and try to access its
-+ members for BSD-like unices.
-+
-+ * dbus/dbus-sysdeps.c (read_credentials_byte): Fold this back into
-+ _dbus_read_credentials_unix_socket().
-+ (_dbus_read_credentials_unix_socket): Use recvmsg() instead of
-+ read() for reading the credential byte off the unix socket. Use
-+ struct cmsgcred on systems that support it.
-+
-+2003-02-27 Alexander Larsson <alexl at redhat.com>
-+
-+ * glib/Makefile.am:
-+ * configure.in:
-+ Make gthreads-2.0 dependency optional. Don't build thread test if
-+ its not found.
-+
-+2003-02-27 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_send_message_with_reply_and_block): fix doh!
-+ doh! doh! bug that resulted in never removing a reply from the
-+ queue, no wonder we called get_reply_serial so much ;-)
-+
-+ * dbus/dbus-message.c (struct DBusMessage): cache reply serial
-+ and client serial instead of demarshaling them every time
-+
-+2003-02-27 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-marshal.c (_dbus_demarshal_int32): rewrite to be much
-+ more inlined, using dbus-string-private.h, speeds things up
-+ substantially
-+
-+ * dbus/dbus-string.c (_dbus_string_free): apply align offset
-+ when freeing the string
-+ (_dbus_string_steal_data): fix for align offset
-+ (undo_alignment): new function
-+
-+2003-02-26 Havoc Pennington <hp at redhat.com>
-+
-+ All kinds of audit fixes from Owen, plus initial attempt to
-+ handle unaligned memory returned from malloc.
-+
-+ * dbus/dbus-string.c (_dbus_string_init): clamp max length to
-+ leave room for align_offset and nul byte
-+ (fixup_alignment): function to track an align_offset and
-+ ensure real->str is aligned
-+ (DBUS_GENERIC_STRING_PREAMBLE): len must be less than allocated,
-+ to allow a nul byte plus align offset
-+ (_dbus_string_lock): fix overflow issue
-+ (_dbus_string_init_const_len): add assertions on sanity of len,
-+ assign allocated to be ALLOCATION_PADDING larger than len
-+ (set_length): fixup the overflow handling
-+ (_dbus_string_get_data_len): fix overflow in assertion
-+ (open_gap): detect overflow in size of gap to be opened
-+ (_dbus_string_lengthen): add overflow check
-+ (_dbus_string_align_length): fix overflow with _DBUS_ALIGN_VALUE
-+ (_dbus_string_append): add overflow check
-+ (_dbus_string_append_unichar): overflow
-+ (_dbus_string_delete): fix overflow in assertion
-+ (_dbus_string_copy_len): overflow in assertion
-+ (_dbus_string_replace_len): overflows in assertions
-+ (_dbus_string_find): change to implement in terms of
-+ _dbus_string_find_to
-+ (_dbus_string_find_to): assorted fixage
-+ (_dbus_string_equal_c_str): assert c_str != NULL,
-+ fix logic so the function works
-+ (_dbus_string_ends_with_c_str): fix overflow thingy
-+ (_dbus_string_base64_encode): overflow fix
-+ (_dbus_string_validate_ascii): overflow
-+ (_dbus_string_validate_nul): overflow
-+
-+2003-02-26 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_test): fix to work with DISABLE_ASSERTS
-+
-+2003-02-26 Alexander Larsson <alexl at redhat.com>
-+
-+ * configure.in:
-+ Set DBUS_GLIB_THREADS_LIBS for apps using gthread-2.0
-+
-+ * dbus/dbus-connection.c:
-+ * dbus/dbus-connection.h:
-+ Fix _dbus_connection_acquire_io_path and _dbus_connection_acquire_dispatch.
-+ Add dbus_connection_set_wakeup_main_function and use it when queueing
-+ incoming and outgoing messages.
-+
-+
-+ * dbus/dbus-dataslot.c:
-+ Threadsafe usage of DBusDataSlotAllocator
-+
-+ * dbus/dbus-message.c: (dbus_message_get_args_iter):
-+ dbus_new can fail.
-+
-+ * dbus/dbus-server-unix.c:
-+ Add todo comment
-+
-+ * glib/dbus-gmain.c:
-+ Implement the new wakeup functions for glib.
-+
-+ * glib/Makefile.am:
-+ * glib/test-thread-client.c:
-+ * glib/test-thread-server.c:
-+ * glib/test-thread.h:
-+ Initial cut at some thread test code. Not really done yet.
-+
-+2003-02-26 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_send_message_with_reply_and_block): fix crash
-+ where we ref'd the outgoing message instead of the returned reply
-+
-+ * dbus/dbus-transport-unix.c (do_authentication): check read watch
-+ at the end of this function, so if we didn't need to read for
-+ authentication, we reinstall it for receiving messages
-+
-+ * dbus/dbus-message.c (dbus_message_new_reply): allow replies to
-+ a NULL sender for peer-to-peer case
-+
-+ * dbus/dbus-transport-unix.c (check_read_watch): handle
-+ !authenticated case correctly
-+
-+ * glib/dbus-gmain.c: add support for DBusServer
-+
-+ * dbus/dbus-server.c: add data slot support
-+
-+ * glib/dbus-gmain.c (dbus_connection_setup_with_g_main): check
-+ return values and handle errors
-+
-+ * dbus/dbus-dataslot.c: factor out the data slot stuff from
-+ DBusConnection
-+
-+ * Doxyfile.in (INPUT): add glib subdir
-+
-+ * glib/dbus-gmain.c (dbus_connection_setup_with_g_main): rename
-+ setup_with_g_main instead of hookup_with_g_main; write docs
-+
-+2003-02-24 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_validate_arg):
-+ * dbus/dbus-message-builder.c: (_dbus_message_data_load):
-+ * dbus/dbus-message.c: (dbus_message_append_boolean),
-+ (dbus_message_append_boolean_array),
-+ (dbus_message_get_args_valist), (_dbus_message_test):
-+ * dbus/dbus-message.h:
-+ * doc/dbus-specification.sgml:
-+ Various fixes as pointed out by Havoc.
-+
-+ * test/data/invalid-messages/bad-boolean-array.message:
-+ * test/data/invalid-messages/bad-boolean.message:
-+ Add invalid boolean value test cases.
-+
-+2003-02-24 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-internals.c: (_dbus_type_to_string):
-+ * dbus/dbus-marshal.c: (_dbus_marshal_get_arg_end_pos),
-+ (_dbus_marshal_validate_arg):
-+ * dbus/dbus-message-builder.c: (_dbus_message_data_load):
-+ * dbus/dbus-message.c: (dbus_message_append_args_valist),
-+ (dbus_message_append_boolean), (dbus_message_append_boolean_array),
-+ (dbus_message_get_args_valist), (dbus_message_iter_get_boolean),
-+ (dbus_message_iter_get_int32), (dbus_message_iter_get_uint32),
-+ (dbus_message_iter_get_double),
-+ (dbus_message_iter_get_boolean_array), (message_iter_test):
-+ * dbus/dbus-message.h:
-+ * dbus/dbus-protocol.h:
-+ * doc/dbus-specification.sgml:
-+ * test/data/valid-messages/lots-of-arguments.message:
-+ Add support for boolean and boolean array types.
-+
-+2003-02-23 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-keyring.c: finish most of this implementation and
-+ simple unit test
-+
-+ * dbus/dbus-errors.c (dbus_set_error_const, dbus_set_error): make
-+ these barf if the error isn't cleared to NULL
-+
-+ * dbus/dbus-sysdeps.c (_dbus_delete_file): set error on failure
-+ (_dbus_create_directory): new function
-+
-+ * dbus/dbus-errors.c (dbus_set_error): fix warning
-+
-+ * dbus/dbus-string.c (_dbus_string_hex_encode): new function
-+ (_dbus_string_hex_decode): new function
-+ (test_hex_roundtrip): test code
-+
-+ * dbus/dbus-sha.c (_dbus_sha_compute): use dbus_string_hex_encode
-+
-+ * dbus/dbus-md5.c (_dbus_md5_compute): use dbus_string_hex_encode
-+
-+ * dbus/dbus-sysdeps.c (_dbus_string_save_to_file): make this use
-+ the save-to-temp/rename trick to atomically write the new file
-+ (_dbus_string_parse_uint): new function
-+
-+2003-02-22 Havoc Pennington <hp at pobox.com>
-+
-+ * test/Makefile.am (dist-hook): fix dist for test/data/sha-1
-+
-+2003-02-22 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_string_array):
-+ (dbus_message_iter_get_byte_array): Fix up doxygen warnings
-+
-+ * dbus/dbus-sha.c: add implementation of SHA-1 algorithm
-+
-+ * dbus/test/data/sha-1: add US government test suite for SHA-1
-+
-+2003-02-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c: (_dbus_demarshal_string_array):
-+ Make string arrays NULL-terminated.
-+
-+ * dbus/dbus-memory.c: (dbus_free_string_array):
-+ * dbus/dbus-memory.h:
-+ New function for freeing NULL-terminated string arrays.
-+
-+ * dbus/dbus-message-builder.c: (append_quoted_string),
-+ (_dbus_message_data_load):
-+ Add support for array types.
-+
-+ * dbus/dbus-message.c: (check_message_handling):
-+ Add more types as test cases.
-+
-+ * dbus/dbus-sysdeps.c: (_dbus_string_parse_int),
-+ (_dbus_string_parse_double):
-+ Add the start offset to the end offset.
-+
-+ * test/data/valid-messages/lots-of-arguments.message:
-+ New test message with lots of arguments.
-+
-+2003-02-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-message.c: (dbus_message_append_nil),
-+ (dbus_message_append_int32), (dbus_message_append_uint32),
-+ (dbus_message_append_double), (dbus_message_append_string),
-+ (dbus_message_append_int32_array),
-+ (dbus_message_append_uint32_array),
-+ (dbus_message_append_double_array),
-+ (dbus_message_append_byte_array),
-+ (dbus_message_append_string_array):
-+ Fix all out-of-memory handling in these functions.
-+
-+2003-02-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-message.c: (dbus_message_append_nil):
-+ Fix a silly.
-+
-+2003-02-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-message.c: (dbus_message_append_args_valist),
-+ (dbus_message_append_nil), (dbus_message_append_int32_array),
-+ (dbus_message_append_uint32_array),
-+ (dbus_message_append_double_array),
-+ (dbus_message_append_byte_array),
-+ (dbus_message_append_string_array), (dbus_message_get_args_valist),
-+ (dbus_message_iter_get_int32_array),
-+ (dbus_message_iter_get_uint32_array),
-+ (dbus_message_iter_get_double_array),
-+ (dbus_message_iter_get_byte_array),
-+ (dbus_message_iter_get_string_array):
-+
-+ * dbus/dbus-message.h:
-+ Add functions for appending and getting arrays.
-+
-+2003-02-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-mempool.c (_dbus_mem_pool_new): Make the
-+ element size at least 8 bytes, fixes mempool tests on
-+ 64-bit machines.
-+
-+2003-02-20 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-transport-unix.c (unix_do_iteration):
-+ Unlock the connection mutex during a blocking select call.
-+ Add todo about how we need a way to wake up the select.
-+
-+ * dbus/dbus-connection-internal.h:
-+ * dbus/dbus-connection.c:
-+ Add _dbus_connection_lock and _dbus_connection_unlock.
-+
-+2003-02-19 Havoc Pennington <hp at pobox.com>
-+
-+ * Doxyfile.in (PREDEFINED): put DOXYGEN_SHOULD_SKIP_THIS in
-+ Doxyfile.in, not Doxyfile
-+
-+ * dbus/dbus-keyring.c: do some hacking on this
-+
-+ * dbus/dbus-sysdeps.c (_dbus_delete_file): new
-+
-+ * dbus/dbus-errors.c (dbus_set_error_const): do not call
-+ dbus_error_init
-+ (dbus_set_error): remove dbus_error_init, check for message ==
-+ NULL *before* we sprintf into it, and add @todo about including
-+ system headers in this file
-+
-+ * dbus/dbus-sysdeps.c (_dbus_create_file_exclusively): new
-+
-+ * dbus/dbus-errors.h (DBUS_ERROR_FAILED): add
-+
-+ * dbus/dbus-sysdeps.c (get_user_info): break this function out to
-+ get various bits of user information based on either username
-+ or user ID
-+ (_dbus_homedir_from_username): new function
-+
-+2003-02-19 Anders Carlsson <andersca at codefactory.se>
-+
-+ * configure.in:
-+ Add check for nonposix getpwnam_r
-+
-+ * dbus/dbus-mempool.c: (_dbus_mem_pool_new):
-+ Align the pool element size to a sizeof (void *) boundary.
-+
-+ * dbus/dbus-sysdeps.c: (_dbus_setenv), (_dbus_connect_unix_socket),
-+ (_dbus_listen_unix_socket), (_dbus_credentials_from_username):
-+ General Solaris fixes.
-+
-+ * test/data/valid-messages/simplest-manual.message:
-+ Explicitly state that we want little-endian packing.
-+
-+2003-02-19 Mikael Hallendal <micke at codefactory.se>
-+
-+ * dbus/dbus-server.c (dbus_server_listen): Support tcp: addresses.
-+
-+ * dbus/dbus-transport-unix.c (_dbus_transport_new_for_tcp_socket):
-+ Added to create a transport connecting using a tcp/ip socket.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_connect_tcp_socket): Added to connect
-+ to a tcp socket at given host and port.
-+ (_dbus_listen_tcp_socket): added to listen on tcp socket for given
-+ hostname and port.
-+
-+ * dbus/dbus-server.c (dbus_server_listen): Support tcp: addresses.
-+
-+ * dbus/dbus-server-unix.c (_dbus_server_new_for_tcp_socket):
-+ Added to create a server listening on a TCP/IP socket.
-+
-+2003-02-19 Havoc Pennington <hp at pobox.com>
-+
-+ Throughout: mop up all the Doxygen warnings and undocumented
-+ stuff.
-+
-+ * dbus/dbus-sysdeps.c (do_exec): do not use execvp, we don't want
-+ to search any paths.
-+
-+ * dbus/dbus-threads.c: move global mutex initializers to
-+ dbus-internals.h, multiple prototypes was confusing doxygen
-+ besides being kind of ugly
-+
-+ * Doxyfile (PREDEFINED): have Doxygen define
-+ DOXYGEN_SHOULD_SKIP_THIS so we can exclude things from
-+ docs with #ifndef DOXYGEN_SHOULD_SKIP_THIS
-+ (do not abuse the feature! it's for stuff like the autogenerated
-+ macros in dbus-md5.c, not just for things you don't feel like
-+ documenting...)
-+
-+2003-02-18 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_zero): new function
-+
-+ * dbus/dbus-md5.c: include MD5 implementation by L. Peter Deutsch,
-+ wrap it in some dbus-friendly API
-+
-+ * dbus/dbus-types.h: add 16-bit types
-+
-+2003-02-18 Joe Shaw <joe at assbarn.com>
-+
-+ * dbus/dbus-auth.c (handle_server_data_stupid_test_mech): Just get
-+ credentials from our currently running process.
-+ (get_word): Fix a buglet where we were copying the entire length
-+ instead of relative to our position.
-+
-+ * dbus/dbus-hash.c (_dbus_hash_test): Don't try to allocate the
-+ keys on the stack... it's 640k of data.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): Always
-+ read the credentials byte off the socket, even if we don't have
-+ SO_PEERCRED.
-+ (_dbus_poll): Implement poll() using select() for systems which
-+ don't have it.
-+
-+ * glib/test-dbus-glib.c (main): Print out an error if no
-+ parameters are given.
-+
-+ * test/data/auth/fallback.auth-script: Added. Tests that a client
-+ can fallback to a secondary auth mechanism if the first fails.
-+
-+2003-02-18 Havoc Pennington <hp at pobox.com>
-+
-+ * AUTHORS: add Alex
-+
-+2003-02-17 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: lots of cosmetic
-+ cleanups/rearrangement, add assorted FIXME, change DBUS_ADDRESS
-+ env variable to DBUS_BUS_ADDRESS, s/client/application/,
-+ s/server/bus/ (except in authentication section). Add a section
-+ "Message Bus Message Routing"
-+
-+2003-02-17 Anders Carlsson <andersca at codefactory.se.>
-+
-+ Release 0.4
-+
-+ * NEWS: Update
-+
-+2003-02-17 Anders Carlsson <andersca at codefactory.se>
-+
-+ * doc/dbus-specification.sgml:
-+ Specification updates.
-+
-+2003-02-17 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/activation.c: (bus_activation_init), (child_setup),
-+ (bus_activation_activate_service):
-+ * bus/activation.h:
-+ * bus/main.c: (main):
-+ Set DBUS_ADDRESS environment variable.
-+
-+ * dbus/dbus-errors.c: (dbus_set_error):
-+ Don't use va_copy since that's a C99 feature.
-+
-+ * dbus/dbus-sysdeps.c: (_dbus_setenv), (do_exec),
-+ (_dbus_spawn_async):
-+ * dbus/dbus-sysdeps.h:
-+ Add child_setup_func to _dbus_spawn_async.
-+
-+ * doc/dbus-specification.sgml:
-+ Update specification.
-+
-+ * test/spawn-test.c: (setup_func), (main):
-+ Fix test.
-+
-+2003-02-17 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-connection.c (_dbus_connection_handler_destroyed_locked):
-+ Added todo.
-+
-+2003-02-17 Anders Carlsson <andersca at codefactory.se>
-+
-+ * doc/.cvsignore:
-+ * doc/Makefile.am:
-+ * doc/dbus-test-plan.sgml:
-+ Add test plan document.
-+
-+ * test/Makefile.am:
-+ Fix distcheck.
-+
-+2003-02-17 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-message.c: (decode_header_data),
-+ (_dbus_message_loader_return_buffer):
-+ Set the header padding amount when loading a message.
-+
-+2003-02-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/dispatch.c: (send_one_message):
-+ Only send broadcast messages to registered connections.
-+
-+ * dbus/dbus-message.c: (dbus_message_name_is):
-+ * dbus/dbus-message.h:
-+ New convenience function.
-+
-+ * dbus/dbus-transport-debug.c: (do_reading):
-+ Only dispatch one message per run.
-+
-+ * test/Makefile.am:
-+ * test/bus-test.c: (new_connection_callback), (die),
-+ (test_hello_client1_handler), (test_hello_client2_handler),
-+ (test_hello_replies), (main):
-+
-+ * test/bus-test-loop.[ch]:
-+ Add these.
-+
-+2003-02-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_dispatch_message): fix
-+ backward conditional
-+
-+2003-02-16 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-connection.c:
-+ Implement sent_message_with_reply. (with_reply_and block is still
-+ busted).
-+ Made dispatch_message not lose message if OOM.
-+
-+ * dbus/dbus-errors.h:
-+ Add NoReply error (for reply timeouts).
-+
-+2003-02-16 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-hash.c (_dbus_hash_table_unref):
-+ Actually free keys and values when destroying hashtable.
-+
-+2003-02-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-auth.c: (client_try_next_mechanism):
-+ Plug a leak.
-+
-+ * dbus/dbus-threads.c: (dbus_condvar_wait_timeout):
-+ Return TRUE if there's no thread implementation around.
-+
-+ * glib/dbus-gmain.c: (free_source),
-+ (dbus_connection_hookup_with_g_main):
-+ Make sure to remove the GSource when the connection is finalized.
-+
-+2003-02-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/dispatch.c: (bus_dispatch_message_handler):
-+ * dbus/dbus-errors.h:
-+ Return an error if someone tries to send a message to a service
-+ that doesn't exist.
-+
-+2003-02-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/activation.c: (load_directory), (bus_activation_init),
-+ (bus_activation_activate_service):
-+ * bus/activation.h:
-+ * bus/driver.c:
-+ (bus_driver_handle_activate_service), (bus_driver_handle_message):
-+ More work on the activation handling.
-+
-+ * dbus/dbus-errors.h:
-+ Add some error messages
-+
-+ * dbus/dbus-message.c: (dbus_message_new_error_reply):
-+ * dbus/dbus-message.h:
-+ New function that creates an error message.
-+
-+ * dbus/dbus-protocol.h:
-+ Add ACTIVATE_SERVER message.
-+
-+ * dbus/dbus-server-unix.c: (unix_handle_watch),
-+ (_dbus_server_new_for_domain_socket):
-+ Call _dbus_fd_set_close_on_exec.
-+
-+ * dbus/dbus-sysdeps.c: (make_pipe), (do_exec),
-+ (_dbus_spawn_async), (_dbus_disable_sigpipe),
-+ (_dbus_fd_set_close_on_exec):
-+ * dbus/dbus-sysdeps.h:
-+ Add _dbus_fd_set_close_on exec function. Also add function that checks
-+ that all open fds are set to close-on-exec and warns otherwise.
-+
-+ * dbus/dbus-transport-unix.c:
-+ (_dbus_transport_new_for_domain_socket):
-+ Call _dbus_fd_set_close_on_exec.
-+
-+2003-02-16 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_set_change_sigpipe):
-+ allow people to avoid setting SIGPIPE to SIG_IGN
-+ (_dbus_connection_new_for_transport): disable SIGPIPE unless
-+ we've been asked not to
-+
-+2003-02-15 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-list.c: (_dbus_list_append_link),
-+ (_dbus_list_prepend_link):
-+ * dbus/dbus-memory.c: (dbus_malloc), (dbus_malloc0),
-+ (dbus_realloc):
-+ Warning fixes.
-+
-+2003-02-15 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/Makefile.am:
-+ * bus/activation.c: (bus_activation_entry_free),
-+ (add_desktop_file_entry), (load_directory), (bus_activation_init):
-+ * bus/activation.h:
-+ * bus/main.c: (main):
-+ Add simple activation support, doesn't work yet though.
-+
-+2003-02-15 Zack Rusin <zack at kde.org>
-+
-+ * qt/dbus-qthread.cpp: small casting fix
-+
-+2003-02-15 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-errors.c: (dbus_set_error):
-+ * dbus/dbus-errors.h:
-+ Add a few errors and make dbus_set_error void.
-+
-+ * dbus/dbus-sysdeps.c:
-+ (_dbus_errno_to_string), (close_and_invalidate), (make_pipe),
-+ (write_err_and_exit), (read_ints), (do_exec), (_dbus_spawn_async):
-+ * dbus/dbus-sysdeps.h:
-+ Add _dbus_spawn_async.
-+
-+ * test/spawn-test.c: (main):
-+ Test for _dbus_spawn_async.
-+
-+2003-02-15 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-internals.h:
-+ Fix build without tests.
-+
-+ * dbus/dbus-list.c: (alloc_link):
-+ Fix a segfault when a malloc fails.
-+
-+ * dbus/dbus-memory.c: (initialize_malloc_debug), (dbus_malloc),
-+ (dbus_malloc0), (dbus_realloc):
-+ Add support for malloc debugging.
-+
-+2003-02-15 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-threads.c:
-+ * dbus/dbus-threads.h:
-+ Add condvars. Remove static mutext from API.
-+ Implement static mutexes by initializing them from threads_init.
-+
-+ * glib/dbus-gthread.c:
-+ * qt/dbus-qthread.cpp:
-+ Update with the thread api changes.
-+
-+
-+ * dbus/dbus-list.c:
-+ * dbus/dbus-list.h:
-+ Turn StaticMutex into normal mutex + init function.
-+ Export new functions _dbus_list_alloc_link, _dbus_list_free_link,
-+ _dbus_list_append_link, _dbus_list_prepend_link
-+
-+
-+ * dbus/dbus-sysdeps.c:
-+ * dbus/dbus-sysdeps.h:
-+ New type dbus_atomic_t, and new functions _dbus_atomic_inc,
-+ _dbus_atomic_dec. Only slow fallback implementation at the moment.
-+
-+ * dbus/dbus-protocol.h:
-+ Add DBUS_MESSAGE_LOCAL_DISCONNECT define
-+
-+ * dbus/dbus-message.c:
-+ Make ref/unref atomic.
-+ Fix some docs.
-+
-+ * dbus/dbus-connection-internal.h:
-+ * dbus/dbus-connection.c:
-+ * dbus/dbus-connection.h:
-+ Make threadsafe.
-+ Change _peek to _borrow,_return & _steal_borrowed.
-+ Change disconnect callback to event.
-+ Make dbus_connection_dispatch_messages reentrant.
-+
-+ * dbus/dbus-transport.c:
-+ Don't ref the connection on calls to the transport
-+ implementation.
-+
-+ * dbus/dbus-message-handler.c:
-+ Make threadsafe.
-+
-+ * glib/dbus-gmain.c:
-+ Don't use peek_message anymore
-+
-+ * test/Makefile.am:
-+ * test/debug-thread.c:
-+ * test/debug-thread.h:
-+ Simple thread implementation that asserts() on deadlocks in
-+ single-threaded code.
-+
-+ * test/bus-test.c:
-+ (main) Call debug_threads_init.
-+
-+ * test/watch.c:
-+ Use disconnect message instead of disconnect callback.
-+
-+ * bus/connection.c:
-+ * bus/connection.h:
-+ Don't call dbus_connection_set_disconnect_function. Instead export
-+ bus_connection_disconnect.
-+
-+ * bus/dispatch.c:
-+ Call bus_connection_disconnect when we get a disconnected message.
-+
-+2003-02-15 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (dbus_message_new): fool around with the
-+ docs
-+
-+2003-02-14 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-mempool.c: fail if the debug functions so indicate
-+
-+ * dbus/dbus-memory.c: fail if the debug functions indicate we
-+ should
-+
-+ * dbus/dbus-internals.c (_dbus_set_fail_alloc_counter)
-+ (_dbus_decrement_fail_alloc_counter): debug functions to
-+ simulate memory allocation failures
-+
-+2003-02-14 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-errors.h (struct DBusError): add a word of padding
-+ to DBusError
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/driver.c: (bus_driver_handle_hello):
-+ * bus/driver.h:
-+ * bus/services.c: (bus_service_lookup):
-+ Reorder message sending so we get a more sane order.
-+
-+ * test/bus-test.c: (message_handler):
-+ Fix tyop.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/driver.c: (bus_driver_send_service_deleted),
-+ (bus_driver_send_service_created), (bus_driver_send_service_lost),
-+ (bus_driver_send_service_acquired), (bus_driver_handle_hello),
-+ (bus_driver_send_welcome_message),
-+ (bus_driver_handle_list_services),
-+ (bus_driver_handle_acquire_service),
-+ (bus_driver_handle_service_exists):
-+ * dbus/dbus-bus.c: (dbus_bus_register_client),
-+ (dbus_bus_acquire_service), (dbus_bus_service_exists):
-+ * dbus/dbus-errors.c: (dbus_result_to_string):
-+ * dbus/dbus-errors.h:
-+ * dbus/dbus-message.c: (dbus_message_append_args),
-+ (dbus_message_append_args_valist), (dbus_message_get_args),
-+ (dbus_message_get_args_valist), (dbus_message_get_args_iter),
-+ (dbus_message_iter_get_arg_type), (dbus_message_iter_get_string),
-+ (dbus_message_iter_get_byte_array),
-+ (dbus_message_iter_get_string_array), (message_iter_test),
-+ (check_message_handling), (_dbus_message_test):
-+ * dbus/dbus-message.h:
-+ * test/bus-test.c: (main):
-+ Change fields to arguments in messages, so that they won't be
-+ confused with header fields.
-+
-+ * glib/test-dbus-glib.c: (main):
-+ Remove append_fields from hello message.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-errors.c:
-+ * dbus/dbus-message.c:
-+ * dbus/dbus-string.c:
-+ Documentation fixes.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * glib/dbus-gmain.c: (timeout_handler), (add_timeout),
-+ (remove_timeout):
-+ Implement support for timeouts in dbus-glib.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-message-builder.c: (_dbus_message_data_load):
-+ * dbus/dbus-message.c: (process_test_subdir):
-+ * test/break-loader.c: (find_breaks_based_on):
-+ Plug some memory leaks.
-+
-+2003-02-13 Richard Hult <rhult at codefactory.se>
-+
-+ * bus/main.c: Fix build.
-+
-+ * dbus/dbus-errors.h:
-+ * dbus/dbus-errors.c: Fix copyright for Anders.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/Makefile.am:
-+ Add utils.[ch]
-+
-+ * bus/connection.c: (bus_connection_foreach):
-+ Fix a warning.
-+
-+ * bus/desktop-file.c: (grow_lines_in_section), (grow_sections),
-+ (unescape_string), (new_section), (parse_section_start),
-+ (parse_key_value), (report_error), (bus_desktop_file_load),
-+ (bus_desktop_file_get_string):
-+ * bus/desktop-file.h:
-+ Use DBusError for error reporting.
-+
-+ * bus/dispatch.c: (send_one_message),
-+ (bus_dispatch_message_handler):
-+ * bus/driver.c: (bus_driver_send_service_deleted),
-+ (bus_driver_send_service_created), (bus_driver_send_service_lost),
-+ (bus_driver_send_service_acquired), (bus_driver_handle_hello),
-+ (bus_driver_send_welcome_message),
-+ (bus_driver_handle_list_services),
-+ (bus_driver_handle_acquire_service),
-+ (bus_driver_handle_service_exists):
-+ * bus/loop.c: (bus_loop_run):
-+ * bus/main.c:
-+ Use BUS_HANDLE_OOM instead of _DBUS_HANDLE_OOM.
-+
-+ * bus/utils.c: (bus_wait_for_memory):
-+ * bus/utils.h:
-+ New files with general utility functions.
-+
-+ * dbus/dbus-internals.h:
-+ Remove _DBUS_HANDLE_OOM.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-errors.c: (dbus_result_to_string), (dbus_error_init),
-+ (dbus_error_free), (dbus_set_error_const), (dbus_set_error):
-+ * dbus/dbus-errors.h:
-+ Add DBusError structure.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * test/data/valid-messages/standard-acquire-service.message:
-+ * test/data/valid-messages/standard-hello.message:
-+ * test/data/valid-messages/standard-list-services.message:
-+ * test/data/valid-messages/standard-service-exists.message:
-+ Add some standard messages.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/driver.c: (bus_driver_send_welcome_message),
-+ (bus_driver_handle_list_services),
-+ (bus_driver_handle_acquire_service),
-+ (bus_driver_handle_service_exists), (bus_driver_handle_message):
-+ Update for API changes in libdbus.
-+
-+ * dbus/dbus-message.c: (dbus_message_new_reply):
-+ * dbus/dbus-message.h:
-+ Remove the name argument. The spec states that replies shouldn't
-+ have a name.
-+
-+2003-02-13 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/desktop-file.c: (parse_section_start), (parse_key_value),
-+ (report_error), (bus_desktop_file_load), (lookup_section),
-+ (lookup_line), (bus_desktop_file_get_raw),
-+ (bus_desktop_file_get_string):
-+ * bus/desktop-file.h:
-+ Some fixes, and new functions for getting a key value from a section.
-+
-+2003-02-13 Havoc Pennington <hp at pobox.com>
-+
-+ * test/data/auth/fail-after-n-attempts.auth-script: new test
-+
-+ * dbus/dbus-auth.c (send_rejected): shutdown_mech() when we
-+ reject the client.
-+
-+2003-02-13 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-auth.c (handle_server_data_external_mech): args to
-+ dbus_credentials_match were backward
-+
-+ * dbus/dbus-auth-script.c (_dbus_auth_script_run): support
-+ NO_CREDENTIALS and ROOT_CREDENTIALS
-+
-+ * dbus/dbus-auth.c (_dbus_auth_do_work): move get_state() routine
-+ into here. Never process more commands after we've reached an
-+ end state; store further data as unused bytes.
-+
-+ * test/data/auth/*: add more auth tests
-+
-+ * dbus/dbus-auth-script.c (_dbus_auth_script_run): support EXPECT
-+ command to match exact string and EXPECT_UNUSED to match unused
-+ bytes
-+
-+ * test/Makefile.am (dist-hook): fix to dist all the test stuff
-+
-+2003-02-12 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_pop_line): fix to also strip
-+ \r off of popped lines
-+
-+ * dbus/dbus-auth.c (_dbus_auth_test): write code to run auth
-+ scripts
-+
-+ * dbus/dbus-auth-script.c (_dbus_auth_script_run): when doing a
-+ SEND, append \r\n
-+
-+2003-02-12 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/Makefile.am: remove break-loader from the build, since it
-+ moved.
-+
-+ * configure.in: add --enable-gcov to turn on coverage profiling
-+ flags and disable optimization
-+
-+2003-02-10 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-auth-script.c, dbus/dbus-auth-script.h: sync
-+ initial cut at test framework for DBusAuth from laptop.
-+ Doesn't quite work yet but it compiles and I need to get
-+ it off the 266mhz laptop. ;-)
-+
-+ * dbus/dbus-server-debug.c (_dbus_server_debug_accept_transport):
-+ fix a memleak in error case
-+
-+2003-02-12 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/Makefile.am:
-+ * bus/desktop-file.c:
-+ * bus/desktop-file.h:
-+ Add a desktop file parser.
-+
-+2003-02-11 Zack Rusin <zack at kde.org>
-+
-+ * qt/message.[h|cpp]: sample implementation
-+ of the KDE wrapper for DBusMessage
-+
-+2003-02-09 Zack Rusin <zack at kde.org>
-+
-+ * test/bus-test.c: make_it_compile
-+ * doc/dbus-specification.sgml: minimal semantic fix
-+
-+2003-02-06 Anders Carlsson <andersca at codefactory.se>
-+
-+ Release 0.3
-+
-+ * NEWS: Update
-+
-+2003-02-06 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/Makefile.am:
-+ * dbus/dbus-break-loader.c:
-+ * test/Makefile.am:
-+ * test/break-loader.c:
-+ Move dbus-break-loader to test/ and rename it to break-loader.
-+
-+2003-02-02 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-keyring.c, dbus/dbus-keyring.h: template files
-+ for code to manage cookies in your home directory
-+
-+ * dbus/dbus-sysdeps.c (_dbus_generate_random_bytes): new function
-+
-+ * dbus/dbus-auth.c (get_state): impose a maximum number of tries
-+ to authenticate, then disconnect the client.
-+
-+2003-02-03 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-message.c (dbus_message_append_fields):
-+ Correct docs.
-+
-+2003-02-02 Anders Carlsson <andersca at codefactory.se>
-+
-+ * doc/dbus-specification.sgml:
-+ Update address format section.
-+
-+2003-02-02 Anders Carlsson <andersca at codefactory.se>
-+
-+ * test/Makefile.am:
-+ * test/bus-test.c: (get_time), (add_timeout), (remove_timeout),
-+ (message_handler), (new_connection_callback), (loop_quit),
-+ (loop_run), (main):
-+ Add bus test.
-+
-+2003-02-02 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/driver.c: (bus_driver_handle_service_exists):
-+ Simplify the code a bit.
-+
-+ * dbus/dbus-bus.c: (dbus_bus_service_exists):
-+ Fix a silly.
-+
-+2003-02-02 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/Makefile.am:
-+ Add libdbus-daemon.la and link to it.
-+
-+2003-02-01 James Willcox <jwillcox at gnome.org>
-+
-+ * bus/driver.c: (bus_driver_handle_own_service):
-+ Actually include the service reply code in the message.
-+
-+2003-02-02 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/driver.c: (bus_driver_handle_service_exists):
-+ Don't unref the incoming message.
-+
-+2003-02-02 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus.h: Add dbus-address.h and dbus-bus.h
-+
-+2003-02-02 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-server.c: (dbus_server_listen):
-+ * dbus/dbus-transport.c: (_dbus_transport_open):
-+ ifdef out the calls to the debug transport and server.
-+
-+2003-02-02 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-watch.c (dbus_watch_get_flags):
-+ Add note in the docs that ERROR or HANGUP won't be returned
-+ and are assumed always on.
-+
-+ * glib/dbus-gmain.c (add_watch):
-+ Always add IO_ERR | IO_HUP
-+
-+ * dbus/dbus-message.h:
-+ Add semicolon after dbus_message_iter_get_string_array().
-+ Makes qt code build again
-+
-+2003-02-01 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/driver.c: (create_unique_client_name),
-+ (bus_driver_handle_hello):
-+ Don't take a name, just use a numeric id to identify
-+ each client.
-+
-+ * dbus/Makefile.am:
-+ * dbus/dbus-bus.c: (dbus_bus_register_client),
-+ (dbus_bus_acquire_service), (dbus_bus_service_exists):
-+ * dbus/dbus-bus.h:
-+ Add new convenience functions for communicating with the bus.
-+
-+ * dbus/dbus-message.h:
-+
-+ * dbus/dbus-protocol.h:
-+ Fix a typo.
-+
-+2003-02-01 Alexander Larsson <alexl at redhat.com>
-+
-+ * dbus/dbus-message.c (dbus_message_append_fields):
-+ Add some more doc comments.
-+
-+2003-02-01 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-break-loader.c (randomly_modify_length): change
-+ a 4-byte value in the message as if it were a length
-+
-+ * dbus/dbus-sysdeps.c (_dbus_string_save_to_file): don't set
-+ execute bit on saved files
-+
-+2003-02-01 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-break-loader.c (main): new program to find messages
-+ that break the loader.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_string_append_uint): new function
-+ * dbus/dbus-sysdeps.c (_dbus_string_save_to_file): new function
-+
-+ * dbus/dbus-string.c (_dbus_string_set_byte): new
-+
-+2003-01-31 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c: refactor the test code to be more general,
-+ in preparation for writing a "randomly permute test cases to
-+ try to break the loader" program.
-+
-+2003-01-31 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: work on the specification
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_return_buffer): check
-+ the protocol version of the message.
-+
-+ * dbus/dbus-protocol.h: drop special _REPLY names, the spec
-+ no longer specifies that.
-+ (DBUS_SERVICE_REPLY_SERVICE_EXISTS): fix flags (1/2/4/8 not
-+ 1/2/3/4)
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_get_arg_end_pos): add missing
-+ "break" for DBUS_TYPE_NIL, remove @todo
-+
-+2003-01-31 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (dbus_message_set_is_error_reply): rename
-+ just set_is_error/get_is_error as this is a commonly-used
-+ function, and write docs.
-+
-+2003-01-31 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-address.c: (dbus_address_entry_free):
-+ Free key and value lists.
-+
-+ * dbus/dbus-internals.c: (_dbus_type_to_string):
-+ Add the types we didn't have.
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_get_arg_end_pos),
-+ (_dbus_marshal_validate_arg):
-+ Add NIL types.
-+
-+ * dbus/dbus-message.c: (dbus_message_set_sender):
-+ Remove todo about being able to set sender to NULL.
-+
-+ (dbus_message_set_is_error_reply),
-+ (dbus_message_get_is_error_reply):
-+ * dbus/dbus-message.h:
-+ New functions.
-+
-+ * dbus/dbus-protocol.h:
-+ Add error reply flag.
-+
-+ * test/data/valid-messages/opposite-endian.message:
-+ Add NIL type to test.
-+
-+2003-01-31 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: fully specify the header. Add
-+ flags and major protocol version, and change header/body len to
-+ unsigned.
-+
-+ * dbus/dbus-message-builder.c (append_saved_length): append length
-+ as uint32
-+
-+ * dbus/dbus-message.c (dbus_message_create_header): change header
-+ length and body length to unsigned. Add the new fields from the
-+ spec
-+ (_dbus_message_loader_return_buffer): unsigned header/body len
-+
-+2003-01-30 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-auth.c: rework to use only REJECTED, no
-+ MECHANISMS
-+
-+ * doc/dbus-sasl-profile.txt: drop MECHANISMS and just
-+ use REJECTED, suggested by Mark McLoughlin
-+
-+2003-01-30 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-server.c (dbus_server_listen): @todo about how we need
-+ a better way to report errors here. e.g. "unix address lacks
-+ path" or something. also "no such file" when the path doesn't
-+ exist, etc.
-+
-+ * dbus/dbus-address.c (dbus_address_entries_free): add @todo about
-+ leaking list nodes
-+ (dbus_parse_address): add @todo about documenting address format,
-+ and allowing , and ; to be escaped
-+
-+2003-01-30 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/Makefile.am:
-+ Add dbus-address.[ch]
-+
-+ * dbus/dbus-address.c: (dbus_address_entry_free),
-+ (dbus_address_entries_free), (create_entry),
-+ (dbus_address_entry_get_method), (dbus_address_entry_get_value),
-+ (dbus_parse_address), (_dbus_address_test):
-+ * dbus/dbus-address.h:
-+ New files for dealing with address parsing.
-+
-+ * dbus/dbus-connection.c:
-+ Document timeout functions.
-+
-+ * dbus/dbus-message.c:
-+ Document dbus_message_new_from_message.
-+
-+ * dbus/dbus-server-debug.c:
-+ Document.
-+
-+ * dbus/dbus-server.c: (dbus_server_listen):
-+ Parse address and use correct server implementation.
-+
-+ * dbus/dbus-string.c: (_dbus_string_find_to), (_dbus_string_test):
-+ * dbus/dbus-string.h:
-+ New function with test.
-+
-+ * dbus/dbus-test.c: (dbus_internal_symbol_do_not_use_run_tests):
-+ * dbus/dbus-test.h:
-+ Add address tests.
-+
-+ * dbus/dbus-transport-debug.c:
-+ Document.
-+
-+ * dbus/dbus-transport.c: (_dbus_transport_open):
-+ Parse address and use correct transport implementation.
-+
-+2003-01-30 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c: use message->byte_order instead of
-+ DBUS_COMPILER_BYTE_ORDER throughout.
-+ (dbus_message_create_header): pad header to align the
-+ start of the body of the message to 8-byte boundary
-+
-+ * dbus/dbus-marshal.h: make all the demarshalers take const
-+ DBusString arguments.
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_return_buffer):
-+ validate message args here, so we don't have to do slow validation
-+ later, and so we catch bad messages as they are incoming. Also add
-+ better checks on header_len and body_len. Also fill in
-+ message->byte_order
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_utf8): new (not
-+ implemented properly)
-+ (_dbus_string_validate_nul): new function to check all-nul
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_get_field_end_pos): rename
-+ get_arg_end_pos and remove all validation
-+ (_dbus_marshal_validate_arg): actually do validation here.
-+
-+2003-01-29 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (check_message_handling): fix assertion
-+ failure on set_client_serial
-+
-+2003-01-28 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-server-debug.c: Add doc section comments
-+
-+ * dbus/dbus-transport-debug.c: add doc section comments
-+
-+2003-01-28 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_base64_decode): append bytes in
-+ the reverse order from how I had it
-+ (_dbus_string_base64_encode): reverse encoding order. I was
-+ basically byteswapping everything during encoding.
-+
-+2003-01-28 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-connection-internal.h:
-+ * dbus/dbus-connection.c: (_dbus_connection_add_timeout),
-+ (_dbus_connection_remove_timeout):
-+ Add functions for adding and removing timeouts.
-+
-+ * dbus/dbus-message.c: (dbus_message_new_from_message):
-+ Add new function that takes a message and creates an exact
-+ copy of it, but with the refcount set to 1.
-+ (check_message_handling):
-+ Fix build error.
-+
-+ * dbus/dbus-server-protected.h:
-+ * dbus/dbus-server.c: (_dbus_server_init_base),
-+ (_dbus_server_finalize_base), (_dbus_server_add_timeout),
-+ (dbus_server_set_timeout_functions):
-+ (_dbus_server_remove_timeout):
-+ New functions so that a server can add and remove timeouts.
-+
-+ (dbus_server_listen):
-+ Add commented out call to dbus_server_debug_new.
-+
-+ * dbus/dbus-timeout.c: (_dbus_timeout_new):
-+ Actually set the handler, doh.
-+
-+ * dbus/dbus-transport.c: (_dbus_transport_open):
-+ Add commented out call to dbus_transport_debug_client_new.
-+
-+ * dbus/Makefile.am:
-+ Add dbus-transport-debug.[ch] and dbus-server-debug.[ch]
-+
-+2003-01-28 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (check_message_handling): function to check
-+ on the loaded message, iterates over it etc.
-+
-+2003-01-28 Havoc Pennington <hp at pobox.com>
-+
-+ * test/Makefile.am (dist-hook): fix make distdir
-+
-+ * dbus/Makefile.am (TESTS_ENVIRONMENT): fix make check
-+
-+2003-01-27 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-mempool.c (time_for_size): replace printf with
-+ _dbus_verbose
-+
-+ * dbus/dbus-message-builder.c (_dbus_message_data_load): allow
-+ empty lines; fix the SAVE_LENGTH stuff to be
-+ START_LENGTH/END_LENGTH so it actually works; couple other
-+ bugfixes
-+
-+ * test/Makefile.am (dist-hook): add dist-hook for .message files
-+
-+ * dbus/dbus-string.c (DBUS_STRING_COPY_PREAMBLE): source of a copy
-+ can be constant or locked.
-+ (_dbus_string_free): allow freeing a const string as
-+ documented/intended
-+
-+ * dbus/dbus-sysdeps.c (_dbus_concat_dir_and_file): utility
-+
-+ * dbus/dbus-test-main.c (main): take an argument which is the
-+ directory containing test data
-+
-+ * dbus/dbus-message.c (_dbus_message_test): pass a test_data_dir
-+ argument to this and load all the messages in test/data/
-+ checking that they can be loaded or not loaded as appropriate.
-+
-+2003-01-27 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/dispatch.c: (bus_dispatch_message_handler):
-+ Dispatch messages sent to services.
-+
-+ * bus/driver.c: (bus_driver_send_service_deleted),
-+ (bus_driver_send_service_created), (bus_driver_send_service_lost),
-+ (bus_driver_send_service_acquired):
-+ Add helper functions for sending service related messages.
-+
-+ (bus_driver_send_welcome_message):
-+ Send HELLO_REPLY instead of WELCOME.
-+
-+ (bus_driver_handle_list_services):
-+ Send LIST_SERVICES_REPLY instead of SERVICES.
-+
-+ (bus_driver_handle_own_service),
-+ (bus_driver_handle_service_exists):
-+ New message handlers.
-+
-+ (bus_driver_handle_message):
-+ Invoke new message handlers.
-+
-+ (bus_driver_remove_connection):
-+ Don't remove any services here since that's done automatically
-+ by bus_service_remove_owner now.
-+
-+ * bus/driver.h:
-+ New function signatures.
-+
-+ * bus/services.c: (bus_service_add_owner):
-+ Send ServiceAcquired message if we're the only primary owner.
-+
-+ (bus_service_remove_owner):
-+ Send ServiceAcquired/ServiceLost messages.
-+
-+ (bus_service_set_prohibit_replacement),
-+ (bus_service_get_prohibit_replacement):
-+ Functions for setting prohibit replacement.
-+
-+ (bus_service_has_owner):
-+ New function that checks if a connection is in the owner queue of
-+ a certain service.
-+
-+ * bus/services.h:
-+ Add new function signatures.
-+
-+ * dbus/dbus-list.c: (_dbus_list_test):
-+ Add tests for _dbus_list_remove_last and traversing the list backwards.
-+
-+ * dbus/dbus-list.h:
-+ Fix a typo in _dbus_list_get_prev_link, if we're at the first element we can't
-+ go any further, so return NULL then.
-+
-+ * dbus/dbus-protocol.h:
-+ Add new messages, service flags and service replies.
-+
-+2003-01-26 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message-builder.c: implement, completely untested.
-+
-+ * test/data/*: add data to be used in testing.
-+ ".message" files are our simple loadable text format.
-+ ".message-raw" will be binary dumps of messages.
-+
-+ * dbus/dbus-string.c (_dbus_string_starts_with_c_str): new
-+
-+2003-01-26 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_file_get_contents): new function
-+
-+ * dbus/dbus-errors.c (dbus_result_to_string): add
-+ file errors
-+
-+ * dbus/dbus-message-builder.c: new file, will contain code to load
-+ up messages from files. Not implemented yet.
-+
-+2003-01-26 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.c (dbus_message_set_sender): support deleting
-+ the sender by setting to NULL
-+
-+2003-01-26 Havoc Pennington <hp at pobox.com>
-+
-+ The unit tests pass, but otherwise untested. If it breaks, the
-+ tests should have been better. ;-)
-+
-+ * bus/driver.c (bus_driver_handle_hello): return if we disconnect
-+ the connection.
-+
-+ * dbus/dbus-message.c: redo everything so we maintain
-+ message->header as the only copy of the various fields.
-+ This avoids the possibility of out-of-memory in some cases,
-+ for example dbus_message_lock() can't run out of memory anymore,
-+ and avoids extra copying. Figured I may as well go ahead and do
-+ this since it was busted for dbus_message_lock to not return
-+ failure on OOM, and dbus_message_write_header was totally
-+ unchecked for OOM. Also fixed some random other bugs.
-+
-+ * dbus/dbus-marshal.c (_dbus_marshal_get_field_end_pos): verify
-+ that strings are nul-terminated. Also, end_pos can be equal
-+ to string length just not greater than, I think.
-+ (_dbus_marshal_set_int32): new function
-+ (_dbus_marshal_set_uint32): new function
-+ (_dbus_marshal_set_string): new function
-+
-+ * dbus/dbus-connection.c (_dbus_connection_new_for_transport): fix
-+ a warning, init timeout_list to NULL
-+ (dbus_connection_send_message): don't use uninitialized variable
-+ "serial"
-+
-+ * dbus/dbus-string.c (_dbus_string_replace_len): new function
-+
-+2003-01-26 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/driver.c: (bus_driver_handle_hello),
-+ (bus_driver_send_welcome_message):
-+ Plug leaks
-+
-+2003-01-26 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-auth.c: (process_auth), (_dbus_auth_unref):
-+ * dbus/dbus-connection.c: (_dbus_connection_new_for_transport),
-+ (dbus_connection_unref):
-+ * dbus/dbus-marshal.c: (_dbus_marshal_test):
-+ * dbus/dbus-message.c: (dbus_message_unref),
-+ Plug memory leaks.
-+
-+ (dbus_message_get_fields):
-+ Remove debugging printout.
-+
-+ (_dbus_message_loader_return_buffer):
-+ Don't store the header string.
-+
-+ (_dbus_message_test):
-+ Plug leaks.
-+
-+2003-01-26 Richard Hult <rhult at codefactory.se>
-+
-+ * glib/dbus-gmain.c (dbus_connection_dispatch): Traverse a copy of
-+ the file descriptor list, since it can change under us.
-+
-+2003-01-25 Anders Carlsson <andersca at codefactory.se>
-+
-+ * glib/dbus-gmain.c: (dbus_connection_prepare),
-+ (dbus_connection_check), (dbus_connection_dispatch), (add_watch),
-+ (remove_watch), (dbus_connection_hookup_with_g_main):
-+ Rewrite the glib handling to use its own GSource instead of a
-+ GIOChannel so we can catch messages put in the queue while waiting
-+ for a reply.
-+
-+2003-01-25 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/Makefile.am:
-+ * bus/connection.c: (connection_disconnect_handler),
-+ (connection_watch_callback), (bus_connection_setup):
-+ * bus/dispatch.c: (send_one_message),
-+ (bus_dispatch_broadcast_message), (bus_dispatch_message_handler),
-+ (bus_dispatch_add_connection), (bus_dispatch_remove_connection):
-+ * bus/dispatch.h:
-+ * bus/driver.c: (bus_driver_send_service_deleted),
-+ (bus_driver_send_service_created), (bus_driver_handle_hello),
-+ (bus_driver_send_welcome_message),
-+ (bus_driver_handle_list_services), (bus_driver_remove_connection),
-+ (bus_driver_handle_message):
-+ * bus/driver.h:
-+ Refactor code, put the message dispatching in its own file. Use
-+ _DBUS_HANDLE_OOM. Also send ServiceDeleted messages when a client
-+ is disconnected.
-+
-+2003-01-25 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-internals.h:
-+ Add _DBUS_HANDLE_OOM macro, it doesn't do anything currently.
-+
-+ * dbus/dbus-message.c: (dbus_message_get_sender):
-+ * dbus/dbus-message.h:
-+ Implement dbus_message_get_sender.
-+
-+ * dbus/dbus-protocol.h:
-+ Add message and service defines.
-+
-+2003-01-25 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-connection.c: (dbus_connection_send_message):
-+ * dbus/dbus-message-internal.h:
-+ * dbus/dbus-message.c: (_dbus_message_get_client_serial),
-+ (dbus_message_write_header):
-+ Remove _dbus_messag_unlock and don't set the client serial on a
-+ message if one already exists.
-+
-+2003-01-24 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-list.c (alloc_link): put a thread lock on the global
-+ list_pool
-+
-+ * bus/driver.c (bus_driver_handle_list_services): fix a leak
-+ on OOM
-+
-+2003-01-25 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-list.c: (alloc_link), (free_link):
-+ Use a memory pool for the links.
-+
-+2003-01-25 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/connection.c: (bus_connection_foreach):
-+ * bus/connection.h:
-+ Add new bus_connection_foreach function.
-+
-+ * bus/driver.c: (send_one_message), (bus_driver_broadcast_message):
-+ Add function that broadcasts a message to all clients.
-+
-+ (bus_driver_send_service_created), (bus_driver_handle_hello),
-+ (bus_driver_send_welcome_message),
-+ (bus_driver_handle_list_services), (bus_driver_message_handler):
-+ Implement functions that take care of listing services, and notifying
-+ clients when new services are created.
-+
-+ * bus/services.c: (bus_services_list):
-+ * bus/services.h:
-+ Add new function that returns an array of strings with the currently
-+ registered services.
-+
-+ * glib/dbus-glib.h:
-+ * glib/dbus-gmain.c:
-+ Update copyright year.
-+
-+2003-01-25 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-connection.c: (dbus_connection_send_message):
-+ Unlock the message in case it was sent earlier.
-+
-+ (dbus_connection_send_message_with_reply_and_block):
-+ Remove the reply message from the list.
-+
-+ * dbus/dbus-marshal.c: (_dbus_demarshal_string_array):
-+ Set array_len and new_pos correctly.
-+
-+ (_dbus_marshal_test):
-+ Remove debug output.
-+
-+ * dbus/dbus-message-internal.h:
-+ * dbus/dbus-message.c: (_dbus_message_get_reply_serial):
-+ New function that returns the reply serial.
-+
-+ (_dbus_message_unlock):
-+ New function that unlocks a message and resets its header.
-+
-+ (dbus_message_append_string_array),
-+ (dbus_message_get_fields_valist),
-+ (dbus_message_iter_get_field_type),
-+ (dbus_message_iter_get_string_array),
-+ (dbus_message_get_fields),
-+ (dbus_message_append_fields_valist):
-+ Handle string arrays.
-+
-+ (dbus_message_set_sender):
-+ Make this function public since the bus daemon needs it.
-+
-+ (decode_header_data):
-+ Set the reply serial to -1 initially.
-+
-+ * dbus/dbus-message.h:
-+ Add dbus_message_set_sender.
-+
-+2003-01-24 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: add some stuff
-+
-+2003-01-22 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-specification.sgml: Start to document the protocol.
-+
-+2003-01-22 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_send_message_with_reply_and_block): add some @todo
-+
-+ * bus/driver.c (bus_driver_add_connection): add a FIXME about memleak
-+
-+2003-01-21 Havoc Pennington <hp at pobox.com>
-+
-+ (patch untested because can't compile)
-+
-+ * bus/driver.c (create_unique_client_name): make this function
-+ never recycle client names. Also, caller should initialize
-+ the DBusString.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_get_current_time): new function
-+
-+2003-01-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_double),
-+ (_dbus_marshal_int32), (_dbus_marshal_uint32),
-+ (_dbus_marshal_int32_array), (_dbus_marshal_uint32_array),
-+ (_dbus_marshal_double_array), (_dbus_marshal_string_array),
-+ (_dbus_demarshal_int32_array), (_dbus_demarshal_uint32_array),
-+ (_dbus_demarshal_double_array), (_dbus_demarshal_string_array),
-+ (_dbus_marshal_get_field_end_pos), (_dbus_marshal_test):
-+ * dbus/dbus-marshal.h:
-+ * dbus/dbus-protocol.h:
-+ Add support for marshalling and demarshalling integer, double
-+ and string arrays.
-+
-+2003-01-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/Makefile.am:
-+ Add driver.[ch]
-+
-+ * bus/connection.c: (connection_disconnect_handler):
-+ Remove the connection from the bus driver's list.
-+
-+ (connection_watch_callback): Dispatch messages.
-+
-+ (free_connection_data): Free connection name.
-+
-+ (bus_connection_setup): Add connection to the bus driver's list.
-+ (bus_connection_remove_owned_service):
-+ (bus_connection_set_name), (bus_connection_get_name):
-+ Add functions for setting and getting the connection's name.
-+
-+ * bus/connection.h:
-+ Add function headers.
-+
-+ * bus/driver.c: (create_unique_client_name),
-+ (bus_driver_handle_hello_message),
-+ (bus_driver_send_welcome_message), (bus_driver_message_handler),
-+ (bus_driver_add_connection), (bus_driver_remove_connection):
-+ * bus/driver.h:
-+ * bus/main.c:
-+ * bus/services.c: (bus_service_free):
-+ * bus/services.h:
-+ New file that handles communication and registreation with the bus
-+ itself.
-+
-+2003-01-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-connection.c: (dbus_connection_send_message):
-+ Add a new client_serial parameter.
-+
-+ (dbus_connection_send_message_with_reply):
-+ Remove a @todo since we've implemented the blocking function.
-+
-+ (dbus_connection_send_message_with_reply_and_block):
-+ New function that sends a message and waits for a reply and
-+ then returns the reply.
-+
-+ * dbus/dbus-connection.h:
-+ Add new functions.
-+
-+ * dbus/dbus-errors.c: (dbus_result_to_string):
-+ * dbus/dbus-errors.h:
-+ Add new DBUS_RESULT.
-+
-+ * dbus/dbus-message-internal.h:
-+ * dbus/dbus-message.c: (_dbus_message_get_reply_serial),
-+ (_dbus_message_set_sender), (dbus_message_write_header),
-+ (dbus_message_new_reply), (decode_header_data),
-+ (_dbus_message_loader_return_buffer), (_dbus_message_test):
-+ * dbus/dbus-message.h:
-+ Add new functions that set the reply serial and sender.
-+ Also marshal and demarshal them correctly and add test.
-+
-+ * dbus/dbus-protocol.h:
-+ Add new DBUS_MESSAGE_TYPE_SENDER.
-+
-+ * glib/dbus-glib.h:
-+ * glib/dbus-gmain.c: (watch_callback), (free_callback_data),
-+ (add_watch), (remove_watch), (add_timeout), (remove_timeout),
-+ (dbus_connection_hookup_with_g_main):
-+ * glib/test-dbus-glib.c: (main):
-+ Rewrite to use GIOChannel and remove the GSource crack.
-+
-+ * test/echo-client.c: (main):
-+ * test/watch.c: (check_messages):
-+ Update for changed APIs
-+
-+2003-01-19 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/Makefile.am: Add dbus-timeout.[cħ]
-+
-+ * dbus/dbus-connection.c: (_dbus_connection_new_for_transport):
-+ Create a DBusTimeoutList.
-+ (dbus_connection_set_timeout_functions): Add new function to
-+ set timeout callbacks
-+
-+ * dbus/dbus-connection.h: Add public DBusTimeout API.
-+
-+ * dbus/dbus-message.c: (dbus_message_get_service):
-+ * dbus/dbus-message.h: New function.
-+
-+ * dbus/dbus-server.c: Fix small doc typo.
-+
-+ * dbus/dbus-timeout.[ch]: New files for mainloop timeouts.
-+
-+2003-01-19 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-string.c (_dbus_string_move_len): Don't delete all
-+ of the string, just as long as specified.
-+
-+2003-01-19 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_get_is_authenticated):
-+ new function
-+
-+ * dbus/dbus-server.c (dbus_server_set_max_connections)
-+ (dbus_server_get_max_connections, dbus_server_get_n_connections):
-+ keep track of current number of connections, and add API for
-+ setting a max (but haven't implemented enforcing the max yet)
-+
-+2003-01-18 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-transport-unix.c (unix_do_iteration): only do the
-+ reading/writing if read_watch != NULL or write_watch != NULL.
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_return_buffer): fix
-+ the message loader code to actually load message->header and
-+ message->body into the newly-created message.
-+
-+ * dbus/dbus-transport-unix.c (check_write_watch): fix a mem leak
-+ in OOM case
-+
-+ * dbus/dbus-connection.c (dbus_connection_set_max_message_size)
-+ (dbus_connection_get_max_message_size)
-+ (dbus_connection_set_max_live_messages_size)
-+ (dbus_connection_get_max_live_messages_size): implement some
-+ resource limitation functions
-+
-+ * dbus/dbus-resources.c: new file implementing some of the
-+ resource limits stuff
-+
-+ * dbus/dbus-message.c (dbus_message_iter_get_byte_array): add
-+ missing docs, add @todo to handle OOM etc.
-+
-+ * dbus/dbus-marshal.c (_dbus_demarshal_byte_array): add missing
-+ docs
-+
-+2003-01-18 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-connection.c (dbus_connection_unref): disconnect the
-+ connection if it hasn't been already.
-+
-+ * dbus/dbus-connection.h: kill off the idea of an ErrorFunction,
-+ replace with DisconnectFunction.
-+
-+2003-01-18 Havoc Pennington <hp at pobox.com>
-+
-+ Building --disable-verbose-mode --disable-asserts --disable-tests
-+ cuts the library from 112K to 45K or so
-+
-+ * configure.in: check for varargs macro support,
-+ add --enable-verbose-mode, --enable-asserts.
-+
-+ * dbus/dbus-internals.h (_dbus_assert): support
-+ DBUS_DISABLE_ASSERT
-+ (_dbus_verbose): support DBUS_ENABLE_VERBOSE_MODE
-+
-+2003-01-18 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-test.c: include config.h so that tests actually run
-+
-+ * dbus/dbus-string.c: add assertions that stuff is 8-byte aligned,
-+ so the failure mode when that assumption fails will be plenty
-+ obvious.
-+
-+2003-01-18 Havoc Pennington <hp at pobox.com>
-+
-+ * configure.in: default --enable-tests to $USE_MAINTAINER_MODE
-+
-+ * dbus/Makefile.am: fix it up so dubs-test-main.c is included in
-+ the distribution
-+
-+ * test/Makefile.am: don't use special variable "TESTS" for echo-*
-+ since we don't want to use those in make check
-+
-+2003-01-15 Havoc Pennington <hp at redhat.com>
-+
-+ Release 0.2
-+
-+ * NEWS: update
-+
-+2003-01-15 Havoc Pennington <hp at redhat.com>
-+
-+ * test/Makefile.am: fix so that test source code ends up in the
-+ distribution on make distcheck
-+
-+2003-01-15 Havoc Pennington <hp at redhat.com>
-+
-+ Release 0.1.
-+
-+ * NEWS: update
-+
-+2003-01-15 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-test.c (dbus_internal_symbol_do_not_use_run_tests):
-+ fix build when --disable-tests
-+
-+ * Makefile.am (EXTRA_DIST): put HACKING in here
-+
-+ * HACKING: document procedure for making a tarball release.
-+
-+2003-01-14 Anders Carlsson <andersca at codefactory.se>
-+
-+ * bus/connection.c: (connection_error_handler),
-+ (bus_connection_setup):
-+ * bus/main.c: (main):
-+ Make sure that the DBusConnectionData struct is NULLed
-+ out to prevent a segfault.
-+
-+ * dbus/dbus-errors.c: (dbus_result_to_string):
-+ * dbus/dbus-errors.h:
-+ * dbus/dbus-message.c: (dbus_message_get_fields),
-+ (dbus_message_get_fields_valist), (_dbus_message_test):
-+ * dbus/dbus-message.h:
-+ Make dbus_message_get_fields return a result code so we can
-+ track invalid fields as well as oom.
-+
-+2003-01-11 Havoc Pennington <hp at pobox.com>
-+
-+ * configure.in: change --enable-test/--enable-ansi action-if-given
-+ to enable_foo=$enableval instead of enable_foo=yes
-+
-+2003-01-08 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-string.c (_dbus_string_align_length): new function
-+
-+ * dbus/dbus-test-main.c: move main() for test app here
-+ * dbus/dbus-test.c
-+ (dbus_internal_symbol_do_not_use_run_tests): we have to export a
-+ symbol to run tests, because dbus-test isn't in the main
-+ library
-+
-+ Code review nitpicks.
-+
-+ * dbus/dbus-message.c (dbus_message_write_header): add newlines
-+ for people with narrow emacs ;-). Assert client_serial was filled
-+ in. Assert message->name != NULL.
-+ (dbus_message_append_fields): have "first_field_type" arg separate
-+ from va list, needed for C++ binding that also uses varargs IIRC
-+ and helps with type safety
-+ (dbus_message_new): add @todo about using DBusString to store
-+ service/name internally
-+ (dbus_message_new): don't leak ->service and ->name on OOM later
-+ in the function
-+ (dbus_message_unref): free the service name
-+ (dbus_message_get_fields): same change to varargs
-+ i.e. first_field_type
-+ (_dbus_message_loader_return_buffer): assert that the message data
-+ is aligned (if not it's a bug in our code). Put in verbose griping
-+ about why we set corrupted = TRUE.
-+ (decode_header_data): add FIXME that char* is evil. Was going to
-+ add FIXME about evil locale-specific string.h strncmp, but just
-+ switched to wacky string-as-uint32 optimization. Move check for
-+ "no room for field name" above get_const_data_len() to avoid
-+ assertion failure in get_const_data_len if we have trailing 2
-+ bytes or the like. Check for service and name fields being
-+ provided twice. Don't leak service/name on error. Require field
-+ names to be aligned to 4 bytes.
-+
-+ * dbus/dbus-marshal.c: move byte swap stuff to header
-+ (_dbus_pack_int32): uscore-prefix
-+ (_dbus_unpack_int32): uscore-prefix
-+ (_dbus_unpack_uint32): export
-+ (_dbus_demarshal_string): add @todo complaining about use of
-+ memcpy()
-+ (_dbus_marshal_get_field_end_pos): add @todo about bad error
-+ handling allowing corrupt data to go unchecked
-+
-+2003-01-08 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-transport-unix.c (unix_do_iteration): add read/write
-+ to the select() as needed for authentication. (should be using
-+ _dbus_poll() not select, but for another day)
-+
-+ * dbus/dbus.h: include dbus/dbus-protocol.h
-+
-+2003-01-08 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/Makefile.am (dbusinclude_HEADERS): Install
-+ dbus-connection.h
-+
-+2003-01-08 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-internals.c: (_dbus_type_to_string):
-+ New function that returns a string describing a type.
-+
-+ * dbus/dbus-marshal.c: (_dbus_demarshal_byte_array):
-+ * dbus/dbus-marshal.h:
-+ * dbus/dbus-message.c: (dbus_message_get_fields_valist),
-+ (dbus_message_iter_get_field_type), (dbus_message_iter_get_double),
-+ (dbus_message_iter_get_byte_array):
-+ * dbus/dbus-message.h:
-+ Add new convenience functions for appending and getting message fields.
-+ Also add demarshalling routines for byte arrays.
-+
-+2003-01-07 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-connection-internal.h:
-+ * dbus/dbus-connection.c: (_dbus_connection_new_for_transport),
-+ (_dbus_connection_get_next_client_serial),
-+ (dbus_connection_send_message):
-+ * dbus/dbus-internals.h:
-+ * dbus/dbus-marshal.c: (unpack_uint32), (dbus_unpack_int32),
-+ (dbus_pack_int32), (_dbus_marshal_double), (_dbus_marshal_int32),
-+ (_dbus_marshal_uint32), (_dbus_demarshal_double),
-+ (_dbus_demarshal_int32), (_dbus_demarshal_uint32),
-+ (_dbus_demarshal_string), (_dbus_marshal_get_field_end_pos),
-+ (_dbus_verbose_bytes), (_dbus_marshal_test):
-+ * dbus/dbus-marshal.h:
-+ * dbus/dbus-message-internal.h:
-+ * dbus/dbus-message.c: (_dbus_message_set_client_serial),
-+ (dbus_message_write_header), (_dbus_message_lock),
-+ (dbus_message_new), (dbus_message_ref), (dbus_message_unref),
-+ (dbus_message_get_name), (dbus_message_append_int32),
-+ (dbus_message_append_uint32), (dbus_message_append_double),
-+ (dbus_message_append_string), (dbus_message_append_byte_array),
-+ (dbus_message_get_fields_iter), (dbus_message_iter_ref),
-+ (dbus_message_iter_unref), (dbus_message_iter_has_next),
-+ (dbus_message_iter_next), (dbus_message_iter_get_field_type),
-+ (dbus_message_iter_get_string), (dbus_message_iter_get_int32),
-+ (dbus_message_iter_get_uint32), (dbus_message_iter_get_double),
-+ (decode_header_data), (_dbus_message_loader_return_buffer),
-+ (message_iter_test), (_dbus_message_test):
-+ * dbus/dbus-message.h:
-+ * dbus/dbus-protocol.h:
-+ * dbus/dbus-test.c: (main):
-+ * dbus/dbus-test.h:
-+ * glib/test-dbus-glib.c: (message_handler), (main):
-+ * test/echo-client.c: (main):
-+ * test/watch.c: (check_messages):
-+ Make messages sendable and receivable for real.
-+
-+2003-01-07 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_double),
-+ (_dbus_marshal_string), (_dbus_marshal_byte_array):
-+ * dbus/dbus-message.c: (dbus_message_append_int32),
-+ (dbus_message_append_uint32), (dbus_message_append_double),
-+ (dbus_message_append_string), (dbus_message_append_byte_array):
-+ Handle OOM restoration.
-+
-+2003-01-07 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_string),
-+ (_dbus_demarshal_string), (_dbus_marshal_test):
-+ * dbus/dbus-marshal.h:
-+ * dbus/dbus-message.c: (dbus_message_get_name),
-+ Document these functions.
-+
-+ (dbus_message_append_int32), (dbus_message_append_uint32),
-+ (dbus_message_append_double), (dbus_message_append_string),
-+ (dbus_message_append_byte_array):
-+ * dbus/dbus-message.h:
-+ Add functions for adding message fields of different types.
-+
-+ * dbus/dbus-protocol.h:
-+ Add the different types.
-+
-+2003-01-05 Havoc Pennington <hp at pobox.com>
-+
-+ * bus/connection.c: implement routines for handling connections,
-+ first thing is keeping a list of owned services on each connection
-+ and setting up watches etc.
-+
-+ * bus/services.c: implement a mapping from service names to lists
-+ of connections
-+
-+ * dbus/dbus-hash.c: add DBUS_HASH_POINTER
-+
-+ * dbus/dbus-threads.c (dbus_static_mutex_lock): add functions
-+ to use static mutexes for global data
-+
-+ * dbus/dbus-connection.c (dbus_connection_set_data): add new
-+ collection of functions to set/get application-specific data
-+ on the DBusConnection.
-+
-+2003-01-04 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-sysdeps.c (_dbus_sleep_milliseconds): new function
-+ (_dbus_poll): new function
-+
-+ * dbus/dbus-internals.h (_DBUS_STRUCT_OFFSET): new macro
-+ copied from GLib
-+
-+ * bus/loop.c: initial code for the daemon main loop
-+
-+2003-01-04 Havoc Pennington <hp at pobox.com>
-+
-+ * test/watch.c (error_handler): make it safe if the error handler
-+ is called multiple times (if we s/error handler/disconnect
-+ handler/ we should just guarantee it's called only once)
-+
-+ * dbus/dbus-transport.c (_dbus_transport_disconnect): call the
-+ error handler on disconnect (it's quite possible we should
-+ just change the error handler to a "disconnect handler," I'm
-+ not sure we have any other meaningful errors)
-+
-+ * configure.in: check for getpwnam_r
-+
-+ * dbus/dbus-transport.c, dbus/dbus-transport-unix.c,
-+ dbus/dbus-auth.c: add credentials support, add EXTERNAL auth
-+ mechanism as in SASL spec, using socket credentials
-+
-+ * dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): new function
-+ (_dbus_send_credentials_unix_socket): new function
-+
-+ * dbus/dbus-sysdeps.c (_dbus_accept_unix_socket): rename just
-+ dbus_accept()
-+ (_dbus_write): only check errno if <0 returned
-+ (_dbus_write_two): ditto
-+
-+2003-01-02 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_utf8_string),
-+ (_dbus_marshal_byte_array), (_dbus_demarshal_utf8_string),
-+ (_dbus_marshal_test):
-+ * dbus/dbus-marshal.h:
-+ Add _dbus_marshal_byte_array and rename _dbus_marshal_string
-+ to _dbus_marshal_utf8_string. Also fix some tests.
-+
-+2002-12-28 Harri Porten <porten at kde.org>
-+
-+ * configure.in: added check for C++ compiler and a very cheesy
-+ check for the Qt integration
-+
-+ * Makefile.am (SUBDIRS): compile qt subdir if support is enabled
-+
-+ * qt/Makefile.am: added
-+
-+ * qt/.cvsignore: added
-+
-+ * qt/dbus-qthread.cc, qt/dbus-qthread.cpp: renamed former to
-+ latter, added #ifdef QT_THREAD_SUPPORT guard.
-+
-+ * dbus/Makefile.am: added missing headers for make dist
-+
-+2002-12-28 Kristian Rietveld <kris at gtk.org>
-+
-+ * dbus/Makefile.am: fixup export-symbols-regex.
-+
-+2002-12-27 Anders Carlsson <andersca at codefactory.se>
-+
-+ * acinclude.m4: Add this file and put the
-+ PKG_CHECK_MODULE macro in it.
-+
-+2002-12-27 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_string),
-+ (_dbus_demarshal_double), (_dbus_demarshal_int32),
-+ (_dbus_demarshal_uint32), (_dbus_demarshal_string),
-+ (_dbus_marshal_test):
-+ Make the demarshalling routines align the pos argument.
-+ Add string marshalling tests and fix the obvious bugs
-+ discovered.
-+
-+2002-12-26 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-auth.c: fixes fixes fixes
-+
-+ * dbus/dbus-transport-unix.c: wire up support for
-+ encoding/decoding data on the wire
-+
-+ * dbus/dbus-auth.c (_dbus_auth_encode_data)
-+ (_dbus_auth_decode_data): append to target string
-+ instead of nuking it.
-+
-+2002-12-26 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-marshal.h (DBUS_COMPILER_BYTE_ORDER): #ifdef
-+ WORDS_BIGENDIAN then compiler byte order is DBUS_BIG_ENDIAN,
-+ doh
-+
-+ * dbus/dbus-marshal.c: Add macros to do int swapping in-place and
-+ avoid swap_bytes() overhead (ignoring possible assembly stuff for
-+ now). Main point is because I wanted unpack_uint32 to implement
-+ _dbus_verbose_bytes
-+ (_dbus_verbose_bytes): new function
-+
-+ * dbus/dbus-string.c (_dbus_string_validate_ascii): new function
-+
-+ * dbus/dbus-message.c (_dbus_message_loader_get_is_corrupted): add
-+ mechanism to handle a corrupt message stream
-+ (_dbus_message_loader_new): fix preallocation to only prealloc,
-+ not prelengthen
-+
-+ * dbus/dbus-string.c (_dbus_string_skip_blank): fix this function
-+ (_dbus_string_test): enhance tests for copy/move and fix the
-+ functions
-+
-+ * dbus/dbus-transport-unix.c: Hold references in more places to
-+ avoid reentrancy problems
-+
-+ * dbus/dbus-transport.c: ditto
-+
-+ * dbus/dbus-connection.c (dbus_connection_dispatch_message): don't
-+ leak reference count in no-message case
-+
-+ * test/watch.c (do_mainloop): handle adding/removing watches
-+ during iteration over the watches. Also, ref the connection/server
-+ stored on a watch, so we don't try to mangle a destroyed one.
-+
-+ * dbus/dbus-transport-unix.c (do_authentication): perform
-+ authentication
-+
-+ * dbus/dbus-auth.c (get_state): add a state
-+ AUTHENTICATED_WITH_UNUSED_BYTES and return it if required
-+ (_dbus_auth_get_unused_bytes): append the unused bytes
-+ to the passed in string, rather than prepend
-+
-+ * dbus/dbus-transport.c (_dbus_transport_init_base): create
-+ the auth conversation DBusAuth
-+
-+ * dbus/dbus-transport-unix.c (_dbus_transport_new_for_fd)
-+ (_dbus_transport_new_for_domain_socket): when creating a
-+ transport, pass in whether it's a client-side or server-side
-+ transport so we know which DBusAuth to create
-+
-+2002-12-03 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-transport-unix.c (unix_finalize): finalize base
-+ _after_ finalizing the derived members
-+ (unix_connection_set): unref watch if we fail to add it
-+
-+ * dbus/dbus-connection.c (dbus_connection_unref): delete the
-+ transport first, so that the connection owned by the
-+ transport will be valid as the transport finalizes.
-+
-+ * dbus/dbus-transport-unix.c (unix_finalize): free the write_watch
-+ if necessary, and remove watches from the connection.
-+
-+ * dbus/dbus-watch.c (_dbus_watch_list_free): improve a comment
-+
-+2002-12-26 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/dbus-marshal.c: (_dbus_marshal_string),
-+ (_dbus_demarshal_double), (_dbus_demarshal_int32),
-+ (_dbus_demarshal_uint32), (_dbus_demarshal_string),
-+ (_dbus_marshal_test):
-+ * dbus/dbus-marshal.h:
-+ Add string marshal functions and have the demarshal functions
-+ return the new position.
-+
-+2002-12-25 Havoc Pennington <hp at pobox.com>
-+
-+ * doc/dbus-sasl-profile.txt: docs on the authentication protocol,
-+ it is a simple protocol that just maps directly to SASL.
-+
-+ * dbus/dbus-auth.h, dbus/dbus-auth.c: authentication protocol
-+ initial implementation, not actually used yet.
-+
-+ * dbus/dbus-string.c (_dbus_string_find): new function
-+ (_dbus_string_equal): new function
-+ (_dbus_string_base64_encode): new function
-+ (_dbus_string_base64_decode): new function
-+
-+2002-12-25 Anders Carlsson <andersca at codefactory.se>
-+
-+ * dbus/Makefile.am:
-+ * dbus/dbus-marshal.c: (swap_bytes), (_dbus_marshal_double),
-+ (_dbus_marshal_int32), (_dbus_marshal_uint32),
-+ (_dbus_demarshal_double), (_dbus_demarshal_int32),
-+ (_dbus_demarshal_uint32), (_dbus_marshal_test):
-+ * dbus/dbus-marshal.h:
-+ * dbus/dbus-protocol.h:
-+ * dbus/dbus-test.c: (main):
-+ * dbus/dbus-test.h:
-+ Add un-optimized marshalling/demarshalling routines.
-+
-+2002-12-25 Harri Porten <porten at kde.org>
-+
-+ * qt/dbus-qt.h: adjusted ctor and getter to KDE/Qt conventions
-+
-+2002-12-24 Zack Rusin <zack at kde.org>
-+
-+ * qt/dbus-qthread.cc: adding - integrates QMutex into Dbus
-+ * qt/dbus-qt.h: skeleton with two sample implemenatation of the
-+ main loop stuff
-+
-+2002-12-24 Havoc Pennington <hp at pobox.com>
-+
-+ * glib/dbus-gthread.c: fix include
-+
-+ * glib/dbus-glib.h: rename DBusMessageHandler for now.
-+ I think glib API needs to change, though, as you don't
-+ want to use DBusMessageFunction, you want to use the
-+ DBusMessageHandler object. Probably
-+ dbus_connection_open_with_g_main_loop()
-+ and dbus_connection_setup_g_main_loop() or something like that
-+ (but think of better names...) that just create a connection
-+ that has watch/timeout functions etc. already set up.
-+
-+ * dbus/dbus-connection.c
-+ (dbus_connection_send_message_with_reply): new function just to
-+ show how the message handler helps us deal with replies.
-+
-+ * dbus/dbus-list.c (_dbus_list_remove_last): new function
-+
-+ * dbus/dbus-string.c (_dbus_string_test): free a string that
-+ wasn't
-+
-+ * dbus/dbus-hash.c: use memory pools for the hash entries
-+ (rebuild_table): be more paranoid about overflow, and
-+ shrink table when we can
-+ (_dbus_hash_test): reduce number of sprintfs and write
-+ valid C89. Add tests for case where we grow and then
-+ shrink the hash table.
-+
-+ * dbus/dbus-mempool.h, dbus/dbus-mempool.c: memory pools
-+
-+ * dbus/dbus-connection.c (dbus_connection_register_handler)
-+ (dbus_connection_unregister_handler): new functions
-+
-+ * dbus/dbus-message.c (dbus_message_get_name): new
-+
-+ * dbus/dbus-list.c: fix docs typo
-+
-+ * dbus/dbus-message-handler.h, dbus/dbus-message-handler.c:
-+ an object representing a handler for messages.
-+
-+2002-12-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * glib/dbus-glib.h:
-+ * glib/dbus-gthread.c: (dbus_gthread_init):
-+ Don't use the gdbus prefix for public functions.
-+
-+2002-12-16 Anders Carlsson <andersca at codefactory.se>
-+
-+ * Makefile.am:
-+ * configure.in:
-+ Add GLib checks and fixup .pc files
-+
-+ * glib/Makefile.am:
-+ * glib/dbus-glib.h:
-+ * glib/dbus-gmain.c: (gdbus_connection_prepare),
-+ (gdbus_connection_check), (gdbus_connection_dispatch),
-+ (gdbus_add_connection_watch), (gdbus_remove_connection_watch),
-+ (dbus_connection_gsource_new):
-+ * glib/dbus-gthread.c: (dbus_gmutex_new), (dbus_gmutex_free),
-+ (dbus_gmutex_lock), (dbus_gmutex_unlock), (dbus_gthread_init):
-+ * glib/test-dbus-glib.c: (message_handler), (main):
-+ Add GLib support.
-+
-+2002-12-15 Harri Porten <porten at kde.org>
-+
-+ * autogen.sh: check for libtoolize before attempting to use it
-+
-+ * dbus/dbus-transport-unix.c: include <sys/time.h> for timeval
-+ struct.
-+
-+ * .cvsignore: ignore more stamp files
-+
-+ * dbus/dbus-watch.c (_dbus_watch_list_new): fixed doc error
-+
-+ * test/Makefile.am: added -I$(top_srcdir) to be able to compile
-+ without make install.
-+
-+2002-12-15 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-threads.c: add thread stubs that a higher library
-+ layer can fill in. e.g. the GLib wrapper might fill them in with
-+ GThread stuff. We still need to use this thread API to
-+ thread-safe-ize the library.
-+
-+2002-12-12 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-transport-unix.c, dbus/dbus-server-unix.c: use the
-+ below new interfaces and include fewer system headers.
-+
-+ * dbus/dbus-sysdeps.c (_dbus_read): new function
-+ (_dbus_write): new function
-+ (_dbus_write_two): new function
-+ (_dbus_connect_unix_socket): new function
-+ (_dbus_listen_unix_socket): new function
-+
-+ * dbus/dbus-message-internal.h: change interfaces to use
-+ DBusString
-+
-+2002-12-11 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-types.h: add dbus_unichar
-+
-+ * dbus/dbus-internals.c (_dbus_verbose): use _dbus_getenv
-+
-+ * dbus/dbus-connection.c (dbus_connection_send_message): return
-+ TRUE on success
-+
-+ * dbus/dbus-transport.c: include dbus-watch.h
-+
-+ * dbus/dbus-connection.c: include dbus-message-internal.h
-+
-+ * HACKING: add file with coding guidelines stuff.
-+
-+ * dbus/dbus-string.h, dbus/dbus-string.c: Encapsulate all string
-+ handling here, for security purposes (as in vsftpd). Not actually
-+ using this class yet.
-+
-+ * dbus/dbus-sysdeps.h, dbus/dbus-sysdeps.c: Encapsulate all
-+ system/libc usage here, as in vsftpd, for ease of auditing (and
-+ should also simplify portability). Haven't actually moved all the
-+ system/libc usage into here yet.
-+
-+2002-11-25 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-internals.c (_dbus_verbose): fix to not
-+ always print the first verbose message.
-+
-+2002-11-24 Havoc Pennington <hp at pobox.com>
-+
-+ * test/echo-client.c, test/echo-server.c: cheesy test
-+ clients.
-+
-+ * configure.in (AC_CHECK_FUNCS): check for writev
-+
-+ * dbus/dbus-message.c (_dbus_message_get_network_data): new
-+ function
-+
-+ * dbus/dbus-list.c (_dbus_list_foreach): new function
-+
-+ * dbus/dbus-internals.c (_dbus_verbose): new function
-+
-+ * dbus/dbus-server.c, dbus/dbus-server.h: public object
-+ representing a server that listens for connections.
-+
-+ * dbus/.cvsignore: create
-+
-+ * dbus/dbus-errors.h, dbus/dbus-errors.c:
-+ public API for reporting errors
-+
-+ * dbus/dbus-connection.h, dbus/dbus-connection.c:
-+ public object representing a connection that
-+ sends/receives messages. (Same object used for
-+ both client and server.)
-+
-+ * dbus/dbus-transport.h, dbus/dbus-transport.c:
-+ Basic abstraction for different kinds of stream
-+ that we might read/write messages from.
-+
-+2002-11-23 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-internals.h (_DBUS_INT_MAX): add _DBUS_INT_MIN
-+ _DBUS_INT_MAX
-+
-+ * dbus/dbus-test.c (main): add list test, and include
-+ dbus-test.h as intended
-+
-+ * dbus/dbus-hash.c (_dbus_hash_table_remove_string)
-+ (_dbus_hash_table_remove_int): return value indicates
-+ whether the entry existed to remove
-+
-+ * dbus/dbus-list.c: add linked list utility class,
-+ with docs and tests
-+
-+ * dbus/dbus-hash.c: add TODO item about shrinking the hash bucket
-+ array sometimes.
-+
-+2002-11-23 Havoc Pennington <hp at pobox.com>
-+
-+ * Doxyfile.in (INCLUDE_FILE_PATTERNS): expand DBUS_BEGIN_DECLS/
-+ DBUS_END_DECLS to nothing, that should fix this once and for all
-+
-+ * Doxyfile.in (JAVADOC_AUTOBRIEF): set to YES
-+
-+ * dbus/dbus-message.c, dbus/dbus-hash.c:
-+ add some missing @brief
-+
-+2002-11-23 Havoc Pennington <hp at pobox.com>
-+
-+ * dbus/dbus-message.h: put semicolons after DEBUG_BEGIN_DECLS
-+ to avoid confusing Doxygen
-+
-+ * dbus/dbus-hash.c: @} not }@
-+
-+ * dbus/dbus-message.c (struct DBusMessage): split out
-+ internals docs
-+
-+2002-11-23 Havoc Pennington <hp at pobox.com>
-+
-+ * configure.in: pile on more warning flags if using gcc
-+
-+ * Doxyfile.in (EXTRACT_STATIC): set to NO, so we don't have
-+ to document static functions
-+
-+ * configure.in: add summary to end of configure so it
-+ looks nice and attractive
-+
-+ * dbus/dbus-hash.c: finish implementation and write unit
-+ tests and docs
-+
-+ * configure.in: add --enable-tests to enable unit tests
-+
-+ * dbus/dbus-test.c: test program to run unit tests
-+ for all files in dbus/*, initially runs a test for
-+ dbus-hash.c
-+
-+ * dbus/dbus-internals.h: file to hold some internal utility stuff
-+
-+2002-11-22 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-hash.c: copy in Tcl hash table, not yet
-+ "ported" away from Tcl
-+
-+ * dbus/dbus-types.h: header for types such as dbus_bool_t
-+
-+2002-11-22 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus.h: fixups for doc warnings
-+
-+ * Doxyfile.in (FILE_PATTERNS): we need to scan .h to pick up
-+ macros
-+ (QUIET): make it quiet so we can see warnings
-+
-+ * dbus/dbus-memory.c: teach D-BUS to allocate and free memory
-+
-+2002-11-22 Havoc Pennington <hp at redhat.com>
-+
-+ * Makefile.am: include "Doxyfile" target in all-local
-+
-+ * configure.in: generate the Doxyfile
-+
-+ * Doxyfile.in: move Doxyfile here, so we can use
-+ configure to generate a Doxyfile with the right
-+ version number etc.
-+
-+2002-11-22 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/dbus-message.c: move inline docs into .c file
-+
-+ * Doxyfile (OUTPUT_DIRECTORY): move output to doc/api
-+ so all docs are under doc/
-+ (MAN_EXTENSION): generate man pages. Use extension
-+ ".3dbus" which matches ".3qt" on my system,
-+ I guess this is OK, I don't know really.
-+ (FILE_PATTERNS): look for .c files not .h, makes sense
-+ for plain C I think
-+
-+2002-11-22 Havoc Pennington <hp at pobox.com>
-+
-+ * Makefile.am (SUBDIRS): rename subdir "server" to "bus"
-+ because any app can be a server, and any app can be a client,
-+ the bus is a special kind of server.
-+
-+Thu Nov 21 23:35:31 2002 Zack Rusin <zack at kde.org>
-+
-+ * Doxyfile : adding. Still needs Makefile rules to be generated
-+ automatically (just run "doxygen" in the toplevel dir for now to
-+ generate docs)
-+
-+ * dbus/dbus-message.h : Adding sample docs (javadoc since
-+ resembles gtk-doc a little more)
-+
-+ * dbus/dbus.h : Adding sample docs
-+
-+2002-11-21 Havoc Pennington <hp at redhat.com>
-+
-+ * dbus/Makefile.am (INCLUDES): define DBUS_COMPILATION
-+ so we can allow ourselves to include files directly,
-+ instead of having to use dbus.h
-+
-+ * dbus/dbus.h: fill in
-+
-+ * dbus/dbus-message.h: sketch out a sample header file.
-+ Include griping if you include it directly instead of
-+ via dbus.h
-+
-+ * dbus/dbus-macros.h: new file with macros for extern "C",
-+ TRUE/FALSE, NULL, etc.
-+
-+ * doc/file-boilerplate.c: put include guards in here
-+
-+2002-11-21 Havoc Pennington <hp at redhat.com>
-+
-+ * doc/file-boilerplate.c: include both AFL and GPL boilerplate.
-+
-+ * COPYING: include the GPL as well, and license code
-+ under both AFL and GPL.
-+
-+2002-11-21 Havoc Pennington <hp at redhat.com>
-+
-+ * acconfig.h: get rid of this
-+
-+ * autogen.sh (run_configure): add --no-configure option
-+
-+ * configure.in: remove AC_ARG_PROGRAM to make
-+ autoconf complain less. add AC_PREREQ.
-+ add AC_DEFINE third arg.
-+
-+2002-11-21 Anders Carlsson <andersca at codefactory.se>
-+
-+ * doc/Makefile.am:
-+ Fix references so we can distcheck.
-+
-+2002-11-21 Havoc Pennington <hp at redhat.com>
-+
-+ * Initial module creation
-+
-diff -Naur dbus-0.61.orig/Doxyfile.in dbus-0.61/Doxyfile.in
---- dbus-0.61.orig/Doxyfile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/Doxyfile.in 2004-06-02 15:13:14.000000000 +0200
-@@ -0,0 +1,180 @@
-+# Doxyfile 0.1
-+
-+#---------------------------------------------------------------------------
-+# General configuration options
-+#---------------------------------------------------------------------------
-+PROJECT_NAME = D-BUS
-+PROJECT_NUMBER = @VERSION@
-+OUTPUT_DIRECTORY = doc/api
-+OUTPUT_LANGUAGE = English
-+EXTRACT_ALL = NO
-+EXTRACT_PRIVATE = NO
-+EXTRACT_STATIC = NO
-+HIDE_UNDOC_MEMBERS = NO
-+HIDE_UNDOC_CLASSES = NO
-+BRIEF_MEMBER_DESC = YES
-+REPEAT_BRIEF = YES
-+ALWAYS_DETAILED_SEC = NO
-+FULL_PATH_NAMES = NO
-+STRIP_FROM_PATH =
-+INTERNAL_DOCS = NO
-+STRIP_CODE_COMMENTS = YES
-+CASE_SENSE_NAMES = YES
-+SHORT_NAMES = NO
-+HIDE_SCOPE_NAMES = NO
-+VERBATIM_HEADERS = YES
-+SHOW_INCLUDE_FILES = YES
-+JAVADOC_AUTOBRIEF = YES
-+INHERIT_DOCS = YES
-+INLINE_INFO = YES
-+SORT_MEMBER_DOCS = YES
-+DISTRIBUTE_GROUP_DOC = NO
-+TAB_SIZE = 8
-+GENERATE_TODOLIST = YES
-+GENERATE_TESTLIST = YES
-+GENERATE_BUGLIST = YES
-+ALIASES =
-+ENABLED_SECTIONS =
-+MAX_INITIALIZER_LINES = 30
-+OPTIMIZE_OUTPUT_FOR_C = YES
-+SHOW_USED_FILES = YES
-+#---------------------------------------------------------------------------
-+# configuration options related to warning and progress messages
-+#---------------------------------------------------------------------------
-+QUIET = YES
-+WARNINGS = YES
-+WARN_IF_UNDOCUMENTED = YES
-+WARN_FORMAT =
-+WARN_LOGFILE =
-+#---------------------------------------------------------------------------
-+# configuration options related to the input files
-+#---------------------------------------------------------------------------
-+INPUT = dbus glib
-+FILE_PATTERNS = *.c *.h
-+RECURSIVE = YES
-+#EXCLUDE = test
-+
-+# If the value of the INPUT tag contains directories, you can use the
-+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-+# certain files from those directories.
-+
-+EXCLUDE_PATTERNS = Makefile.* ChangeLog CHANGES CHANGES.* README \
-+ README.* *.png AUTHORS DESIGN DESIGN.* *.desktop \
-+ DESKTOP* COMMENTS HOWTO magic NOTES TODO THANKS
-+
-+# The EXAMPLE_PATH tag can be used to specify one or more files or
-+# directories that contain example code fragments that are included (see
-+# the \include command).
-+
-+EXAMPLE_PATH =
-+EXAMPLE_PATTERNS =
-+EXAMPLE_RECURSIVE = NO
-+IMAGE_PATH =
-+INPUT_FILTER =
-+FILTER_SOURCE_FILES = NO
-+#---------------------------------------------------------------------------
-+# configuration options related to source browsing
-+#---------------------------------------------------------------------------
-+SOURCE_BROWSER = YES
-+INLINE_SOURCES = NO
-+REFERENCED_BY_RELATION = YES
-+REFERENCES_RELATION = YES
-+#---------------------------------------------------------------------------
-+# configuration options related to the alphabetical class index
-+#---------------------------------------------------------------------------
-+ALPHABETICAL_INDEX = NO
-+COLS_IN_ALPHA_INDEX = 5
-+IGNORE_PREFIX =
-+#---------------------------------------------------------------------------
-+# configuration options related to the HTML output
-+#---------------------------------------------------------------------------
-+GENERATE_HTML = YES
-+HTML_OUTPUT =
-+HTML_HEADER =
-+HTML_FOOTER =
-+HTML_STYLESHEET =
-+HTML_ALIGN_MEMBERS = YES
-+GENERATE_HTMLHELP = NO
-+GENERATE_CHI = NO
-+BINARY_TOC = NO
-+TOC_EXPAND = NO
-+DISABLE_INDEX = NO
-+ENUM_VALUES_PER_LINE = 4
-+GENERATE_TREEVIEW = NO
-+TREEVIEW_WIDTH = 250
-+#---------------------------------------------------------------------------
-+# configuration options related to the LaTeX output
-+#---------------------------------------------------------------------------
-+GENERATE_LATEX = NO
-+LATEX_OUTPUT =
-+COMPACT_LATEX = NO
-+PAPER_TYPE = a4wide
-+EXTRA_PACKAGES =
-+LATEX_HEADER =
-+PDF_HYPERLINKS = NO
-+USE_PDFLATEX = NO
-+LATEX_BATCHMODE = NO
-+#---------------------------------------------------------------------------
-+# configuration options related to the RTF output
-+#---------------------------------------------------------------------------
-+GENERATE_RTF = NO
-+RTF_OUTPUT =
-+COMPACT_RTF = NO
-+RTF_HYPERLINKS = NO
-+RTF_STYLESHEET_FILE =
-+RTF_EXTENSIONS_FILE =
-+#---------------------------------------------------------------------------
-+# configuration options related to the man page output
-+#---------------------------------------------------------------------------
-+GENERATE_MAN = YES
-+MAN_OUTPUT = man
-+MAN_EXTENSION = .3dbus
-+MAN_LINKS = YES
-+#---------------------------------------------------------------------------
-+# configuration options related to the XML output
-+#---------------------------------------------------------------------------
-+GENERATE_XML = NO
-+#---------------------------------------------------------------------------
-+# Configuration options related to the preprocessor
-+#---------------------------------------------------------------------------
-+ENABLE_PREPROCESSING = YES
-+MACRO_EXPANSION = YES
-+EXPAND_ONLY_PREDEF = YES
-+SEARCH_INCLUDES = YES
-+INCLUDE_PATH =
-+INCLUDE_FILE_PATTERNS =
-+PREDEFINED = "DBUS_BEGIN_DECLS=" \
-+ "DBUS_END_DECLS=" \
-+ "DOXYGEN_SHOULD_SKIP_THIS" \
-+ "_DBUS_DEFINE_GLOBAL_LOCK(name)=" \
-+ "_DBUS_GNUC_PRINTF(from,to)="
-+SKIP_FUNCTION_MACROS = YES
-+#---------------------------------------------------------------------------
-+# Configuration::addtions related to external references
-+#---------------------------------------------------------------------------
-+TAGFILES =
-+GENERATE_TAGFILE =
-+ALLEXTERNALS = NO
-+PERL_PATH =
-+#---------------------------------------------------------------------------
-+# Configuration options related to the dot tool
-+#---------------------------------------------------------------------------
-+CLASS_DIAGRAMS = YES
-+HAVE_DOT = NO
-+CLASS_GRAPH = YES
-+COLLABORATION_GRAPH = YES
-+TEMPLATE_RELATIONS = YES
-+HIDE_UNDOC_RELATIONS = YES
-+INCLUDE_GRAPH = YES
-+INCLUDED_BY_GRAPH = YES
-+GRAPHICAL_HIERARCHY = YES
-+DOT_PATH =
-+DOTFILE_DIRS =
-+MAX_DOT_GRAPH_WIDTH = 640
-+MAX_DOT_GRAPH_HEIGHT = 1024
-+GENERATE_LEGEND = YES
-+DOT_CLEANUP = YES
-+#---------------------------------------------------------------------------
-+# Configuration::addtions related to the search engine
-+#---------------------------------------------------------------------------
-+SEARCHENGINE = NO
-diff -Naur dbus-0.61.orig/HACKING dbus-0.61/HACKING
---- dbus-0.61.orig/HACKING 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/HACKING 2005-03-29 20:27:35.000000000 +0200
-@@ -0,0 +1,200 @@
-+The guidelines in this file are the ideals; it's better to send a
-+not-fully-following-guidelines patch than no patch at all, though. We
-+can always polish it up.
-+
-+Mailing list
-+===
-+
-+The D-BUS mailing list is message-bus-list at freedesktop.org; discussion
-+of patches, etc. should go there.
-+
-+Security
-+===
-+
-+Most of D-BUS is security sensitive. Guidelines related to that:
-+
-+ - avoid memcpy(), sprintf(), strlen(), snprintf, strlcat(),
-+ strstr(), strtok(), or any of this stuff. Use DBusString.
-+ If DBusString doesn't have the feature you need, add it
-+ to DBusString.
-+
-+ There are some exceptions, for example
-+ if your strings are just used to index a hash table
-+ and you don't do any parsing/modification of them, perhaps
-+ DBusString is wasteful and wouldn't help much. But definitely
-+ if you're doing any parsing, reallocation, etc. use DBusString.
-+
-+ - do not include system headers outside of dbus-memory.c,
-+ dbus-sysdeps.c, and other places where they are already
-+ included. This gives us one place to audit all external
-+ dependencies on features in libc, etc.
-+
-+ - do not use libc features that are "complicated"
-+ and may contain security holes. For example, you probably shouldn't
-+ try to use regcomp() to compile an untrusted regular expression.
-+ Regular expressions are just too complicated, and there are many
-+ different libc's out there.
-+
-+ - we need to design the message bus daemon (and any similar features)
-+ to use limited privileges, run in a chroot jail, and so on.
-+
-+http://vsftpd.beasts.org/ has other good security suggestions.
-+
-+Coding Style
-+===
-+
-+ - The C library uses GNU coding conventions, with GLib-like
-+ extensions (e.g. lining up function arguments). The
-+ Qt wrapper uses KDE coding conventions.
-+
-+ - Write docs for all non-static functions and structs and so on. try
-+ "doxygen Doxyfile" prior to commit and be sure there are no
-+ warnings printed.
-+
-+ - All external interfaces (network protocols, file formats, etc.)
-+ should have documented specifications sufficient to allow an
-+ alternative implementation to be written. Our implementation should
-+ be strict about specification compliance (should not for example
-+ heuristically parse a file and accept not-well-formed
-+ data). Avoiding heuristics is also important for security reasons;
-+ if it looks funny, ignore it (or exit, or disconnect).
-+
-+Making a release
-+===
-+
-+To make a release of D-BUS, do the following:
-+
-+ - check out a fresh copy from CVS
-+
-+ - verify that the libtool versioning/library soname is
-+ changed if it needs to be, or not changed if not
-+
-+ - update the file NEWS based on the ChangeLog
-+
-+ - add a ChangeLog entry containing the version number
-+ you're releasing ("Released 0.3" or something)
-+ so people can see which changes were before and after
-+ a given release.
-+
-+ - "make distcheck" (DO NOT just "make dist" - pass the check!)
-+
-+ - if make distcheck fails, fix it.
-+
-+ - once distcheck succeeds, "cvs commit"
-+
-+ - if someone else made changes and the commit fails,
-+ you have to "cvs up" and run "make distcheck" again
-+
-+ - once the commit succeeds, "cvs tag DBUS_X_Y_Z" where
-+ X_Y_Z map to version X.Y.Z
-+
-+ - bump the version number up in configure.in, and commit
-+ it. Make sure you do this *after* tagging the previous
-+ release!
-+
-+ - scp your tarball to freedesktop.org server and copy it
-+ to /srv/dbus.freedesktop.org/releases. This should
-+ be possible if you're in group "dbus"
-+
-+ - update the wiki page http://www.freedesktop.org/Software/dbus by
-+ adding the new release under the Download heading. Then, cut the
-+ link and changelog for the previous that was there.
-+
-+ - update the wiki page
-+ http://www.freedesktop.org/Software/DbusReleaseArchive pasting the
-+ previous release. Note that bullet points for each of the changelog
-+ items must be indented three more spaces to conform to the
-+ formatting of the other releases there.
-+
-+ - post to dbus at lists.freedesktop.org announcing the release.
-+
-+
-+Environment variables
-+===
-+
-+These are the environment variables that are used by the D-BUS client library
-+
-+DBUS_VERBOSE=1
-+Turns on printing verbose messages. This only works if D-BUS has been
-+compiled with --enable-verbose-mode
-+
-+DBUS_MALLOC_FAIL_NTH=n
-+Can be set to a number, causing every nth call to dbus_alloc or
-+dbus_realloc to fail. This only works if D-BUS has been compiled with
-+--enable-tests.
-+
-+DBUS_MALLOC_FAIL_GREATER_THAN=n
-+Can be set to a number, causing every call to dbus_alloc or
-+dbus_realloc to fail if the number of bytes to be allocated is greater
-+than the specified number. This only works if D-BUS has been compiled with
-+--enable-tests.
-+
-+DBUS_TEST_MALLOC_FAILURES=n
-+Many of the D-BUS tests will run over and over, once for each malloc
-+involved in the test. Each run will fail a different malloc, plus some
-+number of mallocs following that malloc (because a fair number of bugs
-+only happen if two or more mallocs fail in a row, e.g. error recovery
-+that itself involves malloc). This env variable sets the number of
-+mallocs to fail.
-+Here's why you care: If set to 0, then the malloc checking is skipped,
-+which makes the test suite a heck of a lot faster. Just run with this
-+env variable unset before you commit.
-+
-+Tests
-+===
-+
-+These are the test programs that are built if dbus is compiled using
-+--enable-tests.
-+
-+dbus/dbus-test
-+This is the main unit test program that tests all aspects of the D-BUS
-+client library.
-+
-+dbus/bus-test
-+This it the unit test program for the message bus.
-+
-+test/break-loader
-+A test that tries to break the message loader by passing it randomly
-+created invalid messages.
-+
-+"make check" runs all the deterministic test programs (i.e. not break-loader).
-+
-+"make check-coverage" is available if you configure with --enable-gcov and
-+gives a complete report on test suite coverage. You can also run
-+"test/decode-gcov foo.c" on any source file to get annotated source,
-+after running make check with a gcov-enabled tree.
-+
-+Patches
-+===
-+
-+Please file them at http://bugzilla.freedesktop.org under component
-+dbus, and also post to the mailing list for discussion. The commit
-+rules are:
-+
-+ - for fixes that don't affect API or protocol, they can be committed
-+ if any one qualified reviewer other than patch author
-+ reviews and approves
-+
-+ - for fixes that do affect API or protocol, two people
-+ in the reviewer group have to review and approve the commit, and
-+ posting to the list is definitely mandatory
-+
-+ - if there's a live unresolved controversy about a change,
-+ don't commit it while the argument is still raging.
-+
-+ - regardless of reviews, to commit a patch:
-+ - make check must pass
-+ - the test suite must be extended to cover the new code
-+ as much as reasonably feasible
-+ - the patch has to follow the portability, security, and
-+ style guidelines
-+ - the patch should as much as reasonable do one thing,
-+ not many unrelated changes
-+ No reviewer should approve a patch without these attributes, and
-+ failure on these points is grounds for reverting the patch.
-+
-+The reviewer group that can approve patches: Havoc Pennington, Michael
-+Meeks, Alex Larsson, Zack Rusin, Joe Shaw, Mikael Hallendal, Richard
-+Hult, Owen Fraser-Green, Olivier Andrieu, Colin Walters.
-+
-+
-diff -Naur dbus-0.61.orig/Makefile.am dbus-0.61/Makefile.am
---- dbus-0.61.orig/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/Makefile.am 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,92 @@
-+
-+if HAVE_GLIB
-+ GLIB_SUBDIR=glib
-+ GLIB_PC=dbus-glib-1.pc
-+endif
-+
-+if HAVE_QT
-+ QT_SUBDIR=qt
-+endif
-+
-+if HAVE_QT3
-+ QT3_SUBDIR=qt3
-+endif
-+
-+if DBUS_USE_GCJ
-+ GCJ_SUBDIR=gcj
-+endif
-+
-+if DBUS_USE_CSC
-+ MONO_SUBDIR=mono
-+ MONO_PC=dbus-sharp.pc
-+endif
-+
-+if HAVE_PYTHON
-+ PYTHON_SUBDIR=python
-+endif
-+
-+## really we should require gcj/mcs/python also but since they are
-+## annoying to install, we don't for now
-+dist-local:
-+ if test -z "$(QT_SUBDIR)" || test -z "$(GLIB_SUBDIR)" ; then \
-+ echo "You have to build with Qt and GLib to make dist" ; \
-+ fi
-+
-+SUBDIRS=dbus bus doc $(GLIB_SUBDIR) $(GCJ_SUBDIR) $(MONO_SUBDIR) $(QT_SUBDIR) $(QT3_SUBDIR) $(PYTHON_SUBDIR) tools test
-+DIST_SUBDIRS=dbus bus doc glib qt qt3 gcj mono python tools test
-+
-+pkgconfigdir = $(libdir)/pkgconfig
-+pkgconfig_DATA = dbus-1.pc $(GLIB_PC) $(MONO_PC)
-+
-+DISTCLEANFILES = \
-+ dbus-1.pc \
-+ $(GLIB_PC) \
-+ $(MONO_PC)
-+
-+EXTRA_DIST = \
-+ HACKING \
-+ dbus-1.pc.in \
-+ dbus-glib-1.pc.in \
-+ dbus-sharp.pc.in
-+
-+all-local: Doxyfile
-+
-+if DBUS_GCOV_ENABLED
-+clean-gcov:
-+ find -name "*.da" -o -name "*.gcov" | xargs rm || true
-+
-+clean-bbg:
-+ find -name "*.bbg" -o -name "*.bb" | xargs rm || true
-+
-+GCOV_DIRS=dbus bus $(GLIB_SUBDIR) $(QT_SUBDIR)
-+
-+## .PHONY so it always rebuilds it
-+.PHONY: coverage-report.txt
-+coverage-report.txt:
-+ BBG_FILES=`find $(GCOV_DIRS) -name "*.bbg" -o -name "*.gcno"` ; \
-+ C_FILES= ; \
-+ for F in $$BBG_FILES ; do \
-+ F_nolibs=`echo $$F | sed -e 's/.libs\///g'` ; \
-+ C=`echo $$F_nolibs | sed -e 's/.bbg/.c/g' | sed -e 's/.gcno/.c/g'` ; \
-+ B=`basename $$F .bbg` ; \
-+ D=`dirname $$F` ; \
-+ DA=`echo $$F | sed -e 's/.bbg/.da/g'` ; \
-+ DA_libs=`echo $$D/.libs/$$B/.da` ; \
-+ if test -e $$DA || test -e $$DA_libs; then \
-+ C_FILES="$$C_FILES $$C" ; \
-+ fi ; \
-+ done ; \
-+ echo $$C_FILES ; \
-+ $(top_builddir)/test/decode-gcov --report $$C_FILES > coverage-report.txt
-+
-+check-coverage: clean-gcov all check coverage-report.txt
-+ cat coverage-report.txt
-+
-+else
-+coverage-report.txt:
-+ echo "Need to reconfigure with --enable-gcov"
-+
-+check-coverage:
-+ echo "Need to reconfigure with --enable-gcov"
-+
-+endif
-diff -Naur dbus-0.61.orig/Makefile.in dbus-0.61/Makefile.in
---- dbus-0.61.orig/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/Makefile.in 2006-02-27 22:34:43.000000000 +0100
-@@ -0,0 +1,905 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = .
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Doxyfile.in \
-+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-+ $(srcdir)/config.h.in $(srcdir)/dbus-1.pc.in \
-+ $(srcdir)/dbus-glib-1.pc.in $(srcdir)/dbus-sharp.pc.in \
-+ $(top_srcdir)/configure \
-+ $(top_srcdir)/test/data/valid-config-files/debug-allow-all-sha1.conf.in \
-+ $(top_srcdir)/test/data/valid-config-files/debug-allow-all.conf.in \
-+ $(top_srcdir)/test/data/valid-service-files/debug-echo.service.in \
-+ $(top_srcdir)/test/data/valid-service-files/debug-glib.service.in \
-+ $(top_srcdir)/test/data/valid-service-files/debug-python.service.in \
-+ $(top_srcdir)/test/data/valid-service-files/debug-segfault.service.in \
-+ $(top_srcdir)/test/data/valid-service-files/debug-shell-echo-fail.service.in \
-+ $(top_srcdir)/test/data/valid-service-files/debug-shell-echo-success.service.in \
-+ AUTHORS COPYING ChangeLog INSTALL NEWS compile config.guess \
-+ config.sub depcomp install-sh ltmain.sh missing py-compile
-+subdir = .
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
-+ configure.lineno configure.status.lineno
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = config.h
-+CONFIG_CLEAN_FILES = Doxyfile dbus-1.pc dbus-glib-1.pc dbus-sharp.pc \
-+ test/data/valid-config-files/debug-allow-all.conf \
-+ test/data/valid-config-files/debug-allow-all-sha1.conf \
-+ test/data/valid-service-files/debug-echo.service \
-+ test/data/valid-service-files/debug-segfault.service \
-+ test/data/valid-service-files/debug-glib.service \
-+ test/data/valid-service-files/debug-shell-echo-success.service \
-+ test/data/valid-service-files/debug-shell-echo-fail.service \
-+ test/data/valid-service-files/debug-python.service
-+SOURCES =
-+DIST_SOURCES =
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
-+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
-+DATA = $(pkgconfig_DATA)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+distdir = $(PACKAGE)-$(VERSION)
-+top_distdir = $(distdir)
-+am__remove_distdir = \
-+ { test ! -d $(distdir) \
-+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-+ && rm -fr $(distdir); }; }
-+DIST_ARCHIVES = $(distdir).tar.gz
-+GZIP_ENV = --best
-+distuninstallcheck_listfiles = find . -type f -print
-+distcleancheck_listfiles = find . -type f -print
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+ at HAVE_GLIB_TRUE@GLIB_SUBDIR = glib
-+ at HAVE_GLIB_TRUE@GLIB_PC = dbus-glib-1.pc
-+ at HAVE_QT_TRUE@QT_SUBDIR = qt
-+ at HAVE_QT3_TRUE@QT3_SUBDIR = qt3
-+ at DBUS_USE_GCJ_TRUE@GCJ_SUBDIR = gcj
-+ at DBUS_USE_CSC_TRUE@MONO_SUBDIR = mono
-+ at DBUS_USE_CSC_TRUE@MONO_PC = dbus-sharp.pc
-+ at HAVE_PYTHON_TRUE@PYTHON_SUBDIR = python
-+SUBDIRS = dbus bus doc $(GLIB_SUBDIR) $(GCJ_SUBDIR) $(MONO_SUBDIR) $(QT_SUBDIR) $(QT3_SUBDIR) $(PYTHON_SUBDIR) tools test
-+DIST_SUBDIRS = dbus bus doc glib qt qt3 gcj mono python tools test
-+pkgconfigdir = $(libdir)/pkgconfig
-+pkgconfig_DATA = dbus-1.pc $(GLIB_PC) $(MONO_PC)
-+DISTCLEANFILES = \
-+ dbus-1.pc \
-+ $(GLIB_PC) \
-+ $(MONO_PC)
-+
-+EXTRA_DIST = \
-+ HACKING \
-+ dbus-1.pc.in \
-+ dbus-glib-1.pc.in \
-+ dbus-sharp.pc.in
-+
-+ at DBUS_GCOV_ENABLED_TRUE@GCOV_DIRS = dbus bus $(GLIB_SUBDIR) $(QT_SUBDIR)
-+all: config.h
-+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
-+
-+.SUFFIXES:
-+am--refresh:
-+ @:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
-+ cd $(srcdir) && $(AUTOMAKE) --gnu \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ echo ' $(SHELL) ./config.status'; \
-+ $(SHELL) ./config.status;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ $(SHELL) ./config.status --recheck
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(srcdir) && $(AUTOCONF)
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-+
-+config.h: stamp-h1
-+ @if test ! -f $@; then \
-+ rm -f stamp-h1; \
-+ $(MAKE) stamp-h1; \
-+ else :; fi
-+
-+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-+ @rm -f stamp-h1
-+ cd $(top_builddir) && $(SHELL) ./config.status config.h
-+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_srcdir) && $(AUTOHEADER)
-+ rm -f stamp-h1
-+ touch $@
-+
-+distclean-hdr:
-+ -rm -f config.h stamp-h1
-+Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+dbus-1.pc: $(top_builddir)/config.status $(srcdir)/dbus-1.pc.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+dbus-glib-1.pc: $(top_builddir)/config.status $(srcdir)/dbus-glib-1.pc.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+dbus-sharp.pc: $(top_builddir)/config.status $(srcdir)/dbus-sharp.pc.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+test/data/valid-config-files/debug-allow-all.conf: $(top_builddir)/config.status $(top_srcdir)/test/data/valid-config-files/debug-allow-all.conf.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+test/data/valid-config-files/debug-allow-all-sha1.conf: $(top_builddir)/config.status $(top_srcdir)/test/data/valid-config-files/debug-allow-all-sha1.conf.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+test/data/valid-service-files/debug-echo.service: $(top_builddir)/config.status $(top_srcdir)/test/data/valid-service-files/debug-echo.service.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+test/data/valid-service-files/debug-segfault.service: $(top_builddir)/config.status $(top_srcdir)/test/data/valid-service-files/debug-segfault.service.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+test/data/valid-service-files/debug-glib.service: $(top_builddir)/config.status $(top_srcdir)/test/data/valid-service-files/debug-glib.service.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+test/data/valid-service-files/debug-shell-echo-success.service: $(top_builddir)/config.status $(top_srcdir)/test/data/valid-service-files/debug-shell-echo-success.service.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+test/data/valid-service-files/debug-shell-echo-fail.service: $(top_builddir)/config.status $(top_srcdir)/test/data/valid-service-files/debug-shell-echo-fail.service.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+test/data/valid-service-files/debug-python.service: $(top_builddir)/config.status $(top_srcdir)/test/data/valid-service-files/debug-python.service.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $@
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-pkgconfigDATA: $(pkgconfig_DATA)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
-+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
-+ $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
-+ done
-+
-+uninstall-pkgconfigDATA:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
-+ done
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ $(am__remove_distdir)
-+ mkdir $(distdir)
-+ $(mkdir_p) $(distdir)/. $(distdir)/bus $(distdir)/dbus $(distdir)/mono $(distdir)/test/data/valid-config-files $(distdir)/test/data/valid-service-files
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
-+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-+ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
-+ || chmod -R a+r $(distdir)
-+dist-gzip: distdir
-+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-+ $(am__remove_distdir)
-+
-+dist-bzip2: distdir
-+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-+ $(am__remove_distdir)
-+
-+dist-tarZ: distdir
-+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-+ $(am__remove_distdir)
-+
-+dist-shar: distdir
-+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-+ $(am__remove_distdir)
-+
-+dist-zip: distdir
-+ -rm -f $(distdir).zip
-+ zip -rq $(distdir).zip $(distdir)
-+ $(am__remove_distdir)
-+
-+dist dist-all: distdir
-+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-+ $(am__remove_distdir)
-+
-+# This target untars the dist file and tries a VPATH configuration. Then
-+# it guarantees that the distribution is self-contained by making another
-+# tarfile.
-+distcheck: dist
-+ case '$(DIST_ARCHIVES)' in \
-+ *.tar.gz*) \
-+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
-+ *.tar.bz2*) \
-+ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
-+ *.tar.Z*) \
-+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-+ *.shar.gz*) \
-+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
-+ *.zip*) \
-+ unzip $(distdir).zip ;;\
-+ esac
-+ chmod -R a-w $(distdir); chmod a+w $(distdir)
-+ mkdir $(distdir)/_build
-+ mkdir $(distdir)/_inst
-+ chmod a-w $(distdir)
-+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-+ && cd $(distdir)/_build \
-+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-+ $(DISTCHECK_CONFIGURE_FLAGS) \
-+ && $(MAKE) $(AM_MAKEFLAGS) \
-+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
-+ && $(MAKE) $(AM_MAKEFLAGS) check \
-+ && $(MAKE) $(AM_MAKEFLAGS) install \
-+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-+ distuninstallcheck \
-+ && chmod -R a-w "$$dc_install_base" \
-+ && ({ \
-+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
-+ && rm -rf "$$dc_destdir" \
-+ && $(MAKE) $(AM_MAKEFLAGS) dist \
-+ && rm -rf $(DIST_ARCHIVES) \
-+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
-+ $(am__remove_distdir)
-+ @(echo "$(distdir) archives ready for distribution: "; \
-+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-+ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
-+distuninstallcheck:
-+ @cd $(distuninstallcheck_dir) \
-+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
-+ || { echo "ERROR: files left after uninstall:" ; \
-+ if test -n "$(DESTDIR)"; then \
-+ echo " (check DESTDIR support)"; \
-+ fi ; \
-+ $(distuninstallcheck_listfiles) ; \
-+ exit 1; } >&2
-+distcleancheck: distclean
-+ @if test '$(srcdir)' = . ; then \
-+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-+ exit 1 ; \
-+ fi
-+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-+ || { echo "ERROR: files left in build directory after distclean:" ; \
-+ $(distcleancheck_listfiles) ; \
-+ exit 1; } >&2
-+check-am: all-am
-+check: check-recursive
-+all-am: Makefile $(DATA) config.h all-local
-+installdirs: installdirs-recursive
-+installdirs-am:
-+ for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-recursive
-+
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-hdr \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am: install-pkgconfigDATA
-+
-+install-exec-am:
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-+ -rm -rf $(top_srcdir)/autom4te.cache
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am uninstall-pkgconfigDATA
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-local \
-+ am--refresh check check-am clean clean-generic clean-libtool \
-+ clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \
-+ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
-+ distclean-generic distclean-hdr distclean-libtool \
-+ distclean-recursive distclean-tags distcleancheck distdir \
-+ distuninstallcheck dvi dvi-am html html-am info info-am \
-+ install install-am install-data install-data-am install-exec \
-+ install-exec-am install-info install-info-am install-man \
-+ install-pkgconfigDATA install-strip installcheck \
-+ installcheck-am installdirs installdirs-am maintainer-clean \
-+ maintainer-clean-generic maintainer-clean-recursive \
-+ mostlyclean mostlyclean-generic mostlyclean-libtool \
-+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
-+ uninstall uninstall-am uninstall-info-am \
-+ uninstall-pkgconfigDATA
-+
-+
-+dist-local:
-+ if test -z "$(QT_SUBDIR)" || test -z "$(GLIB_SUBDIR)" ; then \
-+ echo "You have to build with Qt and GLib to make dist" ; \
-+ fi
-+
-+all-local: Doxyfile
-+
-+ at DBUS_GCOV_ENABLED_TRUE@clean-gcov:
-+ at DBUS_GCOV_ENABLED_TRUE@ find -name "*.da" -o -name "*.gcov" | xargs rm || true
-+
-+ at DBUS_GCOV_ENABLED_TRUE@clean-bbg:
-+ at DBUS_GCOV_ENABLED_TRUE@ find -name "*.bbg" -o -name "*.bb" | xargs rm || true
-+
-+ at DBUS_GCOV_ENABLED_TRUE@.PHONY: coverage-report.txt
-+ at DBUS_GCOV_ENABLED_TRUE@coverage-report.txt:
-+ at DBUS_GCOV_ENABLED_TRUE@ BBG_FILES=`find $(GCOV_DIRS) -name "*.bbg" -o -name "*.gcno"` ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ C_FILES= ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ for F in $$BBG_FILES ; do \
-+ at DBUS_GCOV_ENABLED_TRUE@ F_nolibs=`echo $$F | sed -e 's/.libs\///g'` ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ C=`echo $$F_nolibs | sed -e 's/.bbg/.c/g' | sed -e 's/.gcno/.c/g'` ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ B=`basename $$F .bbg` ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ D=`dirname $$F` ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ DA=`echo $$F | sed -e 's/.bbg/.da/g'` ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ DA_libs=`echo $$D/.libs/$$B/.da` ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ if test -e $$DA || test -e $$DA_libs; then \
-+ at DBUS_GCOV_ENABLED_TRUE@ C_FILES="$$C_FILES $$C" ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ fi ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ done ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ echo $$C_FILES ; \
-+ at DBUS_GCOV_ENABLED_TRUE@ $(top_builddir)/test/decode-gcov --report $$C_FILES > coverage-report.txt
-+
-+ at DBUS_GCOV_ENABLED_TRUE@check-coverage: clean-gcov all check coverage-report.txt
-+ at DBUS_GCOV_ENABLED_TRUE@ cat coverage-report.txt
-+
-+ at DBUS_GCOV_ENABLED_FALSE@coverage-report.txt:
-+ at DBUS_GCOV_ENABLED_FALSE@ echo "Need to reconfigure with --enable-gcov"
-+
-+ at DBUS_GCOV_ENABLED_FALSE@check-coverage:
-+ at DBUS_GCOV_ENABLED_FALSE@ echo "Need to reconfigure with --enable-gcov"
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/NEWS dbus-0.61/NEWS
---- dbus-0.61.orig/NEWS 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/NEWS 2006-02-24 18:22:08.000000000 +0100
-@@ -0,0 +1,474 @@
-+D-BUS 0.61 (24 Febuary 2006)
-+==
-+- Documentation all around
-+- dbus-launch now produces correct sh and csh syntax
-+- Nested arrays now work correctly
-+- GLib bindings:
-+ - Inheriting from DBusGProxy is now possible
-+ - GPtrArrays can now be marshalled
-+ - org.freedesktop.DBus.GLib.ClientCSymbol annotation added
-+ - Openning connections to arbitrary addresses now supported
-+- Python bindings:
-+ - sender_keyword and path_keyword keywords added to signal listener API
-+ - Byte types now demarshal to unsigned char
-+ - calling methods now do the correct thing
-+- Qt bindings:
-+ - both Qt3 and Qt4 bindings can be built at the same time
-+ - Use the standard org.freedesktop.DBus.Method.NoReply annotation
-+ for the "async" calls instead of creating one for us.
-+- Mono bindings:
-+ - 64bit arch fixes
-+- Massive bug fixing all around
-+
-+D-BUS 0.60 (30 November 2005)
-+==
-+
-+- major ABI/API changes - sonames changed
-+- RequestName queuing behavior has changed (refer to dbus-specification)
-+ - DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT has been removed and
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT has been added to the flags
-+- signals emitted by the bus now show up in the introspect data
-+- auth EXTERNAL now supported on BSD varients
-+- ReleaseName method added to the bus to allow a service
-+ to remove itself as owner of a bus name
-+- dbus_connection_read_write added for getting messages off the bus
-+ in the absence of a mainloop
-+- Qt4 bindings added and the Qt3 bindings have been depricated
-+- python bindings:
-+ - marshal using introspect data if available
-+ - better exception handling and propigation
-+ - private connections are now supported
-+ - UTF-8 cleanups
-+ - out_signature added to method decorators for specifying
-+ how the return values should be marshaled
-+ - sender_keyword added to method decorators for specifying
-+ and argument to provide the unique name of the method caller
-+ - async_callbacks added to method decorators
-+ - multiple inheritance of classes now supported
-+- GLib bindings:
-+ - respect NoReply annotations
-+ - dbus_g_method_return_get_reply and dbus_g_method_return_send_reply
-+ added to the lowlevel code for use when the dbus-glib marshalling
-+ code is not adiquate
-+- numerous bug fixes all around
-+
-+D-BUS 0.50 (06 September 2005)
-+===
-+This is a minor release from 0.36.2. The series number has changed
-+not because of any technical reasons but as an indication that we
-+are moving closer to 1.0. It is hoped that this will be the last
-+series to see major changes, most of which will be isolated to the
-+GLib and Python bindings, as we transition to concentrate more on
-+bug busting and code auditing.
-+
-+- D-Bus builds on the Cygwin platform
-+- Makefile cleanups
-+- Various bug fixes
-+- Optimization of the dbus object tree
-+- Memleaks and GIL crasher bugs have been fixed in the Python bindings
-+
-+D-BUS 0.36.2 (29 August 2005)
-+===
-+- Security: Restrict other users from connecting to another users
-+ session bus
-+
-+D-BUS 0.36.1 (24 August 2005)
-+===
-+- Python Bindings:
-+ - fixed to work with hal-device-manager
-+ - For 64bit builds everything is installed to lib64/python2.4/
-+ since Python can't handle multilib
-+
-+D-BUS 0.36 (23 August 2005)
-+===
-+- Maximum sized of cached messages have been reduced to 10K
-+- Match rules now allow matching on arguments inside the message
-+- introspect.xsl XSLT style sheet added for formatting introspection
-+ data into XHTML for analysis
-+- Python bindings:
-+ - now have working type objects for explicit
-+ typecasting
-+ - Variant type has been added
-+ - Dictionaries, Variants and Arrays can all be passed the signiture or
-+ type(s) of their children
-+ - the optional timeout= keyword has been added when making method calls
-+ - match on args has been implemented
-+ - a .pth file has been added for dealing with libraries and python files
-+ being in different directories such as in 64bit installs
-+ - various bug fixes
-+- GLib bindings:
-+ - deeply recursive types now supported
-+ - many symbols are no longer exported as part of the public API
-+ - various memleak and other bug fixes
-+
-+D-BUS 0.35.2 (17 July 2005)
-+===
-+- Rename Unix Security Context to SELinux Security Context in API
-+- Fixed more dist errors that distcheck didn't pick up on
-+- Fixed various bugs in the python bindings that prevented them from working
-+
-+D-BUS 0.35.1 (16 July 2005)
-+===
-+- Fixed dist error where python/dbus_bindings.pxd was being shipped
-+ instead of dbus_bindings.pxd.in
-+- Use this instead of the 0.35 tarball
-+
-+D-BUS 0.35 (15 July 2005)
-+===
-+- --with-dbus-user added to the configure scripts for configuring the
-+ user the system bus runs on
-+- --with-console-auth-dir added to configure scripts for configuring the
-+ directory to look in for console user locks
-+- service files for auto-starting D-Bus services now has the ability to pass
-+ in command line arguments to the executable
-+- Huge auto-start bug squashed which caused some services not to start when
-+ requested in rapid succession
-+- SE-Linux security contexts can now be appended to messages for inspection
-+ by services that enforce their own security policies
-+- Colin says the GLib binding are ready for general consumption
-+- New GLib tutorial
-+- New GLib example code
-+- Python bindings are now version (0,42,0)
-+- Python bindings API has changed on the service side
-+- dbus.service has been split out as a seperate module
-+- dbus.service.Service is renamed to dbus.service.BusName
-+- dbus.service.Object has swapped the bus_name and object_path constructor
-+ parameters to make it easier to do inheritance over the bus
-+- dbus.glib has been seperated out in order to lessen the dependency on glib
-+ and to allow other mainloops to be integrated with the bindings including
-+ a planned generic mainloop for non-gui apps.
-+- Python bindings now aquire the GIL when calling back into the python
-+ interpreter. Fixes crashes when using threading and other random segfaults.
-+- New Python tutorial
-+- Numerous D-Bus bug fixes all around
-+
-+D-BUS 0.34 (15 June 2005)
-+===
-+- dbus_connection_disconnect is deprecated in favor of dbus_connection_close
-+- The bus can now use D_NOTIFY (if available) to check when configuration files
-+ have changed and reload them
-+- New dbus_message_has_path/member/interface API added
-+- The Ping message from the org.freedesktop.DBus.Peer interface is now handled
-+- Complete glib bindings overhaul (and are still under construction)
-+- Tutorial now has an updated GLib section
-+- GLib bindings can now send/receive hash tables, arrays and other complex types
-+- Python bindings overhaul (most public facing API's done)
-+- Python bindings have been split up into separate files
-+- Python added new type classes for hinting to the marshaler what type
-+ to send over the wire
-+- Python bindings now have decorators for specifying exported methods and signals
-+- Numerous bug fixes
-+
-+D-BUS 0.33 (25 Apr 2005)
-+===
-+
-+- downgrade requirement from GTK+-2.6 to 2.4 for building gtk components
-+- python binding API's have been overhalled to be more "pythonic" and cleaner
-+- python bindings now export dbus.version which is set to (0,40,0)
-+- python bindings now implement the org.freedesktop.DBus.Introspectable interface
-+- python binding match rules are now more flexable
-+- make check has been fixed
-+- many, many major bug fixes
-+
-+D-BUS 0.32 (29 Mar 2005)
-+===
-+
-+- mono bindings now compiles correctly
-+- mono binding cleanups
-+- glib bindings generates wrappers for bus methods in dbus-glib-bindings.h
-+- glib binding cleanus
-+- users and groups can now be specified by UID and GID in config files
-+- numerous memory leak fixes
-+- various other fixes
-+
-+D-BUS 0.31 (07 Mar 2005)
-+===
-+
-+- land the new message args API and recursive type system
-+- add docs and fixed Doxygen warnings throught source
-+- split out some functions not needed in libdbus to *-util.c source files
-+- take out type convienience functions
-+- libdbus now back below 150K
-+- booleans are now 32-bit instead of 8-bit
-+- specification updated
-+- grand renaming to strip out the use of "service"
-+ just say "name" instead (or "bus name" when ambiguous)
-+- rename dbus-daemon-1 to dbus-daemon throughout
-+- rename activation to auto-start
-+- auto-start on by default now
-+- note that libdbus is the low-level API
-+- python bindings updated to the new API
-+- mono bindings updated to the new API
-+- add 16 bit types
-+- dictionaries are now ARRAYS of DICT_ENTRY
-+- dbus-glib-tool renamed to dbus-binding-tool
-+- massive rewrite of the glib bindings
-+- saner names for the dbus interface, object path and service defines
-+- new functions for handling type signitures
-+- bump sonames for libdbus and libdbus-glib
-+- various small fixes
-+
-+D-BUS 0.23 (11 Jan 2005)
-+===
-+
-+- add setgroups() to drop supplementary groups
-+- updated SELinux support
-+- add an "at console" security policy
-+- fix a bug where org.freedesktop.DBus wasn't recognized as an existing
-+ service.
-+- error out if --enable-mono is explicitly set and mono libs can't be found
-+- set the max_match_rules_per_connection limit from the config file.
-+- removed dbus_bug_get_with_g_main since it's been replaced by
-+ dbus_g_bus_get
-+- fix fd leaks in socket code
-+- lots and lots of mono binding updates, including fixes to make it
-+ compatible with Mono 1.1.3
-+- added --nofork option to override config file setting at runtime
-+- added support for int64 and uint64 to the python bindings
-+- lots of python binding updates
-+- config file DTD updates
-+- use SerivceOwnerChanges signal instead of ServiceCreated and
-+ ServiceDeleted
-+- fixes to the authentication code
-+- new init script for Slackware
-+- print out the pid even when --fork is passed
-+- increase preallocation sizes in DBusMessage to heavily reduce
-+ reallocs
-+- lots of performance enhancements
-+- lots more small bug fixes
-+
-+D-BUS 0.22
-+===
-+
-+- add --reply-timeout to dbus-send
-+- fix a memleak
-+- fix Solaris/Forte build
-+- switch to AFL 2.1 rather than 2.0 to address patent termination clause
-+ concerns
-+- add SELinux support
-+- mostly repair libxml backend for config parser, still doesn't
-+ pass out of memory tests
-+- fix distcheck to include language bindings
-+- add GetConnectionUnixUser method on bus driver
-+- also for UnixProcessID
-+- lots of Python, Mono, other binding fixes
-+- change GLib bindings to not include dbus/dbus.h (fully encapsulate libdbus)
-+- pass paths as strings, not arrays of string
-+- add message signature header field
-+- cleanups to marshaling code
-+- clean up authentication code
-+- reload conf files on SIGHUP
-+- rename SERVICE/SENDER_SERVICE to DESTINATION/SENDER
-+- fix circular conf file inclusion
-+- allow empty arrays
-+- tons of other small bugfixes
-+
-+D-BUS 0.21
-+===
-+
-+- implement "auto activation" flag on messages, so the destination
-+ service can be launched automatically
-+- fix a bug in custom type marshaling
-+- optimize case where multiple apps activate the same service
-+ (avoid "thundering herd")
-+- add dynamic service file discovery/reloading
-+- fix a busy loop when blocking for a reply
-+- fix a 64-bit crash involving varargs
-+- fix a bus crash when processing an AcquireService
-+- allow appending TYPE_BYTE via append_args_valist
-+- fix dicts-inside-dicts
-+- enhancements to Python and Qt bindings
-+
-+D-BUS 0.20
-+===
-+
-+This release lands some very large API changes and numerous bugfixes.
-+The list of changes is too large to fully document here; please refer
-+to the documentation, and message-bus-list archives.
-+
-+D-BUS 0.13
-+===
-+
-+This is probably the last release before landing the large API changes
-+on the "dbus-object-names" branch.
-+
-+- fix system bus to always use filesystem socket; anyone
-+ can create any abstract socket, which isn't secure
-+ since if you can crash the system bus you'd be able
-+ to replace it.
-+- add DTD for configuration file
-+- improve specification a bit
-+
-+D-BUS 0.12
-+===
-+
-+- fix "service messagebus status" on Red Hat
-+- fix demarshaling of DBUS_TYPE_NAMED
-+- fix "eval `dbus-launch --exit-with-session`" to exit properly
-+- fix build without --prefix
-+- useless fooling with Mono bindings
-+- useless fooling with gcj bindings
-+- fix srcdir != builddir
-+- fix various compiler warnings and other issues
-+- add get/set data to DBusMessage
-+- fix headers for C++
-+- OS X build fixes
-+- abstract domain sockets support (Linux only)
-+- add dbus-cleanup-sockets utility for people
-+ not using linux
-+- be consistent about defaulting to --session/--system
-+ with command line tools
-+- merge in policies from included config files
-+- fix build on non-x86
-+- docs updates
-+- lots of other bugfixes
-+
-+D-BUS 0.11
-+===
-+
-+- add --enable-docs to turn off/on the docbook stuff
-+ (doesn't cover doxygen stuff yet)
-+- make people define DBUS_API_SUBJECT_TO_CHANGE
-+ and read warning in README so they don't
-+ expect the API to be frozen already
-+- rename .pc files to "dbus-1.pc" instead of
-+ "dbus-1.0.pc" etc. - this will require changing
-+ pkg-config invocations
-+- some docs cleanups
-+- add man pages for all executables
-+- allow send to/from bus driver in the default system.conf
-+- fix user lookup bug
-+- implement dbus-launch to launch the session message bus
-+- fix some thread deadlocks
-+- some performance profiling/optimization
-+- add dbus_bus_activate_service() function
-+- fix some minor bugs here and there
-+- install Red Hat initscript in the right place
-+
-+D-BUS 0.10
-+===
-+
-+- reversed order of args to dbus_message_new()
-+- renamed dbus_message_name_is() and some other
-+ functions
-+- change DBusWatch to have dbus_watch_handle()
-+ similar to dbus_timeout_handle(), drop
-+ connection/server-specific handle routines
-+- change message serials to be unsigned
-+- implemented <allow>/<deny>/<limit> features for
-+ config file; system bus now has a deny-all policy
-+ by default.
-+- system.conf has <includedir>system.d</includedir>
-+ so packages can install additions to the default
-+ policy to <allow> the messages they need. e.g.
-+ CUPS might install a cups.conf - see
-+ test/data/valid-config-files/system.d/test.conf
-+ for an example.
-+- add timeouts for authentication, activation
-+- add glib-style "checks" on public API, enable
-+ those by default, disable assertions by default
-+- add GMainContext argument to GLib setup functions,
-+ can be NULL for default context. Needed for threads.
-+- add 64-bit integer type
-+- validate type of standard message header fields
-+- consider messages in the org.freedesktop.Local
-+ namespace to be invalid (to avoid fake disconnect
-+ messages for example)
-+- fix assorted memory leaks and other bugs in
-+ the SHA-1 auth mechanism
-+- cache user database information (groups user is
-+ in, etc.) helps a lot with NIS
-+- always store uid_t, pid_t, gid_t in "ulong"
-+ rather than "int"
-+- implement config file settings for which
-+ users can connect
-+- SHA-1 unit test
-+- dbus-send, dbus-monitor command line utilities
-+- fixed lots of misc crashes and other bugs
-+
-+D-BUS 0.9
-+===
-+
-+- implemented a test case for service activation,
-+ and fixed many bugs exposed by that
-+- implemented recursive argument marshaling/demarshaling
-+ for messages, allowing multidimensional arrays
-+- fixed up integration of message dispatch with
-+ main loop by adding a callback on change of
-+ dispatch status
-+- add a pidfile feature to daemon
-+- some build fixes
-+- clean up unix domain sockets on exit
-+- add --print-address and the ability
-+ to create a random server address
-+ in a temporary directory
-+
-+D-BUS 0.8
-+===
-+
-+- fix dumb bug in 0.7
-+
-+D-BUS 0.7
-+===
-+
-+- implement configuration file used to control bus characteristics
-+- implement daemon mode, changing user ID, and other system
-+ bus features
-+- add init scripts for systemwide bus
-+- add "make check-coverage" target to check test coverage
-+- more test suite additions
-+- many, many bugfixes
-+- many API changes/fixes
-+
-+D-BUS 0.6
-+===
-+- Vastly improved bus daemon test suite
-+- Lots of misc. bugfixes and memory leak fixes
-+- Support for marshalling key/value data
-+- Activation improvements.
-+
-+D-BUS 0.5
-+===
-+
-+- Specification updates
-+- port to OS X and other BSD variants
-+- port to Solaris
-+- Partial work on cookie-based authentication
-+- Thread safety fixes
-+- Lots of misc. bugfixes
-+- Support for more array types
-+- Add data slots to DBusServer
-+- DBusString security audit fixes
-+- Fix for systems (or valgrind) with unaligned malloc blocks
-+
-+D-BUS 0.4
-+===
-+
-+- Preliminary activation support.
-+- Better authentication test suite
-+- Bus test program
-+- Specification updates
-+- Thread safety
-+- Bug fixes
-+
-+D-BUS 0.3
-+===
-+
-+ - Preliminary limitations
-+ - Message sending works
-+ - Bus client
-+ - Array marshalling/demarshalling
-+ - Services
-+ - Better OOM handling in the bus
-+ - In-proc debug transport
-+ - Transport/server address support
-+
-+D-BUS 0.2
-+===
-+
-+ - Include test code in the tarball.
-+
-+D-BUS 0.1
-+===
-+
-+ - Initial release.
-diff -Naur dbus-0.61.orig/README dbus-0.61/README
---- dbus-0.61.orig/README 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/README 2004-08-10 04:18:37.000000000 +0200
-@@ -0,0 +1,84 @@
-+D-BUS is a simple IPC library based on messages.
-+
-+See also the file HACKING for notes of interest to developers working on D-BUS.
-+
-+See http://www.freedesktop.org/software/dbus/ for lots of documentation,
-+mailing lists, etc.
-+
-+Note
-+===
-+
-+A core concept of the D-BUS implementation is that "libdbus" is
-+intended to be a low-level API, similar to Xlib. Most programmers are
-+intended to use the bindings to GLib, Qt, Python, Mono, Java, or
-+whatever. These bindings have varying levels of completeness.
-+
-+Configuration flags
-+===
-+
-+These are the dbus-specific configuration flags that can be given to
-+the ./configure program.
-+
-+ --enable-qt enable Qt-friendly client library
-+ --enable-glib enable GLib-friendly client library
-+ --enable-mono enable mono bindings
-+ --enable-mono-docs build mono documentation (requires monodoc)
-+ --enable-tests enable unit test code
-+ --enable-ansi enable -ansi -pedantic gcc flags
-+ --enable-verbose-mode support verbose debug mode
-+ --enable-asserts include assertion checks
-+ --enable-checks include sanity checks on public API
-+ --enable-docs build documentation (requires Doxygen and jade)
-+ --enable-gcov compile with coverage profiling instrumentation (gcc only)
-+ --enable-python build python bindings (reqires Pyrex >= 0.9)
-+
-+ --with-xml=libxml/expat XML library to use
-+ --with-init-scripts=redhat Style of init scripts to install
-+ --with-session-socket-dir=dirname Where to put sockets for the per-login-session message bus
-+ --with-test-socket-dir=dirname Where to put sockets for make check
-+ --with-system-pid-file=pidfile PID file for systemwide daemon
-+ --with-system-socket=filename UNIX domain socket for systemwide daemon
-+
-+
-+API/ABI Policy
-+===
-+
-+D-BUS API/ABI and protocol necessarily remain in flux until we are
-+sure it will meet the various needs it's intended to meet. This means
-+we need to see some significant sample usage in the contexts of GNOME,
-+KDE, desktop applications, and systemwide uses such as print queue
-+monitoring, hotplug events, or whatever. We need the flexibility to
-+incorporate feedback from this sample usage.
-+
-+Once we feel confident in the protocol and the API, we will release a
-+version 1.0. At that point, the intent is:
-+
-+ - The protocol will never be broken again; any message bus should
-+ work with any client forever. However, extensions are possible
-+ where the protocol is extensible.
-+
-+ - If the library API is modified incompatibly, we will rename it
-+ as in http://ometer.com/parallel.html - in other words,
-+ it will always be possible to compile against and use the older
-+ API, and apps will always get the API they expect.
-+
-+Until 1.0 is released, feedback that requires API changes may be
-+incorporated into D-BUS. This may break the API, the ABI, the
-+protocol, or all three.
-+
-+To avoid a huge soname, the plan is to increment the soname only
-+between official stable releases, not with every development snapshot.
-+Versions numbered 0.x are considered development snapshots.
-+
-+Until 1.0 is released, you have to define -DDBUS_API_SUBJECT_TO_CHANGE
-+just as a safety check to be sure everyone is aware of this API/ABI
-+policy and has the right expectations.
-+
-+We do need people to test the APIs, so please do use the development
-+snapshots of D-BUS. They are intended to work and we do actively
-+address bugs.
-+
-+However, if you're shipping a commercial binary-only application that
-+needs to keep running on M future versions of N operating systems, you
-+might want to include your own copy of D-BUS rather than relying on
-+the installed copy, for example.
-diff -Naur dbus-0.61.orig/acinclude.m4 dbus-0.61/acinclude.m4
---- dbus-0.61.orig/acinclude.m4 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/acinclude.m4 2006-02-16 02:13:04.000000000 +0100
-@@ -0,0 +1,83 @@
-+
-+dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
-+dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
-+dnl also defines GSTUFF_PKG_ERRORS on error
-+AC_DEFUN([PKG_CHECK_MODULES], [
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ AC_MSG_CHECKING(for $2)
-+
-+ if $PKG_CONFIG --exists "$2" ; then
-+ AC_MSG_RESULT(yes)
-+ succeeded=yes
-+
-+ AC_MSG_CHECKING($1_CFLAGS)
-+ $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
-+ AC_MSG_RESULT($$1_CFLAGS)
-+
-+ AC_MSG_CHECKING($1_LIBS)
-+ $1_LIBS=`$PKG_CONFIG --libs "$2"`
-+ AC_MSG_RESULT($$1_LIBS)
-+ else
-+ $1_CFLAGS=""
-+ $1_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-+ ifelse([$4], ,echo $$1_PKG_ERRORS,)
-+ fi
-+
-+ AC_SUBST($1_CFLAGS)
-+ AC_SUBST($1_LIBS)
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ ifelse([$3], , :, [$3])
-+ else
-+ ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
-+ fi
-+])
-+
-+
-+
-+dnl a macro to check for ability to create python extensions
-+dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
-+dnl function also defines PYTHON_INCLUDES
-+AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
-+[AC_REQUIRE([AM_PATH_PYTHON])
-+AC_MSG_CHECKING(for headers required to compile python extensions)
-+dnl deduce PYTHON_INCLUDES
-+py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
-+py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
-+PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
-+if test "$py_prefix" != "$py_exec_prefix"; then
-+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
-+fi
-+AC_SUBST(PYTHON_INCLUDES)
-+dnl check if the headers exist:
-+save_CPPFLAGS="$CPPFLAGS"
-+CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
-+AC_TRY_CPP([#include <Python.h>],dnl
-+[AC_MSG_RESULT(found)
-+$1],dnl
-+[AC_MSG_RESULT(not found)
-+$2])
-+CPPFLAGS="$save_CPPFLAGS"
-+])
-+
diff -Naur dbus-0.61.orig/aclocal.m4 dbus-0.61/aclocal.m4
---- dbus-0.61.orig/aclocal.m4 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/aclocal.m4 2006-02-27 22:34:10.000000000 +0100
-@@ -0,0 +1,7896 @@
-+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
-+
-+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-+# 2005 Free Software Foundation, Inc.
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+# Copyright (C) 1995-2002 Free Software Foundation, Inc.
-+# Copyright (C) 2001-2003,2004 Red Hat, Inc.
-+#
-+# This file is free software, distributed under the terms of the GNU
-+# General Public License. As a special exception to the GNU General
-+# Public License, this file may be distributed as part of a program
-+# that contains a configuration script generated by Autoconf, under
-+# the same distribution terms as the rest of that program.
-+#
-+# This file can be copied and used freely without restrictions. It can
-+# be used in projects which are not available under the GNU Public License
-+# but which still want to provide support for the GNU gettext functionality.
-+#
-+# Macro to add for using GNU gettext.
-+# Ulrich Drepper <drepper at cygnus.com>, 1995, 1996
-+#
-+# Modified to never use included libintl.
-+# Owen Taylor <otaylor at redhat.com>, 12/15/1998
-+#
-+# Major rework to remove unused code
-+# Owen Taylor <otaylor at redhat.com>, 12/11/2002
-+#
-+# Added better handling of ALL_LINGUAS from GNU gettext version
-+# written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002
-+#
-+# Modified to require ngettext
-+# Matthias Clasen <mclasen at redhat.com> 08/06/2004
-+#
-+# We need this here as well, since someone might use autoconf-2.5x
-+# to configure GLib then an older version to configure a package
-+# using AM_GLIB_GNU_GETTEXT
-+AC_PREREQ(2.53)
-+
-+dnl
-+dnl We go to great lengths to make sure that aclocal won't
-+dnl try to pull in the installed version of these macros
-+dnl when running aclocal in the glib directory.
-+dnl
-+m4_copy([AC_DEFUN],[glib_DEFUN])
-+m4_copy([AC_REQUIRE],[glib_REQUIRE])
-+dnl
-+dnl At the end, if we're not within glib, we'll define the public
-+dnl definitions in terms of our private definitions.
-+dnl
-+
-+# GLIB_LC_MESSAGES
-+#--------------------
-+glib_DEFUN([GLIB_LC_MESSAGES],
-+ [AC_CHECK_HEADERS([locale.h])
-+ if test $ac_cv_header_locale_h = yes; then
-+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
-+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
-+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
-+ if test $am_cv_val_LC_MESSAGES = yes; then
-+ AC_DEFINE(HAVE_LC_MESSAGES, 1,
-+ [Define if your <locale.h> file defines LC_MESSAGES.])
-+ fi
-+ fi])
-+
-+# GLIB_PATH_PROG_WITH_TEST
-+#----------------------------
-+dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-+glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
-+[# Extract the first word of "$2", so it can be a program name with args.
-+set dummy $2; ac_word=[$]2
-+AC_MSG_CHECKING([for $ac_word])
-+AC_CACHE_VAL(ac_cv_path_$1,
-+[case "[$]$1" in
-+ /*)
-+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f $ac_dir/$ac_word; then
-+ if [$3]; then
-+ ac_cv_path_$1="$ac_dir/$ac_word"
-+ break
-+ fi
-+ fi
-+ done
-+ IFS="$ac_save_ifs"
-+dnl If no 4th arg is given, leave the cache variable unset,
-+dnl so AC_PATH_PROGS will keep looking.
-+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-+])dnl
-+ ;;
-+esac])dnl
-+$1="$ac_cv_path_$1"
-+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
-+ AC_MSG_RESULT([$]$1)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+AC_SUBST($1)dnl
-+])
-+
-+# GLIB_WITH_NLS
-+#-----------------
-+glib_DEFUN([GLIB_WITH_NLS],
-+ dnl NLS is obligatory
-+ [USE_NLS=yes
-+ AC_SUBST(USE_NLS)
-+
-+ gt_cv_have_gettext=no
-+
-+ CATOBJEXT=NONE
-+ XGETTEXT=:
-+ INTLLIBS=
-+
-+ AC_CHECK_HEADER(libintl.h,
-+ [gt_cv_func_dgettext_libintl="no"
-+ libintl_extra_libs=""
-+
-+ #
-+ # First check in libc
-+ #
-+ AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc,
-+ [AC_TRY_LINK([
-+#include <libintl.h>
-+],
-+ [return !ngettext ("","", 1)],
-+ gt_cv_func_ngettext_libc=yes,
-+ gt_cv_func_ngettext_libc=no)
-+ ])
-+
-+ if test "$gt_cv_func_ngettext_libc" = "yes" ; then
-+ AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
-+ [AC_TRY_LINK([
-+#include <libintl.h>
-+],
-+ [return !dgettext ("","")],
-+ gt_cv_func_dgettext_libc=yes,
-+ gt_cv_func_dgettext_libc=no)
-+ ])
-+ fi
-+
-+ if test "$gt_cv_func_ngettext_libc" = "yes" ; then
-+ AC_CHECK_FUNCS(bind_textdomain_codeset)
-+ fi
-+
-+ #
-+ # If we don't have everything we want, check in libintl
-+ #
-+ if test "$gt_cv_func_dgettext_libc" != "yes" \
-+ || test "$gt_cv_func_ngettext_libc" != "yes" \
-+ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
-+
-+ AC_CHECK_LIB(intl, bindtextdomain,
-+ [AC_CHECK_LIB(intl, ngettext,
-+ [AC_CHECK_LIB(intl, dgettext,
-+ gt_cv_func_dgettext_libintl=yes)])])
-+
-+ if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
-+ AC_MSG_CHECKING([if -liconv is needed to use gettext])
-+ AC_MSG_RESULT([])
-+ AC_CHECK_LIB(intl, ngettext,
-+ [AC_CHECK_LIB(intl, dcgettext,
-+ [gt_cv_func_dgettext_libintl=yes
-+ libintl_extra_libs=-liconv],
-+ :,-liconv)],
-+ :,-liconv)
-+ fi
-+
-+ #
-+ # If we found libintl, then check in it for bind_textdomain_codeset();
-+ # we'll prefer libc if neither have bind_textdomain_codeset(),
-+ # and both have dgettext and ngettext
-+ #
-+ if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
-+ glib_save_LIBS="$LIBS"
-+ LIBS="$LIBS -lintl $libintl_extra_libs"
-+ unset ac_cv_func_bind_textdomain_codeset
-+ AC_CHECK_FUNCS(bind_textdomain_codeset)
-+ LIBS="$glib_save_LIBS"
-+
-+ if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
-+ gt_cv_func_dgettext_libc=no
-+ else
-+ if test "$gt_cv_func_dgettext_libc" = "yes" \
-+ && test "$gt_cv_func_ngettext_libc" = "yes"; then
-+ gt_cv_func_dgettext_libintl=no
-+ fi
-+ fi
-+ fi
-+ fi
-+
-+ if test "$gt_cv_func_dgettext_libc" = "yes" \
-+ || test "$gt_cv_func_dgettext_libintl" = "yes"; then
-+ gt_cv_have_gettext=yes
-+ fi
-+
-+ if test "$gt_cv_func_dgettext_libintl" = "yes"; then
-+ INTLLIBS="-lintl $libintl_extra_libs"
-+ fi
-+
-+ if test "$gt_cv_have_gettext" = "yes"; then
-+ AC_DEFINE(HAVE_GETTEXT,1,
-+ [Define if the GNU gettext() function is already present or preinstalled.])
-+ GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
-+ if test "$MSGFMT" != "no"; then
-+ glib_save_LIBS="$LIBS"
-+ LIBS="$LIBS $INTLLIBS"
-+ AC_CHECK_FUNCS(dcgettext)
-+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-+ GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
-+ AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
-+ return _nl_msg_cat_cntr],
-+ [CATOBJEXT=.gmo
-+ DATADIRNAME=share],
-+ [case $host in
-+ *-*-solaris*)
-+ dnl On Solaris, if bind_textdomain_codeset is in libc,
-+ dnl GNU format message catalog is always supported,
-+ dnl since both are added to the libc all together.
-+ dnl Hence, we'd like to go with DATADIRNAME=share and
-+ dnl and CATOBJEXT=.gmo in this case.
-+ AC_CHECK_FUNC(bind_textdomain_codeset,
-+ [CATOBJEXT=.gmo
-+ DATADIRNAME=share],
-+ [CATOBJEXT=.mo
-+ DATADIRNAME=lib])
-+ ;;
-+ *)
-+ CATOBJEXT=.mo
-+ DATADIRNAME=lib
-+ ;;
-+ esac])
-+ LIBS="$glib_save_LIBS"
-+ INSTOBJEXT=.mo
-+ else
-+ gt_cv_have_gettext=no
-+ fi
-+ fi
-+ ])
-+
-+ if test "$gt_cv_have_gettext" = "yes" ; then
-+ AC_DEFINE(ENABLE_NLS, 1,
-+ [always defined to indicate that i18n is enabled])
-+ fi
-+
-+ dnl Test whether we really found GNU xgettext.
-+ if test "$XGETTEXT" != ":"; then
-+ dnl If it is not GNU xgettext we define it as : so that the
-+ dnl Makefiles still can work.
-+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
-+ : ;
-+ else
-+ AC_MSG_RESULT(
-+ [found xgettext program is not GNU xgettext; ignore it])
-+ XGETTEXT=":"
-+ fi
-+ fi
-+
-+ # We need to process the po/ directory.
-+ POSUB=po
-+
-+ AC_OUTPUT_COMMANDS(
-+ [case "$CONFIG_FILES" in *po/Makefile.in*)
-+ sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
-+ esac])
-+
-+ dnl These rules are solely for the distribution goal. While doing this
-+ dnl we only have to keep exactly one list of the available catalogs
-+ dnl in configure.in.
-+ for lang in $ALL_LINGUAS; do
-+ GMOFILES="$GMOFILES $lang.gmo"
-+ POFILES="$POFILES $lang.po"
-+ done
-+
-+ dnl Make all variables we use known to autoconf.
-+ AC_SUBST(CATALOGS)
-+ AC_SUBST(CATOBJEXT)
-+ AC_SUBST(DATADIRNAME)
-+ AC_SUBST(GMOFILES)
-+ AC_SUBST(INSTOBJEXT)
-+ AC_SUBST(INTLLIBS)
-+ AC_SUBST(PO_IN_DATADIR_TRUE)
-+ AC_SUBST(PO_IN_DATADIR_FALSE)
-+ AC_SUBST(POFILES)
-+ AC_SUBST(POSUB)
-+ ])
-+
-+# AM_GLIB_GNU_GETTEXT
-+# -------------------
-+# Do checks necessary for use of gettext. If a suitable implementation
-+# of gettext is found in either in libintl or in the C library,
-+# it will set INTLLIBS to the libraries needed for use of gettext
-+# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
-+# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
-+# on various variables needed by the Makefile.in.in installed by
-+# glib-gettextize.
-+dnl
-+glib_DEFUN([GLIB_GNU_GETTEXT],
-+ [AC_REQUIRE([AC_PROG_CC])dnl
-+ AC_REQUIRE([AC_HEADER_STDC])dnl
-+
-+ GLIB_LC_MESSAGES
-+ GLIB_WITH_NLS
-+
-+ if test "$gt_cv_have_gettext" = "yes"; then
-+ if test "x$ALL_LINGUAS" = "x"; then
-+ LINGUAS=
-+ else
-+ AC_MSG_CHECKING(for catalogs to be installed)
-+ NEW_LINGUAS=
-+ for presentlang in $ALL_LINGUAS; do
-+ useit=no
-+ if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
-+ desiredlanguages="$LINGUAS"
-+ else
-+ desiredlanguages="$ALL_LINGUAS"
-+ fi
-+ for desiredlang in $desiredlanguages; do
-+ # Use the presentlang catalog if desiredlang is
-+ # a. equal to presentlang, or
-+ # b. a variant of presentlang (because in this case,
-+ # presentlang can be used as a fallback for messages
-+ # which are not translated in the desiredlang catalog).
-+ case "$desiredlang" in
-+ "$presentlang"*) useit=yes;;
-+ esac
-+ done
-+ if test $useit = yes; then
-+ NEW_LINGUAS="$NEW_LINGUAS $presentlang"
-+ fi
-+ done
-+ LINGUAS=$NEW_LINGUAS
-+ AC_MSG_RESULT($LINGUAS)
-+ fi
-+
-+ dnl Construct list of names of catalog files to be constructed.
-+ if test -n "$LINGUAS"; then
-+ for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
-+ fi
-+ fi
-+
-+ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
-+ dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
-+ dnl Try to locate is.
-+ MKINSTALLDIRS=
-+ if test -n "$ac_aux_dir"; then
-+ MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
-+ fi
-+ if test -z "$MKINSTALLDIRS"; then
-+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-+ fi
-+ AC_SUBST(MKINSTALLDIRS)
-+
-+ dnl Generate list of files to be processed by xgettext which will
-+ dnl be included in po/Makefile.
-+ test -d po || mkdir po
-+ if test "x$srcdir" != "x."; then
-+ if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
-+ posrcprefix="$srcdir/"
-+ else
-+ posrcprefix="../$srcdir/"
-+ fi
-+ else
-+ posrcprefix="../"
-+ fi
-+ rm -f po/POTFILES
-+ sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
-+ < $srcdir/po/POTFILES.in > po/POTFILES
-+ ])
-+
-+# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
-+# -------------------------------
-+# Define VARIABLE to the location where catalog files will
-+# be installed by po/Makefile.
-+glib_DEFUN([GLIB_DEFINE_LOCALEDIR],
-+[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
-+glib_save_prefix="$prefix"
-+glib_save_exec_prefix="$exec_prefix"
-+test "x$prefix" = xNONE && prefix=$ac_default_prefix
-+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
-+if test "x$CATOBJEXT" = "x.mo" ; then
-+ localedir=`eval echo "${libdir}/locale"`
-+else
-+ localedir=`eval echo "${datadir}/locale"`
-+fi
-+prefix="$glib_save_prefix"
-+exec_prefix="$glib_save_exec_prefix"
-+AC_DEFINE_UNQUOTED($1, "$localedir",
-+ [Define the location where the catalogs will be installed])
-+])
-+
-+dnl
-+dnl Now the definitions that aclocal will find
-+dnl
-+ifdef(glib_configure_in,[],[
-+AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)])
-+AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)])
-+])dnl
-+
-+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-+
+--- dbus-0.61.orig/aclocal.m4 2006-02-27 22:56:46.000000000 +0100
++++ dbus-0.61/aclocal.m4 2006-02-27 22:57:04.000000000 +0100
+@@ -412,7 +412,7 @@
+
+ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+-# serial 48 AC_PROG_LIBTOOL
+# serial 48 Debian 1.5.22-2 AC_PROG_LIBTOOL
-+
-+
-+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-+# -----------------------------------------------------------
-+# If this macro is not defined by Autoconf, define it here.
-+m4_ifdef([AC_PROVIDE_IFELSE],
-+ [],
-+ [m4_define([AC_PROVIDE_IFELSE],
-+ [m4_ifdef([AC_PROVIDE_$1],
-+ [$2], [$3])])])
-+
-+
-+# AC_PROG_LIBTOOL
-+# ---------------
-+AC_DEFUN([AC_PROG_LIBTOOL],
-+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
-+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
-+ [AC_LIBTOOL_CXX],
-+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
-+ ])])
-+dnl And a similar setup for Fortran 77 support
-+ AC_PROVIDE_IFELSE([AC_PROG_F77],
-+ [AC_LIBTOOL_F77],
-+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
-+])])
-+
-+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
-+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-+ [AC_LIBTOOL_GCJ],
-+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-+ [AC_LIBTOOL_GCJ],
-+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
-+ [AC_LIBTOOL_GCJ],
-+ [ifdef([AC_PROG_GCJ],
-+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
-+ ifdef([A][M_PROG_GCJ],
-+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
-+ ifdef([LT_AC_PROG_GCJ],
-+ [define([LT_AC_PROG_GCJ],
-+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
-+])])# AC_PROG_LIBTOOL
-+
-+
-+# _AC_PROG_LIBTOOL
-+# ----------------
-+AC_DEFUN([_AC_PROG_LIBTOOL],
-+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
-+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-+
-+# This can be used to rebuild libtool when needed
-+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-+
-+# Always use our own libtool.
-+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+AC_SUBST(LIBTOOL)dnl
-+
-+# Prevent multiple expansion
-+define([AC_PROG_LIBTOOL], [])
-+])# _AC_PROG_LIBTOOL
-+
-+
-+# AC_LIBTOOL_SETUP
-+# ----------------
-+AC_DEFUN([AC_LIBTOOL_SETUP],
-+[AC_PREREQ(2.50)dnl
-+AC_REQUIRE([AC_ENABLE_SHARED])dnl
-+AC_REQUIRE([AC_ENABLE_STATIC])dnl
-+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-+AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-+AC_REQUIRE([AC_PROG_CC])dnl
-+AC_REQUIRE([AC_PROG_LD])dnl
-+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-+AC_REQUIRE([AC_PROG_NM])dnl
-+
-+AC_REQUIRE([AC_PROG_LN_S])dnl
-+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-+AC_REQUIRE([AC_OBJEXT])dnl
-+AC_REQUIRE([AC_EXEEXT])dnl
-+dnl
-+
-+AC_LIBTOOL_SYS_MAX_CMD_LEN
-+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-+AC_LIBTOOL_OBJDIR
-+
-+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-+_LT_AC_PROG_ECHO_BACKSLASH
-+
-+case $host_os in
-+aix3*)
-+ # AIX sometimes has problems with the GCC collect2 program. For some
-+ # reason, if we set the COLLECT_NAMES environment variable, the problems
-+ # vanish in a puff of smoke.
-+ if test "X${COLLECT_NAMES+set}" != Xset; then
-+ COLLECT_NAMES=
-+ export COLLECT_NAMES
-+ fi
-+ ;;
-+esac
-+
-+# Sed substitution that helps us do robust quoting. It backslashifies
-+# metacharacters that are still active within double-quoted strings.
-+Xsed='sed -e 1s/^X//'
-+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
-+
-+# Same as above, but do not quote variable references.
-+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
-+
-+# Sed substitution to delay expansion of an escaped shell variable in a
-+# double_quote_subst'ed string.
-+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-+
-+# Sed substitution to avoid accidental globbing in evaled expressions
-+no_glob_subst='s/\*/\\\*/g'
-+
-+# Constants:
-+rm="rm -f"
-+
-+# Global variables:
-+default_ofile=libtool
-+can_build_shared=yes
-+
-+# All known linkers require a `.a' archive for static linking (except MSVC,
-+# which needs '.lib').
-+libext=a
-+ltmain="$ac_aux_dir/ltmain.sh"
-+ofile="$default_ofile"
-+with_gnu_ld="$lt_cv_prog_gnu_ld"
-+
-+AC_CHECK_TOOL(AR, ar, false)
-+AC_CHECK_TOOL(RANLIB, ranlib, :)
-+AC_CHECK_TOOL(STRIP, strip, :)
-+
-+old_CC="$CC"
-+old_CFLAGS="$CFLAGS"
-+
-+# Set sane defaults for various variables
-+test -z "$AR" && AR=ar
-+test -z "$AR_FLAGS" && AR_FLAGS=cru
-+test -z "$AS" && AS=as
-+test -z "$CC" && CC=cc
-+test -z "$LTCC" && LTCC=$CC
-+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+test -z "$LD" && LD=ld
-+test -z "$LN_S" && LN_S="ln -s"
-+test -z "$MAGIC_CMD" && MAGIC_CMD=file
-+test -z "$NM" && NM=nm
-+test -z "$SED" && SED=sed
-+test -z "$OBJDUMP" && OBJDUMP=objdump
-+test -z "$RANLIB" && RANLIB=:
-+test -z "$STRIP" && STRIP=:
-+test -z "$ac_objext" && ac_objext=o
-+
-+# Determine commands to create old-style static archives.
-+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-+old_postinstall_cmds='chmod 644 $oldlib'
-+old_postuninstall_cmds=
-+
-+if test -n "$RANLIB"; then
-+ case $host_os in
-+ openbsd*)
-+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-+ ;;
-+ *)
-+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-+ ;;
-+ esac
-+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-+fi
-+
-+_LT_CC_BASENAME([$compiler])
-+
-+# Only perform the check for file, if the check method requires it
-+case $deplibs_check_method in
-+file_magic*)
-+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-+ AC_PATH_MAGIC
-+ fi
-+ ;;
-+esac
-+
-+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-+enable_win32_dll=yes, enable_win32_dll=no)
-+
-+AC_ARG_ENABLE([libtool-lock],
-+ [AC_HELP_STRING([--disable-libtool-lock],
-+ [avoid locking (might break parallel builds)])])
-+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-+
-+AC_ARG_WITH([pic],
-+ [AC_HELP_STRING([--with-pic],
-+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-+ [pic_mode="$withval"],
-+ [pic_mode=default])
-+test -z "$pic_mode" && pic_mode=default
-+
-+# Use C for the default configuration in the libtool script
-+tagname=
-+AC_LIBTOOL_LANG_C_CONFIG
-+_LT_AC_TAGCONFIG
-+])# AC_LIBTOOL_SETUP
-+
-+
-+# _LT_AC_SYS_COMPILER
-+# -------------------
-+AC_DEFUN([_LT_AC_SYS_COMPILER],
-+[AC_REQUIRE([AC_PROG_CC])dnl
-+
-+# If no C compiler was specified, use CC.
-+LTCC=${LTCC-"$CC"}
-+
-+# If no C compiler flags were specified, use CFLAGS.
-+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-+
-+# Allow CC to be a program name with arguments.
-+compiler=$CC
-+])# _LT_AC_SYS_COMPILER
-+
-+
-+# _LT_CC_BASENAME(CC)
-+# -------------------
-+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
-+AC_DEFUN([_LT_CC_BASENAME],
-+[for cc_temp in $1""; do
-+ case $cc_temp in
-+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+])
-+
-+
-+# _LT_COMPILER_BOILERPLATE
-+# ------------------------
-+# Check for compiler boilerplate output or warnings with
-+# the simple compiler test code.
-+AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-+[ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_compiler_boilerplate=`cat conftest.err`
-+$rm conftest*
-+])# _LT_COMPILER_BOILERPLATE
-+
-+
-+# _LT_LINKER_BOILERPLATE
-+# ----------------------
-+# Check for linker boilerplate output or warnings with
-+# the simple link test code.
-+AC_DEFUN([_LT_LINKER_BOILERPLATE],
-+[ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_link_test_code" >conftest.$ac_ext
-+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_linker_boilerplate=`cat conftest.err`
-+$rm conftest*
-+])# _LT_LINKER_BOILERPLATE
-+
-+
-+# _LT_AC_SYS_LIBPATH_AIX
-+# ----------------------
-+# Links a minimal program and checks the executable
-+# for the system default hardcoded library path. In most cases,
-+# this is /usr/lib:/lib, but when the MPI compilers are used
-+# the location of the communication and MPI libs are included too.
-+# If we don't find anything, use the default library path according
-+# to the aix ld manual.
-+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi],[])
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+])# _LT_AC_SYS_LIBPATH_AIX
-+
-+
-+# _LT_AC_SHELL_INIT(ARG)
-+# ----------------------
-+AC_DEFUN([_LT_AC_SHELL_INIT],
-+[ifdef([AC_DIVERSION_NOTICE],
-+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-+ [AC_DIVERT_PUSH(NOTICE)])
-+$1
-+AC_DIVERT_POP
-+])# _LT_AC_SHELL_INIT
-+
-+
-+# _LT_AC_PROG_ECHO_BACKSLASH
-+# --------------------------
-+# Add some code to the start of the generated configure script which
-+# will find an echo command which doesn't interpret backslashes.
-+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-+[_LT_AC_SHELL_INIT([
-+# Check that we are running under the correct shell.
-+SHELL=${CONFIG_SHELL-/bin/sh}
-+
-+case X$ECHO in
-+X*--fallback-echo)
-+ # Remove one level of quotation (which was required for Make).
-+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-+ ;;
-+esac
-+
-+echo=${ECHO-echo}
-+if test "X[$]1" = X--no-reexec; then
-+ # Discard the --no-reexec flag, and continue.
-+ shift
-+elif test "X[$]1" = X--fallback-echo; then
-+ # Avoid inline document here, it may be left over
-+ :
-+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
-+ # Yippee, $echo works!
-+ :
-+else
-+ # Restart under the correct shell.
-+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-+fi
-+
-+if test "X[$]1" = X--fallback-echo; then
-+ # used as fallback echo
-+ shift
-+ cat <<EOF
-+[$]*
-+EOF
-+ exit 0
-+fi
-+
-+# The HP-UX ksh and POSIX shell print the target directory to stdout
-+# if CDPATH is set.
-+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-+
-+if test -z "$ECHO"; then
-+if test "X${echo_test_string+set}" != Xset; then
-+# find a string as large as possible, as long as the shell can cope with it
-+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-+ if (echo_test_string=`eval $cmd`) 2>/dev/null &&
-+ echo_test_string=`eval $cmd` &&
-+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
-+ then
-+ break
-+ fi
-+ done
-+fi
-+
-+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ :
-+else
-+ # The Solaris, AIX, and Digital Unix default echo programs unquote
-+ # backslashes. This makes it impossible to quote backslashes using
-+ # echo "$something" | sed 's/\\/\\\\/g'
-+ #
-+ # So, first we look for a working echo in the user's PATH.
-+
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ for dir in $PATH /usr/ucb; do
-+ IFS="$lt_save_ifs"
-+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ echo="$dir/echo"
-+ break
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+
-+ if test "X$echo" = Xecho; then
-+ # We didn't find a better echo, so look for alternatives.
-+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ # This shell has a builtin print -r that does the trick.
-+ echo='print -r'
-+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-+ test "X$CONFIG_SHELL" != X/bin/ksh; then
-+ # If we have ksh, try running configure again with it.
-+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-+ export ORIGINAL_CONFIG_SHELL
-+ CONFIG_SHELL=/bin/ksh
-+ export CONFIG_SHELL
-+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-+ else
-+ # Try using printf.
-+ echo='printf %s\n'
-+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ # Cool, printf works
-+ :
-+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-+ test "X$echo_testing_string" = 'X\t' &&
-+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-+ export CONFIG_SHELL
-+ SHELL="$CONFIG_SHELL"
-+ export SHELL
-+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
-+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-+ test "X$echo_testing_string" = 'X\t' &&
-+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
-+ else
-+ # maybe with a smaller string...
-+ prev=:
-+
-+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
-+ then
-+ break
-+ fi
-+ prev="$cmd"
-+ done
-+
-+ if test "$prev" != 'sed 50q "[$]0"'; then
-+ echo_test_string=`eval $prev`
-+ export echo_test_string
-+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-+ else
-+ # Oops. We lost completely, so just stick with echo.
-+ echo=echo
-+ fi
-+ fi
-+ fi
-+ fi
-+fi
-+fi
-+
-+# Copy echo and quote the copy suitably for passing to libtool from
-+# the Makefile, instead of quoting the original, which is used later.
-+ECHO=$echo
-+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-+fi
-+
-+AC_SUBST(ECHO)
-+])])# _LT_AC_PROG_ECHO_BACKSLASH
-+
-+
-+# _LT_AC_LOCK
-+# -----------
-+AC_DEFUN([_LT_AC_LOCK],
-+[AC_ARG_ENABLE([libtool-lock],
-+ [AC_HELP_STRING([--disable-libtool-lock],
-+ [avoid locking (might break parallel builds)])])
-+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-+
-+# Some flags need to be propagated to the compiler or linker for good
-+# libtool support.
-+case $host in
-+ia64-*-hpux*)
-+ # Find out which ABI we are using.
-+ echo 'int i;' > conftest.$ac_ext
-+ if AC_TRY_EVAL(ac_compile); then
-+ case `/usr/bin/file conftest.$ac_objext` in
-+ *ELF-32*)
-+ HPUX_IA64_MODE="32"
-+ ;;
-+ *ELF-64*)
-+ HPUX_IA64_MODE="64"
-+ ;;
-+ esac
-+ fi
-+ rm -rf conftest*
-+ ;;
-+*-*-irix6*)
-+ # Find out which ABI we are using.
-+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-+ if AC_TRY_EVAL(ac_compile); then
-+ if test "$lt_cv_prog_gnu_ld" = yes; then
-+ case `/usr/bin/file conftest.$ac_objext` in
-+ *32-bit*)
-+ LD="${LD-ld} -melf32bsmip"
-+ ;;
-+ *N32*)
-+ LD="${LD-ld} -melf32bmipn32"
-+ ;;
-+ *64-bit*)
-+ LD="${LD-ld} -melf64bmip"
-+ ;;
-+ esac
-+ else
-+ case `/usr/bin/file conftest.$ac_objext` in
-+ *32-bit*)
-+ LD="${LD-ld} -32"
-+ ;;
-+ *N32*)
-+ LD="${LD-ld} -n32"
-+ ;;
-+ *64-bit*)
-+ LD="${LD-ld} -64"
-+ ;;
-+ esac
-+ fi
-+ fi
-+ rm -rf conftest*
-+ ;;
-+
-+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
-+ # Find out which ABI we are using.
-+ echo 'int i;' > conftest.$ac_ext
-+ if AC_TRY_EVAL(ac_compile); then
-+ case `/usr/bin/file conftest.o` in
-+ *32-bit*)
-+ case $host in
-+ x86_64-*linux*)
-+ LD="${LD-ld} -m elf_i386"
-+ ;;
-+ ppc64-*linux*|powerpc64-*linux*)
-+ LD="${LD-ld} -m elf32ppclinux"
-+ ;;
-+ s390x-*linux*)
-+ LD="${LD-ld} -m elf_s390"
-+ ;;
-+ sparc64-*linux*)
-+ LD="${LD-ld} -m elf32_sparc"
-+ ;;
-+ esac
-+ ;;
-+ *64-bit*)
-+ case $host in
-+ x86_64-*linux*)
-+ LD="${LD-ld} -m elf_x86_64"
-+ ;;
-+ ppc*-*linux*|powerpc*-*linux*)
-+ LD="${LD-ld} -m elf64ppc"
-+ ;;
-+ s390*-*linux*)
-+ LD="${LD-ld} -m elf64_s390"
-+ ;;
-+ sparc*-*linux*)
-+ LD="${LD-ld} -m elf64_sparc"
-+ ;;
-+ esac
-+ ;;
-+ esac
-+ fi
-+ rm -rf conftest*
-+ ;;
-+
-+*-*-sco3.2v5*)
-+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-+ SAVE_CFLAGS="$CFLAGS"
-+ CFLAGS="$CFLAGS -belf"
-+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-+ [AC_LANG_PUSH(C)
-+ AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-+ AC_LANG_POP])
-+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-+ CFLAGS="$SAVE_CFLAGS"
-+ fi
-+ ;;
-+sparc*-*solaris*)
-+ # Find out which ABI we are using.
-+ echo 'int i;' > conftest.$ac_ext
-+ if AC_TRY_EVAL(ac_compile); then
-+ case `/usr/bin/file conftest.o` in
-+ *64-bit*)
-+ case $lt_cv_prog_gnu_ld in
-+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
-+ *) LD="${LD-ld} -64" ;;
-+ esac
-+ ;;
-+ esac
-+ fi
-+ rm -rf conftest*
-+ ;;
-+
-+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
-+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-+ AC_CHECK_TOOL(AS, as, false)
-+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
-+ ;;
-+ ])
-+esac
-+
-+need_locks="$enable_libtool_lock"
-+
-+])# _LT_AC_LOCK
-+
-+
-+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-+# ----------------------------------------------------------------
-+# Check whether the given compiler option works
-+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
-+[AC_REQUIRE([LT_AC_PROG_SED])
-+AC_CACHE_CHECK([$1], [$2],
-+ [$2=no
-+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+ lt_compiler_flag="$3"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ # The option is referenced via a variable to avoid confusing sed.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&AS_MESSAGE_LOG_FD
-+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-+ $2=yes
-+ fi
-+ fi
-+ $rm conftest*
-+])
-+
-+if test x"[$]$2" = xyes; then
-+ ifelse([$5], , :, [$5])
-+else
-+ ifelse([$6], , :, [$6])
-+fi
-+])# AC_LIBTOOL_COMPILER_OPTION
-+
-+
-+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-+# [ACTION-SUCCESS], [ACTION-FAILURE])
-+# ------------------------------------------------------------
-+# Check whether the given compiler option works
-+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-+[AC_CACHE_CHECK([$1], [$2],
-+ [$2=no
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS $3"
-+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
-+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-+ # The linker can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ if test -s conftest.err; then
-+ # Append any errors to the config.log.
-+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
-+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if diff conftest.exp conftest.er2 >/dev/null; then
-+ $2=yes
-+ fi
-+ else
-+ $2=yes
-+ fi
-+ fi
-+ $rm conftest*
-+ LDFLAGS="$save_LDFLAGS"
-+])
-+
-+if test x"[$]$2" = xyes; then
-+ ifelse([$4], , :, [$4])
-+else
-+ ifelse([$5], , :, [$5])
-+fi
-+])# AC_LIBTOOL_LINKER_OPTION
-+
-+
-+# AC_LIBTOOL_SYS_MAX_CMD_LEN
-+# --------------------------
-+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-+[# find the maximum length of command line arguments
-+AC_MSG_CHECKING([the maximum length of command line arguments])
-+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
-+ i=0
-+ teststring="ABCD"
-+
-+ case $build_os in
-+ msdosdjgpp*)
-+ # On DJGPP, this test can blow up pretty badly due to problems in libc
-+ # (any single argument exceeding 2000 bytes causes a buffer overrun
-+ # during glob expansion). Even if it were fixed, the result of this
-+ # check would be larger than it should be.
-+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
-+ ;;
-+
-+ gnu*)
-+ # Under GNU Hurd, this test is not required because there is
-+ # no limit to the length of command line arguments.
-+ # Libtool will interpret -1 as no limit whatsoever
-+ lt_cv_sys_max_cmd_len=-1;
-+ ;;
-+
-+ cygwin* | mingw*)
-+ # On Win9x/ME, this test blows up -- it succeeds, but takes
-+ # about 5 minutes as the teststring grows exponentially.
-+ # Worse, since 9x/ME are not pre-emptively multitasking,
-+ # you end up with a "frozen" computer, even though with patience
-+ # the test eventually succeeds (with a max line length of 256k).
-+ # Instead, let's just punt: use the minimum linelength reported by
-+ # all of the supported platforms: 8192 (on NT/2K/XP).
-+ lt_cv_sys_max_cmd_len=8192;
-+ ;;
-+
-+ amigaos*)
-+ # On AmigaOS with pdksh, this test takes hours, literally.
-+ # So we just punt and use a minimum line length of 8192.
-+ lt_cv_sys_max_cmd_len=8192;
-+ ;;
-+
-+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-+ # This has been around since 386BSD, at least. Likely further.
-+ if test -x /sbin/sysctl; then
-+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-+ elif test -x /usr/sbin/sysctl; then
-+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-+ else
-+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
-+ fi
-+ # And add a safety zone
-+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-+ ;;
-+
-+ interix*)
-+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
-+ lt_cv_sys_max_cmd_len=196608
-+ ;;
-+
-+ osf*)
-+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-+ # nice to cause kernel panics so lets avoid the loop below.
-+ # First set a reasonable default.
-+ lt_cv_sys_max_cmd_len=16384
-+ #
-+ if test -x /sbin/sysconfig; then
-+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
-+ esac
-+ fi
-+ ;;
-+ sco3.2v5*)
-+ lt_cv_sys_max_cmd_len=102400
-+ ;;
-+ sysv5* | sco5v6* | sysv4.2uw2*)
-+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-+ if test -n "$kargmax"; then
-+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
-+ else
-+ lt_cv_sys_max_cmd_len=32768
-+ fi
-+ ;;
-+ *)
-+ # If test is not a shell built-in, we'll probably end up computing a
-+ # maximum length that is only half of the actual maximum length, but
-+ # we can't tell.
-+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-+ while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
-+ = "XX$teststring") >/dev/null 2>&1 &&
-+ new_result=`expr "X$teststring" : ".*" 2>&1` &&
-+ lt_cv_sys_max_cmd_len=$new_result &&
-+ test $i != 17 # 1/2 MB should be enough
-+ do
-+ i=`expr $i + 1`
-+ teststring=$teststring$teststring
-+ done
-+ teststring=
-+ # Add a significant safety factor because C++ compilers can tack on massive
-+ # amounts of additional arguments before passing them to the linker.
-+ # It appears as though 1/2 is a usable value.
-+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-+ ;;
-+ esac
-+])
-+if test -n $lt_cv_sys_max_cmd_len ; then
-+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
-+else
-+ AC_MSG_RESULT(none)
-+fi
-+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-+
-+
-+# _LT_AC_CHECK_DLFCN
-+# ------------------
-+AC_DEFUN([_LT_AC_CHECK_DLFCN],
-+[AC_CHECK_HEADERS(dlfcn.h)dnl
-+])# _LT_AC_CHECK_DLFCN
-+
-+
-+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-+# ---------------------------------------------------------------------
-+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-+if test "$cross_compiling" = yes; then :
-+ [$4]
-+else
-+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-+ lt_status=$lt_dlunknown
-+ cat > conftest.$ac_ext <<EOF
-+[#line __oline__ "configure"
-+#include "confdefs.h"
-+
-+#if HAVE_DLFCN_H
-+#include <dlfcn.h>
-+#endif
-+
-+#include <stdio.h>
-+
-+#ifdef RTLD_GLOBAL
-+# define LT_DLGLOBAL RTLD_GLOBAL
-+#else
-+# ifdef DL_GLOBAL
-+# define LT_DLGLOBAL DL_GLOBAL
-+# else
-+# define LT_DLGLOBAL 0
-+# endif
-+#endif
-+
-+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-+ find out it does not work in some platform. */
-+#ifndef LT_DLLAZY_OR_NOW
-+# ifdef RTLD_LAZY
-+# define LT_DLLAZY_OR_NOW RTLD_LAZY
-+# else
-+# ifdef DL_LAZY
-+# define LT_DLLAZY_OR_NOW DL_LAZY
-+# else
-+# ifdef RTLD_NOW
-+# define LT_DLLAZY_OR_NOW RTLD_NOW
-+# else
-+# ifdef DL_NOW
-+# define LT_DLLAZY_OR_NOW DL_NOW
-+# else
-+# define LT_DLLAZY_OR_NOW 0
-+# endif
-+# endif
-+# endif
-+# endif
-+#endif
-+
-+#ifdef __cplusplus
-+extern "C" void exit (int);
-+#endif
-+
-+void fnord() { int i=42;}
-+int main ()
-+{
-+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-+ int status = $lt_dlunknown;
-+
-+ if (self)
-+ {
-+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
-+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-+ /* dlclose (self); */
-+ }
-+ else
-+ puts (dlerror ());
-+
-+ exit (status);
-+}]
-+EOF
-+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
-+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
-+ lt_status=$?
-+ case x$lt_status in
-+ x$lt_dlno_uscore) $1 ;;
-+ x$lt_dlneed_uscore) $2 ;;
-+ x$lt_dlunknown|x*) $3 ;;
-+ esac
-+ else :
-+ # compilation failed
-+ $3
-+ fi
-+fi
-+rm -fr conftest*
-+])# _LT_AC_TRY_DLOPEN_SELF
-+
-+
-+# AC_LIBTOOL_DLOPEN_SELF
-+# ----------------------
-+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-+if test "x$enable_dlopen" != xyes; then
-+ enable_dlopen=unknown
-+ enable_dlopen_self=unknown
-+ enable_dlopen_self_static=unknown
-+else
-+ lt_cv_dlopen=no
-+ lt_cv_dlopen_libs=
-+
-+ case $host_os in
-+ beos*)
-+ lt_cv_dlopen="load_add_on"
-+ lt_cv_dlopen_libs=
-+ lt_cv_dlopen_self=yes
-+ ;;
-+
-+ mingw* | pw32*)
-+ lt_cv_dlopen="LoadLibrary"
-+ lt_cv_dlopen_libs=
-+ ;;
-+
-+ cygwin*)
-+ lt_cv_dlopen="dlopen"
-+ lt_cv_dlopen_libs=
-+ ;;
-+
-+ darwin*)
-+ # if libdl is installed we need to link against it
-+ AC_CHECK_LIB([dl], [dlopen],
-+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
-+ lt_cv_dlopen="dyld"
-+ lt_cv_dlopen_libs=
-+ lt_cv_dlopen_self=yes
-+ ])
-+ ;;
-+
-+ *)
-+ AC_CHECK_FUNC([shl_load],
-+ [lt_cv_dlopen="shl_load"],
-+ [AC_CHECK_LIB([dld], [shl_load],
-+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
-+ [AC_CHECK_FUNC([dlopen],
-+ [lt_cv_dlopen="dlopen"],
-+ [AC_CHECK_LIB([dl], [dlopen],
-+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
-+ [AC_CHECK_LIB([svld], [dlopen],
-+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
-+ [AC_CHECK_LIB([dld], [dld_link],
-+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
-+ ])
-+ ])
-+ ])
-+ ])
-+ ])
-+ ;;
-+ esac
-+
-+ if test "x$lt_cv_dlopen" != xno; then
-+ enable_dlopen=yes
-+ else
-+ enable_dlopen=no
-+ fi
-+
-+ case $lt_cv_dlopen in
-+ dlopen)
-+ save_CPPFLAGS="$CPPFLAGS"
-+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-+
-+ save_LDFLAGS="$LDFLAGS"
-+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-+
-+ save_LIBS="$LIBS"
-+ LIBS="$lt_cv_dlopen_libs $LIBS"
-+
-+ AC_CACHE_CHECK([whether a program can dlopen itself],
-+ lt_cv_dlopen_self, [dnl
-+ _LT_AC_TRY_DLOPEN_SELF(
-+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
-+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
-+ ])
-+
-+ if test "x$lt_cv_dlopen_self" = xyes; then
-+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
-+ lt_cv_dlopen_self_static, [dnl
-+ _LT_AC_TRY_DLOPEN_SELF(
-+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
-+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
-+ ])
-+ fi
-+
-+ CPPFLAGS="$save_CPPFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+ LIBS="$save_LIBS"
-+ ;;
-+ esac
-+
-+ case $lt_cv_dlopen_self in
-+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-+ *) enable_dlopen_self=unknown ;;
-+ esac
-+
-+ case $lt_cv_dlopen_self_static in
-+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-+ *) enable_dlopen_self_static=unknown ;;
-+ esac
-+fi
-+])# AC_LIBTOOL_DLOPEN_SELF
-+
-+
-+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
-+# ---------------------------------
-+# Check to see if options -c and -o are simultaneously supported by compiler
-+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
-+ $rm -r conftest 2>/dev/null
-+ mkdir conftest
-+ cd conftest
-+ mkdir out
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ lt_compiler_flag="-o out/conftest2.$ac_objext"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
-+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-+ fi
-+ fi
-+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
-+ $rm conftest*
-+ # SGI C++ compiler will create directory out/ii_files/ for
-+ # template instantiation
-+ test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
-+ $rm out/* && rmdir out
-+ cd ..
-+ rmdir conftest
-+ $rm conftest*
-+])
-+])# AC_LIBTOOL_PROG_CC_C_O
-+
-+
-+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
-+# -----------------------------------------
-+# Check to see if we can do hard links to lock some files if needed
-+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
-+[AC_REQUIRE([_LT_AC_LOCK])dnl
-+
-+hard_links="nottested"
-+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
-+ # do not overwrite the value of need_locks provided by the user
-+ AC_MSG_CHECKING([if we can lock with hard links])
-+ hard_links=yes
-+ $rm conftest*
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ touch conftest.a
-+ ln conftest.a conftest.b 2>&5 || hard_links=no
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ AC_MSG_RESULT([$hard_links])
-+ if test "$hard_links" = no; then
-+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
-+ need_locks=warn
-+ fi
-+else
-+ need_locks=no
-+fi
-+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-+
-+
-+# AC_LIBTOOL_OBJDIR
-+# -----------------
-+AC_DEFUN([AC_LIBTOOL_OBJDIR],
-+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
-+[rm -f .libs 2>/dev/null
-+mkdir .libs 2>/dev/null
-+if test -d .libs; then
-+ lt_cv_objdir=.libs
-+else
-+ # MS-DOS does not allow filenames that begin with a dot.
-+ lt_cv_objdir=_libs
-+fi
-+rmdir .libs 2>/dev/null])
-+objdir=$lt_cv_objdir
-+])# AC_LIBTOOL_OBJDIR
-+
-+
-+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
-+# ----------------------------------------------
-+# Check hardcoding attributes.
-+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
-+[AC_MSG_CHECKING([how to hardcode library paths into programs])
-+_LT_AC_TAGVAR(hardcode_action, $1)=
-+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
-+ test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
-+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-+
-+ # We can hardcode non-existant directories.
-+ if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
-+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
-+ # have to relink, otherwise we might link with an installed library
-+ # when we should be linking with a yet-to-be-installed one
-+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
-+ # Linking always hardcodes the temporary library directory.
-+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
-+ else
-+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
-+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
-+ fi
-+else
-+ # We cannot hardcode anything, or else we can only hardcode existing
-+ # directories.
-+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
-+fi
-+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-+
-+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
-+ # Fast installation is not supported
-+ enable_fast_install=no
-+elif test "$shlibpath_overrides_runpath" = yes ||
-+ test "$enable_shared" = no; then
-+ # Fast installation is not necessary
-+ enable_fast_install=needless
-+fi
-+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-+
-+
-+# AC_LIBTOOL_SYS_LIB_STRIP
-+# ------------------------
-+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
-+[striplib=
-+old_striplib=
-+AC_MSG_CHECKING([whether stripping libraries is possible])
-+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
-+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-+ AC_MSG_RESULT([yes])
-+else
-+# FIXME - insert some real tests, host_os isn't really good enough
-+ case $host_os in
-+ darwin*)
-+ if test -n "$STRIP" ; then
-+ striplib="$STRIP -x"
-+ AC_MSG_RESULT([yes])
-+ else
-+ AC_MSG_RESULT([no])
-+fi
-+ ;;
-+ *)
-+ AC_MSG_RESULT([no])
-+ ;;
-+ esac
-+fi
-+])# AC_LIBTOOL_SYS_LIB_STRIP
-+
-+
-+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-+# -----------------------------
-+# PORTME Fill in your ld.so characteristics
-+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-+[AC_MSG_CHECKING([dynamic linker characteristics])
-+library_names_spec=
-+libname_spec='lib$name'
-+soname_spec=
-+shrext_cmds=".so"
-+postinstall_cmds=
-+postuninstall_cmds=
-+finish_cmds=
-+finish_eval=
-+shlibpath_var=
-+shlibpath_overrides_runpath=unknown
-+version_type=none
-+dynamic_linker="$host_os ld.so"
-+sys_lib_dlsearch_path_spec="/lib /usr/lib"
-+if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
-+ # if the path contains ";" then we assume it to be the separator
-+ # otherwise default to the standard path separator (i.e. ":") - it is
-+ # assumed that no part of a normal pathname contains ";" but that should
-+ # okay in the real world where ";" in dirpaths is itself problematic.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+else
-+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-+fi
-+need_lib_prefix=unknown
-+hardcode_into_libs=no
-+
-+# when you set need_version to no, make sure it does not cause -set_version
-+# flags to be left without arguments
-+need_version=unknown
-+
-+case $host_os in
-+aix3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-+ shlibpath_var=LIBPATH
-+
-+ # AIX 3 has no versioning support, so we append a major version to the name.
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+
-+aix4* | aix5*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ hardcode_into_libs=yes
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 supports IA64
-+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ else
-+ # With GCC up to 2.95.x, collect2 would create an import file
-+ # for dependence libraries. The import file would start with
-+ # the line `#! .'. This would cause the generated library to
-+ # depend on `.', always an invalid library. This was fixed in
-+ # development snapshots of GCC prior to 3.0.
-+ case $host_os in
-+ aix4 | aix4.[[01]] | aix4.[[01]].*)
-+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-+ echo ' yes '
-+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
-+ :
-+ else
-+ can_build_shared=no
-+ fi
-+ ;;
-+ esac
-+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-+ # soname into executable. Probably we can add versioning support to
-+ # collect2, so additional links can be useful in future.
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-+ # instead of lib<name>.a to let people know that these are not
-+ # typical AIX shared libraries.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ else
-+ # We preserve .a as extension for shared libraries through AIX4.2
-+ # and later when we are not doing run time linking.
-+ library_names_spec='${libname}${release}.a $libname.a'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ fi
-+ shlibpath_var=LIBPATH
-+ fi
-+ ;;
-+
-+amigaos*)
-+ library_names_spec='$libname.ixlibrary $libname.a'
-+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
-+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-+ ;;
-+
-+beos*)
-+ library_names_spec='${libname}${shared_ext}'
-+ dynamic_linker="$host_os ld.so"
-+ shlibpath_var=LIBRARY_PATH
-+ ;;
-+
-+bsdi[[45]]*)
-+ version_type=linux
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-+ # the default ld.so.conf also contains /usr/contrib/lib and
-+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-+ # libtool to hard-code these into programs
-+ ;;
-+
-+cygwin* | mingw* | pw32*)
-+ version_type=windows
-+ shrext_cmds=".dll"
-+ need_version=no
-+ need_lib_prefix=no
-+
-+ case $GCC,$host_os in
-+ yes,cygwin* | yes,mingw* | yes,pw32*)
-+ library_names_spec='$libname.dll.a'
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname~
-+ chmod a+x \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $rm \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+
-+ case $host_os in
-+ cygwin*)
-+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-+ ;;
-+ mingw*)
-+ # MinGW DLLs use traditional 'lib' prefix
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
-+ # It is most probably a Windows format PATH printed by
-+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
-+ # path with ; separators, and with drive letters. We can handle the
-+ # drive letters (cygwin fileutils understands them), so leave them,
-+ # especially as we might pass files found there to a mingw objdump,
-+ # which wouldn't understand a cygwinified path. Ahh.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ ;;
-+ pw32*)
-+ # pw32 DLLs use 'pw' prefix rather than 'lib'
-+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ ;;
-+ esac
-+ dynamic_linker='Win32 ld.exe'
-+ # FIXME: first we should search . and the directory the executable is in
-+ shlibpath_var=PATH
-+ ;;
-+
-+darwin* | rhapsody*)
-+ dynamic_linker="$host_os dyld"
-+ version_type=darwin
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-+ soname_spec='${libname}${release}${major}$shared_ext'
-+ shlibpath_overrides_runpath=yes
-+ shlibpath_var=DYLD_LIBRARY_PATH
-+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-+ if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-+ else
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-+ ;;
-+
-+dgux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+freebsd1*)
-+ dynamic_linker=no
-+ ;;
-+
-+kfreebsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+freebsd* | dragonfly*)
-+ # DragonFly does not have aout. When/if they implement a new
-+ # versioning mechanism, adjust this.
-+ if test -x /usr/bin/objformat; then
-+ objformat=`/usr/bin/objformat`
-+ else
-+ case $host_os in
-+ freebsd[[123]]*) objformat=aout ;;
-+ *) objformat=elf ;;
-+ esac
-+ fi
-+ version_type=freebsd-$objformat
-+ case $version_type in
-+ freebsd-elf*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ need_version=no
-+ need_lib_prefix=no
-+ ;;
-+ freebsd-*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-+ need_version=yes
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_os in
-+ freebsd2*)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
-+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd*) # from 4.6 on
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ esac
-+ ;;
-+
-+gnu*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ ;;
-+
-+hpux9* | hpux10* | hpux11*)
-+ # Give a soname corresponding to the major version so that dld.sl refuses to
-+ # link against other versions.
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ case $host_cpu in
-+ ia64*)
-+ shrext_cmds='.so'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.so"
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ if test "X$HPUX_IA64_MODE" = X32; then
-+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-+ else
-+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-+ fi
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ hppa*64*)
-+ shrext_cmds='.sl'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ *)
-+ shrext_cmds='.sl'
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=SHLIB_PATH
-+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+ esac
-+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
-+ postinstall_cmds='chmod 555 $lib'
-+ ;;
-+
-+interix3*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+
-+irix5* | irix6* | nonstopux*)
-+ case $host_os in
-+ nonstopux*) version_type=nonstopux ;;
-+ *)
-+ if test "$lt_cv_prog_gnu_ld" = yes; then
-+ version_type=linux
-+ else
-+ version_type=irix
-+ fi ;;
-+ esac
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ case $host_os in
-+ irix5* | nonstopux*)
-+ libsuff= shlibsuff=
-+ ;;
-+ *)
-+ case $LD in # libtool.m4 will add one of these switches to LD
-+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-+ libsuff= shlibsuff= libmagic=32-bit;;
-+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-+ libsuff=32 shlibsuff=N32 libmagic=N32;;
-+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
-+ *) libsuff= shlibsuff= libmagic=never-match;;
-+ esac
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-+ hardcode_into_libs=yes
-+ ;;
-+
-+# No shared lib support for Linux oldld, aout, or coff.
-+linux*oldld* | linux*aout* | linux*coff*)
-+ dynamic_linker=no
-+ ;;
-+
-+# This must be Linux ELF.
-+linux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ # This implies no fast_install, which is unacceptable.
-+ # Some rework will be needed to allow for fast_install
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+
+
+ # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+@@ -1977,27 +1977,10 @@
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+- # find out which ABI we are using
+- libsuff=
+- case "$host_cpu" in
+- x86_64*|s390x*|powerpc64*)
+- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+- if AC_TRY_EVAL(ac_compile); then
+- case `/usr/bin/file conftest.$ac_objext` in
+- *64-bit*)
+- libsuff=64
+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+- ;;
+- esac
+- fi
+- rm -rf conftest*
+- ;;
+- esac
+-
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+ # powerpc, because MkLinux only supported shared libraries with the
-+ # GNU dynamic linker. Since this was broken with cross compilers,
-+ # most powerpc-linux boxes support dynamic linking these days and
-+ # people can always --disable-shared, the test was removed, and we
-+ # assume the GNU/Linux dynamic linker is in use.
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -2009,6 +1992,18 @@
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
@@ -17715,4304 +55,69 @@
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
-+knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+netbsd*)
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ dynamic_linker='NetBSD (a.out) ld.so'
-+ else
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='NetBSD ld.elf_so'
-+ fi
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+
-+newsos6)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+nto-qnx*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+openbsd*)
-+ version_type=sunos
-+ sys_lib_dlsearch_path_spec="/usr/lib"
-+ need_lib_prefix=no
-+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-+ case $host_os in
-+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-+ *) need_version=no ;;
-+ esac
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ case $host_os in
-+ openbsd2.[[89]] | openbsd2.[[89]].*)
-+ shlibpath_overrides_runpath=no
-+ ;;
-+ *)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ esac
-+ else
-+ shlibpath_overrides_runpath=yes
-+ fi
-+ ;;
-+
-+os2*)
-+ libname_spec='$name'
-+ shrext_cmds=".dll"
-+ need_lib_prefix=no
-+ library_names_spec='$libname${shared_ext} $libname.a'
-+ dynamic_linker='OS/2 ld.exe'
-+ shlibpath_var=LIBPATH
-+ ;;
-+
-+osf3* | osf4* | osf5*)
-+ version_type=osf
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-+ ;;
-+
-+solaris*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ # ldd complains unless libraries are executable
-+ postinstall_cmds='chmod +x $lib'
-+ ;;
-+
-+sunos4*)
-+ version_type=sunos
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ if test "$with_gnu_ld" = yes; then
-+ need_lib_prefix=no
-+ fi
-+ need_version=yes
-+ ;;
-+
-+sysv4 | sysv4.3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_vendor in
-+ sni)
-+ shlibpath_overrides_runpath=no
-+ need_lib_prefix=no
-+ export_dynamic_flag_spec='${wl}-Blargedynsym'
-+ runpath_var=LD_RUN_PATH
-+ ;;
-+ siemens)
-+ need_lib_prefix=no
-+ ;;
-+ motorola)
-+ need_lib_prefix=no
-+ need_version=no
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-+ ;;
-+ esac
-+ ;;
-+
-+sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ version_type=linux
-+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-+ soname_spec='$libname${shared_ext}.$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ fi
-+ ;;
-+
-+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-+ version_type=freebsd-elf
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ if test "$with_gnu_ld" = yes; then
-+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-+ shlibpath_overrides_runpath=no
-+ else
-+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-+ shlibpath_overrides_runpath=yes
-+ case $host_os in
-+ sco3.2v5*)
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-+ ;;
-+ esac
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/lib'
-+ ;;
-+
-+uts4*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+*)
-+ dynamic_linker=no
-+ ;;
-+esac
-+AC_MSG_RESULT([$dynamic_linker])
-+test "$dynamic_linker" = no && can_build_shared=no
-+
-+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-+if test "$GCC" = yes; then
-+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-+fi
-+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-+
-+
-+# _LT_AC_TAGCONFIG
-+# ----------------
-+AC_DEFUN([_LT_AC_TAGCONFIG],
-+[AC_ARG_WITH([tags],
-+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
-+ [include additional configurations @<:@automatic@:>@])],
-+ [tagnames="$withval"])
-+
-+if test -f "$ltmain" && test -n "$tagnames"; then
-+ if test ! -f "${ofile}"; then
-+ AC_MSG_WARN([output file `$ofile' does not exist])
-+ fi
-+
-+ if test -z "$LTCC"; then
-+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
-+ if test -z "$LTCC"; then
-+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
-+ else
-+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
-+ fi
-+ fi
-+ if test -z "$LTCFLAGS"; then
-+ eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
-+ fi
-+
-+ # Extract list of available tagged configurations in $ofile.
-+ # Note that this assumes the entire list is on one line.
-+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-+
-+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-+ for tagname in $tagnames; do
-+ IFS="$lt_save_ifs"
-+ # Check whether tagname contains only valid characters
-+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
-+ "") ;;
-+ *) AC_MSG_ERROR([invalid tag name: $tagname])
-+ ;;
-+ esac
-+
-+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
-+ then
-+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
-+ fi
-+
-+ # Update the list of available tags.
-+ if test -n "$tagname"; then
-+ echo appending configuration tag \"$tagname\" to $ofile
-+
-+ case $tagname in
-+ CXX)
-+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-+ (test "X$CXX" != "Xg++"))) ; then
-+ AC_LIBTOOL_LANG_CXX_CONFIG
-+ else
-+ tagname=""
-+ fi
-+ ;;
-+
-+ F77)
-+ if test -n "$F77" && test "X$F77" != "Xno"; then
-+ AC_LIBTOOL_LANG_F77_CONFIG
-+ else
-+ tagname=""
-+ fi
-+ ;;
-+
-+ GCJ)
-+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-+ AC_LIBTOOL_LANG_GCJ_CONFIG
-+ else
-+ tagname=""
-+ fi
-+ ;;
-+
-+ RC)
-+ AC_LIBTOOL_LANG_RC_CONFIG
-+ ;;
-+
-+ *)
-+ AC_MSG_ERROR([Unsupported tag name: $tagname])
-+ ;;
-+ esac
-+
-+ # Append the new tag name to the list of available tags.
-+ if test -n "$tagname" ; then
-+ available_tags="$available_tags $tagname"
-+ fi
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+
-+ # Now substitute the updated list of available tags.
-+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
-+ mv "${ofile}T" "$ofile"
-+ chmod +x "$ofile"
-+ else
-+ rm -f "${ofile}T"
-+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
-+ fi
-+fi
-+])# _LT_AC_TAGCONFIG
-+
-+
-+# AC_LIBTOOL_DLOPEN
-+# -----------------
-+# enable checks for dlopen support
-+AC_DEFUN([AC_LIBTOOL_DLOPEN],
-+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
-+])# AC_LIBTOOL_DLOPEN
-+
-+
-+# AC_LIBTOOL_WIN32_DLL
-+# --------------------
-+# declare package support for building win32 DLLs
-+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
-+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
-+])# AC_LIBTOOL_WIN32_DLL
-+
-+
-+# AC_ENABLE_SHARED([DEFAULT])
-+# ---------------------------
-+# implement the --enable-shared flag
-+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-+AC_DEFUN([AC_ENABLE_SHARED],
-+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-+AC_ARG_ENABLE([shared],
-+ [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-+ [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
-+ [p=${PACKAGE-default}
-+ case $enableval in
-+ yes) enable_shared=yes ;;
-+ no) enable_shared=no ;;
-+ *)
-+ enable_shared=no
-+ # Look at the argument we got. We use all the common list separators.
-+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-+ for pkg in $enableval; do
-+ IFS="$lt_save_ifs"
-+ if test "X$pkg" = "X$p"; then
-+ enable_shared=yes
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ ;;
-+ esac],
-+ [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
-+])# AC_ENABLE_SHARED
-+
-+
-+# AC_DISABLE_SHARED
-+# -----------------
-+# set the default shared flag to --disable-shared
-+AC_DEFUN([AC_DISABLE_SHARED],
-+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-+AC_ENABLE_SHARED(no)
-+])# AC_DISABLE_SHARED
-+
-+
-+# AC_ENABLE_STATIC([DEFAULT])
-+# ---------------------------
-+# implement the --enable-static flag
-+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-+AC_DEFUN([AC_ENABLE_STATIC],
-+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-+AC_ARG_ENABLE([static],
-+ [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-+ [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
-+ [p=${PACKAGE-default}
-+ case $enableval in
-+ yes) enable_static=yes ;;
-+ no) enable_static=no ;;
-+ *)
-+ enable_static=no
-+ # Look at the argument we got. We use all the common list separators.
-+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-+ for pkg in $enableval; do
-+ IFS="$lt_save_ifs"
-+ if test "X$pkg" = "X$p"; then
-+ enable_static=yes
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ ;;
-+ esac],
-+ [enable_static=]AC_ENABLE_STATIC_DEFAULT)
-+])# AC_ENABLE_STATIC
-+
-+
-+# AC_DISABLE_STATIC
-+# -----------------
-+# set the default static flag to --disable-static
-+AC_DEFUN([AC_DISABLE_STATIC],
-+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-+AC_ENABLE_STATIC(no)
-+])# AC_DISABLE_STATIC
-+
-+
-+# AC_ENABLE_FAST_INSTALL([DEFAULT])
-+# ---------------------------------
-+# implement the --enable-fast-install flag
-+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
-+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-+AC_ARG_ENABLE([fast-install],
-+ [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-+ [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
-+ [p=${PACKAGE-default}
-+ case $enableval in
-+ yes) enable_fast_install=yes ;;
-+ no) enable_fast_install=no ;;
-+ *)
-+ enable_fast_install=no
-+ # Look at the argument we got. We use all the common list separators.
-+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-+ for pkg in $enableval; do
-+ IFS="$lt_save_ifs"
-+ if test "X$pkg" = "X$p"; then
-+ enable_fast_install=yes
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ ;;
-+ esac],
-+ [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
-+])# AC_ENABLE_FAST_INSTALL
-+
-+
-+# AC_DISABLE_FAST_INSTALL
-+# -----------------------
-+# set the default to --disable-fast-install
-+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-+AC_ENABLE_FAST_INSTALL(no)
-+])# AC_DISABLE_FAST_INSTALL
-+
-+
-+# AC_LIBTOOL_PICMODE([MODE])
-+# --------------------------
-+# implement the --with-pic flag
-+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
-+AC_DEFUN([AC_LIBTOOL_PICMODE],
-+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-+pic_mode=ifelse($#,1,$1,default)
-+])# AC_LIBTOOL_PICMODE
-+
-+
-+# AC_PROG_EGREP
-+# -------------
-+# This is predefined starting with Autoconf 2.54, so this conditional
-+# definition can be removed once we require Autoconf 2.54 or later.
-+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
-+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
-+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-+ then ac_cv_prog_egrep='grep -E'
-+ else ac_cv_prog_egrep='egrep'
-+ fi])
-+ EGREP=$ac_cv_prog_egrep
-+ AC_SUBST([EGREP])
-+])])
-+
-+
-+# AC_PATH_TOOL_PREFIX
-+# -------------------
-+# find a file program which can recognise shared library
-+AC_DEFUN([AC_PATH_TOOL_PREFIX],
-+[AC_REQUIRE([AC_PROG_EGREP])dnl
-+AC_MSG_CHECKING([for $1])
-+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
-+[case $MAGIC_CMD in
-+[[\\/*] | ?:[\\/]*])
-+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-+ ;;
-+*)
-+ lt_save_MAGIC_CMD="$MAGIC_CMD"
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+dnl $ac_dummy forces splitting on constant user-supplied paths.
-+dnl POSIX.2 word splitting is done only on the output of word expansions,
-+dnl not every word. This closes a longstanding sh security hole.
-+ ac_dummy="ifelse([$2], , $PATH, [$2])"
-+ for ac_dir in $ac_dummy; do
-+ IFS="$lt_save_ifs"
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f $ac_dir/$1; then
-+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
-+ if test -n "$file_magic_test_file"; then
-+ case $deplibs_check_method in
-+ "file_magic "*)
-+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-+ $EGREP "$file_magic_regex" > /dev/null; then
-+ :
-+ else
-+ cat <<EOF 1>&2
-+
-+*** Warning: the command libtool uses to detect shared libraries,
-+*** $file_magic_cmd, produces output that libtool cannot recognize.
-+*** The result is that libtool may fail to recognize shared libraries
-+*** as such. This will affect the creation of libtool libraries that
-+*** depend on shared libraries, but programs linked with such libtool
-+*** libraries will work regardless of this problem. Nevertheless, you
-+*** may want to report the problem to your system manager and/or to
-+*** bug-libtool at gnu.org
-+
-+EOF
-+ fi ;;
-+ esac
-+ fi
-+ break
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ MAGIC_CMD="$lt_save_MAGIC_CMD"
-+ ;;
-+esac])
-+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-+if test -n "$MAGIC_CMD"; then
-+ AC_MSG_RESULT($MAGIC_CMD)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+])# AC_PATH_TOOL_PREFIX
-+
-+
-+# AC_PATH_MAGIC
-+# -------------
-+# find a file program which can recognise a shared library
-+AC_DEFUN([AC_PATH_MAGIC],
-+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
-+if test -z "$lt_cv_path_MAGIC_CMD"; then
-+ if test -n "$ac_tool_prefix"; then
-+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-+ else
-+ MAGIC_CMD=:
-+ fi
-+fi
-+])# AC_PATH_MAGIC
-+
-+
-+# AC_PROG_LD
-+# ----------
-+# find the pathname to the GNU or non-GNU linker
-+AC_DEFUN([AC_PROG_LD],
-+[AC_ARG_WITH([gnu-ld],
-+ [AC_HELP_STRING([--with-gnu-ld],
-+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
-+ [test "$withval" = no || with_gnu_ld=yes],
-+ [with_gnu_ld=no])
-+AC_REQUIRE([LT_AC_PROG_SED])dnl
-+AC_REQUIRE([AC_PROG_CC])dnl
-+AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-+ac_prog=ld
-+if test "$GCC" = yes; then
-+ # Check if gcc -print-prog-name=ld gives a path.
-+ AC_MSG_CHECKING([for ld used by $CC])
-+ case $host in
-+ *-*-mingw*)
-+ # gcc leaves a trailing carriage return which upsets mingw
-+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-+ *)
-+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-+ esac
-+ case $ac_prog in
-+ # Accept absolute paths.
-+ [[\\/]]* | ?:[[\\/]]*)
-+ re_direlt='/[[^/]][[^/]]*/\.\./'
-+ # Canonicalize the pathname of ld
-+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
-+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
-+ done
-+ test -z "$LD" && LD="$ac_prog"
-+ ;;
-+ "")
-+ # If it fails, then pretend we aren't using GCC.
-+ ac_prog=ld
-+ ;;
-+ *)
-+ # If it is relative, then search for the first ld in PATH.
-+ with_gnu_ld=unknown
-+ ;;
-+ esac
-+elif test "$with_gnu_ld" = yes; then
-+ AC_MSG_CHECKING([for GNU ld])
-+else
-+ AC_MSG_CHECKING([for non-GNU ld])
-+fi
-+AC_CACHE_VAL(lt_cv_path_LD,
-+[if test -z "$LD"; then
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ for ac_dir in $PATH; do
-+ IFS="$lt_save_ifs"
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-+ lt_cv_path_LD="$ac_dir/$ac_prog"
-+ # Check to see if the program is GNU ld. I'd rather use --version,
-+ # but apparently some variants of GNU ld only accept -v.
-+ # Break only if it was the GNU/non-GNU ld that we prefer.
-+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-+ *GNU* | *'with BFD'*)
-+ test "$with_gnu_ld" != no && break
-+ ;;
-+ *)
-+ test "$with_gnu_ld" != yes && break
-+ ;;
-+ esac
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+else
-+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
-+fi])
-+LD="$lt_cv_path_LD"
-+if test -n "$LD"; then
-+ AC_MSG_RESULT($LD)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-+AC_PROG_LD_GNU
-+])# AC_PROG_LD
-+
-+
-+# AC_PROG_LD_GNU
-+# --------------
-+AC_DEFUN([AC_PROG_LD_GNU],
-+[AC_REQUIRE([AC_PROG_EGREP])dnl
-+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
-+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
-+case `$LD -v 2>&1 </dev/null` in
-+*GNU* | *'with BFD'*)
-+ lt_cv_prog_gnu_ld=yes
-+ ;;
-+*)
-+ lt_cv_prog_gnu_ld=no
-+ ;;
-+esac])
-+with_gnu_ld=$lt_cv_prog_gnu_ld
-+])# AC_PROG_LD_GNU
-+
-+
-+# AC_PROG_LD_RELOAD_FLAG
-+# ----------------------
-+# find reload flag for linker
-+# -- PORTME Some linkers may need a different reload flag.
-+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-+[AC_CACHE_CHECK([for $LD option to reload object files],
-+ lt_cv_ld_reload_flag,
-+ [lt_cv_ld_reload_flag='-r'])
-+reload_flag=$lt_cv_ld_reload_flag
-+case $reload_flag in
-+"" | " "*) ;;
-+*) reload_flag=" $reload_flag" ;;
-+esac
-+reload_cmds='$LD$reload_flag -o $output$reload_objs'
-+case $host_os in
-+ darwin*)
-+ if test "$GCC" = yes; then
-+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-+ else
-+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
-+ fi
-+ ;;
-+esac
-+])# AC_PROG_LD_RELOAD_FLAG
-+
-+
-+# AC_DEPLIBS_CHECK_METHOD
-+# -----------------------
-+# how to check for library dependencies
-+# -- PORTME fill in with the dynamic library characteristics
-+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-+[AC_CACHE_CHECK([how to recognise dependent libraries],
-+lt_cv_deplibs_check_method,
-+[lt_cv_file_magic_cmd='$MAGIC_CMD'
-+lt_cv_file_magic_test_file=
-+lt_cv_deplibs_check_method='unknown'
-+# Need to set the preceding variable on all platforms that support
-+# interlibrary dependencies.
-+# 'none' -- dependencies not supported.
-+# `unknown' -- same as none, but documents that we really don't know.
-+# 'pass_all' -- all dependencies passed with no checks.
-+# 'test_compile' -- check by making test program.
-+# 'file_magic [[regex]]' -- check by looking for files in library path
-+# which responds to the $file_magic_cmd with a given extended regex.
-+# If you have `file' or equivalent on your system and you're not sure
-+# whether `pass_all' will *always* work, you probably want this one.
-+
-+case $host_os in
-+aix4* | aix5*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+beos*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+bsdi[[45]]*)
-+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-+ lt_cv_file_magic_cmd='/usr/bin/file -L'
-+ lt_cv_file_magic_test_file=/shlib/libc.so
-+ ;;
-+
-+cygwin*)
-+ # func_win32_libid is a shell function defined in ltmain.sh
-+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-+ lt_cv_file_magic_cmd='func_win32_libid'
-+ ;;
-+
-+mingw* | pw32*)
-+ # Base MSYS/MinGW do not provide the 'file' command needed by
-+ # func_win32_libid shell function, so use a weaker test based on 'objdump'.
-+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ lt_cv_file_magic_cmd='$OBJDUMP -f'
-+ ;;
-+
-+darwin* | rhapsody*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+freebsd* | kfreebsd*-gnu | dragonfly*)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-+ case $host_cpu in
-+ i*86 )
-+ # Not sure whether the presence of OpenBSD here was a mistake.
-+ # Let's accept both of them until this is cleared up.
-+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-+ lt_cv_file_magic_cmd=/usr/bin/file
-+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-+ ;;
-+ esac
-+ else
-+ lt_cv_deplibs_check_method=pass_all
-+ fi
-+ ;;
-+
-+gnu*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+hpux10.20* | hpux11*)
-+ lt_cv_file_magic_cmd=/usr/bin/file
-+ case $host_cpu in
-+ ia64*)
-+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
-+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-+ ;;
-+ hppa*64*)
-+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
-+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-+ ;;
-+ *)
-+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
-+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
-+ ;;
-+ esac
-+ ;;
-+
-+interix3*)
-+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
-+ ;;
-+
-+irix5* | irix6* | nonstopux*)
-+ case $LD in
-+ *-32|*"-32 ") libmagic=32-bit;;
-+ *-n32|*"-n32 ") libmagic=N32;;
-+ *-64|*"-64 ") libmagic=64-bit;;
-+ *) libmagic=never-match;;
-+ esac
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+# This must be Linux ELF.
-+linux*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
+ knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+@@ -2784,7 +2779,7 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+-netbsd*)
+netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-+ else
-+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
-+ fi
-+ ;;
-+
-+newos6*)
-+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-+ lt_cv_file_magic_cmd=/usr/bin/file
-+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
-+ ;;
-+
-+nto-qnx*)
-+ lt_cv_deplibs_check_method=unknown
-+ ;;
-+
-+openbsd*)
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
-+ else
-+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-+ fi
-+ ;;
-+
-+osf3* | osf4* | osf5*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+solaris*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+sysv4 | sysv4.3*)
-+ case $host_vendor in
-+ motorola)
-+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
-+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-+ ;;
-+ ncr)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+ sequent)
-+ lt_cv_file_magic_cmd='/bin/file'
-+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
-+ ;;
-+ sni)
-+ lt_cv_file_magic_cmd='/bin/file'
-+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
-+ lt_cv_file_magic_test_file=/lib/libc.so
-+ ;;
-+ siemens)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+ pc)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+ esac
-+ ;;
-+
-+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+esac
-+])
-+file_magic_cmd=$lt_cv_file_magic_cmd
-+deplibs_check_method=$lt_cv_deplibs_check_method
-+test -z "$deplibs_check_method" && deplibs_check_method=unknown
-+])# AC_DEPLIBS_CHECK_METHOD
-+
-+
-+# AC_PROG_NM
-+# ----------
-+# find the pathname to a BSD-compatible name lister
-+AC_DEFUN([AC_PROG_NM],
-+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
-+[if test -n "$NM"; then
-+ # Let the user override the test.
-+ lt_cv_path_NM="$NM"
-+else
-+ lt_nm_to_check="${ac_tool_prefix}nm"
-+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-+ lt_nm_to_check="$lt_nm_to_check nm"
-+ fi
-+ for lt_tmp_nm in $lt_nm_to_check; do
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-+ IFS="$lt_save_ifs"
-+ test -z "$ac_dir" && ac_dir=.
-+ tmp_nm="$ac_dir/$lt_tmp_nm"
-+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-+ # Check to see if the nm accepts a BSD-compat flag.
-+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-+ # nm: unknown option "B" ignored
-+ # Tru64's nm complains that /dev/null is an invalid object file
-+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-+ */dev/null* | *'Invalid file or object type'*)
-+ lt_cv_path_NM="$tmp_nm -B"
-+ break
-+ ;;
-+ *)
-+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-+ */dev/null*)
-+ lt_cv_path_NM="$tmp_nm -p"
-+ break
-+ ;;
-+ *)
-+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-+ continue # so that we can try to find one that supports BSD flags
-+ ;;
-+ esac
-+ ;;
-+ esac
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ done
-+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-+fi])
-+NM="$lt_cv_path_NM"
-+])# AC_PROG_NM
-+
-+
-+# AC_CHECK_LIBM
-+# -------------
-+# check for math library
-+AC_DEFUN([AC_CHECK_LIBM],
-+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+LIBM=
-+case $host in
-+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
-+ # These system don't have libm, or don't need it
-+ ;;
-+*-ncr-sysv4.3*)
-+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
-+ ;;
-+*)
-+ AC_CHECK_LIB(m, cos, LIBM="-lm")
-+ ;;
-+esac
-+])# AC_CHECK_LIBM
-+
-+
-+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
-+# -----------------------------------
-+# sets LIBLTDL to the link flags for the libltdl convenience library and
-+# LTDLINCL to the include flags for the libltdl header and adds
-+# --enable-ltdl-convenience to the configure arguments. Note that
-+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
-+# it is assumed to be `libltdl'. LIBLTDL will be prefixed with
-+# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
-+# (note the single quotes!). If your package is not flat and you're not
-+# using automake, define top_builddir and top_srcdir appropriately in
-+# the Makefiles.
-+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-+ case $enable_ltdl_convenience in
-+ no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
-+ "") enable_ltdl_convenience=yes
-+ ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
-+ esac
-+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
-+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-+ # For backwards non-gettext consistent compatibility...
-+ INCLTDL="$LTDLINCL"
-+])# AC_LIBLTDL_CONVENIENCE
-+
-+
-+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
-+# -----------------------------------
-+# sets LIBLTDL to the link flags for the libltdl installable library and
-+# LTDLINCL to the include flags for the libltdl header and adds
-+# --enable-ltdl-install to the configure arguments. Note that
-+# AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided,
-+# and an installed libltdl is not found, it is assumed to be `libltdl'.
-+# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
-+# '${top_srcdir}/' (note the single quotes!). If your package is not
-+# flat and you're not using automake, define top_builddir and top_srcdir
-+# appropriately in the Makefiles.
-+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-+ AC_CHECK_LIB(ltdl, lt_dlinit,
-+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
-+ [if test x"$enable_ltdl_install" = xno; then
-+ AC_MSG_WARN([libltdl not installed, but installation disabled])
-+ else
-+ enable_ltdl_install=yes
-+ fi
-+ ])
-+ if test x"$enable_ltdl_install" = x"yes"; then
-+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
-+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
-+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-+ else
-+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
-+ LIBLTDL="-lltdl"
-+ LTDLINCL=
-+ fi
-+ # For backwards non-gettext consistent compatibility...
-+ INCLTDL="$LTDLINCL"
-+])# AC_LIBLTDL_INSTALLABLE
-+
-+
-+# AC_LIBTOOL_CXX
-+# --------------
-+# enable support for C++ libraries
-+AC_DEFUN([AC_LIBTOOL_CXX],
-+[AC_REQUIRE([_LT_AC_LANG_CXX])
-+])# AC_LIBTOOL_CXX
-+
-+
-+# _LT_AC_LANG_CXX
-+# ---------------
-+AC_DEFUN([_LT_AC_LANG_CXX],
-+[AC_REQUIRE([AC_PROG_CXX])
-+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
-+])# _LT_AC_LANG_CXX
-+
-+# _LT_AC_PROG_CXXCPP
-+# ------------------
-+AC_DEFUN([_LT_AC_PROG_CXXCPP],
-+[
-+AC_REQUIRE([AC_PROG_CXX])
-+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-+ (test "X$CXX" != "Xg++"))) ; then
-+ AC_PROG_CXXCPP
-+fi
-+])# _LT_AC_PROG_CXXCPP
-+
-+# AC_LIBTOOL_F77
-+# --------------
-+# enable support for Fortran 77 libraries
-+AC_DEFUN([AC_LIBTOOL_F77],
-+[AC_REQUIRE([_LT_AC_LANG_F77])
-+])# AC_LIBTOOL_F77
-+
-+
-+# _LT_AC_LANG_F77
-+# ---------------
-+AC_DEFUN([_LT_AC_LANG_F77],
-+[AC_REQUIRE([AC_PROG_F77])
-+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
-+])# _LT_AC_LANG_F77
-+
-+
-+# AC_LIBTOOL_GCJ
-+# --------------
-+# enable support for GCJ libraries
-+AC_DEFUN([AC_LIBTOOL_GCJ],
-+[AC_REQUIRE([_LT_AC_LANG_GCJ])
-+])# AC_LIBTOOL_GCJ
-+
-+
-+# _LT_AC_LANG_GCJ
-+# ---------------
-+AC_DEFUN([_LT_AC_LANG_GCJ],
-+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
-+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
-+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
-+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
-+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
-+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
-+])# _LT_AC_LANG_GCJ
-+
-+
-+# AC_LIBTOOL_RC
-+# -------------
-+# enable support for Windows resource files
-+AC_DEFUN([AC_LIBTOOL_RC],
-+[AC_REQUIRE([LT_AC_PROG_RC])
-+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
-+])# AC_LIBTOOL_RC
-+
-+
-+# AC_LIBTOOL_LANG_C_CONFIG
-+# ------------------------
-+# Ensure that the configuration vars for the C compiler are
-+# suitably defined. Those variables are subsequently used by
-+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
-+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
-+[lt_save_CC="$CC"
-+AC_LANG_PUSH(C)
-+
-+# Source file extension for C test sources.
-+ac_ext=c
-+
-+# Object file extension for compiled C test sources.
-+objext=o
-+_LT_AC_TAGVAR(objext, $1)=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code="int some_variable = 0;\n"
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code='int main(){return(0);}\n'
-+
-+_LT_AC_SYS_COMPILER
-+
-+# save warnings/boilerplate of simple test code
-+_LT_COMPILER_BOILERPLATE
-+_LT_LINKER_BOILERPLATE
-+
-+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-+AC_LIBTOOL_PROG_COMPILER_PIC($1)
-+AC_LIBTOOL_PROG_CC_C_O($1)
-+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-+AC_LIBTOOL_PROG_LD_SHLIBS($1)
-+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-+AC_LIBTOOL_SYS_LIB_STRIP
-+AC_LIBTOOL_DLOPEN_SELF
-+
-+# Report which library types will actually be built
-+AC_MSG_CHECKING([if libtool supports shared libraries])
-+AC_MSG_RESULT([$can_build_shared])
-+
-+AC_MSG_CHECKING([whether to build shared libraries])
-+test "$can_build_shared" = "no" && enable_shared=no
-+
-+# On AIX, shared libraries and static libraries use the same namespace, and
-+# are all built from PIC.
-+case $host_os in
-+aix3*)
-+ test "$enable_shared" = yes && enable_static=no
-+ if test -n "$RANLIB"; then
-+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
-+ postinstall_cmds='$RANLIB $lib'
-+ fi
-+ ;;
-+
-+aix4* | aix5*)
-+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-+ test "$enable_shared" = yes && enable_static=no
-+ fi
-+ ;;
-+esac
-+AC_MSG_RESULT([$enable_shared])
-+
-+AC_MSG_CHECKING([whether to build static libraries])
-+# Make sure either enable_shared or enable_static is yes.
-+test "$enable_shared" = yes || enable_static=yes
-+AC_MSG_RESULT([$enable_static])
-+
-+AC_LIBTOOL_CONFIG($1)
-+
-+AC_LANG_POP
-+CC="$lt_save_CC"
-+])# AC_LIBTOOL_LANG_C_CONFIG
-+
-+
-+# AC_LIBTOOL_LANG_CXX_CONFIG
-+# --------------------------
-+# Ensure that the configuration vars for the C compiler are
-+# suitably defined. Those variables are subsequently used by
-+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
-+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
-+[AC_LANG_PUSH(C++)
-+AC_REQUIRE([AC_PROG_CXX])
-+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-+
-+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-+_LT_AC_TAGVAR(always_export_symbols, $1)=no
-+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-+_LT_AC_TAGVAR(hardcode_direct, $1)=no
-+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-+_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-+_LT_AC_TAGVAR(module_cmds, $1)=
-+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-+_LT_AC_TAGVAR(no_undefined_flag, $1)=
-+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-+
-+# Dependencies to place before and after the object being linked:
-+_LT_AC_TAGVAR(predep_objects, $1)=
-+_LT_AC_TAGVAR(postdep_objects, $1)=
-+_LT_AC_TAGVAR(predeps, $1)=
-+_LT_AC_TAGVAR(postdeps, $1)=
-+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
-+
-+# Source file extension for C++ test sources.
-+ac_ext=cpp
-+
-+# Object file extension for compiled C++ test sources.
-+objext=o
-+_LT_AC_TAGVAR(objext, $1)=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code="int some_variable = 0;\n"
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n'
-+
-+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-+_LT_AC_SYS_COMPILER
-+
-+# save warnings/boilerplate of simple test code
-+_LT_COMPILER_BOILERPLATE
-+_LT_LINKER_BOILERPLATE
-+
-+# Allow CC to be a program name with arguments.
-+lt_save_CC=$CC
-+lt_save_LD=$LD
-+lt_save_GCC=$GCC
-+GCC=$GXX
-+lt_save_with_gnu_ld=$with_gnu_ld
-+lt_save_path_LD=$lt_cv_path_LD
-+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-+else
-+ $as_unset lt_cv_prog_gnu_ld
-+fi
-+if test -n "${lt_cv_path_LDCXX+set}"; then
-+ lt_cv_path_LD=$lt_cv_path_LDCXX
-+else
-+ $as_unset lt_cv_path_LD
-+fi
-+test -z "${LDCXX+set}" || LD=$LDCXX
-+CC=${CXX-"c++"}
-+compiler=$CC
-+_LT_AC_TAGVAR(compiler, $1)=$CC
-+_LT_CC_BASENAME([$compiler])
-+
-+# We don't want -fno-exception wen compiling C++ code, so set the
-+# no_builtin_flag separately
-+if test "$GXX" = yes; then
-+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-+else
-+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-+fi
-+
-+if test "$GXX" = yes; then
-+ # Set up default GNU C++ configuration
-+
-+ AC_PROG_LD
-+
-+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
-+ # archiving commands below assume that GNU ld is being used.
-+ if test "$with_gnu_ld" = yes; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-+
-+ # If archive_cmds runs LD, not CC, wlarc should be empty
-+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-+ # investigate it a little bit more. (MM)
-+ wlarc='${wl}'
-+
-+ # ancient GNU ld didn't support --whole-archive et. al.
-+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
-+ grep 'no-whole-archive' > /dev/null; then
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-+ else
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-+ fi
-+ else
-+ with_gnu_ld=no
-+ wlarc=
-+
-+ # A generic and very simple default shared library creation
-+ # command for GNU C++ for the case where it uses the native
-+ # linker, instead of GNU ld. If possible, this setting should
-+ # overridden to take advantage of the native linker features on
-+ # the platform it is being used on.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-+ fi
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-+
-+else
-+ GXX=no
-+ with_gnu_ld=no
-+ wlarc=
-+fi
-+
-+# PORTME: fill in a description of your system's C++ link characteristics
-+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
-+case $host_os in
-+ aix3*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ aix4* | aix5*)
-+ if test "$host_cpu" = ia64; then
-+ # On IA64, the linker does run time linking by default, so we don't
-+ # have to do anything special.
-+ aix_use_runtimelinking=no
-+ exp_sym_flag='-Bexport'
-+ no_entry_flag=""
-+ else
-+ aix_use_runtimelinking=no
-+
-+ # Test if we are trying to use run time linking or normal
-+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-+ # need to do runtime linking.
-+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
-+ for ld_flag in $LDFLAGS; do
-+ case $ld_flag in
-+ *-brtl*)
-+ aix_use_runtimelinking=yes
-+ break
-+ ;;
-+ esac
-+ done
-+ ;;
-+ esac
-+
-+ exp_sym_flag='-bexport'
-+ no_entry_flag='-bnoentry'
-+ fi
-+
-+ # When large executables or shared objects are built, AIX ld can
-+ # have problems creating the table of contents. If linking a library
-+ # or program results in "error TOC overflow" add -mminimal-toc to
-+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
-+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-+
-+ _LT_AC_TAGVAR(archive_cmds, $1)=''
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+
-+ if test "$GXX" = yes; then
-+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
-+ # We only want to do this on AIX 4.2 and lower, the check
-+ # below for broken collect2 doesn't work under 4.3+
-+ collect2name=`${CC} -print-prog-name=collect2`
-+ if test -f "$collect2name" && \
-+ strings "$collect2name" | grep resolve_lib_name >/dev/null
-+ then
-+ # We have reworked collect2
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ else
-+ # We have old collect2
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
-+ # It fails to find uninstalled libraries when the uninstalled
-+ # path is not listed in the libpath. Setting hardcode_minus_L
-+ # to unsupported forces relinking
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-+ fi
-+ ;;
-+ esac
-+ shared_flag='-shared'
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag="$shared_flag "'${wl}-G'
-+ fi
-+ else
-+ # not using gcc
-+ if test "$host_cpu" = ia64; then
-+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-+ # chokes on -Wl,-G. The following line is correct:
-+ shared_flag='-G'
-+ else
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag='${wl}-G'
-+ else
-+ shared_flag='${wl}-bM:SRE'
-+ fi
-+ fi
-+ fi
-+
-+ # It seems that -bexpall does not export symbols beginning with
-+ # underscore (_), so it is better to generate a list of symbols to export.
-+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # Warning - without using the other runtime loading flags (-brtl),
-+ # -berok will link without error, but may produce a broken library.
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ _LT_AC_SYS_LIBPATH_AIX
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-+
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-+ else
-+ if test "$host_cpu" = ia64; then
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-+ else
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ _LT_AC_SYS_LIBPATH_AIX
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ # Warning - without using the other run time loading flags,
-+ # -berok will link without error, but may produce a broken library.
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-+ # Exported symbols can be pulled into shared objects from archives
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-+ # This is similar to how AIX traditionally builds its shared libraries.
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-+ fi
-+ fi
-+ ;;
-+
-+ beos*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-+ # support --undefined. This deserves some investigation. FIXME
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+
-+ chorus*)
-+ case $cc_basename in
-+ *)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ esac
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-+ # as there is no search path for DLLs.
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
-+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-+
-+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ # If the export-symbols file already is a .def file (1st line
-+ # is EXPORTS), use it as is; otherwise, prepend...
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ cp $export_symbols $output_objdir/$soname.def;
-+ else
-+ echo EXPORTS > $output_objdir/$soname.def;
-+ cat $export_symbols >> $output_objdir/$soname.def;
-+ fi~
-+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+ darwin* | rhapsody*)
-+ case $host_os in
-+ rhapsody* | darwin1.[[012]])
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
-+ ;;
-+ *) # Darwin 1.3 on
-+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ else
-+ case ${MACOSX_DEPLOYMENT_TARGET} in
-+ 10.[[012]])
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ ;;
-+ 10.*)
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+ esac
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
-+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+
-+ if test "$GXX" = yes ; then
-+ lt_int_apple_cc_single_mod=no
-+ output_verbose_link_cmd='echo'
-+ if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
-+ lt_int_apple_cc_single_mod=yes
-+ fi
-+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-+ fi
-+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ else
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ fi
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ else
-+ case $cc_basename in
-+ xlc*)
-+ output_verbose_link_cmd='echo'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ dgux*)
-+ case $cc_basename in
-+ ec++*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ ghcx*)
-+ # Green Hills C++ Compiler
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ esac
-+ ;;
-+ freebsd[[12]]*)
-+ # C++ shared libraries reported to be fairly broken before switch to ELF
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ freebsd-elf*)
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ ;;
-+ freebsd* | kfreebsd*-gnu | dragonfly*)
-+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-+ # conventions
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-+ ;;
-+ gnu*)
-+ ;;
-+ hpux9*)
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-+ # but as the default
-+ # location of the library.
-+
-+ case $cc_basename in
-+ CC*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ aCC*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ *)
-+ if test "$GXX" = yes; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ else
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ hpux10*|hpux11*)
-+ if test $with_gnu_ld = no; then
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+ ;;
-+ esac
-+ fi
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
-+ # but as the default
-+ # location of the library.
-+ ;;
-+ esac
-+
-+ case $cc_basename in
-+ CC*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ aCC*)
-+ case $host_cpu in
-+ hppa*64*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ ia64*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ esac
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ *)
-+ if test "$GXX" = yes; then
-+ if test $with_gnu_ld = no; then
-+ case $host_cpu in
-+ hppa*64*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ ia64*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ esac
-+ fi
-+ else
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ interix3*)
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-+ # Instead, shared libraries are loaded at an image base (0x10000000 by
-+ # default) and relocated if they conflict, which is a slow very memory
-+ # consuming and fragmenting process. To avoid this, we pick a random,
-+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ ;;
-+ irix5* | irix6*)
-+ case $cc_basename in
-+ CC*)
-+ # SGI C++
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+
-+ # Archives containing C++ object files must be created using
-+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
-+ # necessary to make sure instantiated templates are included
-+ # in the archive.
-+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-+ ;;
-+ *)
-+ if test "$GXX" = yes; then
-+ if test "$with_gnu_ld" = no; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
-+ fi
-+ fi
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+ ;;
-+ esac
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+ ;;
-+ linux*)
-+ case $cc_basename in
-+ KCC*)
-+ # Kuck and Associates, Inc. (KAI) C++ Compiler
-+
-+ # KCC will only create a shared library if the output file
-+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
-+ # to its proper name (with version) after linking.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-+
-+ # Archives containing C++ object files must be created using
-+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-+ ;;
-+ icpc*)
-+ # Intel C++
-+ with_gnu_ld=yes
-+ # version 8.0 and above of icpc choke on multiply defined symbols
-+ # if we add $predep_objects and $postdep_objects, however 7.1 and
-+ # earlier do not add the objects themselves.
-+ case `$CC -V 2>&1` in
-+ *"Version 7."*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ ;;
-+ *) # Version 8.0 or newer
-+ tmp_idyn=
-+ case $host_cpu in
-+ ia64*) tmp_idyn=' -i_dynamic';;
-+ esac
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ ;;
-+ esac
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-+ ;;
-+ pgCC*)
-+ # Portland Group C++ compiler
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ ;;
-+ cxx*)
-+ # Compaq C++
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-+
-+ runpath_var=LD_RUN_PATH
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ esac
-+ ;;
-+ lynxos*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ m88k*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ mvs*)
-+ case $cc_basename in
-+ cxx*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ esac
-+ ;;
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+@@ -3793,7 +3788,7 @@
+ ;;
+ esac
+ ;;
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-+ wlarc=
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ fi
-+ # Workaround some broken pre-1.5 toolchains
-+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-+ ;;
-+ openbsd2*)
-+ # C++ shared libraries are fairly broken
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ openbsd*)
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-+ fi
-+ output_verbose_link_cmd='echo'
-+ ;;
-+ osf3*)
-+ case $cc_basename in
-+ KCC*)
-+ # Kuck and Associates, Inc. (KAI) C++ Compiler
-+
-+ # KCC will only create a shared library if the output file
-+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
-+ # to its proper name (with version) after linking.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ # Archives containing C++ object files must be created using
-+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-+
-+ ;;
-+ RCC*)
-+ # Rational C++ 2.4.1
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ cxx*)
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ *)
-+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-+
-+ else
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ osf4* | osf5*)
-+ case $cc_basename in
-+ KCC*)
-+ # Kuck and Associates, Inc. (KAI) C++ Compiler
-+
-+ # KCC will only create a shared library if the output file
-+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
-+ # to its proper name (with version) after linking.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ # Archives containing C++ object files must be created using
-+ # the KAI C++ compiler.
-+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
-+ ;;
-+ RCC*)
-+ # Rational C++ 2.4.1
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ cxx*)
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-+ echo "-hidden">> $lib.exp~
-+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
-+ $rm $lib.exp'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ *)
-+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-+
-+ else
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ psos*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ sunos4*)
-+ case $cc_basename in
-+ CC*)
-+ # Sun C++ 4.x
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ lcc*)
-+ # Lucid
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ esac
-+ ;;
-+ solaris*)
-+ case $cc_basename in
-+ CC*)
-+ # Sun C++ 4.2, 5.x and Centerline C++
-+ _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ case $host_os in
-+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-+ *)
-+ # The C++ compiler is used as linker so we must use $wl
-+ # flag to pass the commands to the underlying system
-+ # linker. We must also pass each convience library through
-+ # to the system linker between allextract/defaultextract.
-+ # The C++ compiler will combine linker options so we
-+ # cannot just pass the convience library names through
-+ # without $wl.
-+ # Supported since Solaris 2.6 (maybe 2.5.1?)
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
-+ ;;
-+ esac
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+
-+ output_verbose_link_cmd='echo'
-+
-+ # Archives containing C++ object files must be created using
-+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
-+ # necessary to make sure instantiated templates are included
-+ # in the archive.
-+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-+ ;;
-+ gcx*)
-+ # Green Hills C++ Compiler
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-+
-+ # The C++ compiler must be used to create the archive.
-+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-+ ;;
-+ *)
-+ # GNU C++ compiler with Solaris linker
-+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-+ if $CC --version | grep -v '^2\.7' > /dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
-+ else
-+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
-+ # platform.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
-+ fi
-+
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ runpath_var='LD_RUN_PATH'
-+
-+ case $cc_basename in
-+ CC*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ ;;
-+ sysv5* | sco3.2v5* | sco5v6*)
-+ # Note: We can NOT use -z defs as we might desire, because we do not
-+ # link with -lc, and that would cause any symbols used from libc to
-+ # always be unresolved, which means just about no library would
-+ # ever link correctly. If we're not using GNU ld we use -z text
-+ # though, which does catch some bad symbols but isn't as heavy-handed
-+ # as -z defs.
-+ # For security reasons, it is highly recommended that you always
-+ # use absolute paths for naming shared libraries, and exclude the
-+ # DT_RUNPATH tag from executables and libraries. But doing so
-+ # requires that you compile everything twice, which is a pain.
-+ # So that behaviour is only enabled if SCOABSPATH is set to a
-+ # non-empty value in the environment. Most likely only useful for
-+ # creating official distributions of packages.
-+ # This is a hack until libtool officially supports absolute path
-+ # names for shared libraries.
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-+ runpath_var='LD_RUN_PATH'
-+
-+ case $cc_basename in
-+ CC*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ ;;
-+ tandem*)
-+ case $cc_basename in
-+ NCC*)
-+ # NonStop-UX NCC 3.20
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ esac
-+ ;;
-+ vxworks*)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+esac
-+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-+
-+_LT_AC_TAGVAR(GCC, $1)="$GXX"
-+_LT_AC_TAGVAR(LD, $1)="$LD"
-+
-+AC_LIBTOOL_POSTDEP_PREDEP($1)
-+AC_LIBTOOL_PROG_COMPILER_PIC($1)
-+AC_LIBTOOL_PROG_CC_C_O($1)
-+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-+AC_LIBTOOL_PROG_LD_SHLIBS($1)
-+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-+
-+AC_LIBTOOL_CONFIG($1)
-+
-+AC_LANG_POP
-+CC=$lt_save_CC
-+LDCXX=$LD
-+LD=$lt_save_LD
-+GCC=$lt_save_GCC
-+with_gnu_ldcxx=$with_gnu_ld
-+with_gnu_ld=$lt_save_with_gnu_ld
-+lt_cv_path_LDCXX=$lt_cv_path_LD
-+lt_cv_path_LD=$lt_save_path_LD
-+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-+])# AC_LIBTOOL_LANG_CXX_CONFIG
-+
-+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
-+# ------------------------------------
-+# Figure out "hidden" library dependencies from verbose
-+# compiler output when linking a shared library.
-+# Parse the compiler output and extract the necessary
-+# objects, libraries and library flags.
-+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
-+dnl we can't use the lt_simple_compile_test_code here,
-+dnl because it contains code intended for an executable,
-+dnl not a library. It's possible we should let each
-+dnl tag define a new lt_????_link_test_code variable,
-+dnl but it's only used here...
-+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
-+int a;
-+void foo (void) { a = 0; }
-+EOF
-+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
-+class Foo
-+{
-+public:
-+ Foo (void) { a = 0; }
-+private:
-+ int a;
-+};
-+EOF
-+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
-+ subroutine foo
-+ implicit none
-+ integer*4 a
-+ a=0
-+ return
-+ end
-+EOF
-+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
-+public class foo {
-+ private int a;
-+ public void bar (void) {
-+ a = 0;
-+ }
-+};
-+EOF
-+])
-+dnl Parse the compiler output and extract the necessary
-+dnl objects, libraries and library flags.
-+if AC_TRY_EVAL(ac_compile); then
-+ # Parse the compiler output and extract the necessary
-+ # objects, libraries and library flags.
-+
-+ # Sentinel used to keep track of whether or not we are before
-+ # the conftest object file.
-+ pre_test_object_deps_done=no
-+
-+ # The `*' in the case matches for architectures that use `case' in
-+ # $output_verbose_cmd can trigger glob expansion during the loop
-+ # eval without this substitution.
-+ output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
-+
-+ for p in `eval $output_verbose_link_cmd`; do
-+ case $p in
-+
-+ -L* | -R* | -l*)
-+ # Some compilers place space between "-{L,R}" and the path.
-+ # Remove the space.
-+ if test $p = "-L" \
-+ || test $p = "-R"; then
-+ prev=$p
-+ continue
-+ else
-+ prev=
-+ fi
-+
-+ if test "$pre_test_object_deps_done" = no; then
-+ case $p in
-+ -L* | -R*)
-+ # Internal compiler library paths should come after those
-+ # provided the user. The postdeps already come after the
-+ # user supplied libs so there is no need to process them.
-+ if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
-+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-+ else
-+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
-+ fi
-+ ;;
-+ # The "-l" case would never come before the object being
-+ # linked, so don't bother handling this case.
-+ esac
-+ else
-+ if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
-+ _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
-+ else
-+ _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
-+ fi
-+ fi
-+ ;;
-+
-+ *.$objext)
-+ # This assumes that the test object file only shows up
-+ # once in the compiler output.
-+ if test "$p" = "conftest.$objext"; then
-+ pre_test_object_deps_done=yes
-+ continue
-+ fi
-+
-+ if test "$pre_test_object_deps_done" = no; then
-+ if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
-+ _LT_AC_TAGVAR(predep_objects, $1)="$p"
-+ else
-+ _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
-+ fi
-+ else
-+ if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
-+ _LT_AC_TAGVAR(postdep_objects, $1)="$p"
-+ else
-+ _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
-+ fi
-+ fi
-+ ;;
-+
-+ *) ;; # Ignore the rest.
-+
-+ esac
-+ done
-+
-+ # Clean up.
-+ rm -f a.out a.exe
-+else
-+ echo "libtool.m4: error: problem compiling $1 test program"
-+fi
-+
-+$rm -f confest.$objext
-+
-+# PORTME: override above test on systems where it is broken
-+ifelse([$1],[CXX],
-+[case $host_os in
-+interix3*)
-+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
-+ # hack all around it, let's just trust "g++" to DTRT.
-+ _LT_AC_TAGVAR(predep_objects,$1)=
-+ _LT_AC_TAGVAR(postdep_objects,$1)=
-+ _LT_AC_TAGVAR(postdeps,$1)=
-+ ;;
-+
-+solaris*)
-+ case $cc_basename in
-+ CC*)
-+ # Adding this requires a known-good setup of shared libraries for
-+ # Sun compiler versions before 5.6, else PIC objects from an old
-+ # archive will be linked into the output, leading to subtle bugs.
-+ _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'
-+ ;;
-+ esac
-+ ;;
-+esac
-+])
-+
-+case " $_LT_AC_TAGVAR(postdeps, $1) " in
-+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-+esac
-+])# AC_LIBTOOL_POSTDEP_PREDEP
-+
-+# AC_LIBTOOL_LANG_F77_CONFIG
-+# --------------------------
-+# Ensure that the configuration vars for the C compiler are
-+# suitably defined. Those variables are subsequently used by
-+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
-+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
-+[AC_REQUIRE([AC_PROG_F77])
-+AC_LANG_PUSH(Fortran 77)
-+
-+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-+_LT_AC_TAGVAR(always_export_symbols, $1)=no
-+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-+_LT_AC_TAGVAR(hardcode_direct, $1)=no
-+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-+_LT_AC_TAGVAR(module_cmds, $1)=
-+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-+_LT_AC_TAGVAR(no_undefined_flag, $1)=
-+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-+
-+# Source file extension for f77 test sources.
-+ac_ext=f
-+
-+# Object file extension for compiled f77 test sources.
-+objext=o
-+_LT_AC_TAGVAR(objext, $1)=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code=" program t\n end\n"
-+
-+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-+_LT_AC_SYS_COMPILER
-+
-+# save warnings/boilerplate of simple test code
-+_LT_COMPILER_BOILERPLATE
-+_LT_LINKER_BOILERPLATE
-+
-+# Allow CC to be a program name with arguments.
-+lt_save_CC="$CC"
-+CC=${F77-"f77"}
-+compiler=$CC
-+_LT_AC_TAGVAR(compiler, $1)=$CC
-+_LT_CC_BASENAME([$compiler])
-+
-+AC_MSG_CHECKING([if libtool supports shared libraries])
-+AC_MSG_RESULT([$can_build_shared])
-+
-+AC_MSG_CHECKING([whether to build shared libraries])
-+test "$can_build_shared" = "no" && enable_shared=no
-+
-+# On AIX, shared libraries and static libraries use the same namespace, and
-+# are all built from PIC.
-+case $host_os in
-+aix3*)
-+ test "$enable_shared" = yes && enable_static=no
-+ if test -n "$RANLIB"; then
-+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
-+ postinstall_cmds='$RANLIB $lib'
-+ fi
-+ ;;
-+aix4* | aix5*)
-+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-+ test "$enable_shared" = yes && enable_static=no
-+ fi
-+ ;;
-+esac
-+AC_MSG_RESULT([$enable_shared])
-+
-+AC_MSG_CHECKING([whether to build static libraries])
-+# Make sure either enable_shared or enable_static is yes.
-+test "$enable_shared" = yes || enable_static=yes
-+AC_MSG_RESULT([$enable_static])
-+
-+_LT_AC_TAGVAR(GCC, $1)="$G77"
-+_LT_AC_TAGVAR(LD, $1)="$LD"
-+
-+AC_LIBTOOL_PROG_COMPILER_PIC($1)
-+AC_LIBTOOL_PROG_CC_C_O($1)
-+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-+AC_LIBTOOL_PROG_LD_SHLIBS($1)
-+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-+
-+AC_LIBTOOL_CONFIG($1)
-+
-+AC_LANG_POP
-+CC="$lt_save_CC"
-+])# AC_LIBTOOL_LANG_F77_CONFIG
-+
-+
-+# AC_LIBTOOL_LANG_GCJ_CONFIG
-+# --------------------------
-+# Ensure that the configuration vars for the C compiler are
-+# suitably defined. Those variables are subsequently used by
-+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
-+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
-+[AC_LANG_SAVE
-+
-+# Source file extension for Java test sources.
-+ac_ext=java
-+
-+# Object file extension for compiled Java test sources.
-+objext=o
-+_LT_AC_TAGVAR(objext, $1)=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code="class foo {}\n"
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
-+
-+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-+_LT_AC_SYS_COMPILER
-+
-+# save warnings/boilerplate of simple test code
-+_LT_COMPILER_BOILERPLATE
-+_LT_LINKER_BOILERPLATE
-+
-+# Allow CC to be a program name with arguments.
-+lt_save_CC="$CC"
-+CC=${GCJ-"gcj"}
-+compiler=$CC
-+_LT_AC_TAGVAR(compiler, $1)=$CC
-+_LT_CC_BASENAME([$compiler])
-+
-+# GCJ did not exist at the time GCC didn't implicitly link libc in.
-+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+
-+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-+
-+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-+AC_LIBTOOL_PROG_COMPILER_PIC($1)
-+AC_LIBTOOL_PROG_CC_C_O($1)
-+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-+AC_LIBTOOL_PROG_LD_SHLIBS($1)
-+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-+
-+AC_LIBTOOL_CONFIG($1)
-+
-+AC_LANG_RESTORE
-+CC="$lt_save_CC"
-+])# AC_LIBTOOL_LANG_GCJ_CONFIG
-+
-+
-+# AC_LIBTOOL_LANG_RC_CONFIG
-+# -------------------------
-+# Ensure that the configuration vars for the Windows resource compiler are
-+# suitably defined. Those variables are subsequently used by
-+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
-+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
-+[AC_LANG_SAVE
-+
-+# Source file extension for RC test sources.
-+ac_ext=rc
-+
-+# Object file extension for compiled RC test sources.
-+objext=o
-+_LT_AC_TAGVAR(objext, $1)=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code="$lt_simple_compile_test_code"
-+
-+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-+_LT_AC_SYS_COMPILER
-+
-+# save warnings/boilerplate of simple test code
-+_LT_COMPILER_BOILERPLATE
-+_LT_LINKER_BOILERPLATE
-+
-+# Allow CC to be a program name with arguments.
-+lt_save_CC="$CC"
-+CC=${RC-"windres"}
-+compiler=$CC
-+_LT_AC_TAGVAR(compiler, $1)=$CC
-+_LT_CC_BASENAME([$compiler])
-+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-+
-+AC_LIBTOOL_CONFIG($1)
-+
-+AC_LANG_RESTORE
-+CC="$lt_save_CC"
-+])# AC_LIBTOOL_LANG_RC_CONFIG
-+
-+
-+# AC_LIBTOOL_CONFIG([TAGNAME])
-+# ----------------------------
-+# If TAGNAME is not passed, then create an initial libtool script
-+# with a default configuration from the untagged config vars. Otherwise
-+# add code to config.status for appending the configuration named by
-+# TAGNAME from the matching tagged config vars.
-+AC_DEFUN([AC_LIBTOOL_CONFIG],
-+[# The else clause should only fire when bootstrapping the
-+# libtool distribution, otherwise you forgot to ship ltmain.sh
-+# with your package, and you will get complaints that there are
-+# no rules to generate ltmain.sh.
-+if test -f "$ltmain"; then
-+ # See if we are running on zsh, and set the options which allow our commands through
-+ # without removal of \ escapes.
-+ if test -n "${ZSH_VERSION+set}" ; then
-+ setopt NO_GLOB_SUBST
-+ fi
-+ # Now quote all the things that may contain metacharacters while being
-+ # careful not to overquote the AC_SUBSTed values. We take copies of the
-+ # variables and quote the copies for generation of the libtool script.
-+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-+ SED SHELL STRIP \
-+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-+ deplibs_check_method reload_flag reload_cmds need_locks \
-+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-+ lt_cv_sys_global_symbol_to_c_name_address \
-+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-+ old_postinstall_cmds old_postuninstall_cmds \
-+ _LT_AC_TAGVAR(compiler, $1) \
-+ _LT_AC_TAGVAR(CC, $1) \
-+ _LT_AC_TAGVAR(LD, $1) \
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
-+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
-+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
-+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
-+ _LT_AC_TAGVAR(old_archive_cmds, $1) \
-+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
-+ _LT_AC_TAGVAR(predep_objects, $1) \
-+ _LT_AC_TAGVAR(postdep_objects, $1) \
-+ _LT_AC_TAGVAR(predeps, $1) \
-+ _LT_AC_TAGVAR(postdeps, $1) \
-+ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
-+ _LT_AC_TAGVAR(archive_cmds, $1) \
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
-+ _LT_AC_TAGVAR(postinstall_cmds, $1) \
-+ _LT_AC_TAGVAR(postuninstall_cmds, $1) \
-+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1) \
-+ _LT_AC_TAGVAR(no_undefined_flag, $1) \
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1) \
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
-+ _LT_AC_TAGVAR(hardcode_automatic, $1) \
-+ _LT_AC_TAGVAR(module_cmds, $1) \
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1) \
-+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
-+ _LT_AC_TAGVAR(exclude_expsyms, $1) \
-+ _LT_AC_TAGVAR(include_expsyms, $1); do
-+
-+ case $var in
-+ _LT_AC_TAGVAR(old_archive_cmds, $1) | \
-+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
-+ _LT_AC_TAGVAR(archive_cmds, $1) | \
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
-+ _LT_AC_TAGVAR(module_cmds, $1) | \
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
-+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
-+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
-+ postinstall_cmds | postuninstall_cmds | \
-+ old_postinstall_cmds | old_postuninstall_cmds | \
-+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-+ # Double-quote double-evaled strings.
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-+ ;;
-+ *)
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-+ ;;
-+ esac
-+ done
-+
-+ case $lt_echo in
-+ *'\[$]0 --fallback-echo"')
-+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
-+ ;;
-+ esac
-+
-+ifelse([$1], [],
-+ [cfgfile="${ofile}T"
-+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-+ $rm -f "$cfgfile"
-+ AC_MSG_NOTICE([creating $ofile])],
-+ [cfgfile="$ofile"])
-+
-+ cat <<__EOF__ >> "$cfgfile"
-+ifelse([$1], [],
-+[#! $SHELL
-+
-+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-+#
-+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-+# Free Software Foundation, Inc.
-+#
-+# This file is part of GNU Libtool:
-+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-+#
-+# 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 2 of the License, or
-+# (at your option) 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, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+#
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+# A sed program that does not truncate output.
-+SED=$lt_SED
-+
-+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-+Xsed="$SED -e 1s/^X//"
-+
-+# The HP-UX ksh and POSIX shell print the target directory to stdout
-+# if CDPATH is set.
-+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-+
-+# The names of the tagged configurations supported by this script.
-+available_tags=
-+
-+# ### BEGIN LIBTOOL CONFIG],
-+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
-+
-+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-+
-+# Shell to use when invoking shell scripts.
-+SHELL=$lt_SHELL
-+
-+# Whether or not to build shared libraries.
-+build_libtool_libs=$enable_shared
-+
-+# Whether or not to build static libraries.
-+build_old_libs=$enable_static
-+
-+# Whether or not to add -lc for building shared libraries.
-+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
-+
-+# Whether or not to disallow shared libs when runtime libs are static
-+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
-+
-+# Whether or not to optimize for fast installation.
-+fast_install=$enable_fast_install
-+
-+# The host system.
-+host_alias=$host_alias
-+host=$host
-+host_os=$host_os
-+
-+# The build system.
-+build_alias=$build_alias
-+build=$build
-+build_os=$build_os
-+
-+# An echo program that does not interpret backslashes.
-+echo=$lt_echo
-+
-+# The archiver.
-+AR=$lt_AR
-+AR_FLAGS=$lt_AR_FLAGS
-+
-+# A C compiler.
-+LTCC=$lt_LTCC
-+
-+# LTCC compiler flags.
-+LTCFLAGS=$lt_LTCFLAGS
-+
-+# A language-specific compiler.
-+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
-+
-+# Is the compiler the GNU C compiler?
-+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
-+
-+# An ERE matcher.
-+EGREP=$lt_EGREP
-+
-+# The linker used to build libraries.
-+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
-+
-+# Whether we need hard or soft links.
-+LN_S=$lt_LN_S
-+
-+# A BSD-compatible nm program.
-+NM=$lt_NM
-+
-+# A symbol stripping program
-+STRIP=$lt_STRIP
-+
-+# Used to examine libraries when file_magic_cmd begins "file"
-+MAGIC_CMD=$MAGIC_CMD
-+
-+# Used on cygwin: DLL creation program.
-+DLLTOOL="$DLLTOOL"
-+
-+# Used on cygwin: object dumper.
-+OBJDUMP="$OBJDUMP"
-+
-+# Used on cygwin: assembler.
-+AS="$AS"
-+
-+# The name of the directory that contains temporary libtool files.
-+objdir=$objdir
-+
-+# How to create reloadable object files.
-+reload_flag=$lt_reload_flag
-+reload_cmds=$lt_reload_cmds
-+
-+# How to pass a linker flag through the compiler.
-+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-+
-+# Object file suffix (normally "o").
-+objext="$ac_objext"
-+
-+# Old archive suffix (normally "a").
-+libext="$libext"
-+
-+# Shared library suffix (normally ".so").
-+shrext_cmds='$shrext_cmds'
-+
-+# Executable file suffix (normally "").
-+exeext="$exeext"
-+
-+# Additional compiler flags for building library objects.
-+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-+pic_mode=$pic_mode
-+
-+# What is the maximum length of a command?
-+max_cmd_len=$lt_cv_sys_max_cmd_len
-+
-+# Does compiler simultaneously support -c and -o options?
-+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
-+
-+# Must we lock files when doing compilation?
-+need_locks=$lt_need_locks
-+
-+# Do we need the lib prefix for modules?
-+need_lib_prefix=$need_lib_prefix
-+
-+# Do we need a version for libraries?
-+need_version=$need_version
-+
-+# Whether dlopen is supported.
-+dlopen_support=$enable_dlopen
-+
-+# Whether dlopen of programs is supported.
-+dlopen_self=$enable_dlopen_self
-+
-+# Whether dlopen of statically linked programs is supported.
-+dlopen_self_static=$enable_dlopen_self_static
-+
-+# Compiler flag to prevent dynamic linking.
-+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
-+
-+# Compiler flag to turn off builtin functions.
-+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
-+
-+# Compiler flag to allow reflexive dlopens.
-+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
-+
-+# Compiler flag to generate shared objects directly from archives.
-+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
-+
-+# Compiler flag to generate thread-safe objects.
-+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
-+
-+# Library versioning type.
-+version_type=$version_type
-+
-+# Format of library name prefix.
-+libname_spec=$lt_libname_spec
-+
-+# List of archive names. First name is the real one, the rest are links.
-+# The last name is the one that the linker finds with -lNAME.
-+library_names_spec=$lt_library_names_spec
-+
-+# The coded name of the library, if different from the real name.
-+soname_spec=$lt_soname_spec
-+
-+# Commands used to build and install an old-style archive.
-+RANLIB=$lt_RANLIB
-+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
-+old_postinstall_cmds=$lt_old_postinstall_cmds
-+old_postuninstall_cmds=$lt_old_postuninstall_cmds
-+
-+# Create an old-style archive from a shared archive.
-+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
-+
-+# Create a temporary old-style archive to link instead of a shared archive.
-+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
-+
-+# Commands used to build and install a shared archive.
-+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
-+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
-+postinstall_cmds=$lt_postinstall_cmds
-+postuninstall_cmds=$lt_postuninstall_cmds
-+
-+# Commands used to build a loadable module (assumed same as above if empty)
-+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
-+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
-+
-+# Commands to strip libraries.
-+old_striplib=$lt_old_striplib
-+striplib=$lt_striplib
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
-+
-+# The library search path used internally by the compiler when linking
-+# a shared library.
-+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
-+
-+# Method to check whether dependent libraries are shared objects.
-+deplibs_check_method=$lt_deplibs_check_method
-+
-+# Command to use when deplibs_check_method == file_magic.
-+file_magic_cmd=$lt_file_magic_cmd
-+
-+# Flag that allows shared libraries with undefined symbols to be built.
-+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
-+
-+# Flag that forces no undefined symbols.
-+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
-+
-+# Commands used to finish a libtool library installation in a directory.
-+finish_cmds=$lt_finish_cmds
-+
-+# Same as above, but a single script fragment to be evaled but not shown.
-+finish_eval=$lt_finish_eval
-+
-+# Take the output of nm and produce a listing of raw symbols and C names.
-+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-+
-+# Transform the output of nm in a proper C declaration
-+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-+
-+# Transform the output of nm in a C name address pair
-+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-+
-+# This is the shared library runtime path variable.
-+runpath_var=$runpath_var
-+
-+# This is the shared library path variable.
-+shlibpath_var=$shlibpath_var
-+
-+# Is shlibpath searched before the hard-coded library search path?
-+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-+
-+# How to hardcode a shared library path into an executable.
-+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
-+
-+# Whether we should hardcode library paths into libraries.
-+hardcode_into_libs=$hardcode_into_libs
-+
-+# Flag to hardcode \$libdir into a binary during linking.
-+# This must work even if \$libdir does not exist.
-+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
-+
-+# If ld is used when linking, flag to hardcode \$libdir into
-+# a binary during linking. This must work even if \$libdir does
-+# not exist.
-+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
-+
-+# Whether we need a single -rpath flag with a separated argument.
-+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
-+
-+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
-+
-+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
-+
-+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-+# the resulting binary.
-+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
-+
-+# Set to yes if building a shared library automatically hardcodes DIR into the library
-+# and all subsequent libraries and executables linked against it.
-+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
-+
-+# Variables whose values should be saved in libtool wrapper scripts and
-+# restored at relink time.
-+variables_saved_for_relink="$variables_saved_for_relink"
-+
-+# Whether libtool must link a program against all its dependency libraries.
-+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
-+
-+# Compile-time system search path for libraries
-+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-+
-+# Run-time system search path for libraries
-+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-+
-+# Fix the shell variable \$srcfile for the compiler.
-+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
-+
-+# Set to yes if exported symbols are required.
-+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
-+
-+# The commands to list exported symbols.
-+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
-+
-+# The commands to extract the exported symbol list from a shared archive.
-+extract_expsyms_cmds=$lt_extract_expsyms_cmds
-+
-+# Symbols that should not be listed in the preloaded symbols.
-+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
-+
-+# Symbols that must always be exported.
-+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
-+
-+ifelse([$1],[],
-+[# ### END LIBTOOL CONFIG],
-+[# ### END LIBTOOL TAG CONFIG: $tagname])
-+
-+__EOF__
-+
-+ifelse([$1],[], [
-+ case $host_os in
-+ aix3*)
-+ cat <<\EOF >> "$cfgfile"
-+
-+# AIX sometimes has problems with the GCC collect2 program. For some
-+# reason, if we set the COLLECT_NAMES environment variable, the problems
-+# vanish in a puff of smoke.
-+if test "X${COLLECT_NAMES+set}" != Xset; then
-+ COLLECT_NAMES=
-+ export COLLECT_NAMES
-+fi
-+EOF
-+ ;;
-+ esac
-+
-+ # We use sed instead of cat because bash on DJGPP gets confused if
-+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
-+ # text mode, it properly converts lines to CR/LF. This bash problem
-+ # is reportedly fixed, but why not run on old versions too?
-+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-+
-+ mv -f "$cfgfile" "$ofile" || \
-+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-+ chmod +x "$ofile"
-+])
-+else
-+ # If there is no Makefile yet, we rely on a make rule to execute
-+ # `config.status --recheck' to rerun these tests and create the
-+ # libtool script then.
-+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-+ if test -f "$ltmain_in"; then
-+ test -f Makefile && make "$ltmain"
-+ fi
-+fi
-+])# AC_LIBTOOL_CONFIG
-+
-+
-+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
-+# -------------------------------------------
-+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
-+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-+
-+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-+
-+if test "$GCC" = yes; then
-+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-+
-+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-+ lt_cv_prog_compiler_rtti_exceptions,
-+ [-fno-rtti -fno-exceptions], [],
-+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-+fi
-+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
-+
-+
-+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-+# ---------------------------------
-+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-+[AC_REQUIRE([AC_CANONICAL_HOST])
-+AC_REQUIRE([AC_PROG_NM])
-+AC_REQUIRE([AC_OBJEXT])
-+# Check for command to grab the raw symbol name followed by C symbol from nm.
-+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
-+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
-+[
-+# These are sane defaults that work on at least a few old systems.
-+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-+
-+# Character class describing NM global symbol codes.
-+symcode='[[BCDEGRST]]'
-+
-+# Regexp to match symbols that can be accessed directly from C.
-+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
-+
-+# Transform an extracted symbol line into a proper C declaration
-+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-+
-+# Transform an extracted symbol line into symbol name and symbol address
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-+
-+# Define system-specific variables.
-+case $host_os in
-+aix*)
-+ symcode='[[BCDT]]'
-+ ;;
-+cygwin* | mingw* | pw32*)
-+ symcode='[[ABCDGISTW]]'
-+ ;;
-+hpux*) # Its linker distinguishes data from code symbols
-+ if test "$host_cpu" = ia64; then
-+ symcode='[[ABCDEGRST]]'
-+ fi
-+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-+ ;;
-+linux*)
-+ if test "$host_cpu" = ia64; then
-+ symcode='[[ABCDGIRSTW]]'
-+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-+ fi
-+ ;;
-+irix* | nonstopux*)
-+ symcode='[[BCDEGRST]]'
-+ ;;
-+osf*)
-+ symcode='[[BCDEGQRST]]'
-+ ;;
-+solaris*)
-+ symcode='[[BDRT]]'
-+ ;;
-+sco3.2v5*)
-+ symcode='[[DT]]'
-+ ;;
-+sysv4.2uw2*)
-+ symcode='[[DT]]'
-+ ;;
-+sysv5* | sco5v6* | unixware* | OpenUNIX*)
-+ symcode='[[ABDT]]'
-+ ;;
-+sysv4)
-+ symcode='[[DFNSTU]]'
-+ ;;
-+esac
-+
-+# Handle CRLF in mingw tool chain
-+opt_cr=
-+case $build_os in
-+mingw*)
-+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-+ ;;
-+esac
-+
-+# If we're using GNU nm, then use its standard symbol codes.
-+case `$NM -V 2>&1` in
-+*GNU* | *'with BFD'*)
-+ symcode='[[ABCDGIRSTW]]' ;;
-+esac
-+
-+# Try without a prefix undercore, then with it.
-+for ac_symprfx in "" "_"; do
-+
-+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-+ symxfrm="\\1 $ac_symprfx\\2 \\2"
-+
-+ # Write the raw and C identifiers.
-+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-+
-+ # Check to see that the pipe works correctly.
-+ pipe_works=no
-+
-+ rm -f conftest*
-+ cat > conftest.$ac_ext <<EOF
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+char nm_test_var;
-+void nm_test_func(){}
-+#ifdef __cplusplus
-+}
-+#endif
-+int main(){nm_test_var='a';nm_test_func();return(0);}
-+EOF
-+
-+ if AC_TRY_EVAL(ac_compile); then
-+ # Now try to grab the symbols.
-+ nlist=conftest.nm
-+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
-+ # Try sorting and uniquifying the output.
-+ if sort "$nlist" | uniq > "$nlist"T; then
-+ mv -f "$nlist"T "$nlist"
-+ else
-+ rm -f "$nlist"T
-+ fi
-+
-+ # Make sure that we snagged all the symbols we need.
-+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
-+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
-+ cat <<EOF > conftest.$ac_ext
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+EOF
-+ # Now generate the symbol file.
-+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-+
-+ cat <<EOF >> conftest.$ac_ext
-+#if defined (__STDC__) && __STDC__
-+# define lt_ptr_t void *
-+#else
-+# define lt_ptr_t char *
-+# define const
-+#endif
-+
-+/* The mapping between symbol names and symbols. */
-+const struct {
-+ const char *name;
-+ lt_ptr_t address;
-+}
-+lt_preloaded_symbols[[]] =
-+{
-+EOF
-+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
-+ cat <<\EOF >> conftest.$ac_ext
-+ {0, (lt_ptr_t) 0}
-+};
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+EOF
-+ # Now try linking the two files.
-+ mv conftest.$ac_objext conftstm.$ac_objext
-+ lt_save_LIBS="$LIBS"
-+ lt_save_CFLAGS="$CFLAGS"
-+ LIBS="conftstm.$ac_objext"
-+ CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
-+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
-+ pipe_works=yes
-+ fi
-+ LIBS="$lt_save_LIBS"
-+ CFLAGS="$lt_save_CFLAGS"
-+ else
-+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
-+ fi
-+ else
-+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
-+ fi
-+ else
-+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
-+ fi
-+ else
-+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
-+ cat conftest.$ac_ext >&5
-+ fi
-+ rm -f conftest* conftst*
-+
-+ # Do not use the global_symbol_pipe unless it works.
-+ if test "$pipe_works" = yes; then
-+ break
-+ else
-+ lt_cv_sys_global_symbol_pipe=
-+ fi
-+done
-+])
-+if test -z "$lt_cv_sys_global_symbol_pipe"; then
-+ lt_cv_sys_global_symbol_to_cdecl=
-+fi
-+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-+ AC_MSG_RESULT(failed)
-+else
-+ AC_MSG_RESULT(ok)
-+fi
-+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-+
-+
-+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
-+# ---------------------------------------
-+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
-+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
-+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
-+
-+AC_MSG_CHECKING([for $compiler option to produce PIC])
-+ ifelse([$1],[CXX],[
-+ # C++ specific cases for pic, static, wl, etc.
-+ if test "$GXX" = yes; then
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-+
-+ case $host_os in
-+ aix*)
-+ # All AIX code is PIC.
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ fi
-+ ;;
-+ amigaos*)
-+ # FIXME: we need at least 68020 code to build shared libraries, but
-+ # adding the `-m68020' flag to GCC prevents building anything better,
-+ # like `-m68040'.
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-+ ;;
-+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-+ # PIC is the default for these OSes.
-+ ;;
-+ mingw* | os2* | pw32*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
-+ ;;
-+ darwin* | rhapsody*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-+ ;;
-+ *djgpp*)
-+ # DJGPP does not support shared libraries at all
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-+ ;;
-+ interix3*)
-+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-+ # Instead, we relocate shared libraries at runtime.
-+ ;;
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-+ fi
-+ ;;
-+ hpux*)
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-+ ;;
-+ esac
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-+ ;;
-+ esac
-+ else
-+ case $host_os in
-+ aix4* | aix5*)
-+ # All AIX code is PIC.
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ else
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-+ fi
-+ ;;
-+ chorus*)
-+ case $cc_basename in
-+ cxch68*)
-+ # Green Hills C++ Compiler
-+ # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-+ ;;
-+ esac
-+ ;;
-+ darwin*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ case $cc_basename in
-+ xlc*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ ;;
-+ esac
-+ ;;
-+ dgux*)
-+ case $cc_basename in
-+ ec++*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ ;;
-+ ghcx*)
-+ # Green Hills C++ Compiler
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ freebsd* | kfreebsd*-gnu | dragonfly*)
-+ # FreeBSD uses GNU C++
-+ ;;
-+ hpux9* | hpux10* | hpux11*)
-+ case $cc_basename in
-+ CC*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-+ if test "$host_cpu" != ia64; then
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-+ fi
-+ ;;
-+ aCC*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-+ ;;
-+ esac
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ interix*)
-+ # This is c89, which is MS Visual C++ (no shared libs)
-+ # Anyone wants to do a port?
-+ ;;
-+ irix5* | irix6* | nonstopux*)
-+ case $cc_basename in
-+ CC*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-+ # CC pic flag -KPIC is the default.
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ linux*)
-+ case $cc_basename in
-+ KCC*)
-+ # KAI C++ Compiler
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-+ ;;
-+ icpc* | ecpc*)
-+ # Intel C++
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-+ ;;
-+ pgCC*)
-+ # Portland Group C++ compiler.
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+ cxx*)
-+ # Compaq C++
-+ # Make sure the PIC flag is empty. It appears that all Alpha
-+ # Linux and Compaq Tru64 Unix objects are PIC.
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ lynxos*)
-+ ;;
-+ m88k*)
-+ ;;
-+ mvs*)
-+ case $cc_basename in
-+ cxx*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+@@ -5417,7 +5412,7 @@
+ ;;
+ esac
+ ;;
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ ;;
-+ osf3* | osf4* | osf5*)
-+ case $cc_basename in
-+ KCC*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-+ ;;
-+ RCC*)
-+ # Rational C++ 2.4.1
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-+ ;;
-+ cxx*)
-+ # Digital/Compaq C++
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ # Make sure the PIC flag is empty. It appears that all Alpha
-+ # Linux and Compaq Tru64 Unix objects are PIC.
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ psos*)
-+ ;;
-+ solaris*)
-+ case $cc_basename in
-+ CC*)
-+ # Sun C++ 4.2, 5.x and Centerline C++
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-+ ;;
-+ gcx*)
-+ # Green Hills C++ Compiler
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ sunos4*)
-+ case $cc_basename in
-+ CC*)
-+ # Sun C++ 4.x
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+ lcc*)
-+ # Lucid
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ tandem*)
-+ case $cc_basename in
-+ NCC*)
-+ # NonStop-UX NCC 3.20
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-+ case $cc_basename in
-+ CC*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+ esac
-+ ;;
-+ vxworks*)
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-+ ;;
-+ esac
-+ fi
-+],
-+[
-+ if test "$GCC" = yes; then
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-+
-+ case $host_os in
-+ aix*)
-+ # All AIX code is PIC.
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ # FIXME: we need at least 68020 code to build shared libraries, but
-+ # adding the `-m68020' flag to GCC prevents building anything better,
-+ # like `-m68040'.
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-+ ;;
-+
-+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-+ # PIC is the default for these OSes.
-+ ;;
-+
-+ mingw* | pw32* | os2*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
-+ ;;
-+
-+ darwin* | rhapsody*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-+ ;;
-+
-+ interix3*)
-+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-+ # Instead, we relocate shared libraries at runtime.
-+ ;;
-+
-+ msdosdjgpp*)
-+ # Just because we use GCC doesn't mean we suddenly get shared libraries
-+ # on systems that don't support them.
-+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-+ enable_shared=no
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-+ fi
-+ ;;
-+
-+ hpux*)
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-+ ;;
-+ esac
-+ else
-+ # PORTME Check for flag to pass linker flags through the system compiler.
-+ case $host_os in
-+ aix*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ else
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-+ fi
-+ ;;
-+ darwin*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ case $cc_basename in
-+ xlc*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ ;;
-+ esac
-+ ;;
-+
-+ mingw* | pw32* | os2*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
-+ ;;
-+
-+ hpux9* | hpux10* | hpux11*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-+ ;;
-+ esac
-+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-+ ;;
-+
-+ irix5* | irix6* | nonstopux*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ # PIC (with -KPIC) is the default.
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-+ ;;
-+
-+ newsos6)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+
-+ linux*)
-+ case $cc_basename in
-+ icc* | ecc*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-+ ;;
-+ pgcc* | pgf77* | pgf90* | pgf95*)
-+ # Portland Group compilers (*not* the Pentium gcc compiler,
-+ # which looks to be a dead project)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+ ccc*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ # All Alpha code is PIC.
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-+ ;;
-+ esac
-+ ;;
-+
-+ osf3* | osf4* | osf5*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ # All OSF/1 code is PIC.
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-+ ;;
-+
-+ solaris*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ case $cc_basename in
-+ f77* | f90* | f95*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-+ esac
-+ ;;
-+
-+ sunos4*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+
-+ sysv4 | sysv4.2uw2* | sysv4.3*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ fi
-+ ;;
-+
-+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+
-+ unicos*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-+ ;;
-+
-+ uts4*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-+ ;;
-+
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-+ ;;
-+ esac
-+ fi
-+])
-+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
-+
-+#
-+# Check to make sure the PIC flag actually works.
-+#
-+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
-+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
-+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
-+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
-+ "" | " "*) ;;
-+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-+ esac],
-+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-+fi
-+case $host_os in
-+ # For platforms which do not support PIC, -DPIC is meaningless:
-+ *djgpp*)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
-+ ;;
-+esac
-+
-+#
-+# Check to make sure the static flag actually works.
-+#
-+wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
-+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
-+ $lt_tmp_static_flag,
-+ [],
-+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
-+])
-+
-+
-+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
-+# ------------------------------------
-+# See if the linker supports building shared libraries.
-+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-+ifelse([$1],[CXX],[
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ case $host_os in
-+ aix4* | aix5*)
-+ # If we're using GNU nm, then we don't want the "-C" option.
-+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
-+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-+ else
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-+ fi
-+ ;;
-+ pw32*)
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-+ ;;
-+ cygwin* | mingw*)
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
-+ ;;
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+@@ -5769,6 +5764,12 @@
+ cygwin* | mingw*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ kfreebsd*-gnu)
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+ ;;
+ linux*)
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+ ;;
-+ *)
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ ;;
-+ esac
-+],[
-+ runpath_var=
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
-+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-+ _LT_AC_TAGVAR(archive_cmds, $1)=
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
-+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
-+ _LT_AC_TAGVAR(module_cmds, $1)=
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
-+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ # include_expsyms should be a list of space-separated symbols to be *always*
-+ # included in the symbol list
-+ _LT_AC_TAGVAR(include_expsyms, $1)=
-+ # exclude_expsyms can be an extended regexp of symbols to exclude
-+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
-+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-+ # as well as any symbol that contains `d'.
-+ _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
-+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-+ # platforms (ab)use it in PIC code, but their linkers get confused if
-+ # the symbol is explicitly referenced. Since portable code cannot
-+ # rely on this symbol name, it's probably fine to never include it in
-+ # preloaded symbol tables.
-+ extract_expsyms_cmds=
-+ # Just being paranoid about ensuring that cc_basename is set.
-+ _LT_CC_BASENAME([$compiler])
-+ case $host_os in
-+ cygwin* | mingw* | pw32*)
-+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
-+ # When not using gcc, we currently assume that we are using
-+ # Microsoft Visual C++.
-+ if test "$GCC" != yes; then
-+ with_gnu_ld=no
-+ fi
-+ ;;
-+ interix*)
-+ # we just hope/assume this is gcc and not c89 (= MSVC++)
-+ with_gnu_ld=yes
-+ ;;
-+ openbsd*)
-+ with_gnu_ld=no
-+ ;;
-+ esac
-+
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-+ if test "$with_gnu_ld" = yes; then
-+ # If archive_cmds runs LD, not CC, wlarc should be empty
-+ wlarc='${wl}'
-+
-+ # Set some defaults for GNU ld with shared library support. These
-+ # are reset later if shared libraries are not supported. Putting them
-+ # here allows them to be overridden if necessary.
-+ runpath_var=LD_RUN_PATH
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-+ # ancient GNU ld didn't support --whole-archive et. al.
-+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-+ else
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-+ fi
-+ supports_anon_versioning=no
-+ case `$LD -v 2>/dev/null` in
-+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
-+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-+ *\ 2.11.*) ;; # other 2.11 versions
-+ *) supports_anon_versioning=yes ;;
-+ esac
-+
-+ # See if GNU ld supports shared libraries.
-+ case $host_os in
-+ aix3* | aix4* | aix5*)
-+ # On AIX/PPC, the GNU linker is very broken
-+ if test "$host_cpu" != ia64; then
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ cat <<EOF 1>&2
-+
-+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-+*** to be unable to reliably create shared libraries on AIX.
-+*** Therefore, libtool is disabling shared libraries support. If you
-+*** really care for shared libraries, you may want to modify your PATH
-+*** so that a non-GNU linker is found, and then restart.
-+
-+EOF
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+
-+ # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-+ # that the semantics of dynamic libraries on AmigaOS, at least up
-+ # to version 4, is to share data among multiple programs linked
-+ # with the same dynamic library. Since this doesn't match the
-+ # behavior of shared libraries on other platforms, we can't use
-+ # them.
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+
-+ beos*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-+ # support --undefined. This deserves some investigation. FIXME
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-+ # as there is no search path for DLLs.
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
-+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
-+
-+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ # If the export-symbols file already is a .def file (1st line
-+ # is EXPORTS), use it as is; otherwise, prepend...
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ cp $export_symbols $output_objdir/$soname.def;
-+ else
-+ echo EXPORTS > $output_objdir/$soname.def;
-+ cat $export_symbols >> $output_objdir/$soname.def;
-+ fi~
-+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+
-+ interix3*)
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-+ # Instead, shared libraries are loaded at an image base (0x10000000 by
-+ # default) and relocated if they conflict, which is a slow very memory
-+ # consuming and fragmenting process. To avoid this, we pick a random,
-+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ ;;
-+
-+ linux*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ tmp_addflag=
-+ case $cc_basename,$host_cpu in
-+ pgcc*) # Portland Group C compiler
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ tmp_addflag=' $pic_flag'
-+ ;;
-+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ tmp_addflag=' $pic_flag -Mnomain' ;;
-+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
-+ tmp_addflag=' -i_dynamic' ;;
-+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
-+ tmp_addflag=' -i_dynamic -nofor_main' ;;
-+ ifc* | ifort*) # Intel Fortran compiler
-+ tmp_addflag=' -nofor_main' ;;
-+ esac
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+
-+ if test $supports_anon_versioning = yes; then
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
-+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-+ $echo "local: *; };" >> $output_objdir/$libname.ver~
-+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-+ fi
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+@@ -5965,12 +5966,13 @@
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-+ wlarc=
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ fi
-+ ;;
-+
-+ solaris*)
-+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ cat <<EOF 1>&2
-+
-+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-+*** create shared libraries on Solaris systems. Therefore, libtool
-+*** is disabling shared libraries support. We urge you to upgrade GNU
-+*** binutils to release 2.9.1 or newer. Another option is to modify
-+*** your PATH or compiler configuration so that the native linker is
-+*** used, and then restart.
-+
-+EOF
-+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+
-+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-+ case `$LD -v 2>&1` in
-+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ cat <<_LT_EOF 1>&2
-+
-+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-+*** reliably create shared libraries on SCO systems. Therefore, libtool
-+*** is disabling shared libraries support. We urge you to upgrade GNU
-+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-+*** your PATH or compiler configuration so that the native linker is
-+*** used, and then restart.
-+
-+_LT_EOF
-+ ;;
-+ *)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+
-+ sunos4*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ wlarc=
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ *)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+ esac
-+
-+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
-+ runpath_var=
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-+ fi
-+ else
-+ # PORTME fill in a description of your system's linker (not GNU ld)
-+ case $host_os in
-+ aix3*)
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-+ # Note: this linker hardcodes the directories in LIBPATH if there
-+ # are no directories specified by -L.
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-+ # Neither direct hardcoding nor static linking is supported with a
-+ # broken collect2.
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
-+ fi
-+ ;;
-+
-+ aix4* | aix5*)
-+ if test "$host_cpu" = ia64; then
-+ # On IA64, the linker does run time linking by default, so we don't
-+ # have to do anything special.
-+ aix_use_runtimelinking=no
-+ exp_sym_flag='-Bexport'
-+ no_entry_flag=""
-+ else
-+ # If we're using GNU nm, then we don't want the "-C" option.
-+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
-+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-+ else
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-+ fi
-+ aix_use_runtimelinking=no
-+
-+ # Test if we are trying to use run time linking or normal
-+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-+ # need to do runtime linking.
-+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
-+ for ld_flag in $LDFLAGS; do
-+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-+ aix_use_runtimelinking=yes
-+ break
-+ fi
-+ done
-+ ;;
-+ esac
-+
-+ exp_sym_flag='-bexport'
-+ no_entry_flag='-bnoentry'
-+ fi
-+
-+ # When large executables or shared objects are built, AIX ld can
-+ # have problems creating the table of contents. If linking a library
-+ # or program results in "error TOC overflow" add -mminimal-toc to
-+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
-+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-+
-+ _LT_AC_TAGVAR(archive_cmds, $1)=''
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+
-+ if test "$GCC" = yes; then
-+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
-+ # We only want to do this on AIX 4.2 and lower, the check
-+ # below for broken collect2 doesn't work under 4.3+
-+ collect2name=`${CC} -print-prog-name=collect2`
-+ if test -f "$collect2name" && \
-+ strings "$collect2name" | grep resolve_lib_name >/dev/null
-+ then
-+ # We have reworked collect2
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ else
-+ # We have old collect2
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
-+ # It fails to find uninstalled libraries when the uninstalled
-+ # path is not listed in the libpath. Setting hardcode_minus_L
-+ # to unsupported forces relinking
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-+ fi
-+ ;;
-+ esac
-+ shared_flag='-shared'
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag="$shared_flag "'${wl}-G'
-+ fi
-+ else
-+ # not using gcc
-+ if test "$host_cpu" = ia64; then
-+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-+ # chokes on -Wl,-G. The following line is correct:
-+ shared_flag='-G'
-+ else
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag='${wl}-G'
-+ else
-+ shared_flag='${wl}-bM:SRE'
-+ fi
-+ fi
-+ fi
-+
-+ # It seems that -bexpall does not export symbols beginning with
-+ # underscore (_), so it is better to generate a list of symbols to export.
-+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # Warning - without using the other runtime loading flags (-brtl),
-+ # -berok will link without error, but may produce a broken library.
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ _LT_AC_SYS_LIBPATH_AIX
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-+ else
-+ if test "$host_cpu" = ia64; then
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-+ else
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ _LT_AC_SYS_LIBPATH_AIX
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ # Warning - without using the other run time loading flags,
-+ # -berok will link without error, but may produce a broken library.
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-+ # Exported symbols can be pulled into shared objects from archives
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-+ # This is similar to how AIX traditionally builds its shared libraries.
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-+ fi
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ # see comment about different semantics on the GNU ld section
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+
-+ bsdi[[45]]*)
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # When not using gcc, we currently assume that we are using
-+ # Microsoft Visual C++.
-+ # hardcode_libdir_flag_spec is actually meaningless, as there is
-+ # no search path for DLLs.
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
-+ # FIXME: Should let the user specify the lib program.
-+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
-+ _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-+ ;;
-+
-+ darwin* | rhapsody*)
-+ case $host_os in
-+ rhapsody* | darwin1.[[012]])
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
-+ ;;
-+ *) # Darwin 1.3 on
-+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ else
-+ case ${MACOSX_DEPLOYMENT_TARGET} in
-+ 10.[[012]])
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ ;;
-+ 10.*)
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+ esac
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
-+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+ if test "$GCC" = yes ; then
-+ output_verbose_link_cmd='echo'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ else
-+ case $cc_basename in
-+ xlc*)
-+ output_verbose_link_cmd='echo'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ dgux*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ freebsd1*)
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+
-+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-+ # support. Future versions do this automatically, but an explicit c++rt0.o
-+ # does not break anything, and helps significantly (at the cost of a little
-+ # extra space).
-+ freebsd2.2*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-+ freebsd2*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+@@ -6300,11 +6302,20 @@
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+- freebsd* | kfreebsd*-gnu | dragonfly*)
+ freebsd* | dragonfly*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
@@ -22022,27781 +127,165 @@
+
+ # GNU/kFreeBSD uses gcc -shared to do shared libraries.
+ kfreebsd*-gnu)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-+ ;;
-+
-+ hpux9*)
-+ if test "$GCC" = yes; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ fi
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+ ;;
-+
-+ hpux10*)
-+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-+ fi
-+ if test "$with_gnu_ld" = no; then
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ fi
-+ ;;
-+
-+ hpux11*)
-+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-+ case $host_cpu in
-+ hppa*64*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ ia64*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ else
-+ case $host_cpu in
-+ hppa*64*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ ia64*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ fi
-+ if test "$with_gnu_ld" = no; then
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ irix5* | irix6* | nonstopux*)
-+ if test "$GCC" = yes; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-+ fi
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+ ;;
-+
+ ;;
+
+ hpux9*)
+@@ -6402,7 +6413,7 @@
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
-+ fi
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ newsos6)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ openbsd*)
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-+ else
-+ case $host_os in
-+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-+ ;;
-+ *)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ os2*)
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-+ ;;
-+
-+ osf3*)
-+ if test "$GCC" = yes; then
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ fi
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+ ;;
-+
-+ osf4* | osf5*) # as osf3* with the addition of -msym flag
-+ if test "$GCC" = yes; then
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-+ else
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-+
-+ # Both c and cxx compiler support -rpath directly
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-+ fi
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-+ ;;
-+
-+ solaris*)
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
-+ if test "$GCC" = yes; then
-+ wlarc='${wl}'
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-+ else
-+ wlarc=''
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
-+ fi
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ case $host_os in
-+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-+ *)
-+ # The compiler driver will combine linker options so we
-+ # cannot just pass the convience library names through
-+ # without $wl, iff we do not link with $LD.
-+ # Luckily, gcc supports the same syntax we need for Sun Studio.
-+ # Supported since Solaris 2.6 (maybe 2.5.1?)
-+ case $wlarc in
-+ '')
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
-+ *)
-+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
-+ esac ;;
-+ esac
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+ ;;
-+
-+ sunos4*)
-+ if test "x$host_vendor" = xsequent; then
-+ # Use $CC to link under sequent, because it throws in some extra .o
-+ # files that make .init and .fini sections work.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-+ fi
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ sysv4)
-+ case $host_vendor in
-+ sni)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-+ ;;
-+ siemens)
-+ ## LD is ld it makes a PLAMLIB
-+ ## CC just makes a GrossModule.
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
-+ ;;
-+ motorola)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-+ ;;
-+ esac
-+ runpath_var='LD_RUN_PATH'
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ sysv4.3*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ runpath_var=LD_RUN_PATH
-+ hardcode_runpath_var=yes
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-+ fi
-+ ;;
-+
-+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ runpath_var='LD_RUN_PATH'
-+
-+ if test "$GCC" = yes; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ fi
-+ ;;
-+
-+ sysv5* | sco3.2v5* | sco5v6*)
-+ # Note: We can NOT use -z defs as we might desire, because we do not
-+ # link with -lc, and that would cause any symbols used from libc to
-+ # always be unresolved, which means just about no library would
-+ # ever link correctly. If we're not using GNU ld we use -z text
-+ # though, which does catch some bad symbols but isn't as heavy-handed
-+ # as -z defs.
-+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-+ runpath_var='LD_RUN_PATH'
-+
-+ if test "$GCC" = yes; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ fi
-+ ;;
-+
-+ uts4*)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-+ ;;
-+
-+ *)
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ ;;
-+ esac
-+ fi
-+])
-+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-+
-+#
-+# Do we need to explicitly link libc?
-+#
-+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
-+x|xyes)
-+ # Assume -lc should be added
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-+
-+ if test "$enable_shared" = yes && test "$GCC" = yes; then
-+ case $_LT_AC_TAGVAR(archive_cmds, $1) in
-+ *'~'*)
-+ # FIXME: we may have to deal with multi-command sequences.
-+ ;;
-+ '$CC '*)
-+ # Test whether the compiler implicitly links with -lc since on some
-+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
-+ # to ld, don't add -lc before -lgcc.
-+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
-+ $rm conftest*
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
-+ soname=conftest
-+ lib=conftest
-+ libobjs=conftest.$ac_objext
-+ deplibs=
-+ wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-+ pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-+ compiler_flags=-v
-+ linker_flags=-v
-+ verstring=
-+ output_objdir=.
-+ libname=conftest
-+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
-+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
-+ then
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-+ else
-+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-+ fi
-+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-+ else
-+ cat conftest.err 1>&5
-+ fi
-+ $rm conftest*
-+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
-+ ;;
-+ esac
-+ fi
-+ ;;
-+esac
-+])# AC_LIBTOOL_PROG_LD_SHLIBS
-+
-+
-+# _LT_AC_FILE_LTDLL_C
-+# -------------------
-+# Be careful that the start marker always follows a newline.
-+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
-+# /* ltdll.c starts here */
-+# #define WIN32_LEAN_AND_MEAN
-+# #include <windows.h>
-+# #undef WIN32_LEAN_AND_MEAN
-+# #include <stdio.h>
-+#
-+# #ifndef __CYGWIN__
-+# # ifdef __CYGWIN32__
-+# # define __CYGWIN__ __CYGWIN32__
-+# # endif
-+# #endif
-+#
-+# #ifdef __cplusplus
-+# extern "C" {
-+# #endif
-+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-+# #ifdef __cplusplus
-+# }
-+# #endif
-+#
-+# #ifdef __CYGWIN__
-+# #include <cygwin/cygwin_dll.h>
-+# DECLARE_CYGWIN_DLL( DllMain );
-+# #endif
-+# HINSTANCE __hDllInstance_base;
-+#
-+# BOOL APIENTRY
-+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-+# {
-+# __hDllInstance_base = hInst;
-+# return TRUE;
-+# }
-+# /* ltdll.c ends here */
-+])# _LT_AC_FILE_LTDLL_C
-+
-+
-+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
-+# ---------------------------------
-+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
-+
-+
-+# old names
-+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
-+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
-+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
-+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
-+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
-+
-+# This is just to silence aclocal about the macro not being used
-+ifelse([AC_DISABLE_FAST_INSTALL])
-+
-+AC_DEFUN([LT_AC_PROG_GCJ],
-+[AC_CHECK_TOOL(GCJ, gcj, no)
-+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-+ AC_SUBST(GCJFLAGS)
-+])
-+
-+AC_DEFUN([LT_AC_PROG_RC],
-+[AC_CHECK_TOOL(RC, windres, no)
-+])
-+
-+# NOTE: This macro has been submitted for inclusion into #
-+# GNU Autoconf as AC_PROG_SED. When it is available in #
-+# a released version of Autoconf we should remove this #
-+# macro and use it instead. #
-+# LT_AC_PROG_SED
-+# --------------
-+# Check for a fully-functional sed program, that truncates
-+# as few characters as possible. Prefer GNU sed if found.
-+AC_DEFUN([LT_AC_PROG_SED],
-+[AC_MSG_CHECKING([for a sed that does not truncate output])
-+AC_CACHE_VAL(lt_cv_path_SED,
-+[# Loop through the user's path and test for sed and gsed.
-+# Then use that list of sed's as ones to test for truncation.
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for lt_ac_prog in sed gsed; do
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-+ fi
-+ done
-+ done
-+done
-+lt_ac_max=0
-+lt_ac_count=0
-+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-+# along with /bin/sed that truncates output.
-+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-+ test ! -f $lt_ac_sed && continue
-+ cat /dev/null > conftest.in
-+ lt_ac_count=0
-+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-+ # Check for GNU sed and select it if it is found.
-+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-+ lt_cv_path_SED=$lt_ac_sed
-+ break
-+ fi
-+ while true; do
-+ cat conftest.in conftest.in >conftest.tmp
-+ mv conftest.tmp conftest.in
-+ cp conftest.in conftest.nl
-+ echo >>conftest.nl
-+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-+ cmp -s conftest.out conftest.nl || break
-+ # 10000 chars as input seems more than enough
-+ test $lt_ac_count -gt 10 && break
-+ lt_ac_count=`expr $lt_ac_count + 1`
-+ if test $lt_ac_count -gt $lt_ac_max; then
-+ lt_ac_max=$lt_ac_count
-+ lt_cv_path_SED=$lt_ac_sed
-+ fi
-+ done
-+done
-+])
-+SED=$lt_cv_path_SED
-+AC_MSG_RESULT([$SED])
-+])
-+
-+# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# AM_AUTOMAKE_VERSION(VERSION)
-+# ----------------------------
-+# Automake X.Y traces this macro to ensure aclocal.m4 has been
-+# generated from the m4 files accompanying Automake X.Y.
-+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
-+
-+# AM_SET_CURRENT_AUTOMAKE_VERSION
-+# -------------------------------
-+# Call AM_AUTOMAKE_VERSION so it can be traced.
-+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
-+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-+ [AM_AUTOMAKE_VERSION([1.9.6])])
-+
-+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-+
-+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
-+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-+#
-+# Of course, Automake must honor this variable whenever it calls a
-+# tool from the auxiliary directory. The problem is that $srcdir (and
-+# therefore $ac_aux_dir as well) can be either absolute or relative,
-+# depending on how configure is run. This is pretty annoying, since
-+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-+# source directory, any form will work fine, but in subdirectories a
-+# relative path needs to be adjusted first.
-+#
-+# $ac_aux_dir/missing
-+# fails when called from a subdirectory if $ac_aux_dir is relative
-+# $top_srcdir/$ac_aux_dir/missing
-+# fails if $ac_aux_dir is absolute,
-+# fails when called from a subdirectory in a VPATH build with
-+# a relative $ac_aux_dir
-+#
-+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-+# are both prefixed by $srcdir. In an in-source build this is usually
-+# harmless because $srcdir is `.', but things will broke when you
-+# start a VPATH build or use an absolute $srcdir.
-+#
-+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
-+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-+# and then we would define $MISSING as
-+# MISSING="\${SHELL} $am_aux_dir/missing"
-+# This will work as long as MISSING is not called from configure, because
-+# unfortunately $(top_srcdir) has no meaning in configure.
-+# However there are other variables, like CC, which are often used in
-+# configure, and could therefore not use this "fixed" $ac_aux_dir.
-+#
-+# Another solution, used here, is to always expand $ac_aux_dir to an
-+# absolute PATH. The drawback is that using absolute paths prevent a
-+# configured tree to be moved without reconfiguration.
-+
-+AC_DEFUN([AM_AUX_DIR_EXPAND],
-+[dnl Rely on autoconf to set up CDPATH properly.
-+AC_PREREQ([2.50])dnl
-+# expand $ac_aux_dir to an absolute path
-+am_aux_dir=`cd $ac_aux_dir && pwd`
-+])
-+
-+# AM_CONDITIONAL -*- Autoconf -*-
-+
-+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 7
-+
-+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-+# -------------------------------------
-+# Define a conditional.
-+AC_DEFUN([AM_CONDITIONAL],
-+[AC_PREREQ(2.52)dnl
-+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
-+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-+AC_SUBST([$1_TRUE])
-+AC_SUBST([$1_FALSE])
-+if $2; then
-+ $1_TRUE=
-+ $1_FALSE='#'
-+else
-+ $1_TRUE='#'
-+ $1_FALSE=
-+fi
-+AC_CONFIG_COMMANDS_PRE(
-+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-+ AC_MSG_ERROR([[conditional "$1" was never defined.
-+Usually this means the macro was only invoked conditionally.]])
-+fi])])
-+
-+
-+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 8
-+
-+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-+# written in clear, in which case automake, when reading aclocal.m4,
-+# will think it sees a *use*, and therefore will trigger all it's
-+# C support machinery. Also note that it means that autoscan, seeing
-+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-+
-+
-+# _AM_DEPENDENCIES(NAME)
-+# ----------------------
-+# See how the compiler implements dependency checking.
-+# NAME is "CC", "CXX", "GCJ", or "OBJC".
-+# We try a few techniques and use that to set a single cache variable.
-+#
-+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-+# dependency, and given that the user is not expected to run this macro,
-+# just rely on AC_PROG_CC.
-+AC_DEFUN([_AM_DEPENDENCIES],
-+[AC_REQUIRE([AM_SET_DEPDIR])dnl
-+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-+AC_REQUIRE([AM_DEP_TRACK])dnl
-+
-+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
-+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
-+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
-+ [depcc="$$1" am_compiler_list=])
-+
-+AC_CACHE_CHECK([dependency style of $depcc],
-+ [am_cv_$1_dependencies_compiler_type],
-+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-+ # We make a subdir and do the tests there. Otherwise we can end up
-+ # making bogus files that we don't know about and never remove. For
-+ # instance it was reported that on HP-UX the gcc test will end up
-+ # making a dummy file named `D' -- because `-MD' means `put the output
-+ # in D'.
-+ mkdir conftest.dir
-+ # Copy depcomp to subdir because otherwise we won't find it if we're
-+ # using a relative directory.
-+ cp "$am_depcomp" conftest.dir
-+ cd conftest.dir
-+ # We will build objects and dependencies in a subdirectory because
-+ # it helps to detect inapplicable dependency modes. For instance
-+ # both Tru64's cc and ICC support -MD to output dependencies as a
-+ # side effect of compilation, but ICC will put the dependencies in
-+ # the current directory while Tru64 will put them in the object
-+ # directory.
-+ mkdir sub
-+
-+ am_cv_$1_dependencies_compiler_type=none
-+ if test "$am_compiler_list" = ""; then
-+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-+ fi
-+ for depmode in $am_compiler_list; do
-+ # Setup a source with many dependencies, because some compilers
-+ # like to wrap large dependency lists on column 80 (with \), and
-+ # we should not choose a depcomp mode which is confused by this.
-+ #
-+ # We need to recreate these files for each test, as the compiler may
-+ # overwrite some of them when testing with obscure command lines.
-+ # This happens at least with the AIX C compiler.
-+ : > sub/conftest.c
-+ for i in 1 2 3 4 5 6; do
-+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
-+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-+ # Solaris 8's {/usr,}/bin/sh.
-+ touch sub/conftst$i.h
-+ done
-+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-+
-+ case $depmode in
-+ nosideeffect)
-+ # after this tag, mechanisms are not by side-effect, so they'll
-+ # only be used when explicitly requested
-+ if test "x$enable_dependency_tracking" = xyes; then
-+ continue
-+ else
-+ break
-+ fi
-+ ;;
-+ none) break ;;
-+ esac
-+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
-+ # mode. It turns out that the SunPro C++ compiler does not properly
-+ # handle `-M -o', and we need to detect this.
-+ if depmode=$depmode \
-+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-+ >/dev/null 2>conftest.err &&
-+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-+ # icc doesn't choke on unknown options, it will just issue warnings
-+ # or remarks (even with -Werror). So we grep stderr for any message
-+ # that says an option was ignored or not supported.
-+ # When given -MP, icc 7.0 and 7.1 complain thusly:
-+ # icc: Command line warning: ignoring option '-M'; no argument required
-+ # The diagnosis changed in icc 8.0:
-+ # icc: Command line remark: option '-MP' not supported
-+ if (grep 'ignoring option' conftest.err ||
-+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-+ am_cv_$1_dependencies_compiler_type=$depmode
-+ break
-+ fi
-+ fi
-+ done
-+
-+ cd ..
-+ rm -rf conftest.dir
-+else
-+ am_cv_$1_dependencies_compiler_type=none
-+fi
-+])
-+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-+AM_CONDITIONAL([am__fastdep$1], [
-+ test "x$enable_dependency_tracking" != xno \
-+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-+])
-+
-+
-+# AM_SET_DEPDIR
-+# -------------
-+# Choose a directory name for dependency files.
-+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-+AC_DEFUN([AM_SET_DEPDIR],
-+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-+])
-+
-+
-+# AM_DEP_TRACK
-+# ------------
-+AC_DEFUN([AM_DEP_TRACK],
-+[AC_ARG_ENABLE(dependency-tracking,
-+[ --disable-dependency-tracking speeds up one-time build
-+ --enable-dependency-tracking do not reject slow dependency extractors])
-+if test "x$enable_dependency_tracking" != xno; then
-+ am_depcomp="$ac_aux_dir/depcomp"
-+ AMDEPBACKSLASH='\'
-+fi
-+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-+AC_SUBST([AMDEPBACKSLASH])
-+])
-+
-+# Generate code to set up dependency tracking. -*- Autoconf -*-
-+
-+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+#serial 3
-+
-+# _AM_OUTPUT_DEPENDENCY_COMMANDS
-+# ------------------------------
-+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-+[for mf in $CONFIG_FILES; do
-+ # Strip MF so we end up with the name of the file.
-+ mf=`echo "$mf" | sed -e 's/:.*$//'`
-+ # Check whether this is an Automake generated Makefile or not.
-+ # We used to match only the files named `Makefile.in', but
-+ # some people rename them; so instead we look at the file content.
-+ # Grep'ing the first line is not enough: some people post-process
-+ # each Makefile.in and add a new line on top of each file to say so.
-+ # So let's grep whole file.
-+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-+ dirpart=`AS_DIRNAME("$mf")`
-+ else
-+ continue
-+ fi
-+ # Extract the definition of DEPDIR, am__include, and am__quote
-+ # from the Makefile without running `make'.
-+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-+ test -z "$DEPDIR" && continue
-+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
-+ test -z "am__include" && continue
-+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-+ # When using ansi2knr, U may be empty or an underscore; expand it
-+ U=`sed -n 's/^U = //p' < "$mf"`
-+ # Find all dependency output files, they are included files with
-+ # $(DEPDIR) in their names. We invoke sed twice because it is the
-+ # simplest approach to changing $(DEPDIR) to its actual value in the
-+ # expansion.
-+ for file in `sed -n "
-+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-+ # Make sure the directory exists.
-+ test -f "$dirpart/$file" && continue
-+ fdir=`AS_DIRNAME(["$file"])`
-+ AS_MKDIR_P([$dirpart/$fdir])
-+ # echo "creating $dirpart/$file"
-+ echo '# dummy' > "$dirpart/$file"
-+ done
-+done
-+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-+
-+
-+# AM_OUTPUT_DEPENDENCY_COMMANDS
-+# -----------------------------
-+# This macro should only be invoked once -- use via AC_REQUIRE.
-+#
-+# This code is only required when automatic dependency tracking
-+# is enabled. FIXME. This creates each `.P' file that we will
-+# need in order to bootstrap the dependency handling code.
-+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-+[AC_CONFIG_COMMANDS([depfiles],
-+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-+])
-+
-+# Check for Java compiler. -*- Autoconf -*-
-+# For now we only handle the GNU compiler.
-+
-+# Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+AC_DEFUN([AM_PROG_GCJ],[
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+@@ -7143,7 +7154,7 @@
+ # with or without modifications, as long as this notice is preserved.
+
+ AC_DEFUN([AM_PROG_GCJ],[
+-AC_CHECK_PROGS(GCJ, gcj, gcj)
+AC_CHECK_PROGS(GCJ, [gcj gcj-3.2 gcj-3.1 gcj-3.0 gcj-2.95], gcj)
-+test -z "$GCJ" && AC_MSG_ERROR([no acceptable gcj found in \$PATH])
-+if test "x${GCJFLAGS-unset}" = xunset; then
-+ GCJFLAGS="-g -O2"
-+fi
-+AC_SUBST(GCJFLAGS)
-+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(GCJ)])
-+])
-+
-+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 8
-+
-+# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
-+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
-+
-+# Do all the work for Automake. -*- Autoconf -*-
-+
-+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 12
-+
-+# This macro actually does too much. Some checks are only needed if
-+# your package does certain things. But this isn't really a big deal.
-+
-+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-+# AM_INIT_AUTOMAKE([OPTIONS])
-+# -----------------------------------------------
-+# The call with PACKAGE and VERSION arguments is the old style
-+# call (pre autoconf-2.50), which is being phased out. PACKAGE
-+# and VERSION should now be passed to AC_INIT and removed from
-+# the call to AM_INIT_AUTOMAKE.
-+# We support both call styles for the transition. After
-+# the next Automake release, Autoconf can make the AC_INIT
-+# arguments mandatory, and then we can depend on a new Autoconf
-+# release and drop the old call support.
-+AC_DEFUN([AM_INIT_AUTOMAKE],
-+[AC_PREREQ([2.58])dnl
-+dnl Autoconf wants to disallow AM_ names. We explicitly allow
-+dnl the ones we care about.
-+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-+AC_REQUIRE([AC_PROG_INSTALL])dnl
-+# test to see if srcdir already configured
-+if test "`cd $srcdir && pwd`" != "`pwd`" &&
-+ test -f $srcdir/config.status; then
-+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-+fi
-+
-+# test whether we have cygpath
-+if test -z "$CYGPATH_W"; then
-+ if (cygpath --version) >/dev/null 2>/dev/null; then
-+ CYGPATH_W='cygpath -w'
-+ else
-+ CYGPATH_W=echo
-+ fi
-+fi
-+AC_SUBST([CYGPATH_W])
-+
-+# Define the identity of the package.
-+dnl Distinguish between old-style and new-style calls.
-+m4_ifval([$2],
-+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
-+ AC_SUBST([PACKAGE], [$1])dnl
-+ AC_SUBST([VERSION], [$2])],
-+[_AM_SET_OPTIONS([$1])dnl
-+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
-+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-+
-+_AM_IF_OPTION([no-define],,
-+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
-+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
-+
-+# Some tools Automake needs.
-+AC_REQUIRE([AM_SANITY_CHECK])dnl
-+AC_REQUIRE([AC_ARG_PROGRAM])dnl
-+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-+AM_MISSING_PROG(AUTOCONF, autoconf)
-+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-+AM_MISSING_PROG(AUTOHEADER, autoheader)
-+AM_MISSING_PROG(MAKEINFO, makeinfo)
-+AM_PROG_INSTALL_SH
-+AM_PROG_INSTALL_STRIP
-+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-+# We need awk for the "check" target. The system "awk" is bad on
-+# some platforms.
-+AC_REQUIRE([AC_PROG_AWK])dnl
-+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-+ [_AM_PROG_TAR([v7])])])
-+_AM_IF_OPTION([no-dependencies],,
-+[AC_PROVIDE_IFELSE([AC_PROG_CC],
-+ [_AM_DEPENDENCIES(CC)],
-+ [define([AC_PROG_CC],
-+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-+AC_PROVIDE_IFELSE([AC_PROG_CXX],
-+ [_AM_DEPENDENCIES(CXX)],
-+ [define([AC_PROG_CXX],
-+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-+])
-+])
-+
-+
-+# When config.status generates a header, we must update the stamp-h file.
-+# This file resides in the same directory as the config header
-+# that is generated. The stamp files are numbered to have different names.
-+
-+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-+# loop where config.status creates the headers, so we can generate
-+# our stamp files there.
-+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-+[# Compute $1's index in $config_headers.
-+_am_stamp_count=1
-+for _am_header in $config_headers :; do
-+ case $_am_header in
-+ $1 | $1:* )
-+ break ;;
-+ * )
-+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-+ esac
-+done
-+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
-+
-+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# AM_PROG_INSTALL_SH
-+# ------------------
-+# Define $install_sh.
-+AC_DEFUN([AM_PROG_INSTALL_SH],
-+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-+install_sh=${install_sh-"$am_aux_dir/install-sh"}
-+AC_SUBST(install_sh)])
-+
-+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 2
-+
-+# Check whether the underlying file-system supports filenames
-+# with a leading dot. For instance MS-DOS doesn't.
-+AC_DEFUN([AM_SET_LEADING_DOT],
-+[rm -rf .tst 2>/dev/null
-+mkdir .tst 2>/dev/null
-+if test -d .tst; then
-+ am__leading_dot=.
-+else
-+ am__leading_dot=_
-+fi
-+rmdir .tst 2>/dev/null
-+AC_SUBST([am__leading_dot])])
-+
-+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
-+# From Jim Meyering
-+
-+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 4
-+
-+AC_DEFUN([AM_MAINTAINER_MODE],
-+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-+ dnl maintainer-mode is disabled by default
-+ AC_ARG_ENABLE(maintainer-mode,
-+[ --enable-maintainer-mode enable make rules and dependencies not useful
-+ (and sometimes confusing) to the casual installer],
-+ USE_MAINTAINER_MODE=$enableval,
-+ USE_MAINTAINER_MODE=no)
-+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
-+ AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
-+ MAINT=$MAINTAINER_MODE_TRUE
-+ AC_SUBST(MAINT)dnl
-+]
-+)
-+
-+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-+
-+# Check to see how 'make' treats includes. -*- Autoconf -*-
-+
-+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 3
-+
-+# AM_MAKE_INCLUDE()
-+# -----------------
-+# Check to see how make treats includes.
-+AC_DEFUN([AM_MAKE_INCLUDE],
-+[am_make=${MAKE-make}
-+cat > confinc << 'END'
-+am__doit:
-+ @echo done
-+.PHONY: am__doit
-+END
-+# If we don't find an include directive, just comment out the code.
-+AC_MSG_CHECKING([for style of include used by $am_make])
-+am__include="#"
-+am__quote=
-+_am_result=none
-+# First try GNU make style include.
-+echo "include confinc" > confmf
-+# We grep out `Entering directory' and `Leaving directory'
-+# messages which can occur if `w' ends up in MAKEFLAGS.
-+# In particular we don't look at `^make:' because GNU make might
-+# be invoked under some other name (usually "gmake"), in which
-+# case it prints its new name instead of `make'.
-+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-+ am__include=include
-+ am__quote=
-+ _am_result=GNU
-+fi
-+# Now try BSD make style include.
-+if test "$am__include" = "#"; then
-+ echo '.include "confinc"' > confmf
-+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-+ am__include=.include
-+ am__quote="\""
-+ _am_result=BSD
-+ fi
-+fi
-+AC_SUBST([am__include])
-+AC_SUBST([am__quote])
-+AC_MSG_RESULT([$_am_result])
-+rm -f confinc confmf
-+])
-+
-+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-+
-+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 4
-+
-+# AM_MISSING_PROG(NAME, PROGRAM)
-+# ------------------------------
-+AC_DEFUN([AM_MISSING_PROG],
-+[AC_REQUIRE([AM_MISSING_HAS_RUN])
-+$1=${$1-"${am_missing_run}$2"}
-+AC_SUBST($1)])
-+
-+
-+# AM_MISSING_HAS_RUN
-+# ------------------
-+# Define MISSING if not defined so far and test if it supports --run.
-+# If it does, set am_missing_run to use it, otherwise, to nothing.
-+AC_DEFUN([AM_MISSING_HAS_RUN],
-+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-+# Use eval to expand $SHELL
-+if eval "$MISSING --run true"; then
-+ am_missing_run="$MISSING --run "
-+else
-+ am_missing_run=
-+ AC_MSG_WARN([`missing' script is too old or missing])
-+fi
-+])
-+
-+# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# AM_PROG_MKDIR_P
-+# ---------------
-+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-+#
-+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
-+# created by `make install' are always world readable, even if the
-+# installer happens to have an overly restrictive umask (e.g. 077).
-+# This was a mistake. There are at least two reasons why we must not
-+# use `-m 0755':
-+# - it causes special bits like SGID to be ignored,
-+# - it may be too restrictive (some setups expect 775 directories).
-+#
-+# Do not use -m 0755 and let people choose whatever they expect by
-+# setting umask.
-+#
-+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
-+# Some implementations (such as Solaris 8's) are not thread-safe: if a
-+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
-+# concurrently, both version can detect that a/ is missing, but only
-+# one can create it and the other will error out. Consequently we
-+# restrict ourselves to GNU make (using the --version option ensures
-+# this.)
-+AC_DEFUN([AM_PROG_MKDIR_P],
-+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-+ # We used to keeping the `.' as first argument, in order to
-+ # allow $(mkdir_p) to be used without argument. As in
-+ # $(mkdir_p) $(somedir)
-+ # where $(somedir) is conditionally defined. However this is wrong
-+ # for two reasons:
-+ # 1. if the package is installed by a user who cannot write `.'
-+ # make install will fail,
-+ # 2. the above comment should most certainly read
-+ # $(mkdir_p) $(DESTDIR)$(somedir)
-+ # so it does not work when $(somedir) is undefined and
-+ # $(DESTDIR) is not.
-+ # To support the latter case, we have to write
-+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-+ # so the `.' trick is pointless.
-+ mkdir_p='mkdir -p --'
-+else
-+ # On NextStep and OpenStep, the `mkdir' command does not
-+ # recognize any option. It will interpret all options as
-+ # directories to create, and then abort because `.' already
-+ # exists.
-+ for d in ./-p ./--version;
-+ do
-+ test -d $d && rmdir $d
-+ done
-+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-+ if test -f "$ac_aux_dir/mkinstalldirs"; then
-+ mkdir_p='$(mkinstalldirs)'
-+ else
-+ mkdir_p='$(install_sh) -d'
-+ fi
-+fi
-+AC_SUBST([mkdir_p])])
-+
-+# Helper functions for option handling. -*- Autoconf -*-
-+
-+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 3
-+
-+# _AM_MANGLE_OPTION(NAME)
-+# -----------------------
-+AC_DEFUN([_AM_MANGLE_OPTION],
-+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-+
-+# _AM_SET_OPTION(NAME)
-+# ------------------------------
-+# Set option NAME. Presently that only means defining a flag for this option.
-+AC_DEFUN([_AM_SET_OPTION],
-+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
-+
-+# _AM_SET_OPTIONS(OPTIONS)
-+# ----------------------------------
-+# OPTIONS is a space-separated list of Automake options.
-+AC_DEFUN([_AM_SET_OPTIONS],
-+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-+
-+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-+# -------------------------------------------
-+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-+AC_DEFUN([_AM_IF_OPTION],
-+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-+
-+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-+# ---------------------------------------------------------------------------
-+# Adds support for distributing Python modules and packages. To
-+# install modules, copy them to $(pythondir), using the python_PYTHON
-+# automake variable. To install a package with the same name as the
-+# automake package, install to $(pkgpythondir), or use the
-+# pkgpython_PYTHON automake variable.
-+#
-+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
-+# locations to install python extension modules (shared libraries).
-+# Another macro is required to find the appropriate flags to compile
-+# extension modules.
-+#
-+# If your package is configured with a different prefix to python,
-+# users will have to add the install directory to the PYTHONPATH
-+# environment variable, or create a .pth file (see the python
-+# documentation for details).
-+#
-+# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
-+# cause an error if the version of python installed on the system
-+# doesn't meet the requirement. MINIMUM-VERSION should consist of
-+# numbers and dots only.
-+AC_DEFUN([AM_PATH_PYTHON],
-+ [
-+ dnl Find a Python interpreter. Python versions prior to 1.5 are not
-+ dnl supported because the default installation locations changed from
-+ dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages
-+ dnl in 1.5.
-+ m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
-+ [python python2 python2.5 python2.4 python2.3 python2.2 dnl
-+python2.1 python2.0 python1.6 python1.5])
-+
-+ m4_if([$1],[],[
-+ dnl No version check is needed.
-+ # Find any Python interpreter.
-+ if test -z "$PYTHON"; then
-+ AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
-+ fi
-+ am_display_PYTHON=python
-+ ], [
-+ dnl A version check is needed.
-+ if test -n "$PYTHON"; then
-+ # If the user set $PYTHON, use it and don't search something else.
-+ AC_MSG_CHECKING([whether $PYTHON version >= $1])
-+ AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
-+ [AC_MSG_RESULT(yes)],
-+ [AC_MSG_ERROR(too old)])
-+ am_display_PYTHON=$PYTHON
-+ else
-+ # Otherwise, try each interpreter until we find one that satisfies
-+ # VERSION.
-+ AC_CACHE_CHECK([for a Python interpreter with version >= $1],
-+ [am_cv_pathless_PYTHON],[
-+ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
-+ test "$am_cv_pathless_PYTHON" = none && break
-+ AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
-+ done])
-+ # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
-+ if test "$am_cv_pathless_PYTHON" = none; then
-+ PYTHON=:
-+ else
-+ AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
-+ fi
-+ am_display_PYTHON=$am_cv_pathless_PYTHON
-+ fi
-+ ])
-+
-+ if test "$PYTHON" = :; then
-+ dnl Run any user-specified action, or abort.
-+ m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
-+ else
-+
-+ dnl Query Python for its version number. Getting [:3] seems to be
-+ dnl the best way to do this; it's what "site.py" does in the standard
-+ dnl library.
-+
-+ AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
-+ [am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`])
-+ AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
-+
-+ dnl Use the values of $prefix and $exec_prefix for the corresponding
-+ dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
-+ dnl distinct variables so they can be overridden if need be. However,
-+ dnl general consensus is that you shouldn't need this ability.
-+
-+ AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
-+ AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
-+
-+ dnl At times (like when building shared libraries) you may want
-+ dnl to know which OS platform Python thinks this is.
-+
-+ AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
-+ [am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`])
-+ AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
-+
-+
-+ dnl Set up 4 directories:
-+
-+ dnl pythondir -- where to install python scripts. This is the
-+ dnl site-packages directory, not the python standard library
-+ dnl directory like in previous automake betas. This behavior
-+ dnl is more consistent with lispdir.m4 for example.
-+ dnl Query distutils for this directory. distutils does not exist in
-+ dnl Python 1.5, so we fall back to the hardcoded directory if it
-+ dnl doesn't work.
-+ AC_CACHE_CHECK([for $am_display_PYTHON script directory],
-+ [am_cv_python_pythondir],
-+ [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null ||
-+ echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`])
-+ AC_SUBST([pythondir], [$am_cv_python_pythondir])
-+
-+ dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
-+ dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
-+ dnl more consistent with the rest of automake.
-+
-+ AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
-+
-+ dnl pyexecdir -- directory for installing python extension modules
-+ dnl (shared libraries)
-+ dnl Query distutils for this directory. distutils does not exist in
-+ dnl Python 1.5, so we fall back to the hardcoded directory if it
-+ dnl doesn't work.
-+ AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
-+ [am_cv_python_pyexecdir],
-+ [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null ||
-+ echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`])
-+ AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
-+
-+ dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
-+
-+ AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
-+
-+ dnl Run any user-specified action.
-+ $2
-+ fi
-+
-+])
-+
-+
-+# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
-+# ---------------------------------------------------------------------------
-+# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
-+# Run ACTION-IF-FALSE otherwise.
-+# This test uses sys.hexversion instead of the string equivalent (first
-+# word of sys.version), in order to cope with versions such as 2.2c1.
-+# hexversion has been introduced in Python 1.5.2; it's probably not
-+# worth to support older versions (1.5.1 was released on October 31, 1998).
-+AC_DEFUN([AM_PYTHON_CHECK_VERSION],
-+ [prog="import sys, string
-+# split strings by '.' and convert to numeric. Append some zeros
-+# because we need at least 4 digits for the hex conversion.
-+minver = map(int, string.split('$2', '.')) + [[0, 0, 0]]
-+minverhex = 0
-+for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]]
-+sys.exit(sys.hexversion < minverhex)"
-+ AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
-+
-+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# AM_RUN_LOG(COMMAND)
-+# -------------------
-+# Run COMMAND, save the exit status in ac_status, and log it.
-+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
-+AC_DEFUN([AM_RUN_LOG],
-+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
-+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-+ (exit $ac_status); }])
-+
-+# Check to make sure that the build environment is sane. -*- Autoconf -*-
-+
-+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-+# Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 4
-+
-+# AM_SANITY_CHECK
-+# ---------------
-+AC_DEFUN([AM_SANITY_CHECK],
-+[AC_MSG_CHECKING([whether build environment is sane])
-+# Just in case
-+sleep 1
-+echo timestamp > conftest.file
-+# Do `set' in a subshell so we don't clobber the current shell's
-+# arguments. Must try -L first in case configure is actually a
-+# symlink; some systems play weird games with the mod time of symlinks
-+# (eg FreeBSD returns the mod time of the symlink's containing
-+# directory).
-+if (
-+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-+ if test "$[*]" = "X"; then
-+ # -L didn't work.
-+ set X `ls -t $srcdir/configure conftest.file`
-+ fi
-+ rm -f conftest.file
-+ if test "$[*]" != "X $srcdir/configure conftest.file" \
-+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
-+
-+ # If neither matched, then we have a broken ls. This can happen
-+ # if, for instance, CONFIG_SHELL is bash and it inherits a
-+ # broken ls alias from the environment. This has actually
-+ # happened. Such a system could not be considered "sane".
-+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-+alias in your environment])
-+ fi
-+
-+ test "$[2]" = conftest.file
-+ )
-+then
-+ # Ok.
-+ :
-+else
-+ AC_MSG_ERROR([newly created file is older than distributed files!
-+Check your system clock])
-+fi
-+AC_MSG_RESULT(yes)])
-+
-+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# AM_PROG_INSTALL_STRIP
-+# ---------------------
-+# One issue with vendor `install' (even GNU) is that you can't
-+# specify the program used to strip binaries. This is especially
-+# annoying in cross-compiling environments, where the build's strip
-+# is unlikely to handle the host's binaries.
-+# Fortunately install-sh will honor a STRIPPROG variable, so we
-+# always use install-sh in `make install-strip', and initialize
-+# STRIPPROG with the value of the STRIP variable (set by the user).
-+AC_DEFUN([AM_PROG_INSTALL_STRIP],
-+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-+# Installed binaries are usually stripped using `strip' when the user
-+# run `make install-strip'. However `strip' might not be the right
-+# tool to use in cross-compilation environments, therefore Automake
-+# will honor the `STRIP' environment variable to overrule this program.
-+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
-+if test "$cross_compiling" != no; then
-+ AC_CHECK_TOOL([STRIP], [strip], :)
-+fi
-+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-+AC_SUBST([INSTALL_STRIP_PROGRAM])])
-+
-+# Check how to create a tarball. -*- Autoconf -*-
-+
-+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-+#
-+# This file is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# serial 2
-+
-+# _AM_PROG_TAR(FORMAT)
-+# --------------------
-+# Check how to create a tarball in format FORMAT.
-+# FORMAT should be one of `v7', `ustar', or `pax'.
-+#
-+# Substitute a variable $(am__tar) that is a command
-+# writing to stdout a FORMAT-tarball containing the directory
-+# $tardir.
-+# tardir=directory && $(am__tar) > result.tar
-+#
-+# Substitute a variable $(am__untar) that extract such
-+# a tarball read from stdin.
-+# $(am__untar) < result.tar
-+AC_DEFUN([_AM_PROG_TAR],
-+[# Always define AMTAR for backward compatibility.
-+AM_MISSING_PROG([AMTAR], [tar])
-+m4_if([$1], [v7],
-+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
-+ [m4_case([$1], [ustar],, [pax],,
-+ [m4_fatal([Unknown tar format])])
-+AC_MSG_CHECKING([how to create a $1 tar archive])
-+# Loop over all known methods to create a tar archive until one works.
-+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-+# Do not fold the above two line into one, because Tru64 sh and
-+# Solaris sh will not grok spaces in the rhs of `-'.
-+for _am_tool in $_am_tools
-+do
-+ case $_am_tool in
-+ gnutar)
-+ for _am_tar in tar gnutar gtar;
-+ do
-+ AM_RUN_LOG([$_am_tar --version]) && break
-+ done
-+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-+ am__untar="$_am_tar -xf -"
-+ ;;
-+ plaintar)
-+ # Must skip GNU tar: if it does not support --format= it doesn't create
-+ # ustar tarball either.
-+ (tar --version) >/dev/null 2>&1 && continue
-+ am__tar='tar chf - "$$tardir"'
-+ am__tar_='tar chf - "$tardir"'
-+ am__untar='tar xf -'
-+ ;;
-+ pax)
-+ am__tar='pax -L -x $1 -w "$$tardir"'
-+ am__tar_='pax -L -x $1 -w "$tardir"'
-+ am__untar='pax -r'
-+ ;;
-+ cpio)
-+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-+ am__untar='cpio -i -H $1 -d'
-+ ;;
-+ none)
-+ am__tar=false
-+ am__tar_=false
-+ am__untar=false
-+ ;;
-+ esac
-+
-+ # If the value was cached, stop now. We just wanted to have am__tar
-+ # and am__untar set.
-+ test -n "${am_cv_prog_tar_$1}" && break
-+
-+ # tar/untar a dummy directory, and stop if the command works
-+ rm -rf conftest.dir
-+ mkdir conftest.dir
-+ echo GrepMe > conftest.dir/file
-+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-+ rm -rf conftest.dir
-+ if test -s conftest.tar; then
-+ AM_RUN_LOG([$am__untar <conftest.tar])
-+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-+ fi
-+done
-+rm -rf conftest.dir
-+
-+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-+AC_SUBST([am__tar])
-+AC_SUBST([am__untar])
-+]) # _AM_PROG_TAR
-+
-+m4_include([acinclude.m4])
-diff -Naur dbus-0.61.orig/bus/Makefile.am dbus-0.61/bus/Makefile.am
---- dbus-0.61.orig/bus/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/Makefile.am 2005-06-15 04:31:38.000000000 +0200
-@@ -0,0 +1,130 @@
-+
-+configdir=$(sysconfdir)/dbus-1
-+
-+INCLUDES=-I$(top_srcdir) $(DBUS_BUS_CFLAGS) \
-+ -DDAEMON_NAME=\"dbus-daemon\" -DDBUS_COMPILATION \
-+ -DDBUS_SYSTEM_CONFIG_FILE=\""$(configdir)/system.conf"\" \
-+ -DDBUS_SESSION_CONFIG_FILE=\""$(configdir)/session.conf"\"
-+
-+EFENCE=
-+
-+CONFIG_IN_FILES= \
-+ session.conf.in \
-+ system.conf.in
-+
-+config_DATA= \
-+ session.conf \
-+ system.conf
-+
-+bin_PROGRAMS=dbus-daemon
-+
-+if DBUS_USE_LIBXML
-+XML_SOURCES=config-loader-libxml.c
-+endif
-+if DBUS_USE_EXPAT
-+XML_SOURCES=config-loader-expat.c
-+endif
-+
-+BUS_SOURCES= \
-+ activation.c \
-+ activation.h \
-+ bus.c \
-+ bus.h \
-+ config-parser.c \
-+ config-parser.h \
-+ connection.c \
-+ connection.h \
-+ desktop-file.c \
-+ desktop-file.h \
-+ dir-watch.c \
-+ dir-watch.h \
-+ dispatch.c \
-+ dispatch.h \
-+ driver.c \
-+ driver.h \
-+ expirelist.c \
-+ expirelist.h \
-+ policy.c \
-+ policy.h \
-+ selinux.h \
-+ selinux.c \
-+ services.c \
-+ services.h \
-+ signals.c \
-+ signals.h \
-+ test.c \
-+ test.h \
-+ utils.c \
-+ utils.h \
-+ $(XML_SOURCES)
-+
-+dbus_daemon_SOURCES= \
-+ $(BUS_SOURCES) \
-+ main.c
-+
-+dbus_daemon_LDADD= \
-+ $(EFENCE) \
-+ $(DBUS_BUS_LIBS) \
-+ $(top_builddir)/dbus/libdbus-convenience.la
-+
-+## note that TESTS has special meaning (stuff to use in make check)
-+## so if adding tests not to be run in make check, don't add them to
-+## TESTS
-+if DBUS_BUILD_TESTS
-+TESTS_ENVIRONMENT=DBUS_TEST_DATA=$(top_builddir)/test/data DBUS_TEST_HOMEDIR=$(top_builddir)/dbus
-+TESTS=bus-test
-+else
-+TESTS=
-+endif
-+
-+## we use noinst_PROGRAMS not check_PROGRAMS so that we build
-+## even when not doing "make check"
-+noinst_PROGRAMS=$(TESTS)
-+
-+bus_test_SOURCES= \
-+ $(BUS_SOURCES) \
-+ test-main.c
-+
-+bus_test_LDADD=$(top_builddir)/dbus/libdbus-convenience.la $(DBUS_BUS_LIBS)
-+
-+## mop up the gcov files
-+clean-local:
-+ /bin/rm *.bb *.bbg *.da *.gcov || true
-+
-+install-data-hook:
-+ $(mkinstalldirs) $(DESTDIR)/$(localstatedir)/run/dbus
-+ $(mkinstalldirs) $(DESTDIR)/$(configdir)/system.d
-+ $(mkinstalldirs) $(DESTDIR)/$(datadir)/dbus-1/services
-+
-+#### Init scripts fun
-+SCRIPT_IN_FILES=messagebus.in \
-+ rc.messagebus.in
-+
-+## Red Hat start
-+if DBUS_INIT_SCRIPTS_RED_HAT
-+
-+initddir=$(sysconfdir)/rc.d/init.d
-+
-+initd_SCRIPTS= \
-+ messagebus
-+
-+endif
-+ ## Red Hat end
-+
-+## Slackware start
-+if DBUS_INIT_SCRIPTS_SLACKWARE
-+
-+initddir=$(sysconfdir)/rc.d/
-+
-+initd_SCRIPTS= \
-+ rc.messagebus
-+
-+endif
-+## Slackware end
-+
-+MAN_IN_FILES=dbus-daemon.1.in
-+man_MANS = dbus-daemon.1
-+
-+#### Extra dist
-+
-+EXTRA_DIST=$(CONFIG_IN_FILES) $(SCRIPT_IN_FILES) $(man_MANS) $(MAN_IN_FILES)
-diff -Naur dbus-0.61.orig/bus/Makefile.in dbus-0.61/bus/Makefile.in
---- dbus-0.61.orig/bus/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/Makefile.in 2006-02-27 22:34:28.000000000 +0100
-@@ -0,0 +1,947 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+bin_PROGRAMS = dbus-daemon$(EXEEXT)
-+noinst_PROGRAMS = $(am__EXEEXT_1)
-+subdir = bus
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-+ $(srcdir)/dbus-daemon.1.in $(srcdir)/messagebus.in \
-+ $(srcdir)/rc.messagebus.in $(srcdir)/session.conf.in \
-+ $(srcdir)/system.conf.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES = system.conf session.conf messagebus rc.messagebus \
-+ dbus-daemon.1
-+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(initddir)" \
-+ "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(configdir)"
-+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-+ at DBUS_BUILD_TESTS_TRUE@am__EXEEXT_1 = bus-test$(EXEEXT)
-+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
-+am__bus_test_SOURCES_DIST = activation.c activation.h bus.c bus.h \
-+ config-parser.c config-parser.h connection.c connection.h \
-+ desktop-file.c desktop-file.h dir-watch.c dir-watch.h \
-+ dispatch.c dispatch.h driver.c driver.h expirelist.c \
-+ expirelist.h policy.c policy.h selinux.h selinux.c services.c \
-+ services.h signals.c signals.h test.c test.h utils.c utils.h \
-+ config-loader-expat.c config-loader-libxml.c test-main.c
-+ at DBUS_USE_EXPAT_FALSE@@DBUS_USE_LIBXML_TRUE at am__objects_1 = config-loader-libxml.$(OBJEXT)
-+ at DBUS_USE_EXPAT_TRUE@am__objects_1 = config-loader-expat.$(OBJEXT)
-+am__objects_2 = activation.$(OBJEXT) bus.$(OBJEXT) \
-+ config-parser.$(OBJEXT) connection.$(OBJEXT) \
-+ desktop-file.$(OBJEXT) dir-watch.$(OBJEXT) dispatch.$(OBJEXT) \
-+ driver.$(OBJEXT) expirelist.$(OBJEXT) policy.$(OBJEXT) \
-+ selinux.$(OBJEXT) services.$(OBJEXT) signals.$(OBJEXT) \
-+ test.$(OBJEXT) utils.$(OBJEXT) $(am__objects_1)
-+am_bus_test_OBJECTS = $(am__objects_2) test-main.$(OBJEXT)
-+bus_test_OBJECTS = $(am_bus_test_OBJECTS)
-+am__DEPENDENCIES_1 =
-+bus_test_DEPENDENCIES = $(top_builddir)/dbus/libdbus-convenience.la \
-+ $(am__DEPENDENCIES_1)
-+am__dbus_daemon_SOURCES_DIST = activation.c activation.h bus.c bus.h \
-+ config-parser.c config-parser.h connection.c connection.h \
-+ desktop-file.c desktop-file.h dir-watch.c dir-watch.h \
-+ dispatch.c dispatch.h driver.c driver.h expirelist.c \
-+ expirelist.h policy.c policy.h selinux.h selinux.c services.c \
-+ services.h signals.c signals.h test.c test.h utils.c utils.h \
-+ config-loader-expat.c config-loader-libxml.c main.c
-+am_dbus_daemon_OBJECTS = $(am__objects_2) main.$(OBJEXT)
-+dbus_daemon_OBJECTS = $(am_dbus_daemon_OBJECTS)
-+dbus_daemon_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
-+ $(top_builddir)/dbus/libdbus-convenience.la
-+initdSCRIPT_INSTALL = $(INSTALL_SCRIPT)
-+SCRIPTS = $(initd_SCRIPTS)
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(bus_test_SOURCES) $(dbus_daemon_SOURCES)
-+DIST_SOURCES = $(am__bus_test_SOURCES_DIST) \
-+ $(am__dbus_daemon_SOURCES_DIST)
-+man1dir = $(mandir)/man1
-+NROFF = nroff
-+MANS = $(man_MANS)
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+configDATA_INSTALL = $(INSTALL_DATA)
-+DATA = $(config_DATA)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+configdir = $(sysconfdir)/dbus-1
-+INCLUDES = -I$(top_srcdir) $(DBUS_BUS_CFLAGS) \
-+ -DDAEMON_NAME=\"dbus-daemon\" -DDBUS_COMPILATION \
-+ -DDBUS_SYSTEM_CONFIG_FILE=\""$(configdir)/system.conf"\" \
-+ -DDBUS_SESSION_CONFIG_FILE=\""$(configdir)/session.conf"\"
-+
-+EFENCE =
-+CONFIG_IN_FILES = \
-+ session.conf.in \
-+ system.conf.in
-+
-+config_DATA = \
-+ session.conf \
-+ system.conf
-+
-+ at DBUS_USE_EXPAT_TRUE@XML_SOURCES = config-loader-expat.c
-+ at DBUS_USE_LIBXML_TRUE@XML_SOURCES = config-loader-libxml.c
-+BUS_SOURCES = \
-+ activation.c \
-+ activation.h \
-+ bus.c \
-+ bus.h \
-+ config-parser.c \
-+ config-parser.h \
-+ connection.c \
-+ connection.h \
-+ desktop-file.c \
-+ desktop-file.h \
-+ dir-watch.c \
-+ dir-watch.h \
-+ dispatch.c \
-+ dispatch.h \
-+ driver.c \
-+ driver.h \
-+ expirelist.c \
-+ expirelist.h \
-+ policy.c \
-+ policy.h \
-+ selinux.h \
-+ selinux.c \
-+ services.c \
-+ services.h \
-+ signals.c \
-+ signals.h \
-+ test.c \
-+ test.h \
-+ utils.c \
-+ utils.h \
-+ $(XML_SOURCES)
-+
-+dbus_daemon_SOURCES = \
-+ $(BUS_SOURCES) \
-+ main.c
-+
-+dbus_daemon_LDADD = \
-+ $(EFENCE) \
-+ $(DBUS_BUS_LIBS) \
-+ $(top_builddir)/dbus/libdbus-convenience.la
-+
-+ at DBUS_BUILD_TESTS_TRUE@TESTS_ENVIRONMENT = DBUS_TEST_DATA=$(top_builddir)/test/data DBUS_TEST_HOMEDIR=$(top_builddir)/dbus
-+ at DBUS_BUILD_TESTS_FALSE@TESTS =
-+ at DBUS_BUILD_TESTS_TRUE@TESTS = bus-test
-+bus_test_SOURCES = \
-+ $(BUS_SOURCES) \
-+ test-main.c
-+
-+bus_test_LDADD = $(top_builddir)/dbus/libdbus-convenience.la $(DBUS_BUS_LIBS)
-+
-+#### Init scripts fun
-+SCRIPT_IN_FILES = messagebus.in \
-+ rc.messagebus.in
-+
-+ at DBUS_INIT_SCRIPTS_RED_HAT_TRUE@initddir = $(sysconfdir)/rc.d/init.d
-+ at DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@initddir = $(sysconfdir)/rc.d/
-+ at DBUS_INIT_SCRIPTS_RED_HAT_TRUE@initd_SCRIPTS = \
-+ at DBUS_INIT_SCRIPTS_RED_HAT_TRUE@ messagebus
-+
-+ at DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@initd_SCRIPTS = \
-+ at DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@ rc.messagebus
-+
-+MAN_IN_FILES = dbus-daemon.1.in
-+man_MANS = dbus-daemon.1
-+
-+#### Extra dist
-+EXTRA_DIST = $(CONFIG_IN_FILES) $(SCRIPT_IN_FILES) $(man_MANS) $(MAN_IN_FILES)
-+all: all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bus/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu bus/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+system.conf: $(top_builddir)/config.status $(srcdir)/system.conf.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-+session.conf: $(top_builddir)/config.status $(srcdir)/session.conf.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-+messagebus: $(top_builddir)/config.status $(srcdir)/messagebus.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-+rc.messagebus: $(top_builddir)/config.status $(srcdir)/rc.messagebus.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-+dbus-daemon.1: $(top_builddir)/config.status $(srcdir)/dbus-daemon.1.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-+install-binPROGRAMS: $(bin_PROGRAMS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ if test -f $$p \
-+ || test -f $$p1 \
-+ ; then \
-+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
-+ else :; fi; \
-+ done
-+
-+uninstall-binPROGRAMS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
-+ done
-+
-+clean-binPROGRAMS:
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+bus-test$(EXEEXT): $(bus_test_OBJECTS) $(bus_test_DEPENDENCIES)
-+ @rm -f bus-test$(EXEEXT)
-+ $(LINK) $(bus_test_LDFLAGS) $(bus_test_OBJECTS) $(bus_test_LDADD) $(LIBS)
-+dbus-daemon$(EXEEXT): $(dbus_daemon_OBJECTS) $(dbus_daemon_DEPENDENCIES)
-+ @rm -f dbus-daemon$(EXEEXT)
-+ $(LINK) $(dbus_daemon_LDFLAGS) $(dbus_daemon_OBJECTS) $(dbus_daemon_LDADD) $(LIBS)
-+install-initdSCRIPTS: $(initd_SCRIPTS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(initddir)" || $(mkdir_p) "$(DESTDIR)$(initddir)"
-+ @list='$(initd_SCRIPTS)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ if test -f $$d$$p; then \
-+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-+ echo " $(initdSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(initddir)/$$f'"; \
-+ $(initdSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(initddir)/$$f"; \
-+ else :; fi; \
-+ done
-+
-+uninstall-initdSCRIPTS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(initd_SCRIPTS)'; for p in $$list; do \
-+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
-+ echo " rm -f '$(DESTDIR)$(initddir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(initddir)/$$f"; \
-+ done
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/activation.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bus.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/config-loader-expat.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/config-loader-libxml.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/config-parser.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/connection.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/desktop-file.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dir-watch.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dispatch.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/driver.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/expirelist.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/main.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/policy.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/selinux.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/services.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/signals.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-main.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/utils.Po at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-man1: $(man1_MANS) $(man_MANS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
-+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-+ for i in $$l2; do \
-+ case "$$i" in \
-+ *.1*) list="$$list $$i" ;; \
-+ esac; \
-+ done; \
-+ for i in $$list; do \
-+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-+ else file=$$i; fi; \
-+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-+ case "$$ext" in \
-+ 1*) ;; \
-+ *) ext='1' ;; \
-+ esac; \
-+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
-+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
-+ done
-+uninstall-man1:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-+ for i in $$l2; do \
-+ case "$$i" in \
-+ *.1*) list="$$list $$i" ;; \
-+ esac; \
-+ done; \
-+ for i in $$list; do \
-+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-+ case "$$ext" in \
-+ 1*) ;; \
-+ *) ext='1' ;; \
-+ esac; \
-+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
-+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
-+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
-+ done
-+install-configDATA: $(config_DATA)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(configdir)" || $(mkdir_p) "$(DESTDIR)$(configdir)"
-+ @list='$(config_DATA)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(configDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(configdir)/$$f'"; \
-+ $(configDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(configdir)/$$f"; \
-+ done
-+
-+uninstall-configDATA:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(config_DATA)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(configdir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(configdir)/$$f"; \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+check-TESTS: $(TESTS)
-+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-+ srcdir=$(srcdir); export srcdir; \
-+ list='$(TESTS)'; \
-+ if test -n "$$list"; then \
-+ for tst in $$list; do \
-+ if test -f ./$$tst; then dir=./; \
-+ elif test -f $$tst; then dir=; \
-+ else dir="$(srcdir)/"; fi; \
-+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xpass=`expr $$xpass + 1`; \
-+ failed=`expr $$failed + 1`; \
-+ echo "XPASS: $$tst"; \
-+ ;; \
-+ *) \
-+ echo "PASS: $$tst"; \
-+ ;; \
-+ esac; \
-+ elif test $$? -ne 77; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xfail=`expr $$xfail + 1`; \
-+ echo "XFAIL: $$tst"; \
-+ ;; \
-+ *) \
-+ failed=`expr $$failed + 1`; \
-+ echo "FAIL: $$tst"; \
-+ ;; \
-+ esac; \
-+ else \
-+ skip=`expr $$skip + 1`; \
-+ echo "SKIP: $$tst"; \
-+ fi; \
-+ done; \
-+ if test "$$failed" -eq 0; then \
-+ if test "$$xfail" -eq 0; then \
-+ banner="All $$all tests passed"; \
-+ else \
-+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-+ fi; \
-+ else \
-+ if test "$$xpass" -eq 0; then \
-+ banner="$$failed of $$all tests failed"; \
-+ else \
-+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-+ fi; \
-+ fi; \
-+ dashes="$$banner"; \
-+ skipped=""; \
-+ if test "$$skip" -ne 0; then \
-+ skipped="($$skip tests were not run)"; \
-+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$skipped"; \
-+ fi; \
-+ report=""; \
-+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-+ report="Please report to $(PACKAGE_BUGREPORT)"; \
-+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$report"; \
-+ fi; \
-+ dashes=`echo "$$dashes" | sed s/./=/g`; \
-+ echo "$$dashes"; \
-+ echo "$$banner"; \
-+ test -z "$$skipped" || echo "$$skipped"; \
-+ test -z "$$report" || echo "$$report"; \
-+ echo "$$dashes"; \
-+ test "$$failed" -eq 0; \
-+ else :; fi
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-+check: check-am
-+all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA)
-+installdirs:
-+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(initddir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(configdir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-binPROGRAMS clean-generic clean-libtool clean-local \
-+ clean-noinstPROGRAMS mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am: install-configDATA install-initdSCRIPTS install-man
-+ @$(NORMAL_INSTALL)
-+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
-+
-+install-exec-am: install-binPROGRAMS
-+
-+install-info: install-info-am
-+
-+install-man: install-man1
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-binPROGRAMS uninstall-configDATA \
-+ uninstall-info-am uninstall-initdSCRIPTS uninstall-man
-+
-+uninstall-man: uninstall-man1
-+
-+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
-+ clean-binPROGRAMS clean-generic clean-libtool clean-local \
-+ clean-noinstPROGRAMS ctags distclean distclean-compile \
-+ distclean-generic distclean-libtool distclean-tags distdir dvi \
-+ dvi-am html html-am info info-am install install-am \
-+ install-binPROGRAMS install-configDATA install-data \
-+ install-data-am install-data-hook install-exec install-exec-am \
-+ install-info install-info-am install-initdSCRIPTS install-man \
-+ install-man1 install-strip installcheck installcheck-am \
-+ installdirs maintainer-clean maintainer-clean-generic \
-+ mostlyclean mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-+ uninstall-am uninstall-binPROGRAMS uninstall-configDATA \
-+ uninstall-info-am uninstall-initdSCRIPTS uninstall-man \
-+ uninstall-man1
-+
-+
-+clean-local:
-+ /bin/rm *.bb *.bbg *.da *.gcov || true
-+
-+install-data-hook:
-+ $(mkinstalldirs) $(DESTDIR)/$(localstatedir)/run/dbus
-+ $(mkinstalldirs) $(DESTDIR)/$(configdir)/system.d
-+ $(mkinstalldirs) $(DESTDIR)/$(datadir)/dbus-1/services
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/bus/activation.c dbus-0.61/bus/activation.c
---- dbus-0.61.orig/bus/activation.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/activation.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,1908 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* activation.c Activation of services
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ * Copyright (C) 2004 Imendio HB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "activation.h"
-+#include "desktop-file.h"
-+#include "services.h"
-+#include "test.h"
-+#include "utils.h"
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-hash.h>
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-shell.h>
-+#include <dbus/dbus-spawn.h>
-+#include <dbus/dbus-timeout.h>
-+#include <dirent.h>
-+#include <errno.h>
-+
-+#define DBUS_SERVICE_SECTION "D-BUS Service"
-+#define DBUS_SERVICE_NAME "Name"
-+#define DBUS_SERVICE_EXEC "Exec"
-+
-+struct BusActivation
-+{
-+ int refcount;
-+ DBusHashTable *entries;
-+ DBusHashTable *pending_activations;
-+ char *server_address;
-+ BusContext *context;
-+ int n_pending_activations; /**< This is in fact the number of BusPendingActivationEntry,
-+ * i.e. number of pending activation requests, not pending
-+ * activations per se
-+ */
-+ DBusHashTable *directories;
-+};
-+
-+typedef struct
-+{
-+ int refcount;
-+ char *dir_c;
-+ DBusHashTable *entries;
-+} BusServiceDirectory;
-+
-+typedef struct
-+{
-+ int refcount;
-+ char *name;
-+ char *exec;
-+ unsigned long mtime;
-+ BusServiceDirectory *s_dir;
-+ char *filename;
-+} BusActivationEntry;
-+
-+typedef struct BusPendingActivationEntry BusPendingActivationEntry;
-+
-+struct BusPendingActivationEntry
-+{
-+ DBusMessage *activation_message;
-+ DBusConnection *connection;
-+
-+ dbus_bool_t auto_activation;
-+};
-+
-+typedef struct
-+{
-+ int refcount;
-+ BusActivation *activation;
-+ char *service_name;
-+ char *exec;
-+ DBusList *entries;
-+ int n_entries;
-+ DBusBabysitter *babysitter;
-+ DBusTimeout *timeout;
-+ unsigned int timeout_added : 1;
-+} BusPendingActivation;
-+
-+#if 0
-+static BusServiceDirectory *
-+bus_service_directory_ref (BusServiceDirectory *dir)
-+{
-+ _dbus_assert (dir->refcount);
-+
-+ dir->refcount++;
-+
-+ return dir;
-+}
-+#endif
-+
-+static void
-+bus_service_directory_unref (BusServiceDirectory *dir)
-+{
-+ if (dir == NULL)
-+ return;
-+
-+ _dbus_assert (dir->refcount > 0);
-+ dir->refcount--;
-+
-+ if (dir->refcount > 0)
-+ return;
-+
-+ if (dir->entries)
-+ _dbus_hash_table_unref (dir->entries);
-+
-+ dbus_free (dir->dir_c);
-+ dbus_free (dir);
-+}
-+
-+static void
-+bus_pending_activation_entry_free (BusPendingActivationEntry *entry)
-+{
-+ if (entry->activation_message)
-+ dbus_message_unref (entry->activation_message);
-+
-+ if (entry->connection)
-+ dbus_connection_unref (entry->connection);
-+
-+ dbus_free (entry);
-+}
-+
-+static void
-+handle_timeout_callback (DBusTimeout *timeout,
-+ void *data)
-+{
-+ BusPendingActivation *pending_activation = data;
-+
-+ while (!dbus_timeout_handle (pending_activation->timeout))
-+ _dbus_wait_for_memory ();
-+}
-+
-+static BusPendingActivation *
-+bus_pending_activation_ref (BusPendingActivation *pending_activation)
-+{
-+ _dbus_assert (pending_activation->refcount > 0);
-+ pending_activation->refcount += 1;
-+
-+ return pending_activation;
-+}
-+
-+static void
-+bus_pending_activation_unref (BusPendingActivation *pending_activation)
-+{
-+ DBusList *link;
-+
-+ if (pending_activation == NULL) /* hash table requires this */
-+ return;
-+
-+ _dbus_assert (pending_activation->refcount > 0);
-+ pending_activation->refcount -= 1;
-+
-+ if (pending_activation->refcount > 0)
-+ return;
-+
-+ if (pending_activation->timeout_added)
-+ {
-+ _dbus_loop_remove_timeout (bus_context_get_loop (pending_activation->activation->context),
-+ pending_activation->timeout,
-+ handle_timeout_callback, pending_activation);
-+ pending_activation->timeout_added = FALSE;
-+ }
-+
-+ if (pending_activation->timeout)
-+ _dbus_timeout_unref (pending_activation->timeout);
-+
-+ if (pending_activation->babysitter)
-+ {
-+ if (!_dbus_babysitter_set_watch_functions (pending_activation->babysitter,
-+ NULL, NULL, NULL,
-+ pending_activation->babysitter,
-+ NULL))
-+ _dbus_assert_not_reached ("setting watch functions to NULL failed");
-+
-+ _dbus_babysitter_unref (pending_activation->babysitter);
-+ }
-+
-+ dbus_free (pending_activation->service_name);
-+ dbus_free (pending_activation->exec);
-+
-+ link = _dbus_list_get_first_link (&pending_activation->entries);
-+
-+ while (link != NULL)
-+ {
-+ BusPendingActivationEntry *entry = link->data;
-+
-+ bus_pending_activation_entry_free (entry);
-+
-+ link = _dbus_list_get_next_link (&pending_activation->entries, link);
-+ }
-+ _dbus_list_clear (&pending_activation->entries);
-+
-+ pending_activation->activation->n_pending_activations -=
-+ pending_activation->n_entries;
-+
-+ _dbus_assert (pending_activation->activation->n_pending_activations >= 0);
-+
-+ dbus_free (pending_activation);
-+}
-+
-+static BusActivationEntry *
-+bus_activation_entry_ref (BusActivationEntry *entry)
-+{
-+ _dbus_assert (entry->refcount > 0);
-+ entry->refcount++;
-+
-+ return entry;
-+}
-+
-+static void
-+bus_activation_entry_unref (BusActivationEntry *entry)
-+{
-+ if (entry == NULL) /* hash table requires this */
-+ return;
-+
-+ _dbus_assert (entry->refcount > 0);
-+ entry->refcount--;
-+
-+ if (entry->refcount > 0)
-+ return;
-+
-+ dbus_free (entry->name);
-+ dbus_free (entry->exec);
-+ dbus_free (entry->filename);
-+
-+ dbus_free (entry);
-+}
-+
-+static dbus_bool_t
-+update_desktop_file_entry (BusActivation *activation,
-+ BusServiceDirectory *s_dir,
-+ DBusString *filename,
-+ BusDesktopFile *desktop_file,
-+ DBusError *error)
-+{
-+ char *name, *exec;
-+ BusActivationEntry *entry;
-+ DBusStat stat_buf;
-+ DBusString file_path;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ name = NULL;
-+ exec = NULL;
-+ entry = NULL;
-+
-+ if (!_dbus_string_init (&file_path))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append (&file_path, s_dir->dir_c) ||
-+ !_dbus_concat_dir_and_file (&file_path, filename))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_stat (&file_path, &stat_buf, NULL))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Can't stat the service file\n");
-+ goto failed;
-+ }
-+
-+ if (!bus_desktop_file_get_string (desktop_file,
-+ DBUS_SERVICE_SECTION,
-+ DBUS_SERVICE_NAME,
-+ &name))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "No \""DBUS_SERVICE_NAME"\" key in .service file\n");
-+ goto failed;
-+ }
-+
-+ if (!bus_desktop_file_get_string (desktop_file,
-+ DBUS_SERVICE_SECTION,
-+ DBUS_SERVICE_EXEC,
-+ &exec))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "No \""DBUS_SERVICE_EXEC"\" key in .service file\n");
-+ goto failed;
-+ }
-+
-+ entry = _dbus_hash_table_lookup_string (s_dir->entries,
-+ _dbus_string_get_const_data (filename));
-+ if (entry == NULL) /* New file */
-+ {
-+ /* FIXME we need a better-defined algorithm for which service file to
-+ * pick than "whichever one is first in the directory listing"
-+ */
-+ if (_dbus_hash_table_lookup_string (activation->entries, name))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Service %s already exists in activation entry list\n", name);
-+ goto failed;
-+ }
-+
-+ entry = dbus_new0 (BusActivationEntry, 1);
-+ if (entry == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ entry->name = name;
-+ entry->exec = exec;
-+ entry->refcount = 1;
-+
-+ entry->s_dir = s_dir;
-+ entry->filename = _dbus_strdup (_dbus_string_get_const_data (filename));
-+ if (!entry->filename)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_hash_table_insert_string (activation->entries, entry->name, bus_activation_entry_ref (entry)))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_hash_table_insert_string (s_dir->entries, entry->filename, bus_activation_entry_ref (entry)))
-+ {
-+ /* Revert the insertion in the entries table */
-+ _dbus_hash_table_remove_string (activation->entries, entry->name);
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ _dbus_verbose ("Added \"%s\" to list of services\n", entry->name);
-+ }
-+ else /* Just update the entry */
-+ {
-+ bus_activation_entry_ref (entry);
-+ _dbus_hash_table_remove_string (activation->entries, entry->name);
-+
-+ if (_dbus_hash_table_lookup_string (activation->entries, name))
-+ {
-+ _dbus_verbose ("The new service name \"%s\" of service file \"%s\" already in cache, ignoring\n",
-+ name, _dbus_string_get_const_data (&file_path));
-+ goto failed;
-+ }
-+
-+ dbus_free (entry->name);
-+ dbus_free (entry->exec);
-+ entry->name = name;
-+ entry->exec = exec;
-+ if (!_dbus_hash_table_insert_string (activation->entries,
-+ entry->name, bus_activation_entry_ref(entry)))
-+ {
-+ BUS_SET_OOM (error);
-+ /* Also remove path to entries hash since we want this in sync with
-+ * the entries hash table */
-+ _dbus_hash_table_remove_string (entry->s_dir->entries,
-+ entry->filename);
-+ bus_activation_entry_unref (entry);
-+ return FALSE;
-+ }
-+ }
-+
-+ entry->mtime = stat_buf.mtime;
-+
-+ _dbus_string_free (&file_path);
-+ bus_activation_entry_unref (entry);
-+
-+ return TRUE;
-+
-+failed:
-+ dbus_free (name);
-+ dbus_free (exec);
-+ _dbus_string_free (&file_path);
-+
-+ if (entry)
-+ bus_activation_entry_unref (entry);
-+
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+check_service_file (BusActivation *activation,
-+ BusActivationEntry *entry,
-+ BusActivationEntry **updated_entry,
-+ DBusError *error)
-+{
-+ DBusStat stat_buf;
-+ dbus_bool_t retval;
-+ BusActivationEntry *tmp_entry;
-+ DBusString file_path;
-+ DBusString filename;
-+
-+ retval = TRUE;
-+ tmp_entry = entry;
-+
-+ _dbus_string_init_const (&filename, entry->filename);
-+
-+ if (!_dbus_string_init (&file_path))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append (&file_path, entry->s_dir->dir_c) ||
-+ !_dbus_concat_dir_and_file (&file_path, &filename))
-+ {
-+ BUS_SET_OOM (error);
-+ retval = FALSE;
-+ goto out;
-+ }
-+
-+ if (!_dbus_stat (&file_path, &stat_buf, NULL))
-+ {
-+ _dbus_verbose ("****** Can't stat file \"%s\", removing from cache\n",
-+ _dbus_string_get_const_data (&file_path));
-+
-+ _dbus_hash_table_remove_string (activation->entries, entry->name);
-+ _dbus_hash_table_remove_string (entry->s_dir->entries, entry->filename);
-+
-+ tmp_entry = NULL;
-+ retval = TRUE;
-+ goto out;
-+ }
-+ else
-+ {
-+ if (stat_buf.mtime > entry->mtime)
-+ {
-+ BusDesktopFile *desktop_file;
-+ DBusError tmp_error;
-+
-+ dbus_error_init (&tmp_error);
-+
-+ desktop_file = bus_desktop_file_load (&file_path, &tmp_error);
-+ if (desktop_file == NULL)
-+ {
-+ _dbus_verbose ("Could not load %s: %s\n",
-+ _dbus_string_get_const_data (&file_path),
-+ tmp_error.message);
-+ if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ retval = FALSE;
-+ goto out;
-+ }
-+ dbus_error_free (&tmp_error);
-+ retval = TRUE;
-+ goto out;
-+ }
-+
-+ if (!update_desktop_file_entry (activation, entry->s_dir, &filename, desktop_file, &tmp_error))
-+ {
-+ bus_desktop_file_free (desktop_file);
-+ if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ retval = FALSE;
-+ goto out;
-+ }
-+ dbus_error_free (&tmp_error);
-+ retval = TRUE;
-+ goto out;
-+ }
-+
-+ bus_desktop_file_free (desktop_file);
-+ retval = TRUE;
-+ }
-+ }
-+
-+out:
-+ _dbus_string_free (&file_path);
-+
-+ if (updated_entry != NULL)
-+ *updated_entry = tmp_entry;
-+ return retval;
-+}
-+
-+
-+/* warning: this doesn't fully "undo" itself on failure, i.e. doesn't strip
-+ * hash entries it already added.
-+ */
-+static dbus_bool_t
-+update_directory (BusActivation *activation,
-+ BusServiceDirectory *s_dir,
-+ DBusError *error)
-+{
-+ DBusDirIter *iter;
-+ DBusString dir, filename;
-+ BusDesktopFile *desktop_file;
-+ DBusError tmp_error;
-+ dbus_bool_t retval;
-+ BusActivationEntry *entry;
-+ DBusString full_path;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ iter = NULL;
-+ desktop_file = NULL;
-+
-+ _dbus_string_init_const (&dir, s_dir->dir_c);
-+
-+ if (!_dbus_string_init (&filename))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&full_path))
-+ {
-+ BUS_SET_OOM (error);
-+ _dbus_string_free (&filename);
-+ return FALSE;
-+ }
-+
-+ retval = FALSE;
-+
-+ /* from this point it's safe to "goto out" */
-+
-+ iter = _dbus_directory_open (&dir, error);
-+ if (iter == NULL)
-+ {
-+ _dbus_verbose ("Failed to open directory %s: %s\n",
-+ s_dir->dir_c,
-+ error ? error->message : "unknown");
-+ goto out;
-+ }
-+
-+ /* Now read the files */
-+ dbus_error_init (&tmp_error);
-+ while (_dbus_directory_get_next_file (iter, &filename, &tmp_error))
-+ {
-+ _dbus_assert (!dbus_error_is_set (&tmp_error));
-+
-+ _dbus_string_set_length (&full_path, 0);
-+
-+ if (!_dbus_string_ends_with_c_str (&filename, ".service"))
-+ {
-+ _dbus_verbose ("Skipping non-.service file %s\n",
-+ _dbus_string_get_const_data (&filename));
-+ continue;
-+ }
-+
-+ entry = _dbus_hash_table_lookup_string (s_dir->entries, _dbus_string_get_const_data (&filename));
-+ if (entry) /* Already has this service file in the cache */
-+ {
-+ if (!check_service_file (activation, entry, NULL, error))
-+ goto out;
-+
-+ continue;
-+ }
-+
-+ if (!_dbus_string_append (&full_path, s_dir->dir_c) ||
-+ !_dbus_concat_dir_and_file (&full_path, &filename))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ /* New file */
-+ desktop_file = bus_desktop_file_load (&full_path, &tmp_error);
-+ if (desktop_file == NULL)
-+ {
-+ _dbus_verbose ("Could not load %s: %s\n",
-+ _dbus_string_get_const_data (&full_path),
-+ tmp_error.message);
-+
-+ if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ goto out;
-+ }
-+
-+ dbus_error_free (&tmp_error);
-+ continue;
-+ }
-+
-+ if (!update_desktop_file_entry (activation, s_dir, &filename, desktop_file, &tmp_error))
-+ {
-+ bus_desktop_file_free (desktop_file);
-+ desktop_file = NULL;
-+
-+ _dbus_verbose ("Could not add %s to activation entry list: %s\n",
-+ _dbus_string_get_const_data (&full_path), tmp_error.message);
-+
-+ if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ goto out;
-+ }
-+
-+ dbus_error_free (&tmp_error);
-+ continue;
-+ }
-+ else
-+ {
-+ bus_desktop_file_free (desktop_file);
-+ desktop_file = NULL;
-+ continue;
-+ }
-+ }
-+
-+ if (dbus_error_is_set (&tmp_error))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (!retval)
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ else
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (iter != NULL)
-+ _dbus_directory_close (iter);
-+ if (desktop_file)
-+ bus_desktop_file_free (desktop_file);
-+ _dbus_string_free (&filename);
-+ _dbus_string_free (&full_path);
-+
-+ return retval;
-+}
-+
-+BusActivation*
-+bus_activation_new (BusContext *context,
-+ const DBusString *address,
-+ DBusList **directories,
-+ DBusError *error)
-+{
-+ BusActivation *activation;
-+ DBusList *link;
-+ char *dir;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ activation = dbus_new0 (BusActivation, 1);
-+ if (activation == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ activation->refcount = 1;
-+ activation->context = context;
-+ activation->n_pending_activations = 0;
-+
-+ if (!_dbus_string_copy_data (address, &activation->server_address))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ activation->entries = _dbus_hash_table_new (DBUS_HASH_STRING, NULL,
-+ (DBusFreeFunction)bus_activation_entry_unref);
-+ if (activation->entries == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ activation->pending_activations = _dbus_hash_table_new (DBUS_HASH_STRING, NULL,
-+ (DBusFreeFunction)bus_pending_activation_unref);
-+
-+ if (activation->pending_activations == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ activation->directories = _dbus_hash_table_new (DBUS_HASH_STRING, NULL,
-+ (DBusFreeFunction)bus_service_directory_unref);
-+
-+ if (activation->directories == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ /* Load service files */
-+ link = _dbus_list_get_first_link (directories);
-+ while (link != NULL)
-+ {
-+ BusServiceDirectory *s_dir;
-+
-+ dir = _dbus_strdup ((const char *) link->data);
-+ if (!dir)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ s_dir = dbus_new0 (BusServiceDirectory, 1);
-+ if (!s_dir)
-+ {
-+ dbus_free (dir);
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ s_dir->refcount = 1;
-+ s_dir->dir_c = dir;
-+
-+ s_dir->entries = _dbus_hash_table_new (DBUS_HASH_STRING, NULL,
-+ (DBusFreeFunction)bus_activation_entry_unref);
-+
-+ if (!s_dir->entries)
-+ {
-+ bus_service_directory_unref (s_dir);
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_hash_table_insert_string (activation->directories, s_dir->dir_c, s_dir))
-+ {
-+ bus_service_directory_unref (s_dir);
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!update_directory (activation, s_dir, error))
-+ goto failed;
-+
-+ link = _dbus_list_get_next_link (directories, link);
-+ }
-+
-+ return activation;
-+
-+ failed:
-+ bus_activation_unref (activation);
-+ return NULL;
-+}
-+
-+BusActivation *
-+bus_activation_ref (BusActivation *activation)
-+{
-+ _dbus_assert (activation->refcount > 0);
-+
-+ activation->refcount += 1;
-+
-+ return activation;
-+}
-+
-+void
-+bus_activation_unref (BusActivation *activation)
-+{
-+ _dbus_assert (activation->refcount > 0);
-+
-+ activation->refcount -= 1;
-+
-+ if (activation->refcount > 0)
-+ return;
-+
-+ dbus_free (activation->server_address);
-+ if (activation->entries)
-+ _dbus_hash_table_unref (activation->entries);
-+ if (activation->pending_activations)
-+ _dbus_hash_table_unref (activation->pending_activations);
-+ if (activation->directories)
-+ _dbus_hash_table_unref (activation->directories);
-+
-+ dbus_free (activation);
-+}
-+
-+static void
-+child_setup (void *data)
-+{
-+ BusActivation *activation = data;
-+ const char *type;
-+
-+ /* If no memory, we simply have the child exit, so it won't try
-+ * to connect to the wrong thing.
-+ */
-+ if (!_dbus_setenv ("DBUS_STARTER_ADDRESS", activation->server_address))
-+ _dbus_exit (1);
-+
-+ type = bus_context_get_type (activation->context);
-+ if (type != NULL)
-+ {
-+ if (!_dbus_setenv ("DBUS_STARTER_BUS_TYPE", type))
-+ _dbus_exit (1);
-+
-+ if (strcmp (type, "session") == 0)
-+ {
-+ if (!_dbus_setenv ("DBUS_SESSION_BUS_ADDRESS",
-+ activation->server_address))
-+ _dbus_exit (1);
-+ }
-+ else if (strcmp (type, "system") == 0)
-+ {
-+ if (!_dbus_setenv ("DBUS_SYSTEM_BUS_ADDRESS",
-+ activation->server_address))
-+ _dbus_exit (1);
-+ }
-+ }
-+}
-+
-+typedef struct
-+{
-+ BusPendingActivation *pending_activation;
-+ DBusPreallocatedHash *hash_entry;
-+} RestorePendingData;
-+
-+static void
-+restore_pending (void *data)
-+{
-+ RestorePendingData *d = data;
-+
-+ _dbus_assert (d->pending_activation != NULL);
-+ _dbus_assert (d->hash_entry != NULL);
-+
-+ _dbus_verbose ("Restoring pending activation for service %s, has timeout = %d\n",
-+ d->pending_activation->service_name,
-+ d->pending_activation->timeout_added);
-+
-+ _dbus_hash_table_insert_string_preallocated (d->pending_activation->activation->pending_activations,
-+ d->hash_entry,
-+ d->pending_activation->service_name, d->pending_activation);
-+
-+ bus_pending_activation_ref (d->pending_activation);
-+
-+ d->hash_entry = NULL;
-+}
-+
-+static void
-+free_pending_restore_data (void *data)
-+{
-+ RestorePendingData *d = data;
-+
-+ if (d->hash_entry)
-+ _dbus_hash_table_free_preallocated_entry (d->pending_activation->activation->pending_activations,
-+ d->hash_entry);
-+
-+ bus_pending_activation_unref (d->pending_activation);
-+
-+ dbus_free (d);
-+}
-+
-+static dbus_bool_t
-+add_restore_pending_to_transaction (BusTransaction *transaction,
-+ BusPendingActivation *pending_activation)
-+{
-+ RestorePendingData *d;
-+
-+ d = dbus_new (RestorePendingData, 1);
-+ if (d == NULL)
-+ return FALSE;
-+
-+ d->pending_activation = pending_activation;
-+ d->hash_entry = _dbus_hash_table_preallocate_entry (d->pending_activation->activation->pending_activations);
-+
-+ bus_pending_activation_ref (d->pending_activation);
-+
-+ if (d->hash_entry == NULL ||
-+ !bus_transaction_add_cancel_hook (transaction, restore_pending, d,
-+ free_pending_restore_data))
-+ {
-+ free_pending_restore_data (d);
-+ return FALSE;
-+ }
-+
-+ _dbus_verbose ("Saved pending activation to be restored if the transaction fails\n");
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_activation_service_created (BusActivation *activation,
-+ const char *service_name,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ BusPendingActivation *pending_activation;
-+ DBusMessage *message;
-+ DBusList *link;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* Check if it's a pending activation */
-+ pending_activation = _dbus_hash_table_lookup_string (activation->pending_activations, service_name);
-+
-+ if (!pending_activation)
-+ return TRUE;
-+
-+ link = _dbus_list_get_first_link (&pending_activation->entries);
-+ while (link != NULL)
-+ {
-+ BusPendingActivationEntry *entry = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&pending_activation->entries, link);
-+
-+ if (dbus_connection_get_is_connected (entry->connection))
-+ {
-+ /* Only send activation replies to regular activation requests. */
-+ if (!entry->auto_activation)
-+ {
-+ dbus_uint32_t result;
-+
-+ message = dbus_message_new_method_return (entry->activation_message);
-+ if (!message)
-+ {
-+ BUS_SET_OOM (error);
-+ goto error;
-+ }
-+
-+ result = DBUS_START_REPLY_SUCCESS;
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_UINT32, &result,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ BUS_SET_OOM (error);
-+ goto error;
-+ }
-+
-+ if (!bus_transaction_send_from_driver (transaction, entry->connection, message))
-+ {
-+ dbus_message_unref (message);
-+ BUS_SET_OOM (error);
-+ goto error;
-+ }
-+
-+ dbus_message_unref (message);
-+ }
-+ }
-+
-+ link = next;
-+ }
-+
-+ return TRUE;
-+
-+ error:
-+ return FALSE;
-+}
-+
-+dbus_bool_t
-+bus_activation_send_pending_auto_activation_messages (BusActivation *activation,
-+ BusService *service,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ BusPendingActivation *pending_activation;
-+ DBusList *link;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* Check if it's a pending activation */
-+ pending_activation = _dbus_hash_table_lookup_string (activation->pending_activations,
-+ bus_service_get_name (service));
-+
-+ if (!pending_activation)
-+ return TRUE;
-+
-+ link = _dbus_list_get_first_link (&pending_activation->entries);
-+ while (link != NULL)
-+ {
-+ BusPendingActivationEntry *entry = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&pending_activation->entries, link);
-+
-+ if (entry->auto_activation && dbus_connection_get_is_connected (entry->connection))
-+ {
-+ DBusConnection *addressed_recipient;
-+
-+ addressed_recipient = bus_service_get_primary_owners_connection (service);
-+
-+ /* Check the security policy, which has the side-effect of adding an
-+ * expected pending reply.
-+ */
-+ if (!bus_context_check_security_policy (activation->context, transaction,
-+ entry->connection,
-+ addressed_recipient,
-+ addressed_recipient,
-+ entry->activation_message, error))
-+ goto error;
-+
-+ if (!bus_transaction_send (transaction, addressed_recipient, entry->activation_message))
-+ {
-+ BUS_SET_OOM (error);
-+ goto error;
-+ }
-+ }
-+
-+ link = next;
-+ }
-+
-+ if (!add_restore_pending_to_transaction (transaction, pending_activation))
-+ {
-+ _dbus_verbose ("Could not add cancel hook to transaction to revert removing pending activation\n");
-+ BUS_SET_OOM (error);
-+ goto error;
-+ }
-+
-+ _dbus_hash_table_remove_string (activation->pending_activations, bus_service_get_name (service));
-+
-+ return TRUE;
-+
-+ error:
-+ return FALSE;
-+}
-+
-+/**
-+ * FIXME @todo the error messages here would ideally be preallocated
-+ * so we don't need to allocate memory to send them.
-+ * Using the usual tactic, prealloc an OOM message, then
-+ * if we can't alloc the real error send the OOM error instead.
-+ */
-+static dbus_bool_t
-+try_send_activation_failure (BusPendingActivation *pending_activation,
-+ const DBusError *how)
-+{
-+ BusActivation *activation;
-+ DBusList *link;
-+ BusTransaction *transaction;
-+
-+ activation = pending_activation->activation;
-+
-+ transaction = bus_transaction_new (activation->context);
-+ if (transaction == NULL)
-+ return FALSE;
-+
-+ link = _dbus_list_get_first_link (&pending_activation->entries);
-+ while (link != NULL)
-+ {
-+ BusPendingActivationEntry *entry = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&pending_activation->entries, link);
-+
-+ if (dbus_connection_get_is_connected (entry->connection))
-+ {
-+ if (!bus_transaction_send_error_reply (transaction,
-+ entry->connection,
-+ how,
-+ entry->activation_message))
-+ goto error;
-+ }
-+
-+ link = next;
-+ }
-+
-+ bus_transaction_execute_and_free (transaction);
-+
-+ return TRUE;
-+
-+ error:
-+ if (transaction)
-+ bus_transaction_cancel_and_free (transaction);
-+ return FALSE;
-+}
-+
-+/**
-+ * Free the pending activation and send an error message to all the
-+ * connections that were waiting for it.
-+ */
-+static void
-+pending_activation_failed (BusPendingActivation *pending_activation,
-+ const DBusError *how)
-+{
-+ /* FIXME use preallocated OOM messages instead of bus_wait_for_memory() */
-+ while (!try_send_activation_failure (pending_activation, how))
-+ _dbus_wait_for_memory ();
-+
-+ /* Destroy this pending activation */
-+ _dbus_hash_table_remove_string (pending_activation->activation->pending_activations,
-+ pending_activation->service_name);
-+}
-+
-+static dbus_bool_t
-+babysitter_watch_callback (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data)
-+{
-+ BusPendingActivation *pending_activation = data;
-+ dbus_bool_t retval;
-+ DBusBabysitter *babysitter;
-+
-+ babysitter = pending_activation->babysitter;
-+
-+ _dbus_babysitter_ref (babysitter);
-+
-+ retval = dbus_watch_handle (watch, condition);
-+
-+ /* FIXME this is broken in the same way that
-+ * connection watches used to be; there should be
-+ * a separate callback for status change, instead
-+ * of doing "if we handled a watch status might
-+ * have changed"
-+ *
-+ * Fixing this lets us move dbus_watch_handle
-+ * calls into dbus-mainloop.c
-+ */
-+
-+ if (_dbus_babysitter_get_child_exited (babysitter))
-+ {
-+ DBusError error;
-+ DBusHashIter iter;
-+
-+ dbus_error_init (&error);
-+ _dbus_babysitter_set_child_exit_error (babysitter, &error);
-+
-+ /* Destroy all pending activations with the same exec */
-+ _dbus_hash_iter_init (pending_activation->activation->pending_activations,
-+ &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ BusPendingActivation *p = _dbus_hash_iter_get_value (&iter);
-+
-+ if (p != pending_activation && strcmp (p->exec, pending_activation->exec) == 0)
-+ pending_activation_failed (p, &error);
-+ }
-+
-+ /* Destroys the pending activation */
-+ pending_activation_failed (pending_activation, &error);
-+
-+ dbus_error_free (&error);
-+ }
-+
-+ _dbus_babysitter_unref (babysitter);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+add_babysitter_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ BusPendingActivation *pending_activation = data;
-+
-+ return _dbus_loop_add_watch (bus_context_get_loop (pending_activation->activation->context),
-+ watch, babysitter_watch_callback, pending_activation,
-+ NULL);
-+}
-+
-+static void
-+remove_babysitter_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ BusPendingActivation *pending_activation = data;
-+
-+ _dbus_loop_remove_watch (bus_context_get_loop (pending_activation->activation->context),
-+ watch, babysitter_watch_callback, pending_activation);
-+}
-+
-+static dbus_bool_t
-+pending_activation_timed_out (void *data)
-+{
-+ BusPendingActivation *pending_activation = data;
-+ DBusError error;
-+
-+ /* Kill the spawned process, since it sucks
-+ * (not sure this is what we want to do, but
-+ * may as well try it for now)
-+ */
-+ if (pending_activation->babysitter)
-+ _dbus_babysitter_kill_child (pending_activation->babysitter);
-+
-+ dbus_error_init (&error);
-+
-+ dbus_set_error (&error, DBUS_ERROR_TIMED_OUT,
-+ "Activation of %s timed out",
-+ pending_activation->service_name);
-+
-+ pending_activation_failed (pending_activation, &error);
-+
-+ dbus_error_free (&error);
-+
-+ return TRUE;
-+}
-+
-+static void
-+cancel_pending (void *data)
-+{
-+ BusPendingActivation *pending_activation = data;
-+
-+ _dbus_verbose ("Canceling pending activation of %s\n",
-+ pending_activation->service_name);
-+
-+ if (pending_activation->babysitter)
-+ _dbus_babysitter_kill_child (pending_activation->babysitter);
-+
-+ _dbus_hash_table_remove_string (pending_activation->activation->pending_activations,
-+ pending_activation->service_name);
-+}
-+
-+static void
-+free_pending_cancel_data (void *data)
-+{
-+ BusPendingActivation *pending_activation = data;
-+
-+ bus_pending_activation_unref (pending_activation);
-+}
-+
-+static dbus_bool_t
-+add_cancel_pending_to_transaction (BusTransaction *transaction,
-+ BusPendingActivation *pending_activation)
-+{
-+ if (!bus_transaction_add_cancel_hook (transaction, cancel_pending,
-+ pending_activation,
-+ free_pending_cancel_data))
-+ return FALSE;
-+
-+ bus_pending_activation_ref (pending_activation);
-+
-+ _dbus_verbose ("Saved pending activation to be canceled if the transaction fails\n");
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+update_service_cache (BusActivation *activation, DBusError *error)
-+{
-+ DBusHashIter iter;
-+
-+ _dbus_hash_iter_init (activation->directories, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ DBusError tmp_error;
-+ BusServiceDirectory *s_dir;
-+
-+ s_dir = _dbus_hash_iter_get_value (&iter);
-+
-+ dbus_error_init (&tmp_error);
-+ if (!update_directory (activation, s_dir, &tmp_error))
-+ {
-+ if (dbus_error_has_name (&tmp_error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ return FALSE;
-+ }
-+
-+ dbus_error_free (&tmp_error);
-+ continue;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+static BusActivationEntry *
-+activation_find_entry (BusActivation *activation,
-+ const char *service_name,
-+ DBusError *error)
-+{
-+ BusActivationEntry *entry;
-+
-+ entry = _dbus_hash_table_lookup_string (activation->entries, service_name);
-+ if (!entry)
-+ {
-+ if (!update_service_cache (activation, error))
-+ return NULL;
-+
-+ entry = _dbus_hash_table_lookup_string (activation->entries,
-+ service_name);
-+ }
-+ else
-+ {
-+ BusActivationEntry *updated_entry;
-+
-+ if (!check_service_file (activation, entry, &updated_entry, error))
-+ return NULL;
-+
-+ entry = updated_entry;
-+ }
-+
-+ if (!entry)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_SERVICE_UNKNOWN,
-+ "The name %s was not provided by any .service files",
-+ service_name);
-+ return NULL;
-+ }
-+
-+ return entry;
-+}
-+
-+dbus_bool_t
-+bus_activation_activate_service (BusActivation *activation,
-+ DBusConnection *connection,
-+ BusTransaction *transaction,
-+ dbus_bool_t auto_activation,
-+ DBusMessage *activation_message,
-+ const char *service_name,
-+ DBusError *error)
-+{
-+ BusActivationEntry *entry;
-+ BusPendingActivation *pending_activation;
-+ BusPendingActivationEntry *pending_activation_entry;
-+ DBusMessage *message;
-+ DBusString service_str;
-+ char **argv;
-+ int argc;
-+ dbus_bool_t retval;
-+ DBusHashIter iter;
-+ dbus_bool_t activated;
-+
-+ activated = TRUE;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (activation->n_pending_activations >=
-+ bus_context_get_max_pending_activations (activation->context))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "The maximum number of pending activations has been reached, activation of %s failed",
-+ service_name);
-+ return FALSE;
-+ }
-+
-+ entry = activation_find_entry (activation, service_name, error);
-+ if (!entry)
-+ return FALSE;
-+
-+ /* Bypass the registry lookup if we're auto-activating, bus_dispatch would not
-+ * call us if the service is already active.
-+ */
-+ if (!auto_activation)
-+ {
-+ /* Check if the service is active */
-+ _dbus_string_init_const (&service_str, service_name);
-+ if (bus_registry_lookup (bus_context_get_registry (activation->context), &service_str) != NULL)
-+ {
-+ dbus_uint32_t result;
-+
-+ _dbus_verbose ("Service \"%s\" is already active\n", service_name);
-+
-+ message = dbus_message_new_method_return (activation_message);
-+
-+ if (!message)
-+ {
-+ _dbus_verbose ("No memory to create reply to activate message\n");
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ result = DBUS_START_REPLY_ALREADY_RUNNING;
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_UINT32, &result,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _dbus_verbose ("No memory to set args of reply to activate message\n");
-+ BUS_SET_OOM (error);
-+ dbus_message_unref (message);
-+ return FALSE;
-+ }
-+
-+ retval = bus_transaction_send_from_driver (transaction, connection, message);
-+ dbus_message_unref (message);
-+ if (!retval)
-+ {
-+ _dbus_verbose ("Failed to send reply\n");
-+ BUS_SET_OOM (error);
-+ }
-+
-+ return retval;
-+ }
-+ }
-+
-+ pending_activation_entry = dbus_new0 (BusPendingActivationEntry, 1);
-+ if (!pending_activation_entry)
-+ {
-+ _dbus_verbose ("Failed to create pending activation entry\n");
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ pending_activation_entry->auto_activation = auto_activation;
-+
-+ pending_activation_entry->activation_message = activation_message;
-+ dbus_message_ref (activation_message);
-+ pending_activation_entry->connection = connection;
-+ dbus_connection_ref (connection);
-+
-+ /* Check if the service is being activated */
-+ pending_activation = _dbus_hash_table_lookup_string (activation->pending_activations, service_name);
-+ if (pending_activation)
-+ {
-+ if (!_dbus_list_append (&pending_activation->entries, pending_activation_entry))
-+ {
-+ _dbus_verbose ("Failed to append a new entry to pending activation\n");
-+
-+ BUS_SET_OOM (error);
-+ bus_pending_activation_entry_free (pending_activation_entry);
-+ return FALSE;
-+ }
-+
-+ pending_activation->n_entries += 1;
-+ pending_activation->activation->n_pending_activations += 1;
-+ }
-+ else
-+ {
-+ pending_activation = dbus_new0 (BusPendingActivation, 1);
-+ if (!pending_activation)
-+ {
-+ _dbus_verbose ("Failed to create pending activation\n");
-+
-+ BUS_SET_OOM (error);
-+ bus_pending_activation_entry_free (pending_activation_entry);
-+ return FALSE;
-+ }
-+
-+ pending_activation->activation = activation;
-+ pending_activation->refcount = 1;
-+
-+ pending_activation->service_name = _dbus_strdup (service_name);
-+ if (!pending_activation->service_name)
-+ {
-+ _dbus_verbose ("Failed to copy service name for pending activation\n");
-+
-+ BUS_SET_OOM (error);
-+ bus_pending_activation_unref (pending_activation);
-+ bus_pending_activation_entry_free (pending_activation_entry);
-+ return FALSE;
-+ }
-+
-+ pending_activation->exec = _dbus_strdup (entry->exec);
-+ if (!pending_activation->exec)
-+ {
-+ _dbus_verbose ("Failed to copy service exec for pending activation\n");
-+ BUS_SET_OOM (error);
-+ bus_pending_activation_unref (pending_activation);
-+ bus_pending_activation_entry_free (pending_activation_entry);
-+ return FALSE;
-+ }
-+
-+ pending_activation->timeout =
-+ _dbus_timeout_new (bus_context_get_activation_timeout (activation->context),
-+ pending_activation_timed_out,
-+ pending_activation,
-+ NULL);
-+ if (!pending_activation->timeout)
-+ {
-+ _dbus_verbose ("Failed to create timeout for pending activation\n");
-+
-+ BUS_SET_OOM (error);
-+ bus_pending_activation_unref (pending_activation);
-+ bus_pending_activation_entry_free (pending_activation_entry);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_loop_add_timeout (bus_context_get_loop (activation->context),
-+ pending_activation->timeout,
-+ handle_timeout_callback,
-+ pending_activation,
-+ NULL))
-+ {
-+ _dbus_verbose ("Failed to add timeout for pending activation\n");
-+
-+ BUS_SET_OOM (error);
-+ bus_pending_activation_unref (pending_activation);
-+ bus_pending_activation_entry_free (pending_activation_entry);
-+ return FALSE;
-+ }
-+
-+ pending_activation->timeout_added = TRUE;
-+
-+ if (!_dbus_list_append (&pending_activation->entries, pending_activation_entry))
-+ {
-+ _dbus_verbose ("Failed to add entry to just-created pending activation\n");
-+
-+ BUS_SET_OOM (error);
-+ bus_pending_activation_unref (pending_activation);
-+ bus_pending_activation_entry_free (pending_activation_entry);
-+ return FALSE;
-+ }
-+
-+ pending_activation->n_entries += 1;
-+ pending_activation->activation->n_pending_activations += 1;
-+
-+ activated = FALSE;
-+ _dbus_hash_iter_init (activation->pending_activations, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ BusPendingActivation *p = _dbus_hash_iter_get_value (&iter);
-+
-+ if (strcmp (p->exec, entry->exec) == 0)
-+ {
-+ activated = TRUE;
-+ break;
-+ }
-+ }
-+
-+ if (!_dbus_hash_table_insert_string (activation->pending_activations,
-+ pending_activation->service_name,
-+ pending_activation))
-+ {
-+ _dbus_verbose ("Failed to put pending activation in hash table\n");
-+
-+ BUS_SET_OOM (error);
-+ bus_pending_activation_unref (pending_activation);
-+ return FALSE;
-+ }
-+ }
-+
-+ if (!add_cancel_pending_to_transaction (transaction, pending_activation))
-+ {
-+ _dbus_verbose ("Failed to add pending activation cancel hook to transaction\n");
-+ BUS_SET_OOM (error);
-+ _dbus_hash_table_remove_string (activation->pending_activations,
-+ pending_activation->service_name);
-+
-+ return FALSE;
-+ }
-+
-+ if (activated)
-+ return TRUE;
-+
-+ /* Now try to spawn the process */
-+ if (!_dbus_shell_parse_argv (entry->exec, &argc, &argv, error))
-+ {
-+ _dbus_verbose ("Failed to parse command line: %s\n", entry->exec);
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+
-+ _dbus_hash_table_remove_string (activation->pending_activations,
-+ pending_activation->service_name);
-+
-+ return FALSE;
-+ }
-+
-+ _dbus_verbose ("Spawning %s ...\n", argv[0]);
-+ if (!_dbus_spawn_async_with_babysitter (&pending_activation->babysitter, argv,
-+ child_setup, activation,
-+ error))
-+ {
-+ _dbus_verbose ("Failed to spawn child\n");
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_free_string_array (argv);
-+
-+ return FALSE;
-+ }
-+
-+ dbus_free_string_array (argv);
-+
-+ _dbus_assert (pending_activation->babysitter != NULL);
-+
-+ if (!_dbus_babysitter_set_watch_functions (pending_activation->babysitter,
-+ add_babysitter_watch,
-+ remove_babysitter_watch,
-+ NULL,
-+ pending_activation,
-+ NULL))
-+ {
-+ BUS_SET_OOM (error);
-+ _dbus_verbose ("Failed to set babysitter watch functions\n");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+#include <stdio.h>
-+
-+#define SERVICE_NAME_1 "MyService1"
-+#define SERVICE_NAME_2 "MyService2"
-+#define SERVICE_NAME_3 "MyService3"
-+
-+#define SERVICE_FILE_1 "service-1.service"
-+#define SERVICE_FILE_2 "service-2.service"
-+#define SERVICE_FILE_3 "service-3.service"
-+
-+static dbus_bool_t
-+test_create_service_file (DBusString *dir,
-+ const char *filename,
-+ const char *name,
-+ const char *exec)
-+{
-+ DBusString file_name, full_path;
-+ FILE *file;
-+ dbus_bool_t ret_val;
-+
-+ ret_val = TRUE;
-+ _dbus_string_init_const (&file_name, filename);
-+
-+ if (!_dbus_string_init (&full_path))
-+ return FALSE;
-+
-+ if (!_dbus_string_append (&full_path, _dbus_string_get_const_data (dir)) ||
-+ !_dbus_concat_dir_and_file (&full_path, &file_name))
-+ {
-+ ret_val = FALSE;
-+ goto out;
-+ }
-+
-+ file = fopen (_dbus_string_get_const_data (&full_path), "w");
-+ if (!file)
-+ {
-+ ret_val = FALSE;
-+ goto out;
-+ }
-+
-+ fprintf (file, "[D-BUS Service]\nName=%s\nExec=%s\n", name, exec);
-+ fclose (file);
-+
-+out:
-+ _dbus_string_free (&full_path);
-+ return ret_val;
-+}
-+
-+static dbus_bool_t
-+test_remove_service_file (DBusString *dir, const char *filename)
-+{
-+ DBusString file_name, full_path;
-+ dbus_bool_t ret_val;
-+
-+ ret_val = TRUE;
-+
-+ _dbus_string_init_const (&file_name, filename);
-+
-+ if (!_dbus_string_init (&full_path))
-+ return FALSE;
-+
-+ if (!_dbus_string_append (&full_path, _dbus_string_get_const_data (dir)) ||
-+ !_dbus_concat_dir_and_file (&full_path, &file_name))
-+ {
-+ ret_val = FALSE;
-+ goto out;
-+ }
-+
-+ if (!_dbus_delete_file (&full_path, NULL))
-+ {
-+ ret_val = FALSE;
-+ goto out;
-+ }
-+
-+out:
-+ _dbus_string_free (&full_path);
-+ return ret_val;
-+}
-+
-+static dbus_bool_t
-+test_remove_directory (DBusString *dir)
-+{
-+ DBusDirIter *iter;
-+ DBusString filename, full_path;
-+ dbus_bool_t ret_val;
-+
-+ ret_val = TRUE;
-+
-+ if (!_dbus_string_init (&filename))
-+ return FALSE;
-+
-+ if (!_dbus_string_init (&full_path))
-+ {
-+ _dbus_string_free (&filename);
-+ return FALSE;
-+ }
-+
-+ iter = _dbus_directory_open (dir, NULL);
-+ if (iter == NULL)
-+ {
-+ ret_val = FALSE;
-+ goto out;
-+ }
-+
-+ while (_dbus_directory_get_next_file (iter, &filename, NULL))
-+ {
-+ if (!test_remove_service_file (dir, _dbus_string_get_const_data (&filename)))
-+ {
-+ ret_val = FALSE;
-+ goto out;
-+ }
-+ }
-+ _dbus_directory_close (iter);
-+
-+ if (!_dbus_delete_directory (dir, NULL))
-+ {
-+ ret_val = FALSE;
-+ goto out;
-+ }
-+
-+out:
-+ _dbus_string_free (&filename);
-+ _dbus_string_free (&full_path);
-+
-+ return ret_val;
-+}
-+
-+static dbus_bool_t
-+init_service_reload_test (DBusString *dir)
-+{
-+ DBusStat stat_buf;
-+
-+ if (!_dbus_stat (dir, &stat_buf, NULL))
-+ {
-+ if (!_dbus_create_directory (dir, NULL))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (!test_remove_directory (dir))
-+ return FALSE;
-+
-+ if (!_dbus_create_directory (dir, NULL))
-+ return FALSE;
-+ }
-+
-+ /* Create one initial file */
-+ if (!test_create_service_file (dir, SERVICE_FILE_1, SERVICE_NAME_1, "exec-1"))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+cleanup_service_reload_test (DBusString *dir)
-+{
-+ if (!test_remove_directory (dir))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+typedef struct
-+{
-+ BusActivation *activation;
-+ const char *service_name;
-+ dbus_bool_t expecting_find;
-+} CheckData;
-+
-+static dbus_bool_t
-+check_func (void *data)
-+{
-+ CheckData *d;
-+ BusActivationEntry *entry;
-+ DBusError error;
-+ dbus_bool_t ret_val;
-+
-+ ret_val = TRUE;
-+ d = data;
-+
-+ dbus_error_init (&error);
-+
-+ entry = activation_find_entry (d->activation, d->service_name, &error);
-+ if (entry == NULL)
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ ret_val = TRUE;
-+ }
-+ else
-+ {
-+ if (d->expecting_find)
-+ ret_val = FALSE;
-+ }
-+
-+ dbus_error_free (&error);
-+ }
-+ else
-+ {
-+ if (!d->expecting_find)
-+ ret_val = FALSE;
-+ }
-+
-+ return ret_val;
-+}
-+
-+static dbus_bool_t
-+do_test (const char *description, dbus_bool_t oom_test, CheckData *data)
-+{
-+ dbus_bool_t err;
-+
-+ if (oom_test)
-+ err = !_dbus_test_oom_handling (description, check_func, data);
-+ else
-+ err = !check_func (data);
-+
-+ if (err)
-+ _dbus_assert_not_reached ("Test failed");
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+do_service_reload_test (DBusString *dir, dbus_bool_t oom_test)
-+{
-+ BusActivation *activation;
-+ DBusString address;
-+ DBusList *directories;
-+ CheckData d;
-+
-+ directories = NULL;
-+ _dbus_string_init_const (&address, "");
-+
-+ if (!_dbus_list_append (&directories, _dbus_string_get_data (dir)))
-+ return FALSE;
-+
-+ activation = bus_activation_new (NULL, &address, &directories, NULL);
-+ if (!activation)
-+ return FALSE;
-+
-+ d.activation = activation;
-+
-+ /* Check for existing service file */
-+ d.expecting_find = TRUE;
-+ d.service_name = SERVICE_NAME_1;
-+
-+ if (!do_test ("Existing service file", oom_test, &d))
-+ return FALSE;
-+
-+ /* Check for non-existing service file */
-+ d.expecting_find = FALSE;
-+ d.service_name = SERVICE_NAME_3;
-+
-+ if (!do_test ("Nonexisting service file", oom_test, &d))
-+ return FALSE;
-+
-+ /* Check for added service file */
-+ if (!test_create_service_file (dir, SERVICE_FILE_2, SERVICE_NAME_2, "exec-2"))
-+ return FALSE;
-+
-+ d.expecting_find = TRUE;
-+ d.service_name = SERVICE_NAME_2;
-+
-+ if (!do_test ("Added service file", oom_test, &d))
-+ return FALSE;
-+
-+ /* Check for removed service file */
-+ if (!test_remove_service_file (dir, SERVICE_FILE_2))
-+ return FALSE;
-+
-+ d.expecting_find = FALSE;
-+ d.service_name = SERVICE_FILE_2;
-+
-+ if (!do_test ("Removed service file", oom_test, &d))
-+ return FALSE;
-+
-+ /* Check for updated service file */
-+
-+ _dbus_sleep_milliseconds (1000); /* Sleep a second to make sure the mtime is updated */
-+
-+ if (!test_create_service_file (dir, SERVICE_FILE_1, SERVICE_NAME_3, "exec-3"))
-+ return FALSE;
-+
-+ d.expecting_find = TRUE;
-+ d.service_name = SERVICE_NAME_3;
-+
-+ if (!do_test ("Updated service file, part 1", oom_test, &d))
-+ return FALSE;
-+
-+ d.expecting_find = FALSE;
-+ d.service_name = SERVICE_NAME_1;
-+
-+ if (!do_test ("Updated service file, part 2", oom_test, &d))
-+ return FALSE;
-+
-+ bus_activation_unref (activation);
-+ _dbus_list_clear (&directories);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_activation_service_reload_test (const DBusString *test_data_dir)
-+{
-+ DBusString directory;
-+
-+ if (!_dbus_string_init (&directory))
-+ return FALSE;
-+
-+ if (!_dbus_string_append (&directory, "/tmp/dbus-reload-test-") ||
-+ !_dbus_generate_random_ascii (&directory, 6))
-+ {
-+ return FALSE;
-+ }
-+
-+ /* Do normal tests */
-+ if (!init_service_reload_test (&directory))
-+ _dbus_assert_not_reached ("could not initiate service reload test");
-+
-+ if (!do_service_reload_test (&directory, FALSE))
-+ ; /* Do nothing? */
-+
-+ /* Do OOM tests */
-+ if (!init_service_reload_test (&directory))
-+ _dbus_assert_not_reached ("could not initiate service reload test");
-+
-+ if (!do_service_reload_test (&directory, TRUE))
-+ ; /* Do nothing? */
-+
-+ /* Cleanup test directory */
-+ if (!cleanup_service_reload_test (&directory))
-+ return FALSE;
-+
-+ _dbus_string_free (&directory);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/bus/activation.h dbus-0.61/bus/activation.h
---- dbus-0.61.orig/bus/activation.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/activation.h 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,56 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* activation.h Activation of services
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_ACTIVATION_H
-+#define BUS_ACTIVATION_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-list.h>
-+#include "bus.h"
-+
-+BusActivation* bus_activation_new (BusContext *context,
-+ const DBusString *address,
-+ DBusList **directories,
-+ DBusError *error);
-+BusActivation* bus_activation_ref (BusActivation *activation);
-+void bus_activation_unref (BusActivation *activation);
-+dbus_bool_t bus_activation_activate_service (BusActivation *activation,
-+ DBusConnection *connection,
-+ BusTransaction *transaction,
-+ dbus_bool_t auto_activation,
-+ DBusMessage *activation_message,
-+ const char *service_name,
-+ DBusError *error);
-+dbus_bool_t bus_activation_service_created (BusActivation *activation,
-+ const char *service_name,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+
-+dbus_bool_t bus_activation_send_pending_auto_activation_messages (BusActivation *activation,
-+ BusService *service,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+
-+
-+
-+#endif /* BUS_ACTIVATION_H */
-diff -Naur dbus-0.61.orig/bus/bus.c dbus-0.61/bus/bus.c
---- dbus-0.61.orig/bus/bus.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/bus.c 2005-11-14 21:51:25.000000000 +0100
-@@ -0,0 +1,1374 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* bus.c message bus context object
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "bus.h"
-+#include "activation.h"
-+#include "connection.h"
-+#include "services.h"
-+#include "utils.h"
-+#include "policy.h"
-+#include "config-parser.h"
-+#include "signals.h"
-+#include "selinux.h"
-+#include "dir-watch.h"
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-hash.h>
-+#include <dbus/dbus-internals.h>
-+
-+struct BusContext
-+{
-+ int refcount;
-+ char *config_file;
-+ char *type;
-+ char *address;
-+ char *pidfile;
-+ char *user;
-+ DBusLoop *loop;
-+ DBusList *servers;
-+ BusConnections *connections;
-+ BusActivation *activation;
-+ BusRegistry *registry;
-+ BusPolicy *policy;
-+ BusMatchmaker *matchmaker;
-+ DBusUserDatabase *user_database;
-+ BusLimits limits;
-+ unsigned int fork : 1;
-+};
-+
-+static dbus_int32_t server_data_slot = -1;
-+
-+typedef struct
-+{
-+ BusContext *context;
-+} BusServerData;
-+
-+#define BUS_SERVER_DATA(server) (dbus_server_get_data ((server), server_data_slot))
-+
-+static BusContext*
-+server_get_context (DBusServer *server)
-+{
-+ BusContext *context;
-+ BusServerData *bd;
-+
-+ if (!dbus_server_allocate_data_slot (&server_data_slot))
-+ return NULL;
-+
-+ bd = BUS_SERVER_DATA (server);
-+ if (bd == NULL)
-+ {
-+ dbus_server_free_data_slot (&server_data_slot);
-+ return NULL;
-+ }
-+
-+ context = bd->context;
-+
-+ dbus_server_free_data_slot (&server_data_slot);
-+
-+ return context;
-+}
-+
-+static dbus_bool_t
-+server_watch_callback (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data)
-+{
-+ /* FIXME this can be done in dbus-mainloop.c
-+ * if the code in activation.c for the babysitter
-+ * watch handler is fixed.
-+ */
-+
-+ return dbus_watch_handle (watch, condition);
-+}
-+
-+static dbus_bool_t
-+add_server_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ DBusServer *server = data;
-+ BusContext *context;
-+
-+ context = server_get_context (server);
-+
-+ return _dbus_loop_add_watch (context->loop,
-+ watch, server_watch_callback, server,
-+ NULL);
-+}
-+
-+static void
-+remove_server_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ DBusServer *server = data;
-+ BusContext *context;
-+
-+ context = server_get_context (server);
-+
-+ _dbus_loop_remove_watch (context->loop,
-+ watch, server_watch_callback, server);
-+}
-+
-+
-+static void
-+server_timeout_callback (DBusTimeout *timeout,
-+ void *data)
-+{
-+ /* can return FALSE on OOM but we just let it fire again later */
-+ dbus_timeout_handle (timeout);
-+}
-+
-+static dbus_bool_t
-+add_server_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ DBusServer *server = data;
-+ BusContext *context;
-+
-+ context = server_get_context (server);
-+
-+ return _dbus_loop_add_timeout (context->loop,
-+ timeout, server_timeout_callback, server, NULL);
-+}
-+
-+static void
-+remove_server_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ DBusServer *server = data;
-+ BusContext *context;
-+
-+ context = server_get_context (server);
-+
-+ _dbus_loop_remove_timeout (context->loop,
-+ timeout, server_timeout_callback, server);
-+}
-+
-+static void
-+new_connection_callback (DBusServer *server,
-+ DBusConnection *new_connection,
-+ void *data)
-+{
-+ BusContext *context = data;
-+
-+ if (!bus_connections_setup_connection (context->connections, new_connection))
-+ {
-+ _dbus_verbose ("No memory to setup new connection\n");
-+
-+ /* if we don't do this, it will get unref'd without
-+ * being disconnected... kind of strange really
-+ * that we have to do this, people won't get it right
-+ * in general.
-+ */
-+ dbus_connection_close (new_connection);
-+ }
-+
-+ dbus_connection_set_max_received_size (new_connection,
-+ context->limits.max_incoming_bytes);
-+
-+ dbus_connection_set_max_message_size (new_connection,
-+ context->limits.max_message_size);
-+
-+ /* on OOM, we won't have ref'd the connection so it will die. */
-+}
-+
-+static void
-+free_server_data (void *data)
-+{
-+ BusServerData *bd = data;
-+
-+ dbus_free (bd);
-+}
-+
-+static dbus_bool_t
-+setup_server (BusContext *context,
-+ DBusServer *server,
-+ char **auth_mechanisms,
-+ DBusError *error)
-+{
-+ BusServerData *bd;
-+
-+ bd = dbus_new0 (BusServerData, 1);
-+ if (!dbus_server_set_data (server,
-+ server_data_slot,
-+ bd, free_server_data))
-+ {
-+ dbus_free (bd);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ bd->context = context;
-+
-+ if (!dbus_server_set_auth_mechanisms (server, (const char**) auth_mechanisms))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ dbus_server_set_new_connection_function (server,
-+ new_connection_callback,
-+ context, NULL);
-+
-+ if (!dbus_server_set_watch_functions (server,
-+ add_server_watch,
-+ remove_server_watch,
-+ NULL,
-+ server,
-+ NULL))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!dbus_server_set_timeout_functions (server,
-+ add_server_timeout,
-+ remove_server_timeout,
-+ NULL,
-+ server, NULL))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/* This code only gets executed the first time the
-+ config files are parsed. It is not executed
-+ when config files are reloaded.*/
-+static dbus_bool_t
-+process_config_first_time_only (BusContext *context,
-+ BusConfigParser *parser,
-+ DBusError *error)
-+{
-+ DBusList *link;
-+ DBusList **addresses;
-+ const char *user, *pidfile;
-+ char **auth_mechanisms;
-+ DBusList **auth_mechanisms_list;
-+ int len;
-+ dbus_bool_t retval;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ retval = FALSE;
-+ auth_mechanisms = NULL;
-+
-+ /* Check for an existing pid file. Of course this is a race;
-+ * we'd have to use fcntl() locks on the pid file to
-+ * avoid that. But we want to check for the pid file
-+ * before overwriting any existing sockets, etc.
-+ */
-+ pidfile = bus_config_parser_get_pidfile (parser);
-+ if (pidfile != NULL)
-+ {
-+ DBusString u;
-+ DBusStat stbuf;
-+
-+ _dbus_string_init_const (&u, pidfile);
-+
-+ if (_dbus_stat (&u, &stbuf, NULL))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "The pid file \"%s\" exists, if the message bus is not running, remove this file",
-+ pidfile);
-+ goto failed;
-+ }
-+ }
-+
-+ /* keep around the pid filename so we can delete it later */
-+ context->pidfile = _dbus_strdup (pidfile);
-+
-+ /* Build an array of auth mechanisms */
-+
-+ auth_mechanisms_list = bus_config_parser_get_mechanisms (parser);
-+ len = _dbus_list_get_length (auth_mechanisms_list);
-+
-+ if (len > 0)
-+ {
-+ int i;
-+
-+ auth_mechanisms = dbus_new0 (char*, len + 1);
-+ if (auth_mechanisms == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ i = 0;
-+ link = _dbus_list_get_first_link (auth_mechanisms_list);
-+ while (link != NULL)
-+ {
-+ auth_mechanisms[i] = _dbus_strdup (link->data);
-+ if (auth_mechanisms[i] == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ link = _dbus_list_get_next_link (auth_mechanisms_list, link);
-+ }
-+ }
-+ else
-+ {
-+ auth_mechanisms = NULL;
-+ }
-+
-+ /* Listen on our addresses */
-+
-+ addresses = bus_config_parser_get_addresses (parser);
-+
-+ link = _dbus_list_get_first_link (addresses);
-+ while (link != NULL)
-+ {
-+ DBusServer *server;
-+
-+ server = dbus_server_listen (link->data, error);
-+ if (server == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+ else if (!setup_server (context, server, auth_mechanisms, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_list_append (&context->servers, server))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ link = _dbus_list_get_next_link (addresses, link);
-+ }
-+
-+ /* note that type may be NULL */
-+ context->type = _dbus_strdup (bus_config_parser_get_type (parser));
-+ if (bus_config_parser_get_type (parser) != NULL && context->type == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ user = bus_config_parser_get_user (parser);
-+ if (user != NULL)
-+ {
-+ context->user = _dbus_strdup (user);
-+ if (context->user == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+
-+ context->fork = bus_config_parser_get_fork (parser);
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ retval = TRUE;
-+
-+ failed:
-+ dbus_free_string_array (auth_mechanisms);
-+ return retval;
-+}
-+
-+/* This code gets executed every time the config files
-+ are parsed: both during BusContext construction
-+ and on reloads. */
-+static dbus_bool_t
-+process_config_every_time (BusContext *context,
-+ BusConfigParser *parser,
-+ dbus_bool_t is_reload,
-+ DBusError *error)
-+{
-+ DBusString full_address;
-+ DBusList *link;
-+
-+ dbus_bool_t retval;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_string_init (&full_address))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ /* get our limits and timeout lengths */
-+ bus_config_parser_get_limits (parser, &context->limits);
-+
-+ context->policy = bus_config_parser_steal_policy (parser);
-+ _dbus_assert (context->policy != NULL);
-+
-+ /* We have to build the address backward, so that
-+ * <listen> later in the config file have priority
-+ */
-+ link = _dbus_list_get_last_link (&context->servers);
-+ while (link != NULL)
-+ {
-+ char *addr;
-+
-+ addr = dbus_server_get_address (link->data);
-+ if (addr == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (_dbus_string_get_length (&full_address) > 0)
-+ {
-+ if (!_dbus_string_append (&full_address, ";"))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+
-+ if (!_dbus_string_append (&full_address, addr))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ dbus_free (addr);
-+
-+ link = _dbus_list_get_prev_link (&context->servers, link);
-+ }
-+
-+ if (is_reload)
-+ dbus_free (context->address);
-+
-+ if (!_dbus_string_copy_data (&full_address, &context->address))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ /* Create activation subsystem */
-+
-+ if (is_reload)
-+ bus_activation_unref (context->activation);
-+
-+ context->activation = bus_activation_new (context, &full_address,
-+ bus_config_parser_get_service_dirs (parser),
-+ error);
-+ if (context->activation == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+
-+ /* Drop existing conf-dir watches (if applicable) */
-+
-+ if (is_reload)
-+ bus_drop_all_directory_watches ();
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ retval = TRUE;
-+
-+ failed:
-+ _dbus_string_free (&full_address);
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+process_config_postinit (BusContext *context,
-+ BusConfigParser *parser,
-+ DBusError *error)
-+{
-+ DBusHashTable *service_context_table;
-+
-+ service_context_table = bus_config_parser_steal_service_context_table (parser);
-+ if (!bus_registry_set_service_context_table (context->registry,
-+ service_context_table))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ _dbus_hash_table_unref (service_context_table);
-+
-+ /* Watch all conf directories */
-+ _dbus_list_foreach (bus_config_parser_get_conf_dirs (parser),
-+ (DBusForeachFunction) bus_watch_directory,
-+ NULL);
-+
-+ return TRUE;
-+}
-+
-+BusContext*
-+bus_context_new (const DBusString *config_file,
-+ ForceForkSetting force_fork,
-+ int print_addr_fd,
-+ int print_pid_fd,
-+ DBusError *error)
-+{
-+ BusContext *context;
-+ BusConfigParser *parser;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ context = NULL;
-+ parser = NULL;
-+
-+ if (!dbus_server_allocate_data_slot (&server_data_slot))
-+ {
-+ BUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ context = dbus_new0 (BusContext, 1);
-+ if (context == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ context->refcount = 1;
-+
-+ if (!_dbus_string_copy_data (config_file, &context->config_file))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ context->loop = _dbus_loop_new ();
-+ if (context->loop == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ context->registry = bus_registry_new (context);
-+ if (context->registry == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ parser = bus_config_load (config_file, TRUE, NULL, error);
-+ if (parser == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+
-+ if (!process_config_first_time_only (context, parser, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+ if (!process_config_every_time (context, parser, FALSE, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+
-+ /* we need another ref of the server data slot for the context
-+ * to own
-+ */
-+ if (!dbus_server_allocate_data_slot (&server_data_slot))
-+ _dbus_assert_not_reached ("second ref of server data slot failed");
-+
-+ context->user_database = _dbus_user_database_new ();
-+ if (context->user_database == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ /* Note that we don't know whether the print_addr_fd is
-+ * one of the sockets we're using to listen on, or some
-+ * other random thing. But I think the answer is "don't do
-+ * that then"
-+ */
-+ if (print_addr_fd >= 0)
-+ {
-+ DBusString addr;
-+ const char *a = bus_context_get_address (context);
-+ int bytes;
-+
-+ _dbus_assert (a != NULL);
-+ if (!_dbus_string_init (&addr))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_string_append (&addr, a) ||
-+ !_dbus_string_append (&addr, "\n"))
-+ {
-+ _dbus_string_free (&addr);
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ bytes = _dbus_string_get_length (&addr);
-+ if (_dbus_write (print_addr_fd, &addr, 0, bytes) != bytes)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Printing message bus address: %s\n",
-+ _dbus_strerror (errno));
-+ _dbus_string_free (&addr);
-+ goto failed;
-+ }
-+
-+ if (print_addr_fd > 2)
-+ _dbus_close (print_addr_fd, NULL);
-+
-+ _dbus_string_free (&addr);
-+ }
-+
-+ context->connections = bus_connections_new (context);
-+ if (context->connections == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ context->matchmaker = bus_matchmaker_new ();
-+ if (context->matchmaker == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ /* Now become a daemon if appropriate */
-+ if ((force_fork != FORK_NEVER && context->fork) || force_fork == FORK_ALWAYS)
-+ {
-+ DBusString u;
-+
-+ if (context->pidfile)
-+ _dbus_string_init_const (&u, context->pidfile);
-+
-+ if (!_dbus_become_daemon (context->pidfile ? &u : NULL,
-+ print_pid_fd,
-+ error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+ }
-+ else
-+ {
-+ /* Need to write PID file for ourselves, not for the child process */
-+ if (context->pidfile != NULL)
-+ {
-+ DBusString u;
-+
-+ _dbus_string_init_const (&u, context->pidfile);
-+
-+ if (!_dbus_write_pid_file (&u, _dbus_getpid (), error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+ }
-+ }
-+
-+ /* Write PID if requested */
-+ if (print_pid_fd >= 0)
-+ {
-+ DBusString pid;
-+ int bytes;
-+
-+ if (!_dbus_string_init (&pid))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_string_append_int (&pid, _dbus_getpid ()) ||
-+ !_dbus_string_append (&pid, "\n"))
-+ {
-+ _dbus_string_free (&pid);
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ bytes = _dbus_string_get_length (&pid);
-+ if (_dbus_write (print_pid_fd, &pid, 0, bytes) != bytes)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Printing message bus PID: %s\n",
-+ _dbus_strerror (errno));
-+ _dbus_string_free (&pid);
-+ goto failed;
-+ }
-+
-+ if (print_pid_fd > 2)
-+ _dbus_close (print_pid_fd, NULL);
-+
-+ _dbus_string_free (&pid);
-+ }
-+
-+ if (!bus_selinux_full_init ())
-+ {
-+ _dbus_warn ("SELinux initialization failed\n");
-+ }
-+
-+ if (!process_config_postinit (context, parser, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+
-+ if (parser != NULL)
-+ {
-+ bus_config_parser_unref (parser);
-+ parser = NULL;
-+ }
-+
-+ /* Here we change our credentials if required,
-+ * as soon as we've set up our sockets and pidfile
-+ */
-+ if (context->user != NULL)
-+ {
-+ DBusCredentials creds;
-+ DBusString u;
-+
-+ _dbus_string_init_const (&u, context->user);
-+
-+ if (!_dbus_credentials_from_username (&u, &creds) ||
-+ creds.uid < 0 ||
-+ creds.gid < 0)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Could not get UID and GID for username \"%s\"",
-+ context->user);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_change_identity (creds.uid, creds.gid, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+ }
-+
-+ dbus_server_free_data_slot (&server_data_slot);
-+
-+ return context;
-+
-+ failed:
-+ if (parser != NULL)
-+ bus_config_parser_unref (parser);
-+ if (context != NULL)
-+ bus_context_unref (context);
-+
-+ if (server_data_slot >= 0)
-+ dbus_server_free_data_slot (&server_data_slot);
-+
-+ return NULL;
-+}
-+
-+dbus_bool_t
-+bus_context_reload_config (BusContext *context,
-+ DBusError *error)
-+{
-+ BusConfigParser *parser;
-+ DBusString config_file;
-+ dbus_bool_t ret;
-+
-+ ret = FALSE;
-+ _dbus_string_init_const (&config_file, context->config_file);
-+ parser = bus_config_load (&config_file, TRUE, NULL, error);
-+ if (parser == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+
-+ if (!process_config_every_time (context, parser, TRUE, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+ if (!process_config_postinit (context, parser, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed;
-+ }
-+ ret = TRUE;
-+
-+ failed:
-+ if (parser != NULL)
-+ bus_config_parser_unref (parser);
-+ return ret;
-+}
-+
-+static void
-+shutdown_server (BusContext *context,
-+ DBusServer *server)
-+{
-+ if (server == NULL ||
-+ !dbus_server_get_is_connected (server))
-+ return;
-+
-+ if (!dbus_server_set_watch_functions (server,
-+ NULL, NULL, NULL,
-+ context,
-+ NULL))
-+ _dbus_assert_not_reached ("setting watch functions to NULL failed");
-+
-+ if (!dbus_server_set_timeout_functions (server,
-+ NULL, NULL, NULL,
-+ context,
-+ NULL))
-+ _dbus_assert_not_reached ("setting timeout functions to NULL failed");
-+
-+ dbus_server_disconnect (server);
-+}
-+
-+void
-+bus_context_shutdown (BusContext *context)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&context->servers);
-+ while (link != NULL)
-+ {
-+ shutdown_server (context, link->data);
-+
-+ link = _dbus_list_get_next_link (&context->servers, link);
-+ }
-+}
-+
-+BusContext *
-+bus_context_ref (BusContext *context)
-+{
-+ _dbus_assert (context->refcount > 0);
-+ context->refcount += 1;
-+
-+ return context;
-+}
-+
-+void
-+bus_context_unref (BusContext *context)
-+{
-+ _dbus_assert (context->refcount > 0);
-+ context->refcount -= 1;
-+
-+ if (context->refcount == 0)
-+ {
-+ DBusList *link;
-+
-+ _dbus_verbose ("Finalizing bus context %p\n", context);
-+
-+ bus_context_shutdown (context);
-+
-+ if (context->connections)
-+ {
-+ bus_connections_unref (context->connections);
-+ context->connections = NULL;
-+ }
-+
-+ if (context->registry)
-+ {
-+ bus_registry_unref (context->registry);
-+ context->registry = NULL;
-+ }
-+
-+ if (context->activation)
-+ {
-+ bus_activation_unref (context->activation);
-+ context->activation = NULL;
-+ }
-+
-+ link = _dbus_list_get_first_link (&context->servers);
-+ while (link != NULL)
-+ {
-+ dbus_server_unref (link->data);
-+
-+ link = _dbus_list_get_next_link (&context->servers, link);
-+ }
-+ _dbus_list_clear (&context->servers);
-+
-+ if (context->policy)
-+ {
-+ bus_policy_unref (context->policy);
-+ context->policy = NULL;
-+ }
-+
-+ if (context->loop)
-+ {
-+ _dbus_loop_unref (context->loop);
-+ context->loop = NULL;
-+ }
-+
-+ if (context->matchmaker)
-+ {
-+ bus_matchmaker_unref (context->matchmaker);
-+ context->matchmaker = NULL;
-+ }
-+
-+ dbus_free (context->config_file);
-+ dbus_free (context->type);
-+ dbus_free (context->address);
-+ dbus_free (context->user);
-+
-+ if (context->pidfile)
-+ {
-+ DBusString u;
-+ _dbus_string_init_const (&u, context->pidfile);
-+
-+ /* Deliberately ignore errors here, since there's not much
-+ * we can do about it, and we're exiting anyways.
-+ */
-+ _dbus_delete_file (&u, NULL);
-+
-+ dbus_free (context->pidfile);
-+ }
-+
-+ if (context->user_database != NULL)
-+ _dbus_user_database_unref (context->user_database);
-+
-+ dbus_free (context);
-+
-+ dbus_server_free_data_slot (&server_data_slot);
-+ }
-+}
-+
-+/* type may be NULL */
-+const char*
-+bus_context_get_type (BusContext *context)
-+{
-+ return context->type;
-+}
-+
-+const char*
-+bus_context_get_address (BusContext *context)
-+{
-+ return context->address;
-+}
-+
-+BusRegistry*
-+bus_context_get_registry (BusContext *context)
-+{
-+ return context->registry;
-+}
-+
-+BusConnections*
-+bus_context_get_connections (BusContext *context)
-+{
-+ return context->connections;
-+}
-+
-+BusActivation*
-+bus_context_get_activation (BusContext *context)
-+{
-+ return context->activation;
-+}
-+
-+BusMatchmaker*
-+bus_context_get_matchmaker (BusContext *context)
-+{
-+ return context->matchmaker;
-+}
-+
-+DBusLoop*
-+bus_context_get_loop (BusContext *context)
-+{
-+ return context->loop;
-+}
-+
-+DBusUserDatabase*
-+bus_context_get_user_database (BusContext *context)
-+{
-+ return context->user_database;
-+}
-+
-+dbus_bool_t
-+bus_context_allow_user (BusContext *context,
-+ unsigned long uid)
-+{
-+ return bus_policy_allow_user (context->policy,
-+ context->user_database,
-+ uid);
-+}
-+
-+BusPolicy *
-+bus_context_get_policy (BusContext *context)
-+{
-+ return context->policy;
-+}
-+
-+BusClientPolicy*
-+bus_context_create_client_policy (BusContext *context,
-+ DBusConnection *connection,
-+ DBusError *error)
-+{
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ return bus_policy_create_client_policy (context->policy, connection,
-+ error);
-+}
-+
-+int
-+bus_context_get_activation_timeout (BusContext *context)
-+{
-+
-+ return context->limits.activation_timeout;
-+}
-+
-+int
-+bus_context_get_auth_timeout (BusContext *context)
-+{
-+ return context->limits.auth_timeout;
-+}
-+
-+int
-+bus_context_get_max_completed_connections (BusContext *context)
-+{
-+ return context->limits.max_completed_connections;
-+}
-+
-+int
-+bus_context_get_max_incomplete_connections (BusContext *context)
-+{
-+ return context->limits.max_incomplete_connections;
-+}
-+
-+int
-+bus_context_get_max_connections_per_user (BusContext *context)
-+{
-+ return context->limits.max_connections_per_user;
-+}
-+
-+int
-+bus_context_get_max_pending_activations (BusContext *context)
-+{
-+ return context->limits.max_pending_activations;
-+}
-+
-+int
-+bus_context_get_max_services_per_connection (BusContext *context)
-+{
-+ return context->limits.max_services_per_connection;
-+}
-+
-+int
-+bus_context_get_max_match_rules_per_connection (BusContext *context)
-+{
-+ return context->limits.max_match_rules_per_connection;
-+}
-+
-+int
-+bus_context_get_max_replies_per_connection (BusContext *context)
-+{
-+ return context->limits.max_replies_per_connection;
-+}
-+
-+int
-+bus_context_get_reply_timeout (BusContext *context)
-+{
-+ return context->limits.reply_timeout;
-+}
-+
-+/*
-+ * addressed_recipient is the recipient specified in the message.
-+ *
-+ * proposed_recipient is the recipient we're considering sending
-+ * to right this second, and may be an eavesdropper.
-+ *
-+ * sender is the sender of the message.
-+ *
-+ * NULL for proposed_recipient or sender definitely means the bus driver.
-+ *
-+ * NULL for addressed_recipient may mean the bus driver, or may mean
-+ * no destination was specified in the message (e.g. a signal).
-+ */
-+dbus_bool_t
-+bus_context_check_security_policy (BusContext *context,
-+ BusTransaction *transaction,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ BusClientPolicy *sender_policy;
-+ BusClientPolicy *recipient_policy;
-+ int type;
-+ dbus_bool_t requested_reply;
-+
-+ type = dbus_message_get_type (message);
-+
-+ /* dispatch.c was supposed to ensure these invariants */
-+ _dbus_assert (dbus_message_get_destination (message) != NULL ||
-+ type == DBUS_MESSAGE_TYPE_SIGNAL ||
-+ (sender == NULL && !bus_connection_is_active (proposed_recipient)));
-+ _dbus_assert (type == DBUS_MESSAGE_TYPE_SIGNAL ||
-+ addressed_recipient != NULL ||
-+ strcmp (dbus_message_get_destination (message), DBUS_SERVICE_DBUS) == 0);
-+
-+ switch (type)
-+ {
-+ case DBUS_MESSAGE_TYPE_METHOD_CALL:
-+ case DBUS_MESSAGE_TYPE_SIGNAL:
-+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
-+ case DBUS_MESSAGE_TYPE_ERROR:
-+ break;
-+
-+ default:
-+ _dbus_verbose ("security check disallowing message of unknown type %d\n",
-+ type);
-+
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "Message bus will not accept messages of unknown type\n");
-+
-+ return FALSE;
-+ }
-+
-+ requested_reply = FALSE;
-+
-+ if (sender != NULL)
-+ {
-+ const char *dest;
-+
-+ dest = dbus_message_get_destination (message);
-+
-+ /* First verify the SELinux access controls. If allowed then
-+ * go on with the standard checks.
-+ */
-+ if (!bus_selinux_allows_send (sender, proposed_recipient,
-+ dbus_message_type_to_string (dbus_message_get_type (message)),
-+ dbus_message_get_interface (message),
-+ dbus_message_get_member (message),
-+ dbus_message_get_error_name (message),
-+ dest ? dest : DBUS_SERVICE_DBUS, error))
-+ {
-+
-+ if (dbus_error_is_set (error) &&
-+ dbus_error_has_name (error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ return FALSE;
-+ }
-+
-+
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "An SELinux policy prevents this sender "
-+ "from sending this message to this recipient "
-+ "(rejected message had interface \"%s\" "
-+ "member \"%s\" error name \"%s\" destination \"%s\")",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) : "(unset)",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) : "(unset)",
-+ dbus_message_get_error_name (message) ?
-+ dbus_message_get_error_name (message) : "(unset)",
-+ dest ? dest : DBUS_SERVICE_DBUS);
-+ _dbus_verbose ("SELinux security check denying send to service\n");
-+ return FALSE;
-+ }
-+
-+ if (bus_connection_is_active (sender))
-+ {
-+ sender_policy = bus_connection_get_policy (sender);
-+ _dbus_assert (sender_policy != NULL);
-+
-+ /* Fill in requested_reply variable with TRUE if this is a
-+ * reply and the reply was pending.
-+ */
-+ if (dbus_message_get_reply_serial (message) != 0)
-+ {
-+ if (proposed_recipient != NULL /* not to the bus driver */ &&
-+ addressed_recipient == proposed_recipient /* not eavesdropping */)
-+ {
-+ DBusError error2;
-+
-+ dbus_error_init (&error2);
-+ requested_reply = bus_connections_check_reply (bus_connection_get_connections (sender),
-+ transaction,
-+ sender, addressed_recipient, message,
-+ &error2);
-+ if (dbus_error_is_set (&error2))
-+ {
-+ dbus_move_error (&error2, error);
-+ return FALSE;
-+ }
-+ }
-+ }
-+ }
-+ else
-+ {
-+ /* Policy for inactive connections is that they can only send
-+ * the hello message to the bus driver
-+ */
-+ if (proposed_recipient == NULL &&
-+ dbus_message_is_method_call (message,
-+ DBUS_INTERFACE_DBUS,
-+ "Hello"))
-+ {
-+ _dbus_verbose ("security check allowing %s message\n",
-+ "Hello");
-+ return TRUE;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("security check disallowing non-%s message\n",
-+ "Hello");
-+
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "Client tried to send a message other than %s without being registered",
-+ "Hello");
-+
-+ return FALSE;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ sender_policy = NULL;
-+
-+ /* If the sender is the bus driver, we assume any reply was a
-+ * requested reply as bus driver won't send bogus ones
-+ */
-+ if (addressed_recipient == proposed_recipient /* not eavesdropping */ &&
-+ dbus_message_get_reply_serial (message) != 0)
-+ requested_reply = TRUE;
-+ }
-+
-+ _dbus_assert ((sender != NULL && sender_policy != NULL) ||
-+ (sender == NULL && sender_policy == NULL));
-+
-+ if (proposed_recipient != NULL)
-+ {
-+ /* only the bus driver can send to an inactive recipient (as it
-+ * owns no services, so other apps can't address it). Inactive
-+ * recipients can receive any message.
-+ */
-+ if (bus_connection_is_active (proposed_recipient))
-+ {
-+ recipient_policy = bus_connection_get_policy (proposed_recipient);
-+ _dbus_assert (recipient_policy != NULL);
-+ }
-+ else if (sender == NULL)
-+ {
-+ _dbus_verbose ("security check using NULL recipient policy for message from bus\n");
-+ recipient_policy = NULL;
-+ }
-+ else
-+ {
-+ _dbus_assert_not_reached ("a message was somehow sent to an inactive recipient from a source other than the message bus\n");
-+ recipient_policy = NULL;
-+ }
-+ }
-+ else
-+ recipient_policy = NULL;
-+
-+ _dbus_assert ((proposed_recipient != NULL && recipient_policy != NULL) ||
-+ (proposed_recipient != NULL && sender == NULL && recipient_policy == NULL) ||
-+ (proposed_recipient == NULL && recipient_policy == NULL));
-+
-+ if (sender_policy &&
-+ !bus_client_policy_check_can_send (sender_policy,
-+ context->registry,
-+ requested_reply,
-+ proposed_recipient,
-+ message))
-+ {
-+ const char *dest;
-+
-+ dest = dbus_message_get_destination (message);
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "A security policy in place prevents this sender "
-+ "from sending this message to this recipient, "
-+ "see message bus configuration file (rejected message "
-+ "had interface \"%s\" member \"%s\" error name \"%s\" destination \"%s\")",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) : "(unset)",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) : "(unset)",
-+ dbus_message_get_error_name (message) ?
-+ dbus_message_get_error_name (message) : "(unset)",
-+ dest ? dest : DBUS_SERVICE_DBUS);
-+ _dbus_verbose ("security policy disallowing message due to sender policy\n");
-+ return FALSE;
-+ }
-+
-+ if (recipient_policy &&
-+ !bus_client_policy_check_can_receive (recipient_policy,
-+ context->registry,
-+ requested_reply,
-+ sender,
-+ addressed_recipient, proposed_recipient,
-+ message))
-+ {
-+ const char *dest;
-+
-+ dest = dbus_message_get_destination (message);
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "A security policy in place prevents this recipient "
-+ "from receiving this message from this sender, "
-+ "see message bus configuration file (rejected message "
-+ "had interface \"%s\" member \"%s\" error name \"%s\" destination \"%s\" reply serial %u requested_reply=%d)",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) : "(unset)",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) : "(unset)",
-+ dbus_message_get_error_name (message) ?
-+ dbus_message_get_error_name (message) : "(unset)",
-+ dest ? dest : DBUS_SERVICE_DBUS,
-+ dbus_message_get_reply_serial (message),
-+ requested_reply);
-+ _dbus_verbose ("security policy disallowing message due to recipient policy\n");
-+ return FALSE;
-+ }
-+
-+ /* See if limits on size have been exceeded */
-+ if (proposed_recipient &&
-+ dbus_connection_get_outgoing_size (proposed_recipient) >
-+ context->limits.max_outgoing_bytes)
-+ {
-+ const char *dest;
-+
-+ dest = dbus_message_get_destination (message);
-+ dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "The destination service \"%s\" has a full message queue",
-+ dest ? dest : (proposed_recipient ?
-+ bus_connection_get_name (proposed_recipient) :
-+ DBUS_SERVICE_DBUS));
-+ _dbus_verbose ("security policy disallowing message due to full message queue\n");
-+ return FALSE;
-+ }
-+
-+ if (type == DBUS_MESSAGE_TYPE_METHOD_CALL)
-+ {
-+ /* Record that we will allow a reply here in the future (don't
-+ * bother if the recipient is the bus). Only the addressed recipient
-+ * may reply.
-+ */
-+ if (sender && addressed_recipient &&
-+ !bus_connections_expect_reply (bus_connection_get_connections (sender),
-+ transaction,
-+ sender, addressed_recipient,
-+ message, error))
-+ {
-+ _dbus_verbose ("Failed to record reply expectation or problem with the message expecting a reply\n");
-+ return FALSE;
-+ }
-+ }
-+
-+ _dbus_verbose ("security policy allowing message\n");
-+ return TRUE;
-+}
-diff -Naur dbus-0.61.orig/bus/bus.h dbus-0.61/bus/bus.h
---- dbus-0.61.orig/bus/bus.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/bus.h 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,116 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* bus.h message bus context object
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_BUS_H
-+#define BUS_BUS_H
-+
-+#include <config.h>
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-mainloop.h>
-+#include <dbus/dbus-userdb.h>
-+
-+typedef struct BusActivation BusActivation;
-+typedef struct BusConnections BusConnections;
-+typedef struct BusContext BusContext;
-+typedef struct BusPolicy BusPolicy;
-+typedef struct BusClientPolicy BusClientPolicy;
-+typedef struct BusPolicyRule BusPolicyRule;
-+typedef struct BusRegistry BusRegistry;
-+typedef struct BusSELinuxID BusSELinuxID;
-+typedef struct BusService BusService;
-+typedef struct BusOwner BusOwner;
-+typedef struct BusTransaction BusTransaction;
-+typedef struct BusMatchmaker BusMatchmaker;
-+typedef struct BusMatchRule BusMatchRule;
-+
-+typedef struct
-+{
-+ long max_incoming_bytes; /**< How many incoming message bytes for a single connection */
-+ long max_outgoing_bytes; /**< How many outgoing bytes can be queued for a single connection */
-+ long max_message_size; /**< Max size of a single message in bytes */
-+ int activation_timeout; /**< How long to wait for an activation to time out */
-+ int auth_timeout; /**< How long to wait for an authentication to time out */
-+ int max_completed_connections; /**< Max number of authorized connections */
-+ int max_incomplete_connections; /**< Max number of incomplete connections */
-+ int max_connections_per_user; /**< Max number of connections auth'd as same user */
-+ int max_pending_activations; /**< Max number of pending activations for the entire bus */
-+ int max_services_per_connection; /**< Max number of owned services for a single connection */
-+ int max_match_rules_per_connection; /**< Max number of match rules for a single connection */
-+ int max_replies_per_connection; /**< Max number of replies that can be pending for each connection */
-+ int reply_timeout; /**< How long to wait before timing out a reply */
-+} BusLimits;
-+
-+typedef enum
-+{
-+ FORK_FOLLOW_CONFIG_FILE,
-+ FORK_ALWAYS,
-+ FORK_NEVER
-+} ForceForkSetting;
-+
-+BusContext* bus_context_new (const DBusString *config_file,
-+ ForceForkSetting force_fork,
-+ int print_addr_fd,
-+ int print_pid_fd,
-+ DBusError *error);
-+dbus_bool_t bus_context_reload_config (BusContext *context,
-+ DBusError *error);
-+void bus_context_shutdown (BusContext *context);
-+BusContext* bus_context_ref (BusContext *context);
-+void bus_context_unref (BusContext *context);
-+const char* bus_context_get_type (BusContext *context);
-+const char* bus_context_get_address (BusContext *context);
-+BusRegistry* bus_context_get_registry (BusContext *context);
-+BusConnections* bus_context_get_connections (BusContext *context);
-+BusActivation* bus_context_get_activation (BusContext *context);
-+BusMatchmaker* bus_context_get_matchmaker (BusContext *context);
-+DBusLoop* bus_context_get_loop (BusContext *context);
-+DBusUserDatabase* bus_context_get_user_database (BusContext *context);
-+
-+dbus_bool_t bus_context_allow_user (BusContext *context,
-+ unsigned long uid);
-+BusPolicy* bus_context_get_policy (BusContext *context);
-+
-+BusClientPolicy* bus_context_create_client_policy (BusContext *context,
-+ DBusConnection *connection,
-+ DBusError *error);
-+int bus_context_get_activation_timeout (BusContext *context);
-+int bus_context_get_auth_timeout (BusContext *context);
-+int bus_context_get_max_completed_connections (BusContext *context);
-+int bus_context_get_max_incomplete_connections (BusContext *context);
-+int bus_context_get_max_connections_per_user (BusContext *context);
-+int bus_context_get_max_pending_activations (BusContext *context);
-+int bus_context_get_max_services_per_connection (BusContext *context);
-+int bus_context_get_max_match_rules_per_connection (BusContext *context);
-+int bus_context_get_max_replies_per_connection (BusContext *context);
-+int bus_context_get_reply_timeout (BusContext *context);
-+dbus_bool_t bus_context_check_security_policy (BusContext *context,
-+ BusTransaction *transaction,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ DBusMessage *message,
-+ DBusError *error);
-+
-+#endif /* BUS_BUS_H */
-diff -Naur dbus-0.61.orig/bus/config-loader-expat.c dbus-0.61/bus/config-loader-expat.c
---- dbus-0.61.orig/bus/config-loader-expat.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/config-loader-expat.c 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,294 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* config-loader-expat.c expat XML loader
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "config-parser.h"
-+#include <dbus/dbus-internals.h>
-+#include <expat.h>
-+
-+static XML_Memory_Handling_Suite memsuite =
-+{
-+ dbus_malloc,
-+ dbus_realloc,
-+ dbus_free
-+};
-+
-+typedef struct
-+{
-+ BusConfigParser *parser;
-+ const char *filename;
-+ DBusString content;
-+ DBusError *error;
-+ dbus_bool_t failed;
-+} ExpatParseContext;
-+
-+static dbus_bool_t
-+process_content (ExpatParseContext *context)
-+{
-+ if (context->failed)
-+ return FALSE;
-+
-+ if (_dbus_string_get_length (&context->content) > 0)
-+ {
-+ if (!bus_config_parser_content (context->parser,
-+ &context->content,
-+ context->error))
-+ {
-+ context->failed = TRUE;
-+ return FALSE;
-+ }
-+ _dbus_string_set_length (&context->content, 0);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+expat_StartElementHandler (void *userData,
-+ const XML_Char *name,
-+ const XML_Char **atts)
-+{
-+ ExpatParseContext *context = userData;
-+ int i;
-+ char **names;
-+ char **values;
-+
-+ /* Expat seems to suck and can't abort the parse if we
-+ * throw an error. Expat 2.0 is supposed to fix this.
-+ */
-+ if (context->failed)
-+ return;
-+
-+ if (!process_content (context))
-+ return;
-+
-+ /* "atts" is key, value, key, value, NULL */
-+ for (i = 0; atts[i] != NULL; ++i)
-+ ; /* nothing */
-+
-+ _dbus_assert (i % 2 == 0);
-+ names = dbus_new0 (char *, i / 2 + 1);
-+ values = dbus_new0 (char *, i / 2 + 1);
-+
-+ if (names == NULL || values == NULL)
-+ {
-+ dbus_set_error (context->error, DBUS_ERROR_NO_MEMORY, NULL);
-+ context->failed = TRUE;
-+ dbus_free (names);
-+ dbus_free (values);
-+ return;
-+ }
-+
-+ i = 0;
-+ while (atts[i] != NULL)
-+ {
-+ _dbus_assert (i % 2 == 0);
-+ names [i / 2] = (char*) atts[i];
-+ values[i / 2] = (char*) atts[i+1];
-+
-+ i += 2;
-+ }
-+
-+ if (!bus_config_parser_start_element (context->parser,
-+ name,
-+ (const char **) names,
-+ (const char **) values,
-+ context->error))
-+ {
-+ dbus_free (names);
-+ dbus_free (values);
-+ context->failed = TRUE;
-+ return;
-+ }
-+
-+ dbus_free (names);
-+ dbus_free (values);
-+}
-+
-+static void
-+expat_EndElementHandler (void *userData,
-+ const XML_Char *name)
-+{
-+ ExpatParseContext *context = userData;
-+
-+ if (!process_content (context))
-+ return;
-+
-+ if (!bus_config_parser_end_element (context->parser,
-+ name,
-+ context->error))
-+ {
-+ context->failed = TRUE;
-+ return;
-+ }
-+}
-+
-+/* s is not 0 terminated. */
-+static void
-+expat_CharacterDataHandler (void *userData,
-+ const XML_Char *s,
-+ int len)
-+{
-+ ExpatParseContext *context = userData;
-+ if (context->failed)
-+ return;
-+
-+ if (!_dbus_string_append_len (&context->content,
-+ s, len))
-+ {
-+ dbus_set_error (context->error, DBUS_ERROR_NO_MEMORY, NULL);
-+ context->failed = TRUE;
-+ return;
-+ }
-+}
-+
-+
-+BusConfigParser*
-+bus_config_load (const DBusString *file,
-+ dbus_bool_t is_toplevel,
-+ const BusConfigParser *parent,
-+ DBusError *error)
-+{
-+ XML_Parser expat;
-+ const char *filename;
-+ BusConfigParser *parser;
-+ ExpatParseContext context;
-+ DBusString dirname;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ parser = NULL;
-+ expat = NULL;
-+ context.error = error;
-+ context.failed = FALSE;
-+
-+ filename = _dbus_string_get_const_data (file);
-+
-+ if (!_dbus_string_init (&context.content))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_init (&dirname))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (&context.content);
-+ return NULL;
-+ }
-+
-+ expat = XML_ParserCreate_MM ("UTF-8", &memsuite, NULL);
-+ if (expat == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_string_get_dirname (file, &dirname))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed;
-+ }
-+
-+ parser = bus_config_parser_new (&dirname, is_toplevel, parent);
-+ if (parser == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed;
-+ }
-+ context.parser = parser;
-+
-+ XML_SetUserData (expat, &context);
-+ XML_SetElementHandler (expat,
-+ expat_StartElementHandler,
-+ expat_EndElementHandler);
-+ XML_SetCharacterDataHandler (expat,
-+ expat_CharacterDataHandler);
-+
-+ {
-+ DBusString data;
-+ const char *data_str;
-+
-+ if (!_dbus_string_init (&data))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_file_get_contents (&data, file, error))
-+ {
-+ _dbus_string_free (&data);
-+ goto failed;
-+ }
-+
-+ data_str = _dbus_string_get_const_data (&data);
-+
-+ if (!XML_Parse (expat, data_str, _dbus_string_get_length (&data), TRUE))
-+ {
-+ if (context.error != NULL &&
-+ !dbus_error_is_set (context.error))
-+ {
-+ enum XML_Error e;
-+
-+ e = XML_GetErrorCode (expat);
-+ if (e == XML_ERROR_NO_MEMORY)
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ else
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Error in file %s, line %d, column %d: %s\n",
-+ filename,
-+ XML_GetCurrentLineNumber (expat),
-+ XML_GetCurrentColumnNumber (expat),
-+ XML_ErrorString (e));
-+ }
-+
-+ _dbus_string_free (&data);
-+ goto failed;
-+ }
-+
-+ _dbus_string_free (&data);
-+
-+ if (context.failed)
-+ goto failed;
-+ }
-+
-+ if (!bus_config_parser_finished (parser, error))
-+ goto failed;
-+
-+ _dbus_string_free (&dirname);
-+ _dbus_string_free (&context.content);
-+ XML_ParserFree (expat);
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ return parser;
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+
-+ _dbus_string_free (&dirname);
-+ _dbus_string_free (&context.content);
-+ if (expat)
-+ XML_ParserFree (expat);
-+ if (parser)
-+ bus_config_parser_unref (parser);
-+ return NULL;
-+}
-diff -Naur dbus-0.61.orig/bus/config-loader-libxml.c dbus-0.61/bus/config-loader-libxml.c
---- dbus-0.61.orig/bus/config-loader-libxml.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/config-loader-libxml.c 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,321 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* config-loader-libxml.c libxml2 XML loader
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "config-parser.h"
-+#include <dbus/dbus-internals.h>
-+#include <libxml/xmlreader.h>
-+#include <libxml/parser.h>
-+#include <libxml/globals.h>
-+#include <libxml/xmlmemory.h>
-+#include <errno.h>
-+#include <string.h>
-+
-+/* About the error handling:
-+ * - setup a "structured" error handler that catches structural
-+ * errors and some oom errors
-+ * - assume that a libxml function returning an error code means
-+ * out-of-memory
-+ */
-+#define _DBUS_MAYBE_SET_OOM(e) (dbus_error_is_set(e) ? (void)0 : _DBUS_SET_OOM(e))
-+
-+
-+static dbus_bool_t
-+xml_text_start_element (BusConfigParser *parser,
-+ xmlTextReader *reader,
-+ DBusError *error)
-+{
-+ const char *name;
-+ int n_attributes;
-+ const char **attribute_names, **attribute_values;
-+ dbus_bool_t ret;
-+ int i, status, is_empty;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ ret = FALSE;
-+ attribute_names = NULL;
-+ attribute_values = NULL;
-+
-+ name = xmlTextReaderConstName (reader);
-+ n_attributes = xmlTextReaderAttributeCount (reader);
-+ is_empty = xmlTextReaderIsEmptyElement (reader);
-+
-+ if (name == NULL || n_attributes < 0 || is_empty == -1)
-+ {
-+ _DBUS_MAYBE_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ attribute_names = dbus_new0 (const char *, n_attributes + 1);
-+ attribute_values = dbus_new0 (const char *, n_attributes + 1);
-+ if (attribute_names == NULL || attribute_values == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto out;
-+ }
-+ i = 0;
-+ while ((status = xmlTextReaderMoveToNextAttribute (reader)) == 1)
-+ {
-+ _dbus_assert (i < n_attributes);
-+ attribute_names[i] = xmlTextReaderConstName (reader);
-+ attribute_values[i] = xmlTextReaderConstValue (reader);
-+ if (attribute_names[i] == NULL || attribute_values[i] == NULL)
-+ {
-+ _DBUS_MAYBE_SET_OOM (error);
-+ goto out;
-+ }
-+ i++;
-+ }
-+ if (status == -1)
-+ {
-+ _DBUS_MAYBE_SET_OOM (error);
-+ goto out;
-+ }
-+ _dbus_assert (i == n_attributes);
-+
-+ ret = bus_config_parser_start_element (parser, name,
-+ attribute_names, attribute_values,
-+ error);
-+ if (ret && is_empty == 1)
-+ ret = bus_config_parser_end_element (parser, name, error);
-+
-+ out:
-+ dbus_free (attribute_names);
-+ dbus_free (attribute_values);
-+
-+ return ret;
-+}
-+
-+static void xml_shut_up (void *ctx, const char *msg, ...)
-+{
-+ return;
-+}
-+
-+static void
-+xml_text_reader_error (void *arg, xmlErrorPtr xml_error)
-+{
-+ DBusError *error = arg;
-+
-+#if 0
-+ _dbus_verbose ("XML_ERROR level=%d, domain=%d, code=%d, msg=%s\n",
-+ xml_error->level, xml_error->domain,
-+ xml_error->code, xml_error->message);
-+#endif
-+
-+ if (!dbus_error_is_set (error))
-+ {
-+ if (xml_error->code == XML_ERR_NO_MEMORY)
-+ _DBUS_SET_OOM (error);
-+ else if (xml_error->level == XML_ERR_ERROR ||
-+ xml_error->level == XML_ERR_FATAL)
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Error loading config file: '%s'",
-+ xml_error->message);
-+ }
-+}
-+
-+
-+BusConfigParser*
-+bus_config_load (const DBusString *file,
-+ dbus_bool_t is_toplevel,
-+ const BusConfigParser *parent,
-+ DBusError *error)
-+
-+{
-+ xmlTextReader *reader;
-+ BusConfigParser *parser;
-+ DBusString dirname, data;
-+ DBusError tmp_error;
-+ int ret;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ parser = NULL;
-+ reader = NULL;
-+
-+ if (!_dbus_string_init (&dirname))
-+ {
-+ _DBUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_init (&data))
-+ {
-+ _DBUS_SET_OOM (error);
-+ _dbus_string_free (&dirname);
-+ return NULL;
-+ }
-+
-+ if (is_toplevel)
-+ {
-+ /* xmlMemSetup only fails if one of the functions is NULL */
-+ xmlMemSetup (dbus_free,
-+ dbus_malloc,
-+ dbus_realloc,
-+ _dbus_strdup);
-+ xmlInitParser ();
-+ xmlSetGenericErrorFunc (NULL, xml_shut_up);
-+ }
-+
-+ if (!_dbus_string_get_dirname (file, &dirname))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ parser = bus_config_parser_new (&dirname, is_toplevel, parent);
-+ if (parser == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_file_get_contents (&data, file, error))
-+ goto failed;
-+
-+ reader = xmlReaderForMemory (_dbus_string_get_const_data (&data),
-+ _dbus_string_get_length (&data),
-+ NULL, NULL, 0);
-+ if (reader == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ xmlTextReaderSetParserProp (reader, XML_PARSER_SUBST_ENTITIES, 1);
-+
-+ dbus_error_init (&tmp_error);
-+ xmlTextReaderSetStructuredErrorHandler (reader, xml_text_reader_error, &tmp_error);
-+
-+ while ((ret = xmlTextReaderRead (reader)) == 1)
-+ {
-+ int type;
-+
-+ if (dbus_error_is_set (&tmp_error))
-+ goto reader_out;
-+
-+ type = xmlTextReaderNodeType (reader);
-+ if (type == -1)
-+ {
-+ _DBUS_MAYBE_SET_OOM (&tmp_error);
-+ goto reader_out;
-+ }
-+
-+ switch ((xmlReaderTypes) type) {
-+ case XML_READER_TYPE_ELEMENT:
-+ xml_text_start_element (parser, reader, &tmp_error);
-+ break;
-+
-+ case XML_READER_TYPE_TEXT:
-+ case XML_READER_TYPE_CDATA:
-+ {
-+ DBusString content;
-+ const char *value;
-+ value = xmlTextReaderConstValue (reader);
-+ if (value != NULL)
-+ {
-+ _dbus_string_init_const (&content, value);
-+ bus_config_parser_content (parser, &content, &tmp_error);
-+ }
-+ else
-+ _DBUS_MAYBE_SET_OOM (&tmp_error);
-+ break;
-+ }
-+
-+ case XML_READER_TYPE_DOCUMENT_TYPE:
-+ {
-+ const char *name;
-+ name = xmlTextReaderConstName (reader);
-+ if (name != NULL)
-+ bus_config_parser_check_doctype (parser, name, &tmp_error);
-+ else
-+ _DBUS_MAYBE_SET_OOM (&tmp_error);
-+ break;
-+ }
-+
-+ case XML_READER_TYPE_END_ELEMENT:
-+ {
-+ const char *name;
-+ name = xmlTextReaderConstName (reader);
-+ if (name != NULL)
-+ bus_config_parser_end_element (parser, name, &tmp_error);
-+ else
-+ _DBUS_MAYBE_SET_OOM (&tmp_error);
-+ break;
-+ }
-+
-+ case XML_READER_TYPE_DOCUMENT:
-+ case XML_READER_TYPE_DOCUMENT_FRAGMENT:
-+ case XML_READER_TYPE_PROCESSING_INSTRUCTION:
-+ case XML_READER_TYPE_COMMENT:
-+ case XML_READER_TYPE_ENTITY:
-+ case XML_READER_TYPE_NOTATION:
-+ case XML_READER_TYPE_WHITESPACE:
-+ case XML_READER_TYPE_SIGNIFICANT_WHITESPACE:
-+ case XML_READER_TYPE_END_ENTITY:
-+ case XML_READER_TYPE_XML_DECLARATION:
-+ /* nothing to do, just read on */
-+ break;
-+
-+ case XML_READER_TYPE_NONE:
-+ case XML_READER_TYPE_ATTRIBUTE:
-+ case XML_READER_TYPE_ENTITY_REFERENCE:
-+ _dbus_assert_not_reached ("unexpected nodes in XML");
-+ }
-+
-+ if (dbus_error_is_set (&tmp_error))
-+ goto reader_out;
-+ }
-+
-+ if (ret == -1)
-+ _DBUS_MAYBE_SET_OOM (&tmp_error);
-+
-+ reader_out:
-+ xmlFreeTextReader (reader);
-+ reader = NULL;
-+ if (dbus_error_is_set (&tmp_error))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ goto failed;
-+ }
-+
-+ if (!bus_config_parser_finished (parser, error))
-+ goto failed;
-+ _dbus_string_free (&dirname);
-+ _dbus_string_free (&data);
-+ if (is_toplevel)
-+ xmlCleanupParser();
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ return parser;
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_string_free (&dirname);
-+ _dbus_string_free (&data);
-+ if (is_toplevel)
-+ xmlCleanupParser();
-+ if (parser)
-+ bus_config_parser_unref (parser);
-+ _dbus_assert (reader == NULL); /* must go to reader_out first */
-+ return NULL;
-+}
-diff -Naur dbus-0.61.orig/bus/config-parser.c dbus-0.61/bus/config-parser.c
---- dbus-0.61.orig/bus/config-parser.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/config-parser.c 2005-06-15 04:31:38.000000000 +0200
-@@ -0,0 +1,2987 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* config-parser.c XML-library-agnostic configuration file parser
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "config-parser.h"
-+#include "test.h"
-+#include "utils.h"
-+#include "policy.h"
-+#include "selinux.h"
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-internals.h>
-+#include <string.h>
-+
-+typedef enum
-+{
-+ ELEMENT_NONE,
-+ ELEMENT_BUSCONFIG,
-+ ELEMENT_INCLUDE,
-+ ELEMENT_USER,
-+ ELEMENT_LISTEN,
-+ ELEMENT_AUTH,
-+ ELEMENT_POLICY,
-+ ELEMENT_LIMIT,
-+ ELEMENT_ALLOW,
-+ ELEMENT_DENY,
-+ ELEMENT_FORK,
-+ ELEMENT_PIDFILE,
-+ ELEMENT_SERVICEDIR,
-+ ELEMENT_INCLUDEDIR,
-+ ELEMENT_TYPE,
-+ ELEMENT_SELINUX,
-+ ELEMENT_ASSOCIATE
-+} ElementType;
-+
-+typedef enum
-+{
-+ /* we ignore policies for unknown groups/users */
-+ POLICY_IGNORED,
-+
-+ /* non-ignored */
-+ POLICY_DEFAULT,
-+ POLICY_MANDATORY,
-+ POLICY_USER,
-+ POLICY_GROUP,
-+ POLICY_CONSOLE
-+} PolicyType;
-+
-+typedef struct
-+{
-+ ElementType type;
-+
-+ unsigned int had_content : 1;
-+
-+ union
-+ {
-+ struct
-+ {
-+ unsigned int ignore_missing : 1;
-+ unsigned int if_selinux_enabled : 1;
-+ unsigned int selinux_root_relative : 1;
-+ } include;
-+
-+ struct
-+ {
-+ PolicyType type;
-+ unsigned long gid_uid_or_at_console;
-+ } policy;
-+
-+ struct
-+ {
-+ char *name;
-+ long value;
-+ } limit;
-+
-+ } d;
-+
-+} Element;
-+
-+/**
-+ * Parser for bus configuration file.
-+ */
-+struct BusConfigParser
-+{
-+ int refcount; /**< Reference count */
-+
-+ DBusString basedir; /**< Directory we resolve paths relative to */
-+
-+ DBusList *stack; /**< stack of Element */
-+
-+ char *user; /**< user to run as */
-+
-+ char *bus_type; /**< Message bus type */
-+
-+ DBusList *listen_on; /**< List of addresses to listen to */
-+
-+ DBusList *mechanisms; /**< Auth mechanisms */
-+
-+ DBusList *service_dirs; /**< Directories to look for services in */
-+
-+ DBusList *conf_dirs; /**< Directories to look for policy configuration in */
-+
-+ BusPolicy *policy; /**< Security policy */
-+
-+ BusLimits limits; /**< Limits */
-+
-+ char *pidfile; /**< PID file */
-+
-+ DBusList *included_files; /**< Included files stack */
-+
-+ DBusHashTable *service_context_table; /**< Map service names to SELinux contexts */
-+
-+ unsigned int fork : 1; /**< TRUE to fork into daemon mode */
-+
-+ unsigned int is_toplevel : 1; /**< FALSE if we are a sub-config-file inside another one */
-+};
-+
-+static const char*
-+element_type_to_name (ElementType type)
-+{
-+ switch (type)
-+ {
-+ case ELEMENT_NONE:
-+ return NULL;
-+ case ELEMENT_BUSCONFIG:
-+ return "busconfig";
-+ case ELEMENT_INCLUDE:
-+ return "include";
-+ case ELEMENT_USER:
-+ return "user";
-+ case ELEMENT_LISTEN:
-+ return "listen";
-+ case ELEMENT_AUTH:
-+ return "auth";
-+ case ELEMENT_POLICY:
-+ return "policy";
-+ case ELEMENT_LIMIT:
-+ return "limit";
-+ case ELEMENT_ALLOW:
-+ return "allow";
-+ case ELEMENT_DENY:
-+ return "deny";
-+ case ELEMENT_FORK:
-+ return "fork";
-+ case ELEMENT_PIDFILE:
-+ return "pidfile";
-+ case ELEMENT_SERVICEDIR:
-+ return "servicedir";
-+ case ELEMENT_INCLUDEDIR:
-+ return "includedir";
-+ case ELEMENT_TYPE:
-+ return "type";
-+ case ELEMENT_SELINUX:
-+ return "selinux";
-+ case ELEMENT_ASSOCIATE:
-+ return "associate";
-+ }
-+
-+ _dbus_assert_not_reached ("bad element type");
-+
-+ return NULL;
-+}
-+
-+static Element*
-+push_element (BusConfigParser *parser,
-+ ElementType type)
-+{
-+ Element *e;
-+
-+ _dbus_assert (type != ELEMENT_NONE);
-+
-+ e = dbus_new0 (Element, 1);
-+ if (e == NULL)
-+ return NULL;
-+
-+ if (!_dbus_list_append (&parser->stack, e))
-+ {
-+ dbus_free (e);
-+ return NULL;
-+ }
-+
-+ e->type = type;
-+
-+ return e;
-+}
-+
-+static void
-+element_free (Element *e)
-+{
-+ if (e->type == ELEMENT_LIMIT)
-+ dbus_free (e->d.limit.name);
-+
-+ dbus_free (e);
-+}
-+
-+static void
-+pop_element (BusConfigParser *parser)
-+{
-+ Element *e;
-+
-+ e = _dbus_list_pop_last (&parser->stack);
-+
-+ element_free (e);
-+}
-+
-+static Element*
-+peek_element (BusConfigParser *parser)
-+{
-+ Element *e;
-+
-+ e = _dbus_list_get_last (&parser->stack);
-+
-+ return e;
-+}
-+
-+static ElementType
-+top_element_type (BusConfigParser *parser)
-+{
-+ Element *e;
-+
-+ e = _dbus_list_get_last (&parser->stack);
-+
-+ if (e)
-+ return e->type;
-+ else
-+ return ELEMENT_NONE;
-+}
-+
-+static dbus_bool_t
-+merge_service_context_hash (DBusHashTable *dest,
-+ DBusHashTable *from)
-+{
-+ DBusHashIter iter;
-+
-+ _dbus_hash_iter_init (from, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ const char *service = _dbus_hash_iter_get_string_key (&iter);
-+ const char *context = _dbus_hash_iter_get_value (&iter);
-+ char *service_copy;
-+ char *context_copy;
-+
-+ service_copy = _dbus_strdup (service);
-+ if (service_copy == NULL)
-+ return FALSE;
-+ context_copy = _dbus_strdup (context);
-+ if (context_copy == NULL)
-+ return FALSE;
-+
-+ if (!_dbus_hash_table_insert_string (dest, service_copy, context_copy))
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+merge_included (BusConfigParser *parser,
-+ BusConfigParser *included,
-+ DBusError *error)
-+{
-+ DBusList *link;
-+
-+ if (!bus_policy_merge (parser->policy,
-+ included->policy))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!merge_service_context_hash (parser->service_context_table,
-+ included->service_context_table))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (included->user != NULL)
-+ {
-+ dbus_free (parser->user);
-+ parser->user = included->user;
-+ included->user = NULL;
-+ }
-+
-+ if (included->bus_type != NULL)
-+ {
-+ dbus_free (parser->bus_type);
-+ parser->bus_type = included->bus_type;
-+ included->bus_type = NULL;
-+ }
-+
-+ if (included->fork)
-+ parser->fork = TRUE;
-+
-+ if (included->pidfile != NULL)
-+ {
-+ dbus_free (parser->pidfile);
-+ parser->pidfile = included->pidfile;
-+ included->pidfile = NULL;
-+ }
-+
-+ while ((link = _dbus_list_pop_first_link (&included->listen_on)))
-+ _dbus_list_append_link (&parser->listen_on, link);
-+
-+ while ((link = _dbus_list_pop_first_link (&included->mechanisms)))
-+ _dbus_list_append_link (&parser->mechanisms, link);
-+
-+ while ((link = _dbus_list_pop_first_link (&included->service_dirs)))
-+ _dbus_list_append_link (&parser->service_dirs, link);
-+
-+ while ((link = _dbus_list_pop_first_link (&included->conf_dirs)))
-+ _dbus_list_append_link (&parser->conf_dirs, link);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+seen_include (BusConfigParser *parser,
-+ const DBusString *file)
-+{
-+ DBusList *iter;
-+
-+ iter = parser->included_files;
-+ while (iter != NULL)
-+ {
-+ if (! strcmp (_dbus_string_get_const_data (file), iter->data))
-+ return TRUE;
-+
-+ iter = _dbus_list_get_next_link (&parser->included_files, iter);
-+ }
-+
-+ return FALSE;
-+}
-+
-+BusConfigParser*
-+bus_config_parser_new (const DBusString *basedir,
-+ dbus_bool_t is_toplevel,
-+ const BusConfigParser *parent)
-+{
-+ BusConfigParser *parser;
-+
-+ parser = dbus_new0 (BusConfigParser, 1);
-+ if (parser == NULL)
-+ return NULL;
-+
-+ parser->is_toplevel = !!is_toplevel;
-+
-+ if (!_dbus_string_init (&parser->basedir))
-+ {
-+ dbus_free (parser);
-+ return NULL;
-+ }
-+
-+ if (((parser->policy = bus_policy_new ()) == NULL) ||
-+ !_dbus_string_copy (basedir, 0, &parser->basedir, 0) ||
-+ ((parser->service_context_table = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ dbus_free,
-+ dbus_free)) == NULL))
-+ {
-+ if (parser->policy)
-+ bus_policy_unref (parser->policy);
-+
-+ _dbus_string_free (&parser->basedir);
-+
-+ dbus_free (parser);
-+ return NULL;
-+ }
-+
-+ if (parent != NULL)
-+ {
-+ /* Initialize the parser's limits from the parent. */
-+ parser->limits = parent->limits;
-+
-+ /* Use the parent's list of included_files to avoid
-+ circular inclusions. */
-+ parser->included_files = parent->included_files;
-+ }
-+ else
-+ {
-+
-+ /* Make up some numbers! woot! */
-+ parser->limits.max_incoming_bytes = _DBUS_ONE_MEGABYTE * 63;
-+ parser->limits.max_outgoing_bytes = _DBUS_ONE_MEGABYTE * 63;
-+ parser->limits.max_message_size = _DBUS_ONE_MEGABYTE * 32;
-+
-+ /* Making this long means the user has to wait longer for an error
-+ * message if something screws up, but making it too short means
-+ * they might see a false failure.
-+ */
-+ parser->limits.activation_timeout = 25000; /* 25 seconds */
-+
-+ /* Making this long risks making a DOS attack easier, but too short
-+ * and legitimate auth will fail. If interactive auth (ask user for
-+ * password) is allowed, then potentially it has to be quite long.
-+ */
-+ parser->limits.auth_timeout = 30000; /* 30 seconds */
-+
-+ parser->limits.max_incomplete_connections = 32;
-+ parser->limits.max_connections_per_user = 128;
-+
-+ /* Note that max_completed_connections / max_connections_per_user
-+ * is the number of users that would have to work together to
-+ * DOS all the other users.
-+ */
-+ parser->limits.max_completed_connections = 1024;
-+
-+ parser->limits.max_pending_activations = 256;
-+ parser->limits.max_services_per_connection = 256;
-+
-+ parser->limits.max_match_rules_per_connection = 512;
-+
-+ parser->limits.reply_timeout = 5 * 60 * 1000; /* 5 minutes */
-+ parser->limits.max_replies_per_connection = 32;
-+ }
-+
-+ parser->refcount = 1;
-+
-+ return parser;
-+}
-+
-+BusConfigParser *
-+bus_config_parser_ref (BusConfigParser *parser)
-+{
-+ _dbus_assert (parser->refcount > 0);
-+
-+ parser->refcount += 1;
-+
-+ return parser;
-+}
-+
-+void
-+bus_config_parser_unref (BusConfigParser *parser)
-+{
-+ _dbus_assert (parser->refcount > 0);
-+
-+ parser->refcount -= 1;
-+
-+ if (parser->refcount == 0)
-+ {
-+ while (parser->stack != NULL)
-+ pop_element (parser);
-+
-+ dbus_free (parser->user);
-+ dbus_free (parser->bus_type);
-+ dbus_free (parser->pidfile);
-+
-+ _dbus_list_foreach (&parser->listen_on,
-+ (DBusForeachFunction) dbus_free,
-+ NULL);
-+
-+ _dbus_list_clear (&parser->listen_on);
-+
-+ _dbus_list_foreach (&parser->service_dirs,
-+ (DBusForeachFunction) dbus_free,
-+ NULL);
-+
-+ _dbus_list_clear (&parser->service_dirs);
-+
-+ _dbus_list_foreach (&parser->conf_dirs,
-+ (DBusForeachFunction) dbus_free,
-+ NULL);
-+
-+ _dbus_list_clear (&parser->conf_dirs);
-+
-+ _dbus_list_foreach (&parser->mechanisms,
-+ (DBusForeachFunction) dbus_free,
-+ NULL);
-+
-+ _dbus_list_clear (&parser->mechanisms);
-+
-+ _dbus_string_free (&parser->basedir);
-+
-+ if (parser->policy)
-+ bus_policy_unref (parser->policy);
-+
-+ if (parser->service_context_table)
-+ _dbus_hash_table_unref (parser->service_context_table);
-+
-+ dbus_free (parser);
-+ }
-+}
-+
-+dbus_bool_t
-+bus_config_parser_check_doctype (BusConfigParser *parser,
-+ const char *doctype,
-+ DBusError *error)
-+{
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (strcmp (doctype, "busconfig") != 0)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_FAILED,
-+ "Configuration file has the wrong document type %s",
-+ doctype);
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+}
-+
-+typedef struct
-+{
-+ const char *name;
-+ const char **retloc;
-+} LocateAttr;
-+
-+static dbus_bool_t
-+locate_attributes (BusConfigParser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ DBusError *error,
-+ const char *first_attribute_name,
-+ const char **first_attribute_retloc,
-+ ...)
-+{
-+ va_list args;
-+ const char *name;
-+ const char **retloc;
-+ int n_attrs;
-+#define MAX_ATTRS 24
-+ LocateAttr attrs[MAX_ATTRS];
-+ dbus_bool_t retval;
-+ int i;
-+
-+ _dbus_assert (first_attribute_name != NULL);
-+ _dbus_assert (first_attribute_retloc != NULL);
-+
-+ retval = TRUE;
-+
-+ n_attrs = 1;
-+ attrs[0].name = first_attribute_name;
-+ attrs[0].retloc = first_attribute_retloc;
-+ *first_attribute_retloc = NULL;
-+
-+ va_start (args, first_attribute_retloc);
-+
-+ name = va_arg (args, const char*);
-+ retloc = va_arg (args, const char**);
-+
-+ while (name != NULL)
-+ {
-+ _dbus_assert (retloc != NULL);
-+ _dbus_assert (n_attrs < MAX_ATTRS);
-+
-+ attrs[n_attrs].name = name;
-+ attrs[n_attrs].retloc = retloc;
-+ n_attrs += 1;
-+ *retloc = NULL;
-+
-+ name = va_arg (args, const char*);
-+ retloc = va_arg (args, const char**);
-+ }
-+
-+ va_end (args);
-+
-+ if (!retval)
-+ return retval;
-+
-+ i = 0;
-+ while (attribute_names[i])
-+ {
-+ int j;
-+ dbus_bool_t found;
-+
-+ found = FALSE;
-+ j = 0;
-+ while (j < n_attrs)
-+ {
-+ if (strcmp (attrs[j].name, attribute_names[i]) == 0)
-+ {
-+ retloc = attrs[j].retloc;
-+
-+ if (*retloc != NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Attribute \"%s\" repeated twice on the same <%s> element",
-+ attrs[j].name, element_name);
-+ retval = FALSE;
-+ goto out;
-+ }
-+
-+ *retloc = attribute_values[i];
-+ found = TRUE;
-+ }
-+
-+ ++j;
-+ }
-+
-+ if (!found)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Attribute \"%s\" is invalid on <%s> element in this context",
-+ attribute_names[i], element_name);
-+ retval = FALSE;
-+ goto out;
-+ }
-+
-+ ++i;
-+ }
-+
-+ out:
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_no_attributes (BusConfigParser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ DBusError *error)
-+{
-+ if (attribute_names[0] != NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Attribute \"%s\" is invalid on <%s> element in this context",
-+ attribute_names[0], element_name);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+start_busconfig_child (BusConfigParser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ DBusError *error)
-+{
-+ if (strcmp (element_name, "user") == 0)
-+ {
-+ if (!check_no_attributes (parser, "user", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_USER) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "type") == 0)
-+ {
-+ if (!check_no_attributes (parser, "type", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_TYPE) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "fork") == 0)
-+ {
-+ if (!check_no_attributes (parser, "fork", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_FORK) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ parser->fork = TRUE;
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "pidfile") == 0)
-+ {
-+ if (!check_no_attributes (parser, "pidfile", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_PIDFILE) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "listen") == 0)
-+ {
-+ if (!check_no_attributes (parser, "listen", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_LISTEN) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "auth") == 0)
-+ {
-+ if (!check_no_attributes (parser, "auth", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_AUTH) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "includedir") == 0)
-+ {
-+ if (!check_no_attributes (parser, "includedir", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_INCLUDEDIR) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "servicedir") == 0)
-+ {
-+ if (!check_no_attributes (parser, "servicedir", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_SERVICEDIR) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "include") == 0)
-+ {
-+ Element *e;
-+ const char *if_selinux_enabled;
-+ const char *ignore_missing;
-+ const char *selinux_root_relative;
-+
-+ if ((e = push_element (parser, ELEMENT_INCLUDE)) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ e->d.include.ignore_missing = FALSE;
-+ e->d.include.if_selinux_enabled = FALSE;
-+ e->d.include.selinux_root_relative = FALSE;
-+
-+ if (!locate_attributes (parser, "include",
-+ attribute_names,
-+ attribute_values,
-+ error,
-+ "ignore_missing", &ignore_missing,
-+ "if_selinux_enabled", &if_selinux_enabled,
-+ "selinux_root_relative", &selinux_root_relative,
-+ NULL))
-+ return FALSE;
-+
-+ if (ignore_missing != NULL)
-+ {
-+ if (strcmp (ignore_missing, "yes") == 0)
-+ e->d.include.ignore_missing = TRUE;
-+ else if (strcmp (ignore_missing, "no") == 0)
-+ e->d.include.ignore_missing = FALSE;
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "ignore_missing attribute must have value \"yes\" or \"no\"");
-+ return FALSE;
-+ }
-+ }
-+
-+ if (if_selinux_enabled != NULL)
-+ {
-+ if (strcmp (if_selinux_enabled, "yes") == 0)
-+ e->d.include.if_selinux_enabled = TRUE;
-+ else if (strcmp (if_selinux_enabled, "no") == 0)
-+ e->d.include.if_selinux_enabled = FALSE;
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "if_selinux_enabled attribute must have value"
-+ " \"yes\" or \"no\"");
-+ return FALSE;
-+ }
-+ }
-+
-+ if (selinux_root_relative != NULL)
-+ {
-+ if (strcmp (selinux_root_relative, "yes") == 0)
-+ e->d.include.selinux_root_relative = TRUE;
-+ else if (strcmp (selinux_root_relative, "no") == 0)
-+ e->d.include.selinux_root_relative = FALSE;
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "selinux_root_relative attribute must have value"
-+ " \"yes\" or \"no\"");
-+ return FALSE;
-+ }
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "policy") == 0)
-+ {
-+ Element *e;
-+ const char *context;
-+ const char *user;
-+ const char *group;
-+ const char *at_console;
-+
-+ if ((e = push_element (parser, ELEMENT_POLICY)) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ e->d.policy.type = POLICY_IGNORED;
-+
-+ if (!locate_attributes (parser, "policy",
-+ attribute_names,
-+ attribute_values,
-+ error,
-+ "context", &context,
-+ "user", &user,
-+ "group", &group,
-+ "at_console", &at_console,
-+ NULL))
-+ return FALSE;
-+
-+ if (((context && user) ||
-+ (context && group) ||
-+ (context && at_console)) ||
-+ ((user && group) ||
-+ (user && at_console)) ||
-+ (group && at_console) ||
-+ !(context || user || group || at_console))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "<policy> element must have exactly one of (context|user|group|at_console) attributes");
-+ return FALSE;
-+ }
-+
-+ if (context != NULL)
-+ {
-+ if (strcmp (context, "default") == 0)
-+ {
-+ e->d.policy.type = POLICY_DEFAULT;
-+ }
-+ else if (strcmp (context, "mandatory") == 0)
-+ {
-+ e->d.policy.type = POLICY_MANDATORY;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "context attribute on <policy> must have the value \"default\" or \"mandatory\", not \"%s\"",
-+ context);
-+ return FALSE;
-+ }
-+ }
-+ else if (user != NULL)
-+ {
-+ DBusString username;
-+ _dbus_string_init_const (&username, user);
-+
-+ if (_dbus_get_user_id (&username,
-+ &e->d.policy.gid_uid_or_at_console))
-+ e->d.policy.type = POLICY_USER;
-+ else
-+ _dbus_warn ("Unknown username \"%s\" in message bus configuration file\n",
-+ user);
-+ }
-+ else if (group != NULL)
-+ {
-+ DBusString group_name;
-+ _dbus_string_init_const (&group_name, group);
-+
-+ if (_dbus_get_group_id (&group_name,
-+ &e->d.policy.gid_uid_or_at_console))
-+ e->d.policy.type = POLICY_GROUP;
-+ else
-+ _dbus_warn ("Unknown group \"%s\" in message bus configuration file\n",
-+ group);
-+ }
-+ else if (at_console != NULL)
-+ {
-+ dbus_bool_t t;
-+ t = (strcmp (at_console, "true") == 0);
-+ if (t || strcmp (at_console, "false") == 0)
-+ {
-+ e->d.policy.gid_uid_or_at_console = t;
-+ e->d.policy.type = POLICY_CONSOLE;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Unknown value \"%s\" for at_console in message bus configuration file",
-+ at_console);
-+
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_assert_not_reached ("all <policy> attributes null and we didn't set error");
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "limit") == 0)
-+ {
-+ Element *e;
-+ const char *name;
-+
-+ if ((e = push_element (parser, ELEMENT_LIMIT)) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!locate_attributes (parser, "limit",
-+ attribute_names,
-+ attribute_values,
-+ error,
-+ "name", &name,
-+ NULL))
-+ return FALSE;
-+
-+ if (name == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "<limit> element must have a \"name\" attribute");
-+ return FALSE;
-+ }
-+
-+ e->d.limit.name = _dbus_strdup (name);
-+ if (e->d.limit.name == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "selinux") == 0)
-+ {
-+ if (!check_no_attributes (parser, "selinux", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_SELINUX) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Element <%s> not allowed inside <%s> in configuration file",
-+ element_name, "busconfig");
-+ return FALSE;
-+ }
-+}
-+
-+static dbus_bool_t
-+append_rule_from_element (BusConfigParser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ dbus_bool_t allow,
-+ DBusError *error)
-+{
-+ const char *send_interface;
-+ const char *send_member;
-+ const char *send_error;
-+ const char *send_destination;
-+ const char *send_path;
-+ const char *send_type;
-+ const char *receive_interface;
-+ const char *receive_member;
-+ const char *receive_error;
-+ const char *receive_sender;
-+ const char *receive_path;
-+ const char *receive_type;
-+ const char *eavesdrop;
-+ const char *send_requested_reply;
-+ const char *receive_requested_reply;
-+ const char *own;
-+ const char *user;
-+ const char *group;
-+
-+ BusPolicyRule *rule;
-+
-+ if (!locate_attributes (parser, element_name,
-+ attribute_names,
-+ attribute_values,
-+ error,
-+ "send_interface", &send_interface,
-+ "send_member", &send_member,
-+ "send_error", &send_error,
-+ "send_destination", &send_destination,
-+ "send_path", &send_path,
-+ "send_type", &send_type,
-+ "receive_interface", &receive_interface,
-+ "receive_member", &receive_member,
-+ "receive_error", &receive_error,
-+ "receive_sender", &receive_sender,
-+ "receive_path", &receive_path,
-+ "receive_type", &receive_type,
-+ "eavesdrop", &eavesdrop,
-+ "send_requested_reply", &send_requested_reply,
-+ "receive_requested_reply", &receive_requested_reply,
-+ "own", &own,
-+ "user", &user,
-+ "group", &group,
-+ NULL))
-+ return FALSE;
-+
-+ if (!(send_interface || send_member || send_error || send_destination ||
-+ send_type || send_path ||
-+ receive_interface || receive_member || receive_error || receive_sender ||
-+ receive_type || receive_path || eavesdrop ||
-+ send_requested_reply || receive_requested_reply ||
-+ own || user || group))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Element <%s> must have one or more attributes",
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ if ((send_member && (send_interface == NULL && send_path == NULL)) ||
-+ (receive_member && (receive_interface == NULL && receive_path == NULL)))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "On element <%s>, if you specify a member you must specify an interface or a path. Keep in mind that not all messages have an interface field.",
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ /* Allowed combinations of elements are:
-+ *
-+ * base, must be all send or all receive:
-+ * nothing
-+ * interface
-+ * interface + member
-+ * error
-+ *
-+ * base send_ can combine with send_destination, send_path, send_type, send_requested_reply
-+ * base receive_ with receive_sender, receive_path, receive_type, receive_requested_reply, eavesdrop
-+ *
-+ * user, group, own must occur alone
-+ *
-+ * Pretty sure the below stuff is broken, FIXME think about it more.
-+ */
-+
-+ if (((send_interface && send_error) ||
-+ (send_interface && receive_interface) ||
-+ (send_interface && receive_member) ||
-+ (send_interface && receive_error) ||
-+ (send_interface && receive_sender) ||
-+ (send_interface && eavesdrop) ||
-+ (send_interface && receive_requested_reply) ||
-+ (send_interface && own) ||
-+ (send_interface && user) ||
-+ (send_interface && group)) ||
-+
-+ ((send_member && send_error) ||
-+ (send_member && receive_interface) ||
-+ (send_member && receive_member) ||
-+ (send_member && receive_error) ||
-+ (send_member && receive_sender) ||
-+ (send_member && eavesdrop) ||
-+ (send_member && receive_requested_reply) ||
-+ (send_member && own) ||
-+ (send_member && user) ||
-+ (send_member && group)) ||
-+
-+ ((send_error && receive_interface) ||
-+ (send_error && receive_member) ||
-+ (send_error && receive_error) ||
-+ (send_error && receive_sender) ||
-+ (send_error && eavesdrop) ||
-+ (send_error && receive_requested_reply) ||
-+ (send_error && own) ||
-+ (send_error && user) ||
-+ (send_error && group)) ||
-+
-+ ((send_destination && receive_interface) ||
-+ (send_destination && receive_member) ||
-+ (send_destination && receive_error) ||
-+ (send_destination && receive_sender) ||
-+ (send_destination && eavesdrop) ||
-+ (send_destination && receive_requested_reply) ||
-+ (send_destination && own) ||
-+ (send_destination && user) ||
-+ (send_destination && group)) ||
-+
-+ ((send_type && receive_interface) ||
-+ (send_type && receive_member) ||
-+ (send_type && receive_error) ||
-+ (send_type && receive_sender) ||
-+ (send_type && eavesdrop) ||
-+ (send_type && receive_requested_reply) ||
-+ (send_type && own) ||
-+ (send_type && user) ||
-+ (send_type && group)) ||
-+
-+ ((send_path && receive_interface) ||
-+ (send_path && receive_member) ||
-+ (send_path && receive_error) ||
-+ (send_path && receive_sender) ||
-+ (send_path && eavesdrop) ||
-+ (send_path && receive_requested_reply) ||
-+ (send_path && own) ||
-+ (send_path && user) ||
-+ (send_path && group)) ||
-+
-+ ((send_requested_reply && receive_interface) ||
-+ (send_requested_reply && receive_member) ||
-+ (send_requested_reply && receive_error) ||
-+ (send_requested_reply && receive_sender) ||
-+ (send_requested_reply && eavesdrop) ||
-+ (send_requested_reply && receive_requested_reply) ||
-+ (send_requested_reply && own) ||
-+ (send_requested_reply && user) ||
-+ (send_requested_reply && group)) ||
-+
-+ ((receive_interface && receive_error) ||
-+ (receive_interface && own) ||
-+ (receive_interface && user) ||
-+ (receive_interface && group)) ||
-+
-+ ((receive_member && receive_error) ||
-+ (receive_member && own) ||
-+ (receive_member && user) ||
-+ (receive_member && group)) ||
-+
-+ ((receive_error && own) ||
-+ (receive_error && user) ||
-+ (receive_error && group)) ||
-+
-+ ((eavesdrop && own) ||
-+ (eavesdrop && user) ||
-+ (eavesdrop && group)) ||
-+
-+ ((receive_requested_reply && own) ||
-+ (receive_requested_reply && user) ||
-+ (receive_requested_reply && group)) ||
-+
-+ ((own && user) ||
-+ (own && group)) ||
-+
-+ ((user && group)))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Invalid combination of attributes on element <%s>",
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ rule = NULL;
-+
-+ /* In BusPolicyRule, NULL represents wildcard.
-+ * In the config file, '*' represents it.
-+ */
-+#define IS_WILDCARD(str) ((str) && ((str)[0]) == '*' && ((str)[1]) == '\0')
-+
-+ if (send_interface || send_member || send_error || send_destination ||
-+ send_path || send_type || send_requested_reply)
-+ {
-+ int message_type;
-+
-+ if (IS_WILDCARD (send_interface))
-+ send_interface = NULL;
-+ if (IS_WILDCARD (send_member))
-+ send_member = NULL;
-+ if (IS_WILDCARD (send_error))
-+ send_error = NULL;
-+ if (IS_WILDCARD (send_destination))
-+ send_destination = NULL;
-+ if (IS_WILDCARD (send_path))
-+ send_path = NULL;
-+ if (IS_WILDCARD (send_type))
-+ send_type = NULL;
-+
-+ message_type = DBUS_MESSAGE_TYPE_INVALID;
-+ if (send_type != NULL)
-+ {
-+ message_type = dbus_message_type_from_string (send_type);
-+ if (message_type == DBUS_MESSAGE_TYPE_INVALID)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Bad message type \"%s\"",
-+ send_type);
-+ return FALSE;
-+ }
-+ }
-+
-+ if (send_requested_reply &&
-+ !(strcmp (send_requested_reply, "true") == 0 ||
-+ strcmp (send_requested_reply, "false") == 0))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Bad value \"%s\" for %s attribute, must be true or false",
-+ "send_requested_reply", send_requested_reply);
-+ return FALSE;
-+ }
-+
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_SEND, allow);
-+ if (rule == NULL)
-+ goto nomem;
-+
-+ if (send_requested_reply)
-+ rule->d.send.requested_reply = (strcmp (send_requested_reply, "true") == 0);
-+
-+ rule->d.send.message_type = message_type;
-+ rule->d.send.path = _dbus_strdup (send_path);
-+ rule->d.send.interface = _dbus_strdup (send_interface);
-+ rule->d.send.member = _dbus_strdup (send_member);
-+ rule->d.send.error = _dbus_strdup (send_error);
-+ rule->d.send.destination = _dbus_strdup (send_destination);
-+ if (send_path && rule->d.send.path == NULL)
-+ goto nomem;
-+ if (send_interface && rule->d.send.interface == NULL)
-+ goto nomem;
-+ if (send_member && rule->d.send.member == NULL)
-+ goto nomem;
-+ if (send_error && rule->d.send.error == NULL)
-+ goto nomem;
-+ if (send_destination && rule->d.send.destination == NULL)
-+ goto nomem;
-+ }
-+ else if (receive_interface || receive_member || receive_error || receive_sender ||
-+ receive_path || receive_type || eavesdrop || receive_requested_reply)
-+ {
-+ int message_type;
-+
-+ if (IS_WILDCARD (receive_interface))
-+ receive_interface = NULL;
-+ if (IS_WILDCARD (receive_member))
-+ receive_member = NULL;
-+ if (IS_WILDCARD (receive_error))
-+ receive_error = NULL;
-+ if (IS_WILDCARD (receive_sender))
-+ receive_sender = NULL;
-+ if (IS_WILDCARD (receive_path))
-+ receive_path = NULL;
-+ if (IS_WILDCARD (receive_type))
-+ receive_type = NULL;
-+
-+ message_type = DBUS_MESSAGE_TYPE_INVALID;
-+ if (receive_type != NULL)
-+ {
-+ message_type = dbus_message_type_from_string (receive_type);
-+ if (message_type == DBUS_MESSAGE_TYPE_INVALID)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Bad message type \"%s\"",
-+ receive_type);
-+ return FALSE;
-+ }
-+ }
-+
-+
-+ if (eavesdrop &&
-+ !(strcmp (eavesdrop, "true") == 0 ||
-+ strcmp (eavesdrop, "false") == 0))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Bad value \"%s\" for %s attribute, must be true or false",
-+ "eavesdrop", eavesdrop);
-+ return FALSE;
-+ }
-+
-+ if (receive_requested_reply &&
-+ !(strcmp (receive_requested_reply, "true") == 0 ||
-+ strcmp (receive_requested_reply, "false") == 0))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Bad value \"%s\" for %s attribute, must be true or false",
-+ "receive_requested_reply", receive_requested_reply);
-+ return FALSE;
-+ }
-+
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_RECEIVE, allow);
-+ if (rule == NULL)
-+ goto nomem;
-+
-+ if (eavesdrop)
-+ rule->d.receive.eavesdrop = (strcmp (eavesdrop, "true") == 0);
-+
-+ if (receive_requested_reply)
-+ rule->d.receive.requested_reply = (strcmp (receive_requested_reply, "true") == 0);
-+
-+ rule->d.receive.message_type = message_type;
-+ rule->d.receive.path = _dbus_strdup (receive_path);
-+ rule->d.receive.interface = _dbus_strdup (receive_interface);
-+ rule->d.receive.member = _dbus_strdup (receive_member);
-+ rule->d.receive.error = _dbus_strdup (receive_error);
-+ rule->d.receive.origin = _dbus_strdup (receive_sender);
-+
-+ if (receive_path && rule->d.receive.path == NULL)
-+ goto nomem;
-+ if (receive_interface && rule->d.receive.interface == NULL)
-+ goto nomem;
-+ if (receive_member && rule->d.receive.member == NULL)
-+ goto nomem;
-+ if (receive_error && rule->d.receive.error == NULL)
-+ goto nomem;
-+ if (receive_sender && rule->d.receive.origin == NULL)
-+ goto nomem;
-+ }
-+ else if (own)
-+ {
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_OWN, allow);
-+ if (rule == NULL)
-+ goto nomem;
-+
-+ if (IS_WILDCARD (own))
-+ own = NULL;
-+
-+ rule->d.own.service_name = _dbus_strdup (own);
-+ if (own && rule->d.own.service_name == NULL)
-+ goto nomem;
-+ }
-+ else if (user)
-+ {
-+ if (IS_WILDCARD (user))
-+ {
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, allow);
-+ if (rule == NULL)
-+ goto nomem;
-+
-+ rule->d.user.uid = DBUS_UID_UNSET;
-+ }
-+ else
-+ {
-+ DBusString username;
-+ dbus_uid_t uid;
-+
-+ _dbus_string_init_const (&username, user);
-+
-+ if (_dbus_get_user_id (&username, &uid))
-+ {
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_USER, allow);
-+ if (rule == NULL)
-+ goto nomem;
-+
-+ rule->d.user.uid = uid;
-+ }
-+ else
-+ {
-+ _dbus_warn ("Unknown username \"%s\" on element <%s>\n",
-+ user, element_name);
-+ }
-+ }
-+ }
-+ else if (group)
-+ {
-+ if (IS_WILDCARD (group))
-+ {
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, allow);
-+ if (rule == NULL)
-+ goto nomem;
-+
-+ rule->d.group.gid = DBUS_GID_UNSET;
-+ }
-+ else
-+ {
-+ DBusString groupname;
-+ dbus_gid_t gid;
-+
-+ _dbus_string_init_const (&groupname, group);
-+
-+ if (_dbus_get_user_id (&groupname, &gid))
-+ {
-+ rule = bus_policy_rule_new (BUS_POLICY_RULE_GROUP, allow);
-+ if (rule == NULL)
-+ goto nomem;
-+
-+ rule->d.group.gid = gid;
-+ }
-+ else
-+ {
-+ _dbus_warn ("Unknown group \"%s\" on element <%s>\n",
-+ group, element_name);
-+ }
-+ }
-+ }
-+ else
-+ _dbus_assert_not_reached ("Did not handle some combination of attributes on <allow> or <deny>");
-+
-+ if (rule != NULL)
-+ {
-+ Element *pe;
-+
-+ pe = peek_element (parser);
-+ _dbus_assert (pe != NULL);
-+ _dbus_assert (pe->type == ELEMENT_POLICY);
-+
-+ switch (pe->d.policy.type)
-+ {
-+ case POLICY_IGNORED:
-+ /* drop the rule on the floor */
-+ break;
-+
-+ case POLICY_DEFAULT:
-+ if (!bus_policy_append_default_rule (parser->policy, rule))
-+ goto nomem;
-+ break;
-+ case POLICY_MANDATORY:
-+ if (!bus_policy_append_mandatory_rule (parser->policy, rule))
-+ goto nomem;
-+ break;
-+ case POLICY_USER:
-+ if (!BUS_POLICY_RULE_IS_PER_CLIENT (rule))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "<%s> rule cannot be per-user because it has bus-global semantics",
-+ element_name);
-+ goto failed;
-+ }
-+
-+ if (!bus_policy_append_user_rule (parser->policy, pe->d.policy.gid_uid_or_at_console,
-+ rule))
-+ goto nomem;
-+ break;
-+ case POLICY_GROUP:
-+ if (!BUS_POLICY_RULE_IS_PER_CLIENT (rule))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "<%s> rule cannot be per-group because it has bus-global semantics",
-+ element_name);
-+ goto failed;
-+ }
-+
-+ if (!bus_policy_append_group_rule (parser->policy, pe->d.policy.gid_uid_or_at_console,
-+ rule))
-+ goto nomem;
-+ break;
-+
-+
-+ case POLICY_CONSOLE:
-+ if (!bus_policy_append_console_rule (parser->policy, pe->d.policy.gid_uid_or_at_console,
-+ rule))
-+ goto nomem;
-+ break;
-+ }
-+
-+ bus_policy_rule_unref (rule);
-+ rule = NULL;
-+ }
-+
-+ return TRUE;
-+
-+ nomem:
-+ BUS_SET_OOM (error);
-+ failed:
-+ if (rule)
-+ bus_policy_rule_unref (rule);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+start_policy_child (BusConfigParser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ DBusError *error)
-+{
-+ if (strcmp (element_name, "allow") == 0)
-+ {
-+ if (!append_rule_from_element (parser, element_name,
-+ attribute_names, attribute_values,
-+ TRUE, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_ALLOW) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (strcmp (element_name, "deny") == 0)
-+ {
-+ if (!append_rule_from_element (parser, element_name,
-+ attribute_names, attribute_values,
-+ FALSE, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_DENY) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Element <%s> not allowed inside <%s> in configuration file",
-+ element_name, "policy");
-+ return FALSE;
-+ }
-+}
-+
-+static dbus_bool_t
-+start_selinux_child (BusConfigParser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ DBusError *error)
-+{
-+ if (strcmp (element_name, "associate") == 0)
-+ {
-+ const char *own;
-+ const char *context;
-+ char *own_copy;
-+ char *context_copy;
-+
-+ if (!locate_attributes (parser, "associate",
-+ attribute_names,
-+ attribute_values,
-+ error,
-+ "own", &own,
-+ "context", &context,
-+ NULL))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_ASSOCIATE) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (own == NULL || context == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Element <associate> must have attributes own=\"<servicename>\" and context=\"<selinux context>\"");
-+ return FALSE;
-+ }
-+
-+ own_copy = _dbus_strdup (own);
-+ if (own_copy == NULL)
-+ return FALSE;
-+ context_copy = _dbus_strdup (context);
-+ if (context_copy == NULL)
-+ return FALSE;
-+
-+ if (!_dbus_hash_table_insert_string (parser->service_context_table,
-+ own_copy, context_copy))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Element <%s> not allowed inside <%s> in configuration file",
-+ element_name, "selinux");
-+ return FALSE;
-+ }
-+}
-+
-+dbus_bool_t
-+bus_config_parser_start_element (BusConfigParser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ DBusError *error)
-+{
-+ ElementType t;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* printf ("START: %s\n", element_name); */
-+
-+ t = top_element_type (parser);
-+
-+ if (t == ELEMENT_NONE)
-+ {
-+ if (strcmp (element_name, "busconfig") == 0)
-+ {
-+ if (!check_no_attributes (parser, "busconfig", attribute_names, attribute_values, error))
-+ return FALSE;
-+
-+ if (push_element (parser, ELEMENT_BUSCONFIG) == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Unknown element <%s> at root of configuration file",
-+ element_name);
-+ return FALSE;
-+ }
-+ }
-+ else if (t == ELEMENT_BUSCONFIG)
-+ {
-+ return start_busconfig_child (parser, element_name,
-+ attribute_names, attribute_values,
-+ error);
-+ }
-+ else if (t == ELEMENT_POLICY)
-+ {
-+ return start_policy_child (parser, element_name,
-+ attribute_names, attribute_values,
-+ error);
-+ }
-+ else if (t == ELEMENT_SELINUX)
-+ {
-+ return start_selinux_child (parser, element_name,
-+ attribute_names, attribute_values,
-+ error);
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Element <%s> is not allowed in this context",
-+ element_name);
-+ return FALSE;
-+ }
-+}
-+
-+static dbus_bool_t
-+set_limit (BusConfigParser *parser,
-+ const char *name,
-+ long value,
-+ DBusError *error)
-+{
-+ dbus_bool_t must_be_positive;
-+ dbus_bool_t must_be_int;
-+
-+ must_be_int = FALSE;
-+ must_be_positive = FALSE;
-+
-+ if (strcmp (name, "max_incoming_bytes") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ parser->limits.max_incoming_bytes = value;
-+ }
-+ else if (strcmp (name, "max_outgoing_bytes") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ parser->limits.max_outgoing_bytes = value;
-+ }
-+ else if (strcmp (name, "max_message_size") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ parser->limits.max_message_size = value;
-+ }
-+ else if (strcmp (name, "service_start_timeout") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.activation_timeout = value;
-+ }
-+ else if (strcmp (name, "auth_timeout") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.auth_timeout = value;
-+ }
-+ else if (strcmp (name, "reply_timeout") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.reply_timeout = value;
-+ }
-+ else if (strcmp (name, "max_completed_connections") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.max_completed_connections = value;
-+ }
-+ else if (strcmp (name, "max_incomplete_connections") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.max_incomplete_connections = value;
-+ }
-+ else if (strcmp (name, "max_connections_per_user") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.max_connections_per_user = value;
-+ }
-+ else if (strcmp (name, "max_pending_service_starts") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.max_pending_activations = value;
-+ }
-+ else if (strcmp (name, "max_names_per_connection") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.max_services_per_connection = value;
-+ }
-+ else if (strcmp (name, "max_match_rules_per_connection") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.max_match_rules_per_connection = value;
-+ }
-+ else if (strcmp (name, "max_replies_per_connection") == 0)
-+ {
-+ must_be_positive = TRUE;
-+ must_be_int = TRUE;
-+ parser->limits.max_replies_per_connection = value;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "There is no limit called \"%s\"\n",
-+ name);
-+ return FALSE;
-+ }
-+
-+ if (must_be_positive && value < 0)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "<limit name=\"%s\"> must be a positive number\n",
-+ name);
-+ return FALSE;
-+ }
-+
-+ if (must_be_int &&
-+ (value < _DBUS_INT_MIN || value > _DBUS_INT_MAX))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "<limit name=\"%s\"> value is too large\n",
-+ name);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_config_parser_end_element (BusConfigParser *parser,
-+ const char *element_name,
-+ DBusError *error)
-+{
-+ ElementType t;
-+ const char *n;
-+ Element *e;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* printf ("END: %s\n", element_name); */
-+
-+ t = top_element_type (parser);
-+
-+ if (t == ELEMENT_NONE)
-+ {
-+ /* should probably be an assertion failure but
-+ * being paranoid about XML parsers
-+ */
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "XML parser ended element with no element on the stack");
-+ return FALSE;
-+ }
-+
-+ n = element_type_to_name (t);
-+ _dbus_assert (n != NULL);
-+ if (strcmp (n, element_name) != 0)
-+ {
-+ /* should probably be an assertion failure but
-+ * being paranoid about XML parsers
-+ */
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "XML element <%s> ended but topmost element on the stack was <%s>",
-+ element_name, n);
-+ return FALSE;
-+ }
-+
-+ e = peek_element (parser);
-+ _dbus_assert (e != NULL);
-+
-+ switch (e->type)
-+ {
-+ case ELEMENT_NONE:
-+ _dbus_assert_not_reached ("element in stack has no type");
-+ break;
-+
-+ case ELEMENT_INCLUDE:
-+ case ELEMENT_USER:
-+ case ELEMENT_TYPE:
-+ case ELEMENT_LISTEN:
-+ case ELEMENT_PIDFILE:
-+ case ELEMENT_AUTH:
-+ case ELEMENT_SERVICEDIR:
-+ case ELEMENT_INCLUDEDIR:
-+ case ELEMENT_LIMIT:
-+ if (!e->had_content)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "XML element <%s> was expected to have content inside it",
-+ element_type_to_name (e->type));
-+ return FALSE;
-+ }
-+
-+ if (e->type == ELEMENT_LIMIT)
-+ {
-+ if (!set_limit (parser, e->d.limit.name, e->d.limit.value,
-+ error))
-+ return FALSE;
-+ }
-+ break;
-+
-+ case ELEMENT_BUSCONFIG:
-+ case ELEMENT_POLICY:
-+ case ELEMENT_ALLOW:
-+ case ELEMENT_DENY:
-+ case ELEMENT_FORK:
-+ case ELEMENT_SELINUX:
-+ case ELEMENT_ASSOCIATE:
-+ break;
-+ }
-+
-+ pop_element (parser);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+all_whitespace (const DBusString *str)
-+{
-+ int i;
-+
-+ _dbus_string_skip_white (str, 0, &i);
-+
-+ return i == _dbus_string_get_length (str);
-+}
-+
-+static dbus_bool_t
-+make_full_path (const DBusString *basedir,
-+ const DBusString *filename,
-+ DBusString *full_path)
-+{
-+ if (_dbus_path_is_absolute (filename))
-+ {
-+ return _dbus_string_copy (filename, 0, full_path, 0);
-+ }
-+ else
-+ {
-+ if (!_dbus_string_copy (basedir, 0, full_path, 0))
-+ return FALSE;
-+
-+ if (!_dbus_concat_dir_and_file (full_path, filename))
-+ return FALSE;
-+
-+ return TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+include_file (BusConfigParser *parser,
-+ const DBusString *filename,
-+ dbus_bool_t ignore_missing,
-+ DBusError *error)
-+{
-+ /* FIXME good test case for this would load each config file in the
-+ * test suite both alone, and as an include, and check
-+ * that the result is the same
-+ */
-+ BusConfigParser *included;
-+ const char *filename_str;
-+ DBusError tmp_error;
-+
-+ dbus_error_init (&tmp_error);
-+
-+ filename_str = _dbus_string_get_const_data (filename);
-+
-+ /* Check to make sure this file hasn't already been included. */
-+ if (seen_include (parser, filename))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Circular inclusion of file '%s'",
-+ filename_str);
-+ return FALSE;
-+ }
-+
-+ if (! _dbus_list_append (&parser->included_files, (void *) filename_str))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ /* Since parser is passed in as the parent, included
-+ inherits parser's limits. */
-+ included = bus_config_load (filename, FALSE, parser, &tmp_error);
-+
-+ _dbus_list_pop_last (&parser->included_files);
-+
-+ if (included == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&tmp_error);
-+
-+ if (dbus_error_has_name (&tmp_error, DBUS_ERROR_FILE_NOT_FOUND) &&
-+ ignore_missing)
-+ {
-+ dbus_error_free (&tmp_error);
-+ return TRUE;
-+ }
-+ else
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (&tmp_error);
-+
-+ if (!merge_included (parser, included, error))
-+ {
-+ bus_config_parser_unref (included);
-+ return FALSE;
-+ }
-+
-+ /* Copy included's limits back to parser. */
-+ parser->limits = included->limits;
-+
-+ bus_config_parser_unref (included);
-+ return TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+include_dir (BusConfigParser *parser,
-+ const DBusString *dirname,
-+ DBusError *error)
-+{
-+ DBusString filename;
-+ dbus_bool_t retval;
-+ DBusError tmp_error;
-+ DBusDirIter *dir;
-+ char *s;
-+
-+ if (!_dbus_string_init (&filename))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ retval = FALSE;
-+
-+ dir = _dbus_directory_open (dirname, error);
-+
-+ if (dir == NULL)
-+ goto failed;
-+
-+ dbus_error_init (&tmp_error);
-+ while (_dbus_directory_get_next_file (dir, &filename, &tmp_error))
-+ {
-+ DBusString full_path;
-+
-+ if (!_dbus_string_init (&full_path))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_string_copy (dirname, 0, &full_path, 0))
-+ {
-+ BUS_SET_OOM (error);
-+ _dbus_string_free (&full_path);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_concat_dir_and_file (&full_path, &filename))
-+ {
-+ BUS_SET_OOM (error);
-+ _dbus_string_free (&full_path);
-+ goto failed;
-+ }
-+
-+ if (_dbus_string_ends_with_c_str (&full_path, ".conf"))
-+ {
-+ if (!include_file (parser, &full_path, TRUE, error))
-+ {
-+ _dbus_string_free (&full_path);
-+ goto failed;
-+ }
-+ }
-+
-+ _dbus_string_free (&full_path);
-+ }
-+
-+ if (dbus_error_is_set (&tmp_error))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ goto failed;
-+ }
-+
-+
-+ if (!_dbus_string_copy_data (dirname, &s))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_list_append (&parser->conf_dirs, s))
-+ {
-+ dbus_free (s);
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ retval = TRUE;
-+
-+ failed:
-+ _dbus_string_free (&filename);
-+
-+ if (dir)
-+ _dbus_directory_close (dir);
-+
-+ return retval;
-+}
-+
-+dbus_bool_t
-+bus_config_parser_content (BusConfigParser *parser,
-+ const DBusString *content,
-+ DBusError *error)
-+{
-+ Element *e;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+#if 0
-+ {
-+ const char *c_str;
-+
-+ _dbus_string_get_const_data (content, &c_str);
-+
-+ printf ("CONTENT %d bytes: %s\n", _dbus_string_get_length (content), c_str);
-+ }
-+#endif
-+
-+ e = peek_element (parser);
-+ if (e == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Text content outside of any XML element in configuration file");
-+ return FALSE;
-+ }
-+ else if (e->had_content)
-+ {
-+ _dbus_assert_not_reached ("Element had multiple content blocks");
-+ return FALSE;
-+ }
-+
-+ switch (top_element_type (parser))
-+ {
-+ case ELEMENT_NONE:
-+ _dbus_assert_not_reached ("element at top of stack has no type");
-+ return FALSE;
-+
-+ case ELEMENT_BUSCONFIG:
-+ case ELEMENT_POLICY:
-+ case ELEMENT_ALLOW:
-+ case ELEMENT_DENY:
-+ case ELEMENT_FORK:
-+ case ELEMENT_SELINUX:
-+ case ELEMENT_ASSOCIATE:
-+ if (all_whitespace (content))
-+ return TRUE;
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "No text content expected inside XML element %s in configuration file",
-+ element_type_to_name (top_element_type (parser)));
-+ return FALSE;
-+ }
-+
-+ case ELEMENT_PIDFILE:
-+ {
-+ char *s;
-+
-+ e->had_content = TRUE;
-+
-+ if (!_dbus_string_copy_data (content, &s))
-+ goto nomem;
-+
-+ dbus_free (parser->pidfile);
-+ parser->pidfile = s;
-+ }
-+ break;
-+
-+ case ELEMENT_INCLUDE:
-+ {
-+ DBusString full_path, selinux_policy_root;
-+
-+ e->had_content = TRUE;
-+
-+ if (e->d.include.if_selinux_enabled
-+ && !bus_selinux_enabled ())
-+ break;
-+
-+ if (!_dbus_string_init (&full_path))
-+ goto nomem;
-+
-+ if (e->d.include.selinux_root_relative)
-+ {
-+ if (!bus_selinux_get_policy_root ())
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Could not determine SELinux policy root for relative inclusion");
-+ _dbus_string_free (&full_path);
-+ return FALSE;
-+ }
-+ _dbus_string_init_const (&selinux_policy_root,
-+ bus_selinux_get_policy_root ());
-+ if (!make_full_path (&selinux_policy_root, content, &full_path))
-+ {
-+ _dbus_string_free (&full_path);
-+ goto nomem;
-+ }
-+ }
-+ else if (!make_full_path (&parser->basedir, content, &full_path))
-+ {
-+ _dbus_string_free (&full_path);
-+ goto nomem;
-+ }
-+
-+ if (!include_file (parser, &full_path,
-+ e->d.include.ignore_missing, error))
-+ {
-+ _dbus_string_free (&full_path);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&full_path);
-+ }
-+ break;
-+
-+ case ELEMENT_INCLUDEDIR:
-+ {
-+ DBusString full_path;
-+
-+ e->had_content = TRUE;
-+
-+ if (!_dbus_string_init (&full_path))
-+ goto nomem;
-+
-+ if (!make_full_path (&parser->basedir, content, &full_path))
-+ {
-+ _dbus_string_free (&full_path);
-+ goto nomem;
-+ }
-+
-+ if (!include_dir (parser, &full_path, error))
-+ {
-+ _dbus_string_free (&full_path);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&full_path);
-+ }
-+ break;
-+
-+ case ELEMENT_USER:
-+ {
-+ char *s;
-+
-+ e->had_content = TRUE;
-+
-+ if (!_dbus_string_copy_data (content, &s))
-+ goto nomem;
-+
-+ dbus_free (parser->user);
-+ parser->user = s;
-+ }
-+ break;
-+
-+ case ELEMENT_TYPE:
-+ {
-+ char *s;
-+
-+ e->had_content = TRUE;
-+
-+ if (!_dbus_string_copy_data (content, &s))
-+ goto nomem;
-+
-+ dbus_free (parser->bus_type);
-+ parser->bus_type = s;
-+ }
-+ break;
-+
-+ case ELEMENT_LISTEN:
-+ {
-+ char *s;
-+
-+ e->had_content = TRUE;
-+
-+ if (!_dbus_string_copy_data (content, &s))
-+ goto nomem;
-+
-+ if (!_dbus_list_append (&parser->listen_on,
-+ s))
-+ {
-+ dbus_free (s);
-+ goto nomem;
-+ }
-+ }
-+ break;
-+
-+ case ELEMENT_AUTH:
-+ {
-+ char *s;
-+
-+ e->had_content = TRUE;
-+
-+ if (!_dbus_string_copy_data (content, &s))
-+ goto nomem;
-+
-+ if (!_dbus_list_append (&parser->mechanisms,
-+ s))
-+ {
-+ dbus_free (s);
-+ goto nomem;
-+ }
-+ }
-+ break;
-+
-+ case ELEMENT_SERVICEDIR:
-+ {
-+ char *s;
-+ DBusString full_path;
-+
-+ e->had_content = TRUE;
-+
-+ if (!_dbus_string_init (&full_path))
-+ goto nomem;
-+
-+ if (!make_full_path (&parser->basedir, content, &full_path))
-+ {
-+ _dbus_string_free (&full_path);
-+ goto nomem;
-+ }
-+
-+ if (!_dbus_string_copy_data (&full_path, &s))
-+ {
-+ _dbus_string_free (&full_path);
-+ goto nomem;
-+ }
-+
-+ if (!_dbus_list_append (&parser->service_dirs, s))
-+ {
-+ _dbus_string_free (&full_path);
-+ dbus_free (s);
-+ goto nomem;
-+ }
-+
-+ _dbus_string_free (&full_path);
-+ }
-+ break;
-+
-+ case ELEMENT_LIMIT:
-+ {
-+ long val;
-+
-+ e->had_content = TRUE;
-+
-+ val = 0;
-+ if (!_dbus_string_parse_int (content, 0, &val, NULL))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "<limit name=\"%s\"> element has invalid value (could not parse as integer)",
-+ e->d.limit.name);
-+ return FALSE;
-+ }
-+
-+ e->d.limit.value = val;
-+
-+ _dbus_verbose ("Loaded value %ld for limit %s\n",
-+ e->d.limit.value,
-+ e->d.limit.name);
-+ }
-+ break;
-+ }
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ return TRUE;
-+
-+ nomem:
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+}
-+
-+dbus_bool_t
-+bus_config_parser_finished (BusConfigParser *parser,
-+ DBusError *error)
-+{
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (parser->stack != NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Element <%s> was not closed in configuration file",
-+ element_type_to_name (top_element_type (parser)));
-+
-+ return FALSE;
-+ }
-+
-+ if (parser->is_toplevel && parser->listen_on == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Configuration file needs one or more <listen> elements giving addresses");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+const char*
-+bus_config_parser_get_user (BusConfigParser *parser)
-+{
-+ return parser->user;
-+}
-+
-+const char*
-+bus_config_parser_get_type (BusConfigParser *parser)
-+{
-+ return parser->bus_type;
-+}
-+
-+DBusList**
-+bus_config_parser_get_addresses (BusConfigParser *parser)
-+{
-+ return &parser->listen_on;
-+}
-+
-+DBusList**
-+bus_config_parser_get_mechanisms (BusConfigParser *parser)
-+{
-+ return &parser->mechanisms;
-+}
-+
-+DBusList**
-+bus_config_parser_get_service_dirs (BusConfigParser *parser)
-+{
-+ return &parser->service_dirs;
-+}
-+
-+DBusList**
-+bus_config_parser_get_conf_dirs (BusConfigParser *parser)
-+{
-+ return &parser->conf_dirs;
-+}
-+
-+dbus_bool_t
-+bus_config_parser_get_fork (BusConfigParser *parser)
-+{
-+ return parser->fork;
-+}
-+
-+const char *
-+bus_config_parser_get_pidfile (BusConfigParser *parser)
-+{
-+ return parser->pidfile;
-+}
-+
-+BusPolicy*
-+bus_config_parser_steal_policy (BusConfigParser *parser)
-+{
-+ BusPolicy *policy;
-+
-+ _dbus_assert (parser->policy != NULL); /* can only steal the policy 1 time */
-+
-+ policy = parser->policy;
-+
-+ parser->policy = NULL;
-+
-+ return policy;
-+}
-+
-+/* Overwrite any limits that were set in the configuration file */
-+void
-+bus_config_parser_get_limits (BusConfigParser *parser,
-+ BusLimits *limits)
-+{
-+ *limits = parser->limits;
-+}
-+
-+DBusHashTable*
-+bus_config_parser_steal_service_context_table (BusConfigParser *parser)
-+{
-+ DBusHashTable *table;
-+
-+ _dbus_assert (parser->service_context_table != NULL); /* can only steal once */
-+
-+ table = parser->service_context_table;
-+
-+ parser->service_context_table = NULL;
-+
-+ return table;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include <stdio.h>
-+
-+typedef enum
-+{
-+ VALID,
-+ INVALID,
-+ UNKNOWN
-+} Validity;
-+
-+static dbus_bool_t
-+do_load (const DBusString *full_path,
-+ Validity validity,
-+ dbus_bool_t oom_possible)
-+{
-+ BusConfigParser *parser;
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+
-+ parser = bus_config_load (full_path, TRUE, NULL, &error);
-+ if (parser == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&error);
-+
-+ if (oom_possible &&
-+ dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ _dbus_verbose ("Failed to load valid file due to OOM\n");
-+ dbus_error_free (&error);
-+ return TRUE;
-+ }
-+ else if (validity == VALID)
-+ {
-+ _dbus_warn ("Failed to load valid file but still had memory: %s\n",
-+ error.message);
-+
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ dbus_error_free (&error);
-+ return TRUE;
-+ }
-+ }
-+ else
-+ {
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (&error);
-+
-+ bus_config_parser_unref (parser);
-+
-+ if (validity == INVALID)
-+ {
-+ _dbus_warn ("Accepted invalid file\n");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+ }
-+}
-+
-+typedef struct
-+{
-+ const DBusString *full_path;
-+ Validity validity;
-+} LoaderOomData;
-+
-+static dbus_bool_t
-+check_loader_oom_func (void *data)
-+{
-+ LoaderOomData *d = data;
-+
-+ return do_load (d->full_path, d->validity, TRUE);
-+}
-+
-+static dbus_bool_t
-+process_test_valid_subdir (const DBusString *test_base_dir,
-+ const char *subdir,
-+ Validity validity)
-+{
-+ DBusString test_directory;
-+ DBusString filename;
-+ DBusDirIter *dir;
-+ dbus_bool_t retval;
-+ DBusError error;
-+
-+ retval = FALSE;
-+ dir = NULL;
-+
-+ if (!_dbus_string_init (&test_directory))
-+ _dbus_assert_not_reached ("didn't allocate test_directory\n");
-+
-+ _dbus_string_init_const (&filename, subdir);
-+
-+ if (!_dbus_string_copy (test_base_dir, 0,
-+ &test_directory, 0))
-+ _dbus_assert_not_reached ("couldn't copy test_base_dir to test_directory");
-+
-+ if (!_dbus_concat_dir_and_file (&test_directory, &filename))
-+ _dbus_assert_not_reached ("couldn't allocate full path");
-+
-+ _dbus_string_free (&filename);
-+ if (!_dbus_string_init (&filename))
-+ _dbus_assert_not_reached ("didn't allocate filename string\n");
-+
-+ dbus_error_init (&error);
-+ dir = _dbus_directory_open (&test_directory, &error);
-+ if (dir == NULL)
-+ {
-+ _dbus_warn ("Could not open %s: %s\n",
-+ _dbus_string_get_const_data (&test_directory),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto failed;
-+ }
-+
-+ if (validity == VALID)
-+ printf ("Testing valid files:\n");
-+ else if (validity == INVALID)
-+ printf ("Testing invalid files:\n");
-+ else
-+ printf ("Testing unknown files:\n");
-+
-+ next:
-+ while (_dbus_directory_get_next_file (dir, &filename, &error))
-+ {
-+ DBusString full_path;
-+ LoaderOomData d;
-+
-+ if (!_dbus_string_init (&full_path))
-+ _dbus_assert_not_reached ("couldn't init string");
-+
-+ if (!_dbus_string_copy (&test_directory, 0, &full_path, 0))
-+ _dbus_assert_not_reached ("couldn't copy dir to full_path");
-+
-+ if (!_dbus_concat_dir_and_file (&full_path, &filename))
-+ _dbus_assert_not_reached ("couldn't concat file to dir");
-+
-+ if (!_dbus_string_ends_with_c_str (&full_path, ".conf"))
-+ {
-+ _dbus_verbose ("Skipping non-.conf file %s\n",
-+ _dbus_string_get_const_data (&filename));
-+ _dbus_string_free (&full_path);
-+ goto next;
-+ }
-+
-+ printf (" %s\n", _dbus_string_get_const_data (&filename));
-+
-+ _dbus_verbose (" expecting %s\n",
-+ validity == VALID ? "valid" :
-+ (validity == INVALID ? "invalid" :
-+ (validity == UNKNOWN ? "unknown" : "???")));
-+
-+ d.full_path = &full_path;
-+ d.validity = validity;
-+
-+ /* FIXME hackaround for an expat problem, see
-+ * https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=124747
-+ * http://freedesktop.org/pipermail/dbus/2004-May/001153.html
-+ */
-+ /* if (!_dbus_test_oom_handling ("config-loader", check_loader_oom_func, &d)) */
-+ if (!check_loader_oom_func (&d))
-+ _dbus_assert_not_reached ("test failed");
-+
-+ _dbus_string_free (&full_path);
-+ }
-+
-+ if (dbus_error_is_set (&error))
-+ {
-+ _dbus_warn ("Could not get next file in %s: %s\n",
-+ _dbus_string_get_const_data (&test_directory),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto failed;
-+ }
-+
-+ retval = TRUE;
-+
-+ failed:
-+
-+ if (dir)
-+ _dbus_directory_close (dir);
-+ _dbus_string_free (&test_directory);
-+ _dbus_string_free (&filename);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+bools_equal (dbus_bool_t a,
-+ dbus_bool_t b)
-+{
-+ return a ? b : !b;
-+}
-+
-+static dbus_bool_t
-+strings_equal_or_both_null (const char *a,
-+ const char *b)
-+{
-+ if (a == NULL || b == NULL)
-+ return a == b;
-+ else
-+ return !strcmp (a, b);
-+}
-+
-+static dbus_bool_t
-+elements_equal (const Element *a,
-+ const Element *b)
-+{
-+ if (a->type != b->type)
-+ return FALSE;
-+
-+ if (!bools_equal (a->had_content, b->had_content))
-+ return FALSE;
-+
-+ switch (a->type)
-+ {
-+
-+ case ELEMENT_INCLUDE:
-+ if (!bools_equal (a->d.include.ignore_missing,
-+ b->d.include.ignore_missing))
-+ return FALSE;
-+ break;
-+
-+ case ELEMENT_POLICY:
-+ if (a->d.policy.type != b->d.policy.type)
-+ return FALSE;
-+ if (a->d.policy.gid_uid_or_at_console != b->d.policy.gid_uid_or_at_console)
-+ return FALSE;
-+ break;
-+
-+ case ELEMENT_LIMIT:
-+ if (strcmp (a->d.limit.name, b->d.limit.name))
-+ return FALSE;
-+ if (a->d.limit.value != b->d.limit.value)
-+ return FALSE;
-+ break;
-+
-+ default:
-+ /* do nothing */
-+ break;
-+ }
-+
-+ return TRUE;
-+
-+}
-+
-+static dbus_bool_t
-+lists_of_elements_equal (DBusList *a,
-+ DBusList *b)
-+{
-+ DBusList *ia;
-+ DBusList *ib;
-+
-+ ia = a;
-+ ib = b;
-+
-+ while (ia != NULL && ib != NULL)
-+ {
-+ if (elements_equal (ia->data, ib->data))
-+ return FALSE;
-+ ia = _dbus_list_get_next_link (&a, ia);
-+ ib = _dbus_list_get_next_link (&b, ib);
-+ }
-+
-+ return ia == NULL && ib == NULL;
-+}
-+
-+static dbus_bool_t
-+lists_of_c_strings_equal (DBusList *a,
-+ DBusList *b)
-+{
-+ DBusList *ia;
-+ DBusList *ib;
-+
-+ ia = a;
-+ ib = b;
-+
-+ while (ia != NULL && ib != NULL)
-+ {
-+ if (strcmp (ia->data, ib->data))
-+ return FALSE;
-+ ia = _dbus_list_get_next_link (&a, ia);
-+ ib = _dbus_list_get_next_link (&b, ib);
-+ }
-+
-+ return ia == NULL && ib == NULL;
-+}
-+
-+static dbus_bool_t
-+limits_equal (const BusLimits *a,
-+ const BusLimits *b)
-+{
-+ return
-+ (a->max_incoming_bytes == b->max_incoming_bytes
-+ || a->max_outgoing_bytes == b->max_outgoing_bytes
-+ || a->max_message_size == b->max_message_size
-+ || a->activation_timeout == b->activation_timeout
-+ || a->auth_timeout == b->auth_timeout
-+ || a->max_completed_connections == b->max_completed_connections
-+ || a->max_incomplete_connections == b->max_incomplete_connections
-+ || a->max_connections_per_user == b->max_connections_per_user
-+ || a->max_pending_activations == b->max_pending_activations
-+ || a->max_services_per_connection == b->max_services_per_connection
-+ || a->max_match_rules_per_connection == b->max_match_rules_per_connection
-+ || a->max_replies_per_connection == b->max_replies_per_connection
-+ || a->reply_timeout == b->reply_timeout);
-+}
-+
-+static dbus_bool_t
-+config_parsers_equal (const BusConfigParser *a,
-+ const BusConfigParser *b)
-+{
-+ if (!_dbus_string_equal (&a->basedir, &b->basedir))
-+ return FALSE;
-+
-+ if (!lists_of_elements_equal (a->stack, b->stack))
-+ return FALSE;
-+
-+ if (!strings_equal_or_both_null (a->user, b->user))
-+ return FALSE;
-+
-+ if (!lists_of_c_strings_equal (a->listen_on, b->listen_on))
-+ return FALSE;
-+
-+ if (!lists_of_c_strings_equal (a->mechanisms, b->mechanisms))
-+ return FALSE;
-+
-+ if (!lists_of_c_strings_equal (a->service_dirs, b->service_dirs))
-+ return FALSE;
-+
-+ /* FIXME: compare policy */
-+
-+ /* FIXME: compare service selinux ID table */
-+
-+ if (! limits_equal (&a->limits, &b->limits))
-+ return FALSE;
-+
-+ if (!strings_equal_or_both_null (a->pidfile, b->pidfile))
-+ return FALSE;
-+
-+ if (! bools_equal (a->fork, b->fork))
-+ return FALSE;
-+
-+ if (! bools_equal (a->is_toplevel, b->is_toplevel))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+all_are_equiv (const DBusString *target_directory)
-+{
-+ DBusString filename;
-+ DBusDirIter *dir;
-+ BusConfigParser *first_parser;
-+ BusConfigParser *parser;
-+ DBusError error;
-+ dbus_bool_t equal;
-+ dbus_bool_t retval;
-+
-+ dir = NULL;
-+ first_parser = NULL;
-+ parser = NULL;
-+ retval = FALSE;
-+
-+ if (!_dbus_string_init (&filename))
-+ _dbus_assert_not_reached ("didn't allocate filename string");
-+
-+ dbus_error_init (&error);
-+ dir = _dbus_directory_open (target_directory, &error);
-+ if (dir == NULL)
-+ {
-+ _dbus_warn ("Could not open %s: %s\n",
-+ _dbus_string_get_const_data (target_directory),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto finished;
-+ }
-+
-+ printf ("Comparing equivalent files:\n");
-+
-+ next:
-+ while (_dbus_directory_get_next_file (dir, &filename, &error))
-+ {
-+ DBusString full_path;
-+
-+ if (!_dbus_string_init (&full_path))
-+ _dbus_assert_not_reached ("couldn't init string");
-+
-+ if (!_dbus_string_copy (target_directory, 0, &full_path, 0))
-+ _dbus_assert_not_reached ("couldn't copy dir to full_path");
-+
-+ if (!_dbus_concat_dir_and_file (&full_path, &filename))
-+ _dbus_assert_not_reached ("couldn't concat file to dir");
-+
-+ if (!_dbus_string_ends_with_c_str (&full_path, ".conf"))
-+ {
-+ _dbus_verbose ("Skipping non-.conf file %s\n",
-+ _dbus_string_get_const_data (&filename));
-+ _dbus_string_free (&full_path);
-+ goto next;
-+ }
-+
-+ printf (" %s\n", _dbus_string_get_const_data (&filename));
-+
-+ parser = bus_config_load (&full_path, TRUE, NULL, &error);
-+
-+ if (parser == NULL)
-+ {
-+ _dbus_warn ("Could not load file %s: %s\n",
-+ _dbus_string_get_const_data (&full_path),
-+ error.message);
-+ _dbus_string_free (&full_path);
-+ dbus_error_free (&error);
-+ goto finished;
-+ }
-+ else if (first_parser == NULL)
-+ {
-+ _dbus_string_free (&full_path);
-+ first_parser = parser;
-+ }
-+ else
-+ {
-+ _dbus_string_free (&full_path);
-+ equal = config_parsers_equal (first_parser, parser);
-+ bus_config_parser_unref (parser);
-+ if (! equal)
-+ goto finished;
-+ }
-+ }
-+
-+ retval = TRUE;
-+
-+ finished:
-+ _dbus_string_free (&filename);
-+ if (first_parser)
-+ bus_config_parser_unref (first_parser);
-+ if (dir)
-+ _dbus_directory_close (dir);
-+
-+ return retval;
-+
-+}
-+
-+static dbus_bool_t
-+process_test_equiv_subdir (const DBusString *test_base_dir,
-+ const char *subdir)
-+{
-+ DBusString test_directory;
-+ DBusString filename;
-+ DBusDirIter *dir;
-+ DBusError error;
-+ dbus_bool_t equal;
-+ dbus_bool_t retval;
-+
-+ dir = NULL;
-+ retval = FALSE;
-+
-+ if (!_dbus_string_init (&test_directory))
-+ _dbus_assert_not_reached ("didn't allocate test_directory");
-+
-+ _dbus_string_init_const (&filename, subdir);
-+
-+ if (!_dbus_string_copy (test_base_dir, 0,
-+ &test_directory, 0))
-+ _dbus_assert_not_reached ("couldn't copy test_base_dir to test_directory");
-+
-+ if (!_dbus_concat_dir_and_file (&test_directory, &filename))
-+ _dbus_assert_not_reached ("couldn't allocate full path");
-+
-+ _dbus_string_free (&filename);
-+ if (!_dbus_string_init (&filename))
-+ _dbus_assert_not_reached ("didn't allocate filename string");
-+
-+ dbus_error_init (&error);
-+ dir = _dbus_directory_open (&test_directory, &error);
-+ if (dir == NULL)
-+ {
-+ _dbus_warn ("Could not open %s: %s\n",
-+ _dbus_string_get_const_data (&test_directory),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto finished;
-+ }
-+
-+ while (_dbus_directory_get_next_file (dir, &filename, &error))
-+ {
-+ DBusString full_path;
-+
-+ /* Skip CVS's magic directories! */
-+ if (_dbus_string_equal_c_str (&filename, "CVS"))
-+ continue;
-+
-+ if (!_dbus_string_init (&full_path))
-+ _dbus_assert_not_reached ("couldn't init string");
-+
-+ if (!_dbus_string_copy (&test_directory, 0, &full_path, 0))
-+ _dbus_assert_not_reached ("couldn't copy dir to full_path");
-+
-+ if (!_dbus_concat_dir_and_file (&full_path, &filename))
-+ _dbus_assert_not_reached ("couldn't concat file to dir");
-+
-+ equal = all_are_equiv (&full_path);
-+ _dbus_string_free (&full_path);
-+
-+ if (!equal)
-+ goto finished;
-+ }
-+
-+ retval = TRUE;
-+
-+ finished:
-+ _dbus_string_free (&test_directory);
-+ _dbus_string_free (&filename);
-+ if (dir)
-+ _dbus_directory_close (dir);
-+
-+ return retval;
-+
-+}
-+
-+dbus_bool_t
-+bus_config_parser_test (const DBusString *test_data_dir)
-+{
-+ if (test_data_dir == NULL ||
-+ _dbus_string_get_length (test_data_dir) == 0)
-+ {
-+ printf ("No test data\n");
-+ return TRUE;
-+ }
-+
-+ if (!process_test_valid_subdir (test_data_dir, "valid-config-files", VALID))
-+ return FALSE;
-+
-+ if (!process_test_valid_subdir (test_data_dir, "invalid-config-files", INVALID))
-+ return FALSE;
-+
-+ if (!process_test_equiv_subdir (test_data_dir, "equiv-config-files"))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-+
-diff -Naur dbus-0.61.orig/bus/config-parser.h dbus-0.61/bus/config-parser.h
---- dbus-0.61.orig/bus/config-parser.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/config-parser.h 2005-06-15 04:31:38.000000000 +0200
-@@ -0,0 +1,85 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* config-parser.h XML-library-agnostic configuration file parser
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_CONFIG_PARSER_H
-+#define BUS_CONFIG_PARSER_H
-+
-+#include <config.h>
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-hash.h>
-+#include "bus.h"
-+
-+/* Whatever XML library we're using just pushes data into this API */
-+
-+typedef struct BusConfigParser BusConfigParser;
-+
-+BusConfigParser* bus_config_parser_new (const DBusString *basedir,
-+ dbus_bool_t is_toplevel,
-+ const BusConfigParser *parent);
-+
-+BusConfigParser* bus_config_parser_ref (BusConfigParser *parser);
-+void bus_config_parser_unref (BusConfigParser *parser);
-+dbus_bool_t bus_config_parser_check_doctype (BusConfigParser *parser,
-+ const char *doctype,
-+ DBusError *error);
-+dbus_bool_t bus_config_parser_start_element (BusConfigParser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ DBusError *error);
-+dbus_bool_t bus_config_parser_end_element (BusConfigParser *parser,
-+ const char *element_name,
-+ DBusError *error);
-+dbus_bool_t bus_config_parser_content (BusConfigParser *parser,
-+ const DBusString *content,
-+ DBusError *error);
-+dbus_bool_t bus_config_parser_finished (BusConfigParser *parser,
-+ DBusError *error);
-+
-+/* Functions for extracting the parse results */
-+const char* bus_config_parser_get_user (BusConfigParser *parser);
-+const char* bus_config_parser_get_type (BusConfigParser *parser);
-+DBusList** bus_config_parser_get_addresses (BusConfigParser *parser);
-+DBusList** bus_config_parser_get_mechanisms (BusConfigParser *parser);
-+dbus_bool_t bus_config_parser_get_fork (BusConfigParser *parser);
-+const char* bus_config_parser_get_pidfile (BusConfigParser *parser);
-+DBusList** bus_config_parser_get_service_dirs (BusConfigParser *parser);
-+DBusList** bus_config_parser_get_conf_dirs (BusConfigParser *parser);
-+BusPolicy* bus_config_parser_steal_policy (BusConfigParser *parser);
-+void bus_config_parser_get_limits (BusConfigParser *parser,
-+ BusLimits *limits);
-+
-+DBusHashTable* bus_config_parser_steal_service_context_table (BusConfigParser *parser);
-+
-+/* Loader functions (backended off one of the XML parsers). Returns a
-+ * finished ConfigParser.
-+ */
-+BusConfigParser* bus_config_load (const DBusString *file,
-+ dbus_bool_t is_toplevel,
-+ const BusConfigParser *parent,
-+ DBusError *error);
-+
-+#endif /* BUS_CONFIG_PARSER_H */
-diff -Naur dbus-0.61.orig/bus/connection.c dbus-0.61/bus/connection.c
---- dbus-0.61.orig/bus/connection.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/connection.c 2006-02-10 22:44:15.000000000 +0100
-@@ -0,0 +1,2213 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* connection.c Client connections
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "connection.h"
-+#include "dispatch.h"
-+#include "policy.h"
-+#include "services.h"
-+#include "utils.h"
-+#include "signals.h"
-+#include "expirelist.h"
-+#include "selinux.h"
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-hash.h>
-+#include <dbus/dbus-timeout.h>
-+
-+static void bus_connection_remove_transactions (DBusConnection *connection);
-+
-+typedef struct
-+{
-+ BusExpireItem expire_item;
-+
-+ DBusConnection *will_get_reply;
-+ DBusConnection *will_send_reply;
-+
-+ dbus_uint32_t reply_serial;
-+
-+} BusPendingReply;
-+
-+struct BusConnections
-+{
-+ int refcount;
-+ DBusList *completed; /**< List of all completed connections */
-+ int n_completed; /**< Length of completed list */
-+ DBusList *incomplete; /**< List of all not-yet-active connections */
-+ int n_incomplete; /**< Length of incomplete list */
-+ BusContext *context;
-+ DBusHashTable *completed_by_user; /**< Number of completed connections for each UID */
-+ DBusTimeout *expire_timeout; /**< Timeout for expiring incomplete connections. */
-+ int stamp; /**< Incrementing number */
-+ BusExpireList *pending_replies; /**< List of pending replies */
-+};
-+
-+static dbus_int32_t connection_data_slot = -1;
-+
-+typedef struct
-+{
-+ BusConnections *connections;
-+ DBusList *link_in_connection_list;
-+ DBusConnection *connection;
-+ DBusList *services_owned;
-+ int n_services_owned;
-+ DBusList *match_rules;
-+ int n_match_rules;
-+ char *name;
-+ DBusList *transaction_messages; /**< Stuff we need to send as part of a transaction */
-+ DBusMessage *oom_message;
-+ DBusPreallocatedSend *oom_preallocated;
-+ BusClientPolicy *policy;
-+
-+ BusSELinuxID *selinux_id;
-+
-+ long connection_tv_sec; /**< Time when we connected (seconds component) */
-+ long connection_tv_usec; /**< Time when we connected (microsec component) */
-+ int stamp; /**< connections->stamp last time we were traversed */
-+} BusConnectionData;
-+
-+static dbus_bool_t bus_pending_reply_expired (BusExpireList *list,
-+ DBusList *link,
-+ void *data);
-+
-+static void bus_connection_drop_pending_replies (BusConnections *connections,
-+ DBusConnection *connection);
-+
-+static dbus_bool_t expire_incomplete_timeout (void *data);
-+
-+#define BUS_CONNECTION_DATA(connection) (dbus_connection_get_data ((connection), connection_data_slot))
-+
-+static DBusLoop*
-+connection_get_loop (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ return bus_context_get_loop (d->connections->context);
-+}
-+
-+
-+static int
-+get_connections_for_uid (BusConnections *connections,
-+ dbus_uid_t uid)
-+{
-+ void *val;
-+ int current_count;
-+
-+ /* val is NULL is 0 when it isn't in the hash yet */
-+
-+ val = _dbus_hash_table_lookup_ulong (connections->completed_by_user,
-+ uid);
-+
-+ current_count = _DBUS_POINTER_TO_INT (val);
-+
-+ return current_count;
-+}
-+
-+static dbus_bool_t
-+adjust_connections_for_uid (BusConnections *connections,
-+ dbus_uid_t uid,
-+ int adjustment)
-+{
-+ int current_count;
-+
-+ current_count = get_connections_for_uid (connections, uid);
-+
-+ _dbus_verbose ("Adjusting connection count for UID " DBUS_UID_FORMAT
-+ ": was %d adjustment %d making %d\n",
-+ uid, current_count, adjustment, current_count + adjustment);
-+
-+ _dbus_assert (current_count >= 0);
-+
-+ current_count += adjustment;
-+
-+ _dbus_assert (current_count >= 0);
-+
-+ if (current_count == 0)
-+ {
-+ _dbus_hash_table_remove_ulong (connections->completed_by_user, uid);
-+ return TRUE;
-+ }
-+ else
-+ {
-+ dbus_bool_t retval;
-+
-+ retval = _dbus_hash_table_insert_ulong (connections->completed_by_user,
-+ uid, _DBUS_INT_TO_POINTER (current_count));
-+
-+ /* only positive adjustment can fail as otherwise
-+ * a hash entry should already exist
-+ */
-+ _dbus_assert (adjustment > 0 ||
-+ (adjustment <= 0 && retval));
-+
-+ return retval;
-+ }
-+}
-+
-+void
-+bus_connection_disconnected (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+ BusService *service;
-+ BusMatchmaker *matchmaker;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ _dbus_verbose ("%s disconnected, dropping all service ownership and releasing\n",
-+ d->name ? d->name : "(inactive)");
-+
-+ /* Delete our match rules */
-+ if (d->n_match_rules > 0)
-+ {
-+ matchmaker = bus_context_get_matchmaker (d->connections->context);
-+ bus_matchmaker_disconnected (matchmaker, connection);
-+ }
-+
-+ /* Drop any service ownership. FIXME Unfortunately, this requires
-+ * memory allocation and there doesn't seem to be a good way to
-+ * handle it other than sleeping; we can't "fail" the operation of
-+ * disconnecting a client, and preallocating a broadcast "service is
-+ * now gone" message for every client-service pair seems kind of
-+ * involved. Probably we need to do that though.
-+ */
-+ while ((service = _dbus_list_get_last (&d->services_owned)))
-+ {
-+ BusTransaction *transaction;
-+ DBusError error;
-+
-+ retry:
-+
-+ dbus_error_init (&error);
-+
-+ while ((transaction = bus_transaction_new (d->connections->context)) == NULL)
-+ _dbus_wait_for_memory ();
-+
-+ if (!bus_service_remove_owner (service, connection,
-+ transaction, &error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&error);
-+
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ bus_transaction_cancel_and_free (transaction);
-+ _dbus_wait_for_memory ();
-+ goto retry;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Failed to remove service owner: %s %s\n",
-+ error.name, error.message);
-+ _dbus_assert_not_reached ("Removing service owner failed for non-memory-related reason");
-+ }
-+ }
-+
-+ bus_transaction_execute_and_free (transaction);
-+ }
-+
-+ bus_dispatch_remove_connection (connection);
-+
-+ /* no more watching */
-+ if (!dbus_connection_set_watch_functions (connection,
-+ NULL, NULL, NULL,
-+ connection,
-+ NULL))
-+ _dbus_assert_not_reached ("setting watch functions to NULL failed");
-+
-+ if (!dbus_connection_set_timeout_functions (connection,
-+ NULL, NULL, NULL,
-+ connection,
-+ NULL))
-+ _dbus_assert_not_reached ("setting timeout functions to NULL failed");
-+
-+ dbus_connection_set_unix_user_function (connection,
-+ NULL, NULL, NULL);
-+
-+ dbus_connection_set_dispatch_status_function (connection,
-+ NULL, NULL, NULL);
-+
-+ bus_connection_remove_transactions (connection);
-+
-+ if (d->link_in_connection_list != NULL)
-+ {
-+ if (d->name != NULL)
-+ {
-+ unsigned long uid;
-+
-+ _dbus_list_remove_link (&d->connections->completed, d->link_in_connection_list);
-+ d->link_in_connection_list = NULL;
-+ d->connections->n_completed -= 1;
-+
-+ if (dbus_connection_get_unix_user (connection, &uid))
-+ {
-+ if (!adjust_connections_for_uid (d->connections,
-+ uid, -1))
-+ _dbus_assert_not_reached ("adjusting downward should never fail");
-+ }
-+ }
-+ else
-+ {
-+ _dbus_list_remove_link (&d->connections->incomplete, d->link_in_connection_list);
-+ d->link_in_connection_list = NULL;
-+ d->connections->n_incomplete -= 1;
-+ }
-+
-+ _dbus_assert (d->connections->n_incomplete >= 0);
-+ _dbus_assert (d->connections->n_completed >= 0);
-+ }
-+
-+ bus_connection_drop_pending_replies (d->connections, connection);
-+
-+ /* frees "d" as side effect */
-+ dbus_connection_set_data (connection,
-+ connection_data_slot,
-+ NULL, NULL);
-+
-+ dbus_connection_unref (connection);
-+}
-+
-+static dbus_bool_t
-+connection_watch_callback (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data)
-+{
-+ /* FIXME this can be done in dbus-mainloop.c
-+ * if the code in activation.c for the babysitter
-+ * watch handler is fixed.
-+ */
-+
-+#if 0
-+ _dbus_verbose ("Calling handle_watch\n");
-+#endif
-+ return dbus_watch_handle (watch, condition);
-+}
-+
-+static dbus_bool_t
-+add_connection_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ return _dbus_loop_add_watch (connection_get_loop (connection),
-+ watch, connection_watch_callback, connection,
-+ NULL);
-+}
-+
-+static void
-+remove_connection_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ _dbus_loop_remove_watch (connection_get_loop (connection),
-+ watch, connection_watch_callback, connection);
-+}
-+
-+static void
-+connection_timeout_callback (DBusTimeout *timeout,
-+ void *data)
-+{
-+ /* DBusConnection *connection = data; */
-+
-+ /* can return FALSE on OOM but we just let it fire again later */
-+ dbus_timeout_handle (timeout);
-+}
-+
-+static dbus_bool_t
-+add_connection_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ return _dbus_loop_add_timeout (connection_get_loop (connection),
-+ timeout, connection_timeout_callback, connection, NULL);
-+}
-+
-+static void
-+remove_connection_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ _dbus_loop_remove_timeout (connection_get_loop (connection),
-+ timeout, connection_timeout_callback, connection);
-+}
-+
-+static void
-+dispatch_status_function (DBusConnection *connection,
-+ DBusDispatchStatus new_status,
-+ void *data)
-+{
-+ DBusLoop *loop = data;
-+
-+ if (new_status != DBUS_DISPATCH_COMPLETE)
-+ {
-+ while (!_dbus_loop_queue_dispatch (loop, connection))
-+ _dbus_wait_for_memory ();
-+ }
-+}
-+
-+static dbus_bool_t
-+allow_user_function (DBusConnection *connection,
-+ unsigned long uid,
-+ void *data)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ return bus_context_allow_user (d->connections->context, uid);
-+}
-+
-+static void
-+free_connection_data (void *data)
-+{
-+ BusConnectionData *d = data;
-+
-+ /* services_owned should be NULL since we should be disconnected */
-+ _dbus_assert (d->services_owned == NULL);
-+ _dbus_assert (d->n_services_owned == 0);
-+ /* similarly */
-+ _dbus_assert (d->transaction_messages == NULL);
-+
-+ if (d->oom_preallocated)
-+ dbus_connection_free_preallocated_send (d->connection, d->oom_preallocated);
-+
-+ if (d->oom_message)
-+ dbus_message_unref (d->oom_message);
-+
-+ if (d->policy)
-+ bus_client_policy_unref (d->policy);
-+
-+ if (d->selinux_id)
-+ bus_selinux_id_unref (d->selinux_id);
-+
-+ dbus_free (d->name);
-+
-+ dbus_free (d);
-+}
-+
-+static void
-+call_timeout_callback (DBusTimeout *timeout,
-+ void *data)
-+{
-+ /* can return FALSE on OOM but we just let it fire again later */
-+ dbus_timeout_handle (timeout);
-+}
-+
-+BusConnections*
-+bus_connections_new (BusContext *context)
-+{
-+ BusConnections *connections;
-+
-+ if (!dbus_connection_allocate_data_slot (&connection_data_slot))
-+ goto failed_0;
-+
-+ connections = dbus_new0 (BusConnections, 1);
-+ if (connections == NULL)
-+ goto failed_1;
-+
-+ connections->completed_by_user = _dbus_hash_table_new (DBUS_HASH_ULONG,
-+ NULL, NULL);
-+ if (connections->completed_by_user == NULL)
-+ goto failed_2;
-+
-+ connections->expire_timeout = _dbus_timeout_new (100, /* irrelevant */
-+ expire_incomplete_timeout,
-+ connections, NULL);
-+ if (connections->expire_timeout == NULL)
-+ goto failed_3;
-+
-+ _dbus_timeout_set_enabled (connections->expire_timeout, FALSE);
-+
-+ connections->pending_replies = bus_expire_list_new (bus_context_get_loop (context),
-+ bus_context_get_reply_timeout (context),
-+ bus_pending_reply_expired,
-+ connections);
-+ if (connections->pending_replies == NULL)
-+ goto failed_4;
-+
-+ if (!_dbus_loop_add_timeout (bus_context_get_loop (context),
-+ connections->expire_timeout,
-+ call_timeout_callback, NULL, NULL))
-+ goto failed_5;
-+
-+ connections->refcount = 1;
-+ connections->context = context;
-+
-+ return connections;
-+
-+ failed_5:
-+ bus_expire_list_free (connections->pending_replies);
-+ failed_4:
-+ _dbus_timeout_unref (connections->expire_timeout);
-+ failed_3:
-+ _dbus_hash_table_unref (connections->completed_by_user);
-+ failed_2:
-+ dbus_free (connections);
-+ failed_1:
-+ dbus_connection_free_data_slot (&connection_data_slot);
-+ failed_0:
-+ return NULL;
-+}
-+
-+BusConnections *
-+bus_connections_ref (BusConnections *connections)
-+{
-+ _dbus_assert (connections->refcount > 0);
-+ connections->refcount += 1;
-+
-+ return connections;
-+}
-+
-+void
-+bus_connections_unref (BusConnections *connections)
-+{
-+ _dbus_assert (connections->refcount > 0);
-+ connections->refcount -= 1;
-+ if (connections->refcount == 0)
-+ {
-+ /* drop all incomplete */
-+ while (connections->incomplete != NULL)
-+ {
-+ DBusConnection *connection;
-+
-+ connection = connections->incomplete->data;
-+
-+ dbus_connection_ref (connection);
-+ dbus_connection_close (connection);
-+ bus_connection_disconnected (connection);
-+ dbus_connection_unref (connection);
-+ }
-+
-+ _dbus_assert (connections->n_incomplete == 0);
-+
-+ /* drop all real connections */
-+ while (connections->completed != NULL)
-+ {
-+ DBusConnection *connection;
-+
-+ connection = connections->completed->data;
-+
-+ dbus_connection_ref (connection);
-+ dbus_connection_close (connection);
-+ bus_connection_disconnected (connection);
-+ dbus_connection_unref (connection);
-+ }
-+
-+ _dbus_assert (connections->n_completed == 0);
-+
-+ bus_expire_list_free (connections->pending_replies);
-+
-+ _dbus_loop_remove_timeout (bus_context_get_loop (connections->context),
-+ connections->expire_timeout,
-+ call_timeout_callback, NULL);
-+
-+ _dbus_timeout_unref (connections->expire_timeout);
-+
-+ _dbus_hash_table_unref (connections->completed_by_user);
-+
-+ dbus_free (connections);
-+
-+ dbus_connection_free_data_slot (&connection_data_slot);
-+ }
-+}
-+
-+dbus_bool_t
-+bus_connections_setup_connection (BusConnections *connections,
-+ DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+ dbus_bool_t retval;
-+ DBusError error;
-+
-+ d = dbus_new0 (BusConnectionData, 1);
-+
-+ if (d == NULL)
-+ return FALSE;
-+
-+ d->connections = connections;
-+ d->connection = connection;
-+
-+ _dbus_get_current_time (&d->connection_tv_sec,
-+ &d->connection_tv_usec);
-+
-+ _dbus_assert (connection_data_slot >= 0);
-+
-+ if (!dbus_connection_set_data (connection,
-+ connection_data_slot,
-+ d, free_connection_data))
-+ {
-+ dbus_free (d);
-+ return FALSE;
-+ }
-+
-+ retval = FALSE;
-+
-+ dbus_error_init (&error);
-+ d->selinux_id = bus_selinux_init_connection_id (connection,
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ /* This is a bit bogus because we pretend all errors
-+ * are OOM; this is done because we know that in bus.c
-+ * an OOM error disconnects the connection, which is
-+ * the same thing we want on any other error.
-+ */
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+
-+ if (!dbus_connection_set_watch_functions (connection,
-+ add_connection_watch,
-+ remove_connection_watch,
-+ NULL,
-+ connection,
-+ NULL))
-+ goto out;
-+
-+ if (!dbus_connection_set_timeout_functions (connection,
-+ add_connection_timeout,
-+ remove_connection_timeout,
-+ NULL,
-+ connection, NULL))
-+ goto out;
-+
-+ dbus_connection_set_unix_user_function (connection,
-+ allow_user_function,
-+ NULL, NULL);
-+
-+ dbus_connection_set_dispatch_status_function (connection,
-+ dispatch_status_function,
-+ bus_context_get_loop (connections->context),
-+ NULL);
-+
-+ d->link_in_connection_list = _dbus_list_alloc_link (connection);
-+ if (d->link_in_connection_list == NULL)
-+ goto out;
-+
-+ /* Setup the connection with the dispatcher */
-+ if (!bus_dispatch_add_connection (connection))
-+ goto out;
-+
-+ if (dbus_connection_get_dispatch_status (connection) != DBUS_DISPATCH_COMPLETE)
-+ {
-+ if (!_dbus_loop_queue_dispatch (bus_context_get_loop (connections->context), connection))
-+ {
-+ bus_dispatch_remove_connection (connection);
-+ goto out;
-+ }
-+ }
-+
-+ _dbus_list_append_link (&connections->incomplete, d->link_in_connection_list);
-+ connections->n_incomplete += 1;
-+
-+ dbus_connection_ref (connection);
-+
-+ /* Note that we might disconnect ourselves here, but it only takes
-+ * effect on return to the main loop. We call this to free up
-+ * expired connections if possible, and to queue the timeout for our
-+ * own expiration.
-+ */
-+ bus_connections_expire_incomplete (connections);
-+
-+ /* And we might also disconnect ourselves here, but again it
-+ * only takes effect on return to main loop.
-+ */
-+ if (connections->n_incomplete >
-+ bus_context_get_max_incomplete_connections (connections->context))
-+ {
-+ _dbus_verbose ("Number of incomplete connections exceeds max, dropping oldest one\n");
-+
-+ _dbus_assert (connections->incomplete != NULL);
-+ /* Disconnect the oldest unauthenticated connection. FIXME
-+ * would it be more secure to drop a *random* connection? This
-+ * algorithm seems to mean that if someone can create new
-+ * connections quickly enough, they can keep anyone else from
-+ * completing authentication. But random may or may not really
-+ * help with that, a more elaborate solution might be required.
-+ */
-+ dbus_connection_close (connections->incomplete->data);
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (!retval)
-+ {
-+ if (d->selinux_id)
-+ bus_selinux_id_unref (d->selinux_id);
-+ d->selinux_id = NULL;
-+
-+ if (!dbus_connection_set_watch_functions (connection,
-+ NULL, NULL, NULL,
-+ connection,
-+ NULL))
-+ _dbus_assert_not_reached ("setting watch functions to NULL failed");
-+
-+ if (!dbus_connection_set_timeout_functions (connection,
-+ NULL, NULL, NULL,
-+ connection,
-+ NULL))
-+ _dbus_assert_not_reached ("setting timeout functions to NULL failed");
-+
-+ dbus_connection_set_unix_user_function (connection,
-+ NULL, NULL, NULL);
-+
-+ dbus_connection_set_dispatch_status_function (connection,
-+ NULL, NULL, NULL);
-+
-+ if (d->link_in_connection_list != NULL)
-+ {
-+ _dbus_assert (d->link_in_connection_list->next == NULL);
-+ _dbus_assert (d->link_in_connection_list->prev == NULL);
-+ _dbus_list_free_link (d->link_in_connection_list);
-+ d->link_in_connection_list = NULL;
-+ }
-+
-+ if (!dbus_connection_set_data (connection,
-+ connection_data_slot,
-+ NULL, NULL))
-+ _dbus_assert_not_reached ("failed to set connection data to null");
-+
-+ /* "d" has now been freed */
-+ }
-+
-+ return retval;
-+}
-+
-+void
-+bus_connections_expire_incomplete (BusConnections *connections)
-+{
-+ int next_interval;
-+
-+ next_interval = -1;
-+
-+ if (connections->incomplete != NULL)
-+ {
-+ long tv_sec, tv_usec;
-+ DBusList *link;
-+ int auth_timeout;
-+
-+ _dbus_get_current_time (&tv_sec, &tv_usec);
-+ auth_timeout = bus_context_get_auth_timeout (connections->context);
-+
-+ link = _dbus_list_get_first_link (&connections->incomplete);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&connections->incomplete, link);
-+ DBusConnection *connection;
-+ BusConnectionData *d;
-+ double elapsed;
-+
-+ connection = link->data;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ elapsed = ELAPSED_MILLISECONDS_SINCE (d->connection_tv_sec,
-+ d->connection_tv_usec,
-+ tv_sec, tv_usec);
-+
-+ if (elapsed >= (double) auth_timeout)
-+ {
-+ _dbus_verbose ("Timing out authentication for connection %p\n", connection);
-+ dbus_connection_close (connection);
-+ }
-+ else
-+ {
-+ /* We can end the loop, since the connections are in oldest-first order */
-+ next_interval = ((double)auth_timeout) - elapsed;
-+ _dbus_verbose ("Connection %p authentication expires in %d milliseconds\n",
-+ connection, next_interval);
-+
-+ break;
-+ }
-+
-+ link = next;
-+ }
-+ }
-+
-+ bus_expire_timeout_set_interval (connections->expire_timeout,
-+ next_interval);
-+}
-+
-+static dbus_bool_t
-+expire_incomplete_timeout (void *data)
-+{
-+ BusConnections *connections = data;
-+
-+ _dbus_verbose ("Running %s\n", _DBUS_FUNCTION_NAME);
-+
-+ /* note that this may remove the timeout */
-+ bus_connections_expire_incomplete (connections);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_connection_get_groups (DBusConnection *connection,
-+ unsigned long **groups,
-+ int *n_groups,
-+ DBusError *error)
-+{
-+ BusConnectionData *d;
-+ unsigned long uid;
-+ DBusUserDatabase *user_database;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ user_database = bus_context_get_user_database (d->connections->context);
-+
-+ *groups = NULL;
-+ *n_groups = 0;
-+
-+ if (dbus_connection_get_unix_user (connection, &uid))
-+ {
-+ if (!_dbus_user_database_get_groups (user_database,
-+ uid, groups, n_groups,
-+ error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_verbose ("Did not get any groups for UID %lu\n",
-+ uid);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Got %d groups for UID %lu\n",
-+ *n_groups, uid);
-+ return TRUE;
-+ }
-+ }
-+ else
-+ return TRUE; /* successfully got 0 groups */
-+}
-+
-+dbus_bool_t
-+bus_connection_is_in_group (DBusConnection *connection,
-+ unsigned long gid)
-+{
-+ int i;
-+ unsigned long *group_ids;
-+ int n_group_ids;
-+
-+ if (!bus_connection_get_groups (connection, &group_ids, &n_group_ids,
-+ NULL))
-+ return FALSE;
-+
-+ i = 0;
-+ while (i < n_group_ids)
-+ {
-+ if (group_ids[i] == gid)
-+ {
-+ dbus_free (group_ids);
-+ return TRUE;
-+ }
-+ ++i;
-+ }
-+
-+ dbus_free (group_ids);
-+ return FALSE;
-+}
-+
-+BusClientPolicy*
-+bus_connection_get_policy (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+ _dbus_assert (d->policy != NULL);
-+
-+ return d->policy;
-+}
-+
-+static dbus_bool_t
-+foreach_active (BusConnections *connections,
-+ BusConnectionForeachFunction function,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&connections->completed);
-+ while (link != NULL)
-+ {
-+ DBusConnection *connection = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&connections->completed, link);
-+
-+ if (!(* function) (connection, data))
-+ return FALSE;
-+
-+ link = next;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+foreach_inactive (BusConnections *connections,
-+ BusConnectionForeachFunction function,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&connections->incomplete);
-+ while (link != NULL)
-+ {
-+ DBusConnection *connection = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&connections->incomplete, link);
-+
-+ if (!(* function) (connection, data))
-+ return FALSE;
-+
-+ link = next;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Calls function on each active connection; if the function returns
-+ * #FALSE, stops iterating. Active connections are authenticated
-+ * and have sent a Hello message.
-+ *
-+ * @param connections the connections object
-+ * @param function the function
-+ * @param data data to pass to it as a second arg
-+ */
-+void
-+bus_connections_foreach_active (BusConnections *connections,
-+ BusConnectionForeachFunction function,
-+ void *data)
-+{
-+ foreach_active (connections, function, data);
-+}
-+
-+/**
-+ * Calls function on each connection; if the function returns
-+ * #FALSE, stops iterating.
-+ *
-+ * @param connections the connections object
-+ * @param function the function
-+ * @param data data to pass to it as a second arg
-+ */
-+void
-+bus_connections_foreach (BusConnections *connections,
-+ BusConnectionForeachFunction function,
-+ void *data)
-+{
-+ if (!foreach_active (connections, function, data))
-+ return;
-+
-+ foreach_inactive (connections, function, data);
-+}
-+
-+BusContext*
-+bus_connections_get_context (BusConnections *connections)
-+{
-+ return connections->context;
-+}
-+
-+/*
-+ * This is used to avoid covering the same connection twice when
-+ * traversing connections. Note that it assumes we will
-+ * bus_connection_mark_stamp() each connection at least once per
-+ * INT_MAX increments of the global stamp, or wraparound would break
-+ * things.
-+ */
-+void
-+bus_connections_increment_stamp (BusConnections *connections)
-+{
-+ connections->stamp += 1;
-+}
-+
-+/* Mark connection with current stamp, return TRUE if it
-+ * didn't already have that stamp
-+ */
-+dbus_bool_t
-+bus_connection_mark_stamp (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ if (d->stamp == d->connections->stamp)
-+ return FALSE;
-+ else
-+ {
-+ d->stamp = d->connections->stamp;
-+ return TRUE;
-+ }
-+}
-+
-+BusContext*
-+bus_connection_get_context (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ return d->connections->context;
-+}
-+
-+BusConnections*
-+bus_connection_get_connections (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ return d->connections;
-+}
-+
-+BusRegistry*
-+bus_connection_get_registry (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ return bus_context_get_registry (d->connections->context);
-+}
-+
-+BusActivation*
-+bus_connection_get_activation (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ return bus_context_get_activation (d->connections->context);
-+}
-+
-+BusMatchmaker*
-+bus_connection_get_matchmaker (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ return bus_context_get_matchmaker (d->connections->context);
-+}
-+
-+BusSELinuxID*
-+bus_connection_get_selinux_id (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ return d->selinux_id;
-+}
-+
-+/**
-+ * Checks whether the connection is registered with the message bus.
-+ *
-+ * @param connection the connection
-+ * @returns #TRUE if we're an active message bus participant
-+ */
-+dbus_bool_t
-+bus_connection_is_active (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ return d != NULL && d->name != NULL;
-+}
-+
-+dbus_bool_t
-+bus_connection_preallocate_oom_error (DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ DBusPreallocatedSend *preallocated;
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+
-+ if (d->oom_preallocated != NULL)
-+ return TRUE;
-+
-+ preallocated = dbus_connection_preallocate_send (connection);
-+ if (preallocated == NULL)
-+ return FALSE;
-+
-+ message = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR);
-+
-+ if (message == NULL)
-+ {
-+ dbus_connection_free_preallocated_send (connection, preallocated);
-+ return FALSE;
-+ }
-+
-+ /* d->name may be NULL, but that is OK */
-+ if (!dbus_message_set_error_name (message, DBUS_ERROR_NO_MEMORY) ||
-+ !dbus_message_set_destination (message, d->name) ||
-+ !dbus_message_set_sender (message,
-+ DBUS_SERVICE_DBUS))
-+ {
-+ dbus_connection_free_preallocated_send (connection, preallocated);
-+ dbus_message_unref (message);
-+ return FALSE;
-+ }
-+
-+ /* set reply serial to placeholder value just so space is already allocated
-+ * for it.
-+ */
-+ if (!dbus_message_set_reply_serial (message, 14))
-+ {
-+ dbus_connection_free_preallocated_send (connection, preallocated);
-+ dbus_message_unref (message);
-+ return FALSE;
-+ }
-+
-+ d->oom_message = message;
-+ d->oom_preallocated = preallocated;
-+
-+ return TRUE;
-+}
-+
-+void
-+bus_connection_send_oom_error (DBusConnection *connection,
-+ DBusMessage *in_reply_to)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+
-+ _dbus_assert (d != NULL);
-+ _dbus_assert (d->oom_message != NULL);
-+
-+ /* should always succeed since we set it to a placeholder earlier */
-+ if (!dbus_message_set_reply_serial (d->oom_message,
-+ dbus_message_get_serial (in_reply_to)))
-+ _dbus_assert_not_reached ("Failed to set reply serial for preallocated oom message");
-+
-+ _dbus_assert (dbus_message_get_sender (d->oom_message) != NULL);
-+
-+ dbus_connection_send_preallocated (connection, d->oom_preallocated,
-+ d->oom_message, NULL);
-+
-+ dbus_message_unref (d->oom_message);
-+ d->oom_message = NULL;
-+ d->oom_preallocated = NULL;
-+}
-+
-+void
-+bus_connection_add_match_rule_link (DBusConnection *connection,
-+ DBusList *link)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ _dbus_list_append_link (&d->match_rules, link);
-+
-+ d->n_match_rules += 1;
-+}
-+
-+dbus_bool_t
-+bus_connection_add_match_rule (DBusConnection *connection,
-+ BusMatchRule *rule)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_alloc_link (rule);
-+
-+ if (link == NULL)
-+ return FALSE;
-+
-+ bus_connection_add_match_rule_link (connection, link);
-+
-+ return TRUE;
-+}
-+
-+void
-+bus_connection_remove_match_rule (DBusConnection *connection,
-+ BusMatchRule *rule)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ _dbus_list_remove_last (&d->match_rules, rule);
-+
-+ d->n_match_rules -= 1;
-+ _dbus_assert (d->n_match_rules >= 0);
-+}
-+
-+int
-+bus_connection_get_n_match_rules (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ return d->n_match_rules;
-+}
-+
-+void
-+bus_connection_add_owned_service_link (DBusConnection *connection,
-+ DBusList *link)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ _dbus_list_append_link (&d->services_owned, link);
-+
-+ d->n_services_owned += 1;
-+}
-+
-+dbus_bool_t
-+bus_connection_add_owned_service (DBusConnection *connection,
-+ BusService *service)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_alloc_link (service);
-+
-+ if (link == NULL)
-+ return FALSE;
-+
-+ bus_connection_add_owned_service_link (connection, link);
-+
-+ return TRUE;
-+}
-+
-+void
-+bus_connection_remove_owned_service (DBusConnection *connection,
-+ BusService *service)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ _dbus_list_remove_last (&d->services_owned, service);
-+
-+ d->n_services_owned -= 1;
-+ _dbus_assert (d->n_services_owned >= 0);
-+}
-+
-+int
-+bus_connection_get_n_services_owned (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ return d->n_services_owned;
-+}
-+
-+dbus_bool_t
-+bus_connection_complete (DBusConnection *connection,
-+ const DBusString *name,
-+ DBusError *error)
-+{
-+ BusConnectionData *d;
-+ unsigned long uid;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+ _dbus_assert (d->name == NULL);
-+ _dbus_assert (d->policy == NULL);
-+
-+ _dbus_assert (!bus_connection_is_active (connection));
-+
-+ if (!_dbus_string_copy_data (name, &d->name))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ _dbus_assert (d->name != NULL);
-+
-+ _dbus_verbose ("Name %s assigned to %p\n", d->name, connection);
-+
-+ d->policy = bus_context_create_client_policy (d->connections->context,
-+ connection,
-+ error);
-+
-+ /* we may have a NULL policy on OOM or error getting list of
-+ * groups for a user. In the latter case we don't handle it so
-+ * well currently, as it will just keep failing over and over.
-+ */
-+
-+ if (d->policy == NULL)
-+ {
-+ _dbus_verbose ("Failed to create security policy for connection %p\n",
-+ connection);
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_free (d->name);
-+ d->name = NULL;
-+ return FALSE;
-+ }
-+
-+ if (dbus_connection_get_unix_user (connection, &uid))
-+ {
-+ if (!adjust_connections_for_uid (d->connections,
-+ uid, 1))
-+ {
-+ BUS_SET_OOM (error);
-+ dbus_free (d->name);
-+ d->name = NULL;
-+ return FALSE;
-+ }
-+ }
-+
-+ /* Now the connection is active, move it between lists */
-+ _dbus_list_unlink (&d->connections->incomplete,
-+ d->link_in_connection_list);
-+ d->connections->n_incomplete -= 1;
-+ _dbus_list_append_link (&d->connections->completed,
-+ d->link_in_connection_list);
-+ d->connections->n_completed += 1;
-+
-+ _dbus_assert (d->connections->n_incomplete >= 0);
-+ _dbus_assert (d->connections->n_completed > 0);
-+
-+ /* See if we can remove the timeout */
-+ bus_connections_expire_incomplete (d->connections);
-+
-+ _dbus_assert (bus_connection_is_active (connection));
-+
-+ return TRUE;
-+}
-+
-+const char *
-+bus_connection_get_name (DBusConnection *connection)
-+{
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ return d->name;
-+}
-+
-+/**
-+ * Check whether completing the passed-in connection would
-+ * exceed limits, and if so set error and return #FALSE
-+ */
-+dbus_bool_t
-+bus_connections_check_limits (BusConnections *connections,
-+ DBusConnection *requesting_completion,
-+ DBusError *error)
-+{
-+ BusConnectionData *d;
-+ unsigned long uid;
-+
-+ d = BUS_CONNECTION_DATA (requesting_completion);
-+ _dbus_assert (d != NULL);
-+
-+ _dbus_assert (d->name == NULL);
-+
-+ if (connections->n_completed >=
-+ bus_context_get_max_completed_connections (connections->context))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "The maximum number of active connections has been reached");
-+ return FALSE;
-+ }
-+
-+ if (dbus_connection_get_unix_user (requesting_completion, &uid))
-+ {
-+ if (get_connections_for_uid (connections, uid) >=
-+ bus_context_get_max_connections_per_user (connections->context))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "The maximum number of active connections for UID %lu has been reached",
-+ uid);
-+ return FALSE;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+bus_pending_reply_free (BusPendingReply *pending)
-+{
-+ _dbus_verbose ("Freeing pending reply %p, replier %p receiver %p serial %u\n",
-+ pending,
-+ pending->will_send_reply,
-+ pending->will_get_reply,
-+ pending->reply_serial);
-+
-+ dbus_free (pending);
-+}
-+
-+static dbus_bool_t
-+bus_pending_reply_send_no_reply (BusConnections *connections,
-+ BusTransaction *transaction,
-+ BusPendingReply *pending)
-+{
-+ DBusMessage *message;
-+ DBusMessageIter iter;
-+ dbus_bool_t retval;
-+ const char *errmsg;
-+
-+ retval = FALSE;
-+
-+ message = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR);
-+ if (message == NULL)
-+ return FALSE;
-+
-+ dbus_message_set_no_reply (message, TRUE);
-+
-+ if (!dbus_message_set_reply_serial (message,
-+ pending->reply_serial))
-+ goto out;
-+
-+ if (!dbus_message_set_error_name (message,
-+ DBUS_ERROR_NO_REPLY))
-+ goto out;
-+
-+ errmsg = "Message did not receive a reply (timeout by message bus)";
-+ dbus_message_iter_init_append (message, &iter);
-+ if (!dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &errmsg))
-+ goto out;
-+
-+ if (!bus_transaction_send_from_driver (transaction, pending->will_get_reply,
-+ message))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ dbus_message_unref (message);
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+bus_pending_reply_expired (BusExpireList *list,
-+ DBusList *link,
-+ void *data)
-+{
-+ BusPendingReply *pending = link->data;
-+ BusConnections *connections = data;
-+ BusTransaction *transaction;
-+
-+ /* No reply is forthcoming. So nuke it if we can. If not,
-+ * leave it in the list to try expiring again later when we
-+ * get more memory.
-+ */
-+
-+ _dbus_verbose ("Expiring pending reply %p, replier %p receiver %p serial %u\n",
-+ pending,
-+ pending->will_send_reply,
-+ pending->will_get_reply,
-+ pending->reply_serial);
-+
-+ transaction = bus_transaction_new (connections->context);
-+ if (transaction == NULL)
-+ return FALSE;
-+
-+ if (!bus_pending_reply_send_no_reply (connections,
-+ transaction,
-+ pending))
-+ {
-+ bus_transaction_cancel_and_free (transaction);
-+ return FALSE;
-+ }
-+
-+ _dbus_list_remove_link (&connections->pending_replies->items,
-+ link);
-+ bus_pending_reply_free (pending);
-+ bus_transaction_execute_and_free (transaction);
-+
-+ return TRUE;
-+}
-+
-+static void
-+bus_connection_drop_pending_replies (BusConnections *connections,
-+ DBusConnection *connection)
-+{
-+ /* The DBusConnection is almost 100% finalized here, so you can't
-+ * do anything with it except check for pointer equality
-+ */
-+ DBusList *link;
-+
-+ _dbus_verbose ("Dropping pending replies that involve connection %p\n",
-+ connection);
-+
-+ link = _dbus_list_get_first_link (&connections->pending_replies->items);
-+ while (link != NULL)
-+ {
-+ DBusList *next;
-+ BusPendingReply *pending;
-+
-+ next = _dbus_list_get_next_link (&connections->pending_replies->items,
-+ link);
-+ pending = link->data;
-+
-+ if (pending->will_get_reply == connection)
-+ {
-+ /* We don't need to track this pending reply anymore */
-+
-+ _dbus_verbose ("Dropping pending reply %p, replier %p receiver %p serial %u\n",
-+ pending,
-+ pending->will_send_reply,
-+ pending->will_get_reply,
-+ pending->reply_serial);
-+
-+ _dbus_list_remove_link (&connections->pending_replies->items,
-+ link);
-+ bus_pending_reply_free (pending);
-+ }
-+ else if (pending->will_send_reply == connection)
-+ {
-+ /* The reply isn't going to be sent, so set things
-+ * up so it will be expired right away
-+ */
-+ _dbus_verbose ("Will expire pending reply %p, replier %p receiver %p serial %u\n",
-+ pending,
-+ pending->will_send_reply,
-+ pending->will_get_reply,
-+ pending->reply_serial);
-+
-+ pending->will_send_reply = NULL;
-+ pending->expire_item.added_tv_sec = 0;
-+ pending->expire_item.added_tv_usec = 0;
-+
-+ bus_expire_timeout_set_interval (connections->pending_replies->timeout,
-+ 0);
-+ }
-+
-+ link = next;
-+ }
-+}
-+
-+
-+typedef struct
-+{
-+ BusPendingReply *pending;
-+ BusConnections *connections;
-+} CancelPendingReplyData;
-+
-+static void
-+cancel_pending_reply (void *data)
-+{
-+ CancelPendingReplyData *d = data;
-+
-+ _dbus_verbose ("%s: d = %p\n", _DBUS_FUNCTION_NAME, d);
-+
-+ if (!_dbus_list_remove (&d->connections->pending_replies->items,
-+ d->pending))
-+ _dbus_assert_not_reached ("pending reply did not exist to be cancelled");
-+
-+ bus_pending_reply_free (d->pending); /* since it's been cancelled */
-+}
-+
-+static void
-+cancel_pending_reply_data_free (void *data)
-+{
-+ CancelPendingReplyData *d = data;
-+
-+ _dbus_verbose ("%s: d = %p\n", _DBUS_FUNCTION_NAME, d);
-+
-+ /* d->pending should be either freed or still
-+ * in the list of pending replies (owned by someone
-+ * else)
-+ */
-+
-+ dbus_free (d);
-+}
-+
-+/*
-+ * Record that a reply is allowed; return TRUE on success.
-+ */
-+dbus_bool_t
-+bus_connections_expect_reply (BusConnections *connections,
-+ BusTransaction *transaction,
-+ DBusConnection *will_get_reply,
-+ DBusConnection *will_send_reply,
-+ DBusMessage *reply_to_this,
-+ DBusError *error)
-+{
-+ BusPendingReply *pending;
-+ dbus_uint32_t reply_serial;
-+ DBusList *link;
-+ CancelPendingReplyData *cprd;
-+ int count;
-+
-+ _dbus_assert (will_get_reply != NULL);
-+ _dbus_assert (will_send_reply != NULL);
-+ _dbus_assert (reply_to_this != NULL);
-+
-+ if (dbus_message_get_no_reply (reply_to_this))
-+ return TRUE; /* we won't allow a reply, since client doesn't care for one. */
-+
-+ reply_serial = dbus_message_get_serial (reply_to_this);
-+
-+ link = _dbus_list_get_first_link (&connections->pending_replies->items);
-+ count = 0;
-+ while (link != NULL)
-+ {
-+ pending = link->data;
-+
-+ if (pending->reply_serial == reply_serial &&
-+ pending->will_get_reply == will_get_reply &&
-+ pending->will_send_reply == will_send_reply)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "Message has the same reply serial as a currently-outstanding existing method call");
-+ return FALSE;
-+ }
-+
-+ link = _dbus_list_get_next_link (&connections->pending_replies->items,
-+ link);
-+ if (pending->will_get_reply == will_get_reply)
-+ ++count;
-+ }
-+
-+ if (count >=
-+ bus_context_get_max_replies_per_connection (connections->context))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "The maximum number of pending replies per connection has been reached");
-+ return FALSE;
-+ }
-+
-+ pending = dbus_new0 (BusPendingReply, 1);
-+ if (pending == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ /* so we can see a not-yet-added pending reply */
-+ pending->expire_item.added_tv_sec = 1;
-+ pending->expire_item.added_tv_usec = 1;
-+#endif
-+
-+ pending->will_get_reply = will_get_reply;
-+ pending->will_send_reply = will_send_reply;
-+ pending->reply_serial = reply_serial;
-+
-+ cprd = dbus_new0 (CancelPendingReplyData, 1);
-+ if (cprd == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ bus_pending_reply_free (pending);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_list_prepend (&connections->pending_replies->items,
-+ pending))
-+ {
-+ BUS_SET_OOM (error);
-+ dbus_free (cprd);
-+ bus_pending_reply_free (pending);
-+ return FALSE;
-+ }
-+
-+ if (!bus_transaction_add_cancel_hook (transaction,
-+ cancel_pending_reply,
-+ cprd,
-+ cancel_pending_reply_data_free))
-+ {
-+ BUS_SET_OOM (error);
-+ _dbus_list_remove (&connections->pending_replies->items, pending);
-+ dbus_free (cprd);
-+ bus_pending_reply_free (pending);
-+ return FALSE;
-+ }
-+
-+ cprd->pending = pending;
-+ cprd->connections = connections;
-+
-+ _dbus_get_current_time (&pending->expire_item.added_tv_sec,
-+ &pending->expire_item.added_tv_usec);
-+
-+ _dbus_verbose ("Added pending reply %p, replier %p receiver %p serial %u\n",
-+ pending,
-+ pending->will_send_reply,
-+ pending->will_get_reply,
-+ pending->reply_serial);
-+
-+ return TRUE;
-+}
-+
-+typedef struct
-+{
-+ DBusList *link;
-+ BusConnections *connections;
-+} CheckPendingReplyData;
-+
-+static void
-+cancel_check_pending_reply (void *data)
-+{
-+ CheckPendingReplyData *d = data;
-+
-+ _dbus_verbose ("%s: d = %p\n", _DBUS_FUNCTION_NAME, d);
-+
-+ _dbus_list_prepend_link (&d->connections->pending_replies->items,
-+ d->link);
-+ d->link = NULL;
-+}
-+
-+static void
-+check_pending_reply_data_free (void *data)
-+{
-+ CheckPendingReplyData *d = data;
-+
-+ _dbus_verbose ("%s: d = %p\n", _DBUS_FUNCTION_NAME, d);
-+
-+ if (d->link != NULL)
-+ {
-+ BusPendingReply *pending = d->link->data;
-+
-+ _dbus_assert (_dbus_list_find_last (&d->connections->pending_replies->items,
-+ pending) == NULL);
-+
-+ bus_pending_reply_free (pending);
-+ _dbus_list_free_link (d->link);
-+ }
-+
-+ dbus_free (d);
-+}
-+
-+/*
-+ * Check whether a reply is allowed, remove BusPendingReply
-+ * if so, return TRUE if so.
-+ */
-+dbus_bool_t
-+bus_connections_check_reply (BusConnections *connections,
-+ BusTransaction *transaction,
-+ DBusConnection *sending_reply,
-+ DBusConnection *receiving_reply,
-+ DBusMessage *reply,
-+ DBusError *error)
-+{
-+ CheckPendingReplyData *cprd;
-+ DBusList *link;
-+ dbus_uint32_t reply_serial;
-+
-+ _dbus_assert (sending_reply != NULL);
-+ _dbus_assert (receiving_reply != NULL);
-+
-+ reply_serial = dbus_message_get_reply_serial (reply);
-+
-+ link = _dbus_list_get_first_link (&connections->pending_replies->items);
-+ while (link != NULL)
-+ {
-+ BusPendingReply *pending = link->data;
-+
-+ if (pending->reply_serial == reply_serial &&
-+ pending->will_get_reply == receiving_reply &&
-+ pending->will_send_reply == sending_reply)
-+ {
-+ _dbus_verbose ("Found pending reply with serial %u\n", reply_serial);
-+ break;
-+ }
-+
-+ link = _dbus_list_get_next_link (&connections->pending_replies->items,
-+ link);
-+ }
-+
-+ if (link == NULL)
-+ {
-+ _dbus_verbose ("No pending reply expected\n");
-+
-+ return FALSE;
-+ }
-+
-+ cprd = dbus_new0 (CheckPendingReplyData, 1);
-+ if (cprd == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!bus_transaction_add_cancel_hook (transaction,
-+ cancel_check_pending_reply,
-+ cprd,
-+ check_pending_reply_data_free))
-+ {
-+ BUS_SET_OOM (error);
-+ dbus_free (cprd);
-+ return FALSE;
-+ }
-+
-+ cprd->link = link;
-+ cprd->connections = connections;
-+
-+ _dbus_list_unlink (&connections->pending_replies->items,
-+ link);
-+
-+ _dbus_assert (_dbus_list_find_last (&connections->pending_replies->items,
-+ link->data) == NULL);
-+
-+ return TRUE;
-+}
-+
-+/*
-+ * Transactions
-+ *
-+ * Note that this is fairly fragile; in particular, don't try to use
-+ * one transaction across any main loop iterations.
-+ */
-+
-+typedef struct
-+{
-+ BusTransaction *transaction;
-+ DBusMessage *message;
-+ DBusPreallocatedSend *preallocated;
-+} MessageToSend;
-+
-+typedef struct
-+{
-+ BusTransactionCancelFunction cancel_function;
-+ DBusFreeFunction free_data_function;
-+ void *data;
-+} CancelHook;
-+
-+struct BusTransaction
-+{
-+ DBusList *connections;
-+ BusContext *context;
-+ DBusList *cancel_hooks;
-+};
-+
-+static void
-+message_to_send_free (DBusConnection *connection,
-+ MessageToSend *to_send)
-+{
-+ if (to_send->message)
-+ dbus_message_unref (to_send->message);
-+
-+ if (to_send->preallocated)
-+ dbus_connection_free_preallocated_send (connection, to_send->preallocated);
-+
-+ dbus_free (to_send);
-+}
-+
-+static void
-+cancel_hook_cancel (void *element,
-+ void *data)
-+{
-+ CancelHook *ch = element;
-+
-+ _dbus_verbose ("Running transaction cancel hook\n");
-+
-+ if (ch->cancel_function)
-+ (* ch->cancel_function) (ch->data);
-+}
-+
-+static void
-+cancel_hook_free (void *element,
-+ void *data)
-+{
-+ CancelHook *ch = element;
-+
-+ if (ch->free_data_function)
-+ (* ch->free_data_function) (ch->data);
-+
-+ dbus_free (ch);
-+}
-+
-+static void
-+free_cancel_hooks (BusTransaction *transaction)
-+{
-+ _dbus_list_foreach (&transaction->cancel_hooks,
-+ cancel_hook_free, NULL);
-+
-+ _dbus_list_clear (&transaction->cancel_hooks);
-+}
-+
-+BusTransaction*
-+bus_transaction_new (BusContext *context)
-+{
-+ BusTransaction *transaction;
-+
-+ transaction = dbus_new0 (BusTransaction, 1);
-+ if (transaction == NULL)
-+ return NULL;
-+
-+ transaction->context = context;
-+
-+ return transaction;
-+}
-+
-+BusContext*
-+bus_transaction_get_context (BusTransaction *transaction)
-+{
-+ return transaction->context;
-+}
-+
-+BusConnections*
-+bus_transaction_get_connections (BusTransaction *transaction)
-+{
-+ return bus_context_get_connections (transaction->context);
-+}
-+
-+dbus_bool_t
-+bus_transaction_send_from_driver (BusTransaction *transaction,
-+ DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ /* We have to set the sender to the driver, and have
-+ * to check security policy since it was not done in
-+ * dispatch.c
-+ */
-+ _dbus_verbose ("Sending %s %s %s from driver\n",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) : "(no interface)",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) : "(no member)",
-+ dbus_message_get_error_name (message) ?
-+ dbus_message_get_error_name (message) : "(no error name)");
-+
-+ if (!dbus_message_set_sender (message, DBUS_SERVICE_DBUS))
-+ return FALSE;
-+
-+ if (bus_connection_is_active (connection))
-+ {
-+ if (!dbus_message_set_destination (message,
-+ bus_connection_get_name (connection)))
-+ return FALSE;
-+ }
-+
-+ /* bus driver never wants a reply */
-+ dbus_message_set_no_reply (message, TRUE);
-+
-+ /* If security policy doesn't allow the message, we silently
-+ * eat it; the driver doesn't care about getting a reply.
-+ */
-+ if (!bus_context_check_security_policy (bus_transaction_get_context (transaction),
-+ transaction,
-+ NULL, connection, connection, message, NULL))
-+ return TRUE;
-+
-+ return bus_transaction_send (transaction, connection, message);
-+}
-+
-+dbus_bool_t
-+bus_transaction_send (BusTransaction *transaction,
-+ DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ MessageToSend *to_send;
-+ BusConnectionData *d;
-+ DBusList *link;
-+
-+ _dbus_verbose (" trying to add %s interface=%s member=%s error=%s to transaction%s\n",
-+ dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR ? "error" :
-+ dbus_message_get_reply_serial (message) != 0 ? "reply" :
-+ "message",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) : "(unset)",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) : "(unset)",
-+ dbus_message_get_error_name (message) ?
-+ dbus_message_get_error_name (message) : "(unset)",
-+ dbus_connection_get_is_connected (connection) ?
-+ "" : " (disconnected)");
-+
-+ _dbus_assert (dbus_message_get_sender (message) != NULL);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ return TRUE; /* silently ignore disconnected connections */
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ to_send = dbus_new (MessageToSend, 1);
-+ if (to_send == NULL)
-+ {
-+ return FALSE;
-+ }
-+
-+ to_send->preallocated = dbus_connection_preallocate_send (connection);
-+ if (to_send->preallocated == NULL)
-+ {
-+ dbus_free (to_send);
-+ return FALSE;
-+ }
-+
-+ dbus_message_ref (message);
-+ to_send->message = message;
-+ to_send->transaction = transaction;
-+
-+ _dbus_verbose ("about to prepend message\n");
-+
-+ if (!_dbus_list_prepend (&d->transaction_messages, to_send))
-+ {
-+ message_to_send_free (connection, to_send);
-+ return FALSE;
-+ }
-+
-+ _dbus_verbose ("prepended message\n");
-+
-+ /* See if we already had this connection in the list
-+ * for this transaction. If we have a pending message,
-+ * then we should already be in transaction->connections
-+ */
-+ link = _dbus_list_get_first_link (&d->transaction_messages);
-+ _dbus_assert (link->data == to_send);
-+ link = _dbus_list_get_next_link (&d->transaction_messages, link);
-+ while (link != NULL)
-+ {
-+ MessageToSend *m = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&d->transaction_messages, link);
-+
-+ if (m->transaction == transaction)
-+ break;
-+
-+ link = next;
-+ }
-+
-+ if (link == NULL)
-+ {
-+ if (!_dbus_list_prepend (&transaction->connections, connection))
-+ {
-+ _dbus_list_remove (&d->transaction_messages, to_send);
-+ message_to_send_free (connection, to_send);
-+ return FALSE;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+connection_cancel_transaction (DBusConnection *connection,
-+ BusTransaction *transaction)
-+{
-+ DBusList *link;
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ link = _dbus_list_get_first_link (&d->transaction_messages);
-+ while (link != NULL)
-+ {
-+ MessageToSend *m = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&d->transaction_messages, link);
-+
-+ if (m->transaction == transaction)
-+ {
-+ _dbus_list_remove_link (&d->transaction_messages,
-+ link);
-+
-+ message_to_send_free (connection, m);
-+ }
-+
-+ link = next;
-+ }
-+}
-+
-+void
-+bus_transaction_cancel_and_free (BusTransaction *transaction)
-+{
-+ DBusConnection *connection;
-+
-+ _dbus_verbose ("TRANSACTION: cancelled\n");
-+
-+ while ((connection = _dbus_list_pop_first (&transaction->connections)))
-+ connection_cancel_transaction (connection, transaction);
-+
-+ _dbus_assert (transaction->connections == NULL);
-+
-+ _dbus_list_foreach (&transaction->cancel_hooks,
-+ cancel_hook_cancel, NULL);
-+
-+ free_cancel_hooks (transaction);
-+
-+ dbus_free (transaction);
-+}
-+
-+static void
-+connection_execute_transaction (DBusConnection *connection,
-+ BusTransaction *transaction)
-+{
-+ DBusList *link;
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ /* Send the queue in order (FIFO) */
-+ link = _dbus_list_get_last_link (&d->transaction_messages);
-+ while (link != NULL)
-+ {
-+ MessageToSend *m = link->data;
-+ DBusList *prev = _dbus_list_get_prev_link (&d->transaction_messages, link);
-+
-+ if (m->transaction == transaction)
-+ {
-+ _dbus_list_remove_link (&d->transaction_messages,
-+ link);
-+
-+ _dbus_assert (dbus_message_get_sender (m->message) != NULL);
-+
-+ dbus_connection_send_preallocated (connection,
-+ m->preallocated,
-+ m->message,
-+ NULL);
-+
-+ m->preallocated = NULL; /* so we don't double-free it */
-+
-+ message_to_send_free (connection, m);
-+ }
-+
-+ link = prev;
-+ }
-+}
-+
-+void
-+bus_transaction_execute_and_free (BusTransaction *transaction)
-+{
-+ /* For each connection in transaction->connections
-+ * send the messages
-+ */
-+ DBusConnection *connection;
-+
-+ _dbus_verbose ("TRANSACTION: executing\n");
-+
-+ while ((connection = _dbus_list_pop_first (&transaction->connections)))
-+ connection_execute_transaction (connection, transaction);
-+
-+ _dbus_assert (transaction->connections == NULL);
-+
-+ free_cancel_hooks (transaction);
-+
-+ dbus_free (transaction);
-+}
-+
-+static void
-+bus_connection_remove_transactions (DBusConnection *connection)
-+{
-+ MessageToSend *to_send;
-+ BusConnectionData *d;
-+
-+ d = BUS_CONNECTION_DATA (connection);
-+ _dbus_assert (d != NULL);
-+
-+ while ((to_send = _dbus_list_get_first (&d->transaction_messages)))
-+ {
-+ /* only has an effect for the first MessageToSend listing this transaction */
-+ _dbus_list_remove (&to_send->transaction->connections,
-+ connection);
-+
-+ _dbus_list_remove (&d->transaction_messages, to_send);
-+ message_to_send_free (connection, to_send);
-+ }
-+}
-+
-+/**
-+ * Converts the DBusError to a message reply
-+ */
-+dbus_bool_t
-+bus_transaction_send_error_reply (BusTransaction *transaction,
-+ DBusConnection *connection,
-+ const DBusError *error,
-+ DBusMessage *in_reply_to)
-+{
-+ DBusMessage *reply;
-+
-+ _dbus_assert (error != NULL);
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+
-+ _dbus_verbose ("Sending error reply %s \"%s\"\n",
-+ error->name, error->message);
-+
-+ reply = dbus_message_new_error (in_reply_to,
-+ error->name,
-+ error->message);
-+ if (reply == NULL)
-+ return FALSE;
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, reply))
-+ {
-+ dbus_message_unref (reply);
-+ return FALSE;
-+ }
-+
-+ dbus_message_unref (reply);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_transaction_add_cancel_hook (BusTransaction *transaction,
-+ BusTransactionCancelFunction cancel_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ CancelHook *ch;
-+
-+ ch = dbus_new (CancelHook, 1);
-+ if (ch == NULL)
-+ return FALSE;
-+
-+ _dbus_verbose (" adding cancel hook function = %p data = %p\n",
-+ cancel_function, data);
-+
-+ ch->cancel_function = cancel_function;
-+ ch->data = data;
-+ ch->free_data_function = free_data_function;
-+
-+ /* It's important that the hooks get run in reverse order that they
-+ * were added
-+ */
-+ if (!_dbus_list_prepend (&transaction->cancel_hooks, ch))
-+ {
-+ dbus_free (ch);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-diff -Naur dbus-0.61.orig/bus/connection.h dbus-0.61/bus/connection.h
---- dbus-0.61.orig/bus/connection.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/connection.h 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,140 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* connection.h Client connections
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_CONNECTION_H
-+#define BUS_CONNECTION_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-list.h>
-+#include "bus.h"
-+
-+typedef dbus_bool_t (* BusConnectionForeachFunction) (DBusConnection *connection,
-+ void *data);
-+
-+
-+BusConnections* bus_connections_new (BusContext *context);
-+BusConnections* bus_connections_ref (BusConnections *connections);
-+void bus_connections_unref (BusConnections *connections);
-+dbus_bool_t bus_connections_setup_connection (BusConnections *connections,
-+ DBusConnection *connection);
-+void bus_connections_foreach (BusConnections *connections,
-+ BusConnectionForeachFunction function,
-+ void *data);
-+void bus_connections_foreach_active (BusConnections *connections,
-+ BusConnectionForeachFunction function,
-+ void *data);
-+BusContext* bus_connections_get_context (BusConnections *connections);
-+void bus_connections_increment_stamp (BusConnections *connections);
-+BusContext* bus_connection_get_context (DBusConnection *connection);
-+BusConnections* bus_connection_get_connections (DBusConnection *connection);
-+BusRegistry* bus_connection_get_registry (DBusConnection *connection);
-+BusActivation* bus_connection_get_activation (DBusConnection *connection);
-+BusMatchmaker* bus_connection_get_matchmaker (DBusConnection *connection);
-+BusSELinuxID* bus_connection_get_selinux_id (DBusConnection *connection);
-+dbus_bool_t bus_connections_check_limits (BusConnections *connections,
-+ DBusConnection *requesting_completion,
-+ DBusError *error);
-+void bus_connections_expire_incomplete (BusConnections *connections);
-+
-+dbus_bool_t bus_connections_expect_reply (BusConnections *connections,
-+ BusTransaction *transaction,
-+ DBusConnection *will_get_reply,
-+ DBusConnection *will_send_reply,
-+ DBusMessage *reply_to_this,
-+ DBusError *error);
-+dbus_bool_t bus_connections_check_reply (BusConnections *connections,
-+ BusTransaction *transaction,
-+ DBusConnection *sending_reply,
-+ DBusConnection *receiving_reply,
-+ DBusMessage *reply,
-+ DBusError *error);
-+
-+dbus_bool_t bus_connection_mark_stamp (DBusConnection *connection);
-+
-+dbus_bool_t bus_connection_is_active (DBusConnection *connection);
-+const char *bus_connection_get_name (DBusConnection *connection);
-+
-+dbus_bool_t bus_connection_preallocate_oom_error (DBusConnection *connection);
-+void bus_connection_send_oom_error (DBusConnection *connection,
-+ DBusMessage *in_reply_to);
-+
-+/* called by signals.c */
-+dbus_bool_t bus_connection_add_match_rule (DBusConnection *connection,
-+ BusMatchRule *rule);
-+void bus_connection_add_match_rule_link (DBusConnection *connection,
-+ DBusList *link);
-+void bus_connection_remove_match_rule (DBusConnection *connection,
-+ BusMatchRule *rule);
-+int bus_connection_get_n_match_rules (DBusConnection *connection);
-+
-+
-+/* called by services.c */
-+dbus_bool_t bus_connection_add_owned_service (DBusConnection *connection,
-+ BusService *service);
-+void bus_connection_remove_owned_service (DBusConnection *connection,
-+ BusService *service);
-+void bus_connection_add_owned_service_link (DBusConnection *connection,
-+ DBusList *link);
-+int bus_connection_get_n_services_owned (DBusConnection *connection);
-+
-+/* called by driver.c */
-+dbus_bool_t bus_connection_complete (DBusConnection *connection,
-+ const DBusString *name,
-+ DBusError *error);
-+
-+/* called by dispatch.c when the connection is dropped */
-+void bus_connection_disconnected (DBusConnection *connection);
-+
-+dbus_bool_t bus_connection_is_in_group (DBusConnection *connection,
-+ unsigned long gid);
-+dbus_bool_t bus_connection_get_groups (DBusConnection *connection,
-+ unsigned long **groups,
-+ int *n_groups,
-+ DBusError *error);
-+BusClientPolicy* bus_connection_get_policy (DBusConnection *connection);
-+
-+/* transaction API so we can send or not send a block of messages as a whole */
-+
-+typedef void (* BusTransactionCancelFunction) (void *data);
-+
-+BusTransaction* bus_transaction_new (BusContext *context);
-+BusContext* bus_transaction_get_context (BusTransaction *transaction);
-+BusConnections* bus_transaction_get_connections (BusTransaction *transaction);
-+dbus_bool_t bus_transaction_send (BusTransaction *transaction,
-+ DBusConnection *connection,
-+ DBusMessage *message);
-+dbus_bool_t bus_transaction_send_from_driver (BusTransaction *transaction,
-+ DBusConnection *connection,
-+ DBusMessage *message);
-+dbus_bool_t bus_transaction_send_error_reply (BusTransaction *transaction,
-+ DBusConnection *connection,
-+ const DBusError *error,
-+ DBusMessage *in_reply_to);
-+void bus_transaction_cancel_and_free (BusTransaction *transaction);
-+void bus_transaction_execute_and_free (BusTransaction *transaction);
-+dbus_bool_t bus_transaction_add_cancel_hook (BusTransaction *transaction,
-+ BusTransactionCancelFunction cancel_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+
-+#endif /* BUS_CONNECTION_H */
-diff -Naur dbus-0.61.orig/bus/dbus-daemon.1 dbus-0.61/bus/dbus-daemon.1
---- dbus-0.61.orig/bus/dbus-daemon.1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/dbus-daemon.1 2006-02-24 17:37:56.000000000 +0100
-@@ -0,0 +1,575 @@
-+.\"
-+.\" dbus-daemon manual page.
-+.\" Copyright (C) 2003 Red Hat, Inc.
-+.\"
-+.TH dbus-daemon 1
-+.SH NAME
-+dbus-daemon \- Message bus daemon
-+.SH SYNOPSIS
-+.PP
-+.B dbus-daemon
-+dbus-daemon [\-\-version] [\-\-session] [\-\-system] [\-\-config-file=FILE]
-+[\-\-print-address[=DESCRIPTOR]] [\-\-print-pid[=DESCRIPTOR]] [\-\-fork]
-+
-+.SH DESCRIPTION
-+
-+\fIdbus-daemon\fP is the D-BUS message bus daemon. See
-+http://www.freedesktop.org/software/dbus/ for more information about
-+the big picture. D-BUS is first a library that provides one-to-one
-+communication between any two applications; \fIdbus-daemon\fP is an
-+application that uses this library to implement a message bus
-+daemon. Multiple programs connect to the message bus daemon and can
-+exchange messages with one another.
-+
-+.PP
-+There are two standard message bus instances: the systemwide message bus
-+(installed on many systems as the "messagebus" init service) and the
-+per-user-login-session message bus (started each time a user logs in).
-+\fIdbus-daemon\fP is used for both of these instances, but with
-+a different configuration file.
-+
-+.PP
-+The \-\-session option is equivalent to
-+"\-\-config-file=/usr/local/etc/dbus-1/session.conf" and the \-\-system
-+option is equivalent to
-+"\-\-config-file=/usr/local/etc/dbus-1/system.conf". By creating
-+additional configuration files and using the \-\-config-file option,
-+additional special-purpose message bus daemons could be created.
-+
-+.PP
-+The systemwide daemon is normally launched by an init script,
-+standardly called simply "messagebus".
-+
-+.PP
-+The systemwide daemon is largely used for broadcasting system events,
-+such as changes to the printer queue, or adding/removing devices.
-+
-+.PP
-+The per-session daemon is used for various interprocess communication
-+among desktop applications (however, it is not tied to X or the GUI
-+in any way).
-+
-+.PP
-+SIGHUP will cause the D-BUS daemon to PARTIALLY reload its
-+configuration file. Some configuration changes would require kicking
-+all apps off the bus; so they will only take effect if you restart the
-+daemon. Policy changes should take effect with SIGHUP.
-+
-+.SH OPTIONS
-+The following options are supported:
-+.TP
-+.I "--config-file=FILE"
-+Use the given configuration file.
-+.TP
-+.I "--fork"
-+Force the message bus to fork and become a daemon, even if
-+the configuration file does not specify that it should.
-+In most contexts the configuration file already gets this
-+right, though.
-+.TP
-+.I "--print-address[=DESCRIPTOR]"
-+Print the address of the message bus to standard output, or
-+to the given file descriptor. This is used by programs that
-+launch the message bus.
-+.TP
-+.I "--print-pid[=DESCRIPTOR]"
-+Print the process ID of the message bus to standard output, or
-+to the given file descriptor. This is used by programs that
-+launch the message bus.
-+.TP
-+.I "--session"
-+Use the standard configuration file for the per-login-session message
-+bus.
-+.TP
-+.I "--system"
-+Use the standard configuration file for the systemwide message bus.
-+.TP
-+.I "--version"
-+Print the version of the daemon.
-+
-+.SH CONFIGURATION FILE
-+
-+A message bus daemon has a configuration file that specializes it
-+for a particular application. For example, one configuration
-+file might set up the message bus to be a systemwide message bus,
-+while another might set it up to be a per-user-login-session bus.
-+
-+.PP
-+The configuration file also establishes resource limits, security
-+parameters, and so forth.
-+
-+.PP
-+The configuration file is not part of any interoperability
-+specification and its backward compatibility is not guaranteed; this
-+document is documentation, not specification.
-+
-+.PP
-+The standard systemwide and per-session message bus setups are
-+configured in the files "/usr/local/etc/dbus-1/system.conf" and
-+"/usr/local/etc/dbus-1/session.conf". These files normally
-+<include> a system-local.conf or session-local.conf; you can put local
-+overrides in those files to avoid modifying the primary configuration
-+files.
-+
-+.PP
-+The configuration file is an XML document. It must have the following
-+doctype declaration:
-+.nf
-+
-+ <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+
-+.fi
-+
-+.PP
-+The following elements may be present in the configuration file.
-+
-+.TP
-+.I "<busconfig>"
-+
-+.PP
-+Root element.
-+
-+.TP
-+.I "<type>"
-+
-+.PP
-+The well-known type of the message bus. Currently known values are
-+"system" and "session"; if other values are set, they should be
-+either added to the D-BUS specification, or namespaced. The last
-+<type> element "wins" (previous values are ignored).
-+
-+.PP
-+Example: <type>session</type>
-+
-+.TP
-+.I "<include>"
-+
-+.PP
-+Include a file <include>filename.conf</include> at this point. If the
-+filename is relative, it is located relative to the configuration file
-+doing the including.
-+
-+.PP
-+<include> has an optional attribute "ignore_missing=(yes|no)"
-+which defaults to "no" if not provided. This attribute
-+controls whether it's a fatal error for the included file
-+to be absent.
-+
-+.TP
-+.I "<includedir>"
-+
-+.PP
-+Include all files in <includedir>foo.d</includedir> at this
-+point. Files in the directory are included in undefined order.
-+Only files ending in ".conf" are included.
-+
-+.PP
-+This is intended to allow extension of the system bus by particular
-+packages. For example, if CUPS wants to be able to send out
-+notification of printer queue changes, it could install a file to
-+/usr/local/etc/dbus-1/system.d that allowed all apps to receive
-+this message and allowed the printer daemon user to send it.
-+
-+.TP
-+.I "<user>"
-+
-+.PP
-+The user account the daemon should run as, as either a username or a
-+UID. If the daemon cannot change to this UID on startup, it will exit.
-+If this element is not present, the daemon will not change or care
-+about its UID.
-+
-+.PP
-+The last <user> entry in the file "wins", the others are ignored.
-+
-+.PP
-+The user is changed after the bus has completed initialization. So
-+sockets etc. will be created before changing user, but no data will be
-+read from clients before changing user. This means that sockets
-+and PID files can be created in a location that requires root
-+privileges for writing.
-+
-+.TP
-+.I "<fork>"
-+
-+.PP
-+If present, the bus daemon becomes a real daemon (forks
-+into the background, etc.). This is generally used
-+rather than the \-\-fork command line option.
-+
-+.TP
-+.I "<listen>"
-+
-+.PP
-+Add an address that the bus should listen on. The
-+address is in the standard D-BUS format that contains
-+a transport name plus possible parameters/options.
-+
-+.PP
-+Example: <listen>unix:path=/tmp/foo</listen>
-+
-+.PP
-+If there are multiple <listen> elements, then the bus listens
-+on multiple addresses. The bus will pass its address to
-+started services or other interested parties with
-+the last address given in <listen> first. That is,
-+apps will try to connect to the last <listen> address first.
-+
-+.TP
-+.I "<auth>"
-+
-+.PP
-+Lists permitted authorization mechanisms. If this element doesn't
-+exist, then all known mechanisms are allowed. If there are multiple
-+<auth> elements, all the listed mechanisms are allowed. The order in
-+which mechanisms are listed is not meaningful.
-+
-+.PP
-+Example: <auth>EXTERNAL</auth>
-+
-+.PP
-+Example: <auth>DBUS_COOKIE_SHA1</auth>
-+
-+.TP
-+.I "<servicedir>"
-+
-+.PP
-+Adds a directory to scan for .service files. Directories are
-+scanned starting with the last to appear in the config file
-+(the first .service file found that provides a particular
-+service will be used).
-+
-+.PP
-+Service files tell the bus how to automatically start a program.
-+They are primarily used with the per-user-session bus,
-+not the systemwide bus.
-+
-+.TP
-+.I "<limit>"
-+
-+.PP
-+<limit> establishes a resource limit. For example:
-+.nf
-+ <limit name="max_message_size">64</limit>
-+ <limit name="max_completed_connections">512</limit>
-+.fi
-+
-+.PP
-+The name attribute is mandatory.
-+Available limit names are:
-+.nf
-+ "max_incoming_bytes" : total size in bytes of messages
-+ incoming from a single connection
-+ "max_outgoing_bytes" : total size in bytes of messages
-+ queued up for a single connection
-+ "max_message_size" : max size of a single message in
-+ bytes
-+ "service_start_timeout" : milliseconds (thousandths) until
-+ a started service has to connect
-+ "auth_timeout" : milliseconds (thousandths) a
-+ connection is given to
-+ authenticate
-+ "max_completed_connections" : max number of authenticated connections
-+ "max_incomplete_connections" : max number of unauthenticated
-+ connections
-+ "max_connections_per_user" : max number of completed connections from
-+ the same user
-+ "max_pending_service_starts" : max number of service launches in
-+ progress at the same time
-+ "max_names_per_connection" : max number of names a single
-+ connection can own
-+ "max_match_rules_per_connection": max number of match rules for a single
-+ connection
-+ "max_replies_per_connection" : max number of pending method
-+ replies per connection
-+ (number of calls-in-progress)
-+ "reply_timeout" : milliseconds (thousandths)
-+ until a method call times out
-+.fi
-+
-+.PP
-+The max incoming/outgoing queue sizes allow a new message to be queued
-+if one byte remains below the max. So you can in fact exceed the max
-+by max_message_size.
-+
-+.PP
-+max_completed_connections divided by max_connections_per_user is the
-+number of users that can work together to DOS all other users by using
-+up all connections.
-+
-+.TP
-+.I "<policy>"
-+
-+.PP
-+The <policy> element defines a policy to be applied to a particular
-+set of connections to the bus. A policy is made up of
-+<allow> and <deny> elements.
-+
-+.PP
-+The <policy> element has one of three attributes:
-+.nf
-+ context="(default|mandatory)"
-+ user="username or userid"
-+ group="group name or gid"
-+.fi
-+
-+.PP
-+
-+Policies are applied to a connection as follows:
-+.nf
-+ - all context="default" policies are applied
-+ - all group="connection's user's group" policies are applied
-+ in undefined order
-+ - all user="connection's auth user" policies are applied
-+ in undefined order
-+ - all context="mandatory" policies are applied
-+.fi
-+
-+.PP
-+Policies applied later will override those applied earlier,
-+when the policies overlap. Multiple policies with the same
-+user/group/context are applied in the order they appear
-+in the config file.
-+
-+.TP
-+.I "<deny>"
-+.I "<allow>"
-+
-+.PP
-+A <deny> element appears below a <policy> element and prohibits some
-+action. The <allow> element makes an exception to previous <deny>
-+statements, and works just like <deny> but with the inverse meaning.
-+
-+.PP
-+The possible attributes of these elements are:
-+.nf
-+ send_interface="interface_name"
-+ send_member="method_or_signal_name"
-+ send_error="error_name"
-+ send_destination="name"
-+ send_type="method_call" | "method_return" | "signal" | "error"
-+ send_path="/path/name"
-+
-+ receive_interface="interface_name"
-+ receive_member="method_or_signal_name"
-+ receive_error="error_name"
-+ receive_sender="name"
-+ receive_type="method_call" | "method_return" | "signal" | "error"
-+ receive_path="/path/name"
-+
-+ send_requested_reply="true" | "false"
-+ receive_requested_reply="true" | "false"
-+
-+ eavesdrop="true" | "false"
-+
-+ own="name"
-+ user="username"
-+ group="groupname"
-+.fi
-+
-+.PP
-+Examples:
-+.nf
-+ <deny send_interface="org.freedesktop.System" send_member="Reboot"/>
-+ <deny receive_interface="org.freedesktop.System" receive_member="Reboot"/>
-+ <deny own="org.freedesktop.System"/>
-+ <deny send_destination="org.freedesktop.System"/>
-+ <deny receive_sender="org.freedesktop.System"/>
-+ <deny user="john"/>
-+ <deny group="enemies"/>
-+.fi
-+
-+.PP
-+The <deny> element's attributes determine whether the deny "matches" a
-+particular action. If it matches, the action is denied (unless later
-+rules in the config file allow it).
-+
-+.PP
-+send_destination and receive_sender rules mean that messages may not be
-+sent to or received from the *owner* of the given name, not that
-+they may not be sent *to that name*. That is, if a connection
-+owns services A, B, C, and sending to A is denied, sending to B or C
-+will not work either.
-+
-+.PP
-+The other send_* and receive_* attributes are purely textual/by-value
-+matches against the given field in the message header.
-+
-+.PP
-+"Eavesdropping" occurs when an application receives a message that
-+was explicitly addressed to a name the application does not own.
-+Eavesdropping thus only applies to messages that are addressed to
-+services (i.e. it does not apply to signals).
-+
-+.PP
-+For <allow>, eavesdrop="true" indicates that the rule matches even
-+when eavesdropping. eavesdrop="false" is the default and means that
-+the rule only allows messages to go to their specified recipient.
-+For <deny>, eavesdrop="true" indicates that the rule matches
-+only when eavesdropping. eavesdrop="false" is the default for <deny>
-+also, but here it means that the rule applies always, even when
-+not eavesdropping. The eavesdrop attribute can only be combined with
-+receive rules (with receive_* attributes).
-+
-+
-+.PP
-+The [send|receive]_requested_reply attribute works similarly to the eavesdrop
-+attribute. It controls whether the <deny> or <allow> matches a reply
-+that is expected (corresponds to a previous method call message).
-+This attribute only makes sense for reply messages (errors and method
-+returns), and is ignored for other message types.
-+
-+.PP
-+For <allow>, [send|receive]_requested_reply="true" is the default and indicates that
-+only requested replies are allowed by the
-+rule. [send|receive]_requested_reply="false" means that the rule allows any reply
-+even if unexpected.
-+
-+.PP
-+For <deny>, [send|receive]_requested_reply="false" is the default but indicates that
-+the rule matches only when the reply was not
-+requested. [send|receive]_requested_reply="true" indicates that the rule applies
-+always, regardless of pending reply state.
-+
-+.PP
-+user and group denials mean that the given user or group may
-+not connect to the message bus.
-+
-+.PP
-+For "name", "username", "groupname", etc.
-+the character "*" can be substituted, meaning "any." Complex globs
-+like "foo.bar.*" aren't allowed for now because they'd be work to
-+implement and maybe encourage sloppy security anyway.
-+
-+.PP
-+It does not make sense to deny a user or group inside a <policy>
-+for a user or group; user/group denials can only be inside
-+context="default" or context="mandatory" policies.
-+
-+.PP
-+A single <deny> rule may specify combinations of attributes such as
-+send_destination and send_interface and send_type. In this case, the
-+denial applies only if both attributes match the message being denied.
-+e.g. <deny send_interface="foo.bar" send_destination="foo.blah"/> would
-+deny messages with the given interface AND the given bus name.
-+To get an OR effect you specify multiple <deny> rules.
-+
-+.PP
-+You can't include both send_ and receive_ attributes on the same
-+rule, since "whether the message can be sent" and "whether it can be
-+received" are evaluated separately.
-+
-+.PP
-+Be careful with send_interface/receive_interface, because the
-+interface field in messages is optional.
-+
-+.TP
-+.I "<selinux>"
-+
-+.PP
-+The <selinux> element contains settings related to Security Enhanced Linux.
-+More details below.
-+
-+.TP
-+.I "<associate>"
-+
-+.PP
-+An <associate> element appears below an <selinux> element and
-+creates a mapping. Right now only one kind of association is possible:
-+.nf
-+ <associate own="org.freedesktop.Foobar" context="foo_t"/>
-+.fi
-+
-+.PP
-+This means that if a connection asks to own the name
-+"org.freedesktop.Foobar" then the source context will be the context
-+of the connection and the target context will be "foo_t" - see the
-+short discussion of SELinux below.
-+
-+.PP
-+Note, the context here is the target context when requesting a name,
-+NOT the context of the connection owning the name.
-+
-+.PP
-+There's currently no way to set a default for owning any name, if
-+we add this syntax it will look like:
-+.nf
-+ <associate own="*" context="foo_t"/>
-+.fi
-+If you find a reason this is useful, let the developers know.
-+Right now the default will be the security context of the bus itself.
-+
-+.PP
-+If two <associate> elements specify the same name, the element
-+appearing later in the configuration file will be used.
-+
-+.SH SELinux
-+
-+.PP
-+See http://www.nsa.gov/selinux/ for full details on SELinux. Some useful excerpts:
-+
-+.IP "" 8
-+Every subject (process) and object (e.g. file, socket, IPC object,
-+etc) in the system is assigned a collection of security attributes,
-+known as a security context. A security context contains all of the
-+security attributes associated with a particular subject or object
-+that are relevant to the security policy.
-+
-+.IP "" 8
-+In order to better encapsulate security contexts and to provide
-+greater efficiency, the policy enforcement code of SELinux typically
-+handles security identifiers (SIDs) rather than security contexts. A
-+SID is an integer that is mapped by the security server to a security
-+context at runtime.
-+
-+.IP "" 8
-+When a security decision is required, the policy enforcement code
-+passes a pair of SIDs (typically the SID of a subject and the SID of
-+an object, but sometimes a pair of subject SIDs or a pair of object
-+SIDs), and an object security class to the security server. The object
-+security class indicates the kind of object, e.g. a process, a regular
-+file, a directory, a TCP socket, etc.
-+
-+.IP "" 8
-+Access decisions specify whether or not a permission is granted for a
-+given pair of SIDs and class. Each object class has a set of
-+associated permissions defined to control operations on objects with
-+that class.
-+
-+.PP
-+D-BUS performs SELinux security checks in two places.
-+
-+.PP
-+First, any time a message is routed from one connection to another
-+connection, the bus daemon will check permissions with the security context of
-+the first connection as source, security context of the second connection
-+as target, object class "dbus" and requested permission "send_msg".
-+
-+.PP
-+If a security context is not available for a connection
-+(impossible when using UNIX domain sockets), then the target
-+context used is the context of the bus daemon itself.
-+There is currently no way to change this default, because we're
-+assuming that only UNIX domain sockets will be used to
-+connect to the systemwide bus. If this changes, we'll
-+probably add a way to set the default connection context.
-+
-+.PP
-+Second, any time a connection asks to own a name,
-+the bus daemon will check permissions with the security
-+context of the connection as source, the security context specified
-+for the name with an <associate> element as target, object
-+class "dbus" and requested permission "acquire_svc".
-+
-+.PP
-+If the name has no security context associated in the
-+configuration file, the security context of the bus daemon
-+itself will be used.
-+
-+.SH AUTHOR
-+See http://www.freedesktop.org/software/dbus/doc/AUTHORS
-+
-+.SH BUGS
-+Please send bug reports to the D-BUS mailing list or bug tracker,
-+see http://www.freedesktop.org/software/dbus/
-diff -Naur dbus-0.61.orig/bus/dbus-daemon.1.in dbus-0.61/bus/dbus-daemon.1.in
---- dbus-0.61.orig/bus/dbus-daemon.1.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/dbus-daemon.1.in 2005-01-18 23:20:38.000000000 +0100
-@@ -0,0 +1,575 @@
-+.\"
-+.\" dbus-daemon manual page.
-+.\" Copyright (C) 2003 Red Hat, Inc.
-+.\"
-+.TH dbus-daemon 1
-+.SH NAME
-+dbus-daemon \- Message bus daemon
-+.SH SYNOPSIS
-+.PP
-+.B dbus-daemon
-+dbus-daemon [\-\-version] [\-\-session] [\-\-system] [\-\-config-file=FILE]
-+[\-\-print-address[=DESCRIPTOR]] [\-\-print-pid[=DESCRIPTOR]] [\-\-fork]
-+
-+.SH DESCRIPTION
-+
-+\fIdbus-daemon\fP is the D-BUS message bus daemon. See
-+http://www.freedesktop.org/software/dbus/ for more information about
-+the big picture. D-BUS is first a library that provides one-to-one
-+communication between any two applications; \fIdbus-daemon\fP is an
-+application that uses this library to implement a message bus
-+daemon. Multiple programs connect to the message bus daemon and can
-+exchange messages with one another.
-+
-+.PP
-+There are two standard message bus instances: the systemwide message bus
-+(installed on many systems as the "messagebus" init service) and the
-+per-user-login-session message bus (started each time a user logs in).
-+\fIdbus-daemon\fP is used for both of these instances, but with
-+a different configuration file.
-+
-+.PP
-+The \-\-session option is equivalent to
-+"\-\-config-file=@EXPANDED_SYSCONFDIR@/dbus-1/session.conf" and the \-\-system
-+option is equivalent to
-+"\-\-config-file=@EXPANDED_SYSCONFDIR@/dbus-1/system.conf". By creating
-+additional configuration files and using the \-\-config-file option,
-+additional special-purpose message bus daemons could be created.
-+
-+.PP
-+The systemwide daemon is normally launched by an init script,
-+standardly called simply "messagebus".
-+
-+.PP
-+The systemwide daemon is largely used for broadcasting system events,
-+such as changes to the printer queue, or adding/removing devices.
-+
-+.PP
-+The per-session daemon is used for various interprocess communication
-+among desktop applications (however, it is not tied to X or the GUI
-+in any way).
-+
-+.PP
-+SIGHUP will cause the D-BUS daemon to PARTIALLY reload its
-+configuration file. Some configuration changes would require kicking
-+all apps off the bus; so they will only take effect if you restart the
-+daemon. Policy changes should take effect with SIGHUP.
-+
-+.SH OPTIONS
-+The following options are supported:
-+.TP
-+.I "--config-file=FILE"
-+Use the given configuration file.
-+.TP
-+.I "--fork"
-+Force the message bus to fork and become a daemon, even if
-+the configuration file does not specify that it should.
-+In most contexts the configuration file already gets this
-+right, though.
-+.TP
-+.I "--print-address[=DESCRIPTOR]"
-+Print the address of the message bus to standard output, or
-+to the given file descriptor. This is used by programs that
-+launch the message bus.
-+.TP
-+.I "--print-pid[=DESCRIPTOR]"
-+Print the process ID of the message bus to standard output, or
-+to the given file descriptor. This is used by programs that
-+launch the message bus.
-+.TP
-+.I "--session"
-+Use the standard configuration file for the per-login-session message
-+bus.
-+.TP
-+.I "--system"
-+Use the standard configuration file for the systemwide message bus.
-+.TP
-+.I "--version"
-+Print the version of the daemon.
-+
-+.SH CONFIGURATION FILE
-+
-+A message bus daemon has a configuration file that specializes it
-+for a particular application. For example, one configuration
-+file might set up the message bus to be a systemwide message bus,
-+while another might set it up to be a per-user-login-session bus.
-+
-+.PP
-+The configuration file also establishes resource limits, security
-+parameters, and so forth.
-+
-+.PP
-+The configuration file is not part of any interoperability
-+specification and its backward compatibility is not guaranteed; this
-+document is documentation, not specification.
-+
-+.PP
-+The standard systemwide and per-session message bus setups are
-+configured in the files "@EXPANDED_SYSCONFDIR@/dbus-1/system.conf" and
-+"@EXPANDED_SYSCONFDIR@/dbus-1/session.conf". These files normally
-+<include> a system-local.conf or session-local.conf; you can put local
-+overrides in those files to avoid modifying the primary configuration
-+files.
-+
-+.PP
-+The configuration file is an XML document. It must have the following
-+doctype declaration:
-+.nf
-+
-+ <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+
-+.fi
-+
-+.PP
-+The following elements may be present in the configuration file.
-+
-+.TP
-+.I "<busconfig>"
-+
-+.PP
-+Root element.
-+
-+.TP
-+.I "<type>"
-+
-+.PP
-+The well-known type of the message bus. Currently known values are
-+"system" and "session"; if other values are set, they should be
-+either added to the D-BUS specification, or namespaced. The last
-+<type> element "wins" (previous values are ignored).
-+
-+.PP
-+Example: <type>session</type>
-+
-+.TP
-+.I "<include>"
-+
-+.PP
-+Include a file <include>filename.conf</include> at this point. If the
-+filename is relative, it is located relative to the configuration file
-+doing the including.
-+
-+.PP
-+<include> has an optional attribute "ignore_missing=(yes|no)"
-+which defaults to "no" if not provided. This attribute
-+controls whether it's a fatal error for the included file
-+to be absent.
-+
-+.TP
-+.I "<includedir>"
-+
-+.PP
-+Include all files in <includedir>foo.d</includedir> at this
-+point. Files in the directory are included in undefined order.
-+Only files ending in ".conf" are included.
-+
-+.PP
-+This is intended to allow extension of the system bus by particular
-+packages. For example, if CUPS wants to be able to send out
-+notification of printer queue changes, it could install a file to
-+ at EXPANDED_SYSCONFDIR@/dbus-1/system.d that allowed all apps to receive
-+this message and allowed the printer daemon user to send it.
-+
-+.TP
-+.I "<user>"
-+
-+.PP
-+The user account the daemon should run as, as either a username or a
-+UID. If the daemon cannot change to this UID on startup, it will exit.
-+If this element is not present, the daemon will not change or care
-+about its UID.
-+
-+.PP
-+The last <user> entry in the file "wins", the others are ignored.
-+
-+.PP
-+The user is changed after the bus has completed initialization. So
-+sockets etc. will be created before changing user, but no data will be
-+read from clients before changing user. This means that sockets
-+and PID files can be created in a location that requires root
-+privileges for writing.
-+
-+.TP
-+.I "<fork>"
-+
-+.PP
-+If present, the bus daemon becomes a real daemon (forks
-+into the background, etc.). This is generally used
-+rather than the \-\-fork command line option.
-+
-+.TP
-+.I "<listen>"
-+
-+.PP
-+Add an address that the bus should listen on. The
-+address is in the standard D-BUS format that contains
-+a transport name plus possible parameters/options.
-+
-+.PP
-+Example: <listen>unix:path=/tmp/foo</listen>
-+
-+.PP
-+If there are multiple <listen> elements, then the bus listens
-+on multiple addresses. The bus will pass its address to
-+started services or other interested parties with
-+the last address given in <listen> first. That is,
-+apps will try to connect to the last <listen> address first.
-+
-+.TP
-+.I "<auth>"
-+
-+.PP
-+Lists permitted authorization mechanisms. If this element doesn't
-+exist, then all known mechanisms are allowed. If there are multiple
-+<auth> elements, all the listed mechanisms are allowed. The order in
-+which mechanisms are listed is not meaningful.
-+
-+.PP
-+Example: <auth>EXTERNAL</auth>
-+
-+.PP
-+Example: <auth>DBUS_COOKIE_SHA1</auth>
-+
-+.TP
-+.I "<servicedir>"
-+
-+.PP
-+Adds a directory to scan for .service files. Directories are
-+scanned starting with the last to appear in the config file
-+(the first .service file found that provides a particular
-+service will be used).
-+
-+.PP
-+Service files tell the bus how to automatically start a program.
-+They are primarily used with the per-user-session bus,
-+not the systemwide bus.
-+
-+.TP
-+.I "<limit>"
-+
-+.PP
-+<limit> establishes a resource limit. For example:
-+.nf
-+ <limit name="max_message_size">64</limit>
-+ <limit name="max_completed_connections">512</limit>
-+.fi
-+
-+.PP
-+The name attribute is mandatory.
-+Available limit names are:
-+.nf
-+ "max_incoming_bytes" : total size in bytes of messages
-+ incoming from a single connection
-+ "max_outgoing_bytes" : total size in bytes of messages
-+ queued up for a single connection
-+ "max_message_size" : max size of a single message in
-+ bytes
-+ "service_start_timeout" : milliseconds (thousandths) until
-+ a started service has to connect
-+ "auth_timeout" : milliseconds (thousandths) a
-+ connection is given to
-+ authenticate
-+ "max_completed_connections" : max number of authenticated connections
-+ "max_incomplete_connections" : max number of unauthenticated
-+ connections
-+ "max_connections_per_user" : max number of completed connections from
-+ the same user
-+ "max_pending_service_starts" : max number of service launches in
-+ progress at the same time
-+ "max_names_per_connection" : max number of names a single
-+ connection can own
-+ "max_match_rules_per_connection": max number of match rules for a single
-+ connection
-+ "max_replies_per_connection" : max number of pending method
-+ replies per connection
-+ (number of calls-in-progress)
-+ "reply_timeout" : milliseconds (thousandths)
-+ until a method call times out
-+.fi
-+
-+.PP
-+The max incoming/outgoing queue sizes allow a new message to be queued
-+if one byte remains below the max. So you can in fact exceed the max
-+by max_message_size.
-+
-+.PP
-+max_completed_connections divided by max_connections_per_user is the
-+number of users that can work together to DOS all other users by using
-+up all connections.
-+
-+.TP
-+.I "<policy>"
-+
-+.PP
-+The <policy> element defines a policy to be applied to a particular
-+set of connections to the bus. A policy is made up of
-+<allow> and <deny> elements.
-+
-+.PP
-+The <policy> element has one of three attributes:
-+.nf
-+ context="(default|mandatory)"
-+ user="username or userid"
-+ group="group name or gid"
-+.fi
-+
-+.PP
-+
-+Policies are applied to a connection as follows:
-+.nf
-+ - all context="default" policies are applied
-+ - all group="connection's user's group" policies are applied
-+ in undefined order
-+ - all user="connection's auth user" policies are applied
-+ in undefined order
-+ - all context="mandatory" policies are applied
-+.fi
-+
-+.PP
-+Policies applied later will override those applied earlier,
-+when the policies overlap. Multiple policies with the same
-+user/group/context are applied in the order they appear
-+in the config file.
-+
-+.TP
-+.I "<deny>"
-+.I "<allow>"
-+
-+.PP
-+A <deny> element appears below a <policy> element and prohibits some
-+action. The <allow> element makes an exception to previous <deny>
-+statements, and works just like <deny> but with the inverse meaning.
-+
-+.PP
-+The possible attributes of these elements are:
-+.nf
-+ send_interface="interface_name"
-+ send_member="method_or_signal_name"
-+ send_error="error_name"
-+ send_destination="name"
-+ send_type="method_call" | "method_return" | "signal" | "error"
-+ send_path="/path/name"
-+
-+ receive_interface="interface_name"
-+ receive_member="method_or_signal_name"
-+ receive_error="error_name"
-+ receive_sender="name"
-+ receive_type="method_call" | "method_return" | "signal" | "error"
-+ receive_path="/path/name"
-+
-+ send_requested_reply="true" | "false"
-+ receive_requested_reply="true" | "false"
-+
-+ eavesdrop="true" | "false"
-+
-+ own="name"
-+ user="username"
-+ group="groupname"
-+.fi
-+
-+.PP
-+Examples:
-+.nf
-+ <deny send_interface="org.freedesktop.System" send_member="Reboot"/>
-+ <deny receive_interface="org.freedesktop.System" receive_member="Reboot"/>
-+ <deny own="org.freedesktop.System"/>
-+ <deny send_destination="org.freedesktop.System"/>
-+ <deny receive_sender="org.freedesktop.System"/>
-+ <deny user="john"/>
-+ <deny group="enemies"/>
-+.fi
-+
-+.PP
-+The <deny> element's attributes determine whether the deny "matches" a
-+particular action. If it matches, the action is denied (unless later
-+rules in the config file allow it).
-+
-+.PP
-+send_destination and receive_sender rules mean that messages may not be
-+sent to or received from the *owner* of the given name, not that
-+they may not be sent *to that name*. That is, if a connection
-+owns services A, B, C, and sending to A is denied, sending to B or C
-+will not work either.
-+
-+.PP
-+The other send_* and receive_* attributes are purely textual/by-value
-+matches against the given field in the message header.
-+
-+.PP
-+"Eavesdropping" occurs when an application receives a message that
-+was explicitly addressed to a name the application does not own.
-+Eavesdropping thus only applies to messages that are addressed to
-+services (i.e. it does not apply to signals).
-+
-+.PP
-+For <allow>, eavesdrop="true" indicates that the rule matches even
-+when eavesdropping. eavesdrop="false" is the default and means that
-+the rule only allows messages to go to their specified recipient.
-+For <deny>, eavesdrop="true" indicates that the rule matches
-+only when eavesdropping. eavesdrop="false" is the default for <deny>
-+also, but here it means that the rule applies always, even when
-+not eavesdropping. The eavesdrop attribute can only be combined with
-+receive rules (with receive_* attributes).
-+
-+
-+.PP
-+The [send|receive]_requested_reply attribute works similarly to the eavesdrop
-+attribute. It controls whether the <deny> or <allow> matches a reply
-+that is expected (corresponds to a previous method call message).
-+This attribute only makes sense for reply messages (errors and method
-+returns), and is ignored for other message types.
-+
-+.PP
-+For <allow>, [send|receive]_requested_reply="true" is the default and indicates that
-+only requested replies are allowed by the
-+rule. [send|receive]_requested_reply="false" means that the rule allows any reply
-+even if unexpected.
-+
-+.PP
-+For <deny>, [send|receive]_requested_reply="false" is the default but indicates that
-+the rule matches only when the reply was not
-+requested. [send|receive]_requested_reply="true" indicates that the rule applies
-+always, regardless of pending reply state.
-+
-+.PP
-+user and group denials mean that the given user or group may
-+not connect to the message bus.
-+
-+.PP
-+For "name", "username", "groupname", etc.
-+the character "*" can be substituted, meaning "any." Complex globs
-+like "foo.bar.*" aren't allowed for now because they'd be work to
-+implement and maybe encourage sloppy security anyway.
-+
-+.PP
-+It does not make sense to deny a user or group inside a <policy>
-+for a user or group; user/group denials can only be inside
-+context="default" or context="mandatory" policies.
-+
-+.PP
-+A single <deny> rule may specify combinations of attributes such as
-+send_destination and send_interface and send_type. In this case, the
-+denial applies only if both attributes match the message being denied.
-+e.g. <deny send_interface="foo.bar" send_destination="foo.blah"/> would
-+deny messages with the given interface AND the given bus name.
-+To get an OR effect you specify multiple <deny> rules.
-+
-+.PP
-+You can't include both send_ and receive_ attributes on the same
-+rule, since "whether the message can be sent" and "whether it can be
-+received" are evaluated separately.
-+
-+.PP
-+Be careful with send_interface/receive_interface, because the
-+interface field in messages is optional.
-+
-+.TP
-+.I "<selinux>"
-+
-+.PP
-+The <selinux> element contains settings related to Security Enhanced Linux.
-+More details below.
-+
-+.TP
-+.I "<associate>"
-+
-+.PP
-+An <associate> element appears below an <selinux> element and
-+creates a mapping. Right now only one kind of association is possible:
-+.nf
-+ <associate own="org.freedesktop.Foobar" context="foo_t"/>
-+.fi
-+
-+.PP
-+This means that if a connection asks to own the name
-+"org.freedesktop.Foobar" then the source context will be the context
-+of the connection and the target context will be "foo_t" - see the
-+short discussion of SELinux below.
-+
-+.PP
-+Note, the context here is the target context when requesting a name,
-+NOT the context of the connection owning the name.
-+
-+.PP
-+There's currently no way to set a default for owning any name, if
-+we add this syntax it will look like:
-+.nf
-+ <associate own="*" context="foo_t"/>
-+.fi
-+If you find a reason this is useful, let the developers know.
-+Right now the default will be the security context of the bus itself.
-+
-+.PP
-+If two <associate> elements specify the same name, the element
-+appearing later in the configuration file will be used.
-+
-+.SH SELinux
-+
-+.PP
-+See http://www.nsa.gov/selinux/ for full details on SELinux. Some useful excerpts:
-+
-+.IP "" 8
-+Every subject (process) and object (e.g. file, socket, IPC object,
-+etc) in the system is assigned a collection of security attributes,
-+known as a security context. A security context contains all of the
-+security attributes associated with a particular subject or object
-+that are relevant to the security policy.
-+
-+.IP "" 8
-+In order to better encapsulate security contexts and to provide
-+greater efficiency, the policy enforcement code of SELinux typically
-+handles security identifiers (SIDs) rather than security contexts. A
-+SID is an integer that is mapped by the security server to a security
-+context at runtime.
-+
-+.IP "" 8
-+When a security decision is required, the policy enforcement code
-+passes a pair of SIDs (typically the SID of a subject and the SID of
-+an object, but sometimes a pair of subject SIDs or a pair of object
-+SIDs), and an object security class to the security server. The object
-+security class indicates the kind of object, e.g. a process, a regular
-+file, a directory, a TCP socket, etc.
-+
-+.IP "" 8
-+Access decisions specify whether or not a permission is granted for a
-+given pair of SIDs and class. Each object class has a set of
-+associated permissions defined to control operations on objects with
-+that class.
-+
-+.PP
-+D-BUS performs SELinux security checks in two places.
-+
-+.PP
-+First, any time a message is routed from one connection to another
-+connection, the bus daemon will check permissions with the security context of
-+the first connection as source, security context of the second connection
-+as target, object class "dbus" and requested permission "send_msg".
-+
-+.PP
-+If a security context is not available for a connection
-+(impossible when using UNIX domain sockets), then the target
-+context used is the context of the bus daemon itself.
-+There is currently no way to change this default, because we're
-+assuming that only UNIX domain sockets will be used to
-+connect to the systemwide bus. If this changes, we'll
-+probably add a way to set the default connection context.
-+
-+.PP
-+Second, any time a connection asks to own a name,
-+the bus daemon will check permissions with the security
-+context of the connection as source, the security context specified
-+for the name with an <associate> element as target, object
-+class "dbus" and requested permission "acquire_svc".
-+
-+.PP
-+If the name has no security context associated in the
-+configuration file, the security context of the bus daemon
-+itself will be used.
-+
-+.SH AUTHOR
-+See http://www.freedesktop.org/software/dbus/doc/AUTHORS
-+
-+.SH BUGS
-+Please send bug reports to the D-BUS mailing list or bug tracker,
-+see http://www.freedesktop.org/software/dbus/
-diff -Naur dbus-0.61.orig/bus/desktop-file.c dbus-0.61/bus/desktop-file.c
---- dbus-0.61.orig/bus/desktop-file.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/desktop-file.c 2005-11-30 21:14:30.000000000 +0100
-@@ -0,0 +1,778 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* desktop-file.c .desktop file parser
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <dbus/dbus-sysdeps.h>
-+#include <dbus/dbus-internals.h>
-+#include "desktop-file.h"
-+#include "utils.h"
-+
-+typedef struct
-+{
-+ char *key;
-+ char *value;
-+} BusDesktopFileLine;
-+
-+typedef struct
-+{
-+ char *section_name;
-+
-+ int n_lines;
-+ BusDesktopFileLine *lines;
-+ int n_allocated_lines;
-+} BusDesktopFileSection;
-+
-+struct BusDesktopFile
-+{
-+ int n_sections;
-+ BusDesktopFileSection *sections;
-+ int n_allocated_sections;
-+};
-+
-+/**
-+ * Parser for service files.
-+ */
-+typedef struct
-+{
-+ DBusString data; /**< The data from the file */
-+
-+ BusDesktopFile *desktop_file; /**< The resulting object */
-+ int current_section; /**< The current section being parsed */
-+
-+ int pos; /**< Current position */
-+ int len; /**< Length */
-+ int line_num; /**< Current line number */
-+
-+} BusDesktopFileParser;
-+
-+#define VALID_KEY_CHAR 1
-+#define VALID_LOCALE_CHAR 2
-+unsigned char valid[256] = {
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x3 , 0x2 , 0x0 ,
-+ 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 ,
-+ 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x0 , 0x0 , 0x0 , 0x0 , 0x2 ,
-+ 0x0 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 ,
-+ 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x3 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+ 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 , 0x0 ,
-+};
-+
-+static void report_error (BusDesktopFileParser *parser,
-+ char *message,
-+ const char *error_name,
-+ DBusError *error);
-+
-+static void
-+parser_free (BusDesktopFileParser *parser)
-+{
-+ bus_desktop_file_free (parser->desktop_file);
-+
-+ _dbus_string_free (&parser->data);
-+}
-+
-+static void
-+bus_desktop_file_line_free (BusDesktopFileLine *line)
-+{
-+ dbus_free (line->key);
-+ dbus_free (line->value);
-+}
-+
-+static void
-+bus_desktop_file_section_free (BusDesktopFileSection *section)
-+{
-+ int i;
-+
-+ for (i = 0; i < section->n_lines; i++)
-+ bus_desktop_file_line_free (§ion->lines[i]);
-+
-+ dbus_free (section->lines);
-+ dbus_free (section->section_name);
-+}
-+
-+void
-+bus_desktop_file_free (BusDesktopFile *desktop_file)
-+{
-+ int i;
-+
-+ for (i = 0; i < desktop_file->n_sections; i++)
-+ bus_desktop_file_section_free (&desktop_file->sections[i]);
-+ dbus_free (desktop_file->sections);
-+
-+ dbus_free (desktop_file);
-+}
-+
-+static dbus_bool_t
-+grow_lines_in_section (BusDesktopFileSection *section)
-+{
-+ BusDesktopFileLine *lines;
-+
-+ int new_n_lines;
-+
-+ if (section->n_allocated_lines == 0)
-+ new_n_lines = 1;
-+ else
-+ new_n_lines = section->n_allocated_lines*2;
-+
-+ lines = dbus_realloc (section->lines,
-+ sizeof (BusDesktopFileLine) * new_n_lines);
-+
-+ if (lines == NULL)
-+ return FALSE;
-+
-+ section->lines = lines;
-+ section->n_allocated_lines = new_n_lines;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+grow_sections (BusDesktopFile *desktop_file)
-+{
-+ int new_n_sections;
-+ BusDesktopFileSection *sections;
-+
-+ if (desktop_file->n_allocated_sections == 0)
-+ new_n_sections = 1;
-+ else
-+ new_n_sections = desktop_file->n_allocated_sections*2;
-+
-+ sections = dbus_realloc (desktop_file->sections,
-+ sizeof (BusDesktopFileSection) * new_n_sections);
-+ if (sections == NULL)
-+ return FALSE;
-+
-+ desktop_file->sections = sections;
-+
-+ desktop_file->n_allocated_sections = new_n_sections;
-+
-+ return TRUE;
-+}
-+
-+static char *
-+unescape_string (BusDesktopFileParser *parser,
-+ const DBusString *str,
-+ int pos,
-+ int end_pos,
-+ DBusError *error)
-+{
-+ char *retval, *q;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* len + 1 is enough, because unescaping never makes the
-+ * string longer
-+ */
-+ retval = dbus_malloc (end_pos - pos + 1);
-+ if (retval == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ q = retval;
-+
-+ while (pos < end_pos)
-+ {
-+ if (_dbus_string_get_byte (str, pos) == 0)
-+ {
-+ /* Found an embedded null */
-+ dbus_free (retval);
-+ report_error (parser, "Text to be unescaped contains embedded nul",
-+ BUS_DESKTOP_PARSE_ERROR_INVALID_ESCAPES, error);
-+ return NULL;
-+ }
-+
-+ if (_dbus_string_get_byte (str, pos) == '\\')
-+ {
-+ pos ++;
-+
-+ if (pos >= end_pos)
-+ {
-+ /* Escape at end of string */
-+ dbus_free (retval);
-+ report_error (parser, "Text to be unescaped ended in \\",
-+ BUS_DESKTOP_PARSE_ERROR_INVALID_ESCAPES, error);
-+ return NULL;
-+ }
-+
-+ switch (_dbus_string_get_byte (str, pos))
-+ {
-+ case 's':
-+ *q++ = ' ';
-+ break;
-+ case 't':
-+ *q++ = '\t';
-+ break;
-+ case 'n':
-+ *q++ = '\n';
-+ break;
-+ case 'r':
-+ *q++ = '\r';
-+ break;
-+ case '\\':
-+ *q++ = '\\';
-+ break;
-+ default:
-+ /* Invalid escape code */
-+ dbus_free (retval);
-+ report_error (parser, "Text to be unescaped had invalid escape sequence",
-+ BUS_DESKTOP_PARSE_ERROR_INVALID_ESCAPES, error);
-+ return NULL;
-+ }
-+ pos++;
-+ }
-+ else
-+ {
-+ *q++ =_dbus_string_get_byte (str, pos);
-+
-+ pos++;
-+ }
-+ }
-+
-+ *q = 0;
-+
-+ return retval;
-+}
-+
-+static BusDesktopFileSection*
-+new_section (BusDesktopFile *desktop_file,
-+ const char *name)
-+{
-+ int n;
-+ char *name_copy;
-+
-+ if (desktop_file->n_allocated_sections == desktop_file->n_sections)
-+ {
-+ if (!grow_sections (desktop_file))
-+ return NULL;
-+ }
-+
-+ name_copy = _dbus_strdup (name);
-+ if (name_copy == NULL)
-+ return NULL;
-+
-+ n = desktop_file->n_sections;
-+ desktop_file->sections[n].section_name = name_copy;
-+
-+ desktop_file->sections[n].n_lines = 0;
-+ desktop_file->sections[n].lines = NULL;
-+ desktop_file->sections[n].n_allocated_lines = 0;
-+
-+ if (!grow_lines_in_section (&desktop_file->sections[n]))
-+ {
-+ dbus_free (desktop_file->sections[n].section_name);
-+ desktop_file->sections[n].section_name = NULL;
-+ return NULL;
-+ }
-+
-+ desktop_file->n_sections += 1;
-+
-+ return &desktop_file->sections[n];
-+}
-+
-+static BusDesktopFileSection*
-+open_section (BusDesktopFileParser *parser,
-+ char *name)
-+{
-+ BusDesktopFileSection *section;
-+
-+ section = new_section (parser->desktop_file, name);
-+ if (section == NULL)
-+ return NULL;
-+
-+ parser->current_section = parser->desktop_file->n_sections - 1;
-+ _dbus_assert (&parser->desktop_file->sections[parser->current_section] == section);
-+
-+ return section;
-+}
-+
-+static BusDesktopFileLine *
-+new_line (BusDesktopFileParser *parser)
-+{
-+ BusDesktopFileSection *section;
-+ BusDesktopFileLine *line;
-+
-+ section = &parser->desktop_file->sections[parser->current_section];
-+
-+ if (section->n_allocated_lines == section->n_lines)
-+ {
-+ if (!grow_lines_in_section (section))
-+ return NULL;
-+ }
-+
-+ line = §ion->lines[section->n_lines++];
-+
-+ memset (line, 0, sizeof (BusDesktopFileLine));
-+
-+ return line;
-+}
-+
-+static dbus_bool_t
-+is_blank_line (BusDesktopFileParser *parser)
-+{
-+ int p;
-+ char c;
-+
-+ p = parser->pos;
-+
-+ c = _dbus_string_get_byte (&parser->data, p);
-+
-+ while (c && c != '\n')
-+ {
-+ if (!(c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f'))
-+ return FALSE;
-+
-+ p++;
-+ c = _dbus_string_get_byte (&parser->data, p);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+parse_comment_or_blank (BusDesktopFileParser *parser)
-+{
-+ int line_end;
-+
-+ if (!_dbus_string_find (&parser->data, parser->pos, "\n", &line_end))
-+ line_end = parser->len;
-+
-+ if (line_end == parser->len)
-+ parser->pos = parser->len;
-+ else
-+ parser->pos = line_end + 1;
-+
-+ parser->line_num += 1;
-+}
-+
-+static dbus_bool_t
-+is_valid_section_name (const char *name)
-+{
-+ /* 5. Group names may contain all ASCII characters except for control characters and '[' and ']'. */
-+
-+ while (*name)
-+ {
-+ if (!((*name >= 'A' && *name <= 'Z') || (*name >= 'a' || *name <= 'z') ||
-+ *name == '\n' || *name == '\t'))
-+ return FALSE;
-+
-+ name++;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+parse_section_start (BusDesktopFileParser *parser, DBusError *error)
-+{
-+ int line_end;
-+ char *section_name;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!_dbus_string_find (&parser->data, parser->pos, "\n", &line_end))
-+ line_end = parser->len;
-+
-+ if (line_end - parser->pos <= 2 ||
-+ _dbus_string_get_byte (&parser->data, line_end - 1) != ']')
-+ {
-+ report_error (parser, "Invalid syntax for section header", BUS_DESKTOP_PARSE_ERROR_INVALID_SYNTAX, error);
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ section_name = unescape_string (parser,
-+ &parser->data, parser->pos + 1, line_end - 1,
-+ error);
-+
-+ if (section_name == NULL)
-+ {
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ if (!is_valid_section_name (section_name))
-+ {
-+ report_error (parser, "Invalid characters in section name", BUS_DESKTOP_PARSE_ERROR_INVALID_CHARS, error);
-+ parser_free (parser);
-+ dbus_free (section_name);
-+ return FALSE;
-+ }
-+
-+ if (open_section (parser, section_name) == NULL)
-+ {
-+ dbus_free (section_name);
-+ return FALSE;
-+ }
-+
-+ if (line_end == parser->len)
-+ parser->pos = parser->len;
-+ else
-+ parser->pos = line_end + 1;
-+
-+ parser->line_num += 1;
-+
-+ dbus_free (section_name);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+parse_key_value (BusDesktopFileParser *parser, DBusError *error)
-+{
-+ int line_end;
-+ int key_start, key_end;
-+ int value_start;
-+ int p;
-+ char *value, *tmp;
-+ DBusString key;
-+ BusDesktopFileLine *line;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!_dbus_string_find (&parser->data, parser->pos, "\n", &line_end))
-+ line_end = parser->len;
-+
-+ p = parser->pos;
-+ key_start = p;
-+ while (p < line_end &&
-+ (valid[_dbus_string_get_byte (&parser->data, p)] & VALID_KEY_CHAR))
-+ p++;
-+ key_end = p;
-+
-+ if (key_start == key_end)
-+ {
-+ report_error (parser, "Empty key name", BUS_DESKTOP_PARSE_ERROR_INVALID_SYNTAX, error);
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ /* We ignore locales for now */
-+ if (p < line_end && _dbus_string_get_byte (&parser->data, p) == '[')
-+ {
-+ if (line_end == parser->len)
-+ parser->pos = parser->len;
-+ else
-+ parser->pos = line_end + 1;
-+
-+ parser->line_num += 1;
-+
-+ return TRUE;
-+ }
-+
-+ /* Skip space before '=' */
-+ while (p < line_end && _dbus_string_get_byte (&parser->data, p) == ' ')
-+ p++;
-+
-+ if (p < line_end && _dbus_string_get_byte (&parser->data, p) != '=')
-+ {
-+ report_error (parser, "Invalid characters in key name", BUS_DESKTOP_PARSE_ERROR_INVALID_CHARS, error);
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ if (p == line_end)
-+ {
-+ report_error (parser, "No '=' in key/value pair", BUS_DESKTOP_PARSE_ERROR_INVALID_SYNTAX, error);
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ /* Skip the '=' */
-+ p++;
-+
-+ /* Skip space after '=' */
-+ while (p < line_end && _dbus_string_get_byte (&parser->data, p) == ' ')
-+ p++;
-+
-+ value_start = p;
-+
-+ value = unescape_string (parser, &parser->data, value_start, line_end, error);
-+ if (value == NULL)
-+ {
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ line = new_line (parser);
-+ if (line == NULL)
-+ {
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&key))
-+ {
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_copy_len (&parser->data, key_start, key_end - key_start,
-+ &key, 0))
-+ {
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_steal_data (&key, &tmp))
-+ {
-+ parser_free (parser);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&key);
-+
-+ line->key = tmp;
-+ line->value = value;
-+
-+ if (line_end == parser->len)
-+ parser->pos = parser->len;
-+ else
-+ parser->pos = line_end + 1;
-+
-+ parser->line_num += 1;
-+
-+ return TRUE;
-+}
-+
-+static void
-+report_error (BusDesktopFileParser *parser,
-+ char *message,
-+ const char *error_name,
-+ DBusError *error)
-+{
-+ const char *section_name = NULL;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (parser->current_section != -1)
-+ section_name = parser->desktop_file->sections[parser->current_section].section_name;
-+
-+ if (section_name)
-+ dbus_set_error (error, error_name,
-+ "Error in section %s at line %d: %s\n", section_name, parser->line_num, message);
-+ else
-+ dbus_set_error (error, error_name,
-+ "Error at line %d: %s\n", parser->line_num, message);
-+}
-+
-+#if 0
-+static void
-+dump_desktop_file (BusDesktopFile *file)
-+{
-+ int i;
-+
-+ for (i = 0; i < file->n_sections; i++)
-+ {
-+ int j;
-+
-+ printf ("[%s]\n", file->sections[i].section_name);
-+
-+ for (j = 0; j < file->sections[i].n_lines; j++)
-+ {
-+ printf ("%s=%s\n", file->sections[i].lines[j].key,
-+ file->sections[i].lines[j].value);
-+ }
-+ }
-+}
-+#endif
-+
-+BusDesktopFile*
-+bus_desktop_file_load (DBusString *filename,
-+ DBusError *error)
-+{
-+ DBusString str;
-+ BusDesktopFileParser parser;
-+ DBusStat sb;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* Clearly there's a race here, but it's just to make it unlikely
-+ * that we do something silly, we still handle doing it below.
-+ */
-+ if (!_dbus_stat (filename, &sb, error))
-+ return NULL;
-+
-+ if (sb.size > _DBUS_ONE_KILOBYTE * 128)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Desktop file size (%ld bytes) is too large", (long) sb.size);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_init (&str))
-+ return NULL;
-+
-+ if (!_dbus_file_get_contents (&str, filename, error))
-+ {
-+ _dbus_string_free (&str);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_validate_utf8 (&str, 0, _dbus_string_get_length (&str)))
-+ {
-+ _dbus_string_free (&str);
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "invalid UTF-8");
-+ return NULL;
-+ }
-+
-+ parser.desktop_file = dbus_new0 (BusDesktopFile, 1);
-+ if (parser.desktop_file == NULL)
-+ {
-+ _dbus_string_free (&str);
-+ BUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ parser.data = str;
-+ parser.line_num = 1;
-+ parser.pos = 0;
-+ parser.len = _dbus_string_get_length (&parser.data);
-+ parser.current_section = -1;
-+
-+ while (parser.pos < parser.len)
-+ {
-+ if (_dbus_string_get_byte (&parser.data, parser.pos) == '[')
-+ {
-+ if (!parse_section_start (&parser, error))
-+ {
-+ return NULL;
-+ }
-+ }
-+ else if (is_blank_line (&parser) ||
-+ _dbus_string_get_byte (&parser.data, parser.pos) == '#')
-+ parse_comment_or_blank (&parser);
-+ else
-+ {
-+ if (!parse_key_value (&parser, error))
-+ {
-+ return NULL;
-+ }
-+ }
-+ }
-+
-+ _dbus_string_free (&parser.data);
-+
-+ return parser.desktop_file;
-+}
-+
-+static BusDesktopFileSection *
-+lookup_section (BusDesktopFile *desktop_file,
-+ const char *section_name)
-+{
-+ BusDesktopFileSection *section;
-+ int i;
-+
-+ if (section_name == NULL)
-+ return NULL;
-+
-+ for (i = 0; i < desktop_file->n_sections; i ++)
-+ {
-+ section = &desktop_file->sections[i];
-+
-+ if (strcmp (section->section_name, section_name) == 0)
-+ return section;
-+ }
-+
-+ return NULL;
-+}
-+
-+static BusDesktopFileLine *
-+lookup_line (BusDesktopFile *desktop_file,
-+ BusDesktopFileSection *section,
-+ const char *keyname)
-+{
-+ BusDesktopFileLine *line;
-+ int i;
-+
-+ for (i = 0; i < section->n_lines; i++)
-+ {
-+ line = §ion->lines[i];
-+
-+ if (strcmp (line->key, keyname) == 0)
-+ return line;
-+ }
-+
-+ return NULL;
-+}
-+
-+dbus_bool_t
-+bus_desktop_file_get_raw (BusDesktopFile *desktop_file,
-+ const char *section_name,
-+ const char *keyname,
-+ const char **val)
-+{
-+ BusDesktopFileSection *section;
-+ BusDesktopFileLine *line;
-+
-+ *val = NULL;
-+
-+ section = lookup_section (desktop_file, section_name);
-+
-+ if (!section)
-+ return FALSE;
-+
-+ line = lookup_line (desktop_file,
-+ section,
-+ keyname);
-+
-+ if (!line)
-+ return FALSE;
-+
-+ *val = line->value;
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_desktop_file_get_string (BusDesktopFile *desktop_file,
-+ const char *section,
-+ const char *keyname,
-+ char **val)
-+{
-+ const char *raw;
-+
-+ *val = NULL;
-+
-+ if (!bus_desktop_file_get_raw (desktop_file, section, keyname, &raw))
-+ return FALSE;
-+
-+ *val = _dbus_strdup (raw);
-+
-+ /* FIXME we don't distinguish "key not found" from "out of memory" here,
-+ * which is broken.
-+ */
-+ if (*val == NULL)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-diff -Naur dbus-0.61.orig/bus/desktop-file.h dbus-0.61/bus/desktop-file.h
---- dbus-0.61.orig/bus/desktop-file.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/desktop-file.h 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,49 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* desktop-file.h .desktop file parser
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef BUS_DESKTOP_FILE_H
-+#define BUS_DESKTOP_FILE_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-string.h>
-+
-+#define BUS_DESKTOP_PARSE_ERROR_INVALID_SYNTAX "org.freedesktop.DBus.DesktopParseError.InvalidSyntax"
-+#define BUS_DESKTOP_PARSE_ERROR_INVALID_ESCAPES "org.freedesktop.DBus.DesktopParseError.InvalidEscapes"
-+#define BUS_DESKTOP_PARSE_ERROR_INVALID_CHARS "org.freedesktop.DBus.DesktopParseError.InvalidChars"
-+
-+typedef struct BusDesktopFile BusDesktopFile;
-+
-+BusDesktopFile *bus_desktop_file_load (DBusString *filename,
-+ DBusError *error);
-+void bus_desktop_file_free (BusDesktopFile *file);
-+
-+dbus_bool_t bus_desktop_file_get_raw (BusDesktopFile *desktop_file,
-+ const char *section_name,
-+ const char *keyname,
-+ const char **val);
-+dbus_bool_t bus_desktop_file_get_string (BusDesktopFile *desktop_file,
-+ const char *section,
-+ const char *keyname,
-+ char **val);
-+
-+
-+#endif /* BUS_DESKTOP_FILE_H */
-diff -Naur dbus-0.61.orig/bus/dir-watch.c dbus-0.61/bus/dir-watch.c
---- dbus-0.61.orig/bus/dir-watch.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/dir-watch.c 2005-06-15 04:31:38.000000000 +0200
-@@ -0,0 +1,110 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dir-watch.c OS specific directory change notification for message bus
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+
-+#ifdef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX
-+#define _GNU_SOURCE
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#endif /* DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX */
-+
-+#include <dbus/dbus-internals.h>
-+#include "dir-watch.h"
-+
-+
-+/* D_NOTIFY is available on Linux 2.4 or greater - the actual SIGIO signal is handled in main.c:signal_handler() */
-+#ifdef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX
-+
-+#define MAX_DIRS_TO_WATCH 128
-+
-+/* use a static array to avoid handling OOM */
-+static int fds[MAX_DIRS_TO_WATCH];
-+static int num_fds = 0;
-+
-+void
-+bus_watch_directory (const char *dir, void *userdata)
-+{
-+ int fd;
-+
-+ _dbus_assert (dir != NULL);
-+
-+ if (num_fds >= MAX_DIRS_TO_WATCH )
-+ {
-+ _dbus_warn ("Cannot watch config directory '%s'. Already watching %d directories\n", dir, MAX_DIRS_TO_WATCH);
-+ goto out;
-+ }
-+
-+ fd = open (dir, O_RDONLY);
-+ if (fd < 0)
-+ {
-+ _dbus_warn ("Cannot open directory '%s'; error '%s'\n", dir, _dbus_strerror (errno));
-+ goto out;
-+ }
-+
-+ if (fcntl (fd, F_NOTIFY, DN_DELETE|DN_RENAME|DN_MODIFY) == -1)
-+ {
-+ _dbus_warn ("Cannot setup D_NOTIFY for '%s' error '%s'\n", dir, _dbus_strerror (errno));
-+ close (fd);
-+ goto out;
-+ }
-+
-+ fds[num_fds++] = fd;
-+ _dbus_verbose ("Added watch on config directory '%s'\n", dir);
-+
-+ out:
-+ ;
-+}
-+
-+void
-+bus_drop_all_directory_watches (void)
-+{
-+ _dbus_verbose ("Dropping all watches on config directories\n");
-+
-+ int i;
-+
-+ for (i = 0; i < num_fds; i++)
-+ {
-+ if (close (fds[i]) != 0)
-+ {
-+ _dbus_verbose ("Error closing fd %d for config directory watch\n", fds[i]);
-+ }
-+ }
-+
-+ num_fds = 0;
-+}
-+
-+#else /* fallback to NOP */
-+
-+void
-+bus_drop_all_directory_watches (void)
-+{
-+}
-+
-+void
-+bus_watch_directory (const char *dir, void *userdata)
-+{
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/bus/dir-watch.h dbus-0.61/bus/dir-watch.h
---- dbus-0.61.orig/bus/dir-watch.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/dir-watch.h 2005-06-15 04:31:38.000000000 +0200
-@@ -0,0 +1,33 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dir-watch.h Watch directories
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DIR_WATCH_H
-+#define DIR_WATCH_H
-+
-+/* setup a watch on a directory (OS dependent, may be a NOP) */
-+void bus_watch_directory (const char *directory, void *userdata);
-+
-+/* drop all the watches previously set up by bus_config_watch_directory (OS dependent, may be a NOP) */
-+void bus_drop_all_directory_watches (void);
-+
-+#endif /* DIR_WATCH_H */
-diff -Naur dbus-0.61.orig/bus/dispatch.c dbus-0.61/bus/dispatch.c
---- dbus-0.61.orig/bus/dispatch.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/dispatch.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,3730 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dispatch.c Message dispatcher
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
-+ * Copyright (C) 2004 Imendio HB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dispatch.h"
-+#include "connection.h"
-+#include "driver.h"
-+#include "services.h"
-+#include "activation.h"
-+#include "utils.h"
-+#include "bus.h"
-+#include "signals.h"
-+#include "test.h"
-+#include <dbus/dbus-internals.h>
-+#include <string.h>
-+
-+static dbus_bool_t
-+send_one_message (DBusConnection *connection,
-+ BusContext *context,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusMessage *message,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ if (!bus_context_check_security_policy (context, transaction,
-+ sender,
-+ addressed_recipient,
-+ connection,
-+ message,
-+ NULL))
-+ return TRUE; /* silently don't send it */
-+
-+ if (!bus_transaction_send (transaction,
-+ connection,
-+ message))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_dispatch_matches (BusTransaction *transaction,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusError tmp_error;
-+ BusConnections *connections;
-+ DBusList *recipients;
-+ BusMatchmaker *matchmaker;
-+ DBusList *link;
-+ BusContext *context;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* sender and recipient can both be NULL for the bus driver,
-+ * or for signals with no particular recipient
-+ */
-+
-+ _dbus_assert (sender == NULL || bus_connection_is_active (sender));
-+ _dbus_assert (dbus_message_get_sender (message) != NULL);
-+
-+ connections = bus_transaction_get_connections (transaction);
-+
-+ dbus_error_init (&tmp_error);
-+ context = bus_transaction_get_context (transaction);
-+ matchmaker = bus_context_get_matchmaker (context);
-+
-+ recipients = NULL;
-+ if (!bus_matchmaker_get_recipients (matchmaker, connections,
-+ sender, addressed_recipient, message,
-+ &recipients))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ link = _dbus_list_get_first_link (&recipients);
-+ while (link != NULL)
-+ {
-+ DBusConnection *dest;
-+
-+ dest = link->data;
-+
-+ if (!send_one_message (dest, context, sender, addressed_recipient,
-+ message, transaction, &tmp_error))
-+ break;
-+
-+ link = _dbus_list_get_next_link (&recipients, link);
-+ }
-+
-+ _dbus_list_clear (&recipients);
-+
-+ if (dbus_error_is_set (&tmp_error))
-+ {
-+ dbus_move_error (&tmp_error, error);
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+}
-+
-+static DBusHandlerResult
-+bus_dispatch (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ const char *sender, *service_name;
-+ DBusError error;
-+ BusTransaction *transaction;
-+ BusContext *context;
-+ DBusHandlerResult result;
-+ DBusConnection *addressed_recipient;
-+
-+ result = DBUS_HANDLER_RESULT_HANDLED;
-+
-+ transaction = NULL;
-+ addressed_recipient = NULL;
-+ dbus_error_init (&error);
-+
-+ context = bus_connection_get_context (connection);
-+ _dbus_assert (context != NULL);
-+
-+ /* If we can't even allocate an OOM error, we just go to sleep
-+ * until we can.
-+ */
-+ while (!bus_connection_preallocate_oom_error (connection))
-+ _dbus_wait_for_memory ();
-+
-+ /* Ref connection in case we disconnect it at some point in here */
-+ dbus_connection_ref (connection);
-+
-+ service_name = dbus_message_get_destination (message);
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ {
-+ const char *interface_name, *member_name, *error_name;
-+
-+ interface_name = dbus_message_get_interface (message);
-+ member_name = dbus_message_get_member (message);
-+ error_name = dbus_message_get_error_name (message);
-+
-+ _dbus_verbose ("DISPATCH: %s %s %s to %s\n",
-+ interface_name ? interface_name : "(no interface)",
-+ member_name ? member_name : "(no member)",
-+ error_name ? error_name : "(no error name)",
-+ service_name ? service_name : "peer");
-+ }
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+
-+ /* If service_name is NULL, if it's a signal we send it to all
-+ * connections with a match rule. If it's not a signal, there
-+ * are some special cases here but mostly we just bail out.
-+ */
-+ if (service_name == NULL)
-+ {
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ {
-+ bus_connection_disconnected (connection);
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_SIGNAL)
-+ {
-+ /* DBusConnection also handles some of these automatically, we leave
-+ * it to do so.
-+ */
-+ result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ goto out;
-+ }
-+ }
-+
-+ /* Create our transaction */
-+ transaction = bus_transaction_new (context);
-+ if (transaction == NULL)
-+ {
-+ BUS_SET_OOM (&error);
-+ goto out;
-+ }
-+
-+ /* Assign a sender to the message */
-+ if (bus_connection_is_active (connection))
-+ {
-+ sender = bus_connection_get_name (connection);
-+ _dbus_assert (sender != NULL);
-+
-+ if (!dbus_message_set_sender (message, sender))
-+ {
-+ BUS_SET_OOM (&error);
-+ goto out;
-+ }
-+
-+ /* We need to refetch the service name here, because
-+ * dbus_message_set_sender can cause the header to be
-+ * reallocated, and thus the service_name pointer will become
-+ * invalid.
-+ */
-+ service_name = dbus_message_get_destination (message);
-+ }
-+
-+ if (service_name &&
-+ strcmp (service_name, DBUS_SERVICE_DBUS) == 0) /* to bus driver */
-+ {
-+ if (!bus_context_check_security_policy (context, transaction,
-+ connection, NULL, NULL, message, &error))
-+ {
-+ _dbus_verbose ("Security policy rejected message\n");
-+ goto out;
-+ }
-+
-+ _dbus_verbose ("Giving message to %s\n", DBUS_SERVICE_DBUS);
-+ if (!bus_driver_handle_message (connection, transaction, message, &error))
-+ goto out;
-+ }
-+ else if (!bus_connection_is_active (connection)) /* clients must talk to bus driver first */
-+ {
-+ _dbus_verbose ("Received message from non-registered client. Disconnecting.\n");
-+ dbus_connection_close (connection);
-+ goto out;
-+ }
-+ else if (service_name != NULL) /* route to named service */
-+ {
-+ DBusString service_string;
-+ BusService *service;
-+ BusRegistry *registry;
-+
-+ _dbus_assert (service_name != NULL);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ _dbus_string_init_const (&service_string, service_name);
-+ service = bus_registry_lookup (registry, &service_string);
-+
-+ if (service == NULL && dbus_message_get_auto_start (message))
-+ {
-+ BusActivation *activation;
-+ /* We can't do the security policy check here, since the addressed
-+ * recipient service doesn't exist yet. We do it before sending the
-+ * message after the service has been created.
-+ */
-+ activation = bus_connection_get_activation (connection);
-+
-+ if (!bus_activation_activate_service (activation, connection, transaction, TRUE,
-+ message, service_name, &error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&error);
-+ _dbus_verbose ("bus_activation_activate_service() failed: %s\n", error.name);
-+ goto out;
-+ }
-+
-+ goto out;
-+ }
-+ else if (service == NULL)
-+ {
-+ dbus_set_error (&error,
-+ DBUS_ERROR_NAME_HAS_NO_OWNER,
-+ "Name \"%s\" does not exist",
-+ service_name);
-+ goto out;
-+ }
-+ else
-+ {
-+ addressed_recipient = bus_service_get_primary_owners_connection (service);
-+ _dbus_assert (addressed_recipient != NULL);
-+
-+ if (!bus_context_check_security_policy (context, transaction,
-+ connection, addressed_recipient,
-+ addressed_recipient,
-+ message, &error))
-+ goto out;
-+
-+ /* Dispatch the message */
-+ if (!bus_transaction_send (transaction, addressed_recipient, message))
-+ {
-+ BUS_SET_OOM (&error);
-+ goto out;
-+ }
-+ }
-+ }
-+
-+ /* Now match the messages against any match rules, which will send
-+ * out signals and such. addressed_recipient may == NULL.
-+ */
-+ if (!bus_dispatch_matches (transaction, connection, addressed_recipient, message, &error))
-+ goto out;
-+
-+ out:
-+ if (dbus_error_is_set (&error))
-+ {
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ /* If we disconnected it, we won't bother to send it any error
-+ * messages.
-+ */
-+ _dbus_verbose ("Not sending error to connection we disconnected\n");
-+ }
-+ else if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ bus_connection_send_oom_error (connection, message);
-+
-+ /* cancel transaction due to OOM */
-+ if (transaction != NULL)
-+ {
-+ bus_transaction_cancel_and_free (transaction);
-+ transaction = NULL;
-+ }
-+ }
-+ else
-+ {
-+ /* Try to send the real error, if no mem to do that, send
-+ * the OOM error
-+ */
-+ _dbus_assert (transaction != NULL);
-+ if (!bus_transaction_send_error_reply (transaction, connection,
-+ &error, message))
-+ {
-+ bus_connection_send_oom_error (connection, message);
-+
-+ /* cancel transaction due to OOM */
-+ if (transaction != NULL)
-+ {
-+ bus_transaction_cancel_and_free (transaction);
-+ transaction = NULL;
-+ }
-+ }
-+ }
-+
-+
-+ dbus_error_free (&error);
-+ }
-+
-+ if (transaction != NULL)
-+ {
-+ bus_transaction_execute_and_free (transaction);
-+ }
-+
-+ dbus_connection_unref (connection);
-+
-+ return result;
-+}
-+
-+static DBusHandlerResult
-+bus_dispatch_message_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ return bus_dispatch (connection, message);
-+}
-+
-+dbus_bool_t
-+bus_dispatch_add_connection (DBusConnection *connection)
-+{
-+ if (!dbus_connection_add_filter (connection,
-+ bus_dispatch_message_filter,
-+ NULL, NULL))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+void
-+bus_dispatch_remove_connection (DBusConnection *connection)
-+{
-+ /* Here we tell the bus driver that we want to get off. */
-+ bus_driver_remove_connection (connection);
-+
-+ dbus_connection_remove_filter (connection,
-+ bus_dispatch_message_filter,
-+ NULL);
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+#include <stdio.h>
-+
-+/* This is used to know whether we need to block in order to finish
-+ * sending a message, or whether the initial dbus_connection_send()
-+ * already flushed the queue.
-+ */
-+#define SEND_PENDING(connection) (dbus_connection_has_messages_to_send (connection))
-+
-+typedef dbus_bool_t (* Check1Func) (BusContext *context);
-+typedef dbus_bool_t (* Check2Func) (BusContext *context,
-+ DBusConnection *connection);
-+
-+static dbus_bool_t check_no_leftovers (BusContext *context);
-+
-+static void
-+block_connection_until_message_from_bus (BusContext *context,
-+ DBusConnection *connection,
-+ const char *what_is_expected)
-+{
-+ _dbus_verbose ("expecting: %s\n", what_is_expected);
-+
-+ while (dbus_connection_get_dispatch_status (connection) ==
-+ DBUS_DISPATCH_COMPLETE &&
-+ dbus_connection_get_is_connected (connection))
-+ {
-+ bus_test_run_bus_loop (context, TRUE);
-+ bus_test_run_clients_loop (FALSE);
-+ }
-+}
-+
-+static void
-+spin_connection_until_authenticated (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ _dbus_verbose ("Spinning to auth connection %p\n", connection);
-+ while (!dbus_connection_get_is_authenticated (connection) &&
-+ dbus_connection_get_is_connected (connection))
-+ {
-+ bus_test_run_bus_loop (context, FALSE);
-+ bus_test_run_clients_loop (FALSE);
-+ }
-+ _dbus_verbose (" ... done spinning to auth connection %p\n", connection);
-+}
-+
-+/* compensate for fact that pop_message() can return #NULL due to OOM */
-+static DBusMessage*
-+pop_message_waiting_for_memory (DBusConnection *connection)
-+{
-+ while (dbus_connection_get_dispatch_status (connection) ==
-+ DBUS_DISPATCH_NEED_MEMORY)
-+ _dbus_wait_for_memory ();
-+
-+ return dbus_connection_pop_message (connection);
-+}
-+
-+static DBusMessage*
-+borrow_message_waiting_for_memory (DBusConnection *connection)
-+{
-+ while (dbus_connection_get_dispatch_status (connection) ==
-+ DBUS_DISPATCH_NEED_MEMORY)
-+ _dbus_wait_for_memory ();
-+
-+ return dbus_connection_borrow_message (connection);
-+}
-+
-+static void
-+warn_unexpected_real (DBusConnection *connection,
-+ DBusMessage *message,
-+ const char *expected,
-+ const char *function,
-+ int line)
-+{
-+ if (message)
-+ _dbus_warn ("%s:%d received message interface \"%s\" member \"%s\" error name \"%s\" on %p, expecting %s\n",
-+ function, line,
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) : "(unset)",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) : "(unset)",
-+ dbus_message_get_error_name (message) ?
-+ dbus_message_get_error_name (message) : "(unset)",
-+ connection,
-+ expected);
-+ else
-+ _dbus_warn ("%s:%d received no message on %p, expecting %s\n",
-+ function, line, connection, expected);
-+}
-+
-+#define warn_unexpected(connection, message, expected) \
-+ warn_unexpected_real (connection, message, expected, _DBUS_FUNCTION_NAME, __LINE__)
-+
-+static void
-+verbose_message_received (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ _dbus_verbose ("Received message interface \"%s\" member \"%s\" error name \"%s\" on %p\n",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) : "(unset)",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) : "(unset)",
-+ dbus_message_get_error_name (message) ?
-+ dbus_message_get_error_name (message) : "(unset)",
-+ connection);
-+}
-+
-+typedef enum
-+{
-+ SERVICE_CREATED,
-+ OWNER_CHANGED,
-+ SERVICE_DELETED
-+} ServiceInfoKind;
-+
-+typedef struct
-+{
-+ ServiceInfoKind expected_kind;
-+ const char *expected_service_name;
-+ dbus_bool_t failed;
-+ DBusConnection *skip_connection;
-+} CheckServiceOwnerChangedData;
-+
-+static dbus_bool_t
-+check_service_owner_changed_foreach (DBusConnection *connection,
-+ void *data)
-+{
-+ CheckServiceOwnerChangedData *d = data;
-+ DBusMessage *message;
-+ DBusError error;
-+ const char *service_name, *old_owner, *new_owner;
-+
-+ if (d->expected_kind == SERVICE_CREATED
-+ && connection == d->skip_connection)
-+ return TRUE;
-+
-+ dbus_error_init (&error);
-+ d->failed = TRUE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a message on %p, expecting %s\n",
-+ connection, "NameOwnerChanged");
-+ goto out;
-+ }
-+ else if (!dbus_message_is_signal (message,
-+ DBUS_INTERFACE_DBUS,
-+ "NameOwnerChanged"))
-+ {
-+ warn_unexpected (connection, message, "NameOwnerChanged");
-+
-+ goto out;
-+ }
-+ else
-+ {
-+ reget_service_info_data:
-+ service_name = NULL;
-+ old_owner = NULL;
-+ new_owner = NULL;
-+
-+ dbus_message_get_args (message, &error,
-+ DBUS_TYPE_STRING, &service_name,
-+ DBUS_TYPE_STRING, &old_owner,
-+ DBUS_TYPE_STRING, &new_owner,
-+ DBUS_TYPE_INVALID);
-+
-+ if (dbus_error_is_set (&error))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ _dbus_wait_for_memory ();
-+ goto reget_service_info_data;
-+ }
-+ else
-+ {
-+ _dbus_warn ("Did not get the expected arguments\n");
-+ goto out;
-+ }
-+ }
-+
-+ if ((d->expected_kind == SERVICE_CREATED && ( old_owner[0] || !new_owner[0]))
-+ || (d->expected_kind == OWNER_CHANGED && (!old_owner[0] || !new_owner[0]))
-+ || (d->expected_kind == SERVICE_DELETED && (!old_owner[0] || new_owner[0])))
-+ {
-+ _dbus_warn ("inconsistent NameOwnerChanged arguments");
-+ goto out;
-+ }
-+
-+ if (strcmp (service_name, d->expected_service_name) != 0)
-+ {
-+ _dbus_warn ("expected info on service %s, got info on %s\n",
-+ d->expected_service_name,
-+ service_name);
-+ goto out;
-+ }
-+
-+ if (*service_name == ':' && new_owner[0]
-+ && strcmp (service_name, new_owner) != 0)
-+ {
-+ _dbus_warn ("inconsistent ServiceOwnedChanged message (\"%s\" [ %s -> %s ])\n",
-+ service_name, old_owner, new_owner);
-+ goto out;
-+ }
-+ }
-+
-+ d->failed = FALSE;
-+
-+ out:
-+ dbus_error_free (&error);
-+
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return !d->failed;
-+}
-+
-+
-+static void
-+kill_client_connection (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ char *base_service;
-+ const char *s;
-+ CheckServiceOwnerChangedData socd;
-+
-+ _dbus_verbose ("killing connection %p\n", connection);
-+
-+ s = dbus_bus_get_unique_name (connection);
-+ _dbus_assert (s != NULL);
-+
-+ while ((base_service = _dbus_strdup (s)) == NULL)
-+ _dbus_wait_for_memory ();
-+
-+ dbus_connection_ref (connection);
-+
-+ /* kick in the disconnect handler that unrefs the connection */
-+ dbus_connection_close (connection);
-+
-+ bus_test_run_everything (context);
-+
-+ _dbus_assert (bus_test_client_listed (connection));
-+
-+ /* Run disconnect handler in test.c */
-+ if (bus_connection_dispatch_one_message (connection))
-+ _dbus_assert_not_reached ("something received on connection being killed other than the disconnect");
-+
-+ _dbus_assert (!dbus_connection_get_is_connected (connection));
-+ dbus_connection_unref (connection);
-+ connection = NULL;
-+ _dbus_assert (!bus_test_client_listed (connection));
-+
-+ socd.expected_kind = SERVICE_DELETED;
-+ socd.expected_service_name = base_service;
-+ socd.failed = FALSE;
-+ socd.skip_connection = NULL;
-+
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ dbus_free (base_service);
-+
-+ if (socd.failed)
-+ _dbus_assert_not_reached ("didn't get the expected NameOwnerChanged (deletion) messages");
-+
-+ if (!check_no_leftovers (context))
-+ _dbus_assert_not_reached ("stuff left in message queues after disconnecting a client");
-+}
-+
-+static void
-+kill_client_connection_unchecked (DBusConnection *connection)
-+{
-+ /* This kills the connection without expecting it to affect
-+ * the rest of the bus.
-+ */
-+ _dbus_verbose ("Unchecked kill of connection %p\n", connection);
-+
-+ dbus_connection_ref (connection);
-+ dbus_connection_close (connection);
-+ /* dispatching disconnect handler will unref once */
-+ if (bus_connection_dispatch_one_message (connection))
-+ _dbus_assert_not_reached ("message other than disconnect dispatched after failure to register");
-+
-+ _dbus_assert (!bus_test_client_listed (connection));
-+ dbus_connection_unref (connection);
-+}
-+
-+typedef struct
-+{
-+ dbus_bool_t failed;
-+} CheckNoMessagesData;
-+
-+static dbus_bool_t
-+check_no_messages_foreach (DBusConnection *connection,
-+ void *data)
-+{
-+ CheckNoMessagesData *d = data;
-+ DBusMessage *message;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message != NULL)
-+ {
-+ warn_unexpected (connection, message, "no messages");
-+
-+ d->failed = TRUE;
-+ }
-+
-+ if (message)
-+ dbus_message_unref (message);
-+ return !d->failed;
-+}
-+
-+static dbus_bool_t
-+check_no_leftovers (BusContext *context)
-+{
-+ CheckNoMessagesData nmd;
-+
-+ nmd.failed = FALSE;
-+ bus_test_clients_foreach (check_no_messages_foreach,
-+ &nmd);
-+
-+ if (nmd.failed)
-+ {
-+ _dbus_verbose ("%s: leftover message found\n",
-+ _DBUS_FUNCTION_NAME);
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_hello_message (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ DBusMessage *name_message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ DBusError error;
-+ const char *name;
-+ const char *acquired;
-+
-+ retval = FALSE;
-+ dbus_error_init (&error);
-+ name = NULL;
-+ acquired = NULL;
-+ message = NULL;
-+ name_message = NULL;
-+
-+ _dbus_verbose ("check_hello_message for %p\n", connection);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "Hello");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ dbus_connection_ref (connection); /* because we may get disconnected */
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ dbus_connection_unref (connection);
-+ return TRUE;
-+ }
-+
-+ _dbus_assert (dbus_message_has_signature (message, ""));
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected (presumably auth failed)\n");
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+ }
-+
-+ /* send our message */
-+ bus_test_run_clients_loop (SEND_PENDING (connection));
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected (presumably auth failed)\n");
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+ }
-+
-+ block_connection_until_message_from_bus (context, connection, "reply to Hello");
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected (presumably auth failed)\n");
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+ }
-+
-+ dbus_connection_unref (connection);
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "Hello", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ CheckServiceOwnerChangedData socd;
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_RETURN)
-+ {
-+ ; /* good, expected */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "method return for Hello");
-+
-+ goto out;
-+ }
-+
-+ retry_get_hello_name:
-+ if (!dbus_message_get_args (message, &error,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ _dbus_verbose ("no memory to get service name arg from hello\n");
-+ dbus_error_free (&error);
-+ _dbus_wait_for_memory ();
-+ goto retry_get_hello_name;
-+ }
-+ else
-+ {
-+ _dbus_assert (dbus_error_is_set (&error));
-+ _dbus_warn ("Did not get the expected single string argument to hello\n");
-+ goto out;
-+ }
-+ }
-+
-+ _dbus_verbose ("Got hello name: %s\n", name);
-+
-+ while (!dbus_bus_set_unique_name (connection, name))
-+ _dbus_wait_for_memory ();
-+
-+ socd.expected_kind = SERVICE_CREATED;
-+ socd.expected_service_name = name;
-+ socd.failed = FALSE;
-+ socd.skip_connection = connection; /* we haven't done AddMatch so won't get it ourselves */
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+
-+ name_message = message;
-+ /* Client should also have gotten ServiceAcquired */
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Expecting %s, got nothing\n",
-+ "NameAcquired");
-+ goto out;
-+ }
-+ if (! dbus_message_is_signal (message, DBUS_INTERFACE_DBUS,
-+ "NameAcquired"))
-+ {
-+ _dbus_warn ("Expecting %s, got smthg else\n",
-+ "NameAcquired");
-+ goto out;
-+ }
-+
-+ retry_get_acquired_name:
-+ if (!dbus_message_get_args (message, &error,
-+ DBUS_TYPE_STRING, &acquired,
-+ DBUS_TYPE_INVALID))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ _dbus_verbose ("no memory to get service name arg from acquired\n");
-+ dbus_error_free (&error);
-+ _dbus_wait_for_memory ();
-+ goto retry_get_acquired_name;
-+ }
-+ else
-+ {
-+ _dbus_assert (dbus_error_is_set (&error));
-+ _dbus_warn ("Did not get the expected single string argument to ServiceAcquired\n");
-+ goto out;
-+ }
-+ }
-+
-+ _dbus_verbose ("Got acquired name: %s\n", acquired);
-+
-+ if (strcmp (acquired, name) != 0)
-+ {
-+ _dbus_warn ("Acquired name is %s but expected %s\n",
-+ acquired, name);
-+ goto out;
-+ }
-+ acquired = NULL;
-+ }
-+
-+ if (!check_no_leftovers (context))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ _dbus_verbose ("ending %s retval = %d\n", _DBUS_FUNCTION_NAME, retval);
-+
-+ dbus_error_free (&error);
-+
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ if (name_message)
-+ dbus_message_unref (name_message);
-+
-+ return retval;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_double_hello_message (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ DBusError error;
-+
-+ retval = FALSE;
-+ dbus_error_init (&error);
-+ message = NULL;
-+
-+ _dbus_verbose ("check_double_hello_message for %p\n", connection);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "Hello");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ /* send our message */
-+ bus_test_run_clients_loop (SEND_PENDING (connection));
-+
-+ dbus_connection_ref (connection); /* because we may get disconnected */
-+ block_connection_until_message_from_bus (context, connection, "reply to Hello");
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+ }
-+
-+ dbus_connection_unref (connection);
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "Hello", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ warn_unexpected (connection, message, "method return for Hello");
-+ goto out;
-+ }
-+
-+ if (!check_no_leftovers (context))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ dbus_error_free (&error);
-+
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_get_connection_unix_user (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ DBusError error;
-+ const char *base_service_name;
-+ dbus_uint32_t uid;
-+
-+ retval = FALSE;
-+ dbus_error_init (&error);
-+ message = NULL;
-+
-+ _dbus_verbose ("check_get_connection_unix_user for %p\n", connection);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "GetConnectionUnixUser");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ base_service_name = dbus_bus_get_unique_name (connection);
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &base_service_name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ /* send our message */
-+ bus_test_run_clients_loop (SEND_PENDING (connection));
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ dbus_connection_ref (connection); /* because we may get disconnected */
-+ block_connection_until_message_from_bus (context, connection, "reply to GetConnectionUnixUser");
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+ }
-+
-+ dbus_connection_unref (connection);
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "GetConnectionUnixUser", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (dbus_message_is_error (message, DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_RETURN)
-+ {
-+ ; /* good, expected */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message,
-+ "method_return for GetConnectionUnixUser");
-+
-+ goto out;
-+ }
-+
-+ retry_get_property:
-+
-+ if (!dbus_message_get_args (message, &error,
-+ DBUS_TYPE_UINT32, &uid,
-+ DBUS_TYPE_INVALID))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ _dbus_verbose ("no memory to get uid by GetConnectionUnixUser\n");
-+ dbus_error_free (&error);
-+ _dbus_wait_for_memory ();
-+ goto retry_get_property;
-+ }
-+ else
-+ {
-+ _dbus_assert (dbus_error_is_set (&error));
-+ _dbus_warn ("Did not get the expected DBUS_TYPE_UINT32 from GetConnectionUnixUser\n");
-+ goto out;
-+ }
-+ }
-+ }
-+
-+ if (!check_no_leftovers (context))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ dbus_error_free (&error);
-+
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_get_connection_unix_process_id (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ DBusError error;
-+ const char *base_service_name;
-+ dbus_uint32_t pid;
-+
-+ retval = FALSE;
-+ dbus_error_init (&error);
-+ message = NULL;
-+
-+ _dbus_verbose ("check_get_connection_unix_process_id for %p\n", connection);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "GetConnectionUnixProcessID");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ base_service_name = dbus_bus_get_unique_name (connection);
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &base_service_name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ /* send our message */
-+ bus_test_run_clients_loop (SEND_PENDING (connection));
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ dbus_connection_ref (connection); /* because we may get disconnected */
-+ block_connection_until_message_from_bus (context, connection, "reply to GetConnectionUnixProcessID");
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+ }
-+
-+ dbus_connection_unref (connection);
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "GetConnectionUnixProcessID", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (dbus_message_is_error (message, DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_RETURN)
-+ {
-+ ; /* good, expected */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message,
-+ "method_return for GetConnectionUnixProcessID");
-+
-+ goto out;
-+ }
-+
-+ retry_get_property:
-+
-+ if (!dbus_message_get_args (message, &error,
-+ DBUS_TYPE_UINT32, &pid,
-+ DBUS_TYPE_INVALID))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ _dbus_verbose ("no memory to get pid by GetConnectionUnixProcessID\n");
-+ dbus_error_free (&error);
-+ _dbus_wait_for_memory ();
-+ goto retry_get_property;
-+ }
-+ else
-+ {
-+ _dbus_assert (dbus_error_is_set (&error));
-+ _dbus_warn ("Did not get the expected DBUS_TYPE_UINT32 from GetConnectionUnixProcessID\n");
-+ goto out;
-+ }
-+ } else {
-+
-+ /* test if returned pid is the same as our own pid
-+ *
-+ * @todo It would probably be good to restructure the tests
-+ * in a way so our parent is the bus that we're testing
-+ * cause then we can test that the pid returned matches
-+ * getppid()
-+ */
-+ if (pid != (dbus_uint32_t) _dbus_getpid ())
-+ {
-+ _dbus_assert (dbus_error_is_set (&error));
-+ _dbus_warn ("Result from GetConnectionUnixProcessID is not our own pid\n");
-+ goto out;
-+ }
-+ }
-+ }
-+
-+ if (!check_no_leftovers (context))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ dbus_error_free (&error);
-+
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_add_match_all (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t retval;
-+ dbus_uint32_t serial;
-+ DBusError error;
-+ const char *empty = "";
-+
-+ retval = FALSE;
-+ dbus_error_init (&error);
-+ message = NULL;
-+
-+ _dbus_verbose ("check_add_match_all for %p\n", connection);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "AddMatch");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ /* empty string match rule matches everything */
-+ if (!dbus_message_append_args (message, DBUS_TYPE_STRING, &empty,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ dbus_connection_ref (connection); /* because we may get disconnected */
-+
-+ /* send our message */
-+ bus_test_run_clients_loop (SEND_PENDING (connection));
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+ }
-+
-+ block_connection_until_message_from_bus (context, connection, "reply to AddMatch");
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+ }
-+
-+ dbus_connection_unref (connection);
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "AddMatch", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_RETURN)
-+ {
-+ ; /* good, expected */
-+ _dbus_assert (dbus_message_get_reply_serial (message) == serial);
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "method return for AddMatch");
-+
-+ goto out;
-+ }
-+ }
-+
-+ if (!check_no_leftovers (context))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ dbus_error_free (&error);
-+
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_hello_connection (BusContext *context)
-+{
-+ DBusConnection *connection;
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+
-+ connection = dbus_connection_open ("debug-pipe:name=test-server", &error);
-+ if (connection == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&error);
-+ dbus_error_free (&error);
-+ return TRUE;
-+ }
-+
-+ if (!bus_setup_debug_client (connection))
-+ {
-+ dbus_connection_close (connection);
-+ dbus_connection_unref (connection);
-+ return TRUE;
-+ }
-+
-+ spin_connection_until_authenticated (context, connection);
-+
-+ if (!check_hello_message (context, connection))
-+ return FALSE;
-+
-+ if (dbus_bus_get_unique_name (connection) == NULL)
-+ {
-+ /* We didn't successfully register, so we can't
-+ * do the usual kill_client_connection() checks
-+ */
-+ kill_client_connection_unchecked (connection);
-+ }
-+ else
-+ {
-+ if (!check_add_match_all (context, connection))
-+ return FALSE;
-+
-+ kill_client_connection (context, connection);
-+ }
-+
-+ return TRUE;
-+}
-+
-+#define NONEXISTENT_SERVICE_NAME "test.this.service.does.not.exist.ewuoiurjdfxcvn"
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_nonexistent_service_no_auto_start (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ const char *nonexistent = NONEXISTENT_SERVICE_NAME;
-+ dbus_uint32_t flags;
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "StartServiceByName");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ dbus_message_set_auto_start (message, FALSE);
-+
-+ flags = 0;
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &nonexistent,
-+ DBUS_TYPE_UINT32, &flags,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+ block_connection_until_message_from_bus (context, connection, "reply to ActivateService on nonexistent");
-+ bus_test_run_everything (context);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ return TRUE;
-+ }
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "StartServiceByName", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else if (dbus_message_is_error (message,
-+ DBUS_ERROR_SERVICE_UNKNOWN))
-+ {
-+ ; /* good, this is expected also */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_warn ("Did not expect to successfully activate %s\n",
-+ NONEXISTENT_SERVICE_NAME);
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_nonexistent_service_auto_start (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+
-+ message = dbus_message_new_method_call (NONEXISTENT_SERVICE_NAME,
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "Echo");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+ block_connection_until_message_from_bus (context, connection, "reply to Echo");
-+ bus_test_run_everything (context);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ return TRUE;
-+ }
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "Echo message (auto activation)", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else if (dbus_message_is_error (message,
-+ DBUS_ERROR_SERVICE_UNKNOWN))
-+ {
-+ ; /* good, this is expected also */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_warn ("Did not expect to successfully activate %s\n",
-+ NONEXISTENT_SERVICE_NAME);
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_base_service_activated (BusContext *context,
-+ DBusConnection *connection,
-+ DBusMessage *initial_message,
-+ const char **base_service_p)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t retval;
-+ DBusError error;
-+ const char *base_service, *base_service_from_bus, *old_owner;
-+
-+ retval = FALSE;
-+
-+ dbus_error_init (&error);
-+ base_service = NULL;
-+ old_owner = NULL;
-+ base_service_from_bus = NULL;
-+
-+ message = initial_message;
-+ dbus_message_ref (message);
-+
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_DBUS,
-+ "NameOwnerChanged"))
-+ {
-+ CheckServiceOwnerChangedData socd;
-+
-+ reget_service_name_arg:
-+ base_service = NULL;
-+ old_owner = NULL;
-+ base_service_from_bus = NULL;
-+
-+ if (!dbus_message_get_args (message, &error,
-+ DBUS_TYPE_STRING, &base_service,
-+ DBUS_TYPE_STRING, &old_owner,
-+ DBUS_TYPE_STRING, &base_service_from_bus,
-+ DBUS_TYPE_INVALID))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ _dbus_wait_for_memory ();
-+ goto reget_service_name_arg;
-+ }
-+ else
-+ {
-+ _dbus_warn ("Message %s doesn't have a service name: %s\n",
-+ "NameOwnerChanged (creation)",
-+ error.message);
-+ goto out;
-+ }
-+ }
-+
-+ if (*base_service != ':')
-+ {
-+ _dbus_warn ("Expected base service activation, got \"%s\" instead\n",
-+ base_service);
-+ goto out;
-+ }
-+
-+ if (strcmp (base_service, base_service_from_bus) != 0)
-+ {
-+ _dbus_warn ("Expected base service activation, got \"%s\" instead with owner \"%s\"\n",
-+ base_service, base_service_from_bus);
-+ goto out;
-+ }
-+
-+ if (old_owner[0])
-+ {
-+ _dbus_warn ("Received an old_owner argument during base service activation, \"%s\"\n",
-+ old_owner);
-+ goto out;
-+ }
-+
-+ socd.expected_kind = SERVICE_CREATED;
-+ socd.expected_service_name = base_service;
-+ socd.failed = FALSE;
-+ socd.skip_connection = connection;
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "NameOwnerChanged (creation) for base service");
-+
-+ goto out;
-+ }
-+
-+ if (base_service_p)
-+ *base_service_p = base_service;
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+ dbus_error_free (&error);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_service_activated (BusContext *context,
-+ DBusConnection *connection,
-+ const char *activated_name,
-+ const char *base_service_name,
-+ DBusMessage *initial_message)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t retval;
-+ DBusError error;
-+ dbus_uint32_t activation_result;
-+
-+ retval = FALSE;
-+
-+ dbus_error_init (&error);
-+
-+ message = initial_message;
-+ dbus_message_ref (message);
-+
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_DBUS,
-+ "NameOwnerChanged"))
-+ {
-+ CheckServiceOwnerChangedData socd;
-+ const char *service_name, *base_service_from_bus, *old_owner;
-+
-+ reget_service_name_arg:
-+ service_name = NULL;
-+ old_owner = NULL;
-+ base_service_from_bus = NULL;
-+
-+ if (!dbus_message_get_args (message, &error,
-+ DBUS_TYPE_STRING, &service_name,
-+ DBUS_TYPE_STRING, &old_owner,
-+ DBUS_TYPE_STRING, &base_service_from_bus,
-+ DBUS_TYPE_INVALID))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ _dbus_wait_for_memory ();
-+ goto reget_service_name_arg;
-+ }
-+ else
-+ {
-+ _dbus_warn ("Message %s doesn't have a service name: %s\n",
-+ "NameOwnerChanged (creation)",
-+ error.message);
-+ goto out;
-+ }
-+ }
-+
-+ if (strcmp (service_name, activated_name) != 0)
-+ {
-+ _dbus_warn ("Expected to see service %s created, saw %s instead\n",
-+ activated_name, service_name);
-+ goto out;
-+ }
-+
-+ if (strcmp (base_service_name, base_service_from_bus) != 0)
-+ {
-+ _dbus_warn ("NameOwnerChanged reports wrong base service: %s owner, expected %s instead\n",
-+ base_service_from_bus, base_service_name);
-+ goto out;
-+ }
-+
-+ if (old_owner[0])
-+ {
-+ _dbus_warn ("expected a %s, got a %s\n",
-+ "NameOwnerChanged (creation)",
-+ "NameOwnerChanged (change)");
-+ goto out;
-+ }
-+
-+ socd.expected_kind = SERVICE_CREATED;
-+ socd.skip_connection = connection;
-+ socd.failed = FALSE;
-+ socd.expected_service_name = service_name;
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+
-+ dbus_message_unref (message);
-+ service_name = NULL;
-+ old_owner = NULL;
-+ base_service_from_bus = NULL;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Expected a reply to %s, got nothing\n",
-+ "StartServiceByName");
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "NameOwnerChanged for the activated name");
-+
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
-+ {
-+ warn_unexpected (connection, message, "reply to StartServiceByName");
-+
-+ goto out;
-+ }
-+
-+ activation_result = 0;
-+ if (!dbus_message_get_args (message, &error,
-+ DBUS_TYPE_UINT32, &activation_result,
-+ DBUS_TYPE_INVALID))
-+ {
-+ if (!dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ _dbus_warn ("Did not have activation result first argument to %s: %s\n",
-+ "StartServiceByName", error.message);
-+ goto out;
-+ }
-+
-+ dbus_error_free (&error);
-+ }
-+ else
-+ {
-+ if (activation_result == DBUS_START_REPLY_SUCCESS)
-+ ; /* Good */
-+ else if (activation_result == DBUS_START_REPLY_ALREADY_RUNNING)
-+ ; /* Good also */
-+ else
-+ {
-+ _dbus_warn ("Activation result was %u, no good.\n",
-+ activation_result);
-+ goto out;
-+ }
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ if (!check_no_leftovers (context))
-+ {
-+ _dbus_warn ("Messages were left over after verifying existent activation results\n");
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+ dbus_error_free (&error);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_service_auto_activated (BusContext *context,
-+ DBusConnection *connection,
-+ const char *activated_name,
-+ const char *base_service_name,
-+ DBusMessage *initial_message)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t retval;
-+ DBusError error;
-+
-+ retval = FALSE;
-+
-+ dbus_error_init (&error);
-+
-+ message = initial_message;
-+ dbus_message_ref (message);
-+
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_DBUS,
-+ "NameOwnerChanged"))
-+ {
-+ const char *service_name;
-+ CheckServiceOwnerChangedData socd;
-+
-+ reget_service_name_arg:
-+ if (!dbus_message_get_args (message, &error,
-+ DBUS_TYPE_STRING, &service_name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ _dbus_wait_for_memory ();
-+ goto reget_service_name_arg;
-+ }
-+ else
-+ {
-+ _dbus_warn ("Message %s doesn't have a service name: %s\n",
-+ "NameOwnerChanged",
-+ error.message);
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+ }
-+
-+ if (strcmp (service_name, activated_name) != 0)
-+ {
-+ _dbus_warn ("Expected to see service %s created, saw %s instead\n",
-+ activated_name, service_name);
-+ goto out;
-+ }
-+
-+ socd.expected_kind = SERVICE_CREATED;
-+ socd.expected_service_name = service_name;
-+ socd.failed = FALSE;
-+ socd.skip_connection = connection;
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+
-+ /* Note that this differs from regular activation in that we don't get a
-+ * reply to ActivateService here.
-+ */
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+ service_name = NULL;
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "NameOwnerChanged for the activated name");
-+
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_service_deactivated (BusContext *context,
-+ DBusConnection *connection,
-+ const char *activated_name,
-+ const char *base_service)
-+{
-+ dbus_bool_t retval;
-+ CheckServiceOwnerChangedData socd;
-+
-+ retval = FALSE;
-+
-+ /* Now we are expecting ServiceOwnerChanged (deletion) messages for the base
-+ * service and the activated_name. The base service
-+ * notification is required to come last.
-+ */
-+ socd.expected_kind = SERVICE_DELETED;
-+ socd.expected_service_name = activated_name;
-+ socd.failed = FALSE;
-+ socd.skip_connection = NULL;
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+
-+ socd.expected_kind = SERVICE_DELETED;
-+ socd.expected_service_name = base_service;
-+ socd.failed = FALSE;
-+ socd.skip_connection = NULL;
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_send_exit_to_service (BusContext *context,
-+ DBusConnection *connection,
-+ const char *service_name,
-+ const char *base_service)
-+{
-+ dbus_bool_t got_error;
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+
-+ _dbus_verbose ("Sending exit message to the test service\n");
-+
-+ retval = FALSE;
-+
-+ /* Kill off the test service by sending it a quit message */
-+ message = dbus_message_new_method_call (service_name,
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "Exit");
-+
-+ if (message == NULL)
-+ {
-+ /* Do this again; we still need the service to exit... */
-+ if (!check_send_exit_to_service (context, connection,
-+ service_name, base_service))
-+ goto out;
-+
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+
-+ /* Do this again; we still need the service to exit... */
-+ if (!check_send_exit_to_service (context, connection,
-+ service_name, base_service))
-+ goto out;
-+
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ /* send message */
-+ bus_test_run_clients_loop (SEND_PENDING (connection));
-+
-+ /* read it in and write it out to test service */
-+ bus_test_run_bus_loop (context, FALSE);
-+
-+ /* see if we got an error during message bus dispatching */
-+ bus_test_run_clients_loop (FALSE);
-+ message = borrow_message_waiting_for_memory (connection);
-+ got_error = message != NULL && dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR;
-+ if (message)
-+ {
-+ dbus_connection_return_message (connection, message);
-+ message = NULL;
-+ }
-+
-+ if (!got_error)
-+ {
-+ /* If no error, wait for the test service to exit */
-+ block_connection_until_message_from_bus (context, connection, "test service to exit");
-+
-+ bus_test_run_everything (context);
-+ }
-+
-+ if (got_error)
-+ {
-+ message = pop_message_waiting_for_memory (connection);
-+ _dbus_assert (message != NULL);
-+
-+ if (dbus_message_get_reply_serial (message) != serial)
-+ {
-+ warn_unexpected (connection, message,
-+ "error with the correct reply serial");
-+ goto out;
-+ }
-+
-+ if (!dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ warn_unexpected (connection, message,
-+ "a no memory error from asking test service to exit");
-+ goto out;
-+ }
-+
-+ _dbus_verbose ("Got error %s when asking test service to exit\n",
-+ dbus_message_get_error_name (message));
-+
-+ /* Do this again; we still need the service to exit... */
-+ if (!check_send_exit_to_service (context, connection,
-+ service_name, base_service))
-+ goto out;
-+ }
-+ else
-+ {
-+ if (!check_service_deactivated (context, connection,
-+ service_name, base_service))
-+ goto out;
-+
-+ /* Should now have a NoReply error from the Exit() method
-+ * call; it should have come after all the deactivation
-+ * stuff.
-+ */
-+ message = pop_message_waiting_for_memory (connection);
-+
-+ if (message == NULL)
-+ {
-+ warn_unexpected (connection, NULL,
-+ "reply to Exit() method call");
-+ goto out;
-+ }
-+ if (!dbus_message_is_error (message,
-+ DBUS_ERROR_NO_REPLY))
-+ {
-+ warn_unexpected (connection, message,
-+ "NoReply error from Exit() method call");
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_reply_serial (message) != serial)
-+ {
-+ warn_unexpected (connection, message,
-+ "error with the correct reply serial");
-+ goto out;
-+ }
-+
-+ _dbus_verbose ("Got error %s after test service exited\n",
-+ dbus_message_get_error_name (message));
-+
-+ if (!check_no_leftovers (context))
-+ {
-+ _dbus_warn ("Messages were left over after %s\n",
-+ _DBUS_FUNCTION_NAME);
-+ goto out;
-+ }
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_got_error (BusContext *context,
-+ DBusConnection *connection,
-+ const char *first_error_name,
-+ ...)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t retval;
-+ va_list ap;
-+ dbus_bool_t error_found;
-+ const char *error_name;
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not get an expected error\n");
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ warn_unexpected (connection, message, "an error");
-+
-+ goto out;
-+ }
-+
-+ error_found = FALSE;
-+
-+ va_start (ap, first_error_name);
-+ error_name = first_error_name;
-+ while (error_name != NULL)
-+ {
-+ if (dbus_message_is_error (message, error_name))
-+ {
-+ error_found = TRUE;
-+ break;
-+ }
-+ error_name = va_arg (ap, char*);
-+ }
-+ va_end (ap);
-+
-+ if (!error_found)
-+ {
-+ _dbus_warn ("Expected error %s or other, got %s instead\n",
-+ first_error_name,
-+ dbus_message_get_error_name (message));
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+typedef enum
-+{
-+ GOT_SERVICE_CREATED,
-+ GOT_SERVICE_DELETED,
-+ GOT_ERROR,
-+ GOT_SOMETHING_ELSE
-+} GotServiceInfo;
-+
-+static GotServiceInfo
-+check_got_service_info (DBusMessage *message)
-+{
-+ GotServiceInfo message_kind;
-+
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_DBUS,
-+ "NameOwnerChanged"))
-+ {
-+ DBusError error;
-+ const char *service_name, *old_owner, *new_owner;
-+ dbus_error_init (&error);
-+
-+ reget_service_info_data:
-+ service_name = NULL;
-+ old_owner = NULL;
-+ new_owner = NULL;
-+
-+ dbus_message_get_args (message, &error,
-+ DBUS_TYPE_STRING, &service_name,
-+ DBUS_TYPE_STRING, &old_owner,
-+ DBUS_TYPE_STRING, &new_owner,
-+ DBUS_TYPE_INVALID);
-+ if (dbus_error_is_set (&error))
-+ {
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ goto reget_service_info_data;
-+ }
-+ else
-+ {
-+ _dbus_warn ("unexpected arguments for NameOwnerChanged message");
-+ message_kind = GOT_SOMETHING_ELSE;
-+ }
-+ }
-+ else if (!old_owner[0])
-+ message_kind = GOT_SERVICE_CREATED;
-+ else if (!new_owner[0])
-+ message_kind = GOT_SERVICE_DELETED;
-+ else
-+ message_kind = GOT_SOMETHING_ELSE;
-+
-+ dbus_error_free (&error);
-+ }
-+ else if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ message_kind = GOT_ERROR;
-+ else
-+ message_kind = GOT_SOMETHING_ELSE;
-+
-+ return message_kind;
-+}
-+
-+#define EXISTENT_SERVICE_NAME "org.freedesktop.DBus.TestSuiteEchoService"
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_existent_service_no_auto_start (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ DBusMessage *base_service_message;
-+ const char *base_service;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ const char *existent = EXISTENT_SERVICE_NAME;
-+ dbus_uint32_t flags;
-+
-+ base_service_message = NULL;
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "StartServiceByName");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ dbus_message_set_auto_start (message, FALSE);
-+
-+ flags = 0;
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &existent,
-+ DBUS_TYPE_UINT32, &flags,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+
-+ /* now wait for the message bus to hear back from the activated
-+ * service.
-+ */
-+ block_connection_until_message_from_bus (context, connection, "activated service to connect");
-+
-+ bus_test_run_everything (context);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ return TRUE;
-+ }
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive any messages after %s %d on %p\n",
-+ "StartServiceByName", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+ _dbus_verbose (" (after sending %s)\n", "StartServiceByName");
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else if (dbus_message_is_error (message,
-+ DBUS_ERROR_SPAWN_CHILD_EXITED) ||
-+ dbus_message_is_error (message,
-+ DBUS_ERROR_SPAWN_CHILD_SIGNALED) ||
-+ dbus_message_is_error (message,
-+ DBUS_ERROR_SPAWN_EXEC_FAILED))
-+ {
-+ ; /* good, this is expected also */
-+ }
-+ else
-+ {
-+ _dbus_warn ("Did not expect error %s\n",
-+ dbus_message_get_error_name (message));
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ GotServiceInfo message_kind;
-+
-+ if (!check_base_service_activated (context, connection,
-+ message, &base_service))
-+ goto out;
-+
-+ base_service_message = message;
-+ message = NULL;
-+
-+ /* We may need to block here for the test service to exit or finish up */
-+ block_connection_until_message_from_bus (context, connection, "test service to exit or finish up");
-+
-+ message = dbus_connection_borrow_message (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive any messages after base service creation notification\n");
-+ goto out;
-+ }
-+
-+ message_kind = check_got_service_info (message);
-+
-+ dbus_connection_return_message (connection, message);
-+ message = NULL;
-+
-+ switch (message_kind)
-+ {
-+ case GOT_SOMETHING_ELSE:
-+ _dbus_warn ("Unexpected message after ActivateService "
-+ "(should be an error or a service announcement");
-+ goto out;
-+
-+ case GOT_ERROR:
-+ if (!check_got_error (context, connection,
-+ DBUS_ERROR_SPAWN_CHILD_EXITED,
-+ DBUS_ERROR_NO_MEMORY,
-+ NULL))
-+ goto out;
-+ /* A service deleted should be coming along now after this error.
-+ * We can also get the error *after* the service deleted.
-+ */
-+
-+ /* fall through */
-+
-+ case GOT_SERVICE_DELETED:
-+ {
-+ /* The service started up and got a base address, but then
-+ * failed to register under EXISTENT_SERVICE_NAME
-+ */
-+ CheckServiceOwnerChangedData socd;
-+
-+ socd.expected_kind = SERVICE_DELETED;
-+ socd.expected_service_name = base_service;
-+ socd.failed = FALSE;
-+ socd.skip_connection = NULL;
-+
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+
-+ /* Now we should get an error about the service exiting
-+ * if we didn't get it before.
-+ */
-+ if (message_kind != GOT_ERROR)
-+ {
-+ block_connection_until_message_from_bus (context, connection, "error about service exiting");
-+
-+ /* and process everything again */
-+ bus_test_run_everything (context);
-+
-+ if (!check_got_error (context, connection,
-+ DBUS_ERROR_SPAWN_CHILD_EXITED,
-+ NULL))
-+ goto out;
-+ }
-+ break;
-+ }
-+
-+ case GOT_SERVICE_CREATED:
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Failed to pop message we just put back! "
-+ "should have been a NameOwnerChanged (creation)\n");
-+ goto out;
-+ }
-+
-+ if (!check_service_activated (context, connection, EXISTENT_SERVICE_NAME,
-+ base_service, message))
-+ goto out;
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ if (!check_no_leftovers (context))
-+ {
-+ _dbus_warn ("Messages were left over after successful activation\n");
-+ goto out;
-+ }
-+
-+ if (!check_send_exit_to_service (context, connection,
-+ EXISTENT_SERVICE_NAME, base_service))
-+ goto out;
-+
-+ break;
-+ }
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ if (base_service_message)
-+ dbus_message_unref (base_service_message);
-+
-+ return retval;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_segfault_service_no_auto_start (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ const char *segv_service;
-+ dbus_uint32_t flags;
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "StartServiceByName");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ dbus_message_set_auto_start (message, FALSE);
-+
-+ segv_service = "org.freedesktop.DBus.TestSuiteSegfaultService";
-+ flags = 0;
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &segv_service,
-+ DBUS_TYPE_UINT32, &flags,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+ block_connection_until_message_from_bus (context, connection, "reply to activating segfault service");
-+ bus_test_run_everything (context);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ return TRUE;
-+ }
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "StartServiceByName", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else if (dbus_message_is_error (message,
-+ DBUS_ERROR_SPAWN_CHILD_SIGNALED))
-+ {
-+ ; /* good, this is expected also */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_warn ("Did not expect to successfully activate segfault service\n");
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_segfault_service_auto_start (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+
-+ message = dbus_message_new_method_call ("org.freedesktop.DBus.TestSuiteSegfaultService",
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "Echo");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+ block_connection_until_message_from_bus (context, connection, "reply to Echo on segfault service");
-+ bus_test_run_everything (context);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ return TRUE;
-+ }
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "Echo message (auto activation)", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else if (dbus_message_is_error (message,
-+ DBUS_ERROR_SPAWN_CHILD_SIGNALED))
-+ {
-+ ; /* good, this is expected also */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_warn ("Did not expect to successfully activate segfault service\n");
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+#define TEST_ECHO_MESSAGE "Test echo message"
-+#define TEST_RUN_HELLO_FROM_SELF_MESSAGE "Test sending message to self"
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_existent_hello_from_self (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ const char *text;
-+
-+ message = dbus_message_new_method_call (EXISTENT_SERVICE_NAME,
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "RunHelloFromSelf");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ text = TEST_RUN_HELLO_FROM_SELF_MESSAGE;
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &text,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+
-+ /* Note: if this test is run in OOM mode, it will block when the bus
-+ * doesn't send a reply due to OOM.
-+ */
-+ block_connection_until_message_from_bus (context, connection, "reply from running hello from self");
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Failed to pop message! Should have been reply from RunHelloFromSelf message\n");
-+ return FALSE;
-+ }
-+
-+ if (dbus_message_get_reply_serial (message) != serial)
-+ {
-+ _dbus_warn ("Wrong reply serial\n");
-+ dbus_message_unref (message);
-+ return FALSE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ return TRUE;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_existent_ping (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ message = dbus_message_new_method_call (EXISTENT_SERVICE_NAME,
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.DBus.Peer",
-+ "Ping");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+
-+ /* Note: if this test is run in OOM mode, it will block when the bus
-+ * doesn't send a reply due to OOM.
-+ */
-+ block_connection_until_message_from_bus (context, connection, "reply from running Ping");
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Failed to pop message! Should have been reply from Ping message\n");
-+ return FALSE;
-+ }
-+
-+ if (dbus_message_get_reply_serial (message) != serial)
-+ {
-+ _dbus_warn ("Wrong reply serial\n");
-+ dbus_message_unref (message);
-+ return FALSE;
-+ }
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_RETURN)
-+ {
-+ _dbus_warn ("Unexpected message return during Ping\n");
-+ dbus_message_unref (message);
-+ return FALSE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ return TRUE;
-+}
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_existent_service_auto_start (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ DBusMessage *base_service_message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ const char *base_service;
-+ const char *text;
-+
-+ base_service_message = NULL;
-+
-+ message = dbus_message_new_method_call (EXISTENT_SERVICE_NAME,
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "Echo");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ text = TEST_ECHO_MESSAGE;
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &text,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+
-+ /* now wait for the message bus to hear back from the activated
-+ * service.
-+ */
-+ block_connection_until_message_from_bus (context, connection, "reply to Echo on existent service");
-+ bus_test_run_everything (context);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ return TRUE;
-+ }
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive any messages after auto start %d on %p\n",
-+ serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+ _dbus_verbose (" (after sending %s)\n", "auto start");
-+
-+ /* we should get zero or two ServiceOwnerChanged signals */
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_SIGNAL)
-+ {
-+ GotServiceInfo message_kind;
-+
-+ if (!check_base_service_activated (context, connection,
-+ message, &base_service))
-+ goto out;
-+
-+ base_service_message = message;
-+ message = NULL;
-+
-+ /* We may need to block here for the test service to exit or finish up */
-+ block_connection_until_message_from_bus (context, connection, "service to exit");
-+
-+ /* Should get a service creation notification for the activated
-+ * service name, or a service deletion on the base service name
-+ */
-+ message = dbus_connection_borrow_message (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("No message after auto activation "
-+ "(should be a service announcement)");
-+ dbus_connection_return_message (connection, message);
-+ message = NULL;
-+ goto out;
-+ }
-+
-+ message_kind = check_got_service_info (message);
-+
-+ dbus_connection_return_message (connection, message);
-+ message = NULL;
-+
-+ switch (message_kind)
-+ {
-+ case GOT_SERVICE_CREATED:
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Failed to pop message we just put back! "
-+ "should have been a NameOwnerChanged (creation)\n");
-+ goto out;
-+ }
-+
-+ /* Check that ServiceOwnerChanged (creation) was correctly received */
-+ if (!check_service_auto_activated (context, connection, EXISTENT_SERVICE_NAME,
-+ base_service, message))
-+ goto out;
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ break;
-+
-+ case GOT_SERVICE_DELETED:
-+ {
-+ /* The service started up and got a base address, but then
-+ * failed to register under EXISTENT_SERVICE_NAME
-+ */
-+ CheckServiceOwnerChangedData socd;
-+
-+ socd.expected_kind = SERVICE_DELETED;
-+ socd.expected_service_name = base_service;
-+ socd.failed = FALSE;
-+ socd.skip_connection = NULL;
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+
-+ break;
-+ }
-+
-+ case GOT_ERROR:
-+ case GOT_SOMETHING_ELSE:
-+ _dbus_warn ("Unexpected message after auto activation\n");
-+ goto out;
-+ }
-+ }
-+
-+ /* OK, now we've dealt with ServiceOwnerChanged signals, now should
-+ * come the method reply (or error) from the initial method call
-+ */
-+
-+ /* Note: if this test is run in OOM mode, it will block when the bus
-+ * doesn't send a reply due to OOM.
-+ */
-+ block_connection_until_message_from_bus (context, connection, "reply from echo message after auto-activation");
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Failed to pop message! Should have been reply from echo message\n");
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_reply_serial (message) != serial)
-+ {
-+ _dbus_warn ("Wrong reply serial\n");
-+ goto out;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ if (!check_existent_ping (context, connection))
-+ goto out;
-+
-+ if (!check_existent_hello_from_self (context, connection))
-+ goto out;
-+
-+ if (!check_send_exit_to_service (context, connection,
-+ EXISTENT_SERVICE_NAME,
-+ base_service))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ if (base_service_message)
-+ dbus_message_unref (base_service_message);
-+
-+ return retval;
-+}
-+
-+#define SHELL_FAIL_SERVICE_NAME "org.freedesktop.DBus.TestSuiteShellEchoServiceFail"
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_shell_fail_service_auto_start (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+
-+ message = dbus_message_new_method_call (SHELL_FAIL_SERVICE_NAME,
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "Echo");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+ block_connection_until_message_from_bus (context, connection, "reply to shell Echo on service which should fail to auto-start");
-+ bus_test_run_everything (context);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ return TRUE;
-+ }
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive a reply to %s %d on %p\n",
-+ "Echo message (auto activation)", serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ if (!dbus_message_has_sender (message, DBUS_SERVICE_DBUS))
-+ {
-+ _dbus_warn ("Message has wrong sender %s\n",
-+ dbus_message_get_sender (message) ?
-+ dbus_message_get_sender (message) : "(none)");
-+ goto out;
-+ }
-+
-+ if (dbus_message_is_error (message,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ ; /* good, this is a valid response */
-+ }
-+ else if (dbus_message_is_error (message,
-+ DBUS_ERROR_INVALID_ARGS))
-+ {
-+ _dbus_verbose("got invalid args\n");
-+ ; /* good, this is expected also */
-+ }
-+ else
-+ {
-+ warn_unexpected (connection, message, "not this error");
-+
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_warn ("Did not expect to successfully auto-start shell fail service\n");
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+#define SHELL_SUCCESS_SERVICE_NAME "org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess"
-+
-+/* returns TRUE if the correct thing happens,
-+ * but the correct thing may include OOM errors.
-+ */
-+static dbus_bool_t
-+check_shell_service_success_auto_start (BusContext *context,
-+ DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ DBusMessage *base_service_message;
-+ dbus_uint32_t serial;
-+ dbus_bool_t retval;
-+ const char *base_service;
-+ const char *argv[7] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL};
-+
-+ base_service_message = NULL;
-+
-+ message = dbus_message_new_method_call (SHELL_SUCCESS_SERVICE_NAME,
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "Echo");
-+
-+ if (message == NULL)
-+ return TRUE;
-+
-+ if (!dbus_connection_send (connection, message, &serial))
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ bus_test_run_everything (context);
-+
-+ /* now wait for the message bus to hear back from the activated
-+ * service.
-+ */
-+ block_connection_until_message_from_bus (context, connection, "reply to Echo on shell success service");
-+ bus_test_run_everything (context);
-+
-+ if (!dbus_connection_get_is_connected (connection))
-+ {
-+ _dbus_verbose ("connection was disconnected: %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ return TRUE;
-+ }
-+
-+ retval = FALSE;
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Did not receive any messages after auto start %d on %p\n",
-+ serial, connection);
-+ goto out;
-+ }
-+
-+ verbose_message_received (connection, message);
-+ _dbus_verbose (" (after sending %s)\n", "auto start");
-+
-+ /* we should get zero or two ServiceOwnerChanged signals */
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_SIGNAL)
-+ {
-+ GotServiceInfo message_kind;
-+
-+ if (!check_base_service_activated (context, connection,
-+ message, &base_service))
-+ goto out;
-+
-+ base_service_message = message;
-+ message = NULL;
-+
-+ /* We may need to block here for the test service to exit or finish up */
-+ block_connection_until_message_from_bus (context, connection, "service to exit");
-+
-+ /* Should get a service creation notification for the activated
-+ * service name, or a service deletion on the base service name
-+ */
-+ message = dbus_connection_borrow_message (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("No message after auto activation "
-+ "(should be a service announcement)");
-+ dbus_connection_return_message (connection, message);
-+ message = NULL;
-+ goto out;
-+ }
-+
-+ message_kind = check_got_service_info (message);
-+
-+ dbus_connection_return_message (connection, message);
-+ message = NULL;
-+
-+ switch (message_kind)
-+ {
-+ case GOT_SERVICE_CREATED:
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Failed to pop message we just put back! "
-+ "should have been a NameOwnerChanged (creation)\n");
-+ goto out;
-+ }
-+
-+ /* Check that ServiceOwnerChanged (creation) was correctly received */
-+ if (!check_service_auto_activated (context, connection, SHELL_SUCCESS_SERVICE_NAME,
-+ base_service, message))
-+ goto out;
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ break;
-+
-+ case GOT_SERVICE_DELETED:
-+ {
-+ /* The service started up and got a base address, but then
-+ * failed to register under SHELL_SUCCESS_SERVICE_NAME
-+ */
-+ CheckServiceOwnerChangedData socd;
-+
-+ socd.expected_kind = SERVICE_DELETED;
-+ socd.expected_service_name = base_service;
-+ socd.failed = FALSE;
-+ socd.skip_connection = NULL;
-+ bus_test_clients_foreach (check_service_owner_changed_foreach,
-+ &socd);
-+
-+ if (socd.failed)
-+ goto out;
-+
-+ break;
-+ }
-+
-+ case GOT_ERROR:
-+ case GOT_SOMETHING_ELSE:
-+ _dbus_warn ("Unexpected message after auto activation\n");
-+ goto out;
-+ }
-+ }
-+
-+ /* OK, now we've dealt with ServiceOwnerChanged signals, now should
-+ * come the method reply (or error) from the initial method call
-+ */
-+
-+ /* Note: if this test is run in OOM mode, it will block when the bus
-+ * doesn't send a reply due to OOM.
-+ */
-+ block_connection_until_message_from_bus (context, connection, "reply from echo message after auto-activation");
-+
-+ message = pop_message_waiting_for_memory (connection);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("Failed to pop message! Should have been reply from echo message\n");
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_reply_serial (message) != serial)
-+ {
-+ _dbus_warn ("Wrong reply serial\n");
-+ goto out;
-+ }
-+
-+ if (!dbus_message_get_args (message, NULL,
-+ DBUS_TYPE_STRING, &argv[0],
-+ DBUS_TYPE_STRING, &argv[1],
-+ DBUS_TYPE_STRING, &argv[2],
-+ DBUS_TYPE_STRING, &argv[3],
-+ DBUS_TYPE_STRING, &argv[4],
-+ DBUS_TYPE_STRING, &argv[5],
-+ DBUS_TYPE_STRING, &argv[6],
-+ DBUS_TYPE_INVALID))
-+ {
-+ _dbus_warn ("Error getting arguments from return");
-+ goto out;
-+ }
-+
-+ /* don't worry about arg[0] as it may be different
-+ depending on the path to the tests
-+ */
-+ if (strcmp("-test", argv[1]) != 0)
-+ {
-+ _dbus_warn ("Unexpected argv[1] in shell success service test (expected: %s, got: %s)",
-+ "-test", argv[1]);
-+ goto out;
-+ }
-+
-+ if (strcmp("that", argv[2]) != 0)
-+ {
-+ _dbus_warn ("Unexpected argv[2] in shell success service test (expected: %s, got: %s)",
-+ "that", argv[2]);
-+ goto out;
-+ }
-+
-+ if (strcmp("we get", argv[3]) != 0)
-+ {
-+ _dbus_warn ("Unexpected argv[3] in shell success service test (expected: %s, got: %s)",
-+ "we get", argv[3]);
-+ goto out;
-+ }
-+
-+ if (strcmp("back", argv[4]) != 0)
-+ {
-+ _dbus_warn ("Unexpected argv[4] in shell success service test (expected: %s, got: %s)",
-+ "back", argv[4]);
-+ goto out;
-+ }
-+
-+ if (strcmp("--what", argv[5]) != 0)
-+ {
-+ _dbus_warn ("Unexpected argv[5] in shell success service test (expected: %s, got: %s)",
-+ "--what", argv[5]);
-+ goto out;
-+ }
-+
-+ if (strcmp("we put in", argv[6]) != 0)
-+ {
-+ _dbus_warn ("Unexpected argv[6] in shell success service test (expected: %s, got: %s)",
-+ "we put in", argv[6]);
-+ goto out;
-+ }
-+
-+ dbus_message_unref (message);
-+ message = NULL;
-+
-+ if (!check_send_exit_to_service (context, connection,
-+ SHELL_SUCCESS_SERVICE_NAME,
-+ base_service))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ if (base_service_message)
-+ dbus_message_unref (base_service_message);
-+
-+ return retval;
-+}
-+
-+typedef struct
-+{
-+ Check1Func func;
-+ BusContext *context;
-+} Check1Data;
-+
-+static dbus_bool_t
-+check_oom_check1_func (void *data)
-+{
-+ Check1Data *d = data;
-+
-+ if (! (* d->func) (d->context))
-+ return FALSE;
-+
-+ if (!check_no_leftovers (d->context))
-+ {
-+ _dbus_warn ("Messages were left over, should be covered by test suite\n");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+check1_try_iterations (BusContext *context,
-+ const char *description,
-+ Check1Func func)
-+{
-+ Check1Data d;
-+
-+ d.func = func;
-+ d.context = context;
-+
-+ if (!_dbus_test_oom_handling (description, check_oom_check1_func,
-+ &d))
-+ _dbus_assert_not_reached ("test failed");
-+}
-+
-+typedef struct
-+{
-+ Check2Func func;
-+ BusContext *context;
-+ DBusConnection *connection;
-+} Check2Data;
-+
-+static dbus_bool_t
-+check_oom_check2_func (void *data)
-+{
-+ Check2Data *d = data;
-+
-+ if (! (* d->func) (d->context, d->connection))
-+ return FALSE;
-+
-+ if (!check_no_leftovers (d->context))
-+ {
-+ _dbus_warn ("Messages were left over, should be covered by test suite");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+check2_try_iterations (BusContext *context,
-+ DBusConnection *connection,
-+ const char *description,
-+ Check2Func func)
-+{
-+ Check2Data d;
-+
-+ d.func = func;
-+ d.context = context;
-+ d.connection = connection;
-+
-+ if (!_dbus_test_oom_handling (description, check_oom_check2_func,
-+ &d))
-+ {
-+ _dbus_warn ("%s failed during oom\n", description);
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+}
-+
-+dbus_bool_t
-+bus_dispatch_test (const DBusString *test_data_dir)
-+{
-+ BusContext *context;
-+ DBusConnection *foo;
-+ DBusConnection *bar;
-+ DBusConnection *baz;
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+
-+ context = bus_context_new_test (test_data_dir,
-+ "valid-config-files/debug-allow-all.conf");
-+ if (context == NULL)
-+ return FALSE;
-+
-+ foo = dbus_connection_open ("debug-pipe:name=test-server", &error);
-+ if (foo == NULL)
-+ _dbus_assert_not_reached ("could not alloc connection");
-+
-+ if (!bus_setup_debug_client (foo))
-+ _dbus_assert_not_reached ("could not set up connection");
-+
-+ spin_connection_until_authenticated (context, foo);
-+
-+ if (!check_hello_message (context, foo))
-+ _dbus_assert_not_reached ("hello message failed");
-+
-+ if (!check_double_hello_message (context, foo))
-+ _dbus_assert_not_reached ("double hello message failed");
-+
-+ if (!check_add_match_all (context, foo))
-+ _dbus_assert_not_reached ("AddMatch message failed");
-+
-+ bar = dbus_connection_open ("debug-pipe:name=test-server", &error);
-+ if (bar == NULL)
-+ _dbus_assert_not_reached ("could not alloc connection");
-+
-+ if (!bus_setup_debug_client (bar))
-+ _dbus_assert_not_reached ("could not set up connection");
-+
-+ spin_connection_until_authenticated (context, bar);
-+
-+ if (!check_hello_message (context, bar))
-+ _dbus_assert_not_reached ("hello message failed");
-+
-+ if (!check_add_match_all (context, bar))
-+ _dbus_assert_not_reached ("AddMatch message failed");
-+
-+ baz = dbus_connection_open ("debug-pipe:name=test-server", &error);
-+ if (baz == NULL)
-+ _dbus_assert_not_reached ("could not alloc connection");
-+
-+ if (!bus_setup_debug_client (baz))
-+ _dbus_assert_not_reached ("could not set up connection");
-+
-+ spin_connection_until_authenticated (context, baz);
-+
-+ if (!check_hello_message (context, baz))
-+ _dbus_assert_not_reached ("hello message failed");
-+
-+ if (!check_add_match_all (context, baz))
-+ _dbus_assert_not_reached ("AddMatch message failed");
-+
-+ if (!check_get_connection_unix_user (context, baz))
-+ _dbus_assert_not_reached ("GetConnectionUnixUser message failed");
-+
-+ if (!check_get_connection_unix_process_id (context, baz))
-+ _dbus_assert_not_reached ("GetConnectionUnixProcessID message failed");
-+
-+ if (!check_no_leftovers (context))
-+ {
-+ _dbus_warn ("Messages were left over after setting up initial connections");
-+ _dbus_assert_not_reached ("initial connection setup failed");
-+ }
-+
-+ check1_try_iterations (context, "create_and_hello",
-+ check_hello_connection);
-+
-+ check2_try_iterations (context, foo, "nonexistent_service_no_auto_start",
-+ check_nonexistent_service_no_auto_start);
-+
-+ check2_try_iterations (context, foo, "segfault_service_no_auto_start",
-+ check_segfault_service_no_auto_start);
-+
-+ check2_try_iterations (context, foo, "existent_service_no_auto_start",
-+ check_existent_service_no_auto_start);
-+
-+ check2_try_iterations (context, foo, "nonexistent_service_auto_start",
-+ check_nonexistent_service_auto_start);
-+
-+ check2_try_iterations (context, foo, "segfault_service_auto_start",
-+ check_segfault_service_auto_start);
-+
-+ check2_try_iterations (context, foo, "shell_fail_service_auto_start",
-+ check_shell_fail_service_auto_start);
-+
-+#if 0
-+ /* Note: need to resolve some issues with the testing code in order to run
-+ * this in oom (handle that we sometimes don't get replies back from the bus
-+ * when oom happens, without blocking the test).
-+ */
-+ check2_try_iterations (context, foo, "existent_service_auto_auto_start",
-+ check_existent_service_auto_start);
-+#endif
-+
-+ if (!check_existent_service_auto_start (context, foo))
-+ _dbus_assert_not_reached ("existent service auto start failed");
-+
-+ if (!check_shell_service_success_auto_start (context, foo))
-+ _dbus_assert_not_reached ("shell success service auto start failed");
-+
-+ _dbus_verbose ("Disconnecting foo, bar, and baz\n");
-+
-+ kill_client_connection_unchecked (foo);
-+ kill_client_connection_unchecked (bar);
-+ kill_client_connection_unchecked (baz);
-+
-+ bus_context_unref (context);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_dispatch_sha1_test (const DBusString *test_data_dir)
-+{
-+ BusContext *context;
-+ DBusConnection *foo;
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+
-+ /* Test SHA1 authentication */
-+ _dbus_verbose ("Testing SHA1 context\n");
-+
-+ context = bus_context_new_test (test_data_dir,
-+ "valid-config-files/debug-allow-all-sha1.conf");
-+ if (context == NULL)
-+ return FALSE;
-+
-+ foo = dbus_connection_open ("debug-pipe:name=test-server", &error);
-+ if (foo == NULL)
-+ _dbus_assert_not_reached ("could not alloc connection");
-+
-+ if (!bus_setup_debug_client (foo))
-+ _dbus_assert_not_reached ("could not set up connection");
-+
-+ spin_connection_until_authenticated (context, foo);
-+
-+ if (!check_hello_message (context, foo))
-+ _dbus_assert_not_reached ("hello message failed");
-+
-+ if (!check_add_match_all (context, foo))
-+ _dbus_assert_not_reached ("addmatch message failed");
-+
-+ if (!check_no_leftovers (context))
-+ {
-+ _dbus_warn ("Messages were left over after setting up initial SHA-1 connection\n");
-+ _dbus_assert_not_reached ("initial connection setup failed");
-+ }
-+
-+ check1_try_iterations (context, "create_and_hello_sha1",
-+ check_hello_connection);
-+
-+ kill_client_connection_unchecked (foo);
-+
-+ bus_context_unref (context);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/bus/dispatch.h dbus-0.61/bus/dispatch.h
---- dbus-0.61.orig/bus/dispatch.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/dispatch.h 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,38 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dispatch.h Message dispatcher
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_DISPATCH_H
-+#define BUS_DISPATCH_H
-+
-+#include <dbus/dbus.h>
-+#include "connection.h"
-+
-+dbus_bool_t bus_dispatch_add_connection (DBusConnection *connection);
-+void bus_dispatch_remove_connection (DBusConnection *connection);
-+dbus_bool_t bus_dispatch_matches (BusTransaction *transaction,
-+ DBusConnection *sender,
-+ DBusConnection *recipient,
-+ DBusMessage *message,
-+ DBusError *error);
-+
-+#endif /* BUS_DISPATCH_H */
-diff -Naur dbus-0.61.orig/bus/driver.c dbus-0.61/bus/driver.c
---- dbus-0.61.orig/bus/driver.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/driver.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,1644 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* driver.c Bus client (driver)
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "activation.h"
-+#include "connection.h"
-+#include "driver.h"
-+#include "dispatch.h"
-+#include "services.h"
-+#include "selinux.h"
-+#include "signals.h"
-+#include "utils.h"
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-marshal-recursive.h>
-+#include <string.h>
-+
-+static dbus_bool_t bus_driver_send_welcome_message (DBusConnection *connection,
-+ DBusMessage *hello_message,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+
-+dbus_bool_t
-+bus_driver_send_service_owner_changed (const char *service_name,
-+ const char *old_owner,
-+ const char *new_owner,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t retval;
-+ const char *null_service;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ null_service = "";
-+ _dbus_verbose ("sending name owner changed: %s [%s -> %s]\n",
-+ service_name,
-+ old_owner ? old_owner : null_service,
-+ new_owner ? new_owner : null_service);
-+
-+ message = dbus_message_new_signal (DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "NameOwnerChanged");
-+
-+ if (message == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_set_sender (message, DBUS_SERVICE_DBUS))
-+ goto oom;
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &service_name,
-+ DBUS_TYPE_STRING, old_owner ? &old_owner : &null_service,
-+ DBUS_TYPE_STRING, new_owner ? &new_owner : &null_service,
-+ DBUS_TYPE_INVALID))
-+ goto oom;
-+
-+ _dbus_assert (dbus_message_has_signature (message, "sss"));
-+
-+ retval = bus_dispatch_matches (transaction, NULL, NULL, message, error);
-+ dbus_message_unref (message);
-+
-+ return retval;
-+
-+ oom:
-+ dbus_message_unref (message);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+}
-+
-+dbus_bool_t
-+bus_driver_send_service_lost (DBusConnection *connection,
-+ const char *service_name,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ DBusMessage *message;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ message = dbus_message_new_signal (DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "NameLost");
-+
-+ if (message == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_set_destination (message, bus_connection_get_name (connection)) ||
-+ !dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &service_name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, message))
-+ {
-+ dbus_message_unref (message);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+}
-+
-+dbus_bool_t
-+bus_driver_send_service_acquired (DBusConnection *connection,
-+ const char *service_name,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ DBusMessage *message;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ message = dbus_message_new_signal (DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "NameAcquired");
-+
-+ if (message == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_set_destination (message, bus_connection_get_name (connection)) ||
-+ !dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &service_name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, message))
-+ {
-+ dbus_message_unref (message);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ dbus_message_unref (message);
-+ return TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+create_unique_client_name (BusRegistry *registry,
-+ DBusString *str)
-+{
-+ /* We never want to use the same unique client name twice, because
-+ * we want to guarantee that if you send a message to a given unique
-+ * name, you always get the same application. So we use two numbers
-+ * for INT_MAX * INT_MAX combinations, should be pretty safe against
-+ * wraparound.
-+ */
-+ /* FIXME these should be in BusRegistry rather than static vars */
-+ static int next_major_number = 0;
-+ static int next_minor_number = 0;
-+ int len;
-+
-+ len = _dbus_string_get_length (str);
-+
-+ while (TRUE)
-+ {
-+ /* start out with 1-0, go to 1-1, 1-2, 1-3,
-+ * up to 1-MAXINT, then 2-0, 2-1, etc.
-+ */
-+ if (next_minor_number <= 0)
-+ {
-+ next_major_number += 1;
-+ next_minor_number = 0;
-+ if (next_major_number <= 0)
-+ _dbus_assert_not_reached ("INT_MAX * INT_MAX clients were added");
-+ }
-+
-+ _dbus_assert (next_major_number > 0);
-+ _dbus_assert (next_minor_number >= 0);
-+
-+ /* appname:MAJOR-MINOR */
-+
-+ if (!_dbus_string_append (str, ":"))
-+ return FALSE;
-+
-+ if (!_dbus_string_append_int (str, next_major_number))
-+ return FALSE;
-+
-+ if (!_dbus_string_append (str, "."))
-+ return FALSE;
-+
-+ if (!_dbus_string_append_int (str, next_minor_number))
-+ return FALSE;
-+
-+ next_minor_number += 1;
-+
-+ /* Check if a client with the name exists */
-+ if (bus_registry_lookup (registry, str) == NULL)
-+ break;
-+
-+ /* drop the number again, try the next one. */
-+ _dbus_string_set_length (str, len);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_hello (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusString unique_name;
-+ BusService *service;
-+ dbus_bool_t retval;
-+ BusRegistry *registry;
-+ BusConnections *connections;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (bus_connection_is_active (connection))
-+ {
-+ /* We already handled an Hello message for this connection. */
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Already handled an Hello message");
-+ return FALSE;
-+ }
-+
-+ /* Note that when these limits are exceeded we don't disconnect the
-+ * connection; we just sort of leave it hanging there until it times
-+ * out or disconnects itself or is dropped due to the max number of
-+ * incomplete connections. It's even OK if the connection wants to
-+ * retry the hello message, we support that.
-+ */
-+ connections = bus_connection_get_connections (connection);
-+ if (!bus_connections_check_limits (connections, connection,
-+ error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&unique_name))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ retval = FALSE;
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ if (!create_unique_client_name (registry, &unique_name))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out_0;
-+ }
-+
-+ if (!bus_connection_complete (connection, &unique_name, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto out_0;
-+ }
-+
-+ if (!dbus_message_set_sender (message,
-+ bus_connection_get_name (connection)))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out_0;
-+ }
-+
-+ if (!bus_driver_send_welcome_message (connection, message, transaction, error))
-+ goto out_0;
-+
-+ /* Create the service */
-+ service = bus_registry_ensure (registry,
-+ &unique_name, connection, 0, transaction, error);
-+ if (service == NULL)
-+ goto out_0;
-+
-+ _dbus_assert (bus_connection_is_active (connection));
-+ retval = TRUE;
-+
-+ out_0:
-+ _dbus_string_free (&unique_name);
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+bus_driver_send_welcome_message (DBusConnection *connection,
-+ DBusMessage *hello_message,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ DBusMessage *welcome;
-+ const char *name;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ name = bus_connection_get_name (connection);
-+ _dbus_assert (name != NULL);
-+
-+ welcome = dbus_message_new_method_return (hello_message);
-+ if (welcome == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_append_args (welcome,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (welcome);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ _dbus_assert (dbus_message_has_signature (welcome, DBUS_TYPE_STRING_AS_STRING));
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, welcome))
-+ {
-+ dbus_message_unref (welcome);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ dbus_message_unref (welcome);
-+ return TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_list_services (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusMessage *reply;
-+ int len;
-+ char **services;
-+ BusRegistry *registry;
-+ int i;
-+ DBusMessageIter iter;
-+ DBusMessageIter sub;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!bus_registry_list_services (registry, &services, &len))
-+ {
-+ dbus_message_unref (reply);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ dbus_message_iter_init_append (reply, &iter);
-+
-+ if (!dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY,
-+ DBUS_TYPE_STRING_AS_STRING,
-+ &sub))
-+ {
-+ dbus_free_string_array (services);
-+ dbus_message_unref (reply);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ {
-+ /* Include the bus driver in the list */
-+ const char *v_STRING = DBUS_SERVICE_DBUS;
-+ if (!dbus_message_iter_append_basic (&sub, DBUS_TYPE_STRING,
-+ &v_STRING))
-+ {
-+ dbus_free_string_array (services);
-+ dbus_message_unref (reply);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ }
-+
-+ i = 0;
-+ while (i < len)
-+ {
-+ if (!dbus_message_iter_append_basic (&sub, DBUS_TYPE_STRING,
-+ &services[i]))
-+ {
-+ dbus_free_string_array (services);
-+ dbus_message_unref (reply);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ ++i;
-+ }
-+
-+ if (!dbus_message_iter_close_container (&iter, &sub))
-+ {
-+ dbus_free_string_array (services);
-+ dbus_message_unref (reply);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ dbus_free_string_array (services);
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, reply))
-+ {
-+ dbus_message_unref (reply);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ dbus_message_unref (reply);
-+ return TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_acquire_service (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusMessage *reply;
-+ DBusString service_name;
-+ const char *name;
-+ dbus_uint32_t service_reply;
-+ dbus_uint32_t flags;
-+ dbus_bool_t retval;
-+ BusRegistry *registry;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ if (!dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_UINT32, &flags,
-+ DBUS_TYPE_INVALID))
-+ return FALSE;
-+
-+ _dbus_verbose ("Trying to own name %s with flags 0x%x\n", name, flags);
-+
-+ retval = FALSE;
-+ reply = NULL;
-+
-+ _dbus_string_init_const (&service_name, name);
-+
-+ if (!bus_registry_acquire_service (registry, connection,
-+ &service_name, flags,
-+ &service_reply, transaction,
-+ error))
-+ goto out;
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ if (!dbus_message_append_args (reply, DBUS_TYPE_UINT32, &service_reply, DBUS_TYPE_INVALID))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, reply))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (reply)
-+ dbus_message_unref (reply);
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_release_service (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusMessage *reply;
-+ DBusString service_name;
-+ const char *name;
-+ dbus_uint32_t service_reply;
-+ dbus_bool_t retval;
-+ BusRegistry *registry;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ if (!dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ return FALSE;
-+
-+ _dbus_verbose ("Trying to release name %s\n", name);
-+
-+ retval = FALSE;
-+ reply = NULL;
-+
-+ _dbus_string_init_const (&service_name, name);
-+
-+ if (!bus_registry_release_service (registry, connection,
-+ &service_name, &service_reply,
-+ transaction, error))
-+ goto out;
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ if (!dbus_message_append_args (reply, DBUS_TYPE_UINT32, &service_reply, DBUS_TYPE_INVALID))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, reply))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (reply)
-+ dbus_message_unref (reply);
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_service_exists (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusMessage *reply;
-+ DBusString service_name;
-+ BusService *service;
-+ dbus_bool_t service_exists;
-+ const char *name;
-+ dbus_bool_t retval;
-+ BusRegistry *registry;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ if (!dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ return FALSE;
-+
-+ retval = FALSE;
-+
-+ if (strcmp (name, DBUS_SERVICE_DBUS) == 0)
-+ {
-+ service_exists = TRUE;
-+ }
-+ else
-+ {
-+ _dbus_string_init_const (&service_name, name);
-+ service = bus_registry_lookup (registry, &service_name);
-+ service_exists = service != NULL;
-+ }
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ if (!dbus_message_append_args (reply,
-+ DBUS_TYPE_BOOLEAN, &service_exists,
-+ 0))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, reply))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (reply)
-+ dbus_message_unref (reply);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_activate_service (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ dbus_uint32_t flags;
-+ const char *name;
-+ dbus_bool_t retval;
-+ BusActivation *activation;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ activation = bus_connection_get_activation (connection);
-+
-+ if (!dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_UINT32, &flags,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_verbose ("No memory to get arguments to StartServiceByName\n");
-+ return FALSE;
-+ }
-+
-+ retval = FALSE;
-+
-+ if (!bus_activation_activate_service (activation, connection, transaction, FALSE,
-+ message, name, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_verbose ("bus_activation_activate_service() failed\n");
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+send_ack_reply (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusMessage *reply;
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!bus_transaction_send_from_driver (transaction, connection, reply))
-+ {
-+ BUS_SET_OOM (error);
-+ dbus_message_unref (reply);
-+ return FALSE;
-+ }
-+
-+ dbus_message_unref (reply);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_add_match (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ BusMatchRule *rule;
-+ const char *text;
-+ DBusString str;
-+ BusMatchmaker *matchmaker;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ text = NULL;
-+ rule = NULL;
-+
-+ if (bus_connection_get_n_match_rules (connection) >=
-+ bus_context_get_max_match_rules_per_connection (bus_transaction_get_context (transaction)))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "Connection \"%s\" is not allowed to add more match rules "
-+ "(increase limits in configuration file if required)",
-+ bus_connection_is_active (connection) ?
-+ bus_connection_get_name (connection) :
-+ "(inactive)");
-+ goto failed;
-+ }
-+
-+ if (!dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &text,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _dbus_verbose ("No memory to get arguments to AddMatch\n");
-+ goto failed;
-+ }
-+
-+ _dbus_string_init_const (&str, text);
-+
-+ rule = bus_match_rule_parse (connection, &str, error);
-+ if (rule == NULL)
-+ goto failed;
-+
-+ matchmaker = bus_connection_get_matchmaker (connection);
-+
-+ if (!bus_matchmaker_add_rule (matchmaker, rule))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!send_ack_reply (connection, transaction,
-+ message, error))
-+ {
-+ bus_matchmaker_remove_rule (matchmaker, rule);
-+ goto failed;
-+ }
-+
-+ bus_match_rule_unref (rule);
-+
-+ return TRUE;
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (rule)
-+ bus_match_rule_unref (rule);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_remove_match (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ BusMatchRule *rule;
-+ const char *text;
-+ DBusString str;
-+ BusMatchmaker *matchmaker;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ text = NULL;
-+ rule = NULL;
-+
-+ if (!dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &text,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _dbus_verbose ("No memory to get arguments to RemoveMatch\n");
-+ goto failed;
-+ }
-+
-+ _dbus_string_init_const (&str, text);
-+
-+ rule = bus_match_rule_parse (connection, &str, error);
-+ if (rule == NULL)
-+ goto failed;
-+
-+ /* Send the ack before we remove the rule, since the ack is undone
-+ * on transaction cancel, but rule removal isn't.
-+ */
-+ if (!send_ack_reply (connection, transaction,
-+ message, error))
-+ goto failed;
-+
-+ matchmaker = bus_connection_get_matchmaker (connection);
-+
-+ if (!bus_matchmaker_remove_rule_by_value (matchmaker, rule, error))
-+ goto failed;
-+
-+ bus_match_rule_unref (rule);
-+
-+ return TRUE;
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (rule)
-+ bus_match_rule_unref (rule);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_get_service_owner (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ const char *text;
-+ const char *base_name;
-+ DBusString str;
-+ BusRegistry *registry;
-+ BusService *service;
-+ DBusMessage *reply;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ text = NULL;
-+ reply = NULL;
-+
-+ if (! dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &text,
-+ DBUS_TYPE_INVALID))
-+ goto failed;
-+
-+ _dbus_string_init_const (&str, text);
-+ service = bus_registry_lookup (registry, &str);
-+ if (service == NULL &&
-+ _dbus_string_equal_c_str (&str, DBUS_SERVICE_DBUS))
-+ {
-+ /* ORG_FREEDESKTOP_DBUS owns itself */
-+ base_name = DBUS_SERVICE_DBUS;
-+ }
-+ else if (service == NULL)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_NAME_HAS_NO_OWNER,
-+ "Could not get owner of name '%s': no such name", text);
-+ goto failed;
-+ }
-+ else
-+ {
-+ base_name = bus_connection_get_name (bus_service_get_primary_owners_connection (service));
-+ if (base_name == NULL)
-+ {
-+ /* FIXME - how is this error possible? */
-+ dbus_set_error (error,
-+ DBUS_ERROR_FAILED,
-+ "Could not determine unique name for '%s'", text);
-+ goto failed;
-+ }
-+ _dbus_assert (*base_name == ':');
-+ }
-+
-+ _dbus_assert (base_name != NULL);
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto oom;
-+
-+ if (! dbus_message_append_args (reply,
-+ DBUS_TYPE_STRING, &base_name,
-+ DBUS_TYPE_INVALID))
-+ goto oom;
-+
-+ if (! bus_transaction_send_from_driver (transaction, connection, reply))
-+ goto oom;
-+
-+ dbus_message_unref (reply);
-+
-+ return TRUE;
-+
-+ oom:
-+ BUS_SET_OOM (error);
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (reply)
-+ dbus_message_unref (reply);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_list_queued_owners (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ const char *text;
-+ DBusList *base_names;
-+ DBusList *link;
-+ DBusString str;
-+ BusRegistry *registry;
-+ BusService *service;
-+ DBusMessage *reply;
-+ DBusMessageIter iter, array_iter;
-+ char *dbus_service_name = DBUS_SERVICE_DBUS;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ base_names = NULL;
-+ text = NULL;
-+ reply = NULL;
-+
-+ if (! dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &text,
-+ DBUS_TYPE_INVALID))
-+ goto failed;
-+
-+ _dbus_string_init_const (&str, text);
-+ service = bus_registry_lookup (registry, &str);
-+ if (service == NULL &&
-+ _dbus_string_equal_c_str (&str, DBUS_SERVICE_DBUS))
-+ {
-+ /* ORG_FREEDESKTOP_DBUS owns itself */
-+ if (! _dbus_list_append (&base_names, dbus_service_name))
-+ goto oom;
-+ }
-+ else if (service == NULL)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_NAME_HAS_NO_OWNER,
-+ "Could not get owners of name '%s': no such name", text);
-+ goto failed;
-+ }
-+ else
-+ {
-+ if (!bus_service_list_queued_owners (service,
-+ &base_names,
-+ error))
-+ goto failed;
-+ }
-+
-+ _dbus_assert (base_names != NULL);
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto oom;
-+
-+ dbus_message_iter_init_append (reply, &iter);
-+ if (!dbus_message_iter_open_container (&iter,
-+ DBUS_TYPE_ARRAY,
-+ DBUS_TYPE_STRING_AS_STRING,
-+ &array_iter))
-+ goto oom;
-+
-+ link = _dbus_list_get_first_link (&base_names);
-+ while (link != NULL)
-+ {
-+ char *uname;
-+
-+ _dbus_assert (link->data != NULL);
-+ uname = (char *)link->data;
-+
-+ if (!dbus_message_iter_append_basic (&array_iter,
-+ DBUS_TYPE_STRING,
-+ &uname))
-+ goto oom;
-+
-+ link = _dbus_list_get_next_link (&base_names, link);
-+ }
-+
-+ if (! dbus_message_iter_close_container (&iter, &array_iter))
-+ goto oom;
-+
-+
-+ if (! bus_transaction_send_from_driver (transaction, connection, reply))
-+ goto oom;
-+
-+ dbus_message_unref (reply);
-+
-+ return TRUE;
-+
-+ oom:
-+ BUS_SET_OOM (error);
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (reply)
-+ dbus_message_unref (reply);
-+
-+ if (base_names)
-+ _dbus_list_clear (&base_names);
-+
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_get_connection_unix_user (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ const char *service;
-+ DBusString str;
-+ BusRegistry *registry;
-+ BusService *serv;
-+ DBusConnection *conn;
-+ DBusMessage *reply;
-+ unsigned long uid;
-+ dbus_uint32_t uid32;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ service = NULL;
-+ reply = NULL;
-+
-+ if (! dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &service,
-+ DBUS_TYPE_INVALID))
-+ goto failed;
-+
-+ _dbus_verbose ("asked for UID of connection %s\n", service);
-+
-+ _dbus_string_init_const (&str, service);
-+ serv = bus_registry_lookup (registry, &str);
-+ if (serv == NULL)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_NAME_HAS_NO_OWNER,
-+ "Could not get UID of name '%s': no such name", service);
-+ goto failed;
-+ }
-+
-+ conn = bus_service_get_primary_owners_connection (serv);
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto oom;
-+
-+ if (!dbus_connection_get_unix_user (conn, &uid))
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_FAILED,
-+ "Could not determine UID for '%s'", service);
-+ goto failed;
-+ }
-+
-+ uid32 = uid;
-+ if (! dbus_message_append_args (reply,
-+ DBUS_TYPE_UINT32, &uid32,
-+ DBUS_TYPE_INVALID))
-+ goto oom;
-+
-+ if (! bus_transaction_send_from_driver (transaction, connection, reply))
-+ goto oom;
-+
-+ dbus_message_unref (reply);
-+
-+ return TRUE;
-+
-+ oom:
-+ BUS_SET_OOM (error);
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (reply)
-+ dbus_message_unref (reply);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_get_connection_unix_process_id (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ const char *service;
-+ DBusString str;
-+ BusRegistry *registry;
-+ BusService *serv;
-+ DBusConnection *conn;
-+ DBusMessage *reply;
-+ unsigned long pid;
-+ dbus_uint32_t pid32;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ service = NULL;
-+ reply = NULL;
-+
-+ if (! dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &service,
-+ DBUS_TYPE_INVALID))
-+ goto failed;
-+
-+ _dbus_verbose ("asked for PID of connection %s\n", service);
-+
-+ _dbus_string_init_const (&str, service);
-+ serv = bus_registry_lookup (registry, &str);
-+ if (serv == NULL)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_NAME_HAS_NO_OWNER,
-+ "Could not get PID of name '%s': no such name", service);
-+ goto failed;
-+ }
-+
-+ conn = bus_service_get_primary_owners_connection (serv);
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto oom;
-+
-+ if (!dbus_connection_get_unix_process_id (conn, &pid))
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN,
-+ "Could not determine PID for '%s'", service);
-+ goto failed;
-+ }
-+
-+ pid32 = pid;
-+ if (! dbus_message_append_args (reply,
-+ DBUS_TYPE_UINT32, &pid32,
-+ DBUS_TYPE_INVALID))
-+ goto oom;
-+
-+ if (! bus_transaction_send_from_driver (transaction, connection, reply))
-+ goto oom;
-+
-+ dbus_message_unref (reply);
-+
-+ return TRUE;
-+
-+ oom:
-+ BUS_SET_OOM (error);
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (reply)
-+ dbus_message_unref (reply);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_get_connection_selinux_security_context (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ const char *service;
-+ DBusString str;
-+ BusRegistry *registry;
-+ BusService *serv;
-+ DBusConnection *conn;
-+ DBusMessage *reply;
-+ BusSELinuxID *context;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ service = NULL;
-+ reply = NULL;
-+
-+ if (! dbus_message_get_args (message, error,
-+ DBUS_TYPE_STRING, &service,
-+ DBUS_TYPE_INVALID))
-+ goto failed;
-+
-+ _dbus_verbose ("asked for security context of connection %s\n", service);
-+
-+ _dbus_string_init_const (&str, service);
-+ serv = bus_registry_lookup (registry, &str);
-+ if (serv == NULL)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_NAME_HAS_NO_OWNER,
-+ "Could not get security context of name '%s': no such name", service);
-+ goto failed;
-+ }
-+
-+ conn = bus_service_get_primary_owners_connection (serv);
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto oom;
-+
-+ context = bus_connection_get_selinux_id (conn);
-+ if (!context)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN,
-+ "Could not determine security context for '%s'", service);
-+ goto failed;
-+ }
-+
-+ if (! bus_selinux_append_context (reply, context, error))
-+ goto failed;
-+
-+ if (! bus_transaction_send_from_driver (transaction, connection, reply))
-+ goto oom;
-+
-+ dbus_message_unref (reply);
-+
-+ return TRUE;
-+
-+ oom:
-+ BUS_SET_OOM (error);
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (reply)
-+ dbus_message_unref (reply);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_reload_config (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ BusContext *context;
-+ DBusMessage *reply;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ reply = NULL;
-+
-+ context = bus_connection_get_context (connection);
-+ if (!bus_context_reload_config (context, error))
-+ goto failed;
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto oom;
-+
-+ if (! bus_transaction_send_from_driver (transaction, connection, reply))
-+ goto oom;
-+
-+ dbus_message_unref (reply);
-+ return TRUE;
-+
-+ oom:
-+ BUS_SET_OOM (error);
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (reply)
-+ dbus_message_unref (reply);
-+ return FALSE;
-+}
-+
-+/* For speed it might be useful to sort this in order of
-+ * frequency of use (but doesn't matter with only a few items
-+ * anyhow)
-+ */
-+struct
-+{
-+ const char *name;
-+ const char *in_args;
-+ const char *out_args;
-+ dbus_bool_t (* handler) (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error);
-+} message_handlers[] = {
-+ { "RequestName",
-+ DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING,
-+ DBUS_TYPE_UINT32_AS_STRING,
-+ bus_driver_handle_acquire_service },
-+ { "ReleaseName",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ DBUS_TYPE_UINT32_AS_STRING,
-+ bus_driver_handle_release_service },
-+ { "StartServiceByName",
-+ DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_UINT32_AS_STRING,
-+ DBUS_TYPE_UINT32_AS_STRING,
-+ bus_driver_handle_activate_service },
-+ { "Hello",
-+ "",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ bus_driver_handle_hello },
-+ { "NameHasOwner",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ DBUS_TYPE_BOOLEAN_AS_STRING,
-+ bus_driver_handle_service_exists },
-+ { "ListNames",
-+ "",
-+ DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING,
-+ bus_driver_handle_list_services },
-+ { "AddMatch",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ "",
-+ bus_driver_handle_add_match },
-+ { "RemoveMatch",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ "",
-+ bus_driver_handle_remove_match },
-+ { "GetNameOwner",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ DBUS_TYPE_STRING_AS_STRING,
-+ bus_driver_handle_get_service_owner },
-+ { "ListQueuedOwners",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING,
-+ bus_driver_handle_list_queued_owners },
-+ { "GetConnectionUnixUser",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ DBUS_TYPE_UINT32_AS_STRING,
-+ bus_driver_handle_get_connection_unix_user },
-+ { "GetConnectionUnixProcessID",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ DBUS_TYPE_UINT32_AS_STRING,
-+ bus_driver_handle_get_connection_unix_process_id },
-+ { "GetConnectionSELinuxSecurityContext",
-+ DBUS_TYPE_STRING_AS_STRING,
-+ DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING,
-+ bus_driver_handle_get_connection_selinux_security_context },
-+ { "ReloadConfig",
-+ "",
-+ "",
-+ bus_driver_handle_reload_config }
-+};
-+
-+static dbus_bool_t
-+write_args_for_direction (DBusString *xml,
-+ const char *signature,
-+ dbus_bool_t in)
-+{
-+ DBusTypeReader typereader;
-+ DBusString sigstr;
-+ int current_type;
-+
-+ _dbus_string_init_const (&sigstr, signature);
-+ _dbus_type_reader_init_types_only (&typereader, &sigstr, 0);
-+
-+ while ((current_type = _dbus_type_reader_get_current_type (&typereader)) != DBUS_TYPE_INVALID)
-+ {
-+ const DBusString *subsig;
-+ int start, len;
-+
-+ _dbus_type_reader_get_signature (&typereader, &subsig, &start, &len);
-+ if (!_dbus_string_append_printf (xml, " <arg direction=\"%s\" type=\"",
-+ in ? "in" : "out"))
-+ goto oom;
-+ if (!_dbus_string_append_len (xml,
-+ _dbus_string_get_const_data (subsig) + start,
-+ len))
-+ goto oom;
-+ if (!_dbus_string_append (xml, "\"/>\n"))
-+ goto oom;
-+
-+ _dbus_type_reader_next (&typereader);
-+ }
-+ return TRUE;
-+ oom:
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+bus_driver_handle_introspect (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ DBusString xml;
-+ DBusMessage *reply;
-+ const char *v_STRING;
-+ int i;
-+
-+ _dbus_verbose ("Introspect() on bus driver\n");
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ reply = NULL;
-+
-+ if (! dbus_message_get_args (message, error,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&xml))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append (&xml, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE))
-+ goto oom;
-+ if (!_dbus_string_append (&xml, "<node>\n"))
-+ goto oom;
-+ if (!_dbus_string_append_printf (&xml, " <interface name=\"%s\">\n", DBUS_INTERFACE_INTROSPECTABLE))
-+ goto oom;
-+ if (!_dbus_string_append (&xml, " <method name=\"Introspect\">\n"))
-+ goto oom;
-+ if (!_dbus_string_append_printf (&xml, " <arg name=\"data\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING))
-+ goto oom;
-+ if (!_dbus_string_append (&xml, " </method>\n"))
-+ goto oom;
-+ if (!_dbus_string_append (&xml, " </interface>\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " <interface name=\"%s\">\n",
-+ DBUS_INTERFACE_DBUS))
-+ goto oom;
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (message_handlers))
-+ {
-+
-+ if (!_dbus_string_append_printf (&xml, " <method name=\"%s\">\n",
-+ message_handlers[i].name))
-+ goto oom;
-+
-+ if (!write_args_for_direction (&xml, message_handlers[i].in_args, TRUE))
-+ goto oom;
-+
-+ if (!write_args_for_direction (&xml, message_handlers[i].out_args, FALSE))
-+ goto oom;
-+
-+ if (!_dbus_string_append (&xml, " </method>\n"))
-+ goto oom;
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_string_append_printf (&xml, " <signal name=\"NameOwnerChanged\">\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " </signal>\n"))
-+ goto oom;
-+
-+
-+
-+ if (!_dbus_string_append_printf (&xml, " <signal name=\"NameLost\">\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " </signal>\n"))
-+ goto oom;
-+
-+
-+
-+ if (!_dbus_string_append_printf (&xml, " <signal name=\"NameAcquired\">\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " <arg type=\"s\"/>\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append_printf (&xml, " </signal>\n"))
-+ goto oom;
-+
-+
-+
-+ if (!_dbus_string_append (&xml, " </interface>\n"))
-+ goto oom;
-+
-+ if (!_dbus_string_append (&xml, "</node>\n"))
-+ goto oom;
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto oom;
-+
-+ v_STRING = _dbus_string_get_const_data (&xml);
-+ if (! dbus_message_append_args (reply,
-+ DBUS_TYPE_STRING, &v_STRING,
-+ DBUS_TYPE_INVALID))
-+ goto oom;
-+
-+ if (! bus_transaction_send_from_driver (transaction, connection, reply))
-+ goto oom;
-+
-+ dbus_message_unref (reply);
-+ _dbus_string_free (&xml);
-+
-+ return TRUE;
-+
-+ oom:
-+ BUS_SET_OOM (error);
-+
-+ if (reply)
-+ dbus_message_unref (reply);
-+
-+ _dbus_string_free (&xml);
-+
-+ return FALSE;
-+}
-+
-+dbus_bool_t
-+bus_driver_handle_message (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error)
-+{
-+ const char *name, *sender, *interface;
-+ int i;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL)
-+ {
-+ _dbus_verbose ("Driver got a non-method-call message, ignoring\n");
-+ return TRUE; /* we just ignore this */
-+ }
-+
-+ if (dbus_message_is_method_call (message,
-+ DBUS_INTERFACE_INTROSPECTABLE,
-+ "Introspect"))
-+ return bus_driver_handle_introspect (connection, transaction, message, error);
-+
-+ interface = dbus_message_get_interface (message);
-+ if (interface == NULL)
-+ interface = DBUS_INTERFACE_DBUS;
-+
-+ _dbus_assert (dbus_message_get_member (message) != NULL);
-+
-+ name = dbus_message_get_member (message);
-+ sender = dbus_message_get_sender (message);
-+
-+ if (strcmp (interface,
-+ DBUS_INTERFACE_DBUS) != 0)
-+ {
-+ _dbus_verbose ("Driver got message to unknown interface \"%s\"\n",
-+ interface);
-+ goto unknown;
-+ }
-+
-+ _dbus_verbose ("Driver got a method call: %s\n",
-+ dbus_message_get_member (message));
-+
-+ /* security checks should have kept this from getting here */
-+ _dbus_assert (sender != NULL || strcmp (name, "Hello") == 0);
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (message_handlers))
-+ {
-+ if (strcmp (message_handlers[i].name, name) == 0)
-+ {
-+ _dbus_verbose ("Found driver handler for %s\n", name);
-+
-+ if (!dbus_message_has_signature (message, message_handlers[i].in_args))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ _dbus_verbose ("Call to %s has wrong args (%s, expected %s)\n",
-+ name, dbus_message_get_signature (message),
-+ message_handlers[i].in_args);
-+
-+ dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
-+ "Call to %s has wrong args (%s, expected %s)\n",
-+ name, dbus_message_get_signature (message),
-+ message_handlers[i].in_args);
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return FALSE;
-+ }
-+
-+ if ((* message_handlers[i].handler) (connection, transaction, message, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ _dbus_verbose ("Driver handler succeeded\n");
-+ return TRUE;
-+ }
-+ else
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_verbose ("Driver handler returned failure\n");
-+ return FALSE;
-+ }
-+ }
-+
-+ ++i;
-+ }
-+
-+ unknown:
-+ _dbus_verbose ("No driver handler for message \"%s\"\n",
-+ name);
-+
-+ dbus_set_error (error, DBUS_ERROR_UNKNOWN_METHOD,
-+ "%s does not understand message %s",
-+ DBUS_SERVICE_DBUS, name);
-+
-+ return FALSE;
-+}
-+
-+void
-+bus_driver_remove_connection (DBusConnection *connection)
-+{
-+ /* FIXME Does nothing for now, should unregister the connection
-+ * with the bus driver.
-+ */
-+}
-diff -Naur dbus-0.61.orig/bus/driver.h dbus-0.61/bus/driver.h
---- dbus-0.61.orig/bus/driver.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/driver.h 2004-09-24 12:43:35.000000000 +0200
-@@ -0,0 +1,49 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* driver.h Bus client (driver)
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_DRIVER_H
-+#define BUS_DRIVER_H
-+
-+#include <dbus/dbus.h>
-+#include "connection.h"
-+
-+void bus_driver_remove_connection (DBusConnection *connection);
-+dbus_bool_t bus_driver_handle_message (DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusMessage *message,
-+ DBusError *error);
-+dbus_bool_t bus_driver_send_service_lost (DBusConnection *connection,
-+ const char *service_name,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+dbus_bool_t bus_driver_send_service_acquired (DBusConnection *connection,
-+ const char *service_name,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+dbus_bool_t bus_driver_send_service_owner_changed (const char *service_name,
-+ const char *old_owner,
-+ const char *new_owner,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+
-+#endif /* BUS_DRIVER_H */
-diff -Naur dbus-0.61.orig/bus/expirelist.c dbus-0.61/bus/expirelist.c
---- dbus-0.61.orig/bus/expirelist.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/expirelist.c 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,314 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* expirelist.c List of items that expire
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "expirelist.h"
-+#include "test.h"
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-mainloop.h>
-+#include <dbus/dbus-timeout.h>
-+
-+static dbus_bool_t expire_timeout_handler (void *data);
-+
-+static void
-+call_timeout_callback (DBusTimeout *timeout,
-+ void *data)
-+{
-+ /* can return FALSE on OOM but we just let it fire again later */
-+ dbus_timeout_handle (timeout);
-+}
-+
-+BusExpireList*
-+bus_expire_list_new (DBusLoop *loop,
-+ int expire_after,
-+ BusExpireFunc expire_func,
-+ void *data)
-+{
-+ BusExpireList *list;
-+
-+ list = dbus_new0 (BusExpireList, 1);
-+ if (list == NULL)
-+ return NULL;
-+
-+ list->expire_func = expire_func;
-+ list->data = data;
-+ list->loop = loop;
-+ list->expire_after = expire_after;
-+
-+ list->timeout = _dbus_timeout_new (100, /* irrelevant */
-+ expire_timeout_handler,
-+ list, NULL);
-+ if (list->timeout == NULL)
-+ goto failed;
-+
-+ _dbus_timeout_set_enabled (list->timeout, FALSE);
-+
-+ if (!_dbus_loop_add_timeout (list->loop,
-+ list->timeout,
-+ call_timeout_callback, NULL, NULL))
-+ goto failed;
-+
-+ return list;
-+
-+ failed:
-+ if (list->timeout)
-+ _dbus_timeout_unref (list->timeout);
-+
-+ dbus_free (list);
-+
-+ return NULL;
-+}
-+
-+void
-+bus_expire_list_free (BusExpireList *list)
-+{
-+ _dbus_assert (list->items == NULL);
-+
-+ _dbus_loop_remove_timeout (list->loop, list->timeout,
-+ call_timeout_callback, NULL);
-+
-+ _dbus_timeout_unref (list->timeout);
-+
-+ dbus_free (list);
-+}
-+
-+void
-+bus_expire_timeout_set_interval (DBusTimeout *timeout,
-+ int next_interval)
-+{
-+ if (next_interval >= 0)
-+ {
-+ _dbus_timeout_set_interval (timeout,
-+ next_interval);
-+ _dbus_timeout_set_enabled (timeout, TRUE);
-+
-+ _dbus_verbose ("Enabled expire timeout with interval %d\n",
-+ next_interval);
-+ }
-+ else if (dbus_timeout_get_enabled (timeout))
-+ {
-+ _dbus_timeout_set_enabled (timeout, FALSE);
-+
-+ _dbus_verbose ("Disabled expire timeout\n");
-+ }
-+ else
-+ _dbus_verbose ("No need to disable expire timeout\n");
-+}
-+
-+static int
-+do_expiration_with_current_time (BusExpireList *list,
-+ long tv_sec,
-+ long tv_usec)
-+{
-+ DBusList *link;
-+ int next_interval;
-+
-+ next_interval = -1;
-+
-+ link = _dbus_list_get_first_link (&list->items);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&list->items, link);
-+ double elapsed;
-+ BusExpireItem *item;
-+
-+ item = link->data;
-+
-+ elapsed = ELAPSED_MILLISECONDS_SINCE (item->added_tv_sec,
-+ item->added_tv_usec,
-+ tv_sec, tv_usec);
-+
-+ if (elapsed >= (double) list->expire_after)
-+ {
-+ _dbus_verbose ("Expiring an item %p\n", item);
-+
-+ /* If the expire function fails, we just end up expiring
-+ * this item next time we walk through the list. This would
-+ * be an indeterminate time normally, so we set up the
-+ * next_interval to be "shortly" (just enough to avoid
-+ * a busy loop)
-+ */
-+ if (!(* list->expire_func) (list, link, list->data))
-+ {
-+ next_interval = _dbus_get_oom_wait ();
-+ break;
-+ }
-+ }
-+ else
-+ {
-+ /* We can end the loop, since the connections are in oldest-first order */
-+ next_interval = ((double)list->expire_after) - elapsed;
-+ _dbus_verbose ("Item %p expires in %d milliseconds\n",
-+ item, next_interval);
-+
-+ break;
-+ }
-+
-+ link = next;
-+ }
-+
-+ return next_interval;
-+}
-+
-+static void
-+bus_expirelist_expire (BusExpireList *list)
-+{
-+ int next_interval;
-+
-+ next_interval = -1;
-+
-+ if (list->items != NULL)
-+ {
-+ long tv_sec, tv_usec;
-+
-+ _dbus_get_current_time (&tv_sec, &tv_usec);
-+
-+ next_interval = do_expiration_with_current_time (list, tv_sec, tv_usec);
-+ }
-+
-+ bus_expire_timeout_set_interval (list->timeout, next_interval);
-+}
-+
-+static dbus_bool_t
-+expire_timeout_handler (void *data)
-+{
-+ BusExpireList *list = data;
-+
-+ _dbus_verbose ("Running %s\n", _DBUS_FUNCTION_NAME);
-+
-+ /* note that this may remove the timeout */
-+ bus_expirelist_expire (list);
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+typedef struct
-+{
-+ BusExpireItem item;
-+ int expire_count;
-+} TestExpireItem;
-+
-+static dbus_bool_t
-+test_expire_func (BusExpireList *list,
-+ DBusList *link,
-+ void *data)
-+{
-+ TestExpireItem *t;
-+
-+ t = (TestExpireItem*) link->data;
-+
-+ t->expire_count += 1;
-+
-+ return TRUE;
-+}
-+
-+static void
-+time_add_milliseconds (long *tv_sec,
-+ long *tv_usec,
-+ int milliseconds)
-+{
-+ *tv_sec = *tv_sec + milliseconds / 1000;
-+ *tv_usec = *tv_usec + milliseconds * 1000;
-+ if (*tv_usec >= 1000000)
-+ {
-+ *tv_usec -= 1000000;
-+ *tv_sec += 1;
-+ }
-+}
-+
-+dbus_bool_t
-+bus_expire_list_test (const DBusString *test_data_dir)
-+{
-+ DBusLoop *loop;
-+ BusExpireList *list;
-+ long tv_sec, tv_usec;
-+ long tv_sec_not_expired, tv_usec_not_expired;
-+ long tv_sec_expired, tv_usec_expired;
-+ long tv_sec_past, tv_usec_past;
-+ TestExpireItem *item;
-+ int next_interval;
-+
-+ loop = _dbus_loop_new ();
-+ _dbus_assert (loop != NULL);
-+
-+#define EXPIRE_AFTER 100
-+
-+ list = bus_expire_list_new (loop, EXPIRE_AFTER,
-+ test_expire_func, NULL);
-+ _dbus_assert (list != NULL);
-+
-+ _dbus_get_current_time (&tv_sec, &tv_usec);
-+
-+ tv_sec_not_expired = tv_sec;
-+ tv_usec_not_expired = tv_usec;
-+ time_add_milliseconds (&tv_sec_not_expired,
-+ &tv_usec_not_expired, EXPIRE_AFTER - 1);
-+
-+ tv_sec_expired = tv_sec;
-+ tv_usec_expired = tv_usec;
-+ time_add_milliseconds (&tv_sec_expired,
-+ &tv_usec_expired, EXPIRE_AFTER);
-+
-+
-+ tv_sec_past = tv_sec - 1;
-+ tv_usec_past = tv_usec;
-+
-+ item = dbus_new0 (TestExpireItem, 1);
-+
-+ item->item.added_tv_sec = tv_sec;
-+ item->item.added_tv_usec = tv_usec;
-+ if (!_dbus_list_append (&list->items, item))
-+ _dbus_assert_not_reached ("out of memory");
-+
-+ next_interval =
-+ do_expiration_with_current_time (list, tv_sec_not_expired,
-+ tv_usec_not_expired);
-+ _dbus_assert (item->expire_count == 0);
-+ _dbus_verbose ("next_interval = %d\n", next_interval);
-+ _dbus_assert (next_interval == 1);
-+
-+ next_interval =
-+ do_expiration_with_current_time (list, tv_sec_expired,
-+ tv_usec_expired);
-+ _dbus_assert (item->expire_count == 1);
-+ _dbus_verbose ("next_interval = %d\n", next_interval);
-+ _dbus_assert (next_interval == -1);
-+
-+ next_interval =
-+ do_expiration_with_current_time (list, tv_sec_past,
-+ tv_usec_past);
-+ _dbus_assert (item->expire_count == 1);
-+ _dbus_verbose ("next_interval = %d\n", next_interval);
-+ _dbus_assert (next_interval == 1000 + EXPIRE_AFTER);
-+
-+ _dbus_list_clear (&list->items);
-+ dbus_free (item);
-+
-+ bus_expire_list_free (list);
-+ _dbus_loop_unref (loop);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/bus/expirelist.h dbus-0.61/bus/expirelist.h
---- dbus-0.61.orig/bus/expirelist.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/expirelist.h 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,69 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* expirelist.h List of stuff that expires
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_EXPIRE_LIST_H
-+#define BUS_EXPIRE_LIST_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-mainloop.h>
-+
-+typedef struct BusExpireList BusExpireList;
-+typedef struct BusExpireItem BusExpireItem;
-+
-+typedef dbus_bool_t (* BusExpireFunc) (BusExpireList *list,
-+ DBusList *link,
-+ void *data);
-+
-+struct BusExpireList
-+{
-+ DBusList *items; /**< List of BusExpireItem */
-+ DBusTimeout *timeout;
-+ DBusLoop *loop;
-+ BusExpireFunc expire_func;
-+ void *data;
-+ int expire_after; /**< Expire after milliseconds (thousandths) */
-+};
-+
-+/* embed this in a child expire item struct */
-+struct BusExpireItem
-+{
-+ long added_tv_sec; /**< Time we were added (seconds component) */
-+ long added_tv_usec; /**< Time we were added (microsec component) */
-+};
-+
-+BusExpireList* bus_expire_list_new (DBusLoop *loop,
-+ int expire_after,
-+ BusExpireFunc expire_func,
-+ void *data);
-+void bus_expire_list_free (BusExpireList *list);
-+
-+#define ELAPSED_MILLISECONDS_SINCE(orig_tv_sec, orig_tv_usec, \
-+ now_tv_sec, now_tv_usec) \
-+ (((double) (now_tv_sec) - (double) (orig_tv_sec)) * 1000.0 + \
-+ ((double) (now_tv_usec) - (double) (orig_tv_usec)) / 1000.0)
-+
-+void bus_expire_timeout_set_interval (DBusTimeout *timeout,
-+ int next_interval);
-+
-+#endif /* BUS_EXPIRE_LIST_H */
-diff -Naur dbus-0.61.orig/bus/main.c dbus-0.61/bus/main.c
---- dbus-0.61.orig/bus/main.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/main.c 2005-06-15 04:31:38.000000000 +0200
-@@ -0,0 +1,419 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* main.c main() for message bus
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "bus.h"
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-watch.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <signal.h>
-+#include <errno.h>
-+#include "selinux.h"
-+
-+static BusContext *context;
-+
-+static int reload_pipe[2];
-+#define RELOAD_READ_END 0
-+#define RELOAD_WRITE_END 1
-+
-+
-+static void
-+signal_handler (int sig)
-+{
-+ DBusString str;
-+
-+ switch (sig)
-+ {
-+#ifdef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX
-+ case SIGIO:
-+ /* explicit fall-through */
-+#endif /* DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX */
-+ case SIGHUP:
-+ _dbus_string_init_const (&str, "foo");
-+ if (!_dbus_write (reload_pipe[RELOAD_WRITE_END], &str, 0, 1))
-+ {
-+ _dbus_warn ("Unable to write to reload pipe.\n");
-+ exit (1);
-+ }
-+ break;
-+
-+ case SIGTERM:
-+ _dbus_loop_quit (bus_context_get_loop (context));
-+ break;
-+ }
-+}
-+
-+static void
-+usage (void)
-+{
-+ fprintf (stderr, DAEMON_NAME " [--version] [--session] [--system] [--config-file=FILE] [--print-address[=DESCRIPTOR]] [--print-pid[=DESCRIPTOR]] [--fork] [--nofork]\n");
-+ exit (1);
-+}
-+
-+static void
-+version (void)
-+{
-+ printf ("D-BUS Message Bus Daemon %s\n"
-+ "Copyright (C) 2002, 2003 Red Hat, Inc., CodeFactory AB, and others\n"
-+ "This is free software; see the source for copying conditions.\n"
-+ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
-+ VERSION);
-+ exit (0);
-+}
-+
-+static void
-+check_two_config_files (const DBusString *config_file,
-+ const char *extra_arg)
-+{
-+ if (_dbus_string_get_length (config_file) > 0)
-+ {
-+ fprintf (stderr, "--%s specified but configuration file %s already requested\n",
-+ extra_arg, _dbus_string_get_const_data (config_file));
-+ exit (1);
-+ }
-+}
-+
-+static void
-+check_two_addr_descriptors (const DBusString *addr_fd,
-+ const char *extra_arg)
-+{
-+ if (_dbus_string_get_length (addr_fd) > 0)
-+ {
-+ fprintf (stderr, "--%s specified but printing address to %s already requested\n",
-+ extra_arg, _dbus_string_get_const_data (addr_fd));
-+ exit (1);
-+ }
-+}
-+
-+static void
-+check_two_pid_descriptors (const DBusString *pid_fd,
-+ const char *extra_arg)
-+{
-+ if (_dbus_string_get_length (pid_fd) > 0)
-+ {
-+ fprintf (stderr, "--%s specified but printing pid to %s already requested\n",
-+ extra_arg, _dbus_string_get_const_data (pid_fd));
-+ exit (1);
-+ }
-+}
-+
-+static dbus_bool_t
-+handle_reload_watch (DBusWatch *watch,
-+ unsigned int flags,
-+ void *data)
-+{
-+ DBusError error;
-+ DBusString str;
-+ _dbus_string_init (&str);
-+ if (_dbus_read (reload_pipe[RELOAD_READ_END], &str, 1) != 1)
-+ {
-+ _dbus_warn ("Couldn't read from reload pipe.\n");
-+ exit (1);
-+ }
-+ _dbus_string_free (&str);
-+
-+ dbus_error_init (&error);
-+ if (! bus_context_reload_config (context, &error))
-+ {
-+ _dbus_warn ("Unable to reload configuration: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+reload_watch_callback (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data)
-+{
-+ return dbus_watch_handle (watch, condition);
-+}
-+
-+static void
-+setup_reload_pipe (DBusLoop *loop)
-+{
-+ DBusError error;
-+ DBusWatch *watch;
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_full_duplex_pipe (&reload_pipe[0], &reload_pipe[1],
-+ TRUE, &error))
-+ {
-+ _dbus_warn ("Unable to create reload pipe: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ watch = _dbus_watch_new (reload_pipe[RELOAD_READ_END],
-+ DBUS_WATCH_READABLE, TRUE,
-+ handle_reload_watch, NULL, NULL);
-+
-+ if (watch == NULL)
-+ {
-+ _dbus_warn ("Unable to create reload watch: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ if (!_dbus_loop_add_watch (loop, watch, reload_watch_callback,
-+ NULL, NULL))
-+ {
-+ _dbus_warn ("Unable to add reload watch to main loop: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusError error;
-+ DBusString config_file;
-+ DBusString addr_fd;
-+ DBusString pid_fd;
-+ const char *prev_arg;
-+ int print_addr_fd;
-+ int print_pid_fd;
-+ int i;
-+ dbus_bool_t print_address;
-+ dbus_bool_t print_pid;
-+ int force_fork;
-+
-+ if (!_dbus_string_init (&config_file))
-+ return 1;
-+
-+ if (!_dbus_string_init (&addr_fd))
-+ return 1;
-+
-+ if (!_dbus_string_init (&pid_fd))
-+ return 1;
-+
-+ print_address = FALSE;
-+ print_pid = FALSE;
-+ force_fork = FORK_FOLLOW_CONFIG_FILE;
-+
-+ prev_arg = NULL;
-+ i = 1;
-+ while (i < argc)
-+ {
-+ const char *arg = argv[i];
-+
-+ if (strcmp (arg, "--help") == 0 ||
-+ strcmp (arg, "-h") == 0 ||
-+ strcmp (arg, "-?") == 0)
-+ usage ();
-+ else if (strcmp (arg, "--version") == 0)
-+ version ();
-+ else if (strcmp (arg, "--nofork") == 0)
-+ force_fork = FORK_NEVER;
-+ else if (strcmp (arg, "--fork") == 0)
-+ force_fork = FORK_ALWAYS;
-+ else if (strcmp (arg, "--system") == 0)
-+ {
-+ check_two_config_files (&config_file, "system");
-+
-+ if (!_dbus_string_append (&config_file, DBUS_SYSTEM_CONFIG_FILE))
-+ exit (1);
-+ }
-+ else if (strcmp (arg, "--session") == 0)
-+ {
-+ check_two_config_files (&config_file, "session");
-+
-+ if (!_dbus_string_append (&config_file, DBUS_SESSION_CONFIG_FILE))
-+ exit (1);
-+ }
-+ else if (strstr (arg, "--config-file=") == arg)
-+ {
-+ const char *file;
-+
-+ check_two_config_files (&config_file, "config-file");
-+
-+ file = strchr (arg, '=');
-+ ++file;
-+
-+ if (!_dbus_string_append (&config_file, file))
-+ exit (1);
-+ }
-+ else if (prev_arg &&
-+ strcmp (prev_arg, "--config-file") == 0)
-+ {
-+ check_two_config_files (&config_file, "config-file");
-+
-+ if (!_dbus_string_append (&config_file, arg))
-+ exit (1);
-+ }
-+ else if (strcmp (arg, "--config-file") == 0)
-+ ; /* wait for next arg */
-+ else if (strstr (arg, "--print-address=") == arg)
-+ {
-+ const char *desc;
-+
-+ check_two_addr_descriptors (&addr_fd, "print-address");
-+
-+ desc = strchr (arg, '=');
-+ ++desc;
-+
-+ if (!_dbus_string_append (&addr_fd, desc))
-+ exit (1);
-+
-+ print_address = TRUE;
-+ }
-+ else if (prev_arg &&
-+ strcmp (prev_arg, "--print-address") == 0)
-+ {
-+ check_two_addr_descriptors (&addr_fd, "print-address");
-+
-+ if (!_dbus_string_append (&addr_fd, arg))
-+ exit (1);
-+
-+ print_address = TRUE;
-+ }
-+ else if (strcmp (arg, "--print-address") == 0)
-+ print_address = TRUE; /* and we'll get the next arg if appropriate */
-+ else if (strstr (arg, "--print-pid=") == arg)
-+ {
-+ const char *desc;
-+
-+ check_two_pid_descriptors (&pid_fd, "print-pid");
-+
-+ desc = strchr (arg, '=');
-+ ++desc;
-+
-+ if (!_dbus_string_append (&pid_fd, desc))
-+ exit (1);
-+
-+ print_pid = TRUE;
-+ }
-+ else if (prev_arg &&
-+ strcmp (prev_arg, "--print-pid") == 0)
-+ {
-+ check_two_pid_descriptors (&pid_fd, "print-pid");
-+
-+ if (!_dbus_string_append (&pid_fd, arg))
-+ exit (1);
-+
-+ print_pid = TRUE;
-+ }
-+ else if (strcmp (arg, "--print-pid") == 0)
-+ print_pid = TRUE; /* and we'll get the next arg if appropriate */
-+ else
-+ usage ();
-+
-+ prev_arg = arg;
-+
-+ ++i;
-+ }
-+
-+ if (_dbus_string_get_length (&config_file) == 0)
-+ {
-+ fprintf (stderr, "No configuration file specified.\n");
-+ usage ();
-+ }
-+
-+ print_addr_fd = -1;
-+ if (print_address)
-+ {
-+ print_addr_fd = 1; /* stdout */
-+ if (_dbus_string_get_length (&addr_fd) > 0)
-+ {
-+ long val;
-+ int end;
-+ if (!_dbus_string_parse_int (&addr_fd, 0, &val, &end) ||
-+ end != _dbus_string_get_length (&addr_fd) ||
-+ val < 0 || val > _DBUS_INT_MAX)
-+ {
-+ fprintf (stderr, "Invalid file descriptor: \"%s\"\n",
-+ _dbus_string_get_const_data (&addr_fd));
-+ exit (1);
-+ }
-+
-+ print_addr_fd = val;
-+ }
-+ }
-+ _dbus_string_free (&addr_fd);
-+
-+ print_pid_fd = -1;
-+ if (print_pid)
-+ {
-+ print_pid_fd = 1; /* stdout */
-+ if (_dbus_string_get_length (&pid_fd) > 0)
-+ {
-+ long val;
-+ int end;
-+ if (!_dbus_string_parse_int (&pid_fd, 0, &val, &end) ||
-+ end != _dbus_string_get_length (&pid_fd) ||
-+ val < 0 || val > _DBUS_INT_MAX)
-+ {
-+ fprintf (stderr, "Invalid file descriptor: \"%s\"\n",
-+ _dbus_string_get_const_data (&pid_fd));
-+ exit (1);
-+ }
-+
-+ print_pid_fd = val;
-+ }
-+ }
-+ _dbus_string_free (&pid_fd);
-+
-+ if (!bus_selinux_pre_init ())
-+ {
-+ _dbus_warn ("SELinux pre-initialization failed\n");
-+ exit (1);
-+ }
-+
-+ dbus_error_init (&error);
-+ context = bus_context_new (&config_file, force_fork,
-+ print_addr_fd, print_pid_fd,
-+ &error);
-+ _dbus_string_free (&config_file);
-+ if (context == NULL)
-+ {
-+ _dbus_warn ("Failed to start message bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ setup_reload_pipe (bus_context_get_loop (context));
-+
-+ _dbus_set_signal_handler (SIGHUP, signal_handler);
-+ _dbus_set_signal_handler (SIGTERM, signal_handler);
-+#ifdef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX
-+ _dbus_set_signal_handler (SIGIO, signal_handler);
-+#endif /* DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX */
-+
-+ _dbus_verbose ("We are on D-Bus...\n");
-+ _dbus_loop_run (bus_context_get_loop (context));
-+
-+ bus_context_shutdown (context);
-+ bus_context_unref (context);
-+ bus_selinux_shutdown ();
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/bus/messagebus.in dbus-0.61/bus/messagebus.in
---- dbus-0.61.orig/bus/messagebus.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/messagebus.in 2005-01-18 23:20:38.000000000 +0100
-@@ -0,0 +1,78 @@
-+#!/bin/sh
-+#
-+# messagebus: The D-BUS systemwide message bus
-+#
-+# chkconfig: 345 97 03
-+# description: This is a daemon which broadcasts notifications of system events \
-+# and other messages. See http://www.freedesktop.org/software/dbus/
-+#
-+# processname: dbus-daemon
-+# pidfile: @DBUS_SYSTEM_PID_FILE@
-+#
-+
-+# Sanity checks.
-+[ -x @EXPANDED_BINDIR@/dbus-daemon ] || exit 0
-+
-+# Source function library.
-+. @EXPANDED_SYSCONFDIR@/rc.d/init.d/functions
-+
-+# so we can rearrange this easily
-+processname=dbus-daemon
-+servicename=messagebus
-+
-+RETVAL=0
-+
-+start() {
-+ echo -n $"Starting system message bus: "
-+ daemon --check $servicename $processname --system
-+ RETVAL=$?
-+ echo
-+ [ $RETVAL -eq 0 ] && touch @EXPANDED_LOCALSTATEDIR@/lock/subsys/$servicename
-+}
-+
-+stop() {
-+ echo -n $"Stopping system message bus: "
-+
-+ ## we don't want to kill all the per-user $processname, we want
-+ ## to use the pid file *only*; because we use the fake nonexistent
-+ ## program name "$servicename" that should be safe-ish
-+ killproc $servicename -TERM
-+ RETVAL=$?
-+ echo
-+ if [ $RETVAL -eq 0 ]; then
-+ rm -f @EXPANDED_LOCALSTATEDIR@/lock/subsys/$servicename
-+ rm -f @DBUS_SYSTEM_PID_FILE@
-+ fi
-+}
-+
-+# See how we were called.
-+case "$1" in
-+ start)
-+ start
-+ ;;
-+ stop)
-+ stop
-+ ;;
-+ status)
-+ status $processname
-+ RETVAL=$?
-+ ;;
-+ restart)
-+ stop
-+ start
-+ ;;
-+ condrestart)
-+ if [ -f @EXPANDED_LOCALSTATEDIR@/lock/subsys/$servicename ]; then
-+ stop
-+ start
-+ fi
-+ ;;
-+ reload)
-+ echo "Message bus can't reload its configuration, you have to restart it"
-+ RETVAL=$?
-+ ;;
-+ *)
-+ echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
-+ ;;
-+esac
-+exit $RETVAL
-diff -Naur dbus-0.61.orig/bus/policy.c dbus-0.61/bus/policy.c
---- dbus-0.61.orig/bus/policy.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/policy.c 2005-08-29 22:19:19.000000000 +0200
-@@ -0,0 +1,1257 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* policy.c Bus security policy
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "policy.h"
-+#include "services.h"
-+#include "test.h"
-+#include "utils.h"
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-hash.h>
-+#include <dbus/dbus-internals.h>
-+
-+BusPolicyRule*
-+bus_policy_rule_new (BusPolicyRuleType type,
-+ dbus_bool_t allow)
-+{
-+ BusPolicyRule *rule;
-+
-+ rule = dbus_new0 (BusPolicyRule, 1);
-+ if (rule == NULL)
-+ return NULL;
-+
-+ rule->type = type;
-+ rule->refcount = 1;
-+ rule->allow = allow;
-+
-+ switch (rule->type)
-+ {
-+ case BUS_POLICY_RULE_USER:
-+ rule->d.user.uid = DBUS_UID_UNSET;
-+ break;
-+ case BUS_POLICY_RULE_GROUP:
-+ rule->d.group.gid = DBUS_GID_UNSET;
-+ break;
-+ case BUS_POLICY_RULE_SEND:
-+ rule->d.send.message_type = DBUS_MESSAGE_TYPE_INVALID;
-+
-+ /* allow rules default to TRUE (only requested replies allowed)
-+ * deny rules default to FALSE (only unrequested replies denied)
-+ */
-+ rule->d.send.requested_reply = rule->allow;
-+ break;
-+ case BUS_POLICY_RULE_RECEIVE:
-+ rule->d.receive.message_type = DBUS_MESSAGE_TYPE_INVALID;
-+ /* allow rules default to TRUE (only requested replies allowed)
-+ * deny rules default to FALSE (only unrequested replies denied)
-+ */
-+ rule->d.receive.requested_reply = rule->allow;
-+ break;
-+ case BUS_POLICY_RULE_OWN:
-+ break;
-+ }
-+
-+ return rule;
-+}
-+
-+BusPolicyRule *
-+bus_policy_rule_ref (BusPolicyRule *rule)
-+{
-+ _dbus_assert (rule->refcount > 0);
-+
-+ rule->refcount += 1;
-+
-+ return rule;
-+}
-+
-+void
-+bus_policy_rule_unref (BusPolicyRule *rule)
-+{
-+ _dbus_assert (rule->refcount > 0);
-+
-+ rule->refcount -= 1;
-+
-+ if (rule->refcount == 0)
-+ {
-+ switch (rule->type)
-+ {
-+ case BUS_POLICY_RULE_SEND:
-+ dbus_free (rule->d.send.path);
-+ dbus_free (rule->d.send.interface);
-+ dbus_free (rule->d.send.member);
-+ dbus_free (rule->d.send.error);
-+ dbus_free (rule->d.send.destination);
-+ break;
-+ case BUS_POLICY_RULE_RECEIVE:
-+ dbus_free (rule->d.receive.path);
-+ dbus_free (rule->d.receive.interface);
-+ dbus_free (rule->d.receive.member);
-+ dbus_free (rule->d.receive.error);
-+ dbus_free (rule->d.receive.origin);
-+ break;
-+ case BUS_POLICY_RULE_OWN:
-+ dbus_free (rule->d.own.service_name);
-+ break;
-+ case BUS_POLICY_RULE_USER:
-+ break;
-+ case BUS_POLICY_RULE_GROUP:
-+ break;
-+ }
-+
-+ dbus_free (rule);
-+ }
-+}
-+
-+struct BusPolicy
-+{
-+ int refcount;
-+
-+ DBusList *default_rules; /**< Default policy rules */
-+ DBusList *mandatory_rules; /**< Mandatory policy rules */
-+ DBusHashTable *rules_by_uid; /**< per-UID policy rules */
-+ DBusHashTable *rules_by_gid; /**< per-GID policy rules */
-+ DBusList *at_console_true_rules; /**< console user policy rules where at_console="true"*/
-+ DBusList *at_console_false_rules; /**< console user policy rules where at_console="false"*/
-+};
-+
-+static void
-+free_rule_func (void *data,
-+ void *user_data)
-+{
-+ BusPolicyRule *rule = data;
-+
-+ bus_policy_rule_unref (rule);
-+}
-+
-+static void
-+free_rule_list_func (void *data)
-+{
-+ DBusList **list = data;
-+
-+ if (list == NULL) /* DBusHashTable is on crack */
-+ return;
-+
-+ _dbus_list_foreach (list, free_rule_func, NULL);
-+
-+ _dbus_list_clear (list);
-+
-+ dbus_free (list);
-+}
-+
-+BusPolicy*
-+bus_policy_new (void)
-+{
-+ BusPolicy *policy;
-+
-+ policy = dbus_new0 (BusPolicy, 1);
-+ if (policy == NULL)
-+ return NULL;
-+
-+ policy->refcount = 1;
-+
-+ policy->rules_by_uid = _dbus_hash_table_new (DBUS_HASH_ULONG,
-+ NULL,
-+ free_rule_list_func);
-+ if (policy->rules_by_uid == NULL)
-+ goto failed;
-+
-+ policy->rules_by_gid = _dbus_hash_table_new (DBUS_HASH_ULONG,
-+ NULL,
-+ free_rule_list_func);
-+ if (policy->rules_by_gid == NULL)
-+ goto failed;
-+
-+ return policy;
-+
-+ failed:
-+ bus_policy_unref (policy);
-+ return NULL;
-+}
-+
-+BusPolicy *
-+bus_policy_ref (BusPolicy *policy)
-+{
-+ _dbus_assert (policy->refcount > 0);
-+
-+ policy->refcount += 1;
-+
-+ return policy;
-+}
-+
-+void
-+bus_policy_unref (BusPolicy *policy)
-+{
-+ _dbus_assert (policy->refcount > 0);
-+
-+ policy->refcount -= 1;
-+
-+ if (policy->refcount == 0)
-+ {
-+ _dbus_list_foreach (&policy->default_rules, free_rule_func, NULL);
-+ _dbus_list_clear (&policy->default_rules);
-+
-+ _dbus_list_foreach (&policy->mandatory_rules, free_rule_func, NULL);
-+ _dbus_list_clear (&policy->mandatory_rules);
-+
-+ _dbus_list_foreach (&policy->at_console_true_rules, free_rule_func, NULL);
-+ _dbus_list_clear (&policy->at_console_true_rules);
-+
-+ _dbus_list_foreach (&policy->at_console_false_rules, free_rule_func, NULL);
-+ _dbus_list_clear (&policy->at_console_false_rules);
-+
-+ if (policy->rules_by_uid)
-+ {
-+ _dbus_hash_table_unref (policy->rules_by_uid);
-+ policy->rules_by_uid = NULL;
-+ }
-+
-+ if (policy->rules_by_gid)
-+ {
-+ _dbus_hash_table_unref (policy->rules_by_gid);
-+ policy->rules_by_gid = NULL;
-+ }
-+
-+ dbus_free (policy);
-+ }
-+}
-+
-+static dbus_bool_t
-+add_list_to_client (DBusList **list,
-+ BusClientPolicy *client)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (list);
-+ while (link != NULL)
-+ {
-+ BusPolicyRule *rule = link->data;
-+ link = _dbus_list_get_next_link (list, link);
-+
-+ switch (rule->type)
-+ {
-+ case BUS_POLICY_RULE_USER:
-+ case BUS_POLICY_RULE_GROUP:
-+ /* These aren't per-connection policies */
-+ break;
-+
-+ case BUS_POLICY_RULE_OWN:
-+ case BUS_POLICY_RULE_SEND:
-+ case BUS_POLICY_RULE_RECEIVE:
-+ /* These are per-connection */
-+ if (!bus_client_policy_append_rule (client, rule))
-+ return FALSE;
-+ break;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+BusClientPolicy*
-+bus_policy_create_client_policy (BusPolicy *policy,
-+ DBusConnection *connection,
-+ DBusError *error)
-+{
-+ BusClientPolicy *client;
-+ dbus_uid_t uid;
-+ dbus_bool_t at_console;
-+
-+ _dbus_assert (dbus_connection_get_is_authenticated (connection));
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ client = bus_client_policy_new ();
-+ if (client == NULL)
-+ goto nomem;
-+
-+ if (!add_list_to_client (&policy->default_rules,
-+ client))
-+ goto nomem;
-+
-+ /* we avoid the overhead of looking up user's groups
-+ * if we don't have any group rules anyway
-+ */
-+ if (_dbus_hash_table_get_n_entries (policy->rules_by_gid) > 0)
-+ {
-+ unsigned long *groups;
-+ int n_groups;
-+ int i;
-+
-+ if (!bus_connection_get_groups (connection, &groups, &n_groups, error))
-+ goto failed;
-+
-+ i = 0;
-+ while (i < n_groups)
-+ {
-+ DBusList **list;
-+
-+ list = _dbus_hash_table_lookup_ulong (policy->rules_by_gid,
-+ groups[i]);
-+
-+ if (list != NULL)
-+ {
-+ if (!add_list_to_client (list, client))
-+ {
-+ dbus_free (groups);
-+ goto nomem;
-+ }
-+ }
-+
-+ ++i;
-+ }
-+
-+ dbus_free (groups);
-+ }
-+
-+ if (!dbus_connection_get_unix_user (connection, &uid))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "No user ID known for connection, cannot determine security policy\n");
-+ goto failed;
-+ }
-+
-+ if (_dbus_hash_table_get_n_entries (policy->rules_by_uid) > 0)
-+ {
-+ DBusList **list;
-+
-+ list = _dbus_hash_table_lookup_ulong (policy->rules_by_uid,
-+ uid);
-+
-+ if (list != NULL)
-+ {
-+ if (!add_list_to_client (list, client))
-+ goto nomem;
-+ }
-+ }
-+
-+ /* Add console rules */
-+ at_console = _dbus_is_console_user (uid, error);
-+
-+ if (at_console)
-+ {
-+ if (!add_list_to_client (&policy->at_console_true_rules, client))
-+ goto nomem;
-+ }
-+ else if (dbus_error_is_set (error) == TRUE)
-+ {
-+ goto failed;
-+ }
-+ else if (!add_list_to_client (&policy->at_console_false_rules, client))
-+ {
-+ goto nomem;
-+ }
-+
-+ if (!add_list_to_client (&policy->mandatory_rules,
-+ client))
-+ goto nomem;
-+
-+ bus_client_policy_optimize (client);
-+
-+ return client;
-+
-+ nomem:
-+ BUS_SET_OOM (error);
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (client)
-+ bus_client_policy_unref (client);
-+ return NULL;
-+}
-+
-+static dbus_bool_t
-+list_allows_user (dbus_bool_t def,
-+ DBusList **list,
-+ unsigned long uid,
-+ const unsigned long *group_ids,
-+ int n_group_ids)
-+{
-+ DBusList *link;
-+ dbus_bool_t allowed;
-+
-+ allowed = def;
-+
-+ link = _dbus_list_get_first_link (list);
-+ while (link != NULL)
-+ {
-+ BusPolicyRule *rule = link->data;
-+ link = _dbus_list_get_next_link (list, link);
-+
-+ if (rule->type == BUS_POLICY_RULE_USER)
-+ {
-+ _dbus_verbose ("List %p user rule uid="DBUS_UID_FORMAT"\n",
-+ list, rule->d.user.uid);
-+
-+ if (rule->d.user.uid == DBUS_UID_UNSET)
-+ ; /* '*' wildcard */
-+ else if (rule->d.user.uid != uid)
-+ continue;
-+ }
-+ else if (rule->type == BUS_POLICY_RULE_GROUP)
-+ {
-+ _dbus_verbose ("List %p group rule uid="DBUS_UID_FORMAT"\n",
-+ list, rule->d.user.uid);
-+
-+ if (rule->d.group.gid == DBUS_GID_UNSET)
-+ ; /* '*' wildcard */
-+ else
-+ {
-+ int i;
-+
-+ i = 0;
-+ while (i < n_group_ids)
-+ {
-+ if (rule->d.group.gid == group_ids[i])
-+ break;
-+ ++i;
-+ }
-+
-+ if (i == n_group_ids)
-+ continue;
-+ }
-+ }
-+ else
-+ continue;
-+
-+ allowed = rule->allow;
-+ }
-+
-+ return allowed;
-+}
-+
-+dbus_bool_t
-+bus_policy_allow_user (BusPolicy *policy,
-+ DBusUserDatabase *user_database,
-+ unsigned long uid)
-+{
-+ dbus_bool_t allowed;
-+ unsigned long *group_ids;
-+ int n_group_ids;
-+
-+ /* On OOM or error we always reject the user */
-+ if (!_dbus_user_database_get_groups (user_database,
-+ uid, &group_ids, &n_group_ids, NULL))
-+ {
-+ _dbus_verbose ("Did not get any groups for UID %lu\n",
-+ uid);
-+ return FALSE;
-+ }
-+
-+ /* Default to "user owning bus" or root can connect */
-+ allowed = uid == _dbus_getuid ();
-+
-+ allowed = list_allows_user (allowed,
-+ &policy->default_rules,
-+ uid,
-+ group_ids, n_group_ids);
-+
-+ allowed = list_allows_user (allowed,
-+ &policy->mandatory_rules,
-+ uid,
-+ group_ids, n_group_ids);
-+
-+ dbus_free (group_ids);
-+
-+ _dbus_verbose ("UID %lu allowed = %d\n", uid, allowed);
-+
-+ return allowed;
-+}
-+
-+dbus_bool_t
-+bus_policy_append_default_rule (BusPolicy *policy,
-+ BusPolicyRule *rule)
-+{
-+ if (!_dbus_list_append (&policy->default_rules, rule))
-+ return FALSE;
-+
-+ bus_policy_rule_ref (rule);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_policy_append_mandatory_rule (BusPolicy *policy,
-+ BusPolicyRule *rule)
-+{
-+ if (!_dbus_list_append (&policy->mandatory_rules, rule))
-+ return FALSE;
-+
-+ bus_policy_rule_ref (rule);
-+
-+ return TRUE;
-+}
-+
-+
-+
-+static DBusList**
-+get_list (DBusHashTable *hash,
-+ unsigned long key)
-+{
-+ DBusList **list;
-+
-+ list = _dbus_hash_table_lookup_ulong (hash, key);
-+
-+ if (list == NULL)
-+ {
-+ list = dbus_new0 (DBusList*, 1);
-+ if (list == NULL)
-+ return NULL;
-+
-+ if (!_dbus_hash_table_insert_ulong (hash, key, list))
-+ {
-+ dbus_free (list);
-+ return NULL;
-+ }
-+ }
-+
-+ return list;
-+}
-+
-+dbus_bool_t
-+bus_policy_append_user_rule (BusPolicy *policy,
-+ dbus_uid_t uid,
-+ BusPolicyRule *rule)
-+{
-+ DBusList **list;
-+
-+ list = get_list (policy->rules_by_uid, uid);
-+
-+ if (list == NULL)
-+ return FALSE;
-+
-+ if (!_dbus_list_append (list, rule))
-+ return FALSE;
-+
-+ bus_policy_rule_ref (rule);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_policy_append_group_rule (BusPolicy *policy,
-+ dbus_gid_t gid,
-+ BusPolicyRule *rule)
-+{
-+ DBusList **list;
-+
-+ list = get_list (policy->rules_by_gid, gid);
-+
-+ if (list == NULL)
-+ return FALSE;
-+
-+ if (!_dbus_list_append (list, rule))
-+ return FALSE;
-+
-+ bus_policy_rule_ref (rule);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_policy_append_console_rule (BusPolicy *policy,
-+ dbus_bool_t at_console,
-+ BusPolicyRule *rule)
-+{
-+ if (at_console)
-+ {
-+ if (!_dbus_list_append (&policy->at_console_true_rules, rule))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (!_dbus_list_append (&policy->at_console_false_rules, rule))
-+ return FALSE;
-+ }
-+
-+ bus_policy_rule_ref (rule);
-+
-+ return TRUE;
-+
-+}
-+
-+static dbus_bool_t
-+append_copy_of_policy_list (DBusList **list,
-+ DBusList **to_append)
-+{
-+ DBusList *link;
-+ DBusList *tmp_list;
-+
-+ tmp_list = NULL;
-+
-+ /* Preallocate all our links */
-+ link = _dbus_list_get_first_link (to_append);
-+ while (link != NULL)
-+ {
-+ if (!_dbus_list_append (&tmp_list, link->data))
-+ {
-+ _dbus_list_clear (&tmp_list);
-+ return FALSE;
-+ }
-+
-+ link = _dbus_list_get_next_link (to_append, link);
-+ }
-+
-+ /* Now append them */
-+ while ((link = _dbus_list_pop_first_link (&tmp_list)))
-+ {
-+ bus_policy_rule_ref (link->data);
-+ _dbus_list_append_link (list, link);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+merge_id_hash (DBusHashTable *dest,
-+ DBusHashTable *to_absorb)
-+{
-+ DBusHashIter iter;
-+
-+ _dbus_hash_iter_init (to_absorb, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ unsigned long id = _dbus_hash_iter_get_ulong_key (&iter);
-+ DBusList **list = _dbus_hash_iter_get_value (&iter);
-+ DBusList **target = get_list (dest, id);
-+
-+ if (target == NULL)
-+ return FALSE;
-+
-+ if (!append_copy_of_policy_list (target, list))
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_policy_merge (BusPolicy *policy,
-+ BusPolicy *to_absorb)
-+{
-+ /* FIXME Not properly atomic, but as used for configuration files we
-+ * don't rely on it quite so much.
-+ */
-+
-+ if (!append_copy_of_policy_list (&policy->default_rules,
-+ &to_absorb->default_rules))
-+ return FALSE;
-+
-+ if (!append_copy_of_policy_list (&policy->mandatory_rules,
-+ &to_absorb->mandatory_rules))
-+ return FALSE;
-+
-+ if (!append_copy_of_policy_list (&policy->at_console_true_rules,
-+ &to_absorb->at_console_true_rules))
-+ return FALSE;
-+
-+ if (!append_copy_of_policy_list (&policy->at_console_false_rules,
-+ &to_absorb->at_console_false_rules))
-+ return FALSE;
-+
-+ if (!merge_id_hash (policy->rules_by_uid,
-+ to_absorb->rules_by_uid))
-+ return FALSE;
-+
-+ if (!merge_id_hash (policy->rules_by_gid,
-+ to_absorb->rules_by_gid))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+struct BusClientPolicy
-+{
-+ int refcount;
-+
-+ DBusList *rules;
-+};
-+
-+BusClientPolicy*
-+bus_client_policy_new (void)
-+{
-+ BusClientPolicy *policy;
-+
-+ policy = dbus_new0 (BusClientPolicy, 1);
-+ if (policy == NULL)
-+ return NULL;
-+
-+ policy->refcount = 1;
-+
-+ return policy;
-+}
-+
-+BusClientPolicy *
-+bus_client_policy_ref (BusClientPolicy *policy)
-+{
-+ _dbus_assert (policy->refcount > 0);
-+
-+ policy->refcount += 1;
-+
-+ return policy;
-+}
-+
-+static void
-+rule_unref_foreach (void *data,
-+ void *user_data)
-+{
-+ BusPolicyRule *rule = data;
-+
-+ bus_policy_rule_unref (rule);
-+}
-+
-+void
-+bus_client_policy_unref (BusClientPolicy *policy)
-+{
-+ _dbus_assert (policy->refcount > 0);
-+
-+ policy->refcount -= 1;
-+
-+ if (policy->refcount == 0)
-+ {
-+ _dbus_list_foreach (&policy->rules,
-+ rule_unref_foreach,
-+ NULL);
-+
-+ _dbus_list_clear (&policy->rules);
-+
-+ dbus_free (policy);
-+ }
-+}
-+
-+static void
-+remove_rules_by_type_up_to (BusClientPolicy *policy,
-+ BusPolicyRuleType type,
-+ DBusList *up_to)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&policy->rules);
-+ while (link != up_to)
-+ {
-+ BusPolicyRule *rule = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&policy->rules, link);
-+
-+ if (rule->type == type)
-+ {
-+ _dbus_list_remove_link (&policy->rules, link);
-+ bus_policy_rule_unref (rule);
-+ }
-+
-+ link = next;
-+ }
-+}
-+
-+void
-+bus_client_policy_optimize (BusClientPolicy *policy)
-+{
-+ DBusList *link;
-+
-+ /* The idea here is that if we have:
-+ *
-+ * <allow send_interface="foo.bar"/>
-+ * <deny send_interface="*"/>
-+ *
-+ * (for example) the deny will always override the allow. So we
-+ * delete the allow. Ditto for deny followed by allow, etc. This is
-+ * a dumb thing to put in a config file, but the <include> feature
-+ * of files allows for an "inheritance and override" pattern where
-+ * it could make sense. If an included file wants to "start over"
-+ * with a blanket deny, no point keeping the rules from the parent
-+ * file.
-+ */
-+
-+ _dbus_verbose ("Optimizing policy with %d rules\n",
-+ _dbus_list_get_length (&policy->rules));
-+
-+ link = _dbus_list_get_first_link (&policy->rules);
-+ while (link != NULL)
-+ {
-+ BusPolicyRule *rule;
-+ DBusList *next;
-+ dbus_bool_t remove_preceding;
-+
-+ next = _dbus_list_get_next_link (&policy->rules, link);
-+ rule = link->data;
-+
-+ remove_preceding = FALSE;
-+
-+ _dbus_assert (rule != NULL);
-+
-+ switch (rule->type)
-+ {
-+ case BUS_POLICY_RULE_SEND:
-+ remove_preceding =
-+ rule->d.send.message_type == DBUS_MESSAGE_TYPE_INVALID &&
-+ rule->d.send.path == NULL &&
-+ rule->d.send.interface == NULL &&
-+ rule->d.send.member == NULL &&
-+ rule->d.send.error == NULL &&
-+ rule->d.send.destination == NULL;
-+ break;
-+ case BUS_POLICY_RULE_RECEIVE:
-+ remove_preceding =
-+ rule->d.receive.message_type == DBUS_MESSAGE_TYPE_INVALID &&
-+ rule->d.receive.path == NULL &&
-+ rule->d.receive.interface == NULL &&
-+ rule->d.receive.member == NULL &&
-+ rule->d.receive.error == NULL &&
-+ rule->d.receive.origin == NULL;
-+ break;
-+ case BUS_POLICY_RULE_OWN:
-+ remove_preceding =
-+ rule->d.own.service_name == NULL;
-+ break;
-+ case BUS_POLICY_RULE_USER:
-+ case BUS_POLICY_RULE_GROUP:
-+ _dbus_assert_not_reached ("invalid rule");
-+ break;
-+ }
-+
-+ if (remove_preceding)
-+ remove_rules_by_type_up_to (policy, rule->type,
-+ link);
-+
-+ link = next;
-+ }
-+
-+ _dbus_verbose ("After optimization, policy has %d rules\n",
-+ _dbus_list_get_length (&policy->rules));
-+}
-+
-+dbus_bool_t
-+bus_client_policy_append_rule (BusClientPolicy *policy,
-+ BusPolicyRule *rule)
-+{
-+ _dbus_verbose ("Appending rule %p with type %d to policy %p\n",
-+ rule, rule->type, policy);
-+
-+ if (!_dbus_list_append (&policy->rules, rule))
-+ return FALSE;
-+
-+ bus_policy_rule_ref (rule);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_client_policy_check_can_send (BusClientPolicy *policy,
-+ BusRegistry *registry,
-+ dbus_bool_t requested_reply,
-+ DBusConnection *receiver,
-+ DBusMessage *message)
-+{
-+ DBusList *link;
-+ dbus_bool_t allowed;
-+
-+ /* policy->rules is in the order the rules appeared
-+ * in the config file, i.e. last rule that applies wins
-+ */
-+
-+ _dbus_verbose (" (policy) checking send rules\n");
-+
-+ allowed = FALSE;
-+ link = _dbus_list_get_first_link (&policy->rules);
-+ while (link != NULL)
-+ {
-+ BusPolicyRule *rule = link->data;
-+
-+ link = _dbus_list_get_next_link (&policy->rules, link);
-+
-+ /* Rule is skipped if it specifies a different
-+ * message name from the message, or a different
-+ * destination from the message
-+ */
-+
-+ if (rule->type != BUS_POLICY_RULE_SEND)
-+ {
-+ _dbus_verbose (" (policy) skipping non-send rule\n");
-+ continue;
-+ }
-+
-+ if (rule->d.send.message_type != DBUS_MESSAGE_TYPE_INVALID)
-+ {
-+ if (dbus_message_get_type (message) != rule->d.send.message_type)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different message type\n");
-+ continue;
-+ }
-+ }
-+
-+ /* If it's a reply, the requested_reply flag kicks in */
-+ if (dbus_message_get_reply_serial (message) != 0)
-+ {
-+ /* for allow, requested_reply=true means the rule applies
-+ * only when reply was requested. requested_reply=false means
-+ * always allow.
-+ */
-+ if (!requested_reply && rule->allow && rule->d.send.requested_reply)
-+ {
-+ _dbus_verbose (" (policy) skipping allow rule since it only applies to requested replies\n");
-+ continue;
-+ }
-+
-+ /* for deny, requested_reply=false means the rule applies only
-+ * when the reply was not requested. requested_reply=true means the
-+ * rule always applies.
-+ */
-+ if (requested_reply && !rule->allow && !rule->d.send.requested_reply)
-+ {
-+ _dbus_verbose (" (policy) skipping deny rule since it only applies to unrequested replies\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.send.path != NULL)
-+ {
-+ if (dbus_message_get_path (message) != NULL &&
-+ strcmp (dbus_message_get_path (message),
-+ rule->d.send.path) != 0)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different path\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.send.interface != NULL)
-+ {
-+ if (dbus_message_get_interface (message) != NULL &&
-+ strcmp (dbus_message_get_interface (message),
-+ rule->d.send.interface) != 0)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different interface\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.send.member != NULL)
-+ {
-+ if (dbus_message_get_member (message) != NULL &&
-+ strcmp (dbus_message_get_member (message),
-+ rule->d.send.member) != 0)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different member\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.send.error != NULL)
-+ {
-+ if (dbus_message_get_error_name (message) != NULL &&
-+ strcmp (dbus_message_get_error_name (message),
-+ rule->d.send.error) != 0)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different error name\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.send.destination != NULL)
-+ {
-+ /* receiver can be NULL for messages that are sent to the
-+ * message bus itself, we check the strings in that case as
-+ * built-in services don't have a DBusConnection but messages
-+ * to them have a destination service name.
-+ */
-+ if (receiver == NULL)
-+ {
-+ if (!dbus_message_has_destination (message,
-+ rule->d.send.destination))
-+ {
-+ _dbus_verbose (" (policy) skipping rule because message dest is not %s\n",
-+ rule->d.send.destination);
-+ continue;
-+ }
-+ }
-+ else
-+ {
-+ DBusString str;
-+ BusService *service;
-+
-+ _dbus_string_init_const (&str, rule->d.send.destination);
-+
-+ service = bus_registry_lookup (registry, &str);
-+ if (service == NULL)
-+ {
-+ _dbus_verbose (" (policy) skipping rule because dest %s doesn't exist\n",
-+ rule->d.send.destination);
-+ continue;
-+ }
-+
-+ if (!bus_service_has_owner (service, receiver))
-+ {
-+ _dbus_verbose (" (policy) skipping rule because dest %s isn't owned by receiver\n",
-+ rule->d.send.destination);
-+ continue;
-+ }
-+ }
-+ }
-+
-+ /* Use this rule */
-+ allowed = rule->allow;
-+
-+ _dbus_verbose (" (policy) used rule, allow now = %d\n",
-+ allowed);
-+ }
-+
-+ return allowed;
-+}
-+
-+/* See docs on what the args mean on bus_context_check_security_policy()
-+ * comment
-+ */
-+dbus_bool_t
-+bus_client_policy_check_can_receive (BusClientPolicy *policy,
-+ BusRegistry *registry,
-+ dbus_bool_t requested_reply,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ DBusMessage *message)
-+{
-+ DBusList *link;
-+ dbus_bool_t allowed;
-+ dbus_bool_t eavesdropping;
-+
-+ eavesdropping =
-+ addressed_recipient != proposed_recipient &&
-+ dbus_message_get_destination (message) != NULL;
-+
-+ /* policy->rules is in the order the rules appeared
-+ * in the config file, i.e. last rule that applies wins
-+ */
-+
-+ _dbus_verbose (" (policy) checking receive rules, eavesdropping = %d\n", eavesdropping);
-+
-+ allowed = FALSE;
-+ link = _dbus_list_get_first_link (&policy->rules);
-+ while (link != NULL)
-+ {
-+ BusPolicyRule *rule = link->data;
-+
-+ link = _dbus_list_get_next_link (&policy->rules, link);
-+
-+ if (rule->type != BUS_POLICY_RULE_RECEIVE)
-+ {
-+ _dbus_verbose (" (policy) skipping non-receive rule\n");
-+ continue;
-+ }
-+
-+ if (rule->d.receive.message_type != DBUS_MESSAGE_TYPE_INVALID)
-+ {
-+ if (dbus_message_get_type (message) != rule->d.receive.message_type)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different message type\n");
-+ continue;
-+ }
-+ }
-+
-+ /* for allow, eavesdrop=false means the rule doesn't apply when
-+ * eavesdropping. eavesdrop=true means always allow.
-+ */
-+ if (eavesdropping && rule->allow && !rule->d.receive.eavesdrop)
-+ {
-+ _dbus_verbose (" (policy) skipping allow rule since it doesn't apply to eavesdropping\n");
-+ continue;
-+ }
-+
-+ /* for deny, eavesdrop=true means the rule applies only when
-+ * eavesdropping; eavesdrop=false means always deny.
-+ */
-+ if (!eavesdropping && !rule->allow && rule->d.receive.eavesdrop)
-+ {
-+ _dbus_verbose (" (policy) skipping deny rule since it only applies to eavesdropping\n");
-+ continue;
-+ }
-+
-+ /* If it's a reply, the requested_reply flag kicks in */
-+ if (dbus_message_get_reply_serial (message) != 0)
-+ {
-+ /* for allow, requested_reply=true means the rule applies
-+ * only when reply was requested. requested_reply=false means
-+ * always allow.
-+ */
-+ if (!requested_reply && rule->allow && rule->d.receive.requested_reply)
-+ {
-+ _dbus_verbose (" (policy) skipping allow rule since it only applies to requested replies\n");
-+ continue;
-+ }
-+
-+ /* for deny, requested_reply=false means the rule applies only
-+ * when the reply was not requested. requested_reply=true means the
-+ * rule always applies.
-+ */
-+ if (requested_reply && !rule->allow && !rule->d.receive.requested_reply)
-+ {
-+ _dbus_verbose (" (policy) skipping deny rule since it only applies to unrequested replies\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.receive.path != NULL)
-+ {
-+ if (dbus_message_get_path (message) != NULL &&
-+ strcmp (dbus_message_get_path (message),
-+ rule->d.receive.path) != 0)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different path\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.receive.interface != NULL)
-+ {
-+ if (dbus_message_get_interface (message) != NULL &&
-+ strcmp (dbus_message_get_interface (message),
-+ rule->d.receive.interface) != 0)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different interface\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.receive.member != NULL)
-+ {
-+ if (dbus_message_get_member (message) != NULL &&
-+ strcmp (dbus_message_get_member (message),
-+ rule->d.receive.member) != 0)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different member\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.receive.error != NULL)
-+ {
-+ if (dbus_message_get_error_name (message) != NULL &&
-+ strcmp (dbus_message_get_error_name (message),
-+ rule->d.receive.error) != 0)
-+ {
-+ _dbus_verbose (" (policy) skipping rule for different error name\n");
-+ continue;
-+ }
-+ }
-+
-+ if (rule->d.receive.origin != NULL)
-+ {
-+ /* sender can be NULL for messages that originate from the
-+ * message bus itself, we check the strings in that case as
-+ * built-in services don't have a DBusConnection but will
-+ * still set the sender on their messages.
-+ */
-+ if (sender == NULL)
-+ {
-+ if (!dbus_message_has_sender (message,
-+ rule->d.receive.origin))
-+ {
-+ _dbus_verbose (" (policy) skipping rule because message sender is not %s\n",
-+ rule->d.receive.origin);
-+ continue;
-+ }
-+ }
-+ else
-+ {
-+ BusService *service;
-+ DBusString str;
-+
-+ _dbus_string_init_const (&str, rule->d.receive.origin);
-+
-+ service = bus_registry_lookup (registry, &str);
-+
-+ if (service == NULL)
-+ {
-+ _dbus_verbose (" (policy) skipping rule because origin %s doesn't exist\n",
-+ rule->d.receive.origin);
-+ continue;
-+ }
-+
-+ if (!bus_service_has_owner (service, sender))
-+ {
-+ _dbus_verbose (" (policy) skipping rule because origin %s isn't owned by sender\n",
-+ rule->d.receive.origin);
-+ continue;
-+ }
-+ }
-+ }
-+
-+ /* Use this rule */
-+ allowed = rule->allow;
-+
-+ _dbus_verbose (" (policy) used rule, allow now = %d\n",
-+ allowed);
-+ }
-+
-+ return allowed;
-+}
-+
-+dbus_bool_t
-+bus_client_policy_check_can_own (BusClientPolicy *policy,
-+ DBusConnection *connection,
-+ const DBusString *service_name)
-+{
-+ DBusList *link;
-+ dbus_bool_t allowed;
-+
-+ /* policy->rules is in the order the rules appeared
-+ * in the config file, i.e. last rule that applies wins
-+ */
-+
-+ allowed = FALSE;
-+ link = _dbus_list_get_first_link (&policy->rules);
-+ while (link != NULL)
-+ {
-+ BusPolicyRule *rule = link->data;
-+
-+ link = _dbus_list_get_next_link (&policy->rules, link);
-+
-+ /* Rule is skipped if it specifies a different service name from
-+ * the desired one.
-+ */
-+
-+ if (rule->type != BUS_POLICY_RULE_OWN)
-+ continue;
-+
-+ if (rule->d.own.service_name != NULL)
-+ {
-+ if (!_dbus_string_equal_c_str (service_name,
-+ rule->d.own.service_name))
-+ continue;
-+ }
-+
-+ /* Use this rule */
-+ allowed = rule->allow;
-+ }
-+
-+ return allowed;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+dbus_bool_t
-+bus_policy_test (const DBusString *test_data_dir)
-+{
-+ /* This doesn't do anything for now because I decided to do it in
-+ * dispatch.c instead by having some of the clients in dispatch.c
-+ * have particular policies applied to them.
-+ */
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/bus/policy.h dbus-0.61/bus/policy.h
---- dbus-0.61.orig/bus/policy.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/policy.h 2004-08-26 00:11:49.000000000 +0200
-@@ -0,0 +1,158 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* policy.h Bus security policy
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_POLICY_H
-+#define BUS_POLICY_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-sysdeps.h>
-+#include "bus.h"
-+
-+typedef enum
-+{
-+ BUS_POLICY_RULE_SEND,
-+ BUS_POLICY_RULE_RECEIVE,
-+ BUS_POLICY_RULE_OWN,
-+ BUS_POLICY_RULE_USER,
-+ BUS_POLICY_RULE_GROUP
-+} BusPolicyRuleType;
-+
-+/** determines whether the rule affects a connection, or some global item */
-+#define BUS_POLICY_RULE_IS_PER_CLIENT(rule) (!((rule)->type == BUS_POLICY_RULE_USER || \
-+ (rule)->type == BUS_POLICY_RULE_GROUP))
-+
-+struct BusPolicyRule
-+{
-+ int refcount;
-+
-+ BusPolicyRuleType type;
-+
-+ unsigned int allow : 1; /**< #TRUE if this allows, #FALSE if it denies */
-+
-+ union
-+ {
-+ struct
-+ {
-+ /* message type can be DBUS_MESSAGE_TYPE_INVALID meaning "any" */
-+ int message_type;
-+ /* any of these can be NULL meaning "any" */
-+ char *path;
-+ char *interface;
-+ char *member;
-+ char *error;
-+ char *destination;
-+ unsigned int requested_reply : 1;
-+ } send;
-+
-+ struct
-+ {
-+ /* message type can be DBUS_MESSAGE_TYPE_INVALID meaning "any" */
-+ int message_type;
-+ /* any of these can be NULL meaning "any" */
-+ char *path;
-+ char *interface;
-+ char *member;
-+ char *error;
-+ char *origin;
-+ unsigned int eavesdrop : 1;
-+ unsigned int requested_reply : 1;
-+ } receive;
-+
-+ struct
-+ {
-+ /* can be NULL meaning "any" */
-+ char *service_name;
-+ } own;
-+
-+ struct
-+ {
-+ /* can be DBUS_UID_UNSET meaning "any" */
-+ dbus_uid_t uid;
-+ } user;
-+
-+ struct
-+ {
-+ /* can be DBUS_GID_UNSET meaning "any" */
-+ dbus_gid_t gid;
-+ } group;
-+
-+ } d;
-+};
-+
-+BusPolicyRule* bus_policy_rule_new (BusPolicyRuleType type,
-+ dbus_bool_t allow);
-+BusPolicyRule* bus_policy_rule_ref (BusPolicyRule *rule);
-+void bus_policy_rule_unref (BusPolicyRule *rule);
-+
-+BusPolicy* bus_policy_new (void);
-+BusPolicy* bus_policy_ref (BusPolicy *policy);
-+void bus_policy_unref (BusPolicy *policy);
-+BusClientPolicy* bus_policy_create_client_policy (BusPolicy *policy,
-+ DBusConnection *connection,
-+ DBusError *error);
-+dbus_bool_t bus_policy_allow_user (BusPolicy *policy,
-+ DBusUserDatabase *user_database,
-+ unsigned long uid);
-+dbus_bool_t bus_policy_append_default_rule (BusPolicy *policy,
-+ BusPolicyRule *rule);
-+dbus_bool_t bus_policy_append_mandatory_rule (BusPolicy *policy,
-+ BusPolicyRule *rule);
-+dbus_bool_t bus_policy_append_user_rule (BusPolicy *policy,
-+ dbus_uid_t uid,
-+ BusPolicyRule *rule);
-+dbus_bool_t bus_policy_append_group_rule (BusPolicy *policy,
-+ dbus_gid_t gid,
-+ BusPolicyRule *rule);
-+dbus_bool_t bus_policy_append_console_rule (BusPolicy *policy,
-+ dbus_bool_t at_console,
-+ BusPolicyRule *rule);
-+
-+dbus_bool_t bus_policy_merge (BusPolicy *policy,
-+ BusPolicy *to_absorb);
-+
-+BusClientPolicy* bus_client_policy_new (void);
-+BusClientPolicy* bus_client_policy_ref (BusClientPolicy *policy);
-+void bus_client_policy_unref (BusClientPolicy *policy);
-+dbus_bool_t bus_client_policy_check_can_send (BusClientPolicy *policy,
-+ BusRegistry *registry,
-+ dbus_bool_t requested_reply,
-+ DBusConnection *receiver,
-+ DBusMessage *message);
-+dbus_bool_t bus_client_policy_check_can_receive (BusClientPolicy *policy,
-+ BusRegistry *registry,
-+ dbus_bool_t requested_reply,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusConnection *proposed_recipient,
-+ DBusMessage *message);
-+dbus_bool_t bus_client_policy_check_can_own (BusClientPolicy *policy,
-+ DBusConnection *connection,
-+ const DBusString *service_name);
-+dbus_bool_t bus_client_policy_append_rule (BusClientPolicy *policy,
-+ BusPolicyRule *rule);
-+void bus_client_policy_optimize (BusClientPolicy *policy);
-+
-+
-+#endif /* BUS_POLICY_H */
-diff -Naur dbus-0.61.orig/bus/rc.messagebus.in dbus-0.61/bus/rc.messagebus.in
---- dbus-0.61.orig/bus/rc.messagebus.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/rc.messagebus.in 2005-01-18 23:20:38.000000000 +0100
-@@ -0,0 +1,75 @@
-+#!/bin/sh
-+#
-+# messagebus: The D-BUS systemwide message bus
-+#
-+# chkconfig: 345 97 03
-+# description: This is a daemon which broadcasts notifications of system events \
-+# and other messages. See http://www.freedesktop.org/software/dbus/
-+#
-+# processname: dbus-daemon
-+# pidfile: @DBUS_SYSTEM_PID_FILE@
-+#
-+
-+# Sanity checks.
-+#[ -x @EXPANDED_BINDIR@/dbus-daemon ] || exit 0
-+
-+# Source function library.
-+#. @EXPANDED_SYSCONFDIR@/rc.d/init.d/functions
-+
-+# so we can rearrange this easily
-+#processname=dbus-daemon
-+#servicename=messagebus
-+
-+#RETVAL=0
-+
-+start() {
-+ echo "Starting system message bus"
-+ if [ -x @EXPANDED_BINDIR@/dbus-daemon ];then
-+ @EXPANDED_BINDIR@/dbus-daemon --system
-+ fi
-+ #daemon --check $servicename $processname --system
-+ #RETVAL=$?
-+ #echo
-+ #[ $RETVAL -eq 0 ] && touch @EXPANDED_LOCALSTATEDIR@/lock/subsys/$servicename
-+}
-+
-+stop() {
-+ echo "Stopping system message bus"
-+
-+ ## we don't want to kill all the per-user $processname, we want
-+ ## to use the pid file *only*; because we use the fake nonexistent
-+ ## program name "$servicename" that should be safe-ish
-+ killall dbus-daemon
-+ #RETVAL=$?
-+ #echo
-+ #if [ $RETVAL -eq 0 ]; then
-+ # rm -f @EXPANDED_LOCALSTATEDIR@/lock/subsys/$servicename
-+ # rm -f @DBUS_SYSTEM_PID_FILE@
-+ #fi
-+}
-+
-+# See how we were called.
-+case "$1" in
-+ start)
-+ start
-+ ;;
-+ stop)
-+ stop
-+ ;;
-+ status)
-+ status $processname
-+ RETVAL=$?
-+ ;;
-+ restart)
-+ stop
-+ start
-+ ;;
-+ reload)
-+ echo "Message bus can't reload its configuration, you have to restart it"
-+ RETVAL=$?
-+ ;;
-+ *)
-+ echo $"Usage: $0 {start|stop|status|restart|reload}"
-+ ;;
-+esac
-+exit $RETVAL
-diff -Naur dbus-0.61.orig/bus/selinux.c dbus-0.61/bus/selinux.c
---- dbus-0.61.orig/bus/selinux.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/selinux.c 2005-07-16 19:34:08.000000000 +0200
-@@ -0,0 +1,933 @@
-+/* -*- mode: C; c-file-style: "gnu" -*-
-+ * selinux.c SELinux security checks for D-BUS
-+ *
-+ * Author: Matthew Rickard <mjricka at epoch.ncsc.mil>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-string.h>
-+#include "selinux.h"
-+#include "services.h"
-+#include "policy.h"
-+#include "utils.h"
-+#include "config-parser.h"
-+
-+#ifdef HAVE_SELINUX
-+#include <errno.h>
-+#include <pthread.h>
-+#include <syslog.h>
-+#include <selinux/selinux.h>
-+#include <selinux/avc.h>
-+#include <selinux/av_permissions.h>
-+#include <selinux/flask.h>
-+#include <signal.h>
-+#include <stdarg.h>
-+#endif /* HAVE_SELINUX */
-+
-+#define BUS_SID_FROM_SELINUX(sid) ((BusSELinuxID*) (sid))
-+#define SELINUX_SID_FROM_BUS(sid) ((security_id_t) (sid))
-+
-+#ifdef HAVE_SELINUX
-+/* Store the value telling us if SELinux is enabled in the kernel. */
-+static dbus_bool_t selinux_enabled = FALSE;
-+
-+/* Store an avc_entry_ref to speed AVC decisions. */
-+static struct avc_entry_ref aeref;
-+
-+/* Store the SID of the bus itself to use as the default. */
-+static security_id_t bus_sid = SECSID_WILD;
-+
-+/* Thread to listen for SELinux status changes via netlink. */
-+static pthread_t avc_notify_thread;
-+
-+/* Prototypes for AVC callback functions. */
-+static void log_callback (const char *fmt, ...);
-+static void log_audit_callback (void *data, security_class_t class, char *buf, size_t bufleft);
-+static void *avc_create_thread (void (*run) (void));
-+static void avc_stop_thread (void *thread);
-+static void *avc_alloc_lock (void);
-+static void avc_get_lock (void *lock);
-+static void avc_release_lock (void *lock);
-+static void avc_free_lock (void *lock);
-+
-+/* AVC callback structures for use in avc_init. */
-+static const struct avc_memory_callback mem_cb =
-+{
-+ .func_malloc = dbus_malloc,
-+ .func_free = dbus_free
-+};
-+static const struct avc_log_callback log_cb =
-+{
-+ .func_log = log_callback,
-+ .func_audit = log_audit_callback
-+};
-+static const struct avc_thread_callback thread_cb =
-+{
-+ .func_create_thread = avc_create_thread,
-+ .func_stop_thread = avc_stop_thread
-+};
-+static const struct avc_lock_callback lock_cb =
-+{
-+ .func_alloc_lock = avc_alloc_lock,
-+ .func_get_lock = avc_get_lock,
-+ .func_release_lock = avc_release_lock,
-+ .func_free_lock = avc_free_lock
-+};
-+#endif /* HAVE_SELINUX */
-+
-+/**
-+ * Log callback to log denial messages from the AVC.
-+ * This is used in avc_init. Logs to both standard
-+ * error and syslogd.
-+ *
-+ * @param fmt the format string
-+ * @param variable argument list
-+ */
-+#ifdef HAVE_SELINUX
-+static void
-+log_callback (const char *fmt, ...)
-+{
-+ va_list ap;
-+ va_start(ap, fmt);
-+ vsyslog (LOG_INFO, fmt, ap);
-+ va_end(ap);
-+}
-+
-+/**
-+ * On a policy reload we need to reparse the SELinux configuration file, since
-+ * this could have changed. Send a SIGHUP to reload all configs.
-+ */
-+static int
-+policy_reload_callback (u_int32_t event, security_id_t ssid,
-+ security_id_t tsid, security_class_t tclass,
-+ access_vector_t perms, access_vector_t *out_retained)
-+{
-+ if (event == AVC_CALLBACK_RESET)
-+ return raise (SIGHUP);
-+
-+ return 0;
-+}
-+
-+/**
-+ * Log any auxiliary data
-+ */
-+static void
-+log_audit_callback (void *data, security_class_t class, char *buf, size_t bufleft)
-+{
-+ DBusString *audmsg = data;
-+ _dbus_string_copy_to_buffer (audmsg, buf, bufleft);
-+}
-+
-+/**
-+ * Create thread to notify the AVC of enforcing and policy reload
-+ * changes via netlink.
-+ *
-+ * @param run the thread run function
-+ * @return pointer to the thread
-+ */
-+static void *
-+avc_create_thread (void (*run) (void))
-+{
-+ int rc;
-+
-+ rc = pthread_create (&avc_notify_thread, NULL, (void *(*) (void *)) run, NULL);
-+ if (rc != 0)
-+ {
-+ _dbus_warn ("Failed to start AVC thread: %s\n", _dbus_strerror (rc));
-+ exit (1);
-+ }
-+ return &avc_notify_thread;
-+}
-+
-+/* Stop AVC netlink thread. */
-+static void
-+avc_stop_thread (void *thread)
-+{
-+ pthread_cancel (*(pthread_t *) thread);
-+}
-+
-+/* Allocate a new AVC lock. */
-+static void *
-+avc_alloc_lock (void)
-+{
-+ pthread_mutex_t *avc_mutex;
-+
-+ avc_mutex = dbus_new (pthread_mutex_t, 1);
-+ if (avc_mutex == NULL)
-+ {
-+ _dbus_warn ("Could not create mutex: %s\n", _dbus_strerror (errno));
-+ exit (1);
-+ }
-+ pthread_mutex_init (avc_mutex, NULL);
-+
-+ return avc_mutex;
-+}
-+
-+/* Acquire an AVC lock. */
-+static void
-+avc_get_lock (void *lock)
-+{
-+ pthread_mutex_lock (lock);
-+}
-+
-+/* Release an AVC lock. */
-+static void
-+avc_release_lock (void *lock)
-+{
-+ pthread_mutex_unlock (lock);
-+}
-+
-+/* Free an AVC lock. */
-+static void
-+avc_free_lock (void *lock)
-+{
-+ pthread_mutex_destroy (lock);
-+ dbus_free (lock);
-+}
-+#endif /* HAVE_SELINUX */
-+
-+/**
-+ * Return whether or not SELinux is enabled; must be
-+ * called after bus_selinux_init.
-+ */
-+dbus_bool_t
-+bus_selinux_enabled (void)
-+{
-+#ifdef HAVE_SELINUX
-+ return selinux_enabled;
-+#else
-+ return FALSE;
-+#endif /* HAVE_SELINUX */
-+}
-+
-+/**
-+ * Do early initialization; determine whether SELinux is enabled.
-+ */
-+dbus_bool_t
-+bus_selinux_pre_init (void)
-+{
-+#ifdef HAVE_SELINUX
-+ int r;
-+ _dbus_assert (bus_sid == SECSID_WILD);
-+
-+ /* Determine if we are running an SELinux kernel. */
-+ r = is_selinux_enabled ();
-+ if (r < 0)
-+ {
-+ _dbus_warn ("Could not tell if SELinux is enabled: %s\n",
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ selinux_enabled = r != 0;
-+ return TRUE;
-+#else
-+ return TRUE;
-+#endif
-+}
-+
-+/**
-+ * Initialize the user space access vector cache (AVC) for D-BUS and set up
-+ * logging callbacks.
-+ */
-+dbus_bool_t
-+bus_selinux_full_init (void)
-+{
-+#ifdef HAVE_SELINUX
-+ char *bus_context;
-+
-+ _dbus_assert (bus_sid == SECSID_WILD);
-+
-+ if (!selinux_enabled)
-+ {
-+ _dbus_verbose ("SELinux not enabled in this kernel.\n");
-+ return TRUE;
-+ }
-+
-+ _dbus_verbose ("SELinux is enabled in this kernel.\n");
-+
-+ avc_entry_ref_init (&aeref);
-+ if (avc_init ("avc", &mem_cb, &log_cb, &thread_cb, &lock_cb) < 0)
-+ {
-+ _dbus_warn ("Failed to start Access Vector Cache (AVC).\n");
-+ return FALSE;
-+ }
-+ else
-+ {
-+ openlog ("dbus", LOG_PERROR, LOG_USER);
-+ _dbus_verbose ("Access Vector Cache (AVC) started.\n");
-+ }
-+
-+ if (avc_add_callback (policy_reload_callback, AVC_CALLBACK_RESET,
-+ NULL, NULL, 0, 0) < 0)
-+ {
-+ _dbus_warn ("Failed to add policy reload callback: %s\n",
-+ _dbus_strerror (errno));
-+ avc_destroy ();
-+ return FALSE;
-+ }
-+
-+ bus_context = NULL;
-+ bus_sid = SECSID_WILD;
-+
-+ if (getcon (&bus_context) < 0)
-+ {
-+ _dbus_verbose ("Error getting context of bus: %s\n",
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ if (avc_context_to_sid (bus_context, &bus_sid) < 0)
-+ {
-+ _dbus_verbose ("Error getting SID from bus context: %s\n",
-+ _dbus_strerror (errno));
-+ freecon (bus_context);
-+ return FALSE;
-+ }
-+
-+ freecon (bus_context);
-+
-+ return TRUE;
-+#else
-+ return TRUE;
-+#endif /* HAVE_SELINUX */
-+}
-+
-+/**
-+ * Decrement SID reference count.
-+ *
-+ * @param sid the SID to decrement
-+ */
-+void
-+bus_selinux_id_unref (BusSELinuxID *sid)
-+{
-+#ifdef HAVE_SELINUX
-+ if (!selinux_enabled)
-+ return;
-+
-+ _dbus_assert (sid != NULL);
-+
-+ sidput (SELINUX_SID_FROM_BUS (sid));
-+#endif /* HAVE_SELINUX */
-+}
-+
-+void
-+bus_selinux_id_ref (BusSELinuxID *sid)
-+{
-+#ifdef HAVE_SELINUX
-+ if (!selinux_enabled)
-+ return;
-+
-+ _dbus_assert (sid != NULL);
-+
-+ sidget (SELINUX_SID_FROM_BUS (sid));
-+#endif /* HAVE_SELINUX */
-+}
-+
-+/**
-+ * Determine if the SELinux security policy allows the given sender
-+ * security context to go to the given recipient security context.
-+ * This function determines if the requested permissions are to be
-+ * granted from the connection to the message bus or to another
-+ * optionally supplied security identifier (e.g. for a service
-+ * context). Currently these permissions are either send_msg or
-+ * acquire_svc in the dbus class.
-+ *
-+ * @param sender_sid source security context
-+ * @param override_sid is the target security context. If SECSID_WILD this will
-+ * use the context of the bus itself (e.g. the default).
-+ * @param target_class is the target security class.
-+ * @param requested is the requested permissions.
-+ * @returns #TRUE if security policy allows the send.
-+ */
-+#ifdef HAVE_SELINUX
-+static dbus_bool_t
-+bus_selinux_check (BusSELinuxID *sender_sid,
-+ BusSELinuxID *override_sid,
-+ security_class_t target_class,
-+ access_vector_t requested,
-+ DBusString *auxdata)
-+{
-+ if (!selinux_enabled)
-+ return TRUE;
-+
-+ /* Make the security check. AVC checks enforcing mode here as well. */
-+ if (avc_has_perm (SELINUX_SID_FROM_BUS (sender_sid),
-+ override_sid ?
-+ SELINUX_SID_FROM_BUS (override_sid) :
-+ SELINUX_SID_FROM_BUS (bus_sid),
-+ target_class, requested, &aeref, auxdata) < 0)
-+ {
-+ _dbus_verbose ("SELinux denying due to security policy.\n");
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+}
-+#endif /* HAVE_SELINUX */
-+
-+/**
-+ * Returns true if the given connection can acquire a service,
-+ * assuming the given security ID is needed for that service.
-+ *
-+ * @param connection connection that wants to own the service
-+ * @param service_sid the SID of the service from the table
-+ * @returns #TRUE if acquire is permitted.
-+ */
-+dbus_bool_t
-+bus_selinux_allows_acquire_service (DBusConnection *connection,
-+ BusSELinuxID *service_sid,
-+ const char *service_name,
-+ DBusError *error)
-+{
-+#ifdef HAVE_SELINUX
-+ BusSELinuxID *connection_sid;
-+ unsigned long spid;
-+ DBusString auxdata;
-+ dbus_bool_t ret;
-+
-+ if (!selinux_enabled)
-+ return TRUE;
-+
-+ connection_sid = bus_connection_get_selinux_id (connection);
-+ if (!dbus_connection_get_unix_process_id (connection, &spid))
-+ spid = 0;
-+
-+ if (!_dbus_string_init (&auxdata))
-+ goto oom;
-+
-+ if (!_dbus_string_append (&auxdata, "service="))
-+ goto oom;
-+
-+ if (!_dbus_string_append (&auxdata, service_name))
-+ goto oom;
-+
-+ if (spid)
-+ {
-+ if (!_dbus_string_append (&auxdata, " spid="))
-+ goto oom;
-+
-+ if (!_dbus_string_append_uint (&auxdata, spid))
-+ goto oom;
-+ }
-+
-+ ret = bus_selinux_check (connection_sid,
-+ service_sid,
-+ SECCLASS_DBUS,
-+ DBUS__ACQUIRE_SVC,
-+ &auxdata);
-+
-+ _dbus_string_free (&auxdata);
-+ return ret;
-+
-+ oom:
-+ _dbus_string_free (&auxdata);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+
-+#else
-+ return TRUE;
-+#endif /* HAVE_SELINUX */
-+}
-+
-+/**
-+ * Check if SELinux security controls allow the message to be sent to a
-+ * particular connection based on the security context of the sender and
-+ * that of the receiver. The destination connection need not be the
-+ * addressed recipient, it could be an "eavesdropper"
-+ *
-+ * @param sender the sender of the message.
-+ * @param proposed_recipient the connection the message is to be sent to.
-+ * @returns whether to allow the send
-+ */
-+dbus_bool_t
-+bus_selinux_allows_send (DBusConnection *sender,
-+ DBusConnection *proposed_recipient,
-+ const char *msgtype,
-+ const char *interface,
-+ const char *member,
-+ const char *error_name,
-+ const char *destination,
-+ DBusError *error)
-+{
-+#ifdef HAVE_SELINUX
-+ BusSELinuxID *recipient_sid;
-+ BusSELinuxID *sender_sid;
-+ unsigned long spid, tpid;
-+ DBusString auxdata;
-+ dbus_bool_t ret;
-+ dbus_bool_t string_alloced;
-+
-+ if (!selinux_enabled)
-+ return TRUE;
-+
-+ if (!sender || !dbus_connection_get_unix_process_id (sender, &spid))
-+ spid = 0;
-+ if (!proposed_recipient || !dbus_connection_get_unix_process_id (proposed_recipient, &tpid))
-+ tpid = 0;
-+
-+ string_alloced = FALSE;
-+ if (!_dbus_string_init (&auxdata))
-+ goto oom;
-+ string_alloced = TRUE;
-+
-+ if (!_dbus_string_append (&auxdata, "msgtype="))
-+ goto oom;
-+
-+ if (!_dbus_string_append (&auxdata, msgtype))
-+ goto oom;
-+
-+ if (interface)
-+ {
-+ if (!_dbus_string_append (&auxdata, " interface="))
-+ goto oom;
-+ if (!_dbus_string_append (&auxdata, interface))
-+ goto oom;
-+ }
-+
-+ if (member)
-+ {
-+ if (!_dbus_string_append (&auxdata, " member="))
-+ goto oom;
-+ if (!_dbus_string_append (&auxdata, member))
-+ goto oom;
-+ }
-+
-+ if (error_name)
-+ {
-+ if (!_dbus_string_append (&auxdata, " error_name="))
-+ goto oom;
-+ if (!_dbus_string_append (&auxdata, error_name))
-+ goto oom;
-+ }
-+
-+ if (destination)
-+ {
-+ if (!_dbus_string_append (&auxdata, " dest="))
-+ goto oom;
-+ if (!_dbus_string_append (&auxdata, destination))
-+ goto oom;
-+ }
-+
-+ if (spid)
-+ {
-+ if (!_dbus_string_append (&auxdata, " spid="))
-+ goto oom;
-+
-+ if (!_dbus_string_append_uint (&auxdata, spid))
-+ goto oom;
-+ }
-+
-+ if (tpid)
-+ {
-+ if (!_dbus_string_append (&auxdata, " tpid="))
-+ goto oom;
-+
-+ if (!_dbus_string_append_uint (&auxdata, tpid))
-+ goto oom;
-+ }
-+
-+ sender_sid = bus_connection_get_selinux_id (sender);
-+ /* A NULL proposed_recipient means the bus itself. */
-+ if (proposed_recipient)
-+ recipient_sid = bus_connection_get_selinux_id (proposed_recipient);
-+ else
-+ recipient_sid = BUS_SID_FROM_SELINUX (bus_sid);
-+
-+ ret = bus_selinux_check (sender_sid,
-+ recipient_sid,
-+ SECCLASS_DBUS,
-+ DBUS__SEND_MSG,
-+ &auxdata);
-+
-+ _dbus_string_free (&auxdata);
-+
-+ return ret;
-+
-+ oom:
-+ if (string_alloced)
-+ _dbus_string_free (&auxdata);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+
-+#else
-+ return TRUE;
-+#endif /* HAVE_SELINUX */
-+}
-+
-+dbus_bool_t
-+bus_selinux_append_context (DBusMessage *message,
-+ BusSELinuxID *sid,
-+ DBusError *error)
-+{
-+#ifdef HAVE_SELINUX
-+ char *context;
-+
-+ if (avc_sid_to_context (SELINUX_SID_FROM_BUS (sid), &context) < 0)
-+ {
-+ if (errno == ENOMEM)
-+ BUS_SET_OOM (error);
-+ else
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Error getting context from SID: %s\n",
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_ARRAY,
-+ DBUS_TYPE_BYTE,
-+ &context,
-+ strlen (context),
-+ DBUS_TYPE_INVALID))
-+ {
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ freecon (context);
-+ return TRUE;
-+#else
-+ return TRUE;
-+#endif
-+}
-+
-+/**
-+ * Gets the security context of a connection to the bus. It is up to
-+ * the caller to freecon() when they are done.
-+ *
-+ * @param connection the connection to get the context of.
-+ * @param con the location to store the security context.
-+ * @returns #TRUE if context is successfully obtained.
-+ */
-+#ifdef HAVE_SELINUX
-+static dbus_bool_t
-+bus_connection_read_selinux_context (DBusConnection *connection,
-+ char **con)
-+{
-+ int fd;
-+
-+ if (!selinux_enabled)
-+ return FALSE;
-+
-+ _dbus_assert (connection != NULL);
-+
-+ if (!dbus_connection_get_unix_fd (connection, &fd))
-+ {
-+ _dbus_verbose ("Failed to get file descriptor of socket.\n");
-+ return FALSE;
-+ }
-+
-+ if (getpeercon (fd, con) < 0)
-+ {
-+ _dbus_verbose ("Error getting context of socket peer: %s\n",
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ _dbus_verbose ("Successfully read connection context.\n");
-+ return TRUE;
-+}
-+#endif /* HAVE_SELINUX */
-+
-+/**
-+ * Read the SELinux ID from the connection.
-+ *
-+ * @param connection the connection to read from
-+ * @returns the SID if successfully determined, #NULL otherwise.
-+ */
-+BusSELinuxID*
-+bus_selinux_init_connection_id (DBusConnection *connection,
-+ DBusError *error)
-+{
-+#ifdef HAVE_SELINUX
-+ char *con;
-+ security_id_t sid;
-+
-+ if (!selinux_enabled)
-+ return NULL;
-+
-+ if (!bus_connection_read_selinux_context (connection, &con))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Failed to read an SELinux context from connection");
-+ _dbus_verbose ("Error getting peer context.\n");
-+ return NULL;
-+ }
-+
-+ _dbus_verbose ("Converting context to SID to store on connection\n");
-+
-+ if (avc_context_to_sid (con, &sid) < 0)
-+ {
-+ if (errno == ENOMEM)
-+ BUS_SET_OOM (error);
-+ else
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Error getting SID from context \"%s\": %s\n",
-+ con, _dbus_strerror (errno));
-+
-+ _dbus_warn ("Error getting SID from context \"%s\": %s\n",
-+ con, _dbus_strerror (errno));
-+
-+ freecon (con);
-+ return NULL;
-+ }
-+
-+ freecon (con);
-+ return BUS_SID_FROM_SELINUX (sid);
-+#else
-+ return NULL;
-+#endif /* HAVE_SELINUX */
-+}
-+
-+
-+/**
-+ * Function for freeing hash table data. These SIDs
-+ * should no longer be referenced.
-+ */
-+static void
-+bus_selinux_id_table_free_value (BusSELinuxID *sid)
-+{
-+#ifdef HAVE_SELINUX
-+ /* NULL sometimes due to how DBusHashTable works */
-+ if (sid)
-+ bus_selinux_id_unref (sid);
-+#endif /* HAVE_SELINUX */
-+}
-+
-+/**
-+ * Creates a new table mapping service names to security ID.
-+ * A security ID is a "compiled" security context, a security
-+ * context is just a string.
-+ *
-+ * @returns the new table or #NULL if no memory
-+ */
-+DBusHashTable*
-+bus_selinux_id_table_new (void)
-+{
-+ return _dbus_hash_table_new (DBUS_HASH_STRING,
-+ (DBusFreeFunction) dbus_free,
-+ (DBusFreeFunction) bus_selinux_id_table_free_value);
-+}
-+
-+/**
-+ * Hashes a service name and service context into the service SID
-+ * table as a string and a SID.
-+ *
-+ * @param service_name is the name of the service.
-+ * @param service_context is the context of the service.
-+ * @param service_table is the table to hash them into.
-+ * @return #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+bus_selinux_id_table_insert (DBusHashTable *service_table,
-+ const char *service_name,
-+ const char *service_context)
-+{
-+#ifdef HAVE_SELINUX
-+ dbus_bool_t retval;
-+ security_id_t sid;
-+ char *key;
-+
-+ if (!selinux_enabled)
-+ return TRUE;
-+
-+ sid = SECSID_WILD;
-+ retval = FALSE;
-+
-+ key = _dbus_strdup (service_name);
-+ if (key == NULL)
-+ return retval;
-+
-+ if (avc_context_to_sid ((char *) service_context, &sid) < 0)
-+ {
-+ if (errno == ENOMEM)
-+ return FALSE;
-+ _dbus_warn ("Error getting SID from context \"%s\": %s\n",
-+ (char *) service_context,
-+ _dbus_strerror (errno));
-+ goto out;
-+ }
-+
-+ if (!_dbus_hash_table_insert_string (service_table,
-+ key,
-+ BUS_SID_FROM_SELINUX (sid)))
-+ goto out;
-+
-+ _dbus_verbose ("Parsed \tservice: %s \n\t\tcontext: %s\n",
-+ key,
-+ sid->ctx);
-+
-+ /* These are owned by the hash, so clear them to avoid unref */
-+ key = NULL;
-+ sid = SECSID_WILD;
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (sid != SECSID_WILD)
-+ sidput (sid);
-+
-+ if (key)
-+ dbus_free (key);
-+
-+ return retval;
-+#else
-+ return TRUE;
-+#endif /* HAVE_SELINUX */
-+}
-+
-+
-+/**
-+ * Find the security identifier associated with a particular service
-+ * name. Return a pointer to this SID, or #NULL/SECSID_WILD if the
-+ * service is not found in the hash table. This should be nearly a
-+ * constant time operation. If SELinux support is not available,
-+ * always return NULL.
-+ *
-+ * @param service_table the hash table to check for service name.
-+ * @param service_name the name of the service to look for.
-+ * @returns the SELinux ID associated with the service
-+ */
-+BusSELinuxID*
-+bus_selinux_id_table_lookup (DBusHashTable *service_table,
-+ const DBusString *service_name)
-+{
-+#ifdef HAVE_SELINUX
-+ security_id_t sid;
-+
-+ sid = SECSID_WILD; /* default context */
-+
-+ if (!selinux_enabled)
-+ return NULL;
-+
-+ _dbus_verbose ("Looking up service SID for %s\n",
-+ _dbus_string_get_const_data (service_name));
-+
-+ sid = _dbus_hash_table_lookup_string (service_table,
-+ _dbus_string_get_const_data (service_name));
-+
-+ if (sid == SECSID_WILD)
-+ _dbus_verbose ("Service %s not found\n",
-+ _dbus_string_get_const_data (service_name));
-+ else
-+ _dbus_verbose ("Service %s found\n",
-+ _dbus_string_get_const_data (service_name));
-+
-+ return BUS_SID_FROM_SELINUX (sid);
-+#endif /* HAVE_SELINUX */
-+ return NULL;
-+}
-+
-+/**
-+ * Get the SELinux policy root. This is used to find the D-BUS
-+ * specific config file within the policy.
-+ */
-+const char *
-+bus_selinux_get_policy_root (void)
-+{
-+#ifdef HAVE_SELINUX
-+ return selinux_policy_root ();
-+#else
-+ return NULL;
-+#endif /* HAVE_SELINUX */
-+}
-+
-+/**
-+ * For debugging: Print out the current hash table of service SIDs.
-+ */
-+void
-+bus_selinux_id_table_print (DBusHashTable *service_table)
-+{
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+#ifdef HAVE_SELINUX
-+ DBusHashIter iter;
-+
-+ if (!selinux_enabled)
-+ return;
-+
-+ _dbus_verbose ("Service SID Table:\n");
-+ _dbus_hash_iter_init (service_table, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ const char *key = _dbus_hash_iter_get_string_key (&iter);
-+ security_id_t sid = _dbus_hash_iter_get_value (&iter);
-+ _dbus_verbose ("The key is %s\n", key);
-+ _dbus_verbose ("The context is %s\n", sid->ctx);
-+ _dbus_verbose ("The refcount is %d\n", sid->refcnt);
-+ }
-+#endif /* HAVE_SELINUX */
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+}
-+
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+#ifdef HAVE_SELINUX
-+/**
-+ * Print out some AVC statistics.
-+ */
-+static void
-+bus_avc_print_stats (void)
-+{
-+ struct avc_cache_stats cstats;
-+
-+ if (!selinux_enabled)
-+ return;
-+
-+ _dbus_verbose ("AVC Statistics:\n");
-+ avc_cache_stats (&cstats);
-+ avc_av_stats ();
-+ _dbus_verbose ("AVC Cache Statistics:\n");
-+ _dbus_verbose ("Entry lookups: %d\n", cstats.entry_lookups);
-+ _dbus_verbose ("Entry hits: %d\n", cstats.entry_hits);
-+ _dbus_verbose ("Entry misses %d\n", cstats.entry_misses);
-+ _dbus_verbose ("Entry discards: %d\n", cstats.entry_discards);
-+ _dbus_verbose ("CAV lookups: %d\n", cstats.cav_lookups);
-+ _dbus_verbose ("CAV hits: %d\n", cstats.cav_hits);
-+ _dbus_verbose ("CAV probes: %d\n", cstats.cav_probes);
-+ _dbus_verbose ("CAV misses: %d\n", cstats.cav_misses);
-+}
-+#endif /* HAVE_SELINUX */
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+
-+
-+/**
-+ * Destroy the AVC before we terminate.
-+ */
-+void
-+bus_selinux_shutdown (void)
-+{
-+#ifdef HAVE_SELINUX
-+ if (!selinux_enabled)
-+ return;
-+
-+ _dbus_verbose ("AVC shutdown\n");
-+
-+ if (bus_sid != SECSID_WILD)
-+ {
-+ sidput (bus_sid);
-+ bus_sid = SECSID_WILD;
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ bus_avc_print_stats ();
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+
-+ avc_destroy ();
-+ }
-+#endif /* HAVE_SELINUX */
-+}
-+
-diff -Naur dbus-0.61.orig/bus/selinux.h dbus-0.61/bus/selinux.h
---- dbus-0.61.orig/bus/selinux.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/selinux.h 2005-07-16 19:34:08.000000000 +0200
-@@ -0,0 +1,71 @@
-+/* selinux.h SELinux security check headers for D-BUS
-+ *
-+ * Author: Matthew Rickard <mjricka at epoch.ncsc.mil>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_SELINUX_H
-+#define BUS_SELINUX_H
-+
-+#include <dbus/dbus-hash.h>
-+#include <dbus/dbus-connection.h>
-+#include "services.h"
-+
-+dbus_bool_t bus_selinux_pre_init (void);
-+dbus_bool_t bus_selinux_full_init(void);
-+void bus_selinux_shutdown (void);
-+
-+dbus_bool_t bus_selinux_enabled (void);
-+
-+void bus_selinux_id_ref (BusSELinuxID *sid);
-+void bus_selinux_id_unref (BusSELinuxID *sid);
-+
-+DBusHashTable* bus_selinux_id_table_new (void);
-+BusSELinuxID* bus_selinux_id_table_lookup (DBusHashTable *service_table,
-+ const DBusString *service_name);
-+dbus_bool_t bus_selinux_id_table_insert (DBusHashTable *service_table,
-+ const char *service_name,
-+ const char *service_context);
-+void bus_selinux_id_table_print (DBusHashTable *service_table);
-+const char* bus_selinux_get_policy_root (void);
-+
-+dbus_bool_t bus_selinux_append_context (DBusMessage *message,
-+ BusSELinuxID *context,
-+ DBusError *error);
-+
-+dbus_bool_t bus_selinux_allows_acquire_service (DBusConnection *connection,
-+ BusSELinuxID *service_sid,
-+ const char *service_name,
-+ DBusError *error);
-+
-+dbus_bool_t bus_selinux_allows_send (DBusConnection *sender,
-+ DBusConnection *proposed_recipient,
-+ const char *msgtype, /* Supplementary audit data */
-+ const char *interface,
-+ const char *member,
-+ const char *error_name,
-+ const char *destination,
-+ DBusError *error);
-+
-+BusSELinuxID* bus_selinux_init_connection_id (DBusConnection *connection,
-+ DBusError *error);
-+
-+
-+
-+#endif /* BUS_SELINUX_H */
-diff -Naur dbus-0.61.orig/bus/services.c dbus-0.61/bus/services.c
---- dbus-0.61.orig/bus/services.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/services.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,1281 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* services.c Service management
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <dbus/dbus-hash.h>
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-mempool.h>
-+#include <dbus/dbus-marshal-validate.h>
-+
-+#include "driver.h"
-+#include "services.h"
-+#include "connection.h"
-+#include "utils.h"
-+#include "activation.h"
-+#include "policy.h"
-+#include "bus.h"
-+#include "selinux.h"
-+
-+struct BusService
-+{
-+ int refcount;
-+
-+ BusRegistry *registry;
-+ char *name;
-+ DBusList *owners;
-+};
-+
-+struct BusOwner
-+{
-+ int refcount;
-+
-+ BusService *service;
-+ DBusConnection *conn;
-+
-+ unsigned int allow_replacement : 1;
-+ unsigned int do_not_queue : 1;
-+};
-+
-+struct BusRegistry
-+{
-+ int refcount;
-+
-+ BusContext *context;
-+
-+ DBusHashTable *service_hash;
-+ DBusMemPool *service_pool;
-+ DBusMemPool *owner_pool;
-+
-+ DBusHashTable *service_sid_table;
-+};
-+
-+BusRegistry*
-+bus_registry_new (BusContext *context)
-+{
-+ BusRegistry *registry;
-+
-+ registry = dbus_new0 (BusRegistry, 1);
-+ if (registry == NULL)
-+ return NULL;
-+
-+ registry->refcount = 1;
-+ registry->context = context;
-+
-+ registry->service_hash = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ NULL, NULL);
-+ if (registry->service_hash == NULL)
-+ goto failed;
-+
-+ registry->service_pool = _dbus_mem_pool_new (sizeof (BusService),
-+ TRUE);
-+
-+ if (registry->service_pool == NULL)
-+ goto failed;
-+
-+ registry->owner_pool = _dbus_mem_pool_new (sizeof (BusOwner),
-+ TRUE);
-+
-+ if (registry->owner_pool == NULL)
-+ goto failed;
-+
-+ registry->service_sid_table = NULL;
-+
-+ return registry;
-+
-+ failed:
-+ bus_registry_unref (registry);
-+ return NULL;
-+}
-+
-+BusRegistry *
-+bus_registry_ref (BusRegistry *registry)
-+{
-+ _dbus_assert (registry->refcount > 0);
-+ registry->refcount += 1;
-+
-+ return registry;
-+}
-+
-+void
-+bus_registry_unref (BusRegistry *registry)
-+{
-+ _dbus_assert (registry->refcount > 0);
-+ registry->refcount -= 1;
-+
-+ if (registry->refcount == 0)
-+ {
-+ if (registry->service_hash)
-+ _dbus_hash_table_unref (registry->service_hash);
-+ if (registry->service_pool)
-+ _dbus_mem_pool_free (registry->service_pool);
-+ if (registry->owner_pool)
-+ _dbus_mem_pool_free (registry->owner_pool);
-+ if (registry->service_sid_table)
-+ _dbus_hash_table_unref (registry->service_sid_table);
-+
-+ dbus_free (registry);
-+ }
-+}
-+
-+BusService*
-+bus_registry_lookup (BusRegistry *registry,
-+ const DBusString *service_name)
-+{
-+ BusService *service;
-+
-+ service = _dbus_hash_table_lookup_string (registry->service_hash,
-+ _dbus_string_get_const_data (service_name));
-+
-+ return service;
-+}
-+
-+static DBusList *
-+_bus_service_find_owner_link (BusService *service,
-+ DBusConnection *connection)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&service->owners);
-+
-+ while (link != NULL)
-+ {
-+ BusOwner *bus_owner;
-+
-+ bus_owner = (BusOwner *) link->data;
-+ if (bus_owner->conn == connection)
-+ break;
-+
-+ link = _dbus_list_get_next_link (&service->owners, link);
-+ }
-+
-+ return link;
-+}
-+
-+static void
-+bus_owner_set_flags (BusOwner *owner,
-+ dbus_uint32_t flags)
-+{
-+ owner->allow_replacement =
-+ (flags & DBUS_NAME_FLAG_ALLOW_REPLACEMENT) != FALSE;
-+
-+ owner->do_not_queue =
-+ (flags & DBUS_NAME_FLAG_DO_NOT_QUEUE) != FALSE;
-+}
-+
-+static BusOwner *
-+bus_owner_new (BusService *service,
-+ DBusConnection *conn,
-+ dbus_uint32_t flags)
-+{
-+ BusOwner *result;
-+
-+ result = _dbus_mem_pool_alloc (service->registry->owner_pool);
-+ if (result != NULL)
-+ {
-+ result->refcount = 1;
-+ /* don't ref the connection because we don't want
-+ to block the connection from going away.
-+ transactions take care of reffing the connection
-+ but we need to use refcounting on the owner
-+ so that the owner does not get freed before
-+ we can deref the connection in the transaction
-+ */
-+ result->conn = conn;
-+ result->service = service;
-+
-+ if (!bus_connection_add_owned_service (conn, service))
-+ {
-+ _dbus_mem_pool_dealloc (service->registry->owner_pool, result);
-+ return NULL;
-+ }
-+
-+ bus_owner_set_flags (result, flags);
-+ }
-+ return result;
-+}
-+
-+static BusOwner *
-+bus_owner_ref (BusOwner *owner)
-+{
-+ _dbus_assert (owner->refcount > 0);
-+ owner->refcount += 1;
-+
-+ return owner;
-+}
-+
-+static void
-+bus_owner_unref (BusOwner *owner)
-+{
-+ _dbus_assert (owner->refcount > 0);
-+ owner->refcount -= 1;
-+
-+ if (owner->refcount == 0)
-+ {
-+ bus_connection_remove_owned_service (owner->conn, owner->service);
-+ _dbus_mem_pool_dealloc (owner->service->registry->owner_pool, owner);
-+ }
-+}
-+
-+BusService*
-+bus_registry_ensure (BusRegistry *registry,
-+ const DBusString *service_name,
-+ DBusConnection *owner_connection_if_created,
-+ dbus_uint32_t flags,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ BusService *service;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ _dbus_assert (owner_connection_if_created != NULL);
-+ _dbus_assert (transaction != NULL);
-+
-+ service = _dbus_hash_table_lookup_string (registry->service_hash,
-+ _dbus_string_get_const_data (service_name));
-+ if (service != NULL)
-+ return service;
-+
-+ service = _dbus_mem_pool_alloc (registry->service_pool);
-+ if (service == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ service->registry = registry;
-+ service->refcount = 1;
-+
-+ _dbus_verbose ("copying string %p '%s' to service->name\n",
-+ service_name, _dbus_string_get_const_data (service_name));
-+ if (!_dbus_string_copy_data (service_name, &service->name))
-+ {
-+ _dbus_mem_pool_dealloc (registry->service_pool, service);
-+ BUS_SET_OOM (error);
-+ return NULL;
-+ }
-+ _dbus_verbose ("copied string %p '%s' to '%s'\n",
-+ service_name, _dbus_string_get_const_data (service_name),
-+ service->name);
-+
-+ if (!bus_driver_send_service_owner_changed (service->name,
-+ NULL,
-+ bus_connection_get_name (owner_connection_if_created),
-+ transaction, error))
-+ {
-+ bus_service_unref (service);
-+ return NULL;
-+ }
-+
-+ if (!bus_activation_service_created (bus_context_get_activation (registry->context),
-+ service->name, transaction, error))
-+ {
-+ bus_service_unref (service);
-+ return NULL;
-+ }
-+
-+ if (!bus_service_add_owner (service, owner_connection_if_created, flags,
-+ transaction, error))
-+ {
-+ bus_service_unref (service);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_hash_table_insert_string (registry->service_hash,
-+ service->name,
-+ service))
-+ {
-+ /* The add_owner gets reverted on transaction cancel */
-+ BUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ return service;
-+}
-+
-+void
-+bus_registry_foreach (BusRegistry *registry,
-+ BusServiceForeachFunction function,
-+ void *data)
-+{
-+ DBusHashIter iter;
-+
-+ _dbus_hash_iter_init (registry->service_hash, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ BusService *service = _dbus_hash_iter_get_value (&iter);
-+
-+ (* function) (service, data);
-+ }
-+}
-+
-+dbus_bool_t
-+bus_registry_list_services (BusRegistry *registry,
-+ char ***listp,
-+ int *array_len)
-+{
-+ int i, j, len;
-+ char **retval;
-+ DBusHashIter iter;
-+
-+ len = _dbus_hash_table_get_n_entries (registry->service_hash);
-+ retval = dbus_new (char *, len + 1);
-+
-+ if (retval == NULL)
-+ return FALSE;
-+
-+ _dbus_hash_iter_init (registry->service_hash, &iter);
-+ i = 0;
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ BusService *service = _dbus_hash_iter_get_value (&iter);
-+
-+ retval[i] = _dbus_strdup (service->name);
-+ if (retval[i] == NULL)
-+ goto error;
-+
-+ i++;
-+ }
-+
-+ retval[i] = NULL;
-+
-+ if (array_len)
-+ *array_len = len;
-+
-+ *listp = retval;
-+ return TRUE;
-+
-+ error:
-+ for (j = 0; j < i; j++)
-+ dbus_free (retval[i]);
-+ dbus_free (retval);
-+
-+ return FALSE;
-+}
-+
-+dbus_bool_t
-+bus_registry_acquire_service (BusRegistry *registry,
-+ DBusConnection *connection,
-+ const DBusString *service_name,
-+ dbus_uint32_t flags,
-+ dbus_uint32_t *result,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ dbus_bool_t retval;
-+ DBusConnection *old_owner_conn;
-+ DBusConnection *current_owner_conn;
-+ BusClientPolicy *policy;
-+ BusService *service;
-+ BusActivation *activation;
-+ BusSELinuxID *sid;
-+ BusOwner *primary_owner;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_validate_bus_name (service_name, 0,
-+ _dbus_string_get_length (service_name)))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
-+ "Requested bus name \"%s\" is not valid",
-+ _dbus_string_get_const_data (service_name));
-+
-+ _dbus_verbose ("Attempt to acquire invalid service name\n");
-+
-+ goto out;
-+ }
-+
-+ if (_dbus_string_get_byte (service_name, 0) == ':')
-+ {
-+ /* Not allowed; only base services can start with ':' */
-+ dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
-+ "Cannot acquire a service starting with ':' such as \"%s\"",
-+ _dbus_string_get_const_data (service_name));
-+
-+ _dbus_verbose ("Attempt to acquire invalid base service name \"%s\"",
-+ _dbus_string_get_const_data (service_name));
-+
-+ goto out;
-+ }
-+
-+ policy = bus_connection_get_policy (connection);
-+ _dbus_assert (policy != NULL);
-+
-+ /* Note that if sid is #NULL then the bus's own context gets used
-+ * in bus_connection_selinux_allows_acquire_service()
-+ */
-+ sid = bus_selinux_id_table_lookup (registry->service_sid_table,
-+ service_name);
-+
-+ if (!bus_selinux_allows_acquire_service (connection, sid,
-+ _dbus_string_get_const_data (service_name), error))
-+ {
-+
-+ if (dbus_error_is_set (error) &&
-+ dbus_error_has_name (error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ goto out;
-+ }
-+
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "Connection \"%s\" is not allowed to own the service \"%s\" due "
-+ "to SELinux policy",
-+ bus_connection_is_active (connection) ?
-+ bus_connection_get_name (connection) :
-+ "(inactive)",
-+ _dbus_string_get_const_data (service_name));
-+ goto out;
-+ }
-+
-+ if (!bus_client_policy_check_can_own (policy, connection,
-+ service_name))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
-+ "Connection \"%s\" is not allowed to own the service \"%s\" due "
-+ "to security policies in the configuration file",
-+ bus_connection_is_active (connection) ?
-+ bus_connection_get_name (connection) :
-+ "(inactive)",
-+ _dbus_string_get_const_data (service_name));
-+ goto out;
-+ }
-+
-+ if (bus_connection_get_n_services_owned (connection) >=
-+ bus_context_get_max_services_per_connection (registry->context))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "Connection \"%s\" is not allowed to own more services "
-+ "(increase limits in configuration file if required)",
-+ bus_connection_is_active (connection) ?
-+ bus_connection_get_name (connection) :
-+ "(inactive)");
-+ goto out;
-+ }
-+
-+ service = bus_registry_lookup (registry, service_name);
-+
-+ if (service != NULL)
-+ {
-+ primary_owner = bus_service_get_primary_owner (service);
-+ if (primary_owner != NULL)
-+ old_owner_conn = primary_owner->conn;
-+ else
-+ old_owner_conn = NULL;
-+ }
-+ else
-+ old_owner_conn = NULL;
-+
-+ if (service == NULL)
-+ {
-+ service = bus_registry_ensure (registry,
-+ service_name, connection, flags,
-+ transaction, error);
-+ if (service == NULL)
-+ goto out;
-+ }
-+
-+ primary_owner = bus_service_get_primary_owner (service);
-+ if (primary_owner == NULL)
-+ goto out;
-+
-+ current_owner_conn = primary_owner->conn;
-+
-+ if (old_owner_conn == NULL)
-+ {
-+ _dbus_assert (current_owner_conn == connection);
-+
-+ *result = DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER;
-+ }
-+ else if (old_owner_conn == connection)
-+ {
-+ bus_owner_set_flags (primary_owner, flags);
-+ *result = DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER;
-+ }
-+ else if (((flags & DBUS_NAME_FLAG_DO_NOT_QUEUE) &&
-+ !(bus_service_get_allow_replacement (service))) ||
-+ ((flags & DBUS_NAME_FLAG_DO_NOT_QUEUE) &&
-+ !(flags & DBUS_NAME_FLAG_REPLACE_EXISTING)))
-+ {
-+ DBusList *link;
-+ BusOwner *temp_owner;
-+ /* Since we can't be queued if we are already in the queue
-+ remove us */
-+
-+ link = _bus_service_find_owner_link (service, connection);
-+ if (link != NULL)
-+ {
-+ _dbus_list_unlink (&service->owners, link);
-+ temp_owner = (BusOwner *)link->data;
-+ bus_owner_unref (temp_owner);
-+ _dbus_list_free_link (link);
-+ }
-+
-+ *result = DBUS_REQUEST_NAME_REPLY_EXISTS;
-+ }
-+ else if (!(flags & DBUS_NAME_FLAG_DO_NOT_QUEUE) &&
-+ (!(flags & DBUS_NAME_FLAG_REPLACE_EXISTING) ||
-+ !(bus_service_get_allow_replacement (service))))
-+ {
-+ /* Queue the connection */
-+ if (!bus_service_add_owner (service, connection,
-+ flags,
-+ transaction, error))
-+ goto out;
-+
-+ *result = DBUS_REQUEST_NAME_REPLY_IN_QUEUE;
-+ }
-+ else
-+ {
-+ /* Replace the current owner */
-+
-+ /* We enqueue the new owner and remove the first one because
-+ * that will cause NameAcquired and NameLost messages to
-+ * be sent.
-+ */
-+
-+ if (!bus_service_add_owner (service, connection,
-+ flags,
-+ transaction, error))
-+ goto out;
-+
-+ if (primary_owner->do_not_queue)
-+ {
-+ if (!bus_service_remove_owner (service, old_owner_conn,
-+ transaction, error))
-+ goto out;
-+ }
-+ else
-+ {
-+ if (!bus_service_swap_owner (service, old_owner_conn,
-+ transaction, error))
-+ goto out;
-+ }
-+
-+
-+ _dbus_assert (connection == bus_service_get_primary_owner (service)->conn);
-+ *result = DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER;
-+ }
-+
-+ activation = bus_context_get_activation (registry->context);
-+ retval = bus_activation_send_pending_auto_activation_messages (activation,
-+ service,
-+ transaction,
-+ error);
-+
-+ out:
-+ return retval;
-+}
-+
-+dbus_bool_t
-+bus_registry_release_service (BusRegistry *registry,
-+ DBusConnection *connection,
-+ const DBusString *service_name,
-+ dbus_uint32_t *result,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ dbus_bool_t retval;
-+ BusService *service;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_validate_bus_name (service_name, 0,
-+ _dbus_string_get_length (service_name)))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
-+ "Given bus name \"%s\" is not valid",
-+ _dbus_string_get_const_data (service_name));
-+
-+ _dbus_verbose ("Attempt to release invalid service name\n");
-+
-+ goto out;
-+ }
-+
-+ if (_dbus_string_get_byte (service_name, 0) == ':')
-+ {
-+ /* Not allowed; the base service name cannot be created or released */
-+ dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
-+ "Cannot release a service starting with ':' such as \"%s\"",
-+ _dbus_string_get_const_data (service_name));
-+
-+ _dbus_verbose ("Attempt to release invalid base service name \"%s\"",
-+ _dbus_string_get_const_data (service_name));
-+
-+ goto out;
-+ }
-+
-+ service = bus_registry_lookup (registry, service_name);
-+
-+ if (service == NULL)
-+ {
-+ *result = DBUS_RELEASE_NAME_REPLY_NON_EXISTENT;
-+ }
-+ else if (!bus_service_has_owner (service, connection))
-+ {
-+ *result = DBUS_RELEASE_NAME_REPLY_NOT_OWNER;
-+ }
-+ else
-+ {
-+ if (!bus_service_remove_owner (service, connection,
-+ transaction, error))
-+ goto out;
-+
-+ _dbus_assert (!bus_service_has_owner (service, connection));
-+ *result = DBUS_RELEASE_NAME_REPLY_RELEASED;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ return retval;
-+}
-+
-+dbus_bool_t
-+bus_registry_set_service_context_table (BusRegistry *registry,
-+ DBusHashTable *table)
-+{
-+ DBusHashTable *new_table;
-+ DBusHashIter iter;
-+
-+ new_table = bus_selinux_id_table_new ();
-+ if (!new_table)
-+ return FALSE;
-+
-+ _dbus_hash_iter_init (table, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ const char *service = _dbus_hash_iter_get_string_key (&iter);
-+ const char *context = _dbus_hash_iter_get_value (&iter);
-+
-+ if (!bus_selinux_id_table_insert (new_table,
-+ service,
-+ context))
-+ return FALSE;
-+ }
-+
-+ if (registry->service_sid_table)
-+ _dbus_hash_table_unref (registry->service_sid_table);
-+ registry->service_sid_table = new_table;
-+ return TRUE;
-+}
-+
-+static void
-+bus_service_unlink_owner (BusService *service,
-+ BusOwner *owner)
-+{
-+ _dbus_list_remove_last (&service->owners, owner);
-+ bus_owner_unref (owner);
-+}
-+
-+static void
-+bus_service_unlink (BusService *service)
-+{
-+ _dbus_assert (service->owners == NULL);
-+
-+ /* the service may not be in the hash, if
-+ * the failure causing transaction cancel
-+ * was in the right place, but that's OK
-+ */
-+ _dbus_hash_table_remove_string (service->registry->service_hash,
-+ service->name);
-+
-+ bus_service_unref (service);
-+}
-+
-+static void
-+bus_service_relink (BusService *service,
-+ DBusPreallocatedHash *preallocated)
-+{
-+ _dbus_assert (service->owners == NULL);
-+ _dbus_assert (preallocated != NULL);
-+
-+ _dbus_hash_table_insert_string_preallocated (service->registry->service_hash,
-+ preallocated,
-+ service->name,
-+ service);
-+
-+ bus_service_ref (service);
-+}
-+
-+/**
-+ * Data used to represent an ownership cancellation in
-+ * a bus transaction.
-+ */
-+typedef struct
-+{
-+ BusOwner *owner; /**< the owner */
-+ BusService *service; /**< service to cancel ownership of */
-+} OwnershipCancelData;
-+
-+static void
-+cancel_ownership (void *data)
-+{
-+ OwnershipCancelData *d = data;
-+
-+ /* We don't need to send messages notifying of these
-+ * changes, since we're reverting something that was
-+ * cancelled (effectively never really happened)
-+ */
-+ bus_service_unlink_owner (d->service, d->owner);
-+
-+ if (d->service->owners == NULL)
-+ bus_service_unlink (d->service);
-+}
-+
-+static void
-+free_ownership_cancel_data (void *data)
-+{
-+ OwnershipCancelData *d = data;
-+
-+ dbus_connection_unref (d->owner->conn);
-+ bus_owner_unref (d->owner);
-+ bus_service_unref (d->service);
-+
-+ dbus_free (d);
-+}
-+
-+static dbus_bool_t
-+add_cancel_ownership_to_transaction (BusTransaction *transaction,
-+ BusService *service,
-+ BusOwner *owner)
-+{
-+ OwnershipCancelData *d;
-+
-+ d = dbus_new (OwnershipCancelData, 1);
-+ if (d == NULL)
-+ return FALSE;
-+
-+ d->service = service;
-+ d->owner = owner;
-+
-+ if (!bus_transaction_add_cancel_hook (transaction, cancel_ownership, d,
-+ free_ownership_cancel_data))
-+ {
-+ dbus_free (d);
-+ return FALSE;
-+ }
-+
-+ bus_service_ref (d->service);
-+ bus_owner_ref (owner);
-+ dbus_connection_ref (d->owner->conn);
-+
-+ return TRUE;
-+}
-+
-+/* this function is self-cancelling if you cancel the transaction */
-+dbus_bool_t
-+bus_service_add_owner (BusService *service,
-+ DBusConnection *connection,
-+ dbus_uint32_t flags,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ BusOwner *bus_owner;
-+ DBusList *bus_owner_link;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* Send service acquired message first, OOM will result
-+ * in cancelling the transaction
-+ */
-+ if (service->owners == NULL)
-+ {
-+ if (!bus_driver_send_service_acquired (connection, service->name, transaction, error))
-+ return FALSE;
-+ }
-+
-+ bus_owner_link = _bus_service_find_owner_link (service, connection);
-+
-+ if (bus_owner_link == NULL)
-+ {
-+ bus_owner = bus_owner_new (service, connection, flags);
-+ if (bus_owner == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ bus_owner_set_flags (bus_owner, flags);
-+ if (!(flags & DBUS_NAME_FLAG_REPLACE_EXISTING) || service->owners == NULL)
-+ {
-+ if (!_dbus_list_append (&service->owners,
-+ bus_owner))
-+ {
-+ bus_owner_unref (bus_owner);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ if (!_dbus_list_insert_after (&service->owners,
-+ _dbus_list_get_first_link (&service->owners),
-+ bus_owner))
-+ {
-+ bus_owner_unref (bus_owner);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ /* Update the link since we are already in the queue
-+ * No need for operations that can produce OOM
-+ */
-+
-+ bus_owner = (BusOwner *) bus_owner_link->data;
-+ if (flags & DBUS_NAME_FLAG_REPLACE_EXISTING)
-+ {
-+ DBusList *link;
-+ _dbus_list_unlink (&service->owners, bus_owner_link);
-+ link = _dbus_list_get_first_link (&service->owners);
-+ _dbus_assert (link != NULL);
-+
-+ _dbus_list_insert_after_link (&service->owners, link, bus_owner_link);
-+ }
-+
-+ bus_owner_set_flags (bus_owner, flags);
-+ return TRUE;
-+ }
-+
-+ if (!add_cancel_ownership_to_transaction (transaction,
-+ service,
-+ bus_owner))
-+ {
-+ bus_service_unlink_owner (service, bus_owner);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+typedef struct
-+{
-+ BusOwner *owner;
-+ BusService *service;
-+ BusOwner *before_owner; /* restore to position before this connection in owners list */
-+ DBusList *owner_link;
-+ DBusList *service_link;
-+ DBusPreallocatedHash *hash_entry;
-+} OwnershipRestoreData;
-+
-+static void
-+restore_ownership (void *data)
-+{
-+ OwnershipRestoreData *d = data;
-+ DBusList *link;
-+
-+ _dbus_assert (d->service_link != NULL);
-+ _dbus_assert (d->owner_link != NULL);
-+
-+ if (d->service->owners == NULL)
-+ {
-+ _dbus_assert (d->hash_entry != NULL);
-+ bus_service_relink (d->service, d->hash_entry);
-+ }
-+ else
-+ {
-+ _dbus_assert (d->hash_entry == NULL);
-+ }
-+
-+ /* We don't need to send messages notifying of these
-+ * changes, since we're reverting something that was
-+ * cancelled (effectively never really happened)
-+ */
-+ link = _dbus_list_get_first_link (&d->service->owners);
-+ while (link != NULL)
-+ {
-+ if (link->data == d->before_owner)
-+ break;
-+
-+ link = _dbus_list_get_next_link (&d->service->owners, link);
-+ }
-+
-+ _dbus_list_insert_before_link (&d->service->owners, link, d->owner_link);
-+
-+ /* Note that removing then restoring this changes the order in which
-+ * ServiceDeleted messages are sent on destruction of the
-+ * connection. This should be OK as the only guarantee there is
-+ * that the base service is destroyed last, and we never even
-+ * tentatively remove the base service.
-+ */
-+ bus_connection_add_owned_service_link (d->owner->conn, d->service_link);
-+
-+ d->hash_entry = NULL;
-+ d->service_link = NULL;
-+ d->owner_link = NULL;
-+}
-+
-+static void
-+free_ownership_restore_data (void *data)
-+{
-+ OwnershipRestoreData *d = data;
-+
-+ if (d->service_link)
-+ _dbus_list_free_link (d->service_link);
-+ if (d->owner_link)
-+ _dbus_list_free_link (d->owner_link);
-+ if (d->hash_entry)
-+ _dbus_hash_table_free_preallocated_entry (d->service->registry->service_hash,
-+ d->hash_entry);
-+
-+ dbus_connection_unref (d->owner->conn);
-+ bus_owner_unref (d->owner);
-+ bus_service_unref (d->service);
-+
-+ dbus_free (d);
-+}
-+
-+static dbus_bool_t
-+add_restore_ownership_to_transaction (BusTransaction *transaction,
-+ BusService *service,
-+ BusOwner *owner)
-+{
-+ OwnershipRestoreData *d;
-+ DBusList *link;
-+
-+ d = dbus_new (OwnershipRestoreData, 1);
-+ if (d == NULL)
-+ return FALSE;
-+
-+ d->service = service;
-+ d->owner = owner;
-+ d->service_link = _dbus_list_alloc_link (service);
-+ d->owner_link = _dbus_list_alloc_link (owner);
-+ d->hash_entry = _dbus_hash_table_preallocate_entry (service->registry->service_hash);
-+
-+ bus_service_ref (d->service);
-+ bus_owner_ref (d->owner);
-+ dbus_connection_ref (d->owner->conn);
-+
-+ d->before_owner = NULL;
-+ link = _dbus_list_get_first_link (&service->owners);
-+ while (link != NULL)
-+ {
-+ if (link->data == owner)
-+ {
-+ link = _dbus_list_get_next_link (&service->owners, link);
-+
-+ if (link)
-+ d->before_owner = link->data;
-+
-+ break;
-+ }
-+
-+ link = _dbus_list_get_next_link (&service->owners, link);
-+ }
-+
-+ if (d->service_link == NULL ||
-+ d->owner_link == NULL ||
-+ d->hash_entry == NULL ||
-+ !bus_transaction_add_cancel_hook (transaction, restore_ownership, d,
-+ free_ownership_restore_data))
-+ {
-+ free_ownership_restore_data (d);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_service_swap_owner (BusService *service,
-+ DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ DBusList *swap_link;
-+ BusOwner *primary_owner;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* We send out notifications before we do any work we
-+ * might have to undo if the notification-sending failed
-+ */
-+
-+ /* Send service lost message */
-+ primary_owner = bus_service_get_primary_owner (service);
-+ if (primary_owner == NULL || primary_owner->conn != connection)
-+ _dbus_assert_not_reached ("Tried to swap a non primary owner");
-+
-+
-+ if (!bus_driver_send_service_lost (connection, service->name,
-+ transaction, error))
-+ return FALSE;
-+
-+ if (service->owners == NULL)
-+ {
-+ _dbus_assert_not_reached ("Tried to swap owner of a service that has no owners");
-+ }
-+ else if (_dbus_list_length_is_one (&service->owners))
-+ {
-+ _dbus_assert_not_reached ("Tried to swap owner of a service that has no other owners in the queue");
-+ }
-+ else
-+ {
-+ DBusList *link;
-+ BusOwner *new_owner;
-+ DBusConnection *new_owner_conn;
-+ link = _dbus_list_get_first_link (&service->owners);
-+ _dbus_assert (link != NULL);
-+ link = _dbus_list_get_next_link (&service->owners, link);
-+ _dbus_assert (link != NULL);
-+
-+ new_owner = (BusOwner *)link->data;
-+ new_owner_conn = new_owner->conn;
-+
-+ if (!bus_driver_send_service_owner_changed (service->name,
-+ bus_connection_get_name (connection),
-+ bus_connection_get_name (new_owner_conn),
-+ transaction, error))
-+ return FALSE;
-+
-+ /* This will be our new owner */
-+ if (!bus_driver_send_service_acquired (new_owner_conn,
-+ service->name,
-+ transaction,
-+ error))
-+ return FALSE;
-+ }
-+
-+ if (!add_restore_ownership_to_transaction (transaction, service, primary_owner))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ /* unlink the primary and make it the second link */
-+ swap_link = _dbus_list_get_first_link (&service->owners);
-+ _dbus_list_unlink (&service->owners, swap_link);
-+
-+ _dbus_list_insert_after_link (&service->owners,
-+ _dbus_list_get_first_link (&service->owners),
-+ swap_link);
-+
-+ return TRUE;
-+}
-+
-+/* this function is self-cancelling if you cancel the transaction */
-+dbus_bool_t
-+bus_service_remove_owner (BusService *service,
-+ DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusError *error)
-+{
-+ BusOwner *primary_owner;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* We send out notifications before we do any work we
-+ * might have to undo if the notification-sending failed
-+ */
-+
-+ /* Send service lost message */
-+ primary_owner = bus_service_get_primary_owner (service);
-+ if (primary_owner != NULL && primary_owner->conn == connection)
-+ {
-+ if (!bus_driver_send_service_lost (connection, service->name,
-+ transaction, error))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ /* if we are not the primary owner then just remove us from the queue */
-+ DBusList *link;
-+ BusOwner *temp_owner;
-+
-+ link = _bus_service_find_owner_link (service, connection);
-+ _dbus_list_unlink (&service->owners, link);
-+ temp_owner = (BusOwner *)link->data;
-+ bus_owner_unref (temp_owner);
-+ _dbus_list_free_link (link);
-+
-+ return TRUE;
-+ }
-+
-+ if (service->owners == NULL)
-+ {
-+ _dbus_assert_not_reached ("Tried to remove owner of a service that has no owners");
-+ }
-+ else if (_dbus_list_length_is_one (&service->owners))
-+ {
-+ if (!bus_driver_send_service_owner_changed (service->name,
-+ bus_connection_get_name (connection),
-+ NULL,
-+ transaction, error))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ DBusList *link;
-+ BusOwner *new_owner;
-+ DBusConnection *new_owner_conn;
-+ link = _dbus_list_get_first_link (&service->owners);
-+ _dbus_assert (link != NULL);
-+ link = _dbus_list_get_next_link (&service->owners, link);
-+ _dbus_assert (link != NULL);
-+
-+ new_owner = (BusOwner *)link->data;
-+ new_owner_conn = new_owner->conn;
-+
-+ if (!bus_driver_send_service_owner_changed (service->name,
-+ bus_connection_get_name (connection),
-+ bus_connection_get_name (new_owner_conn),
-+ transaction, error))
-+ return FALSE;
-+
-+ /* This will be our new owner */
-+ if (!bus_driver_send_service_acquired (new_owner_conn,
-+ service->name,
-+ transaction,
-+ error))
-+ return FALSE;
-+ }
-+
-+ if (!add_restore_ownership_to_transaction (transaction, service, primary_owner))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ bus_service_unlink_owner (service, primary_owner);
-+
-+ if (service->owners == NULL)
-+ bus_service_unlink (service);
-+
-+ return TRUE;
-+}
-+
-+BusService *
-+bus_service_ref (BusService *service)
-+{
-+ _dbus_assert (service->refcount > 0);
-+
-+ service->refcount += 1;
-+
-+ return service;
-+}
-+
-+void
-+bus_service_unref (BusService *service)
-+{
-+ _dbus_assert (service->refcount > 0);
-+
-+ service->refcount -= 1;
-+
-+ if (service->refcount == 0)
-+ {
-+ _dbus_assert (service->owners == NULL);
-+
-+ dbus_free (service->name);
-+ _dbus_mem_pool_dealloc (service->registry->service_pool, service);
-+ }
-+}
-+
-+DBusConnection *
-+bus_service_get_primary_owners_connection (BusService *service)
-+{
-+ BusOwner *owner;
-+
-+ owner = bus_service_get_primary_owner (service);
-+
-+ if (owner != NULL)
-+ return owner->conn;
-+ else
-+ return NULL;
-+}
-+
-+BusOwner*
-+bus_service_get_primary_owner (BusService *service)
-+{
-+ return _dbus_list_get_first (&service->owners);
-+}
-+
-+const char*
-+bus_service_get_name (BusService *service)
-+{
-+ return service->name;
-+}
-+
-+dbus_bool_t
-+bus_service_get_allow_replacement (BusService *service)
-+{
-+ BusOwner *owner;
-+ DBusList *link;
-+
-+ _dbus_assert (service->owners != NULL);
-+
-+ link = _dbus_list_get_first_link (&service->owners);
-+ owner = (BusOwner *) link->data;
-+
-+ return owner->allow_replacement;
-+}
-+
-+dbus_bool_t
-+bus_service_has_owner (BusService *service,
-+ DBusConnection *connection)
-+{
-+ DBusList *link;
-+
-+ link = _bus_service_find_owner_link (service, connection);
-+
-+ if (link == NULL)
-+ return FALSE;
-+ else
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_service_list_queued_owners (BusService *service,
-+ DBusList **return_list,
-+ DBusError *error)
-+{
-+ DBusList *link;
-+
-+ _dbus_assert (*return_list == NULL);
-+
-+ link = _dbus_list_get_first_link (&service->owners);
-+ _dbus_assert (link != NULL);
-+
-+ while (link != NULL)
-+ {
-+ BusOwner *owner;
-+ const char *uname;
-+
-+ owner = (BusOwner *) link->data;
-+ uname = bus_connection_get_name (owner->conn);
-+
-+ if (!_dbus_list_append (return_list, uname))
-+ goto oom;
-+
-+ link = _dbus_list_get_next_link (&service->owners, link);
-+ }
-+
-+ return TRUE;
-+
-+ oom:
-+ _dbus_list_clear (return_list);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+}
-diff -Naur dbus-0.61.orig/bus/services.h dbus-0.61/bus/services.h
---- dbus-0.61.orig/bus/services.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/services.h 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,94 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* services.h Service management
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_SERVICES_H
-+#define BUS_SERVICES_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-hash.h>
-+#include "connection.h"
-+#include "bus.h"
-+
-+typedef void (* BusServiceForeachFunction) (BusService *service,
-+ void *data);
-+
-+BusRegistry* bus_registry_new (BusContext *context);
-+BusRegistry* bus_registry_ref (BusRegistry *registry);
-+void bus_registry_unref (BusRegistry *registry);
-+BusService* bus_registry_lookup (BusRegistry *registry,
-+ const DBusString *service_name);
-+BusService* bus_registry_ensure (BusRegistry *registry,
-+ const DBusString *service_name,
-+ DBusConnection *owner_connection_if_created,
-+ dbus_uint32_t flags,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+void bus_registry_foreach (BusRegistry *registry,
-+ BusServiceForeachFunction function,
-+ void *data);
-+dbus_bool_t bus_registry_list_services (BusRegistry *registry,
-+ char ***listp,
-+ int *array_len);
-+dbus_bool_t bus_registry_acquire_service (BusRegistry *registry,
-+ DBusConnection *connection,
-+ const DBusString *service_name,
-+ dbus_uint32_t flags,
-+ dbus_uint32_t *result,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+dbus_bool_t bus_registry_release_service (BusRegistry *registry,
-+ DBusConnection *connection,
-+ const DBusString *service_name,
-+ dbus_uint32_t *result,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+dbus_bool_t bus_registry_set_service_context_table (BusRegistry *registry,
-+ DBusHashTable *table);
-+
-+BusService* bus_service_ref (BusService *service);
-+void bus_service_unref (BusService *service);
-+dbus_bool_t bus_service_add_owner (BusService *service,
-+ DBusConnection *connection,
-+ dbus_uint32_t flags,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+dbus_bool_t bus_service_swap_owner (BusService *service,
-+ DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+dbus_bool_t bus_service_remove_owner (BusService *service,
-+ DBusConnection *connection,
-+ BusTransaction *transaction,
-+ DBusError *error);
-+dbus_bool_t bus_service_has_owner (BusService *service,
-+ DBusConnection *connection);
-+BusOwner* bus_service_get_primary_owner (BusService *service);
-+dbus_bool_t bus_service_get_allow_replacement (BusService *service);
-+const char* bus_service_get_name (BusService *service);
-+dbus_bool_t bus_service_list_queued_owners (BusService *service,
-+ DBusList **return_list,
-+ DBusError *error);
-+
-+DBusConnection* bus_service_get_primary_owners_connection (BusService *service);
-+#endif /* BUS_SERVICES_H */
-diff -Naur dbus-0.61.orig/bus/session.conf.in dbus-0.61/bus/session.conf.in
---- dbus-0.61.orig/bus/session.conf.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/session.conf.in 2005-08-29 22:19:19.000000000 +0200
-@@ -0,0 +1,30 @@
-+<!-- This configuration file controls the per-user-login-session message bus.
-+ Add a session-local.conf and edit that rather than changing this
-+ file directly. -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <!-- Our well-known bus type, don't change this -->
-+ <type>session</type>
-+
-+ <listen>unix:tmpdir=@DBUS_SESSION_SOCKET_DIR@</listen>
-+
-+ <servicedir>@EXPANDED_DATADIR@/dbus-1/services</servicedir>
-+
-+ <policy context="default">
-+ <!-- Allow everything to be sent -->
-+ <allow send_destination="*"/>
-+ <!-- Allow everything to be received -->
-+ <allow eavesdrop="true"/>
-+ <!-- Allow anyone to own anything -->
-+ <allow own="*"/>
-+ </policy>
-+
-+ <!-- This is included last so local configuration can override what's
-+ in this standard file -->
-+ <include ignore_missing="yes">session-local.conf</include>
-+
-+ <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include>
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/bus/signals.c dbus-0.61/bus/signals.c
---- dbus-0.61.orig/bus/signals.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/signals.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,1952 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* signals.c Bus signal connection implementation
-+ *
-+ * Copyright (C) 2003, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "signals.h"
-+#include "services.h"
-+#include "utils.h"
-+#include <dbus/dbus-marshal-validate.h>
-+
-+struct BusMatchRule
-+{
-+ int refcount; /**< reference count */
-+
-+ DBusConnection *matches_go_to; /**< Owner of the rule */
-+
-+ unsigned int flags; /**< BusMatchFlags */
-+
-+ int message_type;
-+ char *interface;
-+ char *member;
-+ char *sender;
-+ char *destination;
-+ char *path;
-+
-+ char **args;
-+ int args_len;
-+};
-+
-+BusMatchRule*
-+bus_match_rule_new (DBusConnection *matches_go_to)
-+{
-+ BusMatchRule *rule;
-+
-+ rule = dbus_new0 (BusMatchRule, 1);
-+ if (rule == NULL)
-+ return NULL;
-+
-+ rule->refcount = 1;
-+ rule->matches_go_to = matches_go_to;
-+
-+#ifndef DBUS_BUILD_TESTS
-+ _dbus_assert (rule->matches_go_to != NULL);
-+#endif
-+
-+ return rule;
-+}
-+
-+BusMatchRule *
-+bus_match_rule_ref (BusMatchRule *rule)
-+{
-+ _dbus_assert (rule->refcount > 0);
-+
-+ rule->refcount += 1;
-+
-+ return rule;
-+}
-+
-+void
-+bus_match_rule_unref (BusMatchRule *rule)
-+{
-+ _dbus_assert (rule->refcount > 0);
-+
-+ rule->refcount -= 1;
-+ if (rule->refcount == 0)
-+ {
-+ dbus_free (rule->interface);
-+ dbus_free (rule->member);
-+ dbus_free (rule->sender);
-+ dbus_free (rule->destination);
-+ dbus_free (rule->path);
-+
-+ /* can't use dbus_free_string_array() since there
-+ * are embedded NULL
-+ */
-+ if (rule->args)
-+ {
-+ int i;
-+
-+ i = 0;
-+ while (i < rule->args_len)
-+ {
-+ if (rule->args[i])
-+ dbus_free (rule->args[i]);
-+ ++i;
-+ }
-+
-+ dbus_free (rule->args);
-+ }
-+
-+ dbus_free (rule);
-+ }
-+}
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+/* Note this function does not do escaping, so it's only
-+ * good for debug spew at the moment
-+ */
-+static char*
-+match_rule_to_string (BusMatchRule *rule)
-+{
-+ DBusString str;
-+ char *ret;
-+
-+ if (!_dbus_string_init (&str))
-+ {
-+ char *s;
-+ while ((s = _dbus_strdup ("nomem")) == NULL)
-+ ; /* only OK for debug spew... */
-+ return s;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_MESSAGE_TYPE)
-+ {
-+ /* FIXME make type readable */
-+ if (!_dbus_string_append_printf (&str, "type='%d'", rule->message_type))
-+ goto nomem;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_INTERFACE)
-+ {
-+ if (_dbus_string_get_length (&str) > 0)
-+ {
-+ if (!_dbus_string_append (&str, ","))
-+ goto nomem;
-+ }
-+
-+ if (!_dbus_string_append_printf (&str, "interface='%s'", rule->interface))
-+ goto nomem;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_MEMBER)
-+ {
-+ if (_dbus_string_get_length (&str) > 0)
-+ {
-+ if (!_dbus_string_append (&str, ","))
-+ goto nomem;
-+ }
-+
-+ if (!_dbus_string_append_printf (&str, "member='%s'", rule->member))
-+ goto nomem;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_PATH)
-+ {
-+ if (_dbus_string_get_length (&str) > 0)
-+ {
-+ if (!_dbus_string_append (&str, ","))
-+ goto nomem;
-+ }
-+
-+ if (!_dbus_string_append_printf (&str, "path='%s'", rule->path))
-+ goto nomem;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_SENDER)
-+ {
-+ if (_dbus_string_get_length (&str) > 0)
-+ {
-+ if (!_dbus_string_append (&str, ","))
-+ goto nomem;
-+ }
-+
-+ if (!_dbus_string_append_printf (&str, "sender='%s'", rule->sender))
-+ goto nomem;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_DESTINATION)
-+ {
-+ if (_dbus_string_get_length (&str) > 0)
-+ {
-+ if (!_dbus_string_append (&str, ","))
-+ goto nomem;
-+ }
-+
-+ if (!_dbus_string_append_printf (&str, "destination='%s'", rule->destination))
-+ goto nomem;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_ARGS)
-+ {
-+ int i;
-+
-+ _dbus_assert (rule->args != NULL);
-+
-+ i = 0;
-+ while (i < rule->args_len)
-+ {
-+ if (rule->args[i] != NULL)
-+ {
-+ if (_dbus_string_get_length (&str) > 0)
-+ {
-+ if (!_dbus_string_append (&str, ","))
-+ goto nomem;
-+ }
-+
-+ if (!_dbus_string_append_printf (&str,
-+ "arg%d='%s'",
-+ i,
-+ rule->args[i]))
-+ goto nomem;
-+ }
-+
-+ ++i;
-+ }
-+ }
-+
-+ if (!_dbus_string_steal_data (&str, &ret))
-+ goto nomem;
-+
-+ _dbus_string_free (&str);
-+ return ret;
-+
-+ nomem:
-+ _dbus_string_free (&str);
-+ {
-+ char *s;
-+ while ((s = _dbus_strdup ("nomem")) == NULL)
-+ ; /* only OK for debug spew... */
-+ return s;
-+ }
-+}
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+
-+dbus_bool_t
-+bus_match_rule_set_message_type (BusMatchRule *rule,
-+ int type)
-+{
-+ rule->flags |= BUS_MATCH_MESSAGE_TYPE;
-+
-+ rule->message_type = type;
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_match_rule_set_interface (BusMatchRule *rule,
-+ const char *interface)
-+{
-+ char *new;
-+
-+ _dbus_assert (interface != NULL);
-+
-+ new = _dbus_strdup (interface);
-+ if (new == NULL)
-+ return FALSE;
-+
-+ rule->flags |= BUS_MATCH_INTERFACE;
-+ dbus_free (rule->interface);
-+ rule->interface = new;
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_match_rule_set_member (BusMatchRule *rule,
-+ const char *member)
-+{
-+ char *new;
-+
-+ _dbus_assert (member != NULL);
-+
-+ new = _dbus_strdup (member);
-+ if (new == NULL)
-+ return FALSE;
-+
-+ rule->flags |= BUS_MATCH_MEMBER;
-+ dbus_free (rule->member);
-+ rule->member = new;
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_match_rule_set_sender (BusMatchRule *rule,
-+ const char *sender)
-+{
-+ char *new;
-+
-+ _dbus_assert (sender != NULL);
-+
-+ new = _dbus_strdup (sender);
-+ if (new == NULL)
-+ return FALSE;
-+
-+ rule->flags |= BUS_MATCH_SENDER;
-+ dbus_free (rule->sender);
-+ rule->sender = new;
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_match_rule_set_destination (BusMatchRule *rule,
-+ const char *destination)
-+{
-+ char *new;
-+
-+ _dbus_assert (destination != NULL);
-+
-+ new = _dbus_strdup (destination);
-+ if (new == NULL)
-+ return FALSE;
-+
-+ rule->flags |= BUS_MATCH_DESTINATION;
-+ dbus_free (rule->destination);
-+ rule->destination = new;
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_match_rule_set_path (BusMatchRule *rule,
-+ const char *path)
-+{
-+ char *new;
-+
-+ _dbus_assert (path != NULL);
-+
-+ new = _dbus_strdup (path);
-+ if (new == NULL)
-+ return FALSE;
-+
-+ rule->flags |= BUS_MATCH_PATH;
-+ dbus_free (rule->path);
-+ rule->path = new;
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_match_rule_set_arg (BusMatchRule *rule,
-+ int arg,
-+ const char *value)
-+{
-+ char *new;
-+
-+ _dbus_assert (value != NULL);
-+
-+ new = _dbus_strdup (value);
-+ if (new == NULL)
-+ return FALSE;
-+
-+ /* args_len is the number of args not including null termination
-+ * in the char**
-+ */
-+ if (arg >= rule->args_len)
-+ {
-+ char **new_args;
-+ int new_args_len;
-+ int i;
-+
-+ new_args_len = arg + 1;
-+
-+ /* add another + 1 here for null termination */
-+ new_args = dbus_realloc (rule->args,
-+ sizeof(rule->args[0]) * (new_args_len + 1));
-+ if (new_args == NULL)
-+ {
-+ dbus_free (new);
-+ return FALSE;
-+ }
-+
-+ /* NULL the new slots */
-+ i = rule->args_len;
-+ while (i <= new_args_len) /* <= for null termination */
-+ {
-+ new_args[i] = NULL;
-+ ++i;
-+ }
-+
-+ rule->args = new_args;
-+ rule->args_len = new_args_len;
-+ }
-+
-+ rule->flags |= BUS_MATCH_ARGS;
-+
-+ dbus_free (rule->args[arg]);
-+ rule->args[arg] = new;
-+
-+ /* NULL termination didn't get busted */
-+ _dbus_assert (rule->args[rule->args_len] == NULL);
-+
-+ return TRUE;
-+}
-+
-+#define ISWHITE(c) (((c) == ' ') || ((c) == '\t') || ((c) == '\n') || ((c) == '\r'))
-+
-+static dbus_bool_t
-+find_key (const DBusString *str,
-+ int start,
-+ DBusString *key,
-+ int *value_pos,
-+ DBusError *error)
-+{
-+ const char *p;
-+ const char *s;
-+ const char *key_start;
-+ const char *key_end;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ s = _dbus_string_get_const_data (str);
-+
-+ p = s + start;
-+
-+ while (*p && ISWHITE (*p))
-+ ++p;
-+
-+ key_start = p;
-+
-+ while (*p && *p != '=' && !ISWHITE (*p))
-+ ++p;
-+
-+ key_end = p;
-+
-+ while (*p && ISWHITE (*p))
-+ ++p;
-+
-+ if (key_start == key_end)
-+ {
-+ /* Empty match rules or trailing whitespace are OK */
-+ *value_pos = p - s;
-+ return TRUE;
-+ }
-+
-+ if (*p != '=')
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Match rule has a key with no subsequent '=' character");
-+ return FALSE;
-+ }
-+ ++p;
-+
-+ if (!_dbus_string_append_len (key, key_start, key_end - key_start))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ *value_pos = p - s;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+find_value (const DBusString *str,
-+ int start,
-+ const char *key,
-+ DBusString *value,
-+ int *value_end,
-+ DBusError *error)
-+{
-+ const char *p;
-+ const char *s;
-+ char quote_char;
-+ int orig_len;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ orig_len = _dbus_string_get_length (value);
-+
-+ s = _dbus_string_get_const_data (str);
-+
-+ p = s + start;
-+
-+ quote_char = '\0';
-+
-+ while (*p)
-+ {
-+ if (quote_char == '\0')
-+ {
-+ switch (*p)
-+ {
-+ case '\0':
-+ goto done;
-+
-+ case '\'':
-+ quote_char = '\'';
-+ goto next;
-+
-+ case ',':
-+ ++p;
-+ goto done;
-+
-+ case '\\':
-+ quote_char = '\\';
-+ goto next;
-+
-+ default:
-+ if (!_dbus_string_append_byte (value, *p))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ }
-+ else if (quote_char == '\\')
-+ {
-+ /* \ only counts as an escape if escaping a quote mark */
-+ if (*p != '\'')
-+ {
-+ if (!_dbus_string_append_byte (value, '\\'))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+
-+ if (!_dbus_string_append_byte (value, *p))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ quote_char = '\0';
-+ }
-+ else
-+ {
-+ _dbus_assert (quote_char == '\'');
-+
-+ if (*p == '\'')
-+ {
-+ quote_char = '\0';
-+ }
-+ else
-+ {
-+ if (!_dbus_string_append_byte (value, *p))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ }
-+
-+ next:
-+ ++p;
-+ }
-+
-+ done:
-+
-+ if (quote_char == '\\')
-+ {
-+ if (!_dbus_string_append_byte (value, '\\'))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ else if (quote_char == '\'')
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Unbalanced quotation marks in match rule");
-+ goto failed;
-+ }
-+ else
-+ _dbus_assert (quote_char == '\0');
-+
-+ /* Zero-length values are allowed */
-+
-+ *value_end = p - s;
-+
-+ return TRUE;
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_string_set_length (value, orig_len);
-+ return FALSE;
-+}
-+
-+/* duplicates aren't allowed so the real legitimate max is only 6 or
-+ * so. Leaving extra so we don't have to bother to update it.
-+ * FIXME this is sort of busted now with arg matching, but we let
-+ * you match on up to 10 args for now
-+ */
-+#define MAX_RULE_TOKENS 16
-+
-+/* this is slightly too high level to be termed a "token"
-+ * but let's not be pedantic.
-+ */
-+typedef struct
-+{
-+ char *key;
-+ char *value;
-+} RuleToken;
-+
-+static dbus_bool_t
-+tokenize_rule (const DBusString *rule_text,
-+ RuleToken tokens[MAX_RULE_TOKENS],
-+ DBusError *error)
-+{
-+ int i;
-+ int pos;
-+ DBusString key;
-+ DBusString value;
-+ dbus_bool_t retval;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_string_init (&key))
-+ {
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&value))
-+ {
-+ _dbus_string_free (&key);
-+ BUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ i = 0;
-+ pos = 0;
-+ while (i < MAX_RULE_TOKENS &&
-+ pos < _dbus_string_get_length (rule_text))
-+ {
-+ _dbus_assert (tokens[i].key == NULL);
-+ _dbus_assert (tokens[i].value == NULL);
-+
-+ if (!find_key (rule_text, pos, &key, &pos, error))
-+ goto out;
-+
-+ if (_dbus_string_get_length (&key) == 0)
-+ goto next;
-+
-+ if (!_dbus_string_steal_data (&key, &tokens[i].key))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ if (!find_value (rule_text, pos, tokens[i].key, &value, &pos, error))
-+ goto out;
-+
-+ if (!_dbus_string_steal_data (&value, &tokens[i].value))
-+ {
-+ BUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ next:
-+ ++i;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (!retval)
-+ {
-+ i = 0;
-+ while (tokens[i].key || tokens[i].value)
-+ {
-+ dbus_free (tokens[i].key);
-+ dbus_free (tokens[i].value);
-+ tokens[i].key = NULL;
-+ tokens[i].value = NULL;
-+ ++i;
-+ }
-+ }
-+
-+ _dbus_string_free (&key);
-+ _dbus_string_free (&value);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+bus_match_rule_parse_arg_match (BusMatchRule *rule,
-+ const char *key,
-+ const DBusString *value,
-+ DBusError *error)
-+{
-+ DBusString key_str;
-+ unsigned long arg;
-+ int end;
-+
-+ /* For now, arg0='foo' always implies that 'foo' is a
-+ * DBUS_TYPE_STRING. Someday we could add an arg0type='int32' thing
-+ * if we wanted, which would specify another type, in which case
-+ * arg0='5' would have the 5 parsed as an int rather than string.
-+ */
-+
-+ /* First we need to parse arg0 = 0, arg27 = 27 */
-+
-+ _dbus_string_init_const (&key_str, key);
-+
-+ if (_dbus_string_get_length (&key_str) < 4)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key '%s' in match rule starts with 'arg' but lacks an arg number. Should be 'arg0' or 'arg7' for example.\n", key);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_string_parse_uint (&key_str, 3, &arg, &end) ||
-+ end != _dbus_string_get_length (&key_str))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key '%s' in match rule starts with 'arg' but could not parse arg number. Should be 'arg0' or 'arg7' for example.\n", key);
-+ goto failed;
-+ }
-+
-+ /* If we didn't check this we could allocate a huge amount of RAM */
-+ if (arg > DBUS_MAXIMUM_MATCH_RULE_ARG_NUMBER)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key '%s' in match rule has arg number %lu but the maximum is %d.\n", key, (unsigned long) arg, DBUS_MAXIMUM_MATCH_RULE_ARG_NUMBER);
-+ goto failed;
-+ }
-+
-+ if ((rule->flags & BUS_MATCH_ARGS) &&
-+ rule->args_len > (int) arg &&
-+ rule->args[arg] != NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key '%s' specified twice in match rule\n", key);
-+ goto failed;
-+ }
-+
-+ if (!bus_match_rule_set_arg (rule, arg,
-+ _dbus_string_get_const_data (value)))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ return TRUE;
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return FALSE;
-+}
-+
-+/*
-+ * The format is comma-separated with strings quoted with single quotes
-+ * as for the shell (to escape a literal single quote, use '\'').
-+ *
-+ * type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='Foo',
-+ * path='/bar/foo',destination=':452345.34'
-+ *
-+ */
-+BusMatchRule*
-+bus_match_rule_parse (DBusConnection *matches_go_to,
-+ const DBusString *rule_text,
-+ DBusError *error)
-+{
-+ BusMatchRule *rule;
-+ RuleToken tokens[MAX_RULE_TOKENS+1]; /* NULL termination + 1 */
-+ int i;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (_dbus_string_get_length (rule_text) > DBUS_MAXIMUM_MATCH_RULE_LENGTH)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_LIMITS_EXCEEDED,
-+ "Match rule text is %d bytes, maximum is %d",
-+ _dbus_string_get_length (rule_text),
-+ DBUS_MAXIMUM_MATCH_RULE_LENGTH);
-+ return NULL;
-+ }
-+
-+ memset (tokens, '\0', sizeof (tokens));
-+
-+ rule = bus_match_rule_new (matches_go_to);
-+ if (rule == NULL)
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+
-+ if (!tokenize_rule (rule_text, tokens, error))
-+ goto failed;
-+
-+ i = 0;
-+ while (tokens[i].key != NULL)
-+ {
-+ DBusString tmp_str;
-+ int len;
-+ const char *key = tokens[i].key;
-+ const char *value = tokens[i].value;
-+
-+ _dbus_string_init_const (&tmp_str, value);
-+ len = _dbus_string_get_length (&tmp_str);
-+
-+ if (strcmp (key, "type") == 0)
-+ {
-+ int t;
-+
-+ if (rule->flags & BUS_MATCH_MESSAGE_TYPE)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key %s specified twice in match rule\n", key);
-+ goto failed;
-+ }
-+
-+ t = dbus_message_type_from_string (value);
-+
-+ if (t == DBUS_MESSAGE_TYPE_INVALID)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Invalid message type (%s) in match rule\n", value);
-+ goto failed;
-+ }
-+
-+ if (!bus_match_rule_set_message_type (rule, t))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ else if (strcmp (key, "sender") == 0)
-+ {
-+ if (rule->flags & BUS_MATCH_SENDER)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key %s specified twice in match rule\n", key);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_validate_bus_name (&tmp_str, 0, len))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Sender name '%s' is invalid\n", value);
-+ goto failed;
-+ }
-+
-+ if (!bus_match_rule_set_sender (rule, value))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ else if (strcmp (key, "interface") == 0)
-+ {
-+ if (rule->flags & BUS_MATCH_INTERFACE)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key %s specified twice in match rule\n", key);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_validate_interface (&tmp_str, 0, len))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Interface name '%s' is invalid\n", value);
-+ goto failed;
-+ }
-+
-+ if (!bus_match_rule_set_interface (rule, value))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ else if (strcmp (key, "member") == 0)
-+ {
-+ if (rule->flags & BUS_MATCH_MEMBER)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key %s specified twice in match rule\n", key);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_validate_member (&tmp_str, 0, len))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Member name '%s' is invalid\n", value);
-+ goto failed;
-+ }
-+
-+ if (!bus_match_rule_set_member (rule, value))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ else if (strcmp (key, "path") == 0)
-+ {
-+ if (rule->flags & BUS_MATCH_PATH)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key %s specified twice in match rule\n", key);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_validate_path (&tmp_str, 0, len))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Path '%s' is invalid\n", value);
-+ goto failed;
-+ }
-+
-+ if (!bus_match_rule_set_path (rule, value))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ else if (strcmp (key, "destination") == 0)
-+ {
-+ if (rule->flags & BUS_MATCH_DESTINATION)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Key %s specified twice in match rule\n", key);
-+ goto failed;
-+ }
-+
-+ if (!_dbus_validate_bus_name (&tmp_str, 0, len))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Destination name '%s' is invalid\n", value);
-+ goto failed;
-+ }
-+
-+ if (!bus_match_rule_set_destination (rule, value))
-+ {
-+ BUS_SET_OOM (error);
-+ goto failed;
-+ }
-+ }
-+ else if (strncmp (key, "arg", 3) == 0)
-+ {
-+ if (!bus_match_rule_parse_arg_match (rule, key, &tmp_str, error))
-+ goto failed;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_INVALID,
-+ "Unknown key \"%s\" in match rule",
-+ key);
-+ goto failed;
-+ }
-+
-+ ++i;
-+ }
-+
-+
-+ goto out;
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ if (rule)
-+ {
-+ bus_match_rule_unref (rule);
-+ rule = NULL;
-+ }
-+
-+ out:
-+
-+ i = 0;
-+ while (tokens[i].key || tokens[i].value)
-+ {
-+ _dbus_assert (i < MAX_RULE_TOKENS);
-+ dbus_free (tokens[i].key);
-+ dbus_free (tokens[i].value);
-+ ++i;
-+ }
-+
-+ return rule;
-+}
-+
-+struct BusMatchmaker
-+{
-+ int refcount;
-+
-+ DBusList *all_rules;
-+};
-+
-+BusMatchmaker*
-+bus_matchmaker_new (void)
-+{
-+ BusMatchmaker *matchmaker;
-+
-+ matchmaker = dbus_new0 (BusMatchmaker, 1);
-+ if (matchmaker == NULL)
-+ return NULL;
-+
-+ matchmaker->refcount = 1;
-+
-+ return matchmaker;
-+}
-+
-+BusMatchmaker *
-+bus_matchmaker_ref (BusMatchmaker *matchmaker)
-+{
-+ _dbus_assert (matchmaker->refcount > 0);
-+
-+ matchmaker->refcount += 1;
-+
-+ return matchmaker;
-+}
-+
-+void
-+bus_matchmaker_unref (BusMatchmaker *matchmaker)
-+{
-+ _dbus_assert (matchmaker->refcount > 0);
-+
-+ matchmaker->refcount -= 1;
-+ if (matchmaker->refcount == 0)
-+ {
-+ while (matchmaker->all_rules != NULL)
-+ {
-+ BusMatchRule *rule;
-+
-+ rule = matchmaker->all_rules->data;
-+ bus_match_rule_unref (rule);
-+ _dbus_list_remove_link (&matchmaker->all_rules,
-+ matchmaker->all_rules);
-+ }
-+
-+ dbus_free (matchmaker);
-+ }
-+}
-+
-+/* The rule can't be modified after it's added. */
-+dbus_bool_t
-+bus_matchmaker_add_rule (BusMatchmaker *matchmaker,
-+ BusMatchRule *rule)
-+{
-+ _dbus_assert (bus_connection_is_active (rule->matches_go_to));
-+
-+ if (!_dbus_list_append (&matchmaker->all_rules, rule))
-+ return FALSE;
-+
-+ if (!bus_connection_add_match_rule (rule->matches_go_to, rule))
-+ {
-+ _dbus_list_remove_last (&matchmaker->all_rules, rule);
-+ return FALSE;
-+ }
-+
-+ bus_match_rule_ref (rule);
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ {
-+ char *s = match_rule_to_string (rule);
-+
-+ _dbus_verbose ("Added match rule %s to connection %p\n",
-+ s, rule->matches_go_to);
-+ dbus_free (s);
-+ }
-+#endif
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+match_rule_equal (BusMatchRule *a,
-+ BusMatchRule *b)
-+{
-+ if (a->flags != b->flags)
-+ return FALSE;
-+
-+ if ((a->flags & BUS_MATCH_MESSAGE_TYPE) &&
-+ a->message_type != b->message_type)
-+ return FALSE;
-+
-+ if ((a->flags & BUS_MATCH_MEMBER) &&
-+ strcmp (a->member, b->member) != 0)
-+ return FALSE;
-+
-+ if ((a->flags & BUS_MATCH_PATH) &&
-+ strcmp (a->path, b->path) != 0)
-+ return FALSE;
-+
-+ if ((a->flags & BUS_MATCH_INTERFACE) &&
-+ strcmp (a->interface, b->interface) != 0)
-+ return FALSE;
-+
-+ if ((a->flags & BUS_MATCH_SENDER) &&
-+ strcmp (a->sender, b->sender) != 0)
-+ return FALSE;
-+
-+ if ((a->flags & BUS_MATCH_DESTINATION) &&
-+ strcmp (a->destination, b->destination) != 0)
-+ return FALSE;
-+
-+ if (a->flags & BUS_MATCH_ARGS)
-+ {
-+ int i;
-+
-+ if (a->args_len != b->args_len)
-+ return FALSE;
-+
-+ i = 0;
-+ while (i < a->args_len)
-+ {
-+ if ((a->args[i] != NULL) != (b->args[i] != NULL))
-+ return FALSE;
-+
-+ if (a->args[i] != NULL)
-+ {
-+ _dbus_assert (b->args[i] != NULL);
-+ if (strcmp (a->args[i], b->args[i]) != 0)
-+ return FALSE;
-+ }
-+
-+ ++i;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+bus_matchmaker_remove_rule_link (BusMatchmaker *matchmaker,
-+ DBusList *link)
-+{
-+ BusMatchRule *rule = link->data;
-+
-+ bus_connection_remove_match_rule (rule->matches_go_to, rule);
-+ _dbus_list_remove_link (&matchmaker->all_rules, link);
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ {
-+ char *s = match_rule_to_string (rule);
-+
-+ _dbus_verbose ("Removed match rule %s for connection %p\n",
-+ s, rule->matches_go_to);
-+ dbus_free (s);
-+ }
-+#endif
-+
-+ bus_match_rule_unref (rule);
-+}
-+
-+void
-+bus_matchmaker_remove_rule (BusMatchmaker *matchmaker,
-+ BusMatchRule *rule)
-+{
-+ bus_connection_remove_match_rule (rule->matches_go_to, rule);
-+ _dbus_list_remove (&matchmaker->all_rules, rule);
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ {
-+ char *s = match_rule_to_string (rule);
-+
-+ _dbus_verbose ("Removed match rule %s for connection %p\n",
-+ s, rule->matches_go_to);
-+ dbus_free (s);
-+ }
-+#endif
-+
-+ bus_match_rule_unref (rule);
-+}
-+
-+/* Remove a single rule which is equal to the given rule by value */
-+dbus_bool_t
-+bus_matchmaker_remove_rule_by_value (BusMatchmaker *matchmaker,
-+ BusMatchRule *value,
-+ DBusError *error)
-+{
-+ /* FIXME this is an unoptimized linear scan */
-+
-+ DBusList *link;
-+
-+ /* we traverse backward because bus_connection_remove_match_rule()
-+ * removes the most-recently-added rule
-+ */
-+ link = _dbus_list_get_last_link (&matchmaker->all_rules);
-+ while (link != NULL)
-+ {
-+ BusMatchRule *rule;
-+ DBusList *prev;
-+
-+ rule = link->data;
-+ prev = _dbus_list_get_prev_link (&matchmaker->all_rules, link);
-+
-+ if (match_rule_equal (rule, value))
-+ {
-+ bus_matchmaker_remove_rule_link (matchmaker, link);
-+ break;
-+ }
-+
-+ link = prev;
-+ }
-+
-+ if (link == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_MATCH_RULE_NOT_FOUND,
-+ "The given match rule wasn't found and can't be removed");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+void
-+bus_matchmaker_disconnected (BusMatchmaker *matchmaker,
-+ DBusConnection *disconnected)
-+{
-+ DBusList *link;
-+
-+ /* FIXME
-+ *
-+ * This scans all match rules on the bus. We could avoid that
-+ * for the rules belonging to the connection, since we keep
-+ * a list of those; but for the rules that just refer to
-+ * the connection we'd need to do something more elaborate.
-+ *
-+ */
-+
-+ _dbus_assert (bus_connection_is_active (disconnected));
-+
-+ link = _dbus_list_get_first_link (&matchmaker->all_rules);
-+ while (link != NULL)
-+ {
-+ BusMatchRule *rule;
-+ DBusList *next;
-+
-+ rule = link->data;
-+ next = _dbus_list_get_next_link (&matchmaker->all_rules, link);
-+
-+ if (rule->matches_go_to == disconnected)
-+ {
-+ bus_matchmaker_remove_rule_link (matchmaker, link);
-+ }
-+ else if (((rule->flags & BUS_MATCH_SENDER) && *rule->sender == ':') ||
-+ ((rule->flags & BUS_MATCH_DESTINATION) && *rule->destination == ':'))
-+ {
-+ /* The rule matches to/from a base service, see if it's the
-+ * one being disconnected, since we know this service name
-+ * will never be recycled.
-+ */
-+ const char *name;
-+
-+ name = bus_connection_get_name (disconnected);
-+ _dbus_assert (name != NULL); /* because we're an active connection */
-+
-+ if (((rule->flags & BUS_MATCH_SENDER) &&
-+ strcmp (rule->sender, name) == 0) ||
-+ ((rule->flags & BUS_MATCH_DESTINATION) &&
-+ strcmp (rule->destination, name) == 0))
-+ {
-+ bus_matchmaker_remove_rule_link (matchmaker, link);
-+ }
-+ }
-+
-+ link = next;
-+ }
-+}
-+
-+static dbus_bool_t
-+connection_is_primary_owner (DBusConnection *connection,
-+ const char *service_name)
-+{
-+ BusService *service;
-+ DBusString str;
-+ BusRegistry *registry;
-+
-+ _dbus_assert (connection != NULL);
-+
-+ registry = bus_connection_get_registry (connection);
-+
-+ _dbus_string_init_const (&str, service_name);
-+ service = bus_registry_lookup (registry, &str);
-+
-+ if (service == NULL)
-+ return FALSE; /* Service doesn't exist so connection can't own it. */
-+
-+ return bus_service_get_primary_owners_connection (service) == connection;
-+}
-+
-+static dbus_bool_t
-+match_rule_matches (BusMatchRule *rule,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusMessage *message)
-+{
-+ /* All features of the match rule are AND'd together,
-+ * so FALSE if any of them don't match.
-+ */
-+
-+ /* sender/addressed_recipient of #NULL may mean bus driver,
-+ * or for addressed_recipient may mean a message with no
-+ * specific recipient (i.e. a signal)
-+ */
-+
-+ if (rule->flags & BUS_MATCH_MESSAGE_TYPE)
-+ {
-+ _dbus_assert (rule->message_type != DBUS_MESSAGE_TYPE_INVALID);
-+
-+ if (rule->message_type != dbus_message_get_type (message))
-+ return FALSE;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_INTERFACE)
-+ {
-+ const char *iface;
-+
-+ _dbus_assert (rule->interface != NULL);
-+
-+ iface = dbus_message_get_interface (message);
-+ if (iface == NULL)
-+ return FALSE;
-+
-+ if (strcmp (iface, rule->interface) != 0)
-+ return FALSE;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_MEMBER)
-+ {
-+ const char *member;
-+
-+ _dbus_assert (rule->member != NULL);
-+
-+ member = dbus_message_get_member (message);
-+ if (member == NULL)
-+ return FALSE;
-+
-+ if (strcmp (member, rule->member) != 0)
-+ return FALSE;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_SENDER)
-+ {
-+ _dbus_assert (rule->sender != NULL);
-+
-+ if (sender == NULL)
-+ {
-+ if (strcmp (rule->sender,
-+ DBUS_SERVICE_DBUS) != 0)
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (!connection_is_primary_owner (sender, rule->sender))
-+ return FALSE;
-+ }
-+ }
-+
-+ if (rule->flags & BUS_MATCH_DESTINATION)
-+ {
-+ const char *destination;
-+
-+ _dbus_assert (rule->destination != NULL);
-+
-+ destination = dbus_message_get_destination (message);
-+ if (destination == NULL)
-+ return FALSE;
-+
-+ if (addressed_recipient == NULL)
-+ {
-+ if (strcmp (rule->destination,
-+ DBUS_SERVICE_DBUS) != 0)
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (!connection_is_primary_owner (addressed_recipient, rule->destination))
-+ return FALSE;
-+ }
-+ }
-+
-+ if (rule->flags & BUS_MATCH_PATH)
-+ {
-+ const char *path;
-+
-+ _dbus_assert (rule->path != NULL);
-+
-+ path = dbus_message_get_path (message);
-+ if (path == NULL)
-+ return FALSE;
-+
-+ if (strcmp (path, rule->path) != 0)
-+ return FALSE;
-+ }
-+
-+ if (rule->flags & BUS_MATCH_ARGS)
-+ {
-+ int i;
-+ DBusMessageIter iter;
-+
-+ _dbus_assert (rule->args != NULL);
-+
-+ dbus_message_iter_init (message, &iter);
-+
-+ i = 0;
-+ while (i < rule->args_len)
-+ {
-+ int current_type;
-+ const char *expected_arg;
-+
-+ expected_arg = rule->args[i];
-+
-+ current_type = dbus_message_iter_get_arg_type (&iter);
-+
-+ if (expected_arg != NULL)
-+ {
-+ const char *actual_arg;
-+
-+ if (current_type != DBUS_TYPE_STRING)
-+ return FALSE;
-+
-+ actual_arg = NULL;
-+ dbus_message_iter_get_basic (&iter, &actual_arg);
-+ _dbus_assert (actual_arg != NULL);
-+
-+ if (strcmp (expected_arg, actual_arg) != 0)
-+ return FALSE;
-+ }
-+
-+ if (current_type != DBUS_TYPE_INVALID)
-+ dbus_message_iter_next (&iter);
-+
-+ ++i;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+bus_matchmaker_get_recipients (BusMatchmaker *matchmaker,
-+ BusConnections *connections,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusMessage *message,
-+ DBusList **recipients_p)
-+{
-+ /* FIXME for now this is a wholly unoptimized linear search */
-+ /* Guessing the important optimization is to skip the signal-related
-+ * match lists when processing method call and exception messages.
-+ * So separate match rule lists for signals?
-+ */
-+
-+ DBusList *link;
-+
-+ _dbus_assert (*recipients_p == NULL);
-+
-+ /* This avoids sending same message to the same connection twice.
-+ * Purpose of the stamp instead of a bool is to avoid iterating over
-+ * all connections resetting the bool each time.
-+ */
-+ bus_connections_increment_stamp (connections);
-+
-+ /* addressed_recipient is already receiving the message, don't add to list.
-+ * NULL addressed_recipient means either bus driver, or this is a signal
-+ * and thus lacks a specific addressed_recipient.
-+ */
-+ if (addressed_recipient != NULL)
-+ bus_connection_mark_stamp (addressed_recipient);
-+
-+ link = _dbus_list_get_first_link (&matchmaker->all_rules);
-+ while (link != NULL)
-+ {
-+ BusMatchRule *rule;
-+
-+ rule = link->data;
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ {
-+ char *s = match_rule_to_string (rule);
-+
-+ _dbus_verbose ("Checking whether message matches rule %s for connection %p\n",
-+ s, rule->matches_go_to);
-+ dbus_free (s);
-+ }
-+#endif
-+
-+ if (match_rule_matches (rule,
-+ sender, addressed_recipient, message))
-+ {
-+ _dbus_verbose ("Rule matched\n");
-+
-+ /* Append to the list if we haven't already */
-+ if (bus_connection_mark_stamp (rule->matches_go_to))
-+ {
-+ if (!_dbus_list_append (recipients_p, rule->matches_go_to))
-+ goto nomem;
-+ }
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ else
-+ {
-+ _dbus_verbose ("Connection already receiving this message, so not adding again\n");
-+ }
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+ }
-+
-+ link = _dbus_list_get_next_link (&matchmaker->all_rules, link);
-+ }
-+
-+ return TRUE;
-+
-+ nomem:
-+ _dbus_list_clear (recipients_p);
-+ return FALSE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "test.h"
-+#include <stdlib.h>
-+
-+static BusMatchRule*
-+check_parse (dbus_bool_t should_succeed,
-+ const char *text)
-+{
-+ BusMatchRule *rule;
-+ DBusString str;
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+
-+ _dbus_string_init_const (&str, text);
-+
-+ rule = bus_match_rule_parse (NULL, &str, &error);
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ return NULL;
-+ }
-+
-+ if (should_succeed && rule == NULL)
-+ {
-+ _dbus_warn ("Failed to parse: %s: %s: \"%s\"\n",
-+ error.name, error.message,
-+ _dbus_string_get_const_data (&str));
-+ exit (1);
-+ }
-+
-+ if (!should_succeed && rule != NULL)
-+ {
-+ _dbus_warn ("Failed to fail to parse: \"%s\"\n",
-+ _dbus_string_get_const_data (&str));
-+ exit (1);
-+ }
-+
-+ dbus_error_free (&error);
-+
-+ return rule;
-+}
-+
-+static void
-+assert_large_rule (BusMatchRule *rule)
-+{
-+ _dbus_assert (rule->flags & BUS_MATCH_MESSAGE_TYPE);
-+ _dbus_assert (rule->flags & BUS_MATCH_SENDER);
-+ _dbus_assert (rule->flags & BUS_MATCH_INTERFACE);
-+ _dbus_assert (rule->flags & BUS_MATCH_MEMBER);
-+ _dbus_assert (rule->flags & BUS_MATCH_DESTINATION);
-+ _dbus_assert (rule->flags & BUS_MATCH_PATH);
-+
-+ _dbus_assert (rule->message_type == DBUS_MESSAGE_TYPE_SIGNAL);
-+ _dbus_assert (rule->interface != NULL);
-+ _dbus_assert (rule->member != NULL);
-+ _dbus_assert (rule->sender != NULL);
-+ _dbus_assert (rule->destination != NULL);
-+ _dbus_assert (rule->path != NULL);
-+
-+ _dbus_assert (strcmp (rule->interface, "org.freedesktop.DBusInterface") == 0);
-+ _dbus_assert (strcmp (rule->sender, "org.freedesktop.DBusSender") == 0);
-+ _dbus_assert (strcmp (rule->member, "Foo") == 0);
-+ _dbus_assert (strcmp (rule->path, "/bar/foo") == 0);
-+ _dbus_assert (strcmp (rule->destination, ":452345.34") == 0);
-+}
-+
-+static dbus_bool_t
-+test_parsing (void *data)
-+{
-+ BusMatchRule *rule;
-+
-+ rule = check_parse (TRUE, "type='signal',sender='org.freedesktop.DBusSender',interface='org.freedesktop.DBusInterface',member='Foo',path='/bar/foo',destination=':452345.34'");
-+ if (rule != NULL)
-+ {
-+ assert_large_rule (rule);
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ /* With extra whitespace and useless quotes */
-+ rule = check_parse (TRUE, " type='signal', \tsender='org.freedes''ktop.DBusSender', interface='org.freedesktop.DBusInterface''''', \tmember='Foo',path='/bar/foo',destination=':452345.34'''''");
-+ if (rule != NULL)
-+ {
-+ assert_large_rule (rule);
-+ bus_match_rule_unref (rule);
-+ }
-+
-+
-+ /* A simple signal connection */
-+ rule = check_parse (TRUE, "type='signal',path='/foo',interface='org.Bar'");
-+ if (rule != NULL)
-+ {
-+ _dbus_assert (rule->flags & BUS_MATCH_MESSAGE_TYPE);
-+ _dbus_assert (rule->flags & BUS_MATCH_INTERFACE);
-+ _dbus_assert (rule->flags & BUS_MATCH_PATH);
-+
-+ _dbus_assert (rule->message_type == DBUS_MESSAGE_TYPE_SIGNAL);
-+ _dbus_assert (rule->interface != NULL);
-+ _dbus_assert (rule->path != NULL);
-+
-+ _dbus_assert (strcmp (rule->interface, "org.Bar") == 0);
-+ _dbus_assert (strcmp (rule->path, "/foo") == 0);
-+
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ /* argN */
-+ rule = check_parse (TRUE, "arg0='foo'");
-+ if (rule != NULL)
-+ {
-+ _dbus_assert (rule->flags == BUS_MATCH_ARGS);
-+ _dbus_assert (rule->args != NULL);
-+ _dbus_assert (rule->args_len == 1);
-+ _dbus_assert (rule->args[0] != NULL);
-+ _dbus_assert (rule->args[1] == NULL);
-+ _dbus_assert (strcmp (rule->args[0], "foo") == 0);
-+
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ rule = check_parse (TRUE, "arg1='foo'");
-+ if (rule != NULL)
-+ {
-+ _dbus_assert (rule->flags == BUS_MATCH_ARGS);
-+ _dbus_assert (rule->args != NULL);
-+ _dbus_assert (rule->args_len == 2);
-+ _dbus_assert (rule->args[0] == NULL);
-+ _dbus_assert (rule->args[1] != NULL);
-+ _dbus_assert (rule->args[2] == NULL);
-+ _dbus_assert (strcmp (rule->args[1], "foo") == 0);
-+
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ rule = check_parse (TRUE, "arg2='foo'");
-+ if (rule != NULL)
-+ {
-+ _dbus_assert (rule->flags == BUS_MATCH_ARGS);
-+ _dbus_assert (rule->args != NULL);
-+ _dbus_assert (rule->args_len == 3);
-+ _dbus_assert (rule->args[0] == NULL);
-+ _dbus_assert (rule->args[1] == NULL);
-+ _dbus_assert (rule->args[2] != NULL);
-+ _dbus_assert (rule->args[3] == NULL);
-+ _dbus_assert (strcmp (rule->args[2], "foo") == 0);
-+
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ rule = check_parse (TRUE, "arg40='foo'");
-+ if (rule != NULL)
-+ {
-+ _dbus_assert (rule->flags == BUS_MATCH_ARGS);
-+ _dbus_assert (rule->args != NULL);
-+ _dbus_assert (rule->args_len == 41);
-+ _dbus_assert (rule->args[0] == NULL);
-+ _dbus_assert (rule->args[1] == NULL);
-+ _dbus_assert (rule->args[40] != NULL);
-+ _dbus_assert (rule->args[41] == NULL);
-+ _dbus_assert (strcmp (rule->args[40], "foo") == 0);
-+
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ rule = check_parse (TRUE, "arg63='foo'");
-+ if (rule != NULL)
-+ {
-+ _dbus_assert (rule->flags == BUS_MATCH_ARGS);
-+ _dbus_assert (rule->args != NULL);
-+ _dbus_assert (rule->args_len == 64);
-+ _dbus_assert (rule->args[0] == NULL);
-+ _dbus_assert (rule->args[1] == NULL);
-+ _dbus_assert (rule->args[63] != NULL);
-+ _dbus_assert (rule->args[64] == NULL);
-+ _dbus_assert (strcmp (rule->args[63], "foo") == 0);
-+
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ /* Too-large argN */
-+ rule = check_parse (FALSE, "arg300='foo'");
-+ _dbus_assert (rule == NULL);
-+ rule = check_parse (FALSE, "arg64='foo'");
-+ _dbus_assert (rule == NULL);
-+
-+ /* No N in argN */
-+ rule = check_parse (FALSE, "arg='foo'");
-+ _dbus_assert (rule == NULL);
-+ rule = check_parse (FALSE, "argv='foo'");
-+ _dbus_assert (rule == NULL);
-+ rule = check_parse (FALSE, "arg3junk='foo'");
-+ _dbus_assert (rule == NULL);
-+ rule = check_parse (FALSE, "argument='foo'");
-+ _dbus_assert (rule == NULL);
-+
-+ /* Reject duplicates */
-+ rule = check_parse (FALSE, "type='signal',type='method_call'");
-+ _dbus_assert (rule == NULL);
-+
-+ /* Duplicates with the argN code */
-+ rule = check_parse (FALSE, "arg0='foo',arg0='bar'");
-+ _dbus_assert (rule == NULL);
-+ rule = check_parse (FALSE, "arg3='foo',arg3='bar'");
-+ _dbus_assert (rule == NULL);
-+ rule = check_parse (FALSE, "arg30='foo',arg30='bar'");
-+ _dbus_assert (rule == NULL);
-+
-+ /* Reject broken keys */
-+ rule = check_parse (FALSE, "blah='signal'");
-+ _dbus_assert (rule == NULL);
-+
-+ /* Reject broken values */
-+ rule = check_parse (FALSE, "type='chouin'");
-+ _dbus_assert (rule == NULL);
-+ rule = check_parse (FALSE, "interface='abc at def++'");
-+ _dbus_assert (rule == NULL);
-+ rule = check_parse (FALSE, "service='youpi'");
-+ _dbus_assert (rule == NULL);
-+
-+ /* Allow empty rule */
-+ rule = check_parse (TRUE, "");
-+ if (rule != NULL)
-+ {
-+ _dbus_assert (rule->flags == 0);
-+
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ /* All-whitespace rule is the same as empty */
-+ rule = check_parse (TRUE, " \t");
-+ if (rule != NULL)
-+ {
-+ _dbus_assert (rule->flags == 0);
-+
-+ bus_match_rule_unref (rule);
-+ }
-+
-+ /* But with non-whitespace chars and no =value, it's not OK */
-+ rule = check_parse (FALSE, "type");
-+ _dbus_assert (rule == NULL);
-+
-+ return TRUE;
-+}
-+
-+static struct {
-+ const char *first;
-+ const char *second;
-+} equality_tests[] = {
-+ { "type='signal'", "type='signal'" },
-+ { "type='signal',interface='foo.bar'", "interface='foo.bar',type='signal'" },
-+ { "type='signal',member='bar'", "member='bar',type='signal'" },
-+ { "type='method_call',sender=':1.0'", "sender=':1.0',type='method_call'" },
-+ { "type='method_call',destination=':1.0'", "destination=':1.0',type='method_call'" },
-+ { "type='method_call',path='/foo/bar'", "path='/foo/bar',type='method_call'" },
-+ { "type='method_call',arg0='blah'", "arg0='blah',type='method_call'" },
-+ { "type='method_call',arg0='boo'", "arg0='boo',type='method_call'" },
-+ { "type='method_call',arg0='blah',arg1='baz'", "arg0='blah',arg1='baz',type='method_call'" },
-+ { "type='method_call',arg3='foosh'", "arg3='foosh',type='method_call'" },
-+ { "arg3='fool'", "arg3='fool'" },
-+ { "member='food'", "member='food'" }
-+};
-+
-+static void
-+test_equality (void)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (equality_tests))
-+ {
-+ BusMatchRule *first;
-+ BusMatchRule *second;
-+ int j;
-+
-+ first = check_parse (TRUE, equality_tests[i].first);
-+ _dbus_assert (first != NULL);
-+ second = check_parse (TRUE, equality_tests[i].second);
-+ _dbus_assert (second != NULL);
-+
-+ if (!match_rule_equal (first, second))
-+ {
-+ _dbus_warn ("rule %s and %s should have been equal\n",
-+ equality_tests[i].first,
-+ equality_tests[i].second);
-+ exit (1);
-+ }
-+
-+ bus_match_rule_unref (second);
-+
-+ /* Check that the rule is not equal to any of the
-+ * others besides its pair match
-+ */
-+ j = 0;
-+ while (j < _DBUS_N_ELEMENTS (equality_tests))
-+ {
-+ if (i != j)
-+ {
-+ second = check_parse (TRUE, equality_tests[j].second);
-+
-+ if (match_rule_equal (first, second))
-+ {
-+ _dbus_warn ("rule %s and %s should not have been equal\n",
-+ equality_tests[i].first,
-+ equality_tests[j].second);
-+ exit (1);
-+ }
-+
-+ bus_match_rule_unref (second);
-+ }
-+
-+ ++j;
-+ }
-+
-+ bus_match_rule_unref (first);
-+
-+ ++i;
-+ }
-+}
-+
-+static const char*
-+should_match_message_1[] = {
-+ "type='signal'",
-+ "member='Frobated'",
-+ "arg0='foobar'",
-+ "type='signal',member='Frobated'",
-+ "type='signal',member='Frobated',arg0='foobar'",
-+ "member='Frobated',arg0='foobar'",
-+ "type='signal',arg0='foobar'",
-+ NULL
-+};
-+
-+static const char*
-+should_not_match_message_1[] = {
-+ "type='method_call'",
-+ "type='error'",
-+ "type='method_return'",
-+ "type='signal',member='Oopsed'",
-+ "arg0='blah'",
-+ "arg1='foobar'",
-+ "arg2='foobar'",
-+ "arg3='foobar'",
-+ "arg0='3'",
-+ "arg1='3'",
-+ "arg0='foobar',arg1='abcdef'",
-+ "arg0='foobar',arg1='abcdef',arg2='abcdefghi',arg3='abcdefghi',arg4='abcdefghi'",
-+ "arg0='foobar',arg1='abcdef',arg4='abcdefghi',arg3='abcdefghi',arg2='abcdefghi'",
-+ NULL
-+};
-+
-+static void
-+check_matches (dbus_bool_t expected_to_match,
-+ int number,
-+ DBusMessage *message,
-+ const char *rule_text)
-+{
-+ BusMatchRule *rule;
-+ dbus_bool_t matched;
-+
-+ rule = check_parse (TRUE, rule_text);
-+ _dbus_assert (rule != NULL);
-+
-+ /* We can't test sender/destination rules since we pass NULL here */
-+ matched = match_rule_matches (rule, NULL, NULL, message);
-+
-+ if (matched != expected_to_match)
-+ {
-+ _dbus_warn ("Expected rule %s to %s message %d, failed\n",
-+ rule_text, expected_to_match ?
-+ "match" : "not match", number);
-+ exit (1);
-+ }
-+
-+ bus_match_rule_unref (rule);
-+}
-+
-+static void
-+check_matching (DBusMessage *message,
-+ int number,
-+ const char **should_match,
-+ const char **should_not_match)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (should_match[i] != NULL)
-+ {
-+ check_matches (TRUE, number, message, should_match[i]);
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (should_not_match[i] != NULL)
-+ {
-+ check_matches (FALSE, number, message, should_not_match[i]);
-+ ++i;
-+ }
-+}
-+
-+static void
-+test_matching (void)
-+{
-+ DBusMessage *message1;
-+ const char *v_STRING;
-+ dbus_int32_t v_INT32;
-+
-+ message1 = dbus_message_new (DBUS_MESSAGE_TYPE_SIGNAL);
-+ _dbus_assert (message1 != NULL);
-+ if (!dbus_message_set_member (message1, "Frobated"))
-+ _dbus_assert_not_reached ("oom");
-+
-+ v_STRING = "foobar";
-+ v_INT32 = 3;
-+ if (!dbus_message_append_args (message1,
-+ DBUS_TYPE_STRING, &v_STRING,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ NULL))
-+ _dbus_assert_not_reached ("oom");
-+
-+ check_matching (message1, 1,
-+ should_match_message_1,
-+ should_not_match_message_1);
-+
-+ dbus_message_unref (message1);
-+}
-+
-+dbus_bool_t
-+bus_signals_test (const DBusString *test_data_dir)
-+{
-+ BusMatchmaker *matchmaker;
-+
-+ matchmaker = bus_matchmaker_new ();
-+ bus_matchmaker_ref (matchmaker);
-+ bus_matchmaker_unref (matchmaker);
-+ bus_matchmaker_unref (matchmaker);
-+
-+ if (!_dbus_test_oom_handling ("parsing match rules", test_parsing, NULL))
-+ _dbus_assert_not_reached ("Parsing match rules test failed");
-+
-+ test_equality ();
-+
-+ test_matching ();
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-+
-diff -Naur dbus-0.61.orig/bus/signals.h dbus-0.61/bus/signals.h
---- dbus-0.61.orig/bus/signals.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/signals.h 2005-07-29 19:43:30.000000000 +0200
-@@ -0,0 +1,87 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* signals.h Bus signal connection implementation
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_SIGNALS_H
-+#define BUS_SIGNALS_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-sysdeps.h>
-+#include "connection.h"
-+
-+typedef enum
-+{
-+ BUS_MATCH_MESSAGE_TYPE = 1 << 0,
-+ BUS_MATCH_INTERFACE = 1 << 1,
-+ BUS_MATCH_MEMBER = 1 << 2,
-+ BUS_MATCH_SENDER = 1 << 3,
-+ BUS_MATCH_DESTINATION = 1 << 4,
-+ BUS_MATCH_PATH = 1 << 5,
-+ BUS_MATCH_ARGS = 1 << 6
-+} BusMatchFlags;
-+
-+BusMatchRule* bus_match_rule_new (DBusConnection *matches_go_to);
-+BusMatchRule* bus_match_rule_ref (BusMatchRule *rule);
-+void bus_match_rule_unref (BusMatchRule *rule);
-+
-+dbus_bool_t bus_match_rule_set_message_type (BusMatchRule *rule,
-+ int type);
-+dbus_bool_t bus_match_rule_set_interface (BusMatchRule *rule,
-+ const char *interface);
-+dbus_bool_t bus_match_rule_set_member (BusMatchRule *rule,
-+ const char *member);
-+dbus_bool_t bus_match_rule_set_sender (BusMatchRule *rule,
-+ const char *sender);
-+dbus_bool_t bus_match_rule_set_destination (BusMatchRule *rule,
-+ const char *destination);
-+dbus_bool_t bus_match_rule_set_path (BusMatchRule *rule,
-+ const char *path);
-+dbus_bool_t bus_match_rule_set_arg (BusMatchRule *rule,
-+ int arg,
-+ const char *value);
-+
-+BusMatchRule* bus_match_rule_parse (DBusConnection *matches_go_to,
-+ const DBusString *rule_text,
-+ DBusError *error);
-+
-+BusMatchmaker* bus_matchmaker_new (void);
-+BusMatchmaker* bus_matchmaker_ref (BusMatchmaker *matchmaker);
-+void bus_matchmaker_unref (BusMatchmaker *matchmaker);
-+
-+dbus_bool_t bus_matchmaker_add_rule (BusMatchmaker *matchmaker,
-+ BusMatchRule *rule);
-+dbus_bool_t bus_matchmaker_remove_rule_by_value (BusMatchmaker *matchmaker,
-+ BusMatchRule *value,
-+ DBusError *error);
-+void bus_matchmaker_remove_rule (BusMatchmaker *matchmaker,
-+ BusMatchRule *rule);
-+void bus_matchmaker_disconnected (BusMatchmaker *matchmaker,
-+ DBusConnection *disconnected);
-+dbus_bool_t bus_matchmaker_get_recipients (BusMatchmaker *matchmaker,
-+ BusConnections *connections,
-+ DBusConnection *sender,
-+ DBusConnection *addressed_recipient,
-+ DBusMessage *message,
-+ DBusList **recipients_p);
-+
-+#endif /* BUS_SIGNALS_H */
-diff -Naur dbus-0.61.orig/bus/system.conf.in dbus-0.61/bus/system.conf.in
---- dbus-0.61.orig/bus/system.conf.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/system.conf.in 2005-07-15 19:28:35.000000000 +0200
-@@ -0,0 +1,62 @@
-+<!-- This configuration file controls the systemwide message bus.
-+ Add a system-local.conf and edit that rather than changing this
-+ file directly. -->
-+
-+<!-- Note that there are any number of ways you can hose yourself
-+ security-wise by screwing up this file; in particular, you
-+ probably don't want to listen on any more addresses, add any more
-+ auth mechanisms, run as a different user, etc. -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+
-+ <!-- Our well-known bus type, do not change this -->
-+ <type>system</type>
-+
-+ <!-- Run as special user -->
-+ <user>@DBUS_USER@</user>
-+
-+ <!-- Fork into daemon mode -->
-+ <fork/>
-+
-+ <!-- Write a pid file -->
-+ <pidfile>@DBUS_SYSTEM_PID_FILE@</pidfile>
-+
-+ <!-- Only allow socket-credentials-based authentication -->
-+ <auth>EXTERNAL</auth>
-+
-+ <!-- Only listen on a local socket. (abstract=/path/to/socket
-+ means use abstract namespace, don't really create filesystem
-+ file; only Linux supports this. Use path=/whatever on other
-+ systems.) -->
-+ <listen>@DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@</listen>
-+
-+ <policy context="default">
-+ <!-- Deny everything then punch holes -->
-+ <deny send_interface="*"/>
-+ <deny receive_interface="*"/>
-+ <deny own="*"/>
-+ <!-- But allow all users to connect -->
-+ <allow user="*"/>
-+ <!-- Allow anyone to talk to the message bus -->
-+ <!-- FIXME I think currently these allow rules are always implicit
-+ even if they aren't in here -->
-+ <allow send_destination="org.freedesktop.DBus"/>
-+ <allow receive_sender="org.freedesktop.DBus"/>
-+ <!-- valid replies are always allowed -->
-+ <allow send_requested_reply="true"/>
-+ <allow receive_requested_reply="true"/>
-+ </policy>
-+
-+ <!-- Config files are placed here that among other things, punch
-+ holes in the above policy for specific services. -->
-+ <includedir>system.d</includedir>
-+
-+ <!-- This is included last so local configuration can override what's
-+ in this standard file -->
-+ <include ignore_missing="yes">system-local.conf</include>
-+
-+ <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include>
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/bus/test-main.c dbus-0.61/bus/test-main.c
---- dbus-0.61.orig/bus/test-main.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/test-main.c 2004-11-03 17:38:35.000000000 +0100
-@@ -0,0 +1,154 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* test-main.c main() for make check
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "test.h"
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-sysdeps.h>
-+#include <dbus/dbus-internals.h>
-+#include "selinux.h"
-+
-+#ifdef DBUS_BUILD_TESTS
-+static void
-+die (const char *failure)
-+{
-+ fprintf (stderr, "Unit test failed: %s\n", failure);
-+ exit (1);
-+}
-+
-+static void
-+check_memleaks (const char *name)
-+{
-+ dbus_shutdown ();
-+
-+ printf ("%s: checking for memleaks\n", name);
-+ if (_dbus_get_malloc_blocks_outstanding () != 0)
-+ {
-+ _dbus_warn ("%d dbus_malloc blocks were not freed\n",
-+ _dbus_get_malloc_blocks_outstanding ());
-+ die ("memleaks");
-+ }
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+static void
-+test_pre_hook (void)
-+{
-+
-+ if (_dbus_getenv ("DBUS_TEST_SELINUX")
-+ && (!bus_selinux_pre_init ()
-+ || !bus_selinux_full_init ()))
-+ die ("could not init selinux support");
-+}
-+
-+static char *progname = "";
-+static void
-+test_post_hook (void)
-+{
-+ if (_dbus_getenv ("DBUS_TEST_SELINUX"))
-+ bus_selinux_shutdown ();
-+ check_memleaks (progname);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ const char *dir;
-+ DBusString test_data_dir;
-+
-+ progname = argv[0];
-+
-+ if (argc > 1)
-+ dir = argv[1];
-+ else
-+ dir = _dbus_getenv ("DBUS_TEST_DATA");
-+
-+ if (dir == NULL)
-+ {
-+ fprintf (stderr, "Must specify test data directory as argv[1] or in DBUS_TEST_DATA env variable\n");
-+ return 1;
-+ }
-+
-+ _dbus_string_init_const (&test_data_dir, dir);
-+
-+#if 0
-+ /* FIXME this is disabled because of thread bugs that need fixing... */
-+ if (!_dbus_threads_init_debug ())
-+ die ("initializing debug threads");
-+#endif
-+
-+ test_pre_hook ();
-+ printf ("%s: Running expire list test\n", argv[0]);
-+ if (!bus_expire_list_test (&test_data_dir))
-+ die ("expire list");
-+ test_post_hook ();
-+
-+ test_pre_hook ();
-+ printf ("%s: Running config file parser test\n", argv[0]);
-+ if (!bus_config_parser_test (&test_data_dir))
-+ die ("parser");
-+ test_post_hook ();
-+
-+ test_pre_hook ();
-+ printf ("%s: Running policy test\n", argv[0]);
-+ if (!bus_policy_test (&test_data_dir))
-+ die ("policy");
-+ test_post_hook ();
-+
-+ test_pre_hook ();
-+ printf ("%s: Running signals test\n", argv[0]);
-+ if (!bus_signals_test (&test_data_dir))
-+ die ("signals");
-+ test_post_hook ();
-+
-+ test_pre_hook ();
-+ printf ("%s: Running SHA1 connection test\n", argv[0]);
-+ if (!bus_dispatch_sha1_test (&test_data_dir))
-+ die ("sha1");
-+ test_post_hook ();
-+
-+ test_pre_hook ();
-+ printf ("%s: Running message dispatch test\n", argv[0]);
-+ if (!bus_dispatch_test (&test_data_dir))
-+ die ("dispatch");
-+ test_post_hook ();
-+
-+ test_pre_hook ();
-+ printf ("%s: Running service files reloading test\n", argv[0]);
-+ if (!bus_activation_service_reload_test (&test_data_dir))
-+ die ("service reload");
-+ test_post_hook ();
-+
-+ printf ("%s: Success\n", argv[0]);
-+
-+
-+ return 0;
-+#else /* DBUS_BUILD_TESTS */
-+
-+ printf ("Not compiled with test support\n");
-+
-+ return 0;
-+#endif
-+}
-diff -Naur dbus-0.61.orig/bus/test.c dbus-0.61/bus/test.c
---- dbus-0.61.orig/bus/test.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/test.c 2005-02-17 22:19:49.000000000 +0100
-@@ -0,0 +1,345 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* test.c unit test routines
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "test.h"
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-list.h>
-+
-+/* The "debug client" watch/timeout handlers don't dispatch messages,
-+ * as we manually pull them in order to verify them. This is why they
-+ * are different from the real handlers in connection.c
-+ */
-+static DBusList *clients = NULL;
-+static DBusLoop *client_loop = NULL;
-+
-+static dbus_bool_t
-+client_watch_callback (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data)
-+{
-+ /* FIXME this can be done in dbus-mainloop.c
-+ * if the code in activation.c for the babysitter
-+ * watch handler is fixed.
-+ */
-+
-+ return dbus_watch_handle (watch, condition);
-+}
-+
-+static dbus_bool_t
-+add_client_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ return _dbus_loop_add_watch (client_loop,
-+ watch, client_watch_callback, connection,
-+ NULL);
-+}
-+
-+static void
-+remove_client_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ _dbus_loop_remove_watch (client_loop,
-+ watch, client_watch_callback, connection);
-+}
-+
-+static void
-+client_timeout_callback (DBusTimeout *timeout,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ dbus_connection_ref (connection);
-+
-+ /* can return FALSE on OOM but we just let it fire again later */
-+ dbus_timeout_handle (timeout);
-+
-+ dbus_connection_unref (connection);
-+}
-+
-+static dbus_bool_t
-+add_client_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ return _dbus_loop_add_timeout (client_loop, timeout, client_timeout_callback, connection, NULL);
-+}
-+
-+static void
-+remove_client_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ DBusConnection *connection = data;
-+
-+ _dbus_loop_remove_timeout (client_loop, timeout, client_timeout_callback, connection);
-+}
-+
-+static DBusHandlerResult
-+client_disconnect_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ if (!dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+
-+ _dbus_verbose ("Removing client %p in disconnect handler\n",
-+ connection);
-+
-+ _dbus_list_remove (&clients, connection);
-+
-+ dbus_connection_unref (connection);
-+
-+ if (clients == NULL)
-+ {
-+ _dbus_loop_unref (client_loop);
-+ client_loop = NULL;
-+ }
-+
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+}
-+
-+dbus_bool_t
-+bus_setup_debug_client (DBusConnection *connection)
-+{
-+ dbus_bool_t retval;
-+
-+ if (!dbus_connection_add_filter (connection,
-+ client_disconnect_filter,
-+ NULL, NULL))
-+ return FALSE;
-+
-+ retval = FALSE;
-+
-+ if (client_loop == NULL)
-+ {
-+ client_loop = _dbus_loop_new ();
-+ if (client_loop == NULL)
-+ goto out;
-+ }
-+
-+ if (!dbus_connection_set_watch_functions (connection,
-+ add_client_watch,
-+ remove_client_watch,
-+ NULL,
-+ connection,
-+ NULL))
-+ goto out;
-+
-+ if (!dbus_connection_set_timeout_functions (connection,
-+ add_client_timeout,
-+ remove_client_timeout,
-+ NULL,
-+ connection, NULL))
-+ goto out;
-+
-+ if (!_dbus_list_append (&clients, connection))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (!retval)
-+ {
-+ dbus_connection_remove_filter (connection,
-+ client_disconnect_filter,
-+ NULL);
-+
-+ dbus_connection_set_watch_functions (connection,
-+ NULL, NULL, NULL, NULL, NULL);
-+ dbus_connection_set_timeout_functions (connection,
-+ NULL, NULL, NULL, NULL, NULL);
-+
-+ _dbus_list_remove_last (&clients, connection);
-+
-+ if (clients == NULL)
-+ {
-+ _dbus_loop_unref (client_loop);
-+ client_loop = NULL;
-+ }
-+ }
-+
-+ return retval;
-+}
-+
-+void
-+bus_test_clients_foreach (BusConnectionForeachFunction function,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&clients);
-+ while (link != NULL)
-+ {
-+ DBusConnection *connection = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&clients, link);
-+
-+ if (!(* function) (connection, data))
-+ break;
-+
-+ link = next;
-+ }
-+}
-+
-+dbus_bool_t
-+bus_test_client_listed (DBusConnection *connection)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&clients);
-+ while (link != NULL)
-+ {
-+ DBusConnection *c = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&clients, link);
-+
-+ if (c == connection)
-+ return TRUE;
-+
-+ link = next;
-+ }
-+
-+ return FALSE;
-+}
-+
-+void
-+bus_test_run_clients_loop (dbus_bool_t block_once)
-+{
-+ if (client_loop == NULL)
-+ return;
-+
-+ _dbus_verbose ("---> Dispatching on \"client side\"\n");
-+
-+ /* dispatch before we block so pending dispatches
-+ * won't make our block return early
-+ */
-+ _dbus_loop_dispatch (client_loop);
-+
-+ /* Do one blocking wait, since we're expecting data */
-+ if (block_once)
-+ {
-+ _dbus_verbose ("---> blocking on \"client side\"\n");
-+ _dbus_loop_iterate (client_loop, TRUE);
-+ }
-+
-+ /* Then mop everything up */
-+ while (_dbus_loop_iterate (client_loop, FALSE))
-+ ;
-+
-+ _dbus_verbose ("---> Done dispatching on \"client side\"\n");
-+}
-+
-+void
-+bus_test_run_bus_loop (BusContext *context,
-+ dbus_bool_t block_once)
-+{
-+ _dbus_verbose ("---> Dispatching on \"server side\"\n");
-+
-+ /* dispatch before we block so pending dispatches
-+ * won't make our block return early
-+ */
-+ _dbus_loop_dispatch (bus_context_get_loop (context));
-+
-+ /* Do one blocking wait, since we're expecting data */
-+ if (block_once)
-+ {
-+ _dbus_verbose ("---> blocking on \"server side\"\n");
-+ _dbus_loop_iterate (bus_context_get_loop (context), TRUE);
-+ }
-+
-+ /* Then mop everything up */
-+ while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE))
-+ ;
-+
-+ _dbus_verbose ("---> Done dispatching on \"server side\"\n");
-+}
-+
-+void
-+bus_test_run_everything (BusContext *context)
-+{
-+ while (_dbus_loop_iterate (bus_context_get_loop (context), FALSE) ||
-+ (client_loop == NULL || _dbus_loop_iterate (client_loop, FALSE)))
-+ ;
-+}
-+
-+BusContext*
-+bus_context_new_test (const DBusString *test_data_dir,
-+ const char *filename)
-+{
-+ DBusError error;
-+ DBusString config_file;
-+ DBusString relative;
-+ BusContext *context;
-+
-+ if (!_dbus_string_init (&config_file))
-+ {
-+ _dbus_warn ("No memory\n");
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_copy (test_data_dir, 0,
-+ &config_file, 0))
-+ {
-+ _dbus_warn ("No memory\n");
-+ _dbus_string_free (&config_file);
-+ return NULL;
-+ }
-+
-+ _dbus_string_init_const (&relative, filename);
-+
-+ if (!_dbus_concat_dir_and_file (&config_file, &relative))
-+ {
-+ _dbus_warn ("No memory\n");
-+ _dbus_string_free (&config_file);
-+ return NULL;
-+ }
-+
-+ dbus_error_init (&error);
-+ context = bus_context_new (&config_file, FALSE, -1, -1, &error);
-+ if (context == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&error);
-+
-+ _dbus_warn ("Failed to create debug bus context from configuration file %s: %s\n",
-+ filename, error.message);
-+
-+ dbus_error_free (&error);
-+
-+ _dbus_string_free (&config_file);
-+
-+ return NULL;
-+ }
-+
-+ _dbus_string_free (&config_file);
-+
-+ return context;
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/bus/test.h dbus-0.61/bus/test.h
---- dbus-0.61.orig/bus/test.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/test.h 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,57 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* test.h unit test routines
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_TEST_H
-+#define BUS_TEST_H
-+
-+#include <config.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-string.h>
-+#include "connection.h"
-+
-+dbus_bool_t bus_dispatch_test (const DBusString *test_data_dir);
-+dbus_bool_t bus_dispatch_sha1_test (const DBusString *test_data_dir);
-+dbus_bool_t bus_policy_test (const DBusString *test_data_dir);
-+dbus_bool_t bus_config_parser_test (const DBusString *test_data_dir);
-+dbus_bool_t bus_signals_test (const DBusString *test_data_dir);
-+dbus_bool_t bus_expire_list_test (const DBusString *test_data_dir);
-+dbus_bool_t bus_activation_service_reload_test (const DBusString *test_data_dir);
-+dbus_bool_t bus_setup_debug_client (DBusConnection *connection);
-+void bus_test_clients_foreach (BusConnectionForeachFunction function,
-+ void *data);
-+dbus_bool_t bus_test_client_listed (DBusConnection *connection);
-+void bus_test_run_bus_loop (BusContext *context,
-+ dbus_bool_t block);
-+void bus_test_run_clients_loop (dbus_bool_t block);
-+void bus_test_run_everything (BusContext *context);
-+BusContext* bus_context_new_test (const DBusString *test_data_dir,
-+ const char *filename);
-+
-+
-+
-+#endif
-+
-+#endif /* BUS_TEST_H */
-diff -Naur dbus-0.61.orig/bus/utils.c dbus-0.61/bus/utils.c
---- dbus-0.61.orig/bus/utils.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/utils.c 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,48 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* utils.c General utility functions
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "utils.h"
-+#include <dbus/dbus-sysdeps.h>
-+#include <dbus/dbus-mainloop.h>
-+
-+const char bus_no_memory_message[] = "Memory allocation failure in message bus";
-+
-+void
-+bus_connection_dispatch_all_messages (DBusConnection *connection)
-+{
-+ while (bus_connection_dispatch_one_message (connection))
-+ ;
-+}
-+
-+dbus_bool_t
-+bus_connection_dispatch_one_message (DBusConnection *connection)
-+{
-+ DBusDispatchStatus status;
-+
-+ while ((status = dbus_connection_dispatch (connection)) == DBUS_DISPATCH_NEED_MEMORY)
-+ _dbus_wait_for_memory ();
-+
-+ return status == DBUS_DISPATCH_DATA_REMAINS;
-+}
-diff -Naur dbus-0.61.orig/bus/utils.h dbus-0.61/bus/utils.h
---- dbus-0.61.orig/bus/utils.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/bus/utils.h 2004-08-10 05:06:59.000000000 +0200
-@@ -0,0 +1,36 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* utils.h General utility functions
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef BUS_UTILS_H
-+#define BUS_UTILS_H
-+
-+#include <dbus/dbus.h>
-+
-+extern const char bus_no_memory_message[];
-+#define BUS_SET_OOM(error) dbus_set_error_const ((error), DBUS_ERROR_NO_MEMORY, bus_no_memory_message)
-+
-+void bus_connection_dispatch_all_messages (DBusConnection *connection);
-+dbus_bool_t bus_connection_dispatch_one_message (DBusConnection *connection);
-+
-+#endif /* BUS_UTILS_H */
-diff -Naur dbus-0.61.orig/compile dbus-0.61/compile
---- dbus-0.61.orig/compile 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/compile 2005-12-19 16:38:26.000000000 +0100
-@@ -0,0 +1,142 @@
-+#! /bin/sh
-+# Wrapper for compilers which do not understand `-c -o'.
-+
-+scriptversion=2005-05-14.22
-+
-+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
-+# Written by Tom Tromey <tromey at cygnus.com>.
-+#
-+# 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 2, or (at your option)
-+# 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, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+# This file is maintained in Automake, please report
-+# bugs to <bug-automake at gnu.org> or send patches to
-+# <automake-patches at gnu.org>.
-+
-+case $1 in
-+ '')
-+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
-+ exit 1;
-+ ;;
-+ -h | --h*)
-+ cat <<\EOF
-+Usage: compile [--help] [--version] PROGRAM [ARGS]
-+
-+Wrapper for compilers which do not understand `-c -o'.
-+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
-+arguments, and rename the output as expected.
-+
-+If you are trying to build a whole package this is not the
-+right script to run: please start by reading the file `INSTALL'.
-+
-+Report bugs to <bug-automake at gnu.org>.
-+EOF
-+ exit $?
-+ ;;
-+ -v | --v*)
-+ echo "compile $scriptversion"
-+ exit $?
-+ ;;
-+esac
-+
-+ofile=
-+cfile=
-+eat=
-+
-+for arg
-+do
-+ if test -n "$eat"; then
-+ eat=
-+ else
-+ case $1 in
-+ -o)
-+ # configure might choose to run compile as `compile cc -o foo foo.c'.
-+ # So we strip `-o arg' only if arg is an object.
-+ eat=1
-+ case $2 in
-+ *.o | *.obj)
-+ ofile=$2
-+ ;;
-+ *)
-+ set x "$@" -o "$2"
-+ shift
-+ ;;
-+ esac
-+ ;;
-+ *.c)
-+ cfile=$1
-+ set x "$@" "$1"
-+ shift
-+ ;;
-+ *)
-+ set x "$@" "$1"
-+ shift
-+ ;;
-+ esac
-+ fi
-+ shift
-+done
-+
-+if test -z "$ofile" || test -z "$cfile"; then
-+ # If no `-o' option was seen then we might have been invoked from a
-+ # pattern rule where we don't need one. That is ok -- this is a
-+ # normal compilation that the losing compiler can handle. If no
-+ # `.c' file was seen then we are probably linking. That is also
-+ # ok.
-+ exec "$@"
-+fi
-+
-+# Name of file we expect compiler to create.
-+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
-+
-+# Create the lock directory.
-+# Note: use `[/.-]' here to ensure that we don't use the same name
-+# that we are using for the .o file. Also, base the name on the expected
-+# object file name, since that is what matters with a parallel build.
-+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
-+while true; do
-+ if mkdir "$lockdir" >/dev/null 2>&1; then
-+ break
-+ fi
-+ sleep 1
-+done
-+# FIXME: race condition here if user kills between mkdir and trap.
-+trap "rmdir '$lockdir'; exit 1" 1 2 15
-+
-+# Run the compile.
-+"$@"
-+ret=$?
-+
-+if test -f "$cofile"; then
-+ mv "$cofile" "$ofile"
-+elif test -f "${cofile}bj"; then
-+ mv "${cofile}bj" "$ofile"
-+fi
-+
-+rmdir "$lockdir"
-+exit $ret
-+
-+# Local Variables:
-+# mode: shell-script
-+# sh-indentation: 2
-+# eval: (add-hook 'write-file-hooks 'time-stamp)
-+# time-stamp-start: "scriptversion="
-+# time-stamp-format: "%:y-%02m-%02d.%02H"
-+# time-stamp-end: "$"
-+# End:
+ test -z "$GCJ" && AC_MSG_ERROR([no acceptable gcj found in \$PATH])
+ if test "x${GCJFLAGS-unset}" = xunset; then
+ GCJFLAGS="-g -O2"
diff -Naur dbus-0.61.orig/config.guess dbus-0.61/config.guess
---- dbus-0.61.orig/config.guess 1970-01-01 01:00:00.000000000 +0100
+--- dbus-0.61.orig/config.guess 2006-02-27 22:56:46.000000000 +0100
+++ dbus-0.61/config.guess 2006-02-25 16:29:12.000000000 +0100
-@@ -0,0 +1,1497 @@
-+#! /bin/sh
-+# Attempt to guess a canonical system name.
-+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+@@ -1,9 +1,9 @@
+ #! /bin/sh
+ # Attempt to guess a canonical system name.
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-+
+
+-timestamp='2003-06-17'
+timestamp='2006-02-23'
-+
-+# This file 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 2 of the License, or
-+# (at your option) 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, write to the Free Software
+
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+@@ -17,13 +17,15 @@
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
-+#
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
+ #
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+
+
-+
-+# Originally written by Per Bothner <per at bothner.com>.
-+# Please send patches to <config-patches at gnu.org>. Submit a context
-+# diff and a properly formatted ChangeLog entry.
-+#
-+# This script attempts to guess a canonical system name similar to
-+# config.sub. If it succeeds, it prints the system name on stdout, and
-+# exits with 0. Otherwise, it exits with 1.
-+#
-+# The plan is that this can be called by configure scripts if you
-+# don't specify an explicit build system type.
-+
-+me=`echo "$0" | sed -e 's,.*/,,'`
-+
-+usage="\
-+Usage: $0 [OPTION]
-+
-+Output the configuration name of the system \`$me' is run on.
-+
-+Operation modes:
-+ -h, --help print this help, then exit
-+ -t, --time-stamp print date of last modification, then exit
-+ -v, --version print version number, then exit
-+
-+Report bugs and patches to <config-patches at gnu.org>."
-+
-+version="\
-+GNU config.guess ($timestamp)
-+
-+Originally written by Per Bothner.
+ # Originally written by Per Bothner <per at bothner.com>.
+ # Please send patches to <config-patches at gnu.org>. Submit a context
+ # diff and a properly formatted ChangeLog entry.
+@@ -53,7 +55,7 @@
+ GNU config.guess ($timestamp)
+
+ Originally written by Per Bothner.
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-+Free Software Foundation, Inc.
-+
-+This is free software; see the source for copying conditions. There is NO
-+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-+
-+help="
-+Try \`$me --help' for more information."
-+
-+# Parse command line
-+while test $# -gt 0 ; do
-+ case $1 in
-+ --time-stamp | --time* | -t )
+ Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+@@ -66,11 +68,11 @@
+ while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+- echo "$timestamp" ; exit 0 ;;
+ echo "$timestamp" ; exit ;;
-+ --version | -v )
+ --version | -v )
+- echo "$version" ; exit 0 ;;
+ echo "$version" ; exit ;;
-+ --help | --h* | -h )
+ --help | --h* | -h )
+- echo "$usage"; exit 0 ;;
+ echo "$usage"; exit ;;
-+ -- ) # Stop option processing
-+ shift; break ;;
-+ - ) # Use stdin as input.
-+ break ;;
-+ -* )
-+ echo "$me: invalid option $1$help" >&2
-+ exit 1 ;;
-+ * )
-+ break ;;
-+ esac
-+done
-+
-+if test $# != 0; then
-+ echo "$me: too many arguments$help" >&2
-+ exit 1
-+fi
-+
-+trap 'exit 1' 1 2 15
-+
-+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-+# compiler to aid in system detection is discouraged as it requires
-+# temporary files to be created and, as you can see below, it is a
-+# headache to deal with in a portable fashion.
-+
-+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-+# use `HOST_CC' if defined, but it is deprecated.
-+
-+# Portable tmp directory creation inspired by the Autoconf team.
-+
-+set_cc_for_build='
-+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-+: ${TMPDIR=/tmp} ;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+@@ -104,7 +106,7 @@
+ trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+ trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+ : ${TMPDIR=/tmp} ;
+- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
-+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
-+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
-+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-+dummy=$tmp/dummy ;
-+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-+case $CC_FOR_BUILD,$HOST_CC,$CC in
-+ ,,) echo "int x;" > $dummy.c ;
-+ for c in cc gcc c89 c99 ; do
-+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-+ CC_FOR_BUILD="$c"; break ;
-+ fi ;
-+ done ;
-+ if test x"$CC_FOR_BUILD" = x ; then
-+ CC_FOR_BUILD=no_compiler_found ;
-+ fi
-+ ;;
-+ ,,*) CC_FOR_BUILD=$CC ;;
-+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+@@ -123,7 +125,7 @@
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+-esac ;'
+esac ; set_cc_for_build= ;'
-+
-+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-+# (ghazi at noc.rutgers.edu 1994-08-24)
-+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-+ PATH=$PATH:/.attbin ; export PATH
-+fi
-+
-+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-+
-+# Note: order is significant - the case branches are not exclusive.
-+
-+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-+ *:NetBSD:*:*)
-+ # NetBSD (nbsd) targets should (where applicable) match one or
-+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
-+ # switched to ELF, *-*-netbsd* would select the old
-+ # object file format. This provides both forward
-+ # compatibility and a consistent mechanism for selecting the
-+ # object file format.
-+ #
-+ # Note: NetBSD doesn't particularly care about the vendor
-+ # portion of the name. We always set it to "unknown".
-+ sysctl="sysctl -n hw.machine_arch"
-+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-+ case "${UNAME_MACHINE_ARCH}" in
-+ armeb) machine=armeb-unknown ;;
-+ arm*) machine=arm-unknown ;;
-+ sh3el) machine=shl-unknown ;;
-+ sh3eb) machine=sh-unknown ;;
-+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-+ esac
-+ # The Operating System including object format, if it has switched
-+ # to ELF recently, or will in the future.
-+ case "${UNAME_MACHINE_ARCH}" in
-+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-+ eval $set_cc_for_build
-+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-+ | grep __ELF__ >/dev/null
-+ then
-+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-+ # Return netbsd for either. FIX?
-+ os=netbsd
-+ else
-+ os=netbsdelf
-+ fi
-+ ;;
-+ *)
-+ os=netbsd
-+ ;;
-+ esac
-+ # The OS release
-+ # Debian GNU/NetBSD machines have a different userland, and
-+ # thus, need a distinct triplet. However, they do not need
-+ # kernel version information, so it can be replaced with a
-+ # suitable tag, in the style of linux-gnu.
-+ case "${UNAME_VERSION}" in
-+ Debian*)
-+ release='-gnu'
-+ ;;
-+ *)
-+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-+ ;;
-+ esac
-+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-+ # contains redundant information, the shorter form:
-+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-+ echo "${machine}-${os}${release}"
+
+ # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+ # (ghazi at noc.rutgers.edu 1994-08-24)
+@@ -136,13 +138,6 @@
+ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+-## for Red Hat Linux
+-if test -f /etc/redhat-release ; then
+- VENDOR=redhat ;
+-else
+- VENDOR= ;
+-fi
+-
+ # Note: order is significant - the case branches are not exclusive.
+
+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+@@ -203,50 +198,32 @@
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+- exit 0 ;;
+- amiga:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- arc:OpenBSD:*:*)
+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- hp300:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- mac68k:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- macppc:OpenBSD:*:*)
+- echo powerpc-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- mvme68k:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- mvme88k:OpenBSD:*:*)
+- echo m88k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- mvmeppc:OpenBSD:*:*)
+- echo powerpc-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- pmax:OpenBSD:*:*)
+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- sgi:OpenBSD:*:*)
+- echo mipseb-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- sun3:OpenBSD:*:*)
+- echo m68k-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+- wgrisc:OpenBSD:*:*)
+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:OpenBSD:*:*)
+ *:OpenBSD:*:*)
+- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+- exit 0 ;;
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
@@ -49812,79 +301,62 @@
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
-+ alpha:OSF1:*:*)
+ alpha:OSF1:*:*)
+- if test $UNAME_RELEASE = "V4.0"; then
+ case $UNAME_RELEASE in
+ *4.0)
-+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+- fi
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
-+ # According to Compaq, /usr/sbin/psrinfo has been available on
-+ # OSF/1 and Tru64 systems produced since 1995. I hope that
-+ # covers most systems running today. This code pipes the CPU
-+ # types through head -n 1, so we only detect the type of CPU 0.
-+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-+ case "$ALPHA_CPU_TYPE" in
-+ "EV4 (21064)")
-+ UNAME_MACHINE="alpha" ;;
-+ "EV4.5 (21064)")
-+ UNAME_MACHINE="alpha" ;;
-+ "LCA4 (21066/21068)")
-+ UNAME_MACHINE="alpha" ;;
-+ "EV5 (21164)")
-+ UNAME_MACHINE="alphaev5" ;;
-+ "EV5.6 (21164A)")
-+ UNAME_MACHINE="alphaev56" ;;
-+ "EV5.6 (21164PC)")
-+ UNAME_MACHINE="alphapca56" ;;
-+ "EV5.7 (21164PC)")
-+ UNAME_MACHINE="alphapca57" ;;
-+ "EV6 (21264)")
-+ UNAME_MACHINE="alphaev6" ;;
-+ "EV6.7 (21264A)")
-+ UNAME_MACHINE="alphaev67" ;;
-+ "EV6.8CB (21264C)")
-+ UNAME_MACHINE="alphaev68" ;;
-+ "EV6.8AL (21264B)")
-+ UNAME_MACHINE="alphaev68" ;;
-+ "EV6.8CX (21264D)")
-+ UNAME_MACHINE="alphaev68" ;;
-+ "EV6.9A (21264/EV69A)")
-+ UNAME_MACHINE="alphaev69" ;;
-+ "EV7 (21364)")
-+ UNAME_MACHINE="alphaev7" ;;
-+ "EV7.9 (21364A)")
-+ UNAME_MACHINE="alphaev79" ;;
-+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+@@ -284,42 +261,49 @@
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
-+ # A Vn.n version is a released version.
-+ # A Tn.n version is a released field test version.
-+ # A Xn.n version is an unreleased experimental baselevel.
-+ # 1.2 uses "1.2" for uname -r.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+- exit 0 ;;
+- Alpha*:OpenVMS:*:*)
+- echo alpha-hp-vms
+- exit 0 ;;
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
-+ Alpha\ *:Windows_NT*:*)
-+ # How do we know it's Interix rather than the generic POSIX subsystem?
-+ # Should we change UNAME_MACHINE based on the output of uname instead
-+ # of the specific Alpha model?
-+ echo alpha-pc-interix
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+- exit 0 ;;
+ exit ;;
-+ 21064:Windows_NT:50:3)
-+ echo alpha-dec-winnt3.5
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+- exit 0 ;;
+ exit ;;
-+ Amiga*:UNIX_System_V:4.0:*)
-+ echo m68k-unknown-sysv4
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+- exit 0;;
+ exit ;;
-+ *:[Aa]miga[Oo][Ss]:*:*)
-+ echo ${UNAME_MACHINE}-unknown-amigaos
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+- exit 0 ;;
+ exit ;;
-+ *:[Mm]orph[Oo][Ss]:*:*)
-+ echo ${UNAME_MACHINE}-unknown-morphos
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+- exit 0 ;;
+ exit ;;
-+ *:OS/390:*:*)
-+ echo i370-ibm-openedition
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+- exit 0 ;;
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
@@ -49892,337 +364,299 @@
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
-+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-+ echo arm-acorn-riscix${UNAME_RELEASE}
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+- exit 0;;
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
-+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-+ echo hppa1.1-hitachi-hiuxmpp
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+- exit 0;;
+ exit ;;
-+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-+ # akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
-+ echo pyramid-pyramid-sysv3
-+ else
-+ echo pyramid-pyramid-bsd
-+ fi
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+@@ -327,32 +311,32 @@
+ else
+ echo pyramid-pyramid-bsd
+ fi
+- exit 0 ;;
+ exit ;;
-+ NILE*:*:*:dcosx)
-+ echo pyramid-pyramid-svr4
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+- exit 0 ;;
+ exit ;;
-+ DRS?6000:unix:4.0:6*)
-+ echo sparc-icl-nx6
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+- exit 0 ;;
+- DRS?6000:UNIX_SV:4.2*:7*)
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-+ case `/usr/bin/uname -p` in
+ case `/usr/bin/uname -p` in
+- sparc) echo sparc-icl-nx7 && exit 0 ;;
+ sparc) echo sparc-icl-nx7; exit ;;
-+ esac ;;
-+ sun4H:SunOS:5.*:*)
-+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
+ exit ;;
-+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
+ exit ;;
-+ i86pc:SunOS:5.*:*)
-+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
+ exit ;;
-+ sun4*:SunOS:6*:*)
-+ # According to config.sub, this is the proper way to canonicalize
-+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
-+ # it's likely to be more like Solaris than SunOS4.
-+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
+ exit ;;
-+ sun4*:SunOS:*:*)
-+ case "`/usr/bin/arch -k`" in
-+ Series*|S4*)
-+ UNAME_RELEASE=`uname -v`
-+ ;;
-+ esac
-+ # Japanese Language versions have a version number like `4.1.3-JL'.
-+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+@@ -361,10 +345,10 @@
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+- exit 0 ;;
+ exit ;;
-+ sun3*:SunOS:*:*)
-+ echo m68k-sun-sunos${UNAME_RELEASE}
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ sun*:*:4.2BSD:*)
-+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-+ case "`/bin/arch`" in
-+ sun3)
-+ echo m68k-sun-sunos${UNAME_RELEASE}
-+ ;;
-+ sun4)
-+ echo sparc-sun-sunos${UNAME_RELEASE}
-+ ;;
-+ esac
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+@@ -376,10 +360,10 @@
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+- exit 0 ;;
+ exit ;;
-+ aushp:SunOS:*:*)
-+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ # The situation for MiNT is a little confusing. The machine name
-+ # can be virtually everything (everything which is not
-+ # "atarist" or "atariste" at least should have a processor
-+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
-+ # to the lowercase version "mint" (or "freemint"). Finally
-+ # the system name "TOS" denotes a system which is actually not
-+ # MiNT. But MiNT is downward compatible to TOS, so this should
-+ # be no problem.
-+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-+ echo m68k-atari-mint${UNAME_RELEASE}
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+@@ -390,37 +374,40 @@
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-+ echo m68k-atari-mint${UNAME_RELEASE}
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-+ echo m68k-atari-mint${UNAME_RELEASE}
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-+ echo m68k-milan-mint${UNAME_RELEASE}
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-+ echo m68k-hades-mint${UNAME_RELEASE}
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-+ echo m68k-unknown-mint${UNAME_RELEASE}
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
-+ powerpc:machten:*:*)
-+ echo powerpc-apple-machten${UNAME_RELEASE}
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ RISC*:Mach:*:*)
-+ echo mips-dec-mach_bsd4.3
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+- exit 0 ;;
+ exit ;;
-+ RISC*:ULTRIX:*:*)
-+ echo mips-dec-ultrix${UNAME_RELEASE}
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ VAX*:ULTRIX*:*:*)
-+ echo vax-dec-ultrix${UNAME_RELEASE}
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ 2020:CLIX:*:* | 2430:CLIX:*:*)
-+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ mips:*:*:UMIPS | mips:*:*:RISCos)
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+#ifdef __cplusplus
-+#include <stdio.h> /* for printf() prototype */
-+ int main (int argc, char *argv[]) {
-+#else
-+ int main (argc, argv) int argc; char *argv[]; {
-+#endif
-+ #if defined (host_mips) && defined (MIPSEB)
-+ #if defined (SYSTYPE_SYSV)
-+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-+ #endif
-+ #if defined (SYSTYPE_SVR4)
-+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-+ #endif
-+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-+ #endif
-+ #endif
-+ exit (-1);
-+ }
-+EOF
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+@@ -444,32 +431,33 @@
+ exit (-1);
+ }
+ EOF
+- $CC_FOR_BUILD -o $dummy $dummy.c \
+- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+- && exit 0
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
-+ echo mips-mips-riscos${UNAME_RELEASE}
+ echo mips-mips-riscos${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ Motorola:PowerMAX_OS:*:*)
-+ echo powerpc-motorola-powermax
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+- exit 0 ;;
+ exit ;;
-+ Motorola:*:4.3:PL8-*)
-+ echo powerpc-harris-powermax
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+- exit 0 ;;
+ exit ;;
-+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-+ echo powerpc-harris-powermax
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+- exit 0 ;;
+ exit ;;
-+ Night_Hawk:Power_UNIX:*:*)
-+ echo powerpc-harris-powerunix
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+- exit 0 ;;
+ exit ;;
-+ m88k:CX/UX:7*:*)
-+ echo m88k-harris-cxux7
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+- exit 0 ;;
+ exit ;;
-+ m88k:*:4*:R4*)
-+ echo m88k-motorola-sysv4
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+- exit 0 ;;
+ exit ;;
-+ m88k:*:3*:R3*)
-+ echo m88k-motorola-sysv3
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+- exit 0 ;;
+ exit ;;
-+ AViiON:dgux:*:*)
-+ # DG/UX returns AViiON for all architectures
-+ UNAME_PROCESSOR=`/usr/bin/uname -p`
-+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-+ then
-+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-+ [ ${TARGET_BINARY_INTERFACE}x = x ]
-+ then
-+ echo m88k-dg-dgux${UNAME_RELEASE}
-+ else
-+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
-+ fi
-+ else
-+ echo i586-dg-dgux${UNAME_RELEASE}
-+ fi
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+@@ -485,29 +473,29 @@
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+- exit 0 ;;
+ exit ;;
-+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
-+ echo m88k-dolphin-sysv3
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+- exit 0 ;;
+ exit ;;
-+ M88*:*:R3*:*)
-+ # Delta 88k system running SVR3
-+ echo m88k-motorola-sysv3
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+- exit 0 ;;
+ exit ;;
-+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-+ echo m88k-tektronix-sysv3
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+- exit 0 ;;
+ exit ;;
-+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-+ echo m68k-tektronix-bsd
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+- exit 0 ;;
+ exit ;;
-+ *:IRIX*:*:*)
-+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+- exit 0 ;;
+ exit ;;
-+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-+ i*86:AIX:*:*)
-+ echo i386-ibm-aix
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+- exit 0 ;;
+ exit ;;
-+ ia64:AIX:*:*)
-+ if [ -x /usr/bin/oslevel ] ; then
-+ IBM_REV=`/usr/bin/oslevel`
-+ else
-+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-+ fi
-+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+@@ -515,7 +503,7 @@
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+- exit 0 ;;
+ exit ;;
-+ *:AIX:2:3)
-+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+ #include <sys/systemcfg.h>
-+
-+ main()
-+ {
-+ if (!__power_pc())
-+ exit(1);
-+ puts("powerpc-ibm-aix3.2.5");
-+ exit(0);
-+ }
-+EOF
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+@@ -530,14 +518,18 @@
+ exit(0);
+ }
+ EOF
+- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+- echo rs6000-ibm-aix3.2.5
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
-+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-+ echo rs6000-ibm-aix3.2.4
-+ else
-+ echo rs6000-ibm-aix3.2
-+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+- exit 0 ;;
+ exit ;;
-+ *:AIX:*:[45])
-+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-+ IBM_ARCH=rs6000
-+ else
-+ IBM_ARCH=powerpc
-+ fi
-+ if [ -x /usr/bin/oslevel ] ; then
-+ IBM_REV=`/usr/bin/oslevel`
-+ else
-+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-+ fi
-+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ *:AIX:*:[45])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+@@ -551,28 +543,28 @@
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+- exit 0 ;;
+ exit ;;
-+ *:AIX:*:*)
-+ echo rs6000-ibm-aix
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+- exit 0 ;;
+ exit ;;
-+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-+ echo romp-ibm-bsd4.4
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+- exit 0 ;;
+ exit ;;
-+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
-+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+- exit 0 ;; # report: romp-ibm BSD 4.3
+ exit ;; # report: romp-ibm BSD 4.3
-+ *:BOSX:*:*)
-+ echo rs6000-bull-bosx
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+- exit 0 ;;
+ exit ;;
-+ DPX/2?00:B.O.S.:*:*)
-+ echo m68k-bull-sysv3
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+- exit 0 ;;
+ exit ;;
-+ 9000/[34]??:4.3bsd:1.*:*)
-+ echo m68k-hp-bsd
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+- exit 0 ;;
+ exit ;;
-+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-+ echo m68k-hp-bsd4.4
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+- exit 0 ;;
+ exit ;;
-+ 9000/[34678]??:HP-UX:*:*)
-+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-+ case "${UNAME_MACHINE}" in
-+ 9000/31? ) HP_ARCH=m68000 ;;
-+ 9000/[34]?? ) HP_ARCH=m68k ;;
-+ 9000/[678][0-9][0-9])
-+ if [ -x /usr/bin/getconf ]; then
-+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-+ case "${sc_cpu_version}" in
-+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-+ 532) # CPU_PA_RISC2_0
-+ case "${sc_kernel_bits}" in
-+ 32) HP_ARCH="hppa2.0n" ;;
-+ 64) HP_ARCH="hppa2.0w" ;;
-+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
-+ esac ;;
-+ esac
-+ fi
-+ if [ "${HP_ARCH}" = "" ]; then
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+
-+ #define _HPUX_SOURCE
-+ #include <stdlib.h>
-+ #include <unistd.h>
-+
-+ int main ()
-+ {
-+ #if defined(_SC_KERNEL_BITS)
-+ long bits = sysconf(_SC_KERNEL_BITS);
-+ #endif
-+ long cpu = sysconf (_SC_CPU_VERSION);
-+
-+ switch (cpu)
-+ {
-+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-+ case CPU_PA_RISC2_0:
-+ #if defined(_SC_KERNEL_BITS)
-+ switch (bits)
-+ {
-+ case 64: puts ("hppa2.0w"); break;
-+ case 32: puts ("hppa2.0n"); break;
-+ default: puts ("hppa2.0"); break;
-+ } break;
-+ #else /* !defined(_SC_KERNEL_BITS) */
-+ puts ("hppa2.0"); break;
-+ #endif
-+ default: puts ("hppa1.0"); break;
-+ }
-+ exit (0);
-+ }
-+EOF
-+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-+ test -z "$HP_ARCH" && HP_ARCH=hppa
-+ fi ;;
-+ esac
-+ if [ ${HP_ARCH} = "hppa2.0w" ]
-+ then
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+@@ -634,9 +626,19 @@
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+- # avoid double evaluation of $set_cc_for_build
+- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
@@ -50236,132 +670,153 @@
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep __LP64__ >/dev/null
-+ then
-+ HP_ARCH="hppa2.0w"
-+ else
-+ HP_ARCH="hppa64"
-+ fi
-+ fi
-+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ then
+ HP_ARCH="hppa2.0w"
+ else
+@@ -644,11 +646,11 @@
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+- exit 0 ;;
+ exit ;;
-+ ia64:HP-UX:*:*)
-+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-+ echo ia64-hp-hpux${HPUX_REV}
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+- exit 0 ;;
+ exit ;;
-+ 3050*:HI-UX:*:*)
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+ #include <unistd.h>
-+ int
-+ main ()
-+ {
-+ long cpu = sysconf (_SC_CPU_VERSION);
-+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
-+ results, however. */
-+ if (CPU_IS_PA_RISC (cpu))
-+ {
-+ switch (cpu)
-+ {
-+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-+ default: puts ("hppa-hitachi-hiuxwe2"); break;
-+ }
-+ }
-+ else if (CPU_IS_HP_MC68K (cpu))
-+ puts ("m68k-hitachi-hiuxwe2");
-+ else puts ("unknown-hitachi-hiuxwe2");
-+ exit (0);
-+ }
-+EOF
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+@@ -676,150 +678,177 @@
+ exit (0);
+ }
+ EOF
+- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
-+ echo unknown-hitachi-hiuxwe2
+ echo unknown-hitachi-hiuxwe2
+- exit 0 ;;
+ exit ;;
-+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-+ echo hppa1.1-hp-bsd
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+- exit 0 ;;
+ exit ;;
-+ 9000/8??:4.3bsd:*:*)
-+ echo hppa1.0-hp-bsd
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+- exit 0 ;;
+ exit ;;
-+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-+ echo hppa1.0-hp-mpeix
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+- exit 0 ;;
+ exit ;;
-+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-+ echo hppa1.1-hp-osf
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+- exit 0 ;;
+ exit ;;
-+ hp8??:OSF1:*:*)
-+ echo hppa1.0-hp-osf
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+- exit 0 ;;
+ exit ;;
-+ i*86:OSF1:*:*)
-+ if [ -x /usr/sbin/sysversion ] ; then
-+ echo ${UNAME_MACHINE}-unknown-osf1mk
-+ else
-+ echo ${UNAME_MACHINE}-unknown-osf1
-+ fi
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+- exit 0 ;;
+ exit ;;
-+ parisc*:Lites*:*:*)
-+ echo hppa1.1-hp-lites
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+- exit 0 ;;
+ exit ;;
-+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-+ echo c1-convex-bsd
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+- exit 0 ;;
+ exit ;;
-+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-+ if getsysinfo -f scalar_acc
-+ then echo c32-convex-bsd
-+ else echo c2-convex-bsd
-+ fi
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+- exit 0 ;;
+ exit ;;
-+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-+ echo c34-convex-bsd
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+- exit 0 ;;
+ exit ;;
-+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-+ echo c38-convex-bsd
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+- exit 0 ;;
+ exit ;;
-+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-+ echo c4-convex-bsd
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+- exit 0 ;;
+ exit ;;
-+ CRAY*Y-MP:*:*:*)
-+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
+ exit ;;
-+ CRAY*[A-Z]90:*:*:*)
-+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-+ -e 's/\.[^.]*$/.X/'
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
+ exit ;;
-+ CRAY*TS:*:*:*)
-+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
+ exit ;;
-+ CRAY*T3E:*:*:*)
-+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
+ exit ;;
-+ CRAY*SV1:*:*:*)
-+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
+ exit ;;
-+ *:UNICOS/mp:*:*)
+ *:UNICOS/mp:*:*)
+- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+- exit 0 ;;
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
-+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+- exit 0 ;;
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
-+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ sparc*:BSD/OS:*:*)
-+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:BSD/OS:*:*)
-+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+- exit 0 ;;
+- *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
+- # Determine whether the default compiler uses glibc.
+- eval $set_cc_for_build
+- sed 's/^ //' << EOF >$dummy.c
+- #include <features.h>
+- #if __GLIBC__ >= 2
+- LIBC=gnu
+- #else
+- LIBC=
+- #endif
+-EOF
+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+- exit 0 ;;
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
@@ -50371,11 +826,13 @@
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
-+ i*:CYGWIN*:*)
-+ echo ${UNAME_MACHINE}-pc-cygwin
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+- exit 0 ;;
+ exit ;;
-+ i*:MINGW*:*)
-+ echo ${UNAME_MACHINE}-pc-mingw32
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+- exit 0 ;;
+ exit ;;
+ i*:MSYS_NT-*:*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
@@ -50384,8 +841,12 @@
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
-+ i*:PW*:*)
-+ echo ${UNAME_MACHINE}-pc-pw32
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+- exit 0 ;;
+- x86:Interix*:[34]*)
+- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+- exit 0 ;;
+ exit ;;
+ x86:Interix*:[345]*)
+ echo i586-pc-interix${UNAME_RELEASE}
@@ -50393,43 +854,52 @@
+ EM64T:Interix*:[345]*)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
-+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-+ echo i${UNAME_MACHINE}-pc-mks
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+- exit 0 ;;
+ exit ;;
-+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-+ # How do we know it's Interix rather than the generic POSIX subsystem?
-+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-+ # UNAME_MACHINE based on the output of uname instead of i386?
-+ echo i586-pc-interix
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+- exit 0 ;;
+ exit ;;
-+ i*:UWIN*:*)
-+ echo ${UNAME_MACHINE}-pc-uwin
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+- exit 0 ;;
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
-+ p*:CYGWIN*:*)
-+ echo powerpcle-unknown-cygwin
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+- exit 0 ;;
+ exit ;;
-+ prep*:SunOS:5.*:*)
-+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+- exit 0 ;;
+ exit ;;
-+ *:GNU:*:*)
+ *:GNU:*:*)
+ # the GNU system
-+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+- exit 0 ;;
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
-+ i*86:Minix:*:*)
-+ echo ${UNAME_MACHINE}-pc-minix
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+- exit 0 ;;
+ exit ;;
-+ arm*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
+ exit ;;
-+ cris:Linux:*:*)
-+ echo cris-axis-linux-gnu
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+- exit 0 ;;
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
@@ -50437,165 +907,149 @@
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
-+ ia64:Linux:*:*)
+ ia64:Linux:*:*)
+- echo ${UNAME_MACHINE}-${VENDOR:-unknown}-linux-gnu
+- exit 0 ;;
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
-+ m68*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
+ exit ;;
-+ mips:Linux:*:*)
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+ #undef CPU
-+ #undef mips
-+ #undef mipsel
-+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-+ CPU=mipsel
-+ #else
-+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-+ CPU=mips
-+ #else
-+ CPU=
-+ #endif
-+ #endif
-+EOF
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+@@ -836,8 +865,12 @@
+ #endif
+ #endif
+ EOF
+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-+ ;;
-+ mips64:Linux:*:*)
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+ #undef CPU
-+ #undef mips64
-+ #undef mips64el
-+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-+ CPU=mips64el
-+ #else
-+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-+ CPU=mips64
-+ #else
-+ CPU=
-+ #endif
-+ #endif
-+EOF
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+@@ -855,15 +888,22 @@
+ #endif
+ #endif
+ EOF
+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-+ ;;
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
-+ ppc:Linux:*:*)
+ ppc:Linux:*:*)
+- echo powerpc-${VENDOR:-unknown}-linux-gnu
+- exit 0 ;;
+ echo powerpc-unknown-linux-gnu
+ exit ;;
-+ ppc64:Linux:*:*)
+ ppc64:Linux:*:*)
+- echo powerpc64-${VENDOR:-unknown}-linux-gnu
+- exit 0 ;;
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
-+ alpha:Linux:*:*)
-+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-+ EV5) UNAME_MACHINE=alphaev5 ;;
-+ EV56) UNAME_MACHINE=alphaev56 ;;
-+ PCA56) UNAME_MACHINE=alphapca56 ;;
-+ PCA57) UNAME_MACHINE=alphapca56 ;;
-+ EV6) UNAME_MACHINE=alphaev6 ;;
-+ EV67) UNAME_MACHINE=alphaev67 ;;
-+ EV68*) UNAME_MACHINE=alphaev68 ;;
-+ esac
-+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+@@ -877,7 +917,7 @@
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+- exit 0 ;;
+ exit ;;
-+ parisc:Linux:*:* | hppa:Linux:*:*)
-+ # Look for CPU level
-+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
-+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
-+ *) echo hppa-unknown-linux-gnu ;;
-+ esac
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+@@ -885,25 +925,28 @@
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+- exit 0 ;;
+ exit ;;
-+ parisc64:Linux:*:* | hppa64:Linux:*:*)
-+ echo hppa64-unknown-linux-gnu
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+- exit 0 ;;
+ exit ;;
-+ s390:Linux:*:* | s390x:Linux:*:*)
+ s390:Linux:*:* | s390x:Linux:*:*)
+- echo ${UNAME_MACHINE}-${VENDOR:-ibm}-linux-gnu
+- exit 0 ;;
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
-+ sh64*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
+ exit ;;
-+ sh*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
+ exit ;;
-+ sparc:Linux:*:* | sparc64:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+- exit 0 ;;
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
-+ x86_64:Linux:*:*)
+ x86_64:Linux:*:*)
+- echo x86_64-${VENDOR:-unknown}-linux-gnu
+- exit 0 ;;
+ echo x86_64-unknown-linux-gnu
+ exit ;;
-+ i*86:Linux:*:*)
-+ # The BFD linker knows what the default object file format is, so
-+ # first see if it will tell us. cd to the root directory to prevent
-+ # problems with other programs or directories called `ld' in the path.
-+ # Set LC_ALL=C to ensure ld outputs messages in English.
-+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-+ | sed -ne '/supported targets:/!d
-+ s/[ ][ ]*/ /g
-+ s/.*supported targets: *//
-+ s/ .*//
-+ p'`
-+ case "$ld_supported_targets" in
-+ elf32-i386)
-+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-+ ;;
-+ a.out-i386-linux)
-+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+@@ -921,15 +964,15 @@
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+- exit 0 ;;
+ exit ;;
-+ coff-i386)
-+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+- exit 0 ;;
+ exit ;;
-+ "")
-+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
-+ # one that does not give us useful --help.
-+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+- exit 0 ;;
+ exit ;;
-+ esac
-+ # Determine whether the default compiler is a.out or elf
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+ #include <features.h>
-+ #ifdef __ELF__
-+ # ifdef __GLIBC__
-+ # if __GLIBC__ >= 2
-+ LIBC=gnu
-+ # else
-+ LIBC=gnulibc1
-+ # endif
-+ # else
-+ LIBC=gnulibc1
-+ # endif
-+ #else
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+@@ -946,23 +989,33 @@
+ LIBC=gnulibc1
+ # endif
+ #else
+- #ifdef __INTEL_COMPILER
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun)
-+ LIBC=gnu
-+ #else
-+ LIBC=gnuaout
-+ #endif
-+ #endif
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
-+EOF
+ EOF
+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR:-pc}-linux-${LIBC}" && exit 0
+- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
@@ -50606,272 +1060,326 @@
+ exit
+ }
+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-+ ;;
-+ i*86:DYNIX/ptx:4*:*)
-+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-+ # earlier versions are messed up and put the nodename in both
-+ # sysname and nodename.
-+ echo i386-sequent-sysv4
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+- exit 0 ;;
+ exit ;;
-+ i*86:UNIX_SV:4.2MP:2.*)
-+ # Unixware is an offshoot of SVR4, but it has its own version
-+ # number series starting with 2...
-+ # I am not positive that other SVR4 systems won't match this,
-+ # I just have to hope. -- rms.
-+ # Use sysv4.2uw... so that sysv4* matches it.
-+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+@@ -970,24 +1023,27 @@
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+- exit 0 ;;
+ exit ;;
-+ i*86:OS/2:*:*)
-+ # If we were able to find `uname', then EMX Unix compatibility
-+ # is probably installed.
-+ echo ${UNAME_MACHINE}-pc-os2-emx
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+- exit 0 ;;
+ exit ;;
-+ i*86:XTS-300:*:STOP)
-+ echo ${UNAME_MACHINE}-unknown-stop
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+- exit 0 ;;
+ exit ;;
-+ i*86:atheos:*:*)
-+ echo ${UNAME_MACHINE}-unknown-atheos
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+- exit 0 ;;
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
-+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ i*86:*DOS:*:*)
-+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+- exit 0 ;;
+ exit ;;
-+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-+ else
-+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-+ fi
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+@@ -995,15 +1051,16 @@
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+- exit 0 ;;
+- i*86:*:5:[78]*)
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
-+ case `/bin/uname -X | grep "^Machine"` in
-+ *486*) UNAME_MACHINE=i486 ;;
-+ *Pentium) UNAME_MACHINE=i586 ;;
-+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-+ esac
-+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+- exit 0 ;;
+ exit ;;
-+ i*86:*:3.2:*)
-+ if test -f /usr/options/cb.name; then
-+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
-+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-+ && UNAME_MACHINE=i586
-+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-+ && UNAME_MACHINE=i686
-+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-+ && UNAME_MACHINE=i686
-+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-+ else
-+ echo ${UNAME_MACHINE}-pc-sysv32
-+ fi
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+@@ -1021,73 +1078,73 @@
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+- exit 0 ;;
+ exit ;;
-+ pc:*:*:*)
-+ # Left here for compatibility:
-+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
-+ # the processor, so we play safe by assuming i386.
-+ echo i386-pc-msdosdjgpp
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+- exit 0 ;;
+ exit ;;
-+ Intel:Mach:3*:*)
-+ echo i386-pc-mach3
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+- exit 0 ;;
+ exit ;;
-+ paragon:*:*:*)
-+ echo i860-intel-osf1
+ paragon:*:*:*)
+ echo i860-intel-osf1
+- exit 0 ;;
+ exit ;;
-+ i860:*:4.*:*) # i860-SVR4
-+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-+ else # Add other i860-SVR4 vendors below as they are discovered.
-+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
-+ fi
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+- exit 0 ;;
+ exit ;;
-+ mini*:CTIX:SYS*5:*)
-+ # "miniframe"
-+ echo m68010-convergent-sysv
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+- exit 0 ;;
+ exit ;;
-+ mc68k:UNIX:SYSTEM5:3.51m)
-+ echo m68k-convergent-sysv
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+- exit 0 ;;
+ exit ;;
-+ M680?0:D-NIX:5.3:*)
-+ echo m68k-diab-dnix
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+- exit 0 ;;
+- M68*:*:R3V[567]*:*)
+- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-+ OS_REL=''
-+ test -r /etc/.relid \
-+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+- && echo i486-ncr-sysv4 && exit 0 ;;
+ && { echo i486-ncr-sysv4; exit; } ;;
-+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ mc68030:UNIX_System_V:4.*:*)
-+ echo m68k-atari-sysv4
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+- exit 0 ;;
+ exit ;;
-+ TSUNAMI:LynxOS:2.*:*)
-+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ rs6000:LynxOS:2.*:*)
-+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ SM[BE]S:UNIX_SV:*:*)
-+ echo mips-dde-sysv${UNAME_RELEASE}
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ RM*:ReliantUNIX-*:*:*)
-+ echo mips-sni-sysv4
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+- exit 0 ;;
+ exit ;;
-+ RM*:SINIX-*:*:*)
-+ echo mips-sni-sysv4
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+- exit 0 ;;
+ exit ;;
-+ *:SINIX-*:*:*)
-+ if uname -p 2>/dev/null >/dev/null ; then
-+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
-+ echo ${UNAME_MACHINE}-sni-sysv4
-+ else
-+ echo ns32k-sni-sysv
-+ fi
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+@@ -1095,68 +1152,72 @@
+ else
+ echo ns32k-sni-sysv
+ fi
+- exit 0 ;;
+ exit ;;
-+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-+ # says <Richard.M.Bartel at ccMail.Census.GOV>
-+ echo i586-unisys-sysv4
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel at ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+- exit 0 ;;
+ exit ;;
-+ *:UNIX_System_V:4*:FTX*)
-+ # From Gerald Hewes <hewes at openmarket.com>.
-+ # How about differentiating between stratus architectures? -djm
-+ echo hppa1.1-stratus-sysv4
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes at openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+- exit 0 ;;
+ exit ;;
-+ *:*:*:FTX*)
-+ # From seanf at swdc.stratus.com.
-+ echo i860-stratus-sysv4
+ *:*:*:FTX*)
+ # From seanf at swdc.stratus.com.
+ echo i860-stratus-sysv4
+- exit 0 ;;
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green at stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
-+ *:VOS:*:*)
-+ # From Paul.Green at stratus.com.
-+ echo hppa1.1-stratus-vos
+ *:VOS:*:*)
+ # From Paul.Green at stratus.com.
+ echo hppa1.1-stratus-vos
+- exit 0 ;;
+ exit ;;
-+ mc68*:A/UX:*:*)
-+ echo m68k-apple-aux${UNAME_RELEASE}
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ news*:NEWS-OS:6*:*)
-+ echo mips-sony-newsos6
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+- exit 0 ;;
+ exit ;;
-+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-+ if [ -d /usr/nec ]; then
-+ echo mips-nec-sysv${UNAME_RELEASE}
-+ else
-+ echo mips-unknown-sysv${UNAME_RELEASE}
-+ fi
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+- exit 0 ;;
+ exit ;;
-+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
-+ echo powerpc-be-beos
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+- exit 0 ;;
+ exit ;;
-+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
-+ echo powerpc-apple-beos
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+- exit 0 ;;
+ exit ;;
-+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
-+ echo i586-pc-beos
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+- exit 0 ;;
+ exit ;;
-+ SX-4:SUPER-UX:*:*)
-+ echo sx4-nec-superux${UNAME_RELEASE}
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ SX-5:SUPER-UX:*:*)
-+ echo sx5-nec-superux${UNAME_RELEASE}
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ SX-6:SUPER-UX:*:*)
-+ echo sx6-nec-superux${UNAME_RELEASE}
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ Power*:Rhapsody:*:*)
-+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:Rhapsody:*:*)
-+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:Darwin:*:*)
+ *:Darwin:*:*)
+- case `uname -p` in
+- *86) UNAME_PROCESSOR=i686 ;;
+- powerpc) UNAME_PROCESSOR=powerpc ;;
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
-+ esac
-+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
-+ UNAME_PROCESSOR=`uname -p`
-+ if test "$UNAME_PROCESSOR" = "x86"; then
-+ UNAME_PROCESSOR=i386
-+ UNAME_MACHINE=pc
-+ fi
-+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+@@ -1164,22 +1225,25 @@
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:QNX:*:4*)
-+ echo i386-pc-qnx
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+- exit 0 ;;
+- NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
-+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:NonStop-UX:*:*)
-+ echo mips-compaq-nonstopux
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+- exit 0 ;;
+ exit ;;
-+ BS2000:POSIX*:*:*)
-+ echo bs2000-siemens-sysv
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+- exit 0 ;;
+ exit ;;
-+ DS/*:UNIX_System_V:*:*)
-+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
-+ *:Plan9:*:*)
-+ # "uname -m" is not consistent, so use $cputype instead. 386
-+ # is converted to i386 for consistency with other x86
-+ # operating systems.
-+ if test "$cputype" = "386"; then
-+ UNAME_MACHINE=i386
-+ else
-+ UNAME_MACHINE="$cputype"
-+ fi
-+ echo ${UNAME_MACHINE}-unknown-plan9
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+@@ -1190,28 +1254,47 @@
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+- exit 0 ;;
+ exit ;;
-+ *:TOPS-10:*:*)
-+ echo pdp10-unknown-tops10
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+- exit 0 ;;
+ exit ;;
-+ *:TENEX:*:*)
-+ echo pdp10-unknown-tenex
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+- exit 0 ;;
+ exit ;;
-+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-+ echo pdp10-dec-tops20
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+- exit 0 ;;
+ exit ;;
-+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-+ echo pdp10-xkl-tops20
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+- exit 0 ;;
+ exit ;;
-+ *:TOPS-20:*:*)
-+ echo pdp10-unknown-tops20
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+- exit 0 ;;
+ exit ;;
-+ *:ITS:*:*)
-+ echo pdp10-unknown-its
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+- exit 0 ;;
+ exit ;;
-+ SEI:*:*:SEIUX)
-+ echo mips-sei-seiux${UNAME_RELEASE}
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+- exit 0 ;;
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
@@ -50892,955 +1400,351 @@
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
-+esac
-+
-+#echo '(No uname command or uname output not recognized.)' 1>&2
-+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-+
-+eval $set_cc_for_build
-+cat >$dummy.c <<EOF
-+#ifdef _SEQUENT_
-+# include <sys/types.h>
-+# include <sys/utsname.h>
-+#endif
-+main ()
-+{
-+#if defined (sony)
-+#if defined (MIPSEB)
-+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
-+ I don't know.... */
-+ printf ("mips-sony-bsd\n"); exit (0);
-+#else
-+#include <sys/param.h>
-+ printf ("m68k-sony-newsos%s\n",
-+#ifdef NEWSOS4
-+ "4"
-+#else
-+ ""
-+#endif
-+ ); exit (0);
-+#endif
-+#endif
-+
-+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ esac
+
+ #echo '(No uname command or uname output not recognized.)' 1>&2
+@@ -1243,7 +1326,7 @@
+ #endif
+
+ #if defined (__arm) && defined (__acorn) && defined (__unix)
+- printf ("arm-acorn-riscix"); exit (0);
+ printf ("arm-acorn-riscix\n"); exit (0);
-+#endif
-+
-+#if defined (hp300) && !defined (hpux)
-+ printf ("m68k-hp-bsd\n"); exit (0);
-+#endif
-+
-+#if defined (NeXT)
-+#if !defined (__ARCHITECTURE__)
-+#define __ARCHITECTURE__ "m68k"
-+#endif
-+ int version;
-+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-+ if (version < 4)
-+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-+ else
-+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-+ exit (0);
-+#endif
-+
-+#if defined (MULTIMAX) || defined (n16)
-+#if defined (UMAXV)
-+ printf ("ns32k-encore-sysv\n"); exit (0);
-+#else
-+#if defined (CMU)
-+ printf ("ns32k-encore-mach\n"); exit (0);
-+#else
-+ printf ("ns32k-encore-bsd\n"); exit (0);
-+#endif
-+#endif
-+#endif
-+
-+#if defined (__386BSD__)
-+ printf ("i386-pc-bsd\n"); exit (0);
-+#endif
-+
-+#if defined (sequent)
-+#if defined (i386)
-+ printf ("i386-sequent-dynix\n"); exit (0);
-+#endif
-+#if defined (ns32000)
-+ printf ("ns32k-sequent-dynix\n"); exit (0);
-+#endif
-+#endif
-+
-+#if defined (_SEQUENT_)
-+ struct utsname un;
-+
-+ uname(&un);
-+
-+ if (strncmp(un.version, "V2", 2) == 0) {
-+ printf ("i386-sequent-ptx2\n"); exit (0);
-+ }
-+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-+ printf ("i386-sequent-ptx1\n"); exit (0);
-+ }
-+ printf ("i386-sequent-ptx\n"); exit (0);
-+
-+#endif
-+
-+#if defined (vax)
-+# if !defined (ultrix)
-+# include <sys/param.h>
-+# if defined (BSD)
-+# if BSD == 43
-+ printf ("vax-dec-bsd4.3\n"); exit (0);
-+# else
-+# if BSD == 199006
-+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
-+# else
-+ printf ("vax-dec-bsd\n"); exit (0);
-+# endif
-+# endif
-+# else
-+ printf ("vax-dec-bsd\n"); exit (0);
-+# endif
-+# else
-+ printf ("vax-dec-ultrix\n"); exit (0);
-+# endif
-+#endif
-+
-+#if defined (alliant) && defined (i860)
-+ printf ("i860-alliant-bsd\n"); exit (0);
-+#endif
-+
-+ exit (1);
-+}
-+EOF
-+
+ #endif
+
+ #if defined (hp300) && !defined (hpux)
+@@ -1332,11 +1415,12 @@
+ }
+ EOF
+
+-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
-+
-+# Apollos put the system type in the environment.
-+
+
+ # Apollos put the system type in the environment.
+
+-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-+
-+# Convex versions that predate uname can use getsysinfo(1)
-+
-+if [ -x /usr/convex/getsysinfo ]
-+then
-+ case `getsysinfo -f cpu_type` in
-+ c1*)
-+ echo c1-convex-bsd
+
+ # Convex versions that predate uname can use getsysinfo(1)
+
+@@ -1345,22 +1429,22 @@
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+- exit 0 ;;
+ exit ;;
-+ c2*)
-+ if getsysinfo -f scalar_acc
-+ then echo c32-convex-bsd
-+ else echo c2-convex-bsd
-+ fi
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+- exit 0 ;;
+ exit ;;
-+ c34*)
-+ echo c34-convex-bsd
+ c34*)
+ echo c34-convex-bsd
+- exit 0 ;;
+ exit ;;
-+ c38*)
-+ echo c38-convex-bsd
+ c38*)
+ echo c38-convex-bsd
+- exit 0 ;;
+ exit ;;
-+ c4*)
-+ echo c4-convex-bsd
+ c4*)
+ echo c4-convex-bsd
+- exit 0 ;;
+ exit ;;
-+ esac
-+fi
-+
-+cat >&2 <<EOF
-+$0: unable to guess system type
-+
-+This script, last modified $timestamp, has failed to recognize
-+the operating system you are using. It is advised that you
-+download the most up to date version of the config scripts from
-+
+ esac
+ fi
+
+@@ -1371,7 +1455,9 @@
+ the operating system you are using. It is advised that you
+ download the most up to date version of the config scripts from
+
+- ftp://ftp.gnu.org/pub/gnu/config/
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
-+
-+If the version you run ($0) is already up to date, please
-+send the following data and any information you think might be
-+pertinent to <config-patches at gnu.org> in order to provide the needed
-+information to handle your system.
-+
-+config.guess timestamp = $timestamp
-+
-+uname -m = `(uname -m) 2>/dev/null || echo unknown`
-+uname -r = `(uname -r) 2>/dev/null || echo unknown`
-+uname -s = `(uname -s) 2>/dev/null || echo unknown`
-+uname -v = `(uname -v) 2>/dev/null || echo unknown`
-+
-+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
-+
-+hostinfo = `(hostinfo) 2>/dev/null`
-+/bin/universe = `(/bin/universe) 2>/dev/null`
-+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
-+/bin/arch = `(/bin/arch) 2>/dev/null`
-+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
-+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-+
-+UNAME_MACHINE = ${UNAME_MACHINE}
-+UNAME_RELEASE = ${UNAME_RELEASE}
-+UNAME_SYSTEM = ${UNAME_SYSTEM}
-+UNAME_VERSION = ${UNAME_VERSION}
-+EOF
-+
-+exit 1
-+
-+# Local variables:
-+# eval: (add-hook 'write-file-hooks 'time-stamp)
-+# time-stamp-start: "timestamp='"
-+# time-stamp-format: "%:y-%02m-%02d"
-+# time-stamp-end: "'"
-+# End:
-diff -Naur dbus-0.61.orig/config.h.in dbus-0.61/config.h.in
---- dbus-0.61.orig/config.h.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/config.h.in 2006-02-24 17:38:02.000000000 +0100
-@@ -0,0 +1,266 @@
-+/* config.h.in. Generated from configure.in by autoheader. */
-+
-+/* Build test code */
-+#undef DBUS_BUILD_TESTS
-+
-+/* Build X11-dependent code */
-+#undef DBUS_BUILD_X11
-+
-+/* Use dnotify on Linux */
-+#undef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX
-+
-+/* Directory to check for console ownerhip */
-+#undef DBUS_CONSOLE_AUTH_DIR
-+
-+/* Disable assertion checking */
-+#undef DBUS_DISABLE_ASSERT
-+
-+/* Disable public API sanity checking */
-+#undef DBUS_DISABLE_CHECKS
-+
-+/* Support a verbose mode */
-+#undef DBUS_ENABLE_VERBOSE_MODE
-+
-+/* Defined if gcov is enabled to force a rebuild due to config.h changing */
-+#undef DBUS_GCOV_ENABLED
-+
-+/* Some atomic integer implementation present */
-+#undef DBUS_HAVE_ATOMIC_INT
-+
-+/* Defined if we have gcc 3.3 and thus the new gcov format */
-+#undef DBUS_HAVE_GCC33_GCOV
-+
-+/* Where per-session bus puts its sockets */
-+#undef DBUS_SESSION_SOCKET_DIR
-+
-+/* The default D-BUS address of the system bus */
-+#undef DBUS_SYSTEM_BUS_DEFAULT_ADDRESS
-+
-+/* The name of the socket the system bus listens on by default */
-+#undef DBUS_SYSTEM_SOCKET
-+
-+/* Where to put test sockets */
-+#undef DBUS_TEST_SOCKET_DIR
-+
-+/* User for running the system BUS daemon */
-+#undef DBUS_USER
-+
-+/* Use atomic integer implementation for 486 */
-+#undef DBUS_USE_ATOMIC_INT_486
-+
-+/* A 'va_copy' style function */
-+#undef DBUS_VA_COPY
-+
-+/* 'va_lists' cannot be copies as values */
-+#undef DBUS_VA_COPY_AS_ARRAY
-+
-+/* always defined to indicate that i18n is enabled */
-+#undef ENABLE_NLS
-+
-+/* The name of the gettext domain */
-+#undef GETTEXT_PACKAGE
-+
-+/* Disable GLib assertion macros */
-+#undef G_DISABLE_ASSERT
-+
-+/* Disable GLib public API sanity checking */
-+#undef G_DISABLE_CHECKS
-+
-+/* Have abstract socket namespace */
-+#undef HAVE_ABSTRACT_SOCKETS
-+
-+/* Define to 1 if you have the `backtrace' function. */
-+#undef HAVE_BACKTRACE
-+
-+/* Define to 1 if you have the `bind_textdomain_codeset' function. */
-+#undef HAVE_BIND_TEXTDOMAIN_CODESET
-+
-+/* Have cmsgcred structure */
-+#undef HAVE_CMSGCRED
-+
-+/* Define to 1 if you have the `dcgettext' function. */
-+#undef HAVE_DCGETTEXT
-+
-+/* Define to 1 if you have the <dlfcn.h> header file. */
-+#undef HAVE_DLFCN_H
-+
-+/* Define to 1 if you have the <execinfo.h> header file. */
-+#undef HAVE_EXECINFO_H
-+
-+/* Define to 1 if you have the <expat.h> header file. */
-+#undef HAVE_EXPAT_H
-+
-+/* Define to 1 if you have the `getgrouplist' function. */
-+#undef HAVE_GETGROUPLIST
-+
-+/* Define to 1 if you have the `getpeereid' function. */
-+#undef HAVE_GETPEEREID
-+
-+/* Define to 1 if you have the `getpeerucred' function. */
-+#undef HAVE_GETPEERUCRED
-+
-+/* Define if the GNU gettext() function is already present or preinstalled. */
-+#undef HAVE_GETTEXT
-+
-+/* Have GNU-style varargs macros */
-+#undef HAVE_GNUC_VARARGS
-+
-+/* Define to 1 if you have the <inttypes.h> header file. */
-+#undef HAVE_INTTYPES_H
-+
-+/* Have ISO C99 varargs macros */
-+#undef HAVE_ISO_VARARGS
-+
-+/* Define if your <locale.h> file defines LC_MESSAGES. */
-+#undef HAVE_LC_MESSAGES
-+
-+/* Define to 1 if you have the `nsl' library (-lnsl). */
-+#undef HAVE_LIBNSL
-+
-+/* Define to 1 if you have the `socket' library (-lsocket). */
-+#undef HAVE_LIBSOCKET
-+
-+/* Define to 1 if you have the <locale.h> header file. */
-+#undef HAVE_LOCALE_H
-+
-+/* Define to 1 if you have the <memory.h> header file. */
-+#undef HAVE_MEMORY_H
-+
-+/* Define to 1 if you have the `nanosleep' function. */
-+#undef HAVE_NANOSLEEP
-+
-+/* Have non-POSIX function getpwnam_r */
-+#undef HAVE_NONPOSIX_GETPWNAM_R
-+
-+/* Define to 1 if you have the `poll' function. */
-+#undef HAVE_POLL
-+
-+/* Have POSIX function getpwnam_r */
-+#undef HAVE_POSIX_GETPWNAM_R
-+
-+/* SELinux support */
-+#undef HAVE_SELINUX
-+
-+/* Define to 1 if you have the `setenv' function. */
-+#undef HAVE_SETENV
-+
-+/* Define to 1 if you have the `socketpair' function. */
-+#undef HAVE_SOCKETPAIR
-+
-+/* Have socklen_t type */
-+#undef HAVE_SOCKLEN_T
-+
-+/* Define to 1 if you have the <stdint.h> header file. */
-+#undef HAVE_STDINT_H
-+
-+/* Define to 1 if you have the <stdlib.h> header file. */
-+#undef HAVE_STDLIB_H
-+
-+/* Define to 1 if you have the <strings.h> header file. */
-+#undef HAVE_STRINGS_H
-+
-+/* Define to 1 if you have the <string.h> header file. */
-+#undef HAVE_STRING_H
-+
-+/* Define to 1 if you have the <sys/stat.h> header file. */
-+#undef HAVE_SYS_STAT_H
-+
-+/* Define to 1 if you have the <sys/types.h> header file. */
-+#undef HAVE_SYS_TYPES_H
-+
-+/* Define to 1 if you have the <sys/uio.h> header file. */
-+#undef HAVE_SYS_UIO_H
-+
-+/* Define to 1 if you have the <unistd.h> header file. */
-+#undef HAVE_UNISTD_H
-+
-+/* Define to 1 if you have the `unsetenv' function. */
-+#undef HAVE_UNSETENV
-+
-+/* Define to 1 if you have the `usleep' function. */
-+#undef HAVE_USLEEP
-+
-+/* Define to 1 if you have the `vasprintf' function. */
-+#undef HAVE_VASPRINTF
-+
-+/* Define to 1 if you have the `vsnprintf' function. */
-+#undef HAVE_VSNPRINTF
-+
-+/* Define to 1 if you have the `writev' function. */
-+#undef HAVE_WRITEV
-+
-+/* Name of package */
-+#undef PACKAGE
-+
-+/* Define to the address where bug reports for this package should be sent. */
-+#undef PACKAGE_BUGREPORT
-+
-+/* Define to the full name of this package. */
-+#undef PACKAGE_NAME
-+
-+/* Define to the full name and version of this package. */
-+#undef PACKAGE_STRING
-+
-+/* Define to the one symbol short name of this package. */
-+#undef PACKAGE_TARNAME
-+
-+/* Define to the version of this package. */
-+#undef PACKAGE_VERSION
-+
-+/* The size of a `char', as computed by sizeof. */
-+#undef SIZEOF_CHAR
-+
-+/* The size of a `int', as computed by sizeof. */
-+#undef SIZEOF_INT
-+
-+/* The size of a `long', as computed by sizeof. */
-+#undef SIZEOF_LONG
-+
-+/* The size of a `long long', as computed by sizeof. */
-+#undef SIZEOF_LONG_LONG
-+
-+/* The size of a `short', as computed by sizeof. */
-+#undef SIZEOF_SHORT
-+
-+/* The size of a `void *', as computed by sizeof. */
-+#undef SIZEOF_VOID_P
-+
-+/* The size of a `__int64', as computed by sizeof. */
-+#undef SIZEOF___INT64
-+
-+/* Define to 1 if you have the ANSI C header files. */
-+#undef STDC_HEADERS
-+
-+/* Full path to test file test/test-exit in builddir */
-+#undef TEST_EXIT_BINARY
-+
-+/* Full path to test file test/glib/test-service-glib in builddir */
-+#undef TEST_GLIB_SERVICE_BINARY
-+
-+/* Full path to test file test/python/test-service.py in builddir */
-+#undef TEST_PYTHON_SERVICE_BINARY
-+
-+/* Full path to test file test/test-segfault in builddir */
-+#undef TEST_SEGFAULT_BINARY
-+
-+/* Full path to test file test/test-service in builddir */
-+#undef TEST_SERVICE_BINARY
-+
-+/* Full path to test file test/data/valid-service-files in builddir */
-+#undef TEST_SERVICE_DIR
-+
-+/* Full path to test file test/test-shell-service in builddir */
-+#undef TEST_SHELL_SERVICE_BINARY
-+
-+/* Full path to test file test/test-sleep-forever in builddir */
-+#undef TEST_SLEEP_FOREVER_BINARY
-+
-+/* Version number of package */
-+#undef VERSION
-+
-+/* Define to 1 if your processor stores words with the most significant byte
-+ first (like Motorola and SPARC, unlike Intel and VAX). */
-+#undef WORDS_BIGENDIAN
-+
-+/* Define to 1 if the X Window System is missing or not being used. */
-+#undef X_DISPLAY_MISSING
+
+ If the version you run ($0) is already up to date, please
+ send the following data and any information you think might be
diff -Naur dbus-0.61.orig/config.sub dbus-0.61/config.sub
---- dbus-0.61.orig/config.sub 1970-01-01 01:00:00.000000000 +0100
+--- dbus-0.61.orig/config.sub 2006-02-27 22:56:46.000000000 +0100
+++ dbus-0.61/config.sub 2006-02-25 16:29:12.000000000 +0100
-@@ -0,0 +1,1608 @@
-+#! /bin/sh
-+# Configuration validation subroutine script.
-+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+@@ -1,9 +1,9 @@
+ #! /bin/sh
+ # Configuration validation subroutine script.
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-+
+
+-timestamp='2003-06-18'
+timestamp='2006-02-23'
-+
-+# This file is (in principle) common to ALL GNU software.
-+# The presence of a machine in this file suggests that SOME GNU software
-+# can handle that machine. It does not imply ALL GNU software can.
-+#
-+# This file 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 2 of the License, or
-+# (at your option) 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, write to the Free Software
+
+ # This file is (in principle) common to ALL GNU software.
+ # The presence of a machine in this file suggests that SOME GNU software
+@@ -21,14 +21,15 @@
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330,
+-# Boston, MA 02111-1307, USA.
+-
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+ # the same distribution terms that you use for the rest of that program.
+
+
-+
-+# Please send patches to <config-patches at gnu.org>. Submit a context
-+# diff and a properly formatted ChangeLog entry.
-+#
-+# Configuration subroutine to validate and canonicalize a configuration type.
-+# Supply the specified configuration type as an argument.
-+# If it is invalid, we print an error message on stderr and exit with code 1.
-+# Otherwise, we print the canonical config type on stdout and succeed.
-+
-+# This file is supposed to be the same for all GNU packages
-+# and recognize all the CPU types, system types and aliases
-+# that are meaningful with *any* GNU software.
-+# Each package is responsible for reporting which valid configurations
-+# it does not support. The user should be able to distinguish
-+# a failure to support a valid configuration from a meaningless
-+# configuration.
-+
-+# The goal of this file is to map all the various variations of a given
-+# machine specification into a single specification in the form:
-+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-+# or in some cases, the newer four-part form:
-+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-+# It is wrong to echo any other type of specification.
-+
-+me=`echo "$0" | sed -e 's,.*/,,'`
-+
-+usage="\
-+Usage: $0 [OPTION] CPU-MFR-OPSYS
-+ $0 [OPTION] ALIAS
-+
-+Canonicalize a configuration name.
-+
-+Operation modes:
-+ -h, --help print this help, then exit
-+ -t, --time-stamp print date of last modification, then exit
-+ -v, --version print version number, then exit
-+
-+Report bugs and patches to <config-patches at gnu.org>."
-+
-+version="\
-+GNU config.sub ($timestamp)
-+
+ # Please send patches to <config-patches at gnu.org>. Submit a context
+ # diff and a properly formatted ChangeLog entry.
+ #
+@@ -70,7 +71,7 @@
+ version="\
+ GNU config.sub ($timestamp)
+
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-+Free Software Foundation, Inc.
-+
-+This is free software; see the source for copying conditions. There is NO
-+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-+
-+help="
-+Try \`$me --help' for more information."
-+
-+# Parse command line
-+while test $# -gt 0 ; do
-+ case $1 in
-+ --time-stamp | --time* | -t )
+ Free Software Foundation, Inc.
+
+ This is free software; see the source for copying conditions. There is NO
+@@ -83,11 +84,11 @@
+ while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+- echo "$timestamp" ; exit 0 ;;
+ echo "$timestamp" ; exit ;;
-+ --version | -v )
+ --version | -v )
+- echo "$version" ; exit 0 ;;
+ echo "$version" ; exit ;;
-+ --help | --h* | -h )
+ --help | --h* | -h )
+- echo "$usage"; exit 0 ;;
+ echo "$usage"; exit ;;
-+ -- ) # Stop option processing
-+ shift; break ;;
-+ - ) # Use stdin as input.
-+ break ;;
-+ -* )
-+ echo "$me: invalid option $1$help"
-+ exit 1 ;;
-+
-+ *local*)
-+ # First pass through any local machine types.
-+ echo $1
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+@@ -99,7 +100,7 @@
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+- exit 0;;
+ exit ;;
-+
-+ * )
-+ break ;;
-+ esac
-+done
-+
-+case $# in
-+ 0) echo "$me: missing argument$help" >&2
-+ exit 1;;
-+ 1) ;;
-+ *) echo "$me: too many arguments$help" >&2
-+ exit 1;;
-+esac
-+
-+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-+# Here we must recognize all the valid KERNEL-OS combinations.
-+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-+case $maybe_os in
+
+ * )
+ break ;;
+@@ -118,7 +119,9 @@
+ # Here we must recognize all the valid KERNEL-OS combinations.
+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+ case $maybe_os in
+- nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
-+ os=-$maybe_os
-+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-+ ;;
-+ *)
-+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-+ if [ $basic_machine != $1 ]
-+ then os=`echo $1 | sed 's/.*-/-/'`
-+ else os=; fi
-+ ;;
-+esac
-+
-+### Let's recognize common machines as not being operating systems so
-+### that things like config.sub decstation-3100 work. We also
-+### recognize some manufacturers as not being operating systems, so we
-+### can provide default operating systems below.
-+case $os in
-+ -sun*os*)
-+ # Prevent following clause from handling this invalid input.
-+ ;;
-+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+@@ -144,7 +147,7 @@
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+- -apple | -axis)
+ -apple | -axis | -knuth | -cray)
-+ os=
-+ basic_machine=$1
-+ ;;
-+ -sim | -cisco | -oki | -wec | -winbond)
-+ os=
-+ basic_machine=$1
-+ ;;
-+ -scout)
-+ ;;
-+ -wrs)
-+ os=-vxworks
-+ basic_machine=$1
-+ ;;
-+ -chorusos*)
-+ os=-chorusos
-+ basic_machine=$1
-+ ;;
-+ -chorusrdb)
-+ os=-chorusrdb
-+ basic_machine=$1
-+ ;;
-+ -hiux*)
-+ os=-hiuxwe2
-+ ;;
+ os=
+ basic_machine=$1
+ ;;
+@@ -169,6 +172,10 @@
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-+ -sco5)
-+ os=-sco3.2v5
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
-+ -sco4)
-+ os=-sco3.2v4
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
-+ -sco3.2.[4-9]*)
-+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
-+ -sco3.2v[4-9]*)
-+ # Don't forget version if it is 3.2v4 or newer.
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+@@ -185,6 +192,10 @@
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
-+ -sco*)
-+ os=-sco3.2v2
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
-+ -udk*)
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
-+ -isc)
-+ os=-isc2.2
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
-+ -clix*)
-+ basic_machine=clipper-intergraph
-+ ;;
-+ -isc*)
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
-+ -lynx*)
-+ os=-lynxos
-+ ;;
-+ -ptx*)
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-+ ;;
-+ -windowsnt*)
-+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
-+ ;;
-+ -psos*)
-+ os=-psos
-+ ;;
-+ -mint | -mint[0-9]*)
-+ basic_machine=m68k-atari
-+ os=-mint
-+ ;;
-+esac
-+
-+# Decode aliases for certain CPU-COMPANY combinations.
-+case $basic_machine in
-+ # Recognize the basic CPU types without company name.
-+ # Some are omitted here because they have special meanings below.
-+ 1750a | 580 \
-+ | a29k \
-+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+@@ -228,14 +239,16 @@
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
-+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | bfin \
-+ | c4x | clipper \
-+ | d10v | d30v | dlx | dsp16xx \
-+ | fr30 | frv \
-+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-+ | i370 | i860 | i960 | ia64 \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+- | ip2k \
+- | m32r | m68000 | m68k | m88k | mcore \
+ | ip2k | iq2000 \
+ | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \
-+ | mips | mipsbe | mipseb | mipsel | mipsle \
-+ | mips16 \
-+ | mips64 | mips64el \
-+ | mips64vr | mips64vrel \
-+ | mips64orion | mips64orionel \
-+ | mips64vr4100 | mips64vr4100el \
-+ | mips64vr4300 | mips64vr4300el \
-+ | mips64vr5000 | mips64vr5000el \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+@@ -244,31 +257,38 @@
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
-+ | mipsisa32 | mipsisa32el \
-+ | mipsisa32r2 | mipsisa32r2el \
-+ | mipsisa64 | mipsisa64el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
-+ | mipsisa64sb1 | mipsisa64sb1el \
-+ | mipsisa64sr71k | mipsisa64sr71kel \
-+ | mipstx39 | mipstx39el \
-+ | mn10200 | mn10300 \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | mt \
-+ | msp430 \
+ | msp430 \
+ | nios | nios2 \
-+ | ns16k | ns32k \
+ | ns16k | ns32k \
+- | openrisc | or32 \
+ | or32 \
-+ | pdp10 | pdp11 | pj | pjl \
-+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-+ | pyramid \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+- | s390 | s390x \
+- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-+ | sh64 | sh64le \
+ | sh64 | sh64le \
+- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+ | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b \
-+ | strongarm \
-+ | tahoe | thumb | tic4x | tic80 | tron \
-+ | v850 | v850e \
-+ | we32k \
+ | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+- | x86 | xscale | xstormy16 | xtensa \
+ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
-+ | z8k)
-+ basic_machine=$basic_machine-unknown
-+ ;;
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m32c)
+ basic_machine=$basic_machine-unknown
+ ;;
-+ m6811 | m68hc11 | m6812 | m68hc12)
-+ # Motorola 68HC11/12.
-+ basic_machine=$basic_machine-unknown
-+ os=-none
-+ ;;
-+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+@@ -276,6 +296,9 @@
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
-+
-+ # We use `pc' rather than `unknown'
-+ # because (1) that's what they normally are, and
-+ # (2) the word "unknown" tends to confuse beginning users.
-+ i*86 | x86_64)
-+ basic_machine=$basic_machine-pc
-+ ;;
-+ # Object if more than one company name word.
-+ *-*-*)
-+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-+ exit 1
-+ ;;
-+ # Recognize the basic CPU types with company name.
-+ 580-* \
-+ | a29k-* \
-+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
-+ | avr-* \
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+@@ -296,19 +319,19 @@
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* \
+- | bs2000-* \
+ | bfin-* | bs2000-* \
-+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+- | clipper-* | cydra-* \
+ | clipper-* | craynv-* | cydra-* \
-+ | d10v-* | d30v-* | dlx-* \
-+ | elxsi-* \
-+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
-+ | h8300-* | h8500-* \
-+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-+ | i*86-* | i860-* | i960-* | ia64-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+- | ip2k-* \
+- | m32r-* \
+ | ip2k-* | iq2000-* \
+ | m32r-* | m32rle-* \
-+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+- | m88110-* | m88k-* | mcore-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* \
-+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-+ | mips16-* \
-+ | mips64-* | mips64el-* \
-+ | mips64vr-* | mips64vrel-* \
-+ | mips64orion-* | mips64orionel-* \
-+ | mips64vr4100-* | mips64vr4100el-* \
-+ | mips64vr4300-* | mips64vr4300el-* \
-+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+@@ -317,34 +340,41 @@
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
-+ | mipsisa32-* | mipsisa32el-* \
-+ | mipsisa32r2-* | mipsisa32r2el-* \
-+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
-+ | mipsisa64sb1-* | mipsisa64sb1el-* \
-+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-+ | mipstx39-* | mipstx39el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
-+ | msp430-* \
+ | msp430-* \
+- | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
-+ | orion-* \
-+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-+ | pyramid-* \
-+ | romp-* | rs6000-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+- | s390-* | s390x-* \
+- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
-+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
-+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-+ | tahoe-* | thumb-* \
-+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-+ | tron-* \
-+ | v850-* | v850e-* | vax-* \
-+ | we32k-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+- | xtensa-* \
+ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa-* \
-+ | ymp-* \
-+ | z8k-*)
-+ ;;
+ | ymp-* \
+ | z8k-*)
+ ;;
+ m32c-*)
+ ;;
-+ # Recognize the various machine names and aliases which stand
-+ # for a CPU type and a company and sometimes even an OS.
-+ 386bsd)
-+ basic_machine=i386-unknown
-+ os=-bsd
-+ ;;
-+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-+ basic_machine=m68000-att
-+ ;;
-+ 3b*)
-+ basic_machine=we32k-att
-+ ;;
-+ a29khif)
-+ basic_machine=a29k-amd
-+ os=-udi
-+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+@@ -361,6 +391,9 @@
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
-+ adobe68k)
-+ basic_machine=m68010-adobe
-+ os=-scout
-+ ;;
-+ alliant | fx80)
-+ basic_machine=fx80-alliant
-+ ;;
-+ altos | altos3068)
-+ basic_machine=m68k-altos
-+ ;;
-+ am29k)
-+ basic_machine=a29k-none
-+ os=-bsd
-+ ;;
-+ amd64)
-+ basic_machine=x86_64-pc
-+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+@@ -378,6 +411,9 @@
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
-+ amdahl)
-+ basic_machine=580-amdahl
-+ os=-sysv
-+ ;;
-+ amiga | amiga-*)
-+ basic_machine=m68k-unknown
-+ ;;
-+ amigaos | amigados)
-+ basic_machine=m68k-unknown
-+ os=-amigaos
-+ ;;
-+ amigaunix | amix)
-+ basic_machine=m68k-unknown
-+ os=-sysv4
-+ ;;
-+ apollo68)
-+ basic_machine=m68k-apollo
-+ os=-sysv
-+ ;;
-+ apollo68bsd)
-+ basic_machine=m68k-apollo
-+ os=-bsd
-+ ;;
-+ aux)
-+ basic_machine=m68k-apple
-+ os=-aux
-+ ;;
-+ balance)
-+ basic_machine=ns32k-sequent
-+ os=-dynix
-+ ;;
-+ c90)
-+ basic_machine=c90-cray
-+ os=-unicos
-+ ;;
-+ convex-c1)
-+ basic_machine=c1-convex
-+ os=-bsd
-+ ;;
-+ convex-c2)
-+ basic_machine=c2-convex
-+ os=-bsd
-+ ;;
-+ convex-c32)
-+ basic_machine=c32-convex
-+ os=-bsd
-+ ;;
-+ convex-c34)
-+ basic_machine=c34-convex
-+ os=-bsd
-+ ;;
-+ convex-c38)
-+ basic_machine=c38-convex
-+ os=-bsd
-+ ;;
-+ cray | j90)
-+ basic_machine=j90-cray
-+ os=-unicos
-+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+@@ -437,12 +473,27 @@
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
@@ -51849,9401 +1753,619 @@
+ basic_machine=cr16c-unknown
+ os=-elf
+ ;;
-+ crds | unos)
-+ basic_machine=m68k-crds
-+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
-+ cris | cris-* | etrax*)
-+ basic_machine=cris-axis
-+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
-+ da30 | da30-*)
-+ basic_machine=m68k-da30
-+ ;;
-+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-+ basic_machine=mips-dec
-+ ;;
-+ decsystem10* | dec10*)
-+ basic_machine=pdp10-dec
-+ os=-tops10
-+ ;;
-+ decsystem20* | dec20*)
-+ basic_machine=pdp10-dec
-+ os=-tops20
-+ ;;
-+ delta | 3300 | motorola-3300 | motorola-delta \
-+ | 3300-motorola | delta-motorola)
-+ basic_machine=m68k-motorola
-+ ;;
-+ delta88)
-+ basic_machine=m88k-motorola
-+ os=-sysv3
-+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+@@ -465,6 +516,10 @@
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
-+ dpx20 | dpx20-*)
-+ basic_machine=rs6000-bull
-+ os=-bosx
-+ ;;
-+ dpx2* | dpx2*-bull)
-+ basic_machine=m68k-bull
-+ os=-sysv3
-+ ;;
-+ ebmon29k)
-+ basic_machine=a29k-amd
-+ os=-ebmon
-+ ;;
-+ elxsi)
-+ basic_machine=elxsi-elxsi
-+ os=-bsd
-+ ;;
-+ encore | umax | mmax)
-+ basic_machine=ns32k-encore
-+ ;;
-+ es1800 | OSE68k | ose68k | ose | OSE)
-+ basic_machine=m68k-ericsson
-+ os=-ose
-+ ;;
-+ fx2800)
-+ basic_machine=i860-alliant
-+ ;;
-+ genix)
-+ basic_machine=ns32k-ns
-+ ;;
-+ gmicro)
-+ basic_machine=tron-gmicro
-+ os=-sysv
-+ ;;
-+ go32)
-+ basic_machine=i386-pc
-+ os=-go32
-+ ;;
-+ h3050r* | hiux*)
-+ basic_machine=hppa1.1-hitachi
-+ os=-hiuxwe2
-+ ;;
-+ h8300hms)
-+ basic_machine=h8300-hitachi
-+ os=-hms
-+ ;;
-+ h8300xray)
-+ basic_machine=h8300-hitachi
-+ os=-xray
-+ ;;
-+ h8500hms)
-+ basic_machine=h8500-hitachi
-+ os=-hms
-+ ;;
-+ harris)
-+ basic_machine=m88k-harris
-+ os=-sysv3
-+ ;;
-+ hp300-*)
-+ basic_machine=m68k-hp
-+ ;;
-+ hp300bsd)
-+ basic_machine=m68k-hp
-+ os=-bsd
-+ ;;
-+ hp300hpux)
-+ basic_machine=m68k-hp
-+ os=-hpux
-+ ;;
-+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
-+ basic_machine=hppa1.0-hp
-+ ;;
-+ hp9k2[0-9][0-9] | hp9k31[0-9])
-+ basic_machine=m68000-hp
-+ ;;
-+ hp9k3[2-9][0-9])
-+ basic_machine=m68k-hp
-+ ;;
-+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
-+ basic_machine=hppa1.0-hp
-+ ;;
-+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
-+ basic_machine=hppa1.1-hp
-+ ;;
-+ hp9k78[0-9] | hp78[0-9])
-+ # FIXME: really hppa2.0-hp
-+ basic_machine=hppa1.1-hp
-+ ;;
-+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-+ # FIXME: really hppa2.0-hp
-+ basic_machine=hppa1.1-hp
-+ ;;
-+ hp9k8[0-9][13679] | hp8[0-9][13679])
-+ basic_machine=hppa1.1-hp
-+ ;;
-+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
-+ basic_machine=hppa1.0-hp
-+ ;;
-+ hppa-next)
-+ os=-nextstep3
-+ ;;
-+ hppaosf)
-+ basic_machine=hppa1.1-hp
-+ os=-osf
-+ ;;
-+ hppro)
-+ basic_machine=hppa1.1-hp
-+ os=-proelf
-+ ;;
-+ i370-ibm* | ibm*)
-+ basic_machine=i370-ibm
-+ ;;
-+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
-+ i*86v32)
-+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-+ os=-sysv32
-+ ;;
-+ i*86v4*)
-+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-+ os=-sysv4
-+ ;;
-+ i*86v)
-+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-+ os=-sysv
-+ ;;
-+ i*86sol2)
-+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-+ os=-solaris2
-+ ;;
-+ i386mach)
-+ basic_machine=i386-mach
-+ os=-mach
-+ ;;
-+ i386-vsta | vsta)
-+ basic_machine=i386-unknown
-+ os=-vsta
-+ ;;
-+ iris | iris4d)
-+ basic_machine=mips-sgi
-+ case $os in
-+ -irix*)
-+ ;;
-+ *)
-+ os=-irix4
-+ ;;
-+ esac
-+ ;;
-+ isi68 | isi)
-+ basic_machine=m68k-isi
-+ os=-sysv
-+ ;;
-+ m88k-omron*)
-+ basic_machine=m88k-omron
-+ ;;
-+ magnum | m3230)
-+ basic_machine=mips-mips
-+ os=-sysv
-+ ;;
-+ merlin)
-+ basic_machine=ns32k-utek
-+ os=-sysv
-+ ;;
-+ mingw32)
-+ basic_machine=i386-pc
-+ os=-mingw32
-+ ;;
-+ miniframe)
-+ basic_machine=m68000-convergent
-+ ;;
-+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-+ basic_machine=m68k-atari
-+ os=-mint
-+ ;;
-+ mips3*-*)
-+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-+ ;;
-+ mips3*)
-+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-+ ;;
-+ monitor)
-+ basic_machine=m68k-rom68k
-+ os=-coff
-+ ;;
-+ morphos)
-+ basic_machine=powerpc-unknown
-+ os=-morphos
-+ ;;
-+ msdos)
-+ basic_machine=i386-pc
-+ os=-msdos
-+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+@@ -643,10 +698,6 @@
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+- mmix*)
+- basic_machine=mmix-knuth
+- os=-mmixware
+- ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+@@ -659,6 +710,9 @@
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
-+ mvs)
-+ basic_machine=i370-ibm
-+ os=-mvs
-+ ;;
-+ ncr3000)
-+ basic_machine=i486-ncr
-+ os=-sysv4
-+ ;;
-+ netbsd386)
-+ basic_machine=i386-unknown
-+ os=-netbsd
-+ ;;
-+ netwinder)
-+ basic_machine=armv4l-rebel
-+ os=-linux
-+ ;;
-+ news | news700 | news800 | news900)
-+ basic_machine=m68k-sony
-+ os=-newsos
-+ ;;
-+ news1000)
-+ basic_machine=m68030-sony
-+ os=-newsos
-+ ;;
-+ news-3600 | risc-news)
-+ basic_machine=mips-sony
-+ os=-newsos
-+ ;;
-+ necv70)
-+ basic_machine=v70-nec
-+ os=-sysv
-+ ;;
-+ next | m*-next )
-+ basic_machine=m68k-next
-+ case $os in
-+ -nextstep* )
-+ ;;
-+ -ns2*)
-+ os=-nextstep2
-+ ;;
-+ *)
-+ os=-nextstep3
-+ ;;
-+ esac
-+ ;;
-+ nh3000)
-+ basic_machine=m68k-harris
-+ os=-cxux
-+ ;;
-+ nh[45]000)
-+ basic_machine=m88k-harris
-+ os=-cxux
-+ ;;
-+ nindy960)
-+ basic_machine=i960-intel
-+ os=-nindy
-+ ;;
-+ mon960)
-+ basic_machine=i960-intel
-+ os=-mon960
-+ ;;
-+ nonstopux)
-+ basic_machine=mips-compaq
-+ os=-nonstopux
-+ ;;
-+ np1)
-+ basic_machine=np1-gould
-+ ;;
-+ nsr-tandem)
-+ basic_machine=nsr-tandem
-+ ;;
-+ op50n-* | op60c-*)
-+ basic_machine=hppa1.1-oki
-+ os=-proelf
-+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+@@ -727,10 +781,6 @@
+ np1)
+ basic_machine=np1-gould
+ ;;
+- nv1)
+- basic_machine=nv1-cray
+- os=-unicosmp
+- ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+@@ -738,9 +788,12 @@
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+- or32 | or32-*)
+ openrisc | openrisc-*)
-+ basic_machine=or32-unknown
+ basic_machine=or32-unknown
+- os=-coff
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
-+ ;;
-+ OSE68000 | ose68000)
-+ basic_machine=m68000-ericsson
-+ os=-ose
-+ ;;
-+ os68k)
-+ basic_machine=m68k-none
-+ os=-os68k
-+ ;;
-+ pa-hitachi)
-+ basic_machine=hppa1.1-hitachi
-+ os=-hiuxwe2
-+ ;;
-+ paragon)
-+ basic_machine=i860-intel
-+ os=-osf
-+ ;;
-+ pbd)
-+ basic_machine=sparc-tti
-+ ;;
-+ pbb)
-+ basic_machine=m68k-tti
-+ ;;
-+ pc532 | pc532-*)
-+ basic_machine=ns32k-pc532
-+ ;;
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+@@ -767,6 +820,12 @@
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
-+ pentium | p5 | k5 | k6 | nexgen | viac3)
-+ basic_machine=i586-pc
-+ ;;
-+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
-+ basic_machine=i686-pc
-+ ;;
-+ pentiumii | pentium2 | pentiumiii | pentium3)
-+ basic_machine=i686-pc
-+ ;;
-+ pentium4)
-+ basic_machine=i786-pc
-+ ;;
-+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
-+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ pentium4-*)
-+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ pn)
-+ basic_machine=pn-gould
-+ ;;
-+ power) basic_machine=power-ibm
-+ ;;
-+ ppc) basic_machine=powerpc-unknown
-+ ;;
-+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ ppcle | powerpclittle | ppc-le | powerpc-little)
-+ basic_machine=powerpcle-unknown
-+ ;;
-+ ppcle-* | powerpclittle-*)
-+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ ppc64) basic_machine=powerpc64-unknown
-+ ;;
-+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-+ basic_machine=powerpc64le-unknown
-+ ;;
-+ ppc64le-* | powerpc64little-*)
-+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ;;
-+ ps2)
-+ basic_machine=i386-ibm
-+ ;;
-+ pw32)
-+ basic_machine=i586-unknown
-+ os=-pw32
-+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+@@ -823,6 +882,10 @@
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
-+ rom68k)
-+ basic_machine=m68k-rom68k
-+ os=-coff
-+ ;;
-+ rm[46]00)
-+ basic_machine=mips-siemens
-+ ;;
-+ rtpc | rtpc-*)
-+ basic_machine=romp-ibm
-+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+@@ -833,6 +896,12 @@
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
-+ sa29200)
-+ basic_machine=a29k-amd
-+ os=-udi
-+ ;;
-+ sb1)
-+ basic_machine=mipsisa64sb1-unknown
-+ ;;
-+ sb1el)
-+ basic_machine=mipsisa64sb1el-unknown
-+ ;;
-+ sei)
-+ basic_machine=mips-sei
-+ os=-seiux
-+ ;;
-+ sequent)
-+ basic_machine=i386-sequent
-+ ;;
-+ sh)
-+ basic_machine=sh-hitachi
-+ os=-hms
-+ ;;
-+ sh64)
-+ basic_machine=sh64-unknown
-+ ;;
-+ sparclite-wrs | simso-wrs)
-+ basic_machine=sparclite-wrs
-+ os=-vxworks
-+ ;;
-+ sps7)
-+ basic_machine=m68k-bull
-+ os=-sysv2
-+ ;;
-+ spur)
-+ basic_machine=spur-unknown
-+ ;;
-+ st2000)
-+ basic_machine=m68k-tandem
-+ ;;
-+ stratus)
-+ basic_machine=i860-stratus
-+ os=-sysv4
-+ ;;
-+ sun2)
-+ basic_machine=m68000-sun
-+ ;;
-+ sun2os3)
-+ basic_machine=m68000-sun
-+ os=-sunos3
-+ ;;
-+ sun2os4)
-+ basic_machine=m68000-sun
-+ os=-sunos4
-+ ;;
-+ sun3os3)
-+ basic_machine=m68k-sun
-+ os=-sunos3
-+ ;;
-+ sun3os4)
-+ basic_machine=m68k-sun
-+ os=-sunos4
-+ ;;
-+ sun4os3)
-+ basic_machine=sparc-sun
-+ os=-sunos3
-+ ;;
-+ sun4os4)
-+ basic_machine=sparc-sun
-+ os=-sunos4
-+ ;;
-+ sun4sol2)
-+ basic_machine=sparc-sun
-+ os=-solaris2
-+ ;;
-+ sun3 | sun3-*)
-+ basic_machine=m68k-sun
-+ ;;
-+ sun4)
-+ basic_machine=sparc-sun
-+ ;;
-+ sun386 | sun386i | roadrunner)
-+ basic_machine=i386-sun
-+ ;;
-+ sv1)
-+ basic_machine=sv1-cray
-+ os=-unicos
-+ ;;
-+ symmetry)
-+ basic_machine=i386-sequent
-+ os=-dynix
-+ ;;
-+ t3e)
-+ basic_machine=alphaev5-cray
-+ os=-unicos
-+ ;;
-+ t90)
-+ basic_machine=t90-cray
-+ os=-unicos
-+ ;;
-+ tic54x | c54x*)
-+ basic_machine=tic54x-unknown
-+ os=-coff
-+ ;;
-+ tic55x | c55x*)
-+ basic_machine=tic55x-unknown
-+ os=-coff
-+ ;;
-+ tic6x | c6x*)
-+ basic_machine=tic6x-unknown
-+ os=-coff
-+ ;;
-+ tx39)
-+ basic_machine=mipstx39-unknown
-+ ;;
-+ tx39el)
-+ basic_machine=mipstx39el-unknown
-+ ;;
-+ toad1)
-+ basic_machine=pdp10-xkl
-+ os=-tops20
-+ ;;
-+ tower | tower-32)
-+ basic_machine=m68k-ncr
-+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+@@ -956,6 +1025,10 @@
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
-+ udi29k)
-+ basic_machine=a29k-amd
-+ os=-udi
-+ ;;
-+ ultra3)
-+ basic_machine=a29k-nyu
-+ os=-sym1
-+ ;;
-+ v810 | necv810)
-+ basic_machine=v810-nec
-+ os=-none
-+ ;;
-+ vaxv)
-+ basic_machine=vax-dec
-+ os=-sysv
-+ ;;
-+ vms)
-+ basic_machine=vax-dec
-+ os=-vms
-+ ;;
-+ vpp*|vx|vx-*)
-+ basic_machine=f301-fujitsu
-+ ;;
-+ vxworks960)
-+ basic_machine=i960-wrs
-+ os=-vxworks
-+ ;;
-+ vxworks68)
-+ basic_machine=m68k-wrs
-+ os=-vxworks
-+ ;;
-+ vxworks29k)
-+ basic_machine=a29k-wrs
-+ os=-vxworks
-+ ;;
-+ w65*)
-+ basic_machine=w65-wdc
-+ os=-none
-+ ;;
-+ w89k-*)
-+ basic_machine=hppa1.1-winbond
-+ os=-proelf
-+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+@@ -999,6 +1072,10 @@
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
-+ xps | xps100)
-+ basic_machine=xps100-honeywell
-+ ;;
-+ ymp)
-+ basic_machine=ymp-cray
-+ os=-unicos
-+ ;;
-+ z8k-*-coff)
-+ basic_machine=z8k-unknown
-+ os=-sim
-+ ;;
-+ none)
-+ basic_machine=none-none
-+ os=-none
-+ ;;
-+
-+# Here we handle the default manufacturer of certain CPU types. It is in
-+# some cases the only manufacturer, in others, it is the most popular.
-+ w89k)
-+ basic_machine=hppa1.1-winbond
-+ ;;
-+ op50n)
-+ basic_machine=hppa1.1-oki
-+ ;;
-+ op60c)
-+ basic_machine=hppa1.1-oki
-+ ;;
-+ romp)
-+ basic_machine=romp-ibm
-+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+@@ -1029,6 +1106,9 @@
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
-+ rs6000)
-+ basic_machine=rs6000-ibm
-+ ;;
-+ vax)
-+ basic_machine=vax-dec
-+ ;;
-+ pdp10)
-+ # there are many clones, so DEC is not a safe bet
-+ basic_machine=pdp10-unknown
-+ ;;
-+ pdp11)
-+ basic_machine=pdp11-dec
-+ ;;
-+ we32k)
-+ basic_machine=we32k-att
-+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+@@ -1045,12 +1125,9 @@
+ we32k)
+ basic_machine=we32k-att
+ ;;
+- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
-+ basic_machine=sh-unknown
-+ ;;
-+ sparc | sparcv8 | sparcv9 | sparcv9b)
-+ basic_machine=sparc-sun
-+ ;;
-+ cydra)
-+ basic_machine=cydra-cydrome
-+ ;;
-+ orion)
-+ basic_machine=orion-highlevel
-+ ;;
-+ orion105)
-+ basic_machine=clipper-highlevel
-+ ;;
-+ mac | mpw | mac-mpw)
-+ basic_machine=m68k-apple
-+ ;;
-+ pmac | pmac-mpw)
-+ basic_machine=powerpc-apple
-+ ;;
-+ *-unknown)
-+ # Make sure to match an already-canonicalized machine name.
-+ ;;
-+ *)
-+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-+ exit 1
-+ ;;
-+esac
-+
-+# Here we canonicalize certain aliases for manufacturers.
-+case $basic_machine in
-+ *-digital*)
-+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-+ ;;
-+ *-commodore*)
-+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-+ ;;
-+ *)
-+ ;;
-+esac
-+
-+# Decode manufacturer-specific aliases for certain operating systems.
-+
-+if [ x"$os" != x"" ]
-+then
-+case $os in
-+ # First match some system type aliases
-+ # that might get confused with valid system types.
-+ # -solaris* is a basic system type, with this one exception.
-+ -solaris1 | -solaris1.*)
-+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
-+ ;;
-+ -solaris)
-+ os=-solaris2
-+ ;;
-+ -svr4*)
-+ os=-sysv4
-+ ;;
-+ -unixware*)
-+ os=-sysv4.2uw
-+ ;;
-+ -gnu/linux*)
-+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-+ ;;
-+ # First accept the basic system types.
-+ # The portable systems comes first.
-+ # Each alternative MUST END IN A *, to match a version number.
-+ # -sysv* is not here because it comes later, after sysvr4.
-+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
-+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-+ | -aos* \
-+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ basic_machine=sh-unknown
+ ;;
+- sh64)
+- basic_machine=sh64-unknown
+- ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b)
+ basic_machine=sparc-sun
+ ;;
+@@ -1124,19 +1201,23 @@
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-+ | -chorusos* | -chorusrdb* \
-+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
-+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+- | -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos*)
-+ # Remember, each alternative MUST END IN *, to match a version number.
-+ ;;
-+ -qnx*)
-+ case $basic_machine in
-+ x86-* | i*86-*)
-+ ;;
-+ *)
-+ os=-nto$os
-+ ;;
-+ esac
-+ ;;
-+ -nto-qnx*)
-+ ;;
-+ -nto*)
-+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
-+ ;;
-+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+@@ -1154,12 +1235,15 @@
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-+ ;;
-+ -mac*)
-+ os=`echo $os | sed -e 's|mac|macos|'`
-+ ;;
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
-+ -linux*)
-+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
-+ ;;
-+ -sunos5*)
-+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
-+ ;;
-+ -sunos6*)
-+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
-+ ;;
-+ -opened*)
-+ os=-openedition
-+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+@@ -1172,6 +1256,9 @@
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
-+ -wince*)
-+ os=-wince
-+ ;;
-+ -osfrose*)
-+ os=-osfrose
-+ ;;
-+ -osf*)
-+ os=-osf
-+ ;;
-+ -utek*)
-+ os=-bsd
-+ ;;
-+ -dynix*)
-+ os=-bsd
-+ ;;
-+ -acis*)
-+ os=-aos
-+ ;;
-+ -atheos*)
-+ os=-atheos
-+ ;;
+ -wince*)
+ os=-wince
+ ;;
+@@ -1193,6 +1280,9 @@
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
-+ -386bsd)
-+ os=-bsd
-+ ;;
-+ -ctix* | -uts*)
-+ os=-sysv
-+ ;;
-+ -nova*)
-+ os=-rtmk-nova
-+ ;;
-+ -ns2 )
-+ os=-nextstep2
-+ ;;
-+ -nsk*)
-+ os=-nsk
-+ ;;
-+ # Preserve the version number of sinix5.
-+ -sinix5.*)
-+ os=`echo $os | sed -e 's|sinix|sysv|'`
-+ ;;
-+ -sinix*)
-+ os=-sysv4
-+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+@@ -1215,6 +1305,9 @@
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
-+ -triton*)
-+ os=-sysv3
-+ ;;
-+ -oss*)
-+ os=-sysv3
-+ ;;
-+ -svr4)
-+ os=-sysv4
-+ ;;
-+ -svr3)
-+ os=-sysv3
-+ ;;
-+ -sysvr4)
-+ os=-sysv4
-+ ;;
-+ # This must come after -sysvr4.
-+ -sysv*)
-+ ;;
-+ -ose*)
-+ os=-ose
-+ ;;
-+ -es1800*)
-+ os=-ose
-+ ;;
-+ -xenix)
-+ os=-xenix
-+ ;;
-+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-+ os=-mint
-+ ;;
-+ -aros*)
-+ os=-aros
-+ ;;
-+ -kaos*)
-+ os=-kaos
-+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+@@ -1251,6 +1344,9 @@
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
-+ -none)
-+ ;;
-+ *)
-+ # Get rid of the `-' at the beginning of $os.
-+ os=`echo $os | sed 's/[^-]*-//'`
-+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-+ exit 1
-+ ;;
-+esac
-+else
-+
-+# Here we handle the default operating systems that come with various machines.
-+# The value should be what the vendor currently ships out the door with their
-+# machine or put another way, the most popular os provided with the machine.
-+
-+# Note that if you're going to try to match "-MANUFACTURER" here (say,
-+# "-sun"), then you have to tell the case statement up towards the top
-+# that MANUFACTURER isn't an operating system. Otherwise, code above
-+# will signal an error saying that MANUFACTURER isn't an operating
-+# system, and we'll never get to this point.
-+
-+case $basic_machine in
-+ *-acorn)
-+ os=-riscix1.2
-+ ;;
-+ arm*-rebel)
-+ os=-linux
-+ ;;
-+ arm*-semi)
-+ os=-aout
-+ ;;
+ -none)
+ ;;
+ *)
+@@ -1282,9 +1378,9 @@
+ arm*-semi)
+ os=-aout
+ ;;
+- c4x-* | tic4x-*)
+- os=-coff
+- ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
-+ # This must come before the *-dec entry.
-+ pdp10-*)
-+ os=-tops20
-+ ;;
-+ pdp11-*)
-+ os=-none
-+ ;;
-+ *-dec | vax-*)
-+ os=-ultrix4.2
-+ ;;
-+ m68*-apollo)
-+ os=-domain
-+ ;;
-+ i386-sun)
-+ os=-sunos4.0.2
-+ ;;
-+ m68000-sun)
-+ os=-sunos3
-+ # This also exists in the configure program, but was not the
-+ # default.
-+ # os=-sunos4
-+ ;;
-+ m68*-cisco)
-+ os=-aout
-+ ;;
-+ mips*-cisco)
-+ os=-elf
-+ ;;
-+ mips*-*)
-+ os=-elf
-+ ;;
-+ or32-*)
-+ os=-coff
-+ ;;
-+ *-tti) # must be before sparc entry or we get the wrong os.
-+ os=-sysv3
-+ ;;
-+ sparc-* | *-sun)
-+ os=-sunos4.1.1
-+ ;;
-+ *-be)
-+ os=-beos
-+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+@@ -1328,9 +1424,15 @@
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
-+ *-ibm)
-+ os=-aix
-+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
-+ *-wec)
-+ os=-proelf
-+ ;;
-+ *-winbond)
-+ os=-proelf
-+ ;;
-+ *-oki)
-+ os=-proelf
-+ ;;
-+ *-hp)
-+ os=-hpux
-+ ;;
-+ *-hitachi)
-+ os=-hiux
-+ ;;
-+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-+ os=-sysv
-+ ;;
-+ *-cbm)
-+ os=-amigaos
-+ ;;
-+ *-dg)
-+ os=-dgux
-+ ;;
-+ *-dolphin)
-+ os=-sysv3
-+ ;;
-+ m68k-ccur)
-+ os=-rtu
-+ ;;
-+ m88k-omron*)
-+ os=-luna
-+ ;;
-+ *-next )
-+ os=-nextstep
-+ ;;
-+ *-sequent)
-+ os=-ptx
-+ ;;
-+ *-crds)
-+ os=-unos
-+ ;;
-+ *-ns)
-+ os=-genix
-+ ;;
-+ i370-*)
-+ os=-mvs
-+ ;;
-+ *-next)
-+ os=-nextstep3
-+ ;;
-+ *-gould)
-+ os=-sysv
-+ ;;
-+ *-highlevel)
-+ os=-bsd
-+ ;;
-+ *-encore)
-+ os=-bsd
-+ ;;
-+ *-sgi)
-+ os=-irix
-+ ;;
-+ *-siemens)
-+ os=-sysv4
-+ ;;
-+ *-masscomp)
-+ os=-rtu
-+ ;;
-+ f30[01]-fujitsu | f700-fujitsu)
-+ os=-uxpv
-+ ;;
-+ *-rom68k)
-+ os=-coff
-+ ;;
-+ *-*bug)
-+ os=-coff
-+ ;;
-+ *-apple)
-+ os=-macos
-+ ;;
-+ *-atari*)
-+ os=-mint
-+ ;;
-+ *)
-+ os=-none
-+ ;;
-+esac
-+fi
-+
-+# Here we handle the case where we know the os, and the CPU type, but not the
-+# manufacturer. We pick the logical manufacturer.
-+vendor=unknown
-+case $basic_machine in
-+ *-unknown)
-+ case $os in
-+ -riscix*)
-+ vendor=acorn
-+ ;;
-+ -sunos*)
-+ vendor=sun
-+ ;;
-+ -aix*)
-+ vendor=ibm
-+ ;;
-+ -beos*)
-+ vendor=be
-+ ;;
-+ -hpux*)
-+ vendor=hp
-+ ;;
-+ -mpeix*)
-+ vendor=hp
-+ ;;
-+ -hiux*)
-+ vendor=hitachi
-+ ;;
-+ -unos*)
-+ vendor=crds
-+ ;;
-+ -dgux*)
-+ vendor=dg
-+ ;;
-+ -luna*)
-+ vendor=omron
-+ ;;
-+ -genix*)
-+ vendor=ns
-+ ;;
-+ -mvs* | -opened*)
-+ vendor=ibm
-+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+@@ -1463,9 +1565,15 @@
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
-+ -ptx*)
-+ vendor=sequent
-+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
-+ -vxsim* | -vxworks* | -windiss*)
-+ vendor=wrs
-+ ;;
-+ -aux*)
-+ vendor=apple
-+ ;;
-+ -hms*)
-+ vendor=hitachi
-+ ;;
-+ -mpw* | -macos*)
-+ vendor=apple
-+ ;;
-+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-+ vendor=atari
-+ ;;
-+ -vos*)
-+ vendor=stratus
-+ ;;
-+ esac
-+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-+ ;;
-+esac
-+
-+echo $basic_machine$os
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+@@ -1490,7 +1598,7 @@
+ esac
+
+ echo $basic_machine$os
+-exit 0
+exit
-+
-+# Local variables:
-+# eval: (add-hook 'write-file-hooks 'time-stamp)
-+# time-stamp-start: "timestamp='"
-+# time-stamp-format: "%:y-%02m-%02d"
-+# time-stamp-end: "'"
-+# End:
+
+ # Local variables:
+ # eval: (add-hook 'write-file-hooks 'time-stamp)
diff -Naur dbus-0.61.orig/configure dbus-0.61/configure
---- dbus-0.61.orig/configure 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/configure 2006-02-27 22:34:45.000000000 +0100
-@@ -0,0 +1,32009 @@
-+#! /bin/sh
-+# Guess values for system-dependent variables and create Makefiles.
-+# Generated by GNU Autoconf 2.59.
-+#
-+# Copyright (C) 2003 Free Software Foundation, Inc.
-+# This configure script is free software; the Free Software Foundation
-+# gives unlimited permission to copy, distribute and modify it.
-+## --------------------- ##
-+## M4sh Initialization. ##
-+## --------------------- ##
-+
-+# Be Bourne compatible
-+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-+ emulate sh
-+ NULLCMD=:
-+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-+ # is contrary to our usage. Disable this feature.
-+ alias -g '${1+"$@"}'='"$@"'
-+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-+ set -o posix
-+fi
-+DUALCASE=1; export DUALCASE # for MKS sh
-+
-+# Support unset when possible.
-+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-+ as_unset=unset
-+else
-+ as_unset=false
-+fi
-+
-+
-+# Work around bugs in pre-3.0 UWIN ksh.
-+$as_unset ENV MAIL MAILPATH
-+PS1='$ '
-+PS2='> '
-+PS4='+ '
-+
-+# NLS nuisances.
-+for as_var in \
-+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-+ LC_TELEPHONE LC_TIME
-+do
-+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-+ eval $as_var=C; export $as_var
-+ else
-+ $as_unset $as_var
-+ fi
-+done
-+
-+# Required to use basename.
-+if expr a : '\(a\)' >/dev/null 2>&1; then
-+ as_expr=expr
-+else
-+ as_expr=false
-+fi
-+
-+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-+ as_basename=basename
-+else
-+ as_basename=false
-+fi
-+
-+
-+# Name of the executable.
-+as_me=`$as_basename "$0" ||
-+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-+ X"$0" : 'X\(//\)$' \| \
-+ X"$0" : 'X\(/\)$' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X/"$0" |
-+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-+ /^X\/\(\/\/\)$/{ s//\1/; q; }
-+ /^X\/\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+
-+
-+# PATH needs CR, and LINENO needs CR and PATH.
-+# Avoid depending upon Character Ranges.
-+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-+as_cr_digits='0123456789'
-+as_cr_alnum=$as_cr_Letters$as_cr_digits
-+
-+# The user is always right.
-+if test "${PATH_SEPARATOR+set}" != set; then
-+ echo "#! /bin/sh" >conf$$.sh
-+ echo "exit 0" >>conf$$.sh
-+ chmod +x conf$$.sh
-+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-+ PATH_SEPARATOR=';'
-+ else
-+ PATH_SEPARATOR=:
-+ fi
-+ rm -f conf$$.sh
-+fi
-+
-+
-+ as_lineno_1=$LINENO
-+ as_lineno_2=$LINENO
-+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-+ test "x$as_lineno_1" != "x$as_lineno_2" &&
-+ test "x$as_lineno_3" = "x$as_lineno_2" || {
-+ # Find who we are. Look in the path if we contain no path at all
-+ # relative or not.
-+ case $0 in
-+ *[\\/]* ) as_myself=$0 ;;
-+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-+done
-+
-+ ;;
-+ esac
-+ # We did not find ourselves, most probably we were run as `sh COMMAND'
-+ # in which case we are not to be found in the path.
-+ if test "x$as_myself" = x; then
-+ as_myself=$0
-+ fi
-+ if test ! -f "$as_myself"; then
-+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
-+ { (exit 1); exit 1; }; }
-+ fi
-+ case $CONFIG_SHELL in
-+ '')
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for as_base in sh bash ksh sh5; do
-+ case $as_dir in
-+ /*)
-+ if ("$as_dir/$as_base" -c '
-+ as_lineno_1=$LINENO
-+ as_lineno_2=$LINENO
-+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-+ test "x$as_lineno_1" != "x$as_lineno_2" &&
-+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
-+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-+ CONFIG_SHELL=$as_dir/$as_base
-+ export CONFIG_SHELL
-+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-+ fi;;
-+ esac
-+ done
-+done
-+;;
-+ esac
-+
-+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-+ # uniformly replaced by the line number. The first 'sed' inserts a
-+ # line-number line before each line; the second 'sed' does the real
-+ # work. The second script uses 'N' to pair each line-number line
-+ # with the numbered line, and appends trailing '-' during
-+ # substitution so that $LINENO is not a special case at line end.
-+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
-+ sed '=' <$as_myself |
-+ sed '
-+ N
-+ s,$,-,
-+ : loop
-+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-+ t loop
-+ s,-$,,
-+ s,^['$as_cr_digits']*\n,,
-+ ' >$as_me.lineno &&
-+ chmod +x $as_me.lineno ||
-+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-+ { (exit 1); exit 1; }; }
-+
-+ # Don't try to exec as it changes $[0], causing all sort of problems
-+ # (the dirname of $[0] is not the place where we might find the
-+ # original and so on. Autoconf is especially sensible to this).
-+ . ./$as_me.lineno
-+ # Exit status is that of the last command.
-+ exit
-+}
-+
-+
-+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-+ *c*,-n*) ECHO_N= ECHO_C='
-+' ECHO_T=' ' ;;
-+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-+esac
-+
-+if expr a : '\(a\)' >/dev/null 2>&1; then
-+ as_expr=expr
-+else
-+ as_expr=false
-+fi
-+
-+rm -f conf$$ conf$$.exe conf$$.file
-+echo >conf$$.file
-+if ln -s conf$$.file conf$$ 2>/dev/null; then
-+ # We could just check for DJGPP; but this test a) works b) is more generic
-+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-+ if test -f conf$$.exe; then
-+ # Don't use ln at all; we don't have any links
-+ as_ln_s='cp -p'
-+ else
-+ as_ln_s='ln -s'
-+ fi
-+elif ln conf$$.file conf$$ 2>/dev/null; then
-+ as_ln_s=ln
-+else
-+ as_ln_s='cp -p'
-+fi
-+rm -f conf$$ conf$$.exe conf$$.file
-+
-+if mkdir -p . 2>/dev/null; then
-+ as_mkdir_p=:
-+else
-+ test -d ./-p && rmdir ./-p
-+ as_mkdir_p=false
-+fi
-+
-+as_executable_p="test -f"
-+
-+# Sed expression to map a string onto a valid CPP name.
-+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-+
-+# Sed expression to map a string onto a valid variable name.
-+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-+
-+
-+# IFS
-+# We need space, tab and new line, in precisely that order.
-+as_nl='
-+'
-+IFS=" $as_nl"
-+
-+# CDPATH.
-+$as_unset CDPATH
-+
-+
-+
-+# Check that we are running under the correct shell.
-+SHELL=${CONFIG_SHELL-/bin/sh}
-+
-+case X$ECHO in
-+X*--fallback-echo)
-+ # Remove one level of quotation (which was required for Make).
-+ ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
-+ ;;
-+esac
-+
-+echo=${ECHO-echo}
-+if test "X$1" = X--no-reexec; then
-+ # Discard the --no-reexec flag, and continue.
-+ shift
-+elif test "X$1" = X--fallback-echo; then
-+ # Avoid inline document here, it may be left over
-+ :
-+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
-+ # Yippee, $echo works!
-+ :
-+else
-+ # Restart under the correct shell.
-+ exec $SHELL "$0" --no-reexec ${1+"$@"}
-+fi
-+
-+if test "X$1" = X--fallback-echo; then
-+ # used as fallback echo
-+ shift
-+ cat <<EOF
-+$*
-+EOF
-+ exit 0
-+fi
-+
-+# The HP-UX ksh and POSIX shell print the target directory to stdout
-+# if CDPATH is set.
-+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-+
-+if test -z "$ECHO"; then
-+if test "X${echo_test_string+set}" != Xset; then
-+# find a string as large as possible, as long as the shell can cope with it
-+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-+ if (echo_test_string=`eval $cmd`) 2>/dev/null &&
-+ echo_test_string=`eval $cmd` &&
-+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
-+ then
-+ break
-+ fi
-+ done
-+fi
-+
-+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ :
-+else
-+ # The Solaris, AIX, and Digital Unix default echo programs unquote
-+ # backslashes. This makes it impossible to quote backslashes using
-+ # echo "$something" | sed 's/\\/\\\\/g'
-+ #
-+ # So, first we look for a working echo in the user's PATH.
-+
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ for dir in $PATH /usr/ucb; do
-+ IFS="$lt_save_ifs"
-+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ echo="$dir/echo"
-+ break
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+
-+ if test "X$echo" = Xecho; then
-+ # We didn't find a better echo, so look for alternatives.
-+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ # This shell has a builtin print -r that does the trick.
-+ echo='print -r'
-+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-+ test "X$CONFIG_SHELL" != X/bin/ksh; then
-+ # If we have ksh, try running configure again with it.
-+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-+ export ORIGINAL_CONFIG_SHELL
-+ CONFIG_SHELL=/bin/ksh
-+ export CONFIG_SHELL
-+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-+ else
-+ # Try using printf.
-+ echo='printf %s\n'
-+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ # Cool, printf works
-+ :
-+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-+ test "X$echo_testing_string" = 'X\t' &&
-+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-+ export CONFIG_SHELL
-+ SHELL="$CONFIG_SHELL"
-+ export SHELL
-+ echo="$CONFIG_SHELL $0 --fallback-echo"
-+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-+ test "X$echo_testing_string" = 'X\t' &&
-+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-+ test "X$echo_testing_string" = "X$echo_test_string"; then
-+ echo="$CONFIG_SHELL $0 --fallback-echo"
-+ else
-+ # maybe with a smaller string...
-+ prev=:
-+
-+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
-+ then
-+ break
-+ fi
-+ prev="$cmd"
-+ done
-+
-+ if test "$prev" != 'sed 50q "$0"'; then
-+ echo_test_string=`eval $prev`
-+ export echo_test_string
-+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-+ else
-+ # Oops. We lost completely, so just stick with echo.
-+ echo=echo
-+ fi
-+ fi
-+ fi
-+ fi
-+fi
-+fi
-+
-+# Copy echo and quote the copy suitably for passing to libtool from
-+# the Makefile, instead of quoting the original, which is used later.
-+ECHO=$echo
-+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-+ ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-+fi
-+
-+
-+
-+
-+tagnames=${tagnames+${tagnames},}CXX
-+
-+tagnames=${tagnames+${tagnames},}F77
-+
-+tagnames=${tagnames+${tagnames},}GCJ
-+
-+# Name of the host.
-+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-+# so uname gets run too.
-+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-+
-+exec 6>&1
-+
-+#
-+# Initializations.
-+#
-+ac_default_prefix=/usr/local
-+ac_config_libobj_dir=.
-+cross_compiling=no
-+subdirs=
-+MFLAGS=
-+MAKEFLAGS=
-+SHELL=${CONFIG_SHELL-/bin/sh}
-+
-+# Maximum number of lines to put in a shell here document.
-+# This variable seems obsolete. It should probably be removed, and
-+# only ac_max_sed_lines should be used.
-+: ${ac_max_here_lines=38}
-+
-+# Identity of this package.
-+PACKAGE_NAME=
-+PACKAGE_TARNAME=
-+PACKAGE_VERSION=
-+PACKAGE_STRING=
-+PACKAGE_BUGREPORT=
-+
-+ac_unique_file="dbus/dbus.h"
-+# Factoring default headers for most tests.
-+ac_includes_default="\
-+#include <stdio.h>
-+#if HAVE_SYS_TYPES_H
-+# include <sys/types.h>
-+#endif
-+#if HAVE_SYS_STAT_H
-+# include <sys/stat.h>
-+#endif
-+#if STDC_HEADERS
-+# include <stdlib.h>
-+# include <stddef.h>
-+#else
-+# if HAVE_STDLIB_H
-+# include <stdlib.h>
-+# endif
-+#endif
-+#if HAVE_STRING_H
-+# if !STDC_HEADERS && HAVE_MEMORY_H
-+# include <memory.h>
-+# endif
-+# include <string.h>
-+#endif
-+#if HAVE_STRINGS_H
-+# include <strings.h>
-+#endif
-+#if HAVE_INTTYPES_H
-+# include <inttypes.h>
-+#else
-+# if HAVE_STDINT_H
-+# include <stdint.h>
-+# endif
-+#endif
-+#if HAVE_UNISTD_H
-+# include <unistd.h>
-+#endif"
-+
-+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar GETTEXT_PACKAGE MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LT_CURRENT LT_REVISION LT_AGE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CPP EGREP DBUS_BUILD_TESTS_TRUE DBUS_BUILD_TESTS_FALSE GCJ GCJFLAGS GCJDEPMODE am__fastdepGCJ_TRUE am__fastdepGCJ_FALSE JAR DBUS_USE_GCJ_TRUE DBUS_USE_GCJ_FALSE LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL MONO_REQUIRED_VERSION PKG_CONFIG MONO_DEPENDENCY_CFLAGS MONO_DEPENDENCY_LIBS RUNTIME CSC GACUTIL LIB_PREFIX LIB_SUFFIX DBUS_USE_CSC_TRUE DBUS_USE_CSC_FALSE MONODOC_REQUIRED_VERSION MONODOC_DEPENDENCY_CFLAGS MONODOC_DEPENDENCY_LIBS MONODOC ENABLE_MONODOC_TRUE ENABLE_MONODOC_FALSE DBUS_GCOV_ENABLED_TRUE DBUS_GCOV_ENABLED_FALSE DBUS_INT64_TYPE DBUS_INT64_CONSTANT DBUS_UINT64_CONSTANT DBUS_HAVE_INT64 DBUS_INT32_TYPE DBUS_INT16_TYPE DBUS_PATH_OR_ABSTRACT USE_NLS MSGFMT GMSGFMT XGETTEXT CATALOGS CATOBJEXT DATADIRNAME GMOFILES INSTOBJEXT INTLLIBS PO_IN_DATADIR_TRUE PO_IN_DATADIR_FALSE POFILES POSUB MKINSTALLDIRS LIBXML_CFLAGS LIBXML_LIBS DBUS_USE_EXPAT_TRUE DBUS_USE_EXPAT_FALSE DBUS_USE_LIBXML_TRUE DBUS_USE_LIBXML_FALSE HAVE_SELINUX_TRUE HAVE_SELINUX_FALSE DBUS_CLIENT_CFLAGS DBUS_CLIENT_LIBS DBUS_BUS_CFLAGS DBUS_BUS_LIBS DBUS_TEST_CFLAGS DBUS_TEST_LIBS DBUS_GLIB_CFLAGS DBUS_GLIB_LIBS DBUS_GLIB_THREADS_CFLAGS DBUS_GLIB_THREADS_LIBS HAVE_GLIB_TRUE HAVE_GLIB_FALSE HAVE_GLIB_THREADS_TRUE HAVE_GLIB_THREADS_FALSE GLIB_GENMARSHAL DBUS_GLIB_TOOL_CFLAGS DBUS_GLIB_TOOL_LIBS DBUS_GTK_CFLAGS DBUS_GTK_LIBS DBUS_GTK_THREADS_CFLAGS DBUS_GTK_THREADS_LIBS HAVE_GTK_TRUE HAVE_GTK_FALSE QT3_MOC HAVE_QT3_TRUE HAVE_QT3_FALSE DBUS_QT3_CXXFLAGS DBUS_QT3_LIBS DBUS_QT_CFLAGS DBUS_QT_LIBS QT_MOC DBUS_QTESTLIB_CFLAGS DBUS_QTESTLIB_LIBS HAVE_QT_TRUE HAVE_QT_FALSE HAVE_QTESTLIB_TRUE HAVE_QTESTLIB_FALSE X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS DBUS_X_CFLAGS DBUS_X_LIBS DOXYGEN DBUS_DOXYGEN_DOCS_ENABLED_TRUE DBUS_DOXYGEN_DOCS_ENABLED_FALSE XMLTO DBUS_XML_DOCS_ENABLED_TRUE DBUS_XML_DOCS_ENABLED_FALSE EXPANDED_LOCALSTATEDIR EXPANDED_SYSCONFDIR EXPANDED_BINDIR EXPANDED_LIBDIR EXPANDED_DATADIR DBUS_INIT_SCRIPTS_RED_HAT_TRUE DBUS_INIT_SCRIPTS_RED_HAT_FALSE DBUS_INIT_SCRIPTS_SLACKWARE_TRUE DBUS_INIT_SCRIPTS_SLACKWARE_FALSE DBUS_SYSTEM_SOCKET DBUS_SYSTEM_BUS_DEFAULT_ADDRESS DBUS_SYSTEM_PID_FILE DBUS_CONSOLE_AUTH_DIR DBUS_USER TEST_SERVICE_DIR TEST_SERVICE_BINARY TEST_SHELL_SERVICE_BINARY TEST_GLIB_SERVICE_BINARY TEST_PYTHON_SERVICE_BINARY TEST_EXIT_BINARY TEST_SEGFAULT_BINARY TEST_SLEEP_FOREVER_BINARY ABSOLUTE_TOP_BUILDDIR TEST_SOCKET_DIR DBUS_SESSION_SOCKET_DIR PYTHON PYTHON_VERSION PYTHON_PREFIX PYTHON_EXEC_PREFIX PYTHON_PLATFORM pythondir pkgpythondir pyexecdir pkgpyexecdir PYREX PYTHON_INCLUDES HAVE_PYTHON_TRUE HAVE_PYTHON_FALSE LIBOBJS LTLIBOBJS'
-+ac_subst_files=''
-+
-+# Initialize some variables set by options.
-+ac_init_help=
-+ac_init_version=false
-+# The variables have the same names as the options, with
-+# dashes changed to underlines.
-+cache_file=/dev/null
-+exec_prefix=NONE
-+no_create=
-+no_recursion=
-+prefix=NONE
-+program_prefix=NONE
-+program_suffix=NONE
-+program_transform_name=s,x,x,
-+silent=
-+site=
-+srcdir=
-+verbose=
-+x_includes=NONE
-+x_libraries=NONE
-+
-+# Installation directory options.
-+# These are left unexpanded so users can "make install exec_prefix=/foo"
-+# and all the variables that are supposed to be based on exec_prefix
-+# by default will actually change.
-+# Use braces instead of parens because sh, perl, etc. also accept them.
-+bindir='${exec_prefix}/bin'
-+sbindir='${exec_prefix}/sbin'
-+libexecdir='${exec_prefix}/libexec'
-+datadir='${prefix}/share'
-+sysconfdir='${prefix}/etc'
-+sharedstatedir='${prefix}/com'
-+localstatedir='${prefix}/var'
-+libdir='${exec_prefix}/lib'
-+includedir='${prefix}/include'
-+oldincludedir='/usr/include'
-+infodir='${prefix}/info'
-+mandir='${prefix}/man'
-+
-+ac_prev=
-+for ac_option
-+do
-+ # If the previous option needs an argument, assign it.
-+ if test -n "$ac_prev"; then
-+ eval "$ac_prev=\$ac_option"
-+ ac_prev=
-+ continue
-+ fi
-+
-+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
-+
-+ # Accept the important Cygnus configure options, so we can diagnose typos.
-+
-+ case $ac_option in
-+
-+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
-+ ac_prev=bindir ;;
-+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-+ bindir=$ac_optarg ;;
-+
-+ -build | --build | --buil | --bui | --bu)
-+ ac_prev=build_alias ;;
-+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-+ build_alias=$ac_optarg ;;
-+
-+ -cache-file | --cache-file | --cache-fil | --cache-fi \
-+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-+ ac_prev=cache_file ;;
-+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-+ cache_file=$ac_optarg ;;
-+
-+ --config-cache | -C)
-+ cache_file=config.cache ;;
-+
-+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
-+ ac_prev=datadir ;;
-+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
-+ | --da=*)
-+ datadir=$ac_optarg ;;
-+
-+ -disable-* | --disable-*)
-+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-+ # Reject names that are not valid shell variable names.
-+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-+ { (exit 1); exit 1; }; }
-+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-+ eval "enable_$ac_feature=no" ;;
-+
-+ -enable-* | --enable-*)
-+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-+ # Reject names that are not valid shell variable names.
-+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-+ { (exit 1); exit 1; }; }
-+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-+ case $ac_option in
-+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-+ *) ac_optarg=yes ;;
-+ esac
-+ eval "enable_$ac_feature='$ac_optarg'" ;;
-+
-+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-+ | --exec | --exe | --ex)
-+ ac_prev=exec_prefix ;;
-+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-+ | --exec=* | --exe=* | --ex=*)
-+ exec_prefix=$ac_optarg ;;
-+
-+ -gas | --gas | --ga | --g)
-+ # Obsolete; use --with-gas.
-+ with_gas=yes ;;
-+
-+ -help | --help | --hel | --he | -h)
-+ ac_init_help=long ;;
-+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-+ ac_init_help=recursive ;;
-+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-+ ac_init_help=short ;;
-+
-+ -host | --host | --hos | --ho)
-+ ac_prev=host_alias ;;
-+ -host=* | --host=* | --hos=* | --ho=*)
-+ host_alias=$ac_optarg ;;
-+
-+ -includedir | --includedir | --includedi | --included | --include \
-+ | --includ | --inclu | --incl | --inc)
-+ ac_prev=includedir ;;
-+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-+ | --includ=* | --inclu=* | --incl=* | --inc=*)
-+ includedir=$ac_optarg ;;
-+
-+ -infodir | --infodir | --infodi | --infod | --info | --inf)
-+ ac_prev=infodir ;;
-+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-+ infodir=$ac_optarg ;;
-+
-+ -libdir | --libdir | --libdi | --libd)
-+ ac_prev=libdir ;;
-+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
-+ libdir=$ac_optarg ;;
-+
-+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-+ | --libexe | --libex | --libe)
-+ ac_prev=libexecdir ;;
-+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-+ | --libexe=* | --libex=* | --libe=*)
-+ libexecdir=$ac_optarg ;;
-+
-+ -localstatedir | --localstatedir | --localstatedi | --localstated \
-+ | --localstate | --localstat | --localsta | --localst \
-+ | --locals | --local | --loca | --loc | --lo)
-+ ac_prev=localstatedir ;;
-+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
-+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-+ localstatedir=$ac_optarg ;;
-+
-+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-+ ac_prev=mandir ;;
-+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-+ mandir=$ac_optarg ;;
-+
-+ -nfp | --nfp | --nf)
-+ # Obsolete; use --without-fp.
-+ with_fp=no ;;
-+
-+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-+ | --no-cr | --no-c | -n)
-+ no_create=yes ;;
-+
-+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-+ no_recursion=yes ;;
-+
-+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-+ | --oldin | --oldi | --old | --ol | --o)
-+ ac_prev=oldincludedir ;;
-+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-+ oldincludedir=$ac_optarg ;;
-+
-+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-+ ac_prev=prefix ;;
-+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-+ prefix=$ac_optarg ;;
-+
-+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
-+ | --program-pre | --program-pr | --program-p)
-+ ac_prev=program_prefix ;;
-+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
-+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-+ program_prefix=$ac_optarg ;;
-+
-+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
-+ | --program-suf | --program-su | --program-s)
-+ ac_prev=program_suffix ;;
-+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
-+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-+ program_suffix=$ac_optarg ;;
-+
-+ -program-transform-name | --program-transform-name \
-+ | --program-transform-nam | --program-transform-na \
-+ | --program-transform-n | --program-transform- \
-+ | --program-transform | --program-transfor \
-+ | --program-transfo | --program-transf \
-+ | --program-trans | --program-tran \
-+ | --progr-tra | --program-tr | --program-t)
-+ ac_prev=program_transform_name ;;
-+ -program-transform-name=* | --program-transform-name=* \
-+ | --program-transform-nam=* | --program-transform-na=* \
-+ | --program-transform-n=* | --program-transform-=* \
-+ | --program-transform=* | --program-transfor=* \
-+ | --program-transfo=* | --program-transf=* \
-+ | --program-trans=* | --program-tran=* \
-+ | --progr-tra=* | --program-tr=* | --program-t=*)
-+ program_transform_name=$ac_optarg ;;
-+
-+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-+ | -silent | --silent | --silen | --sile | --sil)
-+ silent=yes ;;
-+
-+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-+ ac_prev=sbindir ;;
-+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-+ | --sbi=* | --sb=*)
-+ sbindir=$ac_optarg ;;
-+
-+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
-+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-+ | --sharedst | --shareds | --shared | --share | --shar \
-+ | --sha | --sh)
-+ ac_prev=sharedstatedir ;;
-+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-+ | --sha=* | --sh=*)
-+ sharedstatedir=$ac_optarg ;;
-+
-+ -site | --site | --sit)
-+ ac_prev=site ;;
-+ -site=* | --site=* | --sit=*)
-+ site=$ac_optarg ;;
-+
-+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-+ ac_prev=srcdir ;;
-+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-+ srcdir=$ac_optarg ;;
-+
-+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-+ | --syscon | --sysco | --sysc | --sys | --sy)
-+ ac_prev=sysconfdir ;;
-+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-+ sysconfdir=$ac_optarg ;;
-+
-+ -target | --target | --targe | --targ | --tar | --ta | --t)
-+ ac_prev=target_alias ;;
-+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-+ target_alias=$ac_optarg ;;
-+
-+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
-+ verbose=yes ;;
-+
-+ -version | --version | --versio | --versi | --vers | -V)
-+ ac_init_version=: ;;
-+
-+ -with-* | --with-*)
-+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-+ # Reject names that are not valid shell variable names.
-+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid package name: $ac_package" >&2
-+ { (exit 1); exit 1; }; }
-+ ac_package=`echo $ac_package| sed 's/-/_/g'`
-+ case $ac_option in
-+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
-+ *) ac_optarg=yes ;;
-+ esac
-+ eval "with_$ac_package='$ac_optarg'" ;;
-+
-+ -without-* | --without-*)
-+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-+ # Reject names that are not valid shell variable names.
-+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid package name: $ac_package" >&2
-+ { (exit 1); exit 1; }; }
-+ ac_package=`echo $ac_package | sed 's/-/_/g'`
-+ eval "with_$ac_package=no" ;;
-+
-+ --x)
-+ # Obsolete; use --with-x.
-+ with_x=yes ;;
-+
-+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-+ | --x-incl | --x-inc | --x-in | --x-i)
-+ ac_prev=x_includes ;;
-+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-+ x_includes=$ac_optarg ;;
-+
-+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
-+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-+ ac_prev=x_libraries ;;
-+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-+ x_libraries=$ac_optarg ;;
-+
-+ -*) { echo "$as_me: error: unrecognized option: $ac_option
-+Try \`$0 --help' for more information." >&2
-+ { (exit 1); exit 1; }; }
-+ ;;
-+
-+ *=*)
-+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-+ # Reject names that are not valid shell variable names.
-+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-+ { (exit 1); exit 1; }; }
-+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
-+ eval "$ac_envvar='$ac_optarg'"
-+ export $ac_envvar ;;
-+
-+ *)
-+ # FIXME: should be removed in autoconf 3.0.
-+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
-+ ;;
-+
-+ esac
-+done
-+
-+if test -n "$ac_prev"; then
-+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-+ { echo "$as_me: error: missing argument to $ac_option" >&2
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+# Be sure to have absolute paths.
-+for ac_var in exec_prefix prefix
-+do
-+ eval ac_val=$`echo $ac_var`
-+ case $ac_val in
-+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
-+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-+ { (exit 1); exit 1; }; };;
-+ esac
-+done
-+
-+# Be sure to have absolute paths.
-+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
-+ localstatedir libdir includedir oldincludedir infodir mandir
-+do
-+ eval ac_val=$`echo $ac_var`
-+ case $ac_val in
-+ [\\/$]* | ?:[\\/]* ) ;;
-+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-+ { (exit 1); exit 1; }; };;
-+ esac
-+done
-+
-+# There might be people who depend on the old broken behavior: `$host'
-+# used to hold the argument of --host etc.
-+# FIXME: To remove some day.
-+build=$build_alias
-+host=$host_alias
-+target=$target_alias
-+
-+# FIXME: To remove some day.
-+if test "x$host_alias" != x; then
-+ if test "x$build_alias" = x; then
-+ cross_compiling=maybe
-+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-+ If a cross compiler is detected then cross compile mode will be used." >&2
-+ elif test "x$build_alias" != "x$host_alias"; then
-+ cross_compiling=yes
-+ fi
-+fi
-+
-+ac_tool_prefix=
-+test -n "$host_alias" && ac_tool_prefix=$host_alias-
-+
-+test "$silent" = yes && exec 6>/dev/null
-+
-+
-+# Find the source files, if location was not specified.
-+if test -z "$srcdir"; then
-+ ac_srcdir_defaulted=yes
-+ # Try the directory containing this script, then its parent.
-+ ac_confdir=`(dirname "$0") 2>/dev/null ||
-+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$0" : 'X\(//\)[^/]' \| \
-+ X"$0" : 'X\(//\)$' \| \
-+ X"$0" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$0" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ srcdir=$ac_confdir
-+ if test ! -r $srcdir/$ac_unique_file; then
-+ srcdir=..
-+ fi
-+else
-+ ac_srcdir_defaulted=no
-+fi
-+if test ! -r $srcdir/$ac_unique_file; then
-+ if test "$ac_srcdir_defaulted" = yes; then
-+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
-+ { (exit 1); exit 1; }; }
-+ else
-+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
-+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
-+ { (exit 1); exit 1; }; }
-+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
-+ac_env_build_alias_set=${build_alias+set}
-+ac_env_build_alias_value=$build_alias
-+ac_cv_env_build_alias_set=${build_alias+set}
-+ac_cv_env_build_alias_value=$build_alias
-+ac_env_host_alias_set=${host_alias+set}
-+ac_env_host_alias_value=$host_alias
-+ac_cv_env_host_alias_set=${host_alias+set}
-+ac_cv_env_host_alias_value=$host_alias
-+ac_env_target_alias_set=${target_alias+set}
-+ac_env_target_alias_value=$target_alias
-+ac_cv_env_target_alias_set=${target_alias+set}
-+ac_cv_env_target_alias_value=$target_alias
-+ac_env_CC_set=${CC+set}
-+ac_env_CC_value=$CC
-+ac_cv_env_CC_set=${CC+set}
-+ac_cv_env_CC_value=$CC
-+ac_env_CFLAGS_set=${CFLAGS+set}
-+ac_env_CFLAGS_value=$CFLAGS
-+ac_cv_env_CFLAGS_set=${CFLAGS+set}
-+ac_cv_env_CFLAGS_value=$CFLAGS
-+ac_env_LDFLAGS_set=${LDFLAGS+set}
-+ac_env_LDFLAGS_value=$LDFLAGS
-+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
-+ac_cv_env_LDFLAGS_value=$LDFLAGS
-+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
-+ac_env_CPPFLAGS_value=$CPPFLAGS
-+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
-+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
-+ac_env_CXX_set=${CXX+set}
-+ac_env_CXX_value=$CXX
-+ac_cv_env_CXX_set=${CXX+set}
-+ac_cv_env_CXX_value=$CXX
-+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
-+ac_env_CXXFLAGS_value=$CXXFLAGS
-+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
-+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
-+ac_env_CPP_set=${CPP+set}
-+ac_env_CPP_value=$CPP
-+ac_cv_env_CPP_set=${CPP+set}
-+ac_cv_env_CPP_value=$CPP
-+ac_env_CXXCPP_set=${CXXCPP+set}
-+ac_env_CXXCPP_value=$CXXCPP
-+ac_cv_env_CXXCPP_set=${CXXCPP+set}
-+ac_cv_env_CXXCPP_value=$CXXCPP
-+ac_env_F77_set=${F77+set}
-+ac_env_F77_value=$F77
-+ac_cv_env_F77_set=${F77+set}
-+ac_cv_env_F77_value=$F77
-+ac_env_FFLAGS_set=${FFLAGS+set}
-+ac_env_FFLAGS_value=$FFLAGS
-+ac_cv_env_FFLAGS_set=${FFLAGS+set}
-+ac_cv_env_FFLAGS_value=$FFLAGS
-+
-+#
-+# Report the --help message.
-+#
-+if test "$ac_init_help" = "long"; then
-+ # Omit some internal or obsolete options to make the list less imposing.
-+ # This message is too long to be a string in the A/UX 3.1 sh.
-+ cat <<_ACEOF
-+\`configure' configures this package to adapt to many kinds of systems.
-+
-+Usage: $0 [OPTION]... [VAR=VALUE]...
-+
-+To assign environment variables (e.g., CC, CFLAGS...), specify them as
-+VAR=VALUE. See below for descriptions of some of the useful variables.
-+
-+Defaults for the options are specified in brackets.
-+
-+Configuration:
-+ -h, --help display this help and exit
-+ --help=short display options specific to this package
-+ --help=recursive display the short help of all the included packages
-+ -V, --version display version information and exit
-+ -q, --quiet, --silent do not print \`checking...' messages
-+ --cache-file=FILE cache test results in FILE [disabled]
-+ -C, --config-cache alias for \`--cache-file=config.cache'
-+ -n, --no-create do not create output files
-+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
-+
-+_ACEOF
-+
-+ cat <<_ACEOF
-+Installation directories:
-+ --prefix=PREFIX install architecture-independent files in PREFIX
-+ [$ac_default_prefix]
-+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
-+ [PREFIX]
-+
-+By default, \`make install' will install all the files in
-+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-+for instance \`--prefix=\$HOME'.
-+
-+For better control, use the options below.
-+
-+Fine tuning of the installation directories:
-+ --bindir=DIR user executables [EPREFIX/bin]
-+ --sbindir=DIR system admin executables [EPREFIX/sbin]
-+ --libexecdir=DIR program executables [EPREFIX/libexec]
-+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
-+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
-+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
-+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
-+ --libdir=DIR object code libraries [EPREFIX/lib]
-+ --includedir=DIR C header files [PREFIX/include]
-+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
-+ --infodir=DIR info documentation [PREFIX/info]
-+ --mandir=DIR man documentation [PREFIX/man]
-+_ACEOF
-+
-+ cat <<\_ACEOF
-+
-+Program names:
-+ --program-prefix=PREFIX prepend PREFIX to installed program names
-+ --program-suffix=SUFFIX append SUFFIX to installed program names
-+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
-+
-+X features:
-+ --x-includes=DIR X include files are in DIR
-+ --x-libraries=DIR X library files are in DIR
-+
-+System types:
-+ --build=BUILD configure for building on BUILD [guessed]
-+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
-+ --target=TARGET configure for building compilers for TARGET [HOST]
-+_ACEOF
-+fi
-+
-+if test -n "$ac_init_help"; then
-+
-+ cat <<\_ACEOF
-+
-+Optional Features:
-+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
-+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
-+ --enable-maintainer-mode enable make rules and dependencies not useful
-+ (and sometimes confusing) to the casual installer
-+ --disable-dependency-tracking speeds up one-time build
-+ --enable-dependency-tracking do not reject slow dependency extractors
-+ --enable-qt enable Qt-friendly client library
-+ --enable-qt-debug enable Qt-friendly client library, linked to debug
-+ Qt libraries
-+ --enable-qt3 enable Qt3-friendly client library
-+ --enable-glib enable GLib-friendly client library
-+ --enable-gtk enable GTK-requiring executables
-+ --enable-tests enable unit test code
-+ --enable-ansi enable -ansi -pedantic gcc flags
-+ --enable-verbose-mode support verbose debug mode
-+ --enable-asserts include assertion checks
-+ --enable-checks include sanity checks on public API
-+ --enable-xml-docs build XML documentation (requires xmlto)
-+ --enable-doxygen-docs build DOXYGEN documentation (requires Doxygen)
-+ --enable-gcov compile with coverage profiling instrumentation (gcc
-+ only)
-+ --enable-abstract-sockets
-+ use abstract socket namespace (linux only)
-+ --enable-gcj build gcj bindings
-+ --enable-mono build mono bindings
-+ --enable-mono-docs build mono docs
-+ --enable-python build python bindings
-+ --enable-selinux build with SELinux support
-+ --enable-dnotify build with dnotify support (linux only)
-+ --enable-shared[=PKGS]
-+ build shared libraries [default=yes]
-+ --enable-static[=PKGS]
-+ build static libraries [default=yes]
-+ --enable-fast-install[=PKGS]
-+ optimize for fast installation [default=yes]
-+ --disable-libtool-lock avoid locking (might break parallel builds)
-+
-+Optional Packages:
-+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
-+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
-+ --with-qt-moc=<path> moc for Qt
-+ --with-qt3-moc=<path> moc for Qt3
-+ --with-xml=libxml/expat XML library to use
-+ --with-init-scripts=redhat
-+ Style of init scripts to install
-+ --with-session-socket-dir=dirname
-+ Where to put sockets for the per-login-session
-+ message bus
-+ --with-test-socket-dir=dirname
-+ Where to put sockets for make check
-+ --with-system-pid-file=pidfile
-+ PID file for systemwide daemon
-+ --with-system-socket=filename
-+ UNIX domain socket for systemwide daemon
-+ --with-console-auth-dir=dirname
-+ directory to check for console ownerhip
-+ --with-dbus-user=<user> User for running the DBUS daemon (messagebus)
-+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
-+ --with-pic try to use only PIC/non-PIC objects [default=use
-+ both]
-+ --with-tags[=TAGS]
-+ include additional configurations [automatic]
-+ --with-x use the X Window System
-+
-+Some influential environment variables:
-+ CC C compiler command
-+ CFLAGS C compiler flags
-+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
-+ nonstandard directory <lib dir>
-+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
-+ headers in a nonstandard directory <include dir>
-+ CXX C++ compiler command
-+ CXXFLAGS C++ compiler flags
-+ CPP C preprocessor
-+ CXXCPP C++ preprocessor
-+ F77 Fortran 77 compiler command
-+ FFLAGS Fortran 77 compiler flags
-+
-+Use these variables to override the choices made by `configure' or to help
-+it to find libraries and programs with nonstandard names/locations.
-+
-+_ACEOF
-+fi
-+
-+if test "$ac_init_help" = "recursive"; then
-+ # If there are subdirs, report their specific --help.
-+ ac_popdir=`pwd`
-+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-+ test -d $ac_dir || continue
-+ ac_builddir=.
-+
-+if test "$ac_dir" != .; then
-+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-+ # A "../" for each directory in $ac_dir_suffix.
-+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-+else
-+ ac_dir_suffix= ac_top_builddir=
-+fi
-+
-+case $srcdir in
-+ .) # No --srcdir option. We are building in place.
-+ ac_srcdir=.
-+ if test -z "$ac_top_builddir"; then
-+ ac_top_srcdir=.
-+ else
-+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-+ fi ;;
-+ [\\/]* | ?:[\\/]* ) # Absolute path.
-+ ac_srcdir=$srcdir$ac_dir_suffix;
-+ ac_top_srcdir=$srcdir ;;
-+ *) # Relative path.
-+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
-+esac
-+
-+# Do not use `cd foo && pwd` to compute absolute paths, because
-+# the directories may not exist.
-+case `pwd` in
-+.) ac_abs_builddir="$ac_dir";;
-+*)
-+ case "$ac_dir" in
-+ .) ac_abs_builddir=`pwd`;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_top_builddir=${ac_top_builddir}.;;
-+*)
-+ case ${ac_top_builddir}. in
-+ .) ac_abs_top_builddir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_srcdir=$ac_srcdir;;
-+*)
-+ case $ac_srcdir in
-+ .) ac_abs_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_top_srcdir=$ac_top_srcdir;;
-+*)
-+ case $ac_top_srcdir in
-+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-+ esac;;
-+esac
-+
-+ cd $ac_dir
-+ # Check for guested configure; otherwise get Cygnus style configure.
-+ if test -f $ac_srcdir/configure.gnu; then
-+ echo
-+ $SHELL $ac_srcdir/configure.gnu --help=recursive
-+ elif test -f $ac_srcdir/configure; then
-+ echo
-+ $SHELL $ac_srcdir/configure --help=recursive
-+ elif test -f $ac_srcdir/configure.ac ||
-+ test -f $ac_srcdir/configure.in; then
-+ echo
-+ $ac_configure --help
-+ else
-+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-+ fi
+--- dbus-0.61.orig/configure 2006-02-27 22:56:46.000000000 +0100
++++ dbus-0.61/configure 2006-02-27 22:57:41.000000000 +0100
+@@ -1197,7 +1197,7 @@
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+- cd $ac_popdir
+ cd "$ac_popdir"
-+ done
-+fi
-+
-+test -n "$ac_init_help" && exit 0
-+if $ac_init_version; then
-+ cat <<\_ACEOF
-+
-+Copyright (C) 2003 Free Software Foundation, Inc.
-+This configure script is free software; the Free Software Foundation
-+gives unlimited permission to copy, distribute and modify it.
-+_ACEOF
-+ exit 0
-+fi
-+exec 5>config.log
-+cat >&5 <<_ACEOF
-+This file contains any messages produced by compilers while
-+running configure, to aid debugging if configure makes a mistake.
-+
-+It was created by $as_me, which was
-+generated by GNU Autoconf 2.59. Invocation command line was
-+
-+ $ $0 $@
-+
-+_ACEOF
-+{
-+cat <<_ASUNAME
-+## --------- ##
-+## Platform. ##
-+## --------- ##
-+
-+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-+uname -m = `(uname -m) 2>/dev/null || echo unknown`
-+uname -r = `(uname -r) 2>/dev/null || echo unknown`
-+uname -s = `(uname -s) 2>/dev/null || echo unknown`
-+uname -v = `(uname -v) 2>/dev/null || echo unknown`
-+
-+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-+
-+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
-+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-+
-+_ASUNAME
-+
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ echo "PATH: $as_dir"
-+done
-+
-+} >&5
-+
-+cat >&5 <<_ACEOF
-+
-+
-+## ----------- ##
-+## Core tests. ##
-+## ----------- ##
-+
-+_ACEOF
-+
-+
-+# Keep a trace of the command line.
-+# Strip out --no-create and --no-recursion so they do not pile up.
-+# Strip out --silent because we don't want to record it for future runs.
-+# Also quote any args containing shell meta-characters.
-+# Make two passes to allow for proper duplicate-argument suppression.
-+ac_configure_args=
-+ac_configure_args0=
-+ac_configure_args1=
-+ac_sep=
-+ac_must_keep_next=false
-+for ac_pass in 1 2
-+do
-+ for ac_arg
-+ do
-+ case $ac_arg in
-+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-+ | -silent | --silent | --silen | --sile | --sil)
-+ continue ;;
-+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-+ esac
-+ case $ac_pass in
-+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-+ 2)
-+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
-+ if test $ac_must_keep_next = true; then
-+ ac_must_keep_next=false # Got value, back to normal.
-+ else
-+ case $ac_arg in
-+ *=* | --config-cache | -C | -disable-* | --disable-* \
-+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-+ | -with-* | --with-* | -without-* | --without-* | --x)
-+ case "$ac_configure_args0 " in
-+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-+ esac
-+ ;;
-+ -* ) ac_must_keep_next=true ;;
-+ esac
-+ fi
-+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
-+ # Get rid of the leading space.
-+ ac_sep=" "
-+ ;;
-+ esac
-+ done
-+done
-+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-+
-+# When interrupted or exit'd, cleanup temporary files, and complete
-+# config.log. We remove comments because anyway the quotes in there
-+# would cause problems or look ugly.
-+# WARNING: Be sure not to use single quotes in there, as some shells,
-+# such as our DU 5.0 friend, will then `close' the trap.
-+trap 'exit_status=$?
-+ # Save into config.log some information that might help in debugging.
-+ {
-+ echo
-+
-+ cat <<\_ASBOX
-+## ---------------- ##
-+## Cache variables. ##
-+## ---------------- ##
-+_ASBOX
-+ echo
-+ # The following way of writing the cache mishandles newlines in values,
-+{
-+ (set) 2>&1 |
-+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
-+ *ac_space=\ *)
-+ sed -n \
-+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
-+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
-+ ;;
-+ *)
-+ sed -n \
-+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-+ ;;
-+ esac;
-+}
-+ echo
-+
-+ cat <<\_ASBOX
-+## ----------------- ##
-+## Output variables. ##
-+## ----------------- ##
-+_ASBOX
-+ echo
-+ for ac_var in $ac_subst_vars
-+ do
-+ eval ac_val=$`echo $ac_var`
-+ echo "$ac_var='"'"'$ac_val'"'"'"
-+ done | sort
-+ echo
-+
-+ if test -n "$ac_subst_files"; then
-+ cat <<\_ASBOX
-+## ------------- ##
-+## Output files. ##
-+## ------------- ##
-+_ASBOX
-+ echo
-+ for ac_var in $ac_subst_files
-+ do
-+ eval ac_val=$`echo $ac_var`
-+ echo "$ac_var='"'"'$ac_val'"'"'"
-+ done | sort
-+ echo
-+ fi
-+
-+ if test -s confdefs.h; then
-+ cat <<\_ASBOX
-+## ----------- ##
-+## confdefs.h. ##
-+## ----------- ##
-+_ASBOX
-+ echo
-+ sed "/^$/d" confdefs.h | sort
-+ echo
-+ fi
-+ test "$ac_signal" != 0 &&
-+ echo "$as_me: caught signal $ac_signal"
-+ echo "$as_me: exit $exit_status"
-+ } >&5
-+ rm -f core *.core &&
-+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
-+ exit $exit_status
-+ ' 0
-+for ac_signal in 1 2 13 15; do
-+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-+done
-+ac_signal=0
-+
-+# confdefs.h avoids OS command line length limits that DEFS can exceed.
-+rm -rf conftest* confdefs.h
-+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-+echo >confdefs.h
-+
-+# Predefined preprocessor variables.
-+
-+cat >>confdefs.h <<_ACEOF
-+#define PACKAGE_NAME "$PACKAGE_NAME"
-+_ACEOF
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-+_ACEOF
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define PACKAGE_VERSION "$PACKAGE_VERSION"
-+_ACEOF
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define PACKAGE_STRING "$PACKAGE_STRING"
-+_ACEOF
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-+_ACEOF
-+
-+
-+# Let the site file select an alternate cache file if it wants to.
-+# Prefer explicitly selected file to automatically selected ones.
-+if test -z "$CONFIG_SITE"; then
-+ if test "x$prefix" != xNONE; then
-+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-+ else
-+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-+ fi
-+fi
-+for ac_site_file in $CONFIG_SITE; do
-+ if test -r "$ac_site_file"; then
-+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-+echo "$as_me: loading site script $ac_site_file" >&6;}
-+ sed 's/^/| /' "$ac_site_file" >&5
-+ . "$ac_site_file"
-+ fi
-+done
-+
-+if test -r "$cache_file"; then
-+ # Some versions of bash will fail to source /dev/null (special
-+ # files actually), so we avoid doing that.
-+ if test -f "$cache_file"; then
-+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-+echo "$as_me: loading cache $cache_file" >&6;}
-+ case $cache_file in
-+ [\\/]* | ?:[\\/]* ) . $cache_file;;
-+ *) . ./$cache_file;;
-+ esac
-+ fi
-+else
-+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-+echo "$as_me: creating cache $cache_file" >&6;}
-+ >$cache_file
-+fi
-+
-+# Check that the precious variables saved in the cache have kept the same
-+# value.
-+ac_cache_corrupted=false
-+for ac_var in `(set) 2>&1 |
-+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
-+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
-+ eval ac_new_set=\$ac_env_${ac_var}_set
-+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
-+ eval ac_new_val="\$ac_env_${ac_var}_value"
-+ case $ac_old_set,$ac_new_set in
-+ set,)
-+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-+ ac_cache_corrupted=: ;;
-+ ,set)
-+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-+ ac_cache_corrupted=: ;;
-+ ,);;
-+ *)
-+ if test "x$ac_old_val" != "x$ac_new_val"; then
-+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-+echo "$as_me: former value: $ac_old_val" >&2;}
-+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-+echo "$as_me: current value: $ac_new_val" >&2;}
-+ ac_cache_corrupted=:
-+ fi;;
-+ esac
-+ # Pass precious variables to config.status.
-+ if test "$ac_new_set" = set; then
-+ case $ac_new_val in
-+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
-+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-+ *) ac_arg=$ac_var=$ac_new_val ;;
-+ esac
-+ case " $ac_configure_args " in
-+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
-+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-+ esac
-+ fi
-+done
-+if $ac_cache_corrupted; then
-+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+ac_aux_dir=
-+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-+ if test -f $ac_dir/install-sh; then
-+ ac_aux_dir=$ac_dir
-+ ac_install_sh="$ac_aux_dir/install-sh -c"
-+ break
-+ elif test -f $ac_dir/install.sh; then
-+ ac_aux_dir=$ac_dir
-+ ac_install_sh="$ac_aux_dir/install.sh -c"
-+ break
-+ elif test -f $ac_dir/shtool; then
-+ ac_aux_dir=$ac_dir
-+ ac_install_sh="$ac_aux_dir/shtool install -c"
-+ break
-+ fi
-+done
-+if test -z "$ac_aux_dir"; then
-+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
-+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
-+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
-+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
-+
-+# Make sure we can run config.sub.
-+$ac_config_sub sun4 >/dev/null 2>&1 ||
-+ { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
-+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
-+ { (exit 1); exit 1; }; }
-+
-+echo "$as_me:$LINENO: checking build system type" >&5
-+echo $ECHO_N "checking build system type... $ECHO_C" >&6
-+if test "${ac_cv_build+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_cv_build_alias=$build_alias
-+test -z "$ac_cv_build_alias" &&
-+ ac_cv_build_alias=`$ac_config_guess`
-+test -z "$ac_cv_build_alias" &&
-+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-+ { (exit 1); exit 1; }; }
-+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
-+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
-+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
-+ { (exit 1); exit 1; }; }
-+
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-+echo "${ECHO_T}$ac_cv_build" >&6
-+build=$ac_cv_build
-+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-+
-+
-+echo "$as_me:$LINENO: checking host system type" >&5
-+echo $ECHO_N "checking host system type... $ECHO_C" >&6
-+if test "${ac_cv_host+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_cv_host_alias=$host_alias
-+test -z "$ac_cv_host_alias" &&
-+ ac_cv_host_alias=$ac_cv_build_alias
-+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
-+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
-+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
-+ { (exit 1); exit 1; }; }
-+
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-+echo "${ECHO_T}$ac_cv_host" >&6
-+host=$ac_cv_host
-+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-+
-+
-+echo "$as_me:$LINENO: checking target system type" >&5
-+echo $ECHO_N "checking target system type... $ECHO_C" >&6
-+if test "${ac_cv_target+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_cv_target_alias=$target_alias
-+test "x$ac_cv_target_alias" = "x" &&
-+ ac_cv_target_alias=$ac_cv_host_alias
-+ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
-+ { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5
-+echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
-+ { (exit 1); exit 1; }; }
-+
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_target" >&5
-+echo "${ECHO_T}$ac_cv_target" >&6
-+target=$ac_cv_target
-+target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-+target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-+target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-+
-+
-+# The aliases save the names the user supplied, while $host etc.
-+# will get canonicalized.
-+test -n "$target_alias" &&
-+ test "$program_prefix$program_suffix$program_transform_name" = \
-+ NONENONEs,x,x, &&
-+ program_prefix=${target_alias}-
-+
-+am__api_version="1.9"
-+# Find a good install program. We prefer a C program (faster),
-+# so one script is as good as another. But avoid the broken or
-+# incompatible versions:
-+# SysV /etc/install, /usr/sbin/install
-+# SunOS /usr/etc/install
-+# IRIX /sbin/install
-+# AIX /bin/install
-+# AmigaOS /C/install, which installs bootblocks on floppy discs
-+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-+# OS/2's system install, which has a completely different semantic
-+# ./install, which can be erroneously created by make from ./install.sh.
-+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
-+if test -z "$INSTALL"; then
-+if test "${ac_cv_path_install+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ # Account for people who put trailing slashes in PATH elements.
-+case $as_dir/ in
-+ ./ | .// | /cC/* | \
-+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
-+ /usr/ucb/* ) ;;
-+ *)
-+ # OSF1 and SCO ODT 3.0 have their own names for install.
-+ # Don't use installbsd from OSF since it installs stuff as root
-+ # by default.
-+ for ac_prog in ginstall scoinst install; do
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-+ if test $ac_prog = install &&
-+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-+ # AIX install. It has an incompatible calling convention.
-+ :
-+ elif test $ac_prog = install &&
-+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-+ # program-specific install script used by HP pwplus--don't use.
-+ :
-+ else
-+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-+ break 3
-+ fi
-+ fi
-+ done
-+ done
-+ ;;
-+esac
-+done
-+
-+
-+fi
-+ if test "${ac_cv_path_install+set}" = set; then
-+ INSTALL=$ac_cv_path_install
-+ else
-+ # As a last resort, use the slow shell script. We don't cache a
-+ # path for INSTALL within a source directory, because that will
-+ # break other packages using the cache if that directory is
-+ # removed, or if the path is relative.
-+ INSTALL=$ac_install_sh
-+ fi
-+fi
-+echo "$as_me:$LINENO: result: $INSTALL" >&5
-+echo "${ECHO_T}$INSTALL" >&6
-+
-+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-+# It thinks the first close brace ends the variable substitution.
-+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-+
-+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-+
-+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-+
-+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
-+# Just in case
-+sleep 1
-+echo timestamp > conftest.file
-+# Do `set' in a subshell so we don't clobber the current shell's
-+# arguments. Must try -L first in case configure is actually a
-+# symlink; some systems play weird games with the mod time of symlinks
-+# (eg FreeBSD returns the mod time of the symlink's containing
-+# directory).
-+if (
-+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-+ if test "$*" = "X"; then
-+ # -L didn't work.
-+ set X `ls -t $srcdir/configure conftest.file`
-+ fi
-+ rm -f conftest.file
-+ if test "$*" != "X $srcdir/configure conftest.file" \
-+ && test "$*" != "X conftest.file $srcdir/configure"; then
-+
-+ # If neither matched, then we have a broken ls. This can happen
-+ # if, for instance, CONFIG_SHELL is bash and it inherits a
-+ # broken ls alias from the environment. This has actually
-+ # happened. Such a system could not be considered "sane".
-+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
-+alias in your environment" >&5
-+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
-+alias in your environment" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+
-+ test "$2" = conftest.file
-+ )
-+then
-+ # Ok.
-+ :
-+else
-+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-+Check your system clock" >&5
-+echo "$as_me: error: newly created file is older than distributed files!
-+Check your system clock" >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+test "$program_prefix" != NONE &&
-+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
-+# Use a double $ so make ignores it.
-+test "$program_suffix" != NONE &&
-+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
-+# Double any \ or $. echo might interpret backslashes.
-+# By default was `s,x,x', remove it if useless.
-+cat <<\_ACEOF >conftest.sed
-+s/[\\$]/&&/g;s/;s,x,x,$//
-+_ACEOF
-+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-+rm conftest.sed
-+
-+# expand $ac_aux_dir to an absolute path
-+am_aux_dir=`cd $ac_aux_dir && pwd`
-+
-+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-+# Use eval to expand $SHELL
-+if eval "$MISSING --run true"; then
-+ am_missing_run="$MISSING --run "
-+else
-+ am_missing_run=
-+ { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-+fi
-+
-+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-+ # We used to keeping the `.' as first argument, in order to
-+ # allow $(mkdir_p) to be used without argument. As in
-+ # $(mkdir_p) $(somedir)
-+ # where $(somedir) is conditionally defined. However this is wrong
-+ # for two reasons:
-+ # 1. if the package is installed by a user who cannot write `.'
-+ # make install will fail,
-+ # 2. the above comment should most certainly read
-+ # $(mkdir_p) $(DESTDIR)$(somedir)
-+ # so it does not work when $(somedir) is undefined and
-+ # $(DESTDIR) is not.
-+ # To support the latter case, we have to write
-+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-+ # so the `.' trick is pointless.
-+ mkdir_p='mkdir -p --'
-+else
-+ # On NextStep and OpenStep, the `mkdir' command does not
-+ # recognize any option. It will interpret all options as
-+ # directories to create, and then abort because `.' already
-+ # exists.
-+ for d in ./-p ./--version;
-+ do
-+ test -d $d && rmdir $d
-+ done
-+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-+ if test -f "$ac_aux_dir/mkinstalldirs"; then
-+ mkdir_p='$(mkinstalldirs)'
-+ else
-+ mkdir_p='$(install_sh) -d'
-+ fi
-+fi
-+
-+for ac_prog in gawk mawk nawk awk
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_AWK+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$AWK"; then
-+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_AWK="$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+AWK=$ac_cv_prog_AWK
-+if test -n "$AWK"; then
-+ echo "$as_me:$LINENO: result: $AWK" >&5
-+echo "${ECHO_T}$AWK" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$AWK" && break
-+done
-+
-+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
-+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
-+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.make <<\_ACEOF
-+all:
-+ @echo 'ac_maketemp="$(MAKE)"'
-+_ACEOF
-+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
-+if test -n "$ac_maketemp"; then
-+ eval ac_cv_prog_make_${ac_make}_set=yes
-+else
-+ eval ac_cv_prog_make_${ac_make}_set=no
-+fi
-+rm -f conftest.make
-+fi
-+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ SET_MAKE=
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+ SET_MAKE="MAKE=${MAKE-make}"
-+fi
-+
-+rm -rf .tst 2>/dev/null
-+mkdir .tst 2>/dev/null
-+if test -d .tst; then
-+ am__leading_dot=.
-+else
-+ am__leading_dot=_
-+fi
-+rmdir .tst 2>/dev/null
-+
-+# test to see if srcdir already configured
-+if test "`cd $srcdir && pwd`" != "`pwd`" &&
-+ test -f $srcdir/config.status; then
-+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+# test whether we have cygpath
-+if test -z "$CYGPATH_W"; then
-+ if (cygpath --version) >/dev/null 2>/dev/null; then
-+ CYGPATH_W='cygpath -w'
-+ else
-+ CYGPATH_W=echo
-+ fi
-+fi
-+
-+
-+# Define the identity of the package.
-+ PACKAGE=dbus
-+ VERSION=0.61
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define PACKAGE "$PACKAGE"
-+_ACEOF
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define VERSION "$VERSION"
-+_ACEOF
-+
-+# Some tools Automake needs.
-+
-+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-+
-+
-+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-+
-+
-+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-+
-+
-+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-+
-+
-+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-+
-+install_sh=${install_sh-"$am_aux_dir/install-sh"}
-+
-+# Installed binaries are usually stripped using `strip' when the user
-+# run `make install-strip'. However `strip' might not be the right
-+# tool to use in cross-compilation environments, therefore Automake
-+# will honor the `STRIP' environment variable to overrule this program.
-+if test "$cross_compiling" != no; then
-+ if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}strip; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_STRIP+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$STRIP"; then
-+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+STRIP=$ac_cv_prog_STRIP
-+if test -n "$STRIP"; then
-+ echo "$as_me:$LINENO: result: $STRIP" >&5
-+echo "${ECHO_T}$STRIP" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+fi
-+if test -z "$ac_cv_prog_STRIP"; then
-+ ac_ct_STRIP=$STRIP
-+ # Extract the first word of "strip", so it can be a program name with args.
-+set dummy strip; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_STRIP"; then
-+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_STRIP="strip"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
-+fi
-+fi
-+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-+if test -n "$ac_ct_STRIP"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-+echo "${ECHO_T}$ac_ct_STRIP" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ STRIP=$ac_ct_STRIP
-+else
-+ STRIP="$ac_cv_prog_STRIP"
-+fi
-+
-+fi
-+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-+
-+# We need awk for the "check" target. The system "awk" is bad on
-+# some platforms.
-+# Always define AMTAR for backward compatibility.
-+
-+AMTAR=${AMTAR-"${am_missing_run}tar"}
-+
-+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-+
-+
-+
-+
-+
-+
-+ ac_config_headers="$ac_config_headers config.h"
-+
-+
-+# Honor aclocal flags
-+ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
-+
-+GETTEXT_PACKAGE=dbus-1
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE"
-+_ACEOF
-+
-+
-+ ## must come before we use the $USE_MAINTAINER_MODE variable later
-+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
-+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
-+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
-+if test "${enable_maintainer_mode+set}" = set; then
-+ enableval="$enable_maintainer_mode"
-+ USE_MAINTAINER_MODE=$enableval
-+else
-+ USE_MAINTAINER_MODE=no
-+fi;
-+ echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
-+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
-+
-+
-+if test $USE_MAINTAINER_MODE = yes; then
-+ MAINTAINER_MODE_TRUE=
-+ MAINTAINER_MODE_FALSE='#'
-+else
-+ MAINTAINER_MODE_TRUE='#'
-+ MAINTAINER_MODE_FALSE=
-+fi
-+
-+ MAINT=$MAINTAINER_MODE_TRUE
-+
-+
-+
-+# libtool versioning - this applies to libdbus
-+#
-+# See http://sources.redhat.com/autobook/autobook/autobook_91.html#SEC91 for details
-+#
-+
-+## increment if the interface has additions, changes, removals.
-+LT_CURRENT=2
-+
-+## increment any time the source changes; set to
-+## 0 if you increment CURRENT
-+LT_REVISION=0
-+
-+## increment if any interfaces have been added; set to 0
-+## if any interfaces have been changed or removed. removal has
-+## precedence over adding, so set to 0 if both happened.
-+LT_AGE=0
-+
-+
-+
-+
-+
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}gcc; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_CC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$CC"; then
-+ ac_cv_prog_CC="$CC" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+CC=$ac_cv_prog_CC
-+if test -n "$CC"; then
-+ echo "$as_me:$LINENO: result: $CC" >&5
-+echo "${ECHO_T}$CC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+fi
-+if test -z "$ac_cv_prog_CC"; then
-+ ac_ct_CC=$CC
-+ # Extract the first word of "gcc", so it can be a program name with args.
-+set dummy gcc; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_CC"; then
-+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_CC="gcc"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+ac_ct_CC=$ac_cv_prog_ac_ct_CC
-+if test -n "$ac_ct_CC"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-+echo "${ECHO_T}$ac_ct_CC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ CC=$ac_ct_CC
-+else
-+ CC="$ac_cv_prog_CC"
-+fi
-+
-+if test -z "$CC"; then
-+ if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}cc; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_CC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$CC"; then
-+ ac_cv_prog_CC="$CC" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_CC="${ac_tool_prefix}cc"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+CC=$ac_cv_prog_CC
-+if test -n "$CC"; then
-+ echo "$as_me:$LINENO: result: $CC" >&5
-+echo "${ECHO_T}$CC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+fi
-+if test -z "$ac_cv_prog_CC"; then
-+ ac_ct_CC=$CC
-+ # Extract the first word of "cc", so it can be a program name with args.
-+set dummy cc; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_CC"; then
-+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_CC="cc"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+ac_ct_CC=$ac_cv_prog_ac_ct_CC
-+if test -n "$ac_ct_CC"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-+echo "${ECHO_T}$ac_ct_CC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ CC=$ac_ct_CC
-+else
-+ CC="$ac_cv_prog_CC"
-+fi
-+
-+fi
-+if test -z "$CC"; then
-+ # Extract the first word of "cc", so it can be a program name with args.
-+set dummy cc; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_CC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$CC"; then
-+ ac_cv_prog_CC="$CC" # Let the user override the test.
-+else
-+ ac_prog_rejected=no
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-+ ac_prog_rejected=yes
-+ continue
-+ fi
-+ ac_cv_prog_CC="cc"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+if test $ac_prog_rejected = yes; then
-+ # We found a bogon in the path, so make sure we never use it.
-+ set dummy $ac_cv_prog_CC
-+ shift
-+ if test $# != 0; then
-+ # We chose a different compiler from the bogus one.
-+ # However, it has the same basename, so the bogon will be chosen
-+ # first if we set CC to just the basename; use the full file name.
-+ shift
-+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-+ fi
-+fi
-+fi
-+fi
-+CC=$ac_cv_prog_CC
-+if test -n "$CC"; then
-+ echo "$as_me:$LINENO: result: $CC" >&5
-+echo "${ECHO_T}$CC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+fi
-+if test -z "$CC"; then
-+ if test -n "$ac_tool_prefix"; then
-+ for ac_prog in cl
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_CC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$CC"; then
-+ ac_cv_prog_CC="$CC" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+CC=$ac_cv_prog_CC
-+if test -n "$CC"; then
-+ echo "$as_me:$LINENO: result: $CC" >&5
-+echo "${ECHO_T}$CC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$CC" && break
-+ done
-+fi
-+if test -z "$CC"; then
-+ ac_ct_CC=$CC
-+ for ac_prog in cl
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_CC"; then
-+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_CC="$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+ac_ct_CC=$ac_cv_prog_ac_ct_CC
-+if test -n "$ac_ct_CC"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-+echo "${ECHO_T}$ac_ct_CC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$ac_ct_CC" && break
-+done
-+
-+ CC=$ac_ct_CC
-+fi
-+
-+fi
-+
-+
-+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: no acceptable C compiler found in \$PATH
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+
-+# Provide some information about the compiler.
-+echo "$as_me:$LINENO:" \
-+ "checking for C compiler version" >&5
-+ac_compiler=`set X $ac_compile; echo $2`
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-+ (eval $ac_compiler --version </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-+ (eval $ac_compiler -v </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-+ (eval $ac_compiler -V </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+ac_clean_files_save=$ac_clean_files
-+ac_clean_files="$ac_clean_files a.out a.exe b.out"
-+# Try to create an executable without -o first, disregard a.out.
-+# It will help us diagnose broken compilers, and finding out an intuition
-+# of exeext.
-+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
-+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
-+ (eval $ac_link_default) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ # Find the output, starting from the most likely. This scheme is
-+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
-+# resort.
-+
-+# Be careful to initialize this variable, since it used to be cached.
-+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
-+ac_cv_exeext=
-+# b.out is created by i960 compilers.
-+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
-+do
-+ test -f "$ac_file" || continue
-+ case $ac_file in
-+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
-+ ;;
-+ conftest.$ac_ext )
-+ # This is the source file.
-+ ;;
-+ [ab].out )
-+ # We found the default executable, but exeext='' is most
-+ # certainly right.
-+ break;;
-+ *.* )
-+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-+ # FIXME: I believe we export ac_cv_exeext for Libtool,
-+ # but it would be cool to find out if it's true. Does anybody
-+ # maintain Libtool? --akim.
-+ export ac_cv_exeext
-+ break;;
-+ * )
-+ break;;
-+ esac
-+done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: C compiler cannot create executables
-+See \`config.log' for more details." >&2;}
-+ { (exit 77); exit 77; }; }
-+fi
-+
-+ac_exeext=$ac_cv_exeext
-+echo "$as_me:$LINENO: result: $ac_file" >&5
-+echo "${ECHO_T}$ac_file" >&6
-+
-+# Check the compiler produces executables we can run. If not, either
-+# the compiler is broken, or we cross compile.
-+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
-+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-+# If not cross compiling, check that we can run a simple program.
-+if test "$cross_compiling" != yes; then
-+ if { ac_try='./$ac_file'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ cross_compiling=no
-+ else
-+ if test "$cross_compiling" = maybe; then
-+ cross_compiling=yes
-+ else
-+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-+If you meant to cross compile, use \`--host'.
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot run C compiled programs.
-+If you meant to cross compile, use \`--host'.
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ fi
-+fi
-+echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+
-+rm -f a.out a.exe conftest$ac_cv_exeext b.out
-+ac_clean_files=$ac_clean_files_save
-+# Check the compiler produces executables we can run. If not, either
-+# the compiler is broken, or we cross compile.
-+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-+echo "$as_me:$LINENO: result: $cross_compiling" >&5
-+echo "${ECHO_T}$cross_compiling" >&6
-+
-+echo "$as_me:$LINENO: checking for suffix of executables" >&5
-+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
-+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-+# work properly (i.e., refer to `conftest.exe'), while it won't with
-+# `rm'.
-+for ac_file in conftest.exe conftest conftest.*; do
-+ test -f "$ac_file" || continue
-+ case $ac_file in
-+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
-+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-+ export ac_cv_exeext
-+ break;;
-+ * ) break;;
-+ esac
-+done
-+else
-+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+rm -f conftest$ac_cv_exeext
-+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-+echo "${ECHO_T}$ac_cv_exeext" >&6
-+
-+rm -f conftest.$ac_ext
-+EXEEXT=$ac_cv_exeext
-+ac_exeext=$EXEEXT
-+echo "$as_me:$LINENO: checking for suffix of object files" >&5
-+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
-+if test "${ac_cv_objext+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.o conftest.obj
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
-+ case $ac_file in
-+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
-+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-+ break;;
-+ esac
-+done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute suffix of object files: cannot compile
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+rm -f conftest.$ac_cv_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-+echo "${ECHO_T}$ac_cv_objext" >&6
-+OBJEXT=$ac_cv_objext
-+ac_objext=$OBJEXT
-+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
-+if test "${ac_cv_c_compiler_gnu+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+#ifndef __GNUC__
-+ choke me
-+#endif
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ done
+ fi
+
+@@ -2696,8 +2696,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_compiler_gnu=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_compiler_gnu=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ac_cv_c_compiler_gnu=$ac_compiler_gnu
-+
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
-+GCC=`test $ac_compiler_gnu = yes && echo yes`
-+ac_test_CFLAGS=${CFLAGS+set}
-+ac_save_CFLAGS=$CFLAGS
-+CFLAGS="-g"
-+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
-+if test "${ac_cv_prog_cc_g+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2755,8 +2754,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_prog_cc_g=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_prog_cc_g=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
-+if test "$ac_test_CFLAGS" = set; then
-+ CFLAGS=$ac_save_CFLAGS
-+elif test $ac_cv_prog_cc_g = yes; then
-+ if test "$GCC" = yes; then
-+ CFLAGS="-g -O2"
-+ else
-+ CFLAGS="-g"
-+ fi
-+else
-+ if test "$GCC" = yes; then
-+ CFLAGS="-O2"
-+ else
-+ CFLAGS=
-+ fi
-+fi
-+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
-+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
-+if test "${ac_cv_prog_cc_stdc+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_cv_prog_cc_stdc=no
-+ac_save_CC=$CC
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <stdarg.h>
-+#include <stdio.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-+struct buf { int x; };
-+FILE * (*rcsopen) (struct buf *, struct stat *, int);
-+static char *e (p, i)
-+ char **p;
-+ int i;
-+{
-+ return p[i];
-+}
-+static char *f (char * (*g) (char **, int), char **p, ...)
-+{
-+ char *s;
-+ va_list v;
-+ va_start (v,p);
-+ s = g (p, va_arg (v,int));
-+ va_end (v);
-+ return s;
-+}
-+
-+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
-+ function prototypes and stuff, but not '\xHH' hex character constants.
-+ These don't provoke an error unfortunately, instead are silently treated
-+ as 'x'. The following induces an error, until -std1 is added to get
-+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
-+ array size at least. It's necessary to write '\x00'==0 to get something
-+ that's true only with -std1. */
-+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-+
-+int test (int i, double x);
-+struct s1 {int (*f) (int a);};
-+struct s2 {int (*f) (double a);};
-+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-+int argc;
-+char **argv;
-+int
-+main ()
-+{
-+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+# Don't try gcc -ansi; that turns off useful extensions and
-+# breaks some systems' header files.
-+# AIX -qlanglvl=ansi
-+# Ultrix and OSF/1 -std1
-+# HP-UX 10.20 and later -Ae
-+# HP-UX older versions -Aa -D_HPUX_SOURCE
-+# SVR4 -Xc -D__EXTENSIONS__
-+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-+do
-+ CC="$ac_save_CC $ac_arg"
-+ rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2872,8 +2870,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_prog_cc_stdc=$ac_arg
-+break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext
-+done
-+rm -f conftest.$ac_ext conftest.$ac_objext
-+CC=$ac_save_CC
-+
-+fi
-+
-+case "x$ac_cv_prog_cc_stdc" in
-+ x|xno)
-+ echo "$as_me:$LINENO: result: none needed" >&5
-+echo "${ECHO_T}none needed" >&6 ;;
-+ *)
-+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
-+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
-+ CC="$CC $ac_cv_prog_cc_stdc" ;;
-+esac
-+
-+# Some people use a C++ compiler to compile C. Since we use `exit',
-+# in C++ we need to declare it. In case someone uses the same compiler
-+# for both compiling C and C++ we need to have the C++ compiler decide
-+# the declaration of exit, since it's the most demanding environment.
-+cat >conftest.$ac_ext <<_ACEOF
-+#ifndef __cplusplus
-+ choke me
-+#endif
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2927,8 +2924,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ for ac_declaration in \
-+ '' \
-+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
-+ 'extern "C" void std::exit (int); using std::exit;' \
-+ 'extern "C" void exit (int) throw ();' \
-+ 'extern "C" void exit (int);' \
-+ 'void exit (int);'
-+do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_declaration
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+exit (42);
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2973,8 +2969,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ :
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+continue
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_declaration
-+int
-+main ()
-+{
-+exit (42);
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3018,8 +3013,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+rm -f conftest*
-+if test -n "$ac_declaration"; then
-+ echo '#ifdef __cplusplus' >>confdefs.h
-+ echo $ac_declaration >>confdefs.h
-+ echo '#endif' >>confdefs.h
-+fi
-+
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+DEPDIR="${am__leading_dot}deps"
-+
-+ ac_config_commands="$ac_config_commands depfiles"
-+
-+
-+am_make=${MAKE-make}
-+cat > confinc << 'END'
-+am__doit:
-+ @echo done
-+.PHONY: am__doit
-+END
-+# If we don't find an include directive, just comment out the code.
-+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
-+am__include="#"
-+am__quote=
-+_am_result=none
-+# First try GNU make style include.
-+echo "include confinc" > confmf
-+# We grep out `Entering directory' and `Leaving directory'
-+# messages which can occur if `w' ends up in MAKEFLAGS.
-+# In particular we don't look at `^make:' because GNU make might
-+# be invoked under some other name (usually "gmake"), in which
-+# case it prints its new name instead of `make'.
-+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-+ am__include=include
-+ am__quote=
-+ _am_result=GNU
-+fi
-+# Now try BSD make style include.
-+if test "$am__include" = "#"; then
-+ echo '.include "confinc"' > confmf
-+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-+ am__include=.include
-+ am__quote="\""
-+ _am_result=BSD
-+ fi
-+fi
-+
-+
-+echo "$as_me:$LINENO: result: $_am_result" >&5
-+echo "${ECHO_T}$_am_result" >&6
-+rm -f confinc confmf
-+
-+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
-+if test "${enable_dependency_tracking+set}" = set; then
-+ enableval="$enable_dependency_tracking"
-+
-+fi;
-+if test "x$enable_dependency_tracking" != xno; then
-+ am_depcomp="$ac_aux_dir/depcomp"
-+ AMDEPBACKSLASH='\'
-+fi
-+
-+
-+if test "x$enable_dependency_tracking" != xno; then
-+ AMDEP_TRUE=
-+ AMDEP_FALSE='#'
-+else
-+ AMDEP_TRUE='#'
-+ AMDEP_FALSE=
-+fi
-+
-+
-+
-+
-+depcc="$CC" am_compiler_list=
-+
-+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-+ # We make a subdir and do the tests there. Otherwise we can end up
-+ # making bogus files that we don't know about and never remove. For
-+ # instance it was reported that on HP-UX the gcc test will end up
-+ # making a dummy file named `D' -- because `-MD' means `put the output
-+ # in D'.
-+ mkdir conftest.dir
-+ # Copy depcomp to subdir because otherwise we won't find it if we're
-+ # using a relative directory.
-+ cp "$am_depcomp" conftest.dir
-+ cd conftest.dir
-+ # We will build objects and dependencies in a subdirectory because
-+ # it helps to detect inapplicable dependency modes. For instance
-+ # both Tru64's cc and ICC support -MD to output dependencies as a
-+ # side effect of compilation, but ICC will put the dependencies in
-+ # the current directory while Tru64 will put them in the object
-+ # directory.
-+ mkdir sub
-+
-+ am_cv_CC_dependencies_compiler_type=none
-+ if test "$am_compiler_list" = ""; then
-+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-+ fi
-+ for depmode in $am_compiler_list; do
-+ # Setup a source with many dependencies, because some compilers
-+ # like to wrap large dependency lists on column 80 (with \), and
-+ # we should not choose a depcomp mode which is confused by this.
-+ #
-+ # We need to recreate these files for each test, as the compiler may
-+ # overwrite some of them when testing with obscure command lines.
-+ # This happens at least with the AIX C compiler.
-+ : > sub/conftest.c
-+ for i in 1 2 3 4 5 6; do
-+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
-+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-+ # Solaris 8's {/usr,}/bin/sh.
-+ touch sub/conftst$i.h
-+ done
-+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-+
-+ case $depmode in
-+ nosideeffect)
-+ # after this tag, mechanisms are not by side-effect, so they'll
-+ # only be used when explicitly requested
-+ if test "x$enable_dependency_tracking" = xyes; then
-+ continue
-+ else
-+ break
-+ fi
-+ ;;
-+ none) break ;;
-+ esac
-+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
-+ # mode. It turns out that the SunPro C++ compiler does not properly
-+ # handle `-M -o', and we need to detect this.
-+ if depmode=$depmode \
-+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-+ >/dev/null 2>conftest.err &&
-+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-+ # icc doesn't choke on unknown options, it will just issue warnings
-+ # or remarks (even with -Werror). So we grep stderr for any message
-+ # that says an option was ignored or not supported.
-+ # When given -MP, icc 7.0 and 7.1 complain thusly:
-+ # icc: Command line warning: ignoring option '-M'; no argument required
-+ # The diagnosis changed in icc 8.0:
-+ # icc: Command line remark: option '-MP' not supported
-+ if (grep 'ignoring option' conftest.err ||
-+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-+ am_cv_CC_dependencies_compiler_type=$depmode
-+ break
-+ fi
-+ fi
-+ done
-+
-+ cd ..
-+ rm -rf conftest.dir
-+else
-+ am_cv_CC_dependencies_compiler_type=none
-+fi
-+
-+fi
-+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
-+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-+
-+
-+
-+if
-+ test "x$enable_dependency_tracking" != xno \
-+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-+ am__fastdepCC_TRUE=
-+ am__fastdepCC_FALSE='#'
-+else
-+ am__fastdepCC_TRUE='#'
-+ am__fastdepCC_FALSE=
-+fi
-+
-+
-+ac_ext=cc
-+ac_cpp='$CXXCPP $CPPFLAGS'
-+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-+if test -n "$ac_tool_prefix"; then
-+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_CXX+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$CXX"; then
-+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+CXX=$ac_cv_prog_CXX
-+if test -n "$CXX"; then
-+ echo "$as_me:$LINENO: result: $CXX" >&5
-+echo "${ECHO_T}$CXX" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$CXX" && break
-+ done
-+fi
-+if test -z "$CXX"; then
-+ ac_ct_CXX=$CXX
-+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_CXX"; then
-+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_CXX="$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-+if test -n "$ac_ct_CXX"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-+echo "${ECHO_T}$ac_ct_CXX" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$ac_ct_CXX" && break
-+done
-+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
-+
-+ CXX=$ac_ct_CXX
-+fi
-+
-+
-+# Provide some information about the compiler.
-+echo "$as_me:$LINENO:" \
-+ "checking for C++ compiler version" >&5
-+ac_compiler=`set X $ac_compile; echo $2`
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-+ (eval $ac_compiler --version </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-+ (eval $ac_compiler -v </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-+ (eval $ac_compiler -V </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+
-+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
-+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+#ifndef __GNUC__
-+ choke me
-+#endif
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3377,8 +3371,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_compiler_gnu=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_compiler_gnu=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-+
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
-+GXX=`test $ac_compiler_gnu = yes && echo yes`
-+ac_test_CXXFLAGS=${CXXFLAGS+set}
-+ac_save_CXXFLAGS=$CXXFLAGS
-+CXXFLAGS="-g"
-+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
-+if test "${ac_cv_prog_cxx_g+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3436,8 +3429,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_prog_cxx_g=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_prog_cxx_g=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
-+if test "$ac_test_CXXFLAGS" = set; then
-+ CXXFLAGS=$ac_save_CXXFLAGS
-+elif test $ac_cv_prog_cxx_g = yes; then
-+ if test "$GXX" = yes; then
-+ CXXFLAGS="-g -O2"
-+ else
-+ CXXFLAGS="-g"
-+ fi
-+else
-+ if test "$GXX" = yes; then
-+ CXXFLAGS="-O2"
-+ else
-+ CXXFLAGS=
-+ fi
-+fi
-+for ac_declaration in \
-+ '' \
-+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
-+ 'extern "C" void std::exit (int); using std::exit;' \
-+ 'extern "C" void exit (int) throw ();' \
-+ 'extern "C" void exit (int);' \
-+ 'void exit (int);'
-+do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_declaration
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+exit (42);
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3508,8 +3500,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ :
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+continue
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_declaration
-+int
-+main ()
-+{
-+exit (42);
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3553,8 +3544,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+rm -f conftest*
-+if test -n "$ac_declaration"; then
-+ echo '#ifdef __cplusplus' >>confdefs.h
-+ echo $ac_declaration >>confdefs.h
-+ echo '#endif' >>confdefs.h
-+fi
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+depcc="$CXX" am_compiler_list=
-+
-+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-+ # We make a subdir and do the tests there. Otherwise we can end up
-+ # making bogus files that we don't know about and never remove. For
-+ # instance it was reported that on HP-UX the gcc test will end up
-+ # making a dummy file named `D' -- because `-MD' means `put the output
-+ # in D'.
-+ mkdir conftest.dir
-+ # Copy depcomp to subdir because otherwise we won't find it if we're
-+ # using a relative directory.
-+ cp "$am_depcomp" conftest.dir
-+ cd conftest.dir
-+ # We will build objects and dependencies in a subdirectory because
-+ # it helps to detect inapplicable dependency modes. For instance
-+ # both Tru64's cc and ICC support -MD to output dependencies as a
-+ # side effect of compilation, but ICC will put the dependencies in
-+ # the current directory while Tru64 will put them in the object
-+ # directory.
-+ mkdir sub
-+
-+ am_cv_CXX_dependencies_compiler_type=none
-+ if test "$am_compiler_list" = ""; then
-+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-+ fi
-+ for depmode in $am_compiler_list; do
-+ # Setup a source with many dependencies, because some compilers
-+ # like to wrap large dependency lists on column 80 (with \), and
-+ # we should not choose a depcomp mode which is confused by this.
-+ #
-+ # We need to recreate these files for each test, as the compiler may
-+ # overwrite some of them when testing with obscure command lines.
-+ # This happens at least with the AIX C compiler.
-+ : > sub/conftest.c
-+ for i in 1 2 3 4 5 6; do
-+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
-+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-+ # Solaris 8's {/usr,}/bin/sh.
-+ touch sub/conftst$i.h
-+ done
-+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-+
-+ case $depmode in
-+ nosideeffect)
-+ # after this tag, mechanisms are not by side-effect, so they'll
-+ # only be used when explicitly requested
-+ if test "x$enable_dependency_tracking" = xyes; then
-+ continue
-+ else
-+ break
-+ fi
-+ ;;
-+ none) break ;;
-+ esac
-+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
-+ # mode. It turns out that the SunPro C++ compiler does not properly
-+ # handle `-M -o', and we need to detect this.
-+ if depmode=$depmode \
-+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-+ >/dev/null 2>conftest.err &&
-+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-+ # icc doesn't choke on unknown options, it will just issue warnings
-+ # or remarks (even with -Werror). So we grep stderr for any message
-+ # that says an option was ignored or not supported.
-+ # When given -MP, icc 7.0 and 7.1 complain thusly:
-+ # icc: Command line warning: ignoring option '-M'; no argument required
-+ # The diagnosis changed in icc 8.0:
-+ # icc: Command line remark: option '-MP' not supported
-+ if (grep 'ignoring option' conftest.err ||
-+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-+ am_cv_CXX_dependencies_compiler_type=$depmode
-+ break
-+ fi
-+ fi
-+ done
-+
-+ cd ..
-+ rm -rf conftest.dir
-+else
-+ am_cv_CXX_dependencies_compiler_type=none
-+fi
-+
-+fi
-+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
-+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
-+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
-+
-+
-+
-+if
-+ test "x$enable_dependency_tracking" != xno \
-+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
-+ am__fastdepCXX_TRUE=
-+ am__fastdepCXX_FALSE='#'
-+else
-+ am__fastdepCXX_TRUE='#'
-+ am__fastdepCXX_FALSE=
-+fi
-+
-+
-+
-+echo "$as_me:$LINENO: checking for library containing strerror" >&5
-+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6
-+if test "${ac_cv_search_strerror+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_func_search_save_LIBS=$LIBS
-+ac_cv_search_strerror=no
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char strerror ();
-+int
-+main ()
-+{
-+strerror ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3735,8 +3725,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_search_strerror="none required"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test "$ac_cv_search_strerror" = no; then
-+ for ac_lib in cposix; do
-+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char strerror ();
-+int
-+main ()
-+{
-+strerror ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3790,8 +3779,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_search_strerror="-l$ac_lib"
-+break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+ done
-+fi
-+LIBS=$ac_func_search_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
-+echo "${ECHO_T}$ac_cv_search_strerror" >&6
-+if test "$ac_cv_search_strerror" != no; then
-+ test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
-+
-+fi
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
-+# On Suns, sometimes $CPP names a directory.
-+if test -n "$CPP" && test -d "$CPP"; then
-+ CPP=
-+fi
-+if test -z "$CPP"; then
-+ if test "${ac_cv_prog_CPP+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ # Double quotes because CPP needs to be expanded
-+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-+ do
-+ ac_preproc_ok=false
-+for ac_c_preproc_warn_flag in '' yes
-+do
-+ # Use a header file that comes with gcc, so configuring glibc
-+ # with a fresh cross-compiler works.
-+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ # <limits.h> exists even on freestanding compilers.
-+ # On the NeXT, cc -E runs the code through the compiler's parser,
-+ # not just through cpp. "Syntax error" is here to catch this case.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+ Syntax error
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ :
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ # Broken: fails on valid input.
-+continue
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+
-+ # OK, works on sane cases. Now check whether non-existent headers
-+ # can be detected and how.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <ac_nonexistent.h>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ # Broken: success on invalid input.
-+continue
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ # Passes both tests.
-+ac_preproc_ok=:
-+break
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+
-+done
-+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-+rm -f conftest.err conftest.$ac_ext
-+if $ac_preproc_ok; then
-+ break
-+fi
-+
-+ done
-+ ac_cv_prog_CPP=$CPP
-+
-+fi
-+ CPP=$ac_cv_prog_CPP
-+else
-+ ac_cv_prog_CPP=$CPP
-+fi
-+echo "$as_me:$LINENO: result: $CPP" >&5
-+echo "${ECHO_T}$CPP" >&6
-+ac_preproc_ok=false
-+for ac_c_preproc_warn_flag in '' yes
-+do
-+ # Use a header file that comes with gcc, so configuring glibc
-+ # with a fresh cross-compiler works.
-+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ # <limits.h> exists even on freestanding compilers.
-+ # On the NeXT, cc -E runs the code through the compiler's parser,
-+ # not just through cpp. "Syntax error" is here to catch this case.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+ Syntax error
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ :
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ # Broken: fails on valid input.
-+continue
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+
-+ # OK, works on sane cases. Now check whether non-existent headers
-+ # can be detected and how.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <ac_nonexistent.h>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ # Broken: success on invalid input.
-+continue
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ # Passes both tests.
-+ac_preproc_ok=:
-+break
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+
-+done
-+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-+rm -f conftest.err conftest.$ac_ext
-+if $ac_preproc_ok; then
-+ :
-+else
-+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+
-+echo "$as_me:$LINENO: checking for egrep" >&5
-+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-+if test "${ac_cv_prog_egrep+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-+ then ac_cv_prog_egrep='grep -E'
-+ else ac_cv_prog_egrep='egrep'
-+ fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
-+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
-+ EGREP=$ac_cv_prog_egrep
-+
-+
-+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-+if test "${ac_cv_header_stdc+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <stdlib.h>
-+#include <stdarg.h>
-+#include <string.h>
-+#include <float.h>
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4106,8 +4094,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_header_stdc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_header_stdc=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+
-+if test $ac_cv_header_stdc = yes; then
-+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <string.h>
-+
-+_ACEOF
-+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-+ $EGREP "memchr" >/dev/null 2>&1; then
-+ :
-+else
-+ ac_cv_header_stdc=no
-+fi
-+rm -f conftest*
-+
-+fi
-+
-+if test $ac_cv_header_stdc = yes; then
-+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <stdlib.h>
-+
-+_ACEOF
-+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-+ $EGREP "free" >/dev/null 2>&1; then
-+ :
-+else
-+ ac_cv_header_stdc=no
-+fi
-+rm -f conftest*
-+
-+fi
-+
-+if test $ac_cv_header_stdc = yes; then
-+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-+ if test "$cross_compiling" = yes; then
-+ :
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <ctype.h>
-+#if ((' ' & 0x0FF) == 0x020)
-+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-+#else
-+# define ISLOWER(c) \
-+ (('a' <= (c) && (c) <= 'i') \
-+ || ('j' <= (c) && (c) <= 'r') \
-+ || ('s' <= (c) && (c) <= 'z'))
-+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-+#endif
-+
-+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-+int
-+main ()
-+{
-+ int i;
-+ for (i = 0; i < 256; i++)
-+ if (XOR (islower (i), ISLOWER (i))
-+ || toupper (i) != TOUPPER (i))
-+ exit(2);
-+ exit (0);
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ :
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+ac_cv_header_stdc=no
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-+echo "${ECHO_T}$ac_cv_header_stdc" >&6
-+if test $ac_cv_header_stdc = yes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define STDC_HEADERS 1
-+_ACEOF
-+
-+fi
-+
-+
-+# Check whether --enable-qt or --disable-qt was given.
-+if test "${enable_qt+set}" = set; then
-+ enableval="$enable_qt"
-+ enable_qt=$enableval
-+else
-+ enable_qt=auto
-+fi;
-+# Check whether --enable-qt-debug or --disable-qt-debug was given.
-+if test "${enable_qt_debug+set}" = set; then
-+ enableval="$enable_qt_debug"
-+ enable_qt_debug=$enableval
-+else
-+ enable_qt_debug=no
-+fi;
-+
-+# Check whether --with-qt_moc or --without-qt_moc was given.
-+if test "${with_qt_moc+set}" = set; then
-+ withval="$with_qt_moc"
-+
-+fi;
-+# Check whether --enable-qt3 or --disable-qt3 was given.
-+if test "${enable_qt3+set}" = set; then
-+ enableval="$enable_qt3"
-+ enable_qt3=$enableval
-+else
-+ enable_qt3=auto
-+fi;
-+
-+# Check whether --with-qt3_moc or --without-qt3_moc was given.
-+if test "${with_qt3_moc+set}" = set; then
-+ withval="$with_qt3_moc"
-+
-+fi;
-+# Check whether --enable-glib or --disable-glib was given.
-+if test "${enable_glib+set}" = set; then
-+ enableval="$enable_glib"
-+ enable_glib=$enableval
-+else
-+ enable_glib=auto
-+fi;
-+# Check whether --enable-gtk or --disable-gtk was given.
-+if test "${enable_gtk+set}" = set; then
-+ enableval="$enable_gtk"
-+ enable_gtk=$enableval
-+else
-+ enable_gtk=auto
-+fi;
-+# Check whether --enable-tests or --disable-tests was given.
-+if test "${enable_tests+set}" = set; then
-+ enableval="$enable_tests"
-+ enable_tests=$enableval
-+else
-+ enable_tests=$USE_MAINTAINER_MODE
-+fi;
-+# Check whether --enable-ansi or --disable-ansi was given.
-+if test "${enable_ansi+set}" = set; then
-+ enableval="$enable_ansi"
-+ enable_ansi=$enableval
-+else
-+ enable_ansi=no
-+fi;
-+# Check whether --enable-verbose-mode or --disable-verbose-mode was given.
-+if test "${enable_verbose_mode+set}" = set; then
-+ enableval="$enable_verbose_mode"
-+ enable_verbose_mode=$enableval
-+else
-+ enable_verbose_mode=$USE_MAINTAINER_MODE
-+fi;
-+# Check whether --enable-asserts or --disable-asserts was given.
-+if test "${enable_asserts+set}" = set; then
-+ enableval="$enable_asserts"
-+ enable_asserts=$enableval
-+else
-+ enable_asserts=$USE_MAINTAINER_MODE
-+fi;
-+# Check whether --enable-checks or --disable-checks was given.
-+if test "${enable_checks+set}" = set; then
-+ enableval="$enable_checks"
-+ enable_checks=$enableval
-+else
-+ enable_checks=yes
-+fi;
-+# Check whether --enable-xml-docs or --disable-xml-docs was given.
-+if test "${enable_xml_docs+set}" = set; then
-+ enableval="$enable_xml_docs"
-+ enable_xml_docs=$enableval
-+else
-+ enable_xml_docs=auto
-+fi;
-+# Check whether --enable-doxygen-docs or --disable-doxygen-docs was given.
-+if test "${enable_doxygen_docs+set}" = set; then
-+ enableval="$enable_doxygen_docs"
-+ enable_doxygen_docs=$enableval
-+else
-+ enable_doxygen_docs=auto
-+fi;
-+# Check whether --enable-gcov or --disable-gcov was given.
-+if test "${enable_gcov+set}" = set; then
-+ enableval="$enable_gcov"
-+ enable_gcov=$enableval
-+else
-+ enable_gcov=no
-+fi;
-+# Check whether --enable-abstract-sockets or --disable-abstract-sockets was given.
-+if test "${enable_abstract_sockets+set}" = set; then
-+ enableval="$enable_abstract_sockets"
-+ enable_abstract_sockets=$enableval
-+else
-+ enable_abstract_sockets=auto
-+fi;
-+# Check whether --enable-gcj or --disable-gcj was given.
-+if test "${enable_gcj+set}" = set; then
-+ enableval="$enable_gcj"
-+ enable_gcj=$enableval
-+else
-+ enable_gcj=no
-+fi;
-+# Check whether --enable-mono or --disable-mono was given.
-+if test "${enable_mono+set}" = set; then
-+ enableval="$enable_mono"
-+ enable_mono=$enableval
-+else
-+ enable_mono=no
-+fi;
-+# Check whether --enable-mono_docs or --disable-mono_docs was given.
-+if test "${enable_mono_docs+set}" = set; then
-+ enableval="$enable_mono_docs"
-+ enable_mono_docs=$enableval
-+else
-+ enable_mono_docs=no
-+fi;
-+# Check whether --enable-python or --disable-python was given.
-+if test "${enable_python+set}" = set; then
-+ enableval="$enable_python"
-+ enable_python=$enableval
-+else
-+ enable_python=auto
-+fi;
-+# Check whether --enable-selinux or --disable-selinux was given.
-+if test "${enable_selinux+set}" = set; then
-+ enableval="$enable_selinux"
-+ enable_selinux=$enableval
-+else
-+ enable_selinux=auto
-+fi;
-+# Check whether --enable-dnotify or --disable-dnotify was given.
-+if test "${enable_dnotify+set}" = set; then
-+ enableval="$enable_dnotify"
-+ enable_dnotify=$enableval
-+else
-+ enable_dnotify=auto
-+fi;
-+
-+
-+# Check whether --with-xml or --without-xml was given.
-+if test "${with_xml+set}" = set; then
-+ withval="$with_xml"
-+
-+fi;
-+
-+# Check whether --with-init-scripts or --without-init-scripts was given.
-+if test "${with_init_scripts+set}" = set; then
-+ withval="$with_init_scripts"
-+
-+fi;
-+
-+# Check whether --with-session-socket-dir or --without-session-socket-dir was given.
-+if test "${with_session_socket_dir+set}" = set; then
-+ withval="$with_session_socket_dir"
-+
-+fi;
-+
-+# Check whether --with-test-socket-dir or --without-test-socket-dir was given.
-+if test "${with_test_socket_dir+set}" = set; then
-+ withval="$with_test_socket_dir"
-+
-+fi;
-+
-+# Check whether --with-system-pid-file or --without-system-pid-file was given.
-+if test "${with_system_pid_file+set}" = set; then
-+ withval="$with_system_pid_file"
-+
-+fi;
-+
-+# Check whether --with-system-socket or --without-system-socket was given.
-+if test "${with_system_socket+set}" = set; then
-+ withval="$with_system_socket"
-+
-+fi;
-+
-+# Check whether --with-console-auth-dir or --without-console-auth-dir was given.
-+if test "${with_console_auth_dir+set}" = set; then
-+ withval="$with_console_auth_dir"
-+
-+fi;
-+
-+# Check whether --with-dbus_user or --without-dbus_user was given.
-+if test "${with_dbus_user+set}" = set; then
-+ withval="$with_dbus_user"
-+
-+fi;
-+
-+
-+
-+
-+if test x$enable_tests = xyes; then
-+ DBUS_BUILD_TESTS_TRUE=
-+ DBUS_BUILD_TESTS_FALSE='#'
-+else
-+ DBUS_BUILD_TESTS_TRUE='#'
-+ DBUS_BUILD_TESTS_FALSE=
-+fi
-+
-+if test x$enable_tests = xyes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define DBUS_BUILD_TESTS 1
-+_ACEOF
-+
-+fi
-+
-+if test x$enable_verbose_mode = xyes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define DBUS_ENABLE_VERBOSE_MODE 1
-+_ACEOF
-+
-+fi
-+if test x$enable_asserts = xno; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define DBUS_DISABLE_ASSERT 1
-+_ACEOF
-+
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define G_DISABLE_ASSERT 1
-+_ACEOF
-+
-+fi
-+if test x$enable_checks = xno; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define DBUS_DISABLE_CHECKS 1
-+_ACEOF
-+
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define G_DISABLE_CHECKS 1
-+_ACEOF
-+
-+fi
-+
-+#### gcc warning flags
-+
-+if test "x$GCC" = "xyes"; then
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wall[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wall" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wchar-subscripts[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wchar-subscripts" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wmissing-declarations[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wmissing-declarations" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wmissing-prototypes[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wnested-externs[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wnested-externs" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wpointer-arith[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wpointer-arith" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wcast-align[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wcast-align" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wfloat-equal[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wfloat-equal" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wsign-compare[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wsign-compare" ;;
-+ esac
-+
-+ if test "x$enable_ansi" = "xyes"; then
-+ case " $CFLAGS " in
-+ *[\ \ ]-ansi[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -ansi" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-D_POSIX_C_SOURCE*) ;;
-+ *) CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=199309L" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-D_BSD_SOURCE[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -D_BSD_SOURCE" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-pedantic[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -pedantic" ;;
-+ esac
-+ fi
-+ if test x$enable_gcov = xyes; then
-+ case " $CFLAGS " in
-+ *[\ \ ]-fprofile-arcs[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -fprofile-arcs" ;;
-+ esac
-+ case " $CFLAGS " in
-+ *[\ \ ]-ftest-coverage[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -ftest-coverage" ;;
-+ esac
-+
-+ ## remove optimization
-+ CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*//g'`
-+ fi
-+ else
-+ if test x$enable_gcov = xyes; then
-+ { { echo "$as_me:$LINENO: error: --enable-gcov can only be used with gcc" >&5
-+echo "$as_me: error: --enable-gcov can only be used with gcc" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+#### can't use AM_PROG_GCJ since it fails fatally if no gcj found
-+for ac_prog in gcj
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_GCJ+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$GCJ"; then
-+ ac_cv_prog_GCJ="$GCJ" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_GCJ="$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+GCJ=$ac_cv_prog_GCJ
-+if test -n "$GCJ"; then
-+ echo "$as_me:$LINENO: result: $GCJ" >&5
-+echo "${ECHO_T}$GCJ" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$GCJ" && break
-+done
-+test -n "$GCJ" || GCJ="gcj"
-+
-+if test -z "$GCJ" ; then
-+ have_gcj=no
-+else
-+ # Needs to be here so libtool wont get confused
-+
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4630,7 +4617,7 @@
+ else
+ # Needs to be here so libtool wont get confused
+
+-for ac_prog in gcj
+for ac_prog in gcj gcj-3.2 gcj-3.1 gcj-3.0 gcj-2.95
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_GCJ+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$GCJ"; then
-+ ac_cv_prog_GCJ="$GCJ" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_GCJ="$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+GCJ=$ac_cv_prog_GCJ
-+if test -n "$GCJ"; then
-+ echo "$as_me:$LINENO: result: $GCJ" >&5
-+echo "${ECHO_T}$GCJ" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$GCJ" && break
-+done
-+test -n "$GCJ" || GCJ="gcj"
-+
-+test -z "$GCJ" && { { echo "$as_me:$LINENO: error: no acceptable gcj found in \$PATH" >&5
-+echo "$as_me: error: no acceptable gcj found in \$PATH" >&2;}
-+ { (exit 1); exit 1; }; }
-+if test "x${GCJFLAGS-unset}" = xunset; then
-+ GCJFLAGS="-g -O2"
-+fi
-+
-+
-+depcc="$GCJ" am_compiler_list='gcc3 gcc'
-+
-+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
-+if test "${am_cv_GCJ_dependencies_compiler_type+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-+ # We make a subdir and do the tests there. Otherwise we can end up
-+ # making bogus files that we don't know about and never remove. For
-+ # instance it was reported that on HP-UX the gcc test will end up
-+ # making a dummy file named `D' -- because `-MD' means `put the output
-+ # in D'.
-+ mkdir conftest.dir
-+ # Copy depcomp to subdir because otherwise we won't find it if we're
-+ # using a relative directory.
-+ cp "$am_depcomp" conftest.dir
-+ cd conftest.dir
-+ # We will build objects and dependencies in a subdirectory because
-+ # it helps to detect inapplicable dependency modes. For instance
-+ # both Tru64's cc and ICC support -MD to output dependencies as a
-+ # side effect of compilation, but ICC will put the dependencies in
-+ # the current directory while Tru64 will put them in the object
-+ # directory.
-+ mkdir sub
-+
-+ am_cv_GCJ_dependencies_compiler_type=none
-+ if test "$am_compiler_list" = ""; then
-+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-+ fi
-+ for depmode in $am_compiler_list; do
-+ # Setup a source with many dependencies, because some compilers
-+ # like to wrap large dependency lists on column 80 (with \), and
-+ # we should not choose a depcomp mode which is confused by this.
-+ #
-+ # We need to recreate these files for each test, as the compiler may
-+ # overwrite some of them when testing with obscure command lines.
-+ # This happens at least with the AIX C compiler.
-+ : > sub/conftest.c
-+ for i in 1 2 3 4 5 6; do
-+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
-+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-+ # Solaris 8's {/usr,}/bin/sh.
-+ touch sub/conftst$i.h
-+ done
-+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-+
-+ case $depmode in
-+ nosideeffect)
-+ # after this tag, mechanisms are not by side-effect, so they'll
-+ # only be used when explicitly requested
-+ if test "x$enable_dependency_tracking" = xyes; then
-+ continue
-+ else
-+ break
-+ fi
-+ ;;
-+ none) break ;;
-+ esac
-+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
-+ # mode. It turns out that the SunPro C++ compiler does not properly
-+ # handle `-M -o', and we need to detect this.
-+ if depmode=$depmode \
-+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-+ >/dev/null 2>conftest.err &&
-+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-+ # icc doesn't choke on unknown options, it will just issue warnings
-+ # or remarks (even with -Werror). So we grep stderr for any message
-+ # that says an option was ignored or not supported.
-+ # When given -MP, icc 7.0 and 7.1 complain thusly:
-+ # icc: Command line warning: ignoring option '-M'; no argument required
-+ # The diagnosis changed in icc 8.0:
-+ # icc: Command line remark: option '-MP' not supported
-+ if (grep 'ignoring option' conftest.err ||
-+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-+ am_cv_GCJ_dependencies_compiler_type=$depmode
-+ break
-+ fi
-+ fi
-+ done
-+
-+ cd ..
-+ rm -rf conftest.dir
-+else
-+ am_cv_GCJ_dependencies_compiler_type=none
-+fi
-+
-+fi
-+echo "$as_me:$LINENO: result: $am_cv_GCJ_dependencies_compiler_type" >&5
-+echo "${ECHO_T}$am_cv_GCJ_dependencies_compiler_type" >&6
-+GCJDEPMODE=depmode=$am_cv_GCJ_dependencies_compiler_type
-+
-+
-+
-+if
-+ test "x$enable_dependency_tracking" != xno \
-+ && test "$am_cv_GCJ_dependencies_compiler_type" = gcc3; then
-+ am__fastdepGCJ_TRUE=
-+ am__fastdepGCJ_FALSE='#'
-+else
-+ am__fastdepGCJ_TRUE='#'
-+ am__fastdepGCJ_FALSE=
-+fi
-+
-+
-+
-+
-+ have_gcj=yes
-+ if test "x${GCJFLAGS-unset}" = xunset; then
-+ GCJFLAGS="-g -O2 -Wall"
-+ fi
-+
-+fi
-+
-+if test x$enable_gcj = xauto ; then
-+ if test x$have_gcj = xno ; then
-+ enable_gcj=no
-+ else
-+ enable_gcj=yes
-+ fi
-+fi
-+
-+if test x$enable_gcj = xyes; then
-+ if test x$have_gcj = xno ; then
-+ { { echo "$as_me:$LINENO: error: Building gcj explicitly required, but gcj not found" >&5
-+echo "$as_me: error: Building gcj explicitly required, but gcj not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ for ac_prog in gcj-jar fastjar jar
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_JAR+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$JAR"; then
-+ ac_cv_prog_JAR="$JAR" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_JAR="$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+JAR=$ac_cv_prog_JAR
-+if test -n "$JAR"; then
-+ echo "$as_me:$LINENO: result: $JAR" >&5
-+echo "${ECHO_T}$JAR" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$JAR" && break
-+done
-+
-+ fi
-+fi
-+
-+
-+
-+if test x$enable_gcj = xyes; then
-+ DBUS_USE_GCJ_TRUE=
-+ DBUS_USE_GCJ_FALSE='#'
-+else
-+ DBUS_USE_GCJ_TRUE='#'
-+ DBUS_USE_GCJ_FALSE=
-+fi
-+
-+
-+# Check whether --enable-shared or --disable-shared was given.
-+if test "${enable_shared+set}" = set; then
-+ enableval="$enable_shared"
-+ p=${PACKAGE-default}
-+ case $enableval in
-+ yes) enable_shared=yes ;;
-+ no) enable_shared=no ;;
-+ *)
-+ enable_shared=no
-+ # Look at the argument we got. We use all the common list separators.
-+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-+ for pkg in $enableval; do
-+ IFS="$lt_save_ifs"
-+ if test "X$pkg" = "X$p"; then
-+ enable_shared=yes
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ ;;
-+ esac
-+else
-+ enable_shared=yes
-+fi;
-+
-+# Check whether --enable-static or --disable-static was given.
-+if test "${enable_static+set}" = set; then
-+ enableval="$enable_static"
-+ p=${PACKAGE-default}
-+ case $enableval in
-+ yes) enable_static=yes ;;
-+ no) enable_static=no ;;
-+ *)
-+ enable_static=no
-+ # Look at the argument we got. We use all the common list separators.
-+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-+ for pkg in $enableval; do
-+ IFS="$lt_save_ifs"
-+ if test "X$pkg" = "X$p"; then
-+ enable_static=yes
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ ;;
-+ esac
-+else
-+ enable_static=yes
-+fi;
-+
-+# Check whether --enable-fast-install or --disable-fast-install was given.
-+if test "${enable_fast_install+set}" = set; then
-+ enableval="$enable_fast_install"
-+ p=${PACKAGE-default}
-+ case $enableval in
-+ yes) enable_fast_install=yes ;;
-+ no) enable_fast_install=no ;;
-+ *)
-+ enable_fast_install=no
-+ # Look at the argument we got. We use all the common list separators.
-+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-+ for pkg in $enableval; do
-+ IFS="$lt_save_ifs"
-+ if test "X$pkg" = "X$p"; then
-+ enable_fast_install=yes
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ ;;
-+ esac
-+else
-+ enable_fast_install=yes
-+fi;
-+
-+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
-+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
-+if test "${lt_cv_path_SED+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ # Loop through the user's path and test for sed and gsed.
-+# Then use that list of sed's as ones to test for truncation.
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for lt_ac_prog in sed gsed; do
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
-+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
-+ fi
-+ done
-+ done
-+done
-+lt_ac_max=0
-+lt_ac_count=0
-+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
-+# along with /bin/sed that truncates output.
-+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
-+ test ! -f $lt_ac_sed && continue
-+ cat /dev/null > conftest.in
-+ lt_ac_count=0
-+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
-+ # Check for GNU sed and select it if it is found.
-+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
-+ lt_cv_path_SED=$lt_ac_sed
-+ break
-+ fi
-+ while true; do
-+ cat conftest.in conftest.in >conftest.tmp
-+ mv conftest.tmp conftest.in
-+ cp conftest.in conftest.nl
-+ echo >>conftest.nl
-+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
-+ cmp -s conftest.out conftest.nl || break
-+ # 10000 chars as input seems more than enough
-+ test $lt_ac_count -gt 10 && break
-+ lt_ac_count=`expr $lt_ac_count + 1`
-+ if test $lt_ac_count -gt $lt_ac_max; then
-+ lt_ac_max=$lt_ac_count
-+ lt_cv_path_SED=$lt_ac_sed
-+ fi
-+ done
-+done
-+
-+fi
-+
-+SED=$lt_cv_path_SED
-+echo "$as_me:$LINENO: result: $SED" >&5
-+echo "${ECHO_T}$SED" >&6
-+
-+
-+# Check whether --with-gnu-ld or --without-gnu-ld was given.
-+if test "${with_gnu_ld+set}" = set; then
-+ withval="$with_gnu_ld"
-+ test "$withval" = no || with_gnu_ld=yes
-+else
-+ with_gnu_ld=no
-+fi;
-+ac_prog=ld
-+if test "$GCC" = yes; then
-+ # Check if gcc -print-prog-name=ld gives a path.
-+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
-+ case $host in
-+ *-*-mingw*)
-+ # gcc leaves a trailing carriage return which upsets mingw
-+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-+ *)
-+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-+ esac
-+ case $ac_prog in
-+ # Accept absolute paths.
-+ [\\/]* | ?:[\\/]*)
-+ re_direlt='/[^/][^/]*/\.\./'
-+ # Canonicalize the pathname of ld
-+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
-+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
-+ done
-+ test -z "$LD" && LD="$ac_prog"
-+ ;;
-+ "")
-+ # If it fails, then pretend we aren't using GCC.
-+ ac_prog=ld
-+ ;;
-+ *)
-+ # If it is relative, then search for the first ld in PATH.
-+ with_gnu_ld=unknown
-+ ;;
-+ esac
-+elif test "$with_gnu_ld" = yes; then
-+ echo "$as_me:$LINENO: checking for GNU ld" >&5
-+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
-+else
-+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
-+fi
-+if test "${lt_cv_path_LD+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -z "$LD"; then
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ for ac_dir in $PATH; do
-+ IFS="$lt_save_ifs"
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-+ lt_cv_path_LD="$ac_dir/$ac_prog"
-+ # Check to see if the program is GNU ld. I'd rather use --version,
-+ # but apparently some variants of GNU ld only accept -v.
-+ # Break only if it was the GNU/non-GNU ld that we prefer.
-+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-+ *GNU* | *'with BFD'*)
-+ test "$with_gnu_ld" != no && break
-+ ;;
-+ *)
-+ test "$with_gnu_ld" != yes && break
-+ ;;
-+ esac
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+else
-+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
-+fi
-+fi
-+
-+LD="$lt_cv_path_LD"
-+if test -n "$LD"; then
-+ echo "$as_me:$LINENO: result: $LD" >&5
-+echo "${ECHO_T}$LD" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-+ { (exit 1); exit 1; }; }
-+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
-+if test "${lt_cv_prog_gnu_ld+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
-+case `$LD -v 2>&1 </dev/null` in
-+*GNU* | *'with BFD'*)
-+ lt_cv_prog_gnu_ld=yes
-+ ;;
-+*)
-+ lt_cv_prog_gnu_ld=no
-+ ;;
-+esac
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
-+with_gnu_ld=$lt_cv_prog_gnu_ld
-+
-+
-+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
-+if test "${lt_cv_ld_reload_flag+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_cv_ld_reload_flag='-r'
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
-+reload_flag=$lt_cv_ld_reload_flag
-+case $reload_flag in
-+"" | " "*) ;;
-+*) reload_flag=" $reload_flag" ;;
-+esac
-+reload_cmds='$LD$reload_flag -o $output$reload_objs'
-+case $host_os in
-+ darwin*)
-+ if test "$GCC" = yes; then
-+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-+ else
-+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
-+ fi
-+ ;;
-+esac
-+
-+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
-+if test "${lt_cv_path_NM+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$NM"; then
-+ # Let the user override the test.
-+ lt_cv_path_NM="$NM"
-+else
-+ lt_nm_to_check="${ac_tool_prefix}nm"
-+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
-+ lt_nm_to_check="$lt_nm_to_check nm"
-+ fi
-+ for lt_tmp_nm in $lt_nm_to_check; do
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
-+ IFS="$lt_save_ifs"
-+ test -z "$ac_dir" && ac_dir=.
-+ tmp_nm="$ac_dir/$lt_tmp_nm"
-+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
-+ # Check to see if the nm accepts a BSD-compat flag.
-+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-+ # nm: unknown option "B" ignored
-+ # Tru64's nm complains that /dev/null is an invalid object file
-+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-+ */dev/null* | *'Invalid file or object type'*)
-+ lt_cv_path_NM="$tmp_nm -B"
-+ break
-+ ;;
-+ *)
-+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-+ */dev/null*)
-+ lt_cv_path_NM="$tmp_nm -p"
-+ break
-+ ;;
-+ *)
-+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
-+ continue # so that we can try to find one that supports BSD flags
-+ ;;
-+ esac
-+ ;;
-+ esac
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ done
-+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
-+echo "${ECHO_T}$lt_cv_path_NM" >&6
-+NM="$lt_cv_path_NM"
-+
-+echo "$as_me:$LINENO: checking whether ln -s works" >&5
-+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
-+LN_S=$as_ln_s
-+if test "$LN_S" = "ln -s"; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+else
-+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-+echo "${ECHO_T}no, using $LN_S" >&6
-+fi
-+
-+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
-+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
-+if test "${lt_cv_deplibs_check_method+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_cv_file_magic_cmd='$MAGIC_CMD'
-+lt_cv_file_magic_test_file=
-+lt_cv_deplibs_check_method='unknown'
-+# Need to set the preceding variable on all platforms that support
-+# interlibrary dependencies.
-+# 'none' -- dependencies not supported.
-+# `unknown' -- same as none, but documents that we really don't know.
-+# 'pass_all' -- all dependencies passed with no checks.
-+# 'test_compile' -- check by making test program.
-+# 'file_magic [[regex]]' -- check by looking for files in library path
-+# which responds to the $file_magic_cmd with a given extended regex.
-+# If you have `file' or equivalent on your system and you're not sure
-+# whether `pass_all' will *always* work, you probably want this one.
-+
-+case $host_os in
-+aix4* | aix5*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+beos*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+bsdi[45]*)
-+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-+ lt_cv_file_magic_cmd='/usr/bin/file -L'
-+ lt_cv_file_magic_test_file=/shlib/libc.so
-+ ;;
-+
-+cygwin*)
-+ # func_win32_libid is a shell function defined in ltmain.sh
-+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
-+ lt_cv_file_magic_cmd='func_win32_libid'
-+ ;;
-+
-+mingw* | pw32*)
-+ # Base MSYS/MinGW do not provide the 'file' command needed by
-+ # func_win32_libid shell function, so use a weaker test based on 'objdump'.
-+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-+ lt_cv_file_magic_cmd='$OBJDUMP -f'
-+ ;;
-+
-+darwin* | rhapsody*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+freebsd* | kfreebsd*-gnu | dragonfly*)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-+ case $host_cpu in
-+ i*86 )
-+ # Not sure whether the presence of OpenBSD here was a mistake.
-+ # Let's accept both of them until this is cleared up.
-+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
-+ lt_cv_file_magic_cmd=/usr/bin/file
-+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
-+ ;;
-+ esac
-+ else
-+ lt_cv_deplibs_check_method=pass_all
-+ fi
-+ ;;
-+
-+gnu*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+hpux10.20* | hpux11*)
-+ lt_cv_file_magic_cmd=/usr/bin/file
-+ case $host_cpu in
-+ ia64*)
-+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
-+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
-+ ;;
-+ hppa*64*)
-+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
-+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
-+ ;;
-+ *)
-+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
-+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
-+ ;;
-+ esac
-+ ;;
-+
-+interix3*)
-+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
-+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
-+ ;;
-+
-+irix5* | irix6* | nonstopux*)
-+ case $LD in
-+ *-32|*"-32 ") libmagic=32-bit;;
-+ *-n32|*"-n32 ") libmagic=N32;;
-+ *-64|*"-64 ") libmagic=64-bit;;
-+ *) libmagic=never-match;;
-+ esac
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+# This must be Linux ELF.
-+linux*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+@@ -5299,7 +5286,7 @@
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+-netbsd*)
+netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-+ else
-+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
-+ fi
-+ ;;
-+
-+newos6*)
-+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
-+ lt_cv_file_magic_cmd=/usr/bin/file
-+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
-+ ;;
-+
-+nto-qnx*)
-+ lt_cv_deplibs_check_method=unknown
-+ ;;
-+
-+openbsd*)
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
-+ else
-+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-+ fi
-+ ;;
-+
-+osf3* | osf4* | osf5*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+solaris*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+sysv4 | sysv4.3*)
-+ case $host_vendor in
-+ motorola)
-+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
-+ ;;
-+ ncr)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+ sequent)
-+ lt_cv_file_magic_cmd='/bin/file'
-+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-+ ;;
-+ sni)
-+ lt_cv_file_magic_cmd='/bin/file'
-+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
-+ lt_cv_file_magic_test_file=/lib/libc.so
-+ ;;
-+ siemens)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+ pc)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+ esac
-+ ;;
-+
-+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+esac
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
-+file_magic_cmd=$lt_cv_file_magic_cmd
-+deplibs_check_method=$lt_cv_deplibs_check_method
-+test -z "$deplibs_check_method" && deplibs_check_method=unknown
-+
-+
-+
-+
-+# If no C compiler was specified, use CC.
-+LTCC=${LTCC-"$CC"}
-+
-+# If no C compiler flags were specified, use CFLAGS.
-+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-+
-+# Allow CC to be a program name with arguments.
-+compiler=$CC
-+
-+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
-+if test "${enable_libtool_lock+set}" = set; then
-+ enableval="$enable_libtool_lock"
-+
-+fi;
-+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-+
-+# Some flags need to be propagated to the compiler or linker for good
-+# libtool support.
-+case $host in
-+ia64-*-hpux*)
-+ # Find out which ABI we are using.
-+ echo 'int i;' > conftest.$ac_ext
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ case `/usr/bin/file conftest.$ac_objext` in
-+ *ELF-32*)
-+ HPUX_IA64_MODE="32"
-+ ;;
-+ *ELF-64*)
-+ HPUX_IA64_MODE="64"
-+ ;;
-+ esac
-+ fi
-+ rm -rf conftest*
-+ ;;
-+*-*-irix6*)
-+ # Find out which ABI we are using.
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+@@ -5415,7 +5402,7 @@
+ ;;
+ *-*-irix6*)
+ # Find out which ABI we are using.
+- echo '#line 5418 "configure"' > conftest.$ac_ext
+ echo '#line 5405 "configure"' > conftest.$ac_ext
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ if test "$lt_cv_prog_gnu_ld" = yes; then
-+ case `/usr/bin/file conftest.$ac_objext` in
-+ *32-bit*)
-+ LD="${LD-ld} -melf32bsmip"
-+ ;;
-+ *N32*)
-+ LD="${LD-ld} -melf32bmipn32"
-+ ;;
-+ *64-bit*)
-+ LD="${LD-ld} -melf64bmip"
-+ ;;
-+ esac
-+ else
-+ case `/usr/bin/file conftest.$ac_objext` in
-+ *32-bit*)
-+ LD="${LD-ld} -32"
-+ ;;
-+ *N32*)
-+ LD="${LD-ld} -n32"
-+ ;;
-+ *64-bit*)
-+ LD="${LD-ld} -64"
-+ ;;
-+ esac
-+ fi
-+ fi
-+ rm -rf conftest*
-+ ;;
-+
-+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
-+ # Find out which ABI we are using.
-+ echo 'int i;' > conftest.$ac_ext
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ case `/usr/bin/file conftest.o` in
-+ *32-bit*)
-+ case $host in
-+ x86_64-*linux*)
-+ LD="${LD-ld} -m elf_i386"
-+ ;;
-+ ppc64-*linux*|powerpc64-*linux*)
-+ LD="${LD-ld} -m elf32ppclinux"
-+ ;;
-+ s390x-*linux*)
-+ LD="${LD-ld} -m elf_s390"
-+ ;;
-+ sparc64-*linux*)
-+ LD="${LD-ld} -m elf32_sparc"
-+ ;;
-+ esac
-+ ;;
-+ *64-bit*)
-+ case $host in
-+ x86_64-*linux*)
-+ LD="${LD-ld} -m elf_x86_64"
-+ ;;
-+ ppc*-*linux*|powerpc*-*linux*)
-+ LD="${LD-ld} -m elf64ppc"
-+ ;;
-+ s390*-*linux*)
-+ LD="${LD-ld} -m elf64_s390"
-+ ;;
-+ sparc*-*linux*)
-+ LD="${LD-ld} -m elf64_sparc"
-+ ;;
-+ esac
-+ ;;
-+ esac
-+ fi
-+ rm -rf conftest*
-+ ;;
-+
-+*-*-sco3.2v5*)
-+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-+ SAVE_CFLAGS="$CFLAGS"
-+ CFLAGS="$CFLAGS -belf"
-+ echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
-+if test "${lt_cv_cc_needs_belf+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+@@ -5535,8 +5522,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ lt_cv_cc_needs_belf=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+lt_cv_cc_needs_belf=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+ ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
-+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-+ CFLAGS="$SAVE_CFLAGS"
-+ fi
-+ ;;
-+sparc*-*solaris*)
-+ # Find out which ABI we are using.
-+ echo 'int i;' > conftest.$ac_ext
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ case `/usr/bin/file conftest.o` in
-+ *64-bit*)
-+ case $lt_cv_prog_gnu_ld in
-+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
-+ *) LD="${LD-ld} -64" ;;
-+ esac
-+ ;;
-+ esac
-+ fi
-+ rm -rf conftest*
-+ ;;
-+
-+
-+esac
-+
-+need_locks="$enable_libtool_lock"
-+
-+
-+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-+ inttypes.h stdint.h unistd.h
-+do
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+
-+#include <$ac_header>
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -5635,8 +5621,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_Header=yes"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+eval "$as_ac_Header=no"
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+
-+done
-+
-+
-+
-+for ac_header in dlfcn.h
-+do
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+else
-+ # Is the header compilable?
-+echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+#include <$ac_header>
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -5703,8 +5688,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_header_compiler=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_header_compiler=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6
-+
-+# Is the header present?
-+echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <$ac_header>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ ac_header_preproc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ ac_header_preproc=no
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6
-+
-+# So? What about this header?
-+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-+ yes:no: )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ ac_header_preproc=yes
-+ ;;
-+ no:yes:* )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ (
-+ cat <<\_ASBOX
-+## ------------------------------------------ ##
-+## Report this to the AC_PACKAGE_NAME lists. ##
-+## ------------------------------------------ ##
-+_ASBOX
-+ ) |
-+ sed "s/^/$as_me: WARNING: /" >&2
-+ ;;
-+esac
-+echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ eval "$as_ac_Header=\$ac_header_preproc"
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+
-+fi
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+
-+done
-+
-+
-+
-+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-+ (test "X$CXX" != "Xg++"))) ; then
-+ ac_ext=cc
-+ac_cpp='$CXXCPP $CPPFLAGS'
-+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
-+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
-+if test -z "$CXXCPP"; then
-+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ # Double quotes because CXXCPP needs to be expanded
-+ for CXXCPP in "$CXX -E" "/lib/cpp"
-+ do
-+ ac_preproc_ok=false
-+for ac_cxx_preproc_warn_flag in '' yes
-+do
-+ # Use a header file that comes with gcc, so configuring glibc
-+ # with a fresh cross-compiler works.
-+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ # <limits.h> exists even on freestanding compilers.
-+ # On the NeXT, cc -E runs the code through the compiler's parser,
-+ # not just through cpp. "Syntax error" is here to catch this case.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+ Syntax error
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_cxx_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ :
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ # Broken: fails on valid input.
-+continue
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+
-+ # OK, works on sane cases. Now check whether non-existent headers
-+ # can be detected and how.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <ac_nonexistent.h>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_cxx_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ # Broken: success on invalid input.
-+continue
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ # Passes both tests.
-+ac_preproc_ok=:
-+break
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+
-+done
-+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-+rm -f conftest.err conftest.$ac_ext
-+if $ac_preproc_ok; then
-+ break
-+fi
-+
-+ done
-+ ac_cv_prog_CXXCPP=$CXXCPP
-+
-+fi
-+ CXXCPP=$ac_cv_prog_CXXCPP
-+else
-+ ac_cv_prog_CXXCPP=$CXXCPP
-+fi
-+echo "$as_me:$LINENO: result: $CXXCPP" >&5
-+echo "${ECHO_T}$CXXCPP" >&6
-+ac_preproc_ok=false
-+for ac_cxx_preproc_warn_flag in '' yes
-+do
-+ # Use a header file that comes with gcc, so configuring glibc
-+ # with a fresh cross-compiler works.
-+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ # <limits.h> exists even on freestanding compilers.
-+ # On the NeXT, cc -E runs the code through the compiler's parser,
-+ # not just through cpp. "Syntax error" is here to catch this case.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+ Syntax error
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_cxx_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ :
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ # Broken: fails on valid input.
-+continue
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+
-+ # OK, works on sane cases. Now check whether non-existent headers
-+ # can be detected and how.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <ac_nonexistent.h>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_cxx_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ # Broken: success on invalid input.
-+continue
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ # Passes both tests.
-+ac_preproc_ok=:
-+break
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+
-+done
-+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-+rm -f conftest.err conftest.$ac_ext
-+if $ac_preproc_ok; then
-+ :
-+else
-+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+ac_ext=cc
-+ac_cpp='$CXXCPP $CPPFLAGS'
-+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-+
-+fi
-+
-+
-+ac_ext=f
-+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-+if test -n "$ac_tool_prefix"; then
-+ for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
-+ do
-+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_F77+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$F77"; then
-+ ac_cv_prog_F77="$F77" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+F77=$ac_cv_prog_F77
-+if test -n "$F77"; then
-+ echo "$as_me:$LINENO: result: $F77" >&5
-+echo "${ECHO_T}$F77" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$F77" && break
-+ done
-+fi
-+if test -z "$F77"; then
-+ ac_ct_F77=$F77
-+ for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_F77"; then
-+ ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_F77="$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+ac_ct_F77=$ac_cv_prog_ac_ct_F77
-+if test -n "$ac_ct_F77"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
-+echo "${ECHO_T}$ac_ct_F77" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$ac_ct_F77" && break
-+done
-+
-+ F77=$ac_ct_F77
-+fi
-+
-+
-+# Provide some information about the compiler.
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -6149,7 +6133,7 @@
+
+
+ # Provide some information about the compiler.
+-echo "$as_me:6152:" \
+echo "$as_me:6136:" \
-+ "checking for Fortran 77 compiler version" >&5
-+ac_compiler=`set X $ac_compile; echo $2`
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-+ (eval $ac_compiler --version </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
-+ (eval $ac_compiler -v </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
-+ (eval $ac_compiler -V </dev/null >&5) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+rm -f a.out
-+
-+# If we don't use `.F' as extension, the preprocessor is not run on the
-+# input file. (Note that this only needs to work for GNU compilers.)
-+ac_save_ext=$ac_ext
-+ac_ext=F
-+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
-+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
-+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+ program main
-+#ifndef __GNUC__
-+ choke me
-+#endif
-+
-+ end
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ "checking for Fortran 77 compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+@@ -6195,8 +6179,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_f77_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_compiler_gnu=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_compiler_gnu=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
-+
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
-+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
-+ac_ext=$ac_save_ext
-+ac_test_FFLAGS=${FFLAGS+set}
-+ac_save_FFLAGS=$FFLAGS
-+FFLAGS=
-+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
-+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
-+if test "${ac_cv_prog_f77_g+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ FFLAGS=-g
-+cat >conftest.$ac_ext <<_ACEOF
-+ program main
-+
-+ end
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -6245,8 +6228,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_f77_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_prog_f77_g=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_prog_f77_g=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
-+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
-+if test "$ac_test_FFLAGS" = set; then
-+ FFLAGS=$ac_save_FFLAGS
-+elif test $ac_cv_prog_f77_g = yes; then
-+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
-+ FFLAGS="-g -O2"
-+ else
-+ FFLAGS="-g"
-+ fi
-+else
-+ if test "x$ac_cv_f77_compiler_gnu" = xyes; then
-+ FFLAGS="-O2"
-+ else
-+ FFLAGS=
-+ fi
-+fi
-+
-+G77=`test $ac_compiler_gnu = yes && echo yes`
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+
-+
-+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-+
-+# find the maximum length of command line arguments
-+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
-+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
-+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ i=0
-+ teststring="ABCD"
-+
-+ case $build_os in
-+ msdosdjgpp*)
-+ # On DJGPP, this test can blow up pretty badly due to problems in libc
-+ # (any single argument exceeding 2000 bytes causes a buffer overrun
-+ # during glob expansion). Even if it were fixed, the result of this
-+ # check would be larger than it should be.
-+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
-+ ;;
-+
-+ gnu*)
-+ # Under GNU Hurd, this test is not required because there is
-+ # no limit to the length of command line arguments.
-+ # Libtool will interpret -1 as no limit whatsoever
-+ lt_cv_sys_max_cmd_len=-1;
-+ ;;
-+
-+ cygwin* | mingw*)
-+ # On Win9x/ME, this test blows up -- it succeeds, but takes
-+ # about 5 minutes as the teststring grows exponentially.
-+ # Worse, since 9x/ME are not pre-emptively multitasking,
-+ # you end up with a "frozen" computer, even though with patience
-+ # the test eventually succeeds (with a max line length of 256k).
-+ # Instead, let's just punt: use the minimum linelength reported by
-+ # all of the supported platforms: 8192 (on NT/2K/XP).
-+ lt_cv_sys_max_cmd_len=8192;
-+ ;;
-+
-+ amigaos*)
-+ # On AmigaOS with pdksh, this test takes hours, literally.
-+ # So we just punt and use a minimum line length of 8192.
-+ lt_cv_sys_max_cmd_len=8192;
-+ ;;
-+
-+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-+ # This has been around since 386BSD, at least. Likely further.
-+ if test -x /sbin/sysctl; then
-+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
-+ elif test -x /usr/sbin/sysctl; then
-+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
-+ else
-+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
-+ fi
-+ # And add a safety zone
-+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
-+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
-+ ;;
-+
-+ interix*)
-+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
-+ lt_cv_sys_max_cmd_len=196608
-+ ;;
-+
-+ osf*)
-+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
-+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
-+ # nice to cause kernel panics so lets avoid the loop below.
-+ # First set a reasonable default.
-+ lt_cv_sys_max_cmd_len=16384
-+ #
-+ if test -x /sbin/sysconfig; then
-+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
-+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
-+ esac
-+ fi
-+ ;;
-+ sco3.2v5*)
-+ lt_cv_sys_max_cmd_len=102400
-+ ;;
-+ sysv5* | sco5v6* | sysv4.2uw2*)
-+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
-+ if test -n "$kargmax"; then
-+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
-+ else
-+ lt_cv_sys_max_cmd_len=32768
-+ fi
-+ ;;
-+ *)
-+ # If test is not a shell built-in, we'll probably end up computing a
-+ # maximum length that is only half of the actual maximum length, but
-+ # we can't tell.
-+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-+ while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
-+ = "XX$teststring") >/dev/null 2>&1 &&
-+ new_result=`expr "X$teststring" : ".*" 2>&1` &&
-+ lt_cv_sys_max_cmd_len=$new_result &&
-+ test $i != 17 # 1/2 MB should be enough
-+ do
-+ i=`expr $i + 1`
-+ teststring=$teststring$teststring
-+ done
-+ teststring=
-+ # Add a significant safety factor because C++ compilers can tack on massive
-+ # amounts of additional arguments before passing them to the linker.
-+ # It appears as though 1/2 is a usable value.
-+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
-+ ;;
-+ esac
-+
-+fi
-+
-+if test -n $lt_cv_sys_max_cmd_len ; then
-+ echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
-+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
-+else
-+ echo "$as_me:$LINENO: result: none" >&5
-+echo "${ECHO_T}none" >&6
-+fi
-+
-+
-+
-+
-+# Check for command to grab the raw symbol name followed by C symbol from nm.
-+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
-+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
-+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+
-+# These are sane defaults that work on at least a few old systems.
-+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
-+
-+# Character class describing NM global symbol codes.
-+symcode='[BCDEGRST]'
-+
-+# Regexp to match symbols that can be accessed directly from C.
-+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-+
-+# Transform an extracted symbol line into a proper C declaration
-+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-+
-+# Transform an extracted symbol line into symbol name and symbol address
-+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-+
-+# Define system-specific variables.
-+case $host_os in
-+aix*)
-+ symcode='[BCDT]'
-+ ;;
-+cygwin* | mingw* | pw32*)
-+ symcode='[ABCDGISTW]'
-+ ;;
-+hpux*) # Its linker distinguishes data from code symbols
-+ if test "$host_cpu" = ia64; then
-+ symcode='[ABCDEGRST]'
-+ fi
-+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-+ ;;
-+linux*)
-+ if test "$host_cpu" = ia64; then
-+ symcode='[ABCDGIRSTW]'
-+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
-+ fi
-+ ;;
-+irix* | nonstopux*)
-+ symcode='[BCDEGRST]'
-+ ;;
-+osf*)
-+ symcode='[BCDEGQRST]'
-+ ;;
-+solaris*)
-+ symcode='[BDRT]'
-+ ;;
-+sco3.2v5*)
-+ symcode='[DT]'
-+ ;;
-+sysv4.2uw2*)
-+ symcode='[DT]'
-+ ;;
-+sysv5* | sco5v6* | unixware* | OpenUNIX*)
-+ symcode='[ABDT]'
-+ ;;
-+sysv4)
-+ symcode='[DFNSTU]'
-+ ;;
-+esac
-+
-+# Handle CRLF in mingw tool chain
-+opt_cr=
-+case $build_os in
-+mingw*)
-+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
-+ ;;
-+esac
-+
-+# If we're using GNU nm, then use its standard symbol codes.
-+case `$NM -V 2>&1` in
-+*GNU* | *'with BFD'*)
-+ symcode='[ABCDGIRSTW]' ;;
-+esac
-+
-+# Try without a prefix undercore, then with it.
-+for ac_symprfx in "" "_"; do
-+
-+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
-+ symxfrm="\\1 $ac_symprfx\\2 \\2"
-+
-+ # Write the raw and C identifiers.
-+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-+
-+ # Check to see that the pipe works correctly.
-+ pipe_works=no
-+
-+ rm -f conftest*
-+ cat > conftest.$ac_ext <<EOF
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+char nm_test_var;
-+void nm_test_func(){}
-+#ifdef __cplusplus
-+}
-+#endif
-+int main(){nm_test_var='a';nm_test_func();return(0);}
-+EOF
-+
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ # Now try to grab the symbols.
-+ nlist=conftest.nm
-+ if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
-+ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && test -s "$nlist"; then
-+ # Try sorting and uniquifying the output.
-+ if sort "$nlist" | uniq > "$nlist"T; then
-+ mv -f "$nlist"T "$nlist"
-+ else
-+ rm -f "$nlist"T
-+ fi
-+
-+ # Make sure that we snagged all the symbols we need.
-+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
-+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
-+ cat <<EOF > conftest.$ac_ext
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+EOF
-+ # Now generate the symbol file.
-+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-+
-+ cat <<EOF >> conftest.$ac_ext
-+#if defined (__STDC__) && __STDC__
-+# define lt_ptr_t void *
-+#else
-+# define lt_ptr_t char *
-+# define const
-+#endif
-+
-+/* The mapping between symbol names and symbols. */
-+const struct {
-+ const char *name;
-+ lt_ptr_t address;
-+}
-+lt_preloaded_symbols[] =
-+{
-+EOF
-+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
-+ cat <<\EOF >> conftest.$ac_ext
-+ {0, (lt_ptr_t) 0}
-+};
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+EOF
-+ # Now try linking the two files.
-+ mv conftest.$ac_objext conftstm.$ac_objext
-+ lt_save_LIBS="$LIBS"
-+ lt_save_CFLAGS="$CFLAGS"
-+ LIBS="conftstm.$ac_objext"
-+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && test -s conftest${ac_exeext}; then
-+ pipe_works=yes
-+ fi
-+ LIBS="$lt_save_LIBS"
-+ CFLAGS="$lt_save_CFLAGS"
-+ else
-+ echo "cannot find nm_test_func in $nlist" >&5
-+ fi
-+ else
-+ echo "cannot find nm_test_var in $nlist" >&5
-+ fi
-+ else
-+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
-+ fi
-+ else
-+ echo "$progname: failed program was:" >&5
-+ cat conftest.$ac_ext >&5
-+ fi
-+ rm -f conftest* conftst*
-+
-+ # Do not use the global_symbol_pipe unless it works.
-+ if test "$pipe_works" = yes; then
-+ break
-+ else
-+ lt_cv_sys_global_symbol_pipe=
-+ fi
-+done
-+
-+fi
-+
-+if test -z "$lt_cv_sys_global_symbol_pipe"; then
-+ lt_cv_sys_global_symbol_to_cdecl=
-+fi
-+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
-+ echo "$as_me:$LINENO: result: failed" >&5
-+echo "${ECHO_T}failed" >&6
-+else
-+ echo "$as_me:$LINENO: result: ok" >&5
-+echo "${ECHO_T}ok" >&6
-+fi
-+
-+echo "$as_me:$LINENO: checking for objdir" >&5
-+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
-+if test "${lt_cv_objdir+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ rm -f .libs 2>/dev/null
-+mkdir .libs 2>/dev/null
-+if test -d .libs; then
-+ lt_cv_objdir=.libs
-+else
-+ # MS-DOS does not allow filenames that begin with a dot.
-+ lt_cv_objdir=_libs
-+fi
-+rmdir .libs 2>/dev/null
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
-+echo "${ECHO_T}$lt_cv_objdir" >&6
-+objdir=$lt_cv_objdir
-+
-+
-+
-+
-+
-+case $host_os in
-+aix3*)
-+ # AIX sometimes has problems with the GCC collect2 program. For some
-+ # reason, if we set the COLLECT_NAMES environment variable, the problems
-+ # vanish in a puff of smoke.
-+ if test "X${COLLECT_NAMES+set}" != Xset; then
-+ COLLECT_NAMES=
-+ export COLLECT_NAMES
-+ fi
-+ ;;
-+esac
-+
-+# Sed substitution that helps us do robust quoting. It backslashifies
-+# metacharacters that are still active within double-quoted strings.
-+Xsed='sed -e 1s/^X//'
-+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-+
-+# Same as above, but do not quote variable references.
-+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-+
-+# Sed substitution to delay expansion of an escaped shell variable in a
-+# double_quote_subst'ed string.
-+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-+
-+# Sed substitution to avoid accidental globbing in evaled expressions
-+no_glob_subst='s/\*/\\\*/g'
-+
-+# Constants:
-+rm="rm -f"
-+
-+# Global variables:
-+default_ofile=libtool
-+can_build_shared=yes
-+
-+# All known linkers require a `.a' archive for static linking (except MSVC,
-+# which needs '.lib').
-+libext=a
-+ltmain="$ac_aux_dir/ltmain.sh"
-+ofile="$default_ofile"
-+with_gnu_ld="$lt_cv_prog_gnu_ld"
-+
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}ar; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_AR+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$AR"; then
-+ ac_cv_prog_AR="$AR" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_AR="${ac_tool_prefix}ar"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+AR=$ac_cv_prog_AR
-+if test -n "$AR"; then
-+ echo "$as_me:$LINENO: result: $AR" >&5
-+echo "${ECHO_T}$AR" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+fi
-+if test -z "$ac_cv_prog_AR"; then
-+ ac_ct_AR=$AR
-+ # Extract the first word of "ar", so it can be a program name with args.
-+set dummy ar; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_AR"; then
-+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_AR="ar"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
-+fi
-+fi
-+ac_ct_AR=$ac_cv_prog_ac_ct_AR
-+if test -n "$ac_ct_AR"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-+echo "${ECHO_T}$ac_ct_AR" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ AR=$ac_ct_AR
-+else
-+ AR="$ac_cv_prog_AR"
-+fi
-+
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_RANLIB+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$RANLIB"; then
-+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+RANLIB=$ac_cv_prog_RANLIB
-+if test -n "$RANLIB"; then
-+ echo "$as_me:$LINENO: result: $RANLIB" >&5
-+echo "${ECHO_T}$RANLIB" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+fi
-+if test -z "$ac_cv_prog_RANLIB"; then
-+ ac_ct_RANLIB=$RANLIB
-+ # Extract the first word of "ranlib", so it can be a program name with args.
-+set dummy ranlib; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_RANLIB"; then
-+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_RANLIB="ranlib"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
-+fi
-+fi
-+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-+if test -n "$ac_ct_RANLIB"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-+echo "${ECHO_T}$ac_ct_RANLIB" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ RANLIB=$ac_ct_RANLIB
-+else
-+ RANLIB="$ac_cv_prog_RANLIB"
-+fi
-+
-+if test -n "$ac_tool_prefix"; then
-+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-+set dummy ${ac_tool_prefix}strip; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_STRIP+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$STRIP"; then
-+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+STRIP=$ac_cv_prog_STRIP
-+if test -n "$STRIP"; then
-+ echo "$as_me:$LINENO: result: $STRIP" >&5
-+echo "${ECHO_T}$STRIP" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+fi
-+if test -z "$ac_cv_prog_STRIP"; then
-+ ac_ct_STRIP=$STRIP
-+ # Extract the first word of "strip", so it can be a program name with args.
-+set dummy strip; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$ac_ct_STRIP"; then
-+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_ac_ct_STRIP="strip"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
-+fi
-+fi
-+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-+if test -n "$ac_ct_STRIP"; then
-+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-+echo "${ECHO_T}$ac_ct_STRIP" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ STRIP=$ac_ct_STRIP
-+else
-+ STRIP="$ac_cv_prog_STRIP"
-+fi
-+
-+
-+old_CC="$CC"
-+old_CFLAGS="$CFLAGS"
-+
-+# Set sane defaults for various variables
-+test -z "$AR" && AR=ar
-+test -z "$AR_FLAGS" && AR_FLAGS=cru
-+test -z "$AS" && AS=as
-+test -z "$CC" && CC=cc
-+test -z "$LTCC" && LTCC=$CC
-+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-+test -z "$DLLTOOL" && DLLTOOL=dlltool
-+test -z "$LD" && LD=ld
-+test -z "$LN_S" && LN_S="ln -s"
-+test -z "$MAGIC_CMD" && MAGIC_CMD=file
-+test -z "$NM" && NM=nm
-+test -z "$SED" && SED=sed
-+test -z "$OBJDUMP" && OBJDUMP=objdump
-+test -z "$RANLIB" && RANLIB=:
-+test -z "$STRIP" && STRIP=:
-+test -z "$ac_objext" && ac_objext=o
-+
-+# Determine commands to create old-style static archives.
-+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
-+old_postinstall_cmds='chmod 644 $oldlib'
-+old_postuninstall_cmds=
-+
-+if test -n "$RANLIB"; then
-+ case $host_os in
-+ openbsd*)
-+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-+ ;;
-+ *)
-+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-+ ;;
-+ esac
-+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-+fi
-+
-+for cc_temp in $compiler""; do
-+ case $cc_temp in
-+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+
-+
-+# Only perform the check for file, if the check method requires it
-+case $deplibs_check_method in
-+file_magic*)
-+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-+ echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
-+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $MAGIC_CMD in
-+[\\/*] | ?:[\\/]*)
-+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-+ ;;
-+*)
-+ lt_save_MAGIC_CMD="$MAGIC_CMD"
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
-+ for ac_dir in $ac_dummy; do
-+ IFS="$lt_save_ifs"
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f $ac_dir/${ac_tool_prefix}file; then
-+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
-+ if test -n "$file_magic_test_file"; then
-+ case $deplibs_check_method in
-+ "file_magic "*)
-+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-+ $EGREP "$file_magic_regex" > /dev/null; then
-+ :
-+ else
-+ cat <<EOF 1>&2
-+
-+*** Warning: the command libtool uses to detect shared libraries,
-+*** $file_magic_cmd, produces output that libtool cannot recognize.
-+*** The result is that libtool may fail to recognize shared libraries
-+*** as such. This will affect the creation of libtool libraries that
-+*** depend on shared libraries, but programs linked with such libtool
-+*** libraries will work regardless of this problem. Nevertheless, you
-+*** may want to report the problem to your system manager and/or to
-+*** bug-libtool at gnu.org
-+
-+EOF
-+ fi ;;
-+ esac
-+ fi
-+ break
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ MAGIC_CMD="$lt_save_MAGIC_CMD"
-+ ;;
-+esac
-+fi
-+
-+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-+if test -n "$MAGIC_CMD"; then
-+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-+echo "${ECHO_T}$MAGIC_CMD" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+if test -z "$lt_cv_path_MAGIC_CMD"; then
-+ if test -n "$ac_tool_prefix"; then
-+ echo "$as_me:$LINENO: checking for file" >&5
-+echo $ECHO_N "checking for file... $ECHO_C" >&6
-+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $MAGIC_CMD in
-+[\\/*] | ?:[\\/]*)
-+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
-+ ;;
-+*)
-+ lt_save_MAGIC_CMD="$MAGIC_CMD"
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
-+ for ac_dir in $ac_dummy; do
-+ IFS="$lt_save_ifs"
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f $ac_dir/file; then
-+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
-+ if test -n "$file_magic_test_file"; then
-+ case $deplibs_check_method in
-+ "file_magic "*)
-+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
-+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-+ $EGREP "$file_magic_regex" > /dev/null; then
-+ :
-+ else
-+ cat <<EOF 1>&2
-+
-+*** Warning: the command libtool uses to detect shared libraries,
-+*** $file_magic_cmd, produces output that libtool cannot recognize.
-+*** The result is that libtool may fail to recognize shared libraries
-+*** as such. This will affect the creation of libtool libraries that
-+*** depend on shared libraries, but programs linked with such libtool
-+*** libraries will work regardless of this problem. Nevertheless, you
-+*** may want to report the problem to your system manager and/or to
-+*** bug-libtool at gnu.org
-+
-+EOF
-+ fi ;;
-+ esac
-+ fi
-+ break
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+ MAGIC_CMD="$lt_save_MAGIC_CMD"
-+ ;;
-+esac
-+fi
-+
-+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
-+if test -n "$MAGIC_CMD"; then
-+ echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-+echo "${ECHO_T}$MAGIC_CMD" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ else
-+ MAGIC_CMD=:
-+ fi
-+fi
-+
-+ fi
-+ ;;
-+esac
-+
-+enable_dlopen=no
-+enable_win32_dll=no
-+
-+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
-+if test "${enable_libtool_lock+set}" = set; then
-+ enableval="$enable_libtool_lock"
-+
-+fi;
-+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-+
-+
-+# Check whether --with-pic or --without-pic was given.
-+if test "${with_pic+set}" = set; then
-+ withval="$with_pic"
-+ pic_mode="$withval"
-+else
-+ pic_mode=default
-+fi;
-+test -z "$pic_mode" && pic_mode=default
-+
-+# Use C for the default configuration in the libtool script
-+tagname=
-+lt_save_CC="$CC"
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+
-+# Source file extension for C test sources.
-+ac_ext=c
-+
-+# Object file extension for compiled C test sources.
-+objext=o
-+objext=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code="int some_variable = 0;\n"
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code='int main(){return(0);}\n'
-+
-+
-+# If no C compiler was specified, use CC.
-+LTCC=${LTCC-"$CC"}
-+
-+# If no C compiler flags were specified, use CFLAGS.
-+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-+
-+# Allow CC to be a program name with arguments.
-+compiler=$CC
-+
-+
-+# save warnings/boilerplate of simple test code
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_compiler_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_link_test_code" >conftest.$ac_ext
-+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_linker_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+
-+
-+lt_prog_compiler_no_builtin_flag=
-+
-+if test "$GCC" = yes; then
-+ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-+
-+
-+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
-+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_cv_prog_compiler_rtti_exceptions=no
-+ ac_outfile=conftest.$ac_objext
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+ lt_compiler_flag="-fno-rtti -fno-exceptions"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ # The option is referenced via a variable to avoid confusing sed.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -7212,11 +7194,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:7215: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7197: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:7219: \$? = $ac_status" >&5
+ echo "$as_me:7201: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_cv_prog_compiler_rtti_exceptions=yes
-+ fi
-+ fi
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
-+
-+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
-+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
-+else
-+ :
-+fi
-+
-+fi
-+
-+lt_prog_compiler_wl=
-+lt_prog_compiler_pic=
-+lt_prog_compiler_static=
-+
-+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-+
-+ if test "$GCC" = yes; then
-+ lt_prog_compiler_wl='-Wl,'
-+ lt_prog_compiler_static='-static'
-+
-+ case $host_os in
-+ aix*)
-+ # All AIX code is PIC.
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ lt_prog_compiler_static='-Bstatic'
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ # FIXME: we need at least 68020 code to build shared libraries, but
-+ # adding the `-m68020' flag to GCC prevents building anything better,
-+ # like `-m68040'.
-+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
-+ ;;
-+
-+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-+ # PIC is the default for these OSes.
-+ ;;
-+
-+ mingw* | pw32* | os2*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ lt_prog_compiler_pic='-DDLL_EXPORT'
-+ ;;
-+
-+ darwin* | rhapsody*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ lt_prog_compiler_pic='-fno-common'
-+ ;;
-+
-+ interix3*)
-+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-+ # Instead, we relocate shared libraries at runtime.
-+ ;;
-+
-+ msdosdjgpp*)
-+ # Just because we use GCC doesn't mean we suddenly get shared libraries
-+ # on systems that don't support them.
-+ lt_prog_compiler_can_build_shared=no
-+ enable_shared=no
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ lt_prog_compiler_pic=-Kconform_pic
-+ fi
-+ ;;
-+
-+ hpux*)
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ lt_prog_compiler_pic='-fPIC'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ lt_prog_compiler_pic='-fPIC'
-+ ;;
-+ esac
-+ else
-+ # PORTME Check for flag to pass linker flags through the system compiler.
-+ case $host_os in
-+ aix*)
-+ lt_prog_compiler_wl='-Wl,'
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ lt_prog_compiler_static='-Bstatic'
-+ else
-+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
-+ fi
-+ ;;
-+ darwin*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ case $cc_basename in
-+ xlc*)
-+ lt_prog_compiler_pic='-qnocommon'
-+ lt_prog_compiler_wl='-Wl,'
-+ ;;
-+ esac
-+ ;;
-+
-+ mingw* | pw32* | os2*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ lt_prog_compiler_pic='-DDLL_EXPORT'
-+ ;;
-+
-+ hpux9* | hpux10* | hpux11*)
-+ lt_prog_compiler_wl='-Wl,'
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ lt_prog_compiler_pic='+Z'
-+ ;;
-+ esac
-+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
-+ lt_prog_compiler_static='${wl}-a ${wl}archive'
-+ ;;
-+
-+ irix5* | irix6* | nonstopux*)
-+ lt_prog_compiler_wl='-Wl,'
-+ # PIC (with -KPIC) is the default.
-+ lt_prog_compiler_static='-non_shared'
-+ ;;
-+
-+ newsos6)
-+ lt_prog_compiler_pic='-KPIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
-+
-+ linux*)
-+ case $cc_basename in
-+ icc* | ecc*)
-+ lt_prog_compiler_wl='-Wl,'
-+ lt_prog_compiler_pic='-KPIC'
-+ lt_prog_compiler_static='-static'
-+ ;;
-+ pgcc* | pgf77* | pgf90* | pgf95*)
-+ # Portland Group compilers (*not* the Pentium gcc compiler,
-+ # which looks to be a dead project)
-+ lt_prog_compiler_wl='-Wl,'
-+ lt_prog_compiler_pic='-fpic'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
-+ ccc*)
-+ lt_prog_compiler_wl='-Wl,'
-+ # All Alpha code is PIC.
-+ lt_prog_compiler_static='-non_shared'
-+ ;;
-+ esac
-+ ;;
-+
-+ osf3* | osf4* | osf5*)
-+ lt_prog_compiler_wl='-Wl,'
-+ # All OSF/1 code is PIC.
-+ lt_prog_compiler_static='-non_shared'
-+ ;;
-+
-+ solaris*)
-+ lt_prog_compiler_pic='-KPIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ case $cc_basename in
-+ f77* | f90* | f95*)
-+ lt_prog_compiler_wl='-Qoption ld ';;
-+ *)
-+ lt_prog_compiler_wl='-Wl,';;
-+ esac
-+ ;;
-+
-+ sunos4*)
-+ lt_prog_compiler_wl='-Qoption ld '
-+ lt_prog_compiler_pic='-PIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
-+
-+ sysv4 | sysv4.2uw2* | sysv4.3*)
-+ lt_prog_compiler_wl='-Wl,'
-+ lt_prog_compiler_pic='-KPIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ lt_prog_compiler_pic='-Kconform_pic'
-+ lt_prog_compiler_static='-Bstatic'
-+ fi
-+ ;;
-+
-+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-+ lt_prog_compiler_wl='-Wl,'
-+ lt_prog_compiler_pic='-KPIC'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
-+
-+ unicos*)
-+ lt_prog_compiler_wl='-Wl,'
-+ lt_prog_compiler_can_build_shared=no
-+ ;;
-+
-+ uts4*)
-+ lt_prog_compiler_pic='-pic'
-+ lt_prog_compiler_static='-Bstatic'
-+ ;;
-+
-+ *)
-+ lt_prog_compiler_can_build_shared=no
-+ ;;
-+ esac
-+ fi
-+
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
-+
-+#
-+# Check to make sure the PIC flag actually works.
-+#
-+if test -n "$lt_prog_compiler_pic"; then
-+
-+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
-+if test "${lt_prog_compiler_pic_works+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_prog_compiler_pic_works=no
-+ ac_outfile=conftest.$ac_objext
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ # The option is referenced via a variable to avoid confusing sed.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -7480,11 +7462,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:7483: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7465: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:7487: \$? = $ac_status" >&5
+ echo "$as_me:7469: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_prog_compiler_pic_works=yes
-+ fi
-+ fi
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
-+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
-+
-+if test x"$lt_prog_compiler_pic_works" = xyes; then
-+ case $lt_prog_compiler_pic in
-+ "" | " "*) ;;
-+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
-+ esac
-+else
-+ lt_prog_compiler_pic=
-+ lt_prog_compiler_can_build_shared=no
-+fi
-+
-+fi
-+case $host_os in
-+ # For platforms which do not support PIC, -DPIC is meaningless:
-+ *djgpp*)
-+ lt_prog_compiler_pic=
-+ ;;
-+ *)
-+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
-+ ;;
-+esac
-+
-+#
-+# Check to make sure the static flag actually works.
-+#
-+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
-+if test "${lt_prog_compiler_static_works+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_prog_compiler_static_works=no
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
-+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-+ # The linker can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ if test -s conftest.err; then
-+ # Append any errors to the config.log.
-+ cat conftest.err 1>&5
-+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_prog_compiler_static_works=yes
-+ fi
-+ else
-+ lt_prog_compiler_static_works=yes
-+ fi
-+ fi
-+ $rm conftest*
-+ LDFLAGS="$save_LDFLAGS"
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
-+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
-+
-+if test x"$lt_prog_compiler_static_works" = xyes; then
-+ :
-+else
-+ lt_prog_compiler_static=
-+fi
-+
-+
-+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_cv_prog_compiler_c_o=no
-+ $rm -r conftest 2>/dev/null
-+ mkdir conftest
-+ cd conftest
-+ mkdir out
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ lt_compiler_flag="-o out/conftest2.$ac_objext"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -7584,11 +7566,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:7587: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7569: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&5
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:7591: \$? = $ac_status" >&5
+ echo "$as_me:7573: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-+ lt_cv_prog_compiler_c_o=yes
-+ fi
-+ fi
-+ chmod u+w . 2>&5
-+ $rm conftest*
-+ # SGI C++ compiler will create directory out/ii_files/ for
-+ # template instantiation
-+ test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
-+ $rm out/* && rmdir out
-+ cd ..
-+ rmdir conftest
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
-+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
-+
-+
-+hard_links="nottested"
-+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
-+ # do not overwrite the value of need_locks provided by the user
-+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
-+ hard_links=yes
-+ $rm conftest*
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ touch conftest.a
-+ ln conftest.a conftest.b 2>&5 || hard_links=no
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ echo "$as_me:$LINENO: result: $hard_links" >&5
-+echo "${ECHO_T}$hard_links" >&6
-+ if test "$hard_links" = no; then
-+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-+ need_locks=warn
-+ fi
-+else
-+ need_locks=no
-+fi
-+
-+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-+
-+ runpath_var=
-+ allow_undefined_flag=
-+ enable_shared_with_static_runtimes=no
-+ archive_cmds=
-+ archive_expsym_cmds=
-+ old_archive_From_new_cmds=
-+ old_archive_from_expsyms_cmds=
-+ export_dynamic_flag_spec=
-+ whole_archive_flag_spec=
-+ thread_safe_flag_spec=
-+ hardcode_libdir_flag_spec=
-+ hardcode_libdir_flag_spec_ld=
-+ hardcode_libdir_separator=
-+ hardcode_direct=no
-+ hardcode_minus_L=no
-+ hardcode_shlibpath_var=unsupported
-+ link_all_deplibs=unknown
-+ hardcode_automatic=no
-+ module_cmds=
-+ module_expsym_cmds=
-+ always_export_symbols=no
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ # include_expsyms should be a list of space-separated symbols to be *always*
-+ # included in the symbol list
-+ include_expsyms=
-+ # exclude_expsyms can be an extended regexp of symbols to exclude
-+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
-+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-+ # as well as any symbol that contains `d'.
-+ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-+ # platforms (ab)use it in PIC code, but their linkers get confused if
-+ # the symbol is explicitly referenced. Since portable code cannot
-+ # rely on this symbol name, it's probably fine to never include it in
-+ # preloaded symbol tables.
-+ extract_expsyms_cmds=
-+ # Just being paranoid about ensuring that cc_basename is set.
-+ for cc_temp in $compiler""; do
-+ case $cc_temp in
-+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+
-+ case $host_os in
-+ cygwin* | mingw* | pw32*)
-+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
-+ # When not using gcc, we currently assume that we are using
-+ # Microsoft Visual C++.
-+ if test "$GCC" != yes; then
-+ with_gnu_ld=no
-+ fi
-+ ;;
-+ interix*)
-+ # we just hope/assume this is gcc and not c89 (= MSVC++)
-+ with_gnu_ld=yes
-+ ;;
-+ openbsd*)
-+ with_gnu_ld=no
-+ ;;
-+ esac
-+
-+ ld_shlibs=yes
-+ if test "$with_gnu_ld" = yes; then
-+ # If archive_cmds runs LD, not CC, wlarc should be empty
-+ wlarc='${wl}'
-+
-+ # Set some defaults for GNU ld with shared library support. These
-+ # are reset later if shared libraries are not supported. Putting them
-+ # here allows them to be overridden if necessary.
-+ runpath_var=LD_RUN_PATH
-+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
-+ export_dynamic_flag_spec='${wl}--export-dynamic'
-+ # ancient GNU ld didn't support --whole-archive et. al.
-+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
-+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-+ else
-+ whole_archive_flag_spec=
-+ fi
-+ supports_anon_versioning=no
-+ case `$LD -v 2>/dev/null` in
-+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
-+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-+ *\ 2.11.*) ;; # other 2.11 versions
-+ *) supports_anon_versioning=yes ;;
-+ esac
-+
-+ # See if GNU ld supports shared libraries.
-+ case $host_os in
-+ aix3* | aix4* | aix5*)
-+ # On AIX/PPC, the GNU linker is very broken
-+ if test "$host_cpu" != ia64; then
-+ ld_shlibs=no
-+ cat <<EOF 1>&2
-+
-+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-+*** to be unable to reliably create shared libraries on AIX.
-+*** Therefore, libtool is disabling shared libraries support. If you
-+*** really care for shared libraries, you may want to modify your PATH
-+*** so that a non-GNU linker is found, and then restart.
-+
-+EOF
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-+ hardcode_libdir_flag_spec='-L$libdir'
-+ hardcode_minus_L=yes
-+
-+ # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-+ # that the semantics of dynamic libraries on AmigaOS, at least up
-+ # to version 4, is to share data among multiple programs linked
-+ # with the same dynamic library. Since this doesn't match the
-+ # behavior of shared libraries on other platforms, we can't use
-+ # them.
-+ ld_shlibs=no
-+ ;;
-+
-+ beos*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ allow_undefined_flag=unsupported
-+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-+ # support --undefined. This deserves some investigation. FIXME
-+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ else
-+ ld_shlibs=no
-+ fi
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
-+ # as there is no search path for DLLs.
-+ hardcode_libdir_flag_spec='-L$libdir'
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=no
-+ enable_shared_with_static_runtimes=yes
-+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-+
-+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ # If the export-symbols file already is a .def file (1st line
-+ # is EXPORTS), use it as is; otherwise, prepend...
-+ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ cp $export_symbols $output_objdir/$soname.def;
-+ else
-+ echo EXPORTS > $output_objdir/$soname.def;
-+ cat $export_symbols >> $output_objdir/$soname.def;
-+ fi~
-+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ else
-+ ld_shlibs=no
-+ fi
-+ ;;
-+
-+ interix3*)
-+ hardcode_direct=no
-+ hardcode_shlibpath_var=no
-+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-+ export_dynamic_flag_spec='${wl}-E'
-+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-+ # Instead, shared libraries are loaded at an image base (0x10000000 by
-+ # default) and relocated if they conflict, which is a slow very memory
-+ # consuming and fragmenting process. To avoid this, we pick a random,
-+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
-+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ ;;
-+
-+ linux*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ tmp_addflag=
-+ case $cc_basename,$host_cpu in
-+ pgcc*) # Portland Group C compiler
-+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ tmp_addflag=' $pic_flag'
-+ ;;
-+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
-+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ tmp_addflag=' $pic_flag -Mnomain' ;;
-+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
-+ tmp_addflag=' -i_dynamic' ;;
-+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
-+ tmp_addflag=' -i_dynamic -nofor_main' ;;
-+ ifc* | ifort*) # Intel Fortran compiler
-+ tmp_addflag=' -nofor_main' ;;
-+ esac
-+ archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+
-+ if test $supports_anon_versioning = yes; then
-+ archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
-+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-+ $echo "local: *; };" >> $output_objdir/$libname.ver~
-+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-+ fi
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -7839,12 +7821,13 @@
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ link_all_deplibs=no
-+ else
-+ ld_shlibs=no
-+ fi
-+ ;;
-+
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-+ wlarc=
-+ else
-+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ fi
-+ ;;
-+
-+ solaris*)
-+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-+ ld_shlibs=no
-+ cat <<EOF 1>&2
-+
-+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-+*** create shared libraries on Solaris systems. Therefore, libtool
-+*** is disabling shared libraries support. We urge you to upgrade GNU
-+*** binutils to release 2.9.1 or newer. Another option is to modify
-+*** your PATH or compiler configuration so that the native linker is
-+*** used, and then restart.
-+
-+EOF
-+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ else
-+ ld_shlibs=no
-+ fi
-+ ;;
-+
-+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-+ case `$LD -v 2>&1` in
-+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-+ ld_shlibs=no
-+ cat <<_LT_EOF 1>&2
-+
-+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-+*** reliably create shared libraries on SCO systems. Therefore, libtool
-+*** is disabling shared libraries support. We urge you to upgrade GNU
-+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-+*** your PATH or compiler configuration so that the native linker is
-+*** used, and then restart.
-+
-+_LT_EOF
-+ ;;
-+ *)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
-+ else
-+ ld_shlibs=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+
-+ sunos4*)
-+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ wlarc=
-+ hardcode_direct=yes
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ *)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ else
-+ ld_shlibs=no
-+ fi
-+ ;;
-+ esac
-+
-+ if test "$ld_shlibs" = no; then
-+ runpath_var=
-+ hardcode_libdir_flag_spec=
-+ export_dynamic_flag_spec=
-+ whole_archive_flag_spec=
-+ fi
-+ else
-+ # PORTME fill in a description of your system's linker (not GNU ld)
-+ case $host_os in
-+ aix3*)
-+ allow_undefined_flag=unsupported
-+ always_export_symbols=yes
-+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-+ # Note: this linker hardcodes the directories in LIBPATH if there
-+ # are no directories specified by -L.
-+ hardcode_minus_L=yes
-+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-+ # Neither direct hardcoding nor static linking is supported with a
-+ # broken collect2.
-+ hardcode_direct=unsupported
-+ fi
-+ ;;
-+
-+ aix4* | aix5*)
-+ if test "$host_cpu" = ia64; then
-+ # On IA64, the linker does run time linking by default, so we don't
-+ # have to do anything special.
-+ aix_use_runtimelinking=no
-+ exp_sym_flag='-Bexport'
-+ no_entry_flag=""
-+ else
-+ # If we're using GNU nm, then we don't want the "-C" option.
-+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
-+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-+ else
-+ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-+ fi
-+ aix_use_runtimelinking=no
-+
-+ # Test if we are trying to use run time linking or normal
-+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-+ # need to do runtime linking.
-+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
-+ for ld_flag in $LDFLAGS; do
-+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-+ aix_use_runtimelinking=yes
-+ break
-+ fi
-+ done
-+ ;;
-+ esac
-+
-+ exp_sym_flag='-bexport'
-+ no_entry_flag='-bnoentry'
-+ fi
-+
-+ # When large executables or shared objects are built, AIX ld can
-+ # have problems creating the table of contents. If linking a library
-+ # or program results in "error TOC overflow" add -mminimal-toc to
-+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
-+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-+
-+ archive_cmds=''
-+ hardcode_direct=yes
-+ hardcode_libdir_separator=':'
-+ link_all_deplibs=yes
-+
-+ if test "$GCC" = yes; then
-+ case $host_os in aix4.[012]|aix4.[012].*)
-+ # We only want to do this on AIX 4.2 and lower, the check
-+ # below for broken collect2 doesn't work under 4.3+
-+ collect2name=`${CC} -print-prog-name=collect2`
-+ if test -f "$collect2name" && \
-+ strings "$collect2name" | grep resolve_lib_name >/dev/null
-+ then
-+ # We have reworked collect2
-+ hardcode_direct=yes
-+ else
-+ # We have old collect2
-+ hardcode_direct=unsupported
-+ # It fails to find uninstalled libraries when the uninstalled
-+ # path is not listed in the libpath. Setting hardcode_minus_L
-+ # to unsupported forces relinking
-+ hardcode_minus_L=yes
-+ hardcode_libdir_flag_spec='-L$libdir'
-+ hardcode_libdir_separator=
-+ fi
-+ ;;
-+ esac
-+ shared_flag='-shared'
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag="$shared_flag "'${wl}-G'
-+ fi
-+ else
-+ # not using gcc
-+ if test "$host_cpu" = ia64; then
-+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-+ # chokes on -Wl,-G. The following line is correct:
-+ shared_flag='-G'
-+ else
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag='${wl}-G'
-+ else
-+ shared_flag='${wl}-bM:SRE'
-+ fi
-+ fi
-+ fi
-+
-+ # It seems that -bexpall does not export symbols beginning with
-+ # underscore (_), so it is better to generate a list of symbols to export.
-+ always_export_symbols=yes
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # Warning - without using the other runtime loading flags (-brtl),
-+ # -berok will link without error, but may produce a broken library.
-+ allow_undefined_flag='-berok'
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+@@ -8060,8 +8043,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+
-+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-+ else
-+ if test "$host_cpu" = ia64; then
-+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-+ allow_undefined_flag="-z nodefs"
-+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-+ else
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -8121,8 +8103,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+
-+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ # Warning - without using the other run time loading flags,
-+ # -berok will link without error, but may produce a broken library.
-+ no_undefined_flag=' ${wl}-bernotok'
-+ allow_undefined_flag=' ${wl}-berok'
-+ # Exported symbols can be pulled into shared objects from archives
-+ whole_archive_flag_spec='$convenience'
-+ archive_cmds_need_lc=yes
-+ # This is similar to how AIX traditionally builds its shared libraries.
-+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-+ fi
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-+ hardcode_libdir_flag_spec='-L$libdir'
-+ hardcode_minus_L=yes
-+ # see comment about different semantics on the GNU ld section
-+ ld_shlibs=no
-+ ;;
-+
-+ bsdi[45]*)
-+ export_dynamic_flag_spec=-rdynamic
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # When not using gcc, we currently assume that we are using
-+ # Microsoft Visual C++.
-+ # hardcode_libdir_flag_spec is actually meaningless, as there is
-+ # no search path for DLLs.
-+ hardcode_libdir_flag_spec=' '
-+ allow_undefined_flag=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_From_new_cmds='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
-+ fix_srcfile_path='`cygpath -w "$srcfile"`'
-+ enable_shared_with_static_runtimes=yes
-+ ;;
-+
-+ darwin* | rhapsody*)
-+ case $host_os in
-+ rhapsody* | darwin1.[012])
-+ allow_undefined_flag='${wl}-undefined ${wl}suppress'
-+ ;;
-+ *) # Darwin 1.3 on
-+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ else
-+ case ${MACOSX_DEPLOYMENT_TARGET} in
-+ 10.[012])
-+ allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ ;;
-+ 10.*)
-+ allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+ esac
-+ archive_cmds_need_lc=no
-+ hardcode_direct=no
-+ hardcode_automatic=yes
-+ hardcode_shlibpath_var=unsupported
-+ whole_archive_flag_spec=''
-+ link_all_deplibs=yes
-+ if test "$GCC" = yes ; then
-+ output_verbose_link_cmd='echo'
-+ archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ else
-+ case $cc_basename in
-+ xlc*)
-+ output_verbose_link_cmd='echo'
-+ archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-+ module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ ;;
-+ *)
-+ ld_shlibs=no
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ dgux*)
-+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec='-L$libdir'
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ freebsd1*)
-+ ld_shlibs=no
-+ ;;
-+
-+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-+ # support. Future versions do this automatically, but an explicit c++rt0.o
-+ # does not break anything, and helps significantly (at the cost of a little
-+ # extra space).
-+ freebsd2.2*)
-+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-+ hardcode_libdir_flag_spec='-R$libdir'
-+ hardcode_direct=yes
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-+ freebsd2*)
-+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct=yes
-+ hardcode_minus_L=yes
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -8276,13 +8257,22 @@
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+- freebsd* | kfreebsd*-gnu | dragonfly*)
+ freebsd* | dragonfly*)
-+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec='-R$libdir'
-+ hardcode_direct=yes
-+ hardcode_shlibpath_var=no
-+ ;;
-+
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # GNU/kFreeBSD uses gcc -shared to do shared libraries.
+ kfreebsd*-gnu)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
@@ -61253,787 +2375,55 @@
+ link_all_deplibs=no
+ ;;
+
-+ hpux9*)
-+ if test "$GCC" = yes; then
-+ archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ else
-+ archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ fi
-+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator=:
-+ hardcode_direct=yes
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L=yes
-+ export_dynamic_flag_spec='${wl}-E'
-+ ;;
-+
-+ hpux10*)
-+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-+ fi
-+ if test "$with_gnu_ld" = no; then
-+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator=:
-+
-+ hardcode_direct=yes
-+ export_dynamic_flag_spec='${wl}-E'
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L=yes
-+ fi
-+ ;;
-+
-+ hpux11*)
-+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-+ case $host_cpu in
-+ hppa*64*)
-+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ ia64*)
-+ archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ else
-+ case $host_cpu in
-+ hppa*64*)
-+ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ ia64*)
-+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ fi
-+ if test "$with_gnu_ld" = no; then
-+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator=:
-+
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ hardcode_libdir_flag_spec_ld='+b $libdir'
-+ hardcode_direct=no
-+ hardcode_shlibpath_var=no
-+ ;;
-+ *)
-+ hardcode_direct=yes
-+ export_dynamic_flag_spec='${wl}-E'
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L=yes
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ irix5* | irix6* | nonstopux*)
-+ if test "$GCC" = yes; then
-+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ hardcode_libdir_flag_spec_ld='-rpath $libdir'
-+ fi
-+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator=:
-+ link_all_deplibs=yes
-+ ;;
-+
+ hpux9*)
+ if test "$GCC" = yes; then
+ archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+@@ -8378,7 +8368,7 @@
+ link_all_deplibs=yes
+ ;;
+
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
-+ else
-+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
-+ fi
-+ hardcode_libdir_flag_spec='-R$libdir'
-+ hardcode_direct=yes
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ newsos6)
-+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct=yes
-+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator=:
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ openbsd*)
-+ hardcode_direct=yes
-+ hardcode_shlibpath_var=no
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-+ export_dynamic_flag_spec='${wl}-E'
-+ else
-+ case $host_os in
-+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec='-R$libdir'
-+ ;;
-+ *)
-+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ os2*)
-+ hardcode_libdir_flag_spec='-L$libdir'
-+ hardcode_minus_L=yes
-+ allow_undefined_flag=unsupported
-+ archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-+ old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-+ ;;
-+
-+ osf3*)
-+ if test "$GCC" = yes; then
-+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ allow_undefined_flag=' -expect_unresolved \*'
-+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ fi
-+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator=:
-+ ;;
-+
-+ osf4* | osf5*) # as osf3* with the addition of -msym flag
-+ if test "$GCC" = yes; then
-+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+ else
-+ allow_undefined_flag=' -expect_unresolved \*'
-+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-+
-+ # Both c and cxx compiler support -rpath directly
-+ hardcode_libdir_flag_spec='-rpath $libdir'
-+ fi
-+ hardcode_libdir_separator=:
-+ ;;
-+
-+ solaris*)
-+ no_undefined_flag=' -z text'
-+ if test "$GCC" = yes; then
-+ wlarc='${wl}'
-+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-+ else
-+ wlarc=''
-+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
-+ fi
-+ hardcode_libdir_flag_spec='-R$libdir'
-+ hardcode_shlibpath_var=no
-+ case $host_os in
-+ solaris2.[0-5] | solaris2.[0-5].*) ;;
-+ *)
-+ # The compiler driver will combine linker options so we
-+ # cannot just pass the convience library names through
-+ # without $wl, iff we do not link with $LD.
-+ # Luckily, gcc supports the same syntax we need for Sun Studio.
-+ # Supported since Solaris 2.6 (maybe 2.5.1?)
-+ case $wlarc in
-+ '')
-+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
-+ *)
-+ whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
-+ esac ;;
-+ esac
-+ link_all_deplibs=yes
-+ ;;
-+
-+ sunos4*)
-+ if test "x$host_vendor" = xsequent; then
-+ # Use $CC to link under sequent, because it throws in some extra .o
-+ # files that make .init and .fini sections work.
-+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-+ fi
-+ hardcode_libdir_flag_spec='-L$libdir'
-+ hardcode_direct=yes
-+ hardcode_minus_L=yes
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ sysv4)
-+ case $host_vendor in
-+ sni)
-+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct=yes # is this really true???
-+ ;;
-+ siemens)
-+ ## LD is ld it makes a PLAMLIB
-+ ## CC just makes a GrossModule.
-+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-+ reload_cmds='$CC -r -o $output$reload_objs'
-+ hardcode_direct=no
-+ ;;
-+ motorola)
-+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-+ ;;
-+ esac
-+ runpath_var='LD_RUN_PATH'
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ sysv4.3*)
-+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_shlibpath_var=no
-+ export_dynamic_flag_spec='-Bexport'
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_shlibpath_var=no
-+ runpath_var=LD_RUN_PATH
-+ hardcode_runpath_var=yes
-+ ld_shlibs=yes
-+ fi
-+ ;;
-+
-+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
-+ no_undefined_flag='${wl}-z,text'
-+ archive_cmds_need_lc=no
-+ hardcode_shlibpath_var=no
-+ runpath_var='LD_RUN_PATH'
-+
-+ if test "$GCC" = yes; then
-+ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ fi
-+ ;;
-+
-+ sysv5* | sco3.2v5* | sco5v6*)
-+ # Note: We can NOT use -z defs as we might desire, because we do not
-+ # link with -lc, and that would cause any symbols used from libc to
-+ # always be unresolved, which means just about no library would
-+ # ever link correctly. If we're not using GNU ld we use -z text
-+ # though, which does catch some bad symbols but isn't as heavy-handed
-+ # as -z defs.
-+ no_undefined_flag='${wl}-z,text'
-+ allow_undefined_flag='${wl}-z,nodefs'
-+ archive_cmds_need_lc=no
-+ hardcode_shlibpath_var=no
-+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-+ hardcode_libdir_separator=':'
-+ link_all_deplibs=yes
-+ export_dynamic_flag_spec='${wl}-Bexport'
-+ runpath_var='LD_RUN_PATH'
-+
-+ if test "$GCC" = yes; then
-+ archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ fi
-+ ;;
-+
-+ uts4*)
-+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec='-L$libdir'
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-+ *)
-+ ld_shlibs=no
-+ ;;
-+ esac
-+ fi
-+
-+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-+echo "${ECHO_T}$ld_shlibs" >&6
-+test "$ld_shlibs" = no && can_build_shared=no
-+
-+#
-+# Do we need to explicitly link libc?
-+#
-+case "x$archive_cmds_need_lc" in
-+x|xyes)
-+ # Assume -lc should be added
-+ archive_cmds_need_lc=yes
-+
-+ if test "$enable_shared" = yes && test "$GCC" = yes; then
-+ case $archive_cmds in
-+ *'~'*)
-+ # FIXME: we may have to deal with multi-command sequences.
-+ ;;
-+ '$CC '*)
-+ # Test whether the compiler implicitly links with -lc since on some
-+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
-+ # to ld, don't add -lc before -lgcc.
-+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-+ $rm conftest*
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } 2>conftest.err; then
-+ soname=conftest
-+ lib=conftest
-+ libobjs=conftest.$ac_objext
-+ deplibs=
-+ wl=$lt_prog_compiler_wl
-+ pic_flag=$lt_prog_compiler_pic
-+ compiler_flags=-v
-+ linker_flags=-v
-+ verstring=
-+ output_objdir=.
-+ libname=conftest
-+ lt_save_allow_undefined_flag=$allow_undefined_flag
-+ allow_undefined_flag=
-+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-+ (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+ then
-+ archive_cmds_need_lc=no
-+ else
-+ archive_cmds_need_lc=yes
-+ fi
-+ allow_undefined_flag=$lt_save_allow_undefined_flag
-+ else
-+ cat conftest.err 1>&5
-+ fi
-+ $rm conftest*
-+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
-+echo "${ECHO_T}$archive_cmds_need_lc" >&6
-+ ;;
-+ esac
-+ fi
-+ ;;
-+esac
-+
-+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-+library_names_spec=
-+libname_spec='lib$name'
-+soname_spec=
-+shrext_cmds=".so"
-+postinstall_cmds=
-+postuninstall_cmds=
-+finish_cmds=
-+finish_eval=
-+shlibpath_var=
-+shlibpath_overrides_runpath=unknown
-+version_type=none
-+dynamic_linker="$host_os ld.so"
-+sys_lib_dlsearch_path_spec="/lib /usr/lib"
-+if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
-+ # if the path contains ";" then we assume it to be the separator
-+ # otherwise default to the standard path separator (i.e. ":") - it is
-+ # assumed that no part of a normal pathname contains ";" but that should
-+ # okay in the real world where ";" in dirpaths is itself problematic.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+else
-+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-+fi
-+need_lib_prefix=unknown
-+hardcode_into_libs=no
-+
-+# when you set need_version to no, make sure it does not cause -set_version
-+# flags to be left without arguments
-+need_version=unknown
-+
-+case $host_os in
-+aix3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-+ shlibpath_var=LIBPATH
-+
-+ # AIX 3 has no versioning support, so we append a major version to the name.
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+
-+aix4* | aix5*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ hardcode_into_libs=yes
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 supports IA64
-+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ else
-+ # With GCC up to 2.95.x, collect2 would create an import file
-+ # for dependence libraries. The import file would start with
-+ # the line `#! .'. This would cause the generated library to
-+ # depend on `.', always an invalid library. This was fixed in
-+ # development snapshots of GCC prior to 3.0.
-+ case $host_os in
-+ aix4 | aix4.[01] | aix4.[01].*)
-+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-+ echo ' yes '
-+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
-+ :
-+ else
-+ can_build_shared=no
-+ fi
-+ ;;
-+ esac
-+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-+ # soname into executable. Probably we can add versioning support to
-+ # collect2, so additional links can be useful in future.
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-+ # instead of lib<name>.a to let people know that these are not
-+ # typical AIX shared libraries.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ else
-+ # We preserve .a as extension for shared libraries through AIX4.2
-+ # and later when we are not doing run time linking.
-+ library_names_spec='${libname}${release}.a $libname.a'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ fi
-+ shlibpath_var=LIBPATH
-+ fi
-+ ;;
-+
-+amigaos*)
-+ library_names_spec='$libname.ixlibrary $libname.a'
-+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
-+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-+ ;;
-+
-+beos*)
-+ library_names_spec='${libname}${shared_ext}'
-+ dynamic_linker="$host_os ld.so"
-+ shlibpath_var=LIBRARY_PATH
-+ ;;
-+
-+bsdi[45]*)
-+ version_type=linux
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-+ # the default ld.so.conf also contains /usr/contrib/lib and
-+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-+ # libtool to hard-code these into programs
-+ ;;
-+
-+cygwin* | mingw* | pw32*)
-+ version_type=windows
-+ shrext_cmds=".dll"
-+ need_version=no
-+ need_lib_prefix=no
-+
-+ case $GCC,$host_os in
-+ yes,cygwin* | yes,mingw* | yes,pw32*)
-+ library_names_spec='$libname.dll.a'
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname~
-+ chmod a+x \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $rm \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+
-+ case $host_os in
-+ cygwin*)
-+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-+ ;;
-+ mingw*)
-+ # MinGW DLLs use traditional 'lib' prefix
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH printed by
-+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
-+ # path with ; separators, and with drive letters. We can handle the
-+ # drive letters (cygwin fileutils understands them), so leave them,
-+ # especially as we might pass files found there to a mingw objdump,
-+ # which wouldn't understand a cygwinified path. Ahh.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ ;;
-+ pw32*)
-+ # pw32 DLLs use 'pw' prefix rather than 'lib'
-+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ ;;
-+ esac
-+ dynamic_linker='Win32 ld.exe'
-+ # FIXME: first we should search . and the directory the executable is in
-+ shlibpath_var=PATH
-+ ;;
-+
-+darwin* | rhapsody*)
-+ dynamic_linker="$host_os dyld"
-+ version_type=darwin
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-+ soname_spec='${libname}${release}${major}$shared_ext'
-+ shlibpath_overrides_runpath=yes
-+ shlibpath_var=DYLD_LIBRARY_PATH
-+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-+ if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-+ else
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-+ ;;
-+
-+dgux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+freebsd1*)
-+ dynamic_linker=no
-+ ;;
-+
-+kfreebsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+freebsd* | dragonfly*)
-+ # DragonFly does not have aout. When/if they implement a new
-+ # versioning mechanism, adjust this.
-+ if test -x /usr/bin/objformat; then
-+ objformat=`/usr/bin/objformat`
-+ else
-+ case $host_os in
-+ freebsd[123]*) objformat=aout ;;
-+ *) objformat=elf ;;
-+ esac
-+ fi
-+ version_type=freebsd-$objformat
-+ case $version_type in
-+ freebsd-elf*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ need_version=no
-+ need_lib_prefix=no
-+ ;;
-+ freebsd-*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-+ need_version=yes
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_os in
-+ freebsd2*)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ freebsd3.[01]* | freebsdelf3.[01]*)
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd*) # from 4.6 on
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ esac
-+ ;;
-+
-+gnu*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ ;;
-+
-+hpux9* | hpux10* | hpux11*)
-+ # Give a soname corresponding to the major version so that dld.sl refuses to
-+ # link against other versions.
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ case $host_cpu in
-+ ia64*)
-+ shrext_cmds='.so'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.so"
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ if test "X$HPUX_IA64_MODE" = X32; then
-+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-+ else
-+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-+ fi
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ hppa*64*)
-+ shrext_cmds='.sl'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ *)
-+ shrext_cmds='.sl'
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=SHLIB_PATH
-+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+ esac
-+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
-+ postinstall_cmds='chmod 555 $lib'
-+ ;;
-+
-+interix3*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+
-+irix5* | irix6* | nonstopux*)
-+ case $host_os in
-+ nonstopux*) version_type=nonstopux ;;
-+ *)
-+ if test "$lt_cv_prog_gnu_ld" = yes; then
-+ version_type=linux
-+ else
-+ version_type=irix
-+ fi ;;
-+ esac
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ case $host_os in
-+ irix5* | nonstopux*)
-+ libsuff= shlibsuff=
-+ ;;
-+ *)
-+ case $LD in # libtool.m4 will add one of these switches to LD
-+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-+ libsuff= shlibsuff= libmagic=32-bit;;
-+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-+ libsuff=32 shlibsuff=N32 libmagic=N32;;
-+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
-+ *) libsuff= shlibsuff= libmagic=never-match;;
-+ esac
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-+ hardcode_into_libs=yes
-+ ;;
-+
-+# No shared lib support for Linux oldld, aout, or coff.
-+linux*oldld* | linux*aout* | linux*coff*)
-+ dynamic_linker=no
-+ ;;
-+
-+# This must be Linux ELF.
-+linux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ # This implies no fast_install, which is unacceptable.
-+ # Some rework will be needed to allow for fast_install
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+@@ -9049,31 +9039,10 @@
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+- # find out which ABI we are using
+- libsuff=
+- case "$host_cpu" in
+- x86_64*|s390x*|powerpc64*)
+- echo '#line 9056 "configure"' > conftest.$ac_ext
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
+- case `/usr/bin/file conftest.$ac_objext` in
+- *64-bit*)
+- libsuff=64
+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+- ;;
+- esac
+- fi
+- rm -rf conftest*
+- ;;
+- esac
+-
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+ # powerpc, because MkLinux only supported shared libraries with the
-+ # GNU dynamic linker. Since this was broken with cross compilers,
-+ # most powerpc-linux boxes support dynamic linking these days and
-+ # people can always --disable-shared, the test was removed, and we
-+ # assume the GNU/Linux dynamic linker is in use.
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -9085,6 +9054,18 @@
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
@@ -62046,3959 +2436,213 @@
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
-+knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+netbsd*)
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ dynamic_linker='NetBSD (a.out) ld.so'
-+ else
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='NetBSD ld.elf_so'
-+ fi
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+
-+newsos6)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+nto-qnx*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+openbsd*)
-+ version_type=sunos
-+ sys_lib_dlsearch_path_spec="/usr/lib"
-+ need_lib_prefix=no
-+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-+ case $host_os in
-+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-+ *) need_version=no ;;
-+ esac
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ case $host_os in
-+ openbsd2.[89] | openbsd2.[89].*)
-+ shlibpath_overrides_runpath=no
-+ ;;
-+ *)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ esac
-+ else
-+ shlibpath_overrides_runpath=yes
-+ fi
-+ ;;
-+
-+os2*)
-+ libname_spec='$name'
-+ shrext_cmds=".dll"
-+ need_lib_prefix=no
-+ library_names_spec='$libname${shared_ext} $libname.a'
-+ dynamic_linker='OS/2 ld.exe'
-+ shlibpath_var=LIBPATH
-+ ;;
-+
-+osf3* | osf4* | osf5*)
-+ version_type=osf
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-+ ;;
-+
-+solaris*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ # ldd complains unless libraries are executable
-+ postinstall_cmds='chmod +x $lib'
-+ ;;
-+
-+sunos4*)
-+ version_type=sunos
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ if test "$with_gnu_ld" = yes; then
-+ need_lib_prefix=no
-+ fi
-+ need_version=yes
-+ ;;
-+
-+sysv4 | sysv4.3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_vendor in
-+ sni)
-+ shlibpath_overrides_runpath=no
-+ need_lib_prefix=no
-+ export_dynamic_flag_spec='${wl}-Blargedynsym'
-+ runpath_var=LD_RUN_PATH
-+ ;;
-+ siemens)
-+ need_lib_prefix=no
-+ ;;
-+ motorola)
-+ need_lib_prefix=no
-+ need_version=no
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-+ ;;
-+ esac
-+ ;;
-+
-+sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ version_type=linux
-+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-+ soname_spec='$libname${shared_ext}.$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ fi
-+ ;;
-+
-+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-+ version_type=freebsd-elf
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ if test "$with_gnu_ld" = yes; then
-+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-+ shlibpath_overrides_runpath=no
-+ else
-+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-+ shlibpath_overrides_runpath=yes
-+ case $host_os in
-+ sco3.2v5*)
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-+ ;;
-+ esac
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/lib'
-+ ;;
-+
-+uts4*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+*)
-+ dynamic_linker=no
-+ ;;
-+esac
-+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-+echo "${ECHO_T}$dynamic_linker" >&6
-+test "$dynamic_linker" = no && can_build_shared=no
-+
-+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-+if test "$GCC" = yes; then
-+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-+fi
-+
-+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-+hardcode_action=
-+if test -n "$hardcode_libdir_flag_spec" || \
-+ test -n "$runpath_var" || \
-+ test "X$hardcode_automatic" = "Xyes" ; then
-+
-+ # We can hardcode non-existant directories.
-+ if test "$hardcode_direct" != no &&
-+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
-+ # have to relink, otherwise we might link with an installed library
-+ # when we should be linking with a yet-to-be-installed one
-+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
-+ test "$hardcode_minus_L" != no; then
-+ # Linking always hardcodes the temporary library directory.
-+ hardcode_action=relink
-+ else
-+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
-+ hardcode_action=immediate
-+ fi
-+else
-+ # We cannot hardcode anything, or else we can only hardcode existing
-+ # directories.
-+ hardcode_action=unsupported
-+fi
-+echo "$as_me:$LINENO: result: $hardcode_action" >&5
-+echo "${ECHO_T}$hardcode_action" >&6
-+
-+if test "$hardcode_action" = relink; then
-+ # Fast installation is not supported
-+ enable_fast_install=no
-+elif test "$shlibpath_overrides_runpath" = yes ||
-+ test "$enable_shared" = no; then
-+ # Fast installation is not necessary
-+ enable_fast_install=needless
-+fi
-+
-+striplib=
-+old_striplib=
-+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
-+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
-+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
-+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+else
-+# FIXME - insert some real tests, host_os isn't really good enough
-+ case $host_os in
-+ darwin*)
-+ if test -n "$STRIP" ; then
-+ striplib="$STRIP -x"
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+ ;;
-+ *)
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+ ;;
-+ esac
-+fi
-+
-+if test "x$enable_dlopen" != xyes; then
-+ enable_dlopen=unknown
-+ enable_dlopen_self=unknown
-+ enable_dlopen_self_static=unknown
-+else
-+ lt_cv_dlopen=no
-+ lt_cv_dlopen_libs=
-+
-+ case $host_os in
-+ beos*)
-+ lt_cv_dlopen="load_add_on"
-+ lt_cv_dlopen_libs=
-+ lt_cv_dlopen_self=yes
-+ ;;
-+
-+ mingw* | pw32*)
-+ lt_cv_dlopen="LoadLibrary"
-+ lt_cv_dlopen_libs=
-+ ;;
-+
-+ cygwin*)
-+ lt_cv_dlopen="dlopen"
-+ lt_cv_dlopen_libs=
-+ ;;
-+
-+ darwin*)
-+ # if libdl is installed we need to link against it
-+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-ldl $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dlopen ();
-+int
-+main ()
-+{
-+dlopen ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+@@ -9410,8 +9391,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_dl_dlopen=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_dl_dlopen=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-+if test $ac_cv_lib_dl_dlopen = yes; then
-+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-+else
-+
-+ lt_cv_dlopen="dyld"
-+ lt_cv_dlopen_libs=
-+ lt_cv_dlopen_self=yes
-+
-+fi
-+
-+ ;;
-+
-+ *)
-+ echo "$as_me:$LINENO: checking for shl_load" >&5
-+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
-+if test "${ac_cv_func_shl_load+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define shl_load innocuous_shl_load
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char shl_load (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef shl_load
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char shl_load ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_shl_load) || defined (__stub___shl_load)
-+choke me
-+#else
-+char (*f) () = shl_load;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != shl_load;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -9514,8 +9494,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_shl_load=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_func_shl_load=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
-+if test $ac_cv_func_shl_load = yes; then
-+ lt_cv_dlopen="shl_load"
-+else
-+ echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
-+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-ldld $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char shl_load ();
-+int
-+main ()
-+{
-+shl_load ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -9580,8 +9559,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_dld_shl_load=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_dld_shl_load=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
-+if test $ac_cv_lib_dld_shl_load = yes; then
-+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
-+else
-+ echo "$as_me:$LINENO: checking for dlopen" >&5
-+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
-+if test "${ac_cv_func_dlopen+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define dlopen innocuous_dlopen
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char dlopen (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef dlopen
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dlopen ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_dlopen) || defined (__stub___dlopen)
-+choke me
-+#else
-+char (*f) () = dlopen;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != dlopen;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -9674,8 +9652,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_dlopen=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_func_dlopen=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
-+if test $ac_cv_func_dlopen = yes; then
-+ lt_cv_dlopen="dlopen"
-+else
-+ echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
-+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-ldl $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dlopen ();
-+int
-+main ()
-+{
-+dlopen ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -9740,8 +9717,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_dl_dlopen=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_dl_dlopen=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
-+if test $ac_cv_lib_dl_dlopen = yes; then
-+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-+else
-+ echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
-+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lsvld $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dlopen ();
-+int
-+main ()
-+{
-+dlopen ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -9807,8 +9783,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_svld_dlopen=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_svld_dlopen=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
-+if test $ac_cv_lib_svld_dlopen = yes; then
-+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-+else
-+ echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
-+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-ldld $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dld_link ();
-+int
-+main ()
-+{
-+dld_link ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -9874,8 +9849,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_dld_dld_link=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_dld_dld_link=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
-+if test $ac_cv_lib_dld_dld_link = yes; then
-+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
-+fi
-+
-+
-+fi
-+
-+
-+fi
-+
-+
-+fi
-+
-+
-+fi
-+
-+
-+fi
-+
-+ ;;
-+ esac
-+
-+ if test "x$lt_cv_dlopen" != xno; then
-+ enable_dlopen=yes
-+ else
-+ enable_dlopen=no
-+ fi
-+
-+ case $lt_cv_dlopen in
-+ dlopen)
-+ save_CPPFLAGS="$CPPFLAGS"
-+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-+
-+ save_LDFLAGS="$LDFLAGS"
-+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-+
-+ save_LIBS="$LIBS"
-+ LIBS="$lt_cv_dlopen_libs $LIBS"
-+
-+ echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
-+if test "${lt_cv_dlopen_self+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$cross_compiling" = yes; then :
-+ lt_cv_dlopen_self=cross
-+else
-+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-+ lt_status=$lt_dlunknown
-+ cat > conftest.$ac_ext <<EOF
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -9950,7 +9924,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+-#line 9953 "configure"
+#line 9927 "configure"
-+#include "confdefs.h"
-+
-+#if HAVE_DLFCN_H
-+#include <dlfcn.h>
-+#endif
-+
-+#include <stdio.h>
-+
-+#ifdef RTLD_GLOBAL
-+# define LT_DLGLOBAL RTLD_GLOBAL
-+#else
-+# ifdef DL_GLOBAL
-+# define LT_DLGLOBAL DL_GLOBAL
-+# else
-+# define LT_DLGLOBAL 0
-+# endif
-+#endif
-+
-+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-+ find out it does not work in some platform. */
-+#ifndef LT_DLLAZY_OR_NOW
-+# ifdef RTLD_LAZY
-+# define LT_DLLAZY_OR_NOW RTLD_LAZY
-+# else
-+# ifdef DL_LAZY
-+# define LT_DLLAZY_OR_NOW DL_LAZY
-+# else
-+# ifdef RTLD_NOW
-+# define LT_DLLAZY_OR_NOW RTLD_NOW
-+# else
-+# ifdef DL_NOW
-+# define LT_DLLAZY_OR_NOW DL_NOW
-+# else
-+# define LT_DLLAZY_OR_NOW 0
-+# endif
-+# endif
-+# endif
-+# endif
-+#endif
-+
-+#ifdef __cplusplus
-+extern "C" void exit (int);
-+#endif
-+
-+void fnord() { int i=42;}
-+int main ()
-+{
-+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-+ int status = $lt_dlunknown;
-+
-+ if (self)
-+ {
-+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
-+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-+ /* dlclose (self); */
-+ }
-+ else
-+ puts (dlerror ());
-+
-+ exit (status);
-+}
-+EOF
-+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-+ (./conftest; exit; ) >&5 2>/dev/null
-+ lt_status=$?
-+ case x$lt_status in
-+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
-+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
-+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
-+ esac
-+ else :
-+ # compilation failed
-+ lt_cv_dlopen_self=no
-+ fi
-+fi
-+rm -fr conftest*
-+
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
-+
-+ if test "x$lt_cv_dlopen_self" = xyes; then
-+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-+ echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
-+if test "${lt_cv_dlopen_self_static+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$cross_compiling" = yes; then :
-+ lt_cv_dlopen_self_static=cross
-+else
-+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-+ lt_status=$lt_dlunknown
-+ cat > conftest.$ac_ext <<EOF
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10050,7 +10024,7 @@
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+-#line 10053 "configure"
+#line 10027 "configure"
-+#include "confdefs.h"
-+
-+#if HAVE_DLFCN_H
-+#include <dlfcn.h>
-+#endif
-+
-+#include <stdio.h>
-+
-+#ifdef RTLD_GLOBAL
-+# define LT_DLGLOBAL RTLD_GLOBAL
-+#else
-+# ifdef DL_GLOBAL
-+# define LT_DLGLOBAL DL_GLOBAL
-+# else
-+# define LT_DLGLOBAL 0
-+# endif
-+#endif
-+
-+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
-+ find out it does not work in some platform. */
-+#ifndef LT_DLLAZY_OR_NOW
-+# ifdef RTLD_LAZY
-+# define LT_DLLAZY_OR_NOW RTLD_LAZY
-+# else
-+# ifdef DL_LAZY
-+# define LT_DLLAZY_OR_NOW DL_LAZY
-+# else
-+# ifdef RTLD_NOW
-+# define LT_DLLAZY_OR_NOW RTLD_NOW
-+# else
-+# ifdef DL_NOW
-+# define LT_DLLAZY_OR_NOW DL_NOW
-+# else
-+# define LT_DLLAZY_OR_NOW 0
-+# endif
-+# endif
-+# endif
-+# endif
-+#endif
-+
-+#ifdef __cplusplus
-+extern "C" void exit (int);
-+#endif
-+
-+void fnord() { int i=42;}
-+int main ()
-+{
-+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
-+ int status = $lt_dlunknown;
-+
-+ if (self)
-+ {
-+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
-+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
-+ /* dlclose (self); */
-+ }
-+ else
-+ puts (dlerror ());
-+
-+ exit (status);
-+}
-+EOF
-+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
-+ (./conftest; exit; ) >&5 2>/dev/null
-+ lt_status=$?
-+ case x$lt_status in
-+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
-+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
-+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
-+ esac
-+ else :
-+ # compilation failed
-+ lt_cv_dlopen_self_static=no
-+ fi
-+fi
-+rm -fr conftest*
-+
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
-+ fi
-+
-+ CPPFLAGS="$save_CPPFLAGS"
-+ LDFLAGS="$save_LDFLAGS"
-+ LIBS="$save_LIBS"
-+ ;;
-+ esac
-+
-+ case $lt_cv_dlopen_self in
-+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-+ *) enable_dlopen_self=unknown ;;
-+ esac
-+
-+ case $lt_cv_dlopen_self_static in
-+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-+ *) enable_dlopen_self_static=unknown ;;
-+ esac
-+fi
-+
-+
-+# Report which library types will actually be built
-+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
-+echo "$as_me:$LINENO: result: $can_build_shared" >&5
-+echo "${ECHO_T}$can_build_shared" >&6
-+
-+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
-+test "$can_build_shared" = "no" && enable_shared=no
-+
-+# On AIX, shared libraries and static libraries use the same namespace, and
-+# are all built from PIC.
-+case $host_os in
-+aix3*)
-+ test "$enable_shared" = yes && enable_static=no
-+ if test -n "$RANLIB"; then
-+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
-+ postinstall_cmds='$RANLIB $lib'
-+ fi
-+ ;;
-+
-+aix4* | aix5*)
-+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-+ test "$enable_shared" = yes && enable_static=no
-+ fi
-+ ;;
-+esac
-+echo "$as_me:$LINENO: result: $enable_shared" >&5
-+echo "${ECHO_T}$enable_shared" >&6
-+
-+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
-+# Make sure either enable_shared or enable_static is yes.
-+test "$enable_shared" = yes || enable_static=yes
-+echo "$as_me:$LINENO: result: $enable_static" >&5
-+echo "${ECHO_T}$enable_static" >&6
-+
-+# The else clause should only fire when bootstrapping the
-+# libtool distribution, otherwise you forgot to ship ltmain.sh
-+# with your package, and you will get complaints that there are
-+# no rules to generate ltmain.sh.
-+if test -f "$ltmain"; then
-+ # See if we are running on zsh, and set the options which allow our commands through
-+ # without removal of \ escapes.
-+ if test -n "${ZSH_VERSION+set}" ; then
-+ setopt NO_GLOB_SUBST
-+ fi
-+ # Now quote all the things that may contain metacharacters while being
-+ # careful not to overquote the AC_SUBSTed values. We take copies of the
-+ # variables and quote the copies for generation of the libtool script.
-+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-+ SED SHELL STRIP \
-+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-+ deplibs_check_method reload_flag reload_cmds need_locks \
-+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-+ lt_cv_sys_global_symbol_to_c_name_address \
-+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-+ old_postinstall_cmds old_postuninstall_cmds \
-+ compiler \
-+ CC \
-+ LD \
-+ lt_prog_compiler_wl \
-+ lt_prog_compiler_pic \
-+ lt_prog_compiler_static \
-+ lt_prog_compiler_no_builtin_flag \
-+ export_dynamic_flag_spec \
-+ thread_safe_flag_spec \
-+ whole_archive_flag_spec \
-+ enable_shared_with_static_runtimes \
-+ old_archive_cmds \
-+ old_archive_from_new_cmds \
-+ predep_objects \
-+ postdep_objects \
-+ predeps \
-+ postdeps \
-+ compiler_lib_search_path \
-+ archive_cmds \
-+ archive_expsym_cmds \
-+ postinstall_cmds \
-+ postuninstall_cmds \
-+ old_archive_from_expsyms_cmds \
-+ allow_undefined_flag \
-+ no_undefined_flag \
-+ export_symbols_cmds \
-+ hardcode_libdir_flag_spec \
-+ hardcode_libdir_flag_spec_ld \
-+ hardcode_libdir_separator \
-+ hardcode_automatic \
-+ module_cmds \
-+ module_expsym_cmds \
-+ lt_cv_prog_compiler_c_o \
-+ exclude_expsyms \
-+ include_expsyms; do
-+
-+ case $var in
-+ old_archive_cmds | \
-+ old_archive_from_new_cmds | \
-+ archive_cmds | \
-+ archive_expsym_cmds | \
-+ module_cmds | \
-+ module_expsym_cmds | \
-+ old_archive_from_expsyms_cmds | \
-+ export_symbols_cmds | \
-+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
-+ postinstall_cmds | postuninstall_cmds | \
-+ old_postinstall_cmds | old_postuninstall_cmds | \
-+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-+ # Double-quote double-evaled strings.
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-+ ;;
-+ *)
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-+ ;;
-+ esac
-+ done
-+
-+ case $lt_echo in
-+ *'\$0 --fallback-echo"')
-+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-+ ;;
-+ esac
-+
-+cfgfile="${ofile}T"
-+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-+ $rm -f "$cfgfile"
-+ { echo "$as_me:$LINENO: creating $ofile" >&5
-+echo "$as_me: creating $ofile" >&6;}
-+
-+ cat <<__EOF__ >> "$cfgfile"
-+#! $SHELL
-+
-+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-+#
-+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
-+# Free Software Foundation, Inc.
-+#
-+# This file is part of GNU Libtool:
-+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-+#
-+# 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 2 of the License, or
-+# (at your option) 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, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+#
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+# A sed program that does not truncate output.
-+SED=$lt_SED
-+
-+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-+Xsed="$SED -e 1s/^X//"
-+
-+# The HP-UX ksh and POSIX shell print the target directory to stdout
-+# if CDPATH is set.
-+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-+
-+# The names of the tagged configurations supported by this script.
-+available_tags=
-+
-+# ### BEGIN LIBTOOL CONFIG
-+
-+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-+
-+# Shell to use when invoking shell scripts.
-+SHELL=$lt_SHELL
-+
-+# Whether or not to build shared libraries.
-+build_libtool_libs=$enable_shared
-+
-+# Whether or not to build static libraries.
-+build_old_libs=$enable_static
-+
-+# Whether or not to add -lc for building shared libraries.
-+build_libtool_need_lc=$archive_cmds_need_lc
-+
-+# Whether or not to disallow shared libs when runtime libs are static
-+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
-+
-+# Whether or not to optimize for fast installation.
-+fast_install=$enable_fast_install
-+
-+# The host system.
-+host_alias=$host_alias
-+host=$host
-+host_os=$host_os
-+
-+# The build system.
-+build_alias=$build_alias
-+build=$build
-+build_os=$build_os
-+
-+# An echo program that does not interpret backslashes.
-+echo=$lt_echo
-+
-+# The archiver.
-+AR=$lt_AR
-+AR_FLAGS=$lt_AR_FLAGS
-+
-+# A C compiler.
-+LTCC=$lt_LTCC
-+
-+# LTCC compiler flags.
-+LTCFLAGS=$lt_LTCFLAGS
-+
-+# A language-specific compiler.
-+CC=$lt_compiler
-+
-+# Is the compiler the GNU C compiler?
-+with_gcc=$GCC
-+
-+# An ERE matcher.
-+EGREP=$lt_EGREP
-+
-+# The linker used to build libraries.
-+LD=$lt_LD
-+
-+# Whether we need hard or soft links.
-+LN_S=$lt_LN_S
-+
-+# A BSD-compatible nm program.
-+NM=$lt_NM
-+
-+# A symbol stripping program
-+STRIP=$lt_STRIP
-+
-+# Used to examine libraries when file_magic_cmd begins "file"
-+MAGIC_CMD=$MAGIC_CMD
-+
-+# Used on cygwin: DLL creation program.
-+DLLTOOL="$DLLTOOL"
-+
-+# Used on cygwin: object dumper.
-+OBJDUMP="$OBJDUMP"
-+
-+# Used on cygwin: assembler.
-+AS="$AS"
-+
-+# The name of the directory that contains temporary libtool files.
-+objdir=$objdir
-+
-+# How to create reloadable object files.
-+reload_flag=$lt_reload_flag
-+reload_cmds=$lt_reload_cmds
-+
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl
-+
-+# Object file suffix (normally "o").
-+objext="$ac_objext"
-+
-+# Old archive suffix (normally "a").
-+libext="$libext"
-+
-+# Shared library suffix (normally ".so").
-+shrext_cmds='$shrext_cmds'
-+
-+# Executable file suffix (normally "").
-+exeext="$exeext"
-+
-+# Additional compiler flags for building library objects.
-+pic_flag=$lt_lt_prog_compiler_pic
-+pic_mode=$pic_mode
-+
-+# What is the maximum length of a command?
-+max_cmd_len=$lt_cv_sys_max_cmd_len
-+
-+# Does compiler simultaneously support -c and -o options?
-+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-+
-+# Must we lock files when doing compilation?
-+need_locks=$lt_need_locks
-+
-+# Do we need the lib prefix for modules?
-+need_lib_prefix=$need_lib_prefix
-+
-+# Do we need a version for libraries?
-+need_version=$need_version
-+
-+# Whether dlopen is supported.
-+dlopen_support=$enable_dlopen
-+
-+# Whether dlopen of programs is supported.
-+dlopen_self=$enable_dlopen_self
-+
-+# Whether dlopen of statically linked programs is supported.
-+dlopen_self_static=$enable_dlopen_self_static
-+
-+# Compiler flag to prevent dynamic linking.
-+link_static_flag=$lt_lt_prog_compiler_static
-+
-+# Compiler flag to turn off builtin functions.
-+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-+
-+# Compiler flag to allow reflexive dlopens.
-+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
-+
-+# Compiler flag to generate shared objects directly from archives.
-+whole_archive_flag_spec=$lt_whole_archive_flag_spec
-+
-+# Compiler flag to generate thread-safe objects.
-+thread_safe_flag_spec=$lt_thread_safe_flag_spec
-+
-+# Library versioning type.
-+version_type=$version_type
-+
-+# Format of library name prefix.
-+libname_spec=$lt_libname_spec
-+
-+# List of archive names. First name is the real one, the rest are links.
-+# The last name is the one that the linker finds with -lNAME.
-+library_names_spec=$lt_library_names_spec
-+
-+# The coded name of the library, if different from the real name.
-+soname_spec=$lt_soname_spec
-+
-+# Commands used to build and install an old-style archive.
-+RANLIB=$lt_RANLIB
-+old_archive_cmds=$lt_old_archive_cmds
-+old_postinstall_cmds=$lt_old_postinstall_cmds
-+old_postuninstall_cmds=$lt_old_postuninstall_cmds
-+
-+# Create an old-style archive from a shared archive.
-+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
-+
-+# Create a temporary old-style archive to link instead of a shared archive.
-+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
-+
-+# Commands used to build and install a shared archive.
-+archive_cmds=$lt_archive_cmds
-+archive_expsym_cmds=$lt_archive_expsym_cmds
-+postinstall_cmds=$lt_postinstall_cmds
-+postuninstall_cmds=$lt_postuninstall_cmds
-+
-+# Commands used to build a loadable module (assumed same as above if empty)
-+module_cmds=$lt_module_cmds
-+module_expsym_cmds=$lt_module_expsym_cmds
-+
-+# Commands to strip libraries.
-+old_striplib=$lt_old_striplib
-+striplib=$lt_striplib
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predep_objects=$lt_predep_objects
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdep_objects=$lt_postdep_objects
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predeps=$lt_predeps
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdeps=$lt_postdeps
-+
-+# The library search path used internally by the compiler when linking
-+# a shared library.
-+compiler_lib_search_path=$lt_compiler_lib_search_path
-+
-+# Method to check whether dependent libraries are shared objects.
-+deplibs_check_method=$lt_deplibs_check_method
-+
-+# Command to use when deplibs_check_method == file_magic.
-+file_magic_cmd=$lt_file_magic_cmd
-+
-+# Flag that allows shared libraries with undefined symbols to be built.
-+allow_undefined_flag=$lt_allow_undefined_flag
-+
-+# Flag that forces no undefined symbols.
-+no_undefined_flag=$lt_no_undefined_flag
-+
-+# Commands used to finish a libtool library installation in a directory.
-+finish_cmds=$lt_finish_cmds
-+
-+# Same as above, but a single script fragment to be evaled but not shown.
-+finish_eval=$lt_finish_eval
-+
-+# Take the output of nm and produce a listing of raw symbols and C names.
-+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-+
-+# Transform the output of nm in a proper C declaration
-+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-+
-+# Transform the output of nm in a C name address pair
-+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-+
-+# This is the shared library runtime path variable.
-+runpath_var=$runpath_var
-+
-+# This is the shared library path variable.
-+shlibpath_var=$shlibpath_var
-+
-+# Is shlibpath searched before the hard-coded library search path?
-+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-+
-+# How to hardcode a shared library path into an executable.
-+hardcode_action=$hardcode_action
-+
-+# Whether we should hardcode library paths into libraries.
-+hardcode_into_libs=$hardcode_into_libs
-+
-+# Flag to hardcode \$libdir into a binary during linking.
-+# This must work even if \$libdir does not exist.
-+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
-+
-+# If ld is used when linking, flag to hardcode \$libdir into
-+# a binary during linking. This must work even if \$libdir does
-+# not exist.
-+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-+
-+# Whether we need a single -rpath flag with a separated argument.
-+hardcode_libdir_separator=$lt_hardcode_libdir_separator
-+
-+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_direct=$hardcode_direct
-+
-+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_minus_L=$hardcode_minus_L
-+
-+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-+# the resulting binary.
-+hardcode_shlibpath_var=$hardcode_shlibpath_var
-+
-+# Set to yes if building a shared library automatically hardcodes DIR into the library
-+# and all subsequent libraries and executables linked against it.
-+hardcode_automatic=$hardcode_automatic
-+
-+# Variables whose values should be saved in libtool wrapper scripts and
-+# restored at relink time.
-+variables_saved_for_relink="$variables_saved_for_relink"
-+
-+# Whether libtool must link a program against all its dependency libraries.
-+link_all_deplibs=$link_all_deplibs
-+
-+# Compile-time system search path for libraries
-+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-+
-+# Run-time system search path for libraries
-+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-+
-+# Fix the shell variable \$srcfile for the compiler.
-+fix_srcfile_path="$fix_srcfile_path"
-+
-+# Set to yes if exported symbols are required.
-+always_export_symbols=$always_export_symbols
-+
-+# The commands to list exported symbols.
-+export_symbols_cmds=$lt_export_symbols_cmds
-+
-+# The commands to extract the exported symbol list from a shared archive.
-+extract_expsyms_cmds=$lt_extract_expsyms_cmds
-+
-+# Symbols that should not be listed in the preloaded symbols.
-+exclude_expsyms=$lt_exclude_expsyms
-+
-+# Symbols that must always be exported.
-+include_expsyms=$lt_include_expsyms
-+
-+# ### END LIBTOOL CONFIG
-+
-+__EOF__
-+
-+
-+ case $host_os in
-+ aix3*)
-+ cat <<\EOF >> "$cfgfile"
-+
-+# AIX sometimes has problems with the GCC collect2 program. For some
-+# reason, if we set the COLLECT_NAMES environment variable, the problems
-+# vanish in a puff of smoke.
-+if test "X${COLLECT_NAMES+set}" != Xset; then
-+ COLLECT_NAMES=
-+ export COLLECT_NAMES
-+fi
-+EOF
-+ ;;
-+ esac
-+
-+ # We use sed instead of cat because bash on DJGPP gets confused if
-+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
-+ # text mode, it properly converts lines to CR/LF. This bash problem
-+ # is reportedly fixed, but why not run on old versions too?
-+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
-+
-+ mv -f "$cfgfile" "$ofile" || \
-+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
-+ chmod +x "$ofile"
-+
-+else
-+ # If there is no Makefile yet, we rely on a make rule to execute
-+ # `config.status --recheck' to rerun these tests and create the
-+ # libtool script then.
-+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-+ if test -f "$ltmain_in"; then
-+ test -f Makefile && make "$ltmain"
-+ fi
-+fi
-+
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+CC="$lt_save_CC"
-+
-+
-+# Check whether --with-tags or --without-tags was given.
-+if test "${with_tags+set}" = set; then
-+ withval="$with_tags"
-+ tagnames="$withval"
-+fi;
-+
-+if test -f "$ltmain" && test -n "$tagnames"; then
-+ if test ! -f "${ofile}"; then
-+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
-+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
-+ fi
-+
-+ if test -z "$LTCC"; then
-+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
-+ if test -z "$LTCC"; then
-+ { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
-+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
-+ else
-+ { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
-+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
-+ fi
-+ fi
-+ if test -z "$LTCFLAGS"; then
-+ eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
-+ fi
-+
-+ # Extract list of available tagged configurations in $ofile.
-+ # Note that this assumes the entire list is on one line.
-+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-+
-+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-+ for tagname in $tagnames; do
-+ IFS="$lt_save_ifs"
-+ # Check whether tagname contains only valid characters
-+ case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
-+ "") ;;
-+ *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
-+echo "$as_me: error: invalid tag name: $tagname" >&2;}
-+ { (exit 1); exit 1; }; }
-+ ;;
-+ esac
-+
-+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
-+ then
-+ { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
-+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+
-+ # Update the list of available tags.
-+ if test -n "$tagname"; then
-+ echo appending configuration tag \"$tagname\" to $ofile
-+
-+ case $tagname in
-+ CXX)
-+ if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-+ (test "X$CXX" != "Xg++"))) ; then
-+ ac_ext=cc
-+ac_cpp='$CXXCPP $CPPFLAGS'
-+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-+
-+
-+
-+
-+archive_cmds_need_lc_CXX=no
-+allow_undefined_flag_CXX=
-+always_export_symbols_CXX=no
-+archive_expsym_cmds_CXX=
-+export_dynamic_flag_spec_CXX=
-+hardcode_direct_CXX=no
-+hardcode_libdir_flag_spec_CXX=
-+hardcode_libdir_flag_spec_ld_CXX=
-+hardcode_libdir_separator_CXX=
-+hardcode_minus_L_CXX=no
-+hardcode_shlibpath_var_CXX=unsupported
-+hardcode_automatic_CXX=no
-+module_cmds_CXX=
-+module_expsym_cmds_CXX=
-+link_all_deplibs_CXX=unknown
-+old_archive_cmds_CXX=$old_archive_cmds
-+no_undefined_flag_CXX=
-+whole_archive_flag_spec_CXX=
-+enable_shared_with_static_runtimes_CXX=no
-+
-+# Dependencies to place before and after the object being linked:
-+predep_objects_CXX=
-+postdep_objects_CXX=
-+predeps_CXX=
-+postdeps_CXX=
-+compiler_lib_search_path_CXX=
-+
-+# Source file extension for C++ test sources.
-+ac_ext=cpp
-+
-+# Object file extension for compiled C++ test sources.
-+objext=o
-+objext_CXX=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code="int some_variable = 0;\n"
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
-+
-+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-+
-+# If no C compiler was specified, use CC.
-+LTCC=${LTCC-"$CC"}
-+
-+# If no C compiler flags were specified, use CFLAGS.
-+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-+
-+# Allow CC to be a program name with arguments.
-+compiler=$CC
-+
-+
-+# save warnings/boilerplate of simple test code
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_compiler_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_link_test_code" >conftest.$ac_ext
-+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_linker_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+
-+# Allow CC to be a program name with arguments.
-+lt_save_CC=$CC
-+lt_save_LD=$LD
-+lt_save_GCC=$GCC
-+GCC=$GXX
-+lt_save_with_gnu_ld=$with_gnu_ld
-+lt_save_path_LD=$lt_cv_path_LD
-+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
-+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
-+else
-+ $as_unset lt_cv_prog_gnu_ld
-+fi
-+if test -n "${lt_cv_path_LDCXX+set}"; then
-+ lt_cv_path_LD=$lt_cv_path_LDCXX
-+else
-+ $as_unset lt_cv_path_LD
-+fi
-+test -z "${LDCXX+set}" || LD=$LDCXX
-+CC=${CXX-"c++"}
-+compiler=$CC
-+compiler_CXX=$CC
-+for cc_temp in $compiler""; do
-+ case $cc_temp in
-+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+
-+
-+# We don't want -fno-exception wen compiling C++ code, so set the
-+# no_builtin_flag separately
-+if test "$GXX" = yes; then
-+ lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
-+else
-+ lt_prog_compiler_no_builtin_flag_CXX=
-+fi
-+
-+if test "$GXX" = yes; then
-+ # Set up default GNU C++ configuration
-+
-+
-+# Check whether --with-gnu-ld or --without-gnu-ld was given.
-+if test "${with_gnu_ld+set}" = set; then
-+ withval="$with_gnu_ld"
-+ test "$withval" = no || with_gnu_ld=yes
-+else
-+ with_gnu_ld=no
-+fi;
-+ac_prog=ld
-+if test "$GCC" = yes; then
-+ # Check if gcc -print-prog-name=ld gives a path.
-+ echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
-+ case $host in
-+ *-*-mingw*)
-+ # gcc leaves a trailing carriage return which upsets mingw
-+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-+ *)
-+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-+ esac
-+ case $ac_prog in
-+ # Accept absolute paths.
-+ [\\/]* | ?:[\\/]*)
-+ re_direlt='/[^/][^/]*/\.\./'
-+ # Canonicalize the pathname of ld
-+ ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
-+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-+ ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
-+ done
-+ test -z "$LD" && LD="$ac_prog"
-+ ;;
-+ "")
-+ # If it fails, then pretend we aren't using GCC.
-+ ac_prog=ld
-+ ;;
-+ *)
-+ # If it is relative, then search for the first ld in PATH.
-+ with_gnu_ld=unknown
-+ ;;
-+ esac
-+elif test "$with_gnu_ld" = yes; then
-+ echo "$as_me:$LINENO: checking for GNU ld" >&5
-+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
-+else
-+ echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
-+fi
-+if test "${lt_cv_path_LD+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -z "$LD"; then
-+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-+ for ac_dir in $PATH; do
-+ IFS="$lt_save_ifs"
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-+ lt_cv_path_LD="$ac_dir/$ac_prog"
-+ # Check to see if the program is GNU ld. I'd rather use --version,
-+ # but apparently some variants of GNU ld only accept -v.
-+ # Break only if it was the GNU/non-GNU ld that we prefer.
-+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
-+ *GNU* | *'with BFD'*)
-+ test "$with_gnu_ld" != no && break
-+ ;;
-+ *)
-+ test "$with_gnu_ld" != yes && break
-+ ;;
-+ esac
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+else
-+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
-+fi
-+fi
-+
-+LD="$lt_cv_path_LD"
-+if test -n "$LD"; then
-+ echo "$as_me:$LINENO: result: $LD" >&5
-+echo "${ECHO_T}$LD" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-+ { (exit 1); exit 1; }; }
-+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
-+if test "${lt_cv_prog_gnu_ld+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
-+case `$LD -v 2>&1 </dev/null` in
-+*GNU* | *'with BFD'*)
-+ lt_cv_prog_gnu_ld=yes
-+ ;;
-+*)
-+ lt_cv_prog_gnu_ld=no
-+ ;;
-+esac
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
-+with_gnu_ld=$lt_cv_prog_gnu_ld
-+
-+
-+
-+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
-+ # archiving commands below assume that GNU ld is being used.
-+ if test "$with_gnu_ld" = yes; then
-+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
-+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-+
-+ # If archive_cmds runs LD, not CC, wlarc should be empty
-+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
-+ # investigate it a little bit more. (MM)
-+ wlarc='${wl}'
-+
-+ # ancient GNU ld didn't support --whole-archive et. al.
-+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
-+ grep 'no-whole-archive' > /dev/null; then
-+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-+ else
-+ whole_archive_flag_spec_CXX=
-+ fi
-+ else
-+ with_gnu_ld=no
-+ wlarc=
-+
-+ # A generic and very simple default shared library creation
-+ # command for GNU C++ for the case where it uses the native
-+ # linker, instead of GNU ld. If possible, this setting should
-+ # overridden to take advantage of the native linker features on
-+ # the platform it is being used on.
-+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-+ fi
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-+
-+else
-+ GXX=no
-+ with_gnu_ld=no
-+ wlarc=
-+fi
-+
-+# PORTME: fill in a description of your system's C++ link characteristics
-+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-+ld_shlibs_CXX=yes
-+case $host_os in
-+ aix3*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ aix4* | aix5*)
-+ if test "$host_cpu" = ia64; then
-+ # On IA64, the linker does run time linking by default, so we don't
-+ # have to do anything special.
-+ aix_use_runtimelinking=no
-+ exp_sym_flag='-Bexport'
-+ no_entry_flag=""
-+ else
-+ aix_use_runtimelinking=no
-+
-+ # Test if we are trying to use run time linking or normal
-+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-+ # need to do runtime linking.
-+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
-+ for ld_flag in $LDFLAGS; do
-+ case $ld_flag in
-+ *-brtl*)
-+ aix_use_runtimelinking=yes
-+ break
-+ ;;
-+ esac
-+ done
-+ ;;
-+ esac
-+
-+ exp_sym_flag='-bexport'
-+ no_entry_flag='-bnoentry'
-+ fi
-+
-+ # When large executables or shared objects are built, AIX ld can
-+ # have problems creating the table of contents. If linking a library
-+ # or program results in "error TOC overflow" add -mminimal-toc to
-+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
-+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-+
-+ archive_cmds_CXX=''
-+ hardcode_direct_CXX=yes
-+ hardcode_libdir_separator_CXX=':'
-+ link_all_deplibs_CXX=yes
-+
-+ if test "$GXX" = yes; then
-+ case $host_os in aix4.[012]|aix4.[012].*)
-+ # We only want to do this on AIX 4.2 and lower, the check
-+ # below for broken collect2 doesn't work under 4.3+
-+ collect2name=`${CC} -print-prog-name=collect2`
-+ if test -f "$collect2name" && \
-+ strings "$collect2name" | grep resolve_lib_name >/dev/null
-+ then
-+ # We have reworked collect2
-+ hardcode_direct_CXX=yes
-+ else
-+ # We have old collect2
-+ hardcode_direct_CXX=unsupported
-+ # It fails to find uninstalled libraries when the uninstalled
-+ # path is not listed in the libpath. Setting hardcode_minus_L
-+ # to unsupported forces relinking
-+ hardcode_minus_L_CXX=yes
-+ hardcode_libdir_flag_spec_CXX='-L$libdir'
-+ hardcode_libdir_separator_CXX=
-+ fi
-+ ;;
-+ esac
-+ shared_flag='-shared'
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag="$shared_flag "'${wl}-G'
-+ fi
-+ else
-+ # not using gcc
-+ if test "$host_cpu" = ia64; then
-+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-+ # chokes on -Wl,-G. The following line is correct:
-+ shared_flag='-G'
-+ else
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag='${wl}-G'
-+ else
-+ shared_flag='${wl}-bM:SRE'
-+ fi
-+ fi
-+ fi
-+
-+ # It seems that -bexpall does not export symbols beginning with
-+ # underscore (_), so it is better to generate a list of symbols to export.
-+ always_export_symbols_CXX=yes
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # Warning - without using the other runtime loading flags (-brtl),
-+ # -berok will link without error, but may produce a broken library.
-+ allow_undefined_flag_CXX='-berok'
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11133,8 +11107,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-+
-+ archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-+ else
-+ if test "$host_cpu" = ia64; then
-+ hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
-+ allow_undefined_flag_CXX="-z nodefs"
-+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-+ else
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -11195,8 +11168,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_cxx_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ # Warning - without using the other run time loading flags,
-+ # -berok will link without error, but may produce a broken library.
-+ no_undefined_flag_CXX=' ${wl}-bernotok'
-+ allow_undefined_flag_CXX=' ${wl}-berok'
-+ # Exported symbols can be pulled into shared objects from archives
-+ whole_archive_flag_spec_CXX='$convenience'
-+ archive_cmds_need_lc_CXX=yes
-+ # This is similar to how AIX traditionally builds its shared libraries.
-+ archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-+ fi
-+ fi
-+ ;;
-+
-+ beos*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ allow_undefined_flag_CXX=unsupported
-+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-+ # support --undefined. This deserves some investigation. FIXME
-+ archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ else
-+ ld_shlibs_CXX=no
-+ fi
-+ ;;
-+
-+ chorus*)
-+ case $cc_basename in
-+ *)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ esac
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-+ # as there is no search path for DLLs.
-+ hardcode_libdir_flag_spec_CXX='-L$libdir'
-+ allow_undefined_flag_CXX=unsupported
-+ always_export_symbols_CXX=no
-+ enable_shared_with_static_runtimes_CXX=yes
-+
-+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ # If the export-symbols file already is a .def file (1st line
-+ # is EXPORTS), use it as is; otherwise, prepend...
-+ archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ cp $export_symbols $output_objdir/$soname.def;
-+ else
-+ echo EXPORTS > $output_objdir/$soname.def;
-+ cat $export_symbols >> $output_objdir/$soname.def;
-+ fi~
-+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ else
-+ ld_shlibs_CXX=no
-+ fi
-+ ;;
-+ darwin* | rhapsody*)
-+ case $host_os in
-+ rhapsody* | darwin1.[012])
-+ allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'
-+ ;;
-+ *) # Darwin 1.3 on
-+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-+ allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ else
-+ case ${MACOSX_DEPLOYMENT_TARGET} in
-+ 10.[012])
-+ allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ ;;
-+ 10.*)
-+ allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+ esac
-+ archive_cmds_need_lc_CXX=no
-+ hardcode_direct_CXX=no
-+ hardcode_automatic_CXX=yes
-+ hardcode_shlibpath_var_CXX=unsupported
-+ whole_archive_flag_spec_CXX=''
-+ link_all_deplibs_CXX=yes
-+
-+ if test "$GXX" = yes ; then
-+ lt_int_apple_cc_single_mod=no
-+ output_verbose_link_cmd='echo'
-+ if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
-+ lt_int_apple_cc_single_mod=yes
-+ fi
-+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-+ archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-+ else
-+ archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-+ fi
-+ module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ else
-+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ fi
-+ module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ else
-+ case $cc_basename in
-+ xlc*)
-+ output_verbose_link_cmd='echo'
-+ archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-+ module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ ;;
-+ *)
-+ ld_shlibs_CXX=no
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ dgux*)
-+ case $cc_basename in
-+ ec++*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ ghcx*)
-+ # Green Hills C++ Compiler
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ esac
-+ ;;
-+ freebsd[12]*)
-+ # C++ shared libraries reported to be fairly broken before switch to ELF
-+ ld_shlibs_CXX=no
-+ ;;
-+ freebsd-elf*)
-+ archive_cmds_need_lc_CXX=no
-+ ;;
-+ freebsd* | kfreebsd*-gnu | dragonfly*)
-+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-+ # conventions
-+ ld_shlibs_CXX=yes
-+ ;;
-+ gnu*)
-+ ;;
-+ hpux9*)
-+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator_CXX=:
-+ export_dynamic_flag_spec_CXX='${wl}-E'
-+ hardcode_direct_CXX=yes
-+ hardcode_minus_L_CXX=yes # Not in the search PATH,
-+ # but as the default
-+ # location of the library.
-+
-+ case $cc_basename in
-+ CC*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ aCC*)
-+ archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ *)
-+ if test "$GXX" = yes; then
-+ archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ else
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ hpux10*|hpux11*)
-+ if test $with_gnu_ld = no; then
-+ hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator_CXX=:
-+
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
-+ ;;
-+ *)
-+ export_dynamic_flag_spec_CXX='${wl}-E'
-+ ;;
-+ esac
-+ fi
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ hardcode_direct_CXX=no
-+ hardcode_shlibpath_var_CXX=no
-+ ;;
-+ *)
-+ hardcode_direct_CXX=yes
-+ hardcode_minus_L_CXX=yes # Not in the search PATH,
-+ # but as the default
-+ # location of the library.
-+ ;;
-+ esac
-+
-+ case $cc_basename in
-+ CC*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ aCC*)
-+ case $host_cpu in
-+ hppa*64*)
-+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ ia64*)
-+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ esac
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ *)
-+ if test "$GXX" = yes; then
-+ if test $with_gnu_ld = no; then
-+ case $host_cpu in
-+ hppa*64*)
-+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ ia64*)
-+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ ;;
-+ esac
-+ fi
-+ else
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ interix3*)
-+ hardcode_direct_CXX=no
-+ hardcode_shlibpath_var_CXX=no
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-+ export_dynamic_flag_spec_CXX='${wl}-E'
-+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-+ # Instead, shared libraries are loaded at an image base (0x10000000 by
-+ # default) and relocated if they conflict, which is a slow very memory
-+ # consuming and fragmenting process. To avoid this, we pick a random,
-+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
-+ archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ ;;
-+ irix5* | irix6*)
-+ case $cc_basename in
-+ CC*)
-+ # SGI C++
-+ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+
-+ # Archives containing C++ object files must be created using
-+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
-+ # necessary to make sure instantiated templates are included
-+ # in the archive.
-+ old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
-+ ;;
-+ *)
-+ if test "$GXX" = yes; then
-+ if test "$with_gnu_ld" = no; then
-+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
-+ fi
-+ fi
-+ link_all_deplibs_CXX=yes
-+ ;;
-+ esac
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_CXX=:
-+ ;;
-+ linux*)
-+ case $cc_basename in
-+ KCC*)
-+ # Kuck and Associates, Inc. (KAI) C++ Compiler
-+
-+ # KCC will only create a shared library if the output file
-+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
-+ # to its proper name (with version) after linking.
-+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-+ archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
-+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-+
-+ # Archives containing C++ object files must be created using
-+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
-+ ;;
-+ icpc*)
-+ # Intel C++
-+ with_gnu_ld=yes
-+ # version 8.0 and above of icpc choke on multiply defined symbols
-+ # if we add $predep_objects and $postdep_objects, however 7.1 and
-+ # earlier do not add the objects themselves.
-+ case `$CC -V 2>&1` in
-+ *"Version 7."*)
-+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ ;;
-+ *) # Version 8.0 or newer
-+ tmp_idyn=
-+ case $host_cpu in
-+ ia64*) tmp_idyn=' -i_dynamic';;
-+ esac
-+ archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ ;;
-+ esac
-+ archive_cmds_need_lc_CXX=no
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-+ ;;
-+ pgCC*)
-+ # Portland Group C++ compiler
-+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
-+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
-+ whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ ;;
-+ cxx*)
-+ # Compaq C++
-+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
-+
-+ runpath_var=LD_RUN_PATH
-+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
-+ hardcode_libdir_separator_CXX=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ esac
-+ ;;
-+ lynxos*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ m88k*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ mvs*)
-+ case $cc_basename in
-+ cxx*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ esac
-+ ;;
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -11628,7 +11600,7 @@
+ ;;
+ esac
+ ;;
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-+ wlarc=
-+ hardcode_libdir_flag_spec_CXX='-R$libdir'
-+ hardcode_direct_CXX=yes
-+ hardcode_shlibpath_var_CXX=no
-+ fi
-+ # Workaround some broken pre-1.5 toolchains
-+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
-+ ;;
-+ openbsd2*)
-+ # C++ shared libraries are fairly broken
-+ ld_shlibs_CXX=no
-+ ;;
-+ openbsd*)
-+ hardcode_direct_CXX=yes
-+ hardcode_shlibpath_var_CXX=no
-+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-+ export_dynamic_flag_spec_CXX='${wl}-E'
-+ whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-+ fi
-+ output_verbose_link_cmd='echo'
-+ ;;
-+ osf3*)
-+ case $cc_basename in
-+ KCC*)
-+ # Kuck and Associates, Inc. (KAI) C++ Compiler
-+
-+ # KCC will only create a shared library if the output file
-+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
-+ # to its proper name (with version) after linking.
-+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-+ hardcode_libdir_separator_CXX=:
-+
-+ # Archives containing C++ object files must be created using
-+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-+ old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
-+
-+ ;;
-+ RCC*)
-+ # Rational C++ 2.4.1
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ cxx*)
-+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_CXX=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ *)
-+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_CXX=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-+
-+ else
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ osf4* | osf5*)
-+ case $cc_basename in
-+ KCC*)
-+ # Kuck and Associates, Inc. (KAI) C++ Compiler
-+
-+ # KCC will only create a shared library if the output file
-+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
-+ # to its proper name (with version) after linking.
-+ archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
-+ hardcode_libdir_separator_CXX=:
-+
-+ # Archives containing C++ object files must be created using
-+ # the KAI C++ compiler.
-+ old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
-+ ;;
-+ RCC*)
-+ # Rational C++ 2.4.1
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ cxx*)
-+ allow_undefined_flag_CXX=' -expect_unresolved \*'
-+ archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
-+ echo "-hidden">> $lib.exp~
-+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~
-+ $rm $lib.exp'
-+
-+ hardcode_libdir_flag_spec_CXX='-rpath $libdir'
-+ hardcode_libdir_separator_CXX=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ #
-+ # There doesn't appear to be a way to prevent this compiler from
-+ # explicitly linking system object files so we need to strip them
-+ # from the output so that they don't get included in the library
-+ # dependencies.
-+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-+ ;;
-+ *)
-+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-+ allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_CXX=:
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
-+
-+ else
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ psos*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ sunos4*)
-+ case $cc_basename in
-+ CC*)
-+ # Sun C++ 4.x
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ lcc*)
-+ # Lucid
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ esac
-+ ;;
-+ solaris*)
-+ case $cc_basename in
-+ CC*)
-+ # Sun C++ 4.2, 5.x and Centerline C++
-+ archive_cmds_need_lc_CXX=yes
-+ no_undefined_flag_CXX=' -zdefs'
-+ archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-+
-+ hardcode_libdir_flag_spec_CXX='-R$libdir'
-+ hardcode_shlibpath_var_CXX=no
-+ case $host_os in
-+ solaris2.[0-5] | solaris2.[0-5].*) ;;
-+ *)
-+ # The C++ compiler is used as linker so we must use $wl
-+ # flag to pass the commands to the underlying system
-+ # linker. We must also pass each convience library through
-+ # to the system linker between allextract/defaultextract.
-+ # The C++ compiler will combine linker options so we
-+ # cannot just pass the convience library names through
-+ # without $wl.
-+ # Supported since Solaris 2.6 (maybe 2.5.1?)
-+ whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
-+ ;;
-+ esac
-+ link_all_deplibs_CXX=yes
-+
-+ output_verbose_link_cmd='echo'
-+
-+ # Archives containing C++ object files must be created using
-+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
-+ # necessary to make sure instantiated templates are included
-+ # in the archive.
-+ old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
-+ ;;
-+ gcx*)
-+ # Green Hills C++ Compiler
-+ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-+
-+ # The C++ compiler must be used to create the archive.
-+ old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-+ ;;
-+ *)
-+ # GNU C++ compiler with Solaris linker
-+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-+ no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
-+ if $CC --version | grep -v '^2\.7' > /dev/null; then
-+ archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
-+ else
-+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
-+ # platform.
-+ archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-+ archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
-+
-+ # Commands to make compiler produce verbose output that lists
-+ # what "hidden" libraries, object files and flags are used when
-+ # linking a shared library.
-+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
-+ fi
-+
-+ hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-+ no_undefined_flag_CXX='${wl}-z,text'
-+ archive_cmds_need_lc_CXX=no
-+ hardcode_shlibpath_var_CXX=no
-+ runpath_var='LD_RUN_PATH'
-+
-+ case $cc_basename in
-+ CC*)
-+ archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ ;;
-+ sysv5* | sco3.2v5* | sco5v6*)
-+ # Note: We can NOT use -z defs as we might desire, because we do not
-+ # link with -lc, and that would cause any symbols used from libc to
-+ # always be unresolved, which means just about no library would
-+ # ever link correctly. If we're not using GNU ld we use -z text
-+ # though, which does catch some bad symbols but isn't as heavy-handed
-+ # as -z defs.
-+ # For security reasons, it is highly recommended that you always
-+ # use absolute paths for naming shared libraries, and exclude the
-+ # DT_RUNPATH tag from executables and libraries. But doing so
-+ # requires that you compile everything twice, which is a pain.
-+ # So that behaviour is only enabled if SCOABSPATH is set to a
-+ # non-empty value in the environment. Most likely only useful for
-+ # creating official distributions of packages.
-+ # This is a hack until libtool officially supports absolute path
-+ # names for shared libraries.
-+ no_undefined_flag_CXX='${wl}-z,text'
-+ allow_undefined_flag_CXX='${wl}-z,nodefs'
-+ archive_cmds_need_lc_CXX=no
-+ hardcode_shlibpath_var_CXX=no
-+ hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-+ hardcode_libdir_separator_CXX=':'
-+ link_all_deplibs_CXX=yes
-+ export_dynamic_flag_spec_CXX='${wl}-Bexport'
-+ runpath_var='LD_RUN_PATH'
-+
-+ case $cc_basename in
-+ CC*)
-+ archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ ;;
-+ tandem*)
-+ case $cc_basename in
-+ NCC*)
-+ # NonStop-UX NCC 3.20
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ esac
-+ ;;
-+ vxworks*)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+ *)
-+ # FIXME: insert proper C++ library support
-+ ld_shlibs_CXX=no
-+ ;;
-+esac
-+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-+echo "${ECHO_T}$ld_shlibs_CXX" >&6
-+test "$ld_shlibs_CXX" = no && can_build_shared=no
-+
-+GCC_CXX="$GXX"
-+LD_CXX="$LD"
-+
-+
-+cat > conftest.$ac_ext <<EOF
-+class Foo
-+{
-+public:
-+ Foo (void) { a = 0; }
-+private:
-+ int a;
-+};
-+EOF
-+
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ # Parse the compiler output and extract the necessary
-+ # objects, libraries and library flags.
-+
-+ # Sentinel used to keep track of whether or not we are before
-+ # the conftest object file.
-+ pre_test_object_deps_done=no
-+
-+ # The `*' in the case matches for architectures that use `case' in
-+ # $output_verbose_cmd can trigger glob expansion during the loop
-+ # eval without this substitution.
-+ output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
-+
-+ for p in `eval $output_verbose_link_cmd`; do
-+ case $p in
-+
-+ -L* | -R* | -l*)
-+ # Some compilers place space between "-{L,R}" and the path.
-+ # Remove the space.
-+ if test $p = "-L" \
-+ || test $p = "-R"; then
-+ prev=$p
-+ continue
-+ else
-+ prev=
-+ fi
-+
-+ if test "$pre_test_object_deps_done" = no; then
-+ case $p in
-+ -L* | -R*)
-+ # Internal compiler library paths should come after those
-+ # provided the user. The postdeps already come after the
-+ # user supplied libs so there is no need to process them.
-+ if test -z "$compiler_lib_search_path_CXX"; then
-+ compiler_lib_search_path_CXX="${prev}${p}"
-+ else
-+ compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
-+ fi
-+ ;;
-+ # The "-l" case would never come before the object being
-+ # linked, so don't bother handling this case.
-+ esac
-+ else
-+ if test -z "$postdeps_CXX"; then
-+ postdeps_CXX="${prev}${p}"
-+ else
-+ postdeps_CXX="${postdeps_CXX} ${prev}${p}"
-+ fi
-+ fi
-+ ;;
-+
-+ *.$objext)
-+ # This assumes that the test object file only shows up
-+ # once in the compiler output.
-+ if test "$p" = "conftest.$objext"; then
-+ pre_test_object_deps_done=yes
-+ continue
-+ fi
-+
-+ if test "$pre_test_object_deps_done" = no; then
-+ if test -z "$predep_objects_CXX"; then
-+ predep_objects_CXX="$p"
-+ else
-+ predep_objects_CXX="$predep_objects_CXX $p"
-+ fi
-+ else
-+ if test -z "$postdep_objects_CXX"; then
-+ postdep_objects_CXX="$p"
-+ else
-+ postdep_objects_CXX="$postdep_objects_CXX $p"
-+ fi
-+ fi
-+ ;;
-+
-+ *) ;; # Ignore the rest.
-+
-+ esac
-+ done
-+
-+ # Clean up.
-+ rm -f a.out a.exe
-+else
-+ echo "libtool.m4: error: problem compiling CXX test program"
-+fi
-+
-+$rm -f confest.$objext
-+
-+# PORTME: override above test on systems where it is broken
-+case $host_os in
-+interix3*)
-+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
-+ # hack all around it, let's just trust "g++" to DTRT.
-+ predep_objects_CXX=
-+ postdep_objects_CXX=
-+ postdeps_CXX=
-+ ;;
-+
-+solaris*)
-+ case $cc_basename in
-+ CC*)
-+ # Adding this requires a known-good setup of shared libraries for
-+ # Sun compiler versions before 5.6, else PIC objects from an old
-+ # archive will be linked into the output, leading to subtle bugs.
-+ postdeps_CXX='-lCstd -lCrun'
-+ ;;
-+ esac
-+ ;;
-+esac
-+
-+
-+case " $postdeps_CXX " in
-+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
-+esac
-+
-+lt_prog_compiler_wl_CXX=
-+lt_prog_compiler_pic_CXX=
-+lt_prog_compiler_static_CXX=
-+
-+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-+
-+ # C++ specific cases for pic, static, wl, etc.
-+ if test "$GXX" = yes; then
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ lt_prog_compiler_static_CXX='-static'
-+
-+ case $host_os in
-+ aix*)
-+ # All AIX code is PIC.
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ lt_prog_compiler_static_CXX='-Bstatic'
-+ fi
-+ ;;
-+ amigaos*)
-+ # FIXME: we need at least 68020 code to build shared libraries, but
-+ # adding the `-m68020' flag to GCC prevents building anything better,
-+ # like `-m68040'.
-+ lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
-+ ;;
-+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-+ # PIC is the default for these OSes.
-+ ;;
-+ mingw* | os2* | pw32*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
-+ ;;
-+ darwin* | rhapsody*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ lt_prog_compiler_pic_CXX='-fno-common'
-+ ;;
-+ *djgpp*)
-+ # DJGPP does not support shared libraries at all
-+ lt_prog_compiler_pic_CXX=
-+ ;;
-+ interix3*)
-+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-+ # Instead, we relocate shared libraries at runtime.
-+ ;;
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ lt_prog_compiler_pic_CXX=-Kconform_pic
-+ fi
-+ ;;
-+ hpux*)
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_CXX='-fPIC'
-+ ;;
-+ esac
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_CXX='-fPIC'
-+ ;;
-+ esac
-+ else
-+ case $host_os in
-+ aix4* | aix5*)
-+ # All AIX code is PIC.
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ lt_prog_compiler_static_CXX='-Bstatic'
-+ else
-+ lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
-+ fi
-+ ;;
-+ chorus*)
-+ case $cc_basename in
-+ cxch68*)
-+ # Green Hills C++ Compiler
-+ # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
-+ ;;
-+ esac
-+ ;;
-+ darwin*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ case $cc_basename in
-+ xlc*)
-+ lt_prog_compiler_pic_CXX='-qnocommon'
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ ;;
-+ esac
-+ ;;
-+ dgux*)
-+ case $cc_basename in
-+ ec++*)
-+ lt_prog_compiler_pic_CXX='-KPIC'
-+ ;;
-+ ghcx*)
-+ # Green Hills C++ Compiler
-+ lt_prog_compiler_pic_CXX='-pic'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ freebsd* | kfreebsd*-gnu | dragonfly*)
-+ # FreeBSD uses GNU C++
-+ ;;
-+ hpux9* | hpux10* | hpux11*)
-+ case $cc_basename in
-+ CC*)
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
-+ if test "$host_cpu" != ia64; then
-+ lt_prog_compiler_pic_CXX='+Z'
-+ fi
-+ ;;
-+ aCC*)
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_CXX='+Z'
-+ ;;
-+ esac
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ interix*)
-+ # This is c89, which is MS Visual C++ (no shared libs)
-+ # Anyone wants to do a port?
-+ ;;
-+ irix5* | irix6* | nonstopux*)
-+ case $cc_basename in
-+ CC*)
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ lt_prog_compiler_static_CXX='-non_shared'
-+ # CC pic flag -KPIC is the default.
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ linux*)
-+ case $cc_basename in
-+ KCC*)
-+ # KAI C++ Compiler
-+ lt_prog_compiler_wl_CXX='--backend -Wl,'
-+ lt_prog_compiler_pic_CXX='-fPIC'
-+ ;;
-+ icpc* | ecpc*)
-+ # Intel C++
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ lt_prog_compiler_pic_CXX='-KPIC'
-+ lt_prog_compiler_static_CXX='-static'
-+ ;;
-+ pgCC*)
-+ # Portland Group C++ compiler.
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ lt_prog_compiler_pic_CXX='-fpic'
-+ lt_prog_compiler_static_CXX='-Bstatic'
-+ ;;
-+ cxx*)
-+ # Compaq C++
-+ # Make sure the PIC flag is empty. It appears that all Alpha
-+ # Linux and Compaq Tru64 Unix objects are PIC.
-+ lt_prog_compiler_pic_CXX=
-+ lt_prog_compiler_static_CXX='-non_shared'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ lynxos*)
-+ ;;
-+ m88k*)
-+ ;;
-+ mvs*)
-+ case $cc_basename in
-+ cxx*)
-+ lt_prog_compiler_pic_CXX='-W c,exportall'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+@@ -12281,7 +12253,7 @@
+ ;;
+ esac
+ ;;
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ ;;
-+ osf3* | osf4* | osf5*)
-+ case $cc_basename in
-+ KCC*)
-+ lt_prog_compiler_wl_CXX='--backend -Wl,'
-+ ;;
-+ RCC*)
-+ # Rational C++ 2.4.1
-+ lt_prog_compiler_pic_CXX='-pic'
-+ ;;
-+ cxx*)
-+ # Digital/Compaq C++
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ # Make sure the PIC flag is empty. It appears that all Alpha
-+ # Linux and Compaq Tru64 Unix objects are PIC.
-+ lt_prog_compiler_pic_CXX=
-+ lt_prog_compiler_static_CXX='-non_shared'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ psos*)
-+ ;;
-+ solaris*)
-+ case $cc_basename in
-+ CC*)
-+ # Sun C++ 4.2, 5.x and Centerline C++
-+ lt_prog_compiler_pic_CXX='-KPIC'
-+ lt_prog_compiler_static_CXX='-Bstatic'
-+ lt_prog_compiler_wl_CXX='-Qoption ld '
-+ ;;
-+ gcx*)
-+ # Green Hills C++ Compiler
-+ lt_prog_compiler_pic_CXX='-PIC'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ sunos4*)
-+ case $cc_basename in
-+ CC*)
-+ # Sun C++ 4.x
-+ lt_prog_compiler_pic_CXX='-pic'
-+ lt_prog_compiler_static_CXX='-Bstatic'
-+ ;;
-+ lcc*)
-+ # Lucid
-+ lt_prog_compiler_pic_CXX='-pic'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ tandem*)
-+ case $cc_basename in
-+ NCC*)
-+ # NonStop-UX NCC 3.20
-+ lt_prog_compiler_pic_CXX='-KPIC'
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-+ case $cc_basename in
-+ CC*)
-+ lt_prog_compiler_wl_CXX='-Wl,'
-+ lt_prog_compiler_pic_CXX='-KPIC'
-+ lt_prog_compiler_static_CXX='-Bstatic'
-+ ;;
-+ esac
-+ ;;
-+ vxworks*)
-+ ;;
-+ *)
-+ lt_prog_compiler_can_build_shared_CXX=no
-+ ;;
-+ esac
-+ fi
-+
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
-+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
-+
-+#
-+# Check to make sure the PIC flag actually works.
-+#
-+if test -n "$lt_prog_compiler_pic_CXX"; then
-+
-+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
-+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
-+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_prog_compiler_pic_works_CXX=no
-+ ac_outfile=conftest.$ac_objext
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+ lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ # The option is referenced via a variable to avoid confusing sed.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+@@ -12390,11 +12362,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:12393: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12365: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:12397: \$? = $ac_status" >&5
+ echo "$as_me:12369: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_prog_compiler_pic_works_CXX=yes
-+ fi
-+ fi
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
-+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
-+
-+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
-+ case $lt_prog_compiler_pic_CXX in
-+ "" | " "*) ;;
-+ *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
-+ esac
-+else
-+ lt_prog_compiler_pic_CXX=
-+ lt_prog_compiler_can_build_shared_CXX=no
-+fi
-+
-+fi
-+case $host_os in
-+ # For platforms which do not support PIC, -DPIC is meaningless:
-+ *djgpp*)
-+ lt_prog_compiler_pic_CXX=
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
-+ ;;
-+esac
-+
-+#
-+# Check to make sure the static flag actually works.
-+#
-+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
-+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
-+if test "${lt_prog_compiler_static_works_CXX+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_prog_compiler_static_works_CXX=no
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
-+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-+ # The linker can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ if test -s conftest.err; then
-+ # Append any errors to the config.log.
-+ cat conftest.err 1>&5
-+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_prog_compiler_static_works_CXX=yes
-+ fi
-+ else
-+ lt_prog_compiler_static_works_CXX=yes
-+ fi
-+ fi
-+ $rm conftest*
-+ LDFLAGS="$save_LDFLAGS"
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5
-+echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6
-+
-+if test x"$lt_prog_compiler_static_works_CXX" = xyes; then
-+ :
-+else
-+ lt_prog_compiler_static_CXX=
-+fi
-+
-+
-+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_cv_prog_compiler_c_o_CXX=no
-+ $rm -r conftest 2>/dev/null
-+ mkdir conftest
-+ cd conftest
-+ mkdir out
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ lt_compiler_flag="-o out/conftest2.$ac_objext"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -12494,11 +12466,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:12497: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12469: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&5
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:12501: \$? = $ac_status" >&5
+ echo "$as_me:12473: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-+ lt_cv_prog_compiler_c_o_CXX=yes
-+ fi
-+ fi
-+ chmod u+w . 2>&5
-+ $rm conftest*
-+ # SGI C++ compiler will create directory out/ii_files/ for
-+ # template instantiation
-+ test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
-+ $rm out/* && rmdir out
-+ cd ..
-+ rmdir conftest
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
-+
-+
-+hard_links="nottested"
-+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
-+ # do not overwrite the value of need_locks provided by the user
-+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
-+ hard_links=yes
-+ $rm conftest*
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ touch conftest.a
-+ ln conftest.a conftest.b 2>&5 || hard_links=no
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ echo "$as_me:$LINENO: result: $hard_links" >&5
-+echo "${ECHO_T}$hard_links" >&6
-+ if test "$hard_links" = no; then
-+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-+ need_locks=warn
-+ fi
-+else
-+ need_locks=no
-+fi
-+
-+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-+
-+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ case $host_os in
-+ aix4* | aix5*)
-+ # If we're using GNU nm, then we don't want the "-C" option.
-+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
-+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-+ export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-+ else
-+ export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-+ fi
-+ ;;
-+ pw32*)
-+ export_symbols_cmds_CXX="$ltdll_cmds"
-+ ;;
-+ cygwin* | mingw*)
-+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-+ ;;
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -12566,6 +12538,12 @@
+ cygwin* | mingw*)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ kfreebsd*-gnu)
+ link_all_deplibs_CXX=no
+ ;;
+ linux*)
+ link_all_deplibs_CXX=no
+ ;;
-+ *)
-+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ ;;
-+ esac
-+
-+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-+echo "${ECHO_T}$ld_shlibs_CXX" >&6
-+test "$ld_shlibs_CXX" = no && can_build_shared=no
-+
-+#
-+# Do we need to explicitly link libc?
-+#
-+case "x$archive_cmds_need_lc_CXX" in
-+x|xyes)
-+ # Assume -lc should be added
-+ archive_cmds_need_lc_CXX=yes
-+
-+ if test "$enable_shared" = yes && test "$GCC" = yes; then
-+ case $archive_cmds_CXX in
-+ *'~'*)
-+ # FIXME: we may have to deal with multi-command sequences.
-+ ;;
-+ '$CC '*)
-+ # Test whether the compiler implicitly links with -lc since on some
-+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
-+ # to ld, don't add -lc before -lgcc.
-+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-+ $rm conftest*
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } 2>conftest.err; then
-+ soname=conftest
-+ lib=conftest
-+ libobjs=conftest.$ac_objext
-+ deplibs=
-+ wl=$lt_prog_compiler_wl_CXX
-+ pic_flag=$lt_prog_compiler_pic_CXX
-+ compiler_flags=-v
-+ linker_flags=-v
-+ verstring=
-+ output_objdir=.
-+ libname=conftest
-+ lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
-+ allow_undefined_flag_CXX=
-+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-+ (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+ then
-+ archive_cmds_need_lc_CXX=no
-+ else
-+ archive_cmds_need_lc_CXX=yes
-+ fi
-+ allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
-+ else
-+ cat conftest.err 1>&5
-+ fi
-+ $rm conftest*
-+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
-+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
-+ ;;
-+ esac
-+ fi
-+ ;;
-+esac
-+
-+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-+library_names_spec=
-+libname_spec='lib$name'
-+soname_spec=
-+shrext_cmds=".so"
-+postinstall_cmds=
-+postuninstall_cmds=
-+finish_cmds=
-+finish_eval=
-+shlibpath_var=
-+shlibpath_overrides_runpath=unknown
-+version_type=none
-+dynamic_linker="$host_os ld.so"
-+sys_lib_dlsearch_path_spec="/lib /usr/lib"
-+if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
-+ # if the path contains ";" then we assume it to be the separator
-+ # otherwise default to the standard path separator (i.e. ":") - it is
-+ # assumed that no part of a normal pathname contains ";" but that should
-+ # okay in the real world where ";" in dirpaths is itself problematic.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+else
-+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-+fi
-+need_lib_prefix=unknown
-+hardcode_into_libs=no
-+
-+# when you set need_version to no, make sure it does not cause -set_version
-+# flags to be left without arguments
-+need_version=unknown
-+
-+case $host_os in
-+aix3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-+ shlibpath_var=LIBPATH
-+
-+ # AIX 3 has no versioning support, so we append a major version to the name.
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+
-+aix4* | aix5*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ hardcode_into_libs=yes
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 supports IA64
-+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ else
-+ # With GCC up to 2.95.x, collect2 would create an import file
-+ # for dependence libraries. The import file would start with
-+ # the line `#! .'. This would cause the generated library to
-+ # depend on `.', always an invalid library. This was fixed in
-+ # development snapshots of GCC prior to 3.0.
-+ case $host_os in
-+ aix4 | aix4.[01] | aix4.[01].*)
-+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-+ echo ' yes '
-+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
-+ :
-+ else
-+ can_build_shared=no
-+ fi
-+ ;;
-+ esac
-+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-+ # soname into executable. Probably we can add versioning support to
-+ # collect2, so additional links can be useful in future.
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-+ # instead of lib<name>.a to let people know that these are not
-+ # typical AIX shared libraries.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ else
-+ # We preserve .a as extension for shared libraries through AIX4.2
-+ # and later when we are not doing run time linking.
-+ library_names_spec='${libname}${release}.a $libname.a'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ fi
-+ shlibpath_var=LIBPATH
-+ fi
-+ ;;
-+
-+amigaos*)
-+ library_names_spec='$libname.ixlibrary $libname.a'
-+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
-+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-+ ;;
-+
-+beos*)
-+ library_names_spec='${libname}${shared_ext}'
-+ dynamic_linker="$host_os ld.so"
-+ shlibpath_var=LIBRARY_PATH
-+ ;;
-+
-+bsdi[45]*)
-+ version_type=linux
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-+ # the default ld.so.conf also contains /usr/contrib/lib and
-+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-+ # libtool to hard-code these into programs
-+ ;;
-+
-+cygwin* | mingw* | pw32*)
-+ version_type=windows
-+ shrext_cmds=".dll"
-+ need_version=no
-+ need_lib_prefix=no
-+
-+ case $GCC,$host_os in
-+ yes,cygwin* | yes,mingw* | yes,pw32*)
-+ library_names_spec='$libname.dll.a'
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname~
-+ chmod a+x \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $rm \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+
-+ case $host_os in
-+ cygwin*)
-+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-+ ;;
-+ mingw*)
-+ # MinGW DLLs use traditional 'lib' prefix
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH printed by
-+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
-+ # path with ; separators, and with drive letters. We can handle the
-+ # drive letters (cygwin fileutils understands them), so leave them,
-+ # especially as we might pass files found there to a mingw objdump,
-+ # which wouldn't understand a cygwinified path. Ahh.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ ;;
-+ pw32*)
-+ # pw32 DLLs use 'pw' prefix rather than 'lib'
-+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ ;;
-+ esac
-+ dynamic_linker='Win32 ld.exe'
-+ # FIXME: first we should search . and the directory the executable is in
-+ shlibpath_var=PATH
-+ ;;
-+
-+darwin* | rhapsody*)
-+ dynamic_linker="$host_os dyld"
-+ version_type=darwin
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-+ soname_spec='${libname}${release}${major}$shared_ext'
-+ shlibpath_overrides_runpath=yes
-+ shlibpath_var=DYLD_LIBRARY_PATH
-+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-+ if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-+ else
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-+ ;;
-+
-+dgux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+freebsd1*)
-+ dynamic_linker=no
-+ ;;
-+
-+kfreebsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+freebsd* | dragonfly*)
-+ # DragonFly does not have aout. When/if they implement a new
-+ # versioning mechanism, adjust this.
-+ if test -x /usr/bin/objformat; then
-+ objformat=`/usr/bin/objformat`
-+ else
-+ case $host_os in
-+ freebsd[123]*) objformat=aout ;;
-+ *) objformat=elf ;;
-+ esac
-+ fi
-+ version_type=freebsd-$objformat
-+ case $version_type in
-+ freebsd-elf*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ need_version=no
-+ need_lib_prefix=no
-+ ;;
-+ freebsd-*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-+ need_version=yes
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_os in
-+ freebsd2*)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ freebsd3.[01]* | freebsdelf3.[01]*)
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd*) # from 4.6 on
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ esac
-+ ;;
-+
-+gnu*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ ;;
-+
-+hpux9* | hpux10* | hpux11*)
-+ # Give a soname corresponding to the major version so that dld.sl refuses to
-+ # link against other versions.
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ case $host_cpu in
-+ ia64*)
-+ shrext_cmds='.so'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.so"
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ if test "X$HPUX_IA64_MODE" = X32; then
-+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-+ else
-+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-+ fi
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ hppa*64*)
-+ shrext_cmds='.sl'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ *)
-+ shrext_cmds='.sl'
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=SHLIB_PATH
-+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+ esac
-+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
-+ postinstall_cmds='chmod 555 $lib'
-+ ;;
-+
-+interix3*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+
-+irix5* | irix6* | nonstopux*)
-+ case $host_os in
-+ nonstopux*) version_type=nonstopux ;;
-+ *)
-+ if test "$lt_cv_prog_gnu_ld" = yes; then
-+ version_type=linux
-+ else
-+ version_type=irix
-+ fi ;;
-+ esac
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ case $host_os in
-+ irix5* | nonstopux*)
-+ libsuff= shlibsuff=
-+ ;;
-+ *)
-+ case $LD in # libtool.m4 will add one of these switches to LD
-+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-+ libsuff= shlibsuff= libmagic=32-bit;;
-+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-+ libsuff=32 shlibsuff=N32 libmagic=N32;;
-+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
-+ *) libsuff= shlibsuff= libmagic=never-match;;
-+ esac
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-+ hardcode_into_libs=yes
-+ ;;
-+
-+# No shared lib support for Linux oldld, aout, or coff.
-+linux*oldld* | linux*aout* | linux*coff*)
-+ dynamic_linker=no
-+ ;;
-+
-+# This must be Linux ELF.
-+linux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ # This implies no fast_install, which is unacceptable.
-+ # Some rework will be needed to allow for fast_install
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ *)
+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+@@ -13026,31 +13004,10 @@
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+- # find out which ABI we are using
+- libsuff=
+- case "$host_cpu" in
+- x86_64*|s390x*|powerpc64*)
+- echo '#line 13033 "configure"' > conftest.$ac_ext
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
+- case `/usr/bin/file conftest.$ac_objext` in
+- *64-bit*)
+- libsuff=64
+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+- ;;
+- esac
+- fi
+- rm -rf conftest*
+- ;;
+- esac
+-
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+ # powerpc, because MkLinux only supported shared libraries with the
-+ # GNU dynamic linker. Since this was broken with cross compilers,
-+ # most powerpc-linux boxes support dynamic linking these days and
-+ # people can always --disable-shared, the test was removed, and we
-+ # assume the GNU/Linux dynamic linker is in use.
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -13062,6 +13019,18 @@
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
@@ -66011,1804 +2655,77 @@
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
-+knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+netbsd*)
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ dynamic_linker='NetBSD (a.out) ld.so'
-+ else
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='NetBSD ld.elf_so'
-+ fi
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+
-+newsos6)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+nto-qnx*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+openbsd*)
-+ version_type=sunos
-+ sys_lib_dlsearch_path_spec="/usr/lib"
-+ need_lib_prefix=no
-+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-+ case $host_os in
-+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-+ *) need_version=no ;;
-+ esac
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ case $host_os in
-+ openbsd2.[89] | openbsd2.[89].*)
-+ shlibpath_overrides_runpath=no
-+ ;;
-+ *)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ esac
-+ else
-+ shlibpath_overrides_runpath=yes
-+ fi
-+ ;;
-+
-+os2*)
-+ libname_spec='$name'
-+ shrext_cmds=".dll"
-+ need_lib_prefix=no
-+ library_names_spec='$libname${shared_ext} $libname.a'
-+ dynamic_linker='OS/2 ld.exe'
-+ shlibpath_var=LIBPATH
-+ ;;
-+
-+osf3* | osf4* | osf5*)
-+ version_type=osf
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-+ ;;
-+
-+solaris*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ # ldd complains unless libraries are executable
-+ postinstall_cmds='chmod +x $lib'
-+ ;;
-+
-+sunos4*)
-+ version_type=sunos
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ if test "$with_gnu_ld" = yes; then
-+ need_lib_prefix=no
-+ fi
-+ need_version=yes
-+ ;;
-+
-+sysv4 | sysv4.3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_vendor in
-+ sni)
-+ shlibpath_overrides_runpath=no
-+ need_lib_prefix=no
-+ export_dynamic_flag_spec='${wl}-Blargedynsym'
-+ runpath_var=LD_RUN_PATH
-+ ;;
-+ siemens)
-+ need_lib_prefix=no
-+ ;;
-+ motorola)
-+ need_lib_prefix=no
-+ need_version=no
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-+ ;;
-+ esac
-+ ;;
-+
-+sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ version_type=linux
-+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-+ soname_spec='$libname${shared_ext}.$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ fi
-+ ;;
-+
-+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-+ version_type=freebsd-elf
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ if test "$with_gnu_ld" = yes; then
-+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-+ shlibpath_overrides_runpath=no
-+ else
-+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-+ shlibpath_overrides_runpath=yes
-+ case $host_os in
-+ sco3.2v5*)
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-+ ;;
-+ esac
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/lib'
-+ ;;
-+
-+uts4*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+*)
-+ dynamic_linker=no
-+ ;;
-+esac
-+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-+echo "${ECHO_T}$dynamic_linker" >&6
-+test "$dynamic_linker" = no && can_build_shared=no
-+
-+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-+if test "$GCC" = yes; then
-+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-+fi
-+
-+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-+hardcode_action_CXX=
-+if test -n "$hardcode_libdir_flag_spec_CXX" || \
-+ test -n "$runpath_var_CXX" || \
-+ test "X$hardcode_automatic_CXX" = "Xyes" ; then
-+
-+ # We can hardcode non-existant directories.
-+ if test "$hardcode_direct_CXX" != no &&
-+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
-+ # have to relink, otherwise we might link with an installed library
-+ # when we should be linking with a yet-to-be-installed one
-+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
-+ test "$hardcode_minus_L_CXX" != no; then
-+ # Linking always hardcodes the temporary library directory.
-+ hardcode_action_CXX=relink
-+ else
-+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
-+ hardcode_action_CXX=immediate
-+ fi
-+else
-+ # We cannot hardcode anything, or else we can only hardcode existing
-+ # directories.
-+ hardcode_action_CXX=unsupported
-+fi
-+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
-+echo "${ECHO_T}$hardcode_action_CXX" >&6
-+
-+if test "$hardcode_action_CXX" = relink; then
-+ # Fast installation is not supported
-+ enable_fast_install=no
-+elif test "$shlibpath_overrides_runpath" = yes ||
-+ test "$enable_shared" = no; then
-+ # Fast installation is not necessary
-+ enable_fast_install=needless
-+fi
-+
-+
-+# The else clause should only fire when bootstrapping the
-+# libtool distribution, otherwise you forgot to ship ltmain.sh
-+# with your package, and you will get complaints that there are
-+# no rules to generate ltmain.sh.
-+if test -f "$ltmain"; then
-+ # See if we are running on zsh, and set the options which allow our commands through
-+ # without removal of \ escapes.
-+ if test -n "${ZSH_VERSION+set}" ; then
-+ setopt NO_GLOB_SUBST
-+ fi
-+ # Now quote all the things that may contain metacharacters while being
-+ # careful not to overquote the AC_SUBSTed values. We take copies of the
-+ # variables and quote the copies for generation of the libtool script.
-+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-+ SED SHELL STRIP \
-+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-+ deplibs_check_method reload_flag reload_cmds need_locks \
-+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-+ lt_cv_sys_global_symbol_to_c_name_address \
-+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-+ old_postinstall_cmds old_postuninstall_cmds \
-+ compiler_CXX \
-+ CC_CXX \
-+ LD_CXX \
-+ lt_prog_compiler_wl_CXX \
-+ lt_prog_compiler_pic_CXX \
-+ lt_prog_compiler_static_CXX \
-+ lt_prog_compiler_no_builtin_flag_CXX \
-+ export_dynamic_flag_spec_CXX \
-+ thread_safe_flag_spec_CXX \
-+ whole_archive_flag_spec_CXX \
-+ enable_shared_with_static_runtimes_CXX \
-+ old_archive_cmds_CXX \
-+ old_archive_from_new_cmds_CXX \
-+ predep_objects_CXX \
-+ postdep_objects_CXX \
-+ predeps_CXX \
-+ postdeps_CXX \
-+ compiler_lib_search_path_CXX \
-+ archive_cmds_CXX \
-+ archive_expsym_cmds_CXX \
-+ postinstall_cmds_CXX \
-+ postuninstall_cmds_CXX \
-+ old_archive_from_expsyms_cmds_CXX \
-+ allow_undefined_flag_CXX \
-+ no_undefined_flag_CXX \
-+ export_symbols_cmds_CXX \
-+ hardcode_libdir_flag_spec_CXX \
-+ hardcode_libdir_flag_spec_ld_CXX \
-+ hardcode_libdir_separator_CXX \
-+ hardcode_automatic_CXX \
-+ module_cmds_CXX \
-+ module_expsym_cmds_CXX \
-+ lt_cv_prog_compiler_c_o_CXX \
-+ exclude_expsyms_CXX \
-+ include_expsyms_CXX; do
-+
-+ case $var in
-+ old_archive_cmds_CXX | \
-+ old_archive_from_new_cmds_CXX | \
-+ archive_cmds_CXX | \
-+ archive_expsym_cmds_CXX | \
-+ module_cmds_CXX | \
-+ module_expsym_cmds_CXX | \
-+ old_archive_from_expsyms_cmds_CXX | \
-+ export_symbols_cmds_CXX | \
-+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
-+ postinstall_cmds | postuninstall_cmds | \
-+ old_postinstall_cmds | old_postuninstall_cmds | \
-+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-+ # Double-quote double-evaled strings.
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-+ ;;
-+ *)
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-+ ;;
-+ esac
-+ done
-+
-+ case $lt_echo in
-+ *'\$0 --fallback-echo"')
-+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-+ ;;
-+ esac
-+
-+cfgfile="$ofile"
-+
-+ cat <<__EOF__ >> "$cfgfile"
-+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-+
-+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-+
-+# Shell to use when invoking shell scripts.
-+SHELL=$lt_SHELL
-+
-+# Whether or not to build shared libraries.
-+build_libtool_libs=$enable_shared
-+
-+# Whether or not to build static libraries.
-+build_old_libs=$enable_static
-+
-+# Whether or not to add -lc for building shared libraries.
-+build_libtool_need_lc=$archive_cmds_need_lc_CXX
-+
-+# Whether or not to disallow shared libs when runtime libs are static
-+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
-+
-+# Whether or not to optimize for fast installation.
-+fast_install=$enable_fast_install
-+
-+# The host system.
-+host_alias=$host_alias
-+host=$host
-+host_os=$host_os
-+
-+# The build system.
-+build_alias=$build_alias
-+build=$build
-+build_os=$build_os
-+
-+# An echo program that does not interpret backslashes.
-+echo=$lt_echo
-+
-+# The archiver.
-+AR=$lt_AR
-+AR_FLAGS=$lt_AR_FLAGS
-+
-+# A C compiler.
-+LTCC=$lt_LTCC
-+
-+# LTCC compiler flags.
-+LTCFLAGS=$lt_LTCFLAGS
-+
-+# A language-specific compiler.
-+CC=$lt_compiler_CXX
-+
-+# Is the compiler the GNU C compiler?
-+with_gcc=$GCC_CXX
-+
-+# An ERE matcher.
-+EGREP=$lt_EGREP
-+
-+# The linker used to build libraries.
-+LD=$lt_LD_CXX
-+
-+# Whether we need hard or soft links.
-+LN_S=$lt_LN_S
-+
-+# A BSD-compatible nm program.
-+NM=$lt_NM
-+
-+# A symbol stripping program
-+STRIP=$lt_STRIP
-+
-+# Used to examine libraries when file_magic_cmd begins "file"
-+MAGIC_CMD=$MAGIC_CMD
-+
-+# Used on cygwin: DLL creation program.
-+DLLTOOL="$DLLTOOL"
-+
-+# Used on cygwin: object dumper.
-+OBJDUMP="$OBJDUMP"
-+
-+# Used on cygwin: assembler.
-+AS="$AS"
-+
-+# The name of the directory that contains temporary libtool files.
-+objdir=$objdir
-+
-+# How to create reloadable object files.
-+reload_flag=$lt_reload_flag
-+reload_cmds=$lt_reload_cmds
-+
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl_CXX
-+
-+# Object file suffix (normally "o").
-+objext="$ac_objext"
-+
-+# Old archive suffix (normally "a").
-+libext="$libext"
-+
-+# Shared library suffix (normally ".so").
-+shrext_cmds='$shrext_cmds'
-+
-+# Executable file suffix (normally "").
-+exeext="$exeext"
-+
-+# Additional compiler flags for building library objects.
-+pic_flag=$lt_lt_prog_compiler_pic_CXX
-+pic_mode=$pic_mode
-+
-+# What is the maximum length of a command?
-+max_cmd_len=$lt_cv_sys_max_cmd_len
-+
-+# Does compiler simultaneously support -c and -o options?
-+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
-+
-+# Must we lock files when doing compilation?
-+need_locks=$lt_need_locks
-+
-+# Do we need the lib prefix for modules?
-+need_lib_prefix=$need_lib_prefix
-+
-+# Do we need a version for libraries?
-+need_version=$need_version
-+
-+# Whether dlopen is supported.
-+dlopen_support=$enable_dlopen
-+
-+# Whether dlopen of programs is supported.
-+dlopen_self=$enable_dlopen_self
-+
-+# Whether dlopen of statically linked programs is supported.
-+dlopen_self_static=$enable_dlopen_self_static
-+
-+# Compiler flag to prevent dynamic linking.
-+link_static_flag=$lt_lt_prog_compiler_static_CXX
-+
-+# Compiler flag to turn off builtin functions.
-+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
-+
-+# Compiler flag to allow reflexive dlopens.
-+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
-+
-+# Compiler flag to generate shared objects directly from archives.
-+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
-+
-+# Compiler flag to generate thread-safe objects.
-+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
-+
-+# Library versioning type.
-+version_type=$version_type
-+
-+# Format of library name prefix.
-+libname_spec=$lt_libname_spec
-+
-+# List of archive names. First name is the real one, the rest are links.
-+# The last name is the one that the linker finds with -lNAME.
-+library_names_spec=$lt_library_names_spec
-+
-+# The coded name of the library, if different from the real name.
-+soname_spec=$lt_soname_spec
-+
-+# Commands used to build and install an old-style archive.
-+RANLIB=$lt_RANLIB
-+old_archive_cmds=$lt_old_archive_cmds_CXX
-+old_postinstall_cmds=$lt_old_postinstall_cmds
-+old_postuninstall_cmds=$lt_old_postuninstall_cmds
-+
-+# Create an old-style archive from a shared archive.
-+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
-+
-+# Create a temporary old-style archive to link instead of a shared archive.
-+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
-+
-+# Commands used to build and install a shared archive.
-+archive_cmds=$lt_archive_cmds_CXX
-+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
-+postinstall_cmds=$lt_postinstall_cmds
-+postuninstall_cmds=$lt_postuninstall_cmds
-+
-+# Commands used to build a loadable module (assumed same as above if empty)
-+module_cmds=$lt_module_cmds_CXX
-+module_expsym_cmds=$lt_module_expsym_cmds_CXX
-+
-+# Commands to strip libraries.
-+old_striplib=$lt_old_striplib
-+striplib=$lt_striplib
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predep_objects=$lt_predep_objects_CXX
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdep_objects=$lt_postdep_objects_CXX
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predeps=$lt_predeps_CXX
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdeps=$lt_postdeps_CXX
-+
-+# The library search path used internally by the compiler when linking
-+# a shared library.
-+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
-+
-+# Method to check whether dependent libraries are shared objects.
-+deplibs_check_method=$lt_deplibs_check_method
-+
-+# Command to use when deplibs_check_method == file_magic.
-+file_magic_cmd=$lt_file_magic_cmd
-+
-+# Flag that allows shared libraries with undefined symbols to be built.
-+allow_undefined_flag=$lt_allow_undefined_flag_CXX
-+
-+# Flag that forces no undefined symbols.
-+no_undefined_flag=$lt_no_undefined_flag_CXX
-+
-+# Commands used to finish a libtool library installation in a directory.
-+finish_cmds=$lt_finish_cmds
-+
-+# Same as above, but a single script fragment to be evaled but not shown.
-+finish_eval=$lt_finish_eval
-+
-+# Take the output of nm and produce a listing of raw symbols and C names.
-+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-+
-+# Transform the output of nm in a proper C declaration
-+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-+
-+# Transform the output of nm in a C name address pair
-+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-+
-+# This is the shared library runtime path variable.
-+runpath_var=$runpath_var
-+
-+# This is the shared library path variable.
-+shlibpath_var=$shlibpath_var
-+
-+# Is shlibpath searched before the hard-coded library search path?
-+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-+
-+# How to hardcode a shared library path into an executable.
-+hardcode_action=$hardcode_action_CXX
-+
-+# Whether we should hardcode library paths into libraries.
-+hardcode_into_libs=$hardcode_into_libs
-+
-+# Flag to hardcode \$libdir into a binary during linking.
-+# This must work even if \$libdir does not exist.
-+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
-+
-+# If ld is used when linking, flag to hardcode \$libdir into
-+# a binary during linking. This must work even if \$libdir does
-+# not exist.
-+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
-+
-+# Whether we need a single -rpath flag with a separated argument.
-+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
-+
-+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_direct=$hardcode_direct_CXX
-+
-+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_minus_L=$hardcode_minus_L_CXX
-+
-+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-+# the resulting binary.
-+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
-+
-+# Set to yes if building a shared library automatically hardcodes DIR into the library
-+# and all subsequent libraries and executables linked against it.
-+hardcode_automatic=$hardcode_automatic_CXX
-+
-+# Variables whose values should be saved in libtool wrapper scripts and
-+# restored at relink time.
-+variables_saved_for_relink="$variables_saved_for_relink"
-+
-+# Whether libtool must link a program against all its dependency libraries.
-+link_all_deplibs=$link_all_deplibs_CXX
-+
-+# Compile-time system search path for libraries
-+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-+
-+# Run-time system search path for libraries
-+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-+
-+# Fix the shell variable \$srcfile for the compiler.
-+fix_srcfile_path="$fix_srcfile_path_CXX"
-+
-+# Set to yes if exported symbols are required.
-+always_export_symbols=$always_export_symbols_CXX
-+
-+# The commands to list exported symbols.
-+export_symbols_cmds=$lt_export_symbols_cmds_CXX
-+
-+# The commands to extract the exported symbol list from a shared archive.
-+extract_expsyms_cmds=$lt_extract_expsyms_cmds
-+
-+# Symbols that should not be listed in the preloaded symbols.
-+exclude_expsyms=$lt_exclude_expsyms_CXX
-+
-+# Symbols that must always be exported.
-+include_expsyms=$lt_include_expsyms_CXX
-+
-+# ### END LIBTOOL TAG CONFIG: $tagname
-+
-+__EOF__
-+
-+
-+else
-+ # If there is no Makefile yet, we rely on a make rule to execute
-+ # `config.status --recheck' to rerun these tests and create the
-+ # libtool script then.
-+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-+ if test -f "$ltmain_in"; then
-+ test -f Makefile && make "$ltmain"
-+ fi
-+fi
-+
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+CC=$lt_save_CC
-+LDCXX=$LD
-+LD=$lt_save_LD
-+GCC=$lt_save_GCC
-+with_gnu_ldcxx=$with_gnu_ld
-+with_gnu_ld=$lt_save_with_gnu_ld
-+lt_cv_path_LDCXX=$lt_cv_path_LD
-+lt_cv_path_LD=$lt_save_path_LD
-+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
-+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
-+
-+ else
-+ tagname=""
-+ fi
-+ ;;
-+
-+ F77)
-+ if test -n "$F77" && test "X$F77" != "Xno"; then
-+
-+ac_ext=f
-+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-+
-+
-+archive_cmds_need_lc_F77=no
-+allow_undefined_flag_F77=
-+always_export_symbols_F77=no
-+archive_expsym_cmds_F77=
-+export_dynamic_flag_spec_F77=
-+hardcode_direct_F77=no
-+hardcode_libdir_flag_spec_F77=
-+hardcode_libdir_flag_spec_ld_F77=
-+hardcode_libdir_separator_F77=
-+hardcode_minus_L_F77=no
-+hardcode_automatic_F77=no
-+module_cmds_F77=
-+module_expsym_cmds_F77=
-+link_all_deplibs_F77=unknown
-+old_archive_cmds_F77=$old_archive_cmds
-+no_undefined_flag_F77=
-+whole_archive_flag_spec_F77=
-+enable_shared_with_static_runtimes_F77=no
-+
-+# Source file extension for f77 test sources.
-+ac_ext=f
-+
-+# Object file extension for compiled f77 test sources.
-+objext=o
-+objext_F77=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code=" program t\n end\n"
-+
-+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-+
-+# If no C compiler was specified, use CC.
-+LTCC=${LTCC-"$CC"}
-+
-+# If no C compiler flags were specified, use CFLAGS.
-+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-+
-+# Allow CC to be a program name with arguments.
-+compiler=$CC
-+
-+
-+# save warnings/boilerplate of simple test code
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_compiler_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_link_test_code" >conftest.$ac_ext
-+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_linker_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+
-+# Allow CC to be a program name with arguments.
-+lt_save_CC="$CC"
-+CC=${F77-"f77"}
-+compiler=$CC
-+compiler_F77=$CC
-+for cc_temp in $compiler""; do
-+ case $cc_temp in
-+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+
-+
-+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
-+echo "$as_me:$LINENO: result: $can_build_shared" >&5
-+echo "${ECHO_T}$can_build_shared" >&6
-+
-+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
-+test "$can_build_shared" = "no" && enable_shared=no
-+
-+# On AIX, shared libraries and static libraries use the same namespace, and
-+# are all built from PIC.
-+case $host_os in
-+aix3*)
-+ test "$enable_shared" = yes && enable_static=no
-+ if test -n "$RANLIB"; then
-+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
-+ postinstall_cmds='$RANLIB $lib'
-+ fi
-+ ;;
-+aix4* | aix5*)
-+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-+ test "$enable_shared" = yes && enable_static=no
-+ fi
-+ ;;
-+esac
-+echo "$as_me:$LINENO: result: $enable_shared" >&5
-+echo "${ECHO_T}$enable_shared" >&6
-+
-+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
-+# Make sure either enable_shared or enable_static is yes.
-+test "$enable_shared" = yes || enable_static=yes
-+echo "$as_me:$LINENO: result: $enable_static" >&5
-+echo "${ECHO_T}$enable_static" >&6
-+
-+GCC_F77="$G77"
-+LD_F77="$LD"
-+
-+lt_prog_compiler_wl_F77=
-+lt_prog_compiler_pic_F77=
-+lt_prog_compiler_static_F77=
-+
-+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-+
-+ if test "$GCC" = yes; then
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ lt_prog_compiler_static_F77='-static'
-+
-+ case $host_os in
-+ aix*)
-+ # All AIX code is PIC.
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ # FIXME: we need at least 68020 code to build shared libraries, but
-+ # adding the `-m68020' flag to GCC prevents building anything better,
-+ # like `-m68040'.
-+ lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
-+ ;;
-+
-+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-+ # PIC is the default for these OSes.
-+ ;;
-+
-+ mingw* | pw32* | os2*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
-+ ;;
-+
-+ darwin* | rhapsody*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ lt_prog_compiler_pic_F77='-fno-common'
-+ ;;
-+
-+ interix3*)
-+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-+ # Instead, we relocate shared libraries at runtime.
-+ ;;
-+
-+ msdosdjgpp*)
-+ # Just because we use GCC doesn't mean we suddenly get shared libraries
-+ # on systems that don't support them.
-+ lt_prog_compiler_can_build_shared_F77=no
-+ enable_shared=no
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ lt_prog_compiler_pic_F77=-Kconform_pic
-+ fi
-+ ;;
-+
-+ hpux*)
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_F77='-fPIC'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ lt_prog_compiler_pic_F77='-fPIC'
-+ ;;
-+ esac
-+ else
-+ # PORTME Check for flag to pass linker flags through the system compiler.
-+ case $host_os in
-+ aix*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ else
-+ lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
-+ fi
-+ ;;
-+ darwin*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ case $cc_basename in
-+ xlc*)
-+ lt_prog_compiler_pic_F77='-qnocommon'
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ ;;
-+ esac
-+ ;;
-+
-+ mingw* | pw32* | os2*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ lt_prog_compiler_pic_F77='-DDLL_EXPORT'
-+ ;;
-+
-+ hpux9* | hpux10* | hpux11*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_F77='+Z'
-+ ;;
-+ esac
-+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
-+ lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
-+ ;;
-+
-+ irix5* | irix6* | nonstopux*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ # PIC (with -KPIC) is the default.
-+ lt_prog_compiler_static_F77='-non_shared'
-+ ;;
-+
-+ newsos6)
-+ lt_prog_compiler_pic_F77='-KPIC'
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ ;;
-+
-+ linux*)
-+ case $cc_basename in
-+ icc* | ecc*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ lt_prog_compiler_pic_F77='-KPIC'
-+ lt_prog_compiler_static_F77='-static'
-+ ;;
-+ pgcc* | pgf77* | pgf90* | pgf95*)
-+ # Portland Group compilers (*not* the Pentium gcc compiler,
-+ # which looks to be a dead project)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ lt_prog_compiler_pic_F77='-fpic'
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ ;;
-+ ccc*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ # All Alpha code is PIC.
-+ lt_prog_compiler_static_F77='-non_shared'
-+ ;;
-+ esac
-+ ;;
-+
-+ osf3* | osf4* | osf5*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ # All OSF/1 code is PIC.
-+ lt_prog_compiler_static_F77='-non_shared'
-+ ;;
-+
-+ solaris*)
-+ lt_prog_compiler_pic_F77='-KPIC'
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ case $cc_basename in
-+ f77* | f90* | f95*)
-+ lt_prog_compiler_wl_F77='-Qoption ld ';;
-+ *)
-+ lt_prog_compiler_wl_F77='-Wl,';;
-+ esac
-+ ;;
-+
-+ sunos4*)
-+ lt_prog_compiler_wl_F77='-Qoption ld '
-+ lt_prog_compiler_pic_F77='-PIC'
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ ;;
-+
-+ sysv4 | sysv4.2uw2* | sysv4.3*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ lt_prog_compiler_pic_F77='-KPIC'
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ lt_prog_compiler_pic_F77='-Kconform_pic'
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ fi
-+ ;;
-+
-+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ lt_prog_compiler_pic_F77='-KPIC'
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ ;;
-+
-+ unicos*)
-+ lt_prog_compiler_wl_F77='-Wl,'
-+ lt_prog_compiler_can_build_shared_F77=no
-+ ;;
-+
-+ uts4*)
-+ lt_prog_compiler_pic_F77='-pic'
-+ lt_prog_compiler_static_F77='-Bstatic'
-+ ;;
-+
-+ *)
-+ lt_prog_compiler_can_build_shared_F77=no
-+ ;;
-+ esac
-+ fi
-+
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
-+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
-+
-+#
-+# Check to make sure the PIC flag actually works.
-+#
-+if test -n "$lt_prog_compiler_pic_F77"; then
-+
-+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
-+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
-+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_prog_compiler_pic_works_F77=no
-+ ac_outfile=conftest.$ac_objext
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+ lt_compiler_flag="$lt_prog_compiler_pic_F77"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ # The option is referenced via a variable to avoid confusing sed.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+@@ -14085,11 +14054,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:14088: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14057: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:14092: \$? = $ac_status" >&5
+ echo "$as_me:14061: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_prog_compiler_pic_works_F77=yes
-+ fi
-+ fi
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
-+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
-+
-+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
-+ case $lt_prog_compiler_pic_F77 in
-+ "" | " "*) ;;
-+ *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
-+ esac
-+else
-+ lt_prog_compiler_pic_F77=
-+ lt_prog_compiler_can_build_shared_F77=no
-+fi
-+
-+fi
-+case $host_os in
-+ # For platforms which do not support PIC, -DPIC is meaningless:
-+ *djgpp*)
-+ lt_prog_compiler_pic_F77=
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
-+ ;;
-+esac
-+
-+#
-+# Check to make sure the static flag actually works.
-+#
-+wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
-+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
-+if test "${lt_prog_compiler_static_works_F77+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_prog_compiler_static_works_F77=no
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
-+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-+ # The linker can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ if test -s conftest.err; then
-+ # Append any errors to the config.log.
-+ cat conftest.err 1>&5
-+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_prog_compiler_static_works_F77=yes
-+ fi
-+ else
-+ lt_prog_compiler_static_works_F77=yes
-+ fi
-+ fi
-+ $rm conftest*
-+ LDFLAGS="$save_LDFLAGS"
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5
-+echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6
-+
-+if test x"$lt_prog_compiler_static_works_F77" = xyes; then
-+ :
-+else
-+ lt_prog_compiler_static_F77=
-+fi
-+
-+
-+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_cv_prog_compiler_c_o_F77=no
-+ $rm -r conftest 2>/dev/null
-+ mkdir conftest
-+ cd conftest
-+ mkdir out
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ lt_compiler_flag="-o out/conftest2.$ac_objext"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -14189,11 +14158,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:14192: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14161: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&5
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:14196: \$? = $ac_status" >&5
+ echo "$as_me:14165: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-+ lt_cv_prog_compiler_c_o_F77=yes
-+ fi
-+ fi
-+ chmod u+w . 2>&5
-+ $rm conftest*
-+ # SGI C++ compiler will create directory out/ii_files/ for
-+ # template instantiation
-+ test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
-+ $rm out/* && rmdir out
-+ cd ..
-+ rmdir conftest
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
-+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
-+
-+
-+hard_links="nottested"
-+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
-+ # do not overwrite the value of need_locks provided by the user
-+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
-+ hard_links=yes
-+ $rm conftest*
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ touch conftest.a
-+ ln conftest.a conftest.b 2>&5 || hard_links=no
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ echo "$as_me:$LINENO: result: $hard_links" >&5
-+echo "${ECHO_T}$hard_links" >&6
-+ if test "$hard_links" = no; then
-+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-+ need_locks=warn
-+ fi
-+else
-+ need_locks=no
-+fi
-+
-+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-+
-+ runpath_var=
-+ allow_undefined_flag_F77=
-+ enable_shared_with_static_runtimes_F77=no
-+ archive_cmds_F77=
-+ archive_expsym_cmds_F77=
-+ old_archive_From_new_cmds_F77=
-+ old_archive_from_expsyms_cmds_F77=
-+ export_dynamic_flag_spec_F77=
-+ whole_archive_flag_spec_F77=
-+ thread_safe_flag_spec_F77=
-+ hardcode_libdir_flag_spec_F77=
-+ hardcode_libdir_flag_spec_ld_F77=
-+ hardcode_libdir_separator_F77=
-+ hardcode_direct_F77=no
-+ hardcode_minus_L_F77=no
-+ hardcode_shlibpath_var_F77=unsupported
-+ link_all_deplibs_F77=unknown
-+ hardcode_automatic_F77=no
-+ module_cmds_F77=
-+ module_expsym_cmds_F77=
-+ always_export_symbols_F77=no
-+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ # include_expsyms should be a list of space-separated symbols to be *always*
-+ # included in the symbol list
-+ include_expsyms_F77=
-+ # exclude_expsyms can be an extended regexp of symbols to exclude
-+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
-+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-+ # as well as any symbol that contains `d'.
-+ exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
-+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-+ # platforms (ab)use it in PIC code, but their linkers get confused if
-+ # the symbol is explicitly referenced. Since portable code cannot
-+ # rely on this symbol name, it's probably fine to never include it in
-+ # preloaded symbol tables.
-+ extract_expsyms_cmds=
-+ # Just being paranoid about ensuring that cc_basename is set.
-+ for cc_temp in $compiler""; do
-+ case $cc_temp in
-+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+
-+ case $host_os in
-+ cygwin* | mingw* | pw32*)
-+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
-+ # When not using gcc, we currently assume that we are using
-+ # Microsoft Visual C++.
-+ if test "$GCC" != yes; then
-+ with_gnu_ld=no
-+ fi
-+ ;;
-+ interix*)
-+ # we just hope/assume this is gcc and not c89 (= MSVC++)
-+ with_gnu_ld=yes
-+ ;;
-+ openbsd*)
-+ with_gnu_ld=no
-+ ;;
-+ esac
-+
-+ ld_shlibs_F77=yes
-+ if test "$with_gnu_ld" = yes; then
-+ # If archive_cmds runs LD, not CC, wlarc should be empty
-+ wlarc='${wl}'
-+
-+ # Set some defaults for GNU ld with shared library support. These
-+ # are reset later if shared libraries are not supported. Putting them
-+ # here allows them to be overridden if necessary.
-+ runpath_var=LD_RUN_PATH
-+ hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
-+ export_dynamic_flag_spec_F77='${wl}--export-dynamic'
-+ # ancient GNU ld didn't support --whole-archive et. al.
-+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
-+ whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-+ else
-+ whole_archive_flag_spec_F77=
-+ fi
-+ supports_anon_versioning=no
-+ case `$LD -v 2>/dev/null` in
-+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
-+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-+ *\ 2.11.*) ;; # other 2.11 versions
-+ *) supports_anon_versioning=yes ;;
-+ esac
-+
-+ # See if GNU ld supports shared libraries.
-+ case $host_os in
-+ aix3* | aix4* | aix5*)
-+ # On AIX/PPC, the GNU linker is very broken
-+ if test "$host_cpu" != ia64; then
-+ ld_shlibs_F77=no
-+ cat <<EOF 1>&2
-+
-+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-+*** to be unable to reliably create shared libraries on AIX.
-+*** Therefore, libtool is disabling shared libraries support. If you
-+*** really care for shared libraries, you may want to modify your PATH
-+*** so that a non-GNU linker is found, and then restart.
-+
-+EOF
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-+ hardcode_libdir_flag_spec_F77='-L$libdir'
-+ hardcode_minus_L_F77=yes
-+
-+ # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-+ # that the semantics of dynamic libraries on AmigaOS, at least up
-+ # to version 4, is to share data among multiple programs linked
-+ # with the same dynamic library. Since this doesn't match the
-+ # behavior of shared libraries on other platforms, we can't use
-+ # them.
-+ ld_shlibs_F77=no
-+ ;;
-+
-+ beos*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ allow_undefined_flag_F77=unsupported
-+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-+ # support --undefined. This deserves some investigation. FIXME
-+ archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ else
-+ ld_shlibs_F77=no
-+ fi
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
-+ # as there is no search path for DLLs.
-+ hardcode_libdir_flag_spec_F77='-L$libdir'
-+ allow_undefined_flag_F77=unsupported
-+ always_export_symbols_F77=no
-+ enable_shared_with_static_runtimes_F77=yes
-+ export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-+
-+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ # If the export-symbols file already is a .def file (1st line
-+ # is EXPORTS), use it as is; otherwise, prepend...
-+ archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ cp $export_symbols $output_objdir/$soname.def;
-+ else
-+ echo EXPORTS > $output_objdir/$soname.def;
-+ cat $export_symbols >> $output_objdir/$soname.def;
-+ fi~
-+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ else
-+ ld_shlibs_F77=no
-+ fi
-+ ;;
-+
-+ interix3*)
-+ hardcode_direct_F77=no
-+ hardcode_shlibpath_var_F77=no
-+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
-+ export_dynamic_flag_spec_F77='${wl}-E'
-+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-+ # Instead, shared libraries are loaded at an image base (0x10000000 by
-+ # default) and relocated if they conflict, which is a slow very memory
-+ # consuming and fragmenting process. To avoid this, we pick a random,
-+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
-+ archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ ;;
-+
-+ linux*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ tmp_addflag=
-+ case $cc_basename,$host_cpu in
-+ pgcc*) # Portland Group C compiler
-+ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ tmp_addflag=' $pic_flag'
-+ ;;
-+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
-+ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ tmp_addflag=' $pic_flag -Mnomain' ;;
-+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
-+ tmp_addflag=' -i_dynamic' ;;
-+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
-+ tmp_addflag=' -i_dynamic -nofor_main' ;;
-+ ifc* | ifort*) # Intel Fortran compiler
-+ tmp_addflag=' -nofor_main' ;;
-+ esac
-+ archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+
-+ if test $supports_anon_versioning = yes; then
-+ archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
-+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-+ $echo "local: *; };" >> $output_objdir/$libname.ver~
-+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-+ fi
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -14444,12 +14413,13 @@
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ link_all_deplibs_F77=no
-+ else
-+ ld_shlibs_F77=no
-+ fi
-+ ;;
-+
+ else
+ ld_shlibs_F77=no
+ fi
+ ;;
+
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-+ wlarc=
-+ else
-+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ fi
-+ ;;
-+
-+ solaris*)
-+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-+ ld_shlibs_F77=no
-+ cat <<EOF 1>&2
-+
-+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-+*** create shared libraries on Solaris systems. Therefore, libtool
-+*** is disabling shared libraries support. We urge you to upgrade GNU
-+*** binutils to release 2.9.1 or newer. Another option is to modify
-+*** your PATH or compiler configuration so that the native linker is
-+*** used, and then restart.
-+
-+EOF
-+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ else
-+ ld_shlibs_F77=no
-+ fi
-+ ;;
-+
-+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-+ case `$LD -v 2>&1` in
-+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-+ ld_shlibs_F77=no
-+ cat <<_LT_EOF 1>&2
-+
-+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-+*** reliably create shared libraries on SCO systems. Therefore, libtool
-+*** is disabling shared libraries support. We urge you to upgrade GNU
-+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-+*** your PATH or compiler configuration so that the native linker is
-+*** used, and then restart.
-+
-+_LT_EOF
-+ ;;
-+ *)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
-+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
-+ else
-+ ld_shlibs_F77=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+
-+ sunos4*)
-+ archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ wlarc=
-+ hardcode_direct_F77=yes
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ *)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ else
-+ ld_shlibs_F77=no
-+ fi
-+ ;;
-+ esac
-+
-+ if test "$ld_shlibs_F77" = no; then
-+ runpath_var=
-+ hardcode_libdir_flag_spec_F77=
-+ export_dynamic_flag_spec_F77=
-+ whole_archive_flag_spec_F77=
-+ fi
-+ else
-+ # PORTME fill in a description of your system's linker (not GNU ld)
-+ case $host_os in
-+ aix3*)
-+ allow_undefined_flag_F77=unsupported
-+ always_export_symbols_F77=yes
-+ archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-+ # Note: this linker hardcodes the directories in LIBPATH if there
-+ # are no directories specified by -L.
-+ hardcode_minus_L_F77=yes
-+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-+ # Neither direct hardcoding nor static linking is supported with a
-+ # broken collect2.
-+ hardcode_direct_F77=unsupported
-+ fi
-+ ;;
-+
-+ aix4* | aix5*)
-+ if test "$host_cpu" = ia64; then
-+ # On IA64, the linker does run time linking by default, so we don't
-+ # have to do anything special.
-+ aix_use_runtimelinking=no
-+ exp_sym_flag='-Bexport'
-+ no_entry_flag=""
-+ else
-+ # If we're using GNU nm, then we don't want the "-C" option.
-+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
-+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-+ export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-+ else
-+ export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-+ fi
-+ aix_use_runtimelinking=no
-+
-+ # Test if we are trying to use run time linking or normal
-+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-+ # need to do runtime linking.
-+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
-+ for ld_flag in $LDFLAGS; do
-+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-+ aix_use_runtimelinking=yes
-+ break
-+ fi
-+ done
-+ ;;
-+ esac
-+
-+ exp_sym_flag='-bexport'
-+ no_entry_flag='-bnoentry'
-+ fi
-+
-+ # When large executables or shared objects are built, AIX ld can
-+ # have problems creating the table of contents. If linking a library
-+ # or program results in "error TOC overflow" add -mminimal-toc to
-+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
-+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-+
-+ archive_cmds_F77=''
-+ hardcode_direct_F77=yes
-+ hardcode_libdir_separator_F77=':'
-+ link_all_deplibs_F77=yes
-+
-+ if test "$GCC" = yes; then
-+ case $host_os in aix4.[012]|aix4.[012].*)
-+ # We only want to do this on AIX 4.2 and lower, the check
-+ # below for broken collect2 doesn't work under 4.3+
-+ collect2name=`${CC} -print-prog-name=collect2`
-+ if test -f "$collect2name" && \
-+ strings "$collect2name" | grep resolve_lib_name >/dev/null
-+ then
-+ # We have reworked collect2
-+ hardcode_direct_F77=yes
-+ else
-+ # We have old collect2
-+ hardcode_direct_F77=unsupported
-+ # It fails to find uninstalled libraries when the uninstalled
-+ # path is not listed in the libpath. Setting hardcode_minus_L
-+ # to unsupported forces relinking
-+ hardcode_minus_L_F77=yes
-+ hardcode_libdir_flag_spec_F77='-L$libdir'
-+ hardcode_libdir_separator_F77=
-+ fi
-+ ;;
-+ esac
-+ shared_flag='-shared'
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag="$shared_flag "'${wl}-G'
-+ fi
-+ else
-+ # not using gcc
-+ if test "$host_cpu" = ia64; then
-+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-+ # chokes on -Wl,-G. The following line is correct:
-+ shared_flag='-G'
-+ else
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag='${wl}-G'
-+ else
-+ shared_flag='${wl}-bM:SRE'
-+ fi
-+ fi
-+ fi
-+
-+ # It seems that -bexpall does not export symbols beginning with
-+ # underscore (_), so it is better to generate a list of symbols to export.
-+ always_export_symbols_F77=yes
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # Warning - without using the other runtime loading flags (-brtl),
-+ # -berok will link without error, but may produce a broken library.
-+ allow_undefined_flag_F77='-berok'
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ cat >conftest.$ac_ext <<_ACEOF
-+ program main
-+
-+ end
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+@@ -14655,8 +14625,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_f77_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+
-+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-+ else
-+ if test "$host_cpu" = ia64; then
-+ hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
-+ allow_undefined_flag_F77="-z nodefs"
-+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-+ else
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ cat >conftest.$ac_ext <<_ACEOF
-+ program main
-+
-+ end
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -14706,8 +14675,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_f77_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+
-+ hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ # Warning - without using the other run time loading flags,
-+ # -berok will link without error, but may produce a broken library.
-+ no_undefined_flag_F77=' ${wl}-bernotok'
-+ allow_undefined_flag_F77=' ${wl}-berok'
-+ # Exported symbols can be pulled into shared objects from archives
-+ whole_archive_flag_spec_F77='$convenience'
-+ archive_cmds_need_lc_F77=yes
-+ # This is similar to how AIX traditionally builds its shared libraries.
-+ archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-+ fi
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-+ hardcode_libdir_flag_spec_F77='-L$libdir'
-+ hardcode_minus_L_F77=yes
-+ # see comment about different semantics on the GNU ld section
-+ ld_shlibs_F77=no
-+ ;;
-+
-+ bsdi[45]*)
-+ export_dynamic_flag_spec_F77=-rdynamic
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # When not using gcc, we currently assume that we are using
-+ # Microsoft Visual C++.
-+ # hardcode_libdir_flag_spec is actually meaningless, as there is
-+ # no search path for DLLs.
-+ hardcode_libdir_flag_spec_F77=' '
-+ allow_undefined_flag_F77=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_From_new_cmds_F77='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
-+ fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
-+ enable_shared_with_static_runtimes_F77=yes
-+ ;;
-+
-+ darwin* | rhapsody*)
-+ case $host_os in
-+ rhapsody* | darwin1.[012])
-+ allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
-+ ;;
-+ *) # Darwin 1.3 on
-+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-+ allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ else
-+ case ${MACOSX_DEPLOYMENT_TARGET} in
-+ 10.[012])
-+ allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ ;;
-+ 10.*)
-+ allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+ esac
-+ archive_cmds_need_lc_F77=no
-+ hardcode_direct_F77=no
-+ hardcode_automatic_F77=yes
-+ hardcode_shlibpath_var_F77=unsupported
-+ whole_archive_flag_spec_F77=''
-+ link_all_deplibs_F77=yes
-+ if test "$GCC" = yes ; then
-+ output_verbose_link_cmd='echo'
-+ archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-+ module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ else
-+ case $cc_basename in
-+ xlc*)
-+ output_verbose_link_cmd='echo'
-+ archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-+ module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ ;;
-+ *)
-+ ld_shlibs_F77=no
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ dgux*)
-+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec_F77='-L$libdir'
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ freebsd1*)
-+ ld_shlibs_F77=no
-+ ;;
-+
-+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-+ # support. Future versions do this automatically, but an explicit c++rt0.o
-+ # does not break anything, and helps significantly (at the cost of a little
-+ # extra space).
-+ freebsd2.2*)
-+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-+ hardcode_libdir_flag_spec_F77='-R$libdir'
-+ hardcode_direct_F77=yes
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-+ freebsd2*)
-+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct_F77=yes
-+ hardcode_minus_L_F77=yes
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -14861,11 +14829,20 @@
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+- freebsd* | kfreebsd*-gnu | dragonfly*)
+ freebsd* | dragonfly*)
+ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
@@ -67818,794 +2735,60 @@
+
+ # GNU/kFreeBSD uses gcc -shared to do shared libraries.
+ kfreebsd*-gnu)
-+ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec_F77='-R$libdir'
-+ hardcode_direct_F77=yes
-+ hardcode_shlibpath_var_F77=no
+ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_F77='-R$libdir'
+ hardcode_direct_F77=yes
+ hardcode_shlibpath_var_F77=no
+ link_all_deplibs_F77=no
-+ ;;
-+
-+ hpux9*)
-+ if test "$GCC" = yes; then
-+ archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ else
-+ archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ fi
-+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator_F77=:
-+ hardcode_direct_F77=yes
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L_F77=yes
-+ export_dynamic_flag_spec_F77='${wl}-E'
-+ ;;
-+
-+ hpux10*)
-+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-+ fi
-+ if test "$with_gnu_ld" = no; then
-+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator_F77=:
-+
-+ hardcode_direct_F77=yes
-+ export_dynamic_flag_spec_F77='${wl}-E'
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L_F77=yes
-+ fi
-+ ;;
-+
-+ hpux11*)
-+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-+ case $host_cpu in
-+ hppa*64*)
-+ archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ ia64*)
-+ archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ else
-+ case $host_cpu in
-+ hppa*64*)
-+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ ia64*)
-+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ fi
-+ if test "$with_gnu_ld" = no; then
-+ hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator_F77=:
-+
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ hardcode_libdir_flag_spec_ld_F77='+b $libdir'
-+ hardcode_direct_F77=no
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+ *)
-+ hardcode_direct_F77=yes
-+ export_dynamic_flag_spec_F77='${wl}-E'
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L_F77=yes
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ irix5* | irix6* | nonstopux*)
-+ if test "$GCC" = yes; then
-+ archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
-+ fi
-+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_F77=:
-+ link_all_deplibs_F77=yes
-+ ;;
-+
+ ;;
+
+ hpux9*)
+@@ -14963,7 +14940,7 @@
+ link_all_deplibs_F77=yes
+ ;;
+
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
-+ else
-+ archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
-+ fi
-+ hardcode_libdir_flag_spec_F77='-R$libdir'
-+ hardcode_direct_F77=yes
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ newsos6)
-+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct_F77=yes
-+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_F77=:
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ openbsd*)
-+ hardcode_direct_F77=yes
-+ hardcode_shlibpath_var_F77=no
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
-+ export_dynamic_flag_spec_F77='${wl}-E'
-+ else
-+ case $host_os in
-+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec_F77='-R$libdir'
-+ ;;
-+ *)
-+ archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ os2*)
-+ hardcode_libdir_flag_spec_F77='-L$libdir'
-+ hardcode_minus_L_F77=yes
-+ allow_undefined_flag_F77=unsupported
-+ archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-+ old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-+ ;;
-+
-+ osf3*)
-+ if test "$GCC" = yes; then
-+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ allow_undefined_flag_F77=' -expect_unresolved \*'
-+ archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ fi
-+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_F77=:
-+ ;;
-+
-+ osf4* | osf5*) # as osf3* with the addition of -msym flag
-+ if test "$GCC" = yes; then
-+ allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-+ else
-+ allow_undefined_flag_F77=' -expect_unresolved \*'
-+ archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-+
-+ # Both c and cxx compiler support -rpath directly
-+ hardcode_libdir_flag_spec_F77='-rpath $libdir'
-+ fi
-+ hardcode_libdir_separator_F77=:
-+ ;;
-+
-+ solaris*)
-+ no_undefined_flag_F77=' -z text'
-+ if test "$GCC" = yes; then
-+ wlarc='${wl}'
-+ archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-+ else
-+ wlarc=''
-+ archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
-+ fi
-+ hardcode_libdir_flag_spec_F77='-R$libdir'
-+ hardcode_shlibpath_var_F77=no
-+ case $host_os in
-+ solaris2.[0-5] | solaris2.[0-5].*) ;;
-+ *)
-+ # The compiler driver will combine linker options so we
-+ # cannot just pass the convience library names through
-+ # without $wl, iff we do not link with $LD.
-+ # Luckily, gcc supports the same syntax we need for Sun Studio.
-+ # Supported since Solaris 2.6 (maybe 2.5.1?)
-+ case $wlarc in
-+ '')
-+ whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
-+ *)
-+ whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
-+ esac ;;
-+ esac
-+ link_all_deplibs_F77=yes
-+ ;;
-+
-+ sunos4*)
-+ if test "x$host_vendor" = xsequent; then
-+ # Use $CC to link under sequent, because it throws in some extra .o
-+ # files that make .init and .fini sections work.
-+ archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-+ fi
-+ hardcode_libdir_flag_spec_F77='-L$libdir'
-+ hardcode_direct_F77=yes
-+ hardcode_minus_L_F77=yes
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ sysv4)
-+ case $host_vendor in
-+ sni)
-+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct_F77=yes # is this really true???
-+ ;;
-+ siemens)
-+ ## LD is ld it makes a PLAMLIB
-+ ## CC just makes a GrossModule.
-+ archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-+ reload_cmds_F77='$CC -r -o $output$reload_objs'
-+ hardcode_direct_F77=no
-+ ;;
-+ motorola)
-+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
-+ ;;
-+ esac
-+ runpath_var='LD_RUN_PATH'
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ sysv4.3*)
-+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_shlibpath_var_F77=no
-+ export_dynamic_flag_spec_F77='-Bexport'
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_shlibpath_var_F77=no
-+ runpath_var=LD_RUN_PATH
-+ hardcode_runpath_var=yes
-+ ld_shlibs_F77=yes
-+ fi
-+ ;;
-+
-+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
-+ no_undefined_flag_F77='${wl}-z,text'
-+ archive_cmds_need_lc_F77=no
-+ hardcode_shlibpath_var_F77=no
-+ runpath_var='LD_RUN_PATH'
-+
-+ if test "$GCC" = yes; then
-+ archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ fi
-+ ;;
-+
-+ sysv5* | sco3.2v5* | sco5v6*)
-+ # Note: We can NOT use -z defs as we might desire, because we do not
-+ # link with -lc, and that would cause any symbols used from libc to
-+ # always be unresolved, which means just about no library would
-+ # ever link correctly. If we're not using GNU ld we use -z text
-+ # though, which does catch some bad symbols but isn't as heavy-handed
-+ # as -z defs.
-+ no_undefined_flag_F77='${wl}-z,text'
-+ allow_undefined_flag_F77='${wl}-z,nodefs'
-+ archive_cmds_need_lc_F77=no
-+ hardcode_shlibpath_var_F77=no
-+ hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-+ hardcode_libdir_separator_F77=':'
-+ link_all_deplibs_F77=yes
-+ export_dynamic_flag_spec_F77='${wl}-Bexport'
-+ runpath_var='LD_RUN_PATH'
-+
-+ if test "$GCC" = yes; then
-+ archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ fi
-+ ;;
-+
-+ uts4*)
-+ archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec_F77='-L$libdir'
-+ hardcode_shlibpath_var_F77=no
-+ ;;
-+
-+ *)
-+ ld_shlibs_F77=no
-+ ;;
-+ esac
-+ fi
-+
-+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
-+echo "${ECHO_T}$ld_shlibs_F77" >&6
-+test "$ld_shlibs_F77" = no && can_build_shared=no
-+
-+#
-+# Do we need to explicitly link libc?
-+#
-+case "x$archive_cmds_need_lc_F77" in
-+x|xyes)
-+ # Assume -lc should be added
-+ archive_cmds_need_lc_F77=yes
-+
-+ if test "$enable_shared" = yes && test "$GCC" = yes; then
-+ case $archive_cmds_F77 in
-+ *'~'*)
-+ # FIXME: we may have to deal with multi-command sequences.
-+ ;;
-+ '$CC '*)
-+ # Test whether the compiler implicitly links with -lc since on some
-+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
-+ # to ld, don't add -lc before -lgcc.
-+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-+ $rm conftest*
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } 2>conftest.err; then
-+ soname=conftest
-+ lib=conftest
-+ libobjs=conftest.$ac_objext
-+ deplibs=
-+ wl=$lt_prog_compiler_wl_F77
-+ pic_flag=$lt_prog_compiler_pic_F77
-+ compiler_flags=-v
-+ linker_flags=-v
-+ verstring=
-+ output_objdir=.
-+ libname=conftest
-+ lt_save_allow_undefined_flag=$allow_undefined_flag_F77
-+ allow_undefined_flag_F77=
-+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-+ (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+ then
-+ archive_cmds_need_lc_F77=no
-+ else
-+ archive_cmds_need_lc_F77=yes
-+ fi
-+ allow_undefined_flag_F77=$lt_save_allow_undefined_flag
-+ else
-+ cat conftest.err 1>&5
-+ fi
-+ $rm conftest*
-+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
-+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
-+ ;;
-+ esac
-+ fi
-+ ;;
-+esac
-+
-+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-+library_names_spec=
-+libname_spec='lib$name'
-+soname_spec=
-+shrext_cmds=".so"
-+postinstall_cmds=
-+postuninstall_cmds=
-+finish_cmds=
-+finish_eval=
-+shlibpath_var=
-+shlibpath_overrides_runpath=unknown
-+version_type=none
-+dynamic_linker="$host_os ld.so"
-+sys_lib_dlsearch_path_spec="/lib /usr/lib"
-+if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
-+ # if the path contains ";" then we assume it to be the separator
-+ # otherwise default to the standard path separator (i.e. ":") - it is
-+ # assumed that no part of a normal pathname contains ";" but that should
-+ # okay in the real world where ";" in dirpaths is itself problematic.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+else
-+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-+fi
-+need_lib_prefix=unknown
-+hardcode_into_libs=no
-+
-+# when you set need_version to no, make sure it does not cause -set_version
-+# flags to be left without arguments
-+need_version=unknown
-+
-+case $host_os in
-+aix3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-+ shlibpath_var=LIBPATH
-+
-+ # AIX 3 has no versioning support, so we append a major version to the name.
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+
-+aix4* | aix5*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ hardcode_into_libs=yes
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 supports IA64
-+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ else
-+ # With GCC up to 2.95.x, collect2 would create an import file
-+ # for dependence libraries. The import file would start with
-+ # the line `#! .'. This would cause the generated library to
-+ # depend on `.', always an invalid library. This was fixed in
-+ # development snapshots of GCC prior to 3.0.
-+ case $host_os in
-+ aix4 | aix4.[01] | aix4.[01].*)
-+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-+ echo ' yes '
-+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
-+ :
-+ else
-+ can_build_shared=no
-+ fi
-+ ;;
-+ esac
-+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-+ # soname into executable. Probably we can add versioning support to
-+ # collect2, so additional links can be useful in future.
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-+ # instead of lib<name>.a to let people know that these are not
-+ # typical AIX shared libraries.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ else
-+ # We preserve .a as extension for shared libraries through AIX4.2
-+ # and later when we are not doing run time linking.
-+ library_names_spec='${libname}${release}.a $libname.a'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ fi
-+ shlibpath_var=LIBPATH
-+ fi
-+ ;;
-+
-+amigaos*)
-+ library_names_spec='$libname.ixlibrary $libname.a'
-+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
-+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-+ ;;
-+
-+beos*)
-+ library_names_spec='${libname}${shared_ext}'
-+ dynamic_linker="$host_os ld.so"
-+ shlibpath_var=LIBRARY_PATH
-+ ;;
-+
-+bsdi[45]*)
-+ version_type=linux
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-+ # the default ld.so.conf also contains /usr/contrib/lib and
-+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-+ # libtool to hard-code these into programs
-+ ;;
-+
-+cygwin* | mingw* | pw32*)
-+ version_type=windows
-+ shrext_cmds=".dll"
-+ need_version=no
-+ need_lib_prefix=no
-+
-+ case $GCC,$host_os in
-+ yes,cygwin* | yes,mingw* | yes,pw32*)
-+ library_names_spec='$libname.dll.a'
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname~
-+ chmod a+x \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $rm \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+
-+ case $host_os in
-+ cygwin*)
-+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-+ ;;
-+ mingw*)
-+ # MinGW DLLs use traditional 'lib' prefix
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH printed by
-+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
-+ # path with ; separators, and with drive letters. We can handle the
-+ # drive letters (cygwin fileutils understands them), so leave them,
-+ # especially as we might pass files found there to a mingw objdump,
-+ # which wouldn't understand a cygwinified path. Ahh.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ ;;
-+ pw32*)
-+ # pw32 DLLs use 'pw' prefix rather than 'lib'
-+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ ;;
-+ esac
-+ dynamic_linker='Win32 ld.exe'
-+ # FIXME: first we should search . and the directory the executable is in
-+ shlibpath_var=PATH
-+ ;;
-+
-+darwin* | rhapsody*)
-+ dynamic_linker="$host_os dyld"
-+ version_type=darwin
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-+ soname_spec='${libname}${release}${major}$shared_ext'
-+ shlibpath_overrides_runpath=yes
-+ shlibpath_var=DYLD_LIBRARY_PATH
-+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-+ if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-+ else
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-+ ;;
-+
-+dgux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+freebsd1*)
-+ dynamic_linker=no
-+ ;;
-+
-+kfreebsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+freebsd* | dragonfly*)
-+ # DragonFly does not have aout. When/if they implement a new
-+ # versioning mechanism, adjust this.
-+ if test -x /usr/bin/objformat; then
-+ objformat=`/usr/bin/objformat`
-+ else
-+ case $host_os in
-+ freebsd[123]*) objformat=aout ;;
-+ *) objformat=elf ;;
-+ esac
-+ fi
-+ version_type=freebsd-$objformat
-+ case $version_type in
-+ freebsd-elf*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ need_version=no
-+ need_lib_prefix=no
-+ ;;
-+ freebsd-*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-+ need_version=yes
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_os in
-+ freebsd2*)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ freebsd3.[01]* | freebsdelf3.[01]*)
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd*) # from 4.6 on
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ esac
-+ ;;
-+
-+gnu*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ ;;
-+
-+hpux9* | hpux10* | hpux11*)
-+ # Give a soname corresponding to the major version so that dld.sl refuses to
-+ # link against other versions.
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ case $host_cpu in
-+ ia64*)
-+ shrext_cmds='.so'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.so"
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ if test "X$HPUX_IA64_MODE" = X32; then
-+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-+ else
-+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-+ fi
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ hppa*64*)
-+ shrext_cmds='.sl'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ *)
-+ shrext_cmds='.sl'
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=SHLIB_PATH
-+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+ esac
-+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
-+ postinstall_cmds='chmod 555 $lib'
-+ ;;
-+
-+interix3*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+
-+irix5* | irix6* | nonstopux*)
-+ case $host_os in
-+ nonstopux*) version_type=nonstopux ;;
-+ *)
-+ if test "$lt_cv_prog_gnu_ld" = yes; then
-+ version_type=linux
-+ else
-+ version_type=irix
-+ fi ;;
-+ esac
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ case $host_os in
-+ irix5* | nonstopux*)
-+ libsuff= shlibsuff=
-+ ;;
-+ *)
-+ case $LD in # libtool.m4 will add one of these switches to LD
-+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-+ libsuff= shlibsuff= libmagic=32-bit;;
-+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-+ libsuff=32 shlibsuff=N32 libmagic=N32;;
-+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
-+ *) libsuff= shlibsuff= libmagic=never-match;;
-+ esac
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-+ hardcode_into_libs=yes
-+ ;;
-+
-+# No shared lib support for Linux oldld, aout, or coff.
-+linux*oldld* | linux*aout* | linux*coff*)
-+ dynamic_linker=no
-+ ;;
-+
-+# This must be Linux ELF.
-+linux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ # This implies no fast_install, which is unacceptable.
-+ # Some rework will be needed to allow for fast_install
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+@@ -15634,31 +15611,10 @@
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+- # find out which ABI we are using
+- libsuff=
+- case "$host_cpu" in
+- x86_64*|s390x*|powerpc64*)
+- echo '#line 15641 "configure"' > conftest.$ac_ext
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
+- case `/usr/bin/file conftest.$ac_objext` in
+- *64-bit*)
+- libsuff=64
+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+- ;;
+- esac
+- fi
+- rm -rf conftest*
+- ;;
+- esac
+-
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+ # powerpc, because MkLinux only supported shared libraries with the
-+ # GNU dynamic linker. Since this was broken with cross compilers,
-+ # most powerpc-linux boxes support dynamic linking these days and
-+ # people can always --disable-shared, the test was removed, and we
-+ # assume the GNU/Linux dynamic linker is in use.
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -15670,6 +15626,18 @@
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
@@ -68618,1812 +2801,91 @@
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
-+knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+netbsd*)
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ dynamic_linker='NetBSD (a.out) ld.so'
-+ else
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='NetBSD ld.elf_so'
-+ fi
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+
-+newsos6)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+nto-qnx*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+openbsd*)
-+ version_type=sunos
-+ sys_lib_dlsearch_path_spec="/usr/lib"
-+ need_lib_prefix=no
-+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-+ case $host_os in
-+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-+ *) need_version=no ;;
-+ esac
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ case $host_os in
-+ openbsd2.[89] | openbsd2.[89].*)
-+ shlibpath_overrides_runpath=no
-+ ;;
-+ *)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ esac
-+ else
-+ shlibpath_overrides_runpath=yes
-+ fi
-+ ;;
-+
-+os2*)
-+ libname_spec='$name'
-+ shrext_cmds=".dll"
-+ need_lib_prefix=no
-+ library_names_spec='$libname${shared_ext} $libname.a'
-+ dynamic_linker='OS/2 ld.exe'
-+ shlibpath_var=LIBPATH
-+ ;;
-+
-+osf3* | osf4* | osf5*)
-+ version_type=osf
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-+ ;;
-+
-+solaris*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ # ldd complains unless libraries are executable
-+ postinstall_cmds='chmod +x $lib'
-+ ;;
-+
-+sunos4*)
-+ version_type=sunos
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ if test "$with_gnu_ld" = yes; then
-+ need_lib_prefix=no
-+ fi
-+ need_version=yes
-+ ;;
-+
-+sysv4 | sysv4.3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_vendor in
-+ sni)
-+ shlibpath_overrides_runpath=no
-+ need_lib_prefix=no
-+ export_dynamic_flag_spec='${wl}-Blargedynsym'
-+ runpath_var=LD_RUN_PATH
-+ ;;
-+ siemens)
-+ need_lib_prefix=no
-+ ;;
-+ motorola)
-+ need_lib_prefix=no
-+ need_version=no
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-+ ;;
-+ esac
-+ ;;
-+
-+sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ version_type=linux
-+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-+ soname_spec='$libname${shared_ext}.$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ fi
-+ ;;
-+
-+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-+ version_type=freebsd-elf
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ if test "$with_gnu_ld" = yes; then
-+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-+ shlibpath_overrides_runpath=no
-+ else
-+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-+ shlibpath_overrides_runpath=yes
-+ case $host_os in
-+ sco3.2v5*)
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-+ ;;
-+ esac
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/lib'
-+ ;;
-+
-+uts4*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+*)
-+ dynamic_linker=no
-+ ;;
-+esac
-+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-+echo "${ECHO_T}$dynamic_linker" >&6
-+test "$dynamic_linker" = no && can_build_shared=no
-+
-+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-+if test "$GCC" = yes; then
-+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-+fi
-+
-+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-+hardcode_action_F77=
-+if test -n "$hardcode_libdir_flag_spec_F77" || \
-+ test -n "$runpath_var_F77" || \
-+ test "X$hardcode_automatic_F77" = "Xyes" ; then
-+
-+ # We can hardcode non-existant directories.
-+ if test "$hardcode_direct_F77" != no &&
-+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
-+ # have to relink, otherwise we might link with an installed library
-+ # when we should be linking with a yet-to-be-installed one
-+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
-+ test "$hardcode_minus_L_F77" != no; then
-+ # Linking always hardcodes the temporary library directory.
-+ hardcode_action_F77=relink
-+ else
-+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
-+ hardcode_action_F77=immediate
-+ fi
-+else
-+ # We cannot hardcode anything, or else we can only hardcode existing
-+ # directories.
-+ hardcode_action_F77=unsupported
-+fi
-+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
-+echo "${ECHO_T}$hardcode_action_F77" >&6
-+
-+if test "$hardcode_action_F77" = relink; then
-+ # Fast installation is not supported
-+ enable_fast_install=no
-+elif test "$shlibpath_overrides_runpath" = yes ||
-+ test "$enable_shared" = no; then
-+ # Fast installation is not necessary
-+ enable_fast_install=needless
-+fi
-+
-+
-+# The else clause should only fire when bootstrapping the
-+# libtool distribution, otherwise you forgot to ship ltmain.sh
-+# with your package, and you will get complaints that there are
-+# no rules to generate ltmain.sh.
-+if test -f "$ltmain"; then
-+ # See if we are running on zsh, and set the options which allow our commands through
-+ # without removal of \ escapes.
-+ if test -n "${ZSH_VERSION+set}" ; then
-+ setopt NO_GLOB_SUBST
-+ fi
-+ # Now quote all the things that may contain metacharacters while being
-+ # careful not to overquote the AC_SUBSTed values. We take copies of the
-+ # variables and quote the copies for generation of the libtool script.
-+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-+ SED SHELL STRIP \
-+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-+ deplibs_check_method reload_flag reload_cmds need_locks \
-+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-+ lt_cv_sys_global_symbol_to_c_name_address \
-+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-+ old_postinstall_cmds old_postuninstall_cmds \
-+ compiler_F77 \
-+ CC_F77 \
-+ LD_F77 \
-+ lt_prog_compiler_wl_F77 \
-+ lt_prog_compiler_pic_F77 \
-+ lt_prog_compiler_static_F77 \
-+ lt_prog_compiler_no_builtin_flag_F77 \
-+ export_dynamic_flag_spec_F77 \
-+ thread_safe_flag_spec_F77 \
-+ whole_archive_flag_spec_F77 \
-+ enable_shared_with_static_runtimes_F77 \
-+ old_archive_cmds_F77 \
-+ old_archive_from_new_cmds_F77 \
-+ predep_objects_F77 \
-+ postdep_objects_F77 \
-+ predeps_F77 \
-+ postdeps_F77 \
-+ compiler_lib_search_path_F77 \
-+ archive_cmds_F77 \
-+ archive_expsym_cmds_F77 \
-+ postinstall_cmds_F77 \
-+ postuninstall_cmds_F77 \
-+ old_archive_from_expsyms_cmds_F77 \
-+ allow_undefined_flag_F77 \
-+ no_undefined_flag_F77 \
-+ export_symbols_cmds_F77 \
-+ hardcode_libdir_flag_spec_F77 \
-+ hardcode_libdir_flag_spec_ld_F77 \
-+ hardcode_libdir_separator_F77 \
-+ hardcode_automatic_F77 \
-+ module_cmds_F77 \
-+ module_expsym_cmds_F77 \
-+ lt_cv_prog_compiler_c_o_F77 \
-+ exclude_expsyms_F77 \
-+ include_expsyms_F77; do
-+
-+ case $var in
-+ old_archive_cmds_F77 | \
-+ old_archive_from_new_cmds_F77 | \
-+ archive_cmds_F77 | \
-+ archive_expsym_cmds_F77 | \
-+ module_cmds_F77 | \
-+ module_expsym_cmds_F77 | \
-+ old_archive_from_expsyms_cmds_F77 | \
-+ export_symbols_cmds_F77 | \
-+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
-+ postinstall_cmds | postuninstall_cmds | \
-+ old_postinstall_cmds | old_postuninstall_cmds | \
-+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-+ # Double-quote double-evaled strings.
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-+ ;;
-+ *)
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-+ ;;
-+ esac
-+ done
-+
-+ case $lt_echo in
-+ *'\$0 --fallback-echo"')
-+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-+ ;;
-+ esac
-+
-+cfgfile="$ofile"
-+
-+ cat <<__EOF__ >> "$cfgfile"
-+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-+
-+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-+
-+# Shell to use when invoking shell scripts.
-+SHELL=$lt_SHELL
-+
-+# Whether or not to build shared libraries.
-+build_libtool_libs=$enable_shared
-+
-+# Whether or not to build static libraries.
-+build_old_libs=$enable_static
-+
-+# Whether or not to add -lc for building shared libraries.
-+build_libtool_need_lc=$archive_cmds_need_lc_F77
-+
-+# Whether or not to disallow shared libs when runtime libs are static
-+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
-+
-+# Whether or not to optimize for fast installation.
-+fast_install=$enable_fast_install
-+
-+# The host system.
-+host_alias=$host_alias
-+host=$host
-+host_os=$host_os
-+
-+# The build system.
-+build_alias=$build_alias
-+build=$build
-+build_os=$build_os
-+
-+# An echo program that does not interpret backslashes.
-+echo=$lt_echo
-+
-+# The archiver.
-+AR=$lt_AR
-+AR_FLAGS=$lt_AR_FLAGS
-+
-+# A C compiler.
-+LTCC=$lt_LTCC
-+
-+# LTCC compiler flags.
-+LTCFLAGS=$lt_LTCFLAGS
-+
-+# A language-specific compiler.
-+CC=$lt_compiler_F77
-+
-+# Is the compiler the GNU C compiler?
-+with_gcc=$GCC_F77
-+
-+# An ERE matcher.
-+EGREP=$lt_EGREP
-+
-+# The linker used to build libraries.
-+LD=$lt_LD_F77
-+
-+# Whether we need hard or soft links.
-+LN_S=$lt_LN_S
-+
-+# A BSD-compatible nm program.
-+NM=$lt_NM
-+
-+# A symbol stripping program
-+STRIP=$lt_STRIP
-+
-+# Used to examine libraries when file_magic_cmd begins "file"
-+MAGIC_CMD=$MAGIC_CMD
-+
-+# Used on cygwin: DLL creation program.
-+DLLTOOL="$DLLTOOL"
-+
-+# Used on cygwin: object dumper.
-+OBJDUMP="$OBJDUMP"
-+
-+# Used on cygwin: assembler.
-+AS="$AS"
-+
-+# The name of the directory that contains temporary libtool files.
-+objdir=$objdir
-+
-+# How to create reloadable object files.
-+reload_flag=$lt_reload_flag
-+reload_cmds=$lt_reload_cmds
-+
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl_F77
-+
-+# Object file suffix (normally "o").
-+objext="$ac_objext"
-+
-+# Old archive suffix (normally "a").
-+libext="$libext"
-+
-+# Shared library suffix (normally ".so").
-+shrext_cmds='$shrext_cmds'
-+
-+# Executable file suffix (normally "").
-+exeext="$exeext"
-+
-+# Additional compiler flags for building library objects.
-+pic_flag=$lt_lt_prog_compiler_pic_F77
-+pic_mode=$pic_mode
-+
-+# What is the maximum length of a command?
-+max_cmd_len=$lt_cv_sys_max_cmd_len
-+
-+# Does compiler simultaneously support -c and -o options?
-+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
-+
-+# Must we lock files when doing compilation?
-+need_locks=$lt_need_locks
-+
-+# Do we need the lib prefix for modules?
-+need_lib_prefix=$need_lib_prefix
-+
-+# Do we need a version for libraries?
-+need_version=$need_version
-+
-+# Whether dlopen is supported.
-+dlopen_support=$enable_dlopen
-+
-+# Whether dlopen of programs is supported.
-+dlopen_self=$enable_dlopen_self
-+
-+# Whether dlopen of statically linked programs is supported.
-+dlopen_self_static=$enable_dlopen_self_static
-+
-+# Compiler flag to prevent dynamic linking.
-+link_static_flag=$lt_lt_prog_compiler_static_F77
-+
-+# Compiler flag to turn off builtin functions.
-+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
-+
-+# Compiler flag to allow reflexive dlopens.
-+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
-+
-+# Compiler flag to generate shared objects directly from archives.
-+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
-+
-+# Compiler flag to generate thread-safe objects.
-+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
-+
-+# Library versioning type.
-+version_type=$version_type
-+
-+# Format of library name prefix.
-+libname_spec=$lt_libname_spec
-+
-+# List of archive names. First name is the real one, the rest are links.
-+# The last name is the one that the linker finds with -lNAME.
-+library_names_spec=$lt_library_names_spec
-+
-+# The coded name of the library, if different from the real name.
-+soname_spec=$lt_soname_spec
-+
-+# Commands used to build and install an old-style archive.
-+RANLIB=$lt_RANLIB
-+old_archive_cmds=$lt_old_archive_cmds_F77
-+old_postinstall_cmds=$lt_old_postinstall_cmds
-+old_postuninstall_cmds=$lt_old_postuninstall_cmds
-+
-+# Create an old-style archive from a shared archive.
-+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
-+
-+# Create a temporary old-style archive to link instead of a shared archive.
-+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
-+
-+# Commands used to build and install a shared archive.
-+archive_cmds=$lt_archive_cmds_F77
-+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
-+postinstall_cmds=$lt_postinstall_cmds
-+postuninstall_cmds=$lt_postuninstall_cmds
-+
-+# Commands used to build a loadable module (assumed same as above if empty)
-+module_cmds=$lt_module_cmds_F77
-+module_expsym_cmds=$lt_module_expsym_cmds_F77
-+
-+# Commands to strip libraries.
-+old_striplib=$lt_old_striplib
-+striplib=$lt_striplib
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predep_objects=$lt_predep_objects_F77
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdep_objects=$lt_postdep_objects_F77
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predeps=$lt_predeps_F77
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdeps=$lt_postdeps_F77
-+
-+# The library search path used internally by the compiler when linking
-+# a shared library.
-+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
-+
-+# Method to check whether dependent libraries are shared objects.
-+deplibs_check_method=$lt_deplibs_check_method
-+
-+# Command to use when deplibs_check_method == file_magic.
-+file_magic_cmd=$lt_file_magic_cmd
-+
-+# Flag that allows shared libraries with undefined symbols to be built.
-+allow_undefined_flag=$lt_allow_undefined_flag_F77
-+
-+# Flag that forces no undefined symbols.
-+no_undefined_flag=$lt_no_undefined_flag_F77
-+
-+# Commands used to finish a libtool library installation in a directory.
-+finish_cmds=$lt_finish_cmds
-+
-+# Same as above, but a single script fragment to be evaled but not shown.
-+finish_eval=$lt_finish_eval
-+
-+# Take the output of nm and produce a listing of raw symbols and C names.
-+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-+
-+# Transform the output of nm in a proper C declaration
-+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-+
-+# Transform the output of nm in a C name address pair
-+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-+
-+# This is the shared library runtime path variable.
-+runpath_var=$runpath_var
-+
-+# This is the shared library path variable.
-+shlibpath_var=$shlibpath_var
-+
-+# Is shlibpath searched before the hard-coded library search path?
-+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-+
-+# How to hardcode a shared library path into an executable.
-+hardcode_action=$hardcode_action_F77
-+
-+# Whether we should hardcode library paths into libraries.
-+hardcode_into_libs=$hardcode_into_libs
-+
-+# Flag to hardcode \$libdir into a binary during linking.
-+# This must work even if \$libdir does not exist.
-+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
-+
-+# If ld is used when linking, flag to hardcode \$libdir into
-+# a binary during linking. This must work even if \$libdir does
-+# not exist.
-+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
-+
-+# Whether we need a single -rpath flag with a separated argument.
-+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
-+
-+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_direct=$hardcode_direct_F77
-+
-+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_minus_L=$hardcode_minus_L_F77
-+
-+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-+# the resulting binary.
-+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
-+
-+# Set to yes if building a shared library automatically hardcodes DIR into the library
-+# and all subsequent libraries and executables linked against it.
-+hardcode_automatic=$hardcode_automatic_F77
-+
-+# Variables whose values should be saved in libtool wrapper scripts and
-+# restored at relink time.
-+variables_saved_for_relink="$variables_saved_for_relink"
-+
-+# Whether libtool must link a program against all its dependency libraries.
-+link_all_deplibs=$link_all_deplibs_F77
-+
-+# Compile-time system search path for libraries
-+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-+
-+# Run-time system search path for libraries
-+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-+
-+# Fix the shell variable \$srcfile for the compiler.
-+fix_srcfile_path="$fix_srcfile_path_F77"
-+
-+# Set to yes if exported symbols are required.
-+always_export_symbols=$always_export_symbols_F77
-+
-+# The commands to list exported symbols.
-+export_symbols_cmds=$lt_export_symbols_cmds_F77
-+
-+# The commands to extract the exported symbol list from a shared archive.
-+extract_expsyms_cmds=$lt_extract_expsyms_cmds
-+
-+# Symbols that should not be listed in the preloaded symbols.
-+exclude_expsyms=$lt_exclude_expsyms_F77
-+
-+# Symbols that must always be exported.
-+include_expsyms=$lt_include_expsyms_F77
-+
-+# ### END LIBTOOL TAG CONFIG: $tagname
-+
-+__EOF__
-+
-+
-+else
-+ # If there is no Makefile yet, we rely on a make rule to execute
-+ # `config.status --recheck' to rerun these tests and create the
-+ # libtool script then.
-+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-+ if test -f "$ltmain_in"; then
-+ test -f Makefile && make "$ltmain"
-+ fi
-+fi
-+
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+CC="$lt_save_CC"
-+
-+ else
-+ tagname=""
-+ fi
-+ ;;
-+
-+ GCJ)
-+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-+
-+
-+
-+# Source file extension for Java test sources.
-+ac_ext=java
-+
-+# Object file extension for compiled Java test sources.
-+objext=o
-+objext_GCJ=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code="class foo {}\n"
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
-+
-+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-+
-+# If no C compiler was specified, use CC.
-+LTCC=${LTCC-"$CC"}
-+
-+# If no C compiler flags were specified, use CFLAGS.
-+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-+
-+# Allow CC to be a program name with arguments.
-+compiler=$CC
-+
-+
-+# save warnings/boilerplate of simple test code
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_compiler_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_link_test_code" >conftest.$ac_ext
-+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_linker_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+
-+# Allow CC to be a program name with arguments.
-+lt_save_CC="$CC"
-+CC=${GCJ-"gcj"}
-+compiler=$CC
-+compiler_GCJ=$CC
-+for cc_temp in $compiler""; do
-+ case $cc_temp in
-+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+
-+
-+# GCJ did not exist at the time GCC didn't implicitly link libc in.
-+archive_cmds_need_lc_GCJ=no
-+
-+old_archive_cmds_GCJ=$old_archive_cmds
-+
-+
-+lt_prog_compiler_no_builtin_flag_GCJ=
-+
-+if test "$GCC" = yes; then
-+ lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
-+
-+
-+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
-+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_cv_prog_compiler_rtti_exceptions=no
-+ ac_outfile=conftest.$ac_objext
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+ lt_compiler_flag="-fno-rtti -fno-exceptions"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ # The option is referenced via a variable to avoid confusing sed.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+@@ -16413,11 +16381,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:16416: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16384: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:16420: \$? = $ac_status" >&5
+ echo "$as_me:16388: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_cv_prog_compiler_rtti_exceptions=yes
-+ fi
-+ fi
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
-+
-+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
-+ lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
-+else
-+ :
-+fi
-+
-+fi
-+
-+lt_prog_compiler_wl_GCJ=
-+lt_prog_compiler_pic_GCJ=
-+lt_prog_compiler_static_GCJ=
-+
-+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
-+
-+ if test "$GCC" = yes; then
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ lt_prog_compiler_static_GCJ='-static'
-+
-+ case $host_os in
-+ aix*)
-+ # All AIX code is PIC.
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ # FIXME: we need at least 68020 code to build shared libraries, but
-+ # adding the `-m68020' flag to GCC prevents building anything better,
-+ # like `-m68040'.
-+ lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
-+ ;;
-+
-+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-+ # PIC is the default for these OSes.
-+ ;;
-+
-+ mingw* | pw32* | os2*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
-+ ;;
-+
-+ darwin* | rhapsody*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ lt_prog_compiler_pic_GCJ='-fno-common'
-+ ;;
-+
-+ interix3*)
-+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
-+ # Instead, we relocate shared libraries at runtime.
-+ ;;
-+
-+ msdosdjgpp*)
-+ # Just because we use GCC doesn't mean we suddenly get shared libraries
-+ # on systems that don't support them.
-+ lt_prog_compiler_can_build_shared_GCJ=no
-+ enable_shared=no
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ lt_prog_compiler_pic_GCJ=-Kconform_pic
-+ fi
-+ ;;
-+
-+ hpux*)
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_GCJ='-fPIC'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ lt_prog_compiler_pic_GCJ='-fPIC'
-+ ;;
-+ esac
-+ else
-+ # PORTME Check for flag to pass linker flags through the system compiler.
-+ case $host_os in
-+ aix*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 now supports IA64 processor
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ else
-+ lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
-+ fi
-+ ;;
-+ darwin*)
-+ # PIC is the default on this platform
-+ # Common symbols not allowed in MH_DYLIB files
-+ case $cc_basename in
-+ xlc*)
-+ lt_prog_compiler_pic_GCJ='-qnocommon'
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ ;;
-+ esac
-+ ;;
-+
-+ mingw* | pw32* | os2*)
-+ # This hack is so that the source file can tell whether it is being
-+ # built for inclusion in a dll (and should export symbols for example).
-+ lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
-+ ;;
-+
-+ hpux9* | hpux10* | hpux11*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
-+ # not for PA HP-UX.
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ # +Z the default
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_GCJ='+Z'
-+ ;;
-+ esac
-+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
-+ lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
-+ ;;
-+
-+ irix5* | irix6* | nonstopux*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ # PIC (with -KPIC) is the default.
-+ lt_prog_compiler_static_GCJ='-non_shared'
-+ ;;
-+
-+ newsos6)
-+ lt_prog_compiler_pic_GCJ='-KPIC'
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ ;;
-+
-+ linux*)
-+ case $cc_basename in
-+ icc* | ecc*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ lt_prog_compiler_pic_GCJ='-KPIC'
-+ lt_prog_compiler_static_GCJ='-static'
-+ ;;
-+ pgcc* | pgf77* | pgf90* | pgf95*)
-+ # Portland Group compilers (*not* the Pentium gcc compiler,
-+ # which looks to be a dead project)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ lt_prog_compiler_pic_GCJ='-fpic'
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ ;;
-+ ccc*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ # All Alpha code is PIC.
-+ lt_prog_compiler_static_GCJ='-non_shared'
-+ ;;
-+ esac
-+ ;;
-+
-+ osf3* | osf4* | osf5*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ # All OSF/1 code is PIC.
-+ lt_prog_compiler_static_GCJ='-non_shared'
-+ ;;
-+
-+ solaris*)
-+ lt_prog_compiler_pic_GCJ='-KPIC'
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ case $cc_basename in
-+ f77* | f90* | f95*)
-+ lt_prog_compiler_wl_GCJ='-Qoption ld ';;
-+ *)
-+ lt_prog_compiler_wl_GCJ='-Wl,';;
-+ esac
-+ ;;
-+
-+ sunos4*)
-+ lt_prog_compiler_wl_GCJ='-Qoption ld '
-+ lt_prog_compiler_pic_GCJ='-PIC'
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ ;;
-+
-+ sysv4 | sysv4.2uw2* | sysv4.3*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ lt_prog_compiler_pic_GCJ='-KPIC'
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ lt_prog_compiler_pic_GCJ='-Kconform_pic'
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ fi
-+ ;;
-+
-+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ lt_prog_compiler_pic_GCJ='-KPIC'
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ ;;
-+
-+ unicos*)
-+ lt_prog_compiler_wl_GCJ='-Wl,'
-+ lt_prog_compiler_can_build_shared_GCJ=no
-+ ;;
-+
-+ uts4*)
-+ lt_prog_compiler_pic_GCJ='-pic'
-+ lt_prog_compiler_static_GCJ='-Bstatic'
-+ ;;
-+
-+ *)
-+ lt_prog_compiler_can_build_shared_GCJ=no
-+ ;;
-+ esac
-+ fi
-+
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
-+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
-+
-+#
-+# Check to make sure the PIC flag actually works.
-+#
-+if test -n "$lt_prog_compiler_pic_GCJ"; then
-+
-+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
-+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
-+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_prog_compiler_pic_works_GCJ=no
-+ ac_outfile=conftest.$ac_objext
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+ lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ # The option is referenced via a variable to avoid confusing sed.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -16681,11 +16649,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:16684: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16652: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+- echo "$as_me:16688: \$? = $ac_status" >&5
+ echo "$as_me:16656: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_prog_compiler_pic_works_GCJ=yes
-+ fi
-+ fi
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
-+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
-+
-+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
-+ case $lt_prog_compiler_pic_GCJ in
-+ "" | " "*) ;;
-+ *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
-+ esac
-+else
-+ lt_prog_compiler_pic_GCJ=
-+ lt_prog_compiler_can_build_shared_GCJ=no
-+fi
-+
-+fi
-+case $host_os in
-+ # For platforms which do not support PIC, -DPIC is meaningless:
-+ *djgpp*)
-+ lt_prog_compiler_pic_GCJ=
-+ ;;
-+ *)
-+ lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
-+ ;;
-+esac
-+
-+#
-+# Check to make sure the static flag actually works.
-+#
-+wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\"
-+echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
-+if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_prog_compiler_static_works_GCJ=no
-+ save_LDFLAGS="$LDFLAGS"
-+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
-+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
-+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
-+ # The linker can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ if test -s conftest.err; then
-+ # Append any errors to the config.log.
-+ cat conftest.err 1>&5
-+ $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
-+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
-+ if diff conftest.exp conftest.er2 >/dev/null; then
-+ lt_prog_compiler_static_works_GCJ=yes
-+ fi
-+ else
-+ lt_prog_compiler_static_works_GCJ=yes
-+ fi
-+ fi
-+ $rm conftest*
-+ LDFLAGS="$save_LDFLAGS"
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5
-+echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6
-+
-+if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then
-+ :
-+else
-+ lt_prog_compiler_static_GCJ=
-+fi
-+
-+
-+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
-+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ lt_cv_prog_compiler_c_o_GCJ=no
-+ $rm -r conftest 2>/dev/null
-+ mkdir conftest
-+ cd conftest
-+ mkdir out
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ lt_compiler_flag="-o out/conftest2.$ac_objext"
-+ # Insert the option either (1) after the last *FLAGS variable, or
-+ # (2) before a word containing "conftest.", or (3) at the end.
-+ # Note that $ac_compile itself does not contain backslashes and begins
-+ # with a dollar sign (not a hyphen), so the echo should work correctly.
-+ lt_compile=`echo "$ac_compile" | $SED \
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+@@ -16785,11 +16753,11 @@
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+- (eval echo "\"\$as_me:16788: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16756: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&5
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+- echo "$as_me:16792: \$? = $ac_status" >&5
+ echo "$as_me:16760: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings
-+ $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
-+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
-+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
-+ lt_cv_prog_compiler_c_o_GCJ=yes
-+ fi
-+ fi
-+ chmod u+w . 2>&5
-+ $rm conftest*
-+ # SGI C++ compiler will create directory out/ii_files/ for
-+ # template instantiation
-+ test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
-+ $rm out/* && rmdir out
-+ cd ..
-+ rmdir conftest
-+ $rm conftest*
-+
-+fi
-+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
-+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
-+
-+
-+hard_links="nottested"
-+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
-+ # do not overwrite the value of need_locks provided by the user
-+ echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
-+ hard_links=yes
-+ $rm conftest*
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ touch conftest.a
-+ ln conftest.a conftest.b 2>&5 || hard_links=no
-+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
-+ echo "$as_me:$LINENO: result: $hard_links" >&5
-+echo "${ECHO_T}$hard_links" >&6
-+ if test "$hard_links" = no; then
-+ { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
-+ need_locks=warn
-+ fi
-+else
-+ need_locks=no
-+fi
-+
-+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
-+
-+ runpath_var=
-+ allow_undefined_flag_GCJ=
-+ enable_shared_with_static_runtimes_GCJ=no
-+ archive_cmds_GCJ=
-+ archive_expsym_cmds_GCJ=
-+ old_archive_From_new_cmds_GCJ=
-+ old_archive_from_expsyms_cmds_GCJ=
-+ export_dynamic_flag_spec_GCJ=
-+ whole_archive_flag_spec_GCJ=
-+ thread_safe_flag_spec_GCJ=
-+ hardcode_libdir_flag_spec_GCJ=
-+ hardcode_libdir_flag_spec_ld_GCJ=
-+ hardcode_libdir_separator_GCJ=
-+ hardcode_direct_GCJ=no
-+ hardcode_minus_L_GCJ=no
-+ hardcode_shlibpath_var_GCJ=unsupported
-+ link_all_deplibs_GCJ=unknown
-+ hardcode_automatic_GCJ=no
-+ module_cmds_GCJ=
-+ module_expsym_cmds_GCJ=
-+ always_export_symbols_GCJ=no
-+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ # include_expsyms should be a list of space-separated symbols to be *always*
-+ # included in the symbol list
-+ include_expsyms_GCJ=
-+ # exclude_expsyms can be an extended regexp of symbols to exclude
-+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
-+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-+ # as well as any symbol that contains `d'.
-+ exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
-+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-+ # platforms (ab)use it in PIC code, but their linkers get confused if
-+ # the symbol is explicitly referenced. Since portable code cannot
-+ # rely on this symbol name, it's probably fine to never include it in
-+ # preloaded symbol tables.
-+ extract_expsyms_cmds=
-+ # Just being paranoid about ensuring that cc_basename is set.
-+ for cc_temp in $compiler""; do
-+ case $cc_temp in
-+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+
-+ case $host_os in
-+ cygwin* | mingw* | pw32*)
-+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
-+ # When not using gcc, we currently assume that we are using
-+ # Microsoft Visual C++.
-+ if test "$GCC" != yes; then
-+ with_gnu_ld=no
-+ fi
-+ ;;
-+ interix*)
-+ # we just hope/assume this is gcc and not c89 (= MSVC++)
-+ with_gnu_ld=yes
-+ ;;
-+ openbsd*)
-+ with_gnu_ld=no
-+ ;;
-+ esac
-+
-+ ld_shlibs_GCJ=yes
-+ if test "$with_gnu_ld" = yes; then
-+ # If archive_cmds runs LD, not CC, wlarc should be empty
-+ wlarc='${wl}'
-+
-+ # Set some defaults for GNU ld with shared library support. These
-+ # are reset later if shared libraries are not supported. Putting them
-+ # here allows them to be overridden if necessary.
-+ runpath_var=LD_RUN_PATH
-+ hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
-+ export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
-+ # ancient GNU ld didn't support --whole-archive et. al.
-+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
-+ whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-+ else
-+ whole_archive_flag_spec_GCJ=
-+ fi
-+ supports_anon_versioning=no
-+ case `$LD -v 2>/dev/null` in
-+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
-+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
-+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
-+ *\ 2.11.*) ;; # other 2.11 versions
-+ *) supports_anon_versioning=yes ;;
-+ esac
-+
-+ # See if GNU ld supports shared libraries.
-+ case $host_os in
-+ aix3* | aix4* | aix5*)
-+ # On AIX/PPC, the GNU linker is very broken
-+ if test "$host_cpu" != ia64; then
-+ ld_shlibs_GCJ=no
-+ cat <<EOF 1>&2
-+
-+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-+*** to be unable to reliably create shared libraries on AIX.
-+*** Therefore, libtool is disabling shared libraries support. If you
-+*** really care for shared libraries, you may want to modify your PATH
-+*** so that a non-GNU linker is found, and then restart.
-+
-+EOF
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
-+ hardcode_minus_L_GCJ=yes
-+
-+ # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-+ # that the semantics of dynamic libraries on AmigaOS, at least up
-+ # to version 4, is to share data among multiple programs linked
-+ # with the same dynamic library. Since this doesn't match the
-+ # behavior of shared libraries on other platforms, we can't use
-+ # them.
-+ ld_shlibs_GCJ=no
-+ ;;
-+
-+ beos*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ allow_undefined_flag_GCJ=unsupported
-+ # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-+ # support --undefined. This deserves some investigation. FIXME
-+ archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ else
-+ ld_shlibs_GCJ=no
-+ fi
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
-+ # as there is no search path for DLLs.
-+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
-+ allow_undefined_flag_GCJ=unsupported
-+ always_export_symbols_GCJ=no
-+ enable_shared_with_static_runtimes_GCJ=yes
-+ export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-+
-+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ # If the export-symbols file already is a .def file (1st line
-+ # is EXPORTS), use it as is; otherwise, prepend...
-+ archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-+ cp $export_symbols $output_objdir/$soname.def;
-+ else
-+ echo EXPORTS > $output_objdir/$soname.def;
-+ cat $export_symbols >> $output_objdir/$soname.def;
-+ fi~
-+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
-+ else
-+ ld_shlibs_GCJ=no
-+ fi
-+ ;;
-+
-+ interix3*)
-+ hardcode_direct_GCJ=no
-+ hardcode_shlibpath_var_GCJ=no
-+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
-+ export_dynamic_flag_spec_GCJ='${wl}-E'
-+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
-+ # Instead, shared libraries are loaded at an image base (0x10000000 by
-+ # default) and relocated if they conflict, which is a slow very memory
-+ # consuming and fragmenting process. To avoid this, we pick a random,
-+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
-+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
-+ archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-+ ;;
-+
-+ linux*)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ tmp_addflag=
-+ case $cc_basename,$host_cpu in
-+ pgcc*) # Portland Group C compiler
-+ whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ tmp_addflag=' $pic_flag'
-+ ;;
-+ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
-+ whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-+ tmp_addflag=' $pic_flag -Mnomain' ;;
-+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
-+ tmp_addflag=' -i_dynamic' ;;
-+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
-+ tmp_addflag=' -i_dynamic -nofor_main' ;;
-+ ifc* | ifort*) # Intel Fortran compiler
-+ tmp_addflag=' -nofor_main' ;;
-+ esac
-+ archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+
-+ if test $supports_anon_versioning = yes; then
-+ archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
-+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
-+ $echo "local: *; };" >> $output_objdir/$libname.ver~
-+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-+ fi
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+@@ -17040,12 +17008,13 @@
+ $echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ link_all_deplibs_GCJ=no
-+ else
-+ ld_shlibs_GCJ=no
-+ fi
-+ ;;
-+
+ else
+ ld_shlibs_GCJ=no
+ fi
+ ;;
+
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-+ wlarc=
-+ else
-+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ fi
-+ ;;
-+
-+ solaris*)
-+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-+ ld_shlibs_GCJ=no
-+ cat <<EOF 1>&2
-+
-+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-+*** create shared libraries on Solaris systems. Therefore, libtool
-+*** is disabling shared libraries support. We urge you to upgrade GNU
-+*** binutils to release 2.9.1 or newer. Another option is to modify
-+*** your PATH or compiler configuration so that the native linker is
-+*** used, and then restart.
-+
-+EOF
-+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ else
-+ ld_shlibs_GCJ=no
-+ fi
-+ ;;
-+
-+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-+ case `$LD -v 2>&1` in
-+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-+ ld_shlibs_GCJ=no
-+ cat <<_LT_EOF 1>&2
-+
-+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-+*** reliably create shared libraries on SCO systems. Therefore, libtool
-+*** is disabling shared libraries support. We urge you to upgrade GNU
-+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
-+*** your PATH or compiler configuration so that the native linker is
-+*** used, and then restart.
-+
-+_LT_EOF
-+ ;;
-+ *)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
-+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
-+ else
-+ ld_shlibs_GCJ=no
-+ fi
-+ ;;
-+ esac
-+ ;;
-+
-+ sunos4*)
-+ archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ wlarc=
-+ hardcode_direct_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ *)
-+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-+ archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-+ else
-+ ld_shlibs_GCJ=no
-+ fi
-+ ;;
-+ esac
-+
-+ if test "$ld_shlibs_GCJ" = no; then
-+ runpath_var=
-+ hardcode_libdir_flag_spec_GCJ=
-+ export_dynamic_flag_spec_GCJ=
-+ whole_archive_flag_spec_GCJ=
-+ fi
-+ else
-+ # PORTME fill in a description of your system's linker (not GNU ld)
-+ case $host_os in
-+ aix3*)
-+ allow_undefined_flag_GCJ=unsupported
-+ always_export_symbols_GCJ=yes
-+ archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
-+ # Note: this linker hardcodes the directories in LIBPATH if there
-+ # are no directories specified by -L.
-+ hardcode_minus_L_GCJ=yes
-+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-+ # Neither direct hardcoding nor static linking is supported with a
-+ # broken collect2.
-+ hardcode_direct_GCJ=unsupported
-+ fi
-+ ;;
-+
-+ aix4* | aix5*)
-+ if test "$host_cpu" = ia64; then
-+ # On IA64, the linker does run time linking by default, so we don't
-+ # have to do anything special.
-+ aix_use_runtimelinking=no
-+ exp_sym_flag='-Bexport'
-+ no_entry_flag=""
-+ else
-+ # If we're using GNU nm, then we don't want the "-C" option.
-+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
-+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-+ export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-+ else
-+ export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-+ fi
-+ aix_use_runtimelinking=no
-+
-+ # Test if we are trying to use run time linking or normal
-+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-+ # need to do runtime linking.
-+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
-+ for ld_flag in $LDFLAGS; do
-+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-+ aix_use_runtimelinking=yes
-+ break
-+ fi
-+ done
-+ ;;
-+ esac
-+
-+ exp_sym_flag='-bexport'
-+ no_entry_flag='-bnoentry'
-+ fi
-+
-+ # When large executables or shared objects are built, AIX ld can
-+ # have problems creating the table of contents. If linking a library
-+ # or program results in "error TOC overflow" add -mminimal-toc to
-+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
-+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
-+
-+ archive_cmds_GCJ=''
-+ hardcode_direct_GCJ=yes
-+ hardcode_libdir_separator_GCJ=':'
-+ link_all_deplibs_GCJ=yes
-+
-+ if test "$GCC" = yes; then
-+ case $host_os in aix4.[012]|aix4.[012].*)
-+ # We only want to do this on AIX 4.2 and lower, the check
-+ # below for broken collect2 doesn't work under 4.3+
-+ collect2name=`${CC} -print-prog-name=collect2`
-+ if test -f "$collect2name" && \
-+ strings "$collect2name" | grep resolve_lib_name >/dev/null
-+ then
-+ # We have reworked collect2
-+ hardcode_direct_GCJ=yes
-+ else
-+ # We have old collect2
-+ hardcode_direct_GCJ=unsupported
-+ # It fails to find uninstalled libraries when the uninstalled
-+ # path is not listed in the libpath. Setting hardcode_minus_L
-+ # to unsupported forces relinking
-+ hardcode_minus_L_GCJ=yes
-+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
-+ hardcode_libdir_separator_GCJ=
-+ fi
-+ ;;
-+ esac
-+ shared_flag='-shared'
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag="$shared_flag "'${wl}-G'
-+ fi
-+ else
-+ # not using gcc
-+ if test "$host_cpu" = ia64; then
-+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
-+ # chokes on -Wl,-G. The following line is correct:
-+ shared_flag='-G'
-+ else
-+ if test "$aix_use_runtimelinking" = yes; then
-+ shared_flag='${wl}-G'
-+ else
-+ shared_flag='${wl}-bM:SRE'
-+ fi
-+ fi
-+ fi
-+
-+ # It seems that -bexpall does not export symbols beginning with
-+ # underscore (_), so it is better to generate a list of symbols to export.
-+ always_export_symbols_GCJ=yes
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # Warning - without using the other runtime loading flags (-brtl),
-+ # -berok will link without error, but may produce a broken library.
-+ allow_undefined_flag_GCJ='-berok'
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+@@ -17261,8 +17230,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+
-+ hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-+ else
-+ if test "$host_cpu" = ia64; then
-+ hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
-+ allow_undefined_flag_GCJ="-z nodefs"
-+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
-+ else
-+ # Determine the default libpath from the value encoded in an empty executable.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -17322,8 +17290,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+
-+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`
-+# Check for a 64-bit object if we didn't find anything.
-+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-+}'`; fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-+
-+ hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
-+ # Warning - without using the other run time loading flags,
-+ # -berok will link without error, but may produce a broken library.
-+ no_undefined_flag_GCJ=' ${wl}-bernotok'
-+ allow_undefined_flag_GCJ=' ${wl}-berok'
-+ # Exported symbols can be pulled into shared objects from archives
-+ whole_archive_flag_spec_GCJ='$convenience'
-+ archive_cmds_need_lc_GCJ=yes
-+ # This is similar to how AIX traditionally builds its shared libraries.
-+ archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-+ fi
-+ fi
-+ ;;
-+
-+ amigaos*)
-+ archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
-+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
-+ hardcode_minus_L_GCJ=yes
-+ # see comment about different semantics on the GNU ld section
-+ ld_shlibs_GCJ=no
-+ ;;
-+
-+ bsdi[45]*)
-+ export_dynamic_flag_spec_GCJ=-rdynamic
-+ ;;
-+
-+ cygwin* | mingw* | pw32*)
-+ # When not using gcc, we currently assume that we are using
-+ # Microsoft Visual C++.
-+ # hardcode_libdir_flag_spec is actually meaningless, as there is
-+ # no search path for DLLs.
-+ hardcode_libdir_flag_spec_GCJ=' '
-+ allow_undefined_flag_GCJ=unsupported
-+ # Tell ltmain to make .lib files, not .a files.
-+ libext=lib
-+ # Tell ltmain to make .dll files, not .so files.
-+ shrext_cmds=".dll"
-+ # FIXME: Setting linknames here is a bad hack.
-+ archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-+ # The linker will automatically build a .lib file if we build a DLL.
-+ old_archive_From_new_cmds_GCJ='true'
-+ # FIXME: Should let the user specify the lib program.
-+ old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
-+ fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
-+ enable_shared_with_static_runtimes_GCJ=yes
-+ ;;
-+
-+ darwin* | rhapsody*)
-+ case $host_os in
-+ rhapsody* | darwin1.[012])
-+ allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
-+ ;;
-+ *) # Darwin 1.3 on
-+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-+ allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ else
-+ case ${MACOSX_DEPLOYMENT_TARGET} in
-+ 10.[012])
-+ allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-+ ;;
-+ 10.*)
-+ allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+ esac
-+ archive_cmds_need_lc_GCJ=no
-+ hardcode_direct_GCJ=no
-+ hardcode_automatic_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=unsupported
-+ whole_archive_flag_spec_GCJ=''
-+ link_all_deplibs_GCJ=yes
-+ if test "$GCC" = yes ; then
-+ output_verbose_link_cmd='echo'
-+ archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-+ module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ else
-+ case $cc_basename in
-+ xlc*)
-+ output_verbose_link_cmd='echo'
-+ archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
-+ module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-+ archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-+ ;;
-+ *)
-+ ld_shlibs_GCJ=no
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ dgux*)
-+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ freebsd1*)
-+ ld_shlibs_GCJ=no
-+ ;;
-+
-+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-+ # support. Future versions do this automatically, but an explicit c++rt0.o
-+ # does not break anything, and helps significantly (at the cost of a little
-+ # extra space).
-+ freebsd2.2*)
-+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
-+ hardcode_direct_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-+ freebsd2*)
-+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct_GCJ=yes
-+ hardcode_minus_L_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -17477,11 +17444,20 @@
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+- freebsd* | kfreebsd*-gnu | dragonfly*)
+ freebsd* | dragonfly*)
+ archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
@@ -70433,794 +2895,60 @@
+
+ # GNU/kFreeBSD uses gcc -shared to do shared libraries.
+ kfreebsd*-gnu)
-+ archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
-+ hardcode_direct_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=no
+ archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
+ hardcode_direct_GCJ=yes
+ hardcode_shlibpath_var_GCJ=no
+ link_all_deplibs_GCJ=no
-+ ;;
-+
-+ hpux9*)
-+ if test "$GCC" = yes; then
-+ archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ else
-+ archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+ fi
-+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator_GCJ=:
-+ hardcode_direct_GCJ=yes
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L_GCJ=yes
-+ export_dynamic_flag_spec_GCJ='${wl}-E'
-+ ;;
-+
-+ hpux10*)
-+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-+ archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-+ fi
-+ if test "$with_gnu_ld" = no; then
-+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator_GCJ=:
-+
-+ hardcode_direct_GCJ=yes
-+ export_dynamic_flag_spec_GCJ='${wl}-E'
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L_GCJ=yes
-+ fi
-+ ;;
-+
-+ hpux11*)
-+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-+ case $host_cpu in
-+ hppa*64*)
-+ archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ ia64*)
-+ archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ else
-+ case $host_cpu in
-+ hppa*64*)
-+ archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ ia64*)
-+ archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ *)
-+ archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-+ ;;
-+ esac
-+ fi
-+ if test "$with_gnu_ld" = no; then
-+ hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
-+ hardcode_libdir_separator_GCJ=:
-+
-+ case $host_cpu in
-+ hppa*64*|ia64*)
-+ hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
-+ hardcode_direct_GCJ=no
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+ *)
-+ hardcode_direct_GCJ=yes
-+ export_dynamic_flag_spec_GCJ='${wl}-E'
-+
-+ # hardcode_minus_L: Not really in the search PATH,
-+ # but as the default location of the library.
-+ hardcode_minus_L_GCJ=yes
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ irix5* | irix6* | nonstopux*)
-+ if test "$GCC" = yes; then
-+ archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
-+ fi
-+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_GCJ=:
-+ link_all_deplibs_GCJ=yes
-+ ;;
-+
+ ;;
+
+ hpux9*)
+@@ -17579,7 +17555,7 @@
+ link_all_deplibs_GCJ=yes
+ ;;
+
+- netbsd*)
+ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
-+ else
-+ archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
-+ fi
-+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
-+ hardcode_direct_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ newsos6)
-+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct_GCJ=yes
-+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_GCJ=:
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ openbsd*)
-+ hardcode_direct_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=no
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
-+ export_dynamic_flag_spec_GCJ='${wl}-E'
-+ else
-+ case $host_os in
-+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
-+ ;;
-+ *)
-+ archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ os2*)
-+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
-+ hardcode_minus_L_GCJ=yes
-+ allow_undefined_flag_GCJ=unsupported
-+ archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-+ old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-+ ;;
-+
-+ osf3*)
-+ if test "$GCC" = yes; then
-+ allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ else
-+ allow_undefined_flag_GCJ=' -expect_unresolved \*'
-+ archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ fi
-+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-+ hardcode_libdir_separator_GCJ=:
-+ ;;
-+
-+ osf4* | osf5*) # as osf3* with the addition of -msym flag
-+ if test "$GCC" = yes; then
-+ allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
-+ archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-+ hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-+ else
-+ allow_undefined_flag_GCJ=' -expect_unresolved \*'
-+ archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-+ archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
-+
-+ # Both c and cxx compiler support -rpath directly
-+ hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
-+ fi
-+ hardcode_libdir_separator_GCJ=:
-+ ;;
-+
-+ solaris*)
-+ no_undefined_flag_GCJ=' -z text'
-+ if test "$GCC" = yes; then
-+ wlarc='${wl}'
-+ archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-+ else
-+ wlarc=''
-+ archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
-+ fi
-+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
-+ hardcode_shlibpath_var_GCJ=no
-+ case $host_os in
-+ solaris2.[0-5] | solaris2.[0-5].*) ;;
-+ *)
-+ # The compiler driver will combine linker options so we
-+ # cannot just pass the convience library names through
-+ # without $wl, iff we do not link with $LD.
-+ # Luckily, gcc supports the same syntax we need for Sun Studio.
-+ # Supported since Solaris 2.6 (maybe 2.5.1?)
-+ case $wlarc in
-+ '')
-+ whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
-+ *)
-+ whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
-+ esac ;;
-+ esac
-+ link_all_deplibs_GCJ=yes
-+ ;;
-+
-+ sunos4*)
-+ if test "x$host_vendor" = xsequent; then
-+ # Use $CC to link under sequent, because it throws in some extra .o
-+ # files that make .init and .fini sections work.
-+ archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-+ fi
-+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
-+ hardcode_direct_GCJ=yes
-+ hardcode_minus_L_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ sysv4)
-+ case $host_vendor in
-+ sni)
-+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct_GCJ=yes # is this really true???
-+ ;;
-+ siemens)
-+ ## LD is ld it makes a PLAMLIB
-+ ## CC just makes a GrossModule.
-+ archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-+ reload_cmds_GCJ='$CC -r -o $output$reload_objs'
-+ hardcode_direct_GCJ=no
-+ ;;
-+ motorola)
-+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
-+ ;;
-+ esac
-+ runpath_var='LD_RUN_PATH'
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ sysv4.3*)
-+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_shlibpath_var_GCJ=no
-+ export_dynamic_flag_spec_GCJ='-Bexport'
-+ ;;
-+
-+ sysv4*MP*)
-+ if test -d /usr/nec; then
-+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_shlibpath_var_GCJ=no
-+ runpath_var=LD_RUN_PATH
-+ hardcode_runpath_var=yes
-+ ld_shlibs_GCJ=yes
-+ fi
-+ ;;
-+
-+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
-+ no_undefined_flag_GCJ='${wl}-z,text'
-+ archive_cmds_need_lc_GCJ=no
-+ hardcode_shlibpath_var_GCJ=no
-+ runpath_var='LD_RUN_PATH'
-+
-+ if test "$GCC" = yes; then
-+ archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ fi
-+ ;;
-+
-+ sysv5* | sco3.2v5* | sco5v6*)
-+ # Note: We can NOT use -z defs as we might desire, because we do not
-+ # link with -lc, and that would cause any symbols used from libc to
-+ # always be unresolved, which means just about no library would
-+ # ever link correctly. If we're not using GNU ld we use -z text
-+ # though, which does catch some bad symbols but isn't as heavy-handed
-+ # as -z defs.
-+ no_undefined_flag_GCJ='${wl}-z,text'
-+ allow_undefined_flag_GCJ='${wl}-z,nodefs'
-+ archive_cmds_need_lc_GCJ=no
-+ hardcode_shlibpath_var_GCJ=no
-+ hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-+ hardcode_libdir_separator_GCJ=':'
-+ link_all_deplibs_GCJ=yes
-+ export_dynamic_flag_spec_GCJ='${wl}-Bexport'
-+ runpath_var='LD_RUN_PATH'
-+
-+ if test "$GCC" = yes; then
-+ archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ else
-+ archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-+ fi
-+ ;;
-+
-+ uts4*)
-+ archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-+ hardcode_libdir_flag_spec_GCJ='-L$libdir'
-+ hardcode_shlibpath_var_GCJ=no
-+ ;;
-+
-+ *)
-+ ld_shlibs_GCJ=no
-+ ;;
-+ esac
-+ fi
-+
-+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
-+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
-+test "$ld_shlibs_GCJ" = no && can_build_shared=no
-+
-+#
-+# Do we need to explicitly link libc?
-+#
-+case "x$archive_cmds_need_lc_GCJ" in
-+x|xyes)
-+ # Assume -lc should be added
-+ archive_cmds_need_lc_GCJ=yes
-+
-+ if test "$enable_shared" = yes && test "$GCC" = yes; then
-+ case $archive_cmds_GCJ in
-+ *'~'*)
-+ # FIXME: we may have to deal with multi-command sequences.
-+ ;;
-+ '$CC '*)
-+ # Test whether the compiler implicitly links with -lc since on some
-+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
-+ # to ld, don't add -lc before -lgcc.
-+ echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
-+ $rm conftest*
-+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
-+
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } 2>conftest.err; then
-+ soname=conftest
-+ lib=conftest
-+ libobjs=conftest.$ac_objext
-+ deplibs=
-+ wl=$lt_prog_compiler_wl_GCJ
-+ pic_flag=$lt_prog_compiler_pic_GCJ
-+ compiler_flags=-v
-+ linker_flags=-v
-+ verstring=
-+ output_objdir=.
-+ libname=conftest
-+ lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
-+ allow_undefined_flag_GCJ=
-+ if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-+ (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }
-+ then
-+ archive_cmds_need_lc_GCJ=no
-+ else
-+ archive_cmds_need_lc_GCJ=yes
-+ fi
-+ allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
-+ else
-+ cat conftest.err 1>&5
-+ fi
-+ $rm conftest*
-+ echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
-+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
-+ ;;
-+ esac
-+ fi
-+ ;;
-+esac
-+
-+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
-+library_names_spec=
-+libname_spec='lib$name'
-+soname_spec=
-+shrext_cmds=".so"
-+postinstall_cmds=
-+postuninstall_cmds=
-+finish_cmds=
-+finish_eval=
-+shlibpath_var=
-+shlibpath_overrides_runpath=unknown
-+version_type=none
-+dynamic_linker="$host_os ld.so"
-+sys_lib_dlsearch_path_spec="/lib /usr/lib"
-+if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
-+ # if the path contains ";" then we assume it to be the separator
-+ # otherwise default to the standard path separator (i.e. ":") - it is
-+ # assumed that no part of a normal pathname contains ";" but that should
-+ # okay in the real world where ";" in dirpaths is itself problematic.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+else
-+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-+fi
-+need_lib_prefix=unknown
-+hardcode_into_libs=no
-+
-+# when you set need_version to no, make sure it does not cause -set_version
-+# flags to be left without arguments
-+need_version=unknown
-+
-+case $host_os in
-+aix3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
-+ shlibpath_var=LIBPATH
-+
-+ # AIX 3 has no versioning support, so we append a major version to the name.
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+
-+aix4* | aix5*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ hardcode_into_libs=yes
-+ if test "$host_cpu" = ia64; then
-+ # AIX 5 supports IA64
-+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ else
-+ # With GCC up to 2.95.x, collect2 would create an import file
-+ # for dependence libraries. The import file would start with
-+ # the line `#! .'. This would cause the generated library to
-+ # depend on `.', always an invalid library. This was fixed in
-+ # development snapshots of GCC prior to 3.0.
-+ case $host_os in
-+ aix4 | aix4.[01] | aix4.[01].*)
-+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
-+ echo ' yes '
-+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
-+ :
-+ else
-+ can_build_shared=no
-+ fi
-+ ;;
-+ esac
-+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-+ # soname into executable. Probably we can add versioning support to
-+ # collect2, so additional links can be useful in future.
-+ if test "$aix_use_runtimelinking" = yes; then
-+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
-+ # instead of lib<name>.a to let people know that these are not
-+ # typical AIX shared libraries.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ else
-+ # We preserve .a as extension for shared libraries through AIX4.2
-+ # and later when we are not doing run time linking.
-+ library_names_spec='${libname}${release}.a $libname.a'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ fi
-+ shlibpath_var=LIBPATH
-+ fi
-+ ;;
-+
-+amigaos*)
-+ library_names_spec='$libname.ixlibrary $libname.a'
-+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
-+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
-+ ;;
-+
-+beos*)
-+ library_names_spec='${libname}${shared_ext}'
-+ dynamic_linker="$host_os ld.so"
-+ shlibpath_var=LIBRARY_PATH
-+ ;;
-+
-+bsdi[45]*)
-+ version_type=linux
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-+ # the default ld.so.conf also contains /usr/contrib/lib and
-+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-+ # libtool to hard-code these into programs
-+ ;;
-+
-+cygwin* | mingw* | pw32*)
-+ version_type=windows
-+ shrext_cmds=".dll"
-+ need_version=no
-+ need_lib_prefix=no
-+
-+ case $GCC,$host_os in
-+ yes,cygwin* | yes,mingw* | yes,pw32*)
-+ library_names_spec='$libname.dll.a'
-+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
-+ postinstall_cmds='base_file=`basename \${file}`~
-+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
-+ dldir=$destdir/`dirname \$dlpath`~
-+ test -d \$dldir || mkdir -p \$dldir~
-+ $install_prog $dir/$dlname \$dldir/$dlname~
-+ chmod a+x \$dldir/$dlname'
-+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
-+ dlpath=$dir/\$dldll~
-+ $rm \$dlpath'
-+ shlibpath_overrides_runpath=yes
-+
-+ case $host_os in
-+ cygwin*)
-+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
-+ ;;
-+ mingw*)
-+ # MinGW DLLs use traditional 'lib' prefix
-+ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-+ if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
-+ # It is most probably a Windows format PATH printed by
-+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
-+ # path with ; separators, and with drive letters. We can handle the
-+ # drive letters (cygwin fileutils understands them), so leave them,
-+ # especially as we might pass files found there to a mingw objdump,
-+ # which wouldn't understand a cygwinified path. Ahh.
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
-+ else
-+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
-+ fi
-+ ;;
-+ pw32*)
-+ # pw32 DLLs use 'pw' prefix rather than 'lib'
-+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-+ ;;
-+ esac
-+ ;;
-+
-+ *)
-+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-+ ;;
-+ esac
-+ dynamic_linker='Win32 ld.exe'
-+ # FIXME: first we should search . and the directory the executable is in
-+ shlibpath_var=PATH
-+ ;;
-+
-+darwin* | rhapsody*)
-+ dynamic_linker="$host_os dyld"
-+ version_type=darwin
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
-+ soname_spec='${libname}${release}${major}$shared_ext'
-+ shlibpath_overrides_runpath=yes
-+ shlibpath_var=DYLD_LIBRARY_PATH
-+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-+ if test "$GCC" = yes; then
-+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-+ else
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
-+ ;;
-+
-+dgux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+freebsd1*)
-+ dynamic_linker=no
-+ ;;
-+
-+kfreebsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+freebsd* | dragonfly*)
-+ # DragonFly does not have aout. When/if they implement a new
-+ # versioning mechanism, adjust this.
-+ if test -x /usr/bin/objformat; then
-+ objformat=`/usr/bin/objformat`
-+ else
-+ case $host_os in
-+ freebsd[123]*) objformat=aout ;;
-+ *) objformat=elf ;;
-+ esac
-+ fi
-+ version_type=freebsd-$objformat
-+ case $version_type in
-+ freebsd-elf*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ need_version=no
-+ need_lib_prefix=no
-+ ;;
-+ freebsd-*)
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
-+ need_version=yes
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_os in
-+ freebsd2*)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ freebsd3.[01]* | freebsdelf3.[01]*)
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
-+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+ freebsd*) # from 4.6 on
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+ esac
-+ ;;
-+
-+gnu*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ ;;
-+
-+hpux9* | hpux10* | hpux11*)
-+ # Give a soname corresponding to the major version so that dld.sl refuses to
-+ # link against other versions.
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ case $host_cpu in
-+ ia64*)
-+ shrext_cmds='.so'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.so"
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ if test "X$HPUX_IA64_MODE" = X32; then
-+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-+ else
-+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-+ fi
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ hppa*64*)
-+ shrext_cmds='.sl'
-+ hardcode_into_libs=yes
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
-+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
-+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-+ ;;
-+ *)
-+ shrext_cmds='.sl'
-+ dynamic_linker="$host_os dld.sl"
-+ shlibpath_var=SHLIB_PATH
-+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ ;;
-+ esac
-+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
-+ postinstall_cmds='chmod 555 $lib'
-+ ;;
-+
-+interix3*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ ;;
-+
-+irix5* | irix6* | nonstopux*)
-+ case $host_os in
-+ nonstopux*) version_type=nonstopux ;;
-+ *)
-+ if test "$lt_cv_prog_gnu_ld" = yes; then
-+ version_type=linux
-+ else
-+ version_type=irix
-+ fi ;;
-+ esac
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ case $host_os in
-+ irix5* | nonstopux*)
-+ libsuff= shlibsuff=
-+ ;;
-+ *)
-+ case $LD in # libtool.m4 will add one of these switches to LD
-+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
-+ libsuff= shlibsuff= libmagic=32-bit;;
-+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
-+ libsuff=32 shlibsuff=N32 libmagic=N32;;
-+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
-+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
-+ *) libsuff= shlibsuff= libmagic=never-match;;
-+ esac
-+ ;;
-+ esac
-+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-+ hardcode_into_libs=yes
-+ ;;
-+
-+# No shared lib support for Linux oldld, aout, or coff.
-+linux*oldld* | linux*aout* | linux*coff*)
-+ dynamic_linker=no
-+ ;;
-+
-+# This must be Linux ELF.
-+linux*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ # This implies no fast_install, which is unacceptable.
-+ # Some rework will be needed to allow for fast_install
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+@@ -18250,31 +18226,10 @@
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+- # find out which ABI we are using
+- libsuff=
+- case "$host_cpu" in
+- x86_64*|s390x*|powerpc64*)
+- echo '#line 18257 "configure"' > conftest.$ac_ext
+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then
+- case `/usr/bin/file conftest.$ac_objext` in
+- *64-bit*)
+- libsuff=64
+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+- ;;
+- esac
+- fi
+- rm -rf conftest*
+- ;;
+- esac
+-
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+ # powerpc, because MkLinux only supported shared libraries with the
-+ # GNU dynamic linker. Since this was broken with cross compilers,
-+ # most powerpc-linux boxes support dynamic linking these days and
-+ # people can always --disable-shared, the test was removed, and we
-+ # assume the GNU/Linux dynamic linker is in use.
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+@@ -18286,6 +18241,18 @@
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsdelf*-gnu)
+ version_type=linux
+ need_lib_prefix=no
@@ -71233,186534 +2961,1455 @@
+ dynamic_linker='NetBSD ld.elf_so'
+ ;;
+
-+knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=no
-+ hardcode_into_libs=yes
-+ dynamic_linker='GNU ld.so'
-+ ;;
-+
-+netbsd*)
-+ version_type=sunos
-+ need_lib_prefix=no
-+ need_version=no
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ dynamic_linker='NetBSD (a.out) ld.so'
-+ else
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ dynamic_linker='NetBSD ld.elf_so'
-+ fi
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ ;;
-+
-+newsos6)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+nto-qnx*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+
-+openbsd*)
-+ version_type=sunos
-+ sys_lib_dlsearch_path_spec="/usr/lib"
-+ need_lib_prefix=no
-+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-+ case $host_os in
-+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-+ *) need_version=no ;;
-+ esac
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+ case $host_os in
-+ openbsd2.[89] | openbsd2.[89].*)
-+ shlibpath_overrides_runpath=no
-+ ;;
-+ *)
-+ shlibpath_overrides_runpath=yes
-+ ;;
-+ esac
-+ else
-+ shlibpath_overrides_runpath=yes
-+ fi
-+ ;;
-+
-+os2*)
-+ libname_spec='$name'
-+ shrext_cmds=".dll"
-+ need_lib_prefix=no
-+ library_names_spec='$libname${shared_ext} $libname.a'
-+ dynamic_linker='OS/2 ld.exe'
-+ shlibpath_var=LIBPATH
-+ ;;
-+
-+osf3* | osf4* | osf5*)
-+ version_type=osf
-+ need_lib_prefix=no
-+ need_version=no
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-+ ;;
-+
-+solaris*)
-+ version_type=linux
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ hardcode_into_libs=yes
-+ # ldd complains unless libraries are executable
-+ postinstall_cmds='chmod +x $lib'
-+ ;;
-+
-+sunos4*)
-+ version_type=sunos
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
-+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ shlibpath_overrides_runpath=yes
-+ if test "$with_gnu_ld" = yes; then
-+ need_lib_prefix=no
-+ fi
-+ need_version=yes
-+ ;;
-+
-+sysv4 | sysv4.3*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ case $host_vendor in
-+ sni)
-+ shlibpath_overrides_runpath=no
-+ need_lib_prefix=no
-+ export_dynamic_flag_spec='${wl}-Blargedynsym'
-+ runpath_var=LD_RUN_PATH
-+ ;;
-+ siemens)
-+ need_lib_prefix=no
-+ ;;
-+ motorola)
-+ need_lib_prefix=no
-+ need_version=no
-+ shlibpath_overrides_runpath=no
-+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-+ ;;
-+ esac
-+ ;;
-+
-+sysv4*MP*)
-+ if test -d /usr/nec ;then
-+ version_type=linux
-+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-+ soname_spec='$libname${shared_ext}.$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ fi
-+ ;;
-+
-+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-+ version_type=freebsd-elf
-+ need_lib_prefix=no
-+ need_version=no
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ hardcode_into_libs=yes
-+ if test "$with_gnu_ld" = yes; then
-+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-+ shlibpath_overrides_runpath=no
-+ else
-+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-+ shlibpath_overrides_runpath=yes
-+ case $host_os in
-+ sco3.2v5*)
-+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
-+ ;;
-+ esac
-+ fi
-+ sys_lib_dlsearch_path_spec='/usr/lib'
-+ ;;
-+
-+uts4*)
-+ version_type=linux
-+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-+ soname_spec='${libname}${release}${shared_ext}$major'
-+ shlibpath_var=LD_LIBRARY_PATH
-+ ;;
-+
-+*)
-+ dynamic_linker=no
-+ ;;
-+esac
-+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-+echo "${ECHO_T}$dynamic_linker" >&6
-+test "$dynamic_linker" = no && can_build_shared=no
-+
-+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-+if test "$GCC" = yes; then
-+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-+fi
-+
-+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
-+hardcode_action_GCJ=
-+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
-+ test -n "$runpath_var_GCJ" || \
-+ test "X$hardcode_automatic_GCJ" = "Xyes" ; then
-+
-+ # We can hardcode non-existant directories.
-+ if test "$hardcode_direct_GCJ" != no &&
-+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
-+ # have to relink, otherwise we might link with an installed library
-+ # when we should be linking with a yet-to-be-installed one
-+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
-+ test "$hardcode_minus_L_GCJ" != no; then
-+ # Linking always hardcodes the temporary library directory.
-+ hardcode_action_GCJ=relink
-+ else
-+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
-+ hardcode_action_GCJ=immediate
-+ fi
-+else
-+ # We cannot hardcode anything, or else we can only hardcode existing
-+ # directories.
-+ hardcode_action_GCJ=unsupported
-+fi
-+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
-+echo "${ECHO_T}$hardcode_action_GCJ" >&6
-+
-+if test "$hardcode_action_GCJ" = relink; then
-+ # Fast installation is not supported
-+ enable_fast_install=no
-+elif test "$shlibpath_overrides_runpath" = yes ||
-+ test "$enable_shared" = no; then
-+ # Fast installation is not necessary
-+ enable_fast_install=needless
-+fi
-+
-+
-+# The else clause should only fire when bootstrapping the
-+# libtool distribution, otherwise you forgot to ship ltmain.sh
-+# with your package, and you will get complaints that there are
-+# no rules to generate ltmain.sh.
-+if test -f "$ltmain"; then
-+ # See if we are running on zsh, and set the options which allow our commands through
-+ # without removal of \ escapes.
-+ if test -n "${ZSH_VERSION+set}" ; then
-+ setopt NO_GLOB_SUBST
-+ fi
-+ # Now quote all the things that may contain metacharacters while being
-+ # careful not to overquote the AC_SUBSTed values. We take copies of the
-+ # variables and quote the copies for generation of the libtool script.
-+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-+ SED SHELL STRIP \
-+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-+ deplibs_check_method reload_flag reload_cmds need_locks \
-+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-+ lt_cv_sys_global_symbol_to_c_name_address \
-+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-+ old_postinstall_cmds old_postuninstall_cmds \
-+ compiler_GCJ \
-+ CC_GCJ \
-+ LD_GCJ \
-+ lt_prog_compiler_wl_GCJ \
-+ lt_prog_compiler_pic_GCJ \
-+ lt_prog_compiler_static_GCJ \
-+ lt_prog_compiler_no_builtin_flag_GCJ \
-+ export_dynamic_flag_spec_GCJ \
-+ thread_safe_flag_spec_GCJ \
-+ whole_archive_flag_spec_GCJ \
-+ enable_shared_with_static_runtimes_GCJ \
-+ old_archive_cmds_GCJ \
-+ old_archive_from_new_cmds_GCJ \
-+ predep_objects_GCJ \
-+ postdep_objects_GCJ \
-+ predeps_GCJ \
-+ postdeps_GCJ \
-+ compiler_lib_search_path_GCJ \
-+ archive_cmds_GCJ \
-+ archive_expsym_cmds_GCJ \
-+ postinstall_cmds_GCJ \
-+ postuninstall_cmds_GCJ \
-+ old_archive_from_expsyms_cmds_GCJ \
-+ allow_undefined_flag_GCJ \
-+ no_undefined_flag_GCJ \
-+ export_symbols_cmds_GCJ \
-+ hardcode_libdir_flag_spec_GCJ \
-+ hardcode_libdir_flag_spec_ld_GCJ \
-+ hardcode_libdir_separator_GCJ \
-+ hardcode_automatic_GCJ \
-+ module_cmds_GCJ \
-+ module_expsym_cmds_GCJ \
-+ lt_cv_prog_compiler_c_o_GCJ \
-+ exclude_expsyms_GCJ \
-+ include_expsyms_GCJ; do
-+
-+ case $var in
-+ old_archive_cmds_GCJ | \
-+ old_archive_from_new_cmds_GCJ | \
-+ archive_cmds_GCJ | \
-+ archive_expsym_cmds_GCJ | \
-+ module_cmds_GCJ | \
-+ module_expsym_cmds_GCJ | \
-+ old_archive_from_expsyms_cmds_GCJ | \
-+ export_symbols_cmds_GCJ | \
-+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
-+ postinstall_cmds | postuninstall_cmds | \
-+ old_postinstall_cmds | old_postuninstall_cmds | \
-+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-+ # Double-quote double-evaled strings.
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-+ ;;
-+ *)
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-+ ;;
-+ esac
-+ done
-+
-+ case $lt_echo in
-+ *'\$0 --fallback-echo"')
-+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-+ ;;
-+ esac
-+
-+cfgfile="$ofile"
-+
-+ cat <<__EOF__ >> "$cfgfile"
-+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-+
-+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-+
-+# Shell to use when invoking shell scripts.
-+SHELL=$lt_SHELL
-+
-+# Whether or not to build shared libraries.
-+build_libtool_libs=$enable_shared
-+
-+# Whether or not to build static libraries.
-+build_old_libs=$enable_static
-+
-+# Whether or not to add -lc for building shared libraries.
-+build_libtool_need_lc=$archive_cmds_need_lc_GCJ
-+
-+# Whether or not to disallow shared libs when runtime libs are static
-+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
-+
-+# Whether or not to optimize for fast installation.
-+fast_install=$enable_fast_install
-+
-+# The host system.
-+host_alias=$host_alias
-+host=$host
-+host_os=$host_os
-+
-+# The build system.
-+build_alias=$build_alias
-+build=$build
-+build_os=$build_os
-+
-+# An echo program that does not interpret backslashes.
-+echo=$lt_echo
-+
-+# The archiver.
-+AR=$lt_AR
-+AR_FLAGS=$lt_AR_FLAGS
-+
-+# A C compiler.
-+LTCC=$lt_LTCC
-+
-+# LTCC compiler flags.
-+LTCFLAGS=$lt_LTCFLAGS
-+
-+# A language-specific compiler.
-+CC=$lt_compiler_GCJ
-+
-+# Is the compiler the GNU C compiler?
-+with_gcc=$GCC_GCJ
-+
-+# An ERE matcher.
-+EGREP=$lt_EGREP
-+
-+# The linker used to build libraries.
-+LD=$lt_LD_GCJ
-+
-+# Whether we need hard or soft links.
-+LN_S=$lt_LN_S
-+
-+# A BSD-compatible nm program.
-+NM=$lt_NM
-+
-+# A symbol stripping program
-+STRIP=$lt_STRIP
-+
-+# Used to examine libraries when file_magic_cmd begins "file"
-+MAGIC_CMD=$MAGIC_CMD
-+
-+# Used on cygwin: DLL creation program.
-+DLLTOOL="$DLLTOOL"
-+
-+# Used on cygwin: object dumper.
-+OBJDUMP="$OBJDUMP"
-+
-+# Used on cygwin: assembler.
-+AS="$AS"
-+
-+# The name of the directory that contains temporary libtool files.
-+objdir=$objdir
-+
-+# How to create reloadable object files.
-+reload_flag=$lt_reload_flag
-+reload_cmds=$lt_reload_cmds
-+
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl_GCJ
-+
-+# Object file suffix (normally "o").
-+objext="$ac_objext"
-+
-+# Old archive suffix (normally "a").
-+libext="$libext"
-+
-+# Shared library suffix (normally ".so").
-+shrext_cmds='$shrext_cmds'
-+
-+# Executable file suffix (normally "").
-+exeext="$exeext"
-+
-+# Additional compiler flags for building library objects.
-+pic_flag=$lt_lt_prog_compiler_pic_GCJ
-+pic_mode=$pic_mode
-+
-+# What is the maximum length of a command?
-+max_cmd_len=$lt_cv_sys_max_cmd_len
-+
-+# Does compiler simultaneously support -c and -o options?
-+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
-+
-+# Must we lock files when doing compilation?
-+need_locks=$lt_need_locks
-+
-+# Do we need the lib prefix for modules?
-+need_lib_prefix=$need_lib_prefix
-+
-+# Do we need a version for libraries?
-+need_version=$need_version
-+
-+# Whether dlopen is supported.
-+dlopen_support=$enable_dlopen
-+
-+# Whether dlopen of programs is supported.
-+dlopen_self=$enable_dlopen_self
-+
-+# Whether dlopen of statically linked programs is supported.
-+dlopen_self_static=$enable_dlopen_self_static
-+
-+# Compiler flag to prevent dynamic linking.
-+link_static_flag=$lt_lt_prog_compiler_static_GCJ
-+
-+# Compiler flag to turn off builtin functions.
-+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
-+
-+# Compiler flag to allow reflexive dlopens.
-+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
-+
-+# Compiler flag to generate shared objects directly from archives.
-+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
-+
-+# Compiler flag to generate thread-safe objects.
-+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
-+
-+# Library versioning type.
-+version_type=$version_type
-+
-+# Format of library name prefix.
-+libname_spec=$lt_libname_spec
-+
-+# List of archive names. First name is the real one, the rest are links.
-+# The last name is the one that the linker finds with -lNAME.
-+library_names_spec=$lt_library_names_spec
-+
-+# The coded name of the library, if different from the real name.
-+soname_spec=$lt_soname_spec
-+
-+# Commands used to build and install an old-style archive.
-+RANLIB=$lt_RANLIB
-+old_archive_cmds=$lt_old_archive_cmds_GCJ
-+old_postinstall_cmds=$lt_old_postinstall_cmds
-+old_postuninstall_cmds=$lt_old_postuninstall_cmds
-+
-+# Create an old-style archive from a shared archive.
-+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
-+
-+# Create a temporary old-style archive to link instead of a shared archive.
-+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
-+
-+# Commands used to build and install a shared archive.
-+archive_cmds=$lt_archive_cmds_GCJ
-+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
-+postinstall_cmds=$lt_postinstall_cmds
-+postuninstall_cmds=$lt_postuninstall_cmds
-+
-+# Commands used to build a loadable module (assumed same as above if empty)
-+module_cmds=$lt_module_cmds_GCJ
-+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
-+
-+# Commands to strip libraries.
-+old_striplib=$lt_old_striplib
-+striplib=$lt_striplib
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predep_objects=$lt_predep_objects_GCJ
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdep_objects=$lt_postdep_objects_GCJ
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predeps=$lt_predeps_GCJ
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdeps=$lt_postdeps_GCJ
-+
-+# The library search path used internally by the compiler when linking
-+# a shared library.
-+compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
-+
-+# Method to check whether dependent libraries are shared objects.
-+deplibs_check_method=$lt_deplibs_check_method
-+
-+# Command to use when deplibs_check_method == file_magic.
-+file_magic_cmd=$lt_file_magic_cmd
-+
-+# Flag that allows shared libraries with undefined symbols to be built.
-+allow_undefined_flag=$lt_allow_undefined_flag_GCJ
-+
-+# Flag that forces no undefined symbols.
-+no_undefined_flag=$lt_no_undefined_flag_GCJ
-+
-+# Commands used to finish a libtool library installation in a directory.
-+finish_cmds=$lt_finish_cmds
-+
-+# Same as above, but a single script fragment to be evaled but not shown.
-+finish_eval=$lt_finish_eval
-+
-+# Take the output of nm and produce a listing of raw symbols and C names.
-+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-+
-+# Transform the output of nm in a proper C declaration
-+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-+
-+# Transform the output of nm in a C name address pair
-+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-+
-+# This is the shared library runtime path variable.
-+runpath_var=$runpath_var
-+
-+# This is the shared library path variable.
-+shlibpath_var=$shlibpath_var
-+
-+# Is shlibpath searched before the hard-coded library search path?
-+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-+
-+# How to hardcode a shared library path into an executable.
-+hardcode_action=$hardcode_action_GCJ
-+
-+# Whether we should hardcode library paths into libraries.
-+hardcode_into_libs=$hardcode_into_libs
-+
-+# Flag to hardcode \$libdir into a binary during linking.
-+# This must work even if \$libdir does not exist.
-+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
-+
-+# If ld is used when linking, flag to hardcode \$libdir into
-+# a binary during linking. This must work even if \$libdir does
-+# not exist.
-+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
-+
-+# Whether we need a single -rpath flag with a separated argument.
-+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
-+
-+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_direct=$hardcode_direct_GCJ
-+
-+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_minus_L=$hardcode_minus_L_GCJ
-+
-+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-+# the resulting binary.
-+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
-+
-+# Set to yes if building a shared library automatically hardcodes DIR into the library
-+# and all subsequent libraries and executables linked against it.
-+hardcode_automatic=$hardcode_automatic_GCJ
-+
-+# Variables whose values should be saved in libtool wrapper scripts and
-+# restored at relink time.
-+variables_saved_for_relink="$variables_saved_for_relink"
-+
-+# Whether libtool must link a program against all its dependency libraries.
-+link_all_deplibs=$link_all_deplibs_GCJ
-+
-+# Compile-time system search path for libraries
-+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-+
-+# Run-time system search path for libraries
-+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-+
-+# Fix the shell variable \$srcfile for the compiler.
-+fix_srcfile_path="$fix_srcfile_path_GCJ"
-+
-+# Set to yes if exported symbols are required.
-+always_export_symbols=$always_export_symbols_GCJ
-+
-+# The commands to list exported symbols.
-+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
-+
-+# The commands to extract the exported symbol list from a shared archive.
-+extract_expsyms_cmds=$lt_extract_expsyms_cmds
-+
-+# Symbols that should not be listed in the preloaded symbols.
-+exclude_expsyms=$lt_exclude_expsyms_GCJ
-+
-+# Symbols that must always be exported.
-+include_expsyms=$lt_include_expsyms_GCJ
-+
-+# ### END LIBTOOL TAG CONFIG: $tagname
-+
-+__EOF__
-+
-+
-+else
-+ # If there is no Makefile yet, we rely on a make rule to execute
-+ # `config.status --recheck' to rerun these tests and create the
-+ # libtool script then.
-+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-+ if test -f "$ltmain_in"; then
-+ test -f Makefile && make "$ltmain"
-+ fi
-+fi
-+
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+CC="$lt_save_CC"
-+
-+ else
-+ tagname=""
-+ fi
-+ ;;
-+
-+ RC)
-+
-+
-+
-+# Source file extension for RC test sources.
-+ac_ext=rc
-+
-+# Object file extension for compiled RC test sources.
-+objext=o
-+objext_RC=$objext
-+
-+# Code to be used in simple compile tests
-+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
-+
-+# Code to be used in simple link tests
-+lt_simple_link_test_code="$lt_simple_compile_test_code"
-+
-+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-+
-+# If no C compiler was specified, use CC.
-+LTCC=${LTCC-"$CC"}
-+
-+# If no C compiler flags were specified, use CFLAGS.
-+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
-+
-+# Allow CC to be a program name with arguments.
-+compiler=$CC
-+
-+
-+# save warnings/boilerplate of simple test code
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
-+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_compiler_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+ac_outfile=conftest.$ac_objext
-+printf "$lt_simple_link_test_code" >conftest.$ac_ext
-+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
-+_lt_linker_boilerplate=`cat conftest.err`
-+$rm conftest*
-+
-+
-+# Allow CC to be a program name with arguments.
-+lt_save_CC="$CC"
-+CC=${RC-"windres"}
-+compiler=$CC
-+compiler_RC=$CC
-+for cc_temp in $compiler""; do
-+ case $cc_temp in
-+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+ \-*) ;;
-+ *) break;;
-+ esac
-+done
-+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-+
-+lt_cv_prog_compiler_c_o_RC=yes
-+
-+# The else clause should only fire when bootstrapping the
-+# libtool distribution, otherwise you forgot to ship ltmain.sh
-+# with your package, and you will get complaints that there are
-+# no rules to generate ltmain.sh.
-+if test -f "$ltmain"; then
-+ # See if we are running on zsh, and set the options which allow our commands through
-+ # without removal of \ escapes.
-+ if test -n "${ZSH_VERSION+set}" ; then
-+ setopt NO_GLOB_SUBST
-+ fi
-+ # Now quote all the things that may contain metacharacters while being
-+ # careful not to overquote the AC_SUBSTed values. We take copies of the
-+ # variables and quote the copies for generation of the libtool script.
-+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-+ SED SHELL STRIP \
-+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-+ deplibs_check_method reload_flag reload_cmds need_locks \
-+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-+ lt_cv_sys_global_symbol_to_c_name_address \
-+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-+ old_postinstall_cmds old_postuninstall_cmds \
-+ compiler_RC \
-+ CC_RC \
-+ LD_RC \
-+ lt_prog_compiler_wl_RC \
-+ lt_prog_compiler_pic_RC \
-+ lt_prog_compiler_static_RC \
-+ lt_prog_compiler_no_builtin_flag_RC \
-+ export_dynamic_flag_spec_RC \
-+ thread_safe_flag_spec_RC \
-+ whole_archive_flag_spec_RC \
-+ enable_shared_with_static_runtimes_RC \
-+ old_archive_cmds_RC \
-+ old_archive_from_new_cmds_RC \
-+ predep_objects_RC \
-+ postdep_objects_RC \
-+ predeps_RC \
-+ postdeps_RC \
-+ compiler_lib_search_path_RC \
-+ archive_cmds_RC \
-+ archive_expsym_cmds_RC \
-+ postinstall_cmds_RC \
-+ postuninstall_cmds_RC \
-+ old_archive_from_expsyms_cmds_RC \
-+ allow_undefined_flag_RC \
-+ no_undefined_flag_RC \
-+ export_symbols_cmds_RC \
-+ hardcode_libdir_flag_spec_RC \
-+ hardcode_libdir_flag_spec_ld_RC \
-+ hardcode_libdir_separator_RC \
-+ hardcode_automatic_RC \
-+ module_cmds_RC \
-+ module_expsym_cmds_RC \
-+ lt_cv_prog_compiler_c_o_RC \
-+ exclude_expsyms_RC \
-+ include_expsyms_RC; do
-+
-+ case $var in
-+ old_archive_cmds_RC | \
-+ old_archive_from_new_cmds_RC | \
-+ archive_cmds_RC | \
-+ archive_expsym_cmds_RC | \
-+ module_cmds_RC | \
-+ module_expsym_cmds_RC | \
-+ old_archive_from_expsyms_cmds_RC | \
-+ export_symbols_cmds_RC | \
-+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
-+ postinstall_cmds | postuninstall_cmds | \
-+ old_postinstall_cmds | old_postuninstall_cmds | \
-+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-+ # Double-quote double-evaled strings.
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-+ ;;
-+ *)
-+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-+ ;;
-+ esac
-+ done
-+
-+ case $lt_echo in
-+ *'\$0 --fallback-echo"')
-+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-+ ;;
-+ esac
-+
-+cfgfile="$ofile"
-+
-+ cat <<__EOF__ >> "$cfgfile"
-+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-+
-+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-+
-+# Shell to use when invoking shell scripts.
-+SHELL=$lt_SHELL
-+
-+# Whether or not to build shared libraries.
-+build_libtool_libs=$enable_shared
-+
-+# Whether or not to build static libraries.
-+build_old_libs=$enable_static
-+
-+# Whether or not to add -lc for building shared libraries.
-+build_libtool_need_lc=$archive_cmds_need_lc_RC
-+
-+# Whether or not to disallow shared libs when runtime libs are static
-+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
-+
-+# Whether or not to optimize for fast installation.
-+fast_install=$enable_fast_install
-+
-+# The host system.
-+host_alias=$host_alias
-+host=$host
-+host_os=$host_os
-+
-+# The build system.
-+build_alias=$build_alias
-+build=$build
-+build_os=$build_os
-+
-+# An echo program that does not interpret backslashes.
-+echo=$lt_echo
-+
-+# The archiver.
-+AR=$lt_AR
-+AR_FLAGS=$lt_AR_FLAGS
-+
-+# A C compiler.
-+LTCC=$lt_LTCC
-+
-+# LTCC compiler flags.
-+LTCFLAGS=$lt_LTCFLAGS
-+
-+# A language-specific compiler.
-+CC=$lt_compiler_RC
-+
-+# Is the compiler the GNU C compiler?
-+with_gcc=$GCC_RC
-+
-+# An ERE matcher.
-+EGREP=$lt_EGREP
-+
-+# The linker used to build libraries.
-+LD=$lt_LD_RC
-+
-+# Whether we need hard or soft links.
-+LN_S=$lt_LN_S
-+
-+# A BSD-compatible nm program.
-+NM=$lt_NM
-+
-+# A symbol stripping program
-+STRIP=$lt_STRIP
-+
-+# Used to examine libraries when file_magic_cmd begins "file"
-+MAGIC_CMD=$MAGIC_CMD
-+
-+# Used on cygwin: DLL creation program.
-+DLLTOOL="$DLLTOOL"
-+
-+# Used on cygwin: object dumper.
-+OBJDUMP="$OBJDUMP"
-+
-+# Used on cygwin: assembler.
-+AS="$AS"
-+
-+# The name of the directory that contains temporary libtool files.
-+objdir=$objdir
-+
-+# How to create reloadable object files.
-+reload_flag=$lt_reload_flag
-+reload_cmds=$lt_reload_cmds
-+
-+# How to pass a linker flag through the compiler.
-+wl=$lt_lt_prog_compiler_wl_RC
-+
-+# Object file suffix (normally "o").
-+objext="$ac_objext"
-+
-+# Old archive suffix (normally "a").
-+libext="$libext"
-+
-+# Shared library suffix (normally ".so").
-+shrext_cmds='$shrext_cmds'
-+
-+# Executable file suffix (normally "").
-+exeext="$exeext"
-+
-+# Additional compiler flags for building library objects.
-+pic_flag=$lt_lt_prog_compiler_pic_RC
-+pic_mode=$pic_mode
-+
-+# What is the maximum length of a command?
-+max_cmd_len=$lt_cv_sys_max_cmd_len
-+
-+# Does compiler simultaneously support -c and -o options?
-+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
-+
-+# Must we lock files when doing compilation?
-+need_locks=$lt_need_locks
-+
-+# Do we need the lib prefix for modules?
-+need_lib_prefix=$need_lib_prefix
-+
-+# Do we need a version for libraries?
-+need_version=$need_version
-+
-+# Whether dlopen is supported.
-+dlopen_support=$enable_dlopen
-+
-+# Whether dlopen of programs is supported.
-+dlopen_self=$enable_dlopen_self
-+
-+# Whether dlopen of statically linked programs is supported.
-+dlopen_self_static=$enable_dlopen_self_static
-+
-+# Compiler flag to prevent dynamic linking.
-+link_static_flag=$lt_lt_prog_compiler_static_RC
-+
-+# Compiler flag to turn off builtin functions.
-+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
-+
-+# Compiler flag to allow reflexive dlopens.
-+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
-+
-+# Compiler flag to generate shared objects directly from archives.
-+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
-+
-+# Compiler flag to generate thread-safe objects.
-+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
-+
-+# Library versioning type.
-+version_type=$version_type
-+
-+# Format of library name prefix.
-+libname_spec=$lt_libname_spec
-+
-+# List of archive names. First name is the real one, the rest are links.
-+# The last name is the one that the linker finds with -lNAME.
-+library_names_spec=$lt_library_names_spec
-+
-+# The coded name of the library, if different from the real name.
-+soname_spec=$lt_soname_spec
-+
-+# Commands used to build and install an old-style archive.
-+RANLIB=$lt_RANLIB
-+old_archive_cmds=$lt_old_archive_cmds_RC
-+old_postinstall_cmds=$lt_old_postinstall_cmds
-+old_postuninstall_cmds=$lt_old_postuninstall_cmds
-+
-+# Create an old-style archive from a shared archive.
-+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
-+
-+# Create a temporary old-style archive to link instead of a shared archive.
-+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
-+
-+# Commands used to build and install a shared archive.
-+archive_cmds=$lt_archive_cmds_RC
-+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
-+postinstall_cmds=$lt_postinstall_cmds
-+postuninstall_cmds=$lt_postuninstall_cmds
-+
-+# Commands used to build a loadable module (assumed same as above if empty)
-+module_cmds=$lt_module_cmds_RC
-+module_expsym_cmds=$lt_module_expsym_cmds_RC
-+
-+# Commands to strip libraries.
-+old_striplib=$lt_old_striplib
-+striplib=$lt_striplib
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predep_objects=$lt_predep_objects_RC
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdep_objects=$lt_postdep_objects_RC
-+
-+# Dependencies to place before the objects being linked to create a
-+# shared library.
-+predeps=$lt_predeps_RC
-+
-+# Dependencies to place after the objects being linked to create a
-+# shared library.
-+postdeps=$lt_postdeps_RC
-+
-+# The library search path used internally by the compiler when linking
-+# a shared library.
-+compiler_lib_search_path=$lt_compiler_lib_search_path_RC
-+
-+# Method to check whether dependent libraries are shared objects.
-+deplibs_check_method=$lt_deplibs_check_method
-+
-+# Command to use when deplibs_check_method == file_magic.
-+file_magic_cmd=$lt_file_magic_cmd
-+
-+# Flag that allows shared libraries with undefined symbols to be built.
-+allow_undefined_flag=$lt_allow_undefined_flag_RC
-+
-+# Flag that forces no undefined symbols.
-+no_undefined_flag=$lt_no_undefined_flag_RC
-+
-+# Commands used to finish a libtool library installation in a directory.
-+finish_cmds=$lt_finish_cmds
-+
-+# Same as above, but a single script fragment to be evaled but not shown.
-+finish_eval=$lt_finish_eval
-+
-+# Take the output of nm and produce a listing of raw symbols and C names.
-+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
-+
-+# Transform the output of nm in a proper C declaration
-+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
-+
-+# Transform the output of nm in a C name address pair
-+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-+
-+# This is the shared library runtime path variable.
-+runpath_var=$runpath_var
-+
-+# This is the shared library path variable.
-+shlibpath_var=$shlibpath_var
-+
-+# Is shlibpath searched before the hard-coded library search path?
-+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-+
-+# How to hardcode a shared library path into an executable.
-+hardcode_action=$hardcode_action_RC
-+
-+# Whether we should hardcode library paths into libraries.
-+hardcode_into_libs=$hardcode_into_libs
-+
-+# Flag to hardcode \$libdir into a binary during linking.
-+# This must work even if \$libdir does not exist.
-+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
-+
-+# If ld is used when linking, flag to hardcode \$libdir into
-+# a binary during linking. This must work even if \$libdir does
-+# not exist.
-+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
-+
-+# Whether we need a single -rpath flag with a separated argument.
-+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
-+
-+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_direct=$hardcode_direct_RC
-+
-+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_minus_L=$hardcode_minus_L_RC
-+
-+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-+# the resulting binary.
-+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
-+
-+# Set to yes if building a shared library automatically hardcodes DIR into the library
-+# and all subsequent libraries and executables linked against it.
-+hardcode_automatic=$hardcode_automatic_RC
-+
-+# Variables whose values should be saved in libtool wrapper scripts and
-+# restored at relink time.
-+variables_saved_for_relink="$variables_saved_for_relink"
-+
-+# Whether libtool must link a program against all its dependency libraries.
-+link_all_deplibs=$link_all_deplibs_RC
-+
-+# Compile-time system search path for libraries
-+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-+
-+# Run-time system search path for libraries
-+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-+
-+# Fix the shell variable \$srcfile for the compiler.
-+fix_srcfile_path="$fix_srcfile_path_RC"
-+
-+# Set to yes if exported symbols are required.
-+always_export_symbols=$always_export_symbols_RC
-+
-+# The commands to list exported symbols.
-+export_symbols_cmds=$lt_export_symbols_cmds_RC
-+
-+# The commands to extract the exported symbol list from a shared archive.
-+extract_expsyms_cmds=$lt_extract_expsyms_cmds
-+
-+# Symbols that should not be listed in the preloaded symbols.
-+exclude_expsyms=$lt_exclude_expsyms_RC
-+
-+# Symbols that must always be exported.
-+include_expsyms=$lt_include_expsyms_RC
-+
-+# ### END LIBTOOL TAG CONFIG: $tagname
-+
-+__EOF__
-+
-+
-+else
-+ # If there is no Makefile yet, we rely on a make rule to execute
-+ # `config.status --recheck' to rerun these tests and create the
-+ # libtool script then.
-+ ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-+ if test -f "$ltmain_in"; then
-+ test -f Makefile && make "$ltmain"
-+ fi
-+fi
-+
-+
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+CC="$lt_save_CC"
-+
-+ ;;
-+
-+ *)
-+ { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
-+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
-+ { (exit 1); exit 1; }; }
-+ ;;
-+ esac
-+
-+ # Append the new tag name to the list of available tags.
-+ if test -n "$tagname" ; then
-+ available_tags="$available_tags $tagname"
-+ fi
-+ fi
-+ done
-+ IFS="$lt_save_ifs"
-+
-+ # Now substitute the updated list of available tags.
-+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
-+ mv "${ofile}T" "$ofile"
-+ chmod +x "$ofile"
-+ else
-+ rm -f "${ofile}T"
-+ { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
-+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+
-+
-+# This can be used to rebuild libtool when needed
-+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-+
-+# Always use our own libtool.
-+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-+
-+# Prevent multiple expansion
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+#### Look for mono
-+MONO_REQUIRED_VERSION=0.95
-+
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for mono >= $MONO_REQUIRED_VERSION" >&5
-+echo $ECHO_N "checking for mono >= $MONO_REQUIRED_VERSION... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "mono >= $MONO_REQUIRED_VERSION" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking MONO_DEPENDENCY_CFLAGS" >&5
-+echo $ECHO_N "checking MONO_DEPENDENCY_CFLAGS... $ECHO_C" >&6
-+ MONO_DEPENDENCY_CFLAGS=`$PKG_CONFIG --cflags "mono >= $MONO_REQUIRED_VERSION"`
-+ echo "$as_me:$LINENO: result: $MONO_DEPENDENCY_CFLAGS" >&5
-+echo "${ECHO_T}$MONO_DEPENDENCY_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking MONO_DEPENDENCY_LIBS" >&5
-+echo $ECHO_N "checking MONO_DEPENDENCY_LIBS... $ECHO_C" >&6
-+ MONO_DEPENDENCY_LIBS=`$PKG_CONFIG --libs "mono >= $MONO_REQUIRED_VERSION"`
-+ echo "$as_me:$LINENO: result: $MONO_DEPENDENCY_LIBS" >&5
-+echo "${ECHO_T}$MONO_DEPENDENCY_LIBS" >&6
-+ else
-+ MONO_DEPENDENCY_CFLAGS=""
-+ MONO_DEPENDENCY_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ MONO_DEPENDENCY_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "mono >= $MONO_REQUIRED_VERSION"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_mono=true
-+ else
-+ have_mono=false
-+ fi
-+
-+
-+if test "x$enable_mono" = "xyes"; then
-+ if test "x$have_mono" = "xfalse"; then
-+ { { echo "$as_me:$LINENO: error: Mono was not found" >&5
-+echo "$as_me: error: Mono was not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+if test "x$have_mono" = "xtrue"; then
-+ if test `uname -s` = "Darwin"; then
-+ # Extract the first word of "mint", so it can be a program name with args.
-+set dummy mint; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_RUNTIME+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $RUNTIME in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_RUNTIME="$RUNTIME" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_RUNTIME="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_RUNTIME" && ac_cv_path_RUNTIME="no"
-+ ;;
-+esac
-+fi
-+RUNTIME=$ac_cv_path_RUNTIME
-+
-+if test -n "$RUNTIME"; then
-+ echo "$as_me:$LINENO: result: $RUNTIME" >&5
-+echo "${ECHO_T}$RUNTIME" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ # Extract the first word of "mcs", so it can be a program name with args.
-+set dummy mcs; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_CSC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $CSC in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_CSC="$CSC" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_CSC="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_CSC" && ac_cv_path_CSC="no"
-+ ;;
-+esac
-+fi
-+CSC=$ac_cv_path_CSC
-+
-+if test -n "$CSC"; then
-+ echo "$as_me:$LINENO: result: $CSC" >&5
-+echo "${ECHO_T}$CSC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ LIB_PREFIX=
-+ LIB_SUFFIX=.dylib
-+ else
-+ # Extract the first word of "mono", so it can be a program name with args.
-+set dummy mono; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_RUNTIME+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $RUNTIME in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_RUNTIME="$RUNTIME" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_RUNTIME="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_RUNTIME" && ac_cv_path_RUNTIME="no"
-+ ;;
-+esac
-+fi
-+RUNTIME=$ac_cv_path_RUNTIME
-+
-+if test -n "$RUNTIME"; then
-+ echo "$as_me:$LINENO: result: $RUNTIME" >&5
-+echo "${ECHO_T}$RUNTIME" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ # Extract the first word of "mcs", so it can be a program name with args.
-+set dummy mcs; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_CSC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $CSC in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_CSC="$CSC" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_CSC="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_CSC" && ac_cv_path_CSC="no"
-+ ;;
-+esac
-+fi
-+CSC=$ac_cv_path_CSC
-+
-+if test -n "$CSC"; then
-+ echo "$as_me:$LINENO: result: $CSC" >&5
-+echo "${ECHO_T}$CSC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ LIB_PREFIX=.so
-+ LIB_SUFFIX=
-+ fi
-+else
-+ # Extract the first word of "csc.exe", so it can be a program name with args.
-+set dummy csc.exe; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_CSC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $CSC in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_CSC="$CSC" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_CSC="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_CSC" && ac_cv_path_CSC="no"
-+ ;;
-+esac
-+fi
-+CSC=$ac_cv_path_CSC
-+
-+if test -n "$CSC"; then
-+ echo "$as_me:$LINENO: result: $CSC" >&5
-+echo "${ECHO_T}$CSC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ RUNTIME=
-+ LIB_PREFIX=
-+ LIB_SUFFIX=.dylib
-+fi
-+
-+if test x$enable_mono = xyes; then
-+ if test x$have_mcs = xno ; then
-+ { { echo "$as_me:$LINENO: error: Building Mono bindings explicitly required, but mcs compiler not found" >&5
-+echo "$as_me: error: Building Mono bindings explicitly required, but mcs compiler not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+
-+ ### Test for GACUTIL
-+ # Extract the first word of "gacutil", so it can be a program name with args.
-+set dummy gacutil; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_GACUTIL+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $GACUTIL in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_GACUTIL="$GACUTIL" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_GACUTIL="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_GACUTIL" && ac_cv_path_GACUTIL="no"
-+ ;;
-+esac
-+fi
-+GACUTIL=$ac_cv_path_GACUTIL
-+
-+if test -n "$GACUTIL"; then
-+ echo "$as_me:$LINENO: result: $GACUTIL" >&5
-+echo "${ECHO_T}$GACUTIL" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ if test "x$GACUTIL" = "xno" ; then
-+ { { echo "$as_me:$LINENO: error: No gacutil tool found" >&5
-+echo "$as_me: error: No gacutil tool found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+
-+
-+fi
-+
-+if test x$enable_mono = xauto ; then
-+ if test x$CSC = xno ; then
-+ enable_mono=no
-+ else
-+ ### Test for GACUTIL
-+ # Extract the first word of "gacutil", so it can be a program name with args.
-+set dummy gacutil; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_GACUTIL+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $GACUTIL in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_GACUTIL="$GACUTIL" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_GACUTIL="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_GACUTIL" && ac_cv_path_GACUTIL="no"
-+ ;;
-+esac
-+fi
-+GACUTIL=$ac_cv_path_GACUTIL
-+
-+if test -n "$GACUTIL"; then
-+ echo "$as_me:$LINENO: result: $GACUTIL" >&5
-+echo "${ECHO_T}$GACUTIL" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ if test "x$GACUTIL" = "xno" ; then
-+ enable_mono=no
-+ else
-+ enable_mono=yes
-+ fi
-+ fi
-+fi
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+if test x$enable_mono = xyes; then
-+ DBUS_USE_CSC_TRUE=
-+ DBUS_USE_CSC_FALSE='#'
-+else
-+ DBUS_USE_CSC_TRUE='#'
-+ DBUS_USE_CSC_FALSE=
-+fi
-+
-+
-+#### Look for monodoc
-+MONODOC_REQUIRED_VERSION=0.16
-+
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for monodoc >= $MONODOC_REQUIRED_VERSION" >&5
-+echo $ECHO_N "checking for monodoc >= $MONODOC_REQUIRED_VERSION... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "monodoc >= $MONODOC_REQUIRED_VERSION" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking MONODOC_DEPENDENCY_CFLAGS" >&5
-+echo $ECHO_N "checking MONODOC_DEPENDENCY_CFLAGS... $ECHO_C" >&6
-+ MONODOC_DEPENDENCY_CFLAGS=`$PKG_CONFIG --cflags "monodoc >= $MONODOC_REQUIRED_VERSION"`
-+ echo "$as_me:$LINENO: result: $MONODOC_DEPENDENCY_CFLAGS" >&5
-+echo "${ECHO_T}$MONODOC_DEPENDENCY_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking MONODOC_DEPENDENCY_LIBS" >&5
-+echo $ECHO_N "checking MONODOC_DEPENDENCY_LIBS... $ECHO_C" >&6
-+ MONODOC_DEPENDENCY_LIBS=`$PKG_CONFIG --libs "monodoc >= $MONODOC_REQUIRED_VERSION"`
-+ echo "$as_me:$LINENO: result: $MONODOC_DEPENDENCY_LIBS" >&5
-+echo "${ECHO_T}$MONODOC_DEPENDENCY_LIBS" >&6
-+ else
-+ MONODOC_DEPENDENCY_CFLAGS=""
-+ MONODOC_DEPENDENCY_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ MONODOC_DEPENDENCY_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "monodoc >= $MONODOC_REQUIRED_VERSION"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_monodoc=yes
-+ else
-+ have_monodoc=no
-+ fi
-+
-+
-+if test x$enable_mono_docs = xyes; then
-+ if test x$have_monodoc = xno ; then
-+ { { echo "$as_me:$LINENO: error: Building Mono docs explicitly required, but monodoc not found" >&5
-+echo "$as_me: error: Building Mono docs explicitly required, but monodoc not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ # Extract the first word of "monodoc", so it can be a program name with args.
-+set dummy monodoc; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_MONODOC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $MONODOC in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_MONODOC="$MONODOC" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_MONODOC="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_MONODOC" && ac_cv_path_MONODOC="no"
-+ ;;
-+esac
-+fi
-+MONODOC=$ac_cv_path_MONODOC
-+
-+if test -n "$MONODOC"; then
-+ echo "$as_me:$LINENO: result: $MONODOC" >&5
-+echo "${ECHO_T}$MONODOC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ if test x$MONODOC = xno; then
-+ { { echo "$as_me:$LINENO: error: Building Mono docs explicitly required, but monodoc not found" >&5
-+echo "$as_me: error: Building Mono docs explicitly required, but monodoc not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ fi
-+fi
-+
-+if test x$enable_mono_docs = xauto ; then
-+ if test x$have_monodoc = xno ; then
-+ enable_mono_docs=no
-+ MONODOC=
-+ else
-+ # Extract the first word of "monodoc", so it can be a program name with args.
-+set dummy monodoc; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_MONODOC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $MONODOC in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_MONODOC="$MONODOC" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_MONODOC="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_MONODOC" && ac_cv_path_MONODOC="no"
-+ ;;
-+esac
-+fi
-+MONODOC=$ac_cv_path_MONODOC
-+
-+if test -n "$MONODOC"; then
-+ echo "$as_me:$LINENO: result: $MONODOC" >&5
-+echo "${ECHO_T}$MONODOC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ if test x$MONODOC = xno; then
-+ enable_mono_docs=no
-+ MONODOC=
-+ else
-+ enable_mono_docs=yes
-+ fi
-+ fi
-+fi
-+
-+
-+
-+
-+
-+if test "x$enable_mono_docs" = "xyes"; then
-+ ENABLE_MONODOC_TRUE=
-+ ENABLE_MONODOC_FALSE='#'
-+else
-+ ENABLE_MONODOC_TRUE='#'
-+ ENABLE_MONODOC_FALSE=
-+fi
-+
-+
-+# let ourselves use our own unstable API
-+CPPFLAGS="-DDBUS_API_SUBJECT_TO_CHANGE=1 $CPPFLAGS"
-+# compress spaces in flags
-+CFLAGS=`echo "$CFLAGS" | sed -e 's/ +/ /g'`
-+CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/ +/ /g'`
-+CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ +/ /g'`
-+
-+if test x$enable_gcov = xyes; then
-+ ## so that config.h changes when you toggle gcov support
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_GCOV_ENABLED 1
-+_ACEOF
-+
-+
-+ echo "$as_me:$LINENO: checking for gcc 3.3 version of gcov file format" >&5
-+echo $ECHO_N "checking for gcc 3.3 version of gcov file format... $ECHO_C" >&6
-+ have_gcc33_gcov=no
-+ if test "$cross_compiling" = yes; then
-+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot run test program while cross compiling
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+ if (__GNUC__ >=3 && __GNUC_MINOR__ >= 3) exit (0); else exit (1);
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ have_gcc33_gcov=yes
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+ if test x$have_gcc33_gcov = xyes ; then
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_HAVE_GCC33_GCOV 1
-+_ACEOF
-+
-+ fi
-+ echo "$as_me:$LINENO: result: $have_gcc33_gcov" >&5
-+echo "${ECHO_T}$have_gcc33_gcov" >&6
-+fi
-+
-+
-+if test x$enable_gcov = xyes; then
-+ DBUS_GCOV_ENABLED_TRUE=
-+ DBUS_GCOV_ENABLED_FALSE='#'
-+else
-+ DBUS_GCOV_ENABLED_TRUE='#'
-+ DBUS_GCOV_ENABLED_FALSE=
-+fi
-+
-+
-+#### Integer sizes
-+
-+echo "$as_me:$LINENO: checking for char" >&5
-+echo $ECHO_N "checking for char... $ECHO_C" >&6
-+if test "${ac_cv_type_char+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+if ((char *) 0)
-+ return 0;
-+if (sizeof (char))
-+ return 0;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ knetbsd*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+@@ -20262,8 +20229,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_type_char=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_type_char=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
-+echo "${ECHO_T}$ac_cv_type_char" >&6
-+
-+echo "$as_me:$LINENO: checking size of char" >&5
-+echo $ECHO_N "checking size of char... $ECHO_C" >&6
-+if test "${ac_cv_sizeof_char+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$ac_cv_type_char" = yes; then
-+ # The cast to unsigned long works around a bug in the HP C Compiler
-+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-+ # This bug is HP SR number 8606223364.
-+ if test "$cross_compiling" = yes; then
-+ # Depending upon the size, compute the lo and hi bounds.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20325,8 +20291,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=0 ac_mid=0
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20366,8 +20331,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr $ac_mid + 1`
-+ if test $ac_lo -le $ac_mid; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20423,8 +20387,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=-1 ac_mid=-1
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20464,8 +20427,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_hi=`expr '(' $ac_mid ')' - 1`
-+ if test $ac_mid -le $ac_hi; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo= ac_hi=
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+# Binary search between lo and hi bounds.
-+while test "x$ac_lo" != "x$ac_hi"; do
-+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20529,8 +20491,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr '(' $ac_mid ')' + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+case $ac_lo in
-+?*) ac_cv_sizeof_char=$ac_lo;;
-+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (char), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+esac
-+else
-+ if test "$cross_compiling" = yes; then
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20561,10 +20522,8 @@
+ esac
+ else
+ if test "$cross_compiling" = yes; then
+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+long longval () { return (long) (sizeof (char)); }
-+unsigned long ulongval () { return (long) (sizeof (char)); }
-+#include <stdio.h>
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+
-+ FILE *f = fopen ("conftest.val", "w");
-+ if (! f)
-+ exit (1);
-+ if (((long) (sizeof (char))) < 0)
-+ {
-+ long i = longval ();
-+ if (i != ((long) (sizeof (char))))
-+ exit (1);
-+ fprintf (f, "%ld\n", i);
-+ }
-+ else
-+ {
-+ unsigned long i = ulongval ();
-+ if (i != ((long) (sizeof (char))))
-+ exit (1);
-+ fprintf (f, "%lu\n", i);
-+ }
-+ exit (ferror (f) || fclose (f) != 0);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_sizeof_char=`cat conftest.val`
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (char), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+rm -f conftest.val
-+else
-+ ac_cv_sizeof_char=0
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
-+echo "${ECHO_T}$ac_cv_sizeof_char" >&6
-+cat >>confdefs.h <<_ACEOF
-+#define SIZEOF_CHAR $ac_cv_sizeof_char
-+_ACEOF
-+
-+
-+echo "$as_me:$LINENO: checking for short" >&5
-+echo $ECHO_N "checking for short... $ECHO_C" >&6
-+if test "${ac_cv_type_short+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+if ((short *) 0)
-+ return 0;
-+if (sizeof (short))
-+ return 0;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (exit 1); exit 1; }; }
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -20676,8 +20635,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_type_short=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_type_short=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
-+echo "${ECHO_T}$ac_cv_type_short" >&6
-+
-+echo "$as_me:$LINENO: checking size of short" >&5
-+echo $ECHO_N "checking size of short... $ECHO_C" >&6
-+if test "${ac_cv_sizeof_short+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$ac_cv_type_short" = yes; then
-+ # The cast to unsigned long works around a bug in the HP C Compiler
-+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-+ # This bug is HP SR number 8606223364.
-+ if test "$cross_compiling" = yes; then
-+ # Depending upon the size, compute the lo and hi bounds.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20739,8 +20697,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=0 ac_mid=0
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20780,8 +20737,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr $ac_mid + 1`
-+ if test $ac_lo -le $ac_mid; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20837,8 +20793,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=-1 ac_mid=-1
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20878,8 +20833,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_hi=`expr '(' $ac_mid ')' - 1`
-+ if test $ac_mid -le $ac_hi; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo= ac_hi=
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+# Binary search between lo and hi bounds.
-+while test "x$ac_lo" != "x$ac_hi"; do
-+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20943,8 +20897,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr '(' $ac_mid ')' + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+case $ac_lo in
-+?*) ac_cv_sizeof_short=$ac_lo;;
-+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (short), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+esac
-+else
-+ if test "$cross_compiling" = yes; then
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -20975,10 +20928,8 @@
+ esac
+ else
+ if test "$cross_compiling" = yes; then
+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+long longval () { return (long) (sizeof (short)); }
-+unsigned long ulongval () { return (long) (sizeof (short)); }
-+#include <stdio.h>
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+
-+ FILE *f = fopen ("conftest.val", "w");
-+ if (! f)
-+ exit (1);
-+ if (((long) (sizeof (short))) < 0)
-+ {
-+ long i = longval ();
-+ if (i != ((long) (sizeof (short))))
-+ exit (1);
-+ fprintf (f, "%ld\n", i);
-+ }
-+ else
-+ {
-+ unsigned long i = ulongval ();
-+ if (i != ((long) (sizeof (short))))
-+ exit (1);
-+ fprintf (f, "%lu\n", i);
-+ }
-+ exit (ferror (f) || fclose (f) != 0);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_sizeof_short=`cat conftest.val`
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (short), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+rm -f conftest.val
-+else
-+ ac_cv_sizeof_short=0
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
-+echo "${ECHO_T}$ac_cv_sizeof_short" >&6
-+cat >>confdefs.h <<_ACEOF
-+#define SIZEOF_SHORT $ac_cv_sizeof_short
-+_ACEOF
-+
-+
-+echo "$as_me:$LINENO: checking for long" >&5
-+echo $ECHO_N "checking for long... $ECHO_C" >&6
-+if test "${ac_cv_type_long+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+if ((long *) 0)
-+ return 0;
-+if (sizeof (long))
-+ return 0;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (exit 1); exit 1; }; }
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -21090,8 +21041,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_type_long=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_type_long=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
-+echo "${ECHO_T}$ac_cv_type_long" >&6
-+
-+echo "$as_me:$LINENO: checking size of long" >&5
-+echo $ECHO_N "checking size of long... $ECHO_C" >&6
-+if test "${ac_cv_sizeof_long+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$ac_cv_type_long" = yes; then
-+ # The cast to unsigned long works around a bug in the HP C Compiler
-+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-+ # This bug is HP SR number 8606223364.
-+ if test "$cross_compiling" = yes; then
-+ # Depending upon the size, compute the lo and hi bounds.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21153,8 +21103,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=0 ac_mid=0
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21194,8 +21143,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr $ac_mid + 1`
-+ if test $ac_lo -le $ac_mid; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21251,8 +21199,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=-1 ac_mid=-1
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21292,8 +21239,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_hi=`expr '(' $ac_mid ')' - 1`
-+ if test $ac_mid -le $ac_hi; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo= ac_hi=
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+# Binary search between lo and hi bounds.
-+while test "x$ac_lo" != "x$ac_hi"; do
-+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21357,8 +21303,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr '(' $ac_mid ')' + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+case $ac_lo in
-+?*) ac_cv_sizeof_long=$ac_lo;;
-+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (long), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+esac
-+else
-+ if test "$cross_compiling" = yes; then
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21389,10 +21334,8 @@
+ esac
+ else
+ if test "$cross_compiling" = yes; then
+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+long longval () { return (long) (sizeof (long)); }
-+unsigned long ulongval () { return (long) (sizeof (long)); }
-+#include <stdio.h>
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+
-+ FILE *f = fopen ("conftest.val", "w");
-+ if (! f)
-+ exit (1);
-+ if (((long) (sizeof (long))) < 0)
-+ {
-+ long i = longval ();
-+ if (i != ((long) (sizeof (long))))
-+ exit (1);
-+ fprintf (f, "%ld\n", i);
-+ }
-+ else
-+ {
-+ unsigned long i = ulongval ();
-+ if (i != ((long) (sizeof (long))))
-+ exit (1);
-+ fprintf (f, "%lu\n", i);
-+ }
-+ exit (ferror (f) || fclose (f) != 0);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_sizeof_long=`cat conftest.val`
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (long), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+rm -f conftest.val
-+else
-+ ac_cv_sizeof_long=0
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
-+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
-+cat >>confdefs.h <<_ACEOF
-+#define SIZEOF_LONG $ac_cv_sizeof_long
-+_ACEOF
-+
-+
-+echo "$as_me:$LINENO: checking for int" >&5
-+echo $ECHO_N "checking for int... $ECHO_C" >&6
-+if test "${ac_cv_type_int+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+if ((int *) 0)
-+ return 0;
-+if (sizeof (int))
-+ return 0;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (exit 1); exit 1; }; }
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -21504,8 +21447,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_type_int=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_type_int=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
-+echo "${ECHO_T}$ac_cv_type_int" >&6
-+
-+echo "$as_me:$LINENO: checking size of int" >&5
-+echo $ECHO_N "checking size of int... $ECHO_C" >&6
-+if test "${ac_cv_sizeof_int+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$ac_cv_type_int" = yes; then
-+ # The cast to unsigned long works around a bug in the HP C Compiler
-+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-+ # This bug is HP SR number 8606223364.
-+ if test "$cross_compiling" = yes; then
-+ # Depending upon the size, compute the lo and hi bounds.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21567,8 +21509,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=0 ac_mid=0
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21608,8 +21549,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr $ac_mid + 1`
-+ if test $ac_lo -le $ac_mid; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21665,8 +21605,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=-1 ac_mid=-1
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21706,8 +21645,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_hi=`expr '(' $ac_mid ')' - 1`
-+ if test $ac_mid -le $ac_hi; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo= ac_hi=
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+# Binary search between lo and hi bounds.
-+while test "x$ac_lo" != "x$ac_hi"; do
-+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21771,8 +21709,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr '(' $ac_mid ')' + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+case $ac_lo in
-+?*) ac_cv_sizeof_int=$ac_lo;;
-+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (int), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+esac
-+else
-+ if test "$cross_compiling" = yes; then
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21803,10 +21740,8 @@
+ esac
+ else
+ if test "$cross_compiling" = yes; then
+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+long longval () { return (long) (sizeof (int)); }
-+unsigned long ulongval () { return (long) (sizeof (int)); }
-+#include <stdio.h>
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+
-+ FILE *f = fopen ("conftest.val", "w");
-+ if (! f)
-+ exit (1);
-+ if (((long) (sizeof (int))) < 0)
-+ {
-+ long i = longval ();
-+ if (i != ((long) (sizeof (int))))
-+ exit (1);
-+ fprintf (f, "%ld\n", i);
-+ }
-+ else
-+ {
-+ unsigned long i = ulongval ();
-+ if (i != ((long) (sizeof (int))))
-+ exit (1);
-+ fprintf (f, "%lu\n", i);
-+ }
-+ exit (ferror (f) || fclose (f) != 0);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_sizeof_int=`cat conftest.val`
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (int), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+rm -f conftest.val
-+else
-+ ac_cv_sizeof_int=0
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
-+echo "${ECHO_T}$ac_cv_sizeof_int" >&6
-+cat >>confdefs.h <<_ACEOF
-+#define SIZEOF_INT $ac_cv_sizeof_int
-+_ACEOF
-+
-+
-+echo "$as_me:$LINENO: checking for void *" >&5
-+echo $ECHO_N "checking for void *... $ECHO_C" >&6
-+if test "${ac_cv_type_void_p+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+if ((void * *) 0)
-+ return 0;
-+if (sizeof (void *))
-+ return 0;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (exit 1); exit 1; }; }
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -21918,8 +21853,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_type_void_p=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_type_void_p=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5
-+echo "${ECHO_T}$ac_cv_type_void_p" >&6
-+
-+echo "$as_me:$LINENO: checking size of void *" >&5
-+echo $ECHO_N "checking size of void *... $ECHO_C" >&6
-+if test "${ac_cv_sizeof_void_p+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$ac_cv_type_void_p" = yes; then
-+ # The cast to unsigned long works around a bug in the HP C Compiler
-+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-+ # This bug is HP SR number 8606223364.
-+ if test "$cross_compiling" = yes; then
-+ # Depending upon the size, compute the lo and hi bounds.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -21981,8 +21915,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=0 ac_mid=0
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22022,8 +21955,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr $ac_mid + 1`
-+ if test $ac_lo -le $ac_mid; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (void *))) < 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22079,8 +22011,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=-1 ac_mid=-1
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (void *))) >= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22120,8 +22051,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_hi=`expr '(' $ac_mid ')' - 1`
-+ if test $ac_mid -le $ac_hi; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo= ac_hi=
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+# Binary search between lo and hi bounds.
-+while test "x$ac_lo" != "x$ac_hi"; do
-+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (void *))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22185,8 +22115,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr '(' $ac_mid ')' + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+case $ac_lo in
-+?*) ac_cv_sizeof_void_p=$ac_lo;;
-+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (void *), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+esac
-+else
-+ if test "$cross_compiling" = yes; then
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22217,10 +22146,8 @@
+ esac
+ else
+ if test "$cross_compiling" = yes; then
+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+long longval () { return (long) (sizeof (void *)); }
-+unsigned long ulongval () { return (long) (sizeof (void *)); }
-+#include <stdio.h>
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+
-+ FILE *f = fopen ("conftest.val", "w");
-+ if (! f)
-+ exit (1);
-+ if (((long) (sizeof (void *))) < 0)
-+ {
-+ long i = longval ();
-+ if (i != ((long) (sizeof (void *))))
-+ exit (1);
-+ fprintf (f, "%ld\n", i);
-+ }
-+ else
-+ {
-+ unsigned long i = ulongval ();
-+ if (i != ((long) (sizeof (void *))))
-+ exit (1);
-+ fprintf (f, "%lu\n", i);
-+ }
-+ exit (ferror (f) || fclose (f) != 0);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_sizeof_void_p=`cat conftest.val`
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (void *), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (void *), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+rm -f conftest.val
-+else
-+ ac_cv_sizeof_void_p=0
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5
-+echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6
-+cat >>confdefs.h <<_ACEOF
-+#define SIZEOF_VOID_P $ac_cv_sizeof_void_p
-+_ACEOF
-+
-+
-+echo "$as_me:$LINENO: checking for long long" >&5
-+echo $ECHO_N "checking for long long... $ECHO_C" >&6
-+if test "${ac_cv_type_long_long+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+if ((long long *) 0)
-+ return 0;
-+if (sizeof (long long))
-+ return 0;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (exit 1); exit 1; }; }
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -22332,8 +22259,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_type_long_long=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_type_long_long=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
-+echo "${ECHO_T}$ac_cv_type_long_long" >&6
-+
-+echo "$as_me:$LINENO: checking size of long long" >&5
-+echo $ECHO_N "checking size of long long... $ECHO_C" >&6
-+if test "${ac_cv_sizeof_long_long+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$ac_cv_type_long_long" = yes; then
-+ # The cast to unsigned long works around a bug in the HP C Compiler
-+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-+ # This bug is HP SR number 8606223364.
-+ if test "$cross_compiling" = yes; then
-+ # Depending upon the size, compute the lo and hi bounds.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22395,8 +22321,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=0 ac_mid=0
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22436,8 +22361,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr $ac_mid + 1`
-+ if test $ac_lo -le $ac_mid; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22493,8 +22417,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=-1 ac_mid=-1
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22534,8 +22457,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_hi=`expr '(' $ac_mid ')' - 1`
-+ if test $ac_mid -le $ac_hi; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo= ac_hi=
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+# Binary search between lo and hi bounds.
-+while test "x$ac_lo" != "x$ac_hi"; do
-+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22599,8 +22521,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr '(' $ac_mid ')' + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+case $ac_lo in
-+?*) ac_cv_sizeof_long_long=$ac_lo;;
-+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (long long), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+esac
-+else
-+ if test "$cross_compiling" = yes; then
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22631,10 +22552,8 @@
+ esac
+ else
+ if test "$cross_compiling" = yes; then
+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+long longval () { return (long) (sizeof (long long)); }
-+unsigned long ulongval () { return (long) (sizeof (long long)); }
-+#include <stdio.h>
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+
-+ FILE *f = fopen ("conftest.val", "w");
-+ if (! f)
-+ exit (1);
-+ if (((long) (sizeof (long long))) < 0)
-+ {
-+ long i = longval ();
-+ if (i != ((long) (sizeof (long long))))
-+ exit (1);
-+ fprintf (f, "%ld\n", i);
-+ }
-+ else
-+ {
-+ unsigned long i = ulongval ();
-+ if (i != ((long) (sizeof (long long))))
-+ exit (1);
-+ fprintf (f, "%lu\n", i);
-+ }
-+ exit (ferror (f) || fclose (f) != 0);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_sizeof_long_long=`cat conftest.val`
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (long long), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+rm -f conftest.val
-+else
-+ ac_cv_sizeof_long_long=0
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
-+echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6
-+cat >>confdefs.h <<_ACEOF
-+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-+_ACEOF
-+
-+
-+echo "$as_me:$LINENO: checking for __int64" >&5
-+echo $ECHO_N "checking for __int64... $ECHO_C" >&6
-+if test "${ac_cv_type___int64+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+if ((__int64 *) 0)
-+ return 0;
-+if (sizeof (__int64))
-+ return 0;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (exit 1); exit 1; }; }
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -22746,8 +22665,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_type___int64=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_type___int64=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_type___int64" >&5
-+echo "${ECHO_T}$ac_cv_type___int64" >&6
-+
-+echo "$as_me:$LINENO: checking size of __int64" >&5
-+echo $ECHO_N "checking size of __int64... $ECHO_C" >&6
-+if test "${ac_cv_sizeof___int64+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$ac_cv_type___int64" = yes; then
-+ # The cast to unsigned long works around a bug in the HP C Compiler
-+ # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-+ # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-+ # This bug is HP SR number 8606223364.
-+ if test "$cross_compiling" = yes; then
-+ # Depending upon the size, compute the lo and hi bounds.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) >= 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22809,8 +22727,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=0 ac_mid=0
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22850,8 +22767,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr $ac_mid + 1`
-+ if test $ac_lo -le $ac_mid; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) < 0)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22907,8 +22823,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=-1 ac_mid=-1
-+ while :; do
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) >= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -22948,8 +22863,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_lo=$ac_mid; break
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_hi=`expr '(' $ac_mid ')' - 1`
-+ if test $ac_mid -le $ac_hi; then
-+ ac_lo= ac_hi=
-+ break
-+ fi
-+ ac_mid=`expr 2 '*' $ac_mid`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ done
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo= ac_hi=
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+# Binary search between lo and hi bounds.
-+while test "x$ac_lo" != "x$ac_hi"; do
-+ ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+int
-+main ()
-+{
-+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) <= $ac_mid)];
-+test_array [0] = 0
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23013,8 +22927,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_hi=$ac_mid
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_lo=`expr '(' $ac_mid ')' + 1`
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+done
-+case $ac_lo in
-+?*) ac_cv_sizeof___int64=$ac_lo;;
-+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (__int64), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (__int64), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+esac
-+else
-+ if test "$cross_compiling" = yes; then
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23045,10 +22958,8 @@
+ esac
+ else
+ if test "$cross_compiling" = yes; then
+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&5
+-echo "$as_me: error: cannot run test program while cross compiling
+-See \`config.log' for more details." >&2;}
+ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+long longval () { return (long) (sizeof (__int64)); }
-+unsigned long ulongval () { return (long) (sizeof (__int64)); }
-+#include <stdio.h>
-+#include <stdlib.h>
-+int
-+main ()
-+{
-+
-+ FILE *f = fopen ("conftest.val", "w");
-+ if (! f)
-+ exit (1);
-+ if (((long) (sizeof (__int64))) < 0)
-+ {
-+ long i = longval ();
-+ if (i != ((long) (sizeof (__int64))))
-+ exit (1);
-+ fprintf (f, "%ld\n", i);
-+ }
-+ else
-+ {
-+ unsigned long i = ulongval ();
-+ if (i != ((long) (sizeof (__int64))))
-+ exit (1);
-+ fprintf (f, "%lu\n", i);
-+ }
-+ exit (ferror (f) || fclose (f) != 0);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_sizeof___int64=`cat conftest.val`
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (__int64), 77
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot compute sizeof (__int64), 77
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+rm -f conftest.val
-+else
-+ ac_cv_sizeof___int64=0
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_sizeof___int64" >&5
-+echo "${ECHO_T}$ac_cv_sizeof___int64" >&6
-+cat >>confdefs.h <<_ACEOF
-+#define SIZEOF___INT64 $ac_cv_sizeof___int64
-+_ACEOF
-+
-+
-+
-+### See what our 64 bit type is called
-+echo "$as_me:$LINENO: checking 64-bit integer type" >&5
-+echo $ECHO_N "checking 64-bit integer type... $ECHO_C" >&6
-+
-+case 8 in
-+$ac_cv_sizeof_int)
-+ dbusint64=int
-+ dbusint64_constant='(val)'
-+ dbusuint64_constant='(val)'
-+ ;;
-+$ac_cv_sizeof_long)
-+ dbusint64=long
-+ dbusint64_constant='(val##L)'
-+ dbusuint64_constant='(val##UL)'
-+ ;;
-+$ac_cv_sizeof_long_long)
-+ dbusint64='long long'
-+ dbusint64_constant='(val##LL)'
-+ dbusuint64_constant='(val##ULL)'
-+ ;;
-+$ac_cv_sizeof___int64)
-+ dbusint64=__int64
-+ dbusint64_constant='(val##i64)'
-+ dbusuint64_constant='(val##ui64)'
-+ ;;
-+esac
-+
-+if test -z "$dbusint64" ; then
-+ DBUS_INT64_TYPE="no_int64_type_detected"
-+ DBUS_HAVE_INT64=0
-+ DBUS_INT64_CONSTANT=
-+ DBUS_UINT64_CONSTANT=
-+ echo "$as_me:$LINENO: result: none found" >&5
-+echo "${ECHO_T}none found" >&6
-+else
-+ DBUS_INT64_TYPE="$dbusint64"
-+ DBUS_HAVE_INT64=1
-+ DBUS_INT64_CONSTANT="$dbusint64_constant"
-+ DBUS_UINT64_CONSTANT="$dbusuint64_constant"
-+ echo "$as_me:$LINENO: result: $DBUS_INT64_TYPE" >&5
-+echo "${ECHO_T}$DBUS_INT64_TYPE" >&6
-+fi
-+
-+
-+
-+
-+
-+
-+### see what 32-bit int is called
-+echo "$as_me:$LINENO: checking 32-bit integer type" >&5
-+echo $ECHO_N "checking 32-bit integer type... $ECHO_C" >&6
-+
-+case 4 in
-+$ac_cv_sizeof_short)
-+ dbusint32=int
-+ ;;
-+$ac_cv_sizeof_int)
-+ dbusint32=int
-+ ;;
-+$ac_cv_sizeof_long)
-+ dbusint32=long
-+ ;;
-+esac
-+
-+if test -z "$dbusint32" ; then
-+ DBUS_INT32_TYPE="no_int32_type_detected"
-+ { { echo "$as_me:$LINENO: error: No 32-bit integer type found" >&5
-+echo "$as_me: error: No 32-bit integer type found" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ DBUS_INT32_TYPE="$dbusint32"
-+ echo "$as_me:$LINENO: result: $DBUS_INT32_TYPE" >&5
-+echo "${ECHO_T}$DBUS_INT32_TYPE" >&6
-+fi
-+
-+
-+
-+### see what 16-bit int is called
-+echo "$as_me:$LINENO: checking 16-bit integer type" >&5
-+echo $ECHO_N "checking 16-bit integer type... $ECHO_C" >&6
-+
-+case 2 in
-+$ac_cv_sizeof_short)
-+ dbusint16=short
-+ ;;
-+$ac_cv_sizeof_int)
-+ dbusint16=int
-+ ;;
-+esac
-+
-+if test -z "$dbusint16" ; then
-+ DBUS_INT16_TYPE="no_int16_type_detected"
-+ { { echo "$as_me:$LINENO: error: No 16-bit integer type found" >&5
-+echo "$as_me: error: No 16-bit integer type found" >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ DBUS_INT16_TYPE="$dbusint16"
-+ echo "$as_me:$LINENO: result: $DBUS_INT16_TYPE" >&5
-+echo "${ECHO_T}$DBUS_INT16_TYPE" >&6
-+fi
-+
-+
-+
-+## byte order
-+echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
-+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
-+if test "${ac_cv_c_bigendian+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ # See if sys/param.h defines the BYTE_ORDER macro.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <sys/types.h>
-+#include <sys/param.h>
-+
-+int
-+main ()
-+{
-+#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
-+ bogus endian macros
-+#endif
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (exit 1); exit 1; }; }
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -23268,8 +23179,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ # It does; now see whether it defined to BIG_ENDIAN or not.
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <sys/types.h>
-+#include <sys/param.h>
-+
-+int
-+main ()
-+{
-+#if BYTE_ORDER != BIG_ENDIAN
-+ not big endian
-+#endif
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23311,8 +23221,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_c_bigendian=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_c_bigendian=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+# It does not; compile a test program.
-+if test "$cross_compiling" = yes; then
-+ # try to guess the endianness by grepping values into an object file
-+ ac_cv_c_bigendian=unknown
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-+short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
-+short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-+short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
-+int
-+main ()
-+{
-+ _ascii (); _ebcdic ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23369,8 +23278,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
-+ ac_cv_c_bigendian=yes
-+fi
-+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-+ if test "$ac_cv_c_bigendian" = unknown; then
-+ ac_cv_c_bigendian=no
-+ else
-+ # finding both strings is unlikely to happen, but who knows?
-+ ac_cv_c_bigendian=unknown
-+ fi
-+fi
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+int
-+main ()
-+{
-+ /* Are we little or big endian? From Harbison&Steele. */
-+ union
-+ {
-+ long l;
-+ char c[sizeof (long)];
-+ } u;
-+ u.l = 1;
-+ exit (u.c[sizeof (long) - 1] == 1);
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_c_bigendian=no
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+ac_cv_c_bigendian=yes
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
-+echo "${ECHO_T}$ac_cv_c_bigendian" >&6
-+case $ac_cv_c_bigendian in
-+ yes)
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define WORDS_BIGENDIAN 1
-+_ACEOF
-+ ;;
-+ no)
-+ ;;
-+ *)
-+ { { echo "$as_me:$LINENO: error: unknown endianness
-+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
-+echo "$as_me: error: unknown endianness
-+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+esac
-+
-+
-+
-+echo "$as_me:$LINENO: checking for an implementation of va_copy()" >&5
-+echo $ECHO_N "checking for an implementation of va_copy()... $ECHO_C" >&6
-+if test "${dbus_cv_va_copy+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+
-+ cat >conftest.$ac_ext <<_ACEOF
-+#include <stdarg.h>
-+ void f (int i, ...) {
-+ va_list args1, args2;
-+ va_start (args1, i);
-+ va_copy (args2, args1);
-+ if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
-+ exit (1);
-+ va_end (args1); va_end (args2);
-+ }
-+ int main() {
-+ f (0, 42);
-+ return 0;
-+ }
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23495,8 +23403,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ dbus_cv_va_copy=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+dbus_cv_va_copy=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+
-+fi
-+echo "$as_me:$LINENO: result: $dbus_cv_va_copy" >&5
-+echo "${ECHO_T}$dbus_cv_va_copy" >&6
-+echo "$as_me:$LINENO: checking for an implementation of __va_copy()" >&5
-+echo $ECHO_N "checking for an implementation of __va_copy()... $ECHO_C" >&6
-+if test "${dbus_cv___va_copy+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+
-+ cat >conftest.$ac_ext <<_ACEOF
-+#include <stdarg.h>
-+ void f (int i, ...) {
-+ va_list args1, args2;
-+ va_start (args1, i);
-+ __va_copy (args2, args1);
-+ if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
-+ exit (1);
-+ va_end (args1); va_end (args2);
-+ }
-+ int main() {
-+ f (0, 42);
-+ return 0;
-+ }
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23551,8 +23458,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ dbus_cv___va_copy=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+dbus_cv___va_copy=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+
-+fi
-+echo "$as_me:$LINENO: result: $dbus_cv___va_copy" >&5
-+echo "${ECHO_T}$dbus_cv___va_copy" >&6
-+
-+if test "x$dbus_cv_va_copy" = "xyes"; then
-+ dbus_va_copy_func=va_copy
-+else if test "x$dbus_cv___va_copy" = "xyes"; then
-+ dbus_va_copy_func=__va_copy
-+fi
-+fi
-+
-+if test -n "$dbus_va_copy_func"; then
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_VA_COPY $dbus_va_copy_func
-+_ACEOF
-+
-+fi
-+
-+echo "$as_me:$LINENO: checking whether va_lists can be copied by value" >&5
-+echo $ECHO_N "checking whether va_lists can be copied by value... $ECHO_C" >&6
-+if test "${dbus_cv_va_val_copy+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+
-+ if test "$cross_compiling" = yes; then
-+ dbus_cv_va_val_copy=yes
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <stdarg.h>
-+ void f (int i, ...) {
-+ va_list args1, args2;
-+ va_start (args1, i);
-+ args2 = args1;
-+ if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
-+ exit (1);
-+ va_end (args1); va_end (args2);
-+ }
-+ int main() {
-+ f (0, 42);
-+ return 0;
-+ }
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ dbus_cv_va_val_copy=yes
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+dbus_cv_va_val_copy=no
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+
-+fi
-+echo "$as_me:$LINENO: result: $dbus_cv_va_val_copy" >&5
-+echo "${ECHO_T}$dbus_cv_va_val_copy" >&6
-+
-+if test "x$dbus_cv_va_val_copy" = "xno"; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define DBUS_VA_COPY_AS_ARRAY 1
-+_ACEOF
-+
-+fi
-+
-+
-+#### Atomic integers (checks by Sebastian Wilhelmi for GLib)
-+echo "$as_me:$LINENO: checking whether to use inline assembler routines for atomic integers" >&5
-+echo $ECHO_N "checking whether to use inline assembler routines for atomic integers... $ECHO_C" >&6
-+have_atomic_inc=no
-+if test x"$GCC" = xyes; then
-+ if test "x$enable_ansi" = "xyes"; then
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+ else
-+ case $host_cpu in
-+ i386)
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+ ;;
-+ i?86)
-+ echo "$as_me:$LINENO: result: i486" >&5
-+echo "${ECHO_T}i486" >&6
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_USE_ATOMIC_INT_486 1
-+_ACEOF
-+
-+ have_atomic_inc=yes
-+ ;;
-+ *)
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+ ;;
-+ esac
-+ fi
-+fi
-+if test x$have_atomic_inc = xyes ; then
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_HAVE_ATOMIC_INT 1
-+_ACEOF
-+
-+fi
-+
-+#### Various functions
-+
-+echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
-+echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6
-+if test "${ac_cv_lib_socket_socket+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lsocket $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char socket ();
-+int
-+main ()
-+{
-+socket ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23737,8 +23643,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_socket_socket=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_socket_socket=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
-+echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6
-+if test $ac_cv_lib_socket_socket = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define HAVE_LIBSOCKET 1
-+_ACEOF
-+
-+ LIBS="-lsocket $LIBS"
-+
-+fi
-+
-+
-+echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
-+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
-+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lnsl $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char gethostbyname ();
-+int
-+main ()
-+{
-+gethostbyname ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23811,8 +23716,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_nsl_gethostbyname=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_nsl_gethostbyname=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
-+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
-+if test $ac_cv_lib_nsl_gethostbyname = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define HAVE_LIBNSL 1
-+_ACEOF
-+
-+ LIBS="-lnsl $LIBS"
-+
-+fi
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+for ac_func in vsnprintf vasprintf nanosleep usleep poll setenv unsetenv socketpair getgrouplist
-+do
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_var+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define $ac_func innocuous_$ac_func
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef $ac_func
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char $ac_func ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+choke me
-+#else
-+char (*f) () = $ac_func;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != $ac_func;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23924,8 +23828,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_var=yes"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+eval "$as_ac_var=no"
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+done
-+
-+
-+
-+for ac_header in execinfo.h
-+do
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+else
-+ # Is the header compilable?
-+echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+#include <$ac_header>
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -23992,8 +23895,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_header_compiler=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_header_compiler=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6
-+
-+# Is the header present?
-+echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <$ac_header>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ ac_header_preproc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ ac_header_preproc=no
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6
-+
-+# So? What about this header?
-+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-+ yes:no: )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ ac_header_preproc=yes
-+ ;;
-+ no:yes:* )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ (
-+ cat <<\_ASBOX
-+## ------------------------------------------ ##
-+## Report this to the AC_PACKAGE_NAME lists. ##
-+## ------------------------------------------ ##
-+_ASBOX
-+ ) |
-+ sed "s/^/$as_me: WARNING: /" >&2
-+ ;;
-+esac
-+echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ eval "$as_ac_Header=\$ac_header_preproc"
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+
-+fi
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+_ACEOF
-+
-+for ac_func in backtrace
-+do
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_var+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define $ac_func innocuous_$ac_func
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef $ac_func
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char $ac_func ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+choke me
-+#else
-+char (*f) () = $ac_func;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != $ac_func;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24172,8 +24074,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_var=yes"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+eval "$as_ac_var=no"
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+done
-+
-+fi
-+
-+done
-+
-+
-+echo "$as_me:$LINENO: checking for posix getpwnam_r" >&5
-+echo $ECHO_N "checking for posix getpwnam_r... $ECHO_C" >&6
-+if test "${ac_cv_func_posix_getpwnam_r+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test "$cross_compiling" = yes; then
-+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot run test program while cross compiling
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+#include <errno.h>
-+#include <pwd.h>
-+int main () {
-+ char buffer[10000];
-+ struct passwd pwd, *pwptr = &pwd;
-+ int error;
-+ errno = 0;
-+ error = getpwnam_r ("", &pwd, buffer,
-+ sizeof (buffer), &pwptr);
-+ return (error < 0 && errno == ENOSYS)
-+ || error == ENOSYS;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_posix_getpwnam_r=yes
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+ac_cv_func_posix_getpwnam_r=no
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_posix_getpwnam_r" >&5
-+echo "${ECHO_T}$ac_cv_func_posix_getpwnam_r" >&6
-+if test "$ac_cv_func_posix_getpwnam_r" = yes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_POSIX_GETPWNAM_R 1
-+_ACEOF
-+
-+else
-+ echo "$as_me:$LINENO: checking for nonposix getpwnam_r" >&5
-+echo $ECHO_N "checking for nonposix getpwnam_r... $ECHO_C" >&6
-+if test "${ac_cv_func_nonposix_getpwnam_r+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <pwd.h>
-+int
-+main ()
-+{
-+char buffer[10000];
-+ struct passwd pwd;
-+ getpwnam_r ("", &pwd, buffer,
-+ sizeof (buffer));
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24306,8 +24207,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_nonposix_getpwnam_r=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_func_nonposix_getpwnam_r=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_nonposix_getpwnam_r" >&5
-+echo "${ECHO_T}$ac_cv_func_nonposix_getpwnam_r" >&6
-+ if test "$ac_cv_func_nonposix_getpwnam_r" = yes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_NONPOSIX_GETPWNAM_R 1
-+_ACEOF
-+
-+ fi
-+fi
-+
-+echo "$as_me:$LINENO: checking whether socklen_t is defined" >&5
-+echo $ECHO_N "checking whether socklen_t is defined... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netdb.h>
-+
-+int
-+main ()
-+{
-+
-+socklen_t foo;
-+foo = 1;
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24373,8 +24273,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ dbus_have_socklen_t=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+dbus_have_socklen_t=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $dbus_have_socklen_t" >&5
-+echo "${ECHO_T}$dbus_have_socklen_t" >&6
-+
-+if test "x$dbus_have_socklen_t" = "xyes"; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_SOCKLEN_T 1
-+_ACEOF
-+
-+fi
-+
-+
-+for ac_header in sys/uio.h
-+do
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+else
-+ # Is the header compilable?
-+echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+#include <$ac_header>
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24439,8 +24338,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_header_compiler=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_header_compiler=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6
-+
-+# Is the header present?
-+echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <$ac_header>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ ac_header_preproc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ ac_header_preproc=no
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6
-+
-+# So? What about this header?
-+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-+ yes:no: )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ ac_header_preproc=yes
-+ ;;
-+ no:yes:* )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ (
-+ cat <<\_ASBOX
-+## ------------------------------------------ ##
-+## Report this to the AC_PACKAGE_NAME lists. ##
-+## ------------------------------------------ ##
-+_ASBOX
-+ ) |
-+ sed "s/^/$as_me: WARNING: /" >&2
-+ ;;
-+esac
-+echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ eval "$as_ac_Header=\$ac_header_preproc"
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+
-+fi
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+_ACEOF
-+
-+for ac_func in writev
-+do
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_var+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define $ac_func innocuous_$ac_func
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef $ac_func
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char $ac_func ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+choke me
-+#else
-+char (*f) () = $ac_func;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != $ac_func;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24619,8 +24517,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_var=yes"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+eval "$as_ac_var=no"
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+done
-+
-+fi
-+
-+done
-+
-+
-+echo "$as_me:$LINENO: checking for ISO C99 varargs macros in C" >&5
-+echo $ECHO_N "checking for ISO C99 varargs macros in C... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+int a(int p1, int p2, int p3);
-+#define call_a(...) a(1,__VA_ARGS__)
-+call_a(2,3);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24687,8 +24584,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ dbus_have_iso_c_varargs=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+dbus_have_iso_c_varargs=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $dbus_have_iso_c_varargs" >&5
-+echo "${ECHO_T}$dbus_have_iso_c_varargs" >&6
-+
-+echo "$as_me:$LINENO: checking for GNUC varargs macros" >&5
-+echo $ECHO_N "checking for GNUC varargs macros... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+int a(int p1, int p2, int p3);
-+#define call_a(params...) a(1,params)
-+call_a(2,3);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24741,8 +24637,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ dbus_have_gnuc_varargs=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+dbus_have_gnuc_varargs=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $dbus_have_gnuc_varargs" >&5
-+echo "${ECHO_T}$dbus_have_gnuc_varargs" >&6
-+
-+if test x$dbus_have_iso_c_varargs = xyes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_ISO_VARARGS 1
-+_ACEOF
-+
-+fi
-+if test x$dbus_have_gnuc_varargs = xyes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_GNUC_VARARGS 1
-+_ACEOF
-+
-+fi
-+
-+echo "$as_me:$LINENO: checking for struct cmsgcred" >&5
-+echo $ECHO_N "checking for struct cmsgcred... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+
-+int
-+main ()
-+{
-+
-+struct cmsgcred cred;
-+
-+cred.cmcred_pid = 0;
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24813,8 +24708,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ dbus_have_struct_cmsgcred=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+dbus_have_struct_cmsgcred=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $dbus_have_struct_cmsgcred" >&5
-+echo "${ECHO_T}$dbus_have_struct_cmsgcred" >&6
-+
-+if test x$dbus_have_struct_cmsgcred = xyes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_CMSGCRED 1
-+_ACEOF
-+
-+fi
-+
-+
-+
-+for ac_func in getpeerucred getpeereid
-+do
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_var+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define $ac_func innocuous_$ac_func
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef $ac_func
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char $ac_func ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+choke me
-+#else
-+char (*f) () = $ac_func;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != $ac_func;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -24915,8 +24809,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_var=yes"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+eval "$as_ac_var=no"
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+done
-+
-+
-+#### Abstract sockets
-+
-+echo "$as_me:$LINENO: checking abstract socket namespace" >&5
-+echo $ECHO_N "checking abstract socket namespace... $ECHO_C" >&6
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+if test "$cross_compiling" = yes; then
-+ { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+See \`config.log' for more details." >&5
-+echo "$as_me: error: cannot run test program while cross compiling
-+See \`config.log' for more details." >&2;}
-+ { (exit 1); exit 1; }; }
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+#include <sys/types.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <errno.h>
-+
-+int
-+main ()
-+{
-+
-+ int listen_fd;
-+ struct sockaddr_un addr;
-+
-+ listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
-+
-+ if (listen_fd < 0)
-+ {
-+ fprintf (stderr, "socket() failed: %s\n", strerror (errno));
-+ exit (1);
-+ }
-+
-+ memset (&addr, '\0', sizeof (addr));
-+ addr.sun_family = AF_UNIX;
-+ strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
-+ addr.sun_path[0] = '\0'; /* this is what makes it abstract */
-+
-+ if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
-+ {
-+ fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+ else
-+ exit (0);
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ have_abstract_sockets=yes
-+else
-+ echo "$as_me: program exited with status $ac_status" >&5
-+echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+( exit $ac_status )
-+have_abstract_sockets=no
-+fi
-+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-+fi
-+ac_ext=c
-+ac_cpp='$CPP $CPPFLAGS'
-+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-+
-+echo "$as_me:$LINENO: result: $have_abstract_sockets" >&5
-+echo "${ECHO_T}$have_abstract_sockets" >&6
-+
-+if test x$enable_abstract_sockets = xyes; then
-+ if test x$have_abstract_sockets = xno; then
-+ { { echo "$as_me:$LINENO: error: Abstract sockets explicitly required, and support not detected." >&5
-+echo "$as_me: error: Abstract sockets explicitly required, and support not detected." >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+if test x$enable_abstract_sockets = xno; then
-+ have_abstract_sockets=no;
-+fi
-+
-+if test x$have_abstract_sockets = xyes ; then
-+ DBUS_PATH_OR_ABSTRACT=abstract
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_ABSTRACT_SOCKETS 1
-+_ACEOF
-+
-+else
-+ DBUS_PATH_OR_ABSTRACT=path
-+fi
-+
-+# this is used in addresses to prefer abstract, e.g.
-+# unix:path=/foo or unix:abstract=/foo
-+
-+
-+#### Sort out gettext
-+
-+# this makes us require GLib to run autoconf, but not at runtime
-+ALL_LINGUAS=""
-+
-+
-+for ac_header in locale.h
-+do
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+else
-+ # Is the header compilable?
-+echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+#include <$ac_header>
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25111,8 +25004,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_header_compiler=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_header_compiler=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6
-+
-+# Is the header present?
-+echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <$ac_header>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ ac_header_preproc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ ac_header_preproc=no
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6
-+
-+# So? What about this header?
-+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-+ yes:no: )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ ac_header_preproc=yes
-+ ;;
-+ no:yes:* )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ (
-+ cat <<\_ASBOX
-+## ------------------------------------------ ##
-+## Report this to the AC_PACKAGE_NAME lists. ##
-+## ------------------------------------------ ##
-+_ASBOX
-+ ) |
-+ sed "s/^/$as_me: WARNING: /" >&2
-+ ;;
-+esac
-+echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ eval "$as_ac_Header=\$ac_header_preproc"
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+
-+fi
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+
-+done
-+
-+ if test $ac_cv_header_locale_h = yes; then
-+ echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
-+echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6
-+if test "${am_cv_val_LC_MESSAGES+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <locale.h>
-+int
-+main ()
-+{
-+return LC_MESSAGES
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25257,8 +25149,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ am_cv_val_LC_MESSAGES=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+am_cv_val_LC_MESSAGES=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5
-+echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6
-+ if test $am_cv_val_LC_MESSAGES = yes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_LC_MESSAGES 1
-+_ACEOF
-+
-+ fi
-+ fi
-+ USE_NLS=yes
-+
-+
-+ gt_cv_have_gettext=no
-+
-+ CATOBJEXT=NONE
-+ XGETTEXT=:
-+ INTLLIBS=
-+
-+ if test "${ac_cv_header_libintl_h+set}" = set; then
-+ echo "$as_me:$LINENO: checking for libintl.h" >&5
-+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
-+if test "${ac_cv_header_libintl_h+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
-+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
-+else
-+ # Is the header compilable?
-+echo "$as_me:$LINENO: checking libintl.h usability" >&5
-+echo $ECHO_N "checking libintl.h usability... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+#include <libintl.h>
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25329,8 +25220,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_header_compiler=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_header_compiler=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6
-+
-+# Is the header present?
-+echo "$as_me:$LINENO: checking libintl.h presence" >&5
-+echo $ECHO_N "checking libintl.h presence... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <libintl.h>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ ac_header_preproc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ ac_header_preproc=no
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6
-+
-+# So? What about this header?
-+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-+ yes:no: )
-+ { echo "$as_me:$LINENO: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: libintl.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: libintl.h: proceeding with the compiler's result" >&2;}
-+ ac_header_preproc=yes
-+ ;;
-+ no:yes:* )
-+ { echo "$as_me:$LINENO: WARNING: libintl.h: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: libintl.h: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: libintl.h: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: libintl.h: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: libintl.h: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: libintl.h: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: libintl.h: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: libintl.h: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: libintl.h: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: libintl.h: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: libintl.h: in the future, the compiler will take precedence" >&2;}
-+ (
-+ cat <<\_ASBOX
-+## ------------------------------------------ ##
-+## Report this to the AC_PACKAGE_NAME lists. ##
-+## ------------------------------------------ ##
-+_ASBOX
-+ ) |
-+ sed "s/^/$as_me: WARNING: /" >&2
-+ ;;
-+esac
-+echo "$as_me:$LINENO: checking for libintl.h" >&5
-+echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
-+if test "${ac_cv_header_libintl_h+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_cv_header_libintl_h=$ac_header_preproc
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_header_libintl_h" >&5
-+echo "${ECHO_T}$ac_cv_header_libintl_h" >&6
-+
-+fi
-+if test $ac_cv_header_libintl_h = yes; then
-+ gt_cv_func_dgettext_libintl="no"
-+ libintl_extra_libs=""
-+
-+ #
-+ # First check in libc
-+ #
-+ echo "$as_me:$LINENO: checking for ngettext in libc" >&5
-+echo $ECHO_N "checking for ngettext in libc... $ECHO_C" >&6
-+if test "${gt_cv_func_ngettext_libc+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+#include <libintl.h>
-+
-+int
-+main ()
-+{
-+return !ngettext ("","", 1)
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25474,8 +25364,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ gt_cv_func_ngettext_libc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+gt_cv_func_ngettext_libc=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+
-+fi
-+echo "$as_me:$LINENO: result: $gt_cv_func_ngettext_libc" >&5
-+echo "${ECHO_T}$gt_cv_func_ngettext_libc" >&6
-+
-+ if test "$gt_cv_func_ngettext_libc" = "yes" ; then
-+ echo "$as_me:$LINENO: checking for dgettext in libc" >&5
-+echo $ECHO_N "checking for dgettext in libc... $ECHO_C" >&6
-+if test "${gt_cv_func_dgettext_libc+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+#include <libintl.h>
-+
-+int
-+main ()
-+{
-+return !dgettext ("","")
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25533,8 +25422,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ gt_cv_func_dgettext_libc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+gt_cv_func_dgettext_libc=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+
-+fi
-+echo "$as_me:$LINENO: result: $gt_cv_func_dgettext_libc" >&5
-+echo "${ECHO_T}$gt_cv_func_dgettext_libc" >&6
-+ fi
-+
-+ if test "$gt_cv_func_ngettext_libc" = "yes" ; then
-+
-+for ac_func in bind_textdomain_codeset
-+do
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_var+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define $ac_func innocuous_$ac_func
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef $ac_func
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char $ac_func ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+choke me
-+#else
-+char (*f) () = $ac_func;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != $ac_func;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25631,8 +25519,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_var=yes"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+eval "$as_ac_var=no"
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+done
-+
-+ fi
-+
-+ #
-+ # If we don't have everything we want, check in libintl
-+ #
-+ if test "$gt_cv_func_dgettext_libc" != "yes" \
-+ || test "$gt_cv_func_ngettext_libc" != "yes" \
-+ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
-+
-+ echo "$as_me:$LINENO: checking for bindtextdomain in -lintl" >&5
-+echo $ECHO_N "checking for bindtextdomain in -lintl... $ECHO_C" >&6
-+if test "${ac_cv_lib_intl_bindtextdomain+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lintl $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char bindtextdomain ();
-+int
-+main ()
-+{
-+bindtextdomain ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25711,8 +25598,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_intl_bindtextdomain=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_intl_bindtextdomain=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_bindtextdomain" >&5
-+echo "${ECHO_T}$ac_cv_lib_intl_bindtextdomain" >&6
-+if test $ac_cv_lib_intl_bindtextdomain = yes; then
-+ echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5
-+echo $ECHO_N "checking for ngettext in -lintl... $ECHO_C" >&6
-+if test "${ac_cv_lib_intl_ngettext+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lintl $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char ngettext ();
-+int
-+main ()
-+{
-+ngettext ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25776,8 +25662,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_intl_ngettext=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_intl_ngettext=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5
-+echo "${ECHO_T}$ac_cv_lib_intl_ngettext" >&6
-+if test $ac_cv_lib_intl_ngettext = yes; then
-+ echo "$as_me:$LINENO: checking for dgettext in -lintl" >&5
-+echo $ECHO_N "checking for dgettext in -lintl... $ECHO_C" >&6
-+if test "${ac_cv_lib_intl_dgettext+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lintl $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dgettext ();
-+int
-+main ()
-+{
-+dgettext ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25841,8 +25726,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_intl_dgettext=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_intl_dgettext=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dgettext" >&5
-+echo "${ECHO_T}$ac_cv_lib_intl_dgettext" >&6
-+if test $ac_cv_lib_intl_dgettext = yes; then
-+ gt_cv_func_dgettext_libintl=yes
-+fi
-+
-+fi
-+
-+fi
-+
-+
-+ if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
-+ echo "$as_me:$LINENO: checking if -liconv is needed to use gettext" >&5
-+echo $ECHO_N "checking if -liconv is needed to use gettext... $ECHO_C" >&6
-+ echo "$as_me:$LINENO: result: " >&5
-+echo "${ECHO_T}" >&6
-+ echo "$as_me:$LINENO: checking for ngettext in -lintl" >&5
-+echo $ECHO_N "checking for ngettext in -lintl... $ECHO_C" >&6
-+if test "${ac_cv_lib_intl_ngettext+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lintl -liconv $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char ngettext ();
-+int
-+main ()
-+{
-+ngettext ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25919,8 +25803,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_intl_ngettext=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_intl_ngettext=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_ngettext" >&5
-+echo "${ECHO_T}$ac_cv_lib_intl_ngettext" >&6
-+if test $ac_cv_lib_intl_ngettext = yes; then
-+ echo "$as_me:$LINENO: checking for dcgettext in -lintl" >&5
-+echo $ECHO_N "checking for dcgettext in -lintl... $ECHO_C" >&6
-+if test "${ac_cv_lib_intl_dcgettext+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lintl -liconv $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dcgettext ();
-+int
-+main ()
-+{
-+dcgettext ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -25984,8 +25867,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_intl_dcgettext=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_intl_dcgettext=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_intl_dcgettext" >&5
-+echo "${ECHO_T}$ac_cv_lib_intl_dcgettext" >&6
-+if test $ac_cv_lib_intl_dcgettext = yes; then
-+ gt_cv_func_dgettext_libintl=yes
-+ libintl_extra_libs=-liconv
-+else
-+ :
-+fi
-+
-+else
-+ :
-+fi
-+
-+ fi
-+
-+ #
-+ # If we found libintl, then check in it for bind_textdomain_codeset();
-+ # we'll prefer libc if neither have bind_textdomain_codeset(),
-+ # and both have dgettext and ngettext
-+ #
-+ if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
-+ glib_save_LIBS="$LIBS"
-+ LIBS="$LIBS -lintl $libintl_extra_libs"
-+ unset ac_cv_func_bind_textdomain_codeset
-+
-+for ac_func in bind_textdomain_codeset
-+do
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_var+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define $ac_func innocuous_$ac_func
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef $ac_func
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char $ac_func ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+choke me
-+#else
-+char (*f) () = $ac_func;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != $ac_func;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -26101,8 +25983,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_var=yes"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+eval "$as_ac_var=no"
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+done
-+
-+ LIBS="$glib_save_LIBS"
-+
-+ if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
-+ gt_cv_func_dgettext_libc=no
-+ else
-+ if test "$gt_cv_func_dgettext_libc" = "yes" \
-+ && test "$gt_cv_func_ngettext_libc" = "yes"; then
-+ gt_cv_func_dgettext_libintl=no
-+ fi
-+ fi
-+ fi
-+ fi
-+
-+ if test "$gt_cv_func_dgettext_libc" = "yes" \
-+ || test "$gt_cv_func_dgettext_libintl" = "yes"; then
-+ gt_cv_have_gettext=yes
-+ fi
-+
-+ if test "$gt_cv_func_dgettext_libintl" = "yes"; then
-+ INTLLIBS="-lintl $libintl_extra_libs"
-+ fi
-+
-+ if test "$gt_cv_have_gettext" = "yes"; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_GETTEXT 1
-+_ACEOF
-+
-+ # Extract the first word of "msgfmt", so it can be a program name with args.
-+set dummy msgfmt; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_MSGFMT+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case "$MSGFMT" in
-+ /*)
-+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-+ for ac_dir in $PATH; do
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f $ac_dir/$ac_word; then
-+ if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
-+ ac_cv_path_MSGFMT="$ac_dir/$ac_word"
-+ break
-+ fi
-+ fi
-+ done
-+ IFS="$ac_save_ifs"
-+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no"
-+ ;;
-+esac
-+fi
-+MSGFMT="$ac_cv_path_MSGFMT"
-+if test "$MSGFMT" != "no"; then
-+ echo "$as_me:$LINENO: result: $MSGFMT" >&5
-+echo "${ECHO_T}$MSGFMT" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+ if test "$MSGFMT" != "no"; then
-+ glib_save_LIBS="$LIBS"
-+ LIBS="$LIBS $INTLLIBS"
-+
-+for ac_func in dcgettext
-+do
-+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-+echo "$as_me:$LINENO: checking for $ac_func" >&5
-+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_var+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define $ac_func innocuous_$ac_func
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char $ac_func (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef $ac_func
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char $ac_func ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-+choke me
-+#else
-+char (*f) () = $ac_func;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != $ac_func;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -26269,8 +26150,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ eval "$as_ac_var=yes"
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+eval "$as_ac_var=no"
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-+if test `eval echo '${'$as_ac_var'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-+_ACEOF
-+
-+fi
-+done
-+
-+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
-+set dummy gmsgfmt; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_GMSGFMT+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $GMSGFMT in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
-+ ;;
-+esac
-+fi
-+GMSGFMT=$ac_cv_path_GMSGFMT
-+
-+if test -n "$GMSGFMT"; then
-+ echo "$as_me:$LINENO: result: $GMSGFMT" >&5
-+echo "${ECHO_T}$GMSGFMT" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ # Extract the first word of "xgettext", so it can be a program name with args.
-+set dummy xgettext; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_XGETTEXT+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case "$XGETTEXT" in
-+ /*)
-+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-+ for ac_dir in $PATH; do
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f $ac_dir/$ac_word; then
-+ if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
-+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
-+ break
-+ fi
-+ fi
-+ done
-+ IFS="$ac_save_ifs"
-+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
-+ ;;
-+esac
-+fi
-+XGETTEXT="$ac_cv_path_XGETTEXT"
-+if test "$XGETTEXT" != ":"; then
-+ echo "$as_me:$LINENO: result: $XGETTEXT" >&5
-+echo "${ECHO_T}$XGETTEXT" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+extern int _nl_msg_cat_cntr;
-+ return _nl_msg_cat_cntr
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -26403,8 +26283,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ CATOBJEXT=.gmo
-+ DATADIRNAME=share
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+case $host in
-+ *-*-solaris*)
-+ echo "$as_me:$LINENO: checking for bind_textdomain_codeset" >&5
-+echo $ECHO_N "checking for bind_textdomain_codeset... $ECHO_C" >&6
-+if test "${ac_cv_func_bind_textdomain_codeset+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define bind_textdomain_codeset to an innocuous variant, in case <limits.h> declares bind_textdomain_codeset.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define bind_textdomain_codeset innocuous_bind_textdomain_codeset
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char bind_textdomain_codeset (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef bind_textdomain_codeset
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char bind_textdomain_codeset ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_bind_textdomain_codeset) || defined (__stub___bind_textdomain_codeset)
-+choke me
-+#else
-+char (*f) () = bind_textdomain_codeset;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != bind_textdomain_codeset;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -26489,8 +26368,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_bind_textdomain_codeset=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_func_bind_textdomain_codeset=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_bind_textdomain_codeset" >&5
-+echo "${ECHO_T}$ac_cv_func_bind_textdomain_codeset" >&6
-+if test $ac_cv_func_bind_textdomain_codeset = yes; then
-+ CATOBJEXT=.gmo
-+ DATADIRNAME=share
-+else
-+ CATOBJEXT=.mo
-+ DATADIRNAME=lib
-+fi
-+
-+ ;;
-+ *)
-+ CATOBJEXT=.mo
-+ DATADIRNAME=lib
-+ ;;
-+ esac
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+ LIBS="$glib_save_LIBS"
-+ INSTOBJEXT=.mo
-+ else
-+ gt_cv_have_gettext=no
-+ fi
-+ fi
-+
-+fi
-+
-+
-+
-+ if test "$gt_cv_have_gettext" = "yes" ; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define ENABLE_NLS 1
-+_ACEOF
-+
-+ fi
-+
-+ if test "$XGETTEXT" != ":"; then
-+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
-+ : ;
-+ else
-+ echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
-+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
-+ XGETTEXT=":"
-+ fi
-+ fi
-+
-+ # We need to process the po/ directory.
-+ POSUB=po
-+
-+ ac_config_commands="$ac_config_commands default-1"
-+
-+
-+ for lang in $ALL_LINGUAS; do
-+ GMOFILES="$GMOFILES $lang.gmo"
-+ POFILES="$POFILES $lang.po"
-+ done
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+
-+ if test "$gt_cv_have_gettext" = "yes"; then
-+ if test "x$ALL_LINGUAS" = "x"; then
-+ LINGUAS=
-+ else
-+ echo "$as_me:$LINENO: checking for catalogs to be installed" >&5
-+echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6
-+ NEW_LINGUAS=
-+ for presentlang in $ALL_LINGUAS; do
-+ useit=no
-+ if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
-+ desiredlanguages="$LINGUAS"
-+ else
-+ desiredlanguages="$ALL_LINGUAS"
-+ fi
-+ for desiredlang in $desiredlanguages; do
-+ # Use the presentlang catalog if desiredlang is
-+ # a. equal to presentlang, or
-+ # b. a variant of presentlang (because in this case,
-+ # presentlang can be used as a fallback for messages
-+ # which are not translated in the desiredlang catalog).
-+ case "$desiredlang" in
-+ "$presentlang"*) useit=yes;;
-+ esac
-+ done
-+ if test $useit = yes; then
-+ NEW_LINGUAS="$NEW_LINGUAS $presentlang"
-+ fi
-+ done
-+ LINGUAS=$NEW_LINGUAS
-+ echo "$as_me:$LINENO: result: $LINGUAS" >&5
-+echo "${ECHO_T}$LINGUAS" >&6
-+ fi
-+
-+ if test -n "$LINGUAS"; then
-+ for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
-+ fi
-+ fi
-+
-+ MKINSTALLDIRS=
-+ if test -n "$ac_aux_dir"; then
-+ MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
-+ fi
-+ if test -z "$MKINSTALLDIRS"; then
-+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-+ fi
-+
-+
-+ test -d po || mkdir po
-+ if test "x$srcdir" != "x."; then
-+ if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
-+ posrcprefix="$srcdir/"
-+ else
-+ posrcprefix="../$srcdir/"
-+ fi
-+ else
-+ posrcprefix="../"
-+ fi
-+ rm -f po/POTFILES
-+ sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
-+ < $srcdir/po/POTFILES.in > po/POTFILES
-+
-+
-+# INTLLIBS is now set
-+
-+# (if someone wants to go through and make internationalization
-+# conditional with #ifdef ENABLE_NLS then go crazy and send us a patch,
-+# but right now we won't build without gettext)
-+if test "$gt_cv_have_gettext" != "yes" ; then
-+ { { echo "$as_me:$LINENO: error:
-+*** You must have either have gettext support in your C library, or use the
-+*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
-+" >&5
-+echo "$as_me: error:
-+*** You must have either have gettext support in your C library, or use the
-+*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
-+" >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+#### Sort out XML library
-+
-+# see what we have
-+echo "$as_me:$LINENO: checking for XML_ParserCreate_MM in -lexpat" >&5
-+echo $ECHO_N "checking for XML_ParserCreate_MM in -lexpat... $ECHO_C" >&6
-+if test "${ac_cv_lib_expat_XML_ParserCreate_MM+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lexpat $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char XML_ParserCreate_MM ();
-+int
-+main ()
-+{
-+XML_ParserCreate_MM ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -26703,8 +26581,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_expat_XML_ParserCreate_MM=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_expat_XML_ParserCreate_MM=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_expat_XML_ParserCreate_MM" >&5
-+echo "${ECHO_T}$ac_cv_lib_expat_XML_ParserCreate_MM" >&6
-+if test $ac_cv_lib_expat_XML_ParserCreate_MM = yes; then
-+
-+for ac_header in expat.h
-+do
-+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+else
-+ # Is the header compilable?
-+echo "$as_me:$LINENO: checking $ac_header usability" >&5
-+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+$ac_includes_default
-+#include <$ac_header>
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -26764,8 +26641,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_header_compiler=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_header_compiler=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-+echo "${ECHO_T}$ac_header_compiler" >&6
-+
-+# Is the header present?
-+echo "$as_me:$LINENO: checking $ac_header presence" >&5
-+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <$ac_header>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ ac_header_preproc=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ ac_header_preproc=no
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-+echo "${ECHO_T}$ac_header_preproc" >&6
-+
-+# So? What about this header?
-+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-+ yes:no: )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-+ ac_header_preproc=yes
-+ ;;
-+ no:yes:* )
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-+ (
-+ cat <<\_ASBOX
-+## ------------------------------------------ ##
-+## Report this to the AC_PACKAGE_NAME lists. ##
-+## ------------------------------------------ ##
-+_ASBOX
-+ ) |
-+ sed "s/^/$as_me: WARNING: /" >&2
-+ ;;
-+esac
-+echo "$as_me:$LINENO: checking for $ac_header" >&5
-+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-+if eval "test \"\${$as_ac_Header+set}\" = set"; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ eval "$as_ac_Header=\$ac_header_preproc"
-+fi
-+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
-+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-+
-+fi
-+if test `eval echo '${'$as_ac_Header'}'` = yes; then
-+ cat >>confdefs.h <<_ACEOF
-+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-+_ACEOF
-+ have_expat=true
-+else
-+ have_expat=false
-+fi
-+
-+done
-+
-+else
-+ have_expat=false
-+fi
-+
-+
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for libxml-2.0" >&5
-+echo $ECHO_N "checking for libxml-2.0... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "libxml-2.0" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking LIBXML_CFLAGS" >&5
-+echo $ECHO_N "checking LIBXML_CFLAGS... $ECHO_C" >&6
-+ LIBXML_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0"`
-+ echo "$as_me:$LINENO: result: $LIBXML_CFLAGS" >&5
-+echo "${ECHO_T}$LIBXML_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking LIBXML_LIBS" >&5
-+echo $ECHO_N "checking LIBXML_LIBS... $ECHO_C" >&6
-+ LIBXML_LIBS=`$PKG_CONFIG --libs "libxml-2.0"`
-+ echo "$as_me:$LINENO: result: $LIBXML_LIBS" >&5
-+echo "${ECHO_T}$LIBXML_LIBS" >&6
-+ else
-+ LIBXML_CFLAGS=""
-+ LIBXML_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ LIBXML_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libxml-2.0"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_libxml=true
-+ else
-+ have_libxml=false
-+ fi
-+
-+
-+# see what we want to use
-+dbus_use_libxml=false
-+dbus_use_expat=false
-+if test x$with_xml = xexpat; then
-+ dbus_use_expat=true
-+ if ! $have_expat ; then
-+ { { echo "$as_me:$LINENO: error: Explicitly requested expat but expat not found" >&5
-+echo "$as_me: error: Explicitly requested expat but expat not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+elif test x$with_xml = xlibxml; then
-+ dbus_use_libxml=true
-+ if ! $have_libxml ; then
-+ { { echo "$as_me:$LINENO: error: Explicitly requested libxml but libxml not found" >&5
-+echo "$as_me: error: Explicitly requested libxml but libxml not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+else
-+ ### expat is the default because libxml can't currently survive
-+ ### our brutal OOM-handling unit test setup.
-+ ### http://bugzilla.gnome.org/show_bug.cgi?id=109368
-+ if $have_expat ; then
-+ with_xml=expat
-+ dbus_use_expat=true
-+ elif $have_libxml ; then
-+ with_xml=libxml
-+ dbus_use_libxml=true
-+ else
-+ { { echo "$as_me:$LINENO: error: No XML library found, check config.log for failed attempts" >&5
-+echo "$as_me: error: No XML library found, check config.log for failed attempts" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+
-+
-+if $dbus_use_expat; then
-+ DBUS_USE_EXPAT_TRUE=
-+ DBUS_USE_EXPAT_FALSE='#'
-+else
-+ DBUS_USE_EXPAT_TRUE='#'
-+ DBUS_USE_EXPAT_FALSE=
-+fi
-+
-+
-+
-+if $dbus_use_libxml; then
-+ DBUS_USE_LIBXML_TRUE=
-+ DBUS_USE_LIBXML_FALSE='#'
-+else
-+ DBUS_USE_LIBXML_TRUE='#'
-+ DBUS_USE_LIBXML_FALSE=
-+fi
-+
-+
-+if $dbus_use_expat; then
-+ XML_LIBS=-lexpat
-+ XML_CFLAGS=
-+fi
-+if $dbus_use_libxml; then
-+ XML_LIBS=$LIBXML_LIBS
-+ XML_CFLAGS=$LIBXML_CFLAGS
-+fi
-+
-+# SELinux detection
-+if test x$enable_selinux = xno ; then
-+ have_selinux=no;
-+else
-+ # See if we have SELinux library
-+ echo "$as_me:$LINENO: checking for is_selinux_enabled in -lselinux" >&5
-+echo $ECHO_N "checking for is_selinux_enabled in -lselinux... $ECHO_C" >&6
-+if test "${ac_cv_lib_selinux_is_selinux_enabled+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lselinux $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char is_selinux_enabled ();
-+int
-+main ()
-+{
-+is_selinux_enabled ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -27091,8 +26967,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_selinux_is_selinux_enabled=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_selinux_is_selinux_enabled=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_is_selinux_enabled" >&5
-+echo "${ECHO_T}$ac_cv_lib_selinux_is_selinux_enabled" >&6
-+if test $ac_cv_lib_selinux_is_selinux_enabled = yes; then
-+ have_selinux=yes
-+else
-+ have_selinux=no
-+fi
-+
-+
-+ # see if we have the SELinux header with the new D-BUS stuff in it
-+ if test x$have_selinux = xyes ; then
-+ echo "$as_me:$LINENO: checking for DBUS Flask permissions in selinux/av_permissions.h" >&5
-+echo $ECHO_N "checking for DBUS Flask permissions in selinux/av_permissions.h... $ECHO_C" >&6
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <selinux/av_permissions.h>
-+int
-+main ()
-+{
-+#ifdef DBUS__ACQUIRE_SVC return 0;
-+ #else
-+ #error DBUS__ACQUIRE_SVC not defined
-+ #endif
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext
-+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -27155,8 +27030,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest.$ac_objext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ have_selinux=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28117,9 +27991,12 @@
+
+
+ ### X11 detection
+-echo "$as_me:$LINENO: checking for X" >&5
+
-+have_selinux=no
-+fi
-+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-+ echo "$as_me:$LINENO: result: $have_selinux" >&5
-+echo "${ECHO_T}$have_selinux" >&6
-+ fi
-+
-+ if test x$enable_selinux = xauto ; then
-+ if test x$have_selinux = xno ; then
-+ { echo "$as_me:$LINENO: WARNING: Sufficiently new SELinux library not found" >&5
-+echo "$as_me: WARNING: Sufficiently new SELinux library not found" >&2;}
-+ fi
-+ else
-+ if test x$have_selinux = xno ; then
-+ { { echo "$as_me:$LINENO: error: SElinux explicitly required, and SELinux library not found" >&5
-+echo "$as_me: error: SElinux explicitly required, and SELinux library not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ fi
-+fi
-+
-+
-+
-+if test x$have_selinux = xyes; then
-+ HAVE_SELINUX_TRUE=
-+ HAVE_SELINUX_FALSE='#'
-+else
-+ HAVE_SELINUX_TRUE='#'
-+ HAVE_SELINUX_FALSE=
-+fi
-+
-+
-+if test x$have_selinux = xyes ; then
-+ SELINUX_LIBS="-lselinux -lpthread"
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_SELINUX 1
-+_ACEOF
-+
-+else
-+ SELINUX_LIBS=
-+fi
-+
-+# dnotify checks
-+if test x$enable_dnotify = xno ; then
-+ have_dnotify=no;
-+else
-+ if test x$target_os = xlinux-gnu -o x$target_os = xlinux; then
-+ have_dnotify=yes;
-+ else
-+ have_dnotify=no;
-+ fi
-+fi
-+
-+if test x$have_dnotify = xyes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX 1
-+_ACEOF
-+
-+fi
-+
-+#### Set up final flags
-+DBUS_CLIENT_CFLAGS=
-+DBUS_CLIENT_LIBS=
-+
-+
-+
-+DBUS_BUS_CFLAGS=$XML_CFLAGS
-+DBUS_BUS_LIBS="$XML_LIBS $SELINUX_LIBS $INTLLIBS"
-+
-+
-+
-+DBUS_TEST_CFLAGS=
-+DBUS_TEST_LIBS=
-+
-+
-+
-+# Glib detection
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for gobject-2.0 >= 2.4" >&5
-+echo $ECHO_N "checking for gobject-2.0 >= 2.4... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "gobject-2.0 >= 2.4" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking DBUS_GLIB_CFLAGS" >&5
-+echo $ECHO_N "checking DBUS_GLIB_CFLAGS... $ECHO_C" >&6
-+ DBUS_GLIB_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0 >= 2.4"`
-+ echo "$as_me:$LINENO: result: $DBUS_GLIB_CFLAGS" >&5
-+echo "${ECHO_T}$DBUS_GLIB_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking DBUS_GLIB_LIBS" >&5
-+echo $ECHO_N "checking DBUS_GLIB_LIBS... $ECHO_C" >&6
-+ DBUS_GLIB_LIBS=`$PKG_CONFIG --libs "gobject-2.0 >= 2.4"`
-+ echo "$as_me:$LINENO: result: $DBUS_GLIB_LIBS" >&5
-+echo "${ECHO_T}$DBUS_GLIB_LIBS" >&6
-+ else
-+ DBUS_GLIB_CFLAGS=""
-+ DBUS_GLIB_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ DBUS_GLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gobject-2.0 >= 2.4"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_glib=yes
-+ else
-+ have_glib=no
-+ fi
-+
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for gthread-2.0 >= 2.4" >&5
-+echo $ECHO_N "checking for gthread-2.0 >= 2.4... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "gthread-2.0 >= 2.4" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking DBUS_GLIB_THREADS_CFLAGS" >&5
-+echo $ECHO_N "checking DBUS_GLIB_THREADS_CFLAGS... $ECHO_C" >&6
-+ DBUS_GLIB_THREADS_CFLAGS=`$PKG_CONFIG --cflags "gthread-2.0 >= 2.4"`
-+ echo "$as_me:$LINENO: result: $DBUS_GLIB_THREADS_CFLAGS" >&5
-+echo "${ECHO_T}$DBUS_GLIB_THREADS_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking DBUS_GLIB_THREADS_LIBS" >&5
-+echo $ECHO_N "checking DBUS_GLIB_THREADS_LIBS... $ECHO_C" >&6
-+ DBUS_GLIB_THREADS_LIBS=`$PKG_CONFIG --libs "gthread-2.0 >= 2.4"`
-+ echo "$as_me:$LINENO: result: $DBUS_GLIB_THREADS_LIBS" >&5
-+echo "${ECHO_T}$DBUS_GLIB_THREADS_LIBS" >&6
-+ else
-+ DBUS_GLIB_THREADS_CFLAGS=""
-+ DBUS_GLIB_THREADS_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ DBUS_GLIB_THREADS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gthread-2.0 >= 2.4"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_glib_threads=yes
-+ else
-+ have_glib_threads=no
-+ fi
-+
-+
-+if test x$have_glib = xno ; then
-+ { echo "$as_me:$LINENO: WARNING: GLib development libraries not found" >&5
-+echo "$as_me: WARNING: GLib development libraries not found" >&2;}
-+fi
-+
-+if test x$enable_glib = xyes; then
-+ if test x$have_glib = xno; then
-+ { { echo "$as_me:$LINENO: error: GLib explicitly required, and GLib development libraries not found" >&5
-+echo "$as_me: error: GLib explicitly required, and GLib development libraries not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+if test x$enable_glib = xno; then
-+ have_glib=no;
-+fi
-+
-+
-+
-+if test x$have_glib = xyes; then
-+ HAVE_GLIB_TRUE=
-+ HAVE_GLIB_FALSE='#'
-+else
-+ HAVE_GLIB_TRUE='#'
-+ HAVE_GLIB_FALSE=
-+fi
-+
-+
-+
-+if test x$have_glib_threads = xyes; then
-+ HAVE_GLIB_THREADS_TRUE=
-+ HAVE_GLIB_THREADS_FALSE='#'
-+else
-+ HAVE_GLIB_THREADS_TRUE='#'
-+ HAVE_GLIB_THREADS_FALSE=
-+fi
-+
-+
-+if test x$have_glib = xyes; then
-+ GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
-+else
-+ GLIB_GENMARSHAL=glib-not-enabled-so-there-is-no-genmarshal
-+fi
-+
-+
-+
-+
-+
-+
-+DBUS_GLIB_TOOL_CFLAGS=$XML_CFLAGS
-+DBUS_GLIB_TOOL_LIBS="$XML_LIBS $INTLLIBS"
-+
-+
-+
-+# GTK detection
-+if test x$have_glib = xno ; then
-+ { echo "$as_me:$LINENO: WARNING: Can't use GTK+ since GLib not enabled" >&5
-+echo "$as_me: WARNING: Can't use GTK+ since GLib not enabled" >&2;}
-+ have_gtk=no
-+else
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.4" >&5
-+echo $ECHO_N "checking for gtk+-2.0 >= 2.4... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "gtk+-2.0 >= 2.4" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking DBUS_GTK_CFLAGS" >&5
-+echo $ECHO_N "checking DBUS_GTK_CFLAGS... $ECHO_C" >&6
-+ DBUS_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.4"`
-+ echo "$as_me:$LINENO: result: $DBUS_GTK_CFLAGS" >&5
-+echo "${ECHO_T}$DBUS_GTK_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking DBUS_GTK_LIBS" >&5
-+echo $ECHO_N "checking DBUS_GTK_LIBS... $ECHO_C" >&6
-+ DBUS_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.4"`
-+ echo "$as_me:$LINENO: result: $DBUS_GTK_LIBS" >&5
-+echo "${ECHO_T}$DBUS_GTK_LIBS" >&6
-+ else
-+ DBUS_GTK_CFLAGS=""
-+ DBUS_GTK_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ DBUS_GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.4"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_gtk=yes
-+ else
-+ have_gtk=no
-+ fi
-+
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for gtk+-2.0 >= 2.4 gthread-2.0" >&5
-+echo $ECHO_N "checking for gtk+-2.0 >= 2.4 gthread-2.0... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "gtk+-2.0 >= 2.4 gthread-2.0" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking DBUS_GTK_THREADS_CFLAGS" >&5
-+echo $ECHO_N "checking DBUS_GTK_THREADS_CFLAGS... $ECHO_C" >&6
-+ DBUS_GTK_THREADS_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.4 gthread-2.0"`
-+ echo "$as_me:$LINENO: result: $DBUS_GTK_THREADS_CFLAGS" >&5
-+echo "${ECHO_T}$DBUS_GTK_THREADS_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking DBUS_GTK_THREADS_LIBS" >&5
-+echo $ECHO_N "checking DBUS_GTK_THREADS_LIBS... $ECHO_C" >&6
-+ DBUS_GTK_THREADS_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.4 gthread-2.0"`
-+ echo "$as_me:$LINENO: result: $DBUS_GTK_THREADS_LIBS" >&5
-+echo "${ECHO_T}$DBUS_GTK_THREADS_LIBS" >&6
-+ else
-+ DBUS_GTK_THREADS_CFLAGS=""
-+ DBUS_GTK_THREADS_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ DBUS_GTK_THREADS_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.4 gthread-2.0"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_gtk_threads=yes
-+ else
-+ have_gtk_threads=no
-+ fi
-+
-+fi
-+
-+if test x$have_gtk = xno ; then
-+ { echo "$as_me:$LINENO: WARNING: GTK+ development libraries not found" >&5
-+echo "$as_me: WARNING: GTK+ development libraries not found" >&2;}
-+fi
-+
-+if test x$enable_gtk = xyes; then
-+ if test x$have_gtk = xno; then
-+ { { echo "$as_me:$LINENO: error: GTK+ explicitly required, and GTK+ development libraries not found" >&5
-+echo "$as_me: error: GTK+ explicitly required, and GTK+ development libraries not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+if test x$enable_gtk = xno; then
-+ have_gtk=no;
-+fi
-+
-+
-+
-+if test x$have_gtk = xyes; then
-+ HAVE_GTK_TRUE=
-+ HAVE_GTK_FALSE='#'
-+else
-+ HAVE_GTK_TRUE='#'
-+ HAVE_GTK_FALSE=
-+fi
-+
-+
-+
-+
-+
-+
-+
-+
-+if test -z "$with_qt3_moc" ; then
-+ # Extract the first word of "moc", so it can be a program name with args.
-+set dummy moc; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_QT3_MOC+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $QT3_MOC in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_QT3_MOC="$QT3_MOC" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_QT3_MOC="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_QT3_MOC" && ac_cv_path_QT3_MOC="no"
-+ ;;
-+esac
-+fi
-+QT3_MOC=$ac_cv_path_QT3_MOC
-+
-+if test -n "$QT3_MOC"; then
-+ echo "$as_me:$LINENO: result: $QT3_MOC" >&5
-+echo "${ECHO_T}$QT3_MOC" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+else
-+ QT3_MOC=$with_qt3_moc
-+
-+fi
-+
-+have_qt3=no
-+echo "$as_me:$LINENO: checking for qglobal.h" >&5
-+echo $ECHO_N "checking for qglobal.h... $ECHO_C" >&6
-+if test -n "$QTDIR" -a -f "$QTDIR/include/qglobal.h"; then
-+ have_qt3=yes
-+ DBUS_QT3_CXXFLAGS="-I$QTDIR/include"
-+else
-+ for dir in "${prefix}/include/qt" "/usr/include/qt-3.1" "/usr/include/qt3" "/usr/include/qt" "/usr/lib/qt/include" "/usr/lib/qt-3.1/include"; do
-+ if test -f "$dir/qglobal.h"; then
-+ have_qt3=yes
-+ DBUS_QT3_CXXFLAGS="-I$dir"
-+ DBUS_QT3_LIBS="-L$QTDIR/lib -lqt-mt"
-+ fi
-+ done
-+fi
-+if test x$have_qt3 = xyes; then
-+ echo "$as_me:$LINENO: result: found" >&5
-+echo "${ECHO_T}found" >&6
-+else
-+ echo "$as_me:$LINENO: result: not found" >&5
-+echo "${ECHO_T}not found" >&6
-+fi
-+
-+if test x$have_qt3 = xno; then
-+ { echo "$as_me:$LINENO: WARNING: Qt3 development libraries not found" >&5
-+echo "$as_me: WARNING: Qt3 development libraries not found" >&2;}
-+fi
-+
-+if test x$enable_qt3 = xyes; then
-+ if test x$have_qt3 = xno; then
-+ { { echo "$as_me:$LINENO: error: Qt3 integration explicitly required, and Qt3 libraries not found" >&5
-+echo "$as_me: error: Qt3 integration explicitly required, and Qt3 libraries not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+if test x$enable_qt3 = xno; then
-+ have_qt3=no;
-+fi
-+
-+
-+
-+if test x$have_qt3 = xyes; then
-+ HAVE_QT3_TRUE=
-+ HAVE_QT3_FALSE='#'
-+else
-+ HAVE_QT3_TRUE='#'
-+ HAVE_QT3_FALSE=
-+fi
-+
-+
-+
-+
-+
-+
-+
-+echo "$as_me:$LINENO: checking if we want to link to Qt debugging libraries" >&5
-+echo $ECHO_N "checking if we want to link to Qt debugging libraries... $ECHO_C" >&6
-+qt_suffix=
-+if test x$enable_qt_debug = xyes; then
-+ qt_suffix=_debug
-+ echo "$as_me:$LINENO: result: debug" >&5
-+echo "${ECHO_T}debug" >&6
-+else
-+ echo "$as_me:$LINENO: result: release" >&5
-+echo "${ECHO_T}release" >&6
-+fi
-+
-+QT_CORE=QtCore$qt_suffix
-+QT_XML=QtXml$qt_suffix
-+QT_TESTLIB=QtTest$qt_suffix
-+min_qt_version=4.1
-+
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for $QT_CORE >= $min_qt_version $QT_XML >= $min_qt_version" >&5
-+echo $ECHO_N "checking for $QT_CORE >= $min_qt_version $QT_XML >= $min_qt_version... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "$QT_CORE >= $min_qt_version $QT_XML >= $min_qt_version" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking DBUS_QT_CFLAGS" >&5
-+echo $ECHO_N "checking DBUS_QT_CFLAGS... $ECHO_C" >&6
-+ DBUS_QT_CFLAGS=`$PKG_CONFIG --cflags "$QT_CORE >= $min_qt_version $QT_XML >= $min_qt_version"`
-+ echo "$as_me:$LINENO: result: $DBUS_QT_CFLAGS" >&5
-+echo "${ECHO_T}$DBUS_QT_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking DBUS_QT_LIBS" >&5
-+echo $ECHO_N "checking DBUS_QT_LIBS... $ECHO_C" >&6
-+ DBUS_QT_LIBS=`$PKG_CONFIG --libs "$QT_CORE >= $min_qt_version $QT_XML >= $min_qt_version"`
-+ echo "$as_me:$LINENO: result: $DBUS_QT_LIBS" >&5
-+echo "${ECHO_T}$DBUS_QT_LIBS" >&6
-+ else
-+ DBUS_QT_CFLAGS=""
-+ DBUS_QT_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ DBUS_QT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$QT_CORE >= $min_qt_version $QT_XML >= $min_qt_version"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_qt=yes
-+ else
-+ have_qt=no
-+ fi
-+
-+
-+if test x$have_qt = xyes ; then
-+ echo "$as_me:$LINENO: checking for moc" >&5
-+echo $ECHO_N "checking for moc... $ECHO_C" >&6
-+
-+ if test -z "$with_qt_moc" ; then
-+ QT_MOC=`$PKG_CONFIG --variable=exec_prefix $QT_CORE`
-+ QT_MOC=${QT_MOC}/bin/moc
-+ else
-+ QT_MOC=$with_qt_moc
-+ fi
-+
-+ if test -x "$QT_MOC"; then
-+ echo "$as_me:$LINENO: result: found, $QT_MOC" >&5
-+echo "${ECHO_T}found, $QT_MOC" >&6
-+ else
-+ echo "$as_me:$LINENO: result: not found" >&5
-+echo "${ECHO_T}not found" >&6
-+ { echo "$as_me:$LINENO: WARNING: moc not found; disabling Qt" >&5
-+echo "$as_me: WARNING: moc not found; disabling Qt" >&2;}
-+ have_qt=no
-+ fi
-+fi
-+
-+if test x$have_qt = xno ; then
-+ if test x$enable_qt = xyes; then
-+ { { echo "$as_me:$LINENO: error: Qt integration explicitly required, and Qt libraries not found" >&5
-+echo "$as_me: error: Qt integration explicitly required, and Qt libraries not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ have_qt=no
-+else
-+
-+
-+
-+
-+
-+ succeeded=no
-+
-+ if test -z "$PKG_CONFIG"; then
-+ # Extract the first word of "pkg-config", so it can be a program name with args.
-+set dummy pkg-config; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PKG_CONFIG in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
-+ ;;
-+esac
-+fi
-+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
-+
-+if test -n "$PKG_CONFIG"; then
-+ echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
-+echo "${ECHO_T}$PKG_CONFIG" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ fi
-+
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** The pkg-config script could not be found. Make sure it is"
-+ echo "*** in your path, or set the PKG_CONFIG environment variable"
-+ echo "*** to the full path to pkg-config."
-+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-+ else
-+ PKG_CONFIG_MIN_VERSION=0.9.0
-+ if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-+ echo "$as_me:$LINENO: checking for $QT_TESTLIB >= $min_qt_version" >&5
-+echo $ECHO_N "checking for $QT_TESTLIB >= $min_qt_version... $ECHO_C" >&6
-+
-+ if $PKG_CONFIG --exists "$QT_TESTLIB >= $min_qt_version" ; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ succeeded=yes
-+
-+ echo "$as_me:$LINENO: checking DBUS_QTESTLIB_CFLAGS" >&5
-+echo $ECHO_N "checking DBUS_QTESTLIB_CFLAGS... $ECHO_C" >&6
-+ DBUS_QTESTLIB_CFLAGS=`$PKG_CONFIG --cflags "$QT_TESTLIB >= $min_qt_version"`
-+ echo "$as_me:$LINENO: result: $DBUS_QTESTLIB_CFLAGS" >&5
-+echo "${ECHO_T}$DBUS_QTESTLIB_CFLAGS" >&6
-+
-+ echo "$as_me:$LINENO: checking DBUS_QTESTLIB_LIBS" >&5
-+echo $ECHO_N "checking DBUS_QTESTLIB_LIBS... $ECHO_C" >&6
-+ DBUS_QTESTLIB_LIBS=`$PKG_CONFIG --libs "$QT_TESTLIB >= $min_qt_version"`
-+ echo "$as_me:$LINENO: result: $DBUS_QTESTLIB_LIBS" >&5
-+echo "${ECHO_T}$DBUS_QTESTLIB_LIBS" >&6
-+ else
-+ DBUS_QTESTLIB_CFLAGS=""
-+ DBUS_QTESTLIB_LIBS=""
-+ ## If we have a custom action on failure, don't print errors, but
-+ ## do set a variable so people can do so.
-+ DBUS_QTESTLIB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$QT_TESTLIB >= $min_qt_version"`
-+
-+ fi
-+
-+
-+
-+ else
-+ echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig"
-+ fi
-+ fi
-+
-+ if test $succeeded = yes; then
-+ have_qtest=yes
-+ else
-+ have_qtest=no
-+ fi
-+
-+
-+ if test x$have_qtest = xno ; then
-+ { echo "$as_me:$LINENO: WARNING: Qt Unit Test library not found" >&5
-+echo "$as_me: WARNING: Qt Unit Test library not found" >&2;}
-+ fi
-+
-+ if test x$have_qt = xno; then
-+ have_qtest=no
-+ fi
-+
-+
-+
-+
-+fi
-+
-+
-+
-+if test x$have_qt = xyes; then
-+ HAVE_QT_TRUE=
-+ HAVE_QT_FALSE='#'
-+else
-+ HAVE_QT_TRUE='#'
-+ HAVE_QT_FALSE=
-+fi
-+
-+
-+
-+if test x$have_qtest = xyes; then
-+ HAVE_QTESTLIB_TRUE=
-+ HAVE_QTESTLIB_FALSE='#'
-+else
-+ HAVE_QTESTLIB_TRUE='#'
-+ HAVE_QTESTLIB_FALSE=
-+fi
-+
-+
-+### X11 detection
-+
+if test "x$ac_path_x_has_been_run" != xyes; then
+ echo "$as_me:$LINENO: checking for X" >&5
-+echo $ECHO_N "checking for X... $ECHO_C" >&6
-+
+ echo $ECHO_N "checking for X... $ECHO_C" >&6
+
+ac_path_x_has_been_run=yes
-+
-+# Check whether --with-x or --without-x was given.
-+if test "${with_x+set}" = set; then
-+ withval="$with_x"
-+
-+fi;
-+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-+if test "x$with_x" = xno; then
-+ # The user explicitly disabled X.
-+ have_x=disabled
-+else
-+ if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
-+ # Both variables are already set.
-+ have_x=yes
-+ else
-+ if test "${ac_cv_have_x+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ # One or both of the vars are not set, and there is no cached value.
-+ac_x_includes=no ac_x_libraries=no
-+rm -fr conftest.dir
-+if mkdir conftest.dir; then
-+ cd conftest.dir
-+ # Make sure to not put "make" in the Imakefile rules, since we grep it out.
-+ cat >Imakefile <<'_ACEOF'
-+acfindx:
-+ @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
-+_ACEOF
-+ if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
-+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-+ eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
-+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-+ for ac_extension in a so sl; do
-+ if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
-+ test -f $ac_im_libdir/libX11.$ac_extension; then
-+ ac_im_usrlibdir=$ac_im_libdir; break
-+ fi
-+ done
-+ # Screen out bogus values from the imake configuration. They are
-+ # bogus both because they are the default anyway, and because
-+ # using them would break gcc on systems where it needs fixed includes.
-+ case $ac_im_incroot in
-+ /usr/include) ;;
-+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
-+ esac
-+ case $ac_im_usrlibdir in
-+ /usr/lib | /lib) ;;
-+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
-+ esac
-+ fi
-+ cd ..
-+ rm -fr conftest.dir
-+fi
-+
-+# Standard set of common directories for X headers.
-+# Check X11 before X11Rn because it is often a symlink to the current release.
-+ac_x_header_dirs='
-+/usr/X11/include
-+/usr/X11R6/include
-+/usr/X11R5/include
-+/usr/X11R4/include
-+
-+/usr/include/X11
-+/usr/include/X11R6
-+/usr/include/X11R5
-+/usr/include/X11R4
-+
-+/usr/local/X11/include
-+/usr/local/X11R6/include
-+/usr/local/X11R5/include
-+/usr/local/X11R4/include
-+
-+/usr/local/include/X11
-+/usr/local/include/X11R6
-+/usr/local/include/X11R5
-+/usr/local/include/X11R4
-+
-+/usr/X386/include
-+/usr/x386/include
-+/usr/XFree86/include/X11
-+
-+/usr/include
-+/usr/local/include
-+/usr/unsupported/include
-+/usr/athena/include
-+/usr/local/x11r5/include
-+/usr/lpp/Xamples/include
-+
-+/usr/openwin/include
-+/usr/openwin/share/include'
-+
-+if test "$ac_x_includes" = no; then
+
+ # Check whether --with-x or --without-x was given.
+ if test "${with_x+set}" = set; then
+@@ -28212,7 +28089,7 @@
+ /usr/openwin/share/include'
+
+ if test "$ac_x_includes" = no; then
+- # Guess where to find include files, by looking for Xlib.h.
+ # Guess where to find include files, by looking for a specified header file.
-+ # First, try using that file with no special directory specified.
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <X11/Xlib.h>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ # We can compile using X headers with no special include directory.
-+ac_x_includes=
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ for ac_dir in $ac_x_header_dirs; do
-+ if test -r "$ac_dir/X11/Xlib.h"; then
-+ ac_x_includes=$ac_dir
-+ break
-+ fi
-+done
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+fi # $ac_x_includes = no
-+
-+if test "$ac_x_libraries" = no; then
-+ # Check for the libraries.
-+ # See if we find them without any special options.
-+ # Don't add to $LIBS permanently.
-+ ac_save_LIBS=$LIBS
+ # First, try using that file with no special directory specified.
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -28261,7 +28138,7 @@
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+- LIBS="-lXt $LIBS"
+ LIBS="-lX11 $LIBS"
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <X11/Xlib.h>
-+int
-+main ()
-+{
-+XrmInitialize ()
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -28286,8 +28163,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ LIBS=$ac_save_LIBS
-+# We can link X programs with no special library path.
-+ac_x_libraries=
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+LIBS=$ac_save_LIBS
-+for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-+do
-+ # Don't even attempt the hair of trying to link an X program!
-+ for ac_extension in a so sl; do
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28311,7 +28187,7 @@
+ do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+- if test -r $ac_dir/libXt.$ac_extension; then
+ if test -r $ac_dir/libX11.$ac_extension; then
-+ ac_x_libraries=$ac_dir
-+ break 2
-+ fi
-+ done
-+done
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi # $ac_x_libraries = no
-+
-+if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
-+ # Didn't find X anywhere. Cache the known absence of X.
-+ ac_cv_have_x="have_x=no"
-+else
-+ # Record where we found X for the cache.
-+ ac_cv_have_x="have_x=yes \
-+ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
-+fi
-+fi
-+
-+ fi
-+ eval "$ac_cv_have_x"
-+fi # $with_x != no
-+
-+if test "$have_x" != yes; then
-+ echo "$as_me:$LINENO: result: $have_x" >&5
-+echo "${ECHO_T}$have_x" >&6
-+ no_x=yes
-+else
-+ # If each of the values was on the command line, it overrides each guess.
-+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
-+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
-+ # Update the cache value to reflect the command line values.
-+ ac_cv_have_x="have_x=yes \
-+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+@@ -28347,10 +28223,15 @@
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes \
+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+- echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+-echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
+ # It might be that x_includes is empty (headers are found in the
+ # standard search path. Then output the corresponding message
+ ac_out_x_includes=$x_includes
+ test "x$x_includes" = x && ac_out_x_includes="in standard search path"
+ echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6
+ fi
+
+fi
-+
-+fi
-+if test "$no_x" = yes; then
-+ # Not all programs may use this symbol, but it does not hurt to define it.
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define X_DISPLAY_MISSING 1
-+_ACEOF
-+
-+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
-+else
-+ if test -n "$x_includes"; then
-+ X_CFLAGS="$X_CFLAGS -I$x_includes"
-+ fi
-+
-+ # It would also be nice to do this for all -L options, not just this one.
-+ if test -n "$x_libraries"; then
-+ X_LIBS="$X_LIBS -L$x_libraries"
-+ # For Solaris; some versions of Sun CC require a space after -R and
-+ # others require no space. Words are not sufficient . . . .
-+ case `(uname -sr) 2>/dev/null` in
-+ "SunOS 5"*)
-+ echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
-+echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6
-+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+
+@@ -28398,8 +28279,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_R_nospace=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_R_nospace=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+ if test $ac_R_nospace = yes; then
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+ X_LIBS="$X_LIBS -R$x_libraries"
-+ else
-+ LIBS="$ac_xsave_LIBS -R $x_libraries"
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+int
-+main ()
-+{
-+
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28450,8 +28330,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_R_space=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_R_space=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+ if test $ac_R_space = yes; then
-+ echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+ X_LIBS="$X_LIBS -R $x_libraries"
-+ else
-+ echo "$as_me:$LINENO: result: neither works" >&5
-+echo "${ECHO_T}neither works" >&6
-+ fi
-+ fi
-+ LIBS=$ac_xsave_LIBS
-+ esac
-+ fi
-+
-+ # Check for system-dependent libraries X programs must link with.
-+ # Do this before checking for the system-independent R6 libraries
-+ # (-lICE), since we may need -lsocket or whatever for X linking.
-+
-+ if test "$ISC" = yes; then
-+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
-+ else
-+ # Martyn Johnson says this is needed for Ultrix, if the X
-+ # libraries were built with DECnet support. And Karl Berry says
-+ # the Alpha needs dnet_stub (dnet does not exist).
-+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char XOpenDisplay ();
-+int
-+main ()
-+{
-+XOpenDisplay ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28527,8 +28406,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ :
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
-+echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6
-+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-ldnet $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dnet_ntoa ();
-+int
-+main ()
-+{
-+dnet_ntoa ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28583,8 +28461,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_dnet_dnet_ntoa=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_dnet_dnet_ntoa=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-+echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6
-+if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
-+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
-+fi
-+
-+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
-+ echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
-+echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6
-+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-ldnet_stub $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char dnet_ntoa ();
-+int
-+main ()
-+{
-+dnet_ntoa ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28652,8 +28529,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_dnet_stub_dnet_ntoa=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_dnet_stub_dnet_ntoa=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-+echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6
-+if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
-+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
-+fi
-+
-+ fi
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+ LIBS="$ac_xsave_LIBS"
-+
-+ # msh at cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
-+ # to get the SysV transport functions.
-+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
-+ # needs -lnsl.
-+ # The nsl library prevents programs from opening the X display
-+ # on Irix 5.2, according to T.E. Dickey.
-+ # The functions gethostbyname, getservbyname, and inet_addr are
-+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
-+ echo "$as_me:$LINENO: checking for gethostbyname" >&5
-+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
-+if test "${ac_cv_func_gethostbyname+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define gethostbyname innocuous_gethostbyname
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char gethostbyname (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef gethostbyname
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char gethostbyname ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
-+choke me
-+#else
-+char (*f) () = gethostbyname;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != gethostbyname;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28761,8 +28637,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_gethostbyname=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_func_gethostbyname=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
-+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
-+
-+ if test $ac_cv_func_gethostbyname = no; then
-+ echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
-+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
-+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lnsl $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char gethostbyname ();
-+int
-+main ()
-+{
-+gethostbyname ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28826,8 +28701,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_nsl_gethostbyname=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_nsl_gethostbyname=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
-+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
-+if test $ac_cv_lib_nsl_gethostbyname = yes; then
-+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
-+fi
-+
-+ if test $ac_cv_lib_nsl_gethostbyname = no; then
-+ echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
-+echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6
-+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lbsd $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char gethostbyname ();
-+int
-+main ()
-+{
-+gethostbyname ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -28895,8 +28769,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_bsd_gethostbyname=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_bsd_gethostbyname=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
-+echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6
-+if test $ac_cv_lib_bsd_gethostbyname = yes; then
-+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
-+fi
-+
-+ fi
-+ fi
-+
-+ # lieder at skyler.mavd.honeywell.com says without -lsocket,
-+ # socket/setsockopt and other routines are undefined under SCO ODT
-+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
-+ # on later versions), says Simon Leinen: it contains gethostby*
-+ # variants that don't use the name server (or something). -lsocket
-+ # must be given before -lnsl if both are needed. We assume that
-+ # if connect needs -lnsl, so does gethostbyname.
-+ echo "$as_me:$LINENO: checking for connect" >&5
-+echo $ECHO_N "checking for connect... $ECHO_C" >&6
-+if test "${ac_cv_func_connect+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define connect to an innocuous variant, in case <limits.h> declares connect.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define connect innocuous_connect
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char connect (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef connect
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char connect ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_connect) || defined (__stub___connect)
-+choke me
-+#else
-+char (*f) () = connect;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != connect;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -29000,8 +28873,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_connect=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_func_connect=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
-+echo "${ECHO_T}$ac_cv_func_connect" >&6
-+
-+ if test $ac_cv_func_connect = no; then
-+ echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
-+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
-+if test "${ac_cv_lib_socket_connect+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char connect ();
-+int
-+main ()
-+{
-+connect ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -29065,8 +28937,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_socket_connect=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_socket_connect=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
-+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
-+if test $ac_cv_lib_socket_connect = yes; then
-+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
-+fi
-+
-+ fi
-+
-+ # Guillermo Gomez says -lposix is necessary on A/UX.
-+ echo "$as_me:$LINENO: checking for remove" >&5
-+echo $ECHO_N "checking for remove... $ECHO_C" >&6
-+if test "${ac_cv_func_remove+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define remove to an innocuous variant, in case <limits.h> declares remove.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define remove innocuous_remove
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char remove (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef remove
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char remove ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_remove) || defined (__stub___remove)
-+choke me
-+#else
-+char (*f) () = remove;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != remove;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -29163,8 +29034,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_remove=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_func_remove=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
-+echo "${ECHO_T}$ac_cv_func_remove" >&6
-+
-+ if test $ac_cv_func_remove = no; then
-+ echo "$as_me:$LINENO: checking for remove in -lposix" >&5
-+echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6
-+if test "${ac_cv_lib_posix_remove+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lposix $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char remove ();
-+int
-+main ()
-+{
-+remove ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -29228,8 +29098,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_posix_remove=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_posix_remove=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
-+echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6
-+if test $ac_cv_lib_posix_remove = yes; then
-+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
-+fi
-+
-+ fi
-+
-+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
-+ echo "$as_me:$LINENO: checking for shmat" >&5
-+echo $ECHO_N "checking for shmat... $ECHO_C" >&6
-+if test "${ac_cv_func_shmat+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+/* Define shmat to an innocuous variant, in case <limits.h> declares shmat.
-+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
-+#define shmat innocuous_shmat
-+
-+/* System header to define __stub macros and hopefully few prototypes,
-+ which can conflict with char shmat (); below.
-+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-+ <limits.h> exists even on freestanding compilers. */
-+
-+#ifdef __STDC__
-+# include <limits.h>
-+#else
-+# include <assert.h>
-+#endif
-+
-+#undef shmat
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+{
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char shmat ();
-+/* The GNU C library defines this for functions which it implements
-+ to always fail with ENOSYS. Some functions are actually named
-+ something starting with __ and the normal name is an alias. */
-+#if defined (__stub_shmat) || defined (__stub___shmat)
-+choke me
-+#else
-+char (*f) () = shmat;
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+int
-+main ()
-+{
-+return f != shmat;
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -29326,8 +29195,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_func_shmat=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_func_shmat=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
-+echo "${ECHO_T}$ac_cv_func_shmat" >&6
-+
-+ if test $ac_cv_func_shmat = no; then
-+ echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
-+echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6
-+if test "${ac_cv_lib_ipc_shmat+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lipc $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char shmat ();
-+int
-+main ()
-+{
-+shmat ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -29391,8 +29259,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_ipc_shmat=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ac_cv_lib_ipc_shmat=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
-+echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6
-+if test $ac_cv_lib_ipc_shmat = yes; then
-+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
-+fi
-+
-+ fi
-+ fi
-+
-+ # Check for libraries that X11R6 Xt/Xaw programs need.
-+ ac_save_LDFLAGS=$LDFLAGS
-+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
-+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
-+ # check for ICE first), but we must link in the order -lSM -lICE or
-+ # we get undefined symbols. So assume we have SM if we have ICE.
-+ # These have to be linked with before -lX11, unlike the other
-+ # libraries we check for below, so use a different variable.
-+ # John Interrante, Karl Berry
-+ echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
-+echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6
-+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+
-+/* Override any gcc2 internal prototype to avoid an error. */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+/* We use char because int might match the return type of a gcc2
-+ builtin and then its argument prototype would still apply. */
-+char IceConnectionNumber ();
-+int
-+main ()
-+{
-+IceConnectionNumber ();
-+ ;
-+ return 0;
-+}
-+_ACEOF
-+rm -f conftest.$ac_objext conftest$ac_exeext
-+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-+ (eval $ac_link) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -29471,8 +29338,7 @@
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag"
+- || test ! -s conftest.err'
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; } &&
-+ { ac_try='test -s conftest$ac_exeext'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }; then
-+ ac_cv_lib_ICE_IceConnectionNumber=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -31490,11 +31356,6 @@
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+- if test x"$ac_file" != x-; then
+- { echo "$as_me:$LINENO: creating $ac_file" >&5
+-echo "$as_me: creating $ac_file" >&6;}
+- rm -f "$ac_file"
+- fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+@@ -31533,6 +31394,12 @@
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+
-+ac_cv_lib_ICE_IceConnectionNumber=no
-+fi
-+rm -f conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-+echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6
-+if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
-+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
-+fi
-+
-+ LDFLAGS=$ac_save_LDFLAGS
-+
-+fi
-+
-+
-+## for now enable_x11 just tracks have_x11,
-+## there's no --enable-x11
-+if test x$no_x = xyes ; then
-+ have_x11=no
-+ enable_x11=no
-+else
-+ have_x11=yes
-+ enable_x11=yes
-+fi
-+
-+if test x$enable_x11 = xyes ; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define DBUS_BUILD_X11 1
-+_ACEOF
-+
-+ DBUS_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
-+ DBUS_X_CFLAGS="$X_CFLAGS"
-+else
-+ DBUS_X_LIBS=
-+ DBUS_X_CFLAGS=
-+fi
-+
-+
-+
-+
-+### Doxygen Documentation
-+
-+# Extract the first word of "doxygen", so it can be a program name with args.
-+set dummy doxygen; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_DOXYGEN+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $DOXYGEN in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_DOXYGEN" && ac_cv_path_DOXYGEN="no"
-+ ;;
-+esac
-+fi
-+DOXYGEN=$ac_cv_path_DOXYGEN
-+
-+if test -n "$DOXYGEN"; then
-+ echo "$as_me:$LINENO: result: $DOXYGEN" >&5
-+echo "${ECHO_T}$DOXYGEN" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+
-+echo "$as_me:$LINENO: checking whether to build Doxygen documentation" >&5
-+echo $ECHO_N "checking whether to build Doxygen documentation... $ECHO_C" >&6
-+
-+if test x$DOXYGEN = xno ; then
-+ have_doxygen=no
-+else
-+ have_doxygen=yes
-+fi
-+
-+if test x$enable_doxygen_docs = xauto ; then
-+ if test x$have_doxygen = xno ; then
-+ enable_doxygen_docs=no
-+ else
-+ enable_doxygen_docs=yes
-+ fi
-+fi
-+
-+if test x$enable_doxygen_docs = xyes; then
-+ if test x$have_doxygen = xno; then
-+ { { echo "$as_me:$LINENO: error: Building Doxygen docs explicitly required, but Doxygen not found" >&5
-+echo "$as_me: error: Building Doxygen docs explicitly required, but Doxygen not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+
-+
-+if test x$enable_doxygen_docs = xyes; then
-+ DBUS_DOXYGEN_DOCS_ENABLED_TRUE=
-+ DBUS_DOXYGEN_DOCS_ENABLED_FALSE='#'
-+else
-+ DBUS_DOXYGEN_DOCS_ENABLED_TRUE='#'
-+ DBUS_DOXYGEN_DOCS_ENABLED_FALSE=
-+fi
-+
-+echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+
-+### XML Documentation
-+
-+# Extract the first word of "xmlto", so it can be a program name with args.
-+set dummy xmlto; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_XMLTO+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $XMLTO in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ test -z "$ac_cv_path_XMLTO" && ac_cv_path_XMLTO="no"
-+ ;;
-+esac
-+fi
-+XMLTO=$ac_cv_path_XMLTO
-+
-+if test -n "$XMLTO"; then
-+ echo "$as_me:$LINENO: result: $XMLTO" >&5
-+echo "${ECHO_T}$XMLTO" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+
-+echo "$as_me:$LINENO: checking whether to build XML documentation" >&5
-+echo $ECHO_N "checking whether to build XML documentation... $ECHO_C" >&6
-+
-+if test x$XMLTO = xno ; then
-+ have_xmlto=no
-+else
-+ have_xmlto=yes
-+fi
-+
-+if test x$enable_xml_docs = xauto ; then
-+ if test x$have_xmlto = xno ; then
-+ enable_xml_docs=no
-+ else
-+ enable_xml_docs=yes
-+ fi
-+fi
-+
-+if test x$enable_xml_docs = xyes; then
-+ if test x$have_xmlto = xno; then
-+ { { echo "$as_me:$LINENO: error: Building XML docs explicitly required, but xmlto not found" >&5
-+echo "$as_me: error: Building XML docs explicitly required, but xmlto not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+fi
-+
-+
-+
-+if test x$enable_xml_docs = xyes; then
-+ DBUS_XML_DOCS_ENABLED_TRUE=
-+ DBUS_XML_DOCS_ENABLED_FALSE='#'
-+else
-+ DBUS_XML_DOCS_ENABLED_TRUE='#'
-+ DBUS_XML_DOCS_ENABLED_FALSE=
-+fi
-+
-+echo "$as_me:$LINENO: result: yes" >&5
-+echo "${ECHO_T}yes" >&6
-+
-+#### Have to go $localstatedir->$prefix/var->/usr/local/var
-+#### someone please fix this a better way...
-+
-+#### find the actual value for $prefix that we'll end up with
-+## (I know this is broken and should be done in the Makefile, but
-+## that's a major pain and almost nobody actually seems to care)
-+REAL_PREFIX=
-+if test "x$prefix" = "xNONE"; then
-+ REAL_PREFIX=$ac_default_prefix
-+else
-+ REAL_PREFIX=$prefix
-+fi
-+
-+## temporarily change prefix and exec_prefix
-+old_prefix=$prefix
-+prefix=$REAL_PREFIX
-+
-+if test "x$exec_prefix" = xNONE ; then
-+ REAL_EXEC_PREFIX=$REAL_PREFIX
-+else
-+ REAL_EXEC_PREFIX=$exec_prefix
-+fi
-+old_exec_prefix=$exec_prefix
-+exec_prefix=$REAL_EXEC_PREFIX
-+
-+## eval everything
-+LOCALSTATEDIR_TMP="$localstatedir"
-+EXPANDED_LOCALSTATEDIR=`eval echo $LOCALSTATEDIR_TMP`
-+
-+
-+SYSCONFDIR_TMP="$sysconfdir"
-+EXPANDED_SYSCONFDIR=`eval echo $SYSCONFDIR_TMP`
-+
-+
-+BINDIR_TMP="$bindir"
-+EXPANDED_BINDIR=`eval echo $BINDIR_TMP`
-+
-+
-+LIBDIR_TMP="$libdir"
-+EXPANDED_LIBDIR=`eval echo $LIBDIR_TMP`
-+
-+
-+DATADIR_TMP="$datadir"
-+EXPANDED_DATADIR=`eval echo $DATADIR_TMP`
-+
-+
-+## put prefix and exec_prefix back
-+prefix=$old_prefix
-+exec_prefix=$old_exec_prefix
-+
-+#### Check our operating system
-+operating_system=unknown
-+if test -f /etc/redhat-release || test -f $EXPANDED_SYSCONFDIR/redhat-release ; then
-+ operating_system=redhat
-+fi
-+
-+if test -f /etc/slackware-version || test -f $EXPANDED_SYSCONFDIR/slackware-version ; then
-+ operating_system=slackware
-+fi
-+
-+#### Sort out init scripts
-+
-+if test x$with_init_scripts = x; then
-+ if test xredhat = x$operating_system ; then
-+ with_init_scripts=redhat
-+ else
-+ if test xslackware = x$operating_system ; then
-+ with_init_scripts=slackware
-+ else
-+ with_init_scripts=none
-+ fi
-+ fi
-+fi
-+
-+
-+
-+if test x$with_init_scripts = xredhat; then
-+ DBUS_INIT_SCRIPTS_RED_HAT_TRUE=
-+ DBUS_INIT_SCRIPTS_RED_HAT_FALSE='#'
-+else
-+ DBUS_INIT_SCRIPTS_RED_HAT_TRUE='#'
-+ DBUS_INIT_SCRIPTS_RED_HAT_FALSE=
-+fi
-+
-+
-+
-+
-+if test x$with_init_scripts = xslackware; then
-+ DBUS_INIT_SCRIPTS_SLACKWARE_TRUE=
-+ DBUS_INIT_SCRIPTS_SLACKWARE_FALSE='#'
-+else
-+ DBUS_INIT_SCRIPTS_SLACKWARE_TRUE='#'
-+ DBUS_INIT_SCRIPTS_SLACKWARE_FALSE=
-+fi
-+
-+
-+##### Set up location for system bus socket
-+if ! test -z "$with_system_socket"; then
-+ DBUS_SYSTEM_SOCKET=$with_system_socket
-+else
-+ DBUS_SYSTEM_SOCKET=${EXPANDED_LOCALSTATEDIR}/run/dbus/system_bus_socket
-+fi
-+
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_SYSTEM_SOCKET "$DBUS_SYSTEM_SOCKET"
-+_ACEOF
-+
-+
-+## system bus only listens on local domain sockets, and never
-+## on an abstract socket (so only root can create the socket)
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="unix:path=$DBUS_SYSTEM_SOCKET"
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_SYSTEM_BUS_DEFAULT_ADDRESS "$DBUS_SYSTEM_BUS_DEFAULT_ADDRESS"
-+_ACEOF
-+
-+
-+#### Set up the pid file
-+if ! test -z "$with_system_pid_file"; then
-+ DBUS_SYSTEM_PID_FILE=$with_system_pid_file
-+elif test x$operating_system = xredhat ; then
-+ DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/messagebus.pid
-+else
-+ DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/dbus/pid
-+fi
-+
-+
-+
-+#### Directory to check for console ownership
-+if ! test -z "$with_console_auth_dir"; then
-+ DBUS_CONSOLE_AUTH_DIR=$with_console_auth_dir
-+else
-+ DBUS_CONSOLE_AUTH_DIR=/var/run/console/
-+fi
-+
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_CONSOLE_AUTH_DIR "$DBUS_CONSOLE_AUTH_DIR"
-+_ACEOF
-+
-+
-+#### User to start the system bus as
-+if test -z "$with_dbus_user" ; then
-+ DBUS_USER=messagebus
-+else
-+ DBUS_USER=$with_dbus_user
-+fi
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_USER "$DBUS_USER"
-+_ACEOF
-+
-+
-+#### Tell tests where to find certain stuff in builddir
-+ABSOLUTE_TOP_BUILDDIR=`cd ${ac_top_builddir}. && pwd`
-+
-+
-+
-+
-+TEST_SERVICE_DIR=${ABSOLUTE_TOP_BUILDDIR}/test/data/valid-service-files
-+
-+cat >>confdefs.h <<_ACEOF
-+#define TEST_SERVICE_DIR "$TEST_SERVICE_DIR"
-+_ACEOF
-+
-+
-+
-+
-+TEST_SERVICE_BINARY=${ABSOLUTE_TOP_BUILDDIR}/test/test-service
-+
-+cat >>confdefs.h <<_ACEOF
-+#define TEST_SERVICE_BINARY "$TEST_SERVICE_BINARY"
-+_ACEOF
-+
-+
-+
-+
-+TEST_SHELL_SERVICE_BINARY=${ABSOLUTE_TOP_BUILDDIR}/test/test-shell-service
-+
-+cat >>confdefs.h <<_ACEOF
-+#define TEST_SHELL_SERVICE_BINARY "$TEST_SHELL_SERVICE_BINARY"
-+_ACEOF
-+
-+
-+
-+
-+TEST_GLIB_SERVICE_BINARY=${ABSOLUTE_TOP_BUILDDIR}/test/glib/test-service-glib
-+
-+cat >>confdefs.h <<_ACEOF
-+#define TEST_GLIB_SERVICE_BINARY "$TEST_GLIB_SERVICE_BINARY"
-+_ACEOF
-+
-+
-+
-+
-+TEST_PYTHON_SERVICE_BINARY=${ABSOLUTE_TOP_BUILDDIR}/test/python/test-service.py
-+
-+cat >>confdefs.h <<_ACEOF
-+#define TEST_PYTHON_SERVICE_BINARY "$TEST_PYTHON_SERVICE_BINARY"
-+_ACEOF
-+
-+
-+
-+
-+TEST_EXIT_BINARY=${ABSOLUTE_TOP_BUILDDIR}/test/test-exit
-+
-+cat >>confdefs.h <<_ACEOF
-+#define TEST_EXIT_BINARY "$TEST_EXIT_BINARY"
-+_ACEOF
-+
-+
-+
-+
-+TEST_SEGFAULT_BINARY=${ABSOLUTE_TOP_BUILDDIR}/test/test-segfault
-+
-+cat >>confdefs.h <<_ACEOF
-+#define TEST_SEGFAULT_BINARY "$TEST_SEGFAULT_BINARY"
-+_ACEOF
-+
-+
-+
-+
-+TEST_SLEEP_FOREVER_BINARY=${ABSOLUTE_TOP_BUILDDIR}/test/test-sleep-forever
-+
-+cat >>confdefs.h <<_ACEOF
-+#define TEST_SLEEP_FOREVER_BINARY "$TEST_SLEEP_FOREVER_BINARY"
-+_ACEOF
-+
-+
-+
-+
-+
-+#### Find socket directories
-+if ! test -z "$TMPDIR" ; then
-+ DEFAULT_SOCKET_DIR=$TMPDIR
-+elif ! test -z "$TEMP" ; then
-+ DEFAULT_SOCKET_DIR=$TEMP
-+elif ! test -z "$TMP" ; then
-+ DEFAULT_SOCKET_DIR=$TMP
-+else
-+ DEFAULT_SOCKET_DIR=/tmp
-+fi
-+
-+if ! test -z "$with_test_socket_dir" ; then
-+ TEST_SOCKET_DIR="$with_test_socket_dir"
-+else
-+ TEST_SOCKET_DIR=$DEFAULT_SOCKET_DIR
-+fi
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_TEST_SOCKET_DIR "$TEST_SOCKET_DIR"
-+_ACEOF
-+
-+
-+if ! test -z "$with_session_socket_dir" ; then
-+ DBUS_SESSION_SOCKET_DIR="$with_session_socket_dir"
-+else
-+ DBUS_SESSION_SOCKET_DIR=$DEFAULT_SOCKET_DIR
-+fi
-+
-+cat >>confdefs.h <<_ACEOF
-+#define DBUS_SESSION_SOCKET_DIR "$DBUS_SESSION_SOCKET_DIR"
-+_ACEOF
-+
-+
-+
-+# Detect if we can build Python bindings (need python, python headers, and pyrex)
-+if test x$enable_python = xno; then
-+ have_python=no
-+else
-+ have_python_version=2.4
-+ { echo "$as_me:$LINENO: Checking to see if we can build Python bindings" >&5
-+echo "$as_me: Checking to see if we can build Python bindings" >&6;}
-+ have_python=no
-+
-+
-+
-+
-+ # Find any Python interpreter.
-+ if test -z "$PYTHON"; then
-+ for ac_prog in python python2 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_path_PYTHON+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ case $PYTHON in
-+ [\\/]* | ?:[\\/]*)
-+ ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+ ;;
-+esac
-+fi
-+PYTHON=$ac_cv_path_PYTHON
-+
-+if test -n "$PYTHON"; then
-+ echo "$as_me:$LINENO: result: $PYTHON" >&5
-+echo "${ECHO_T}$PYTHON" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$PYTHON" && break
-+done
-+test -n "$PYTHON" || PYTHON=":"
-+
-+ fi
-+ am_display_PYTHON=python
-+
-+
-+ if test "$PYTHON" = :; then
-+ { { echo "$as_me:$LINENO: error: no suitable Python interpreter found" >&5
-+echo "$as_me: error: no suitable Python interpreter found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+
-+
-+ echo "$as_me:$LINENO: checking for $am_display_PYTHON version" >&5
-+echo $ECHO_N "checking for $am_display_PYTHON version... $ECHO_C" >&6
-+if test "${am_cv_python_version+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ am_cv_python_version=`$PYTHON -c "import sys; print sys.version[:3]"`
-+fi
-+echo "$as_me:$LINENO: result: $am_cv_python_version" >&5
-+echo "${ECHO_T}$am_cv_python_version" >&6
-+ PYTHON_VERSION=$am_cv_python_version
-+
-+
-+
-+ PYTHON_PREFIX='${prefix}'
-+
-+ PYTHON_EXEC_PREFIX='${exec_prefix}'
-+
-+
-+
-+ echo "$as_me:$LINENO: checking for $am_display_PYTHON platform" >&5
-+echo $ECHO_N "checking for $am_display_PYTHON platform... $ECHO_C" >&6
-+if test "${am_cv_python_platform+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`
-+fi
-+echo "$as_me:$LINENO: result: $am_cv_python_platform" >&5
-+echo "${ECHO_T}$am_cv_python_platform" >&6
-+ PYTHON_PLATFORM=$am_cv_python_platform
-+
-+
-+
-+
-+ echo "$as_me:$LINENO: checking for $am_display_PYTHON script directory" >&5
-+echo $ECHO_N "checking for $am_display_PYTHON script directory... $ECHO_C" >&6
-+if test "${am_cv_python_pythondir+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null ||
-+ echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
-+fi
-+echo "$as_me:$LINENO: result: $am_cv_python_pythondir" >&5
-+echo "${ECHO_T}$am_cv_python_pythondir" >&6
-+ pythondir=$am_cv_python_pythondir
-+
-+
-+
-+ pkgpythondir=\${pythondir}/$PACKAGE
-+
-+
-+ echo "$as_me:$LINENO: checking for $am_display_PYTHON extension module directory" >&5
-+echo $ECHO_N "checking for $am_display_PYTHON extension module directory... $ECHO_C" >&6
-+if test "${am_cv_python_pyexecdir+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null ||
-+ echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`
-+fi
-+echo "$as_me:$LINENO: result: $am_cv_python_pyexecdir" >&5
-+echo "${ECHO_T}$am_cv_python_pyexecdir" >&6
-+ pyexecdir=$am_cv_python_pyexecdir
-+
-+
-+
-+ pkgpyexecdir=\${pyexecdir}/$PACKAGE
-+
-+
-+
-+ fi
-+
-+
-+
-+ if test -z "$PYTHON" ; then
-+ { echo "$as_me:$LINENO: WARNING: Python not found" >&5
-+echo "$as_me: WARNING: Python not found" >&2;}
-+ else
-+ echo "$as_me:$LINENO: checking whether $PYTHON version >= $have_python_version" >&5
-+echo $ECHO_N "checking whether $PYTHON version >= $have_python_version... $ECHO_C" >&6
-+ prog="import sys, string
-+# split strings by '.' and convert to numeric. Append some zeros
-+# because we need at least 4 digits for the hex conversion.
-+minver = map(int, string.split('$have_python_version', '.')) + [0, 0, 0]
-+minverhex = 0
-+for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i]
-+sys.exit(sys.hexversion < minverhex)"
-+ if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5
-+ ($PYTHON -c "$prog") >&5 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; then
-+ have_python_version="yes"
-+else
-+ have_python_version="too old"
-+fi
-+
-+
-+ echo "$as_me:$LINENO: result: $have_python_version" >&5
-+echo "${ECHO_T}$have_python_version" >&6
-+
-+ for ac_prog in pyrexc
-+do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+set dummy $ac_prog; ac_word=$2
-+echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-+if test "${ac_cv_prog_PYREX+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ if test -n "$PYREX"; then
-+ ac_cv_prog_PYREX="$PYREX" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for ac_exec_ext in '' $ac_executable_extensions; do
-+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+ ac_cv_prog_PYREX="$ac_prog"
-+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+ break 2
-+ fi
-+done
-+done
-+
-+fi
-+fi
-+PYREX=$ac_cv_prog_PYREX
-+if test -n "$PYREX"; then
-+ echo "$as_me:$LINENO: result: $PYREX" >&5
-+echo "${ECHO_T}$PYREX" >&6
-+else
-+ echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6
-+fi
-+
-+ test -n "$PYREX" && break
-+done
-+
-+
-+ if test -z "$PYREX" ; then
-+ have_pyrex=no
-+ else
-+ have_pyrex=yes
-+ fi
-+
-+
-+echo "$as_me:$LINENO: checking for headers required to compile python extensions" >&5
-+echo $ECHO_N "checking for headers required to compile python extensions... $ECHO_C" >&6
-+py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
-+py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
-+PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
-+if test "$py_prefix" != "$py_exec_prefix"; then
-+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
-+fi
-+
-+save_CPPFLAGS="$CPPFLAGS"
-+CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
-+cat >conftest.$ac_ext <<_ACEOF
-+/* confdefs.h. */
-+_ACEOF
-+cat confdefs.h >>conftest.$ac_ext
-+cat >>conftest.$ac_ext <<_ACEOF
-+/* end confdefs.h. */
-+#include <Python.h>
-+_ACEOF
-+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
-+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-+ ac_status=$?
-+ grep -v '^ *+' conftest.er1 >conftest.err
-+ rm -f conftest.er1
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } >/dev/null; then
-+ if test -s conftest.err; then
-+ ac_cpp_err=$ac_c_preproc_warn_flag
-+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
-+ else
-+ ac_cpp_err=
-+ fi
-+else
-+ ac_cpp_err=yes
-+fi
-+if test -z "$ac_cpp_err"; then
-+ echo "$as_me:$LINENO: result: found" >&5
-+echo "${ECHO_T}found" >&6
-+have_python_headers=yes
-+else
-+ echo "$as_me: failed program was:" >&5
-+sed 's/^/| /' conftest.$ac_ext >&5
-+
-+ echo "$as_me:$LINENO: result: not found" >&5
-+echo "${ECHO_T}not found" >&6
-+have_python_headers=no
-+fi
-+rm -f conftest.err conftest.$ac_ext
-+CPPFLAGS="$save_CPPFLAGS"
-+
-+
-+ if test x$have_pyrex = xyes -a x$have_python_headers = xyes -a "x$have_python_version" = xyes ; then
-+ have_python=yes
-+ fi
-+ fi
-+
-+ if test x$have_python = xno ; then
-+ if test x$enable_python = xyes ; then
-+ { { echo "$as_me:$LINENO: error: Building python explicitly requested, but can't build python bindings because either Pyrex, Python headers or a suitable Python version was not found" >&5
-+echo "$as_me: error: Building python explicitly requested, but can't build python bindings because either Pyrex, Python headers or a suitable Python version was not found" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ { echo "$as_me:$LINENO: WARNING: Couldn't find either Pyrex, the Python headers or a suitable version of Python, not building Python bindings" >&5
-+echo "$as_me: WARNING: Couldn't find either Pyrex, the Python headers or a suitable version of Python, not building Python bindings" >&2;}
-+ fi
-+ fi
-+fi
-+
-+
-+
-+if test x$have_python = xyes; then
-+ HAVE_PYTHON_TRUE=
-+ HAVE_PYTHON_FALSE='#'
-+else
-+ HAVE_PYTHON_TRUE='#'
-+ HAVE_PYTHON_FALSE=
-+fi
-+
-+
-+ ac_config_files="$ac_config_files Doxyfile dbus/dbus-arch-deps.h bus/system.conf bus/session.conf bus/messagebus bus/rc.messagebus bus/dbus-daemon.1 Makefile dbus/Makefile glib/Makefile glib/examples/Makefile glib/examples/statemachine/Makefile python/Makefile python/examples/Makefile qt/Makefile qt3/Makefile gcj/Makefile gcj/org/Makefile gcj/org/freedesktop/Makefile gcj/org/freedesktop/dbus/Makefile mono/Makefile mono/AssemblyInfo.cs mono/dbus-sharp.dll.config mono/example/Makefile mono/doc/Makefile bus/Makefile tools/Makefile test/Makefile test/glib/Makefile test/python/Makefile test/qt/Makefile test/name-test/Makefile doc/Makefile dbus-1.pc dbus-glib-1.pc dbus-sharp.pc test/data/valid-config-files/debug-allow-all.conf test/data/valid-config-files/debug-allow-all-sha1.conf test/data/valid-service-files/debug-echo.service test/data/valid-service-files/debug-segfault.service test/data/valid-service-files/debug-glib.service test/data/valid-service-files/debug-shell-echo-success.service test/data/valid-service-files/debug-shell-echo-fail.service test/data/valid-service-files/debug-python.service"
-+cat >confcache <<\_ACEOF
-+# This file is a shell script that caches the results of configure
-+# tests run on this system so they can be shared between configure
-+# scripts and configure runs, see configure's option --config-cache.
-+# It is not useful on other systems. If it contains results you don't
-+# want to keep, you may remove or edit it.
-+#
-+# config.status only pays attention to the cache file if you give it
-+# the --recheck option to rerun configure.
-+#
-+# `ac_cv_env_foo' variables (set or unset) will be overridden when
-+# loading this file, other *unset* `ac_cv_foo' will be assigned the
-+# following values.
-+
-+_ACEOF
-+
-+# The following way of writing the cache mishandles newlines in values,
-+# but we know of no workaround that is simple, portable, and efficient.
-+# So, don't put newlines in cache variables' values.
-+# Ultrix sh set writes to stderr and can't be redirected directly,
-+# and sets the high bit in the cache file unless we assign to the vars.
-+{
-+ (set) 2>&1 |
-+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
-+ *ac_space=\ *)
-+ # `set' does not quote correctly, so add quotes (double-quote
-+ # substitution turns \\\\ into \\, and sed turns \\ into \).
-+ sed -n \
-+ "s/'/'\\\\''/g;
-+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-+ ;;
-+ *)
-+ # `set' quotes correctly as required by POSIX, so do not add quotes.
-+ sed -n \
-+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
-+ ;;
-+ esac;
-+} |
-+ sed '
-+ t clear
-+ : clear
-+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-+ t end
-+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-+ : end' >>confcache
-+if diff $cache_file confcache >/dev/null 2>&1; then :; else
-+ if test -w $cache_file; then
-+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
-+ cat confcache >$cache_file
-+ else
-+ echo "not updating unwritable cache $cache_file"
-+ fi
-+fi
-+rm -f confcache
-+
-+test "x$prefix" = xNONE && prefix=$ac_default_prefix
-+# Let make expand exec_prefix.
-+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-+
-+# VPATH may cause trouble with some makes, so we remove $(srcdir),
-+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-+# trailing colons and then remove the whole line if VPATH becomes empty
-+# (actually we leave an empty line to preserve line numbers).
-+if test "x$srcdir" = x.; then
-+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
-+s/:*\$(srcdir):*/:/;
-+s/:*\${srcdir}:*/:/;
-+s/:*@srcdir@:*/:/;
-+s/^\([^=]*=[ ]*\):*/\1/;
-+s/:*$//;
-+s/^[^=]*=[ ]*$//;
-+}'
-+fi
-+
-+DEFS=-DHAVE_CONFIG_H
-+
-+ac_libobjs=
-+ac_ltlibobjs=
-+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-+ # 1. Remove the extension, and $U if already installed.
-+ ac_i=`echo "$ac_i" |
-+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
-+ # 2. Add them.
-+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
-+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
-+done
-+LIBOBJS=$ac_libobjs
-+
-+LTLIBOBJS=$ac_ltlibobjs
-+
-+
-+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"AMDEP\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_BUILD_TESTS_TRUE}" && test -z "${DBUS_BUILD_TESTS_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_BUILD_TESTS\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_BUILD_TESTS\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${am__fastdepGCJ_TRUE}" && test -z "${am__fastdepGCJ_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepGCJ\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"am__fastdepGCJ\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_USE_GCJ_TRUE}" && test -z "${DBUS_USE_GCJ_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_USE_GCJ\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_USE_GCJ\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_USE_CSC_TRUE}" && test -z "${DBUS_USE_CSC_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_USE_CSC\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_USE_CSC\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${ENABLE_MONODOC_TRUE}" && test -z "${ENABLE_MONODOC_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"ENABLE_MONODOC\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"ENABLE_MONODOC\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_GCOV_ENABLED_TRUE}" && test -z "${DBUS_GCOV_ENABLED_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_GCOV_ENABLED\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_GCOV_ENABLED\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_USE_EXPAT_TRUE}" && test -z "${DBUS_USE_EXPAT_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_USE_EXPAT\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_USE_EXPAT\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_USE_LIBXML_TRUE}" && test -z "${DBUS_USE_LIBXML_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_USE_LIBXML\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_USE_LIBXML\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${HAVE_SELINUX_TRUE}" && test -z "${HAVE_SELINUX_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_SELINUX\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"HAVE_SELINUX\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${HAVE_GLIB_TRUE}" && test -z "${HAVE_GLIB_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_GLIB\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"HAVE_GLIB\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${HAVE_GLIB_THREADS_TRUE}" && test -z "${HAVE_GLIB_THREADS_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_GLIB_THREADS\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"HAVE_GLIB_THREADS\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${HAVE_GTK_TRUE}" && test -z "${HAVE_GTK_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_GTK\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"HAVE_GTK\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${HAVE_QT3_TRUE}" && test -z "${HAVE_QT3_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_QT3\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"HAVE_QT3\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${HAVE_QT_TRUE}" && test -z "${HAVE_QT_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_QT\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"HAVE_QT\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${HAVE_QTESTLIB_TRUE}" && test -z "${HAVE_QTESTLIB_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_QTESTLIB\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"HAVE_QTESTLIB\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_DOXYGEN_DOCS_ENABLED_TRUE}" && test -z "${DBUS_DOXYGEN_DOCS_ENABLED_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_DOXYGEN_DOCS_ENABLED\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_DOXYGEN_DOCS_ENABLED\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_XML_DOCS_ENABLED_TRUE}" && test -z "${DBUS_XML_DOCS_ENABLED_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_XML_DOCS_ENABLED\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_XML_DOCS_ENABLED\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_INIT_SCRIPTS_RED_HAT_TRUE}" && test -z "${DBUS_INIT_SCRIPTS_RED_HAT_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_INIT_SCRIPTS_RED_HAT\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_INIT_SCRIPTS_RED_HAT\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${DBUS_INIT_SCRIPTS_SLACKWARE_TRUE}" && test -z "${DBUS_INIT_SCRIPTS_SLACKWARE_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"DBUS_INIT_SCRIPTS_SLACKWARE\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"DBUS_INIT_SCRIPTS_SLACKWARE\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+if test -z "${HAVE_PYTHON_TRUE}" && test -z "${HAVE_PYTHON_FALSE}"; then
-+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_PYTHON\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&5
-+echo "$as_me: error: conditional \"HAVE_PYTHON\" was never defined.
-+Usually this means the macro was only invoked conditionally." >&2;}
-+ { (exit 1); exit 1; }; }
-+fi
-+
-+: ${CONFIG_STATUS=./config.status}
-+ac_clean_files_save=$ac_clean_files
-+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-+echo "$as_me: creating $CONFIG_STATUS" >&6;}
-+cat >$CONFIG_STATUS <<_ACEOF
-+#! $SHELL
-+# Generated by $as_me.
-+# Run this file to recreate the current configuration.
-+# Compiler output produced by configure, useful for debugging
-+# configure, is in config.log if it exists.
-+
-+debug=false
-+ac_cs_recheck=false
-+ac_cs_silent=false
-+SHELL=\${CONFIG_SHELL-$SHELL}
-+_ACEOF
-+
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+## --------------------- ##
-+## M4sh Initialization. ##
-+## --------------------- ##
-+
-+# Be Bourne compatible
-+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-+ emulate sh
-+ NULLCMD=:
-+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
-+ # is contrary to our usage. Disable this feature.
-+ alias -g '${1+"$@"}'='"$@"'
-+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
-+ set -o posix
-+fi
-+DUALCASE=1; export DUALCASE # for MKS sh
-+
-+# Support unset when possible.
-+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-+ as_unset=unset
-+else
-+ as_unset=false
-+fi
-+
-+
-+# Work around bugs in pre-3.0 UWIN ksh.
-+$as_unset ENV MAIL MAILPATH
-+PS1='$ '
-+PS2='> '
-+PS4='+ '
-+
-+# NLS nuisances.
-+for as_var in \
-+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-+ LC_TELEPHONE LC_TIME
-+do
-+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-+ eval $as_var=C; export $as_var
-+ else
-+ $as_unset $as_var
-+ fi
-+done
-+
-+# Required to use basename.
-+if expr a : '\(a\)' >/dev/null 2>&1; then
-+ as_expr=expr
-+else
-+ as_expr=false
-+fi
-+
-+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
-+ as_basename=basename
-+else
-+ as_basename=false
-+fi
-+
-+
-+# Name of the executable.
-+as_me=`$as_basename "$0" ||
-+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-+ X"$0" : 'X\(//\)$' \| \
-+ X"$0" : 'X\(/\)$' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X/"$0" |
-+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
-+ /^X\/\(\/\/\)$/{ s//\1/; q; }
-+ /^X\/\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+
-+
-+# PATH needs CR, and LINENO needs CR and PATH.
-+# Avoid depending upon Character Ranges.
-+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-+as_cr_digits='0123456789'
-+as_cr_alnum=$as_cr_Letters$as_cr_digits
-+
-+# The user is always right.
-+if test "${PATH_SEPARATOR+set}" != set; then
-+ echo "#! /bin/sh" >conf$$.sh
-+ echo "exit 0" >>conf$$.sh
-+ chmod +x conf$$.sh
-+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-+ PATH_SEPARATOR=';'
-+ else
-+ PATH_SEPARATOR=:
-+ fi
-+ rm -f conf$$.sh
-+fi
-+
-+
-+ as_lineno_1=$LINENO
-+ as_lineno_2=$LINENO
-+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-+ test "x$as_lineno_1" != "x$as_lineno_2" &&
-+ test "x$as_lineno_3" = "x$as_lineno_2" || {
-+ # Find who we are. Look in the path if we contain no path at all
-+ # relative or not.
-+ case $0 in
-+ *[\\/]* ) as_myself=$0 ;;
-+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-+done
-+
-+ ;;
-+ esac
-+ # We did not find ourselves, most probably we were run as `sh COMMAND'
-+ # in which case we are not to be found in the path.
-+ if test "x$as_myself" = x; then
-+ as_myself=$0
-+ fi
-+ if test ! -f "$as_myself"; then
-+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
-+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi
-+ case $CONFIG_SHELL in
-+ '')
-+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-+do
-+ IFS=$as_save_IFS
-+ test -z "$as_dir" && as_dir=.
-+ for as_base in sh bash ksh sh5; do
-+ case $as_dir in
-+ /*)
-+ if ("$as_dir/$as_base" -c '
-+ as_lineno_1=$LINENO
-+ as_lineno_2=$LINENO
-+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
-+ test "x$as_lineno_1" != "x$as_lineno_2" &&
-+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
-+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
-+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
-+ CONFIG_SHELL=$as_dir/$as_base
-+ export CONFIG_SHELL
-+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
-+ fi;;
-+ esac
-+ done
-+done
-+;;
-+ esac
-+
-+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-+ # uniformly replaced by the line number. The first 'sed' inserts a
-+ # line-number line before each line; the second 'sed' does the real
-+ # work. The second script uses 'N' to pair each line-number line
-+ # with the numbered line, and appends trailing '-' during
-+ # substitution so that $LINENO is not a special case at line end.
-+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
-+ sed '=' <$as_myself |
-+ sed '
-+ N
-+ s,$,-,
-+ : loop
-+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
-+ t loop
-+ s,-$,,
-+ s,^['$as_cr_digits']*\n,,
-+ ' >$as_me.lineno &&
-+ chmod +x $as_me.lineno ||
-+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
-+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
-+ { (exit 1); exit 1; }; }
-+
-+ # Don't try to exec as it changes $[0], causing all sort of problems
-+ # (the dirname of $[0] is not the place where we might find the
-+ # original and so on. Autoconf is especially sensible to this).
-+ . ./$as_me.lineno
-+ # Exit status is that of the last command.
-+ exit
-+}
-+
-+
-+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
-+ *c*,-n*) ECHO_N= ECHO_C='
-+' ECHO_T=' ' ;;
-+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-+esac
-+
-+if expr a : '\(a\)' >/dev/null 2>&1; then
-+ as_expr=expr
-+else
-+ as_expr=false
-+fi
-+
-+rm -f conf$$ conf$$.exe conf$$.file
-+echo >conf$$.file
-+if ln -s conf$$.file conf$$ 2>/dev/null; then
-+ # We could just check for DJGPP; but this test a) works b) is more generic
-+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
-+ if test -f conf$$.exe; then
-+ # Don't use ln at all; we don't have any links
-+ as_ln_s='cp -p'
-+ else
-+ as_ln_s='ln -s'
-+ fi
-+elif ln conf$$.file conf$$ 2>/dev/null; then
-+ as_ln_s=ln
-+else
-+ as_ln_s='cp -p'
-+fi
-+rm -f conf$$ conf$$.exe conf$$.file
-+
-+if mkdir -p . 2>/dev/null; then
-+ as_mkdir_p=:
-+else
-+ test -d ./-p && rmdir ./-p
-+ as_mkdir_p=false
-+fi
-+
-+as_executable_p="test -f"
-+
-+# Sed expression to map a string onto a valid CPP name.
-+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-+
-+# Sed expression to map a string onto a valid variable name.
-+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-+
-+
-+# IFS
-+# We need space, tab and new line, in precisely that order.
-+as_nl='
-+'
-+IFS=" $as_nl"
-+
-+# CDPATH.
-+$as_unset CDPATH
-+
-+exec 6>&1
-+
-+# Open the log real soon, to keep \$[0] and so on meaningful, and to
-+# report actual input values of CONFIG_FILES etc. instead of their
-+# values after options handling. Logging --version etc. is OK.
-+exec 5>>config.log
-+{
-+ echo
-+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-+## Running $as_me. ##
-+_ASBOX
-+} >&5
-+cat >&5 <<_CSEOF
-+
-+This file was extended by $as_me, which was
-+generated by GNU Autoconf 2.59. Invocation command line was
-+
-+ CONFIG_FILES = $CONFIG_FILES
-+ CONFIG_HEADERS = $CONFIG_HEADERS
-+ CONFIG_LINKS = $CONFIG_LINKS
-+ CONFIG_COMMANDS = $CONFIG_COMMANDS
-+ $ $0 $@
-+
-+_CSEOF
-+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
-+echo >&5
-+_ACEOF
-+
-+# Files that config.status was made for.
-+if test -n "$ac_config_files"; then
-+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
-+fi
-+
-+if test -n "$ac_config_headers"; then
-+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
-+fi
-+
-+if test -n "$ac_config_links"; then
-+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
-+fi
-+
-+if test -n "$ac_config_commands"; then
-+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
-+fi
-+
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+
-+ac_cs_usage="\
-+\`$as_me' instantiates files from templates according to the
-+current configuration.
-+
-+Usage: $0 [OPTIONS] [FILE]...
-+
-+ -h, --help print this help, then exit
-+ -V, --version print version number, then exit
-+ -q, --quiet do not print progress messages
-+ -d, --debug don't remove temporary files
-+ --recheck update $as_me by reconfiguring in the same conditions
-+ --file=FILE[:TEMPLATE]
-+ instantiate the configuration file FILE
-+ --header=FILE[:TEMPLATE]
-+ instantiate the configuration header FILE
-+
-+Configuration files:
-+$config_files
-+
-+Configuration headers:
-+$config_headers
-+
-+Configuration commands:
-+$config_commands
-+
-+Report bugs to <bug-autoconf at gnu.org>."
-+_ACEOF
-+
-+cat >>$CONFIG_STATUS <<_ACEOF
-+ac_cs_version="\\
-+config.status
-+configured by $0, generated by GNU Autoconf 2.59,
-+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
-+
-+Copyright (C) 2003 Free Software Foundation, Inc.
-+This config.status script is free software; the Free Software Foundation
-+gives unlimited permission to copy, distribute and modify it."
-+srcdir=$srcdir
-+INSTALL="$INSTALL"
-+_ACEOF
-+
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+# If no file are specified by the user, then we need to provide default
-+# value. By we need to know if files were specified by the user.
-+ac_need_defaults=:
-+while test $# != 0
-+do
-+ case $1 in
-+ --*=*)
-+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
-+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
-+ ac_shift=:
-+ ;;
-+ -*)
-+ ac_option=$1
-+ ac_optarg=$2
-+ ac_shift=shift
-+ ;;
-+ *) # This is not an option, so the user has probably given explicit
-+ # arguments.
-+ ac_option=$1
-+ ac_need_defaults=false;;
-+ esac
-+
-+ case $ac_option in
-+ # Handling of the options.
-+_ACEOF
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-+ ac_cs_recheck=: ;;
-+ --version | --vers* | -V )
-+ echo "$ac_cs_version"; exit 0 ;;
-+ --he | --h)
-+ # Conflict between --help and --header
-+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
-+Try \`$0 --help' for more information." >&5
-+echo "$as_me: error: ambiguous option: $1
-+Try \`$0 --help' for more information." >&2;}
-+ { (exit 1); exit 1; }; };;
-+ --help | --hel | -h )
-+ echo "$ac_cs_usage"; exit 0 ;;
-+ --debug | --d* | -d )
-+ debug=: ;;
-+ --file | --fil | --fi | --f )
-+ $ac_shift
-+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-+ ac_need_defaults=false;;
-+ --header | --heade | --head | --hea )
-+ $ac_shift
-+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-+ ac_need_defaults=false;;
-+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
-+ ac_cs_silent=: ;;
-+
-+ # This is an error.
-+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
-+Try \`$0 --help' for more information." >&5
-+echo "$as_me: error: unrecognized option: $1
-+Try \`$0 --help' for more information." >&2;}
-+ { (exit 1); exit 1; }; } ;;
-+
-+ *) ac_config_targets="$ac_config_targets $1" ;;
-+
-+ esac
-+ shift
-+done
-+
-+ac_configure_extra_args=
-+
-+if $ac_cs_silent; then
-+ exec 6>/dev/null
-+ ac_configure_extra_args="$ac_configure_extra_args --silent"
-+fi
-+
-+_ACEOF
-+cat >>$CONFIG_STATUS <<_ACEOF
-+if \$ac_cs_recheck; then
-+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-+fi
-+
-+_ACEOF
-+
-+cat >>$CONFIG_STATUS <<_ACEOF
-+#
-+# INIT-COMMANDS section.
-+#
-+
-+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-+
-+
-+_ACEOF
-+
-+
-+
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+for ac_config_target in $ac_config_targets
-+do
-+ case "$ac_config_target" in
-+ # Handling of arguments.
-+ "Doxyfile" ) CONFIG_FILES="$CONFIG_FILES Doxyfile" ;;
-+ "dbus/dbus-arch-deps.h" ) CONFIG_FILES="$CONFIG_FILES dbus/dbus-arch-deps.h" ;;
-+ "bus/system.conf" ) CONFIG_FILES="$CONFIG_FILES bus/system.conf" ;;
-+ "bus/session.conf" ) CONFIG_FILES="$CONFIG_FILES bus/session.conf" ;;
-+ "bus/messagebus" ) CONFIG_FILES="$CONFIG_FILES bus/messagebus" ;;
-+ "bus/rc.messagebus" ) CONFIG_FILES="$CONFIG_FILES bus/rc.messagebus" ;;
-+ "bus/dbus-daemon.1" ) CONFIG_FILES="$CONFIG_FILES bus/dbus-daemon.1" ;;
-+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-+ "dbus/Makefile" ) CONFIG_FILES="$CONFIG_FILES dbus/Makefile" ;;
-+ "glib/Makefile" ) CONFIG_FILES="$CONFIG_FILES glib/Makefile" ;;
-+ "glib/examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES glib/examples/Makefile" ;;
-+ "glib/examples/statemachine/Makefile" ) CONFIG_FILES="$CONFIG_FILES glib/examples/statemachine/Makefile" ;;
-+ "python/Makefile" ) CONFIG_FILES="$CONFIG_FILES python/Makefile" ;;
-+ "python/examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES python/examples/Makefile" ;;
-+ "qt/Makefile" ) CONFIG_FILES="$CONFIG_FILES qt/Makefile" ;;
-+ "qt3/Makefile" ) CONFIG_FILES="$CONFIG_FILES qt3/Makefile" ;;
-+ "gcj/Makefile" ) CONFIG_FILES="$CONFIG_FILES gcj/Makefile" ;;
-+ "gcj/org/Makefile" ) CONFIG_FILES="$CONFIG_FILES gcj/org/Makefile" ;;
-+ "gcj/org/freedesktop/Makefile" ) CONFIG_FILES="$CONFIG_FILES gcj/org/freedesktop/Makefile" ;;
-+ "gcj/org/freedesktop/dbus/Makefile" ) CONFIG_FILES="$CONFIG_FILES gcj/org/freedesktop/dbus/Makefile" ;;
-+ "mono/Makefile" ) CONFIG_FILES="$CONFIG_FILES mono/Makefile" ;;
-+ "mono/AssemblyInfo.cs" ) CONFIG_FILES="$CONFIG_FILES mono/AssemblyInfo.cs" ;;
-+ "mono/dbus-sharp.dll.config" ) CONFIG_FILES="$CONFIG_FILES mono/dbus-sharp.dll.config" ;;
-+ "mono/example/Makefile" ) CONFIG_FILES="$CONFIG_FILES mono/example/Makefile" ;;
-+ "mono/doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES mono/doc/Makefile" ;;
-+ "bus/Makefile" ) CONFIG_FILES="$CONFIG_FILES bus/Makefile" ;;
-+ "tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
-+ "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
-+ "test/glib/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/glib/Makefile" ;;
-+ "test/python/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/python/Makefile" ;;
-+ "test/qt/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/qt/Makefile" ;;
-+ "test/name-test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/name-test/Makefile" ;;
-+ "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
-+ "dbus-1.pc" ) CONFIG_FILES="$CONFIG_FILES dbus-1.pc" ;;
-+ "dbus-glib-1.pc" ) CONFIG_FILES="$CONFIG_FILES dbus-glib-1.pc" ;;
-+ "dbus-sharp.pc" ) CONFIG_FILES="$CONFIG_FILES dbus-sharp.pc" ;;
-+ "test/data/valid-config-files/debug-allow-all.conf" ) CONFIG_FILES="$CONFIG_FILES test/data/valid-config-files/debug-allow-all.conf" ;;
-+ "test/data/valid-config-files/debug-allow-all-sha1.conf" ) CONFIG_FILES="$CONFIG_FILES test/data/valid-config-files/debug-allow-all-sha1.conf" ;;
-+ "test/data/valid-service-files/debug-echo.service" ) CONFIG_FILES="$CONFIG_FILES test/data/valid-service-files/debug-echo.service" ;;
-+ "test/data/valid-service-files/debug-segfault.service" ) CONFIG_FILES="$CONFIG_FILES test/data/valid-service-files/debug-segfault.service" ;;
-+ "test/data/valid-service-files/debug-glib.service" ) CONFIG_FILES="$CONFIG_FILES test/data/valid-service-files/debug-glib.service" ;;
-+ "test/data/valid-service-files/debug-shell-echo-success.service" ) CONFIG_FILES="$CONFIG_FILES test/data/valid-service-files/debug-shell-echo-success.service" ;;
-+ "test/data/valid-service-files/debug-shell-echo-fail.service" ) CONFIG_FILES="$CONFIG_FILES test/data/valid-service-files/debug-shell-echo-fail.service" ;;
-+ "test/data/valid-service-files/debug-python.service" ) CONFIG_FILES="$CONFIG_FILES test/data/valid-service-files/debug-python.service" ;;
-+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-+ "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
-+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-+ { (exit 1); exit 1; }; };;
-+ esac
-+done
-+
-+# If the user did not use the arguments to specify the items to instantiate,
-+# then the envvar interface is used. Set only those that are not.
-+# We use the long form for the default assignment because of an extremely
-+# bizarre bug on SunOS 4.1.3.
-+if $ac_need_defaults; then
-+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-+fi
-+
-+# Have a temporary directory for convenience. Make it in the build tree
-+# simply because there is no reason to put it here, and in addition,
-+# creating and moving files from /tmp can sometimes cause problems.
-+# Create a temporary directory, and hook for its removal unless debugging.
-+$debug ||
-+{
-+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
-+ trap '{ (exit 1); exit 1; }' 1 2 13 15
-+}
-+
-+# Create a (secure) tmp directory for tmp files.
-+
-+{
-+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
-+ test -n "$tmp" && test -d "$tmp"
-+} ||
-+{
-+ tmp=./confstat$$-$RANDOM
-+ (umask 077 && mkdir $tmp)
-+} ||
-+{
-+ echo "$me: cannot create a temporary directory in ." >&2
-+ { (exit 1); exit 1; }
-+}
-+
-+_ACEOF
-+
-+cat >>$CONFIG_STATUS <<_ACEOF
-+
-+#
-+# CONFIG_FILES section.
-+#
-+
-+# No need to generate the scripts if there are no CONFIG_FILES.
-+# This happens for instance when ./config.status config.h
-+if test -n "\$CONFIG_FILES"; then
-+ # Protect against being on the right side of a sed subst in config.status.
-+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
-+s, at SHELL@,$SHELL,;t t
-+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
-+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
-+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
-+s, at exec_prefix@,$exec_prefix,;t t
-+s, at prefix@,$prefix,;t t
-+s, at program_transform_name@,$program_transform_name,;t t
-+s, at bindir@,$bindir,;t t
-+s, at sbindir@,$sbindir,;t t
-+s, at libexecdir@,$libexecdir,;t t
-+s, at datadir@,$datadir,;t t
-+s, at sysconfdir@,$sysconfdir,;t t
-+s, at sharedstatedir@,$sharedstatedir,;t t
-+s, at localstatedir@,$localstatedir,;t t
-+s, at libdir@,$libdir,;t t
-+s, at includedir@,$includedir,;t t
-+s, at oldincludedir@,$oldincludedir,;t t
-+s, at infodir@,$infodir,;t t
-+s, at mandir@,$mandir,;t t
-+s, at build_alias@,$build_alias,;t t
-+s, at host_alias@,$host_alias,;t t
-+s, at target_alias@,$target_alias,;t t
-+s, at DEFS@,$DEFS,;t t
-+s, at ECHO_C@,$ECHO_C,;t t
-+s, at ECHO_N@,$ECHO_N,;t t
-+s, at ECHO_T@,$ECHO_T,;t t
-+s, at LIBS@,$LIBS,;t t
-+s, at build@,$build,;t t
-+s, at build_cpu@,$build_cpu,;t t
-+s, at build_vendor@,$build_vendor,;t t
-+s, at build_os@,$build_os,;t t
-+s, at host@,$host,;t t
-+s, at host_cpu@,$host_cpu,;t t
-+s, at host_vendor@,$host_vendor,;t t
-+s, at host_os@,$host_os,;t t
-+s, at target@,$target,;t t
-+s, at target_cpu@,$target_cpu,;t t
-+s, at target_vendor@,$target_vendor,;t t
-+s, at target_os@,$target_os,;t t
-+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
-+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
-+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
-+s, at CYGPATH_W@,$CYGPATH_W,;t t
-+s, at PACKAGE@,$PACKAGE,;t t
-+s, at VERSION@,$VERSION,;t t
-+s, at ACLOCAL@,$ACLOCAL,;t t
-+s, at AUTOCONF@,$AUTOCONF,;t t
-+s, at AUTOMAKE@,$AUTOMAKE,;t t
-+s, at AUTOHEADER@,$AUTOHEADER,;t t
-+s, at MAKEINFO@,$MAKEINFO,;t t
-+s, at install_sh@,$install_sh,;t t
-+s, at STRIP@,$STRIP,;t t
-+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
-+s, at INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
-+s, at mkdir_p@,$mkdir_p,;t t
-+s, at AWK@,$AWK,;t t
-+s, at SET_MAKE@,$SET_MAKE,;t t
-+s, at am__leading_dot@,$am__leading_dot,;t t
-+s, at AMTAR@,$AMTAR,;t t
-+s, at am__tar@,$am__tar,;t t
-+s, at am__untar@,$am__untar,;t t
-+s, at GETTEXT_PACKAGE@,$GETTEXT_PACKAGE,;t t
-+s, at MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
-+s, at MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
-+s, at MAINT@,$MAINT,;t t
-+s, at LT_CURRENT@,$LT_CURRENT,;t t
-+s, at LT_REVISION@,$LT_REVISION,;t t
-+s, at LT_AGE@,$LT_AGE,;t t
-+s, at CC@,$CC,;t t
-+s, at CFLAGS@,$CFLAGS,;t t
-+s, at LDFLAGS@,$LDFLAGS,;t t
-+s, at CPPFLAGS@,$CPPFLAGS,;t t
-+s, at ac_ct_CC@,$ac_ct_CC,;t t
-+s, at EXEEXT@,$EXEEXT,;t t
-+s, at OBJEXT@,$OBJEXT,;t t
-+s, at DEPDIR@,$DEPDIR,;t t
-+s, at am__include@,$am__include,;t t
-+s, at am__quote@,$am__quote,;t t
-+s, at AMDEP_TRUE@,$AMDEP_TRUE,;t t
-+s, at AMDEP_FALSE@,$AMDEP_FALSE,;t t
-+s, at AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
-+s, at CCDEPMODE@,$CCDEPMODE,;t t
-+s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
-+s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
-+s, at CXX@,$CXX,;t t
-+s, at CXXFLAGS@,$CXXFLAGS,;t t
-+s, at ac_ct_CXX@,$ac_ct_CXX,;t t
-+s, at CXXDEPMODE@,$CXXDEPMODE,;t t
-+s, at am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
-+s, at am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
-+s, at CPP@,$CPP,;t t
-+s, at EGREP@,$EGREP,;t t
-+s, at DBUS_BUILD_TESTS_TRUE@,$DBUS_BUILD_TESTS_TRUE,;t t
-+s, at DBUS_BUILD_TESTS_FALSE@,$DBUS_BUILD_TESTS_FALSE,;t t
-+s, at GCJ@,$GCJ,;t t
-+s, at GCJFLAGS@,$GCJFLAGS,;t t
-+s, at GCJDEPMODE@,$GCJDEPMODE,;t t
-+s, at am__fastdepGCJ_TRUE@,$am__fastdepGCJ_TRUE,;t t
-+s, at am__fastdepGCJ_FALSE@,$am__fastdepGCJ_FALSE,;t t
-+s, at JAR@,$JAR,;t t
-+s, at DBUS_USE_GCJ_TRUE@,$DBUS_USE_GCJ_TRUE,;t t
-+s, at DBUS_USE_GCJ_FALSE@,$DBUS_USE_GCJ_FALSE,;t t
-+s, at LN_S@,$LN_S,;t t
-+s, at ECHO@,$ECHO,;t t
-+s, at AR@,$AR,;t t
-+s, at ac_ct_AR@,$ac_ct_AR,;t t
-+s, at RANLIB@,$RANLIB,;t t
-+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
-+s, at CXXCPP@,$CXXCPP,;t t
-+s, at F77@,$F77,;t t
-+s, at FFLAGS@,$FFLAGS,;t t
-+s, at ac_ct_F77@,$ac_ct_F77,;t t
-+s, at LIBTOOL@,$LIBTOOL,;t t
-+s, at MONO_REQUIRED_VERSION@,$MONO_REQUIRED_VERSION,;t t
-+s, at PKG_CONFIG@,$PKG_CONFIG,;t t
-+s, at MONO_DEPENDENCY_CFLAGS@,$MONO_DEPENDENCY_CFLAGS,;t t
-+s, at MONO_DEPENDENCY_LIBS@,$MONO_DEPENDENCY_LIBS,;t t
-+s, at RUNTIME@,$RUNTIME,;t t
-+s, at CSC@,$CSC,;t t
-+s, at GACUTIL@,$GACUTIL,;t t
-+s, at LIB_PREFIX@,$LIB_PREFIX,;t t
-+s, at LIB_SUFFIX@,$LIB_SUFFIX,;t t
-+s, at DBUS_USE_CSC_TRUE@,$DBUS_USE_CSC_TRUE,;t t
-+s, at DBUS_USE_CSC_FALSE@,$DBUS_USE_CSC_FALSE,;t t
-+s, at MONODOC_REQUIRED_VERSION@,$MONODOC_REQUIRED_VERSION,;t t
-+s, at MONODOC_DEPENDENCY_CFLAGS@,$MONODOC_DEPENDENCY_CFLAGS,;t t
-+s, at MONODOC_DEPENDENCY_LIBS@,$MONODOC_DEPENDENCY_LIBS,;t t
-+s, at MONODOC@,$MONODOC,;t t
-+s, at ENABLE_MONODOC_TRUE@,$ENABLE_MONODOC_TRUE,;t t
-+s, at ENABLE_MONODOC_FALSE@,$ENABLE_MONODOC_FALSE,;t t
-+s, at DBUS_GCOV_ENABLED_TRUE@,$DBUS_GCOV_ENABLED_TRUE,;t t
-+s, at DBUS_GCOV_ENABLED_FALSE@,$DBUS_GCOV_ENABLED_FALSE,;t t
-+s, at DBUS_INT64_TYPE@,$DBUS_INT64_TYPE,;t t
-+s, at DBUS_INT64_CONSTANT@,$DBUS_INT64_CONSTANT,;t t
-+s, at DBUS_UINT64_CONSTANT@,$DBUS_UINT64_CONSTANT,;t t
-+s, at DBUS_HAVE_INT64@,$DBUS_HAVE_INT64,;t t
-+s, at DBUS_INT32_TYPE@,$DBUS_INT32_TYPE,;t t
-+s, at DBUS_INT16_TYPE@,$DBUS_INT16_TYPE,;t t
-+s, at DBUS_PATH_OR_ABSTRACT@,$DBUS_PATH_OR_ABSTRACT,;t t
-+s, at USE_NLS@,$USE_NLS,;t t
-+s, at MSGFMT@,$MSGFMT,;t t
-+s, at GMSGFMT@,$GMSGFMT,;t t
-+s, at XGETTEXT@,$XGETTEXT,;t t
-+s, at CATALOGS@,$CATALOGS,;t t
-+s, at CATOBJEXT@,$CATOBJEXT,;t t
-+s, at DATADIRNAME@,$DATADIRNAME,;t t
-+s, at GMOFILES@,$GMOFILES,;t t
-+s, at INSTOBJEXT@,$INSTOBJEXT,;t t
-+s, at INTLLIBS@,$INTLLIBS,;t t
-+s, at PO_IN_DATADIR_TRUE@,$PO_IN_DATADIR_TRUE,;t t
-+s, at PO_IN_DATADIR_FALSE@,$PO_IN_DATADIR_FALSE,;t t
-+s, at POFILES@,$POFILES,;t t
-+s, at POSUB@,$POSUB,;t t
-+s, at MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
-+s, at LIBXML_CFLAGS@,$LIBXML_CFLAGS,;t t
-+s, at LIBXML_LIBS@,$LIBXML_LIBS,;t t
-+s, at DBUS_USE_EXPAT_TRUE@,$DBUS_USE_EXPAT_TRUE,;t t
-+s, at DBUS_USE_EXPAT_FALSE@,$DBUS_USE_EXPAT_FALSE,;t t
-+s, at DBUS_USE_LIBXML_TRUE@,$DBUS_USE_LIBXML_TRUE,;t t
-+s, at DBUS_USE_LIBXML_FALSE@,$DBUS_USE_LIBXML_FALSE,;t t
-+s, at HAVE_SELINUX_TRUE@,$HAVE_SELINUX_TRUE,;t t
-+s, at HAVE_SELINUX_FALSE@,$HAVE_SELINUX_FALSE,;t t
-+s, at DBUS_CLIENT_CFLAGS@,$DBUS_CLIENT_CFLAGS,;t t
-+s, at DBUS_CLIENT_LIBS@,$DBUS_CLIENT_LIBS,;t t
-+s, at DBUS_BUS_CFLAGS@,$DBUS_BUS_CFLAGS,;t t
-+s, at DBUS_BUS_LIBS@,$DBUS_BUS_LIBS,;t t
-+s, at DBUS_TEST_CFLAGS@,$DBUS_TEST_CFLAGS,;t t
-+s, at DBUS_TEST_LIBS@,$DBUS_TEST_LIBS,;t t
-+s, at DBUS_GLIB_CFLAGS@,$DBUS_GLIB_CFLAGS,;t t
-+s, at DBUS_GLIB_LIBS@,$DBUS_GLIB_LIBS,;t t
-+s, at DBUS_GLIB_THREADS_CFLAGS@,$DBUS_GLIB_THREADS_CFLAGS,;t t
-+s, at DBUS_GLIB_THREADS_LIBS@,$DBUS_GLIB_THREADS_LIBS,;t t
-+s, at HAVE_GLIB_TRUE@,$HAVE_GLIB_TRUE,;t t
-+s, at HAVE_GLIB_FALSE@,$HAVE_GLIB_FALSE,;t t
-+s, at HAVE_GLIB_THREADS_TRUE@,$HAVE_GLIB_THREADS_TRUE,;t t
-+s, at HAVE_GLIB_THREADS_FALSE@,$HAVE_GLIB_THREADS_FALSE,;t t
-+s, at GLIB_GENMARSHAL@,$GLIB_GENMARSHAL,;t t
-+s, at DBUS_GLIB_TOOL_CFLAGS@,$DBUS_GLIB_TOOL_CFLAGS,;t t
-+s, at DBUS_GLIB_TOOL_LIBS@,$DBUS_GLIB_TOOL_LIBS,;t t
-+s, at DBUS_GTK_CFLAGS@,$DBUS_GTK_CFLAGS,;t t
-+s, at DBUS_GTK_LIBS@,$DBUS_GTK_LIBS,;t t
-+s, at DBUS_GTK_THREADS_CFLAGS@,$DBUS_GTK_THREADS_CFLAGS,;t t
-+s, at DBUS_GTK_THREADS_LIBS@,$DBUS_GTK_THREADS_LIBS,;t t
-+s, at HAVE_GTK_TRUE@,$HAVE_GTK_TRUE,;t t
-+s, at HAVE_GTK_FALSE@,$HAVE_GTK_FALSE,;t t
-+s, at QT3_MOC@,$QT3_MOC,;t t
-+s, at HAVE_QT3_TRUE@,$HAVE_QT3_TRUE,;t t
-+s, at HAVE_QT3_FALSE@,$HAVE_QT3_FALSE,;t t
-+s, at DBUS_QT3_CXXFLAGS@,$DBUS_QT3_CXXFLAGS,;t t
-+s, at DBUS_QT3_LIBS@,$DBUS_QT3_LIBS,;t t
-+s, at DBUS_QT_CFLAGS@,$DBUS_QT_CFLAGS,;t t
-+s, at DBUS_QT_LIBS@,$DBUS_QT_LIBS,;t t
-+s, at QT_MOC@,$QT_MOC,;t t
-+s, at DBUS_QTESTLIB_CFLAGS@,$DBUS_QTESTLIB_CFLAGS,;t t
-+s, at DBUS_QTESTLIB_LIBS@,$DBUS_QTESTLIB_LIBS,;t t
-+s, at HAVE_QT_TRUE@,$HAVE_QT_TRUE,;t t
-+s, at HAVE_QT_FALSE@,$HAVE_QT_FALSE,;t t
-+s, at HAVE_QTESTLIB_TRUE@,$HAVE_QTESTLIB_TRUE,;t t
-+s, at HAVE_QTESTLIB_FALSE@,$HAVE_QTESTLIB_FALSE,;t t
-+s, at X_CFLAGS@,$X_CFLAGS,;t t
-+s, at X_PRE_LIBS@,$X_PRE_LIBS,;t t
-+s, at X_LIBS@,$X_LIBS,;t t
-+s, at X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
-+s, at DBUS_X_CFLAGS@,$DBUS_X_CFLAGS,;t t
-+s, at DBUS_X_LIBS@,$DBUS_X_LIBS,;t t
-+s, at DOXYGEN@,$DOXYGEN,;t t
-+s, at DBUS_DOXYGEN_DOCS_ENABLED_TRUE@,$DBUS_DOXYGEN_DOCS_ENABLED_TRUE,;t t
-+s, at DBUS_DOXYGEN_DOCS_ENABLED_FALSE@,$DBUS_DOXYGEN_DOCS_ENABLED_FALSE,;t t
-+s, at XMLTO@,$XMLTO,;t t
-+s, at DBUS_XML_DOCS_ENABLED_TRUE@,$DBUS_XML_DOCS_ENABLED_TRUE,;t t
-+s, at DBUS_XML_DOCS_ENABLED_FALSE@,$DBUS_XML_DOCS_ENABLED_FALSE,;t t
-+s, at EXPANDED_LOCALSTATEDIR@,$EXPANDED_LOCALSTATEDIR,;t t
-+s, at EXPANDED_SYSCONFDIR@,$EXPANDED_SYSCONFDIR,;t t
-+s, at EXPANDED_BINDIR@,$EXPANDED_BINDIR,;t t
-+s, at EXPANDED_LIBDIR@,$EXPANDED_LIBDIR,;t t
-+s, at EXPANDED_DATADIR@,$EXPANDED_DATADIR,;t t
-+s, at DBUS_INIT_SCRIPTS_RED_HAT_TRUE@,$DBUS_INIT_SCRIPTS_RED_HAT_TRUE,;t t
-+s, at DBUS_INIT_SCRIPTS_RED_HAT_FALSE@,$DBUS_INIT_SCRIPTS_RED_HAT_FALSE,;t t
-+s, at DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@,$DBUS_INIT_SCRIPTS_SLACKWARE_TRUE,;t t
-+s, at DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@,$DBUS_INIT_SCRIPTS_SLACKWARE_FALSE,;t t
-+s, at DBUS_SYSTEM_SOCKET@,$DBUS_SYSTEM_SOCKET,;t t
-+s, at DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@,$DBUS_SYSTEM_BUS_DEFAULT_ADDRESS,;t t
-+s, at DBUS_SYSTEM_PID_FILE@,$DBUS_SYSTEM_PID_FILE,;t t
-+s, at DBUS_CONSOLE_AUTH_DIR@,$DBUS_CONSOLE_AUTH_DIR,;t t
-+s, at DBUS_USER@,$DBUS_USER,;t t
-+s, at TEST_SERVICE_DIR@,$TEST_SERVICE_DIR,;t t
-+s, at TEST_SERVICE_BINARY@,$TEST_SERVICE_BINARY,;t t
-+s, at TEST_SHELL_SERVICE_BINARY@,$TEST_SHELL_SERVICE_BINARY,;t t
-+s, at TEST_GLIB_SERVICE_BINARY@,$TEST_GLIB_SERVICE_BINARY,;t t
-+s, at TEST_PYTHON_SERVICE_BINARY@,$TEST_PYTHON_SERVICE_BINARY,;t t
-+s, at TEST_EXIT_BINARY@,$TEST_EXIT_BINARY,;t t
-+s, at TEST_SEGFAULT_BINARY@,$TEST_SEGFAULT_BINARY,;t t
-+s, at TEST_SLEEP_FOREVER_BINARY@,$TEST_SLEEP_FOREVER_BINARY,;t t
-+s, at ABSOLUTE_TOP_BUILDDIR@,$ABSOLUTE_TOP_BUILDDIR,;t t
-+s, at TEST_SOCKET_DIR@,$TEST_SOCKET_DIR,;t t
-+s, at DBUS_SESSION_SOCKET_DIR@,$DBUS_SESSION_SOCKET_DIR,;t t
-+s, at PYTHON@,$PYTHON,;t t
-+s, at PYTHON_VERSION@,$PYTHON_VERSION,;t t
-+s, at PYTHON_PREFIX@,$PYTHON_PREFIX,;t t
-+s, at PYTHON_EXEC_PREFIX@,$PYTHON_EXEC_PREFIX,;t t
-+s, at PYTHON_PLATFORM@,$PYTHON_PLATFORM,;t t
-+s, at pythondir@,$pythondir,;t t
-+s, at pkgpythondir@,$pkgpythondir,;t t
-+s, at pyexecdir@,$pyexecdir,;t t
-+s, at pkgpyexecdir@,$pkgpyexecdir,;t t
-+s, at PYREX@,$PYREX,;t t
-+s, at PYTHON_INCLUDES@,$PYTHON_INCLUDES,;t t
-+s, at HAVE_PYTHON_TRUE@,$HAVE_PYTHON_TRUE,;t t
-+s, at HAVE_PYTHON_FALSE@,$HAVE_PYTHON_FALSE,;t t
-+s, at LIBOBJS@,$LIBOBJS,;t t
-+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
-+CEOF
-+
-+_ACEOF
-+
-+ cat >>$CONFIG_STATUS <<\_ACEOF
-+ # Split the substitutions into bite-sized pieces for seds with
-+ # small command number limits, like on Digital OSF/1 and HP-UX.
-+ ac_max_sed_lines=48
-+ ac_sed_frag=1 # Number of current file.
-+ ac_beg=1 # First line for current file.
-+ ac_end=$ac_max_sed_lines # Line after last line for current file.
-+ ac_more_lines=:
-+ ac_sed_cmds=
-+ while $ac_more_lines; do
-+ if test $ac_beg -gt 1; then
-+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-+ else
-+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
-+ fi
-+ if test ! -s $tmp/subs.frag; then
-+ ac_more_lines=false
-+ else
-+ # The purpose of the label and of the branching condition is to
-+ # speed up the sed processing (if there are no `@' at all, there
-+ # is no need to browse any of the substitutions).
-+ # These are the two extra sed commands mentioned above.
-+ (echo ':t
-+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-+ if test -z "$ac_sed_cmds"; then
-+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-+ else
-+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
-+ fi
-+ ac_sed_frag=`expr $ac_sed_frag + 1`
-+ ac_beg=$ac_end
-+ ac_end=`expr $ac_end + $ac_max_sed_lines`
-+ fi
-+ done
-+ if test -z "$ac_sed_cmds"; then
-+ ac_sed_cmds=cat
-+ fi
-+fi # test -n "$CONFIG_FILES"
-+
-+_ACEOF
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
-+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-+ case $ac_file in
-+ - | *:- | *:-:* ) # input from stdin
-+ cat >$tmp/stdin
-+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-+ * ) ac_file_in=$ac_file.in ;;
-+ esac
-+
-+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
-+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$ac_file" : 'X\(//\)[^/]' \| \
-+ X"$ac_file" : 'X\(//\)$' \| \
-+ X"$ac_file" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$ac_file" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ { if $as_mkdir_p; then
-+ mkdir -p "$ac_dir"
-+ else
-+ as_dir="$ac_dir"
-+ as_dirs=
-+ while test ! -d "$as_dir"; do
-+ as_dirs="$as_dir $as_dirs"
-+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$as_dir" : 'X\(//\)[^/]' \| \
-+ X"$as_dir" : 'X\(//\)$' \| \
-+ X"$as_dir" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$as_dir" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ done
-+ test ! -n "$as_dirs" || mkdir $as_dirs
-+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-+ { (exit 1); exit 1; }; }; }
-+
-+ ac_builddir=.
-+
-+if test "$ac_dir" != .; then
-+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-+ # A "../" for each directory in $ac_dir_suffix.
-+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-+else
-+ ac_dir_suffix= ac_top_builddir=
-+fi
-+
-+case $srcdir in
-+ .) # No --srcdir option. We are building in place.
-+ ac_srcdir=.
-+ if test -z "$ac_top_builddir"; then
-+ ac_top_srcdir=.
-+ else
-+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-+ fi ;;
-+ [\\/]* | ?:[\\/]* ) # Absolute path.
-+ ac_srcdir=$srcdir$ac_dir_suffix;
-+ ac_top_srcdir=$srcdir ;;
-+ *) # Relative path.
-+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
-+esac
-+
-+# Do not use `cd foo && pwd` to compute absolute paths, because
-+# the directories may not exist.
-+case `pwd` in
-+.) ac_abs_builddir="$ac_dir";;
-+*)
-+ case "$ac_dir" in
-+ .) ac_abs_builddir=`pwd`;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_top_builddir=${ac_top_builddir}.;;
-+*)
-+ case ${ac_top_builddir}. in
-+ .) ac_abs_top_builddir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_srcdir=$ac_srcdir;;
-+*)
-+ case $ac_srcdir in
-+ .) ac_abs_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_top_srcdir=$ac_top_srcdir;;
-+*)
-+ case $ac_top_srcdir in
-+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-+ esac;;
-+esac
-+
-+
-+ case $INSTALL in
-+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-+ esac
-+
-+ # Let's still pretend it is `configure' which instantiates (i.e., don't
-+ # use $as_me), people would be surprised to read:
-+ # /* config.h. Generated by config.status. */
-+ if test x"$ac_file" = x-; then
-+ configure_input=
-+ else
-+ configure_input="$ac_file. "
-+ fi
-+ configure_input=$configure_input"Generated from `echo $ac_file_in |
-+ sed 's,.*/,,'` by configure."
-+
-+ # First look for the input files in the build tree, otherwise in the
-+ # src tree.
-+ ac_file_inputs=`IFS=:
-+ for f in $ac_file_in; do
-+ case $f in
-+ -) echo $tmp/stdin ;;
-+ [\\/$]*)
-+ # Absolute (can't be DOS-style, as IFS=:)
-+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-+echo "$as_me: error: cannot find input file: $f" >&2;}
-+ { (exit 1); exit 1; }; }
-+ echo "$f";;
-+ *) # Relative
-+ if test -f "$f"; then
-+ # Build tree
-+ echo "$f"
-+ elif test -f "$srcdir/$f"; then
-+ # Source tree
-+ echo "$srcdir/$f"
-+ else
-+ # /dev/null tree
-+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-+echo "$as_me: error: cannot find input file: $f" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi;;
-+ esac
-+ done` || { (exit 1); exit 1; }
-+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
-+_ACEOF
-+cat >>$CONFIG_STATUS <<_ACEOF
-+ sed "$ac_vpsub
-+$extrasub
-+_ACEOF
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+:t
-+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-+s, at configure_input@,$configure_input,;t t
-+s, at srcdir@,$ac_srcdir,;t t
-+s, at abs_srcdir@,$ac_abs_srcdir,;t t
-+s, at top_srcdir@,$ac_top_srcdir,;t t
-+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
-+s, at builddir@,$ac_builddir,;t t
-+s, at abs_builddir@,$ac_abs_builddir,;t t
-+s, at top_builddir@,$ac_top_builddir,;t t
-+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
-+s, at INSTALL@,$ac_INSTALL,;t t
-+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-+ rm -f $tmp/stdin
-+ if test x"$ac_file" != x-; then
-+ mv $tmp/out $ac_file
-+ else
-+ cat $tmp/out
-+ rm -f $tmp/out
-+ fi
-+
-+done
-+_ACEOF
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+
-+#
-+# CONFIG_HEADER section.
-+#
-+
-+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
-+# NAME is the cpp macro being defined and VALUE is the value it is being given.
-+#
-+# ac_d sets the value in "#define NAME VALUE" lines.
-+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-+ac_dB='[ ].*$,\1#\2'
-+ac_dC=' '
-+ac_dD=',;t'
-+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-+ac_uB='$,\1#\2define\3'
-+ac_uC=' '
-+ac_uD=',;t'
-+
-+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
-+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-+ case $ac_file in
-+ - | *:- | *:-:* ) # input from stdin
-+ cat >$tmp/stdin
-+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
-+ * ) ac_file_in=$ac_file.in ;;
-+ esac
-+
-+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
-+echo "$as_me: creating $ac_file" >&6;}
-+
-+ # First look for the input files in the build tree, otherwise in the
-+ # src tree.
-+ ac_file_inputs=`IFS=:
-+ for f in $ac_file_in; do
-+ case $f in
-+ -) echo $tmp/stdin ;;
-+ [\\/$]*)
-+ # Absolute (can't be DOS-style, as IFS=:)
-+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-+echo "$as_me: error: cannot find input file: $f" >&2;}
-+ { (exit 1); exit 1; }; }
-+ # Do quote $f, to prevent DOS paths from being IFS'd.
-+ echo "$f";;
-+ *) # Relative
-+ if test -f "$f"; then
-+ # Build tree
-+ echo "$f"
-+ elif test -f "$srcdir/$f"; then
-+ # Source tree
-+ echo "$srcdir/$f"
-+ else
-+ # /dev/null tree
-+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
-+echo "$as_me: error: cannot find input file: $f" >&2;}
-+ { (exit 1); exit 1; }; }
-+ fi;;
-+ esac
-+ done` || { (exit 1); exit 1; }
-+ # Remove the trailing spaces.
-+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
-+
-+_ACEOF
-+
-+# Transform confdefs.h into two sed scripts, `conftest.defines' and
-+# `conftest.undefs', that substitutes the proper values into
-+# config.h.in to produce config.h. The first handles `#define'
-+# templates, and the second `#undef' templates.
-+# And first: Protect against being on the right side of a sed subst in
-+# config.status. Protect against being in an unquoted here document
-+# in config.status.
-+rm -f conftest.defines conftest.undefs
-+# Using a here document instead of a string reduces the quoting nightmare.
-+# Putting comments in sed scripts is not portable.
-+#
-+# `end' is used to avoid that the second main sed command (meant for
-+# 0-ary CPP macros) applies to n-ary macro definitions.
-+# See the Autoconf documentation for `clear'.
-+cat >confdef2sed.sed <<\_ACEOF
-+s/[\\&,]/\\&/g
-+s,[\\$`],\\&,g
-+t clear
-+: clear
-+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
-+t end
-+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
-+: end
-+_ACEOF
-+# If some macros were called several times there might be several times
-+# the same #defines, which is useless. Nevertheless, we may not want to
-+# sort them, since we want the *last* AC-DEFINE to be honored.
-+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
-+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
-+rm -f confdef2sed.sed
-+
-+# This sed command replaces #undef with comments. This is necessary, for
-+# example, in the case of _POSIX_SOURCE, which is predefined and required
-+# on some systems where configure will not decide to define it.
-+cat >>conftest.undefs <<\_ACEOF
-+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
-+_ACEOF
-+
-+# Break up conftest.defines because some shells have a limit on the size
-+# of here documents, and old seds have small limits too (100 cmds).
-+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
-+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
-+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
-+echo ' :' >>$CONFIG_STATUS
-+rm -f conftest.tail
-+while grep . conftest.defines >/dev/null
-+do
-+ # Write a limited-size here document to $tmp/defines.sed.
-+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
-+ # Speed up: don't consider the non `#define' lines.
-+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
-+ # Work around the forget-to-reset-the-flag bug.
-+ echo 't clr' >>$CONFIG_STATUS
-+ echo ': clr' >>$CONFIG_STATUS
-+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
-+ echo 'CEOF
-+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
-+ rm -f $tmp/in
-+ mv $tmp/out $tmp/in
-+' >>$CONFIG_STATUS
-+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
-+ rm -f conftest.defines
-+ mv conftest.tail conftest.defines
-+done
-+rm -f conftest.defines
-+echo ' fi # grep' >>$CONFIG_STATUS
-+echo >>$CONFIG_STATUS
-+
-+# Break up conftest.undefs because some shells have a limit on the size
-+# of here documents, and old seds have small limits too (100 cmds).
-+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
-+rm -f conftest.tail
-+while grep . conftest.undefs >/dev/null
-+do
-+ # Write a limited-size here document to $tmp/undefs.sed.
-+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
-+ # Speed up: don't consider the non `#undef'
-+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
-+ # Work around the forget-to-reset-the-flag bug.
-+ echo 't clr' >>$CONFIG_STATUS
-+ echo ': clr' >>$CONFIG_STATUS
-+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
-+ echo 'CEOF
-+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
-+ rm -f $tmp/in
-+ mv $tmp/out $tmp/in
-+' >>$CONFIG_STATUS
-+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
-+ rm -f conftest.undefs
-+ mv conftest.tail conftest.undefs
-+done
-+rm -f conftest.undefs
-+
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+ # Let's still pretend it is `configure' which instantiates (i.e., don't
-+ # use $as_me), people would be surprised to read:
-+ # /* config.h. Generated by config.status. */
-+ if test x"$ac_file" = x-; then
-+ echo "/* Generated by configure. */" >$tmp/config.h
-+ else
-+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
-+ fi
-+ cat $tmp/in >>$tmp/config.h
-+ rm -f $tmp/in
-+ if test x"$ac_file" != x-; then
-+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
-+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-+echo "$as_me: $ac_file is unchanged" >&6;}
-+ else
-+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
-+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$ac_file" : 'X\(//\)[^/]' \| \
-+ X"$ac_file" : 'X\(//\)$' \| \
-+ X"$ac_file" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$ac_file" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ { if $as_mkdir_p; then
-+ mkdir -p "$ac_dir"
-+ else
-+ as_dir="$ac_dir"
-+ as_dirs=
-+ while test ! -d "$as_dir"; do
-+ as_dirs="$as_dir $as_dirs"
-+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$as_dir" : 'X\(//\)[^/]' \| \
-+ X"$as_dir" : 'X\(//\)$' \| \
-+ X"$as_dir" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$as_dir" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ done
-+ test ! -n "$as_dirs" || mkdir $as_dirs
-+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-+ { (exit 1); exit 1; }; }; }
-+
-+ rm -f $ac_file
-+ mv $tmp/config.h $ac_file
-+ fi
-+ else
-+ cat $tmp/config.h
-+ rm -f $tmp/config.h
-+ fi
-+# Compute $ac_file's index in $config_headers.
-+_am_stamp_count=1
-+for _am_header in $config_headers :; do
-+ case $_am_header in
-+ $ac_file | $ac_file:* )
-+ break ;;
-+ * )
-+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-+ esac
-+done
-+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
-+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X$ac_file : 'X\(//\)[^/]' \| \
-+ X$ac_file : 'X\(//\)$' \| \
-+ X$ac_file : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X$ac_file |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`/stamp-h$_am_stamp_count
-+done
-+_ACEOF
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+
-+#
-+# CONFIG_COMMANDS section.
-+#
-+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
-+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
-+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
-+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
-+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$ac_dest" : 'X\(//\)[^/]' \| \
-+ X"$ac_dest" : 'X\(//\)$' \| \
-+ X"$ac_dest" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$ac_dest" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ { if $as_mkdir_p; then
-+ mkdir -p "$ac_dir"
-+ else
-+ as_dir="$ac_dir"
-+ as_dirs=
-+ while test ! -d "$as_dir"; do
-+ as_dirs="$as_dir $as_dirs"
-+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$as_dir" : 'X\(//\)[^/]' \| \
-+ X"$as_dir" : 'X\(//\)$' \| \
-+ X"$as_dir" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$as_dir" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ done
-+ test ! -n "$as_dirs" || mkdir $as_dirs
-+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
-+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
-+ { (exit 1); exit 1; }; }; }
-+
-+ ac_builddir=.
-+
-+if test "$ac_dir" != .; then
-+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-+ # A "../" for each directory in $ac_dir_suffix.
-+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
-+else
-+ ac_dir_suffix= ac_top_builddir=
-+fi
-+
-+case $srcdir in
-+ .) # No --srcdir option. We are building in place.
-+ ac_srcdir=.
-+ if test -z "$ac_top_builddir"; then
-+ ac_top_srcdir=.
-+ else
-+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
-+ fi ;;
-+ [\\/]* | ?:[\\/]* ) # Absolute path.
-+ ac_srcdir=$srcdir$ac_dir_suffix;
-+ ac_top_srcdir=$srcdir ;;
-+ *) # Relative path.
-+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
-+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
-+esac
-+
-+# Do not use `cd foo && pwd` to compute absolute paths, because
-+# the directories may not exist.
-+case `pwd` in
-+.) ac_abs_builddir="$ac_dir";;
-+*)
-+ case "$ac_dir" in
-+ .) ac_abs_builddir=`pwd`;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
-+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_top_builddir=${ac_top_builddir}.;;
-+*)
-+ case ${ac_top_builddir}. in
-+ .) ac_abs_top_builddir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
-+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_srcdir=$ac_srcdir;;
-+*)
-+ case $ac_srcdir in
-+ .) ac_abs_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
-+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
-+ esac;;
-+esac
-+case $ac_abs_builddir in
-+.) ac_abs_top_srcdir=$ac_top_srcdir;;
-+*)
-+ case $ac_top_srcdir in
-+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
-+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
-+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
-+ esac;;
-+esac
-+
-+
-+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
-+echo "$as_me: executing $ac_dest commands" >&6;}
-+ case $ac_dest in
-+ depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
-+ # Strip MF so we end up with the name of the file.
-+ mf=`echo "$mf" | sed -e 's/:.*$//'`
-+ # Check whether this is an Automake generated Makefile or not.
-+ # We used to match only the files named `Makefile.in', but
-+ # some people rename them; so instead we look at the file content.
-+ # Grep'ing the first line is not enough: some people post-process
-+ # each Makefile.in and add a new line on top of each file to say so.
-+ # So let's grep whole file.
-+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-+ dirpart=`(dirname "$mf") 2>/dev/null ||
-+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$mf" : 'X\(//\)[^/]' \| \
-+ X"$mf" : 'X\(//\)$' \| \
-+ X"$mf" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$mf" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ else
-+ continue
-+ fi
-+ # Extract the definition of DEPDIR, am__include, and am__quote
-+ # from the Makefile without running `make'.
-+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-+ test -z "$DEPDIR" && continue
-+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
-+ test -z "am__include" && continue
-+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-+ # When using ansi2knr, U may be empty or an underscore; expand it
-+ U=`sed -n 's/^U = //p' < "$mf"`
-+ # Find all dependency output files, they are included files with
-+ # $(DEPDIR) in their names. We invoke sed twice because it is the
-+ # simplest approach to changing $(DEPDIR) to its actual value in the
-+ # expansion.
-+ for file in `sed -n "
-+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-+ # Make sure the directory exists.
-+ test -f "$dirpart/$file" && continue
-+ fdir=`(dirname "$file") 2>/dev/null ||
-+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$file" : 'X\(//\)[^/]' \| \
-+ X"$file" : 'X\(//\)$' \| \
-+ X"$file" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$file" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ { if $as_mkdir_p; then
-+ mkdir -p $dirpart/$fdir
-+ else
-+ as_dir=$dirpart/$fdir
-+ as_dirs=
-+ while test ! -d "$as_dir"; do
-+ as_dirs="$as_dir $as_dirs"
-+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
-+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-+ X"$as_dir" : 'X\(//\)[^/]' \| \
-+ X"$as_dir" : 'X\(//\)$' \| \
-+ X"$as_dir" : 'X\(/\)' \| \
-+ . : '\(.\)' 2>/dev/null ||
-+echo X"$as_dir" |
-+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
-+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
-+ /^X\(\/\/\)$/{ s//\1/; q; }
-+ /^X\(\/\).*/{ s//\1/; q; }
-+ s/.*/./; q'`
-+ done
-+ test ! -n "$as_dirs" || mkdir $as_dirs
-+ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
-+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
-+ { (exit 1); exit 1; }; }; }
-+
-+ # echo "creating $dirpart/$file"
-+ echo '# dummy' > "$dirpart/$file"
-+ done
-+done
-+ ;;
-+ default-1 ) case "$CONFIG_FILES" in *po/Makefile.in*)
-+ sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
-+ esac ;;
-+ esac
-+done
-+_ACEOF
-+
-+cat >>$CONFIG_STATUS <<\_ACEOF
-+
-+{ (exit 0); exit 0; }
-+_ACEOF
-+chmod +x $CONFIG_STATUS
-+ac_clean_files=$ac_clean_files_save
-+
-+
-+# configure is writing to config.log, and then calls config.status.
-+# config.status does its own redirection, appending to config.log.
-+# Unfortunately, on DOS this fails, as config.log is still kept open
-+# by configure, so config.status won't be able to write to it; its
-+# output is simply discarded. So we exec the FD to /dev/null,
-+# effectively closing config.log, so it can be properly (re)opened and
-+# appended to by config.status. When coming back to configure, we
-+# need to make the FD available again.
-+if test "$no_create" != yes; then
-+ ac_cs_success=:
-+ ac_config_status_args=
-+ test "$silent" = yes &&
-+ ac_config_status_args="$ac_config_status_args --quiet"
-+ exec 5>/dev/null
-+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-+ exec 5>>config.log
-+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-+ # would make configure fail if this is the last instruction.
-+ $ac_cs_success || { (exit 1); exit 1; }
-+fi
-+
-+
-+### FIXME it's bizarre that have_qt and have_glib are used
-+### instead of enable_ - should fix things so that enable
-+### is always whether it's enabled, and have is always whether
-+### it was found.
-+
-+echo "
-+ D-BUS $VERSION
-+ ==============
-+
-+ prefix: ${prefix}
-+ exec_prefix: ${exec_prefix}
-+ libdir: ${EXPANDED_LIBDIR}
-+ bindir: ${EXPANDED_BINDIR}
-+ sysconfdir: ${EXPANDED_SYSCONFDIR}
-+ localstatedir: ${EXPANDED_LOCALSTATEDIR}
-+ datadir: ${EXPANDED_DATADIR}
-+ source code location: ${srcdir}
-+ compiler: ${CC}
-+ cflags: ${CFLAGS}
-+ cppflags: ${CPPFLAGS}
-+ cxxflags: ${CXXFLAGS}
-+ 64-bit int: ${DBUS_INT64_TYPE}
-+ 32-bit int: ${DBUS_INT32_TYPE}
-+ 16-bit int: ${DBUS_INT16_TYPE}
-+ Doxygen: ${DOXYGEN}
-+ xmlto: ${XMLTO}"
-+
-+if test x$enable_gcj = xyes ; then
-+echo \
-+" gcj: ${GCJ}
-+ gcjflags: ${GCJFLAGS}
-+ jar: ${JAR}"
-+else
-+echo \
-+" gcj: (not enabled)"
-+fi
-+
-+if test x$enable_mono = xyes ; then
-+echo \
-+" csc: ${CSC}
-+"
-+else
-+echo \
-+" csc: (not enabled)
-+"
-+fi
-+
-+echo "
-+ Maintainer mode: ${USE_MAINTAINER_MODE}
-+ gcc coverage profiling: ${enable_gcov}
-+ Building unit tests: ${enable_tests}
-+ Building verbose mode: ${enable_verbose_mode}
-+ Building assertions: ${enable_asserts}
-+ Building checks: ${enable_checks}
-+ Building Qt4 bindings: ${have_qt}
-+ Building Qt3 bindings: ${have_qt3}
-+ Building GLib bindings: ${have_glib}
-+ Building Python bindings: ${have_python}
-+ Building SELinux support: ${have_selinux}
-+ Building dnotify support: ${have_dnotify}
-+ Building Mono bindings: ${enable_mono}
-+ Building Mono docs: ${enable_mono_docs}
-+ Building GTK+ tools: ${have_gtk}
-+ Building X11 code: ${enable_x11}
-+ Building Doxygen docs: ${enable_doxygen_docs}
-+ Building XML docs: ${enable_xml_docs}
-+ Gettext libs (empty OK): ${INTLLIBS}
-+ Using XML parser: ${with_xml}
-+ Init scripts style: ${with_init_scripts}
-+ Abstract socket names: ${have_abstract_sockets}
-+ System bus socket: ${DBUS_SYSTEM_SOCKET}
-+ System bus address: ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
-+ System bus PID file: ${DBUS_SYSTEM_PID_FILE}
-+ Session bus socket dir: ${DBUS_SESSION_SOCKET_DIR}
-+ Console auth dir: ${DBUS_CONSOLE_AUTH_DIR}
-+ System bus user: ${DBUS_USER}
-+ 'make check' socket dir: ${TEST_SOCKET_DIR}
-+"
-+
-+if test x$enable_tests = xyes; then
-+ echo "NOTE: building with unit tests increases the size of the installed library and renders it insecure."
-+fi
-+if test x$enable_tests = xyes -a x$enable_asserts = xno; then
-+ echo "NOTE: building with unit tests but without assertions means tests may not properly report failures (this configuration is only useful when doing something like profiling the tests)"
-+fi
-+if test x$enable_gcov = xyes; then
-+ echo "NOTE: building with coverage profiling is definitely for developers only."
-+fi
-+if test x$enable_verbose_mode = xyes; then
-+ echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance."
-+fi
-+if test x$enable_asserts = xyes; then
-+ echo "NOTE: building with assertions increases library size and decreases performance."
-+fi
-+if test x$enable_checks = xno; then
-+ echo "NOTE: building without checks for arguments passed to public API makes it harder to debug apps using D-BUS, but will slightly decrease D-BUS library size and _very_ slightly improve performance."
-+fi
-diff -Naur dbus-0.61.orig/configure.in dbus-0.61/configure.in
---- dbus-0.61.orig/configure.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/configure.in 2006-02-24 17:36:29.000000000 +0100
-@@ -0,0 +1,1506 @@
-+dnl -*- mode: m4 -*-
-+AC_PREREQ(2.52)
-+
-+AC_INIT(dbus/dbus.h)
-+
-+AC_CANONICAL_TARGET
-+
-+AM_INIT_AUTOMAKE(dbus, 0.61)
-+
-+AM_CONFIG_HEADER(config.h)
-+
-+# Honor aclocal flags
-+ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
-+
-+GETTEXT_PACKAGE=dbus-1
-+AC_SUBST(GETTEXT_PACKAGE)
-+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[The name of the gettext domain])
-+
-+ ## must come before we use the $USE_MAINTAINER_MODE variable later
-+AM_MAINTAINER_MODE
-+
-+# libtool versioning - this applies to libdbus
-+#
-+# See http://sources.redhat.com/autobook/autobook/autobook_91.html#SEC91 for details
-+#
-+
-+## increment if the interface has additions, changes, removals.
-+LT_CURRENT=2
-+
-+## increment any time the source changes; set to
-+## 0 if you increment CURRENT
-+LT_REVISION=0
-+
-+## increment if any interfaces have been added; set to 0
-+## if any interfaces have been changed or removed. removal has
-+## precedence over adding, so set to 0 if both happened.
-+LT_AGE=0
-+
-+AC_SUBST(LT_CURRENT)
-+AC_SUBST(LT_REVISION)
-+AC_SUBST(LT_AGE)
-+
-+
-+AC_PROG_CC
-+AC_PROG_CXX
-+AC_ISC_POSIX
-+AC_HEADER_STDC
-+
-+AC_ARG_ENABLE(qt, AS_HELP_STRING([--enable-qt],[enable Qt-friendly client library]),enable_qt=$enableval,enable_qt=auto)
-+AC_ARG_ENABLE(qt-debug, AS_HELP_STRING([--enable-qt-debug],[enable Qt-friendly client library, linked to debug Qt libraries]),enable_qt_debug=$enableval,enable_qt_debug=no)
-+AC_ARG_WITH(qt_moc, AS_HELP_STRING([--with-qt-moc=<path>],[moc for Qt]))
-+AC_ARG_ENABLE(qt3, AS_HELP_STRING([--enable-qt3],[enable Qt3-friendly client library]),enable_qt3=$enableval,enable_qt3=auto)
-+AC_ARG_WITH(qt3_moc, AS_HELP_STRING([--with-qt3-moc=<path>],[moc for Qt3]))
-+AC_ARG_ENABLE(glib, AS_HELP_STRING([--enable-glib],[enable GLib-friendly client library]),enable_glib=$enableval,enable_glib=auto)
-+AC_ARG_ENABLE(gtk, AS_HELP_STRING([--enable-gtk],[enable GTK-requiring executables]),enable_gtk=$enableval,enable_gtk=auto)
-+AC_ARG_ENABLE(tests, AS_HELP_STRING([--enable-tests],[enable unit test code]),enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE)
-+AC_ARG_ENABLE(ansi, AS_HELP_STRING([--enable-ansi],[enable -ansi -pedantic gcc flags]),enable_ansi=$enableval,enable_ansi=no)
-+AC_ARG_ENABLE(verbose-mode, AS_HELP_STRING([--enable-verbose-mode],[support verbose debug mode]),enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE)
-+AC_ARG_ENABLE(asserts, AS_HELP_STRING([--enable-asserts],[include assertion checks]),enable_asserts=$enableval,enable_asserts=$USE_MAINTAINER_MODE)
-+AC_ARG_ENABLE(checks, AS_HELP_STRING([--enable-checks],[include sanity checks on public API]),enable_checks=$enableval,enable_checks=yes)
-+AC_ARG_ENABLE(xml-docs, AS_HELP_STRING([--enable-xml-docs],[build XML documentation (requires xmlto)]),enable_xml_docs=$enableval,enable_xml_docs=auto)
-+AC_ARG_ENABLE(doxygen-docs, AS_HELP_STRING([--enable-doxygen-docs],[build DOXYGEN documentation (requires Doxygen)]),enable_doxygen_docs=$enableval,enable_doxygen_docs=auto)
-+AC_ARG_ENABLE(gcov, AS_HELP_STRING([--enable-gcov],[compile with coverage profiling instrumentation (gcc only)]),enable_gcov=$enableval,enable_gcov=no)
-+AC_ARG_ENABLE(abstract-sockets, AS_HELP_STRING([--enable-abstract-sockets],[use abstract socket namespace (linux only)]),enable_abstract_sockets=$enableval,enable_abstract_sockets=auto)
-+AC_ARG_ENABLE(gcj, AS_HELP_STRING([--enable-gcj],[build gcj bindings]),enable_gcj=$enableval,enable_gcj=no)
-+AC_ARG_ENABLE(mono, AS_HELP_STRING([--enable-mono],[build mono bindings]),enable_mono=$enableval,enable_mono=no)
-+AC_ARG_ENABLE(mono_docs, AS_HELP_STRING([--enable-mono-docs],[build mono docs]),enable_mono_docs=$enableval,enable_mono_docs=no)
-+AC_ARG_ENABLE(python, AS_HELP_STRING([--enable-python],[build python bindings]),enable_python=$enableval,enable_python=auto)
-+AC_ARG_ENABLE(selinux, AS_HELP_STRING([--enable-selinux],[build with SELinux support]),enable_selinux=$enableval,enable_selinux=auto)
-+AC_ARG_ENABLE(dnotify, AS_HELP_STRING([--enable-dnotify],[build with dnotify support (linux only)]),enable_dnotify=$enableval,enable_dnotify=auto)
-+
-+AC_ARG_WITH(xml, AS_HELP_STRING([--with-xml=[libxml/expat]],[XML library to use]))
-+AC_ARG_WITH(init-scripts, AS_HELP_STRING([--with-init-scripts=[redhat]],[Style of init scripts to install]))
-+AC_ARG_WITH(session-socket-dir, AS_HELP_STRING([--with-session-socket-dir=[dirname]],[Where to put sockets for the per-login-session message bus]))
-+AC_ARG_WITH(test-socket-dir, AS_HELP_STRING([--with-test-socket-dir=[dirname]],[Where to put sockets for make check]))
-+AC_ARG_WITH(system-pid-file, AS_HELP_STRING([--with-system-pid-file=[pidfile]],[PID file for systemwide daemon]))
-+AC_ARG_WITH(system-socket, AS_HELP_STRING([--with-system-socket=[filename]],[UNIX domain socket for systemwide daemon]))
-+AC_ARG_WITH(console-auth-dir, AS_HELP_STRING([--with-console-auth-dir=[dirname]],[directory to check for console ownerhip]))
-+AC_ARG_WITH(dbus_user, AS_HELP_STRING([--with-dbus-user=<user>],[User for running the DBUS daemon (messagebus)]))
-+
-+
-+dnl DBUS_BUILD_TESTS controls unit tests built in to .c files
-+dnl and also some stuff in the test/ subdir
-+AM_CONDITIONAL(DBUS_BUILD_TESTS, test x$enable_tests = xyes)
-+if test x$enable_tests = xyes; then
-+ AC_DEFINE(DBUS_BUILD_TESTS,1,[Build test code])
-+fi
-+
-+if test x$enable_verbose_mode = xyes; then
-+ AC_DEFINE(DBUS_ENABLE_VERBOSE_MODE,1,[Support a verbose mode])
-+fi
-+if test x$enable_asserts = xno; then
-+ AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
-+ AC_DEFINE(G_DISABLE_ASSERT,1,[Disable GLib assertion macros])
-+fi
-+if test x$enable_checks = xno; then
-+ AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
-+ AC_DEFINE(G_DISABLE_CHECKS,1,[Disable GLib public API sanity checking])
-+fi
-+
-+#### gcc warning flags
-+
-+if test "x$GCC" = "xyes"; then
-+ changequote(,)dnl
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wall[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wall" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wchar-subscripts[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wchar-subscripts" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wmissing-declarations[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wmissing-declarations" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wmissing-prototypes[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wmissing-prototypes" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wnested-externs[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wnested-externs" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wpointer-arith[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wpointer-arith" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wcast-align[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wcast-align" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wfloat-equal[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wfloat-equal" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-Wsign-compare[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -Wsign-compare" ;;
-+ esac
-+
-+ if test "x$enable_ansi" = "xyes"; then
-+ case " $CFLAGS " in
-+ *[\ \ ]-ansi[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -ansi" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-D_POSIX_C_SOURCE*) ;;
-+ *) CFLAGS="$CFLAGS -D_POSIX_C_SOURCE=199309L" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-D_BSD_SOURCE[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -D_BSD_SOURCE" ;;
-+ esac
-+
-+ case " $CFLAGS " in
-+ *[\ \ ]-pedantic[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -pedantic" ;;
-+ esac
-+ fi
-+ if test x$enable_gcov = xyes; then
-+ case " $CFLAGS " in
-+ *[\ \ ]-fprofile-arcs[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -fprofile-arcs" ;;
-+ esac
-+ case " $CFLAGS " in
-+ *[\ \ ]-ftest-coverage[\ \ ]*) ;;
-+ *) CFLAGS="$CFLAGS -ftest-coverage" ;;
-+ esac
-+
-+ ## remove optimization
-+ CFLAGS=`echo "$CFLAGS" | sed -e 's/-O[0-9]*//g'`
-+ fi
-+ changequote([,])dnl
-+else
-+ if test x$enable_gcov = xyes; then
-+ AC_MSG_ERROR([--enable-gcov can only be used with gcc])
-+ fi
-+fi
-+
-+#### can't use AM_PROG_GCJ since it fails fatally if no gcj found
-+AC_CHECK_PROGS(GCJ, gcj, gcj)
-+if test -z "$GCJ" ; then
-+ have_gcj=no
-+else
-+ # Needs to be here so libtool wont get confused
-+ AM_PROG_GCJ
-+
-+ have_gcj=yes
-+ if test "x${GCJFLAGS-unset}" = xunset; then
-+ GCJFLAGS="-g -O2 -Wall"
-+ fi
-+ AC_SUBST(GCJFLAGS)
-+fi
-+
-+if test x$enable_gcj = xauto ; then
-+ if test x$have_gcj = xno ; then
-+ enable_gcj=no
-+ else
-+ enable_gcj=yes
-+ fi
-+fi
-+
-+if test x$enable_gcj = xyes; then
-+ if test x$have_gcj = xno ; then
-+ AC_MSG_ERROR([Building gcj explicitly required, but gcj not found])
-+ else
-+ AC_CHECK_PROGS(JAR, gcj-jar fastjar jar)
-+ fi
-+fi
-+
-+AM_CONDITIONAL(DBUS_USE_GCJ, test x$enable_gcj = xyes)
-+
-+AM_PROG_LIBTOOL
-+
-+#### Look for mono
-+MONO_REQUIRED_VERSION=0.95
-+AC_SUBST(MONO_REQUIRED_VERSION)
-+PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, have_mono=true, have_mono=false)
-+
-+if test "x$enable_mono" = "xyes"; then
-+ if test "x$have_mono" = "xfalse"; then
-+ AC_MSG_ERROR([Mono was not found])
-+ fi
-+fi
-+
-+if test "x$have_mono" = "xtrue"; then
-+ if test `uname -s` = "Darwin"; then
-+ AC_PATH_PROG(RUNTIME, mint, no)
-+ AC_PATH_PROG(CSC, mcs, no)
-+ LIB_PREFIX=
-+ LIB_SUFFIX=.dylib
-+ else
-+ AC_PATH_PROG(RUNTIME, mono, no)
-+ AC_PATH_PROG(CSC, mcs, no)
-+ LIB_PREFIX=.so
-+ LIB_SUFFIX=
-+ fi
-+else
-+ AC_PATH_PROG(CSC, csc.exe, no)
-+ RUNTIME=
-+ LIB_PREFIX=
-+ LIB_SUFFIX=.dylib
-+fi
-+
-+if test x$enable_mono = xyes; then
-+ if test x$have_mcs = xno ; then
-+ AC_MSG_ERROR([Building Mono bindings explicitly required, but mcs compiler not found])
-+ fi
-+
-+ ### Test for GACUTIL
-+ AC_PATH_PROG(GACUTIL, gacutil, no)
-+ if test "x$GACUTIL" = "xno" ; then
-+ AC_MSG_ERROR([No gacutil tool found])
-+ fi
-+
-+ AC_SUBST(GACUTIL)
-+fi
-+
-+if test x$enable_mono = xauto ; then
-+ if test x$CSC = xno ; then
-+ enable_mono=no
-+ else
-+ ### Test for GACUTIL
-+ AC_PATH_PROG(GACUTIL, gacutil, no)
-+ if test "x$GACUTIL" = "xno" ; then
-+ enable_mono=no
-+ else
-+ enable_mono=yes
-+ fi
-+ fi
-+fi
-+
-+AC_SUBST(RUNTIME)
-+AC_SUBST(CSC)
-+AC_SUBST(GACUTIL)
-+AC_SUBST(LIB_PREFIX)
-+AC_SUBST(LIB_SUFFIX)
-+
-+AM_CONDITIONAL(DBUS_USE_CSC, test x$enable_mono = xyes)
-+
-+#### Look for monodoc
-+MONODOC_REQUIRED_VERSION=0.16
-+AC_SUBST(MONODOC_REQUIRED_VERSION)
-+PKG_CHECK_MODULES(MONODOC_DEPENDENCY, monodoc >= $MONODOC_REQUIRED_VERSION, have_monodoc=yes, have_monodoc=no)
-+
-+if test x$enable_mono_docs = xyes; then
-+ if test x$have_monodoc = xno ; then
-+ AC_MSG_ERROR([Building Mono docs explicitly required, but monodoc not found])
-+ else
-+ AC_PATH_PROG(MONODOC, monodoc, no)
-+ if test x$MONODOC = xno; then
-+ AC_MSG_ERROR([Building Mono docs explicitly required, but monodoc not found])
-+ fi
-+ fi
-+fi
-+
-+if test x$enable_mono_docs = xauto ; then
-+ if test x$have_monodoc = xno ; then
-+ enable_mono_docs=no
-+ MONODOC=
-+ else
-+ AC_PATH_PROG(MONODOC, monodoc, no)
-+ if test x$MONODOC = xno; then
-+ enable_mono_docs=no
-+ MONODOC=
-+ else
-+ enable_mono_docs=yes
-+ fi
-+ fi
-+fi
-+
-+AC_SUBST(MONODOC)
-+
-+AM_CONDITIONAL(ENABLE_MONODOC, test "x$enable_mono_docs" = "xyes")
-+
-+changequote(,)dnl
-+# let ourselves use our own unstable API
-+CPPFLAGS="-DDBUS_API_SUBJECT_TO_CHANGE=1 $CPPFLAGS"
-+# compress spaces in flags
-+CFLAGS=`echo "$CFLAGS" | sed -e 's/ +/ /g'`
-+CXXFLAGS=`echo "$CXXFLAGS" | sed -e 's/ +/ /g'`
-+CPPFLAGS=`echo "$CPPFLAGS" | sed -e 's/ +/ /g'`
-+changequote([,])dnl
-+
-+if test x$enable_gcov = xyes; then
-+ ## so that config.h changes when you toggle gcov support
-+ AC_DEFINE_UNQUOTED(DBUS_GCOV_ENABLED, 1, [Defined if gcov is enabled to force a rebuild due to config.h changing])
-+
-+ AC_MSG_CHECKING([for gcc 3.3 version of gcov file format])
-+ have_gcc33_gcov=no
-+ AC_RUN_IFELSE( [AC_LANG_PROGRAM( , [[ if (__GNUC__ >=3 && __GNUC_MINOR__ >= 3) exit (0); else exit (1); ]])],
-+ have_gcc33_gcov=yes)
-+ if test x$have_gcc33_gcov = xyes ; then
-+ AC_DEFINE_UNQUOTED(DBUS_HAVE_GCC33_GCOV, 1, [Defined if we have gcc 3.3 and thus the new gcov format])
-+ fi
-+ AC_MSG_RESULT($have_gcc33_gcov)
-+fi
-+AM_CONDITIONAL(DBUS_GCOV_ENABLED, test x$enable_gcov = xyes)
-+
-+#### Integer sizes
-+
-+AC_CHECK_SIZEOF(char)
-+AC_CHECK_SIZEOF(short)
-+AC_CHECK_SIZEOF(long)
-+AC_CHECK_SIZEOF(int)
-+AC_CHECK_SIZEOF(void *)
-+AC_CHECK_SIZEOF(long long)
-+AC_CHECK_SIZEOF(__int64)
-+
-+### See what our 64 bit type is called
-+AC_MSG_CHECKING([64-bit integer type])
-+
-+case 8 in
-+$ac_cv_sizeof_int)
-+ dbusint64=int
-+ dbusint64_constant='(val)'
-+ dbusuint64_constant='(val)'
-+ ;;
-+$ac_cv_sizeof_long)
-+ dbusint64=long
-+ dbusint64_constant='(val##L)'
-+ dbusuint64_constant='(val##UL)'
-+ ;;
-+$ac_cv_sizeof_long_long)
-+ dbusint64='long long'
-+ dbusint64_constant='(val##LL)'
-+ dbusuint64_constant='(val##ULL)'
-+ ;;
-+$ac_cv_sizeof___int64)
-+ dbusint64=__int64
-+ dbusint64_constant='(val##i64)'
-+ dbusuint64_constant='(val##ui64)'
-+ ;;
-+esac
-+
-+if test -z "$dbusint64" ; then
-+ DBUS_INT64_TYPE="no_int64_type_detected"
-+ DBUS_HAVE_INT64=0
-+ DBUS_INT64_CONSTANT=
-+ DBUS_UINT64_CONSTANT=
-+ AC_MSG_RESULT([none found])
-+else
-+ DBUS_INT64_TYPE="$dbusint64"
-+ DBUS_HAVE_INT64=1
-+ DBUS_INT64_CONSTANT="$dbusint64_constant"
-+ DBUS_UINT64_CONSTANT="$dbusuint64_constant"
-+ AC_MSG_RESULT($DBUS_INT64_TYPE)
-+fi
-+
-+AC_SUBST(DBUS_INT64_TYPE)
-+AC_SUBST(DBUS_INT64_CONSTANT)
-+AC_SUBST(DBUS_UINT64_CONSTANT)
-+AC_SUBST(DBUS_HAVE_INT64)
-+
-+### see what 32-bit int is called
-+AC_MSG_CHECKING([32-bit integer type])
-+
-+case 4 in
-+$ac_cv_sizeof_short)
-+ dbusint32=int
-+ ;;
-+$ac_cv_sizeof_int)
-+ dbusint32=int
-+ ;;
-+$ac_cv_sizeof_long)
-+ dbusint32=long
-+ ;;
-+esac
-+
-+if test -z "$dbusint32" ; then
-+ DBUS_INT32_TYPE="no_int32_type_detected"
-+ AC_MSG_ERROR([No 32-bit integer type found])
-+else
-+ DBUS_INT32_TYPE="$dbusint32"
-+ AC_MSG_RESULT($DBUS_INT32_TYPE)
-+fi
-+
-+AC_SUBST(DBUS_INT32_TYPE)
-+
-+### see what 16-bit int is called
-+AC_MSG_CHECKING([16-bit integer type])
-+
-+case 2 in
-+$ac_cv_sizeof_short)
-+ dbusint16=short
-+ ;;
-+$ac_cv_sizeof_int)
-+ dbusint16=int
-+ ;;
-+esac
-+
-+if test -z "$dbusint16" ; then
-+ DBUS_INT16_TYPE="no_int16_type_detected"
-+ AC_MSG_ERROR([No 16-bit integer type found])
-+else
-+ DBUS_INT16_TYPE="$dbusint16"
-+ AC_MSG_RESULT($DBUS_INT16_TYPE)
-+fi
-+
-+AC_SUBST(DBUS_INT16_TYPE)
-+
-+## byte order
-+AC_C_BIGENDIAN
-+
-+
-+dnl **********************************
-+dnl *** va_copy checks (from GLib) ***
-+dnl **********************************
-+dnl we currently check for all three va_copy possibilities, so we get
-+dnl all results in config.log for bug reports.
-+AC_CACHE_CHECK([for an implementation of va_copy()],dbus_cv_va_copy,[
-+ AC_LINK_IFELSE([#include <stdarg.h>
-+ void f (int i, ...) {
-+ va_list args1, args2;
-+ va_start (args1, i);
-+ va_copy (args2, args1);
-+ if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
-+ exit (1);
-+ va_end (args1); va_end (args2);
-+ }
-+ int main() {
-+ f (0, 42);
-+ return 0;
-+ }],
-+ [dbus_cv_va_copy=yes],
-+ [dbus_cv_va_copy=no])
-+])
-+AC_CACHE_CHECK([for an implementation of __va_copy()],dbus_cv___va_copy,[
-+ AC_LINK_IFELSE([#include <stdarg.h>
-+ void f (int i, ...) {
-+ va_list args1, args2;
-+ va_start (args1, i);
-+ __va_copy (args2, args1);
-+ if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
-+ exit (1);
-+ va_end (args1); va_end (args2);
-+ }
-+ int main() {
-+ f (0, 42);
-+ return 0;
-+ }],
-+ [dbus_cv___va_copy=yes],
-+ [dbus_cv___va_copy=no])
-+])
-+
-+if test "x$dbus_cv_va_copy" = "xyes"; then
-+ dbus_va_copy_func=va_copy
-+else if test "x$dbus_cv___va_copy" = "xyes"; then
-+ dbus_va_copy_func=__va_copy
-+fi
-+fi
-+
-+if test -n "$dbus_va_copy_func"; then
-+ AC_DEFINE_UNQUOTED(DBUS_VA_COPY,$dbus_va_copy_func,[A 'va_copy' style function])
-+fi
-+
-+AC_CACHE_CHECK([whether va_lists can be copied by value],dbus_cv_va_val_copy,[
-+ AC_TRY_RUN([#include <stdarg.h>
-+ void f (int i, ...) {
-+ va_list args1, args2;
-+ va_start (args1, i);
-+ args2 = args1;
-+ if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42)
-+ exit (1);
-+ va_end (args1); va_end (args2);
-+ }
-+ int main() {
-+ f (0, 42);
-+ return 0;
-+ }],
-+ [dbus_cv_va_val_copy=yes],
-+ [dbus_cv_va_val_copy=no],
-+ [dbus_cv_va_val_copy=yes])
-+])
-+
-+if test "x$dbus_cv_va_val_copy" = "xno"; then
-+ AC_DEFINE(DBUS_VA_COPY_AS_ARRAY,1, ['va_lists' cannot be copies as values])
-+fi
-+
-+
-+#### Atomic integers (checks by Sebastian Wilhelmi for GLib)
-+AC_MSG_CHECKING([whether to use inline assembler routines for atomic integers])
-+have_atomic_inc=no
-+if test x"$GCC" = xyes; then
-+ if test "x$enable_ansi" = "xyes"; then
-+ AC_MSG_RESULT([no])
-+ else
-+ case $host_cpu in
-+ i386)
-+ AC_MSG_RESULT([no])
-+ ;;
-+ i?86)
-+ AC_MSG_RESULT([i486])
-+ AC_DEFINE_UNQUOTED(DBUS_USE_ATOMIC_INT_486, 1, [Use atomic integer implementation for 486])
-+ have_atomic_inc=yes
-+ ;;
-+ *)
-+ AC_MSG_RESULT([no])
-+ ;;
-+ esac
-+ fi
-+fi
-+if test x$have_atomic_inc = xyes ; then
-+ AC_DEFINE_UNQUOTED(DBUS_HAVE_ATOMIC_INT, 1, [Some atomic integer implementation present])
-+fi
-+
-+#### Various functions
-+AC_CHECK_LIB(socket,socket)
-+AC_CHECK_LIB(nsl,gethostbyname)
-+
-+AC_CHECK_FUNCS(vsnprintf vasprintf nanosleep usleep poll setenv unsetenv socketpair getgrouplist)
-+
-+AC_CHECK_HEADERS(execinfo.h, [AC_CHECK_FUNCS(backtrace)])
-+
-+AC_CACHE_CHECK([for posix getpwnam_r],
-+ ac_cv_func_posix_getpwnam_r,
-+ [AC_TRY_RUN([
-+#include <errno.h>
-+#include <pwd.h>
-+int main () {
-+ char buffer[10000];
-+ struct passwd pwd, *pwptr = &pwd;
-+ int error;
-+ errno = 0;
-+ error = getpwnam_r ("", &pwd, buffer,
-+ sizeof (buffer), &pwptr);
-+ return (error < 0 && errno == ENOSYS)
-+ || error == ENOSYS;
-+} ],
-+ [ac_cv_func_posix_getpwnam_r=yes],
-+ [ac_cv_func_posix_getpwnam_r=no])])
-+if test "$ac_cv_func_posix_getpwnam_r" = yes; then
-+ AC_DEFINE(HAVE_POSIX_GETPWNAM_R,1,
-+ [Have POSIX function getpwnam_r])
-+else
-+ AC_CACHE_CHECK([for nonposix getpwnam_r],
-+ ac_cv_func_nonposix_getpwnam_r,
-+ [AC_TRY_LINK([#include <pwd.h>],
-+ [char buffer[10000];
-+ struct passwd pwd;
-+ getpwnam_r ("", &pwd, buffer,
-+ sizeof (buffer));],
-+ [ac_cv_func_nonposix_getpwnam_r=yes],
-+ [ac_cv_func_nonposix_getpwnam_r=no])])
-+ if test "$ac_cv_func_nonposix_getpwnam_r" = yes; then
-+ AC_DEFINE(HAVE_NONPOSIX_GETPWNAM_R,1,
-+ [Have non-POSIX function getpwnam_r])
-+ fi
-+fi
-+
-+dnl check for socklen_t
-+AC_MSG_CHECKING(whether socklen_t is defined)
-+AC_TRY_COMPILE([
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+#include <netdb.h>
-+],[
-+socklen_t foo;
-+foo = 1;
-+],dbus_have_socklen_t=yes,dbus_have_socklen_t=no)
-+AC_MSG_RESULT($dbus_have_socklen_t)
-+
-+if test "x$dbus_have_socklen_t" = "xyes"; then
-+ AC_DEFINE(HAVE_SOCKLEN_T,1,[Have socklen_t type])
-+fi
-+
-+dnl check for writev header and writev function so we're
-+dnl good to go if HAVE_WRITEV gets defined.
-+AC_CHECK_HEADERS(sys/uio.h, [AC_CHECK_FUNCS(writev)])
-+
-+dnl check for flavours of varargs macros (test from GLib)
-+AC_MSG_CHECKING(for ISO C99 varargs macros in C)
-+AC_TRY_COMPILE([],[
-+int a(int p1, int p2, int p3);
-+#define call_a(...) a(1,__VA_ARGS__)
-+call_a(2,3);
-+],dbus_have_iso_c_varargs=yes,dbus_have_iso_c_varargs=no)
-+AC_MSG_RESULT($dbus_have_iso_c_varargs)
-+
-+AC_MSG_CHECKING(for GNUC varargs macros)
-+AC_TRY_COMPILE([],[
-+int a(int p1, int p2, int p3);
-+#define call_a(params...) a(1,params)
-+call_a(2,3);
-+],dbus_have_gnuc_varargs=yes,dbus_have_gnuc_varargs=no)
-+AC_MSG_RESULT($dbus_have_gnuc_varargs)
-+
-+dnl Output varargs tests
-+if test x$dbus_have_iso_c_varargs = xyes; then
-+ AC_DEFINE(HAVE_ISO_VARARGS,1,[Have ISO C99 varargs macros])
-+fi
-+if test x$dbus_have_gnuc_varargs = xyes; then
-+ AC_DEFINE(HAVE_GNUC_VARARGS,1,[Have GNU-style varargs macros])
-+fi
-+
-+dnl Check for various credentials.
-+AC_MSG_CHECKING(for struct cmsgcred)
-+AC_TRY_COMPILE([
-+#include <sys/types.h>
-+#include <sys/socket.h>
-+],[
-+struct cmsgcred cred;
-+
-+cred.cmcred_pid = 0;
-+],dbus_have_struct_cmsgcred=yes,dbus_have_struct_cmsgcred=no)
-+AC_MSG_RESULT($dbus_have_struct_cmsgcred)
-+
-+if test x$dbus_have_struct_cmsgcred = xyes; then
-+ AC_DEFINE(HAVE_CMSGCRED,1,[Have cmsgcred structure])
-+fi
-+
-+AC_CHECK_FUNCS(getpeerucred getpeereid)
-+
-+#### Abstract sockets
-+
-+AC_MSG_CHECKING(abstract socket namespace)
-+AC_LANG_PUSH(C)
-+AC_RUN_IFELSE([AC_LANG_PROGRAM(
-+[[
-+#include <sys/types.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <stdio.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <errno.h>
-+]],
-+[[
-+ int listen_fd;
-+ struct sockaddr_un addr;
-+
-+ listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
-+
-+ if (listen_fd < 0)
-+ {
-+ fprintf (stderr, "socket() failed: %s\n", strerror (errno));
-+ exit (1);
-+ }
-+
-+ memset (&addr, '\0', sizeof (addr));
-+ addr.sun_family = AF_UNIX;
-+ strcpy (addr.sun_path, "X/tmp/dbus-fake-socket-path-used-in-configure-test");
-+ addr.sun_path[0] = '\0'; /* this is what makes it abstract */
-+
-+ if (bind (listen_fd, (struct sockaddr*) &addr, SUN_LEN (&addr)) < 0)
-+ {
-+ fprintf (stderr, "Abstract socket namespace bind() failed: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+ else
-+ exit (0);
-+]])],
-+ [have_abstract_sockets=yes],
-+ [have_abstract_sockets=no])
-+AC_LANG_POP(C)
-+AC_MSG_RESULT($have_abstract_sockets)
-+
-+if test x$enable_abstract_sockets = xyes; then
-+ if test x$have_abstract_sockets = xno; then
-+ AC_MSG_ERROR([Abstract sockets explicitly required, and support not detected.])
-+ fi
-+fi
-+
-+if test x$enable_abstract_sockets = xno; then
-+ have_abstract_sockets=no;
-+fi
-+
-+if test x$have_abstract_sockets = xyes ; then
-+ DBUS_PATH_OR_ABSTRACT=abstract
-+ AC_DEFINE(HAVE_ABSTRACT_SOCKETS,1,[Have abstract socket namespace])
-+else
-+ DBUS_PATH_OR_ABSTRACT=path
-+fi
-+
-+# this is used in addresses to prefer abstract, e.g.
-+# unix:path=/foo or unix:abstract=/foo
-+AC_SUBST(DBUS_PATH_OR_ABSTRACT)
-+
-+#### Sort out gettext
-+
-+# this makes us require GLib to run autoconf, but not at runtime
-+ALL_LINGUAS=""
-+AM_GLIB_GNU_GETTEXT
-+
-+# INTLLIBS is now set
-+
-+# (if someone wants to go through and make internationalization
-+# conditional with #ifdef ENABLE_NLS then go crazy and send us a patch,
-+# but right now we won't build without gettext)
-+if test "$gt_cv_have_gettext" != "yes" ; then
-+ AC_MSG_ERROR([
-+*** You must have either have gettext support in your C library, or use the
-+*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.html
-+])
-+fi
-+
-+#### Sort out XML library
-+
-+# see what we have
-+AC_CHECK_LIB(expat, XML_ParserCreate_MM,
-+ [ AC_CHECK_HEADERS(expat.h, have_expat=true, have_expat=false) ],
-+ have_expat=false)
-+
-+PKG_CHECK_MODULES(LIBXML, libxml-2.0, have_libxml=true, have_libxml=false)
-+
-+# see what we want to use
-+dbus_use_libxml=false
-+dbus_use_expat=false
-+if test x$with_xml = xexpat; then
-+ dbus_use_expat=true
-+ if ! $have_expat ; then
-+ AC_MSG_ERROR([Explicitly requested expat but expat not found])
-+ fi
-+elif test x$with_xml = xlibxml; then
-+ dbus_use_libxml=true
-+ if ! $have_libxml ; then
-+ AC_MSG_ERROR([Explicitly requested libxml but libxml not found])
-+ fi
-+else
-+ ### expat is the default because libxml can't currently survive
-+ ### our brutal OOM-handling unit test setup.
-+ ### http://bugzilla.gnome.org/show_bug.cgi?id=109368
-+ if $have_expat ; then
-+ with_xml=expat
-+ dbus_use_expat=true
-+ elif $have_libxml ; then
-+ with_xml=libxml
-+ dbus_use_libxml=true
-+ else
-+ AC_MSG_ERROR([No XML library found, check config.log for failed attempts])
-+ fi
-+fi
-+
-+AM_CONDITIONAL(DBUS_USE_EXPAT, $dbus_use_expat)
-+AM_CONDITIONAL(DBUS_USE_LIBXML, $dbus_use_libxml)
-+
-+if $dbus_use_expat; then
-+ XML_LIBS=-lexpat
-+ XML_CFLAGS=
-+fi
-+if $dbus_use_libxml; then
-+ XML_LIBS=$LIBXML_LIBS
-+ XML_CFLAGS=$LIBXML_CFLAGS
-+fi
-+
-+# SELinux detection
-+if test x$enable_selinux = xno ; then
-+ have_selinux=no;
-+else
-+ # See if we have SELinux library
-+ AC_CHECK_LIB(selinux, is_selinux_enabled,
-+ have_selinux=yes, have_selinux=no)
-+
-+ # see if we have the SELinux header with the new D-BUS stuff in it
-+ if test x$have_selinux = xyes ; then
-+ AC_MSG_CHECKING([for DBUS Flask permissions in selinux/av_permissions.h])
-+ AC_TRY_COMPILE([#include <selinux/av_permissions.h>],
-+ [#ifdef DBUS__ACQUIRE_SVC return 0;
-+ #else
-+ #error DBUS__ACQUIRE_SVC not defined
-+ #endif],
-+ have_selinux=yes, have_selinux=no)
-+ AC_MSG_RESULT($have_selinux)
-+ fi
-+
-+ if test x$enable_selinux = xauto ; then
-+ if test x$have_selinux = xno ; then
-+ AC_MSG_WARN([Sufficiently new SELinux library not found])
-+ fi
-+ else
-+ if test x$have_selinux = xno ; then
-+ AC_MSG_ERROR([SElinux explicitly required, and SELinux library not found])
-+ fi
-+ fi
-+fi
-+
-+AM_CONDITIONAL(HAVE_SELINUX, test x$have_selinux = xyes)
-+
-+if test x$have_selinux = xyes ; then
-+ SELINUX_LIBS="-lselinux -lpthread"
-+ AC_DEFINE(HAVE_SELINUX,1,[SELinux support])
-+else
-+ SELINUX_LIBS=
-+fi
-+
-+# dnotify checks
-+if test x$enable_dnotify = xno ; then
-+ have_dnotify=no;
-+else
-+ if test x$target_os = xlinux-gnu -o x$target_os = xlinux; then
-+ have_dnotify=yes;
-+ else
-+ have_dnotify=no;
-+ fi
-+fi
-+
-+dnl check if dnotify backend is enabled
-+if test x$have_dnotify = xyes; then
-+ AC_DEFINE(DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX,1,[Use dnotify on Linux])
-+fi
-+
-+#### Set up final flags
-+DBUS_CLIENT_CFLAGS=
-+DBUS_CLIENT_LIBS=
-+AC_SUBST(DBUS_CLIENT_CFLAGS)
-+AC_SUBST(DBUS_CLIENT_LIBS)
-+
-+DBUS_BUS_CFLAGS=$XML_CFLAGS
-+DBUS_BUS_LIBS="$XML_LIBS $SELINUX_LIBS $INTLLIBS"
-+AC_SUBST(DBUS_BUS_CFLAGS)
-+AC_SUBST(DBUS_BUS_LIBS)
-+
-+DBUS_TEST_CFLAGS=
-+DBUS_TEST_LIBS=
-+AC_SUBST(DBUS_TEST_CFLAGS)
-+AC_SUBST(DBUS_TEST_LIBS)
-+
-+# Glib detection
-+PKG_CHECK_MODULES(DBUS_GLIB, gobject-2.0 >= 2.4, have_glib=yes, have_glib=no)
-+PKG_CHECK_MODULES(DBUS_GLIB_THREADS, gthread-2.0 >= 2.4, have_glib_threads=yes, have_glib_threads=no)
-+
-+if test x$have_glib = xno ; then
-+ AC_MSG_WARN([GLib development libraries not found])
-+fi
-+
-+if test x$enable_glib = xyes; then
-+ if test x$have_glib = xno; then
-+ AC_MSG_ERROR([GLib explicitly required, and GLib development libraries not found])
-+ fi
-+fi
-+
-+if test x$enable_glib = xno; then
-+ have_glib=no;
-+fi
-+
-+AM_CONDITIONAL(HAVE_GLIB, test x$have_glib = xyes)
-+AM_CONDITIONAL(HAVE_GLIB_THREADS, test x$have_glib_threads = xyes)
-+
-+if test x$have_glib = xyes; then
-+ GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
-+else
-+ GLIB_GENMARSHAL=glib-not-enabled-so-there-is-no-genmarshal
-+fi
-+AC_SUBST(GLIB_GENMARSHAL)
-+
-+dnl GLib flags
-+AC_SUBST(DBUS_GLIB_CFLAGS)
-+AC_SUBST(DBUS_GLIB_LIBS)
-+AC_SUBST(DBUS_GLIB_THREADS_LIBS)
-+
-+DBUS_GLIB_TOOL_CFLAGS=$XML_CFLAGS
-+DBUS_GLIB_TOOL_LIBS="$XML_LIBS $INTLLIBS"
-+AC_SUBST(DBUS_GLIB_TOOL_CFLAGS)
-+AC_SUBST(DBUS_GLIB_TOOL_LIBS)
-+
-+# GTK detection
-+if test x$have_glib = xno ; then
-+ AC_MSG_WARN([Can't use GTK+ since GLib not enabled])
-+ have_gtk=no
-+else
-+ PKG_CHECK_MODULES(DBUS_GTK, gtk+-2.0 >= 2.4, have_gtk=yes, have_gtk=no)
-+ PKG_CHECK_MODULES(DBUS_GTK_THREADS, gtk+-2.0 >= 2.4 gthread-2.0, have_gtk_threads=yes, have_gtk_threads=no)
-+fi
-+
-+if test x$have_gtk = xno ; then
-+ AC_MSG_WARN([GTK+ development libraries not found])
-+fi
-+
-+if test x$enable_gtk = xyes; then
-+ if test x$have_gtk = xno; then
-+ AC_MSG_ERROR([GTK+ explicitly required, and GTK+ development libraries not found])
-+ fi
-+fi
-+
-+if test x$enable_gtk = xno; then
-+ have_gtk=no;
-+fi
-+
-+AM_CONDITIONAL(HAVE_GTK, test x$have_gtk = xyes)
-+
-+dnl Gtk flags
-+AC_SUBST(DBUS_GTK_CFLAGS)
-+AC_SUBST(DBUS_GTK_LIBS)
-+AC_SUBST(DBUS_GTK_THREADS_CFLAGS)
-+AC_SUBST(DBUS_GTK_THREADS_LIBS)
-+
-+
-+dnl Qt3 detection
-+if test -z "$with_qt3_moc" ; then
-+ AC_PATH_PROG(QT3_MOC, moc, no)
-+else
-+ QT3_MOC=$with_qt3_moc
-+ AC_SUBST(QT3_MOC)
-+fi
-+
-+have_qt3=no
-+AC_MSG_CHECKING([for qglobal.h])
-+if test -n "$QTDIR" -a -f "$QTDIR/include/qglobal.h"; then
-+ have_qt3=yes
-+ DBUS_QT3_CXXFLAGS="-I$QTDIR/include"
-+else
-+ for dir in "${prefix}/include/qt" "/usr/include/qt-3.1" "/usr/include/qt3" "/usr/include/qt" "/usr/lib/qt/include" "/usr/lib/qt-3.1/include"; do
-+ if test -f "$dir/qglobal.h"; then
-+ have_qt3=yes
-+ DBUS_QT3_CXXFLAGS="-I$dir"
-+ DBUS_QT3_LIBS="-L$QTDIR/lib -lqt-mt"
-+ fi
-+ done
-+fi
-+if test x$have_qt3 = xyes; then
-+ AC_MSG_RESULT([found])
-+else
-+ AC_MSG_RESULT([not found])
-+fi
-+
-+if test x$have_qt3 = xno; then
-+ AC_MSG_WARN([Qt3 development libraries not found])
-+fi
-+
-+if test x$enable_qt3 = xyes; then
-+ if test x$have_qt3 = xno; then
-+ AC_MSG_ERROR([Qt3 integration explicitly required, and Qt3 libraries not found])
-+ fi
-+fi
-+
-+if test x$enable_qt3 = xno; then
-+ have_qt3=no;
-+fi
-+
-+AM_CONDITIONAL(HAVE_QT3, test x$have_qt3 = xyes)
-+
-+dnl Qt3 flags
-+AC_SUBST(DBUS_QT3_CXXFLAGS)
-+AC_SUBST(DBUS_QT3_LIBS)
-+
-+
-+dnl Qt4 detection
-+
-+AC_MSG_CHECKING([if we want to link to Qt debugging libraries])
-+qt_suffix=
-+if test x$enable_qt_debug = xyes; then
-+ qt_suffix=_debug
-+ AC_MSG_RESULT([debug])
-+else
-+ AC_MSG_RESULT([release])
-+fi
-+
-+QT_CORE=QtCore$qt_suffix
-+QT_XML=QtXml$qt_suffix
-+QT_TESTLIB=QtTest$qt_suffix
-+min_qt_version=4.1
-+
-+PKG_CHECK_MODULES([DBUS_QT],
-+ [$QT_CORE >= $min_qt_version $QT_XML >= $min_qt_version],
-+ have_qt=yes,
-+ have_qt=no)
-+
-+dnl Check for moc too
-+if test x$have_qt = xyes ; then
-+ AC_MSG_CHECKING([for moc])
-+
-+ if test -z "$with_qt_moc" ; then
-+ QT_MOC=`$PKG_CONFIG --variable=exec_prefix $QT_CORE`
-+ QT_MOC=${QT_MOC}/bin/moc
-+ else
-+ QT_MOC=$with_qt_moc
-+ fi
-+
-+ if test -x "$QT_MOC"; then
-+ AC_MSG_RESULT([found, $QT_MOC])
-+ else
-+ AC_MSG_RESULT([not found])
-+ AC_MSG_WARN([moc not found; disabling Qt])
-+ have_qt=no
-+ fi
-+fi
-+
-+if test x$have_qt = xno ; then
-+ if test x$enable_qt = xyes; then
-+ AC_MSG_ERROR([Qt integration explicitly required, and Qt libraries not found])
-+ fi
-+ have_qt=no
-+else
-+ dnl Qt4 flags
-+ AC_SUBST(DBUS_QT_CFLAGS)
-+ AC_SUBST(DBUS_QT_LIBS)
-+ AC_SUBST(QT_MOC)
-+
-+ dnl QTestLib detection
-+ PKG_CHECK_MODULES([DBUS_QTESTLIB],
-+ [$QT_TESTLIB >= $min_qt_version],
-+ have_qtest=yes,
-+ have_qtest=no)
-+
-+ if test x$have_qtest = xno ; then
-+ AC_MSG_WARN([Qt Unit Test library not found])
-+ fi
-+
-+ if test x$have_qt = xno; then
-+ have_qtest=no
-+ fi
-+
-+
-+ AC_SUBST(DBUS_QTESTLIB_CFLAGS)
-+ AC_SUBST(DBUS_QTESTLIB_LIBS)
-+fi
-+
-+AM_CONDITIONAL(HAVE_QT, test x$have_qt = xyes)
-+AM_CONDITIONAL(HAVE_QTESTLIB, test x$have_qtest = xyes)
-+
-+### X11 detection
-+AC_PATH_XTRA
-+
-+## for now enable_x11 just tracks have_x11,
-+## there's no --enable-x11
-+if test x$no_x = xyes ; then
-+ have_x11=no
-+ enable_x11=no
-+else
-+ have_x11=yes
-+ enable_x11=yes
-+fi
-+
-+if test x$enable_x11 = xyes ; then
-+ AC_DEFINE(DBUS_BUILD_X11,1,[Build X11-dependent code])
-+ DBUS_X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
-+ DBUS_X_CFLAGS="$X_CFLAGS"
-+else
-+ DBUS_X_LIBS=
-+ DBUS_X_CFLAGS=
-+fi
-+
-+AC_SUBST(DBUS_X_CFLAGS)
-+AC_SUBST(DBUS_X_LIBS)
-+
-+### Doxygen Documentation
-+
-+AC_PATH_PROG(DOXYGEN, doxygen, no)
-+
-+AC_MSG_CHECKING([whether to build Doxygen documentation])
-+
-+if test x$DOXYGEN = xno ; then
-+ have_doxygen=no
-+else
-+ have_doxygen=yes
-+fi
-+
-+if test x$enable_doxygen_docs = xauto ; then
-+ if test x$have_doxygen = xno ; then
-+ enable_doxygen_docs=no
-+ else
-+ enable_doxygen_docs=yes
-+ fi
-+fi
-+
-+if test x$enable_doxygen_docs = xyes; then
-+ if test x$have_doxygen = xno; then
-+ AC_MSG_ERROR([Building Doxygen docs explicitly required, but Doxygen not found])
-+ fi
-+fi
-+
-+AM_CONDITIONAL(DBUS_DOXYGEN_DOCS_ENABLED, test x$enable_doxygen_docs = xyes)
-+AC_MSG_RESULT(yes)
-+
-+### XML Documentation
-+
-+AC_PATH_PROG(XMLTO, xmlto, no)
-+
-+AC_MSG_CHECKING([whether to build XML documentation])
-+
-+if test x$XMLTO = xno ; then
-+ have_xmlto=no
-+else
-+ have_xmlto=yes
-+fi
-+
-+if test x$enable_xml_docs = xauto ; then
-+ if test x$have_xmlto = xno ; then
-+ enable_xml_docs=no
-+ else
-+ enable_xml_docs=yes
-+ fi
-+fi
-+
-+if test x$enable_xml_docs = xyes; then
-+ if test x$have_xmlto = xno; then
-+ AC_MSG_ERROR([Building XML docs explicitly required, but xmlto not found])
-+ fi
-+fi
-+
-+AM_CONDITIONAL(DBUS_XML_DOCS_ENABLED, test x$enable_xml_docs = xyes)
-+AC_MSG_RESULT(yes)
-+
-+#### Have to go $localstatedir->$prefix/var->/usr/local/var
-+#### someone please fix this a better way...
-+
-+#### find the actual value for $prefix that we'll end up with
-+## (I know this is broken and should be done in the Makefile, but
-+## that's a major pain and almost nobody actually seems to care)
-+REAL_PREFIX=
-+if test "x$prefix" = "xNONE"; then
-+ REAL_PREFIX=$ac_default_prefix
-+else
-+ REAL_PREFIX=$prefix
-+fi
-+
-+## temporarily change prefix and exec_prefix
-+old_prefix=$prefix
-+prefix=$REAL_PREFIX
-+
-+if test "x$exec_prefix" = xNONE ; then
-+ REAL_EXEC_PREFIX=$REAL_PREFIX
-+else
-+ REAL_EXEC_PREFIX=$exec_prefix
-+fi
-+old_exec_prefix=$exec_prefix
-+exec_prefix=$REAL_EXEC_PREFIX
-+
-+## eval everything
-+LOCALSTATEDIR_TMP="$localstatedir"
-+EXPANDED_LOCALSTATEDIR=`eval echo $LOCALSTATEDIR_TMP`
-+AC_SUBST(EXPANDED_LOCALSTATEDIR)
-+
-+SYSCONFDIR_TMP="$sysconfdir"
-+EXPANDED_SYSCONFDIR=`eval echo $SYSCONFDIR_TMP`
-+AC_SUBST(EXPANDED_SYSCONFDIR)
-+
-+BINDIR_TMP="$bindir"
-+EXPANDED_BINDIR=`eval echo $BINDIR_TMP`
-+AC_SUBST(EXPANDED_BINDIR)
-+
-+LIBDIR_TMP="$libdir"
-+EXPANDED_LIBDIR=`eval echo $LIBDIR_TMP`
-+AC_SUBST(EXPANDED_LIBDIR)
-+
-+DATADIR_TMP="$datadir"
-+EXPANDED_DATADIR=`eval echo $DATADIR_TMP`
-+AC_SUBST(EXPANDED_DATADIR)
-+
-+## put prefix and exec_prefix back
-+prefix=$old_prefix
-+exec_prefix=$old_exec_prefix
-+
-+#### Check our operating system
-+operating_system=unknown
-+if test -f /etc/redhat-release || test -f $EXPANDED_SYSCONFDIR/redhat-release ; then
-+ operating_system=redhat
-+fi
-+
-+if test -f /etc/slackware-version || test -f $EXPANDED_SYSCONFDIR/slackware-version ; then
-+ operating_system=slackware
-+fi
-+
-+#### Sort out init scripts
-+
-+if test x$with_init_scripts = x; then
-+ if test xredhat = x$operating_system ; then
-+ with_init_scripts=redhat
-+ else
-+ if test xslackware = x$operating_system ; then
-+ with_init_scripts=slackware
-+ else
-+ with_init_scripts=none
-+ fi
-+ fi
-+fi
-+
-+AM_CONDITIONAL(DBUS_INIT_SCRIPTS_RED_HAT, test x$with_init_scripts = xredhat)
-+
-+AM_CONDITIONAL(DBUS_INIT_SCRIPTS_SLACKWARE, test x$with_init_scripts = xslackware)
-+
-+##### Set up location for system bus socket
-+if ! test -z "$with_system_socket"; then
-+ DBUS_SYSTEM_SOCKET=$with_system_socket
-+else
-+ DBUS_SYSTEM_SOCKET=${EXPANDED_LOCALSTATEDIR}/run/dbus/system_bus_socket
-+fi
-+
-+AC_SUBST(DBUS_SYSTEM_SOCKET)
-+AC_DEFINE_UNQUOTED(DBUS_SYSTEM_SOCKET,"$DBUS_SYSTEM_SOCKET",[The name of the socket the system bus listens on by default])
-+
-+## system bus only listens on local domain sockets, and never
-+## on an abstract socket (so only root can create the socket)
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="unix:path=$DBUS_SYSTEM_SOCKET"
-+AC_SUBST(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)
-+AC_DEFINE_UNQUOTED(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS, "$DBUS_SYSTEM_BUS_DEFAULT_ADDRESS",[The default D-BUS address of the system bus])
-+
-+#### Set up the pid file
-+if ! test -z "$with_system_pid_file"; then
-+ DBUS_SYSTEM_PID_FILE=$with_system_pid_file
-+elif test x$operating_system = xredhat ; then
-+ DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/messagebus.pid
-+else
-+ DBUS_SYSTEM_PID_FILE=${EXPANDED_LOCALSTATEDIR}/run/dbus/pid
-+fi
-+
-+AC_SUBST(DBUS_SYSTEM_PID_FILE)
-+
-+#### Directory to check for console ownership
-+if ! test -z "$with_console_auth_dir"; then
-+ DBUS_CONSOLE_AUTH_DIR=$with_console_auth_dir
-+else
-+ DBUS_CONSOLE_AUTH_DIR=/var/run/console/
-+fi
-+
-+AC_SUBST(DBUS_CONSOLE_AUTH_DIR)
-+AC_DEFINE_UNQUOTED(DBUS_CONSOLE_AUTH_DIR, "$DBUS_CONSOLE_AUTH_DIR", [Directory to check for console ownerhip])
-+
-+#### User to start the system bus as
-+if test -z "$with_dbus_user" ; then
-+ DBUS_USER=messagebus
-+else
-+ DBUS_USER=$with_dbus_user
-+fi
-+AC_SUBST(DBUS_USER)
-+AC_DEFINE_UNQUOTED(DBUS_USER,"$DBUS_USER", [User for running the system BUS daemon])
-+
-+#### Tell tests where to find certain stuff in builddir
-+ABSOLUTE_TOP_BUILDDIR=`cd ${ac_top_builddir}. && pwd`
-+
-+AC_DEFUN([TEST_PATH], [
-+TEST_$1=${ABSOLUTE_TOP_BUILDDIR}/test/$2
-+AC_DEFINE_UNQUOTED(TEST_$1, "$TEST_$1",
-+ [Full path to test file test/$2 in builddir])
-+AC_SUBST(TEST_$1)
-+])
-+
-+TEST_PATH(SERVICE_DIR, data/valid-service-files)
-+TEST_PATH(SERVICE_BINARY, test-service)
-+TEST_PATH(SHELL_SERVICE_BINARY, test-shell-service)
-+TEST_PATH(GLIB_SERVICE_BINARY, glib/test-service-glib)
-+TEST_PATH(PYTHON_SERVICE_BINARY, python/test-service.py)
-+TEST_PATH(EXIT_BINARY, test-exit)
-+TEST_PATH(SEGFAULT_BINARY, test-segfault)
-+TEST_PATH(SLEEP_FOREVER_BINARY, test-sleep-forever)
-+AC_SUBST(ABSOLUTE_TOP_BUILDDIR)
-+
-+#### Find socket directories
-+if ! test -z "$TMPDIR" ; then
-+ DEFAULT_SOCKET_DIR=$TMPDIR
-+elif ! test -z "$TEMP" ; then
-+ DEFAULT_SOCKET_DIR=$TEMP
-+elif ! test -z "$TMP" ; then
-+ DEFAULT_SOCKET_DIR=$TMP
-+else
-+ DEFAULT_SOCKET_DIR=/tmp
-+fi
-+
-+if ! test -z "$with_test_socket_dir" ; then
-+ TEST_SOCKET_DIR="$with_test_socket_dir"
-+else
-+ TEST_SOCKET_DIR=$DEFAULT_SOCKET_DIR
-+fi
-+AC_SUBST(TEST_SOCKET_DIR)
-+AC_DEFINE_UNQUOTED(DBUS_TEST_SOCKET_DIR, "$TEST_SOCKET_DIR", [Where to put test sockets])
-+
-+if ! test -z "$with_session_socket_dir" ; then
-+ DBUS_SESSION_SOCKET_DIR="$with_session_socket_dir"
-+else
-+ DBUS_SESSION_SOCKET_DIR=$DEFAULT_SOCKET_DIR
-+fi
-+AC_DEFINE_UNQUOTED(DBUS_SESSION_SOCKET_DIR, "$DBUS_SESSION_SOCKET_DIR", [Where per-session bus puts its sockets])
-+AC_SUBST(DBUS_SESSION_SOCKET_DIR)
-+
-+# Detect if we can build Python bindings (need python, python headers, and pyrex)
-+if test x$enable_python = xno; then
-+ have_python=no
-+else
-+ have_python_version=2.4
-+ AC_MSG_NOTICE([Checking to see if we can build Python bindings])
-+ have_python=no
-+ AM_PATH_PYTHON()
-+
-+ if test -z "$PYTHON" ; then
-+ AC_MSG_WARN([Python not found])
-+ else
-+ AC_MSG_CHECKING([whether $PYTHON version >= $have_python_version])
-+ AM_PYTHON_CHECK_VERSION([$PYTHON], [$have_python_version],
-+ [have_python_version="yes"],
-+ [have_python_version="too old"])
-+
-+ AC_MSG_RESULT($have_python_version)
-+
-+ AC_CHECK_PROGS(PYREX, pyrexc)
-+
-+ if test -z "$PYREX" ; then
-+ have_pyrex=no
-+ else
-+ have_pyrex=yes
-+ fi
-+
-+ AM_CHECK_PYTHON_HEADERS(have_python_headers=yes,have_python_headers=no)
-+
-+ if test x$have_pyrex = xyes -a x$have_python_headers = xyes -a "x$have_python_version" = xyes ; then
-+ have_python=yes
-+ fi
-+ fi
-+
-+ if test x$have_python = xno ; then
-+ if test x$enable_python = xyes ; then
-+ AC_MSG_ERROR([Building python explicitly requested, but can't build python bindings because either Pyrex, Python headers or a suitable Python version was not found])
-+ else
-+ AC_MSG_WARN([Couldn't find either Pyrex, the Python headers or a suitable version of Python, not building Python bindings])
-+ fi
-+ fi
-+fi
-+
-+AM_CONDITIONAL(HAVE_PYTHON, test x$have_python = xyes)
-+
-+AC_OUTPUT([
-+Doxyfile
-+dbus/dbus-arch-deps.h
-+bus/system.conf
-+bus/session.conf
-+bus/messagebus
-+bus/rc.messagebus
-+bus/dbus-daemon.1
-+Makefile
-+dbus/Makefile
-+glib/Makefile
-+glib/examples/Makefile
-+glib/examples/statemachine/Makefile
-+python/Makefile
-+python/examples/Makefile
-+qt/Makefile
-+qt3/Makefile
-+gcj/Makefile
-+gcj/org/Makefile
-+gcj/org/freedesktop/Makefile
-+gcj/org/freedesktop/dbus/Makefile
-+mono/Makefile
-+mono/AssemblyInfo.cs
-+mono/dbus-sharp.dll.config
-+mono/example/Makefile
-+mono/doc/Makefile
-+bus/Makefile
-+tools/Makefile
-+test/Makefile
-+test/glib/Makefile
-+test/python/Makefile
-+test/qt/Makefile
-+test/name-test/Makefile
-+doc/Makefile
-+dbus-1.pc
-+dbus-glib-1.pc
-+dbus-sharp.pc
-+test/data/valid-config-files/debug-allow-all.conf
-+test/data/valid-config-files/debug-allow-all-sha1.conf
-+test/data/valid-service-files/debug-echo.service
-+test/data/valid-service-files/debug-segfault.service
-+test/data/valid-service-files/debug-glib.service
-+test/data/valid-service-files/debug-shell-echo-success.service
-+test/data/valid-service-files/debug-shell-echo-fail.service
-+test/data/valid-service-files/debug-python.service
-+])
-+
-+### FIXME it's bizarre that have_qt and have_glib are used
-+### instead of enable_ - should fix things so that enable
-+### is always whether it's enabled, and have is always whether
-+### it was found.
-+
-+dnl ==========================================================================
-+echo "
-+ D-BUS $VERSION
-+ ==============
-+
-+ prefix: ${prefix}
-+ exec_prefix: ${exec_prefix}
-+ libdir: ${EXPANDED_LIBDIR}
-+ bindir: ${EXPANDED_BINDIR}
-+ sysconfdir: ${EXPANDED_SYSCONFDIR}
-+ localstatedir: ${EXPANDED_LOCALSTATEDIR}
-+ datadir: ${EXPANDED_DATADIR}
-+ source code location: ${srcdir}
-+ compiler: ${CC}
-+ cflags: ${CFLAGS}
-+ cppflags: ${CPPFLAGS}
-+ cxxflags: ${CXXFLAGS}
-+ 64-bit int: ${DBUS_INT64_TYPE}
-+ 32-bit int: ${DBUS_INT32_TYPE}
-+ 16-bit int: ${DBUS_INT16_TYPE}
-+ Doxygen: ${DOXYGEN}
-+ xmlto: ${XMLTO}"
-+
-+if test x$enable_gcj = xyes ; then
-+echo \
-+" gcj: ${GCJ}
-+ gcjflags: ${GCJFLAGS}
-+ jar: ${JAR}"
-+else
-+echo \
-+" gcj: (not enabled)"
-+fi
-+
-+if test x$enable_mono = xyes ; then
-+echo \
-+" csc: ${CSC}
-+"
-+else
-+echo \
-+" csc: (not enabled)
-+"
-+fi
-+
-+echo "
-+ Maintainer mode: ${USE_MAINTAINER_MODE}
-+ gcc coverage profiling: ${enable_gcov}
-+ Building unit tests: ${enable_tests}
-+ Building verbose mode: ${enable_verbose_mode}
-+ Building assertions: ${enable_asserts}
-+ Building checks: ${enable_checks}
-+ Building Qt4 bindings: ${have_qt}
-+ Building Qt3 bindings: ${have_qt3}
-+ Building GLib bindings: ${have_glib}
-+ Building Python bindings: ${have_python}
-+ Building SELinux support: ${have_selinux}
-+ Building dnotify support: ${have_dnotify}
-+ Building Mono bindings: ${enable_mono}
-+ Building Mono docs: ${enable_mono_docs}
-+ Building GTK+ tools: ${have_gtk}
-+ Building X11 code: ${enable_x11}
-+ Building Doxygen docs: ${enable_doxygen_docs}
-+ Building XML docs: ${enable_xml_docs}
-+ Gettext libs (empty OK): ${INTLLIBS}
-+ Using XML parser: ${with_xml}
-+ Init scripts style: ${with_init_scripts}
-+ Abstract socket names: ${have_abstract_sockets}
-+ System bus socket: ${DBUS_SYSTEM_SOCKET}
-+ System bus address: ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
-+ System bus PID file: ${DBUS_SYSTEM_PID_FILE}
-+ Session bus socket dir: ${DBUS_SESSION_SOCKET_DIR}
-+ Console auth dir: ${DBUS_CONSOLE_AUTH_DIR}
-+ System bus user: ${DBUS_USER}
-+ 'make check' socket dir: ${TEST_SOCKET_DIR}
-+"
-+
-+if test x$enable_tests = xyes; then
-+ echo "NOTE: building with unit tests increases the size of the installed library and renders it insecure."
-+fi
-+if test x$enable_tests = xyes -a x$enable_asserts = xno; then
-+ echo "NOTE: building with unit tests but without assertions means tests may not properly report failures (this configuration is only useful when doing something like profiling the tests)"
-+fi
-+if test x$enable_gcov = xyes; then
-+ echo "NOTE: building with coverage profiling is definitely for developers only."
-+fi
-+if test x$enable_verbose_mode = xyes; then
-+ echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance."
-+fi
-+if test x$enable_asserts = xyes; then
-+ echo "NOTE: building with assertions increases library size and decreases performance."
-+fi
-+if test x$enable_checks = xno; then
-+ echo "NOTE: building without checks for arguments passed to public API makes it harder to debug apps using D-BUS, but will slightly decrease D-BUS library size and _very_ slightly improve performance."
-+fi
-diff -Naur dbus-0.61.orig/dbus/Makefile.am dbus-0.61/dbus/Makefile.am
---- dbus-0.61.orig/dbus/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/Makefile.am 2006-02-27 22:33:30.000000000 +0100
-@@ -0,0 +1,198 @@
-+
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) -DDBUS_COMPILATION
-+
-+if HAVE_GLIB
-+DBUS_GLIB_BUILT_INCLUDES= \
-+ dbus-glib-error-enum.h
-+
-+GLIB_INCLUDES= \
-+ dbus-glib.h \
-+ dbus-glib-lowlevel.h \
-+ $(DBUS_GLIB_BUILT_INCLUDES)
-+
-+dbus-glib-error-enum.h: dbus-protocol.h make-dbus-glib-error-enum.sh
-+ $(srcdir)/make-dbus-glib-error-enum.sh $(srcdir)/dbus-protocol.h $@
-+
-+endif
-+
-+if HAVE_QT
-+QT_INCLUDES=qdbus.h
-+endif
-+
-+dbusincludedir=$(includedir)/dbus-1.0/dbus
-+dbusarchincludedir=$(libdir)/dbus-1.0/include/dbus
-+
-+lib_LTLIBRARIES=libdbus-1.la
-+
-+dbusinclude_HEADERS= \
-+ dbus.h \
-+ dbus-address.h \
-+ dbus-bus.h \
-+ dbus-connection.h \
-+ dbus-errors.h \
-+ dbus-macros.h \
-+ dbus-memory.h \
-+ dbus-message.h \
-+ dbus-pending-call.h \
-+ dbus-protocol.h \
-+ dbus-server.h \
-+ dbus-shared.h \
-+ dbus-signature.h \
-+ dbus-threads.h \
-+ dbus-types.h \
-+ $(GLIB_INCLUDES) \
-+ $(QT_INCLUDES)
-+
-+dbusarchinclude_HEADERS= \
-+ dbus-arch-deps.h
-+
-+### source code that goes in the installed client library
-+### and is specific to library functionality
-+DBUS_LIB_SOURCES= \
-+ dbus-address.c \
-+ dbus-auth.c \
-+ dbus-auth.h \
-+ dbus-auth-script.c \
-+ dbus-auth-script.h \
-+ dbus-bus.c \
-+ dbus-connection.c \
-+ dbus-connection-internal.h \
-+ dbus-errors.c \
-+ dbus-keyring.c \
-+ dbus-keyring.h \
-+ dbus-marshal-header.c \
-+ dbus-marshal-header.h \
-+ dbus-marshal-byteswap.c \
-+ dbus-marshal-byteswap.h \
-+ dbus-marshal-recursive.c \
-+ dbus-marshal-recursive.h \
-+ dbus-marshal-validate.c \
-+ dbus-marshal-validate.h \
-+ dbus-message.c \
-+ dbus-message-internal.h \
-+ dbus-message-private.h \
-+ dbus-object-tree.c \
-+ dbus-object-tree.h \
-+ dbus-pending-call.c \
-+ dbus-resources.c \
-+ dbus-resources.h \
-+ dbus-server.c \
-+ dbus-server-debug-pipe.c \
-+ dbus-server-debug-pipe.h \
-+ dbus-server-protected.h \
-+ dbus-server-unix.c \
-+ dbus-server-unix.h \
-+ dbus-sha.c \
-+ dbus-sha.h \
-+ dbus-signature.c \
-+ dbus-timeout.c \
-+ dbus-timeout.h \
-+ dbus-threads-internal.h \
-+ dbus-threads.c \
-+ dbus-transport.c \
-+ dbus-transport.h \
-+ dbus-transport-protected.h \
-+ dbus-transport-unix.c \
-+ dbus-transport-unix.h \
-+ dbus-watch.c \
-+ dbus-watch.h
-+
-+## dbus-md5.c \
-+## dbus-md5.h \
-+
-+### source code that goes in the installed client library
-+### AND is generic utility functionality used by the
-+### daemon or test programs (all symbols in here should
-+### be underscore-prefixed)
-+DBUS_SHARED_SOURCES= \
-+ dbus-dataslot.c \
-+ dbus-dataslot.h \
-+ dbus-hash.c \
-+ dbus-hash.h \
-+ dbus-internals.c \
-+ dbus-internals.h \
-+ dbus-list.c \
-+ dbus-list.h \
-+ dbus-marshal-basic.c \
-+ dbus-marshal-basic.h \
-+ dbus-memory.c \
-+ dbus-mempool.c \
-+ dbus-mempool.h \
-+ dbus-string.c \
-+ dbus-string.h \
-+ dbus-string-private.h \
-+ dbus-sysdeps.c \
-+ dbus-sysdeps.h \
-+ dbus-userdb.c \
-+ dbus-userdb.h
-+
-+### source code that is generic utility functionality used
-+### by the bus daemon or test apps, but is NOT included
-+### in the D-BUS client library (all symbols in here
-+### should be underscore-prefixed but don't really need
-+### to be unless they move to DBUS_SHARED_SOURCES later)
-+DBUS_UTIL_SOURCES= \
-+ dbus-auth-util.c \
-+ dbus-mainloop.c \
-+ dbus-mainloop.h \
-+ dbus-marshal-byteswap-util.c \
-+ dbus-marshal-recursive-util.c \
-+ dbus-marshal-validate-util.c \
-+ dbus-message-factory.c \
-+ dbus-message-factory.h \
-+ dbus-message-util.c \
-+ dbus-shell.c \
-+ dbus-shell.h \
-+ dbus-spawn.c \
-+ dbus-spawn.h \
-+ dbus-string-util.c \
-+ dbus-sysdeps-util.c \
-+ dbus-test.c \
-+ dbus-test.h \
-+ dbus-userdb-util.c
-+
-+libdbus_1_la_SOURCES= \
-+ $(DBUS_LIB_SOURCES) \
-+ $(DBUS_SHARED_SOURCES)
-+
-+libdbus_convenience_la_SOURCES= \
-+ $(DBUS_LIB_SOURCES) \
-+ $(DBUS_SHARED_SOURCES) \
-+ $(DBUS_UTIL_SOURCES)
-+
-+
-+BUILT_SOURCES=$(dbusarchinclude_HEADERS) $(DBUS_GLIB_BUILT_INCLUDES)
-+EXTRA_DIST=dbus-arch-deps.h.in make-dbus-glib-error-enum.sh
-+CLEANFILES=$(DBUS_GLIB_BUILT_INCLUDES)
-+
-+## this library is the same as libdbus, but exports all the symbols
-+## and is only used for static linking within the dbus package.
-+noinst_LTLIBRARIES=libdbus-convenience.la
-+
-+libdbus_1_la_LIBADD= $(DBUS_CLIENT_LIBS)
-+## don't export symbols that start with "_" (we use this
-+## convention for internal symbols)
-+libdbus_1_la_LDFLAGS= -export-symbols-regex "^[^_].*" -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -no-undefined
-+
-+## note that TESTS has special meaning (stuff to use in make check)
-+## so if adding tests not to be run in make check, don't add them to
-+## TESTS
-+if DBUS_BUILD_TESTS
-+TESTS_ENVIRONMENT=DBUS_TEST_DATA=$(top_builddir)/test/data DBUS_TEST_HOMEDIR=$(top_builddir)/dbus
-+TESTS=dbus-test
-+else
-+TESTS=
-+endif
-+
-+## we use noinst_PROGRAMS not check_PROGRAMS so that we build
-+## even when not doing "make check"
-+noinst_PROGRAMS=$(TESTS)
-+
-+dbus_test_SOURCES= \
-+ dbus-test-main.c
-+
-+dbus_test_LDADD=libdbus-convenience.la
-+
-+## mop up the gcov files
-+clean-local:
-+ /bin/rm *.bb *.bbg *.da *.gcov .libs/*.da .libs/*.bbg || true
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
diff -Naur dbus-0.61.orig/dbus/Makefile.in dbus-0.61/dbus/Makefile.in
---- dbus-0.61.orig/dbus/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/Makefile.in 2006-02-27 22:34:29.000000000 +0100
-@@ -0,0 +1,1009 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+noinst_PROGRAMS = $(am__EXEEXT_1)
-+subdir = dbus
-+DIST_COMMON = $(am__dbusinclude_HEADERS_DIST) \
-+ $(dbusarchinclude_HEADERS) $(srcdir)/Makefile.am \
-+ $(srcdir)/Makefile.in $(srcdir)/dbus-arch-deps.h.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES = dbus-arch-deps.h
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+am__installdirs = "$(DESTDIR)$(libdir)" \
-+ "$(DESTDIR)$(dbusarchincludedir)" \
-+ "$(DESTDIR)$(dbusincludedir)"
-+libLTLIBRARIES_INSTALL = $(INSTALL)
-+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
-+am__DEPENDENCIES_1 =
-+libdbus_1_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-+am__objects_1 = dbus-address.lo dbus-auth.lo dbus-auth-script.lo \
-+ dbus-bus.lo dbus-connection.lo dbus-errors.lo dbus-keyring.lo \
-+ dbus-marshal-header.lo dbus-marshal-byteswap.lo \
-+ dbus-marshal-recursive.lo dbus-marshal-validate.lo \
-+ dbus-message.lo dbus-object-tree.lo dbus-pending-call.lo \
-+ dbus-resources.lo dbus-server.lo dbus-server-debug-pipe.lo \
-+ dbus-server-unix.lo dbus-sha.lo dbus-signature.lo \
-+ dbus-timeout.lo dbus-threads.lo dbus-transport.lo \
-+ dbus-transport-unix.lo dbus-watch.lo
-+am__objects_2 = dbus-dataslot.lo dbus-hash.lo dbus-internals.lo \
-+ dbus-list.lo dbus-marshal-basic.lo dbus-memory.lo \
-+ dbus-mempool.lo dbus-string.lo dbus-sysdeps.lo dbus-userdb.lo
-+am_libdbus_1_la_OBJECTS = $(am__objects_1) $(am__objects_2)
-+libdbus_1_la_OBJECTS = $(am_libdbus_1_la_OBJECTS)
-+libdbus_convenience_la_LIBADD =
-+am__objects_3 = dbus-auth-util.lo dbus-mainloop.lo \
-+ dbus-marshal-byteswap-util.lo dbus-marshal-recursive-util.lo \
-+ dbus-marshal-validate-util.lo dbus-message-factory.lo \
-+ dbus-message-util.lo dbus-shell.lo dbus-spawn.lo \
-+ dbus-string-util.lo dbus-sysdeps-util.lo dbus-test.lo \
-+ dbus-userdb-util.lo
-+am_libdbus_convenience_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
-+ $(am__objects_3)
-+libdbus_convenience_la_OBJECTS = $(am_libdbus_convenience_la_OBJECTS)
-+ at DBUS_BUILD_TESTS_TRUE@am__EXEEXT_1 = dbus-test$(EXEEXT)
-+PROGRAMS = $(noinst_PROGRAMS)
-+am_dbus_test_OBJECTS = dbus-test-main.$(OBJEXT)
-+dbus_test_OBJECTS = $(am_dbus_test_OBJECTS)
-+dbus_test_DEPENDENCIES = libdbus-convenience.la
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(libdbus_1_la_SOURCES) $(libdbus_convenience_la_SOURCES) \
-+ $(dbus_test_SOURCES)
-+DIST_SOURCES = $(libdbus_1_la_SOURCES) \
-+ $(libdbus_convenience_la_SOURCES) $(dbus_test_SOURCES)
-+dbusarchincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-+am__dbusinclude_HEADERS_DIST = dbus.h dbus-address.h dbus-bus.h \
-+ dbus-connection.h dbus-errors.h dbus-macros.h dbus-memory.h \
-+ dbus-message.h dbus-pending-call.h dbus-protocol.h \
+--- dbus-0.61.orig/dbus/Makefile.in 2006-02-27 22:56:46.000000000 +0100
++++ dbus-0.61/dbus/Makefile.in 2006-02-27 22:57:24.000000000 +0100
+@@ -113,9 +113,9 @@
+ am__dbusinclude_HEADERS_DIST = dbus.h dbus-address.h dbus-bus.h \
+ dbus-connection.h dbus-errors.h dbus-macros.h dbus-memory.h \
+ dbus-message.h dbus-pending-call.h dbus-protocol.h \
+- dbus-server.h dbus-shared.h dbus-threads.h dbus-types.h \
+- dbus-glib.h dbus-glib-lowlevel.h dbus-glib-error-enum.h \
+- qdbus.h
+ dbus-server.h dbus-shared.h dbus-signature.h dbus-threads.h \
+ dbus-types.h dbus-glib.h dbus-glib-lowlevel.h \
+ dbus-glib-error-enum.h qdbus.h
-+dbusincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-+HEADERS = $(dbusarchinclude_HEADERS) $(dbusinclude_HEADERS)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) -DDBUS_COMPILATION
-+ at HAVE_GLIB_TRUE@DBUS_GLIB_BUILT_INCLUDES = \
-+ at HAVE_GLIB_TRUE@ dbus-glib-error-enum.h
-+
-+ at HAVE_GLIB_TRUE@GLIB_INCLUDES = \
-+ at HAVE_GLIB_TRUE@ dbus-glib.h \
-+ at HAVE_GLIB_TRUE@ dbus-glib-lowlevel.h \
-+ at HAVE_GLIB_TRUE@ $(DBUS_GLIB_BUILT_INCLUDES)
-+
-+ at HAVE_QT_TRUE@QT_INCLUDES = qdbus.h
-+dbusincludedir = $(includedir)/dbus-1.0/dbus
-+dbusarchincludedir = $(libdir)/dbus-1.0/include/dbus
-+lib_LTLIBRARIES = libdbus-1.la
-+dbusinclude_HEADERS = \
-+ dbus.h \
-+ dbus-address.h \
-+ dbus-bus.h \
-+ dbus-connection.h \
-+ dbus-errors.h \
-+ dbus-macros.h \
-+ dbus-memory.h \
-+ dbus-message.h \
-+ dbus-pending-call.h \
-+ dbus-protocol.h \
-+ dbus-server.h \
-+ dbus-shared.h \
+ dbusincludeHEADERS_INSTALL = $(INSTALL_HEADER)
+ HEADERS = $(dbusarchinclude_HEADERS) $(dbusinclude_HEADERS)
+ ETAGS = etags
+@@ -400,6 +400,7 @@
+ dbus-protocol.h \
+ dbus-server.h \
+ dbus-shared.h \
+ dbus-signature.h \
-+ dbus-threads.h \
-+ dbus-types.h \
-+ $(GLIB_INCLUDES) \
-+ $(QT_INCLUDES)
-+
-+dbusarchinclude_HEADERS = \
-+ dbus-arch-deps.h
-+
-+
-+### source code that goes in the installed client library
-+### and is specific to library functionality
-+DBUS_LIB_SOURCES = \
-+ dbus-address.c \
-+ dbus-auth.c \
-+ dbus-auth.h \
-+ dbus-auth-script.c \
-+ dbus-auth-script.h \
-+ dbus-bus.c \
-+ dbus-connection.c \
-+ dbus-connection-internal.h \
-+ dbus-errors.c \
-+ dbus-keyring.c \
-+ dbus-keyring.h \
-+ dbus-marshal-header.c \
-+ dbus-marshal-header.h \
-+ dbus-marshal-byteswap.c \
-+ dbus-marshal-byteswap.h \
-+ dbus-marshal-recursive.c \
-+ dbus-marshal-recursive.h \
-+ dbus-marshal-validate.c \
-+ dbus-marshal-validate.h \
-+ dbus-message.c \
-+ dbus-message-internal.h \
-+ dbus-message-private.h \
-+ dbus-object-tree.c \
-+ dbus-object-tree.h \
-+ dbus-pending-call.c \
-+ dbus-resources.c \
-+ dbus-resources.h \
-+ dbus-server.c \
-+ dbus-server-debug-pipe.c \
-+ dbus-server-debug-pipe.h \
-+ dbus-server-protected.h \
-+ dbus-server-unix.c \
-+ dbus-server-unix.h \
-+ dbus-sha.c \
-+ dbus-sha.h \
-+ dbus-signature.c \
-+ dbus-timeout.c \
-+ dbus-timeout.h \
-+ dbus-threads-internal.h \
-+ dbus-threads.c \
-+ dbus-transport.c \
-+ dbus-transport.h \
-+ dbus-transport-protected.h \
-+ dbus-transport-unix.c \
-+ dbus-transport-unix.h \
-+ dbus-watch.c \
-+ dbus-watch.h
-+
-+
-+### source code that goes in the installed client library
-+### AND is generic utility functionality used by the
-+### daemon or test programs (all symbols in here should
-+### be underscore-prefixed)
-+DBUS_SHARED_SOURCES = \
-+ dbus-dataslot.c \
-+ dbus-dataslot.h \
-+ dbus-hash.c \
-+ dbus-hash.h \
-+ dbus-internals.c \
-+ dbus-internals.h \
-+ dbus-list.c \
-+ dbus-list.h \
-+ dbus-marshal-basic.c \
-+ dbus-marshal-basic.h \
-+ dbus-memory.c \
-+ dbus-mempool.c \
-+ dbus-mempool.h \
-+ dbus-string.c \
-+ dbus-string.h \
-+ dbus-string-private.h \
-+ dbus-sysdeps.c \
-+ dbus-sysdeps.h \
-+ dbus-userdb.c \
-+ dbus-userdb.h
-+
-+
-+### source code that is generic utility functionality used
-+### by the bus daemon or test apps, but is NOT included
-+### in the D-BUS client library (all symbols in here
-+### should be underscore-prefixed but don't really need
-+### to be unless they move to DBUS_SHARED_SOURCES later)
-+DBUS_UTIL_SOURCES = \
-+ dbus-auth-util.c \
-+ dbus-mainloop.c \
-+ dbus-mainloop.h \
-+ dbus-marshal-byteswap-util.c \
-+ dbus-marshal-recursive-util.c \
-+ dbus-marshal-validate-util.c \
-+ dbus-message-factory.c \
-+ dbus-message-factory.h \
-+ dbus-message-util.c \
-+ dbus-shell.c \
-+ dbus-shell.h \
-+ dbus-spawn.c \
-+ dbus-spawn.h \
-+ dbus-string-util.c \
-+ dbus-sysdeps-util.c \
-+ dbus-test.c \
-+ dbus-test.h \
-+ dbus-userdb-util.c
-+
-+libdbus_1_la_SOURCES = \
-+ $(DBUS_LIB_SOURCES) \
-+ $(DBUS_SHARED_SOURCES)
-+
-+libdbus_convenience_la_SOURCES = \
-+ $(DBUS_LIB_SOURCES) \
-+ $(DBUS_SHARED_SOURCES) \
-+ $(DBUS_UTIL_SOURCES)
-+
-+BUILT_SOURCES = $(dbusarchinclude_HEADERS) $(DBUS_GLIB_BUILT_INCLUDES)
-+EXTRA_DIST = dbus-arch-deps.h.in make-dbus-glib-error-enum.sh
-+CLEANFILES = $(DBUS_GLIB_BUILT_INCLUDES)
-+noinst_LTLIBRARIES = libdbus-convenience.la
-+libdbus_1_la_LIBADD = $(DBUS_CLIENT_LIBS)
-+libdbus_1_la_LDFLAGS = -export-symbols-regex "^[^_].*" -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -no-undefined
-+ at DBUS_BUILD_TESTS_TRUE@TESTS_ENVIRONMENT = DBUS_TEST_DATA=$(top_builddir)/test/data DBUS_TEST_HOMEDIR=$(top_builddir)/dbus
-+ at DBUS_BUILD_TESTS_FALSE@TESTS =
-+ at DBUS_BUILD_TESTS_TRUE@TESTS = dbus-test
-+dbus_test_SOURCES = \
-+ dbus-test-main.c
-+
-+dbus_test_LDADD = libdbus-convenience.la
-+all: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu dbus/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu dbus/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+dbus-arch-deps.h: $(top_builddir)/config.status $(srcdir)/dbus-arch-deps.h.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ if test -f $$p; then \
-+ f=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-+ else :; fi; \
-+ done
-+
-+uninstall-libLTLIBRARIES:
-+ @$(NORMAL_UNINSTALL)
-+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ p=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
-+ done
-+
-+clean-libLTLIBRARIES:
-+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-+ test "$$dir" != "$$p" || dir=.; \
-+ echo "rm -f \"$${dir}/so_locations\""; \
-+ rm -f "$${dir}/so_locations"; \
-+ done
-+
-+clean-noinstLTLIBRARIES:
-+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-+ test "$$dir" != "$$p" || dir=.; \
-+ echo "rm -f \"$${dir}/so_locations\""; \
-+ rm -f "$${dir}/so_locations"; \
-+ done
-+libdbus-1.la: $(libdbus_1_la_OBJECTS) $(libdbus_1_la_DEPENDENCIES)
-+ $(LINK) -rpath $(libdir) $(libdbus_1_la_LDFLAGS) $(libdbus_1_la_OBJECTS) $(libdbus_1_la_LIBADD) $(LIBS)
-+libdbus-convenience.la: $(libdbus_convenience_la_OBJECTS) $(libdbus_convenience_la_DEPENDENCIES)
-+ $(LINK) $(libdbus_convenience_la_LDFLAGS) $(libdbus_convenience_la_OBJECTS) $(libdbus_convenience_la_LIBADD) $(LIBS)
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+dbus-test$(EXEEXT): $(dbus_test_OBJECTS) $(dbus_test_DEPENDENCIES)
-+ @rm -f dbus-test$(EXEEXT)
-+ $(LINK) $(dbus_test_LDFLAGS) $(dbus_test_OBJECTS) $(dbus_test_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-address.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-auth-script.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-auth-util.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-auth.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-bus.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-connection.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-dataslot.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-errors.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-hash.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-internals.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-keyring.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-list.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-mainloop.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-marshal-basic.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-marshal-byteswap-util.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-marshal-byteswap.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-marshal-header.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-marshal-recursive-util.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-marshal-recursive.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-marshal-validate-util.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-marshal-validate.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-memory.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-mempool.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-message-factory.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-message-util.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-message.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-object-tree.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-pending-call.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-resources.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-server-debug-pipe.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-server-unix.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-server.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-sha.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-shell.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-signature.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-spawn.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-string-util.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-string.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-sysdeps-util.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-sysdeps.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-test-main.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-test.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-threads.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-timeout.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-transport-unix.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-transport.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-userdb-util.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-userdb.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-watch.Plo at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-dbusarchincludeHEADERS: $(dbusarchinclude_HEADERS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(dbusarchincludedir)" || $(mkdir_p) "$(DESTDIR)$(dbusarchincludedir)"
-+ @list='$(dbusarchinclude_HEADERS)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(dbusarchincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(dbusarchincludedir)/$$f'"; \
-+ $(dbusarchincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(dbusarchincludedir)/$$f"; \
-+ done
-+
-+uninstall-dbusarchincludeHEADERS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(dbusarchinclude_HEADERS)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(dbusarchincludedir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(dbusarchincludedir)/$$f"; \
-+ done
-+install-dbusincludeHEADERS: $(dbusinclude_HEADERS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(dbusincludedir)" || $(mkdir_p) "$(DESTDIR)$(dbusincludedir)"
-+ @list='$(dbusinclude_HEADERS)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(dbusincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(dbusincludedir)/$$f'"; \
-+ $(dbusincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(dbusincludedir)/$$f"; \
-+ done
-+
-+uninstall-dbusincludeHEADERS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(dbusinclude_HEADERS)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(dbusincludedir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(dbusincludedir)/$$f"; \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+check-TESTS: $(TESTS)
-+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-+ srcdir=$(srcdir); export srcdir; \
-+ list='$(TESTS)'; \
-+ if test -n "$$list"; then \
-+ for tst in $$list; do \
-+ if test -f ./$$tst; then dir=./; \
-+ elif test -f $$tst; then dir=; \
-+ else dir="$(srcdir)/"; fi; \
-+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xpass=`expr $$xpass + 1`; \
-+ failed=`expr $$failed + 1`; \
-+ echo "XPASS: $$tst"; \
-+ ;; \
-+ *) \
-+ echo "PASS: $$tst"; \
-+ ;; \
-+ esac; \
-+ elif test $$? -ne 77; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xfail=`expr $$xfail + 1`; \
-+ echo "XFAIL: $$tst"; \
-+ ;; \
-+ *) \
-+ failed=`expr $$failed + 1`; \
-+ echo "FAIL: $$tst"; \
-+ ;; \
-+ esac; \
-+ else \
-+ skip=`expr $$skip + 1`; \
-+ echo "SKIP: $$tst"; \
-+ fi; \
-+ done; \
-+ if test "$$failed" -eq 0; then \
-+ if test "$$xfail" -eq 0; then \
-+ banner="All $$all tests passed"; \
-+ else \
-+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-+ fi; \
-+ else \
-+ if test "$$xpass" -eq 0; then \
-+ banner="$$failed of $$all tests failed"; \
-+ else \
-+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-+ fi; \
-+ fi; \
-+ dashes="$$banner"; \
-+ skipped=""; \
-+ if test "$$skip" -ne 0; then \
-+ skipped="($$skip tests were not run)"; \
-+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$skipped"; \
-+ fi; \
-+ report=""; \
-+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-+ report="Please report to $(PACKAGE_BUGREPORT)"; \
-+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$report"; \
-+ fi; \
-+ dashes=`echo "$$dashes" | sed s/./=/g`; \
-+ echo "$$dashes"; \
-+ echo "$$banner"; \
-+ test -z "$$skipped" || echo "$$skipped"; \
-+ test -z "$$report" || echo "$$report"; \
-+ echo "$$dashes"; \
-+ test "$$failed" -eq 0; \
-+ else :; fi
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-+check: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) check-am
-+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
-+installdirs:
-+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(dbusarchincludedir)" "$(DESTDIR)$(dbusincludedir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \
-+ clean-noinstLTLIBRARIES clean-noinstPROGRAMS mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am: install-dbusarchincludeHEADERS \
-+ install-dbusincludeHEADERS
-+
-+install-exec-am: install-libLTLIBRARIES
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-dbusarchincludeHEADERS \
-+ uninstall-dbusincludeHEADERS uninstall-info-am \
-+ uninstall-libLTLIBRARIES
-+
-+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
-+ clean-generic clean-libLTLIBRARIES clean-libtool clean-local \
-+ clean-noinstLTLIBRARIES clean-noinstPROGRAMS ctags distclean \
-+ distclean-compile distclean-generic distclean-libtool \
-+ distclean-tags distdir dvi dvi-am html html-am info info-am \
-+ install install-am install-data install-data-am \
-+ install-dbusarchincludeHEADERS install-dbusincludeHEADERS \
-+ install-exec install-exec-am install-info install-info-am \
-+ install-libLTLIBRARIES install-man install-strip installcheck \
-+ installcheck-am installdirs maintainer-clean \
-+ maintainer-clean-generic mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-+ tags uninstall uninstall-am uninstall-dbusarchincludeHEADERS \
-+ uninstall-dbusincludeHEADERS uninstall-info-am \
-+ uninstall-libLTLIBRARIES
-+
-+
-+ at HAVE_GLIB_TRUE@dbus-glib-error-enum.h: dbus-protocol.h make-dbus-glib-error-enum.sh
-+ at HAVE_GLIB_TRUE@ $(srcdir)/make-dbus-glib-error-enum.sh $(srcdir)/dbus-protocol.h $@
-+
-+clean-local:
-+ /bin/rm *.bb *.bbg *.da *.gcov .libs/*.da .libs/*.bbg || true
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/dbus/dbus-address.c dbus-0.61/dbus/dbus-address.c
---- dbus-0.61.orig/dbus/dbus-address.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-address.c 2005-08-01 20:59:02.000000000 +0200
-@@ -0,0 +1,768 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-address.c Server address parser.
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2004,2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "dbus-address.h"
-+#include "dbus-internals.h"
-+#include "dbus-list.h"
-+#include "dbus-string.h"
-+#include "dbus-protocol.h"
-+
-+/**
-+ * @defgroup DBusAddressInternals Address parsing
-+ * @ingroup DBusInternals
-+ * @brief Implementation of parsing addresses of D-BUS servers.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Internals of DBusAddressEntry
-+ */
-+struct DBusAddressEntry
-+{
-+ DBusString method; /**< The address type (unix, tcp, etc.) */
-+
-+ DBusList *keys; /**< List of keys */
-+ DBusList *values; /**< List of values */
-+};
-+
-+/** @} */ /* End of internals */
-+
-+static void
-+dbus_address_entry_free (DBusAddressEntry *entry)
-+{
-+ DBusList *link;
-+
-+ _dbus_string_free (&entry->method);
-+
-+ link = _dbus_list_get_first_link (&entry->keys);
-+ while (link != NULL)
-+ {
-+ _dbus_string_free (link->data);
-+ dbus_free (link->data);
-+
-+ link = _dbus_list_get_next_link (&entry->keys, link);
-+ }
-+ _dbus_list_clear (&entry->keys);
-+
-+ link = _dbus_list_get_first_link (&entry->values);
-+ while (link != NULL)
-+ {
-+ _dbus_string_free (link->data);
-+ dbus_free (link->data);
-+
-+ link = _dbus_list_get_next_link (&entry->values, link);
-+ }
-+ _dbus_list_clear (&entry->values);
-+
-+ dbus_free (entry);
-+}
-+
-+/**
-+ * @defgroup DBusAddress Address parsing
-+ * @ingroup DBus
-+ * @brief Parsing addresses of D-BUS servers.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Frees a #NULL-terminated array of address entries.
-+ *
-+ * @param entries the array.
-+ */
-+void
-+dbus_address_entries_free (DBusAddressEntry **entries)
-+{
-+ int i;
-+
-+ for (i = 0; entries[i] != NULL; i++)
-+ dbus_address_entry_free (entries[i]);
-+ dbus_free (entries);
-+}
-+
-+static DBusAddressEntry *
-+create_entry (void)
-+{
-+ DBusAddressEntry *entry;
-+
-+ entry = dbus_new0 (DBusAddressEntry, 1);
-+
-+ if (entry == NULL)
-+ return NULL;
-+
-+ if (!_dbus_string_init (&entry->method))
-+ {
-+ dbus_free (entry);
-+ return NULL;
-+ }
-+
-+ return entry;
-+}
-+
-+/**
-+ * Returns the method string of an address entry.
-+ *
-+ * @param entry the entry.
-+ * @returns a string describing the method. This string
-+ * must not be freed.
-+ */
-+const char *
-+dbus_address_entry_get_method (DBusAddressEntry *entry)
-+{
-+ return _dbus_string_get_const_data (&entry->method);
-+}
-+
-+/**
-+ * Returns a value from a key of an entry.
-+ *
-+ * @param entry the entry.
-+ * @param key the key.
-+ * @returns the key value. This string must not be freed.
-+ */
-+const char *
-+dbus_address_entry_get_value (DBusAddressEntry *entry,
-+ const char *key)
-+{
-+ DBusList *values, *keys;
-+
-+ keys = _dbus_list_get_first_link (&entry->keys);
-+ values = _dbus_list_get_first_link (&entry->values);
-+
-+ while (keys != NULL)
-+ {
-+ _dbus_assert (values != NULL);
-+
-+ if (_dbus_string_equal_c_str (keys->data, key))
-+ return _dbus_string_get_const_data (values->data);
-+
-+ keys = _dbus_list_get_next_link (&entry->keys, keys);
-+ values = _dbus_list_get_next_link (&entry->values, values);
-+ }
-+
-+ return NULL;
-+}
-+
-+#define _DBUS_ADDRESS_OPTIONALLY_ESCAPED_BYTE(b) \
-+ (((b) >= 'a' && (b) <= 'z') || \
-+ ((b) >= 'A' && (b) <= 'Z') || \
-+ ((b) >= '0' && (b) <= '9') || \
-+ (b) == '-' || \
-+ (b) == '_' || \
-+ (b) == '/' || \
-+ (b) == '\\' || \
-+ (b) == '.')
-+
-+/**
-+ * Appends an escaped version of one string to another string,
-+ * using the D-BUS address escaping mechanism
-+ *
-+ * @param escaped the string to append to
-+ * @param unescaped the string to escape
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_address_append_escaped (DBusString *escaped,
-+ const DBusString *unescaped)
-+{
-+ const char *p;
-+ const char *end;
-+ dbus_bool_t ret;
-+ int orig_len;
-+
-+ ret = FALSE;
-+
-+ orig_len = _dbus_string_get_length (escaped);
-+ p = _dbus_string_get_const_data (unescaped);
-+ end = p + _dbus_string_get_length (unescaped);
-+ while (p != end)
-+ {
-+ if (_DBUS_ADDRESS_OPTIONALLY_ESCAPED_BYTE (*p))
-+ {
-+ if (!_dbus_string_append_byte (escaped, *p))
-+ goto out;
-+ }
-+ else
-+ {
-+ if (!_dbus_string_append_byte (escaped, '%'))
-+ goto out;
-+ if (!_dbus_string_append_byte_as_hex (escaped, *p))
-+ goto out;
-+ }
-+
-+ ++p;
-+ }
-+
-+ ret = TRUE;
-+
-+ out:
-+ if (!ret)
-+ _dbus_string_set_length (escaped, orig_len);
-+ return ret;
-+}
-+
-+static dbus_bool_t
-+append_unescaped_value (DBusString *unescaped,
-+ const DBusString *escaped,
-+ int escaped_start,
-+ int escaped_len,
-+ DBusError *error)
-+{
-+ const char *p;
-+ const char *end;
-+ dbus_bool_t ret;
-+
-+ ret = FALSE;
-+
-+ p = _dbus_string_get_const_data (escaped) + escaped_start;
-+ end = p + escaped_len;
-+ while (p != end)
-+ {
-+ if (_DBUS_ADDRESS_OPTIONALLY_ESCAPED_BYTE (*p))
-+ {
-+ if (!_dbus_string_append_byte (unescaped, *p))
-+ goto out;
-+ }
-+ else if (*p == '%')
-+ {
-+ /* Efficiency is king */
-+ char buf[3];
-+ DBusString hex;
-+ int hex_end;
-+
-+ ++p;
-+
-+ if ((p + 2) > end)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "In D-BUS address, percent character was not followed by two hex digits");
-+ goto out;
-+ }
-+
-+ buf[0] = *p;
-+ ++p;
-+ buf[1] = *p;
-+ buf[2] = '\0';
-+
-+ _dbus_string_init_const (&hex, buf);
-+
-+ if (!_dbus_string_hex_decode (&hex, 0, &hex_end,
-+ unescaped,
-+ _dbus_string_get_length (unescaped)))
-+ goto out;
-+
-+ if (hex_end != 2)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "In D-BUS address, percent character was followed by characters other than hex digits");
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ /* Error, should have been escaped */
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "In D-BUS address, character '%c' should have been escaped\n",
-+ *p);
-+ goto out;
-+ }
-+
-+ ++p;
-+ }
-+
-+ ret = TRUE;
-+
-+ out:
-+ if (!ret && error && !dbus_error_is_set (error))
-+ _DBUS_SET_OOM (error);
-+
-+ _dbus_assert (ret || error == NULL || dbus_error_is_set (error));
-+
-+ return ret;
-+}
-+
-+/**
-+ * Parses an address string of the form:
-+ *
-+ * method:key=value,key=value;method:key=value
-+ *
-+ * See the D-BUS specification for complete docs on the format.
-+ *
-+ * @param address the address.
-+ * @param entry return location to an array of entries.
-+ * @param array_len return location for array length.
-+ * @param error address where an error can be returned.
-+ * @returns #TRUE on success, #FALSE otherwise.
-+ */
-+dbus_bool_t
-+dbus_parse_address (const char *address,
-+ DBusAddressEntry ***entry,
-+ int *array_len,
-+ DBusError *error)
-+{
-+ DBusString str;
-+ int pos, end_pos, len, i;
-+ DBusList *entries, *link;
-+ DBusAddressEntry **entry_array;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ _dbus_string_init_const (&str, address);
-+
-+ entries = NULL;
-+ pos = 0;
-+ len = _dbus_string_get_length (&str);
-+
-+ while (pos < len)
-+ {
-+ DBusAddressEntry *entry;
-+
-+ int found_pos;
-+
-+ entry = create_entry ();
-+ if (!entry)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+
-+ goto error;
-+ }
-+
-+ /* Append the entry */
-+ if (!_dbus_list_append (&entries, entry))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ dbus_address_entry_free (entry);
-+ goto error;
-+ }
-+
-+ /* Look for a semi-colon */
-+ if (!_dbus_string_find (&str, pos, ";", &end_pos))
-+ end_pos = len;
-+
-+ /* Look for the colon : */
-+ if (!_dbus_string_find_to (&str, pos, end_pos, ":", &found_pos))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS, "Address does not contain a colon");
-+ goto error;
-+ }
-+
-+ if (!_dbus_string_copy_len (&str, pos, found_pos - pos, &entry->method, 0))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto error;
-+ }
-+
-+ pos = found_pos + 1;
-+
-+ while (pos < end_pos)
-+ {
-+ int comma_pos, equals_pos;
-+
-+ if (!_dbus_string_find_to (&str, pos, end_pos, ",", &comma_pos))
-+ comma_pos = end_pos;
-+
-+ if (!_dbus_string_find_to (&str, pos, comma_pos, "=", &equals_pos) ||
-+ equals_pos == pos || equals_pos + 1 == comma_pos)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "'=' character not found or has no value following it");
-+ goto error;
-+ }
-+ else
-+ {
-+ DBusString *key;
-+ DBusString *value;
-+
-+ key = dbus_new0 (DBusString, 1);
-+
-+ if (!key)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto error;
-+ }
-+
-+ value = dbus_new0 (DBusString, 1);
-+ if (!value)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ dbus_free (key);
-+ goto error;
-+ }
-+
-+ if (!_dbus_string_init (key))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ dbus_free (key);
-+ dbus_free (value);
-+
-+ goto error;
-+ }
-+
-+ if (!_dbus_string_init (value))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (key);
-+
-+ dbus_free (key);
-+ dbus_free (value);
-+ goto error;
-+ }
-+
-+ if (!_dbus_string_copy_len (&str, pos, equals_pos - pos, key, 0))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (key);
-+ _dbus_string_free (value);
-+
-+ dbus_free (key);
-+ dbus_free (value);
-+ goto error;
-+ }
-+
-+ if (!append_unescaped_value (value, &str, equals_pos + 1,
-+ comma_pos - equals_pos - 1, error))
-+ {
-+ _dbus_assert (error == NULL || dbus_error_is_set (error));
-+ _dbus_string_free (key);
-+ _dbus_string_free (value);
-+
-+ dbus_free (key);
-+ dbus_free (value);
-+ goto error;
-+ }
-+
-+ if (!_dbus_list_append (&entry->keys, key))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (key);
-+ _dbus_string_free (value);
-+
-+ dbus_free (key);
-+ dbus_free (value);
-+ goto error;
-+ }
-+
-+ if (!_dbus_list_append (&entry->values, value))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (value);
-+
-+ dbus_free (value);
-+ goto error;
-+ }
-+ }
-+
-+ pos = comma_pos + 1;
-+ }
-+
-+ pos = end_pos + 1;
-+ }
-+
-+ *array_len = _dbus_list_get_length (&entries);
-+
-+ entry_array = dbus_new (DBusAddressEntry *, *array_len + 1);
-+
-+ if (!entry_array)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+
-+ goto error;
-+ }
-+
-+ entry_array [*array_len] = NULL;
-+
-+ link = _dbus_list_get_first_link (&entries);
-+ i = 0;
-+ while (link != NULL)
-+ {
-+ entry_array[i] = link->data;
-+ i++;
-+ link = _dbus_list_get_next_link (&entries, link);
-+ }
-+
-+ _dbus_list_clear (&entries);
-+ *entry = entry_array;
-+
-+ return TRUE;
-+
-+ error:
-+
-+ link = _dbus_list_get_first_link (&entries);
-+ while (link != NULL)
-+ {
-+ dbus_address_entry_free (link->data);
-+ link = _dbus_list_get_next_link (&entries, link);
-+ }
-+
-+ _dbus_list_clear (&entries);
-+
-+ return FALSE;
-+
-+}
-+
-+/**
-+ * Escapes the given string as a value in a key=value pair
-+ * for a D-BUS address.
-+ *
-+ * @param value the unescaped value
-+ * @returns newly-allocated escaped value or #NULL if no memory
-+ */
-+char*
-+dbus_address_escape_value (const char *value)
-+{
-+ DBusString escaped;
-+ DBusString unescaped;
-+ char *ret;
-+
-+ ret = NULL;
-+
-+ _dbus_string_init_const (&unescaped, value);
-+
-+ if (!_dbus_string_init (&escaped))
-+ return NULL;
-+
-+ if (!_dbus_address_append_escaped (&escaped, &unescaped))
-+ goto out;
-+
-+ if (!_dbus_string_steal_data (&escaped, &ret))
-+ goto out;
-+
-+ out:
-+ _dbus_string_free (&escaped);
-+ return ret;
-+}
-+
-+/**
-+ * Unescapes the given string as a value in a key=value pair
-+ * for a D-BUS address.
-+ *
-+ * @param value the escaped value
-+ * @param error error to set if the unescaping fails
-+ * @returns newly-allocated unescaped value or #NULL if no memory
-+ */
-+char*
-+dbus_address_unescape_value (const char *value,
-+ DBusError *error)
-+{
-+ DBusString unescaped;
-+ DBusString escaped;
-+ char *ret;
-+
-+ ret = NULL;
-+
-+ _dbus_string_init_const (&escaped, value);
-+
-+ if (!_dbus_string_init (&unescaped))
-+ return NULL;
-+
-+ if (!append_unescaped_value (&unescaped, &escaped,
-+ 0, _dbus_string_get_length (&escaped),
-+ error))
-+ goto out;
-+
-+ if (!_dbus_string_steal_data (&unescaped, &ret))
-+ goto out;
-+
-+ out:
-+ if (ret == NULL && error && !dbus_error_is_set (error))
-+ _DBUS_SET_OOM (error);
-+
-+ _dbus_assert (ret != NULL || error == NULL || dbus_error_is_set (error));
-+
-+ _dbus_string_free (&unescaped);
-+ return ret;
-+}
-+
-+/** @} */ /* End of public API */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdlib.h>
-+
-+typedef struct
-+{
-+ const char *escaped;
-+ const char *unescaped;
-+} EscapeTest;
-+
-+static const EscapeTest escape_tests[] = {
-+ { "abcde", "abcde" },
-+ { "", "" },
-+ { "%20%20", " " },
-+ { "%24", "$" },
-+ { "%25", "%" },
-+ { "abc%24", "abc$" },
-+ { "%24abc", "$abc" },
-+ { "abc%24abc", "abc$abc" },
-+ { "/", "/" },
-+ { "-", "-" },
-+ { "_", "_" },
-+ { "A", "A" },
-+ { "I", "I" },
-+ { "Z", "Z" },
-+ { "a", "a" },
-+ { "i", "i" },
-+ { "z", "z" }
-+};
-+
-+static const char* invalid_escaped_values[] = {
-+ "%a",
-+ "%q",
-+ "%az",
-+ "%%",
-+ "%$$",
-+ "abc%a",
-+ "%axyz",
-+ "%",
-+ "$",
-+ " ",
-+ "*"
-+};
-+
-+dbus_bool_t
-+_dbus_address_test (void)
-+{
-+ DBusAddressEntry **entries;
-+ int len;
-+ DBusError error;
-+ int i;
-+
-+ dbus_error_init (&error);
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (escape_tests))
-+ {
-+ const EscapeTest *test = &escape_tests[i];
-+ char *escaped;
-+ char *unescaped;
-+
-+ escaped = dbus_address_escape_value (test->unescaped);
-+ if (escaped == NULL)
-+ _dbus_assert_not_reached ("oom");
-+
-+ if (strcmp (escaped, test->escaped) != 0)
-+ {
-+ _dbus_warn ("Escaped '%s' as '%s' should have been '%s'\n",
-+ test->unescaped, escaped, test->escaped);
-+ exit (1);
-+ }
-+ dbus_free (escaped);
-+
-+ unescaped = dbus_address_unescape_value (test->escaped, &error);
-+ if (unescaped == NULL)
-+ {
-+ _dbus_warn ("Failed to unescape '%s': %s\n",
-+ test->escaped, error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ if (strcmp (unescaped, test->unescaped) != 0)
-+ {
-+ _dbus_warn ("Unescaped '%s' as '%s' should have been '%s'\n",
-+ test->escaped, unescaped, test->unescaped);
-+ exit (1);
-+ }
-+ dbus_free (unescaped);
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (invalid_escaped_values))
-+ {
-+ char *unescaped;
-+
-+ unescaped = dbus_address_unescape_value (invalid_escaped_values[i],
-+ &error);
-+ if (unescaped != NULL)
-+ {
-+ _dbus_warn ("Should not have successfully unescaped '%s' to '%s'\n",
-+ invalid_escaped_values[i], unescaped);
-+ dbus_free (unescaped);
-+ exit (1);
-+ }
-+
-+ _dbus_assert (dbus_error_is_set (&error));
-+ dbus_error_free (&error);
-+
-+ ++i;
-+ }
-+
-+ if (!dbus_parse_address ("unix:path=/tmp/foo;debug:name=test,sliff=sloff;",
-+ &entries, &len, &error))
-+ _dbus_assert_not_reached ("could not parse address");
-+ _dbus_assert (len == 2);
-+ _dbus_assert (strcmp (dbus_address_entry_get_value (entries[0], "path"), "/tmp/foo") == 0);
-+ _dbus_assert (strcmp (dbus_address_entry_get_value (entries[1], "name"), "test") == 0);
-+ _dbus_assert (strcmp (dbus_address_entry_get_value (entries[1], "sliff"), "sloff") == 0);
-+
-+ dbus_address_entries_free (entries);
-+
-+ /* Different possible errors */
-+ if (dbus_parse_address ("foo", &entries, &len, &error))
-+ _dbus_assert_not_reached ("Parsed incorrect address.");
-+ else
-+ dbus_error_free (&error);
-+
-+ if (dbus_parse_address ("foo:bar", &entries, &len, &error))
-+ _dbus_assert_not_reached ("Parsed incorrect address.");
-+ else
-+ dbus_error_free (&error);
-+
-+ if (dbus_parse_address ("foo:bar,baz", &entries, &len, &error))
-+ _dbus_assert_not_reached ("Parsed incorrect address.");
-+ else
-+ dbus_error_free (&error);
-+
-+ if (dbus_parse_address ("foo:bar=foo,baz", &entries, &len, &error))
-+ _dbus_assert_not_reached ("Parsed incorrect address.");
-+ else
-+ dbus_error_free (&error);
-+
-+ if (dbus_parse_address ("foo:bar=foo;baz", &entries, &len, &error))
-+ _dbus_assert_not_reached ("Parsed incorrect address.");
-+ else
-+ dbus_error_free (&error);
-+
-+ if (dbus_parse_address ("foo:=foo", &entries, &len, &error))
-+ _dbus_assert_not_reached ("Parsed incorrect address.");
-+ else
-+ dbus_error_free (&error);
-+
-+ if (dbus_parse_address ("foo:foo=", &entries, &len, &error))
-+ _dbus_assert_not_reached ("Parsed incorrect address.");
-+ else
-+ dbus_error_free (&error);
-+
-+ if (dbus_parse_address ("foo:foo,bar=baz", &entries, &len, &error))
-+ _dbus_assert_not_reached ("Parsed incorrect address.");
-+ else
-+ dbus_error_free (&error);
-+
-+ return TRUE;
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/dbus/dbus-address.h dbus-0.61/dbus/dbus-address.h
---- dbus-0.61.orig/dbus/dbus-address.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-address.h 2005-02-11 04:37:03.000000000 +0100
-@@ -0,0 +1,49 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-address.h Server address parser.
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_ADDRESS_H
-+#define DBUS_ADDRESS_H
-+
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-errors.h>
-+
-+typedef struct DBusAddressEntry DBusAddressEntry;
-+
-+dbus_bool_t dbus_parse_address (const char *address,
-+ DBusAddressEntry ***entry,
-+ int *array_len,
-+ DBusError *error);
-+const char *dbus_address_entry_get_value (DBusAddressEntry *entry,
-+ const char *key);
-+const char *dbus_address_entry_get_method (DBusAddressEntry *entry);
-+void dbus_address_entries_free (DBusAddressEntry **entries);
-+
-+char* dbus_address_escape_value (const char *value);
-+char* dbus_address_unescape_value (const char *value,
-+ DBusError *error);
-+
-+#endif /* DBUS_ADDRESS_H */
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-arch-deps.h dbus-0.61/dbus/dbus-arch-deps.h
---- dbus-0.61.orig/dbus/dbus-arch-deps.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-arch-deps.h 2006-02-24 17:37:56.000000000 +0100
-@@ -0,0 +1,56 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-arch-deps.h Header with architecture/compiler specific information, installed to libdir
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.0
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_ARCH_DEPS_H
-+#define DBUS_ARCH_DEPS_H
-+
-+#include <dbus/dbus-macros.h>
-+
-+DBUS_BEGIN_DECLS;
-+
-+#if 1
-+#define DBUS_HAVE_INT64 1
-+typedef long long dbus_int64_t;
-+typedef unsigned long long dbus_uint64_t;
-+
-+#define DBUS_INT64_CONSTANT(val) (val##LL)
-+#define DBUS_UINT64_CONSTANT(val) (val##ULL)
-+
-+#else
-+#undef DBUS_HAVE_INT64
-+#undef DBUS_INT64_CONSTANT
-+#undef DBUS_UINT64_CONSTANT
-+#endif
-+
-+typedef int dbus_int32_t;
-+typedef unsigned int dbus_uint32_t;
-+
-+typedef short dbus_int16_t;
-+typedef unsigned short dbus_uint16_t;
-+
-+DBUS_END_DECLS;
-+
-+#endif /* DBUS_ARCH_DEPS_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-arch-deps.h.in dbus-0.61/dbus/dbus-arch-deps.h.in
---- dbus-0.61.orig/dbus/dbus-arch-deps.h.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-arch-deps.h.in 2005-01-28 04:06:55.000000000 +0100
-@@ -0,0 +1,56 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-arch-deps.h Header with architecture/compiler specific information, installed to libdir
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.0
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_ARCH_DEPS_H
-+#define DBUS_ARCH_DEPS_H
-+
-+#include <dbus/dbus-macros.h>
-+
-+DBUS_BEGIN_DECLS;
-+
-+#if @DBUS_HAVE_INT64@
-+#define DBUS_HAVE_INT64 1
-+typedef @DBUS_INT64_TYPE@ dbus_int64_t;
-+typedef unsigned @DBUS_INT64_TYPE@ dbus_uint64_t;
-+
-+#define DBUS_INT64_CONSTANT(val) @DBUS_INT64_CONSTANT@
-+#define DBUS_UINT64_CONSTANT(val) @DBUS_UINT64_CONSTANT@
-+
-+#else
-+#undef DBUS_HAVE_INT64
-+#undef DBUS_INT64_CONSTANT
-+#undef DBUS_UINT64_CONSTANT
-+#endif
-+
-+typedef @DBUS_INT32_TYPE@ dbus_int32_t;
-+typedef unsigned @DBUS_INT32_TYPE@ dbus_uint32_t;
-+
-+typedef @DBUS_INT16_TYPE@ dbus_int16_t;
-+typedef unsigned @DBUS_INT16_TYPE@ dbus_uint16_t;
-+
-+DBUS_END_DECLS;
-+
-+#endif /* DBUS_ARCH_DEPS_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-auth-script.c dbus-0.61/dbus/dbus-auth-script.c
---- dbus-0.61.orig/dbus/dbus-auth-script.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-auth-script.c 2005-02-26 07:37:46.000000000 +0100
-@@ -0,0 +1,692 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-auth-script.c Test DBusAuth using a special script file (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <config.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+#include "dbus-auth-script.h"
-+#include "dbus-auth.h"
-+#include "dbus-string.h"
-+#include "dbus-hash.h"
-+#include "dbus-internals.h"
-+#include "dbus-userdb.h"
-+
-+/**
-+ * @defgroup DBusAuthScript code for running unit test scripts for DBusAuth
-+ * @ingroup DBusInternals
-+ * @brief DBusAuth unit test scripting
-+ *
-+ * The code in here is used for unit testing, it loads
-+ * up a script that tests DBusAuth.
-+ *
-+ * @{
-+ */
-+
-+/* this is slightly different from the other append_quoted_string
-+ * in dbus-message-builder.c
-+ */
-+static dbus_bool_t
-+append_quoted_string (DBusString *dest,
-+ const DBusString *quoted)
-+{
-+ dbus_bool_t in_quotes = FALSE;
-+ dbus_bool_t in_backslash = FALSE;
-+ int i;
-+
-+ i = 0;
-+ while (i < _dbus_string_get_length (quoted))
-+ {
-+ unsigned char b;
-+
-+ b = _dbus_string_get_byte (quoted, i);
-+
-+ if (in_backslash)
-+ {
-+ unsigned char a;
-+
-+ if (b == 'r')
-+ a = '\r';
-+ else if (b == 'n')
-+ a = '\n';
-+ else if (b == '\\')
-+ a = '\\';
-+ else
-+ {
-+ _dbus_warn ("bad backslashed byte %c\n", b);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append_byte (dest, a))
-+ return FALSE;
-+
-+ in_backslash = FALSE;
-+ }
-+ else if (b == '\\')
-+ {
-+ in_backslash = TRUE;
-+ }
-+ else if (in_quotes)
-+ {
-+ if (b == '\'')
-+ in_quotes = FALSE;
-+ else
-+ {
-+ if (!_dbus_string_append_byte (dest, b))
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ if (b == '\'')
-+ in_quotes = TRUE;
-+ else if (b == ' ' || b == '\n' || b == '\t')
-+ break; /* end on whitespace if not quoted */
-+ else
-+ {
-+ if (!_dbus_string_append_byte (dest, b))
-+ return FALSE;
-+ }
-+ }
-+
-+ ++i;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+same_first_word (const DBusString *a,
-+ const DBusString *b)
-+{
-+ int first_a_blank, first_b_blank;
-+
-+ _dbus_string_find_blank (a, 0, &first_a_blank);
-+ _dbus_string_find_blank (b, 0, &first_b_blank);
-+
-+ if (first_a_blank != first_b_blank)
-+ return FALSE;
-+
-+ return _dbus_string_equal_len (a, b, first_a_blank);
-+}
-+
-+static DBusAuthState
-+auth_state_from_string (const DBusString *str)
-+{
-+ if (_dbus_string_starts_with_c_str (str, "WAITING_FOR_INPUT"))
-+ return DBUS_AUTH_STATE_WAITING_FOR_INPUT;
-+ else if (_dbus_string_starts_with_c_str (str, "WAITING_FOR_MEMORY"))
-+ return DBUS_AUTH_STATE_WAITING_FOR_MEMORY;
-+ else if (_dbus_string_starts_with_c_str (str, "HAVE_BYTES_TO_SEND"))
-+ return DBUS_AUTH_STATE_HAVE_BYTES_TO_SEND;
-+ else if (_dbus_string_starts_with_c_str (str, "NEED_DISCONNECT"))
-+ return DBUS_AUTH_STATE_NEED_DISCONNECT;
-+ else if (_dbus_string_starts_with_c_str (str, "AUTHENTICATED"))
-+ return DBUS_AUTH_STATE_AUTHENTICATED;
-+ else
-+ return -1;
-+}
-+
-+static const char*
-+auth_state_to_string (DBusAuthState state)
-+{
-+ switch (state)
-+ {
-+ case DBUS_AUTH_STATE_WAITING_FOR_INPUT:
-+ return "WAITING_FOR_INPUT";
-+ case DBUS_AUTH_STATE_WAITING_FOR_MEMORY:
-+ return "WAITING_FOR_MEMORY";
-+ case DBUS_AUTH_STATE_HAVE_BYTES_TO_SEND:
-+ return "HAVE_BYTES_TO_SEND";
-+ case DBUS_AUTH_STATE_NEED_DISCONNECT:
-+ return "NEED_DISCONNECT";
-+ case DBUS_AUTH_STATE_AUTHENTICATED:
-+ return "AUTHENTICATED";
-+ }
-+
-+ return "unknown";
-+}
-+
-+static char **
-+split_string (DBusString *str)
-+{
-+ int i, j, k, count, end;
-+ char **array;
-+
-+ end = _dbus_string_get_length (str);
-+
-+ i = 0;
-+ _dbus_string_skip_blank (str, i, &i);
-+ for (count = 0; i < end; count++)
-+ {
-+ _dbus_string_find_blank (str, i, &i);
-+ _dbus_string_skip_blank (str, i, &i);
-+ }
-+
-+ array = dbus_new0 (char *, count + 1);
-+ if (array == NULL)
-+ return NULL;
-+
-+ i = 0;
-+ _dbus_string_skip_blank (str, i, &i);
-+ for (k = 0; k < count; k++)
-+ {
-+ _dbus_string_find_blank (str, i, &j);
-+
-+ array[k] = dbus_malloc (j - i + 1);
-+ if (array[k] == NULL)
-+ {
-+ dbus_free_string_array (array);
-+ return NULL;
-+ }
-+ memcpy (array[k],
-+ _dbus_string_get_const_data_len (str, i, j - i), j - i);
-+ array[k][j - i] = '\0';
-+
-+ _dbus_string_skip_blank (str, j, &i);
-+ }
-+ array[k] = NULL;
-+
-+ return array;
-+}
-+
-+/**
-+ * Runs an "auth script" which is a script for testing the
-+ * authentication protocol. Scripts send and receive data, and then
-+ * include assertions about the state of both ends of the connection
-+ * after processing the data. A script succeeds if these assertions
-+ * hold.
-+ *
-+ * @param filename the file containing the script to run
-+ * @returns #TRUE if the script succeeds, #FALSE otherwise
-+ */
-+dbus_bool_t
-+_dbus_auth_script_run (const DBusString *filename)
-+{
-+ DBusString file;
-+ DBusError error;
-+ DBusString line;
-+ dbus_bool_t retval;
-+ int line_no;
-+ DBusAuth *auth;
-+ DBusString from_auth;
-+ DBusAuthState state;
-+ DBusString context;
-+ DBusString guid;
-+
-+ retval = FALSE;
-+ auth = NULL;
-+
-+ _dbus_string_init_const (&guid, "5fa01f4202cd837709a3274ca0df9d00");
-+ _dbus_string_init_const (&context, "org_freedesktop_test");
-+
-+ if (!_dbus_string_init (&file))
-+ return FALSE;
-+
-+ if (!_dbus_string_init (&line))
-+ {
-+ _dbus_string_free (&file);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&from_auth))
-+ {
-+ _dbus_string_free (&file);
-+ _dbus_string_free (&line);
-+ return FALSE;
-+ }
-+
-+ dbus_error_init (&error);
-+ if (!_dbus_file_get_contents (&file, filename, &error)) {
-+ _dbus_warn ("Getting contents of %s failed: %s\n",
-+ _dbus_string_get_const_data (filename), error.message);
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+
-+ state = DBUS_AUTH_STATE_NEED_DISCONNECT;
-+ line_no = 0;
-+ next_iteration:
-+ while (_dbus_string_pop_line (&file, &line))
-+ {
-+ line_no += 1;
-+
-+ _dbus_string_delete_leading_blanks (&line);
-+
-+ if (auth != NULL)
-+ {
-+ while ((state = _dbus_auth_do_work (auth)) ==
-+ DBUS_AUTH_STATE_HAVE_BYTES_TO_SEND)
-+ {
-+ const DBusString *tmp;
-+ if (_dbus_auth_get_bytes_to_send (auth, &tmp))
-+ {
-+ int count = _dbus_string_get_length (tmp);
-+
-+ if (_dbus_string_copy (tmp, 0, &from_auth,
-+ _dbus_string_get_length (&from_auth)))
-+ _dbus_auth_bytes_sent (auth, count);
-+ }
-+ }
-+ }
-+
-+ if (_dbus_string_get_length (&line) == 0)
-+ {
-+ /* empty line */
-+ goto next_iteration;
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "#"))
-+ {
-+ /* Ignore this comment */
-+ goto next_iteration;
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "CLIENT"))
-+ {
-+ DBusCredentials creds;
-+
-+ if (auth != NULL)
-+ {
-+ _dbus_warn ("already created a DBusAuth (CLIENT or SERVER given twice)\n");
-+ goto out;
-+ }
-+
-+ auth = _dbus_auth_client_new ();
-+ if (auth == NULL)
-+ {
-+ _dbus_warn ("no memory to create DBusAuth\n");
-+ goto out;
-+ }
-+
-+ /* test ref/unref */
-+ _dbus_auth_ref (auth);
-+ _dbus_auth_unref (auth);
-+
-+ _dbus_credentials_from_current_process (&creds);
-+ _dbus_auth_set_credentials (auth, &creds);
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "SERVER"))
-+ {
-+ DBusCredentials creds;
-+
-+ if (auth != NULL)
-+ {
-+ _dbus_warn ("already created a DBusAuth (CLIENT or SERVER given twice)\n");
-+ goto out;
-+ }
-+
-+ auth = _dbus_auth_server_new (&guid);
-+ if (auth == NULL)
-+ {
-+ _dbus_warn ("no memory to create DBusAuth\n");
-+ goto out;
-+ }
-+
-+ /* test ref/unref */
-+ _dbus_auth_ref (auth);
-+ _dbus_auth_unref (auth);
-+
-+ _dbus_credentials_from_current_process (&creds);
-+ _dbus_auth_set_credentials (auth, &creds);
-+ _dbus_auth_set_context (auth, &context);
-+ }
-+ else if (auth == NULL)
-+ {
-+ _dbus_warn ("must specify CLIENT or SERVER\n");
-+ goto out;
-+
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "NO_CREDENTIALS"))
-+ {
-+ DBusCredentials creds = { -1, -1, -1 };
-+ _dbus_auth_set_credentials (auth, &creds);
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "ROOT_CREDENTIALS"))
-+ {
-+ DBusCredentials creds = { -1, 0, 0 };
-+ _dbus_auth_set_credentials (auth, &creds);
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "SILLY_CREDENTIALS"))
-+ {
-+ DBusCredentials creds = { -1, 4312, 1232 };
-+ _dbus_auth_set_credentials (auth, &creds);
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "ALLOWED_MECHS"))
-+ {
-+ char **mechs;
-+
-+ _dbus_string_delete_first_word (&line);
-+ mechs = split_string (&line);
-+ _dbus_auth_set_mechanisms (auth, (const char **) mechs);
-+ dbus_free_string_array (mechs);
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "SEND"))
-+ {
-+ DBusString to_send;
-+
-+ _dbus_string_delete_first_word (&line);
-+
-+ if (!_dbus_string_init (&to_send))
-+ {
-+ _dbus_warn ("no memory to allocate string\n");
-+ goto out;
-+ }
-+
-+ if (!append_quoted_string (&to_send, &line))
-+ {
-+ _dbus_warn ("failed to append quoted string line %d\n",
-+ line_no);
-+ _dbus_string_free (&to_send);
-+ goto out;
-+ }
-+
-+ _dbus_verbose ("Sending '%s'\n", _dbus_string_get_const_data (&to_send));
-+
-+ if (!_dbus_string_append (&to_send, "\r\n"))
-+ {
-+ _dbus_warn ("failed to append \r\n from line %d\n",
-+ line_no);
-+ _dbus_string_free (&to_send);
-+ goto out;
-+ }
-+
-+ /* Replace USERID_HEX with our username in hex */
-+ {
-+ int where;
-+
-+ if (_dbus_string_find (&to_send, 0,
-+ "USERID_HEX", &where))
-+ {
-+ DBusString username;
-+
-+ if (!_dbus_string_init (&username))
-+ {
-+ _dbus_warn ("no memory for userid\n");
-+ _dbus_string_free (&to_send);
-+ goto out;
-+ }
-+
-+ if (!_dbus_string_append_uint (&username,
-+ _dbus_getuid ()))
-+ {
-+ _dbus_warn ("no memory for userid\n");
-+ _dbus_string_free (&username);
-+ _dbus_string_free (&to_send);
-+ goto out;
-+ }
-+
-+ _dbus_string_delete (&to_send, where, strlen ("USERID_HEX"));
-+
-+ if (!_dbus_string_hex_encode (&username, 0,
-+ &to_send, where))
-+ {
-+ _dbus_warn ("no memory to subst USERID_HEX\n");
-+ _dbus_string_free (&username);
-+ _dbus_string_free (&to_send);
-+ goto out;
-+ }
-+
-+ _dbus_string_free (&username);
-+ }
-+ else if (_dbus_string_find (&to_send, 0,
-+ "USERNAME_HEX", &where))
-+ {
-+ DBusString username;
-+ const DBusString *u;
-+
-+ if (!_dbus_string_init (&username))
-+ {
-+ _dbus_warn ("no memory for username\n");
-+ _dbus_string_free (&to_send);
-+ goto out;
-+ }
-+
-+ if (!_dbus_username_from_current_process (&u) ||
-+ !_dbus_string_copy (u, 0, &username,
-+ _dbus_string_get_length (&username)))
-+ {
-+ _dbus_warn ("no memory for username\n");
-+ _dbus_string_free (&username);
-+ _dbus_string_free (&to_send);
-+ goto out;
-+ }
-+
-+ _dbus_string_delete (&to_send, where, strlen ("USERNAME_HEX"));
-+
-+ if (!_dbus_string_hex_encode (&username, 0,
-+ &to_send, where))
-+ {
-+ _dbus_warn ("no memory to subst USERNAME_HEX\n");
-+ _dbus_string_free (&username);
-+ _dbus_string_free (&to_send);
-+ goto out;
-+ }
-+
-+ _dbus_string_free (&username);
-+ }
-+ }
-+
-+ {
-+ DBusString *buffer;
-+
-+ _dbus_auth_get_buffer (auth, &buffer);
-+ if (!_dbus_string_copy (&to_send, 0,
-+ buffer, _dbus_string_get_length (buffer)))
-+ {
-+ _dbus_warn ("not enough memory to call bytes_received, or can't add bytes to auth object already in end state\n");
-+ _dbus_string_free (&to_send);
-+ _dbus_auth_return_buffer (auth, buffer, 0);
-+ goto out;
-+ }
-+
-+ _dbus_auth_return_buffer (auth, buffer, _dbus_string_get_length (&to_send));
-+ }
-+
-+ _dbus_string_free (&to_send);
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "EXPECT_STATE"))
-+ {
-+ DBusAuthState expected;
-+
-+ _dbus_string_delete_first_word (&line);
-+
-+ expected = auth_state_from_string (&line);
-+ if (expected < 0)
-+ {
-+ _dbus_warn ("bad auth state given to EXPECT_STATE\n");
-+ goto parse_failed;
-+ }
-+
-+ if (expected != state)
-+ {
-+ _dbus_warn ("expected auth state %s but got %s on line %d\n",
-+ auth_state_to_string (expected),
-+ auth_state_to_string (state),
-+ line_no);
-+ goto out;
-+ }
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "EXPECT_COMMAND"))
-+ {
-+ DBusString received;
-+
-+ _dbus_string_delete_first_word (&line);
-+
-+ if (!_dbus_string_init (&received))
-+ {
-+ _dbus_warn ("no mem to allocate string received\n");
-+ goto out;
-+ }
-+
-+ if (!_dbus_string_pop_line (&from_auth, &received))
-+ {
-+ _dbus_warn ("no line popped from the DBusAuth being tested, expected command %s on line %d\n",
-+ _dbus_string_get_const_data (&line), line_no);
-+ _dbus_string_free (&received);
-+ goto out;
-+ }
-+
-+ if (!same_first_word (&received, &line))
-+ {
-+ _dbus_warn ("line %d expected command '%s' and got '%s'\n",
-+ line_no,
-+ _dbus_string_get_const_data (&line),
-+ _dbus_string_get_const_data (&received));
-+ _dbus_string_free (&received);
-+ goto out;
-+ }
-+
-+ _dbus_string_free (&received);
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "EXPECT_UNUSED"))
-+ {
-+ DBusString expected;
-+ const DBusString *unused;
-+
-+ _dbus_string_delete_first_word (&line);
-+
-+ if (!_dbus_string_init (&expected))
-+ {
-+ _dbus_warn ("no mem to allocate string expected\n");
-+ goto out;
-+ }
-+
-+ if (!append_quoted_string (&expected, &line))
-+ {
-+ _dbus_warn ("failed to append quoted string line %d\n",
-+ line_no);
-+ _dbus_string_free (&expected);
-+ goto out;
-+ }
-+
-+ _dbus_auth_get_unused_bytes (auth, &unused);
-+
-+ if (_dbus_string_equal (&expected, unused))
-+ {
-+ _dbus_auth_delete_unused_bytes (auth);
-+ _dbus_string_free (&expected);
-+ }
-+ else
-+ {
-+ _dbus_warn ("Expected unused bytes '%s' and have '%s'\n",
-+ _dbus_string_get_const_data (&expected),
-+ _dbus_string_get_const_data (unused));
-+ _dbus_string_free (&expected);
-+ goto out;
-+ }
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line,
-+ "EXPECT"))
-+ {
-+ DBusString expected;
-+
-+ _dbus_string_delete_first_word (&line);
-+
-+ if (!_dbus_string_init (&expected))
-+ {
-+ _dbus_warn ("no mem to allocate string expected\n");
-+ goto out;
-+ }
-+
-+ if (!append_quoted_string (&expected, &line))
-+ {
-+ _dbus_warn ("failed to append quoted string line %d\n",
-+ line_no);
-+ _dbus_string_free (&expected);
-+ goto out;
-+ }
-+
-+ if (_dbus_string_equal_len (&expected, &from_auth,
-+ _dbus_string_get_length (&expected)))
-+ {
-+ _dbus_string_delete (&from_auth, 0,
-+ _dbus_string_get_length (&expected));
-+ _dbus_string_free (&expected);
-+ }
-+ else
-+ {
-+ _dbus_warn ("Expected exact string '%s' and have '%s'\n",
-+ _dbus_string_get_const_data (&expected),
-+ _dbus_string_get_const_data (&from_auth));
-+ _dbus_string_free (&expected);
-+ goto out;
-+ }
-+ }
-+ else
-+ goto parse_failed;
-+
-+ goto next_iteration; /* skip parse_failed */
-+
-+ parse_failed:
-+ {
-+ _dbus_warn ("couldn't process line %d \"%s\"\n",
-+ line_no, _dbus_string_get_const_data (&line));
-+ goto out;
-+ }
-+ }
-+
-+ if (auth != NULL &&
-+ state == DBUS_AUTH_STATE_AUTHENTICATED)
-+ {
-+ const DBusString *unused;
-+
-+ _dbus_auth_get_unused_bytes (auth, &unused);
-+
-+ if (_dbus_string_get_length (unused) > 0)
-+ {
-+ _dbus_warn ("did not expect unused bytes (scripts must specify explicitly if they are expected)\n");
-+ goto out;
-+ }
-+ }
-+
-+ if (_dbus_string_get_length (&from_auth) > 0)
-+ {
-+ _dbus_warn ("script did not have EXPECT_ statements for all the data received from the DBusAuth\n");
-+ _dbus_warn ("Leftover data: %s\n", _dbus_string_get_const_data (&from_auth));
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (auth)
-+ _dbus_auth_unref (auth);
-+
-+ _dbus_string_free (&file);
-+ _dbus_string_free (&line);
-+ _dbus_string_free (&from_auth);
-+
-+ return retval;
-+}
-+
-+/** @} */
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-auth-script.h dbus-0.61/dbus/dbus-auth-script.h
---- dbus-0.61.orig/dbus/dbus-auth-script.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-auth-script.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,39 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-auth-script.h Test DBusAuth using a special script file (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_AUTH_SCRIPT_H
-+#define DBUS_AUTH_SCRIPT_H
-+
-+#include <config.h>
-+
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-string.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+dbus_bool_t _dbus_auth_script_run (const DBusString *filename);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_AUTH_SCRIPT_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-auth-util.c dbus-0.61/dbus/dbus-auth-util.c
---- dbus-0.61.orig/dbus/dbus-auth-util.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-auth-util.c 2005-01-17 04:53:40.000000000 +0100
-@@ -0,0 +1,169 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-auth-util.c Would be in dbus-auth.c, but only used for tests/bus
-+ *
-+ * Copyright (C) 2002, 2003, 2004 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-internals.h"
-+#include "dbus-test.h"
-+#include "dbus-auth.h"
-+
-+/**
-+ * @addtogroup DBusAuth
-+ * @{
-+ */
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include "dbus-auth-script.h"
-+#include <stdio.h>
-+
-+static dbus_bool_t
-+process_test_subdir (const DBusString *test_base_dir,
-+ const char *subdir)
-+{
-+ DBusString test_directory;
-+ DBusString filename;
-+ DBusDirIter *dir;
-+ dbus_bool_t retval;
-+ DBusError error;
-+
-+ retval = FALSE;
-+ dir = NULL;
-+
-+ if (!_dbus_string_init (&test_directory))
-+ _dbus_assert_not_reached ("didn't allocate test_directory\n");
-+
-+ _dbus_string_init_const (&filename, subdir);
-+
-+ if (!_dbus_string_copy (test_base_dir, 0,
-+ &test_directory, 0))
-+ _dbus_assert_not_reached ("couldn't copy test_base_dir to test_directory");
-+
-+ if (!_dbus_concat_dir_and_file (&test_directory, &filename))
-+ _dbus_assert_not_reached ("couldn't allocate full path");
-+
-+ _dbus_string_free (&filename);
-+ if (!_dbus_string_init (&filename))
-+ _dbus_assert_not_reached ("didn't allocate filename string\n");
-+
-+ dbus_error_init (&error);
-+ dir = _dbus_directory_open (&test_directory, &error);
-+ if (dir == NULL)
-+ {
-+ _dbus_warn ("Could not open %s: %s\n",
-+ _dbus_string_get_const_data (&test_directory),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto failed;
-+ }
-+
-+ printf ("Testing %s:\n", subdir);
-+
-+ next:
-+ while (_dbus_directory_get_next_file (dir, &filename, &error))
-+ {
-+ DBusString full_path;
-+
-+ if (!_dbus_string_init (&full_path))
-+ _dbus_assert_not_reached ("couldn't init string");
-+
-+ if (!_dbus_string_copy (&test_directory, 0, &full_path, 0))
-+ _dbus_assert_not_reached ("couldn't copy dir to full_path");
-+
-+ if (!_dbus_concat_dir_and_file (&full_path, &filename))
-+ _dbus_assert_not_reached ("couldn't concat file to dir");
-+
-+ if (!_dbus_string_ends_with_c_str (&filename, ".auth-script"))
-+ {
-+ _dbus_verbose ("Skipping non-.auth-script file %s\n",
-+ _dbus_string_get_const_data (&filename));
-+ _dbus_string_free (&full_path);
-+ goto next;
-+ }
-+
-+ printf (" %s\n", _dbus_string_get_const_data (&filename));
-+
-+ if (!_dbus_auth_script_run (&full_path))
-+ {
-+ _dbus_string_free (&full_path);
-+ goto failed;
-+ }
-+ else
-+ _dbus_string_free (&full_path);
-+ }
-+
-+ if (dbus_error_is_set (&error))
-+ {
-+ _dbus_warn ("Could not get next file in %s: %s\n",
-+ _dbus_string_get_const_data (&test_directory), error.message);
-+ dbus_error_free (&error);
-+ goto failed;
-+ }
-+
-+ retval = TRUE;
-+
-+ failed:
-+
-+ if (dir)
-+ _dbus_directory_close (dir);
-+ _dbus_string_free (&test_directory);
-+ _dbus_string_free (&filename);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+process_test_dirs (const char *test_data_dir)
-+{
-+ DBusString test_directory;
-+ dbus_bool_t retval;
-+
-+ retval = FALSE;
-+
-+ _dbus_string_init_const (&test_directory, test_data_dir);
-+
-+ if (!process_test_subdir (&test_directory, "auth"))
-+ goto failed;
-+
-+ retval = TRUE;
-+
-+ failed:
-+
-+ _dbus_string_free (&test_directory);
-+
-+ return retval;
-+}
-+
-+dbus_bool_t
-+_dbus_auth_test (const char *test_data_dir)
-+{
-+
-+ if (test_data_dir == NULL)
-+ return TRUE;
-+
-+ if (!process_test_dirs (test_data_dir))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-auth.c dbus-0.61/dbus/dbus-auth.c
---- dbus-0.61.orig/dbus/dbus-auth.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-auth.c 2005-11-30 20:32:26.000000000 +0100
-@@ -0,0 +1,2498 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-auth.c Authentication
-+ *
-+ * Copyright (C) 2002, 2003, 2004 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-auth.h"
-+#include "dbus-string.h"
-+#include "dbus-list.h"
-+#include "dbus-internals.h"
-+#include "dbus-keyring.h"
-+#include "dbus-sha.h"
-+#include "dbus-protocol.h"
-+#include "dbus-userdb.h"
-+
-+/**
-+ * @defgroup DBusAuth Authentication
-+ * @ingroup DBusInternals
-+ * @brief DBusAuth object
-+ *
-+ * DBusAuth manages the authentication negotiation when a connection
-+ * is first established, and also manage any encryption used over a
-+ * connection.
-+ *
-+ * @todo some SASL profiles require sending the empty string as a
-+ * challenge/response, but we don't currently allow that in our
-+ * protocol.
-+ *
-+ * @todo right now sometimes both ends will block waiting for input
-+ * from the other end, e.g. if there's an error during
-+ * DBUS_COOKIE_SHA1.
-+ *
-+ * @todo the cookie keyring needs to be cached globally not just
-+ * per-auth (which raises threadsafety issues too)
-+ *
-+ * @todo grep FIXME in dbus-auth.c
-+ */
-+
-+/**
-+ * @defgroup DBusAuthInternals Authentication implementation details
-+ * @ingroup DBusInternals
-+ * @brief DBusAuth implementation details
-+ *
-+ * Private details of authentication code.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * This function appends an initial client response to the given string
-+ */
-+typedef dbus_bool_t (* DBusInitialResponseFunction) (DBusAuth *auth,
-+ DBusString *response);
-+
-+/**
-+ * This function processes a block of data received from the peer.
-+ * i.e. handles a DATA command.
-+ */
-+typedef dbus_bool_t (* DBusAuthDataFunction) (DBusAuth *auth,
-+ const DBusString *data);
-+
-+/**
-+ * This function encodes a block of data from the peer.
-+ */
-+typedef dbus_bool_t (* DBusAuthEncodeFunction) (DBusAuth *auth,
-+ const DBusString *data,
-+ DBusString *encoded);
-+
-+/**
-+ * This function decodes a block of data from the peer.
-+ */
-+typedef dbus_bool_t (* DBusAuthDecodeFunction) (DBusAuth *auth,
-+ const DBusString *data,
-+ DBusString *decoded);
-+
-+/**
-+ * This function is called when the mechanism is abandoned.
-+ */
-+typedef void (* DBusAuthShutdownFunction) (DBusAuth *auth);
-+
-+/**
-+ * Virtual table representing a particular auth mechanism.
-+ */
-+typedef struct
-+{
-+ const char *mechanism; /**< Name of the mechanism */
-+ DBusAuthDataFunction server_data_func; /**< Function on server side for DATA */
-+ DBusAuthEncodeFunction server_encode_func; /**< Function on server side to encode */
-+ DBusAuthDecodeFunction server_decode_func; /**< Function on server side to decode */
-+ DBusAuthShutdownFunction server_shutdown_func; /**< Function on server side to shut down */
-+ DBusInitialResponseFunction client_initial_response_func; /**< Function on client side to handle initial response */
-+ DBusAuthDataFunction client_data_func; /**< Function on client side for DATA */
-+ DBusAuthEncodeFunction client_encode_func; /**< Function on client side for encode */
-+ DBusAuthDecodeFunction client_decode_func; /**< Function on client side for decode */
-+ DBusAuthShutdownFunction client_shutdown_func; /**< Function on client side for shutdown */
-+} DBusAuthMechanismHandler;
-+
-+/**
-+ * Enumeration for the known authentication commands.
-+ */
-+typedef enum {
-+ DBUS_AUTH_COMMAND_AUTH,
-+ DBUS_AUTH_COMMAND_CANCEL,
-+ DBUS_AUTH_COMMAND_DATA,
-+ DBUS_AUTH_COMMAND_BEGIN,
-+ DBUS_AUTH_COMMAND_REJECTED,
-+ DBUS_AUTH_COMMAND_OK,
-+ DBUS_AUTH_COMMAND_ERROR,
-+ DBUS_AUTH_COMMAND_UNKNOWN
-+} DBusAuthCommand;
-+
-+/**
-+ * Auth state function, determines the reaction to incoming events for
-+ * a particular state. Returns whether we had enough memory to
-+ * complete the operation.
-+ */
-+typedef dbus_bool_t (* DBusAuthStateFunction) (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args);
-+
-+/**
-+ * Information about a auth state.
-+ */
-+typedef struct
-+{
-+ const char *name; /**< Name of the state */
-+ DBusAuthStateFunction handler; /**< State function for this state */
-+} DBusAuthStateData;
-+
-+/**
-+ * Internal members of DBusAuth.
-+ */
-+struct DBusAuth
-+{
-+ int refcount; /**< reference count */
-+ const char *side; /**< Client or server */
-+
-+ DBusString incoming; /**< Incoming data buffer */
-+ DBusString outgoing; /**< Outgoing data buffer */
-+
-+ const DBusAuthStateData *state; /**< Current protocol state */
-+
-+ const DBusAuthMechanismHandler *mech; /**< Current auth mechanism */
-+
-+ DBusString identity; /**< Current identity we're authorizing
-+ * as.
-+ */
-+
-+ DBusCredentials credentials; /**< Credentials read from socket,
-+ * fields may be -1
-+ */
-+
-+ DBusCredentials authorized_identity; /**< Credentials that are authorized */
-+
-+ DBusCredentials desired_identity; /**< Identity client has requested */
-+
-+ DBusString context; /**< Cookie scope */
-+ DBusKeyring *keyring; /**< Keyring for cookie mechanism. */
-+ int cookie_id; /**< ID of cookie to use */
-+ DBusString challenge; /**< Challenge sent to client */
-+
-+ char **allowed_mechs; /**< Mechanisms we're allowed to use,
-+ * or #NULL if we can use any
-+ */
-+
-+ unsigned int needed_memory : 1; /**< We needed memory to continue since last
-+ * successful getting something done
-+ */
-+ unsigned int already_got_mechanisms : 1; /**< Client already got mech list */
-+ unsigned int already_asked_for_initial_response : 1; /**< Already sent a blank challenge to get an initial response */
-+ unsigned int buffer_outstanding : 1; /**< Buffer is "checked out" for reading data into */
-+};
-+
-+/**
-+ * "Subclass" of DBusAuth for client side
-+ */
-+typedef struct
-+{
-+ DBusAuth base; /**< Parent class */
-+
-+ DBusList *mechs_to_try; /**< Mechanisms we got from the server that we're going to try using */
-+
-+ DBusString guid_from_server; /**< GUID received from server */
-+
-+} DBusAuthClient;
-+
-+/**
-+ * "Subclass" of DBusAuth for server side.
-+ */
-+typedef struct
-+{
-+ DBusAuth base; /**< Parent class */
-+
-+ int failures; /**< Number of times client has been rejected */
-+ int max_failures; /**< Number of times we reject before disconnect */
-+
-+ DBusString guid; /**< Our globally unique ID in hex encoding */
-+
-+} DBusAuthServer;
-+
-+static void goto_state (DBusAuth *auth,
-+ const DBusAuthStateData *new_state);
-+static dbus_bool_t send_auth (DBusAuth *auth,
-+ const DBusAuthMechanismHandler *mech);
-+static dbus_bool_t send_data (DBusAuth *auth,
-+ DBusString *data);
-+static dbus_bool_t send_rejected (DBusAuth *auth);
-+static dbus_bool_t send_error (DBusAuth *auth,
-+ const char *message);
-+static dbus_bool_t send_ok (DBusAuth *auth);
-+static dbus_bool_t send_begin (DBusAuth *auth,
-+ const DBusString *args_from_ok);
-+static dbus_bool_t send_cancel (DBusAuth *auth);
-+
-+/**
-+ * Client states
-+ */
-+
-+static dbus_bool_t handle_server_state_waiting_for_auth (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args);
-+static dbus_bool_t handle_server_state_waiting_for_data (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args);
-+static dbus_bool_t handle_server_state_waiting_for_begin (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args);
-+
-+static const DBusAuthStateData server_state_waiting_for_auth = {
-+ "WaitingForAuth", handle_server_state_waiting_for_auth
-+};
-+static const DBusAuthStateData server_state_waiting_for_data = {
-+ "WaitingForData", handle_server_state_waiting_for_data
-+};
-+static const DBusAuthStateData server_state_waiting_for_begin = {
-+ "WaitingForBegin", handle_server_state_waiting_for_begin
-+};
-+
-+/**
-+ * Client states
-+ */
-+
-+static dbus_bool_t handle_client_state_waiting_for_data (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args);
-+static dbus_bool_t handle_client_state_waiting_for_ok (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args);
-+static dbus_bool_t handle_client_state_waiting_for_reject (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args);
-+
-+static const DBusAuthStateData client_state_need_send_auth = {
-+ "NeedSendAuth", NULL
-+};
-+static const DBusAuthStateData client_state_waiting_for_data = {
-+ "WaitingForData", handle_client_state_waiting_for_data
-+};
-+static const DBusAuthStateData client_state_waiting_for_ok = {
-+ "WaitingForOK", handle_client_state_waiting_for_ok
-+};
-+static const DBusAuthStateData client_state_waiting_for_reject = {
-+ "WaitingForReject", handle_client_state_waiting_for_reject
-+};
-+
-+/**
-+ * Common terminal states. Terminal states have handler == NULL.
-+ */
-+
-+static const DBusAuthStateData common_state_authenticated = {
-+ "Authenticated", NULL
-+};
-+
-+static const DBusAuthStateData common_state_need_disconnect = {
-+ "NeedDisconnect", NULL
-+};
-+
-+static const char auth_side_client[] = "client";
-+static const char auth_side_server[] = "server";
-+/**
-+ * @param auth the auth conversation
-+ * @returns #TRUE if the conversation is the server side
-+ */
-+#define DBUS_AUTH_IS_SERVER(auth) ((auth)->side == auth_side_server)
-+/**
-+ * @param auth the auth conversation
-+ * @returns #TRUE if the conversation is the client side
-+ */
-+#define DBUS_AUTH_IS_CLIENT(auth) ((auth)->side == auth_side_client)
-+/**
-+ * @param auth the auth conversation
-+ * @returns auth cast to DBusAuthClient
-+ */
-+#define DBUS_AUTH_CLIENT(auth) ((DBusAuthClient*)(auth))
-+/**
-+ * @param auth the auth conversation
-+ * @returns auth cast to DBusAuthServer
-+ */
-+#define DBUS_AUTH_SERVER(auth) ((DBusAuthServer*)(auth))
-+
-+/**
-+ * The name of the auth ("client" or "server")
-+ * @param auth the auth conversation
-+ * @returns a string
-+ */
-+#define DBUS_AUTH_NAME(auth) ((auth)->side)
-+
-+static DBusAuth*
-+_dbus_auth_new (int size)
-+{
-+ DBusAuth *auth;
-+
-+ auth = dbus_malloc0 (size);
-+ if (auth == NULL)
-+ return NULL;
-+
-+ auth->refcount = 1;
-+
-+ _dbus_credentials_clear (&auth->credentials);
-+ _dbus_credentials_clear (&auth->authorized_identity);
-+ _dbus_credentials_clear (&auth->desired_identity);
-+
-+ auth->keyring = NULL;
-+ auth->cookie_id = -1;
-+
-+ /* note that we don't use the max string length feature,
-+ * because you can't use that feature if you're going to
-+ * try to recover from out-of-memory (it creates
-+ * what looks like unrecoverable inability to alloc
-+ * more space in the string). But we do handle
-+ * overlong buffers in _dbus_auth_do_work().
-+ */
-+
-+ if (!_dbus_string_init (&auth->incoming))
-+ goto enomem_0;
-+
-+ if (!_dbus_string_init (&auth->outgoing))
-+ goto enomem_1;
-+
-+ if (!_dbus_string_init (&auth->identity))
-+ goto enomem_2;
-+
-+ if (!_dbus_string_init (&auth->context))
-+ goto enomem_3;
-+
-+ if (!_dbus_string_init (&auth->challenge))
-+ goto enomem_4;
-+
-+ /* default context if none is specified */
-+ if (!_dbus_string_append (&auth->context, "org_freedesktop_general"))
-+ goto enomem_5;
-+
-+ return auth;
-+
-+ enomem_5:
-+ _dbus_string_free (&auth->challenge);
-+ enomem_4:
-+ _dbus_string_free (&auth->context);
-+ enomem_3:
-+ _dbus_string_free (&auth->identity);
-+ enomem_2:
-+ _dbus_string_free (&auth->outgoing);
-+ enomem_1:
-+ _dbus_string_free (&auth->incoming);
-+ enomem_0:
-+ dbus_free (auth);
-+ return NULL;
-+}
-+
-+static void
-+shutdown_mech (DBusAuth *auth)
-+{
-+ /* Cancel any auth */
-+ auth->already_asked_for_initial_response = FALSE;
-+ _dbus_string_set_length (&auth->identity, 0);
-+
-+ _dbus_credentials_clear (&auth->authorized_identity);
-+ _dbus_credentials_clear (&auth->desired_identity);
-+
-+ if (auth->mech != NULL)
-+ {
-+ _dbus_verbose ("%s: Shutting down mechanism %s\n",
-+ DBUS_AUTH_NAME (auth), auth->mech->mechanism);
-+
-+ if (DBUS_AUTH_IS_CLIENT (auth))
-+ (* auth->mech->client_shutdown_func) (auth);
-+ else
-+ (* auth->mech->server_shutdown_func) (auth);
-+
-+ auth->mech = NULL;
-+ }
-+}
-+
-+/* Returns TRUE but with an empty string hash if the
-+ * cookie_id isn't known. As with all this code
-+ * TRUE just means we had enough memory.
-+ */
-+static dbus_bool_t
-+sha1_compute_hash (DBusAuth *auth,
-+ int cookie_id,
-+ const DBusString *server_challenge,
-+ const DBusString *client_challenge,
-+ DBusString *hash)
-+{
-+ DBusString cookie;
-+ DBusString to_hash;
-+ dbus_bool_t retval;
-+
-+ _dbus_assert (auth->keyring != NULL);
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_string_init (&cookie))
-+ return FALSE;
-+
-+ if (!_dbus_keyring_get_hex_key (auth->keyring, cookie_id,
-+ &cookie))
-+ goto out_0;
-+
-+ if (_dbus_string_get_length (&cookie) == 0)
-+ {
-+ retval = TRUE;
-+ goto out_0;
-+ }
-+
-+ if (!_dbus_string_init (&to_hash))
-+ goto out_0;
-+
-+ if (!_dbus_string_copy (server_challenge, 0,
-+ &to_hash, _dbus_string_get_length (&to_hash)))
-+ goto out_1;
-+
-+ if (!_dbus_string_append (&to_hash, ":"))
-+ goto out_1;
-+
-+ if (!_dbus_string_copy (client_challenge, 0,
-+ &to_hash, _dbus_string_get_length (&to_hash)))
-+ goto out_1;
-+
-+ if (!_dbus_string_append (&to_hash, ":"))
-+ goto out_1;
-+
-+ if (!_dbus_string_copy (&cookie, 0,
-+ &to_hash, _dbus_string_get_length (&to_hash)))
-+ goto out_1;
-+
-+ if (!_dbus_sha_compute (&to_hash, hash))
-+ goto out_1;
-+
-+ retval = TRUE;
-+
-+ out_1:
-+ _dbus_string_zero (&to_hash);
-+ _dbus_string_free (&to_hash);
-+ out_0:
-+ _dbus_string_zero (&cookie);
-+ _dbus_string_free (&cookie);
-+ return retval;
-+}
-+
-+/** http://www.ietf.org/rfc/rfc2831.txt suggests at least 64 bits of
-+ * entropy, we use 128. This is the number of bytes in the random
-+ * challenge.
-+ */
-+#define N_CHALLENGE_BYTES (128/8)
-+
-+static dbus_bool_t
-+sha1_handle_first_client_response (DBusAuth *auth,
-+ const DBusString *data)
-+{
-+ /* We haven't sent a challenge yet, we're expecting a desired
-+ * username from the client.
-+ */
-+ DBusString tmp;
-+ DBusString tmp2;
-+ dbus_bool_t retval;
-+ DBusError error;
-+
-+ retval = FALSE;
-+
-+ _dbus_string_set_length (&auth->challenge, 0);
-+
-+ if (_dbus_string_get_length (data) > 0)
-+ {
-+ if (_dbus_string_get_length (&auth->identity) > 0)
-+ {
-+ /* Tried to send two auth identities, wtf */
-+ _dbus_verbose ("%s: client tried to send auth identity, but we already have one\n",
-+ DBUS_AUTH_NAME (auth));
-+ return send_rejected (auth);
-+ }
-+ else
-+ {
-+ /* this is our auth identity */
-+ if (!_dbus_string_copy (data, 0, &auth->identity, 0))
-+ return FALSE;
-+ }
-+ }
-+
-+ if (!_dbus_credentials_from_username (data, &auth->desired_identity))
-+ {
-+ _dbus_verbose ("%s: Did not get a valid username from client\n",
-+ DBUS_AUTH_NAME (auth));
-+ return send_rejected (auth);
-+ }
-+
-+ if (!_dbus_string_init (&tmp))
-+ return FALSE;
-+
-+ if (!_dbus_string_init (&tmp2))
-+ {
-+ _dbus_string_free (&tmp);
-+ return FALSE;
-+ }
-+
-+ /* we cache the keyring for speed, so here we drop it if it's the
-+ * wrong one. FIXME caching the keyring here is useless since we use
-+ * a different DBusAuth for every connection.
-+ */
-+ if (auth->keyring &&
-+ !_dbus_keyring_is_for_user (auth->keyring,
-+ data))
-+ {
-+ _dbus_keyring_unref (auth->keyring);
-+ auth->keyring = NULL;
-+ }
-+
-+ if (auth->keyring == NULL)
-+ {
-+ dbus_error_init (&error);
-+ auth->keyring = _dbus_keyring_new_homedir (data,
-+ &auth->context,
-+ &error);
-+
-+ if (auth->keyring == NULL)
-+ {
-+ if (dbus_error_has_name (&error,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+ else
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&error);
-+ _dbus_verbose ("%s: Error loading keyring: %s\n",
-+ DBUS_AUTH_NAME (auth), error.message);
-+ if (send_rejected (auth))
-+ retval = TRUE; /* retval is only about mem */
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_assert (!dbus_error_is_set (&error));
-+ }
-+ }
-+
-+ _dbus_assert (auth->keyring != NULL);
-+
-+ dbus_error_init (&error);
-+ auth->cookie_id = _dbus_keyring_get_best_key (auth->keyring, &error);
-+ if (auth->cookie_id < 0)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&error);
-+ _dbus_verbose ("%s: Could not get a cookie ID to send to client: %s\n",
-+ DBUS_AUTH_NAME (auth), error.message);
-+ if (send_rejected (auth))
-+ retval = TRUE;
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+ else
-+ {
-+ _dbus_assert (!dbus_error_is_set (&error));
-+ }
-+
-+ if (!_dbus_string_copy (&auth->context, 0,
-+ &tmp2, _dbus_string_get_length (&tmp2)))
-+ goto out;
-+
-+ if (!_dbus_string_append (&tmp2, " "))
-+ goto out;
-+
-+ if (!_dbus_string_append_int (&tmp2, auth->cookie_id))
-+ goto out;
-+
-+ if (!_dbus_string_append (&tmp2, " "))
-+ goto out;
-+
-+ if (!_dbus_generate_random_bytes (&tmp, N_CHALLENGE_BYTES))
-+ goto out;
-+
-+ _dbus_string_set_length (&auth->challenge, 0);
-+ if (!_dbus_string_hex_encode (&tmp, 0, &auth->challenge, 0))
-+ goto out;
-+
-+ if (!_dbus_string_hex_encode (&tmp, 0, &tmp2,
-+ _dbus_string_get_length (&tmp2)))
-+ goto out;
-+
-+ if (!send_data (auth, &tmp2))
-+ goto out;
-+
-+ goto_state (auth, &server_state_waiting_for_data);
-+ retval = TRUE;
-+
-+ out:
-+ _dbus_string_zero (&tmp);
-+ _dbus_string_free (&tmp);
-+ _dbus_string_zero (&tmp2);
-+ _dbus_string_free (&tmp2);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+sha1_handle_second_client_response (DBusAuth *auth,
-+ const DBusString *data)
-+{
-+ /* We are expecting a response which is the hex-encoded client
-+ * challenge, space, then SHA-1 hash of the concatenation of our
-+ * challenge, ":", client challenge, ":", secret key, all
-+ * hex-encoded.
-+ */
-+ int i;
-+ DBusString client_challenge;
-+ DBusString client_hash;
-+ dbus_bool_t retval;
-+ DBusString correct_hash;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_string_find_blank (data, 0, &i))
-+ {
-+ _dbus_verbose ("%s: no space separator in client response\n",
-+ DBUS_AUTH_NAME (auth));
-+ return send_rejected (auth);
-+ }
-+
-+ if (!_dbus_string_init (&client_challenge))
-+ goto out_0;
-+
-+ if (!_dbus_string_init (&client_hash))
-+ goto out_1;
-+
-+ if (!_dbus_string_copy_len (data, 0, i, &client_challenge,
-+ 0))
-+ goto out_2;
-+
-+ _dbus_string_skip_blank (data, i, &i);
-+
-+ if (!_dbus_string_copy_len (data, i,
-+ _dbus_string_get_length (data) - i,
-+ &client_hash,
-+ 0))
-+ goto out_2;
-+
-+ if (_dbus_string_get_length (&client_challenge) == 0 ||
-+ _dbus_string_get_length (&client_hash) == 0)
-+ {
-+ _dbus_verbose ("%s: zero-length client challenge or hash\n",
-+ DBUS_AUTH_NAME (auth));
-+ if (send_rejected (auth))
-+ retval = TRUE;
-+ goto out_2;
-+ }
-+
-+ if (!_dbus_string_init (&correct_hash))
-+ goto out_2;
-+
-+ if (!sha1_compute_hash (auth, auth->cookie_id,
-+ &auth->challenge,
-+ &client_challenge,
-+ &correct_hash))
-+ goto out_3;
-+
-+ /* if cookie_id was invalid, then we get an empty hash */
-+ if (_dbus_string_get_length (&correct_hash) == 0)
-+ {
-+ if (send_rejected (auth))
-+ retval = TRUE;
-+ goto out_3;
-+ }
-+
-+ if (!_dbus_string_equal (&client_hash, &correct_hash))
-+ {
-+ if (send_rejected (auth))
-+ retval = TRUE;
-+ goto out_3;
-+ }
-+
-+ if (!send_ok (auth))
-+ goto out_3;
-+
-+ _dbus_verbose ("%s: authenticated client with UID "DBUS_UID_FORMAT" using DBUS_COOKIE_SHA1\n",
-+ DBUS_AUTH_NAME (auth), auth->desired_identity.uid);
-+
-+ auth->authorized_identity = auth->desired_identity;
-+ retval = TRUE;
-+
-+ out_3:
-+ _dbus_string_zero (&correct_hash);
-+ _dbus_string_free (&correct_hash);
-+ out_2:
-+ _dbus_string_zero (&client_hash);
-+ _dbus_string_free (&client_hash);
-+ out_1:
-+ _dbus_string_free (&client_challenge);
-+ out_0:
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+handle_server_data_cookie_sha1_mech (DBusAuth *auth,
-+ const DBusString *data)
-+{
-+ if (auth->cookie_id < 0)
-+ return sha1_handle_first_client_response (auth, data);
-+ else
-+ return sha1_handle_second_client_response (auth, data);
-+}
-+
-+static void
-+handle_server_shutdown_cookie_sha1_mech (DBusAuth *auth)
-+{
-+ auth->cookie_id = -1;
-+ _dbus_string_set_length (&auth->challenge, 0);
-+}
-+
-+static dbus_bool_t
-+handle_client_initial_response_cookie_sha1_mech (DBusAuth *auth,
-+ DBusString *response)
-+{
-+ const DBusString *username;
-+ dbus_bool_t retval;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_username_from_current_process (&username))
-+ goto out_0;
-+
-+ if (!_dbus_string_hex_encode (username, 0,
-+ response,
-+ _dbus_string_get_length (response)))
-+ goto out_0;
-+
-+ retval = TRUE;
-+
-+ out_0:
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+handle_client_data_cookie_sha1_mech (DBusAuth *auth,
-+ const DBusString *data)
-+{
-+ /* The data we get from the server should be the cookie context
-+ * name, the cookie ID, and the server challenge, separated by
-+ * spaces. We send back our challenge string and the correct hash.
-+ */
-+ dbus_bool_t retval;
-+ DBusString context;
-+ DBusString cookie_id_str;
-+ DBusString server_challenge;
-+ DBusString client_challenge;
-+ DBusString correct_hash;
-+ DBusString tmp;
-+ int i, j;
-+ long val;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_string_find_blank (data, 0, &i))
-+ {
-+ if (send_error (auth,
-+ "Server did not send context/ID/challenge properly"))
-+ retval = TRUE;
-+ goto out_0;
-+ }
-+
-+ if (!_dbus_string_init (&context))
-+ goto out_0;
-+
-+ if (!_dbus_string_copy_len (data, 0, i,
-+ &context, 0))
-+ goto out_1;
-+
-+ _dbus_string_skip_blank (data, i, &i);
-+ if (!_dbus_string_find_blank (data, i, &j))
-+ {
-+ if (send_error (auth,
-+ "Server did not send context/ID/challenge properly"))
-+ retval = TRUE;
-+ goto out_1;
-+ }
-+
-+ if (!_dbus_string_init (&cookie_id_str))
-+ goto out_1;
-+
-+ if (!_dbus_string_copy_len (data, i, j - i,
-+ &cookie_id_str, 0))
-+ goto out_2;
-+
-+ if (!_dbus_string_init (&server_challenge))
-+ goto out_2;
-+
-+ i = j;
-+ _dbus_string_skip_blank (data, i, &i);
-+ j = _dbus_string_get_length (data);
-+
-+ if (!_dbus_string_copy_len (data, i, j - i,
-+ &server_challenge, 0))
-+ goto out_3;
-+
-+ if (!_dbus_keyring_validate_context (&context))
-+ {
-+ if (send_error (auth, "Server sent invalid cookie context"))
-+ retval = TRUE;
-+ goto out_3;
-+ }
-+
-+ if (!_dbus_string_parse_int (&cookie_id_str, 0, &val, NULL))
-+ {
-+ if (send_error (auth, "Could not parse cookie ID as an integer"))
-+ retval = TRUE;
-+ goto out_3;
-+ }
-+
-+ if (_dbus_string_get_length (&server_challenge) == 0)
-+ {
-+ if (send_error (auth, "Empty server challenge string"))
-+ retval = TRUE;
-+ goto out_3;
-+ }
-+
-+ if (auth->keyring == NULL)
-+ {
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+ auth->keyring = _dbus_keyring_new_homedir (NULL,
-+ &context,
-+ &error);
-+
-+ if (auth->keyring == NULL)
-+ {
-+ if (dbus_error_has_name (&error,
-+ DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ goto out_3;
-+ }
-+ else
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&error);
-+
-+ _dbus_verbose ("%s: Error loading keyring: %s\n",
-+ DBUS_AUTH_NAME (auth), error.message);
-+
-+ if (send_error (auth, "Could not load cookie file"))
-+ retval = TRUE; /* retval is only about mem */
-+
-+ dbus_error_free (&error);
-+ goto out_3;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_assert (!dbus_error_is_set (&error));
-+ }
-+ }
-+
-+ _dbus_assert (auth->keyring != NULL);
-+
-+ if (!_dbus_string_init (&tmp))
-+ goto out_3;
-+
-+ if (!_dbus_generate_random_bytes (&tmp, N_CHALLENGE_BYTES))
-+ goto out_4;
-+
-+ if (!_dbus_string_init (&client_challenge))
-+ goto out_4;
-+
-+ if (!_dbus_string_hex_encode (&tmp, 0, &client_challenge, 0))
-+ goto out_5;
-+
-+ if (!_dbus_string_init (&correct_hash))
-+ goto out_5;
-+
-+ if (!sha1_compute_hash (auth, val,
-+ &server_challenge,
-+ &client_challenge,
-+ &correct_hash))
-+ goto out_6;
-+
-+ if (_dbus_string_get_length (&correct_hash) == 0)
-+ {
-+ /* couldn't find the cookie ID or something */
-+ if (send_error (auth, "Don't have the requested cookie ID"))
-+ retval = TRUE;
-+ goto out_6;
-+ }
-+
-+ _dbus_string_set_length (&tmp, 0);
-+
-+ if (!_dbus_string_copy (&client_challenge, 0, &tmp,
-+ _dbus_string_get_length (&tmp)))
-+ goto out_6;
-+
-+ if (!_dbus_string_append (&tmp, " "))
-+ goto out_6;
-+
-+ if (!_dbus_string_copy (&correct_hash, 0, &tmp,
-+ _dbus_string_get_length (&tmp)))
-+ goto out_6;
-+
-+ if (!send_data (auth, &tmp))
-+ goto out_6;
-+
-+ retval = TRUE;
-+
-+ out_6:
-+ _dbus_string_zero (&correct_hash);
-+ _dbus_string_free (&correct_hash);
-+ out_5:
-+ _dbus_string_free (&client_challenge);
-+ out_4:
-+ _dbus_string_zero (&tmp);
-+ _dbus_string_free (&tmp);
-+ out_3:
-+ _dbus_string_free (&server_challenge);
-+ out_2:
-+ _dbus_string_free (&cookie_id_str);
-+ out_1:
-+ _dbus_string_free (&context);
-+ out_0:
-+ return retval;
-+}
-+
-+static void
-+handle_client_shutdown_cookie_sha1_mech (DBusAuth *auth)
-+{
-+ auth->cookie_id = -1;
-+ _dbus_string_set_length (&auth->challenge, 0);
-+}
-+
-+static dbus_bool_t
-+handle_server_data_external_mech (DBusAuth *auth,
-+ const DBusString *data)
-+{
-+ if (auth->credentials.uid == DBUS_UID_UNSET)
-+ {
-+ _dbus_verbose ("%s: no credentials, mechanism EXTERNAL can't authenticate\n",
-+ DBUS_AUTH_NAME (auth));
-+ return send_rejected (auth);
-+ }
-+
-+ if (_dbus_string_get_length (data) > 0)
-+ {
-+ if (_dbus_string_get_length (&auth->identity) > 0)
-+ {
-+ /* Tried to send two auth identities, wtf */
-+ _dbus_verbose ("%s: client tried to send auth identity, but we already have one\n",
-+ DBUS_AUTH_NAME (auth));
-+ return send_rejected (auth);
-+ }
-+ else
-+ {
-+ /* this is our auth identity */
-+ if (!_dbus_string_copy (data, 0, &auth->identity, 0))
-+ return FALSE;
-+ }
-+ }
-+
-+ /* Poke client for an auth identity, if none given */
-+ if (_dbus_string_get_length (&auth->identity) == 0 &&
-+ !auth->already_asked_for_initial_response)
-+ {
-+ if (send_data (auth, NULL))
-+ {
-+ _dbus_verbose ("%s: sending empty challenge asking client for auth identity\n",
-+ DBUS_AUTH_NAME (auth));
-+ auth->already_asked_for_initial_response = TRUE;
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+ }
-+
-+ _dbus_credentials_clear (&auth->desired_identity);
-+
-+ /* If auth->identity is still empty here, then client
-+ * responded with an empty string after we poked it for
-+ * an initial response. This means to try to auth the
-+ * identity provided in the credentials.
-+ */
-+ if (_dbus_string_get_length (&auth->identity) == 0)
-+ {
-+ auth->desired_identity.uid = auth->credentials.uid;
-+ }
-+ else
-+ {
-+ if (!_dbus_parse_uid (&auth->identity,
-+ &auth->desired_identity.uid))
-+ {
-+ _dbus_verbose ("%s: could not get credentials from uid string\n",
-+ DBUS_AUTH_NAME (auth));
-+ return send_rejected (auth);
-+ }
-+ }
-+
-+ if (auth->desired_identity.uid == DBUS_UID_UNSET)
-+ {
-+ _dbus_verbose ("%s: desired user %s is no good\n",
-+ DBUS_AUTH_NAME (auth),
-+ _dbus_string_get_const_data (&auth->identity));
-+ return send_rejected (auth);
-+ }
-+
-+ if (_dbus_credentials_match (&auth->desired_identity,
-+ &auth->credentials))
-+ {
-+ /* client has authenticated */
-+ if (!send_ok (auth))
-+ return FALSE;
-+
-+ _dbus_verbose ("%s: authenticated client with UID "DBUS_UID_FORMAT
-+ " matching socket credentials UID "DBUS_UID_FORMAT"\n",
-+ DBUS_AUTH_NAME (auth),
-+ auth->desired_identity.uid,
-+ auth->credentials.uid);
-+
-+ auth->authorized_identity.pid = auth->credentials.pid;
-+ auth->authorized_identity.uid = auth->desired_identity.uid;
-+ return TRUE;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("%s: credentials uid="DBUS_UID_FORMAT
-+ " gid="DBUS_GID_FORMAT
-+ " do not allow uid="DBUS_UID_FORMAT
-+ " gid="DBUS_GID_FORMAT"\n",
-+ DBUS_AUTH_NAME (auth),
-+ auth->credentials.uid, auth->credentials.gid,
-+ auth->desired_identity.uid, auth->desired_identity.gid);
-+ return send_rejected (auth);
-+ }
-+}
-+
-+static void
-+handle_server_shutdown_external_mech (DBusAuth *auth)
-+{
-+
-+}
-+
-+static dbus_bool_t
-+handle_client_initial_response_external_mech (DBusAuth *auth,
-+ DBusString *response)
-+{
-+ /* We always append our UID as an initial response, so the server
-+ * doesn't have to send back an empty challenge to check whether we
-+ * want to specify an identity. i.e. this avoids a round trip that
-+ * the spec for the EXTERNAL mechanism otherwise requires.
-+ */
-+ DBusString plaintext;
-+
-+ if (!_dbus_string_init (&plaintext))
-+ return FALSE;
-+
-+ if (!_dbus_string_append_uint (&plaintext,
-+ _dbus_getuid ()))
-+ goto failed;
-+
-+ if (!_dbus_string_hex_encode (&plaintext, 0,
-+ response,
-+ _dbus_string_get_length (response)))
-+ goto failed;
-+
-+ _dbus_string_free (&plaintext);
-+
-+ return TRUE;
-+
-+ failed:
-+ _dbus_string_free (&plaintext);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+handle_client_data_external_mech (DBusAuth *auth,
-+ const DBusString *data)
-+{
-+
-+ return TRUE;
-+}
-+
-+static void
-+handle_client_shutdown_external_mech (DBusAuth *auth)
-+{
-+
-+}
-+
-+/* Put mechanisms here in order of preference.
-+ * What I eventually want to have is:
-+ *
-+ * - a mechanism that checks UNIX domain socket credentials
-+ * - a simple magic cookie mechanism like X11 or ICE
-+ * - mechanisms that chain to Cyrus SASL, so we can use anything it
-+ * offers such as Kerberos, X509, whatever.
-+ *
-+ */
-+static const DBusAuthMechanismHandler
-+all_mechanisms[] = {
-+ { "EXTERNAL",
-+ handle_server_data_external_mech,
-+ NULL, NULL,
-+ handle_server_shutdown_external_mech,
-+ handle_client_initial_response_external_mech,
-+ handle_client_data_external_mech,
-+ NULL, NULL,
-+ handle_client_shutdown_external_mech },
-+ { "DBUS_COOKIE_SHA1",
-+ handle_server_data_cookie_sha1_mech,
-+ NULL, NULL,
-+ handle_server_shutdown_cookie_sha1_mech,
-+ handle_client_initial_response_cookie_sha1_mech,
-+ handle_client_data_cookie_sha1_mech,
-+ NULL, NULL,
-+ handle_client_shutdown_cookie_sha1_mech },
-+ { NULL, NULL }
-+};
-+
-+static const DBusAuthMechanismHandler*
-+find_mech (const DBusString *name,
-+ char **allowed_mechs)
-+{
-+ int i;
-+
-+ if (allowed_mechs != NULL &&
-+ !_dbus_string_array_contains ((const char**) allowed_mechs,
-+ _dbus_string_get_const_data (name)))
-+ return NULL;
-+
-+ i = 0;
-+ while (all_mechanisms[i].mechanism != NULL)
-+ {
-+ if (_dbus_string_equal_c_str (name,
-+ all_mechanisms[i].mechanism))
-+
-+ return &all_mechanisms[i];
-+
-+ ++i;
-+ }
-+
-+ return NULL;
-+}
-+
-+static dbus_bool_t
-+send_auth (DBusAuth *auth, const DBusAuthMechanismHandler *mech)
-+{
-+ DBusString auth_command;
-+
-+ if (!_dbus_string_init (&auth_command))
-+ return FALSE;
-+
-+ if (!_dbus_string_append (&auth_command,
-+ "AUTH "))
-+ {
-+ _dbus_string_free (&auth_command);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append (&auth_command,
-+ mech->mechanism))
-+ {
-+ _dbus_string_free (&auth_command);
-+ return FALSE;
-+ }
-+
-+ if (mech->client_initial_response_func != NULL)
-+ {
-+ if (!_dbus_string_append (&auth_command, " "))
-+ {
-+ _dbus_string_free (&auth_command);
-+ return FALSE;
-+ }
-+
-+ if (!(* mech->client_initial_response_func) (auth, &auth_command))
-+ {
-+ _dbus_string_free (&auth_command);
-+ return FALSE;
-+ }
-+ }
-+
-+ if (!_dbus_string_append (&auth_command,
-+ "\r\n"))
-+ {
-+ _dbus_string_free (&auth_command);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_copy (&auth_command, 0,
-+ &auth->outgoing,
-+ _dbus_string_get_length (&auth->outgoing)))
-+ {
-+ _dbus_string_free (&auth_command);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&auth_command);
-+ shutdown_mech (auth);
-+ auth->mech = mech;
-+ goto_state (auth, &client_state_waiting_for_data);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+send_data (DBusAuth *auth, DBusString *data)
-+{
-+ int old_len;
-+
-+ if (data == NULL || _dbus_string_get_length (data) == 0)
-+ return _dbus_string_append (&auth->outgoing, "DATA\r\n");
-+ else
-+ {
-+ old_len = _dbus_string_get_length (&auth->outgoing);
-+ if (!_dbus_string_append (&auth->outgoing, "DATA "))
-+ goto out;
-+
-+ if (!_dbus_string_hex_encode (data, 0, &auth->outgoing,
-+ _dbus_string_get_length (&auth->outgoing)))
-+ goto out;
-+
-+ if (!_dbus_string_append (&auth->outgoing, "\r\n"))
-+ goto out;
-+
-+ return TRUE;
-+
-+ out:
-+ _dbus_string_set_length (&auth->outgoing, old_len);
-+
-+ return FALSE;
-+ }
-+}
-+
-+static dbus_bool_t
-+send_rejected (DBusAuth *auth)
-+{
-+ DBusString command;
-+ DBusAuthServer *server_auth;
-+ int i;
-+
-+ if (!_dbus_string_init (&command))
-+ return FALSE;
-+
-+ if (!_dbus_string_append (&command,
-+ "REJECTED"))
-+ goto nomem;
-+
-+ i = 0;
-+ while (all_mechanisms[i].mechanism != NULL)
-+ {
-+ if (!_dbus_string_append (&command,
-+ " "))
-+ goto nomem;
-+
-+ if (!_dbus_string_append (&command,
-+ all_mechanisms[i].mechanism))
-+ goto nomem;
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_string_append (&command, "\r\n"))
-+ goto nomem;
-+
-+ if (!_dbus_string_copy (&command, 0, &auth->outgoing,
-+ _dbus_string_get_length (&auth->outgoing)))
-+ goto nomem;
-+
-+ shutdown_mech (auth);
-+
-+ _dbus_assert (DBUS_AUTH_IS_SERVER (auth));
-+ server_auth = DBUS_AUTH_SERVER (auth);
-+ server_auth->failures += 1;
-+
-+ if (server_auth->failures >= server_auth->max_failures)
-+ goto_state (auth, &common_state_need_disconnect);
-+ else
-+ goto_state (auth, &server_state_waiting_for_auth);
-+
-+ _dbus_string_free (&command);
-+
-+ return TRUE;
-+
-+ nomem:
-+ _dbus_string_free (&command);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+send_error (DBusAuth *auth, const char *message)
-+{
-+ return _dbus_string_append_printf (&auth->outgoing,
-+ "ERROR \"%s\"\r\n", message);
-+}
-+
-+static dbus_bool_t
-+send_ok (DBusAuth *auth)
-+{
-+ int orig_len;
-+
-+ orig_len = _dbus_string_get_length (&auth->outgoing);
-+
-+ if (_dbus_string_append (&auth->outgoing, "OK ") &&
-+ _dbus_string_copy (& DBUS_AUTH_SERVER (auth)->guid,
-+ 0,
-+ &auth->outgoing,
-+ _dbus_string_get_length (&auth->outgoing)) &&
-+ _dbus_string_append (&auth->outgoing, "\r\n"))
-+ {
-+ goto_state (auth, &server_state_waiting_for_begin);
-+ return TRUE;
-+ }
-+ else
-+ {
-+ _dbus_string_set_length (&auth->outgoing, orig_len);
-+ return FALSE;
-+ }
-+}
-+
-+static dbus_bool_t
-+send_begin (DBusAuth *auth,
-+ const DBusString *args_from_ok)
-+{
-+ int end_of_hex;
-+
-+ /* "args_from_ok" should be the GUID, whitespace already pulled off the front */
-+ _dbus_assert (_dbus_string_get_length (& DBUS_AUTH_CLIENT (auth)->guid_from_server) == 0);
-+
-+ /* We decode the hex string to binary, using guid_from_server as scratch... */
-+
-+ end_of_hex = 0;
-+ if (!_dbus_string_hex_decode (args_from_ok, 0, &end_of_hex,
-+ & DBUS_AUTH_CLIENT (auth)->guid_from_server, 0))
-+ return FALSE;
-+
-+ /* now clear out the scratch */
-+ _dbus_string_set_length (& DBUS_AUTH_CLIENT (auth)->guid_from_server, 0);
-+
-+ if (end_of_hex != _dbus_string_get_length (args_from_ok) ||
-+ end_of_hex == 0)
-+ {
-+ _dbus_verbose ("Bad GUID from server, parsed %d bytes and had %d bytes from server\n",
-+ end_of_hex, _dbus_string_get_length (args_from_ok));
-+ goto_state (auth, &common_state_need_disconnect);
-+ return TRUE;
-+ }
-+
-+ if (_dbus_string_copy (args_from_ok, 0, &DBUS_AUTH_CLIENT (auth)->guid_from_server, 0) &&
-+ _dbus_string_append (&auth->outgoing, "BEGIN\r\n"))
-+ {
-+ _dbus_verbose ("Got GUID '%s' from the server\n",
-+ _dbus_string_get_const_data (& DBUS_AUTH_CLIENT (auth)->guid_from_server));
-+
-+ goto_state (auth, &common_state_authenticated);
-+ return TRUE;
-+ }
-+ else
-+ {
-+ _dbus_string_set_length (& DBUS_AUTH_CLIENT (auth)->guid_from_server, 0);
-+ return FALSE;
-+ }
-+}
-+
-+static dbus_bool_t
-+send_cancel (DBusAuth *auth)
-+{
-+ if (_dbus_string_append (&auth->outgoing, "CANCEL\r\n"))
-+ {
-+ goto_state (auth, &client_state_waiting_for_reject);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+process_data (DBusAuth *auth,
-+ const DBusString *args,
-+ DBusAuthDataFunction data_func)
-+{
-+ int end;
-+ DBusString decoded;
-+
-+ if (!_dbus_string_init (&decoded))
-+ return FALSE;
-+
-+ if (!_dbus_string_hex_decode (args, 0, &end, &decoded, 0))
-+ {
-+ _dbus_string_free (&decoded);
-+ return FALSE;
-+ }
-+
-+ if (_dbus_string_get_length (args) != end)
-+ {
-+ _dbus_string_free (&decoded);
-+ if (!send_error (auth, "Invalid hex encoding"))
-+ return FALSE;
-+
-+ return TRUE;
-+ }
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ if (_dbus_string_validate_ascii (&decoded, 0,
-+ _dbus_string_get_length (&decoded)))
-+ _dbus_verbose ("%s: data: '%s'\n",
-+ DBUS_AUTH_NAME (auth),
-+ _dbus_string_get_const_data (&decoded));
-+#endif
-+
-+ if (!(* data_func) (auth, &decoded))
-+ {
-+ _dbus_string_free (&decoded);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&decoded);
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+handle_auth (DBusAuth *auth, const DBusString *args)
-+{
-+ if (_dbus_string_get_length (args) == 0)
-+ {
-+ /* No args to the auth, send mechanisms */
-+ if (!send_rejected (auth))
-+ return FALSE;
-+
-+ return TRUE;
-+ }
-+ else
-+ {
-+ int i;
-+ DBusString mech;
-+ DBusString hex_response;
-+
-+ _dbus_string_find_blank (args, 0, &i);
-+
-+ if (!_dbus_string_init (&mech))
-+ return FALSE;
-+
-+ if (!_dbus_string_init (&hex_response))
-+ {
-+ _dbus_string_free (&mech);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_copy_len (args, 0, i, &mech, 0))
-+ goto failed;
-+
-+ _dbus_string_skip_blank (args, i, &i);
-+ if (!_dbus_string_copy (args, i, &hex_response, 0))
-+ goto failed;
-+
-+ auth->mech = find_mech (&mech, auth->allowed_mechs);
-+ if (auth->mech != NULL)
-+ {
-+ _dbus_verbose ("%s: Trying mechanism %s\n",
-+ DBUS_AUTH_NAME (auth),
-+ auth->mech->mechanism);
-+
-+ if (!process_data (auth, &hex_response,
-+ auth->mech->server_data_func))
-+ goto failed;
-+ }
-+ else
-+ {
-+ /* Unsupported mechanism */
-+ _dbus_verbose ("%s: Unsupported mechanism %s\n",
-+ DBUS_AUTH_NAME (auth),
-+ _dbus_string_get_const_data (&mech));
-+
-+ if (!send_rejected (auth))
-+ goto failed;
-+ }
-+
-+ _dbus_string_free (&mech);
-+ _dbus_string_free (&hex_response);
-+
-+ return TRUE;
-+
-+ failed:
-+ auth->mech = NULL;
-+ _dbus_string_free (&mech);
-+ _dbus_string_free (&hex_response);
-+ return FALSE;
-+ }
-+}
-+
-+static dbus_bool_t
-+handle_server_state_waiting_for_auth (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args)
-+{
-+ switch (command)
-+ {
-+ case DBUS_AUTH_COMMAND_AUTH:
-+ return handle_auth (auth, args);
-+
-+ case DBUS_AUTH_COMMAND_CANCEL:
-+ case DBUS_AUTH_COMMAND_DATA:
-+ return send_error (auth, "Not currently in an auth conversation");
-+
-+ case DBUS_AUTH_COMMAND_BEGIN:
-+ goto_state (auth, &common_state_need_disconnect);
-+ return TRUE;
-+
-+ case DBUS_AUTH_COMMAND_ERROR:
-+ return send_rejected (auth);
-+
-+ case DBUS_AUTH_COMMAND_REJECTED:
-+ case DBUS_AUTH_COMMAND_OK:
-+ case DBUS_AUTH_COMMAND_UNKNOWN:
-+ default:
-+ return send_error (auth, "Unknown command");
-+ }
-+}
-+
-+static dbus_bool_t
-+handle_server_state_waiting_for_data (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args)
-+{
-+ switch (command)
-+ {
-+ case DBUS_AUTH_COMMAND_AUTH:
-+ return send_error (auth, "Sent AUTH while another AUTH in progress");
-+
-+ case DBUS_AUTH_COMMAND_CANCEL:
-+ case DBUS_AUTH_COMMAND_ERROR:
-+ return send_rejected (auth);
-+
-+ case DBUS_AUTH_COMMAND_DATA:
-+ return process_data (auth, args, auth->mech->server_data_func);
-+
-+ case DBUS_AUTH_COMMAND_BEGIN:
-+ goto_state (auth, &common_state_need_disconnect);
-+ return TRUE;
-+
-+ case DBUS_AUTH_COMMAND_REJECTED:
-+ case DBUS_AUTH_COMMAND_OK:
-+ case DBUS_AUTH_COMMAND_UNKNOWN:
-+ default:
-+ return send_error (auth, "Unknown command");
-+ }
-+}
-+
-+static dbus_bool_t
-+handle_server_state_waiting_for_begin (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args)
-+{
-+ switch (command)
-+ {
-+ case DBUS_AUTH_COMMAND_AUTH:
-+ return send_error (auth, "Sent AUTH while expecting BEGIN");
-+
-+ case DBUS_AUTH_COMMAND_DATA:
-+ return send_error (auth, "Sent DATA while expecting BEGIN");
-+
-+ case DBUS_AUTH_COMMAND_BEGIN:
-+ goto_state (auth, &common_state_authenticated);
-+ return TRUE;
-+
-+ case DBUS_AUTH_COMMAND_REJECTED:
-+ case DBUS_AUTH_COMMAND_OK:
-+ case DBUS_AUTH_COMMAND_UNKNOWN:
-+ default:
-+ return send_error (auth, "Unknown command");
-+
-+ case DBUS_AUTH_COMMAND_CANCEL:
-+ case DBUS_AUTH_COMMAND_ERROR:
-+ return send_rejected (auth);
-+ }
-+}
-+
-+/* return FALSE if no memory, TRUE if all OK */
-+static dbus_bool_t
-+get_word (const DBusString *str,
-+ int *start,
-+ DBusString *word)
-+{
-+ int i;
-+
-+ _dbus_string_skip_blank (str, *start, start);
-+ _dbus_string_find_blank (str, *start, &i);
-+
-+ if (i > *start)
-+ {
-+ if (!_dbus_string_copy_len (str, *start, i - *start, word, 0))
-+ return FALSE;
-+
-+ *start = i;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+record_mechanisms (DBusAuth *auth,
-+ const DBusString *args)
-+{
-+ int next;
-+ int len;
-+
-+ if (auth->already_got_mechanisms)
-+ return TRUE;
-+
-+ len = _dbus_string_get_length (args);
-+
-+ next = 0;
-+ while (next < len)
-+ {
-+ DBusString m;
-+ const DBusAuthMechanismHandler *mech;
-+
-+ if (!_dbus_string_init (&m))
-+ goto nomem;
-+
-+ if (!get_word (args, &next, &m))
-+ {
-+ _dbus_string_free (&m);
-+ goto nomem;
-+ }
-+
-+ mech = find_mech (&m, auth->allowed_mechs);
-+
-+ if (mech != NULL)
-+ {
-+ /* FIXME right now we try mechanisms in the order
-+ * the server lists them; should we do them in
-+ * some more deterministic order?
-+ *
-+ * Probably in all_mechanisms order, our order of
-+ * preference. Of course when the server is us,
-+ * it lists things in that order anyhow.
-+ */
-+
-+ if (mech != &all_mechanisms[0])
-+ {
-+ _dbus_verbose ("%s: Adding mechanism %s to list we will try\n",
-+ DBUS_AUTH_NAME (auth), mech->mechanism);
-+
-+ if (!_dbus_list_append (& DBUS_AUTH_CLIENT (auth)->mechs_to_try,
-+ (void*) mech))
-+ {
-+ _dbus_string_free (&m);
-+ goto nomem;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_verbose ("%s: Already tried mechanism %s; not adding to list we will try\n",
-+ DBUS_AUTH_NAME (auth), mech->mechanism);
-+ }
-+ }
-+ else
-+ {
-+ _dbus_verbose ("%s: Server offered mechanism \"%s\" that we don't know how to use\n",
-+ DBUS_AUTH_NAME (auth),
-+ _dbus_string_get_const_data (&m));
-+ }
-+
-+ _dbus_string_free (&m);
-+ }
-+
-+ auth->already_got_mechanisms = TRUE;
-+
-+ return TRUE;
-+
-+ nomem:
-+ _dbus_list_clear (& DBUS_AUTH_CLIENT (auth)->mechs_to_try);
-+
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+process_rejected (DBusAuth *auth, const DBusString *args)
-+{
-+ const DBusAuthMechanismHandler *mech;
-+ DBusAuthClient *client;
-+
-+ client = DBUS_AUTH_CLIENT (auth);
-+
-+ if (!auth->already_got_mechanisms)
-+ {
-+ if (!record_mechanisms (auth, args))
-+ return FALSE;
-+ }
-+
-+ if (DBUS_AUTH_CLIENT (auth)->mechs_to_try != NULL)
-+ {
-+ mech = client->mechs_to_try->data;
-+
-+ if (!send_auth (auth, mech))
-+ return FALSE;
-+
-+ _dbus_list_pop_first (&client->mechs_to_try);
-+
-+ _dbus_verbose ("%s: Trying mechanism %s\n",
-+ DBUS_AUTH_NAME (auth),
-+ mech->mechanism);
-+ }
-+ else
-+ {
-+ /* Give up */
-+ _dbus_verbose ("%s: Disconnecting because we are out of mechanisms to try using\n",
-+ DBUS_AUTH_NAME (auth));
-+ goto_state (auth, &common_state_need_disconnect);
-+ }
-+
-+ return TRUE;
-+}
-+
-+
-+static dbus_bool_t
-+handle_client_state_waiting_for_data (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args)
-+{
-+ _dbus_assert (auth->mech != NULL);
-+
-+ switch (command)
-+ {
-+ case DBUS_AUTH_COMMAND_DATA:
-+ return process_data (auth, args, auth->mech->client_data_func);
-+
-+ case DBUS_AUTH_COMMAND_REJECTED:
-+ return process_rejected (auth, args);
-+
-+ case DBUS_AUTH_COMMAND_OK:
-+ return send_begin (auth, args);
-+
-+ case DBUS_AUTH_COMMAND_ERROR:
-+ return send_cancel (auth);
-+
-+ case DBUS_AUTH_COMMAND_AUTH:
-+ case DBUS_AUTH_COMMAND_CANCEL:
-+ case DBUS_AUTH_COMMAND_BEGIN:
-+ case DBUS_AUTH_COMMAND_UNKNOWN:
-+ default:
-+ return send_error (auth, "Unknown command");
-+ }
-+}
-+
-+static dbus_bool_t
-+handle_client_state_waiting_for_ok (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args)
-+{
-+ switch (command)
-+ {
-+ case DBUS_AUTH_COMMAND_REJECTED:
-+ return process_rejected (auth, args);
-+
-+ case DBUS_AUTH_COMMAND_OK:
-+ return send_begin (auth, args);
-+
-+ case DBUS_AUTH_COMMAND_DATA:
-+ case DBUS_AUTH_COMMAND_ERROR:
-+ return send_cancel (auth);
-+
-+ case DBUS_AUTH_COMMAND_AUTH:
-+ case DBUS_AUTH_COMMAND_CANCEL:
-+ case DBUS_AUTH_COMMAND_BEGIN:
-+ case DBUS_AUTH_COMMAND_UNKNOWN:
-+ default:
-+ return send_error (auth, "Unknown command");
-+ }
-+}
-+
-+static dbus_bool_t
-+handle_client_state_waiting_for_reject (DBusAuth *auth,
-+ DBusAuthCommand command,
-+ const DBusString *args)
-+{
-+ switch (command)
-+ {
-+ case DBUS_AUTH_COMMAND_REJECTED:
-+ return process_rejected (auth, args);
-+
-+ case DBUS_AUTH_COMMAND_AUTH:
-+ case DBUS_AUTH_COMMAND_CANCEL:
-+ case DBUS_AUTH_COMMAND_DATA:
-+ case DBUS_AUTH_COMMAND_BEGIN:
-+ case DBUS_AUTH_COMMAND_OK:
-+ case DBUS_AUTH_COMMAND_ERROR:
-+ case DBUS_AUTH_COMMAND_UNKNOWN:
-+ default:
-+ goto_state (auth, &common_state_need_disconnect);
-+ return TRUE;
-+ }
-+}
-+
-+/**
-+ * Mapping from command name to enum
-+ */
-+typedef struct {
-+ const char *name; /**< Name of the command */
-+ DBusAuthCommand command; /**< Corresponding enum */
-+} DBusAuthCommandName;
-+
-+static const DBusAuthCommandName auth_command_names[] = {
-+ { "AUTH", DBUS_AUTH_COMMAND_AUTH },
-+ { "CANCEL", DBUS_AUTH_COMMAND_CANCEL },
-+ { "DATA", DBUS_AUTH_COMMAND_DATA },
-+ { "BEGIN", DBUS_AUTH_COMMAND_BEGIN },
-+ { "REJECTED", DBUS_AUTH_COMMAND_REJECTED },
-+ { "OK", DBUS_AUTH_COMMAND_OK },
-+ { "ERROR", DBUS_AUTH_COMMAND_ERROR }
-+};
-+
-+static DBusAuthCommand
-+lookup_command_from_name (DBusString *command)
-+{
-+ int i;
-+
-+ for (i = 0; i < _DBUS_N_ELEMENTS (auth_command_names); i++)
-+ {
-+ if (_dbus_string_equal_c_str (command,
-+ auth_command_names[i].name))
-+ return auth_command_names[i].command;
-+ }
-+
-+ return DBUS_AUTH_COMMAND_UNKNOWN;
-+}
-+
-+static void
-+goto_state (DBusAuth *auth, const DBusAuthStateData *state)
-+{
-+ _dbus_verbose ("%s: going from state %s to state %s\n",
-+ DBUS_AUTH_NAME (auth),
-+ auth->state->name,
-+ state->name);
-+
-+ auth->state = state;
-+}
-+
-+/* returns whether to call it again right away */
-+static dbus_bool_t
-+process_command (DBusAuth *auth)
-+{
-+ DBusAuthCommand command;
-+ DBusString line;
-+ DBusString args;
-+ int eol;
-+ int i, j;
-+ dbus_bool_t retval;
-+
-+ /* _dbus_verbose ("%s: trying process_command()\n"); */
-+
-+ retval = FALSE;
-+
-+ eol = 0;
-+ if (!_dbus_string_find (&auth->incoming, 0, "\r\n", &eol))
-+ return FALSE;
-+
-+ if (!_dbus_string_init (&line))
-+ {
-+ auth->needed_memory = TRUE;
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&args))
-+ {
-+ _dbus_string_free (&line);
-+ auth->needed_memory = TRUE;
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_copy_len (&auth->incoming, 0, eol, &line, 0))
-+ goto out;
-+
-+ if (!_dbus_string_validate_ascii (&line, 0,
-+ _dbus_string_get_length (&line)))
-+ {
-+ _dbus_verbose ("%s: Command contained non-ASCII chars or embedded nul\n",
-+ DBUS_AUTH_NAME (auth));
-+ if (!send_error (auth, "Command contained non-ASCII"))
-+ goto out;
-+ else
-+ goto next_command;
-+ }
-+
-+ _dbus_verbose ("%s: got command \"%s\"\n",
-+ DBUS_AUTH_NAME (auth),
-+ _dbus_string_get_const_data (&line));
-+
-+ _dbus_string_find_blank (&line, 0, &i);
-+ _dbus_string_skip_blank (&line, i, &j);
-+
-+ if (j > i)
-+ _dbus_string_delete (&line, i, j - i);
-+
-+ if (!_dbus_string_move (&line, i, &args, 0))
-+ goto out;
-+
-+ /* FIXME we should probably validate that only the allowed
-+ * chars are in the command name
-+ */
-+
-+ command = lookup_command_from_name (&line);
-+ if (!(* auth->state->handler) (auth, command, &args))
-+ goto out;
-+
-+ next_command:
-+
-+ /* We've succeeded in processing the whole command so drop it out
-+ * of the incoming buffer and return TRUE to try another command.
-+ */
-+
-+ _dbus_string_delete (&auth->incoming, 0, eol);
-+
-+ /* kill the \r\n */
-+ _dbus_string_delete (&auth->incoming, 0, 2);
-+
-+ retval = TRUE;
-+
-+ out:
-+ _dbus_string_free (&args);
-+ _dbus_string_free (&line);
-+
-+ if (!retval)
-+ auth->needed_memory = TRUE;
-+ else
-+ auth->needed_memory = FALSE;
-+
-+ return retval;
-+}
-+
-+
-+/** @} */
-+
-+/**
-+ * @addtogroup DBusAuth
-+ * @{
-+ */
-+
-+/**
-+ * Creates a new auth conversation object for the server side.
-+ * See doc/dbus-sasl-profile.txt for full details on what
-+ * this object does.
-+ *
-+ * @returns the new object or #NULL if no memory
-+ */
-+DBusAuth*
-+_dbus_auth_server_new (const DBusString *guid)
-+{
-+ DBusAuth *auth;
-+ DBusAuthServer *server_auth;
-+ DBusString guid_copy;
-+
-+ if (!_dbus_string_init (&guid_copy))
-+ return NULL;
-+
-+ if (!_dbus_string_copy (guid, 0, &guid_copy, 0))
-+ {
-+ _dbus_string_free (&guid_copy);
-+ return NULL;
-+ }
-+
-+ auth = _dbus_auth_new (sizeof (DBusAuthServer));
-+ if (auth == NULL)
-+ {
-+ _dbus_string_free (&guid_copy);
-+ return NULL;
-+ }
-+
-+ auth->side = auth_side_server;
-+ auth->state = &server_state_waiting_for_auth;
-+
-+ server_auth = DBUS_AUTH_SERVER (auth);
-+
-+ server_auth->guid = guid_copy;
-+
-+ /* perhaps this should be per-mechanism with a lower
-+ * max
-+ */
-+ server_auth->failures = 0;
-+ server_auth->max_failures = 6;
-+
-+ return auth;
-+}
-+
-+/**
-+ * Creates a new auth conversation object for the client side.
-+ * See doc/dbus-sasl-profile.txt for full details on what
-+ * this object does.
-+ *
-+ * @returns the new object or #NULL if no memory
-+ */
-+DBusAuth*
-+_dbus_auth_client_new (void)
-+{
-+ DBusAuth *auth;
-+ DBusString guid_str;
-+
-+ if (!_dbus_string_init (&guid_str))
-+ return NULL;
-+
-+ auth = _dbus_auth_new (sizeof (DBusAuthClient));
-+ if (auth == NULL)
-+ {
-+ _dbus_string_free (&guid_str);
-+ return NULL;
-+ }
-+
-+ DBUS_AUTH_CLIENT (auth)->guid_from_server = guid_str;
-+
-+ auth->side = auth_side_client;
-+ auth->state = &client_state_need_send_auth;
-+
-+ /* Start the auth conversation by sending AUTH for our default
-+ * mechanism */
-+ if (!send_auth (auth, &all_mechanisms[0]))
-+ {
-+ _dbus_auth_unref (auth);
-+ return NULL;
-+ }
-+
-+ return auth;
-+}
-+
-+/**
-+ * Increments the refcount of an auth object.
-+ *
-+ * @param auth the auth conversation
-+ * @returns the auth conversation
-+ */
-+DBusAuth *
-+_dbus_auth_ref (DBusAuth *auth)
-+{
-+ _dbus_assert (auth != NULL);
-+
-+ auth->refcount += 1;
-+
-+ return auth;
-+}
-+
-+/**
-+ * Decrements the refcount of an auth object.
-+ *
-+ * @param auth the auth conversation
-+ */
-+void
-+_dbus_auth_unref (DBusAuth *auth)
-+{
-+ _dbus_assert (auth != NULL);
-+ _dbus_assert (auth->refcount > 0);
-+
-+ auth->refcount -= 1;
-+ if (auth->refcount == 0)
-+ {
-+ shutdown_mech (auth);
-+
-+ if (DBUS_AUTH_IS_CLIENT (auth))
-+ {
-+ _dbus_string_free (& DBUS_AUTH_CLIENT (auth)->guid_from_server);
-+ _dbus_list_clear (& DBUS_AUTH_CLIENT (auth)->mechs_to_try);
-+ }
-+ else
-+ {
-+ _dbus_assert (DBUS_AUTH_IS_SERVER (auth));
-+
-+ _dbus_string_free (& DBUS_AUTH_SERVER (auth)->guid);
-+ }
-+
-+ if (auth->keyring)
-+ _dbus_keyring_unref (auth->keyring);
-+
-+ _dbus_string_free (&auth->context);
-+ _dbus_string_free (&auth->challenge);
-+ _dbus_string_free (&auth->identity);
-+ _dbus_string_free (&auth->incoming);
-+ _dbus_string_free (&auth->outgoing);
-+
-+ dbus_free_string_array (auth->allowed_mechs);
-+
-+ dbus_free (auth);
-+ }
-+}
-+
-+/**
-+ * Sets an array of authentication mechanism names
-+ * that we are willing to use.
-+ *
-+ * @param auth the auth conversation
-+ * @param mechanisms #NULL-terminated array of mechanism names
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_auth_set_mechanisms (DBusAuth *auth,
-+ const char **mechanisms)
-+{
-+ char **copy;
-+
-+ if (mechanisms != NULL)
-+ {
-+ copy = _dbus_dup_string_array (mechanisms);
-+ if (copy == NULL)
-+ return FALSE;
-+ }
-+ else
-+ copy = NULL;
-+
-+ dbus_free_string_array (auth->allowed_mechs);
-+
-+ auth->allowed_mechs = copy;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * @param auth the auth conversation object
-+ * @returns #TRUE if we're in a final state
-+ */
-+#define DBUS_AUTH_IN_END_STATE(auth) ((auth)->state->handler == NULL)
-+
-+/**
-+ * Analyzes buffered input and moves the auth conversation forward,
-+ * returning the new state of the auth conversation.
-+ *
-+ * @param auth the auth conversation
-+ * @returns the new state
-+ */
-+DBusAuthState
-+_dbus_auth_do_work (DBusAuth *auth)
-+{
-+ auth->needed_memory = FALSE;
-+
-+ /* Max amount we'll buffer up before deciding someone's on crack */
-+#define MAX_BUFFER (16 * _DBUS_ONE_KILOBYTE)
-+
-+ do
-+ {
-+ if (DBUS_AUTH_IN_END_STATE (auth))
-+ break;
-+
-+ if (_dbus_string_get_length (&auth->incoming) > MAX_BUFFER ||
-+ _dbus_string_get_length (&auth->outgoing) > MAX_BUFFER)
-+ {
-+ goto_state (auth, &common_state_need_disconnect);
-+ _dbus_verbose ("%s: Disconnecting due to excessive data buffered in auth phase\n",
-+ DBUS_AUTH_NAME (auth));
-+ break;
-+ }
-+ }
-+ while (process_command (auth));
-+
-+ if (auth->needed_memory)
-+ return DBUS_AUTH_STATE_WAITING_FOR_MEMORY;
-+ else if (_dbus_string_get_length (&auth->outgoing) > 0)
-+ return DBUS_AUTH_STATE_HAVE_BYTES_TO_SEND;
-+ else if (auth->state == &common_state_need_disconnect)
-+ return DBUS_AUTH_STATE_NEED_DISCONNECT;
-+ else if (auth->state == &common_state_authenticated)
-+ return DBUS_AUTH_STATE_AUTHENTICATED;
-+ else return DBUS_AUTH_STATE_WAITING_FOR_INPUT;
-+}
-+
-+/**
-+ * Gets bytes that need to be sent to the peer we're conversing with.
-+ * After writing some bytes, _dbus_auth_bytes_sent() must be called
-+ * to notify the auth object that they were written.
-+ *
-+ * @param auth the auth conversation
-+ * @param str return location for a ref to the buffer to send
-+ * @returns #FALSE if nothing to send
-+ */
-+dbus_bool_t
-+_dbus_auth_get_bytes_to_send (DBusAuth *auth,
-+ const DBusString **str)
-+{
-+ _dbus_assert (auth != NULL);
-+ _dbus_assert (str != NULL);
-+
-+ *str = NULL;
-+
-+ if (_dbus_string_get_length (&auth->outgoing) == 0)
-+ return FALSE;
-+
-+ *str = &auth->outgoing;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Notifies the auth conversation object that
-+ * the given number of bytes of the outgoing buffer
-+ * have been written out.
-+ *
-+ * @param auth the auth conversation
-+ * @param bytes_sent number of bytes written out
-+ */
-+void
-+_dbus_auth_bytes_sent (DBusAuth *auth,
-+ int bytes_sent)
-+{
-+ _dbus_verbose ("%s: Sent %d bytes of: %s\n",
-+ DBUS_AUTH_NAME (auth),
-+ bytes_sent,
-+ _dbus_string_get_const_data (&auth->outgoing));
-+
-+ _dbus_string_delete (&auth->outgoing,
-+ 0, bytes_sent);
-+}
-+
-+/**
-+ * Get a buffer to be used for reading bytes from the peer we're conversing
-+ * with. Bytes should be appended to this buffer.
-+ *
-+ * @param auth the auth conversation
-+ * @param buffer return location for buffer to append bytes to
-+ */
-+void
-+_dbus_auth_get_buffer (DBusAuth *auth,
-+ DBusString **buffer)
-+{
-+ _dbus_assert (auth != NULL);
-+ _dbus_assert (!auth->buffer_outstanding);
-+
-+ *buffer = &auth->incoming;
-+
-+ auth->buffer_outstanding = TRUE;
-+}
-+
-+/**
-+ * Returns a buffer with new data read into it.
-+ *
-+ * @param auth the auth conversation
-+ * @param buffer the buffer being returned
-+ * @param bytes_read number of new bytes added
-+ */
-+void
-+_dbus_auth_return_buffer (DBusAuth *auth,
-+ DBusString *buffer,
-+ int bytes_read)
-+{
-+ _dbus_assert (buffer == &auth->incoming);
-+ _dbus_assert (auth->buffer_outstanding);
-+
-+ auth->buffer_outstanding = FALSE;
-+}
-+
-+/**
-+ * Returns leftover bytes that were not used as part of the auth
-+ * conversation. These bytes will be part of the message stream
-+ * instead. This function may not be called until authentication has
-+ * succeeded.
-+ *
-+ * @param auth the auth conversation
-+ * @param str return location for pointer to string of unused bytes
-+ */
-+void
-+_dbus_auth_get_unused_bytes (DBusAuth *auth,
-+ const DBusString **str)
-+{
-+ if (!DBUS_AUTH_IN_END_STATE (auth))
-+ return;
-+
-+ *str = &auth->incoming;
-+}
-+
-+
-+/**
-+ * Gets rid of unused bytes returned by _dbus_auth_get_unused_bytes()
-+ * after we've gotten them and successfully moved them elsewhere.
-+ *
-+ * @param auth the auth conversation
-+ */
-+void
-+_dbus_auth_delete_unused_bytes (DBusAuth *auth)
-+{
-+ if (!DBUS_AUTH_IN_END_STATE (auth))
-+ return;
-+
-+ _dbus_string_set_length (&auth->incoming, 0);
-+}
-+
-+/**
-+ * Called post-authentication, indicates whether we need to encode
-+ * the message stream with _dbus_auth_encode_data() prior to
-+ * sending it to the peer.
-+ *
-+ * @param auth the auth conversation
-+ * @returns #TRUE if we need to encode the stream
-+ */
-+dbus_bool_t
-+_dbus_auth_needs_encoding (DBusAuth *auth)
-+{
-+ if (auth->state != &common_state_authenticated)
-+ return FALSE;
-+
-+ if (auth->mech != NULL)
-+ {
-+ if (DBUS_AUTH_IS_CLIENT (auth))
-+ return auth->mech->client_encode_func != NULL;
-+ else
-+ return auth->mech->server_encode_func != NULL;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Called post-authentication, encodes a block of bytes for sending to
-+ * the peer. If no encoding was negotiated, just copies the bytes
-+ * (you can avoid this by checking _dbus_auth_needs_encoding()).
-+ *
-+ * @param auth the auth conversation
-+ * @param plaintext the plain text data
-+ * @param encoded initialized string to where encoded data is appended
-+ * @returns #TRUE if we had enough memory and successfully encoded
-+ */
-+dbus_bool_t
-+_dbus_auth_encode_data (DBusAuth *auth,
-+ const DBusString *plaintext,
-+ DBusString *encoded)
-+{
-+ _dbus_assert (plaintext != encoded);
-+
-+ if (auth->state != &common_state_authenticated)
-+ return FALSE;
-+
-+ if (_dbus_auth_needs_encoding (auth))
-+ {
-+ if (DBUS_AUTH_IS_CLIENT (auth))
-+ return (* auth->mech->client_encode_func) (auth, plaintext, encoded);
-+ else
-+ return (* auth->mech->server_encode_func) (auth, plaintext, encoded);
-+ }
-+ else
-+ {
-+ return _dbus_string_copy (plaintext, 0, encoded,
-+ _dbus_string_get_length (encoded));
-+ }
-+}
-+
-+/**
-+ * Called post-authentication, indicates whether we need to decode
-+ * the message stream with _dbus_auth_decode_data() after
-+ * receiving it from the peer.
-+ *
-+ * @param auth the auth conversation
-+ * @returns #TRUE if we need to encode the stream
-+ */
-+dbus_bool_t
-+_dbus_auth_needs_decoding (DBusAuth *auth)
-+{
-+ if (auth->state != &common_state_authenticated)
-+ return FALSE;
-+
-+ if (auth->mech != NULL)
-+ {
-+ if (DBUS_AUTH_IS_CLIENT (auth))
-+ return auth->mech->client_decode_func != NULL;
-+ else
-+ return auth->mech->server_decode_func != NULL;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+
-+/**
-+ * Called post-authentication, decodes a block of bytes received from
-+ * the peer. If no encoding was negotiated, just copies the bytes (you
-+ * can avoid this by checking _dbus_auth_needs_decoding()).
-+ *
-+ * @todo We need to be able to distinguish "out of memory" error
-+ * from "the data is hosed" error.
-+ *
-+ * @param auth the auth conversation
-+ * @param encoded the encoded data
-+ * @param plaintext initialized string where decoded data is appended
-+ * @returns #TRUE if we had enough memory and successfully decoded
-+ */
-+dbus_bool_t
-+_dbus_auth_decode_data (DBusAuth *auth,
-+ const DBusString *encoded,
-+ DBusString *plaintext)
-+{
-+ _dbus_assert (plaintext != encoded);
-+
-+ if (auth->state != &common_state_authenticated)
-+ return FALSE;
-+
-+ if (_dbus_auth_needs_decoding (auth))
-+ {
-+ if (DBUS_AUTH_IS_CLIENT (auth))
-+ return (* auth->mech->client_decode_func) (auth, encoded, plaintext);
-+ else
-+ return (* auth->mech->server_decode_func) (auth, encoded, plaintext);
-+ }
-+ else
-+ {
-+ return _dbus_string_copy (encoded, 0, plaintext,
-+ _dbus_string_get_length (plaintext));
-+ }
-+}
-+
-+/**
-+ * Sets credentials received via reliable means from the operating
-+ * system.
-+ *
-+ * @param auth the auth conversation
-+ * @param credentials the credentials received
-+ */
-+void
-+_dbus_auth_set_credentials (DBusAuth *auth,
-+ const DBusCredentials *credentials)
-+{
-+ auth->credentials = *credentials;
-+}
-+
-+/**
-+ * Gets the identity we authorized the client as. Apps may have
-+ * different policies as to what identities they allow.
-+ *
-+ * @param auth the auth conversation
-+ * @param credentials the credentials we've authorized
-+ */
-+void
-+_dbus_auth_get_identity (DBusAuth *auth,
-+ DBusCredentials *credentials)
-+{
-+ if (auth->state == &common_state_authenticated)
-+ *credentials = auth->authorized_identity;
-+ else
-+ _dbus_credentials_clear (credentials);
-+}
-+
-+/**
-+ * Gets the GUID from the server if we've authenticated; gets
-+ * #NULL otherwise.
-+ * @param auth the auth object
-+ * @returns the GUID in ASCII hex format
-+ */
-+const char*
-+_dbus_auth_get_guid_from_server (DBusAuth *auth)
-+{
-+ _dbus_assert (DBUS_AUTH_IS_CLIENT (auth));
-+
-+ if (auth->state == &common_state_authenticated)
-+ return _dbus_string_get_const_data (& DBUS_AUTH_CLIENT (auth)->guid_from_server);
-+ else
-+ return NULL;
-+}
-+
-+/**
-+ * Sets the "authentication context" which scopes cookies
-+ * with the DBUS_COOKIE_SHA1 auth mechanism for example.
-+ *
-+ * @param auth the auth conversation
-+ * @param context the context
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_auth_set_context (DBusAuth *auth,
-+ const DBusString *context)
-+{
-+ return _dbus_string_replace_len (context, 0, _dbus_string_get_length (context),
-+ &auth->context, 0, _dbus_string_get_length (context));
-+}
-+
-+/** @} */
-+
-+/* tests in dbus-auth-util.c */
-diff -Naur dbus-0.61.orig/dbus/dbus-auth.h dbus-0.61/dbus/dbus-auth.h
---- dbus-0.61.orig/dbus/dbus-auth.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-auth.h 2005-05-06 00:02:11.000000000 +0200
-@@ -0,0 +1,82 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-auth.h Authentication
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_AUTH_H
-+#define DBUS_AUTH_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-sysdeps.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusAuth DBusAuth;
-+
-+typedef enum
-+{
-+ DBUS_AUTH_STATE_WAITING_FOR_INPUT,
-+ DBUS_AUTH_STATE_WAITING_FOR_MEMORY,
-+ DBUS_AUTH_STATE_HAVE_BYTES_TO_SEND,
-+ DBUS_AUTH_STATE_NEED_DISCONNECT,
-+ DBUS_AUTH_STATE_AUTHENTICATED
-+} DBusAuthState;
-+
-+DBusAuth* _dbus_auth_server_new (const DBusString *guid);
-+DBusAuth* _dbus_auth_client_new (void);
-+DBusAuth* _dbus_auth_ref (DBusAuth *auth);
-+void _dbus_auth_unref (DBusAuth *auth);
-+dbus_bool_t _dbus_auth_set_mechanisms (DBusAuth *auth,
-+ const char **mechanisms);
-+DBusAuthState _dbus_auth_do_work (DBusAuth *auth);
-+dbus_bool_t _dbus_auth_get_bytes_to_send (DBusAuth *auth,
-+ const DBusString **str);
-+void _dbus_auth_bytes_sent (DBusAuth *auth,
-+ int bytes_sent);
-+void _dbus_auth_get_buffer (DBusAuth *auth,
-+ DBusString **buffer);
-+void _dbus_auth_return_buffer (DBusAuth *auth,
-+ DBusString *buffer,
-+ int bytes_read);
-+void _dbus_auth_get_unused_bytes (DBusAuth *auth,
-+ const DBusString **str);
-+void _dbus_auth_delete_unused_bytes (DBusAuth *auth);
-+dbus_bool_t _dbus_auth_needs_encoding (DBusAuth *auth);
-+dbus_bool_t _dbus_auth_encode_data (DBusAuth *auth,
-+ const DBusString *plaintext,
-+ DBusString *encoded);
-+dbus_bool_t _dbus_auth_needs_decoding (DBusAuth *auth);
-+dbus_bool_t _dbus_auth_decode_data (DBusAuth *auth,
-+ const DBusString *encoded,
-+ DBusString *plaintext);
-+void _dbus_auth_set_credentials (DBusAuth *auth,
-+ const DBusCredentials *credentials);
-+void _dbus_auth_get_identity (DBusAuth *auth,
-+ DBusCredentials *credentials);
-+dbus_bool_t _dbus_auth_set_context (DBusAuth *auth,
-+ const DBusString *context);
-+const char* _dbus_auth_get_guid_from_server(DBusAuth *auth);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_AUTH_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-bus.c dbus-0.61/dbus/dbus-bus.c
---- dbus-0.61.orig/dbus/dbus-bus.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-bus.c 2005-12-19 16:11:51.000000000 +0100
-@@ -0,0 +1,1124 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-bus.c Convenience functions for communicating with the bus.
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-bus.h"
-+#include "dbus-protocol.h"
-+#include "dbus-internals.h"
-+#include "dbus-message.h"
-+#include "dbus-marshal-validate.h"
-+#include "dbus-threads-internal.h"
-+#include <string.h>
-+
-+/**
-+ * @defgroup DBusBus Message bus APIs
-+ * @ingroup DBus
-+ * @brief Functions for communicating with the message bus
-+ *
-+ * @todo right now the default address of the system bus is hardcoded,
-+ * so if you change it in the global config file suddenly you have to
-+ * set DBUS_SYSTEM_BUS_ADDRESS env variable. Might be nice if the
-+ * client lib somehow read the config file, or if the bus on startup
-+ * somehow wrote out its address to a well-known spot, but might also
-+ * not be worth it.
-+ */
-+
-+/**
-+ * @defgroup DBusBusInternals Message bus APIs internals
-+ * @ingroup DBusInternals
-+ * @brief Internals of functions for communicating with the message bus
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Block of message-bus-related data we attach to each
-+ * #DBusConnection used with these convenience functions.
-+ *
-+ */
-+typedef struct
-+{
-+ DBusConnection *connection; /**< Connection we're associated with */
-+ char *unique_name; /**< Unique name of this connection */
-+
-+ unsigned int is_well_known : 1; /**< Is one of the well-known connections in our global array */
-+} BusData;
-+
-+/** The slot we have reserved to store BusData.
-+ */
-+static dbus_int32_t bus_data_slot = -1;
-+
-+/** Number of bus types */
-+#define N_BUS_TYPES 3
-+
-+static DBusConnection *bus_connections[N_BUS_TYPES];
-+static char *bus_connection_addresses[N_BUS_TYPES] = { NULL, NULL, NULL };
-+
-+static DBusBusType activation_bus_type = DBUS_BUS_STARTER;
-+
-+static dbus_bool_t initialized = FALSE;
-+
-+/**
-+ * Lock for globals in this file
-+ */
-+_DBUS_DEFINE_GLOBAL_LOCK (bus);
-+
-+static void
-+addresses_shutdown_func (void *data)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i < N_BUS_TYPES)
-+ {
-+ if (bus_connections[i] != NULL)
-+ _dbus_warn ("dbus_shutdown() called but connections were still live!");
-+
-+ dbus_free (bus_connection_addresses[i]);
-+ bus_connection_addresses[i] = NULL;
-+ ++i;
-+ }
-+
-+ activation_bus_type = DBUS_BUS_STARTER;
-+}
-+
-+static dbus_bool_t
-+get_from_env (char **connection_p,
-+ const char *env_var)
-+{
-+ const char *s;
-+
-+ _dbus_assert (*connection_p == NULL);
-+
-+ s = _dbus_getenv (env_var);
-+ if (s == NULL || *s == '\0')
-+ return TRUE; /* successfully didn't use the env var */
-+ else
-+ {
-+ *connection_p = _dbus_strdup (s);
-+ return *connection_p != NULL;
-+ }
-+}
-+
-+static dbus_bool_t
-+init_connections_unlocked (void)
-+{
-+ if (!initialized)
-+ {
-+ const char *s;
-+ int i;
-+
-+ i = 0;
-+ while (i < N_BUS_TYPES)
-+ {
-+ bus_connections[i] = NULL;
-+ ++i;
-+ }
-+
-+ /* Don't init these twice, we may run this code twice if
-+ * init_connections_unlocked() fails midway through.
-+ * In practice, each block below should contain only one
-+ * "return FALSE" or running through twice may not
-+ * work right.
-+ */
-+
-+ if (bus_connection_addresses[DBUS_BUS_SYSTEM] == NULL)
-+ {
-+ _dbus_verbose ("Filling in system bus address...\n");
-+
-+ if (!get_from_env (&bus_connection_addresses[DBUS_BUS_SYSTEM],
-+ "DBUS_SYSTEM_BUS_ADDRESS"))
-+ return FALSE;
-+ }
-+
-+
-+ if (bus_connection_addresses[DBUS_BUS_SYSTEM] == NULL)
-+ {
-+ /* Use default system bus address if none set in environment */
-+ bus_connection_addresses[DBUS_BUS_SYSTEM] =
-+ _dbus_strdup (DBUS_SYSTEM_BUS_DEFAULT_ADDRESS);
-+ if (bus_connection_addresses[DBUS_BUS_SYSTEM] == NULL)
-+ return FALSE;
-+
-+ _dbus_verbose (" used default system bus \"%s\"\n",
-+ bus_connection_addresses[DBUS_BUS_SYSTEM]);
-+ }
-+ else
-+ _dbus_verbose (" used env var system bus \"%s\"\n",
-+ bus_connection_addresses[DBUS_BUS_SYSTEM]);
-+
-+ if (bus_connection_addresses[DBUS_BUS_SESSION] == NULL)
-+ {
-+ _dbus_verbose ("Filling in session bus address...\n");
-+
-+ if (!get_from_env (&bus_connection_addresses[DBUS_BUS_SESSION],
-+ "DBUS_SESSION_BUS_ADDRESS"))
-+ return FALSE;
-+ _dbus_verbose (" \"%s\"\n", bus_connection_addresses[DBUS_BUS_SESSION] ?
-+ bus_connection_addresses[DBUS_BUS_SESSION] : "none set");
-+ }
-+
-+ if (bus_connection_addresses[DBUS_BUS_STARTER] == NULL)
-+ {
-+ _dbus_verbose ("Filling in activation bus address...\n");
-+
-+ if (!get_from_env (&bus_connection_addresses[DBUS_BUS_STARTER],
-+ "DBUS_STARTER_ADDRESS"))
-+ return FALSE;
-+
-+ _dbus_verbose (" \"%s\"\n", bus_connection_addresses[DBUS_BUS_STARTER] ?
-+ bus_connection_addresses[DBUS_BUS_STARTER] : "none set");
-+ }
-+
-+
-+ if (bus_connection_addresses[DBUS_BUS_STARTER] != NULL)
-+ {
-+ s = _dbus_getenv ("DBUS_STARTER_BUS_TYPE");
-+
-+ if (s != NULL)
-+ {
-+ _dbus_verbose ("Bus activation type was set to \"%s\"\n", s);
-+
-+ if (strcmp (s, "system") == 0)
-+ activation_bus_type = DBUS_BUS_SYSTEM;
-+ else if (strcmp (s, "session") == 0)
-+ activation_bus_type = DBUS_BUS_SESSION;
-+ }
-+ }
-+ else
-+ {
-+ /* Default to the session bus instead if available */
-+ if (bus_connection_addresses[DBUS_BUS_SESSION] != NULL)
-+ {
-+ bus_connection_addresses[DBUS_BUS_STARTER] =
-+ _dbus_strdup (bus_connection_addresses[DBUS_BUS_SESSION]);
-+ if (bus_connection_addresses[DBUS_BUS_STARTER] == NULL)
-+ return FALSE;
-+ }
-+ }
-+
-+ /* If we return FALSE we have to be sure that restarting
-+ * the above code will work right
-+ */
-+
-+ if (!_dbus_setenv ("DBUS_ACTIVATION_ADDRESS", NULL))
-+ return FALSE;
-+
-+ if (!_dbus_setenv ("DBUS_ACTIVATION_BUS_TYPE", NULL))
-+ return FALSE;
-+
-+ if (!_dbus_register_shutdown_func (addresses_shutdown_func,
-+ NULL))
-+ return FALSE;
-+
-+ initialized = TRUE;
-+ }
-+
-+ return initialized;
-+}
-+
-+static void
-+bus_data_free (void *data)
-+{
-+ BusData *bd = data;
-+
-+ if (bd->is_well_known)
-+ {
-+ int i;
-+ _DBUS_LOCK (bus);
-+ /* We may be stored in more than one slot */
-+ i = 0;
-+ while (i < N_BUS_TYPES)
-+ {
-+ if (bus_connections[i] == bd->connection)
-+ bus_connections[i] = NULL;
-+
-+ ++i;
-+ }
-+ _DBUS_UNLOCK (bus);
-+ }
-+
-+ dbus_free (bd->unique_name);
-+ dbus_free (bd);
-+
-+ dbus_connection_free_data_slot (&bus_data_slot);
-+}
-+
-+static BusData*
-+ensure_bus_data (DBusConnection *connection)
-+{
-+ BusData *bd;
-+
-+ if (!dbus_connection_allocate_data_slot (&bus_data_slot))
-+ return NULL;
-+
-+ bd = dbus_connection_get_data (connection, bus_data_slot);
-+ if (bd == NULL)
-+ {
-+ bd = dbus_new0 (BusData, 1);
-+ if (bd == NULL)
-+ {
-+ dbus_connection_free_data_slot (&bus_data_slot);
-+ return NULL;
-+ }
-+
-+ bd->connection = connection;
-+
-+ if (!dbus_connection_set_data (connection, bus_data_slot, bd,
-+ bus_data_free))
-+ {
-+ dbus_free (bd);
-+ dbus_connection_free_data_slot (&bus_data_slot);
-+ return NULL;
-+ }
-+
-+ /* Data slot refcount now held by the BusData */
-+ }
-+ else
-+ {
-+ dbus_connection_free_data_slot (&bus_data_slot);
-+ }
-+
-+ return bd;
-+}
-+
-+static DBusConnection *
-+internal_bus_get (DBusBusType type,
-+ DBusError *error, dbus_bool_t private)
-+{
-+ const char *address;
-+ DBusConnection *connection;
-+ BusData *bd;
-+ DBusBusType address_type;
-+
-+ _dbus_return_val_if_fail (type >= 0 && type < N_BUS_TYPES, NULL);
-+ _dbus_return_val_if_error_is_set (error, NULL);
-+
-+ _DBUS_LOCK (bus);
-+
-+ if (!init_connections_unlocked ())
-+ {
-+ _DBUS_UNLOCK (bus);
-+ _DBUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ /* We want to use the activation address even if the
-+ * activating bus is the session or system bus,
-+ * per the spec.
-+ */
-+ address_type = type;
-+
-+ /* Use the real type of the activation bus for getting its
-+ * connection, but only if the real type's address is available. (If
-+ * the activating bus isn't a well-known bus then
-+ * activation_bus_type == DBUS_BUS_STARTER)
-+ */
-+ if (type == DBUS_BUS_STARTER &&
-+ bus_connection_addresses[activation_bus_type] != NULL)
-+ type = activation_bus_type;
-+
-+ if (!private && bus_connections[type] != NULL)
-+ {
-+ connection = bus_connections[type];
-+ dbus_connection_ref (connection);
-+
-+ _DBUS_UNLOCK (bus);
-+ return connection;
-+ }
-+
-+ address = bus_connection_addresses[address_type];
-+ if (address == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Unable to determine the address of the message bus");
-+ _DBUS_UNLOCK (bus);
-+ return NULL;
-+ }
-+
-+ if (private)
-+ connection = dbus_connection_open_private(address, error);
-+ else
-+ connection = dbus_connection_open (address, error);
-+
-+ if (!connection)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _DBUS_UNLOCK (bus);
-+ return NULL;
-+ }
-+
-+ /* By default we're bound to the lifecycle of
-+ * the message bus.
-+ */
-+ dbus_connection_set_exit_on_disconnect (connection,
-+ TRUE);
-+
-+ if (!dbus_bus_register (connection, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_connection_close (connection);
-+ dbus_connection_unref (connection);
-+
-+ _DBUS_UNLOCK (bus);
-+ return NULL;
-+ }
-+
-+ if (!private)
-+ bus_connections[type] = connection;
-+
-+ bd = ensure_bus_data (connection);
-+ _dbus_assert (bd != NULL);
-+
-+ bd->is_well_known = TRUE;
-+
-+ _DBUS_UNLOCK (bus);
-+ return connection;
-+}
-+
-+
-+/** @} */ /* end of implementation details docs */
-+
-+/**
-+ * @addtogroup DBusBus
-+ * @{
-+ */
-+
-+/**
-+ * Connects to a bus daemon and registers the client with it. If a
-+ * connection to the bus already exists, then that connection is
-+ * returned. Caller owns a reference to the bus.
-+ *
-+ * @todo alex thinks we should nullify the connection when we get a disconnect-message.
-+ *
-+ * @param type bus type
-+ * @param error address where an error can be returned.
-+ * @returns a DBusConnection with new ref
-+ */
-+DBusConnection *
-+dbus_bus_get (DBusBusType type,
-+ DBusError *error) {
-+ return internal_bus_get(type, error, FALSE);
-+}
-+
-+/**
-+ * Connects to a bus daemon and registers the client with it. Unlike
-+ * dbus_bus_get(), always creates a new connection. This connection
-+ * will not be saved or recycled by libdbus. Caller owns a reference
-+ * to the bus.
-+ *
-+ * @param type bus type
-+ * @param error address where an error can be returned.
-+ * @returns a DBusConnection with new ref
-+ */
-+DBusConnection *
-+dbus_bus_get_private (DBusBusType type,
-+ DBusError *error) {
-+ return internal_bus_get(type, error, TRUE);
-+}
-+
-+/**
-+ * Registers a connection with the bus. This must be the first
-+ * thing an application does when connecting to the message bus.
-+ * If registration succeeds, the unique name will be set,
-+ * and can be obtained using dbus_bus_get_unique_name().
-+ *
-+ * @param connection the connection
-+ * @param error place to store errors
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+dbus_bus_register (DBusConnection *connection,
-+ DBusError *error)
-+{
-+ DBusMessage *message, *reply;
-+ char *name;
-+ BusData *bd;
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_error_is_set (error, FALSE);
-+
-+ retval = FALSE;
-+
-+ bd = ensure_bus_data (connection);
-+ if (bd == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (bd->unique_name != NULL)
-+ {
-+ _dbus_warn ("Attempt to register the same DBusConnection with the message bus, but it is already registered\n");
-+ /* This isn't an error, it's a programming bug. We'll be nice
-+ * and not _dbus_assert_not_reached()
-+ */
-+ return TRUE;
-+ }
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "Hello");
-+
-+ if (!message)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ reply = dbus_connection_send_with_reply_and_block (connection, message, -1, error);
-+
-+ dbus_message_unref (message);
-+
-+ if (reply == NULL)
-+ goto out;
-+ else if (dbus_set_error_from_message (error, reply))
-+ goto out;
-+ else if (!dbus_message_get_args (reply, error,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ goto out;
-+
-+ bd->unique_name = _dbus_strdup (name);
-+ if (bd->unique_name == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (reply)
-+ dbus_message_unref (reply);
-+
-+ if (!retval)
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+
-+ return retval;
-+}
-+
-+
-+/**
-+ * Sets the unique name of the connection. Can only be used if you
-+ * registered with the bus manually (i.e. if you did not call
-+ * dbus_bus_register()). Can only be called once per connection.
-+ *
-+ * @param connection the connection
-+ * @param unique_name the unique name
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_bus_set_unique_name (DBusConnection *connection,
-+ const char *unique_name)
-+{
-+ BusData *bd;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (unique_name != NULL, FALSE);
-+
-+ bd = ensure_bus_data (connection);
-+ if (bd == NULL)
-+ return FALSE;
-+
-+ _dbus_assert (bd->unique_name == NULL);
-+
-+ bd->unique_name = _dbus_strdup (unique_name);
-+ return bd->unique_name != NULL;
-+}
-+
-+/**
-+ * Gets the unique name of the connection. Only possible after the
-+ * connection has been registered with the message bus.
-+ *
-+ * The name remains valid for the duration of the connection and
-+ * should not be freed by the caller.
-+ *
-+ * @param connection the connection
-+ * @returns the unique name or NULL on error
-+ */
-+const char*
-+dbus_bus_get_unique_name (DBusConnection *connection)
-+{
-+ BusData *bd;
-+
-+ _dbus_return_val_if_fail (connection != NULL, NULL);
-+
-+ bd = ensure_bus_data (connection);
-+ if (bd == NULL)
-+ return NULL;
-+
-+ return bd->unique_name;
-+}
-+
-+/**
-+ * Asks the bus to return the uid of the named
-+ * connection.
-+ *
-+ * @param connection the connection
-+ * @param name a name owned by the connection
-+ * @param error location to store the error
-+ * @returns a result code, -1 if error is set
-+ */
-+unsigned long
-+dbus_bus_get_unix_user (DBusConnection *connection,
-+ const char *name,
-+ DBusError *error)
-+{
-+ DBusMessage *message, *reply;
-+ dbus_uint32_t uid;
-+
-+ _dbus_return_val_if_fail (connection != NULL, DBUS_UID_UNSET);
-+ _dbus_return_val_if_fail (name != NULL, DBUS_UID_UNSET);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name), DBUS_UID_UNSET);
-+ _dbus_return_val_if_error_is_set (error, DBUS_UID_UNSET);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "GetConnectionUnixUser");
-+
-+ if (message == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return DBUS_UID_UNSET;
-+ }
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ _DBUS_SET_OOM (error);
-+ return DBUS_UID_UNSET;
-+ }
-+
-+ reply = dbus_connection_send_with_reply_and_block (connection, message, -1,
-+ error);
-+
-+ dbus_message_unref (message);
-+
-+ if (reply == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return DBUS_UID_UNSET;
-+ }
-+
-+ if (dbus_set_error_from_message (error, reply))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return DBUS_UID_UNSET;
-+ }
-+
-+ if (!dbus_message_get_args (reply, error,
-+ DBUS_TYPE_UINT32, &uid,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return DBUS_UID_UNSET;
-+ }
-+
-+ dbus_message_unref (reply);
-+
-+ return (unsigned long) uid;
-+}
-+
-+
-+/**
-+ * Asks the bus to assign the given name to this connection by invoking
-+ * the RequestName method on the bus. This method is fully documented
-+ * in the D-BUS specification. For quick reference, the flags and
-+ * result codes are discussed here, but the specification is the
-+ * canonical version of this information.
-+ *
-+ * The #DBUS_NAME_FLAG_ALLOW_REPLACEMENT flag indicates that the caller
-+ * will allow other services to take over the name from the current owner.
-+ *
-+ * The #DBUS_NAME_FLAG_REPLACE_EXISTING flag indicates that the caller
-+ * would like to take over the name from the current owner.
-+ * If the current name owner did not use #DBUS_NAME_FLAG_ALLOW_REPLACEMENT
-+ * then this flag indicates that the caller would like to be placed
-+ * in the queue to own the name when the current owner lets go.
-+ *
-+ * If no flags are given, an application will receive the requested
-+ * name only if the name is currently unowned; it will NOT give
-+ * up the name if another application asks to take it over using
-+ * #DBUS_NAME_FLAG_REPLACE_EXISTING.
-+ *
-+ * This function returns a result code. The possible result codes
-+ * are as follows.
-+ *
-+ * #DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER means that the name had no
-+ * existing owner, and the caller is now the primary owner; or that
-+ * the name had an owner, and the caller specified
-+ * #DBUS_NAME_FLAG_REPLACE_EXISTING, and the current owner
-+ * specified #DBUS_NAME_FLAG_ALLOW_REPLACEMENT.
-+ *
-+ * #DBUS_REQUEST_NAME_REPLY_IN_QUEUE happens only if the caller does NOT
-+ * specify #DBUS_NAME_FLAG_DO_NOT_QUEUE and either the current owner
-+ * did NOT specify #DBUS_NAME_FLAG_ALLOW_REPLACEMENT or the caller did NOT
-+ * specify #DBUS_NAME_FLAG_REPLACE_EXISTING. In this case the caller ends up
-+ * in a queue to own the name after the current owner gives it up.
-+ *
-+ * #DBUS_REQUEST_NAME_REPLY_EXISTS happens if the name has an owner
-+ * already and the caller specifies #DBUS_NAME_FLAG_DO_NOT_QUEUE
-+ * and either the current owner has NOT specified
-+ * #DBUS_NAME_FLAG_ALLOW_REPLACEMENT or the caller did NOT specify
-+ * #DBUS_NAME_FLAG_REPLACE_EXISTING.
-+ *
-+ * #DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER happens if an application
-+ * requests a name it already owns.
-+ *
-+ * When a service represents an application, say "text editor," then
-+ * it should specify #DBUS_NAME_FLAG_ALLOW_REPLACEMENT if it wants
-+ * the last editor started to be the user's editor vs. the first one
-+ * started. Then any editor that can be the user's editor should
-+ * specify #DBUS_NAME_FLAG_REPLACE_EXISTING to either take over
-+ * (last-started-wins) or be queued up (first-started-wins) according
-+ * to whether #DBUS_NAME_FLAG_ALLOW_REPLACEMENT was given.
-+ *
-+ * @todo this all seems sort of broken. Shouldn't the flags be a property
-+ * of the name, not the app requesting the name? What are the use-cases
-+ * other than the "text editor" thing and how are we supporting them?
-+ *
-+ * @param connection the connection
-+ * @param name the name to request
-+ * @param flags flags
-+ * @param error location to store the error
-+ * @returns a result code, -1 if error is set
-+ */
-+int
-+dbus_bus_request_name (DBusConnection *connection,
-+ const char *name,
-+ unsigned int flags,
-+ DBusError *error)
-+{
-+ DBusMessage *message, *reply;
-+ dbus_uint32_t result;
-+
-+ _dbus_return_val_if_fail (connection != NULL, 0);
-+ _dbus_return_val_if_fail (name != NULL, 0);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name), 0);
-+ _dbus_return_val_if_error_is_set (error, 0);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "RequestName");
-+
-+ if (message == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return -1;
-+ }
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_UINT32, &flags,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ _DBUS_SET_OOM (error);
-+ return -1;
-+ }
-+
-+ reply = dbus_connection_send_with_reply_and_block (connection, message, -1,
-+ error);
-+
-+ dbus_message_unref (message);
-+
-+ if (reply == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return -1;
-+ }
-+
-+ if (dbus_set_error_from_message (error, reply))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return -1;
-+ }
-+
-+ if (!dbus_message_get_args (reply, error,
-+ DBUS_TYPE_UINT32, &result,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return -1;
-+ }
-+
-+ dbus_message_unref (reply);
-+
-+ return result;
-+}
-+
-+
-+/**
-+ * Asks the bus to unassign the given name to this connection by invoking
-+ * the ReleaseName method on the bus. This method is fully documented
-+ * in the D-BUS specification.
-+ *
-+ * @param connection the connection
-+ * @param name the name to remove
-+ * @param error location to store the error
-+ * @returns a result code, -1 if error is set
-+ */
-+int
-+dbus_bus_release_name (DBusConnection *connection,
-+ const char *name,
-+ DBusError *error)
-+{
-+ DBusMessage *message, *reply;
-+ dbus_uint32_t result;
-+
-+ _dbus_return_val_if_fail (connection != NULL, 0);
-+ _dbus_return_val_if_fail (name != NULL, 0);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name), 0);
-+ _dbus_return_val_if_error_is_set (error, 0);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "ReleaseName");
-+
-+ if (message == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return -1;
-+ }
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ _DBUS_SET_OOM (error);
-+ return -1;
-+ }
-+
-+ reply = dbus_connection_send_with_reply_and_block (connection, message, -1,
-+ error);
-+
-+ dbus_message_unref (message);
-+
-+ if (reply == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return -1;
-+ }
-+
-+ if (dbus_set_error_from_message (error, reply))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return -1;
-+ }
-+
-+ if (!dbus_message_get_args (reply, error,
-+ DBUS_TYPE_UINT32, &result,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return -1;
-+ }
-+
-+ dbus_message_unref (reply);
-+
-+ return result;
-+}
-+
-+/**
-+ * Checks whether a certain name has an owner.
-+ *
-+ * @param connection the connection
-+ * @param name the name
-+ * @param error location to store any errors
-+ * @returns #TRUE if the name exists, #FALSE if not or on error
-+ */
-+dbus_bool_t
-+dbus_bus_name_has_owner (DBusConnection *connection,
-+ const char *name,
-+ DBusError *error)
-+{
-+ DBusMessage *message, *reply;
-+ dbus_bool_t exists;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (name != NULL, FALSE);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name), FALSE);
-+ _dbus_return_val_if_error_is_set (error, FALSE);
-+
-+ message = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "NameHasOwner");
-+ if (message == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (message);
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ reply = dbus_connection_send_with_reply_and_block (connection, message, -1, error);
-+ dbus_message_unref (message);
-+
-+ if (reply == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_get_args (reply, error,
-+ DBUS_TYPE_BOOLEAN, &exists,
-+ DBUS_TYPE_INVALID))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return FALSE;
-+ }
-+
-+ dbus_message_unref (reply);
-+ return exists;
-+}
-+
-+/**
-+ * Starts a service that will request ownership of the given name.
-+ * The returned result will be one of be one of
-+ * #DBUS_START_REPLY_SUCCESS or #DBUS_START_REPLY_ALREADY_RUNNING if
-+ * successful. Pass #NULL if you don't care about the result.
-+ *
-+ * The flags parameter is for future expansion, currently you should
-+ * specify 0.
-+ *
-+ * @param connection the connection
-+ * @param name the name we want the new service to request
-+ * @param flags the flags (should always be 0 for now)
-+ * @param result a place to store the result or #NULL
-+ * @param error location to store any errors
-+ * @returns #TRUE if the activation succeeded, #FALSE if not
-+ */
-+dbus_bool_t
-+dbus_bus_start_service_by_name (DBusConnection *connection,
-+ const char *name,
-+ dbus_uint32_t flags,
-+ dbus_uint32_t *result,
-+ DBusError *error)
-+{
-+ DBusMessage *msg;
-+ DBusMessage *reply;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_bus_name (name), FALSE);
-+
-+ msg = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "StartServiceByName");
-+
-+ if (!dbus_message_append_args (msg, DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_UINT32, &flags, DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (msg);
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ reply = dbus_connection_send_with_reply_and_block (connection, msg,
-+ -1, error);
-+ dbus_message_unref (msg);
-+
-+ if (reply == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return FALSE;
-+ }
-+
-+ if (dbus_set_error_from_message (error, reply))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return FALSE;
-+ }
-+
-+ if (result != NULL &&
-+ !dbus_message_get_args (reply, error, DBUS_TYPE_UINT32,
-+ result, DBUS_TYPE_INVALID))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_message_unref (reply);
-+ return FALSE;
-+ }
-+
-+ dbus_message_unref (reply);
-+ return TRUE;
-+}
-+
-+static void
-+send_no_return_values (DBusConnection *connection,
-+ DBusMessage *msg,
-+ DBusError *error)
-+{
-+ if (error)
-+ {
-+ /* Block to check success codepath */
-+ DBusMessage *reply;
-+
-+ reply = dbus_connection_send_with_reply_and_block (connection, msg,
-+ -1, error);
-+
-+ if (reply == NULL)
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ else
-+ dbus_message_unref (reply);
-+ }
-+ else
-+ {
-+ /* Silently-fail nonblocking codepath */
-+ dbus_message_set_no_reply (msg, TRUE);
-+ dbus_connection_send (connection, msg, NULL);
-+ }
-+}
-+
-+/**
-+ * Adds a match rule to match messages going through the message bus.
-+ * The "rule" argument is the string form of a match rule.
-+ *
-+ * If you pass #NULL for the error, this function will not
-+ * block; the match thus won't be added until you flush the
-+ * connection, and if there's an error adding the match
-+ * (only possible error is lack of resources in the bus),
-+ * you won't find out about it.
-+ *
-+ * If you pass non-#NULL for the error this function will
-+ * block until it gets a reply.
-+ *
-+ * Normal API conventions would have the function return
-+ * a boolean value indicating whether the error was set,
-+ * but that would require blocking always to determine
-+ * the return value.
-+ *
-+ * @param connection connection to the message bus
-+ * @param rule textual form of match rule
-+ * @param error location to store any errors
-+ */
-+void
-+dbus_bus_add_match (DBusConnection *connection,
-+ const char *rule,
-+ DBusError *error)
-+{
-+ DBusMessage *msg;
-+
-+ _dbus_return_if_fail (rule != NULL);
-+
-+ msg = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "AddMatch");
-+
-+ if (msg == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return;
-+ }
-+
-+ if (!dbus_message_append_args (msg, DBUS_TYPE_STRING, &rule,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (msg);
-+ _DBUS_SET_OOM (error);
-+ return;
-+ }
-+
-+ send_no_return_values (connection, msg, error);
-+
-+ dbus_message_unref (msg);
-+}
-+
-+/**
-+ * Removes a previously-added match rule "by value" (the most
-+ * recently-added identical rule gets removed). The "rule" argument
-+ * is the string form of a match rule.
-+ *
-+ * If you pass #NULL for the error, this function will not
-+ * block; otherwise it will. See detailed explanation in
-+ * docs for dbus_bus_add_match().
-+ *
-+ * @param connection connection to the message bus
-+ * @param rule textual form of match rule
-+ * @param error location to store any errors
-+ */
-+void
-+dbus_bus_remove_match (DBusConnection *connection,
-+ const char *rule,
-+ DBusError *error)
-+{
-+ DBusMessage *msg;
-+
-+ _dbus_return_if_fail (rule != NULL);
-+
-+ msg = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "RemoveMatch");
-+
-+ if (!dbus_message_append_args (msg, DBUS_TYPE_STRING, &rule,
-+ DBUS_TYPE_INVALID))
-+ {
-+ dbus_message_unref (msg);
-+ _DBUS_SET_OOM (error);
-+ return;
-+ }
-+
-+ send_no_return_values (connection, msg, error);
-+
-+ dbus_message_unref (msg);
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+const char *
-+dbus_bus_connection_get_unique_name (DBusConnection *connection)
-+{
-+ BusData *bd;
-+ bd = dbus_connection_get_data (connection, bus_data_slot);
-+
-+ return bd->unique_name;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+
-+/** @} */
-diff -Naur dbus-0.61.orig/dbus/dbus-bus.h dbus-0.61/dbus/dbus-bus.h
---- dbus-0.61.orig/dbus/dbus-bus.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-bus.h 2005-11-15 18:19:19.000000000 +0100
-@@ -0,0 +1,73 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-bus.h Convenience functions for communicating with the bus.
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_BUS_H
-+#define DBUS_BUS_H
-+
-+#include <dbus/dbus-connection.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+DBusConnection *dbus_bus_get (DBusBusType type,
-+ DBusError *error);
-+DBusConnection *dbus_bus_get_private (DBusBusType type,
-+ DBusError *error);
-+
-+dbus_bool_t dbus_bus_register (DBusConnection *connection,
-+ DBusError *error);
-+dbus_bool_t dbus_bus_set_unique_name (DBusConnection *connection,
-+ const char *unique_name);
-+const char* dbus_bus_get_unique_name (DBusConnection *connection);
-+unsigned long dbus_bus_get_unix_user (DBusConnection *connection,
-+ const char *name,
-+ DBusError *error);
-+int dbus_bus_request_name (DBusConnection *connection,
-+ const char *name,
-+ unsigned int flags,
-+ DBusError *error);
-+int dbus_bus_release_name (DBusConnection *connection,
-+ const char *name,
-+ DBusError *error);
-+dbus_bool_t dbus_bus_name_has_owner (DBusConnection *connection,
-+ const char *name,
-+ DBusError *error);
-+
-+dbus_bool_t dbus_bus_start_service_by_name (DBusConnection *connection,
-+ const char *name,
-+ dbus_uint32_t flags,
-+ dbus_uint32_t *reply,
-+ DBusError *error);
-+
-+void dbus_bus_add_match (DBusConnection *connection,
-+ const char *rule,
-+ DBusError *error);
-+void dbus_bus_remove_match (DBusConnection *connection,
-+ const char *rule,
-+ DBusError *error);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_BUS_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-connection-internal.h dbus-0.61/dbus/dbus-connection-internal.h
---- dbus-0.61.orig/dbus/dbus-connection-internal.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-connection-internal.h 2005-09-11 12:02:47.000000000 +0200
-@@ -0,0 +1,128 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-connection-internal.h DBusConnection internal interfaces
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_CONNECTION_INTERNAL_H
-+#define DBUS_CONNECTION_INTERNAL_H
-+
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-connection.h>
-+#include <dbus/dbus-message.h>
-+#include <dbus/dbus-transport.h>
-+#include <dbus/dbus-resources.h>
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-timeout.h>
-+#include <dbus/dbus-dataslot.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef enum
-+{
-+ DBUS_ITERATION_DO_WRITING = 1 << 0, /**< Write messages out. */
-+ DBUS_ITERATION_DO_READING = 1 << 1, /**< Read messages in. */
-+ DBUS_ITERATION_BLOCK = 1 << 2 /**< Block if nothing to do. */
-+} DBusIterationFlags;
-+
-+/** default timeout value when waiting for a message reply, 25 seconds */
-+#define _DBUS_DEFAULT_TIMEOUT_VALUE (25 * 1000)
-+
-+void _dbus_connection_lock (DBusConnection *connection);
-+void _dbus_connection_unlock (DBusConnection *connection);
-+DBusConnection * _dbus_connection_ref_unlocked (DBusConnection *connection);
-+void _dbus_connection_unref_unlocked (DBusConnection *connection);
-+dbus_bool_t _dbus_connection_queue_received_message (DBusConnection *connection,
-+ DBusMessage *message);
-+void _dbus_connection_queue_received_message_link (DBusConnection *connection,
-+ DBusList *link);
-+dbus_bool_t _dbus_connection_has_messages_to_send_unlocked (DBusConnection *connection);
-+DBusMessage* _dbus_connection_get_message_to_send (DBusConnection *connection);
-+void _dbus_connection_message_sent (DBusConnection *connection,
-+ DBusMessage *message);
-+dbus_bool_t _dbus_connection_add_watch_unlocked (DBusConnection *connection,
-+ DBusWatch *watch);
-+void _dbus_connection_remove_watch_unlocked (DBusConnection *connection,
-+ DBusWatch *watch);
-+void _dbus_connection_toggle_watch_unlocked (DBusConnection *connection,
-+ DBusWatch *watch,
-+ dbus_bool_t enabled);
-+dbus_bool_t _dbus_connection_handle_watch (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data);
-+dbus_bool_t _dbus_connection_add_timeout_unlocked (DBusConnection *connection,
-+ DBusTimeout *timeout);
-+void _dbus_connection_remove_timeout_unlocked (DBusConnection *connection,
-+ DBusTimeout *timeout);
-+void _dbus_connection_toggle_timeout_unlocked (DBusConnection *connection,
-+ DBusTimeout *timeout,
-+ dbus_bool_t enabled);
-+DBusConnection* _dbus_connection_new_for_transport (DBusTransport *transport);
-+void _dbus_connection_do_iteration_unlocked (DBusConnection *connection,
-+ unsigned int flags,
-+ int timeout_milliseconds);
-+
-+DBusPendingCall* _dbus_pending_call_new (DBusConnection *connection,
-+ int timeout_milliseconds,
-+ DBusTimeoutHandler timeout_handler);
-+void _dbus_pending_call_notify (DBusPendingCall *pending);
-+void _dbus_connection_remove_pending_call (DBusConnection *connection,
-+ DBusPendingCall *pending);
-+void _dbus_connection_block_pending_call (DBusPendingCall *pending);
-+void _dbus_pending_call_complete_and_unlock (DBusPendingCall *pending,
-+ DBusMessage *message);
-+dbus_bool_t _dbus_connection_send_and_unlock (DBusConnection *connection,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial);
-+
-+/**
-+ * @addtogroup DBusPendingCallInternals DBusPendingCall implementation details
-+ * @{
-+ */
-+/**
-+ * @brief Internals of DBusPendingCall
-+ *
-+ * Object representing a reply message that we're waiting for.
-+ */
-+struct DBusPendingCall
-+{
-+ DBusAtomic refcount; /**< reference count */
-+
-+ DBusDataSlotList slot_list; /**< Data stored by allocated integer ID */
-+
-+ DBusPendingCallNotifyFunction function; /**< Notifier when reply arrives. */
-+
-+ DBusConnection *connection; /**< Connections we're associated with */
-+ DBusMessage *reply; /**< Reply (after we've received it) */
-+ DBusTimeout *timeout; /**< Timeout */
-+
-+ DBusList *timeout_link; /**< Preallocated timeout response */
-+
-+ dbus_uint32_t reply_serial; /**< Expected serial of reply */
-+
-+ unsigned int completed : 1; /**< TRUE if completed */
-+ unsigned int timeout_added : 1; /**< Have added the timeout */
-+};
-+
-+/** @} End of DBusPendingCallInternals */
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_CONNECTION_INTERNAL_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-connection.c dbus-0.61/dbus/dbus-connection.c
---- dbus-0.61.orig/dbus/dbus-connection.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-connection.c 2005-11-30 21:30:02.000000000 +0100
-@@ -0,0 +1,4755 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-connection.c DBusConnection object
-+ *
-+ * Copyright (C) 2002, 2003, 2004, 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "dbus-shared.h"
-+#include "dbus-connection.h"
-+#include "dbus-list.h"
-+#include "dbus-timeout.h"
-+#include "dbus-transport.h"
-+#include "dbus-watch.h"
-+#include "dbus-connection-internal.h"
-+#include "dbus-list.h"
-+#include "dbus-hash.h"
-+#include "dbus-message-internal.h"
-+#include "dbus-threads.h"
-+#include "dbus-protocol.h"
-+#include "dbus-dataslot.h"
-+#include "dbus-string.h"
-+#include "dbus-pending-call.h"
-+#include "dbus-object-tree.h"
-+#include "dbus-threads-internal.h"
-+
-+#ifdef DBUS_DISABLE_CHECKS
-+#define TOOK_LOCK_CHECK(connection)
-+#define RELEASING_LOCK_CHECK(connection)
-+#define HAVE_LOCK_CHECK(connection)
-+#else
-+#define TOOK_LOCK_CHECK(connection) do { \
-+ _dbus_assert (!(connection)->have_connection_lock); \
-+ (connection)->have_connection_lock = TRUE; \
-+ } while (0)
-+#define RELEASING_LOCK_CHECK(connection) do { \
-+ _dbus_assert ((connection)->have_connection_lock); \
-+ (connection)->have_connection_lock = FALSE; \
-+ } while (0)
-+#define HAVE_LOCK_CHECK(connection) _dbus_assert ((connection)->have_connection_lock)
-+/* A "DO_NOT_HAVE_LOCK_CHECK" is impossible since we need the lock to check the flag */
-+#endif
-+
-+#define TRACE_LOCKS 1
-+
-+#define CONNECTION_LOCK(connection) do { \
-+ if (TRACE_LOCKS) { _dbus_verbose (" LOCK: %s\n", _DBUS_FUNCTION_NAME); } \
-+ _dbus_mutex_lock ((connection)->mutex); \
-+ TOOK_LOCK_CHECK (connection); \
-+ } while (0)
-+
-+#define CONNECTION_UNLOCK(connection) do { \
-+ if (TRACE_LOCKS) { _dbus_verbose (" UNLOCK: %s\n", _DBUS_FUNCTION_NAME); } \
-+ RELEASING_LOCK_CHECK (connection); \
-+ _dbus_mutex_unlock ((connection)->mutex); \
-+ } while (0)
-+
-+#define DISPATCH_STATUS_NAME(s) \
-+ ((s) == DBUS_DISPATCH_COMPLETE ? "complete" : \
-+ (s) == DBUS_DISPATCH_DATA_REMAINS ? "data remains" : \
-+ (s) == DBUS_DISPATCH_NEED_MEMORY ? "need memory" : \
-+ "???")
-+
-+/**
-+ * @defgroup DBusConnection DBusConnection
-+ * @ingroup DBus
-+ * @brief Connection to another application
-+ *
-+ * A DBusConnection represents a connection to another
-+ * application. Messages can be sent and received via this connection.
-+ * The other application may be a message bus; for convenience, the
-+ * function dbus_bus_get() is provided to automatically open a
-+ * connection to the well-known message buses.
-+ *
-+ * In brief a DBusConnection is a message queue associated with some
-+ * message transport mechanism such as a socket. The connection
-+ * maintains a queue of incoming messages and a queue of outgoing
-+ * messages.
-+ *
-+ * Incoming messages are normally processed by calling
-+ * dbus_connection_dispatch(). dbus_connection_dispatch() runs any
-+ * handlers registered for the topmost message in the message queue,
-+ * then discards the message, then returns.
-+ *
-+ * dbus_connection_get_dispatch_status() indicates whether
-+ * messages are currently in the queue that need dispatching.
-+ * dbus_connection_set_dispatch_status_function() allows
-+ * you to set a function to be used to monitor the dispatch status.
-+ *
-+ * If you're using GLib or Qt add-on libraries for D-BUS, there are
-+ * special convenience APIs in those libraries that hide
-+ * all the details of dispatch and watch/timeout monitoring.
-+ * For example, dbus_connection_setup_with_g_main().
-+ *
-+ * If you aren't using these add-on libraries, you have to manually
-+ * call dbus_connection_set_dispatch_status_function(),
-+ * dbus_connection_set_watch_functions(),
-+ * dbus_connection_set_timeout_functions() providing appropriate
-+ * functions to integrate the connection with your application's main
-+ * loop.
-+ *
-+ * When you use dbus_connection_send() or one of its variants to send
-+ * a message, the message is added to the outgoing queue. It's
-+ * actually written to the network later; either in
-+ * dbus_watch_handle() invoked by your main loop, or in
-+ * dbus_connection_flush() which blocks until it can write out the
-+ * entire outgoing queue. The GLib/Qt add-on libraries again
-+ * handle the details here for you by setting up watch functions.
-+ *
-+ * When a connection is disconnected, you are guaranteed to get a
-+ * signal "Disconnected" from the interface
-+ * #DBUS_INTERFACE_LOCAL, path
-+ * #DBUS_PATH_LOCAL.
-+ *
-+ * You may not drop the last reference to a #DBusConnection
-+ * until that connection has been disconnected.
-+ *
-+ * You may dispatch the unprocessed incoming message queue even if the
-+ * connection is disconnected. However, "Disconnected" will always be
-+ * the last message in the queue (obviously no messages are received
-+ * after disconnection).
-+ *
-+ * #DBusConnection has thread locks and drops them when invoking user
-+ * callbacks, so in general is transparently threadsafe. However,
-+ * #DBusMessage does NOT have thread locks; you must not send the same
-+ * message to multiple #DBusConnection that will be used from
-+ * different threads.
-+ */
-+
-+/**
-+ * @defgroup DBusConnectionInternals DBusConnection implementation details
-+ * @ingroup DBusInternals
-+ * @brief Implementation details of DBusConnection
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Internal struct representing a message filter function
-+ */
-+typedef struct DBusMessageFilter DBusMessageFilter;
-+
-+/**
-+ * Internal struct representing a message filter function
-+ */
-+struct DBusMessageFilter
-+{
-+ DBusAtomic refcount; /**< Reference count */
-+ DBusHandleMessageFunction function; /**< Function to call to filter */
-+ void *user_data; /**< User data for the function */
-+ DBusFreeFunction free_user_data_function; /**< Function to free the user data */
-+};
-+
-+
-+/**
-+ * Internals of DBusPreallocatedSend
-+ */
-+struct DBusPreallocatedSend
-+{
-+ DBusConnection *connection; /**< Connection we'd send the message to */
-+ DBusList *queue_link; /**< Preallocated link in the queue */
-+ DBusList *counter_link; /**< Preallocated link in the resource counter */
-+};
-+
-+static dbus_bool_t _dbus_modify_sigpipe = TRUE;
-+
-+/**
-+ * Implementation details of DBusConnection. All fields are private.
-+ */
-+struct DBusConnection
-+{
-+ DBusAtomic refcount; /**< Reference count. */
-+
-+ DBusMutex *mutex; /**< Lock on the entire DBusConnection */
-+
-+ DBusMutex *dispatch_mutex; /**< Protects dispatch_acquired */
-+ DBusCondVar *dispatch_cond; /**< Notify when dispatch_acquired is available */
-+ DBusMutex *io_path_mutex; /**< Protects io_path_acquired */
-+ DBusCondVar *io_path_cond; /**< Notify when io_path_acquired is available */
-+
-+ DBusList *outgoing_messages; /**< Queue of messages we need to send, send the end of the list first. */
-+ DBusList *incoming_messages; /**< Queue of messages we have received, end of the list received most recently. */
-+
-+ DBusMessage *message_borrowed; /**< Filled in if the first incoming message has been borrowed;
-+ * dispatch_acquired will be set by the borrower
-+ */
-+
-+ int n_outgoing; /**< Length of outgoing queue. */
-+ int n_incoming; /**< Length of incoming queue. */
-+
-+ DBusCounter *outgoing_counter; /**< Counts size of outgoing messages. */
-+
-+ DBusTransport *transport; /**< Object that sends/receives messages over network. */
-+ DBusWatchList *watches; /**< Stores active watches. */
-+ DBusTimeoutList *timeouts; /**< Stores active timeouts. */
-+
-+ DBusList *filter_list; /**< List of filters. */
-+
-+ DBusDataSlotList slot_list; /**< Data stored by allocated integer ID */
-+
-+ DBusHashTable *pending_replies; /**< Hash of message serials to #DBusPendingCall. */
-+
-+ dbus_uint32_t client_serial; /**< Client serial. Increments each time a message is sent */
-+ DBusList *disconnect_message_link; /**< Preallocated list node for queueing the disconnection message */
-+
-+ DBusWakeupMainFunction wakeup_main_function; /**< Function to wake up the mainloop */
-+ void *wakeup_main_data; /**< Application data for wakeup_main_function */
-+ DBusFreeFunction free_wakeup_main_data; /**< free wakeup_main_data */
-+
-+ DBusDispatchStatusFunction dispatch_status_function; /**< Function on dispatch status changes */
-+ void *dispatch_status_data; /**< Application data for dispatch_status_function */
-+ DBusFreeFunction free_dispatch_status_data; /**< free dispatch_status_data */
-+
-+ DBusDispatchStatus last_dispatch_status; /**< The last dispatch status we reported to the application. */
-+
-+ DBusList *link_cache; /**< A cache of linked list links to prevent contention
-+ * for the global linked list mempool lock
-+ */
-+ DBusObjectTree *objects; /**< Object path handlers registered with this connection */
-+
-+ char *server_guid; /**< GUID of server if we are in shared_connections, #NULL if server GUID is unknown or connection is private */
-+
-+ unsigned int shareable : 1; /**< #TRUE if connection can go in shared_connections once we know the GUID */
-+
-+ unsigned int dispatch_acquired : 1; /**< Someone has dispatch path (can drain incoming queue) */
-+ unsigned int io_path_acquired : 1; /**< Someone has transport io path (can use the transport to read/write messages) */
-+
-+ unsigned int exit_on_disconnect : 1; /**< If #TRUE, exit after handling disconnect signal */
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ unsigned int have_connection_lock : 1; /**< Used to check locking */
-+#endif
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ int generation; /**< _dbus_current_generation that should correspond to this connection */
-+#endif
-+};
-+
-+static DBusDispatchStatus _dbus_connection_get_dispatch_status_unlocked (DBusConnection *connection);
-+static void _dbus_connection_update_dispatch_status_and_unlock (DBusConnection *connection,
-+ DBusDispatchStatus new_status);
-+static void _dbus_connection_last_unref (DBusConnection *connection);
-+static void _dbus_connection_acquire_dispatch (DBusConnection *connection);
-+static void _dbus_connection_release_dispatch (DBusConnection *connection);
-+
-+static DBusMessageFilter *
-+_dbus_message_filter_ref (DBusMessageFilter *filter)
-+{
-+ _dbus_assert (filter->refcount.value > 0);
-+ _dbus_atomic_inc (&filter->refcount);
-+
-+ return filter;
-+}
-+
-+static void
-+_dbus_message_filter_unref (DBusMessageFilter *filter)
-+{
-+ _dbus_assert (filter->refcount.value > 0);
-+
-+ if (_dbus_atomic_dec (&filter->refcount) == 1)
-+ {
-+ if (filter->free_user_data_function)
-+ (* filter->free_user_data_function) (filter->user_data);
-+
-+ dbus_free (filter);
-+ }
-+}
-+
-+/**
-+ * Acquires the connection lock.
-+ *
-+ * @param connection the connection.
-+ */
-+void
-+_dbus_connection_lock (DBusConnection *connection)
-+{
-+ CONNECTION_LOCK (connection);
-+}
-+
-+/**
-+ * Releases the connection lock.
-+ *
-+ * @param connection the connection.
-+ */
-+void
-+_dbus_connection_unlock (DBusConnection *connection)
-+{
-+ CONNECTION_UNLOCK (connection);
-+}
-+
-+/**
-+ * Wakes up the main loop if it is sleeping
-+ * Needed if we're e.g. queueing outgoing messages
-+ * on a thread while the mainloop sleeps.
-+ *
-+ * @param connection the connection.
-+ */
-+static void
-+_dbus_connection_wakeup_mainloop (DBusConnection *connection)
-+{
-+ if (connection->wakeup_main_function)
-+ (*connection->wakeup_main_function) (connection->wakeup_main_data);
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* For now this function isn't used */
-+/**
-+ * Adds a message to the incoming message queue, returning #FALSE
-+ * if there's insufficient memory to queue the message.
-+ * Does not take over refcount of the message.
-+ *
-+ * @param connection the connection.
-+ * @param message the message to queue.
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_connection_queue_received_message (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_alloc_link (message);
-+ if (link == NULL)
-+ return FALSE;
-+
-+ dbus_message_ref (message);
-+ _dbus_connection_queue_received_message_link (connection, link);
-+
-+ return TRUE;
-+}
-+#endif
-+
-+/**
-+ * Adds a message-containing list link to the incoming message queue,
-+ * taking ownership of the link and the message's current refcount.
-+ * Cannot fail due to lack of memory.
-+ *
-+ * @param connection the connection.
-+ * @param link the message link to queue.
-+ */
-+void
-+_dbus_connection_queue_received_message_link (DBusConnection *connection,
-+ DBusList *link)
-+{
-+ DBusPendingCall *pending;
-+ dbus_int32_t reply_serial;
-+ DBusMessage *message;
-+
-+ _dbus_assert (_dbus_transport_get_is_authenticated (connection->transport));
-+
-+ _dbus_list_append_link (&connection->incoming_messages,
-+ link);
-+ message = link->data;
-+
-+ /* If this is a reply we're waiting on, remove timeout for it */
-+ reply_serial = dbus_message_get_reply_serial (message);
-+ if (reply_serial != -1)
-+ {
-+ pending = _dbus_hash_table_lookup_int (connection->pending_replies,
-+ reply_serial);
-+ if (pending != NULL)
-+ {
-+ if (pending->timeout_added)
-+ _dbus_connection_remove_timeout_unlocked (connection,
-+ pending->timeout);
-+
-+ pending->timeout_added = FALSE;
-+ }
-+ }
-+
-+ connection->n_incoming += 1;
-+
-+ _dbus_connection_wakeup_mainloop (connection);
-+
-+ _dbus_verbose ("Message %p (%d %s %s %s '%s' reply to %u) added to incoming queue %p, %d incoming\n",
-+ message,
-+ dbus_message_get_type (message),
-+ dbus_message_get_path (message) ?
-+ dbus_message_get_path (message) :
-+ "no path",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) :
-+ "no interface",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) :
-+ "no member",
-+ dbus_message_get_signature (message),
-+ dbus_message_get_reply_serial (message),
-+ connection,
-+ connection->n_incoming);
-+}
-+
-+/**
-+ * Adds a link + message to the incoming message queue.
-+ * Can't fail. Takes ownership of both link and message.
-+ *
-+ * @param connection the connection.
-+ * @param link the list node and message to queue.
-+ *
-+ * @todo This needs to wake up the mainloop if it is in
-+ * a poll/select and this is a multithreaded app.
-+ */
-+static void
-+_dbus_connection_queue_synthesized_message_link (DBusConnection *connection,
-+ DBusList *link)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_list_append_link (&connection->incoming_messages, link);
-+
-+ connection->n_incoming += 1;
-+
-+ _dbus_connection_wakeup_mainloop (connection);
-+
-+ _dbus_verbose ("Synthesized message %p added to incoming queue %p, %d incoming\n",
-+ link->data, connection, connection->n_incoming);
-+}
-+
-+
-+/**
-+ * Checks whether there are messages in the outgoing message queue.
-+ * Called with connection lock held.
-+ *
-+ * @param connection the connection.
-+ * @returns #TRUE if the outgoing queue is non-empty.
-+ */
-+dbus_bool_t
-+_dbus_connection_has_messages_to_send_unlocked (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+ return connection->outgoing_messages != NULL;
-+}
-+
-+/**
-+ * Checks whether there are messages in the outgoing message queue.
-+ *
-+ * @param connection the connection.
-+ * @returns #TRUE if the outgoing queue is non-empty.
-+ */
-+dbus_bool_t
-+dbus_connection_has_messages_to_send (DBusConnection *connection)
-+{
-+ dbus_bool_t v;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+ v = _dbus_connection_has_messages_to_send_unlocked (connection);
-+ CONNECTION_UNLOCK (connection);
-+
-+ return v;
-+}
-+
-+/**
-+ * Gets the next outgoing message. The message remains in the
-+ * queue, and the caller does not own a reference to it.
-+ *
-+ * @param connection the connection.
-+ * @returns the message to be sent.
-+ */
-+DBusMessage*
-+_dbus_connection_get_message_to_send (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ return _dbus_list_get_last (&connection->outgoing_messages);
-+}
-+
-+/**
-+ * Notifies the connection that a message has been sent, so the
-+ * message can be removed from the outgoing queue.
-+ * Called with the connection lock held.
-+ *
-+ * @param connection the connection.
-+ * @param message the message that was sent.
-+ */
-+void
-+_dbus_connection_message_sent (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ DBusList *link;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ /* This can be called before we even complete authentication, since
-+ * it's called on disconnect to clean up the outgoing queue.
-+ * It's also called as we successfully send each message.
-+ */
-+
-+ link = _dbus_list_get_last_link (&connection->outgoing_messages);
-+ _dbus_assert (link != NULL);
-+ _dbus_assert (link->data == message);
-+
-+ /* Save this link in the link cache */
-+ _dbus_list_unlink (&connection->outgoing_messages,
-+ link);
-+ _dbus_list_prepend_link (&connection->link_cache, link);
-+
-+ connection->n_outgoing -= 1;
-+
-+ _dbus_verbose ("Message %p (%d %s %s %s '%s') removed from outgoing queue %p, %d left to send\n",
-+ message,
-+ dbus_message_get_type (message),
-+ dbus_message_get_path (message) ?
-+ dbus_message_get_path (message) :
-+ "no path",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) :
-+ "no interface",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) :
-+ "no member",
-+ dbus_message_get_signature (message),
-+ connection, connection->n_outgoing);
-+
-+ /* Save this link in the link cache also */
-+ _dbus_message_remove_size_counter (message, connection->outgoing_counter,
-+ &link);
-+ _dbus_list_prepend_link (&connection->link_cache, link);
-+
-+ dbus_message_unref (message);
-+}
-+
-+typedef dbus_bool_t (* DBusWatchAddFunction) (DBusWatchList *list,
-+ DBusWatch *watch);
-+typedef void (* DBusWatchRemoveFunction) (DBusWatchList *list,
-+ DBusWatch *watch);
-+typedef void (* DBusWatchToggleFunction) (DBusWatchList *list,
-+ DBusWatch *watch,
-+ dbus_bool_t enabled);
-+
-+static dbus_bool_t
-+protected_change_watch (DBusConnection *connection,
-+ DBusWatch *watch,
-+ DBusWatchAddFunction add_function,
-+ DBusWatchRemoveFunction remove_function,
-+ DBusWatchToggleFunction toggle_function,
-+ dbus_bool_t enabled)
-+{
-+ DBusWatchList *watches;
-+ dbus_bool_t retval;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ /* This isn't really safe or reasonable; a better pattern is the "do everything, then
-+ * drop lock and call out" one; but it has to be propagated up through all callers
-+ */
-+
-+ watches = connection->watches;
-+ if (watches)
-+ {
-+ connection->watches = NULL;
-+ _dbus_connection_ref_unlocked (connection);
-+ CONNECTION_UNLOCK (connection);
-+
-+ if (add_function)
-+ retval = (* add_function) (watches, watch);
-+ else if (remove_function)
-+ {
-+ retval = TRUE;
-+ (* remove_function) (watches, watch);
-+ }
-+ else
-+ {
-+ retval = TRUE;
-+ (* toggle_function) (watches, watch, enabled);
-+ }
-+
-+ CONNECTION_LOCK (connection);
-+ connection->watches = watches;
-+ _dbus_connection_unref_unlocked (connection);
-+
-+ return retval;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+
-+/**
-+ * Adds a watch using the connection's DBusAddWatchFunction if
-+ * available. Otherwise records the watch to be added when said
-+ * function is available. Also re-adds the watch if the
-+ * DBusAddWatchFunction changes. May fail due to lack of memory.
-+ * Connection lock should be held when calling this.
-+ *
-+ * @param connection the connection.
-+ * @param watch the watch to add.
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_connection_add_watch_unlocked (DBusConnection *connection,
-+ DBusWatch *watch)
-+{
-+ return protected_change_watch (connection, watch,
-+ _dbus_watch_list_add_watch,
-+ NULL, NULL, FALSE);
-+}
-+
-+/**
-+ * Removes a watch using the connection's DBusRemoveWatchFunction
-+ * if available. It's an error to call this function on a watch
-+ * that was not previously added.
-+ * Connection lock should be held when calling this.
-+ *
-+ * @param connection the connection.
-+ * @param watch the watch to remove.
-+ */
-+void
-+_dbus_connection_remove_watch_unlocked (DBusConnection *connection,
-+ DBusWatch *watch)
-+{
-+ protected_change_watch (connection, watch,
-+ NULL,
-+ _dbus_watch_list_remove_watch,
-+ NULL, FALSE);
-+}
-+
-+/**
-+ * Toggles a watch and notifies app via connection's
-+ * DBusWatchToggledFunction if available. It's an error to call this
-+ * function on a watch that was not previously added.
-+ * Connection lock should be held when calling this.
-+ *
-+ * @param connection the connection.
-+ * @param watch the watch to toggle.
-+ * @param enabled whether to enable or disable
-+ */
-+void
-+_dbus_connection_toggle_watch_unlocked (DBusConnection *connection,
-+ DBusWatch *watch,
-+ dbus_bool_t enabled)
-+{
-+ _dbus_assert (watch != NULL);
-+
-+ protected_change_watch (connection, watch,
-+ NULL, NULL,
-+ _dbus_watch_list_toggle_watch,
-+ enabled);
-+}
-+
-+typedef dbus_bool_t (* DBusTimeoutAddFunction) (DBusTimeoutList *list,
-+ DBusTimeout *timeout);
-+typedef void (* DBusTimeoutRemoveFunction) (DBusTimeoutList *list,
-+ DBusTimeout *timeout);
-+typedef void (* DBusTimeoutToggleFunction) (DBusTimeoutList *list,
-+ DBusTimeout *timeout,
-+ dbus_bool_t enabled);
-+
-+static dbus_bool_t
-+protected_change_timeout (DBusConnection *connection,
-+ DBusTimeout *timeout,
-+ DBusTimeoutAddFunction add_function,
-+ DBusTimeoutRemoveFunction remove_function,
-+ DBusTimeoutToggleFunction toggle_function,
-+ dbus_bool_t enabled)
-+{
-+ DBusTimeoutList *timeouts;
-+ dbus_bool_t retval;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ /* This isn't really safe or reasonable; a better pattern is the "do everything, then
-+ * drop lock and call out" one; but it has to be propagated up through all callers
-+ */
-+
-+ timeouts = connection->timeouts;
-+ if (timeouts)
-+ {
-+ connection->timeouts = NULL;
-+ _dbus_connection_ref_unlocked (connection);
-+ CONNECTION_UNLOCK (connection);
-+
-+ if (add_function)
-+ retval = (* add_function) (timeouts, timeout);
-+ else if (remove_function)
-+ {
-+ retval = TRUE;
-+ (* remove_function) (timeouts, timeout);
-+ }
-+ else
-+ {
-+ retval = TRUE;
-+ (* toggle_function) (timeouts, timeout, enabled);
-+ }
-+
-+ CONNECTION_LOCK (connection);
-+ connection->timeouts = timeouts;
-+ _dbus_connection_unref_unlocked (connection);
-+
-+ return retval;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Adds a timeout using the connection's DBusAddTimeoutFunction if
-+ * available. Otherwise records the timeout to be added when said
-+ * function is available. Also re-adds the timeout if the
-+ * DBusAddTimeoutFunction changes. May fail due to lack of memory.
-+ * The timeout will fire repeatedly until removed.
-+ * Connection lock should be held when calling this.
-+ *
-+ * @param connection the connection.
-+ * @param timeout the timeout to add.
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_connection_add_timeout_unlocked (DBusConnection *connection,
-+ DBusTimeout *timeout)
-+{
-+ return protected_change_timeout (connection, timeout,
-+ _dbus_timeout_list_add_timeout,
-+ NULL, NULL, FALSE);
-+}
-+
-+/**
-+ * Removes a timeout using the connection's DBusRemoveTimeoutFunction
-+ * if available. It's an error to call this function on a timeout
-+ * that was not previously added.
-+ * Connection lock should be held when calling this.
-+ *
-+ * @param connection the connection.
-+ * @param timeout the timeout to remove.
-+ */
-+void
-+_dbus_connection_remove_timeout_unlocked (DBusConnection *connection,
-+ DBusTimeout *timeout)
-+{
-+ protected_change_timeout (connection, timeout,
-+ NULL,
-+ _dbus_timeout_list_remove_timeout,
-+ NULL, FALSE);
-+}
-+
-+/**
-+ * Toggles a timeout and notifies app via connection's
-+ * DBusTimeoutToggledFunction if available. It's an error to call this
-+ * function on a timeout that was not previously added.
-+ * Connection lock should be held when calling this.
-+ *
-+ * @param connection the connection.
-+ * @param timeout the timeout to toggle.
-+ * @param enabled whether to enable or disable
-+ */
-+void
-+_dbus_connection_toggle_timeout_unlocked (DBusConnection *connection,
-+ DBusTimeout *timeout,
-+ dbus_bool_t enabled)
-+{
-+ protected_change_timeout (connection, timeout,
-+ NULL, NULL,
-+ _dbus_timeout_list_toggle_timeout,
-+ enabled);
-+}
-+
-+static dbus_bool_t
-+_dbus_connection_attach_pending_call_unlocked (DBusConnection *connection,
-+ DBusPendingCall *pending)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_assert (pending->reply_serial != 0);
-+
-+ if (!_dbus_connection_add_timeout_unlocked (connection, pending->timeout))
-+ return FALSE;
-+
-+ if (!_dbus_hash_table_insert_int (connection->pending_replies,
-+ pending->reply_serial,
-+ pending))
-+ {
-+ _dbus_connection_remove_timeout_unlocked (connection, pending->timeout);
-+
-+ HAVE_LOCK_CHECK (connection);
-+ return FALSE;
-+ }
-+
-+ pending->timeout_added = TRUE;
-+ pending->connection = connection;
-+
-+ dbus_pending_call_ref (pending);
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ return TRUE;
-+}
-+
-+static void
-+free_pending_call_on_hash_removal (void *data)
-+{
-+ DBusPendingCall *pending;
-+
-+ if (data == NULL)
-+ return;
-+
-+ pending = data;
-+
-+ if (pending->connection)
-+ {
-+ if (pending->timeout_added)
-+ {
-+ _dbus_connection_remove_timeout_unlocked (pending->connection,
-+ pending->timeout);
-+ pending->timeout_added = FALSE;
-+ }
-+
-+ pending->connection = NULL;
-+
-+ dbus_pending_call_unref (pending);
-+ }
-+}
-+
-+static void
-+_dbus_connection_detach_pending_call_unlocked (DBusConnection *connection,
-+ DBusPendingCall *pending)
-+{
-+ /* Can't have a destroy notifier on the pending call if we're going to do this */
-+
-+ dbus_pending_call_ref (pending);
-+ _dbus_hash_table_remove_int (connection->pending_replies,
-+ pending->reply_serial);
-+ _dbus_assert (pending->connection == NULL);
-+ dbus_pending_call_unref (pending);
-+}
-+
-+static void
-+_dbus_connection_detach_pending_call_and_unlock (DBusConnection *connection,
-+ DBusPendingCall *pending)
-+{
-+ /* The idea here is to avoid finalizing the pending call
-+ * with the lock held, since there's a destroy notifier
-+ * in pending call that goes out to application code.
-+ */
-+ dbus_pending_call_ref (pending);
-+ _dbus_hash_table_remove_int (connection->pending_replies,
-+ pending->reply_serial);
-+ _dbus_assert (pending->connection == NULL);
-+ CONNECTION_UNLOCK (connection);
-+ dbus_pending_call_unref (pending);
-+}
-+
-+/**
-+ * Removes a pending call from the connection, such that
-+ * the pending reply will be ignored. May drop the last
-+ * reference to the pending call.
-+ *
-+ * @param connection the connection
-+ * @param pending the pending call
-+ */
-+void
-+_dbus_connection_remove_pending_call (DBusConnection *connection,
-+ DBusPendingCall *pending)
-+{
-+ CONNECTION_LOCK (connection);
-+ _dbus_connection_detach_pending_call_and_unlock (connection, pending);
-+}
-+
-+/**
-+ * Completes a pending call with the given message,
-+ * or if the message is #NULL, by timing out the pending call.
-+ *
-+ * @param pending the pending call
-+ * @param message the message to complete the call with, or #NULL
-+ * to time out the call
-+ */
-+void
-+_dbus_pending_call_complete_and_unlock (DBusPendingCall *pending,
-+ DBusMessage *message)
-+{
-+ if (message == NULL)
-+ {
-+ message = pending->timeout_link->data;
-+ _dbus_list_clear (&pending->timeout_link);
-+ }
-+ else
-+ dbus_message_ref (message);
-+
-+ _dbus_verbose (" handing message %p (%s) to pending call serial %u\n",
-+ message,
-+ dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_RETURN ?
-+ "method return" :
-+ dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR ?
-+ "error" : "other type",
-+ pending->reply_serial);
-+
-+ _dbus_assert (pending->reply == NULL);
-+ _dbus_assert (pending->reply_serial == dbus_message_get_reply_serial (message));
-+ pending->reply = message;
-+
-+ dbus_pending_call_ref (pending); /* in case there's no app with a ref held */
-+ _dbus_connection_detach_pending_call_and_unlock (pending->connection, pending);
-+
-+ /* Must be called unlocked since it invokes app callback */
-+ _dbus_pending_call_notify (pending);
-+ dbus_pending_call_unref (pending);
-+}
-+
-+/**
-+ * Acquire the transporter I/O path. This must be done before
-+ * doing any I/O in the transporter. May sleep and drop the
-+ * IO path mutex while waiting for the I/O path.
-+ *
-+ * @param connection the connection.
-+ * @param timeout_milliseconds maximum blocking time, or -1 for no limit.
-+ * @returns TRUE if the I/O path was acquired.
-+ */
-+static dbus_bool_t
-+_dbus_connection_acquire_io_path (DBusConnection *connection,
-+ int timeout_milliseconds)
-+{
-+ dbus_bool_t we_acquired;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ /* We don't want the connection to vanish */
-+ _dbus_connection_ref_unlocked (connection);
-+
-+ /* We will only touch io_path_acquired which is protected by our mutex */
-+ CONNECTION_UNLOCK (connection);
-+
-+ _dbus_verbose ("%s locking io_path_mutex\n", _DBUS_FUNCTION_NAME);
-+ _dbus_mutex_lock (connection->io_path_mutex);
-+
-+ _dbus_verbose ("%s start connection->io_path_acquired = %d timeout = %d\n",
-+ _DBUS_FUNCTION_NAME, connection->io_path_acquired, timeout_milliseconds);
-+
-+ we_acquired = FALSE;
-+
-+ if (connection->io_path_acquired)
-+ {
-+ if (timeout_milliseconds != -1)
-+ {
-+ _dbus_verbose ("%s waiting %d for IO path to be acquirable\n",
-+ _DBUS_FUNCTION_NAME, timeout_milliseconds);
-+ _dbus_condvar_wait_timeout (connection->io_path_cond,
-+ connection->io_path_mutex,
-+ timeout_milliseconds);
-+ }
-+ else
-+ {
-+ while (connection->io_path_acquired)
-+ {
-+ _dbus_verbose ("%s waiting for IO path to be acquirable\n", _DBUS_FUNCTION_NAME);
-+ _dbus_condvar_wait (connection->io_path_cond, connection->io_path_mutex);
-+ }
-+ }
-+ }
-+
-+ if (!connection->io_path_acquired)
-+ {
-+ we_acquired = TRUE;
-+ connection->io_path_acquired = TRUE;
-+ }
-+
-+ _dbus_verbose ("%s end connection->io_path_acquired = %d we_acquired = %d\n",
-+ _DBUS_FUNCTION_NAME, connection->io_path_acquired, we_acquired);
-+
-+ _dbus_verbose ("%s unlocking io_path_mutex\n", _DBUS_FUNCTION_NAME);
-+ _dbus_mutex_unlock (connection->io_path_mutex);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_connection_unref_unlocked (connection);
-+
-+ return we_acquired;
-+}
-+
-+/**
-+ * Release the I/O path when you're done with it. Only call
-+ * after you've acquired the I/O. Wakes up at most one thread
-+ * currently waiting to acquire the I/O path.
-+ *
-+ * @param connection the connection.
-+ */
-+static void
-+_dbus_connection_release_io_path (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_verbose ("%s locking io_path_mutex\n", _DBUS_FUNCTION_NAME);
-+ _dbus_mutex_lock (connection->io_path_mutex);
-+
-+ _dbus_assert (connection->io_path_acquired);
-+
-+ _dbus_verbose ("%s start connection->io_path_acquired = %d\n",
-+ _DBUS_FUNCTION_NAME, connection->io_path_acquired);
-+
-+ connection->io_path_acquired = FALSE;
-+ _dbus_condvar_wake_one (connection->io_path_cond);
-+
-+ _dbus_verbose ("%s unlocking io_path_mutex\n", _DBUS_FUNCTION_NAME);
-+ _dbus_mutex_unlock (connection->io_path_mutex);
-+}
-+
-+/**
-+ * Queues incoming messages and sends outgoing messages for this
-+ * connection, optionally blocking in the process. Each call to
-+ * _dbus_connection_do_iteration_unlocked() will call select() or poll() one
-+ * time and then read or write data if possible.
-+ *
-+ * The purpose of this function is to be able to flush outgoing
-+ * messages or queue up incoming messages without returning
-+ * control to the application and causing reentrancy weirdness.
-+ *
-+ * The flags parameter allows you to specify whether to
-+ * read incoming messages, write outgoing messages, or both,
-+ * and whether to block if no immediate action is possible.
-+ *
-+ * The timeout_milliseconds parameter does nothing unless the
-+ * iteration is blocking.
-+ *
-+ * If there are no outgoing messages and DBUS_ITERATION_DO_READING
-+ * wasn't specified, then it's impossible to block, even if
-+ * you specify DBUS_ITERATION_BLOCK; in that case the function
-+ * returns immediately.
-+ *
-+ * Called with connection lock held.
-+ *
-+ * @param connection the connection.
-+ * @param flags iteration flags.
-+ * @param timeout_milliseconds maximum blocking time, or -1 for no limit.
-+ */
-+void
-+_dbus_connection_do_iteration_unlocked (DBusConnection *connection,
-+ unsigned int flags,
-+ int timeout_milliseconds)
-+{
-+ _dbus_verbose ("%s start\n", _DBUS_FUNCTION_NAME);
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ if (connection->n_outgoing == 0)
-+ flags &= ~DBUS_ITERATION_DO_WRITING;
-+
-+ if (_dbus_connection_acquire_io_path (connection,
-+ (flags & DBUS_ITERATION_BLOCK) ? timeout_milliseconds : 0))
-+ {
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_transport_do_iteration (connection->transport,
-+ flags, timeout_milliseconds);
-+ _dbus_connection_release_io_path (connection);
-+ }
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_verbose ("%s end\n", _DBUS_FUNCTION_NAME);
-+}
-+
-+/**
-+ * Creates a new connection for the given transport. A transport
-+ * represents a message stream that uses some concrete mechanism, such
-+ * as UNIX domain sockets. May return #NULL if insufficient
-+ * memory exists to create the connection.
-+ *
-+ * @param transport the transport.
-+ * @returns the new connection, or #NULL on failure.
-+ */
-+DBusConnection*
-+_dbus_connection_new_for_transport (DBusTransport *transport)
-+{
-+ DBusConnection *connection;
-+ DBusWatchList *watch_list;
-+ DBusTimeoutList *timeout_list;
-+ DBusHashTable *pending_replies;
-+ DBusMutex *mutex;
-+ DBusMutex *io_path_mutex;
-+ DBusMutex *dispatch_mutex;
-+ DBusCondVar *dispatch_cond;
-+ DBusCondVar *io_path_cond;
-+ DBusList *disconnect_link;
-+ DBusMessage *disconnect_message;
-+ DBusCounter *outgoing_counter;
-+ DBusObjectTree *objects;
-+
-+ watch_list = NULL;
-+ connection = NULL;
-+ pending_replies = NULL;
-+ timeout_list = NULL;
-+ mutex = NULL;
-+ io_path_mutex = NULL;
-+ dispatch_mutex = NULL;
-+ dispatch_cond = NULL;
-+ io_path_cond = NULL;
-+ disconnect_link = NULL;
-+ disconnect_message = NULL;
-+ outgoing_counter = NULL;
-+ objects = NULL;
-+
-+ watch_list = _dbus_watch_list_new ();
-+ if (watch_list == NULL)
-+ goto error;
-+
-+ timeout_list = _dbus_timeout_list_new ();
-+ if (timeout_list == NULL)
-+ goto error;
-+
-+ pending_replies =
-+ _dbus_hash_table_new (DBUS_HASH_INT,
-+ NULL,
-+ (DBusFreeFunction)free_pending_call_on_hash_removal);
-+ if (pending_replies == NULL)
-+ goto error;
-+
-+ connection = dbus_new0 (DBusConnection, 1);
-+ if (connection == NULL)
-+ goto error;
-+
-+ mutex = _dbus_mutex_new ();
-+ if (mutex == NULL)
-+ goto error;
-+
-+ io_path_mutex = _dbus_mutex_new ();
-+ if (io_path_mutex == NULL)
-+ goto error;
-+
-+ dispatch_mutex = _dbus_mutex_new ();
-+ if (dispatch_mutex == NULL)
-+ goto error;
-+
-+ dispatch_cond = _dbus_condvar_new ();
-+ if (dispatch_cond == NULL)
-+ goto error;
-+
-+ io_path_cond = _dbus_condvar_new ();
-+ if (io_path_cond == NULL)
-+ goto error;
-+
-+ disconnect_message = dbus_message_new_signal (DBUS_PATH_LOCAL,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected");
-+
-+ if (disconnect_message == NULL)
-+ goto error;
-+
-+ disconnect_link = _dbus_list_alloc_link (disconnect_message);
-+ if (disconnect_link == NULL)
-+ goto error;
-+
-+ outgoing_counter = _dbus_counter_new ();
-+ if (outgoing_counter == NULL)
-+ goto error;
-+
-+ objects = _dbus_object_tree_new (connection);
-+ if (objects == NULL)
-+ goto error;
-+
-+ if (_dbus_modify_sigpipe)
-+ _dbus_disable_sigpipe ();
-+
-+ connection->refcount.value = 1;
-+ connection->mutex = mutex;
-+ connection->dispatch_cond = dispatch_cond;
-+ connection->dispatch_mutex = dispatch_mutex;
-+ connection->io_path_cond = io_path_cond;
-+ connection->io_path_mutex = io_path_mutex;
-+ connection->transport = transport;
-+ connection->watches = watch_list;
-+ connection->timeouts = timeout_list;
-+ connection->pending_replies = pending_replies;
-+ connection->outgoing_counter = outgoing_counter;
-+ connection->filter_list = NULL;
-+ connection->last_dispatch_status = DBUS_DISPATCH_COMPLETE; /* so we're notified first time there's data */
-+ connection->objects = objects;
-+ connection->exit_on_disconnect = FALSE;
-+ connection->shareable = FALSE;
-+#ifndef DBUS_DISABLE_CHECKS
-+ connection->generation = _dbus_current_generation;
-+#endif
-+
-+ _dbus_data_slot_list_init (&connection->slot_list);
-+
-+ connection->client_serial = 1;
-+
-+ connection->disconnect_message_link = disconnect_link;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ if (!_dbus_transport_set_connection (transport, connection))
-+ goto error;
-+
-+ _dbus_transport_ref (transport);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ return connection;
-+
-+ error:
-+ if (disconnect_message != NULL)
-+ dbus_message_unref (disconnect_message);
-+
-+ if (disconnect_link != NULL)
-+ _dbus_list_free_link (disconnect_link);
-+
-+ if (io_path_cond != NULL)
-+ _dbus_condvar_free (io_path_cond);
-+
-+ if (dispatch_cond != NULL)
-+ _dbus_condvar_free (dispatch_cond);
-+
-+ if (mutex != NULL)
-+ _dbus_mutex_free (mutex);
-+
-+ if (io_path_mutex != NULL)
-+ _dbus_mutex_free (io_path_mutex);
-+
-+ if (dispatch_mutex != NULL)
-+ _dbus_mutex_free (dispatch_mutex);
-+
-+ if (connection != NULL)
-+ dbus_free (connection);
-+
-+ if (pending_replies)
-+ _dbus_hash_table_unref (pending_replies);
-+
-+ if (watch_list)
-+ _dbus_watch_list_free (watch_list);
-+
-+ if (timeout_list)
-+ _dbus_timeout_list_free (timeout_list);
-+
-+ if (outgoing_counter)
-+ _dbus_counter_unref (outgoing_counter);
-+
-+ if (objects)
-+ _dbus_object_tree_unref (objects);
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Increments the reference count of a DBusConnection.
-+ * Requires that the caller already holds the connection lock.
-+ *
-+ * @param connection the connection.
-+ * @returns the connection.
-+ */
-+DBusConnection *
-+_dbus_connection_ref_unlocked (DBusConnection *connection)
-+{
-+ _dbus_assert (connection != NULL);
-+ _dbus_assert (connection->generation == _dbus_current_generation);
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+#ifdef DBUS_HAVE_ATOMIC_INT
-+ _dbus_atomic_inc (&connection->refcount);
-+#else
-+ _dbus_assert (connection->refcount.value > 0);
-+ connection->refcount.value += 1;
-+#endif
-+
-+ return connection;
-+}
-+
-+/**
-+ * Decrements the reference count of a DBusConnection.
-+ * Requires that the caller already holds the connection lock.
-+ *
-+ * @param connection the connection.
-+ */
-+void
-+_dbus_connection_unref_unlocked (DBusConnection *connection)
-+{
-+ dbus_bool_t last_unref;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_assert (connection != NULL);
-+
-+ /* The connection lock is better than the global
-+ * lock in the atomic increment fallback
-+ */
-+
-+#ifdef DBUS_HAVE_ATOMIC_INT
-+ last_unref = (_dbus_atomic_dec (&connection->refcount) == 1);
-+#else
-+ _dbus_assert (connection->refcount.value > 0);
-+
-+ connection->refcount.value -= 1;
-+ last_unref = (connection->refcount.value == 0);
-+#if 0
-+ printf ("unref_unlocked() connection %p count = %d\n", connection, connection->refcount.value);
-+#endif
-+#endif
-+
-+ if (last_unref)
-+ _dbus_connection_last_unref (connection);
-+}
-+
-+static dbus_uint32_t
-+_dbus_connection_get_next_client_serial (DBusConnection *connection)
-+{
-+ int serial;
-+
-+ serial = connection->client_serial++;
-+
-+ if (connection->client_serial < 0)
-+ connection->client_serial = 1;
-+
-+ return serial;
-+}
-+
-+/**
-+ * A callback for use with dbus_watch_new() to create a DBusWatch.
-+ *
-+ * @todo This is basically a hack - we could delete _dbus_transport_handle_watch()
-+ * and the virtual handle_watch in DBusTransport if we got rid of it.
-+ * The reason this is some work is threading, see the _dbus_connection_handle_watch()
-+ * implementation.
-+ *
-+ * @param watch the watch.
-+ * @param condition the current condition of the file descriptors being watched.
-+ * @param data must be a pointer to a #DBusConnection
-+ * @returns #FALSE if the IO condition may not have been fully handled due to lack of memory
-+ */
-+dbus_bool_t
-+_dbus_connection_handle_watch (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data)
-+{
-+ DBusConnection *connection;
-+ dbus_bool_t retval;
-+ DBusDispatchStatus status;
-+
-+ connection = data;
-+
-+ _dbus_verbose ("%s start\n", _DBUS_FUNCTION_NAME);
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_connection_acquire_io_path (connection, -1);
-+ HAVE_LOCK_CHECK (connection);
-+ retval = _dbus_transport_handle_watch (connection->transport,
-+ watch, condition);
-+
-+ _dbus_connection_release_io_path (connection);
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_verbose ("%s middle\n", _DBUS_FUNCTION_NAME);
-+
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* this calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+
-+ _dbus_verbose ("%s end\n", _DBUS_FUNCTION_NAME);
-+
-+ return retval;
-+}
-+
-+_DBUS_DEFINE_GLOBAL_LOCK (shared_connections);
-+static DBusHashTable *shared_connections = NULL;
-+
-+static void
-+shared_connections_shutdown (void *data)
-+{
-+ _DBUS_LOCK (shared_connections);
-+
-+ _dbus_assert (_dbus_hash_table_get_n_entries (shared_connections) == 0);
-+ _dbus_hash_table_unref (shared_connections);
-+ shared_connections = NULL;
-+
-+ _DBUS_UNLOCK (shared_connections);
-+}
-+
-+static dbus_bool_t
-+connection_lookup_shared (DBusAddressEntry *entry,
-+ DBusConnection **result)
-+{
-+ _dbus_verbose ("checking for existing connection\n");
-+
-+ *result = NULL;
-+
-+ _DBUS_LOCK (shared_connections);
-+
-+ if (shared_connections == NULL)
-+ {
-+ _dbus_verbose ("creating shared_connections hash table\n");
-+
-+ shared_connections = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ dbus_free,
-+ NULL);
-+ if (shared_connections == NULL)
-+ {
-+ _DBUS_UNLOCK (shared_connections);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_register_shutdown_func (shared_connections_shutdown, NULL))
-+ {
-+ _dbus_hash_table_unref (shared_connections);
-+ shared_connections = NULL;
-+ _DBUS_UNLOCK (shared_connections);
-+ return FALSE;
-+ }
-+
-+ _dbus_verbose (" successfully created shared_connections\n");
-+
-+ _DBUS_UNLOCK (shared_connections);
-+ return TRUE; /* no point looking up in the hash we just made */
-+ }
-+ else
-+ {
-+ const char *guid;
-+
-+ guid = dbus_address_entry_get_value (entry, "guid");
-+
-+ if (guid != NULL)
-+ {
-+ *result = _dbus_hash_table_lookup_string (shared_connections,
-+ guid);
-+
-+ if (*result)
-+ {
-+ /* The DBusConnection can't have been disconnected
-+ * between the lookup and this code, because the
-+ * disconnection will take the shared_connections lock to
-+ * remove the connection. It can't have been finalized
-+ * since you have to disconnect prior to finalize.
-+ *
-+ * Thus it's safe to ref the connection.
-+ */
-+ dbus_connection_ref (*result);
-+
-+ _dbus_verbose ("looked up existing connection to server guid %s\n",
-+ guid);
-+ }
-+ }
-+
-+ _DBUS_UNLOCK (shared_connections);
-+ return TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+connection_record_shared_unlocked (DBusConnection *connection,
-+ const char *guid)
-+{
-+ char *guid_key;
-+ char *guid_in_connection;
-+
-+ /* A separate copy of the key is required in the hash table, because
-+ * we don't have a lock on the connection when we are doing a hash
-+ * lookup.
-+ */
-+
-+ _dbus_assert (connection->server_guid == NULL);
-+ _dbus_assert (connection->shareable);
-+
-+ guid_key = _dbus_strdup (guid);
-+ if (guid_key == NULL)
-+ return FALSE;
-+
-+ guid_in_connection = _dbus_strdup (guid);
-+ if (guid_in_connection == NULL)
-+ {
-+ dbus_free (guid_key);
-+ return FALSE;
-+ }
-+
-+ _DBUS_LOCK (shared_connections);
-+ _dbus_assert (shared_connections != NULL);
-+
-+ if (!_dbus_hash_table_insert_string (shared_connections,
-+ guid_key, connection))
-+ {
-+ dbus_free (guid_key);
-+ dbus_free (guid_in_connection);
-+ _DBUS_UNLOCK (shared_connections);
-+ return FALSE;
-+ }
-+
-+ connection->server_guid = guid_in_connection;
-+
-+ _dbus_verbose ("stored connection to %s to be shared\n",
-+ connection->server_guid);
-+
-+ _DBUS_UNLOCK (shared_connections);
-+
-+ _dbus_assert (connection->server_guid != NULL);
-+
-+ return TRUE;
-+}
-+
-+static void
-+connection_forget_shared_unlocked (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ if (connection->server_guid == NULL)
-+ return;
-+
-+ _dbus_verbose ("dropping connection to %s out of the shared table\n",
-+ connection->server_guid);
-+
-+ _DBUS_LOCK (shared_connections);
-+
-+ if (!_dbus_hash_table_remove_string (shared_connections,
-+ connection->server_guid))
-+ _dbus_assert_not_reached ("connection was not in the shared table");
-+
-+ dbus_free (connection->server_guid);
-+ connection->server_guid = NULL;
-+
-+ _DBUS_UNLOCK (shared_connections);
-+}
-+
-+static DBusConnection*
-+connection_try_from_address_entry (DBusAddressEntry *entry,
-+ DBusError *error)
-+{
-+ DBusTransport *transport;
-+ DBusConnection *connection;
-+
-+ transport = _dbus_transport_open (entry, error);
-+
-+ if (transport == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return NULL;
-+ }
-+
-+ connection = _dbus_connection_new_for_transport (transport);
-+
-+ _dbus_transport_unref (transport);
-+
-+ if (connection == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ _dbus_assert (!connection->have_connection_lock);
-+#endif
-+ return connection;
-+}
-+
-+/*
-+ * If the shared parameter is true, then any existing connection will
-+ * be used (and if a new connection is created, it will be available
-+ * for use by others). If the shared parameter is false, a new
-+ * connection will always be created, and the new connection will
-+ * never be returned to other callers.
-+ *
-+ * @param address the address
-+ * @param shared whether the connection is shared or private
-+ * @param error error return
-+ * @returns the connection or #NULL on error
-+ */
-+static DBusConnection*
-+_dbus_connection_open_internal (const char *address,
-+ dbus_bool_t shared,
-+ DBusError *error)
-+{
-+ DBusConnection *connection;
-+ DBusAddressEntry **entries;
-+ DBusError tmp_error;
-+ DBusError first_error;
-+ int len, i;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ _dbus_verbose ("opening %s connection to: %s\n",
-+ shared ? "shared" : "private", address);
-+
-+ if (!dbus_parse_address (address, &entries, &len, error))
-+ return NULL;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ connection = NULL;
-+
-+ dbus_error_init (&tmp_error);
-+ dbus_error_init (&first_error);
-+ for (i = 0; i < len; i++)
-+ {
-+ if (shared)
-+ {
-+ if (!connection_lookup_shared (entries[i], &connection))
-+ _DBUS_SET_OOM (&tmp_error);
-+ }
-+
-+ if (connection == NULL)
-+ {
-+ connection = connection_try_from_address_entry (entries[i],
-+ &tmp_error);
-+
-+ if (connection != NULL && shared)
-+ {
-+ const char *guid;
-+
-+ connection->shareable = TRUE;
-+
-+ guid = dbus_address_entry_get_value (entries[i], "guid");
-+
-+ /* we don't have a connection lock but we know nobody
-+ * else has a handle to the connection
-+ */
-+
-+ if (guid &&
-+ !connection_record_shared_unlocked (connection, guid))
-+ {
-+ _DBUS_SET_OOM (&tmp_error);
-+ dbus_connection_close (connection);
-+ dbus_connection_unref (connection);
-+ connection = NULL;
-+ }
-+
-+ /* but as of now the connection is possibly shared
-+ * since another thread could have pulled it from the table
-+ */
-+ }
-+ }
-+
-+ if (connection)
-+ break;
-+
-+ _DBUS_ASSERT_ERROR_IS_SET (&tmp_error);
-+
-+ if (i == 0)
-+ dbus_move_error (&tmp_error, &first_error);
-+ else
-+ dbus_error_free (&tmp_error);
-+ }
-+
-+ /* NOTE we don't have a lock on a possibly-shared connection object */
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (&tmp_error);
-+
-+ if (connection == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (&first_error);
-+ dbus_move_error (&first_error, error);
-+ }
-+ else
-+ {
-+ dbus_error_free (&first_error);
-+ }
-+
-+ dbus_address_entries_free (entries);
-+ return connection;
-+}
-+
-+/** @} */
-+
-+/**
-+ * @addtogroup DBusConnection
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Gets a connection to a remote address. If a connection to the given
-+ * address already exists, returns the existing connection with its
-+ * reference count incremented. Otherwise, returns a new connection
-+ * and saves the new connection for possible re-use if a future call
-+ * to dbus_connection_open() asks to connect to the same server.
-+ *
-+ * Use dbus_connection_open_private() to get a dedicated connection
-+ * not shared with other callers of dbus_connection_open().
-+ *
-+ * If the open fails, the function returns #NULL, and provides a
-+ * reason for the failure in the error parameter. Pass #NULL for the
-+ * error parameter if you aren't interested in the reason for
-+ * failure.
-+ *
-+ * @param address the address.
-+ * @param error address where an error can be returned.
-+ * @returns new connection, or #NULL on failure.
-+ */
-+DBusConnection*
-+dbus_connection_open (const char *address,
-+ DBusError *error)
-+{
-+ DBusConnection *connection;
-+
-+ _dbus_return_val_if_fail (address != NULL, NULL);
-+ _dbus_return_val_if_error_is_set (error, NULL);
-+
-+ connection = _dbus_connection_open_internal (address,
-+ TRUE,
-+ error);
-+
-+ return connection;
-+}
-+
-+/**
-+ * Opens a new, dedicated connection to a remote address. Unlike
-+ * dbus_connection_open(), always creates a new connection.
-+ * This connection will not be saved or recycled by libdbus.
-+ *
-+ * If the open fails, the function returns #NULL, and provides a
-+ * reason for the failure in the error parameter. Pass #NULL for the
-+ * error parameter if you aren't interested in the reason for
-+ * failure.
-+ *
-+ * @param address the address.
-+ * @param error address where an error can be returned.
-+ * @returns new connection, or #NULL on failure.
-+ */
-+DBusConnection*
-+dbus_connection_open_private (const char *address,
-+ DBusError *error)
-+{
-+ DBusConnection *connection;
-+
-+ _dbus_return_val_if_fail (address != NULL, NULL);
-+ _dbus_return_val_if_error_is_set (error, NULL);
-+
-+ connection = _dbus_connection_open_internal (address,
-+ FALSE,
-+ error);
-+
-+ return connection;
-+}
-+
-+/**
-+ * Increments the reference count of a DBusConnection.
-+ *
-+ * @param connection the connection.
-+ * @returns the connection.
-+ */
-+DBusConnection *
-+dbus_connection_ref (DBusConnection *connection)
-+{
-+ _dbus_return_val_if_fail (connection != NULL, NULL);
-+ _dbus_return_val_if_fail (connection->generation == _dbus_current_generation, NULL);
-+
-+ /* The connection lock is better than the global
-+ * lock in the atomic increment fallback
-+ */
-+
-+#ifdef DBUS_HAVE_ATOMIC_INT
-+ _dbus_atomic_inc (&connection->refcount);
-+#else
-+ CONNECTION_LOCK (connection);
-+ _dbus_assert (connection->refcount.value > 0);
-+
-+ connection->refcount.value += 1;
-+ CONNECTION_UNLOCK (connection);
-+#endif
-+
-+ return connection;
-+}
-+
-+static void
-+free_outgoing_message (void *element,
-+ void *data)
-+{
-+ DBusMessage *message = element;
-+ DBusConnection *connection = data;
-+
-+ _dbus_message_remove_size_counter (message,
-+ connection->outgoing_counter,
-+ NULL);
-+ dbus_message_unref (message);
-+}
-+
-+/* This is run without the mutex held, but after the last reference
-+ * to the connection has been dropped we should have no thread-related
-+ * problems
-+ */
-+static void
-+_dbus_connection_last_unref (DBusConnection *connection)
-+{
-+ DBusList *link;
-+
-+ _dbus_verbose ("Finalizing connection %p\n", connection);
-+
-+ _dbus_assert (connection->refcount.value == 0);
-+
-+ /* You have to disconnect the connection before unref:ing it. Otherwise
-+ * you won't get the disconnected message.
-+ */
-+ _dbus_assert (!_dbus_transport_get_is_connected (connection->transport));
-+ _dbus_assert (connection->server_guid == NULL);
-+
-+ /* ---- We're going to call various application callbacks here, hope it doesn't break anything... */
-+ _dbus_object_tree_free_all_unlocked (connection->objects);
-+
-+ dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
-+ dbus_connection_set_wakeup_main_function (connection, NULL, NULL, NULL);
-+ dbus_connection_set_unix_user_function (connection, NULL, NULL, NULL);
-+
-+ _dbus_watch_list_free (connection->watches);
-+ connection->watches = NULL;
-+
-+ _dbus_timeout_list_free (connection->timeouts);
-+ connection->timeouts = NULL;
-+
-+ _dbus_data_slot_list_free (&connection->slot_list);
-+
-+ link = _dbus_list_get_first_link (&connection->filter_list);
-+ while (link != NULL)
-+ {
-+ DBusMessageFilter *filter = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&connection->filter_list, link);
-+
-+ filter->function = NULL;
-+ _dbus_message_filter_unref (filter); /* calls app callback */
-+ link->data = NULL;
-+
-+ link = next;
-+ }
-+ _dbus_list_clear (&connection->filter_list);
-+
-+ /* ---- Done with stuff that invokes application callbacks */
-+
-+ _dbus_object_tree_unref (connection->objects);
-+
-+ _dbus_hash_table_unref (connection->pending_replies);
-+ connection->pending_replies = NULL;
-+
-+ _dbus_list_clear (&connection->filter_list);
-+
-+ _dbus_list_foreach (&connection->outgoing_messages,
-+ free_outgoing_message,
-+ connection);
-+ _dbus_list_clear (&connection->outgoing_messages);
-+
-+ _dbus_list_foreach (&connection->incoming_messages,
-+ (DBusForeachFunction) dbus_message_unref,
-+ NULL);
-+ _dbus_list_clear (&connection->incoming_messages);
-+
-+ _dbus_counter_unref (connection->outgoing_counter);
-+
-+ _dbus_transport_unref (connection->transport);
-+
-+ if (connection->disconnect_message_link)
-+ {
-+ DBusMessage *message = connection->disconnect_message_link->data;
-+ dbus_message_unref (message);
-+ _dbus_list_free_link (connection->disconnect_message_link);
-+ }
-+
-+ _dbus_list_clear (&connection->link_cache);
-+
-+ _dbus_condvar_free (connection->dispatch_cond);
-+ _dbus_condvar_free (connection->io_path_cond);
-+
-+ _dbus_mutex_free (connection->io_path_mutex);
-+ _dbus_mutex_free (connection->dispatch_mutex);
-+
-+ _dbus_mutex_free (connection->mutex);
-+
-+ dbus_free (connection);
-+}
-+
-+/**
-+ * Decrements the reference count of a DBusConnection, and finalizes
-+ * it if the count reaches zero. It is a bug to drop the last reference
-+ * to a connection that has not been disconnected.
-+ *
-+ * @todo in practice it can be quite tricky to never unref a connection
-+ * that's still connected; maybe there's some way we could avoid
-+ * the requirement.
-+ *
-+ * @param connection the connection.
-+ */
-+void
-+dbus_connection_unref (DBusConnection *connection)
-+{
-+ dbus_bool_t last_unref;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+ _dbus_return_if_fail (connection->generation == _dbus_current_generation);
-+
-+ /* The connection lock is better than the global
-+ * lock in the atomic increment fallback
-+ */
-+
-+#ifdef DBUS_HAVE_ATOMIC_INT
-+ last_unref = (_dbus_atomic_dec (&connection->refcount) == 1);
-+#else
-+ CONNECTION_LOCK (connection);
-+
-+ _dbus_assert (connection->refcount.value > 0);
-+
-+ connection->refcount.value -= 1;
-+ last_unref = (connection->refcount.value == 0);
-+
-+#if 0
-+ printf ("unref() connection %p count = %d\n", connection, connection->refcount.value);
-+#endif
-+
-+ CONNECTION_UNLOCK (connection);
-+#endif
-+
-+ if (last_unref)
-+ _dbus_connection_last_unref (connection);
-+}
-+
-+/**
-+ * Closes the connection, so no further data can be sent or received.
-+ * Any further attempts to send data will result in errors. This
-+ * function does not affect the connection's reference count. It's
-+ * safe to disconnect a connection more than once; all calls after the
-+ * first do nothing. It's impossible to "reopen" a connection, a
-+ * new connection must be created. This function may result in a call
-+ * to the DBusDispatchStatusFunction set with
-+ * dbus_connection_set_dispatch_status_function(), as the disconnect
-+ * message it generates needs to be dispatched.
-+ *
-+ * @param connection the connection.
-+ */
-+void
-+dbus_connection_close (DBusConnection *connection)
-+{
-+ DBusDispatchStatus status;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+ _dbus_return_if_fail (connection->generation == _dbus_current_generation);
-+
-+ _dbus_verbose ("Disconnecting %p\n", connection);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ _dbus_transport_disconnect (connection->transport);
-+
-+ _dbus_verbose ("%s middle\n", _DBUS_FUNCTION_NAME);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* this calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+}
-+
-+/** Alias for dbus_connection_close(). This method is DEPRECATED and will be
-+ * removed for 1.0. Change your code to use dbus_connection_close() instead.
-+ *
-+ * @param connection the connection.
-+ * @deprecated
-+ */
-+void
-+dbus_connection_disconnect (DBusConnection *connection)
-+{
-+ dbus_connection_close (connection);
-+}
-+
-+static dbus_bool_t
-+_dbus_connection_get_is_connected_unlocked (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+ return _dbus_transport_get_is_connected (connection->transport);
-+}
-+
-+/**
-+ * Gets whether the connection is currently connected. All
-+ * connections are connected when they are opened. A connection may
-+ * become disconnected when the remote application closes its end, or
-+ * exits; a connection may also be disconnected with
-+ * dbus_connection_close().
-+ *
-+ * @param connection the connection.
-+ * @returns #TRUE if the connection is still alive.
-+ */
-+dbus_bool_t
-+dbus_connection_get_is_connected (DBusConnection *connection)
-+{
-+ dbus_bool_t res;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+ res = _dbus_connection_get_is_connected_unlocked (connection);
-+ CONNECTION_UNLOCK (connection);
-+
-+ return res;
-+}
-+
-+/**
-+ * Gets whether the connection was authenticated. (Note that
-+ * if the connection was authenticated then disconnected,
-+ * this function still returns #TRUE)
-+ *
-+ * @param connection the connection
-+ * @returns #TRUE if the connection was ever authenticated
-+ */
-+dbus_bool_t
-+dbus_connection_get_is_authenticated (DBusConnection *connection)
-+{
-+ dbus_bool_t res;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+ res = _dbus_transport_get_is_authenticated (connection->transport);
-+ CONNECTION_UNLOCK (connection);
-+
-+ return res;
-+}
-+
-+/**
-+ * Set whether _exit() should be called when the connection receives a
-+ * disconnect signal. The call to _exit() comes after any handlers for
-+ * the disconnect signal run; handlers can cancel the exit by calling
-+ * this function.
-+ *
-+ * By default, exit_on_disconnect is #FALSE; but for message bus
-+ * connections returned from dbus_bus_get() it will be toggled on
-+ * by default.
-+ *
-+ * @param connection the connection
-+ * @param exit_on_disconnect #TRUE if _exit() should be called after a disconnect signal
-+ */
-+void
-+dbus_connection_set_exit_on_disconnect (DBusConnection *connection,
-+ dbus_bool_t exit_on_disconnect)
-+{
-+ _dbus_return_if_fail (connection != NULL);
-+
-+ CONNECTION_LOCK (connection);
-+ connection->exit_on_disconnect = exit_on_disconnect != FALSE;
-+ CONNECTION_UNLOCK (connection);
-+}
-+
-+static DBusPreallocatedSend*
-+_dbus_connection_preallocate_send_unlocked (DBusConnection *connection)
-+{
-+ DBusPreallocatedSend *preallocated;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_assert (connection != NULL);
-+
-+ preallocated = dbus_new (DBusPreallocatedSend, 1);
-+ if (preallocated == NULL)
-+ return NULL;
-+
-+ if (connection->link_cache != NULL)
-+ {
-+ preallocated->queue_link =
-+ _dbus_list_pop_first_link (&connection->link_cache);
-+ preallocated->queue_link->data = NULL;
-+ }
-+ else
-+ {
-+ preallocated->queue_link = _dbus_list_alloc_link (NULL);
-+ if (preallocated->queue_link == NULL)
-+ goto failed_0;
-+ }
-+
-+ if (connection->link_cache != NULL)
-+ {
-+ preallocated->counter_link =
-+ _dbus_list_pop_first_link (&connection->link_cache);
-+ preallocated->counter_link->data = connection->outgoing_counter;
-+ }
-+ else
-+ {
-+ preallocated->counter_link = _dbus_list_alloc_link (connection->outgoing_counter);
-+ if (preallocated->counter_link == NULL)
-+ goto failed_1;
-+ }
-+
-+ _dbus_counter_ref (preallocated->counter_link->data);
-+
-+ preallocated->connection = connection;
-+
-+ return preallocated;
-+
-+ failed_1:
-+ _dbus_list_free_link (preallocated->queue_link);
-+ failed_0:
-+ dbus_free (preallocated);
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Preallocates resources needed to send a message, allowing the message
-+ * to be sent without the possibility of memory allocation failure.
-+ * Allows apps to create a future guarantee that they can send
-+ * a message regardless of memory shortages.
-+ *
-+ * @param connection the connection we're preallocating for.
-+ * @returns the preallocated resources, or #NULL
-+ */
-+DBusPreallocatedSend*
-+dbus_connection_preallocate_send (DBusConnection *connection)
-+{
-+ DBusPreallocatedSend *preallocated;
-+
-+ _dbus_return_val_if_fail (connection != NULL, NULL);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ preallocated =
-+ _dbus_connection_preallocate_send_unlocked (connection);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ return preallocated;
-+}
-+
-+/**
-+ * Frees preallocated message-sending resources from
-+ * dbus_connection_preallocate_send(). Should only
-+ * be called if the preallocated resources are not used
-+ * to send a message.
-+ *
-+ * @param connection the connection
-+ * @param preallocated the resources
-+ */
-+void
-+dbus_connection_free_preallocated_send (DBusConnection *connection,
-+ DBusPreallocatedSend *preallocated)
-+{
-+ _dbus_return_if_fail (connection != NULL);
-+ _dbus_return_if_fail (preallocated != NULL);
-+ _dbus_return_if_fail (connection == preallocated->connection);
-+
-+ _dbus_list_free_link (preallocated->queue_link);
-+ _dbus_counter_unref (preallocated->counter_link->data);
-+ _dbus_list_free_link (preallocated->counter_link);
-+ dbus_free (preallocated);
-+}
-+
-+/* Called with lock held, does not update dispatch status */
-+static void
-+_dbus_connection_send_preallocated_unlocked_no_update (DBusConnection *connection,
-+ DBusPreallocatedSend *preallocated,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ dbus_uint32_t serial;
-+ const char *sig;
-+
-+ preallocated->queue_link->data = message;
-+ _dbus_list_prepend_link (&connection->outgoing_messages,
-+ preallocated->queue_link);
-+
-+ _dbus_message_add_size_counter_link (message,
-+ preallocated->counter_link);
-+
-+ dbus_free (preallocated);
-+ preallocated = NULL;
-+
-+ dbus_message_ref (message);
-+
-+ connection->n_outgoing += 1;
-+
-+ sig = dbus_message_get_signature (message);
-+
-+ _dbus_verbose ("Message %p (%d %s %s %s '%s') for %s added to outgoing queue %p, %d pending to send\n",
-+ message,
-+ dbus_message_get_type (message),
-+ dbus_message_get_path (message) ?
-+ dbus_message_get_path (message) :
-+ "no path",
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) :
-+ "no interface",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) :
-+ "no member",
-+ sig,
-+ dbus_message_get_destination (message) ?
-+ dbus_message_get_destination (message) :
-+ "null",
-+ connection,
-+ connection->n_outgoing);
-+
-+ if (dbus_message_get_serial (message) == 0)
-+ {
-+ serial = _dbus_connection_get_next_client_serial (connection);
-+ _dbus_message_set_serial (message, serial);
-+ if (client_serial)
-+ *client_serial = serial;
-+ }
-+ else
-+ {
-+ if (client_serial)
-+ *client_serial = dbus_message_get_serial (message);
-+ }
-+
-+ _dbus_verbose ("Message %p serial is %u\n",
-+ message, dbus_message_get_serial (message));
-+
-+ _dbus_message_lock (message);
-+
-+ /* Now we need to run an iteration to hopefully just write the messages
-+ * out immediately, and otherwise get them queued up
-+ */
-+ _dbus_connection_do_iteration_unlocked (connection,
-+ DBUS_ITERATION_DO_WRITING,
-+ -1);
-+
-+ /* If stuff is still queued up, be sure we wake up the main loop */
-+ if (connection->n_outgoing > 0)
-+ _dbus_connection_wakeup_mainloop (connection);
-+}
-+
-+static void
-+_dbus_connection_send_preallocated_and_unlock (DBusConnection *connection,
-+ DBusPreallocatedSend *preallocated,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ DBusDispatchStatus status;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_connection_send_preallocated_unlocked_no_update (connection,
-+ preallocated,
-+ message, client_serial);
-+
-+ _dbus_verbose ("%s middle\n", _DBUS_FUNCTION_NAME);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* this calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+}
-+
-+/**
-+ * Sends a message using preallocated resources. This function cannot fail.
-+ * It works identically to dbus_connection_send() in other respects.
-+ * Preallocated resources comes from dbus_connection_preallocate_send().
-+ * This function "consumes" the preallocated resources, they need not
-+ * be freed separately.
-+ *
-+ * @param connection the connection
-+ * @param preallocated the preallocated resources
-+ * @param message the message to send
-+ * @param client_serial return location for client serial assigned to the message
-+ */
-+void
-+dbus_connection_send_preallocated (DBusConnection *connection,
-+ DBusPreallocatedSend *preallocated,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ _dbus_return_if_fail (connection != NULL);
-+ _dbus_return_if_fail (preallocated != NULL);
-+ _dbus_return_if_fail (message != NULL);
-+ _dbus_return_if_fail (preallocated->connection == connection);
-+ _dbus_return_if_fail (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_METHOD_CALL ||
-+ (dbus_message_get_interface (message) != NULL &&
-+ dbus_message_get_member (message) != NULL));
-+ _dbus_return_if_fail (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_SIGNAL ||
-+ (dbus_message_get_interface (message) != NULL &&
-+ dbus_message_get_member (message) != NULL));
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_connection_send_preallocated_and_unlock (connection,
-+ preallocated,
-+ message, client_serial);
-+}
-+
-+static dbus_bool_t
-+_dbus_connection_send_unlocked_no_update (DBusConnection *connection,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ DBusPreallocatedSend *preallocated;
-+
-+ _dbus_assert (connection != NULL);
-+ _dbus_assert (message != NULL);
-+
-+ preallocated = _dbus_connection_preallocate_send_unlocked (connection);
-+ if (preallocated == NULL)
-+ return FALSE;
-+
-+ _dbus_connection_send_preallocated_unlocked_no_update (connection,
-+ preallocated,
-+ message,
-+ client_serial);
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+_dbus_connection_send_and_unlock (DBusConnection *connection,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ DBusPreallocatedSend *preallocated;
-+
-+ _dbus_assert (connection != NULL);
-+ _dbus_assert (message != NULL);
-+
-+ preallocated = _dbus_connection_preallocate_send_unlocked (connection);
-+ if (preallocated == NULL)
-+ {
-+ CONNECTION_UNLOCK (connection);
-+ return FALSE;
-+ }
-+
-+ _dbus_connection_send_preallocated_and_unlock (connection,
-+ preallocated,
-+ message,
-+ client_serial);
-+ return TRUE;
-+}
-+
-+/**
-+ * Adds a message to the outgoing message queue. Does not block to
-+ * write the message to the network; that happens asynchronously. To
-+ * force the message to be written, call dbus_connection_flush().
-+ * Because this only queues the message, the only reason it can
-+ * fail is lack of memory. Even if the connection is disconnected,
-+ * no error will be returned.
-+ *
-+ * If the function fails due to lack of memory, it returns #FALSE.
-+ * The function will never fail for other reasons; even if the
-+ * connection is disconnected, you can queue an outgoing message,
-+ * though obviously it won't be sent.
-+ *
-+ * @param connection the connection.
-+ * @param message the message to write.
-+ * @param client_serial return location for client serial.
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+dbus_connection_send (DBusConnection *connection,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ return _dbus_connection_send_and_unlock (connection,
-+ message,
-+ client_serial);
-+}
-+
-+static dbus_bool_t
-+reply_handler_timeout (void *data)
-+{
-+ DBusConnection *connection;
-+ DBusDispatchStatus status;
-+ DBusPendingCall *pending = data;
-+
-+ connection = pending->connection;
-+
-+ CONNECTION_LOCK (connection);
-+ if (pending->timeout_link)
-+ {
-+ _dbus_connection_queue_synthesized_message_link (connection,
-+ pending->timeout_link);
-+ pending->timeout_link = NULL;
-+ }
-+
-+ _dbus_connection_remove_timeout_unlocked (connection,
-+ pending->timeout);
-+ pending->timeout_added = FALSE;
-+
-+ _dbus_verbose ("%s middle\n", _DBUS_FUNCTION_NAME);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* Unlocks, and calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Queues a message to send, as with dbus_connection_send_message(),
-+ * but also returns a #DBusPendingCall used to receive a reply to the
-+ * message. If no reply is received in the given timeout_milliseconds,
-+ * this function expires the pending reply and generates a synthetic
-+ * error reply (generated in-process, not by the remote application)
-+ * indicating that a timeout occurred.
-+ *
-+ * A #DBusPendingCall will see a reply message after any filters, but
-+ * before any object instances or other handlers. A #DBusPendingCall
-+ * will always see exactly one reply message, unless it's cancelled
-+ * with dbus_pending_call_cancel().
-+ *
-+ * If a filter filters out the reply before the handler sees it, the
-+ * reply is immediately timed out and a timeout error reply is
-+ * generated. If a filter removes the timeout error reply then the
-+ * #DBusPendingCall will get confused. Filtering the timeout error
-+ * is thus considered a bug and will print a warning.
-+ *
-+ * If #NULL is passed for the pending_return, the #DBusPendingCall
-+ * will still be generated internally, and used to track
-+ * the message reply timeout. This means a timeout error will
-+ * occur if no reply arrives, unlike with dbus_connection_send().
-+ *
-+ * If -1 is passed for the timeout, a sane default timeout is used. -1
-+ * is typically the best value for the timeout for this reason, unless
-+ * you want a very short or very long timeout. There is no way to
-+ * avoid a timeout entirely, other than passing INT_MAX for the
-+ * timeout to postpone it indefinitely.
-+ *
-+ * @param connection the connection
-+ * @param message the message to send
-+ * @param pending_return return location for a #DBusPendingCall object, or #NULL
-+ * @param timeout_milliseconds timeout in milliseconds or -1 for default
-+ * @returns #TRUE if the message is successfully queued, #FALSE if no memory.
-+ *
-+ */
-+dbus_bool_t
-+dbus_connection_send_with_reply (DBusConnection *connection,
-+ DBusMessage *message,
-+ DBusPendingCall **pending_return,
-+ int timeout_milliseconds)
-+{
-+ DBusPendingCall *pending;
-+ DBusMessage *reply;
-+ DBusList *reply_link;
-+ dbus_int32_t serial = -1;
-+ DBusDispatchStatus status;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (timeout_milliseconds >= 0 || timeout_milliseconds == -1, FALSE);
-+
-+ if (pending_return)
-+ *pending_return = NULL;
-+
-+ pending = _dbus_pending_call_new (connection,
-+ timeout_milliseconds,
-+ reply_handler_timeout);
-+
-+ if (pending == NULL)
-+ return FALSE;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ /* Assign a serial to the message */
-+ if (dbus_message_get_serial (message) == 0)
-+ {
-+ serial = _dbus_connection_get_next_client_serial (connection);
-+ _dbus_message_set_serial (message, serial);
-+ }
-+
-+ pending->reply_serial = serial;
-+
-+ reply = dbus_message_new_error (message, DBUS_ERROR_NO_REPLY,
-+ "No reply within specified time");
-+ if (reply == NULL)
-+ goto error;
-+
-+ reply_link = _dbus_list_alloc_link (reply);
-+ if (reply_link == NULL)
-+ {
-+ CONNECTION_UNLOCK (connection);
-+ dbus_message_unref (reply);
-+ goto error_unlocked;
-+ }
-+
-+ pending->timeout_link = reply_link;
-+
-+ /* Insert the serial in the pending replies hash;
-+ * hash takes a refcount on DBusPendingCall.
-+ * Also, add the timeout.
-+ */
-+ if (!_dbus_connection_attach_pending_call_unlocked (connection,
-+ pending))
-+ goto error;
-+
-+ if (!_dbus_connection_send_unlocked_no_update (connection, message, NULL))
-+ {
-+ _dbus_connection_detach_pending_call_and_unlock (connection,
-+ pending);
-+ goto error_unlocked;
-+ }
-+
-+ if (pending_return)
-+ *pending_return = pending;
-+ else
-+ {
-+ _dbus_connection_detach_pending_call_unlocked (connection, pending);
-+ dbus_pending_call_unref (pending);
-+ }
-+
-+ _dbus_verbose ("%s middle\n", _DBUS_FUNCTION_NAME);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* this calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+
-+ return TRUE;
-+
-+ error:
-+ CONNECTION_UNLOCK (connection);
-+ error_unlocked:
-+ dbus_pending_call_unref (pending);
-+ return FALSE;
-+}
-+
-+/* This is slightly strange since we can pop a message here without
-+ * the dispatch lock.
-+ */
-+static DBusMessage*
-+check_for_reply_unlocked (DBusConnection *connection,
-+ dbus_uint32_t client_serial)
-+{
-+ DBusList *link;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ link = _dbus_list_get_first_link (&connection->incoming_messages);
-+
-+ while (link != NULL)
-+ {
-+ DBusMessage *reply = link->data;
-+
-+ if (dbus_message_get_reply_serial (reply) == client_serial)
-+ {
-+ _dbus_list_remove_link (&connection->incoming_messages, link);
-+ connection->n_incoming -= 1;
-+ return reply;
-+ }
-+ link = _dbus_list_get_next_link (&connection->incoming_messages, link);
-+ }
-+
-+ return NULL;
-+}
-+
-+/**
-+ * When a function that blocks has been called with a timeout, and we
-+ * run out of memory, the time to wait for memory is based on the
-+ * timeout. If the caller was willing to block a long time we wait a
-+ * relatively long time for memory, if they were only willing to block
-+ * briefly then we retry for memory at a rapid rate.
-+ *
-+ * @timeout_milliseconds the timeout requested for blocking
-+ */
-+static void
-+_dbus_memory_pause_based_on_timeout (int timeout_milliseconds)
-+{
-+ if (timeout_milliseconds == -1)
-+ _dbus_sleep_milliseconds (1000);
-+ else if (timeout_milliseconds < 100)
-+ ; /* just busy loop */
-+ else if (timeout_milliseconds <= 1000)
-+ _dbus_sleep_milliseconds (timeout_milliseconds / 3);
-+ else
-+ _dbus_sleep_milliseconds (1000);
-+}
-+
-+/**
-+ * Blocks until a pending call times out or gets a reply.
-+ *
-+ * Does not re-enter the main loop or run filter/path-registered
-+ * callbacks. The reply to the message will not be seen by
-+ * filter callbacks.
-+ *
-+ * Returns immediately if pending call already got a reply.
-+ *
-+ * @todo could use performance improvements (it keeps scanning
-+ * the whole message queue for example)
-+ *
-+ * @param pending the pending call we block for a reply on
-+ */
-+void
-+_dbus_connection_block_pending_call (DBusPendingCall *pending)
-+{
-+ long start_tv_sec, start_tv_usec;
-+ long end_tv_sec, end_tv_usec;
-+ long tv_sec, tv_usec;
-+ DBusDispatchStatus status;
-+ DBusConnection *connection;
-+ dbus_uint32_t client_serial;
-+ int timeout_milliseconds;
-+
-+ _dbus_assert (pending != NULL);
-+
-+ if (dbus_pending_call_get_completed (pending))
-+ return;
-+
-+ if (pending->connection == NULL)
-+ return; /* call already detached */
-+
-+ dbus_pending_call_ref (pending); /* necessary because the call could be canceled */
-+
-+ connection = pending->connection;
-+ client_serial = pending->reply_serial;
-+
-+ /* note that timeout_milliseconds is limited to a smallish value
-+ * in _dbus_pending_call_new() so overflows aren't possible
-+ * below
-+ */
-+ timeout_milliseconds = dbus_timeout_get_interval (pending->timeout);
-+
-+ /* Flush message queue */
-+ dbus_connection_flush (connection);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ _dbus_get_current_time (&start_tv_sec, &start_tv_usec);
-+ end_tv_sec = start_tv_sec + timeout_milliseconds / 1000;
-+ end_tv_usec = start_tv_usec + (timeout_milliseconds % 1000) * 1000;
-+ end_tv_sec += end_tv_usec / _DBUS_USEC_PER_SECOND;
-+ end_tv_usec = end_tv_usec % _DBUS_USEC_PER_SECOND;
-+
-+ _dbus_verbose ("dbus_connection_send_with_reply_and_block(): will block %d milliseconds for reply serial %u from %ld sec %ld usec to %ld sec %ld usec\n",
-+ timeout_milliseconds,
-+ client_serial,
-+ start_tv_sec, start_tv_usec,
-+ end_tv_sec, end_tv_usec);
-+
-+ /* Now we wait... */
-+ /* always block at least once as we know we don't have the reply yet */
-+ _dbus_connection_do_iteration_unlocked (connection,
-+ DBUS_ITERATION_DO_READING |
-+ DBUS_ITERATION_BLOCK,
-+ timeout_milliseconds);
-+
-+ recheck_status:
-+
-+ _dbus_verbose ("%s top of recheck\n", _DBUS_FUNCTION_NAME);
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ /* queue messages and get status */
-+
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* the get_completed() is in case a dispatch() while we were blocking
-+ * got the reply instead of us.
-+ */
-+ if (dbus_pending_call_get_completed (pending))
-+ {
-+ _dbus_verbose ("Pending call completed by dispatch in %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+ dbus_pending_call_unref (pending);
-+ return;
-+ }
-+
-+ if (status == DBUS_DISPATCH_DATA_REMAINS)
-+ {
-+ DBusMessage *reply;
-+
-+ reply = check_for_reply_unlocked (connection, client_serial);
-+ if (reply != NULL)
-+ {
-+ _dbus_verbose ("%s checked for reply\n", _DBUS_FUNCTION_NAME);
-+
-+ _dbus_verbose ("dbus_connection_send_with_reply_and_block(): got reply\n");
-+
-+ _dbus_pending_call_complete_and_unlock (pending, reply);
-+ dbus_message_unref (reply);
-+
-+ CONNECTION_LOCK (connection);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+ dbus_pending_call_unref (pending);
-+
-+ return;
-+ }
-+ }
-+
-+ _dbus_get_current_time (&tv_sec, &tv_usec);
-+
-+ if (!_dbus_connection_get_is_connected_unlocked (connection))
-+ {
-+ /* FIXME send a "DBUS_ERROR_DISCONNECTED" instead, just to help
-+ * programmers understand what went wrong since the timeout is
-+ * confusing
-+ */
-+
-+ _dbus_pending_call_complete_and_unlock (pending, NULL);
-+ dbus_pending_call_unref (pending);
-+ return;
-+ }
-+ else if (tv_sec < start_tv_sec)
-+ _dbus_verbose ("dbus_connection_send_with_reply_and_block(): clock set backward\n");
-+ else if (connection->disconnect_message_link == NULL)
-+ _dbus_verbose ("dbus_connection_send_with_reply_and_block(): disconnected\n");
-+ else if (tv_sec < end_tv_sec ||
-+ (tv_sec == end_tv_sec && tv_usec < end_tv_usec))
-+ {
-+ timeout_milliseconds = (end_tv_sec - tv_sec) * 1000 +
-+ (end_tv_usec - tv_usec) / 1000;
-+ _dbus_verbose ("dbus_connection_send_with_reply_and_block(): %d milliseconds remain\n", timeout_milliseconds);
-+ _dbus_assert (timeout_milliseconds >= 0);
-+
-+ if (status == DBUS_DISPATCH_NEED_MEMORY)
-+ {
-+ /* Try sleeping a bit, as we aren't sure we need to block for reading,
-+ * we may already have a reply in the buffer and just can't process
-+ * it.
-+ */
-+ _dbus_verbose ("dbus_connection_send_with_reply_and_block() waiting for more memory\n");
-+
-+ _dbus_memory_pause_based_on_timeout (timeout_milliseconds);
-+ }
-+ else
-+ {
-+ /* block again, we don't have the reply buffered yet. */
-+ _dbus_connection_do_iteration_unlocked (connection,
-+ DBUS_ITERATION_DO_READING |
-+ DBUS_ITERATION_BLOCK,
-+ timeout_milliseconds);
-+ }
-+
-+ goto recheck_status;
-+ }
-+
-+ _dbus_verbose ("dbus_connection_send_with_reply_and_block(): Waited %ld milliseconds and got no reply\n",
-+ (tv_sec - start_tv_sec) * 1000 + (tv_usec - start_tv_usec) / 1000);
-+
-+ _dbus_assert (!dbus_pending_call_get_completed (pending));
-+
-+ /* unlock and call user code */
-+ _dbus_pending_call_complete_and_unlock (pending, NULL);
-+
-+ /* update user code on dispatch status */
-+ CONNECTION_LOCK (connection);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+ dbus_pending_call_unref (pending);
-+}
-+
-+/**
-+ * Sends a message and blocks a certain time period while waiting for
-+ * a reply. This function does not reenter the main loop,
-+ * i.e. messages other than the reply are queued up but not
-+ * processed. This function is used to do non-reentrant "method
-+ * calls."
-+ *
-+ * If a normal reply is received, it is returned, and removed from the
-+ * incoming message queue. If it is not received, #NULL is returned
-+ * and the error is set to #DBUS_ERROR_NO_REPLY. If an error reply is
-+ * received, it is converted to a #DBusError and returned as an error,
-+ * then the reply message is deleted. If something else goes wrong,
-+ * result is set to whatever is appropriate, such as
-+ * #DBUS_ERROR_NO_MEMORY or #DBUS_ERROR_DISCONNECTED.
-+ *
-+ * @param connection the connection
-+ * @param message the message to send
-+ * @param timeout_milliseconds timeout in milliseconds or -1 for default
-+ * @param error return location for error message
-+ * @returns the message that is the reply or #NULL with an error code if the
-+ * function fails.
-+ */
-+DBusMessage*
-+dbus_connection_send_with_reply_and_block (DBusConnection *connection,
-+ DBusMessage *message,
-+ int timeout_milliseconds,
-+ DBusError *error)
-+{
-+ DBusMessage *reply;
-+ DBusPendingCall *pending;
-+
-+ _dbus_return_val_if_fail (connection != NULL, NULL);
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+ _dbus_return_val_if_fail (timeout_milliseconds >= 0 || timeout_milliseconds == -1, NULL);
-+ _dbus_return_val_if_error_is_set (error, NULL);
-+
-+ if (!dbus_connection_send_with_reply (connection, message,
-+ &pending, timeout_milliseconds))
-+ {
-+ _DBUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ _dbus_assert (pending != NULL);
-+
-+ dbus_pending_call_block (pending);
-+
-+ reply = dbus_pending_call_steal_reply (pending);
-+ dbus_pending_call_unref (pending);
-+
-+ /* call_complete_and_unlock() called from pending_call_block() should
-+ * always fill this in.
-+ */
-+ _dbus_assert (reply != NULL);
-+
-+ if (dbus_set_error_from_message (error, reply))
-+ {
-+ dbus_message_unref (reply);
-+ return NULL;
-+ }
-+ else
-+ return reply;
-+}
-+
-+/**
-+ * Blocks until the outgoing message queue is empty.
-+ *
-+ * @param connection the connection.
-+ */
-+void
-+dbus_connection_flush (DBusConnection *connection)
-+{
-+ /* We have to specify DBUS_ITERATION_DO_READING here because
-+ * otherwise we could have two apps deadlock if they are both doing
-+ * a flush(), and the kernel buffers fill up. This could change the
-+ * dispatch status.
-+ */
-+ DBusDispatchStatus status;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+
-+ CONNECTION_LOCK (connection);
-+ while (connection->n_outgoing > 0 &&
-+ _dbus_connection_get_is_connected_unlocked (connection))
-+ {
-+ _dbus_verbose ("doing iteration in %s\n", _DBUS_FUNCTION_NAME);
-+ HAVE_LOCK_CHECK (connection);
-+ _dbus_connection_do_iteration_unlocked (connection,
-+ DBUS_ITERATION_DO_READING |
-+ DBUS_ITERATION_DO_WRITING |
-+ DBUS_ITERATION_BLOCK,
-+ -1);
-+ }
-+
-+ HAVE_LOCK_CHECK (connection);
-+ _dbus_verbose ("%s middle\n", _DBUS_FUNCTION_NAME);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ HAVE_LOCK_CHECK (connection);
-+ /* Unlocks and calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+
-+ _dbus_verbose ("%s end\n", _DBUS_FUNCTION_NAME);
-+}
-+
-+/**
-+ * This function is intended for use with applications that don't want
-+ * to write a main loop and deal with #DBusWatch and #DBusTimeout. An
-+ * example usage would be:
-+ *
-+ * @code
-+ * while (dbus_connection_read_write_dispatch (connection, -1))
-+ * ; // empty loop body
-+ * @endcode
-+ *
-+ * In this usage you would normally have set up a filter function to look
-+ * at each message as it is dispatched. The loop terminates when the last
-+ * message from the connection (the disconnected signal) is processed.
-+ *
-+ * If there are messages to dispatch and the dispatch flag is set, this
-+ * function will dbus_connection_dispatch() once, and return. If there are no
-+ * messages to dispatch, this function will block until it can read or write,
-+ * then read or write, then return.
-+ *
-+ * The way to think of this function is that it either makes some sort
-+ * of progress, or it blocks.
-+ *
-+ * The return value indicates whether the disconnect message has been
-+ * processed, NOT whether the connection is connected. This is
-+ * important because even after disconnecting, you want to process any
-+ * messages you received prior to the disconnect.
-+ *
-+ * @param connection the connection
-+ * @param timeout_milliseconds max time to block or -1 for infinite
-+ * @param dispatch dispatch new messages or leave them on the incoming queue
-+ * @returns #TRUE if the disconnect message has not been processed
-+ */
-+dbus_bool_t
-+_dbus_connection_read_write_dispatch (DBusConnection *connection,
-+ int timeout_milliseconds,
-+ dbus_bool_t dispatch)
-+{
-+ DBusDispatchStatus dstatus;
-+ dbus_bool_t dispatched_disconnected;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (timeout_milliseconds >= 0 || timeout_milliseconds == -1, FALSE);
-+ dstatus = dbus_connection_get_dispatch_status (connection);
-+
-+ if (dispatch && dstatus == DBUS_DISPATCH_DATA_REMAINS)
-+ {
-+ _dbus_verbose ("doing dispatch in %s\n", _DBUS_FUNCTION_NAME);
-+ dbus_connection_dispatch (connection);
-+ CONNECTION_LOCK (connection);
-+ }
-+ else if (dstatus == DBUS_DISPATCH_NEED_MEMORY)
-+ {
-+ _dbus_verbose ("pausing for memory in %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_memory_pause_based_on_timeout (timeout_milliseconds);
-+ CONNECTION_LOCK (connection);
-+ }
-+ else
-+ {
-+ CONNECTION_LOCK (connection);
-+ if (_dbus_connection_get_is_connected_unlocked (connection))
-+ {
-+ _dbus_verbose ("doing iteration in %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_do_iteration_unlocked (connection,
-+ DBUS_ITERATION_DO_READING |
-+ DBUS_ITERATION_DO_WRITING |
-+ DBUS_ITERATION_BLOCK,
-+ timeout_milliseconds);
-+ }
-+ }
-+
-+ HAVE_LOCK_CHECK (connection);
-+ dispatched_disconnected = connection->n_incoming == 0 &&
-+ connection->disconnect_message_link == NULL;
-+ CONNECTION_UNLOCK (connection);
-+ return !dispatched_disconnected; /* TRUE if we have not processed disconnected */
-+}
-+
-+
-+/**
-+ * This function is intended for use with applications that don't want
-+ * to write a main loop and deal with #DBusWatch and #DBusTimeout. An
-+ * example usage would be:
-+ *
-+ * @code
-+ * while (dbus_connection_read_write_dispatch (connection, -1))
-+ * ; // empty loop body
-+ * @endcode
-+ *
-+ * In this usage you would normally have set up a filter function to look
-+ * at each message as it is dispatched. The loop terminates when the last
-+ * message from the connection (the disconnected signal) is processed.
-+ *
-+ * If there are messages to dispatch, this function will
-+ * dbus_connection_dispatch() once, and return. If there are no
-+ * messages to dispatch, this function will block until it can read or
-+ * write, then read or write, then return.
-+ *
-+ * The way to think of this function is that it either makes some sort
-+ * of progress, or it blocks.
-+ *
-+ * The return value indicates whether the disconnect message has been
-+ * processed, NOT whether the connection is connected. This is
-+ * important because even after disconnecting, you want to process any
-+ * messages you received prior to the disconnect.
-+ *
-+ * @param connection the connection
-+ * @param timeout_milliseconds max time to block or -1 for infinite
-+ * @returns #TRUE if the disconnect message has not been processed
-+ */
-+dbus_bool_t
-+dbus_connection_read_write_dispatch (DBusConnection *connection,
-+ int timeout_milliseconds)
-+{
-+ return _dbus_connection_read_write_dispatch(connection, timeout_milliseconds, TRUE);
-+}
-+
-+/**
-+ * This function is intended for use with applications that don't want to
-+ * write a main loop and deal with #DBusWatch and #DBusTimeout.
-+ *
-+ * If there are no messages to dispatch, this function will block until it can
-+ * read or write, then read or write, then return.
-+ *
-+ * The return value indicates whether the disconnect message has been
-+ * processed, NOT whether the connection is connected. This is important
-+ * because even after disconnecting, you want to process any messages you
-+ * received prior to the disconnect.
-+ *
-+ * @param connection the connection
-+ * @param timeout_milliseconds max time to block or -1 for infinite
-+ * @returns #TRUE if the disconnect message has not been processed
-+ */
-+dbus_bool_t
-+dbus_connection_read_write (DBusConnection *connection,
-+ int timeout_milliseconds)
-+{
-+ return _dbus_connection_read_write_dispatch(connection, timeout_milliseconds, FALSE);
-+}
-+
-+/**
-+ * Returns the first-received message from the incoming message queue,
-+ * leaving it in the queue. If the queue is empty, returns #NULL.
-+ *
-+ * The caller does not own a reference to the returned message, and
-+ * must either return it using dbus_connection_return_message() or
-+ * keep it after calling dbus_connection_steal_borrowed_message(). No
-+ * one can get at the message while its borrowed, so return it as
-+ * quickly as possible and don't keep a reference to it after
-+ * returning it. If you need to keep the message, make a copy of it.
-+ *
-+ * dbus_connection_dispatch() will block if called while a borrowed
-+ * message is outstanding; only one piece of code can be playing with
-+ * the incoming queue at a time. This function will block if called
-+ * during a dbus_connection_dispatch().
-+ *
-+ * @param connection the connection.
-+ * @returns next message in the incoming queue.
-+ */
-+DBusMessage*
-+dbus_connection_borrow_message (DBusConnection *connection)
-+{
-+ DBusDispatchStatus status;
-+ DBusMessage *message;
-+
-+ _dbus_return_val_if_fail (connection != NULL, NULL);
-+
-+ _dbus_verbose ("%s start\n", _DBUS_FUNCTION_NAME);
-+
-+ /* this is called for the side effect that it queues
-+ * up any messages from the transport
-+ */
-+ status = dbus_connection_get_dispatch_status (connection);
-+ if (status != DBUS_DISPATCH_DATA_REMAINS)
-+ return NULL;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ _dbus_connection_acquire_dispatch (connection);
-+
-+ /* While a message is outstanding, the dispatch lock is held */
-+ _dbus_assert (connection->message_borrowed == NULL);
-+
-+ connection->message_borrowed = _dbus_list_get_first (&connection->incoming_messages);
-+
-+ message = connection->message_borrowed;
-+
-+ /* Note that we KEEP the dispatch lock until the message is returned */
-+ if (message == NULL)
-+ _dbus_connection_release_dispatch (connection);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ return message;
-+}
-+
-+/**
-+ * Used to return a message after peeking at it using
-+ * dbus_connection_borrow_message(). Only called if
-+ * message from dbus_connection_borrow_message() was non-#NULL.
-+ *
-+ * @param connection the connection
-+ * @param message the message from dbus_connection_borrow_message()
-+ */
-+void
-+dbus_connection_return_message (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ _dbus_return_if_fail (connection != NULL);
-+ _dbus_return_if_fail (message != NULL);
-+ _dbus_return_if_fail (message == connection->message_borrowed);
-+ _dbus_return_if_fail (connection->dispatch_acquired);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ _dbus_assert (message == connection->message_borrowed);
-+
-+ connection->message_borrowed = NULL;
-+
-+ _dbus_connection_release_dispatch (connection);
-+
-+ CONNECTION_UNLOCK (connection);
-+}
-+
-+/**
-+ * Used to keep a message after peeking at it using
-+ * dbus_connection_borrow_message(). Before using this function, see
-+ * the caveats/warnings in the documentation for
-+ * dbus_connection_pop_message().
-+ *
-+ * @param connection the connection
-+ * @param message the message from dbus_connection_borrow_message()
-+ */
-+void
-+dbus_connection_steal_borrowed_message (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ DBusMessage *pop_message;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+ _dbus_return_if_fail (message != NULL);
-+ _dbus_return_if_fail (message == connection->message_borrowed);
-+ _dbus_return_if_fail (connection->dispatch_acquired);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ _dbus_assert (message == connection->message_borrowed);
-+
-+ pop_message = _dbus_list_pop_first (&connection->incoming_messages);
-+ _dbus_assert (message == pop_message);
-+
-+ connection->n_incoming -= 1;
-+
-+ _dbus_verbose ("Incoming message %p stolen from queue, %d incoming\n",
-+ message, connection->n_incoming);
-+
-+ connection->message_borrowed = NULL;
-+
-+ _dbus_connection_release_dispatch (connection);
-+
-+ CONNECTION_UNLOCK (connection);
-+}
-+
-+/* See dbus_connection_pop_message, but requires the caller to own
-+ * the lock before calling. May drop the lock while running.
-+ */
-+static DBusList*
-+_dbus_connection_pop_message_link_unlocked (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_assert (connection->message_borrowed == NULL);
-+
-+ if (connection->n_incoming > 0)
-+ {
-+ DBusList *link;
-+
-+ link = _dbus_list_pop_first_link (&connection->incoming_messages);
-+ connection->n_incoming -= 1;
-+
-+ _dbus_verbose ("Message %p (%d %s %s %s '%s') removed from incoming queue %p, %d incoming\n",
-+ link->data,
-+ dbus_message_get_type (link->data),
-+ dbus_message_get_path (link->data) ?
-+ dbus_message_get_path (link->data) :
-+ "no path",
-+ dbus_message_get_interface (link->data) ?
-+ dbus_message_get_interface (link->data) :
-+ "no interface",
-+ dbus_message_get_member (link->data) ?
-+ dbus_message_get_member (link->data) :
-+ "no member",
-+ dbus_message_get_signature (link->data),
-+ connection, connection->n_incoming);
-+
-+ return link;
-+ }
-+ else
-+ return NULL;
-+}
-+
-+/* See dbus_connection_pop_message, but requires the caller to own
-+ * the lock before calling. May drop the lock while running.
-+ */
-+static DBusMessage*
-+_dbus_connection_pop_message_unlocked (DBusConnection *connection)
-+{
-+ DBusList *link;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ link = _dbus_connection_pop_message_link_unlocked (connection);
-+
-+ if (link != NULL)
-+ {
-+ DBusMessage *message;
-+
-+ message = link->data;
-+
-+ _dbus_list_free_link (link);
-+
-+ return message;
-+ }
-+ else
-+ return NULL;
-+}
-+
-+static void
-+_dbus_connection_putback_message_link_unlocked (DBusConnection *connection,
-+ DBusList *message_link)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_assert (message_link != NULL);
-+ /* You can't borrow a message while a link is outstanding */
-+ _dbus_assert (connection->message_borrowed == NULL);
-+ /* We had to have the dispatch lock across the pop/putback */
-+ _dbus_assert (connection->dispatch_acquired);
-+
-+ _dbus_list_prepend_link (&connection->incoming_messages,
-+ message_link);
-+ connection->n_incoming += 1;
-+
-+ _dbus_verbose ("Message %p (%d %s %s '%s') put back into queue %p, %d incoming\n",
-+ message_link->data,
-+ dbus_message_get_type (message_link->data),
-+ dbus_message_get_interface (message_link->data) ?
-+ dbus_message_get_interface (message_link->data) :
-+ "no interface",
-+ dbus_message_get_member (message_link->data) ?
-+ dbus_message_get_member (message_link->data) :
-+ "no member",
-+ dbus_message_get_signature (message_link->data),
-+ connection, connection->n_incoming);
-+}
-+
-+/**
-+ * Returns the first-received message from the incoming message queue,
-+ * removing it from the queue. The caller owns a reference to the
-+ * returned message. If the queue is empty, returns #NULL.
-+ *
-+ * This function bypasses any message handlers that are registered,
-+ * and so using it is usually wrong. Instead, let the main loop invoke
-+ * dbus_connection_dispatch(). Popping messages manually is only
-+ * useful in very simple programs that don't share a #DBusConnection
-+ * with any libraries or other modules.
-+ *
-+ * There is a lock that covers all ways of accessing the incoming message
-+ * queue, so dbus_connection_dispatch(), dbus_connection_pop_message(),
-+ * dbus_connection_borrow_message(), etc. will all block while one of the others
-+ * in the group is running.
-+ *
-+ * @param connection the connection.
-+ * @returns next message in the incoming queue.
-+ */
-+DBusMessage*
-+dbus_connection_pop_message (DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ DBusDispatchStatus status;
-+
-+ _dbus_verbose ("%s start\n", _DBUS_FUNCTION_NAME);
-+
-+ /* this is called for the side effect that it queues
-+ * up any messages from the transport
-+ */
-+ status = dbus_connection_get_dispatch_status (connection);
-+ if (status != DBUS_DISPATCH_DATA_REMAINS)
-+ return NULL;
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_connection_acquire_dispatch (connection);
-+ HAVE_LOCK_CHECK (connection);
-+
-+ message = _dbus_connection_pop_message_unlocked (connection);
-+
-+ _dbus_verbose ("Returning popped message %p\n", message);
-+
-+ _dbus_connection_release_dispatch (connection);
-+ CONNECTION_UNLOCK (connection);
-+
-+ return message;
-+}
-+
-+/**
-+ * Acquire the dispatcher. This is a separate lock so the main
-+ * connection lock can be dropped to call out to application dispatch
-+ * handlers.
-+ *
-+ * @param connection the connection.
-+ */
-+static void
-+_dbus_connection_acquire_dispatch (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_connection_ref_unlocked (connection);
-+ CONNECTION_UNLOCK (connection);
-+
-+ _dbus_verbose ("%s locking dispatch_mutex\n", _DBUS_FUNCTION_NAME);
-+ _dbus_mutex_lock (connection->dispatch_mutex);
-+
-+ while (connection->dispatch_acquired)
-+ {
-+ _dbus_verbose ("%s waiting for dispatch to be acquirable\n", _DBUS_FUNCTION_NAME);
-+ _dbus_condvar_wait (connection->dispatch_cond, connection->dispatch_mutex);
-+ }
-+
-+ _dbus_assert (!connection->dispatch_acquired);
-+
-+ connection->dispatch_acquired = TRUE;
-+
-+ _dbus_verbose ("%s unlocking dispatch_mutex\n", _DBUS_FUNCTION_NAME);
-+ _dbus_mutex_unlock (connection->dispatch_mutex);
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_connection_unref_unlocked (connection);
-+}
-+
-+/**
-+ * Release the dispatcher when you're done with it. Only call
-+ * after you've acquired the dispatcher. Wakes up at most one
-+ * thread currently waiting to acquire the dispatcher.
-+ *
-+ * @param connection the connection.
-+ */
-+static void
-+_dbus_connection_release_dispatch (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_verbose ("%s locking dispatch_mutex\n", _DBUS_FUNCTION_NAME);
-+ _dbus_mutex_lock (connection->dispatch_mutex);
-+
-+ _dbus_assert (connection->dispatch_acquired);
-+
-+ connection->dispatch_acquired = FALSE;
-+ _dbus_condvar_wake_one (connection->dispatch_cond);
-+
-+ _dbus_verbose ("%s unlocking dispatch_mutex\n", _DBUS_FUNCTION_NAME);
-+ _dbus_mutex_unlock (connection->dispatch_mutex);
-+}
-+
-+static void
-+_dbus_connection_failed_pop (DBusConnection *connection,
-+ DBusList *message_link)
-+{
-+ _dbus_list_prepend_link (&connection->incoming_messages,
-+ message_link);
-+ connection->n_incoming += 1;
-+}
-+
-+static DBusDispatchStatus
-+_dbus_connection_get_dispatch_status_unlocked (DBusConnection *connection)
-+{
-+ HAVE_LOCK_CHECK (connection);
-+
-+ if (connection->n_incoming > 0)
-+ return DBUS_DISPATCH_DATA_REMAINS;
-+ else if (!_dbus_transport_queue_messages (connection->transport))
-+ return DBUS_DISPATCH_NEED_MEMORY;
-+ else
-+ {
-+ DBusDispatchStatus status;
-+ dbus_bool_t is_connected;
-+
-+ status = _dbus_transport_get_dispatch_status (connection->transport);
-+ is_connected = _dbus_transport_get_is_connected (connection->transport);
-+
-+ _dbus_verbose ("dispatch status = %s is_connected = %d\n",
-+ DISPATCH_STATUS_NAME (status), is_connected);
-+
-+ if (!is_connected)
-+ {
-+ if (status == DBUS_DISPATCH_COMPLETE &&
-+ connection->disconnect_message_link)
-+ {
-+ _dbus_verbose ("Sending disconnect message from %s\n",
-+ _DBUS_FUNCTION_NAME);
-+
-+ connection_forget_shared_unlocked (connection);
-+
-+ /* We haven't sent the disconnect message already,
-+ * and all real messages have been queued up.
-+ */
-+ _dbus_connection_queue_synthesized_message_link (connection,
-+ connection->disconnect_message_link);
-+ connection->disconnect_message_link = NULL;
-+
-+ status = DBUS_DISPATCH_DATA_REMAINS;
-+ }
-+
-+ /* Dump the outgoing queue, we aren't going to be able to
-+ * send it now, and we'd like accessors like
-+ * dbus_connection_get_outgoing_size() to be accurate.
-+ */
-+ if (connection->n_outgoing > 0)
-+ {
-+ DBusList *link;
-+
-+ _dbus_verbose ("Dropping %d outgoing messages since we're disconnected\n",
-+ connection->n_outgoing);
-+
-+ while ((link = _dbus_list_get_last_link (&connection->outgoing_messages)))
-+ {
-+ _dbus_connection_message_sent (connection, link->data);
-+ }
-+ }
-+ }
-+
-+ if (status != DBUS_DISPATCH_COMPLETE)
-+ return status;
-+ else if (connection->n_incoming > 0)
-+ return DBUS_DISPATCH_DATA_REMAINS;
-+ else
-+ return DBUS_DISPATCH_COMPLETE;
-+ }
-+}
-+
-+static void
-+_dbus_connection_update_dispatch_status_and_unlock (DBusConnection *connection,
-+ DBusDispatchStatus new_status)
-+{
-+ dbus_bool_t changed;
-+ DBusDispatchStatusFunction function;
-+ void *data;
-+
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_connection_ref_unlocked (connection);
-+
-+ changed = new_status != connection->last_dispatch_status;
-+
-+ connection->last_dispatch_status = new_status;
-+
-+ function = connection->dispatch_status_function;
-+ data = connection->dispatch_status_data;
-+
-+ /* We drop the lock */
-+ CONNECTION_UNLOCK (connection);
-+
-+ if (changed && function)
-+ {
-+ _dbus_verbose ("Notifying of change to dispatch status of %p now %d (%s)\n",
-+ connection, new_status,
-+ DISPATCH_STATUS_NAME (new_status));
-+ (* function) (connection, new_status, data);
-+ }
-+
-+ dbus_connection_unref (connection);
-+}
-+
-+/**
-+ * Gets the current state (what we would currently return
-+ * from dbus_connection_dispatch()) but doesn't actually
-+ * dispatch any messages.
-+ *
-+ * @param connection the connection.
-+ * @returns current dispatch status
-+ */
-+DBusDispatchStatus
-+dbus_connection_get_dispatch_status (DBusConnection *connection)
-+{
-+ DBusDispatchStatus status;
-+
-+ _dbus_return_val_if_fail (connection != NULL, DBUS_DISPATCH_COMPLETE);
-+
-+ _dbus_verbose ("%s start\n", _DBUS_FUNCTION_NAME);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ return status;
-+}
-+
-+/**
-+* Filter funtion for handling the Peer standard interface
-+**/
-+static DBusHandlerResult
-+_dbus_connection_peer_filter_unlocked_no_update (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ if (dbus_message_is_method_call (message,
-+ DBUS_INTERFACE_PEER,
-+ "Ping"))
-+ {
-+ DBusMessage *ret;
-+ dbus_bool_t sent;
-+
-+ ret = dbus_message_new_method_return (message);
-+ if (ret == NULL)
-+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
-+
-+ sent = _dbus_connection_send_unlocked_no_update (connection, ret, NULL);
-+
-+ dbus_message_unref (ret);
-+
-+ if (!sent)
-+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
-+
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+/**
-+* Processes all builtin filter functions
-+*
-+* If the spec specifies a standard interface
-+* they should be processed from this method
-+**/
-+static DBusHandlerResult
-+_dbus_connection_run_builtin_filters_unlocked_no_update (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ /* We just run one filter for now but have the option to run more
-+ if the spec calls for it in the future */
-+
-+ return _dbus_connection_peer_filter_unlocked_no_update (connection, message);
-+}
-+
-+/**
-+ * Processes data buffered while handling watches, queueing zero or
-+ * more incoming messages. Then pops the first-received message from
-+ * the current incoming message queue, runs any handlers for it, and
-+ * unrefs the message. Returns a status indicating whether messages/data
-+ * remain, more memory is needed, or all data has been processed.
-+ *
-+ * Even if the dispatch status is #DBUS_DISPATCH_DATA_REMAINS,
-+ * does not necessarily dispatch a message, as the data may
-+ * be part of authentication or the like.
-+ *
-+ * @todo some FIXME in here about handling DBUS_HANDLER_RESULT_NEED_MEMORY
-+ *
-+ * @todo FIXME what if we call out to application code to handle a
-+ * message, holding the dispatch lock, and the application code runs
-+ * the main loop and dispatches again? Probably deadlocks at the
-+ * moment. Maybe we want a dispatch status of DBUS_DISPATCH_IN_PROGRESS,
-+ * and then the GSource etc. could handle the situation? Right now
-+ * our GSource is NO_RECURSE
-+ *
-+ * @param connection the connection
-+ * @returns dispatch status
-+ */
-+DBusDispatchStatus
-+dbus_connection_dispatch (DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ DBusList *link, *filter_list_copy, *message_link;
-+ DBusHandlerResult result;
-+ DBusPendingCall *pending;
-+ dbus_int32_t reply_serial;
-+ DBusDispatchStatus status;
-+
-+ _dbus_return_val_if_fail (connection != NULL, DBUS_DISPATCH_COMPLETE);
-+
-+ _dbus_verbose ("%s\n", _DBUS_FUNCTION_NAME);
-+
-+ CONNECTION_LOCK (connection);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+ if (status != DBUS_DISPATCH_DATA_REMAINS)
-+ {
-+ /* unlocks and calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+ return status;
-+ }
-+
-+ /* We need to ref the connection since the callback could potentially
-+ * drop the last ref to it
-+ */
-+ _dbus_connection_ref_unlocked (connection);
-+
-+ _dbus_connection_acquire_dispatch (connection);
-+ HAVE_LOCK_CHECK (connection);
-+
-+ message_link = _dbus_connection_pop_message_link_unlocked (connection);
-+ if (message_link == NULL)
-+ {
-+ /* another thread dispatched our stuff */
-+
-+ _dbus_verbose ("another thread dispatched message (during acquire_dispatch above)\n");
-+
-+ _dbus_connection_release_dispatch (connection);
-+
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+
-+ dbus_connection_unref (connection);
-+
-+ return status;
-+ }
-+
-+ message = message_link->data;
-+
-+ _dbus_verbose (" dispatching message %p (%d %s %s '%s')\n",
-+ message,
-+ dbus_message_get_type (message),
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) :
-+ "no interface",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) :
-+ "no member",
-+ dbus_message_get_signature (message));
-+
-+ result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+
-+ /* Pending call handling must be first, because if you do
-+ * dbus_connection_send_with_reply_and_block() or
-+ * dbus_pending_call_block() then no handlers/filters will be run on
-+ * the reply. We want consistent semantics in the case where we
-+ * dbus_connection_dispatch() the reply.
-+ */
-+
-+ reply_serial = dbus_message_get_reply_serial (message);
-+ pending = _dbus_hash_table_lookup_int (connection->pending_replies,
-+ reply_serial);
-+ if (pending)
-+ {
-+ _dbus_verbose ("Dispatching a pending reply\n");
-+ _dbus_pending_call_complete_and_unlock (pending, message);
-+ pending = NULL; /* it's probably unref'd */
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_verbose ("pending call completed in dispatch\n");
-+ result = DBUS_HANDLER_RESULT_HANDLED;
-+ goto out;
-+ }
-+
-+ result = _dbus_connection_run_builtin_filters_unlocked_no_update (connection, message);
-+ if (result != DBUS_HANDLER_RESULT_NOT_YET_HANDLED)
-+ goto out;
-+
-+ if (!_dbus_list_copy (&connection->filter_list, &filter_list_copy))
-+ {
-+ _dbus_connection_release_dispatch (connection);
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_connection_failed_pop (connection, message_link);
-+
-+ /* unlocks and calls user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection,
-+ DBUS_DISPATCH_NEED_MEMORY);
-+
-+ if (pending)
-+ dbus_pending_call_unref (pending);
-+ dbus_connection_unref (connection);
-+
-+ return DBUS_DISPATCH_NEED_MEMORY;
-+ }
-+
-+ _dbus_list_foreach (&filter_list_copy,
-+ (DBusForeachFunction)_dbus_message_filter_ref,
-+ NULL);
-+
-+ /* We're still protected from dispatch() reentrancy here
-+ * since we acquired the dispatcher
-+ */
-+ CONNECTION_UNLOCK (connection);
-+
-+ link = _dbus_list_get_first_link (&filter_list_copy);
-+ while (link != NULL)
-+ {
-+ DBusMessageFilter *filter = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&filter_list_copy, link);
-+
-+ _dbus_verbose (" running filter on message %p\n", message);
-+ result = (* filter->function) (connection, message, filter->user_data);
-+
-+ if (result != DBUS_HANDLER_RESULT_NOT_YET_HANDLED)
-+ break;
-+
-+ link = next;
-+ }
-+
-+ _dbus_list_foreach (&filter_list_copy,
-+ (DBusForeachFunction)_dbus_message_filter_unref,
-+ NULL);
-+ _dbus_list_clear (&filter_list_copy);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ if (result == DBUS_HANDLER_RESULT_NEED_MEMORY)
-+ {
-+ _dbus_verbose ("No memory in %s\n", _DBUS_FUNCTION_NAME);
-+ goto out;
-+ }
-+ else if (result == DBUS_HANDLER_RESULT_HANDLED)
-+ {
-+ _dbus_verbose ("filter handled message in dispatch\n");
-+ goto out;
-+ }
-+
-+ /* We're still protected from dispatch() reentrancy here
-+ * since we acquired the dispatcher
-+ */
-+ _dbus_verbose (" running object path dispatch on message %p (%d %s %s '%s')\n",
-+ message,
-+ dbus_message_get_type (message),
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) :
-+ "no interface",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) :
-+ "no member",
-+ dbus_message_get_signature (message));
-+
-+ HAVE_LOCK_CHECK (connection);
-+ result = _dbus_object_tree_dispatch_and_unlock (connection->objects,
-+ message);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ if (result != DBUS_HANDLER_RESULT_NOT_YET_HANDLED)
-+ {
-+ _dbus_verbose ("object tree handled message in dispatch\n");
-+ goto out;
-+ }
-+
-+ if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_CALL)
-+ {
-+ DBusMessage *reply;
-+ DBusString str;
-+ DBusPreallocatedSend *preallocated;
-+
-+ _dbus_verbose (" sending error %s\n",
-+ DBUS_ERROR_UNKNOWN_METHOD);
-+
-+ if (!_dbus_string_init (&str))
-+ {
-+ result = DBUS_HANDLER_RESULT_NEED_MEMORY;
-+ _dbus_verbose ("no memory for error string in dispatch\n");
-+ goto out;
-+ }
-+
-+ if (!_dbus_string_append_printf (&str,
-+ "Method \"%s\" with signature \"%s\" on interface \"%s\" doesn't exist\n",
-+ dbus_message_get_member (message),
-+ dbus_message_get_signature (message),
-+ dbus_message_get_interface (message)))
-+ {
-+ _dbus_string_free (&str);
-+ result = DBUS_HANDLER_RESULT_NEED_MEMORY;
-+ _dbus_verbose ("no memory for error string in dispatch\n");
-+ goto out;
-+ }
-+
-+ reply = dbus_message_new_error (message,
-+ DBUS_ERROR_UNKNOWN_METHOD,
-+ _dbus_string_get_const_data (&str));
-+ _dbus_string_free (&str);
-+
-+ if (reply == NULL)
-+ {
-+ result = DBUS_HANDLER_RESULT_NEED_MEMORY;
-+ _dbus_verbose ("no memory for error reply in dispatch\n");
-+ goto out;
-+ }
-+
-+ preallocated = _dbus_connection_preallocate_send_unlocked (connection);
-+
-+ if (preallocated == NULL)
-+ {
-+ dbus_message_unref (reply);
-+ result = DBUS_HANDLER_RESULT_NEED_MEMORY;
-+ _dbus_verbose ("no memory for error send in dispatch\n");
-+ goto out;
-+ }
-+
-+ _dbus_connection_send_preallocated_unlocked_no_update (connection, preallocated,
-+ reply, NULL);
-+
-+ dbus_message_unref (reply);
-+
-+ result = DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+ _dbus_verbose (" done dispatching %p (%d %s %s '%s') on connection %p\n", message,
-+ dbus_message_get_type (message),
-+ dbus_message_get_interface (message) ?
-+ dbus_message_get_interface (message) :
-+ "no interface",
-+ dbus_message_get_member (message) ?
-+ dbus_message_get_member (message) :
-+ "no member",
-+ dbus_message_get_signature (message),
-+ connection);
-+
-+ out:
-+ if (result == DBUS_HANDLER_RESULT_NEED_MEMORY)
-+ {
-+ _dbus_verbose ("out of memory in %s\n", _DBUS_FUNCTION_NAME);
-+
-+ /* Put message back, and we'll start over.
-+ * Yes this means handlers must be idempotent if they
-+ * don't return HANDLED; c'est la vie.
-+ */
-+ _dbus_connection_putback_message_link_unlocked (connection,
-+ message_link);
-+ }
-+ else
-+ {
-+ _dbus_verbose (" ... done dispatching in %s\n", _DBUS_FUNCTION_NAME);
-+
-+ if (connection->exit_on_disconnect &&
-+ dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ {
-+ _dbus_verbose ("Exiting on Disconnected signal\n");
-+ CONNECTION_UNLOCK (connection);
-+ _dbus_exit (1);
-+ _dbus_assert_not_reached ("Call to exit() returned");
-+ }
-+
-+ _dbus_list_free_link (message_link);
-+ dbus_message_unref (message); /* don't want the message to count in max message limits
-+ * in computing dispatch status below
-+ */
-+ }
-+
-+ _dbus_connection_release_dispatch (connection);
-+ HAVE_LOCK_CHECK (connection);
-+
-+ _dbus_verbose ("%s before final status update\n", _DBUS_FUNCTION_NAME);
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* unlocks and calls user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+
-+ dbus_connection_unref (connection);
-+
-+ return status;
-+}
-+
-+/**
-+ * Sets the watch functions for the connection. These functions are
-+ * responsible for making the application's main loop aware of file
-+ * descriptors that need to be monitored for events, using select() or
-+ * poll(). When using Qt, typically the DBusAddWatchFunction would
-+ * create a QSocketNotifier. When using GLib, the DBusAddWatchFunction
-+ * could call g_io_add_watch(), or could be used as part of a more
-+ * elaborate GSource. Note that when a watch is added, it may
-+ * not be enabled.
-+ *
-+ * The DBusWatchToggledFunction notifies the application that the
-+ * watch has been enabled or disabled. Call dbus_watch_get_enabled()
-+ * to check this. A disabled watch should have no effect, and enabled
-+ * watch should be added to the main loop. This feature is used
-+ * instead of simply adding/removing the watch because
-+ * enabling/disabling can be done without memory allocation. The
-+ * toggled function may be NULL if a main loop re-queries
-+ * dbus_watch_get_enabled() every time anyway.
-+ *
-+ * The DBusWatch can be queried for the file descriptor to watch using
-+ * dbus_watch_get_fd(), and for the events to watch for using
-+ * dbus_watch_get_flags(). The flags returned by
-+ * dbus_watch_get_flags() will only contain DBUS_WATCH_READABLE and
-+ * DBUS_WATCH_WRITABLE, never DBUS_WATCH_HANGUP or DBUS_WATCH_ERROR;
-+ * all watches implicitly include a watch for hangups, errors, and
-+ * other exceptional conditions.
-+ *
-+ * Once a file descriptor becomes readable or writable, or an exception
-+ * occurs, dbus_watch_handle() should be called to
-+ * notify the connection of the file descriptor's condition.
-+ *
-+ * dbus_watch_handle() cannot be called during the
-+ * DBusAddWatchFunction, as the connection will not be ready to handle
-+ * that watch yet.
-+ *
-+ * It is not allowed to reference a DBusWatch after it has been passed
-+ * to remove_function.
-+ *
-+ * If #FALSE is returned due to lack of memory, the failure may be due
-+ * to a #FALSE return from the new add_function. If so, the
-+ * add_function may have been called successfully one or more times,
-+ * but the remove_function will also have been called to remove any
-+ * successful adds. i.e. if #FALSE is returned the net result
-+ * should be that dbus_connection_set_watch_functions() has no effect,
-+ * but the add_function and remove_function may have been called.
-+ *
-+ * @todo We need to drop the lock when we call the
-+ * add/remove/toggled functions which can be a side effect
-+ * of setting the watch functions.
-+ *
-+ * @param connection the connection.
-+ * @param add_function function to begin monitoring a new descriptor.
-+ * @param remove_function function to stop monitoring a descriptor.
-+ * @param toggled_function function to notify of enable/disable
-+ * @param data data to pass to add_function and remove_function.
-+ * @param free_data_function function to be called to free the data.
-+ * @returns #FALSE on failure (no memory)
-+ */
-+dbus_bool_t
-+dbus_connection_set_watch_functions (DBusConnection *connection,
-+ DBusAddWatchFunction add_function,
-+ DBusRemoveWatchFunction remove_function,
-+ DBusWatchToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ dbus_bool_t retval;
-+ DBusWatchList *watches;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (connection->watches == NULL)
-+ {
-+ _dbus_warn ("Re-entrant call to %s is not allowed\n",
-+ _DBUS_FUNCTION_NAME);
-+ return FALSE;
-+ }
-+#endif
-+
-+ /* ref connection for slightly better reentrancy */
-+ _dbus_connection_ref_unlocked (connection);
-+
-+ /* This can call back into user code, and we need to drop the
-+ * connection lock when it does. This is kind of a lame
-+ * way to do it.
-+ */
-+ watches = connection->watches;
-+ connection->watches = NULL;
-+ CONNECTION_UNLOCK (connection);
-+
-+ retval = _dbus_watch_list_set_functions (watches,
-+ add_function, remove_function,
-+ toggled_function,
-+ data, free_data_function);
-+ CONNECTION_LOCK (connection);
-+ connection->watches = watches;
-+
-+ CONNECTION_UNLOCK (connection);
-+ /* drop our paranoid refcount */
-+ dbus_connection_unref (connection);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Sets the timeout functions for the connection. These functions are
-+ * responsible for making the application's main loop aware of timeouts.
-+ * When using Qt, typically the DBusAddTimeoutFunction would create a
-+ * QTimer. When using GLib, the DBusAddTimeoutFunction would call
-+ * g_timeout_add.
-+ *
-+ * The DBusTimeoutToggledFunction notifies the application that the
-+ * timeout has been enabled or disabled. Call
-+ * dbus_timeout_get_enabled() to check this. A disabled timeout should
-+ * have no effect, and enabled timeout should be added to the main
-+ * loop. This feature is used instead of simply adding/removing the
-+ * timeout because enabling/disabling can be done without memory
-+ * allocation. With Qt, QTimer::start() and QTimer::stop() can be used
-+ * to enable and disable. The toggled function may be NULL if a main
-+ * loop re-queries dbus_timeout_get_enabled() every time anyway.
-+ * Whenever a timeout is toggled, its interval may change.
-+ *
-+ * The DBusTimeout can be queried for the timer interval using
-+ * dbus_timeout_get_interval(). dbus_timeout_handle() should be called
-+ * repeatedly, each time the interval elapses, starting after it has
-+ * elapsed once. The timeout stops firing when it is removed with the
-+ * given remove_function. The timer interval may change whenever the
-+ * timeout is added, removed, or toggled.
-+ *
-+ * @param connection the connection.
-+ * @param add_function function to add a timeout.
-+ * @param remove_function function to remove a timeout.
-+ * @param toggled_function function to notify of enable/disable
-+ * @param data data to pass to add_function and remove_function.
-+ * @param free_data_function function to be called to free the data.
-+ * @returns #FALSE on failure (no memory)
-+ */
-+dbus_bool_t
-+dbus_connection_set_timeout_functions (DBusConnection *connection,
-+ DBusAddTimeoutFunction add_function,
-+ DBusRemoveTimeoutFunction remove_function,
-+ DBusTimeoutToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ dbus_bool_t retval;
-+ DBusTimeoutList *timeouts;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (connection->timeouts == NULL)
-+ {
-+ _dbus_warn ("Re-entrant call to %s is not allowed\n",
-+ _DBUS_FUNCTION_NAME);
-+ return FALSE;
-+ }
-+#endif
-+
-+ /* ref connection for slightly better reentrancy */
-+ _dbus_connection_ref_unlocked (connection);
-+
-+ timeouts = connection->timeouts;
-+ connection->timeouts = NULL;
-+ CONNECTION_UNLOCK (connection);
-+
-+ retval = _dbus_timeout_list_set_functions (timeouts,
-+ add_function, remove_function,
-+ toggled_function,
-+ data, free_data_function);
-+ CONNECTION_LOCK (connection);
-+ connection->timeouts = timeouts;
-+
-+ CONNECTION_UNLOCK (connection);
-+ /* drop our paranoid refcount */
-+ dbus_connection_unref (connection);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Sets the mainloop wakeup function for the connection. This function is
-+ * responsible for waking up the main loop (if its sleeping) when some some
-+ * change has happened to the connection that the mainloop needs to reconsider
-+ * (e.g. a message has been queued for writing).
-+ * When using Qt, this typically results in a call to QEventLoop::wakeUp().
-+ * When using GLib, it would call g_main_context_wakeup().
-+ *
-+ *
-+ * @param connection the connection.
-+ * @param wakeup_main_function function to wake up the mainloop
-+ * @param data data to pass wakeup_main_function
-+ * @param free_data_function function to be called to free the data.
-+ */
-+void
-+dbus_connection_set_wakeup_main_function (DBusConnection *connection,
-+ DBusWakeupMainFunction wakeup_main_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ void *old_data;
-+ DBusFreeFunction old_free_data;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+
-+ CONNECTION_LOCK (connection);
-+ old_data = connection->wakeup_main_data;
-+ old_free_data = connection->free_wakeup_main_data;
-+
-+ connection->wakeup_main_function = wakeup_main_function;
-+ connection->wakeup_main_data = data;
-+ connection->free_wakeup_main_data = free_data_function;
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ /* Callback outside the lock */
-+ if (old_free_data)
-+ (*old_free_data) (old_data);
-+}
-+
-+/**
-+ * Set a function to be invoked when the dispatch status changes.
-+ * If the dispatch status is #DBUS_DISPATCH_DATA_REMAINS, then
-+ * dbus_connection_dispatch() needs to be called to process incoming
-+ * messages. However, dbus_connection_dispatch() MUST NOT BE CALLED
-+ * from inside the DBusDispatchStatusFunction. Indeed, almost
-+ * any reentrancy in this function is a bad idea. Instead,
-+ * the DBusDispatchStatusFunction should simply save an indication
-+ * that messages should be dispatched later, when the main loop
-+ * is re-entered.
-+ *
-+ * @param connection the connection
-+ * @param function function to call on dispatch status changes
-+ * @param data data for function
-+ * @param free_data_function free the function data
-+ */
-+void
-+dbus_connection_set_dispatch_status_function (DBusConnection *connection,
-+ DBusDispatchStatusFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ void *old_data;
-+ DBusFreeFunction old_free_data;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+
-+ CONNECTION_LOCK (connection);
-+ old_data = connection->dispatch_status_data;
-+ old_free_data = connection->free_dispatch_status_data;
-+
-+ connection->dispatch_status_function = function;
-+ connection->dispatch_status_data = data;
-+ connection->free_dispatch_status_data = free_data_function;
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ /* Callback outside the lock */
-+ if (old_free_data)
-+ (*old_free_data) (old_data);
-+}
-+
-+/**
-+ * Get the UNIX file descriptor of the connection, if any. This can
-+ * be used for SELinux access control checks with getpeercon() for
-+ * example. DO NOT read or write to the file descriptor, or try to
-+ * select() on it; use DBusWatch for main loop integration. Not all
-+ * connections will have a file descriptor. So for adding descriptors
-+ * to the main loop, use dbus_watch_get_fd() and so forth.
-+ *
-+ * @param connection the connection
-+ * @param fd return location for the file descriptor.
-+ * @returns #TRUE if fd is successfully obtained.
-+ */
-+dbus_bool_t
-+dbus_connection_get_unix_fd (DBusConnection *connection,
-+ int *fd)
-+{
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (connection->transport != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ retval = _dbus_transport_get_unix_fd (connection->transport,
-+ fd);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Gets the UNIX user ID of the connection if any.
-+ * Returns #TRUE if the uid is filled in.
-+ * Always returns #FALSE on non-UNIX platforms.
-+ * Always returns #FALSE prior to authenticating the
-+ * connection.
-+ *
-+ * @param connection the connection
-+ * @param uid return location for the user ID
-+ * @returns #TRUE if uid is filled in with a valid user ID
-+ */
-+dbus_bool_t
-+dbus_connection_get_unix_user (DBusConnection *connection,
-+ unsigned long *uid)
-+{
-+ dbus_bool_t result;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (uid != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ if (!_dbus_transport_get_is_authenticated (connection->transport))
-+ result = FALSE;
-+ else
-+ result = _dbus_transport_get_unix_user (connection->transport,
-+ uid);
-+ CONNECTION_UNLOCK (connection);
-+
-+ return result;
-+}
-+
-+/**
-+ * Gets the process ID of the connection if any.
-+ * Returns #TRUE if the uid is filled in.
-+ * Always returns #FALSE prior to authenticating the
-+ * connection.
-+ *
-+ * @param connection the connection
-+ * @param pid return location for the process ID
-+ * @returns #TRUE if uid is filled in with a valid process ID
-+ */
-+dbus_bool_t
-+dbus_connection_get_unix_process_id (DBusConnection *connection,
-+ unsigned long *pid)
-+{
-+ dbus_bool_t result;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (pid != NULL, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ if (!_dbus_transport_get_is_authenticated (connection->transport))
-+ result = FALSE;
-+ else
-+ result = _dbus_transport_get_unix_process_id (connection->transport,
-+ pid);
-+ CONNECTION_UNLOCK (connection);
-+
-+ return result;
-+}
-+
-+/**
-+ * Sets a predicate function used to determine whether a given user ID
-+ * is allowed to connect. When an incoming connection has
-+ * authenticated with a particular user ID, this function is called;
-+ * if it returns #TRUE, the connection is allowed to proceed,
-+ * otherwise the connection is disconnected.
-+ *
-+ * If the function is set to #NULL (as it is by default), then
-+ * only the same UID as the server process will be allowed to
-+ * connect.
-+ *
-+ * @param connection the connection
-+ * @param function the predicate
-+ * @param data data to pass to the predicate
-+ * @param free_data_function function to free the data
-+ */
-+void
-+dbus_connection_set_unix_user_function (DBusConnection *connection,
-+ DBusAllowUnixUserFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ void *old_data = NULL;
-+ DBusFreeFunction old_free_function = NULL;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_transport_set_unix_user_function (connection->transport,
-+ function, data, free_data_function,
-+ &old_data, &old_free_function);
-+ CONNECTION_UNLOCK (connection);
-+
-+ if (old_free_function != NULL)
-+ (* old_free_function) (old_data);
-+}
-+
-+/**
-+ * Adds a message filter. Filters are handlers that are run on all
-+ * incoming messages, prior to the objects registered with
-+ * dbus_connection_register_object_path(). Filters are run in the
-+ * order that they were added. The same handler can be added as a
-+ * filter more than once, in which case it will be run more than once.
-+ * Filters added during a filter callback won't be run on the message
-+ * being processed.
-+ *
-+ * @todo we don't run filters on messages while blocking without
-+ * entering the main loop, since filters are run as part of
-+ * dbus_connection_dispatch(). This is probably a feature, as filters
-+ * could create arbitrary reentrancy. But kind of sucks if you're
-+ * trying to filter METHOD_RETURN for some reason.
-+ *
-+ * @param connection the connection
-+ * @param function function to handle messages
-+ * @param user_data user data to pass to the function
-+ * @param free_data_function function to use for freeing user data
-+ * @returns #TRUE on success, #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+dbus_connection_add_filter (DBusConnection *connection,
-+ DBusHandleMessageFunction function,
-+ void *user_data,
-+ DBusFreeFunction free_data_function)
-+{
-+ DBusMessageFilter *filter;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (function != NULL, FALSE);
-+
-+ filter = dbus_new0 (DBusMessageFilter, 1);
-+ if (filter == NULL)
-+ return FALSE;
-+
-+ filter->refcount.value = 1;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ if (!_dbus_list_append (&connection->filter_list,
-+ filter))
-+ {
-+ _dbus_message_filter_unref (filter);
-+ CONNECTION_UNLOCK (connection);
-+ return FALSE;
-+ }
-+
-+ /* Fill in filter after all memory allocated,
-+ * so we don't run the free_user_data_function
-+ * if the add_filter() fails
-+ */
-+
-+ filter->function = function;
-+ filter->user_data = user_data;
-+ filter->free_user_data_function = free_data_function;
-+
-+ CONNECTION_UNLOCK (connection);
-+ return TRUE;
-+}
-+
-+/**
-+ * Removes a previously-added message filter. It is a programming
-+ * error to call this function for a handler that has not been added
-+ * as a filter. If the given handler was added more than once, only
-+ * one instance of it will be removed (the most recently-added
-+ * instance).
-+ *
-+ * @param connection the connection
-+ * @param function the handler to remove
-+ * @param user_data user data for the handler to remove
-+ *
-+ */
-+void
-+dbus_connection_remove_filter (DBusConnection *connection,
-+ DBusHandleMessageFunction function,
-+ void *user_data)
-+{
-+ DBusList *link;
-+ DBusMessageFilter *filter;
-+
-+ _dbus_return_if_fail (connection != NULL);
-+ _dbus_return_if_fail (function != NULL);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ filter = NULL;
-+
-+ link = _dbus_list_get_last_link (&connection->filter_list);
-+ while (link != NULL)
-+ {
-+ filter = link->data;
-+
-+ if (filter->function == function &&
-+ filter->user_data == user_data)
-+ {
-+ _dbus_list_remove_link (&connection->filter_list, link);
-+ filter->function = NULL;
-+
-+ break;
-+ }
-+
-+ link = _dbus_list_get_prev_link (&connection->filter_list, link);
-+ }
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (filter == NULL)
-+ {
-+ _dbus_warn ("Attempt to remove filter function %p user data %p, but no such filter has been added\n",
-+ function, user_data);
-+ return;
-+ }
-+#endif
-+
-+ /* Call application code */
-+ if (filter->free_user_data_function)
-+ (* filter->free_user_data_function) (filter->user_data);
-+
-+ filter->free_user_data_function = NULL;
-+ filter->user_data = NULL;
-+
-+ _dbus_message_filter_unref (filter);
-+}
-+
-+/**
-+ * Registers a handler for a given path in the object hierarchy.
-+ * The given vtable handles messages sent to exactly the given path.
-+ *
-+ *
-+ * @param connection the connection
-+ * @param path a '/' delimited string of path elements
-+ * @param vtable the virtual table
-+ * @param user_data data to pass to functions in the vtable
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_connection_register_object_path (DBusConnection *connection,
-+ const char *path,
-+ const DBusObjectPathVTable *vtable,
-+ void *user_data)
-+{
-+ char **decomposed_path;
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (path != NULL, FALSE);
-+ _dbus_return_val_if_fail (path[0] == '/', FALSE);
-+ _dbus_return_val_if_fail (vtable != NULL, FALSE);
-+
-+ if (!_dbus_decompose_path (path, strlen (path), &decomposed_path, NULL))
-+ return FALSE;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ retval = _dbus_object_tree_register (connection->objects,
-+ FALSE,
-+ (const char **) decomposed_path, vtable,
-+ user_data);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ dbus_free_string_array (decomposed_path);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Registers a fallback handler for a given subsection of the object
-+ * hierarchy. The given vtable handles messages at or below the given
-+ * path. You can use this to establish a default message handling
-+ * policy for a whole "subdirectory."
-+ *
-+ * @param connection the connection
-+ * @param path a '/' delimited string of path elements
-+ * @param vtable the virtual table
-+ * @param user_data data to pass to functions in the vtable
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_connection_register_fallback (DBusConnection *connection,
-+ const char *path,
-+ const DBusObjectPathVTable *vtable,
-+ void *user_data)
-+{
-+ char **decomposed_path;
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (path != NULL, FALSE);
-+ _dbus_return_val_if_fail (path[0] == '/', FALSE);
-+ _dbus_return_val_if_fail (vtable != NULL, FALSE);
-+
-+ if (!_dbus_decompose_path (path, strlen (path), &decomposed_path, NULL))
-+ return FALSE;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ retval = _dbus_object_tree_register (connection->objects,
-+ TRUE,
-+ (const char **) decomposed_path, vtable,
-+ user_data);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ dbus_free_string_array (decomposed_path);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Unregisters the handler registered with exactly the given path.
-+ * It's a bug to call this function for a path that isn't registered.
-+ * Can unregister both fallback paths and object paths.
-+ *
-+ * @param connection the connection
-+ * @param path a '/' delimited string of path elements
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_connection_unregister_object_path (DBusConnection *connection,
-+ const char *path)
-+{
-+ char **decomposed_path;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (path != NULL, FALSE);
-+ _dbus_return_val_if_fail (path[0] == '/', FALSE);
-+
-+ if (!_dbus_decompose_path (path, strlen (path), &decomposed_path, NULL))
-+ return FALSE;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ _dbus_object_tree_unregister_and_unlock (connection->objects, (const char **) decomposed_path);
-+
-+ dbus_free_string_array (decomposed_path);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets the user data passed to dbus_connection_register_object_path()
-+ * or dbus_connection_register_fallback(). If nothing was registered
-+ * at this path, the data is filled in with #NULL.
-+ *
-+ * @param connection the connection
-+ * @param path the path you registered with
-+ * @param data_p location to store the user data, or #NULL
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_connection_get_object_path_data (DBusConnection *connection,
-+ const char *path,
-+ void **data_p)
-+{
-+ char **decomposed_path;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (path != NULL, FALSE);
-+ _dbus_return_val_if_fail (data_p != NULL, FALSE);
-+
-+ *data_p = NULL;
-+
-+ if (!_dbus_decompose_path (path, strlen (path), &decomposed_path, NULL))
-+ return FALSE;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ *data_p = _dbus_object_tree_get_user_data_unlocked (connection->objects, (const char**) decomposed_path);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ dbus_free_string_array (decomposed_path);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Lists the registered fallback handlers and object path handlers at
-+ * the given parent_path. The returned array should be freed with
-+ * dbus_free_string_array().
-+ *
-+ * @param connection the connection
-+ * @param parent_path the path to list the child handlers of
-+ * @param child_entries returns #NULL-terminated array of children
-+ * @returns #FALSE if no memory to allocate the child entries
-+ */
-+dbus_bool_t
-+dbus_connection_list_registered (DBusConnection *connection,
-+ const char *parent_path,
-+ char ***child_entries)
-+{
-+ char **decomposed_path;
-+ dbus_bool_t retval;
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (parent_path != NULL, FALSE);
-+ _dbus_return_val_if_fail (parent_path[0] == '/', FALSE);
-+ _dbus_return_val_if_fail (child_entries != NULL, FALSE);
-+
-+ if (!_dbus_decompose_path (parent_path, strlen (parent_path), &decomposed_path, NULL))
-+ return FALSE;
-+
-+ CONNECTION_LOCK (connection);
-+
-+ retval = _dbus_object_tree_list_registered_and_unlock (connection->objects,
-+ (const char **) decomposed_path,
-+ child_entries);
-+ dbus_free_string_array (decomposed_path);
-+
-+ return retval;
-+}
-+
-+static DBusDataSlotAllocator slot_allocator;
-+_DBUS_DEFINE_GLOBAL_LOCK (connection_slots);
-+
-+/**
-+ * Allocates an integer ID to be used for storing application-specific
-+ * data on any DBusConnection. The allocated ID may then be used
-+ * with dbus_connection_set_data() and dbus_connection_get_data().
-+ * The passed-in slot must be initialized to -1, and is filled in
-+ * with the slot ID. If the passed-in slot is not -1, it's assumed
-+ * to be already allocated, and its refcount is incremented.
-+ *
-+ * The allocated slot is global, i.e. all DBusConnection objects will
-+ * have a slot with the given integer ID reserved.
-+ *
-+ * @param slot_p address of a global variable storing the slot
-+ * @returns #FALSE on failure (no memory)
-+ */
-+dbus_bool_t
-+dbus_connection_allocate_data_slot (dbus_int32_t *slot_p)
-+{
-+ return _dbus_data_slot_allocator_alloc (&slot_allocator,
-+ _DBUS_LOCK_NAME (connection_slots),
-+ slot_p);
-+}
-+
-+/**
-+ * Deallocates a global ID for connection data slots.
-+ * dbus_connection_get_data() and dbus_connection_set_data() may no
-+ * longer be used with this slot. Existing data stored on existing
-+ * DBusConnection objects will be freed when the connection is
-+ * finalized, but may not be retrieved (and may only be replaced if
-+ * someone else reallocates the slot). When the refcount on the
-+ * passed-in slot reaches 0, it is set to -1.
-+ *
-+ * @param slot_p address storing the slot to deallocate
-+ */
-+void
-+dbus_connection_free_data_slot (dbus_int32_t *slot_p)
-+{
-+ _dbus_return_if_fail (*slot_p >= 0);
-+
-+ _dbus_data_slot_allocator_free (&slot_allocator, slot_p);
-+}
-+
-+/**
-+ * Stores a pointer on a DBusConnection, along
-+ * with an optional function to be used for freeing
-+ * the data when the data is set again, or when
-+ * the connection is finalized. The slot number
-+ * must have been allocated with dbus_connection_allocate_data_slot().
-+ *
-+ * @param connection the connection
-+ * @param slot the slot number
-+ * @param data the data to store
-+ * @param free_data_func finalizer function for the data
-+ * @returns #TRUE if there was enough memory to store the data
-+ */
-+dbus_bool_t
-+dbus_connection_set_data (DBusConnection *connection,
-+ dbus_int32_t slot,
-+ void *data,
-+ DBusFreeFunction free_data_func)
-+{
-+ DBusFreeFunction old_free_func;
-+ void *old_data;
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (connection != NULL, FALSE);
-+ _dbus_return_val_if_fail (slot >= 0, FALSE);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ retval = _dbus_data_slot_list_set (&slot_allocator,
-+ &connection->slot_list,
-+ slot, data, free_data_func,
-+ &old_free_func, &old_data);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ if (retval)
-+ {
-+ /* Do the actual free outside the connection lock */
-+ if (old_free_func)
-+ (* old_free_func) (old_data);
-+ }
-+
-+ return retval;
-+}
-+
-+/**
-+ * Retrieves data previously set with dbus_connection_set_data().
-+ * The slot must still be allocated (must not have been freed).
-+ *
-+ * @param connection the connection
-+ * @param slot the slot to get data from
-+ * @returns the data, or #NULL if not found
-+ */
-+void*
-+dbus_connection_get_data (DBusConnection *connection,
-+ dbus_int32_t slot)
-+{
-+ void *res;
-+
-+ _dbus_return_val_if_fail (connection != NULL, NULL);
-+
-+ CONNECTION_LOCK (connection);
-+
-+ res = _dbus_data_slot_list_get (&slot_allocator,
-+ &connection->slot_list,
-+ slot);
-+
-+ CONNECTION_UNLOCK (connection);
-+
-+ return res;
-+}
-+
-+/**
-+ * This function sets a global flag for whether dbus_connection_new()
-+ * will set SIGPIPE behavior to SIG_IGN.
-+ *
-+ * @param will_modify_sigpipe #TRUE to allow sigpipe to be set to SIG_IGN
-+ */
-+void
-+dbus_connection_set_change_sigpipe (dbus_bool_t will_modify_sigpipe)
-+{
-+ _dbus_modify_sigpipe = will_modify_sigpipe != FALSE;
-+}
-+
-+/**
-+ * Specifies the maximum size message this connection is allowed to
-+ * receive. Larger messages will result in disconnecting the
-+ * connection.
-+ *
-+ * @param connection a #DBusConnection
-+ * @param size maximum message size the connection can receive, in bytes
-+ */
-+void
-+dbus_connection_set_max_message_size (DBusConnection *connection,
-+ long size)
-+{
-+ _dbus_return_if_fail (connection != NULL);
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_transport_set_max_message_size (connection->transport,
-+ size);
-+ CONNECTION_UNLOCK (connection);
-+}
-+
-+/**
-+ * Gets the value set by dbus_connection_set_max_message_size().
-+ *
-+ * @param connection the connection
-+ * @returns the max size of a single message
-+ */
-+long
-+dbus_connection_get_max_message_size (DBusConnection *connection)
-+{
-+ long res;
-+
-+ _dbus_return_val_if_fail (connection != NULL, 0);
-+
-+ CONNECTION_LOCK (connection);
-+ res = _dbus_transport_get_max_message_size (connection->transport);
-+ CONNECTION_UNLOCK (connection);
-+ return res;
-+}
-+
-+/**
-+ * Sets the maximum total number of bytes that can be used for all messages
-+ * received on this connection. Messages count toward the maximum until
-+ * they are finalized. When the maximum is reached, the connection will
-+ * not read more data until some messages are finalized.
-+ *
-+ * The semantics of the maximum are: if outstanding messages are
-+ * already above the maximum, additional messages will not be read.
-+ * The semantics are not: if the next message would cause us to exceed
-+ * the maximum, we don't read it. The reason is that we don't know the
-+ * size of a message until after we read it.
-+ *
-+ * Thus, the max live messages size can actually be exceeded
-+ * by up to the maximum size of a single message.
-+ *
-+ * Also, if we read say 1024 bytes off the wire in a single read(),
-+ * and that contains a half-dozen small messages, we may exceed the
-+ * size max by that amount. But this should be inconsequential.
-+ *
-+ * This does imply that we can't call read() with a buffer larger
-+ * than we're willing to exceed this limit by.
-+ *
-+ * @param connection the connection
-+ * @param size the maximum size in bytes of all outstanding messages
-+ */
-+void
-+dbus_connection_set_max_received_size (DBusConnection *connection,
-+ long size)
-+{
-+ _dbus_return_if_fail (connection != NULL);
-+
-+ CONNECTION_LOCK (connection);
-+ _dbus_transport_set_max_received_size (connection->transport,
-+ size);
-+ CONNECTION_UNLOCK (connection);
-+}
-+
-+/**
-+ * Gets the value set by dbus_connection_set_max_received_size().
-+ *
-+ * @param connection the connection
-+ * @returns the max size of all live messages
-+ */
-+long
-+dbus_connection_get_max_received_size (DBusConnection *connection)
-+{
-+ long res;
-+
-+ _dbus_return_val_if_fail (connection != NULL, 0);
-+
-+ CONNECTION_LOCK (connection);
-+ res = _dbus_transport_get_max_received_size (connection->transport);
-+ CONNECTION_UNLOCK (connection);
-+ return res;
-+}
-+
-+/**
-+ * Gets the approximate size in bytes of all messages in the outgoing
-+ * message queue. The size is approximate in that you shouldn't use
-+ * it to decide how many bytes to read off the network or anything
-+ * of that nature, as optimizations may choose to tell small white lies
-+ * to avoid performance overhead.
-+ *
-+ * @param connection the connection
-+ * @returns the number of bytes that have been queued up but not sent
-+ */
-+long
-+dbus_connection_get_outgoing_size (DBusConnection *connection)
-+{
-+ long res;
-+
-+ _dbus_return_val_if_fail (connection != NULL, 0);
-+
-+ CONNECTION_LOCK (connection);
-+ res = _dbus_counter_get_value (connection->outgoing_counter);
-+ CONNECTION_UNLOCK (connection);
-+ return res;
-+}
-+
-+/** @} */
-diff -Naur dbus-0.61.orig/dbus/dbus-connection.h dbus-0.61/dbus/dbus-connection.h
---- dbus-0.61.orig/dbus/dbus-connection.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-connection.h 2005-11-30 21:30:02.000000000 +0100
-@@ -0,0 +1,262 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-connection.h DBusConnection object
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_CONNECTION_H
-+#define DBUS_CONNECTION_H
-+
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-message.h>
-+#include <dbus/dbus-shared.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusWatch DBusWatch;
-+typedef struct DBusTimeout DBusTimeout;
-+typedef struct DBusPreallocatedSend DBusPreallocatedSend;
-+typedef struct DBusPendingCall DBusPendingCall;
-+typedef struct DBusConnection DBusConnection;
-+typedef struct DBusObjectPathVTable DBusObjectPathVTable;
-+
-+typedef enum
-+{
-+ DBUS_WATCH_READABLE = 1 << 0, /**< As in POLLIN */
-+ DBUS_WATCH_WRITABLE = 1 << 1, /**< As in POLLOUT */
-+ DBUS_WATCH_ERROR = 1 << 2, /**< As in POLLERR (can't watch for this, but
-+ * the flag can be passed to dbus_watch_handle()).
-+ */
-+ DBUS_WATCH_HANGUP = 1 << 3 /**< As in POLLHUP (can't watch for it, but
-+ * can be present in current state). */
-+} DBusWatchFlags;
-+
-+typedef enum
-+{
-+ DBUS_DISPATCH_DATA_REMAINS, /**< There is more data to potentially convert to messages. */
-+ DBUS_DISPATCH_COMPLETE, /**< All currently available data has been processed. */
-+ DBUS_DISPATCH_NEED_MEMORY /**< More memory is needed to continue. */
-+} DBusDispatchStatus;
-+
-+typedef dbus_bool_t (* DBusAddWatchFunction) (DBusWatch *watch,
-+ void *data);
-+typedef void (* DBusWatchToggledFunction) (DBusWatch *watch,
-+ void *data);
-+typedef void (* DBusRemoveWatchFunction) (DBusWatch *watch,
-+ void *data);
-+typedef dbus_bool_t (* DBusAddTimeoutFunction) (DBusTimeout *timeout,
-+ void *data);
-+typedef void (* DBusTimeoutToggledFunction) (DBusTimeout *timeout,
-+ void *data);
-+typedef void (* DBusRemoveTimeoutFunction) (DBusTimeout *timeout,
-+ void *data);
-+typedef void (* DBusDispatchStatusFunction) (DBusConnection *connection,
-+ DBusDispatchStatus new_status,
-+ void *data);
-+typedef void (* DBusWakeupMainFunction) (void *data);
-+typedef dbus_bool_t (* DBusAllowUnixUserFunction) (DBusConnection *connection,
-+ unsigned long uid,
-+ void *data);
-+
-+typedef void (* DBusPendingCallNotifyFunction) (DBusPendingCall *pending,
-+ void *user_data);
-+
-+
-+typedef DBusHandlerResult (* DBusHandleMessageFunction) (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data);
-+
-+DBusConnection* dbus_connection_open (const char *address,
-+ DBusError *error);
-+DBusConnection* dbus_connection_open_private (const char *address,
-+ DBusError *error);
-+DBusConnection* dbus_connection_ref (DBusConnection *connection);
-+void dbus_connection_unref (DBusConnection *connection);
-+void dbus_connection_close (DBusConnection *connection);
-+void dbus_connection_disconnect (DBusConnection *connection);
-+dbus_bool_t dbus_connection_get_is_connected (DBusConnection *connection);
-+dbus_bool_t dbus_connection_get_is_authenticated (DBusConnection *connection);
-+void dbus_connection_set_exit_on_disconnect (DBusConnection *connection,
-+ dbus_bool_t exit_on_disconnect);
-+void dbus_connection_flush (DBusConnection *connection);
-+dbus_bool_t dbus_connection_read_write_dispatch (DBusConnection *connection,
-+ int timeout_milliseconds);
-+dbus_bool_t dbus_connection_read_write (DBusConnection *connection,
-+ int timeout_milliseconds);
-+DBusMessage* dbus_connection_borrow_message (DBusConnection *connection);
-+void dbus_connection_return_message (DBusConnection *connection,
-+ DBusMessage *message);
-+void dbus_connection_steal_borrowed_message (DBusConnection *connection,
-+ DBusMessage *message);
-+DBusMessage* dbus_connection_pop_message (DBusConnection *connection);
-+DBusDispatchStatus dbus_connection_get_dispatch_status (DBusConnection *connection);
-+DBusDispatchStatus dbus_connection_dispatch (DBusConnection *connection);
-+dbus_bool_t dbus_connection_has_messages_to_send (DBusConnection *connection);
-+dbus_bool_t dbus_connection_send (DBusConnection *connection,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial);
-+dbus_bool_t dbus_connection_send_with_reply (DBusConnection *connection,
-+ DBusMessage *message,
-+ DBusPendingCall **pending_return,
-+ int timeout_milliseconds);
-+DBusMessage * dbus_connection_send_with_reply_and_block (DBusConnection *connection,
-+ DBusMessage *message,
-+ int timeout_milliseconds,
-+ DBusError *error);
-+dbus_bool_t dbus_connection_set_watch_functions (DBusConnection *connection,
-+ DBusAddWatchFunction add_function,
-+ DBusRemoveWatchFunction remove_function,
-+ DBusWatchToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t dbus_connection_set_timeout_functions (DBusConnection *connection,
-+ DBusAddTimeoutFunction add_function,
-+ DBusRemoveTimeoutFunction remove_function,
-+ DBusTimeoutToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+void dbus_connection_set_wakeup_main_function (DBusConnection *connection,
-+ DBusWakeupMainFunction wakeup_main_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+void dbus_connection_set_dispatch_status_function (DBusConnection *connection,
-+ DBusDispatchStatusFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t dbus_connection_get_unix_user (DBusConnection *connection,
-+ unsigned long *uid);
-+dbus_bool_t dbus_connection_get_unix_process_id (DBusConnection *connection,
-+ unsigned long *pid);
-+void dbus_connection_set_unix_user_function (DBusConnection *connection,
-+ DBusAllowUnixUserFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+
-+
-+int dbus_watch_get_fd (DBusWatch *watch);
-+unsigned int dbus_watch_get_flags (DBusWatch *watch);
-+void* dbus_watch_get_data (DBusWatch *watch);
-+void dbus_watch_set_data (DBusWatch *watch,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t dbus_watch_handle (DBusWatch *watch,
-+ unsigned int flags);
-+dbus_bool_t dbus_watch_get_enabled (DBusWatch *watch);
-+
-+int dbus_timeout_get_interval (DBusTimeout *timeout);
-+void* dbus_timeout_get_data (DBusTimeout *timeout);
-+void dbus_timeout_set_data (DBusTimeout *timeout,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t dbus_timeout_handle (DBusTimeout *timeout);
-+dbus_bool_t dbus_timeout_get_enabled (DBusTimeout *timeout);
-+
-+/* Filters */
-+
-+dbus_bool_t dbus_connection_add_filter (DBusConnection *connection,
-+ DBusHandleMessageFunction function,
-+ void *user_data,
-+ DBusFreeFunction free_data_function);
-+void dbus_connection_remove_filter (DBusConnection *connection,
-+ DBusHandleMessageFunction function,
-+ void *user_data);
-+
-+
-+/* Other */
-+dbus_bool_t dbus_connection_allocate_data_slot (dbus_int32_t *slot_p);
-+void dbus_connection_free_data_slot (dbus_int32_t *slot_p);
-+dbus_bool_t dbus_connection_set_data (DBusConnection *connection,
-+ dbus_int32_t slot,
-+ void *data,
-+ DBusFreeFunction free_data_func);
-+void* dbus_connection_get_data (DBusConnection *connection,
-+ dbus_int32_t slot);
-+
-+void dbus_connection_set_change_sigpipe (dbus_bool_t will_modify_sigpipe);
-+
-+void dbus_connection_set_max_message_size (DBusConnection *connection,
-+ long size);
-+long dbus_connection_get_max_message_size (DBusConnection *connection);
-+void dbus_connection_set_max_received_size (DBusConnection *connection,
-+ long size);
-+long dbus_connection_get_max_received_size (DBusConnection *connection);
-+long dbus_connection_get_outgoing_size (DBusConnection *connection);
-+
-+DBusPreallocatedSend* dbus_connection_preallocate_send (DBusConnection *connection);
-+void dbus_connection_free_preallocated_send (DBusConnection *connection,
-+ DBusPreallocatedSend *preallocated);
-+void dbus_connection_send_preallocated (DBusConnection *connection,
-+ DBusPreallocatedSend *preallocated,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial);
-+
-+
-+/* Object tree functionality */
-+
-+typedef void (* DBusObjectPathUnregisterFunction) (DBusConnection *connection,
-+ void *user_data);
-+typedef DBusHandlerResult (* DBusObjectPathMessageFunction) (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data);
-+
-+/**
-+ * Virtual table that must be implemented to handle a portion of the
-+ * object path hierarchy.
-+ */
-+struct DBusObjectPathVTable
-+{
-+ DBusObjectPathUnregisterFunction unregister_function; /**< Function to unregister this handler */
-+ DBusObjectPathMessageFunction message_function; /**< Function to handle messages */
-+
-+ void (* dbus_internal_pad1) (void *); /**< Reserved for future expansion */
-+ void (* dbus_internal_pad2) (void *); /**< Reserved for future expansion */
-+ void (* dbus_internal_pad3) (void *); /**< Reserved for future expansion */
-+ void (* dbus_internal_pad4) (void *); /**< Reserved for future expansion */
-+};
-+
-+dbus_bool_t dbus_connection_register_object_path (DBusConnection *connection,
-+ const char *path,
-+ const DBusObjectPathVTable *vtable,
-+ void *user_data);
-+dbus_bool_t dbus_connection_register_fallback (DBusConnection *connection,
-+ const char *path,
-+ const DBusObjectPathVTable *vtable,
-+ void *user_data);
-+dbus_bool_t dbus_connection_unregister_object_path (DBusConnection *connection,
-+ const char *path);
-+
-+dbus_bool_t dbus_connection_get_object_path_data (DBusConnection *connection,
-+ const char *path,
-+ void **data_p);
-+
-+dbus_bool_t dbus_connection_list_registered (DBusConnection *connection,
-+ const char *parent_path,
-+ char ***child_entries);
-+
-+dbus_bool_t dbus_connection_get_unix_fd (DBusConnection *connection,
-+ int *fd);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_CONNECTION_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-dataslot.c dbus-0.61/dbus/dbus-dataslot.c
---- dbus-0.61.orig/dbus/dbus-dataslot.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-dataslot.c 2005-02-25 23:03:30.000000000 +0100
-@@ -0,0 +1,477 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-dataslot.c storing data on objects
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-dataslot.h"
-+#include "dbus-threads-internal.h"
-+
-+/**
-+ * @defgroup DBusDataSlot Data slots
-+ * @ingroup DBusInternals
-+ * @brief Storing data by ID
-+ *
-+ * Types and functions related to storing data by an
-+ * allocated ID. This is used for dbus_connection_set_data(),
-+ * dbus_server_set_data(), etc.
-+ * @{
-+ */
-+
-+/**
-+ * Initializes a data slot allocator object, used to assign
-+ * integer IDs for data slots.
-+ *
-+ * @param allocator the allocator to initialize
-+ */
-+dbus_bool_t
-+_dbus_data_slot_allocator_init (DBusDataSlotAllocator *allocator)
-+{
-+ allocator->allocated_slots = NULL;
-+ allocator->n_allocated_slots = 0;
-+ allocator->n_used_slots = 0;
-+ allocator->lock = NULL;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Allocates an integer ID to be used for storing data
-+ * in a #DBusDataSlotList. If the value at *slot_id_p is
-+ * not -1, this function just increments the refcount for
-+ * the existing slot ID. If the value is -1, a new slot ID
-+ * is allocated and stored at *slot_id_p.
-+ *
-+ * @param allocator the allocator
-+ * @param mutex the lock for this allocator
-+ * @param slot_id_p address to fill with the slot ID
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_data_slot_allocator_alloc (DBusDataSlotAllocator *allocator,
-+ DBusMutex *mutex,
-+ dbus_int32_t *slot_id_p)
-+{
-+ dbus_int32_t slot;
-+
-+ if (!_dbus_mutex_lock (mutex))
-+ return FALSE;
-+
-+ if (allocator->n_allocated_slots == 0)
-+ {
-+ _dbus_assert (allocator->lock == NULL);
-+ allocator->lock = mutex;
-+ }
-+ else
-+ _dbus_assert (allocator->lock == mutex);
-+
-+ if (*slot_id_p >= 0)
-+ {
-+ slot = *slot_id_p;
-+
-+ _dbus_assert (slot < allocator->n_allocated_slots);
-+ _dbus_assert (allocator->allocated_slots[slot].slot_id == slot);
-+
-+ allocator->allocated_slots[slot].refcount += 1;
-+
-+ goto out;
-+ }
-+
-+ _dbus_assert (*slot_id_p < 0);
-+
-+ if (allocator->n_used_slots < allocator->n_allocated_slots)
-+ {
-+ slot = 0;
-+ while (slot < allocator->n_allocated_slots)
-+ {
-+ if (allocator->allocated_slots[slot].slot_id < 0)
-+ {
-+ allocator->allocated_slots[slot].slot_id = slot;
-+ allocator->allocated_slots[slot].refcount = 1;
-+ allocator->n_used_slots += 1;
-+ break;
-+ }
-+ ++slot;
-+ }
-+
-+ _dbus_assert (slot < allocator->n_allocated_slots);
-+ }
-+ else
-+ {
-+ DBusAllocatedSlot *tmp;
-+
-+ slot = -1;
-+ tmp = dbus_realloc (allocator->allocated_slots,
-+ sizeof (DBusAllocatedSlot) * (allocator->n_allocated_slots + 1));
-+ if (tmp == NULL)
-+ goto out;
-+
-+ allocator->allocated_slots = tmp;
-+ slot = allocator->n_allocated_slots;
-+ allocator->n_allocated_slots += 1;
-+ allocator->n_used_slots += 1;
-+ allocator->allocated_slots[slot].slot_id = slot;
-+ allocator->allocated_slots[slot].refcount = 1;
-+ }
-+
-+ _dbus_assert (slot >= 0);
-+ _dbus_assert (slot < allocator->n_allocated_slots);
-+ _dbus_assert (*slot_id_p < 0);
-+ _dbus_assert (allocator->allocated_slots[slot].slot_id == slot);
-+ _dbus_assert (allocator->allocated_slots[slot].refcount == 1);
-+
-+ *slot_id_p = slot;
-+
-+ _dbus_verbose ("Allocated slot %d on allocator %p total %d slots allocated %d used\n",
-+ slot, allocator, allocator->n_allocated_slots, allocator->n_used_slots);
-+
-+ out:
-+ _dbus_mutex_unlock (allocator->lock);
-+ return slot >= 0;
-+}
-+
-+/**
-+ * Deallocates an ID previously allocated with
-+ * _dbus_data_slot_allocator_alloc(). Existing data stored on
-+ * existing #DBusDataList objects with this ID will be freed when the
-+ * data list is finalized, but may not be retrieved (and may only be
-+ * replaced if someone else reallocates the slot).
-+ * The slot value is reset to -1 if this is the last unref.
-+ *
-+ * @param allocator the allocator
-+ * @param slot_id_p address where we store the slot
-+ */
-+void
-+_dbus_data_slot_allocator_free (DBusDataSlotAllocator *allocator,
-+ dbus_int32_t *slot_id_p)
-+{
-+ _dbus_mutex_lock (allocator->lock);
-+
-+ _dbus_assert (*slot_id_p < allocator->n_allocated_slots);
-+ _dbus_assert (allocator->allocated_slots[*slot_id_p].slot_id == *slot_id_p);
-+ _dbus_assert (allocator->allocated_slots[*slot_id_p].refcount > 0);
-+
-+ allocator->allocated_slots[*slot_id_p].refcount -= 1;
-+
-+ if (allocator->allocated_slots[*slot_id_p].refcount > 0)
-+ {
-+ _dbus_mutex_unlock (allocator->lock);
-+ return;
-+ }
-+
-+ /* refcount is 0, free the slot */
-+ _dbus_verbose ("Freeing slot %d on allocator %p total %d allocated %d used\n",
-+ *slot_id_p, allocator, allocator->n_allocated_slots, allocator->n_used_slots);
-+
-+ allocator->allocated_slots[*slot_id_p].slot_id = -1;
-+ *slot_id_p = -1;
-+
-+ allocator->n_used_slots -= 1;
-+
-+ if (allocator->n_used_slots == 0)
-+ {
-+ DBusMutex *mutex = allocator->lock;
-+
-+ dbus_free (allocator->allocated_slots);
-+ allocator->allocated_slots = NULL;
-+ allocator->n_allocated_slots = 0;
-+ allocator->lock = NULL;
-+
-+ _dbus_mutex_unlock (mutex);
-+ }
-+ else
-+ {
-+ _dbus_mutex_unlock (allocator->lock);
-+ }
-+}
-+
-+/**
-+ * Initializes a slot list.
-+ * @param list the list to initialize.
-+ */
-+void
-+_dbus_data_slot_list_init (DBusDataSlotList *list)
-+{
-+ list->slots = NULL;
-+ list->n_slots = 0;
-+}
-+
-+/**
-+ * Stores a pointer in the data slot list, along with an optional
-+ * function to be used for freeing the data when the data is set
-+ * again, or when the slot list is finalized. The slot number must
-+ * have been allocated with _dbus_data_slot_allocator_alloc() for the
-+ * same allocator passed in here. The same allocator has to be used
-+ * with the slot list every time.
-+ *
-+ * @param allocator the allocator to use
-+ * @param list the data slot list
-+ * @param slot the slot number
-+ * @param data the data to store
-+ * @param free_data_func finalizer function for the data
-+ * @param old_free_func free function for any previously-existing data
-+ * @param old_data previously-existing data, should be freed with old_free_func
-+ * @returns #TRUE if there was enough memory to store the data
-+ */
-+dbus_bool_t
-+_dbus_data_slot_list_set (DBusDataSlotAllocator *allocator,
-+ DBusDataSlotList *list,
-+ int slot,
-+ void *data,
-+ DBusFreeFunction free_data_func,
-+ DBusFreeFunction *old_free_func,
-+ void **old_data)
-+{
-+#ifndef DBUS_DISABLE_ASSERT
-+ /* We need to take the allocator lock here, because the allocator could
-+ * be e.g. realloc()ing allocated_slots. We avoid doing this if asserts
-+ * are disabled, since then the asserts are empty.
-+ */
-+ if (!_dbus_mutex_lock (allocator->lock))
-+ return FALSE;
-+ _dbus_assert (slot < allocator->n_allocated_slots);
-+ _dbus_assert (allocator->allocated_slots[slot].slot_id == slot);
-+ _dbus_mutex_unlock (allocator->lock);
-+#endif
-+
-+ if (slot >= list->n_slots)
-+ {
-+ DBusDataSlot *tmp;
-+ int i;
-+
-+ tmp = dbus_realloc (list->slots,
-+ sizeof (DBusDataSlot) * (slot + 1));
-+ if (tmp == NULL)
-+ return FALSE;
-+
-+ list->slots = tmp;
-+ i = list->n_slots;
-+ list->n_slots = slot + 1;
-+ while (i < list->n_slots)
-+ {
-+ list->slots[i].data = NULL;
-+ list->slots[i].free_data_func = NULL;
-+ ++i;
-+ }
-+ }
-+
-+ _dbus_assert (slot < list->n_slots);
-+
-+ *old_data = list->slots[slot].data;
-+ *old_free_func = list->slots[slot].free_data_func;
-+
-+ list->slots[slot].data = data;
-+ list->slots[slot].free_data_func = free_data_func;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Retrieves data previously set with _dbus_data_slot_list_set_data().
-+ * The slot must still be allocated (must not have been freed).
-+ *
-+ * @param allocator the allocator slot was allocated from
-+ * @param list the data slot list
-+ * @param slot the slot to get data from
-+ * @returns the data, or #NULL if not found
-+ */
-+void*
-+_dbus_data_slot_list_get (DBusDataSlotAllocator *allocator,
-+ DBusDataSlotList *list,
-+ int slot)
-+{
-+#ifndef DBUS_DISABLE_ASSERT
-+ /* We need to take the allocator lock here, because the allocator could
-+ * be e.g. realloc()ing allocated_slots. We avoid doing this if asserts
-+ * are disabled, since then the asserts are empty.
-+ */
-+ if (!_dbus_mutex_lock (allocator->lock))
-+ return FALSE;
-+ _dbus_assert (slot >= 0);
-+ _dbus_assert (slot < allocator->n_allocated_slots);
-+ _dbus_assert (allocator->allocated_slots[slot].slot_id == slot);
-+ _dbus_mutex_unlock (allocator->lock);
-+#endif
-+
-+ if (slot >= list->n_slots)
-+ return NULL;
-+ else
-+ return list->slots[slot].data;
-+}
-+
-+/**
-+ * Frees all data slots contained in the list, calling
-+ * application-provided free functions if they exist.
-+ *
-+ * @param list the list to clear
-+ */
-+void
-+_dbus_data_slot_list_clear (DBusDataSlotList *list)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i < list->n_slots)
-+ {
-+ if (list->slots[i].free_data_func)
-+ (* list->slots[i].free_data_func) (list->slots[i].data);
-+ list->slots[i].data = NULL;
-+ list->slots[i].free_data_func = NULL;
-+ ++i;
-+ }
-+}
-+
-+/**
-+ * Frees the data slot list and all data slots contained
-+ * in it, calling application-provided free functions
-+ * if they exist.
-+ *
-+ * @param list the list to free
-+ */
-+void
-+_dbus_data_slot_list_free (DBusDataSlotList *list)
-+{
-+ _dbus_data_slot_list_clear (list);
-+
-+ dbus_free (list->slots);
-+ list->slots = NULL;
-+ list->n_slots = 0;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+static int free_counter;
-+
-+static void
-+test_free_slot_data_func (void *data)
-+{
-+ int i = _DBUS_POINTER_TO_INT (data);
-+
-+ _dbus_assert (free_counter == i);
-+ ++free_counter;
-+}
-+
-+/**
-+ * Test function for data slots
-+ */
-+dbus_bool_t
-+_dbus_data_slot_test (void)
-+{
-+ DBusDataSlotAllocator allocator;
-+ DBusDataSlotList list;
-+ int i;
-+ DBusFreeFunction old_free_func;
-+ void *old_data;
-+ DBusMutex *mutex;
-+
-+ if (!_dbus_data_slot_allocator_init (&allocator))
-+ _dbus_assert_not_reached ("no memory for allocator");
-+
-+ _dbus_data_slot_list_init (&list);
-+
-+ mutex = _dbus_mutex_new ();
-+ if (mutex == NULL)
-+ _dbus_assert_not_reached ("failed to alloc mutex");
-+
-+#define N_SLOTS 100
-+
-+ i = 0;
-+ while (i < N_SLOTS)
-+ {
-+ /* we don't really want apps to rely on this ordered
-+ * allocation, but it simplifies things to rely on it
-+ * here.
-+ */
-+ dbus_int32_t tmp = -1;
-+
-+ _dbus_data_slot_allocator_alloc (&allocator, mutex, &tmp);
-+
-+ if (tmp != i)
-+ _dbus_assert_not_reached ("did not allocate slots in numeric order\n");
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < N_SLOTS)
-+ {
-+ if (!_dbus_data_slot_list_set (&allocator, &list,
-+ i,
-+ _DBUS_INT_TO_POINTER (i),
-+ test_free_slot_data_func,
-+ &old_free_func, &old_data))
-+ _dbus_assert_not_reached ("no memory to set data");
-+
-+ _dbus_assert (old_free_func == NULL);
-+ _dbus_assert (old_data == NULL);
-+
-+ _dbus_assert (_dbus_data_slot_list_get (&allocator, &list, i) ==
-+ _DBUS_INT_TO_POINTER (i));
-+
-+ ++i;
-+ }
-+
-+ free_counter = 0;
-+ i = 0;
-+ while (i < N_SLOTS)
-+ {
-+ if (!_dbus_data_slot_list_set (&allocator, &list,
-+ i,
-+ _DBUS_INT_TO_POINTER (i),
-+ test_free_slot_data_func,
-+ &old_free_func, &old_data))
-+ _dbus_assert_not_reached ("no memory to set data");
-+
-+ _dbus_assert (old_free_func == test_free_slot_data_func);
-+ _dbus_assert (_DBUS_POINTER_TO_INT (old_data) == i);
-+
-+ (* old_free_func) (old_data);
-+ _dbus_assert (i == (free_counter - 1));
-+
-+ _dbus_assert (_dbus_data_slot_list_get (&allocator, &list, i) ==
-+ _DBUS_INT_TO_POINTER (i));
-+
-+ ++i;
-+ }
-+
-+ free_counter = 0;
-+ _dbus_data_slot_list_free (&list);
-+
-+ _dbus_assert (N_SLOTS == free_counter);
-+
-+ i = 0;
-+ while (i < N_SLOTS)
-+ {
-+ dbus_int32_t tmp = i;
-+
-+ _dbus_data_slot_allocator_free (&allocator, &tmp);
-+ _dbus_assert (tmp == -1);
-+ ++i;
-+ }
-+
-+ _dbus_mutex_free (mutex);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-dataslot.h dbus-0.61/dbus/dbus-dataslot.h
---- dbus-0.61.orig/dbus/dbus-dataslot.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-dataslot.h 2004-11-26 07:22:53.000000000 +0100
-@@ -0,0 +1,96 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-dataslot.h storing data on objects
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_DATASLOT_H
-+#define DBUS_DATASLOT_H
-+
-+#include <dbus/dbus-internals.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusDataSlotAllocator DBusDataSlotAllocator;
-+typedef struct DBusDataSlotList DBusDataSlotList;
-+
-+/** Opaque typedef for DBusDataSlot */
-+typedef struct DBusDataSlot DBusDataSlot;
-+/** DBusDataSlot is used to store application data on the connection */
-+struct DBusDataSlot
-+{
-+ void *data; /**< The application data */
-+ DBusFreeFunction free_data_func; /**< Free the application data */
-+};
-+
-+typedef struct DBusAllocatedSlot DBusAllocatedSlot;
-+
-+/** An allocated slot for storing data
-+ */
-+struct DBusAllocatedSlot
-+{
-+ dbus_int32_t slot_id; /**< ID of this slot */
-+ int refcount; /**< Number of uses of the slot */
-+};
-+
-+/**
-+ * An allocator that tracks a set of slot IDs.
-+ */
-+struct DBusDataSlotAllocator
-+{
-+ DBusAllocatedSlot *allocated_slots; /**< Allocated slots */
-+ int n_allocated_slots; /**< number of slots malloc'd */
-+ int n_used_slots; /**< number of slots used */
-+ DBusMutex *lock; /**< thread lock */
-+};
-+
-+/**
-+ * Data structure that stores the actual user data set at a given
-+ * slot.
-+ */
-+struct DBusDataSlotList
-+{
-+ DBusDataSlot *slots; /**< Data slots */
-+ int n_slots; /**< Slots we have storage for in data_slots */
-+};
-+
-+dbus_bool_t _dbus_data_slot_allocator_init (DBusDataSlotAllocator *allocator);
-+dbus_bool_t _dbus_data_slot_allocator_alloc (DBusDataSlotAllocator *allocator,
-+ DBusMutex *mutex,
-+ int *slot_id_p);
-+void _dbus_data_slot_allocator_free (DBusDataSlotAllocator *allocator,
-+ int *slot_id_p);
-+void _dbus_data_slot_list_init (DBusDataSlotList *list);
-+dbus_bool_t _dbus_data_slot_list_set (DBusDataSlotAllocator *allocator,
-+ DBusDataSlotList *list,
-+ int slot,
-+ void *data,
-+ DBusFreeFunction free_data_func,
-+ DBusFreeFunction *old_free_func,
-+ void **old_data);
-+void* _dbus_data_slot_list_get (DBusDataSlotAllocator *allocator,
-+ DBusDataSlotList *list,
-+ int slot);
-+void _dbus_data_slot_list_clear (DBusDataSlotList *list);
-+void _dbus_data_slot_list_free (DBusDataSlotList *list);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_DATASLOT_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-errors.c dbus-0.61/dbus/dbus-errors.c
---- dbus-0.61.orig/dbus/dbus-errors.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-errors.c 2005-08-09 23:36:55.000000000 +0200
-@@ -0,0 +1,382 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-errors.c Error reporting
-+ *
-+ * Copyright (C) 2002, 2004 Red Hat Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-errors.h"
-+#include "dbus-internals.h"
-+#include "dbus-string.h"
-+#include "dbus-protocol.h"
-+#include <stdarg.h>
-+#include <string.h>
-+
-+/**
-+ * @defgroup DBusErrorInternals Error reporting internals
-+ * @ingroup DBusInternals
-+ * @brief Error reporting internals
-+ * @{
-+ */
-+
-+/**
-+ * Internals of DBusError
-+ */
-+typedef struct
-+{
-+ const char *name; /**< error name */
-+ char *message; /**< error message */
-+
-+ unsigned int const_message : 1; /**< Message is not owned by DBusError */
-+
-+ unsigned int dummy2 : 1; /**< placeholder */
-+ unsigned int dummy3 : 1; /**< placeholder */
-+ unsigned int dummy4 : 1; /**< placeholder */
-+ unsigned int dummy5 : 1; /**< placeholder */
-+
-+ void *padding1; /**< placeholder */
-+
-+} DBusRealError;
-+
-+/**
-+ * Returns a longer message describing an error name.
-+ * If the error name is unknown, returns the name
-+ * itself.
-+ *
-+ * @param error the error to describe
-+ * @returns a constant string describing the error.
-+ */
-+static const char*
-+message_from_error (const char *error)
-+{
-+ if (strcmp (error, DBUS_ERROR_FAILED) == 0)
-+ return "Unknown error";
-+ else if (strcmp (error, DBUS_ERROR_NO_MEMORY) == 0)
-+ return "Not enough memory available";
-+ else if (strcmp (error, DBUS_ERROR_IO_ERROR) == 0)
-+ return "Error reading or writing data";
-+ else if (strcmp (error, DBUS_ERROR_BAD_ADDRESS) == 0)
-+ return "Could not parse address";
-+ else if (strcmp (error, DBUS_ERROR_NOT_SUPPORTED) == 0)
-+ return "Feature not supported";
-+ else if (strcmp (error, DBUS_ERROR_LIMITS_EXCEEDED) == 0)
-+ return "Resource limits exceeded";
-+ else if (strcmp (error, DBUS_ERROR_ACCESS_DENIED) == 0)
-+ return "Permission denied";
-+ else if (strcmp (error, DBUS_ERROR_AUTH_FAILED) == 0)
-+ return "Could not authenticate to server";
-+ else if (strcmp (error, DBUS_ERROR_NO_SERVER) == 0)
-+ return "No server available at address";
-+ else if (strcmp (error, DBUS_ERROR_TIMEOUT) == 0)
-+ return "Connection timed out";
-+ else if (strcmp (error, DBUS_ERROR_NO_NETWORK) == 0)
-+ return "Network unavailable";
-+ else if (strcmp (error, DBUS_ERROR_ADDRESS_IN_USE) == 0)
-+ return "Address already in use";
-+ else if (strcmp (error, DBUS_ERROR_DISCONNECTED) == 0)
-+ return "Disconnected.";
-+ else if (strcmp (error, DBUS_ERROR_INVALID_ARGS) == 0)
-+ return "Invalid arguments.";
-+ else if (strcmp (error, DBUS_ERROR_NO_REPLY) == 0)
-+ return "Did not get a reply message.";
-+ else if (strcmp (error, DBUS_ERROR_FILE_NOT_FOUND) == 0)
-+ return "File doesn't exist.";
-+ else
-+ return error;
-+}
-+
-+/** @} */ /* End of internals */
-+
-+/**
-+ * @defgroup DBusErrors Error reporting
-+ * @ingroup DBus
-+ * @brief Error reporting
-+ *
-+ * Types and functions related to reporting errors.
-+ *
-+ *
-+ * In essence D-BUS error reporting works as follows:
-+ *
-+ * @code
-+ * DBusError error;
-+ * dbus_error_init (&error);
-+ * dbus_some_function (arg1, arg2, &error);
-+ * if (dbus_error_is_set (&error))
-+ * {
-+ * fprintf (stderr, "an error occurred: %s\n", error.message);
-+ * dbus_error_free (&error);
-+ * }
-+ * @endcode
-+ *
-+ * There are some rules. An error passed to a D-BUS function must
-+ * always be unset; you can't pass in an error that's already set. If
-+ * a function has a return code indicating whether an error occurred,
-+ * and also a #DBusError parameter, then the error will always be set
-+ * if and only if the return code indicates an error occurred. i.e.
-+ * the return code and the error are never going to disagree.
-+ *
-+ * An error only needs to be freed if it's been set, not if
-+ * it's merely been initialized.
-+ *
-+ * You can check the specific error that occurred using
-+ * dbus_error_has_name().
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Initializes a DBusError structure. Does not allocate
-+ * any memory; the error only needs to be freed
-+ * if it is set at some point.
-+ *
-+ * @param error the DBusError.
-+ */
-+void
-+dbus_error_init (DBusError *error)
-+{
-+ DBusRealError *real;
-+
-+ _dbus_return_if_fail (error != NULL);
-+
-+ _dbus_assert (sizeof (DBusError) == sizeof (DBusRealError));
-+
-+ real = (DBusRealError *)error;
-+
-+ real->name = NULL;
-+ real->message = NULL;
-+
-+ real->const_message = TRUE;
-+}
-+
-+/**
-+ * Frees an error that's been set (or just initialized),
-+ * then reinitializes the error as in dbus_error_init().
-+ *
-+ * @param error memory where the error is stored.
-+ */
-+void
-+dbus_error_free (DBusError *error)
-+{
-+ DBusRealError *real;
-+
-+ _dbus_return_if_fail (error != NULL);
-+
-+ real = (DBusRealError *)error;
-+
-+ if (!real->const_message)
-+ {
-+ dbus_free (real->name);
-+ dbus_free (real->message);
-+ }
-+
-+ dbus_error_init (error);
-+}
-+
-+/**
-+ * Assigns an error name and message to a DBusError. Does nothing if
-+ * error is #NULL. The message may be NULL, which means a default
-+ * message will be deduced from the name. If the error name is unknown
-+ * to D-BUS the default message will be totally useless, though.
-+ *
-+ * @todo should be called dbus_error_set_const()
-+ *
-+ * @param error the error.
-+ * @param name the error name (not copied!!!)
-+ * @param message the error message (not copied!!!)
-+ */
-+void
-+dbus_set_error_const (DBusError *error,
-+ const char *name,
-+ const char *message)
-+{
-+ DBusRealError *real;
-+
-+ _dbus_return_if_error_is_set (error);
-+ _dbus_return_if_fail (name != NULL);
-+
-+ if (error == NULL)
-+ return;
-+
-+ _dbus_assert (error->name == NULL);
-+ _dbus_assert (error->message == NULL);
-+
-+ if (message == NULL)
-+ message = message_from_error (name);
-+
-+ real = (DBusRealError *)error;
-+
-+ real->name = name;
-+ real->message = (char *)message;
-+ real->const_message = TRUE;
-+}
-+
-+/**
-+ * Moves an error src into dest, freeing src and
-+ * overwriting dest. Both src and dest must be initialized.
-+ * src is reinitialized to an empty error. dest may not
-+ * contain an existing error. If the destination is
-+ * #NULL, just frees and reinits the source error.
-+ *
-+ * @param src the source error
-+ * @param dest the destination error or #NULL
-+ */
-+void
-+dbus_move_error (DBusError *src,
-+ DBusError *dest)
-+{
-+ _dbus_return_if_error_is_set (dest);
-+
-+ if (dest)
-+ {
-+ dbus_error_free (dest);
-+ *dest = *src;
-+ dbus_error_init (src);
-+ }
-+ else
-+ dbus_error_free (src);
-+}
-+
-+/**
-+ * Checks whether the error is set and has the given
-+ * name.
-+ * @param error the error
-+ * @param name the name
-+ * @returns #TRUE if the given named error occurred
-+ */
-+dbus_bool_t
-+dbus_error_has_name (const DBusError *error,
-+ const char *name)
-+{
-+ _dbus_return_val_if_fail (error != NULL, FALSE);
-+ _dbus_return_val_if_fail (name != NULL, FALSE);
-+
-+ _dbus_assert ((error->name != NULL && error->message != NULL) ||
-+ (error->name == NULL && error->message == NULL));
-+
-+ if (error->name != NULL)
-+ {
-+ DBusString str1, str2;
-+ _dbus_string_init_const (&str1, error->name);
-+ _dbus_string_init_const (&str2, name);
-+ return _dbus_string_equal (&str1, &str2);
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Checks whether an error occurred (the error is set).
-+ *
-+ * @param error the error object
-+ * @returns #TRUE if an error occurred
-+ */
-+dbus_bool_t
-+dbus_error_is_set (const DBusError *error)
-+{
-+ _dbus_return_val_if_fail (error != NULL, FALSE);
-+ _dbus_assert ((error->name != NULL && error->message != NULL) ||
-+ (error->name == NULL && error->message == NULL));
-+ return error->name != NULL;
-+}
-+
-+/**
-+ * Assigns an error name and message to a DBusError.
-+ * Does nothing if error is #NULL.
-+ *
-+ * The format may be NULL, which means a default message will be
-+ * deduced from the name. If the error name is unknown to D-BUS the
-+ * default message will be totally useless, though.
-+ *
-+ * If no memory can be allocated for the error message,
-+ * an out-of-memory error message will be set instead.
-+ *
-+ * @todo should be called dbus_error_set()
-+ *
-+ * @param error the error.
-+ * @param name the error name
-+ * @param format printf-style format string.
-+ */
-+void
-+dbus_set_error (DBusError *error,
-+ const char *name,
-+ const char *format,
-+ ...)
-+{
-+ DBusRealError *real;
-+ DBusString str;
-+ va_list args;
-+
-+ if (error == NULL)
-+ return;
-+
-+ /* it's a bug to pile up errors */
-+ _dbus_return_if_error_is_set (error);
-+ _dbus_return_if_fail (name != NULL);
-+
-+ _dbus_assert (error->name == NULL);
-+ _dbus_assert (error->message == NULL);
-+
-+ if (!_dbus_string_init (&str))
-+ goto nomem;
-+
-+ if (format == NULL)
-+ {
-+ if (!_dbus_string_append (&str,
-+ message_from_error (name)))
-+ {
-+ _dbus_string_free (&str);
-+ goto nomem;
-+ }
-+ }
-+ else
-+ {
-+ va_start (args, format);
-+ if (!_dbus_string_append_printf_valist (&str, format, args))
-+ {
-+ _dbus_string_free (&str);
-+ goto nomem;
-+ }
-+ va_end (args);
-+ }
-+
-+ real = (DBusRealError *)error;
-+
-+ if (!_dbus_string_steal_data (&str, &real->message))
-+ {
-+ _dbus_string_free (&str);
-+ goto nomem;
-+ }
-+ _dbus_string_free (&str);
-+
-+ real->name = _dbus_strdup (name);
-+ if (real->name == NULL)
-+ {
-+ dbus_free (real->message);
-+ real->message = NULL;
-+ goto nomem;
-+ }
-+ real->const_message = FALSE;
-+
-+ return;
-+
-+ nomem:
-+ _DBUS_SET_OOM (error);
-+}
-+
-+/** @} */ /* End public API */
-diff -Naur dbus-0.61.orig/dbus/dbus-errors.h dbus-0.61/dbus/dbus-errors.h
---- dbus-0.61.orig/dbus/dbus-errors.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-errors.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,72 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-errors.h Error reporting
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_ERROR_H
-+#define DBUS_ERROR_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-types.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusError DBusError;
-+
-+/**
-+ * Object representing an exception.
-+ */
-+struct DBusError
-+{
-+ const char *name; /**< error name */
-+ const char *message; /**< error message */
-+
-+ unsigned int dummy1 : 1; /**< placeholder */
-+ unsigned int dummy2 : 1; /**< placeholder */
-+ unsigned int dummy3 : 1; /**< placeholder */
-+ unsigned int dummy4 : 1; /**< placeholder */
-+ unsigned int dummy5 : 1; /**< placeholder */
-+
-+ void *padding1; /**< placeholder */
-+};
-+
-+void dbus_error_init (DBusError *error);
-+void dbus_error_free (DBusError *error);
-+void dbus_set_error (DBusError *error,
-+ const char *name,
-+ const char *message,
-+ ...);
-+void dbus_set_error_const (DBusError *error,
-+ const char *name,
-+ const char *message);
-+void dbus_move_error (DBusError *src,
-+ DBusError *dest);
-+dbus_bool_t dbus_error_has_name (const DBusError *error,
-+ const char *name);
-+dbus_bool_t dbus_error_is_set (const DBusError *error);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_ERROR_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-glib-error-enum.h dbus-0.61/dbus/dbus-glib-error-enum.h
---- dbus-0.61.orig/dbus/dbus-glib-error-enum.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-glib-error-enum.h 2006-02-24 16:48:16.000000000 +0100
-@@ -0,0 +1,34 @@
-+DBUS_GERROR_FAILED,
-+DBUS_GERROR_NO_MEMORY,
-+DBUS_GERROR_SERVICE_UNKNOWN,
-+DBUS_GERROR_NAME_HAS_NO_OWNER,
-+DBUS_GERROR_NO_REPLY,
-+DBUS_GERROR_IO_ERROR,
-+DBUS_GERROR_BAD_ADDRESS,
-+DBUS_GERROR_NOT_SUPPORTED,
-+DBUS_GERROR_LIMITS_EXCEEDED,
-+DBUS_GERROR_ACCESS_DENIED,
-+DBUS_GERROR_AUTH_FAILED,
-+DBUS_GERROR_NO_SERVER,
-+DBUS_GERROR_TIMEOUT,
-+DBUS_GERROR_NO_NETWORK,
-+DBUS_GERROR_ADDRESS_IN_USE,
-+DBUS_GERROR_DISCONNECTED,
-+DBUS_GERROR_INVALID_ARGS,
-+DBUS_GERROR_FILE_NOT_FOUND,
-+DBUS_GERROR_UNKNOWN_METHOD,
-+DBUS_GERROR_TIMED_OUT,
-+DBUS_GERROR_MATCH_RULE_NOT_FOUND,
-+DBUS_GERROR_MATCH_RULE_INVALID,
-+DBUS_GERROR_SPAWN_EXEC_FAILED,
-+DBUS_GERROR_SPAWN_FORK_FAILED,
-+DBUS_GERROR_SPAWN_CHILD_EXITED,
-+DBUS_GERROR_SPAWN_CHILD_SIGNALED,
-+DBUS_GERROR_SPAWN_FAILED,
-+DBUS_GERROR_UNIX_PROCESS_ID_UNKNOWN,
-+DBUS_GERROR_INVALID_SIGNATURE,
-+DBUS_GERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN,
-+DBUS_GERROR_REMOTE_EXCEPTION
-+#ifndef DBUS_INSIDE_DBUS_GLIB_H
-+#error " dbus-glib-error-enum.h may only be included by dbus-glib.h"
-+#endif
-diff -Naur dbus-0.61.orig/dbus/dbus-glib-lowlevel.h dbus-0.61/dbus/dbus-glib-lowlevel.h
---- dbus-0.61.orig/dbus/dbus-glib-lowlevel.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-glib-lowlevel.h 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,72 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-glib-lowlevel.h GLib integration details that require dbus/dbus.h
-+ *
-+ * Copyright (C) 2002, 2003 CodeFactory AB
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_GLIB_LOWLEVEL_H
-+#define DBUS_GLIB_LOWLEVEL_H
-+
-+#include <dbus/dbus-glib.h>
-+#include <dbus/dbus.h>
-+
-+G_BEGIN_DECLS
-+
-+void dbus_set_g_error (GError **gerror,
-+ DBusError *derror);
-+
-+#define DBUS_TYPE_CONNECTION (dbus_connection_get_g_type ())
-+#define DBUS_TYPE_MESSAGE (dbus_message_get_g_type ())
-+#define DBUS_TYPE_PENDING_CALL (dbus_pending_call_get_g_type ())
-+GType dbus_connection_get_g_type (void) G_GNUC_CONST;
-+GType dbus_message_get_g_type (void) G_GNUC_CONST;
-+GType dbus_pending_call_get_g_type (void) G_GNUC_CONST;
-+
-+void dbus_connection_setup_with_g_main (DBusConnection *connection,
-+ GMainContext *context);
-+void dbus_server_setup_with_g_main (DBusServer *server,
-+ GMainContext *context);
-+
-+void dbus_g_proxy_send (DBusGProxy *proxy,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial);
-+
-+DBusConnection* dbus_g_connection_get_connection (DBusGConnection *gconnection);
-+DBusMessage* dbus_g_message_get_message (DBusGMessage *gmessage);
-+
-+/* dbus_g_pending_call_get_pending_call() deliberately skipped for now;
-+ * not sure it makes sense to use any of the DBusPendingCall functions
-+ * on the wrapped pending call (once we have the right exported
-+ * g-functions anyhow)
-+ */
-+
-+gchar* dbus_g_method_get_sender (DBusGMethodInvocation *context);
-+
-+DBusMessage* dbus_g_method_get_reply (DBusGMethodInvocation *context);
-+
-+void dbus_g_method_send_reply (DBusGMethodInvocation *context,
-+ DBusMessage *reply);
-+
-+G_END_DECLS
-+
-+#endif /* DBUS_GLIB_LOWLEVEL_H */
-+
-+
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-glib.h dbus-0.61/dbus/dbus-glib.h
---- dbus-0.61.orig/dbus/dbus-glib.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-glib.h 2006-02-15 22:42:54.000000000 +0100
-@@ -0,0 +1,256 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-glib.h GLib integration
-+ *
-+ * Copyright (C) 2002, 2003 CodeFactory AB
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_GLIB_H
-+#define DBUS_GLIB_H
-+
-+#include <glib-object.h>
-+#include <dbus/dbus-shared.h>
-+
-+G_BEGIN_DECLS
-+
-+#define DBUS_INSIDE_DBUS_GLIB_H 1
-+
-+
-+/**
-+ * Convert to DBusConnection with dbus_g_connection_get_connection() in dbus-glib-lowlevel.h
-+ */
-+typedef struct _DBusGConnection DBusGConnection;
-+/**
-+ * Convert to DBusMessage with dbus_g_message_get_message() in dbus-glib-lowlevel.h
-+ */
-+typedef struct _DBusGMessage DBusGMessage;
-+
-+
-+#define DBUS_TYPE_G_CONNECTION (dbus_g_connection_get_g_type ())
-+#define DBUS_TYPE_G_MESSAGE (dbus_g_message_get_g_type ())
-+GType dbus_g_connection_get_g_type (void) G_GNUC_CONST;
-+GType dbus_g_message_get_g_type (void) G_GNUC_CONST;
-+
-+
-+DBusGConnection* dbus_g_connection_ref (DBusGConnection *connection);
-+void dbus_g_connection_unref (DBusGConnection *connection);
-+DBusGMessage* dbus_g_message_ref (DBusGMessage *message);
-+void dbus_g_message_unref (DBusGMessage *message);
-+
-+void dbus_g_connection_flush (DBusGConnection *connection);
-+
-+GQuark dbus_g_error_quark (void);
-+#define DBUS_GERROR dbus_g_error_quark ()
-+
-+typedef enum
-+{
-+#include <dbus/dbus-glib-error-enum.h>
-+} DBusGError;
-+
-+gboolean dbus_g_error_has_name (GError *error,
-+ const char *name);
-+const char * dbus_g_error_get_name (GError *error);
-+
-+void dbus_g_thread_init (void);
-+
-+DBusGConnection* dbus_g_connection_open (const gchar *address,
-+ GError **error);
-+DBusGConnection* dbus_g_bus_get (DBusBusType type,
-+ GError **error);
-+
-+typedef struct _DBusGObjectInfo DBusGObjectInfo;
-+typedef struct _DBusGMethodInfo DBusGMethodInfo;
-+
-+/**
-+ * Object typically generated by dbus-binding-tool that
-+ * stores a mapping from introspection data to a
-+ * function pointer for a C method to be invoked.
-+ */
-+struct _DBusGMethodInfo
-+{
-+ GCallback function; /**< C method to invoke */
-+ GClosureMarshal marshaller; /**< Marshaller to invoke method */
-+ int data_offset; /**< Offset into the introspection data */
-+};
-+
-+/**
-+ * Introspection data for a GObject, normally autogenerated by
-+ * a tool such as dbus-binding-tool.
-+ */
-+struct _DBusGObjectInfo
-+{
-+ int format_version; /**< Allows us to change the rest of this struct
-+ * by adding DBusGObjectInfo2, DBusGObjectInfo3, etc.
-+ */
-+ const DBusGMethodInfo *method_infos; /**< Array of method pointers */
-+ int n_method_infos; /**< Length of the infos array */
-+ const char *data; /**< Introspection data */
-+ const char *exported_signals; /**< Exported signals */
-+ const char *exported_properties; /**< Exported properties */
-+};
-+
-+void dbus_g_object_type_install_info (GType object_type,
-+ const DBusGObjectInfo *info);
-+
-+void dbus_g_error_domain_register (GQuark domain,
-+ const char * default_iface,
-+ GType code_enum);
-+
-+void dbus_g_connection_register_g_object (DBusGConnection *connection,
-+ const char *at_path,
-+ GObject *object);
-+GObject * dbus_g_connection_lookup_g_object (DBusGConnection *connection,
-+ const char *at_path);
-+
-+#ifdef DBUS_COMPILATION
-+#include "glib/dbus-gtype-specialized.h"
-+#else
-+#include <dbus/dbus-gtype-specialized.h>
-+#endif
-+
-+/* definitions for some basic array types */
-+#define DBUS_TYPE_G_BOOLEAN_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_BOOLEAN))
-+#define DBUS_TYPE_G_UCHAR_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_UCHAR))
-+#define DBUS_TYPE_G_UINT_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_UINT))
-+#define DBUS_TYPE_G_INT_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_INT))
-+#define DBUS_TYPE_G_UINT64_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_UINT64))
-+#define DBUS_TYPE_G_INT64_ARRAY (dbus_g_type_get_collection ("GArray", G_TYPE_INT64))
-+#define DBUS_TYPE_G_OBJECT_ARRAY (dbus_g_type_get_collection ("GPtrArray", G_TYPE_OBJECT))
-+
-+#define DBUS_TYPE_G_STRING_STRING_HASHTABLE (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING))
-+
-+GType dbus_g_object_path_get_g_type (void) G_GNUC_CONST;
-+#define DBUS_TYPE_G_OBJECT_PATH (dbus_g_object_path_get_g_type ())
-+
-+void dbus_g_object_register_marshaller (GClosureMarshal marshaller,
-+ GType rettype,
-+ ...);
-+void dbus_g_object_register_marshaller_array(GClosureMarshal marshaller,
-+ GType rettype,
-+ guint n_types,
-+ const GType* types);
-+
-+typedef struct _DBusGProxy DBusGProxy;
-+typedef struct _DBusGProxyClass DBusGProxyClass;
-+
-+#define DBUS_TYPE_G_PROXY (dbus_g_proxy_get_type ())
-+#define DBUS_G_PROXY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), DBUS_TYPE_G_PROXY, DBusGProxy))
-+#define DBUS_G_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DBUS_TYPE_G_PROXY, DBusGProxyClass))
-+#define DBUS_IS_G_PROXY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), DBUS_TYPE_G_PROXY))
-+#define DBUS_IS_G_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DBUS_TYPE_G_PROXY))
-+#define DBUS_G_PROXY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DBUS_TYPE_G_PROXY, DBusGProxyClass))
-+
-+struct _DBusGProxy
-+{
-+ GObject parent;
-+};
-+
-+struct _DBusGProxyClass
-+{
-+ GObjectClass parent_class; /**< Parent class */
-+};
-+
-+typedef struct _DBusGProxyCall DBusGProxyCall;
-+typedef void (* DBusGProxyCallNotify) (DBusGProxy *proxy,
-+ DBusGProxyCall *call_id,
-+ void *user_data);
-+
-+GType dbus_g_proxy_get_type (void) G_GNUC_CONST;
-+DBusGProxy* dbus_g_proxy_new_for_name (DBusGConnection *connection,
-+ const char *name,
-+ const char *path,
-+ const char *interface);
-+DBusGProxy* dbus_g_proxy_new_for_name_owner (DBusGConnection *connection,
-+ const char *name,
-+ const char *path,
-+ const char *interface,
-+ GError **error);
-+DBusGProxy* dbus_g_proxy_new_from_proxy (DBusGProxy *proxy,
-+ const char *interface,
-+ const char *path_name);
-+DBusGProxy* dbus_g_proxy_new_for_peer (DBusGConnection *connection,
-+ const char *path_name,
-+ const char *interface_name);
-+
-+void dbus_g_proxy_set_interface (DBusGProxy *proxy,
-+ const char *interface_name);
-+void dbus_g_proxy_add_signal (DBusGProxy *proxy,
-+ const char *signal_name,
-+ GType first_type,
-+ ...);
-+
-+void dbus_g_proxy_connect_signal (DBusGProxy *proxy,
-+ const char *signal_name,
-+ GCallback handler,
-+ void *data,
-+ GClosureNotify free_data_func);
-+void dbus_g_proxy_disconnect_signal (DBusGProxy *proxy,
-+ const char *signal_name,
-+ GCallback handler,
-+ void *data);
-+
-+gboolean dbus_g_proxy_call (DBusGProxy *proxy,
-+ const char *method,
-+ GError **error,
-+ GType first_arg_type,
-+ ...);
-+
-+void dbus_g_proxy_call_no_reply (DBusGProxy *proxy,
-+ const char *method,
-+ GType first_arg_type,
-+ ...);
-+
-+DBusGProxyCall * dbus_g_proxy_begin_call (DBusGProxy *proxy,
-+ const char *method,
-+ DBusGProxyCallNotify notify,
-+ gpointer data,
-+ GDestroyNotify destroy,
-+ GType first_arg_type,
-+ ...);
-+gboolean dbus_g_proxy_end_call (DBusGProxy *proxy,
-+ DBusGProxyCall *call,
-+ GError **error,
-+ GType first_arg_type,
-+ ...);
-+void dbus_g_proxy_cancel_call (DBusGProxy *proxy,
-+ DBusGProxyCall *call);
-+
-+const char* dbus_g_proxy_get_path (DBusGProxy *proxy);
-+
-+const char* dbus_g_proxy_get_bus_name (DBusGProxy *proxy);
-+
-+const char* dbus_g_proxy_get_interface (DBusGProxy *proxy);
-+
-+typedef struct _DBusGMethodInvocation DBusGMethodInvocation;
-+
-+void dbus_g_method_return (DBusGMethodInvocation *context, ...);
-+
-+void dbus_g_method_return_error (DBusGMethodInvocation *context, GError *error);
-+
-+/* Probably possible to replace this with a closure */
-+typedef struct {
-+ GCallback cb;
-+ gpointer userdata;
-+} DBusGAsyncData;
-+
-+#undef DBUS_INSIDE_DBUS_GLIB_H
-+
-+G_END_DECLS
-+
-+#endif /* DBUS_GLIB_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-hash.c dbus-0.61/dbus/dbus-hash.c
---- dbus-0.61.orig/dbus/dbus-hash.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-hash.c 2005-01-17 04:53:40.000000000 +0100
-@@ -0,0 +1,2177 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-hash.c Generic hash table utility (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002 Red Hat, Inc.
-+ * Copyright (c) 1991-1993 The Regents of the University of California.
-+ * Copyright (c) 1994 Sun Microsystems, Inc.
-+ *
-+ * Hash table implementation based on generic/tclHash.c from the Tcl
-+ * source code. The original Tcl license applies to portions of the
-+ * code from tclHash.c; the Tcl license follows this standad D-BUS
-+ * license information.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+/*
-+ * The following copyright applies to code from the Tcl distribution.
-+ *
-+ * Copyright (c) 1991-1993 The Regents of the University of California.
-+ * Copyright (c) 1994 Sun Microsystems, Inc.
-+ *
-+ * This software is copyrighted by the Regents of the University of
-+ * California, Sun Microsystems, Inc., Scriptics Corporation, and
-+ * other parties. The following terms apply to all files associated
-+ * with the software unless explicitly disclaimed in individual files.
-+ *
-+ * The authors hereby grant permission to use, copy, modify,
-+ * distribute, and license this software and its documentation for any
-+ * purpose, provided that existing copyright notices are retained in
-+ * all copies and that this notice is included verbatim in any
-+ * distributions. No written agreement, license, or royalty fee is
-+ * required for any of the authorized uses. Modifications to this
-+ * software may be copyrighted by their authors and need not follow
-+ * the licensing terms described here, provided that the new terms are
-+ * clearly indicated on the first page of each file where they apply.
-+ *
-+ * IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY
-+ * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
-+ * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION,
-+ * OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED
-+ * OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
-+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
-+ * NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
-+ * AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE
-+ * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-+ *
-+ * GOVERNMENT USE: If you are acquiring this software on behalf of the
-+ * U.S. government, the Government shall have only "Restricted Rights"
-+ * in the software and related documentation as defined in the Federal
-+ * Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you
-+ * are acquiring the software on behalf of the Department of Defense,
-+ * the software shall be classified as "Commercial Computer Software"
-+ * and the Government shall have only "Restricted Rights" as defined
-+ * in Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the
-+ * foregoing, the authors grant the U.S. Government and others acting
-+ * in its behalf permission to use and distribute the software in
-+ * accordance with the terms specified in this license.
-+ */
-+
-+#include "dbus-hash.h"
-+#include "dbus-internals.h"
-+#include "dbus-mempool.h"
-+
-+/**
-+ * @defgroup DBusHashTable Hash table
-+ * @ingroup DBusInternals
-+ * @brief DBusHashTable data structure
-+ *
-+ * Types and functions related to DBusHashTable.
-+ */
-+
-+/**
-+ * @defgroup DBusHashTableInternals Hash table implementation details
-+ * @ingroup DBusInternals
-+ * @brief DBusHashTable implementation details
-+ *
-+ * The guts of DBusHashTable.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * When there are this many entries per bucket, on average, rebuild
-+ * the hash table to make it larger.
-+ */
-+#define REBUILD_MULTIPLIER 3
-+
-+/**
-+ * Takes a preliminary integer hash value and produces an index into a
-+ * hash tables bucket list. The idea is to make it so that
-+ * preliminary values that are arbitrarily similar will end up in
-+ * different buckets. The hash function was taken from a
-+ * random-number generator. (This is used to hash integers.)
-+ *
-+ * The down_shift drops off the high bits of the hash index, and
-+ * decreases as we increase the number of hash buckets (to keep more
-+ * range in the hash index). The mask also strips high bits and strips
-+ * fewer high bits as the number of hash buckets increases.
-+ * I don't understand two things: why is the initial downshift 28
-+ * to keep 4 bits when the initial mask is 011 to keep 2 bits,
-+ * and why do we have both a mask and a downshift?
-+ *
-+ */
-+#define RANDOM_INDEX(table, i) \
-+ (((((long) (i))*1103515245) >> (table)->down_shift) & (table)->mask)
-+
-+/**
-+ * Initial number of buckets in hash table (hash table statically
-+ * allocates its buckets for this size and below).
-+ * The initial mask has to be synced to this.
-+ */
-+#define DBUS_SMALL_HASH_TABLE 4
-+
-+/**
-+ * Typedef for DBusHashEntry
-+ */
-+typedef struct DBusHashEntry DBusHashEntry;
-+
-+/**
-+ * @brief Internal representation of a hash entry.
-+ *
-+ * A single entry (key-value pair) in the hash table.
-+ * Internal to hash table implementation.
-+ */
-+struct DBusHashEntry
-+{
-+ DBusHashEntry *next; /**< Pointer to next entry in this
-+ * hash bucket, or #NULL for end of
-+ * chain.
-+ */
-+ void *key; /**< Hash key */
-+ void *value; /**< Hash value */
-+};
-+
-+/**
-+ * Function used to find and optionally create a hash entry.
-+ */
-+typedef DBusHashEntry* (* DBusFindEntryFunction) (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated);
-+
-+/**
-+ * @brief Internals of DBusHashTable.
-+ *
-+ * Hash table internals. Hash tables are opaque objects, they must be
-+ * used via accessor functions.
-+ */
-+struct DBusHashTable {
-+ int refcount; /**< Reference count */
-+
-+ DBusHashEntry **buckets; /**< Pointer to bucket array. Each
-+ * element points to first entry in
-+ * bucket's hash chain, or #NULL.
-+ */
-+ DBusHashEntry *static_buckets[DBUS_SMALL_HASH_TABLE];
-+ /**< Bucket array used for small tables
-+ * (to avoid mallocs and frees).
-+ */
-+ int n_buckets; /**< Total number of buckets allocated
-+ * at **buckets.
-+ */
-+ int n_entries; /**< Total number of entries present
-+ * in table.
-+ */
-+ int hi_rebuild_size; /**< Enlarge table when n_entries gets
-+ * to be this large.
-+ */
-+ int lo_rebuild_size; /**< Shrink table when n_entries gets
-+ * below this.
-+ */
-+ int down_shift; /**< Shift count used in hashing
-+ * function. Designed to use high-
-+ * order bits of randomized keys.
-+ */
-+ int mask; /**< Mask value used in hashing
-+ * function.
-+ */
-+ DBusHashType key_type; /**< Type of keys used in this table */
-+
-+
-+ DBusFindEntryFunction find_function; /**< Function for finding entries */
-+
-+ DBusFreeFunction free_key_function; /**< Function to free keys */
-+ DBusFreeFunction free_value_function; /**< Function to free values */
-+
-+ DBusMemPool *entry_pool; /**< Memory pool for hash entries */
-+};
-+
-+/**
-+ * @brief Internals of DBusHashIter.
-+ */
-+typedef struct
-+{
-+ DBusHashTable *table; /**< Pointer to table containing entry. */
-+ DBusHashEntry **bucket; /**< Pointer to bucket that points to
-+ * first entry in this entry's chain:
-+ * used for deleting the entry.
-+ */
-+ DBusHashEntry *entry; /**< Current hash entry */
-+ DBusHashEntry *next_entry; /**< Next entry to be iterated onto in current bucket */
-+ int next_bucket; /**< index of next bucket */
-+ int n_entries_on_init; /**< used to detect table resize since initialization */
-+} DBusRealHashIter;
-+
-+static DBusHashEntry* find_direct_function (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated);
-+static DBusHashEntry* find_string_function (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated);
-+#ifdef DBUS_BUILD_TESTS
-+static DBusHashEntry* find_two_strings_function (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated);
-+#endif
-+static unsigned int string_hash (const char *str);
-+#ifdef DBUS_BUILD_TESTS
-+static unsigned int two_strings_hash (const char *str);
-+#endif
-+static void rebuild_table (DBusHashTable *table);
-+static DBusHashEntry* alloc_entry (DBusHashTable *table);
-+static void remove_entry (DBusHashTable *table,
-+ DBusHashEntry **bucket,
-+ DBusHashEntry *entry);
-+static void free_entry (DBusHashTable *table,
-+ DBusHashEntry *entry);
-+static void free_entry_data (DBusHashTable *table,
-+ DBusHashEntry *entry);
-+
-+
-+/** @} */
-+
-+/**
-+ * @addtogroup DBusHashTable
-+ * @{
-+ */
-+
-+/**
-+ * @typedef DBusHashIter
-+ *
-+ * Public opaque hash table iterator object.
-+ */
-+
-+/**
-+ * @typedef DBusHashTable
-+ *
-+ * Public opaque hash table object.
-+ */
-+
-+/**
-+ * @typedef DBusHashType
-+ *
-+ * Indicates the type of a key in the hash table.
-+ */
-+
-+/**
-+ * Constructs a new hash table. Should be freed with
-+ * _dbus_hash_table_unref(). If memory cannot be
-+ * allocated for the hash table, returns #NULL.
-+ *
-+ * @param type the type of hash key to use.
-+ * @param key_free_function function to free hash keys.
-+ * @param value_free_function function to free hash values.
-+ * @returns a new DBusHashTable or #NULL if no memory.
-+ */
-+DBusHashTable*
-+_dbus_hash_table_new (DBusHashType type,
-+ DBusFreeFunction key_free_function,
-+ DBusFreeFunction value_free_function)
-+{
-+ DBusHashTable *table;
-+ DBusMemPool *entry_pool;
-+
-+ table = dbus_new0 (DBusHashTable, 1);
-+ if (table == NULL)
-+ return NULL;
-+
-+ entry_pool = _dbus_mem_pool_new (sizeof (DBusHashEntry), TRUE);
-+ if (entry_pool == NULL)
-+ {
-+ dbus_free (table);
-+ return NULL;
-+ }
-+
-+ table->refcount = 1;
-+ table->entry_pool = entry_pool;
-+
-+ _dbus_assert (DBUS_SMALL_HASH_TABLE == _DBUS_N_ELEMENTS (table->static_buckets));
-+
-+ table->buckets = table->static_buckets;
-+ table->n_buckets = DBUS_SMALL_HASH_TABLE;
-+ table->n_entries = 0;
-+ table->hi_rebuild_size = DBUS_SMALL_HASH_TABLE * REBUILD_MULTIPLIER;
-+ table->lo_rebuild_size = 0;
-+ table->down_shift = 28;
-+ table->mask = 3;
-+ table->key_type = type;
-+
-+ _dbus_assert (table->mask < table->n_buckets);
-+
-+ switch (table->key_type)
-+ {
-+ case DBUS_HASH_INT:
-+ case DBUS_HASH_POINTER:
-+ case DBUS_HASH_ULONG:
-+ table->find_function = find_direct_function;
-+ break;
-+ case DBUS_HASH_STRING:
-+ table->find_function = find_string_function;
-+ break;
-+ case DBUS_HASH_TWO_STRINGS:
-+#ifdef DBUS_BUILD_TESTS
-+ table->find_function = find_two_strings_function;
-+#endif
-+ break;
-+ default:
-+ _dbus_assert_not_reached ("Unknown hash table type");
-+ break;
-+ }
-+
-+ table->free_key_function = key_free_function;
-+ table->free_value_function = value_free_function;
-+
-+ return table;
-+}
-+
-+
-+/**
-+ * Increments the reference count for a hash table.
-+ *
-+ * @param table the hash table to add a reference to.
-+ * @returns the hash table.
-+ */
-+DBusHashTable *
-+_dbus_hash_table_ref (DBusHashTable *table)
-+{
-+ table->refcount += 1;
-+
-+ return table;
-+}
-+
-+/**
-+ * Decrements the reference count for a hash table,
-+ * freeing the hash table if the count reaches zero.
-+ *
-+ * @param table the hash table to remove a reference from.
-+ */
-+void
-+_dbus_hash_table_unref (DBusHashTable *table)
-+{
-+ table->refcount -= 1;
-+
-+ if (table->refcount == 0)
-+ {
-+#if 0
-+ DBusHashEntry *entry;
-+ DBusHashEntry *next;
-+ int i;
-+
-+ /* Free the entries in the table. */
-+ for (i = 0; i < table->n_buckets; i++)
-+ {
-+ entry = table->buckets[i];
-+ while (entry != NULL)
-+ {
-+ next = entry->next;
-+
-+ free_entry (table, entry);
-+
-+ entry = next;
-+ }
-+ }
-+#else
-+ DBusHashEntry *entry;
-+ int i;
-+
-+ /* Free the entries in the table. */
-+ for (i = 0; i < table->n_buckets; i++)
-+ {
-+ entry = table->buckets[i];
-+ while (entry != NULL)
-+ {
-+ free_entry_data (table, entry);
-+
-+ entry = entry->next;
-+ }
-+ }
-+ /* We can do this very quickly with memory pools ;-) */
-+ _dbus_mem_pool_free (table->entry_pool);
-+#endif
-+
-+ /* Free the bucket array, if it was dynamically allocated. */
-+ if (table->buckets != table->static_buckets)
-+ dbus_free (table->buckets);
-+
-+ dbus_free (table);
-+ }
-+}
-+
-+static DBusHashEntry*
-+alloc_entry (DBusHashTable *table)
-+{
-+ DBusHashEntry *entry;
-+
-+ entry = _dbus_mem_pool_alloc (table->entry_pool);
-+
-+ return entry;
-+}
-+
-+static void
-+free_entry_data (DBusHashTable *table,
-+ DBusHashEntry *entry)
-+{
-+ if (table->free_key_function)
-+ (* table->free_key_function) (entry->key);
-+ if (table->free_value_function)
-+ (* table->free_value_function) (entry->value);
-+}
-+
-+static void
-+free_entry (DBusHashTable *table,
-+ DBusHashEntry *entry)
-+{
-+ free_entry_data (table, entry);
-+ _dbus_mem_pool_dealloc (table->entry_pool, entry);
-+}
-+
-+static void
-+remove_entry (DBusHashTable *table,
-+ DBusHashEntry **bucket,
-+ DBusHashEntry *entry)
-+{
-+ _dbus_assert (table != NULL);
-+ _dbus_assert (bucket != NULL);
-+ _dbus_assert (*bucket != NULL);
-+ _dbus_assert (entry != NULL);
-+
-+ if (*bucket == entry)
-+ *bucket = entry->next;
-+ else
-+ {
-+ DBusHashEntry *prev;
-+ prev = *bucket;
-+
-+ while (prev->next != entry)
-+ prev = prev->next;
-+
-+ _dbus_assert (prev != NULL);
-+
-+ prev->next = entry->next;
-+ }
-+
-+ table->n_entries -= 1;
-+ free_entry (table, entry);
-+}
-+
-+/**
-+ * Initializes a hash table iterator. To iterate over all entries in a
-+ * hash table, use the following code (the printf assumes a hash
-+ * from strings to strings obviously):
-+ *
-+ * @code
-+ * DBusHashIter iter;
-+ *
-+ * _dbus_hash_iter_init (table, &iter);
-+ * while (_dbus_hash_iter_next (&iter))
-+ * {
-+ * printf ("The first key is %s and value is %s\n",
-+ * _dbus_hash_iter_get_string_key (&iter),
-+ * _dbus_hash_iter_get_value (&iter));
-+ * }
-+ *
-+ *
-+ * @endcode
-+ *
-+ * The iterator is initialized pointing "one before" the first hash
-+ * entry. The first call to _dbus_hash_iter_next() moves it onto
-+ * the first valid entry or returns #FALSE if the hash table is
-+ * empty. Subsequent calls move to the next valid entry or return
-+ * #FALSE if there are no more entries.
-+ *
-+ * Note that it is guaranteed to be safe to remove a hash entry during
-+ * iteration, but it is not safe to add a hash entry.
-+ *
-+ * @param table the hash table to iterate over.
-+ * @param iter the iterator to initialize.
-+ */
-+void
-+_dbus_hash_iter_init (DBusHashTable *table,
-+ DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+
-+ _dbus_assert (sizeof (DBusHashIter) == sizeof (DBusRealHashIter));
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ real->table = table;
-+ real->bucket = NULL;
-+ real->entry = NULL;
-+ real->next_entry = NULL;
-+ real->next_bucket = 0;
-+ real->n_entries_on_init = table->n_entries;
-+}
-+
-+/**
-+ * Move the hash iterator forward one step, to the next hash entry.
-+ * The documentation for _dbus_hash_iter_init() explains in more
-+ * detail.
-+ *
-+ * @param iter the iterator to move forward.
-+ * @returns #FALSE if there are no more entries to move to.
-+ */
-+dbus_bool_t
-+_dbus_hash_iter_next (DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+
-+ _dbus_assert (sizeof (DBusHashIter) == sizeof (DBusRealHashIter));
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ /* if this assertion failed someone probably added hash entries
-+ * during iteration, which is bad.
-+ */
-+ _dbus_assert (real->n_entries_on_init >= real->table->n_entries);
-+
-+ /* Remember that real->entry may have been deleted */
-+
-+ while (real->next_entry == NULL)
-+ {
-+ if (real->next_bucket >= real->table->n_buckets)
-+ {
-+ /* invalidate iter and return false */
-+ real->entry = NULL;
-+ real->table = NULL;
-+ real->bucket = NULL;
-+ return FALSE;
-+ }
-+
-+ real->bucket = &(real->table->buckets[real->next_bucket]);
-+ real->next_entry = *(real->bucket);
-+ real->next_bucket += 1;
-+ }
-+
-+ _dbus_assert (real->next_entry != NULL);
-+ _dbus_assert (real->bucket != NULL);
-+
-+ real->entry = real->next_entry;
-+ real->next_entry = real->entry->next;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Removes the current entry from the hash table.
-+ * If a key_free_function or value_free_function
-+ * was provided to _dbus_hash_table_new(),
-+ * frees the key and/or value for this entry.
-+ *
-+ * @param iter the hash table iterator.
-+ */
-+void
-+_dbus_hash_iter_remove_entry (DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ _dbus_assert (real->table != NULL);
-+ _dbus_assert (real->entry != NULL);
-+ _dbus_assert (real->bucket != NULL);
-+
-+ remove_entry (real->table, real->bucket, real->entry);
-+
-+ real->entry = NULL; /* make it crash if you try to use this entry */
-+}
-+
-+/**
-+ * Gets the value of the current entry.
-+ *
-+ * @param iter the hash table iterator.
-+ */
-+void*
-+_dbus_hash_iter_get_value (DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ _dbus_assert (real->table != NULL);
-+ _dbus_assert (real->entry != NULL);
-+
-+ return real->entry->value;
-+}
-+
-+/**
-+ * Sets the value of the current entry.
-+ * If the hash table has a value_free_function
-+ * it will be used to free the previous value.
-+ * The hash table will own the passed-in value
-+ * (it will not be copied).
-+ *
-+ * @param iter the hash table iterator.
-+ * @param value the new value.
-+ */
-+void
-+_dbus_hash_iter_set_value (DBusHashIter *iter,
-+ void *value)
-+{
-+ DBusRealHashIter *real;
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ _dbus_assert (real->table != NULL);
-+ _dbus_assert (real->entry != NULL);
-+
-+ if (real->table->free_value_function && value != real->entry->value)
-+ (* real->table->free_value_function) (real->entry->value);
-+
-+ real->entry->value = value;
-+}
-+
-+/**
-+ * Gets the key for the current entry.
-+ * Only works for hash tables of type #DBUS_HASH_INT.
-+ *
-+ * @param iter the hash table iterator.
-+ */
-+int
-+_dbus_hash_iter_get_int_key (DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ _dbus_assert (real->table != NULL);
-+ _dbus_assert (real->entry != NULL);
-+
-+ return _DBUS_POINTER_TO_INT (real->entry->key);
-+}
-+
-+/**
-+ * Gets the key for the current entry.
-+ * Only works for hash tables of type #DBUS_HASH_ULONG.
-+ *
-+ * @param iter the hash table iterator.
-+ */
-+unsigned long
-+_dbus_hash_iter_get_ulong_key (DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ _dbus_assert (real->table != NULL);
-+ _dbus_assert (real->entry != NULL);
-+
-+ return (unsigned long) real->entry->key;
-+}
-+
-+/**
-+ * Gets the key for the current entry.
-+ * Only works for hash tables of type #DBUS_HASH_STRING
-+ * @param iter the hash table iterator.
-+ */
-+const char*
-+_dbus_hash_iter_get_string_key (DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ _dbus_assert (real->table != NULL);
-+ _dbus_assert (real->entry != NULL);
-+
-+ return real->entry->key;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Gets the key for the current entry.
-+ * Only works for hash tables of type #DBUS_HASH_TWO_STRINGS
-+ * @param iter the hash table iterator.
-+ */
-+const char*
-+_dbus_hash_iter_get_two_strings_key (DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ _dbus_assert (real->table != NULL);
-+ _dbus_assert (real->entry != NULL);
-+
-+ return real->entry->key;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * A low-level but efficient interface for manipulating the hash
-+ * table. It's efficient because you can get, set, and optionally
-+ * create the hash entry while only running the hash function one
-+ * time.
-+ *
-+ * Note that while calling _dbus_hash_iter_next() on the iterator
-+ * filled in by this function may work, it's completely
-+ * undefined which entries are after this iter and which
-+ * are before it. So it would be silly to iterate using this
-+ * iterator.
-+ *
-+ * If the hash entry is created, its value will be initialized
-+ * to all bits zero.
-+ *
-+ * #FALSE may be returned due to memory allocation failure, or
-+ * because create_if_not_found was #FALSE and the entry
-+ * did not exist.
-+ *
-+ * If create_if_not_found is #TRUE and the entry is created, the hash
-+ * table takes ownership of the key that's passed in.
-+ *
-+ * For a hash table of type #DBUS_HASH_INT, cast the int
-+ * key to the key parameter using #_DBUS_INT_TO_POINTER().
-+ *
-+ * @param table the hash table.
-+ * @param key the hash key.
-+ * @param create_if_not_found if #TRUE, create the entry if it didn't exist.
-+ * @param iter the iterator to initialize.
-+ * @returns #TRUE if the hash entry now exists (and the iterator is thus valid).
-+ */
-+dbus_bool_t
-+_dbus_hash_iter_lookup (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashIter *iter)
-+{
-+ DBusRealHashIter *real;
-+ DBusHashEntry *entry;
-+ DBusHashEntry **bucket;
-+
-+ _dbus_assert (sizeof (DBusHashIter) == sizeof (DBusRealHashIter));
-+
-+ real = (DBusRealHashIter*) iter;
-+
-+ entry = (* table->find_function) (table, key, create_if_not_found, &bucket, NULL);
-+
-+ if (entry == NULL)
-+ return FALSE;
-+
-+ real->table = table;
-+ real->bucket = bucket;
-+ real->entry = entry;
-+ real->next_entry = entry->next;
-+ real->next_bucket = (bucket - table->buckets) + 1;
-+ real->n_entries_on_init = table->n_entries;
-+
-+ _dbus_assert (&(table->buckets[real->next_bucket-1]) == real->bucket);
-+
-+ return TRUE;
-+}
-+
-+static void
-+add_allocated_entry (DBusHashTable *table,
-+ DBusHashEntry *entry,
-+ unsigned int idx,
-+ void *key,
-+ DBusHashEntry ***bucket)
-+{
-+ DBusHashEntry **b;
-+
-+ entry->key = key;
-+
-+ b = &(table->buckets[idx]);
-+ entry->next = *b;
-+ *b = entry;
-+
-+ if (bucket)
-+ *bucket = b;
-+
-+ table->n_entries += 1;
-+
-+ /* note we ONLY rebuild when ADDING - because you can iterate over a
-+ * table and remove entries safely.
-+ */
-+ if (table->n_entries >= table->hi_rebuild_size ||
-+ table->n_entries < table->lo_rebuild_size)
-+ rebuild_table (table);
-+}
-+
-+static DBusHashEntry*
-+add_entry (DBusHashTable *table,
-+ unsigned int idx,
-+ void *key,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated)
-+{
-+ DBusHashEntry *entry;
-+
-+ if (preallocated == NULL)
-+ {
-+ entry = alloc_entry (table);
-+ if (entry == NULL)
-+ {
-+ if (bucket)
-+ *bucket = NULL;
-+ return NULL;
-+ }
-+ }
-+ else
-+ {
-+ entry = (DBusHashEntry*) preallocated;
-+ }
-+
-+ add_allocated_entry (table, entry, idx, key, bucket);
-+
-+ return entry;
-+}
-+
-+/* This is g_str_hash from GLib which was
-+ * extensively discussed/tested/profiled
-+ */
-+static unsigned int
-+string_hash (const char *str)
-+{
-+ const char *p = str;
-+ unsigned int h = *p;
-+
-+ if (h)
-+ for (p += 1; *p != '\0'; p++)
-+ h = (h << 5) - h + *p;
-+
-+ return h;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* This hashes a memory block with two nul-terminated strings
-+ * in it, used in dbus-object-registry.c at the moment.
-+ */
-+static unsigned int
-+two_strings_hash (const char *str)
-+{
-+ const char *p = str;
-+ unsigned int h = *p;
-+
-+ if (h)
-+ for (p += 1; *p != '\0'; p++)
-+ h = (h << 5) - h + *p;
-+
-+ for (p += 1; *p != '\0'; p++)
-+ h = (h << 5) - h + *p;
-+
-+ return h;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/** Key comparison function */
-+typedef int (* KeyCompareFunc) (const void *key_a, const void *key_b);
-+
-+static DBusHashEntry*
-+find_generic_function (DBusHashTable *table,
-+ void *key,
-+ unsigned int idx,
-+ KeyCompareFunc compare_func,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated)
-+{
-+ DBusHashEntry *entry;
-+
-+ if (bucket)
-+ *bucket = NULL;
-+
-+ /* Search all of the entries in this bucket. */
-+ entry = table->buckets[idx];
-+ while (entry != NULL)
-+ {
-+ if ((compare_func == NULL && key == entry->key) ||
-+ (compare_func != NULL && (* compare_func) (key, entry->key) == 0))
-+ {
-+ if (bucket)
-+ *bucket = &(table->buckets[idx]);
-+
-+ if (preallocated)
-+ _dbus_hash_table_free_preallocated_entry (table, preallocated);
-+
-+ return entry;
-+ }
-+
-+ entry = entry->next;
-+ }
-+
-+ if (create_if_not_found)
-+ entry = add_entry (table, idx, key, bucket, preallocated);
-+ else if (preallocated)
-+ _dbus_hash_table_free_preallocated_entry (table, preallocated);
-+
-+ return entry;
-+}
-+
-+static DBusHashEntry*
-+find_string_function (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated)
-+{
-+ unsigned int idx;
-+
-+ idx = string_hash (key) & table->mask;
-+
-+ return find_generic_function (table, key, idx,
-+ (KeyCompareFunc) strcmp, create_if_not_found, bucket,
-+ preallocated);
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+static int
-+two_strings_cmp (const char *a,
-+ const char *b)
-+{
-+ size_t len_a;
-+ size_t len_b;
-+ int res;
-+
-+ res = strcmp (a, b);
-+ if (res != 0)
-+ return res;
-+
-+ len_a = strlen (a);
-+ len_b = strlen (b);
-+
-+ return strcmp (a + len_a + 1, b + len_b + 1);
-+}
-+#endif
-+
-+#ifdef DBUS_BUILD_TESTS
-+static DBusHashEntry*
-+find_two_strings_function (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated)
-+{
-+ unsigned int idx;
-+
-+ idx = two_strings_hash (key) & table->mask;
-+
-+ return find_generic_function (table, key, idx,
-+ (KeyCompareFunc) two_strings_cmp, create_if_not_found, bucket,
-+ preallocated);
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+static DBusHashEntry*
-+find_direct_function (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashEntry ***bucket,
-+ DBusPreallocatedHash *preallocated)
-+{
-+ unsigned int idx;
-+
-+ idx = RANDOM_INDEX (table, key) & table->mask;
-+
-+
-+ return find_generic_function (table, key, idx,
-+ NULL, create_if_not_found, bucket,
-+ preallocated);
-+}
-+
-+static void
-+rebuild_table (DBusHashTable *table)
-+{
-+ int old_size;
-+ int new_buckets;
-+ DBusHashEntry **old_buckets;
-+ DBusHashEntry **old_chain;
-+ DBusHashEntry *entry;
-+ dbus_bool_t growing;
-+
-+ /*
-+ * Allocate and initialize the new bucket array, and set up
-+ * hashing constants for new array size.
-+ */
-+
-+ growing = table->n_entries >= table->hi_rebuild_size;
-+
-+ old_size = table->n_buckets;
-+ old_buckets = table->buckets;
-+
-+ if (growing)
-+ {
-+ /* overflow paranoia */
-+ if (table->n_buckets < _DBUS_INT_MAX / 4 &&
-+ table->down_shift >= 0)
-+ new_buckets = table->n_buckets * 4;
-+ else
-+ return; /* can't grow anymore */
-+ }
-+ else
-+ {
-+ new_buckets = table->n_buckets / 4;
-+ if (new_buckets < DBUS_SMALL_HASH_TABLE)
-+ return; /* don't bother shrinking this far */
-+ }
-+
-+ table->buckets = dbus_new0 (DBusHashEntry*, new_buckets);
-+ if (table->buckets == NULL)
-+ {
-+ /* out of memory, yay - just don't reallocate, the table will
-+ * still work, albeit more slowly.
-+ */
-+ table->buckets = old_buckets;
-+ return;
-+ }
-+
-+ table->n_buckets = new_buckets;
-+
-+ if (growing)
-+ {
-+ table->lo_rebuild_size = table->hi_rebuild_size;
-+ table->hi_rebuild_size *= 4;
-+
-+ table->down_shift -= 2; /* keep 2 more high bits */
-+ table->mask = (table->mask << 2) + 3; /* keep 2 more high bits */
-+ }
-+ else
-+ {
-+ table->hi_rebuild_size = table->lo_rebuild_size;
-+ table->lo_rebuild_size /= 4;
-+
-+ table->down_shift += 2; /* keep 2 fewer high bits */
-+ table->mask = table->mask >> 2; /* keep 2 fewer high bits */
-+ }
-+
-+#if 0
-+ printf ("%s table to lo = %d hi = %d downshift = %d mask = 0x%x\n",
-+ growing ? "GROW" : "SHRINK",
-+ table->lo_rebuild_size,
-+ table->hi_rebuild_size,
-+ table->down_shift,
-+ table->mask);
-+#endif
-+
-+ _dbus_assert (table->lo_rebuild_size >= 0);
-+ _dbus_assert (table->hi_rebuild_size > table->lo_rebuild_size);
-+ _dbus_assert (table->mask != 0);
-+ /* the mask is essentially the max index */
-+ _dbus_assert (table->mask < table->n_buckets);
-+
-+ /*
-+ * Rehash all of the existing entries into the new bucket array.
-+ */
-+
-+ for (old_chain = old_buckets; old_size > 0; old_size--, old_chain++)
-+ {
-+ for (entry = *old_chain; entry != NULL; entry = *old_chain)
-+ {
-+ unsigned int idx;
-+ DBusHashEntry **bucket;
-+
-+ *old_chain = entry->next;
-+ switch (table->key_type)
-+ {
-+ case DBUS_HASH_STRING:
-+ idx = string_hash (entry->key) & table->mask;
-+ break;
-+ case DBUS_HASH_TWO_STRINGS:
-+#ifdef DBUS_BUILD_TESTS
-+ idx = two_strings_hash (entry->key) & table->mask;
-+#else
-+ idx = 0;
-+ _dbus_assert_not_reached ("two-strings is not enabled");
-+#endif
-+ break;
-+ case DBUS_HASH_INT:
-+ case DBUS_HASH_ULONG:
-+ case DBUS_HASH_POINTER:
-+ idx = RANDOM_INDEX (table, entry->key);
-+ break;
-+ default:
-+ idx = 0;
-+ _dbus_assert_not_reached ("Unknown hash table type");
-+ break;
-+ }
-+
-+ bucket = &(table->buckets[idx]);
-+ entry->next = *bucket;
-+ *bucket = entry;
-+ }
-+ }
-+
-+ /* Free the old bucket array, if it was dynamically allocated. */
-+
-+ if (old_buckets != table->static_buckets)
-+ dbus_free (old_buckets);
-+}
-+
-+/**
-+ * Looks up the value for a given string in a hash table
-+ * of type #DBUS_HASH_STRING. Returns %NULL if the value
-+ * is not present. (A not-present entry is indistinguishable
-+ * from an entry with a value of %NULL.)
-+ * @param table the hash table.
-+ * @param key the string to look up.
-+ * @returns the value of the hash entry.
-+ */
-+void*
-+_dbus_hash_table_lookup_string (DBusHashTable *table,
-+ const char *key)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_STRING);
-+
-+ entry = (* table->find_function) (table, (char*) key, FALSE, NULL, NULL);
-+
-+ if (entry)
-+ return entry->value;
-+ else
-+ return NULL;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Looks up the value for a given string in a hash table
-+ * of type #DBUS_HASH_TWO_STRINGS. Returns %NULL if the value
-+ * is not present. (A not-present entry is indistinguishable
-+ * from an entry with a value of %NULL.)
-+ * @param table the hash table.
-+ * @param key the string to look up.
-+ * @returns the value of the hash entry.
-+ */
-+void*
-+_dbus_hash_table_lookup_two_strings (DBusHashTable *table,
-+ const char *key)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_TWO_STRINGS);
-+
-+ entry = (* table->find_function) (table, (char*) key, FALSE, NULL, NULL);
-+
-+ if (entry)
-+ return entry->value;
-+ else
-+ return NULL;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Looks up the value for a given integer in a hash table
-+ * of type #DBUS_HASH_INT. Returns %NULL if the value
-+ * is not present. (A not-present entry is indistinguishable
-+ * from an entry with a value of %NULL.)
-+ * @param table the hash table.
-+ * @param key the integer to look up.
-+ * @returns the value of the hash entry.
-+ */
-+void*
-+_dbus_hash_table_lookup_int (DBusHashTable *table,
-+ int key)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_INT);
-+
-+ entry = (* table->find_function) (table, _DBUS_INT_TO_POINTER (key), FALSE, NULL, NULL);
-+
-+ if (entry)
-+ return entry->value;
-+ else
-+ return NULL;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* disabled since it's only used for testing */
-+/**
-+ * Looks up the value for a given integer in a hash table
-+ * of type #DBUS_HASH_POINTER. Returns %NULL if the value
-+ * is not present. (A not-present entry is indistinguishable
-+ * from an entry with a value of %NULL.)
-+ * @param table the hash table.
-+ * @param key the integer to look up.
-+ * @returns the value of the hash entry.
-+ */
-+void*
-+_dbus_hash_table_lookup_pointer (DBusHashTable *table,
-+ void *key)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_POINTER);
-+
-+ entry = (* table->find_function) (table, key, FALSE, NULL, NULL);
-+
-+ if (entry)
-+ return entry->value;
-+ else
-+ return NULL;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Looks up the value for a given integer in a hash table
-+ * of type #DBUS_HASH_ULONG. Returns %NULL if the value
-+ * is not present. (A not-present entry is indistinguishable
-+ * from an entry with a value of %NULL.)
-+ * @param table the hash table.
-+ * @param key the integer to look up.
-+ * @returns the value of the hash entry.
-+ */
-+void*
-+_dbus_hash_table_lookup_ulong (DBusHashTable *table,
-+ unsigned long key)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_ULONG);
-+
-+ entry = (* table->find_function) (table, (void*) key, FALSE, NULL, NULL);
-+
-+ if (entry)
-+ return entry->value;
-+ else
-+ return NULL;
-+}
-+
-+/**
-+ * Removes the hash entry for the given key. If no hash entry
-+ * for the key exists, does nothing.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash key.
-+ * @returns #TRUE if the entry existed
-+ */
-+dbus_bool_t
-+_dbus_hash_table_remove_string (DBusHashTable *table,
-+ const char *key)
-+{
-+ DBusHashEntry *entry;
-+ DBusHashEntry **bucket;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_STRING);
-+
-+ entry = (* table->find_function) (table, (char*) key, FALSE, &bucket, NULL);
-+
-+ if (entry)
-+ {
-+ remove_entry (table, bucket, entry);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Removes the hash entry for the given key. If no hash entry
-+ * for the key exists, does nothing.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash key.
-+ * @returns #TRUE if the entry existed
-+ */
-+dbus_bool_t
-+_dbus_hash_table_remove_two_strings (DBusHashTable *table,
-+ const char *key)
-+{
-+ DBusHashEntry *entry;
-+ DBusHashEntry **bucket;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_TWO_STRINGS);
-+
-+ entry = (* table->find_function) (table, (char*) key, FALSE, &bucket, NULL);
-+
-+ if (entry)
-+ {
-+ remove_entry (table, bucket, entry);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Removes the hash entry for the given key. If no hash entry
-+ * for the key exists, does nothing.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash key.
-+ * @returns #TRUE if the entry existed
-+ */
-+dbus_bool_t
-+_dbus_hash_table_remove_int (DBusHashTable *table,
-+ int key)
-+{
-+ DBusHashEntry *entry;
-+ DBusHashEntry **bucket;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_INT);
-+
-+ entry = (* table->find_function) (table, _DBUS_INT_TO_POINTER (key), FALSE, &bucket, NULL);
-+
-+ if (entry)
-+ {
-+ remove_entry (table, bucket, entry);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* disabled since it's only used for testing */
-+/**
-+ * Removes the hash entry for the given key. If no hash entry
-+ * for the key exists, does nothing.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash key.
-+ * @returns #TRUE if the entry existed
-+ */
-+dbus_bool_t
-+_dbus_hash_table_remove_pointer (DBusHashTable *table,
-+ void *key)
-+{
-+ DBusHashEntry *entry;
-+ DBusHashEntry **bucket;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_POINTER);
-+
-+ entry = (* table->find_function) (table, key, FALSE, &bucket, NULL);
-+
-+ if (entry)
-+ {
-+ remove_entry (table, bucket, entry);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Removes the hash entry for the given key. If no hash entry
-+ * for the key exists, does nothing.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash key.
-+ * @returns #TRUE if the entry existed
-+ */
-+dbus_bool_t
-+_dbus_hash_table_remove_ulong (DBusHashTable *table,
-+ unsigned long key)
-+{
-+ DBusHashEntry *entry;
-+ DBusHashEntry **bucket;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_ULONG);
-+
-+ entry = (* table->find_function) (table, (void*) key, FALSE, &bucket, NULL);
-+
-+ if (entry)
-+ {
-+ remove_entry (table, bucket, entry);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Creates a hash entry with the given key and value.
-+ * The key and value are not copied; they are stored
-+ * in the hash table by reference. If an entry with the
-+ * given key already exists, the previous key and value
-+ * are overwritten (and freed if the hash table has
-+ * a key_free_function and/or value_free_function).
-+ *
-+ * Returns #FALSE if memory for the new hash entry
-+ * can't be allocated.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash entry key.
-+ * @param value the hash entry value.
-+ */
-+dbus_bool_t
-+_dbus_hash_table_insert_string (DBusHashTable *table,
-+ char *key,
-+ void *value)
-+{
-+ DBusPreallocatedHash *preallocated;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_STRING);
-+
-+ preallocated = _dbus_hash_table_preallocate_entry (table);
-+ if (preallocated == NULL)
-+ return FALSE;
-+
-+ _dbus_hash_table_insert_string_preallocated (table, preallocated,
-+ key, value);
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Creates a hash entry with the given key and value.
-+ * The key and value are not copied; they are stored
-+ * in the hash table by reference. If an entry with the
-+ * given key already exists, the previous key and value
-+ * are overwritten (and freed if the hash table has
-+ * a key_free_function and/or value_free_function).
-+ *
-+ * Returns #FALSE if memory for the new hash entry
-+ * can't be allocated.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash entry key.
-+ * @param value the hash entry value.
-+ */
-+dbus_bool_t
-+_dbus_hash_table_insert_two_strings (DBusHashTable *table,
-+ char *key,
-+ void *value)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_TWO_STRINGS);
-+
-+ entry = (* table->find_function) (table, key, TRUE, NULL, NULL);
-+
-+ if (entry == NULL)
-+ return FALSE; /* no memory */
-+
-+ if (table->free_key_function && entry->key != key)
-+ (* table->free_key_function) (entry->key);
-+
-+ if (table->free_value_function && entry->value != value)
-+ (* table->free_value_function) (entry->value);
-+
-+ entry->key = key;
-+ entry->value = value;
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Creates a hash entry with the given key and value.
-+ * The key and value are not copied; they are stored
-+ * in the hash table by reference. If an entry with the
-+ * given key already exists, the previous key and value
-+ * are overwritten (and freed if the hash table has
-+ * a key_free_function and/or value_free_function).
-+ *
-+ * Returns #FALSE if memory for the new hash entry
-+ * can't be allocated.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash entry key.
-+ * @param value the hash entry value.
-+ */
-+dbus_bool_t
-+_dbus_hash_table_insert_int (DBusHashTable *table,
-+ int key,
-+ void *value)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_INT);
-+
-+ entry = (* table->find_function) (table, _DBUS_INT_TO_POINTER (key), TRUE, NULL, NULL);
-+
-+ if (entry == NULL)
-+ return FALSE; /* no memory */
-+
-+ if (table->free_key_function && entry->key != _DBUS_INT_TO_POINTER (key))
-+ (* table->free_key_function) (entry->key);
-+
-+ if (table->free_value_function && entry->value != value)
-+ (* table->free_value_function) (entry->value);
-+
-+ entry->key = _DBUS_INT_TO_POINTER (key);
-+ entry->value = value;
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* disabled since it's only used for testing */
-+/**
-+ * Creates a hash entry with the given key and value.
-+ * The key and value are not copied; they are stored
-+ * in the hash table by reference. If an entry with the
-+ * given key already exists, the previous key and value
-+ * are overwritten (and freed if the hash table has
-+ * a key_free_function and/or value_free_function).
-+ *
-+ * Returns #FALSE if memory for the new hash entry
-+ * can't be allocated.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash entry key.
-+ * @param value the hash entry value.
-+ */
-+dbus_bool_t
-+_dbus_hash_table_insert_pointer (DBusHashTable *table,
-+ void *key,
-+ void *value)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_POINTER);
-+
-+ entry = (* table->find_function) (table, key, TRUE, NULL, NULL);
-+
-+ if (entry == NULL)
-+ return FALSE; /* no memory */
-+
-+ if (table->free_key_function && entry->key != key)
-+ (* table->free_key_function) (entry->key);
-+
-+ if (table->free_value_function && entry->value != value)
-+ (* table->free_value_function) (entry->value);
-+
-+ entry->key = key;
-+ entry->value = value;
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Creates a hash entry with the given key and value.
-+ * The key and value are not copied; they are stored
-+ * in the hash table by reference. If an entry with the
-+ * given key already exists, the previous key and value
-+ * are overwritten (and freed if the hash table has
-+ * a key_free_function and/or value_free_function).
-+ *
-+ * Returns #FALSE if memory for the new hash entry
-+ * can't be allocated.
-+ *
-+ * @param table the hash table.
-+ * @param key the hash entry key.
-+ * @param value the hash entry value.
-+ */
-+dbus_bool_t
-+_dbus_hash_table_insert_ulong (DBusHashTable *table,
-+ unsigned long key,
-+ void *value)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_ULONG);
-+
-+ entry = (* table->find_function) (table, (void*) key, TRUE, NULL, NULL);
-+
-+ if (entry == NULL)
-+ return FALSE; /* no memory */
-+
-+ if (table->free_key_function && entry->key != (void*) key)
-+ (* table->free_key_function) (entry->key);
-+
-+ if (table->free_value_function && entry->value != value)
-+ (* table->free_value_function) (entry->value);
-+
-+ entry->key = (void*) key;
-+ entry->value = value;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Preallocate an opaque data blob that allows us to insert into the
-+ * hash table at a later time without allocating any memory.
-+ *
-+ * @param table the hash table
-+ * @returns the preallocated data, or #NULL if no memory
-+ */
-+DBusPreallocatedHash*
-+_dbus_hash_table_preallocate_entry (DBusHashTable *table)
-+{
-+ DBusHashEntry *entry;
-+
-+ entry = alloc_entry (table);
-+
-+ return (DBusPreallocatedHash*) entry;
-+}
-+
-+/**
-+ * Frees an opaque DBusPreallocatedHash that was *not* used
-+ * in order to insert into the hash table.
-+ *
-+ * @param table the hash table
-+ * @param preallocated the preallocated data
-+ */
-+void
-+_dbus_hash_table_free_preallocated_entry (DBusHashTable *table,
-+ DBusPreallocatedHash *preallocated)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (preallocated != NULL);
-+
-+ entry = (DBusHashEntry*) preallocated;
-+
-+ /* Don't use free_entry(), since this entry has no key/data */
-+ _dbus_mem_pool_dealloc (table->entry_pool, entry);
-+}
-+
-+/**
-+ * Inserts a string-keyed entry into the hash table, using a
-+ * preallocated data block from
-+ * _dbus_hash_table_preallocate_entry(). This function cannot fail due
-+ * to lack of memory. The DBusPreallocatedHash object is consumed and
-+ * should not be reused or freed. Otherwise this function works
-+ * just like _dbus_hash_table_insert_string().
-+ *
-+ * @param table the hash table
-+ * @param preallocated the preallocated data
-+ * @param key the hash key
-+ * @param value the value
-+ */
-+void
-+_dbus_hash_table_insert_string_preallocated (DBusHashTable *table,
-+ DBusPreallocatedHash *preallocated,
-+ char *key,
-+ void *value)
-+{
-+ DBusHashEntry *entry;
-+
-+ _dbus_assert (table->key_type == DBUS_HASH_STRING);
-+ _dbus_assert (preallocated != NULL);
-+
-+ entry = (* table->find_function) (table, key, TRUE, NULL, preallocated);
-+
-+ _dbus_assert (entry != NULL);
-+
-+ if (table->free_key_function && entry->key != key)
-+ (* table->free_key_function) (entry->key);
-+
-+ if (table->free_value_function && entry->value != value)
-+ (* table->free_value_function) (entry->value);
-+
-+ entry->key = key;
-+ entry->value = value;
-+}
-+
-+/**
-+ * Gets the number of hash entries in a hash table.
-+ *
-+ * @param table the hash table.
-+ * @returns the number of entries in the table.
-+ */
-+int
-+_dbus_hash_table_get_n_entries (DBusHashTable *table)
-+{
-+ return table->n_entries;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+/* If you're wondering why the hash table test takes
-+ * forever to run, it's because we call this function
-+ * in inner loops thus making things quadratic.
-+ */
-+static int
-+count_entries (DBusHashTable *table)
-+{
-+ DBusHashIter iter;
-+ int count;
-+
-+ count = 0;
-+ _dbus_hash_iter_init (table, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ ++count;
-+
-+ _dbus_assert (count == _dbus_hash_table_get_n_entries (table));
-+
-+ return count;
-+}
-+
-+/* Copy the foo\0bar\0 double string thing */
-+static char*
-+_dbus_strdup2 (const char *str)
-+{
-+ size_t len;
-+ char *copy;
-+
-+ if (str == NULL)
-+ return NULL;
-+
-+ len = strlen (str);
-+ len += strlen ((str + len + 1));
-+
-+ copy = dbus_malloc (len + 2);
-+ if (copy == NULL)
-+ return NULL;
-+
-+ memcpy (copy, str, len + 2);
-+
-+ return copy;
-+}
-+
-+/**
-+ * @ingroup DBusHashTableInternals
-+ * Unit test for DBusHashTable
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_hash_test (void)
-+{
-+ int i;
-+ DBusHashTable *table1;
-+ DBusHashTable *table2;
-+ DBusHashTable *table3;
-+ DBusHashTable *table4;
-+ DBusHashIter iter;
-+#define N_HASH_KEYS 5000
-+ char **keys;
-+ dbus_bool_t ret = FALSE;
-+
-+ keys = dbus_new (char *, N_HASH_KEYS);
-+ if (keys == NULL)
-+ _dbus_assert_not_reached ("no memory");
-+
-+ for (i = 0; i < N_HASH_KEYS; i++)
-+ {
-+ keys[i] = dbus_malloc (128);
-+
-+ if (keys[i] == NULL)
-+ _dbus_assert_not_reached ("no memory");
-+ }
-+
-+ printf ("Computing test hash keys...\n");
-+ i = 0;
-+ while (i < N_HASH_KEYS)
-+ {
-+ int len;
-+
-+ /* all the hash keys are TWO_STRINGS, but
-+ * then we can also use those as regular strings.
-+ */
-+
-+ len = sprintf (keys[i], "Hash key %d", i);
-+ sprintf (keys[i] + len + 1, "Two string %d", i);
-+ _dbus_assert (*(keys[i] + len) == '\0');
-+ _dbus_assert (*(keys[i] + len + 1) != '\0');
-+ ++i;
-+ }
-+ printf ("... done.\n");
-+
-+ table1 = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ dbus_free, dbus_free);
-+ if (table1 == NULL)
-+ goto out;
-+
-+ table2 = _dbus_hash_table_new (DBUS_HASH_INT,
-+ NULL, dbus_free);
-+ if (table2 == NULL)
-+ goto out;
-+
-+ table3 = _dbus_hash_table_new (DBUS_HASH_ULONG,
-+ NULL, dbus_free);
-+ if (table3 == NULL)
-+ goto out;
-+
-+ table4 = _dbus_hash_table_new (DBUS_HASH_TWO_STRINGS,
-+ dbus_free, dbus_free);
-+ if (table4 == NULL)
-+ goto out;
-+
-+
-+ /* Insert and remove a bunch of stuff, counting the table in between
-+ * to be sure it's not broken and that iteration works
-+ */
-+ i = 0;
-+ while (i < 3000)
-+ {
-+ void *value;
-+ char *key;
-+
-+ key = _dbus_strdup (keys[i]);
-+ if (key == NULL)
-+ goto out;
-+ value = _dbus_strdup ("Value!");
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_table_insert_string (table1,
-+ key, value))
-+ goto out;
-+
-+ value = _dbus_strdup (keys[i]);
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_table_insert_int (table2,
-+ i, value))
-+ goto out;
-+
-+ value = _dbus_strdup (keys[i]);
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_table_insert_ulong (table3,
-+ i, value))
-+ goto out;
-+
-+ key = _dbus_strdup2 (keys[i]);
-+ if (key == NULL)
-+ goto out;
-+ value = _dbus_strdup ("Value!");
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_table_insert_two_strings (table4,
-+ key, value))
-+ goto out;
-+
-+ _dbus_assert (count_entries (table1) == i + 1);
-+ _dbus_assert (count_entries (table2) == i + 1);
-+ _dbus_assert (count_entries (table3) == i + 1);
-+ _dbus_assert (count_entries (table4) == i + 1);
-+
-+ value = _dbus_hash_table_lookup_string (table1, keys[i]);
-+ _dbus_assert (value != NULL);
-+ _dbus_assert (strcmp (value, "Value!") == 0);
-+
-+ value = _dbus_hash_table_lookup_int (table2, i);
-+ _dbus_assert (value != NULL);
-+ _dbus_assert (strcmp (value, keys[i]) == 0);
-+
-+ value = _dbus_hash_table_lookup_ulong (table3, i);
-+ _dbus_assert (value != NULL);
-+ _dbus_assert (strcmp (value, keys[i]) == 0);
-+
-+ value = _dbus_hash_table_lookup_two_strings (table4, keys[i]);
-+ _dbus_assert (value != NULL);
-+ _dbus_assert (strcmp (value, "Value!") == 0);
-+
-+ ++i;
-+ }
-+
-+ --i;
-+ while (i >= 0)
-+ {
-+ _dbus_hash_table_remove_string (table1,
-+ keys[i]);
-+
-+ _dbus_hash_table_remove_int (table2, i);
-+
-+ _dbus_hash_table_remove_ulong (table3, i);
-+
-+ _dbus_hash_table_remove_two_strings (table4,
-+ keys[i]);
-+
-+ _dbus_assert (count_entries (table1) == i);
-+ _dbus_assert (count_entries (table2) == i);
-+ _dbus_assert (count_entries (table3) == i);
-+ _dbus_assert (count_entries (table4) == i);
-+
-+ --i;
-+ }
-+
-+ _dbus_hash_table_ref (table1);
-+ _dbus_hash_table_ref (table2);
-+ _dbus_hash_table_ref (table3);
-+ _dbus_hash_table_ref (table4);
-+ _dbus_hash_table_unref (table1);
-+ _dbus_hash_table_unref (table2);
-+ _dbus_hash_table_unref (table3);
-+ _dbus_hash_table_unref (table4);
-+ _dbus_hash_table_unref (table1);
-+ _dbus_hash_table_unref (table2);
-+ _dbus_hash_table_unref (table3);
-+ _dbus_hash_table_unref (table4);
-+ table3 = NULL;
-+
-+ /* Insert a bunch of stuff then check
-+ * that iteration works correctly (finds the right
-+ * values, iter_set_value works, etc.)
-+ */
-+ table1 = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ dbus_free, dbus_free);
-+ if (table1 == NULL)
-+ goto out;
-+
-+ table2 = _dbus_hash_table_new (DBUS_HASH_INT,
-+ NULL, dbus_free);
-+ if (table2 == NULL)
-+ goto out;
-+
-+ i = 0;
-+ while (i < 5000)
-+ {
-+ char *key;
-+ void *value;
-+
-+ key = _dbus_strdup (keys[i]);
-+ if (key == NULL)
-+ goto out;
-+ value = _dbus_strdup ("Value!");
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_table_insert_string (table1,
-+ key, value))
-+ goto out;
-+
-+ value = _dbus_strdup (keys[i]);
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_table_insert_int (table2,
-+ i, value))
-+ goto out;
-+
-+ _dbus_assert (count_entries (table1) == i + 1);
-+ _dbus_assert (count_entries (table2) == i + 1);
-+
-+ ++i;
-+ }
-+
-+ _dbus_hash_iter_init (table1, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ const char *key;
-+ void *value;
-+
-+ key = _dbus_hash_iter_get_string_key (&iter);
-+ value = _dbus_hash_iter_get_value (&iter);
-+
-+ _dbus_assert (_dbus_hash_table_lookup_string (table1, key) == value);
-+
-+ value = _dbus_strdup ("Different value!");
-+ if (value == NULL)
-+ goto out;
-+
-+ _dbus_hash_iter_set_value (&iter, value);
-+
-+ _dbus_assert (_dbus_hash_table_lookup_string (table1, key) == value);
-+ }
-+
-+ _dbus_hash_iter_init (table1, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ _dbus_hash_iter_remove_entry (&iter);
-+ _dbus_assert (count_entries (table1) == i - 1);
-+ --i;
-+ }
-+
-+ _dbus_hash_iter_init (table2, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ int key;
-+ void *value;
-+
-+ key = _dbus_hash_iter_get_int_key (&iter);
-+ value = _dbus_hash_iter_get_value (&iter);
-+
-+ _dbus_assert (_dbus_hash_table_lookup_int (table2, key) == value);
-+
-+ value = _dbus_strdup ("Different value!");
-+ if (value == NULL)
-+ goto out;
-+
-+ _dbus_hash_iter_set_value (&iter, value);
-+
-+ _dbus_assert (_dbus_hash_table_lookup_int (table2, key) == value);
-+ }
-+
-+ i = count_entries (table2);
-+ _dbus_hash_iter_init (table2, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ _dbus_hash_iter_remove_entry (&iter);
-+ _dbus_assert (count_entries (table2) + 1 == i);
-+ --i;
-+ }
-+
-+ /* add/remove interleaved, to check that we grow/shrink the table
-+ * appropriately
-+ */
-+ i = 0;
-+ while (i < 1000)
-+ {
-+ char *key;
-+ void *value;
-+
-+ key = _dbus_strdup (keys[i]);
-+ if (key == NULL)
-+ goto out;
-+
-+ value = _dbus_strdup ("Value!");
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_table_insert_string (table1,
-+ key, value))
-+ goto out;
-+
-+ ++i;
-+ }
-+
-+ --i;
-+ while (i >= 0)
-+ {
-+ char *key;
-+ void *value;
-+
-+ key = _dbus_strdup (keys[i]);
-+ if (key == NULL)
-+ goto out;
-+ value = _dbus_strdup ("Value!");
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_table_remove_string (table1, keys[i]))
-+ goto out;
-+
-+ if (!_dbus_hash_table_insert_string (table1,
-+ key, value))
-+ goto out;
-+
-+ if (!_dbus_hash_table_remove_string (table1, keys[i]))
-+ goto out;
-+
-+ _dbus_assert (_dbus_hash_table_get_n_entries (table1) == i);
-+
-+ --i;
-+ }
-+
-+ /* nuke these tables */
-+ _dbus_hash_table_unref (table1);
-+ _dbus_hash_table_unref (table2);
-+
-+
-+ /* Now do a bunch of things again using _dbus_hash_iter_lookup() to
-+ * be sure that interface works.
-+ */
-+ table1 = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ dbus_free, dbus_free);
-+ if (table1 == NULL)
-+ goto out;
-+
-+ table2 = _dbus_hash_table_new (DBUS_HASH_INT,
-+ NULL, dbus_free);
-+ if (table2 == NULL)
-+ goto out;
-+
-+ i = 0;
-+ while (i < 3000)
-+ {
-+ void *value;
-+ char *key;
-+
-+ key = _dbus_strdup (keys[i]);
-+ if (key == NULL)
-+ goto out;
-+ value = _dbus_strdup ("Value!");
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_iter_lookup (table1,
-+ key, TRUE, &iter))
-+ goto out;
-+ _dbus_assert (_dbus_hash_iter_get_value (&iter) == NULL);
-+ _dbus_hash_iter_set_value (&iter, value);
-+
-+ value = _dbus_strdup (keys[i]);
-+ if (value == NULL)
-+ goto out;
-+
-+ if (!_dbus_hash_iter_lookup (table2,
-+ _DBUS_INT_TO_POINTER (i), TRUE, &iter))
-+ goto out;
-+ _dbus_assert (_dbus_hash_iter_get_value (&iter) == NULL);
-+ _dbus_hash_iter_set_value (&iter, value);
-+
-+ _dbus_assert (count_entries (table1) == i + 1);
-+ _dbus_assert (count_entries (table2) == i + 1);
-+
-+ if (!_dbus_hash_iter_lookup (table1, keys[i], FALSE, &iter))
-+ goto out;
-+
-+ value = _dbus_hash_iter_get_value (&iter);
-+ _dbus_assert (value != NULL);
-+ _dbus_assert (strcmp (value, "Value!") == 0);
-+
-+ /* Iterate just to be sure it works, though
-+ * it's a stupid thing to do
-+ */
-+ while (_dbus_hash_iter_next (&iter))
-+ ;
-+
-+ if (!_dbus_hash_iter_lookup (table2, _DBUS_INT_TO_POINTER (i), FALSE, &iter))
-+ goto out;
-+
-+ value = _dbus_hash_iter_get_value (&iter);
-+ _dbus_assert (value != NULL);
-+ _dbus_assert (strcmp (value, keys[i]) == 0);
-+
-+ /* Iterate just to be sure it works, though
-+ * it's a stupid thing to do
-+ */
-+ while (_dbus_hash_iter_next (&iter))
-+ ;
-+
-+ ++i;
-+ }
-+
-+ --i;
-+ while (i >= 0)
-+ {
-+ if (!_dbus_hash_iter_lookup (table1, keys[i], FALSE, &iter))
-+ _dbus_assert_not_reached ("hash entry should have existed");
-+ _dbus_hash_iter_remove_entry (&iter);
-+
-+ if (!_dbus_hash_iter_lookup (table2, _DBUS_INT_TO_POINTER (i), FALSE, &iter))
-+ _dbus_assert_not_reached ("hash entry should have existed");
-+ _dbus_hash_iter_remove_entry (&iter);
-+
-+ _dbus_assert (count_entries (table1) == i);
-+ _dbus_assert (count_entries (table2) == i);
-+
-+ --i;
-+ }
-+
-+ _dbus_hash_table_unref (table1);
-+ _dbus_hash_table_unref (table2);
-+
-+ ret = TRUE;
-+
-+ out:
-+ for (i = 0; i < N_HASH_KEYS; i++)
-+ dbus_free (keys[i]);
-+
-+ dbus_free (keys);
-+
-+ return ret;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-hash.h dbus-0.61/dbus/dbus-hash.h
---- dbus-0.61.orig/dbus/dbus-hash.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-hash.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,132 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-hash.h Generic hash table utility (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_HASH_H
-+#define DBUS_HASH_H
-+
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-types.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+/** Hash iterator object. The iterator is on the stack, but its real
-+ * fields are hidden privately.
-+ */
-+struct DBusHashIter
-+{
-+ void *dummy1; /**< Do not use. */
-+ void *dummy2; /**< Do not use. */
-+ void *dummy3; /**< Do not use. */
-+ void *dummy4; /**< Do not use. */
-+ int dummy5; /**< Do not use. */
-+ int dummy6; /**< Do not use. */
-+};
-+
-+typedef struct DBusHashTable DBusHashTable;
-+typedef struct DBusHashIter DBusHashIter;
-+
-+/* Allowing an arbitrary function as with GLib
-+ * would be nicer for a public API, but for
-+ * an internal API this saves typing, we can add
-+ * more whenever we feel like it.
-+ */
-+typedef enum
-+{
-+ DBUS_HASH_STRING, /**< Hash keys are strings. */
-+ DBUS_HASH_TWO_STRINGS, /**< Hash key is two strings in one memory block, i.e. foo\\0bar\\0 */
-+ DBUS_HASH_INT, /**< Hash keys are integers. */
-+ DBUS_HASH_POINTER, /**< Hash keys are pointers. */
-+ DBUS_HASH_ULONG /**< Hash keys are unsigned long. */
-+} DBusHashType;
-+DBusHashTable* _dbus_hash_table_new (DBusHashType type,
-+ DBusFreeFunction key_free_function,
-+ DBusFreeFunction value_free_function);
-+DBusHashTable* _dbus_hash_table_ref (DBusHashTable *table);
-+void _dbus_hash_table_unref (DBusHashTable *table);
-+void _dbus_hash_iter_init (DBusHashTable *table,
-+ DBusHashIter *iter);
-+dbus_bool_t _dbus_hash_iter_next (DBusHashIter *iter);
-+void _dbus_hash_iter_remove_entry (DBusHashIter *iter);
-+void* _dbus_hash_iter_get_value (DBusHashIter *iter);
-+void _dbus_hash_iter_set_value (DBusHashIter *iter,
-+ void *value);
-+int _dbus_hash_iter_get_int_key (DBusHashIter *iter);
-+const char* _dbus_hash_iter_get_string_key (DBusHashIter *iter);
-+const char* _dbus_hash_iter_get_two_strings_key (DBusHashIter *iter);
-+unsigned long _dbus_hash_iter_get_ulong_key (DBusHashIter *iter);
-+dbus_bool_t _dbus_hash_iter_lookup (DBusHashTable *table,
-+ void *key,
-+ dbus_bool_t create_if_not_found,
-+ DBusHashIter *iter);
-+void* _dbus_hash_table_lookup_string (DBusHashTable *table,
-+ const char *key);
-+void* _dbus_hash_table_lookup_two_strings (DBusHashTable *table,
-+ const char *key);
-+void* _dbus_hash_table_lookup_int (DBusHashTable *table,
-+ int key);
-+void* _dbus_hash_table_lookup_pointer (DBusHashTable *table,
-+ void *key);
-+void* _dbus_hash_table_lookup_ulong (DBusHashTable *table,
-+ unsigned long key);
-+dbus_bool_t _dbus_hash_table_remove_string (DBusHashTable *table,
-+ const char *key);
-+dbus_bool_t _dbus_hash_table_remove_two_strings (DBusHashTable *table,
-+ const char *key);
-+dbus_bool_t _dbus_hash_table_remove_int (DBusHashTable *table,
-+ int key);
-+dbus_bool_t _dbus_hash_table_remove_pointer (DBusHashTable *table,
-+ void *key);
-+dbus_bool_t _dbus_hash_table_remove_ulong (DBusHashTable *table,
-+ unsigned long key);
-+dbus_bool_t _dbus_hash_table_insert_string (DBusHashTable *table,
-+ char *key,
-+ void *value);
-+dbus_bool_t _dbus_hash_table_insert_two_strings (DBusHashTable *table,
-+ char *key,
-+ void *value);
-+dbus_bool_t _dbus_hash_table_insert_int (DBusHashTable *table,
-+ int key,
-+ void *value);
-+dbus_bool_t _dbus_hash_table_insert_pointer (DBusHashTable *table,
-+ void *key,
-+ void *value);
-+dbus_bool_t _dbus_hash_table_insert_ulong (DBusHashTable *table,
-+ unsigned long key,
-+ void *value);
-+int _dbus_hash_table_get_n_entries (DBusHashTable *table);
-+
-+/* Preallocation */
-+typedef struct DBusPreallocatedHash DBusPreallocatedHash;
-+
-+DBusPreallocatedHash *_dbus_hash_table_preallocate_entry (DBusHashTable *table);
-+void _dbus_hash_table_free_preallocated_entry (DBusHashTable *table,
-+ DBusPreallocatedHash *preallocated);
-+void _dbus_hash_table_insert_string_preallocated (DBusHashTable *table,
-+ DBusPreallocatedHash *preallocated,
-+ char *key,
-+ void *value);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_HASH_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-internals.c dbus-0.61/dbus/dbus-internals.c
---- dbus-0.61.orig/dbus/dbus-internals.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-internals.c 2005-02-13 21:23:30.000000000 +0100
-@@ -0,0 +1,599 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-internals.c random utility stuff (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-internals.h"
-+#include "dbus-protocol.h"
-+#include "dbus-test.h"
-+#include <stdio.h>
-+#include <stdarg.h>
-+#include <string.h>
-+#include <sys/types.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <stdlib.h>
-+
-+/**
-+ * @defgroup DBusInternals D-BUS internal implementation details
-+ * @brief Documentation useful when developing or debugging D-BUS itself.
-+ *
-+ */
-+
-+/**
-+ * @defgroup DBusInternalsUtils Utilities and portability
-+ * @ingroup DBusInternals
-+ * @brief Utility functions (_dbus_assert(), _dbus_warn(), etc.)
-+ * @{
-+ */
-+
-+/**
-+ * @def _dbus_assert
-+ *
-+ * Aborts with an error message if the condition is false.
-+ *
-+ * @param condition condition which must be true.
-+ */
-+
-+/**
-+ * @def _dbus_assert_not_reached
-+ *
-+ * Aborts with an error message if called.
-+ * The given explanation will be printed.
-+ *
-+ * @param explanation explanation of what happened if the code was reached.
-+ */
-+
-+/**
-+ * @def _DBUS_N_ELEMENTS
-+ *
-+ * Computes the number of elements in a fixed-size array using
-+ * sizeof().
-+ *
-+ * @param array the array to count elements in.
-+ */
-+
-+/**
-+ * @def _DBUS_POINTER_TO_INT
-+ *
-+ * Safely casts a void* to an integer; should only be used on void*
-+ * that actually contain integers, for example one created with
-+ * _DBUS_INT_TO_POINTER. Only guaranteed to preserve 32 bits.
-+ * (i.e. it's used to store 32-bit ints in pointers, but
-+ * can't be used to store 64-bit pointers in ints.)
-+ *
-+ * @param pointer pointer to extract an integer from.
-+ */
-+/**
-+ * @def _DBUS_INT_TO_POINTER
-+ *
-+ * Safely stuffs an integer into a pointer, to be extracted later with
-+ * _DBUS_POINTER_TO_INT. Only guaranteed to preserve 32 bits.
-+ *
-+ * @param integer the integer to stuff into a pointer.
-+ */
-+/**
-+ * @def _DBUS_ZERO
-+ *
-+ * Sets all bits in an object to zero.
-+ *
-+ * @param object the object to be zeroed.
-+ */
-+/**
-+ * @def _DBUS_INT16_MIN
-+ *
-+ * Minimum value of type "int16"
-+ */
-+/**
-+ * @def _DBUS_INT16_MAX
-+ *
-+ * Maximum value of type "int16"
-+ */
-+/**
-+ * @def _DBUS_UINT16_MAX
-+ *
-+ * Maximum value of type "uint16"
-+ */
-+
-+/**
-+ * @def _DBUS_INT32_MIN
-+ *
-+ * Minimum value of type "int32"
-+ */
-+/**
-+ * @def _DBUS_INT32_MAX
-+ *
-+ * Maximum value of type "int32"
-+ */
-+/**
-+ * @def _DBUS_UINT32_MAX
-+ *
-+ * Maximum value of type "uint32"
-+ */
-+
-+/**
-+ * @def _DBUS_INT_MIN
-+ *
-+ * Minimum value of type "int"
-+ */
-+/**
-+ * @def _DBUS_INT_MAX
-+ *
-+ * Maximum value of type "int"
-+ */
-+/**
-+ * @def _DBUS_UINT_MAX
-+ *
-+ * Maximum value of type "uint"
-+ */
-+
-+/**
-+ * @typedef DBusForeachFunction
-+ *
-+ * Used to iterate over each item in a collection, such as
-+ * a DBusList.
-+ */
-+
-+/**
-+ * @def _DBUS_LOCK_NAME
-+ *
-+ * Expands to name of a global lock variable.
-+ */
-+
-+/**
-+ * @def _DBUS_DEFINE_GLOBAL_LOCK
-+ *
-+ * Defines a global lock variable with the given name.
-+ * The lock must be added to the list to initialize
-+ * in dbus_threads_init().
-+ */
-+
-+/**
-+ * @def _DBUS_DECLARE_GLOBAL_LOCK
-+ *
-+ * Expands to declaration of a global lock defined
-+ * with _DBUS_DEFINE_GLOBAL_LOCK.
-+ * The lock must be added to the list to initialize
-+ * in dbus_threads_init().
-+ */
-+
-+/**
-+ * @def _DBUS_LOCK
-+ *
-+ * Locks a global lock
-+ */
-+
-+/**
-+ * @def _DBUS_UNLOCK
-+ *
-+ * Unlocks a global lock
-+ */
-+
-+/**
-+ * Fixed "out of memory" error message, just to avoid
-+ * making up a different string every time and wasting
-+ * space.
-+ */
-+const char _dbus_no_memory_message[] = "Not enough memory";
-+
-+/**
-+ * Prints a warning message to stderr.
-+ *
-+ * @param format printf-style format string.
-+ */
-+void
-+_dbus_warn (const char *format,
-+ ...)
-+{
-+ /* FIXME not portable enough? */
-+ va_list args;
-+
-+ va_start (args, format);
-+ vfprintf (stderr, format, args);
-+ va_end (args);
-+}
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+
-+static dbus_bool_t verbose_initted = FALSE;
-+
-+#define PTHREAD_IN_VERBOSE 0
-+#if PTHREAD_IN_VERBOSE
-+#include <pthread.h>
-+#endif
-+
-+/**
-+ * Prints a warning message to stderr
-+ * if the user has enabled verbose mode.
-+ * This is the real function implementation,
-+ * use _dbus_verbose() macro in code.
-+ *
-+ * @param format printf-style format string.
-+ */
-+void
-+_dbus_verbose_real (const char *format,
-+ ...)
-+{
-+ va_list args;
-+ static dbus_bool_t verbose = TRUE;
-+ static dbus_bool_t need_pid = TRUE;
-+ int len;
-+
-+ /* things are written a bit oddly here so that
-+ * in the non-verbose case we just have the one
-+ * conditional and return immediately.
-+ */
-+ if (!verbose)
-+ return;
-+
-+ if (!verbose_initted)
-+ {
-+ verbose = _dbus_getenv ("DBUS_VERBOSE") != NULL;
-+ verbose_initted = TRUE;
-+ if (!verbose)
-+ return;
-+ }
-+
-+ /* Print out pid before the line */
-+ if (need_pid)
-+ {
-+#if PTHREAD_IN_VERBOSE
-+ fprintf (stderr, "%lu: 0x%lx: ", _dbus_getpid (), pthread_self ());
-+#else
-+ fprintf (stderr, "%lu: ", _dbus_getpid ());
-+#endif
-+ }
-+
-+
-+ /* Only print pid again if the next line is a new line */
-+ len = strlen (format);
-+ if (format[len-1] == '\n')
-+ need_pid = TRUE;
-+ else
-+ need_pid = FALSE;
-+
-+ va_start (args, format);
-+ vfprintf (stderr, format, args);
-+ va_end (args);
-+
-+ fflush (stderr);
-+}
-+
-+/**
-+ * Reinitializes the verbose logging code, used
-+ * as a hack in dbus-spawn.c so that a child
-+ * process re-reads its pid
-+ *
-+ */
-+void
-+_dbus_verbose_reset_real (void)
-+{
-+ verbose_initted = FALSE;
-+}
-+
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+
-+/**
-+ * Duplicates a string. Result must be freed with
-+ * dbus_free(). Returns #NULL if memory allocation fails.
-+ * If the string to be duplicated is #NULL, returns #NULL.
-+ *
-+ * @param str string to duplicate.
-+ * @returns newly-allocated copy.
-+ */
-+char*
-+_dbus_strdup (const char *str)
-+{
-+ size_t len;
-+ char *copy;
-+
-+ if (str == NULL)
-+ return NULL;
-+
-+ len = strlen (str);
-+
-+ copy = dbus_malloc (len + 1);
-+ if (copy == NULL)
-+ return NULL;
-+
-+ memcpy (copy, str, len + 1);
-+
-+ return copy;
-+}
-+
-+/**
-+ * Duplicates a block of memory. Returns
-+ * #NULL on failure.
-+ *
-+ * @param mem memory to copy
-+ * @param n_bytes number of bytes to copy
-+ * @returns the copy
-+ */
-+void*
-+_dbus_memdup (const void *mem,
-+ size_t n_bytes)
-+{
-+ void *copy;
-+
-+ copy = dbus_malloc (n_bytes);
-+ if (copy == NULL)
-+ return NULL;
-+
-+ memcpy (copy, mem, n_bytes);
-+
-+ return copy;
-+}
-+
-+/**
-+ * Duplicates a string array. Result may be freed with
-+ * dbus_free_string_array(). Returns #NULL if memory allocation fails.
-+ * If the array to be duplicated is #NULL, returns #NULL.
-+ *
-+ * @param array array to duplicate.
-+ * @returns newly-allocated copy.
-+ */
-+char**
-+_dbus_dup_string_array (const char **array)
-+{
-+ int len;
-+ int i;
-+ char **copy;
-+
-+ if (array == NULL)
-+ return NULL;
-+
-+ for (len = 0; array[len] != NULL; ++len)
-+ ;
-+
-+ copy = dbus_new0 (char*, len + 1);
-+ if (copy == NULL)
-+ return NULL;
-+
-+ i = 0;
-+ while (i < len)
-+ {
-+ copy[i] = _dbus_strdup (array[i]);
-+ if (copy[i] == NULL)
-+ {
-+ dbus_free_string_array (copy);
-+ return NULL;
-+ }
-+
-+ ++i;
-+ }
-+
-+ return copy;
-+}
-+
-+/**
-+ * Checks whether a string array contains the given string.
-+ *
-+ * @param array array to search.
-+ * @param str string to look for
-+ * @returns #TRUE if array contains string
-+ */
-+dbus_bool_t
-+_dbus_string_array_contains (const char **array,
-+ const char *str)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (array[i] != NULL)
-+ {
-+ if (strcmp (array[i], str) == 0)
-+ return TRUE;
-+ ++i;
-+ }
-+
-+ return FALSE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Returns a string describing the given name.
-+ *
-+ * @param header_field the field to describe
-+ * @returns a constant string describing the field
-+ */
-+const char *
-+_dbus_header_field_to_string (int header_field)
-+{
-+ switch (header_field)
-+ {
-+ case DBUS_HEADER_FIELD_INVALID:
-+ return "invalid";
-+ case DBUS_HEADER_FIELD_PATH:
-+ return "path";
-+ case DBUS_HEADER_FIELD_INTERFACE:
-+ return "interface";
-+ case DBUS_HEADER_FIELD_MEMBER:
-+ return "member";
-+ case DBUS_HEADER_FIELD_ERROR_NAME:
-+ return "error-name";
-+ case DBUS_HEADER_FIELD_REPLY_SERIAL:
-+ return "reply-serial";
-+ case DBUS_HEADER_FIELD_DESTINATION:
-+ return "destination";
-+ case DBUS_HEADER_FIELD_SENDER:
-+ return "sender";
-+ case DBUS_HEADER_FIELD_SIGNATURE:
-+ return "signature";
-+ default:
-+ return "unknown";
-+ }
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+/** String used in _dbus_return_if_fail macro */
-+const char _dbus_return_if_fail_warning_format[] =
-+"%lu: arguments to %s() were incorrect, assertion \"%s\" failed in file %s line %d.\n"
-+"This is normally a bug in some application using the D-BUS library.\n";
-+#endif
-+
-+#ifndef DBUS_DISABLE_ASSERT
-+/**
-+ * Internals of _dbus_assert(); it's a function
-+ * rather than a macro with the inline code so
-+ * that the assertion failure blocks don't show up
-+ * in test suite coverage, and to shrink code size.
-+ *
-+ * @param condition TRUE if assertion succeeded
-+ * @param condition_text condition as a string
-+ * @param file file the assertion is in
-+ * @param line line the assertion is in
-+ * @param func function the assertion is in
-+ */
-+void
-+_dbus_real_assert (dbus_bool_t condition,
-+ const char *condition_text,
-+ const char *file,
-+ int line,
-+ const char *func)
-+{
-+ if (_DBUS_UNLIKELY (!condition))
-+ {
-+ _dbus_warn ("%lu: assertion failed \"%s\" file \"%s\" line %d function %s\n",
-+ _dbus_getpid (), condition_text, file, line, func);
-+ _dbus_abort ();
-+ }
-+}
-+
-+/**
-+ * Internals of _dbus_assert_not_reached(); it's a function
-+ * rather than a macro with the inline code so
-+ * that the assertion failure blocks don't show up
-+ * in test suite coverage, and to shrink code size.
-+ *
-+ * @param explanation what was reached that shouldn't have been
-+ * @param file file the assertion is in
-+ * @param line line the assertion is in
-+ */
-+void
-+_dbus_real_assert_not_reached (const char *explanation,
-+ const char *file,
-+ int line)
-+{
-+ _dbus_warn ("File \"%s\" line %d process %lu should not have been reached: %s\n",
-+ file, line, _dbus_getpid (), explanation);
-+ _dbus_abort ();
-+}
-+#endif /* DBUS_DISABLE_ASSERT */
-+
-+#ifdef DBUS_BUILD_TESTS
-+static dbus_bool_t
-+run_failing_each_malloc (int n_mallocs,
-+ const char *description,
-+ DBusTestMemoryFunction func,
-+ void *data)
-+{
-+ n_mallocs += 10; /* fudge factor to ensure reallocs etc. are covered */
-+
-+ while (n_mallocs >= 0)
-+ {
-+ _dbus_set_fail_alloc_counter (n_mallocs);
-+
-+ _dbus_verbose ("\n===\n%s: (will fail malloc %d with %d failures)\n===\n",
-+ description, n_mallocs,
-+ _dbus_get_fail_alloc_failures ());
-+
-+ if (!(* func) (data))
-+ return FALSE;
-+
-+ n_mallocs -= 1;
-+ }
-+
-+ _dbus_set_fail_alloc_counter (_DBUS_INT_MAX);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Tests how well the given function responds to out-of-memory
-+ * situations. Calls the function repeatedly, failing a different
-+ * call to malloc() each time. If the function ever returns #FALSE,
-+ * the test fails. The function should return #TRUE whenever something
-+ * valid (such as returning an error, or succeeding) occurs, and #FALSE
-+ * if it gets confused in some way.
-+ *
-+ * @param description description of the test used in verbose output
-+ * @param func function to call
-+ * @param data data to pass to function
-+ * @returns #TRUE if the function never returns FALSE
-+ */
-+dbus_bool_t
-+_dbus_test_oom_handling (const char *description,
-+ DBusTestMemoryFunction func,
-+ void *data)
-+{
-+ int approx_mallocs;
-+ const char *setting;
-+ int max_failures_to_try;
-+ int i;
-+
-+ /* Run once to see about how many mallocs are involved */
-+
-+ _dbus_set_fail_alloc_counter (_DBUS_INT_MAX);
-+
-+ _dbus_verbose ("Running once to count mallocs\n");
-+
-+ if (!(* func) (data))
-+ return FALSE;
-+
-+ approx_mallocs = _DBUS_INT_MAX - _dbus_get_fail_alloc_counter ();
-+
-+ _dbus_verbose ("\n=================\n%s: about %d mallocs total\n=================\n",
-+ description, approx_mallocs);
-+
-+ setting = _dbus_getenv ("DBUS_TEST_MALLOC_FAILURES");
-+ if (setting != NULL)
-+ {
-+ DBusString str;
-+ long v;
-+ _dbus_string_init_const (&str, setting);
-+ v = 4;
-+ if (!_dbus_string_parse_int (&str, 0, &v, NULL))
-+ _dbus_warn ("couldn't parse '%s' as integer\n", setting);
-+ max_failures_to_try = v;
-+ }
-+ else
-+ {
-+ max_failures_to_try = 4;
-+ }
-+
-+ i = setting ? max_failures_to_try - 1 : 1;
-+ while (i < max_failures_to_try)
-+ {
-+ _dbus_set_fail_alloc_failures (i);
-+ if (!run_failing_each_malloc (approx_mallocs, description, func, data))
-+ return FALSE;
-+ ++i;
-+ }
-+
-+ _dbus_verbose ("\n=================\n%s: all iterations passed\n=================\n",
-+ description);
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/** @} */
-diff -Naur dbus-0.61.orig/dbus/dbus-internals.h dbus-0.61/dbus/dbus-internals.h
---- dbus-0.61.orig/dbus/dbus-internals.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-internals.h 2005-02-26 07:37:46.000000000 +0100
-@@ -0,0 +1,293 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-internals.h random utility stuff (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifdef DBUS_INSIDE_DBUS_H
-+#error "You can't include dbus-internals.h in the public header dbus.h"
-+#endif
-+
-+#ifndef DBUS_INTERNALS_H
-+#define DBUS_INTERNALS_H
-+
-+#include <config.h>
-+
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-sysdeps.h>
-+#include <dbus/dbus-threads-internal.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+void _dbus_warn (const char *format,
-+ ...) _DBUS_GNUC_PRINTF (1, 2);
-+
-+#if defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
-+#define _DBUS_FUNCTION_NAME __func__
-+#elif defined(__GNUC__)
-+#define _DBUS_FUNCTION_NAME __FUNCTION__
-+#else
-+#define _DBUS_FUNCTION_NAME "unknown function"
-+#endif
-+
-+/*
-+ * (code from GLib)
-+ *
-+ * The _DBUS_LIKELY and _DBUS_UNLIKELY macros let the programmer give hints to
-+ * the compiler about the expected result of an expression. Some compilers
-+ * can use this information for optimizations.
-+ *
-+ * The _DBUS_BOOLEAN_EXPR macro is intended to trigger a gcc warning when
-+ * putting assignments in the macro arg
-+ */
-+#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
-+#define _DBUS_BOOLEAN_EXPR(expr) \
-+ __extension__ ({ \
-+ int _dbus_boolean_var_; \
-+ if (expr) \
-+ _dbus_boolean_var_ = 1; \
-+ else \
-+ _dbus_boolean_var_ = 0; \
-+ _dbus_boolean_var_; \
-+})
-+#define _DBUS_LIKELY(expr) (__builtin_expect (_DBUS_BOOLEAN_EXPR(expr), 1))
-+#define _DBUS_UNLIKELY(expr) (__builtin_expect (_DBUS_BOOLEAN_EXPR(expr), 0))
-+#else
-+#define _DBUS_LIKELY(expr) (expr)
-+#define _DBUS_UNLIKELY(expr) (expr)
-+#endif
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+
-+void _dbus_verbose_real (const char *format,
-+ ...) _DBUS_GNUC_PRINTF (1, 2);
-+void _dbus_verbose_reset_real (void);
-+
-+# define _dbus_verbose _dbus_verbose_real
-+# define _dbus_verbose_reset _dbus_verbose_reset_real
-+#else
-+# ifdef HAVE_ISO_VARARGS
-+# define _dbus_verbose(...)
-+# elif defined (HAVE_GNUC_VARARGS)
-+# define _dbus_verbose(format...)
-+# else
-+# error "This compiler does not support varargs macros and thus verbose mode can't be disabled meaningfully"
-+# endif
-+# define _dbus_verbose_reset()
-+#endif /* !DBUS_ENABLE_VERBOSE_MODE */
-+
-+const char* _dbus_strerror (int error_number);
-+
-+#ifdef DBUS_DISABLE_ASSERT
-+#define _dbus_assert(condition)
-+#else
-+void _dbus_real_assert (dbus_bool_t condition,
-+ const char *condition_text,
-+ const char *file,
-+ int line,
-+ const char *func);
-+#define _dbus_assert(condition) \
-+ _dbus_real_assert ((condition) != 0, #condition, __FILE__, __LINE__, _DBUS_FUNCTION_NAME)
-+#endif /* !DBUS_DISABLE_ASSERT */
-+
-+#ifdef DBUS_DISABLE_ASSERT
-+#define _dbus_assert_not_reached(explanation)
-+#else
-+void _dbus_real_assert_not_reached (const char *explanation,
-+ const char *file,
-+ int line) _DBUS_GNUC_NORETURN;
-+#define _dbus_assert_not_reached(explanation) \
-+ _dbus_real_assert_not_reached (explanation, __FILE__, __LINE__)
-+#endif /* !DBUS_DISABLE_ASSERT */
-+
-+#ifdef DBUS_DISABLE_CHECKS
-+#define _dbus_return_if_fail(condition)
-+#define _dbus_return_val_if_fail(condition, val)
-+#else
-+extern const char _dbus_return_if_fail_warning_format[];
-+
-+#define _dbus_return_if_fail(condition) do { \
-+ _dbus_assert ((*(const char*)_DBUS_FUNCTION_NAME) != '_'); \
-+ if (!(condition)) { \
-+ _dbus_warn (_dbus_return_if_fail_warning_format, \
-+ _dbus_getpid (), _DBUS_FUNCTION_NAME, #condition, __FILE__, __LINE__); \
-+ return; \
-+ } } while (0)
-+
-+#define _dbus_return_val_if_fail(condition, val) do { \
-+ _dbus_assert ((*(const char*)_DBUS_FUNCTION_NAME) != '_'); \
-+ if (!(condition)) { \
-+ _dbus_warn (_dbus_return_if_fail_warning_format, \
-+ _dbus_getpid (), _DBUS_FUNCTION_NAME, #condition, __FILE__, __LINE__); \
-+ return (val); \
-+ } } while (0)
-+
-+#endif /* !DBUS_DISABLE_ASSERT */
-+
-+#define _DBUS_N_ELEMENTS(array) ((int) (sizeof ((array)) / sizeof ((array)[0])))
-+
-+#define _DBUS_POINTER_TO_INT(pointer) ((long)(pointer))
-+#define _DBUS_INT_TO_POINTER(integer) ((void*)((long)(integer)))
-+
-+#define _DBUS_ZERO(object) (memset (&(object), '\0', sizeof ((object))))
-+
-+#define _DBUS_STRUCT_OFFSET(struct_type, member) \
-+ ((long) ((unsigned char*) &((struct_type*) 0)->member))
-+
-+#define _DBUS_ASSERT_ERROR_IS_SET(error) _dbus_assert ((error) == NULL || dbus_error_is_set ((error)))
-+#define _DBUS_ASSERT_ERROR_IS_CLEAR(error) _dbus_assert ((error) == NULL || !dbus_error_is_set ((error)))
-+
-+#define _dbus_return_if_error_is_set(error) _dbus_return_if_fail ((error) == NULL || !dbus_error_is_set ((error)))
-+#define _dbus_return_val_if_error_is_set(error, val) _dbus_return_val_if_fail ((error) == NULL || !dbus_error_is_set ((error)), (val))
-+
-+/* This alignment thing is from ORBit2 */
-+/* Align a value upward to a boundary, expressed as a number of bytes.
-+ * E.g. align to an 8-byte boundary with argument of 8.
-+ */
-+
-+/*
-+ * (this + boundary - 1)
-+ * &
-+ * ~(boundary - 1)
-+ */
-+
-+#define _DBUS_ALIGN_VALUE(this, boundary) \
-+ (( ((unsigned long)(this)) + (((unsigned long)(boundary)) -1)) & (~(((unsigned long)(boundary))-1)))
-+
-+#define _DBUS_ALIGN_ADDRESS(this, boundary) \
-+ ((void*)_DBUS_ALIGN_VALUE(this, boundary))
-+
-+
-+char* _dbus_strdup (const char *str);
-+void* _dbus_memdup (const void *mem,
-+ size_t n_bytes);
-+dbus_bool_t _dbus_string_array_contains (const char **array,
-+ const char *str);
-+char** _dbus_dup_string_array (const char **array);
-+
-+#define _DBUS_INT16_MIN ((dbus_int16_t) 0x8000)
-+#define _DBUS_INT16_MAX ((dbus_int16_t) 0x7fff)
-+#define _DBUS_UINT16_MAX ((dbus_uint16_t)0xffff)
-+#define _DBUS_INT32_MIN ((dbus_int32_t) 0x80000000)
-+#define _DBUS_INT32_MAX ((dbus_int32_t) 0x7fffffff)
-+#define _DBUS_UINT32_MAX ((dbus_uint32_t)0xffffffff)
-+/* using 32-bit here is sort of bogus */
-+#define _DBUS_INT_MIN _DBUS_INT32_MIN
-+#define _DBUS_INT_MAX _DBUS_INT32_MAX
-+#define _DBUS_UINT_MAX _DBUS_UINT32_MAX
-+#ifdef DBUS_HAVE_INT64
-+#define _DBUS_INT64_MAX DBUS_INT64_CONSTANT (0x7fffffffffffffff)
-+#define _DBUS_UINT64_MAX DBUS_UINT64_CONSTANT (0xffffffffffffffff)
-+#endif
-+#define _DBUS_ONE_KILOBYTE 1024
-+#define _DBUS_ONE_MEGABYTE 1024 * _DBUS_ONE_KILOBYTE
-+#define _DBUS_ONE_HOUR_IN_MILLISECONDS (1000 * 60 * 60)
-+#define _DBUS_USEC_PER_SECOND (1000000)
-+
-+#undef MAX
-+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-+
-+#undef MIN
-+#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-+
-+#undef ABS
-+#define ABS(a) (((a) < 0) ? -(a) : (a))
-+
-+#define _DBUS_ISASCII(c) ((c) != '\0' && (((c) & ~0x7f) == 0))
-+
-+typedef void (* DBusForeachFunction) (void *element,
-+ void *data);
-+
-+dbus_bool_t _dbus_set_fd_nonblocking (int fd,
-+ DBusError *error);
-+
-+void _dbus_verbose_bytes (const unsigned char *data,
-+ int len,
-+ int offset);
-+void _dbus_verbose_bytes_of_string (const DBusString *str,
-+ int start,
-+ int len);
-+
-+const char* _dbus_header_field_to_string (int header_field);
-+
-+extern const char _dbus_no_memory_message[];
-+#define _DBUS_SET_OOM(error) dbus_set_error_const ((error), DBUS_ERROR_NO_MEMORY, _dbus_no_memory_message)
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* Memory debugging */
-+void _dbus_set_fail_alloc_counter (int until_next_fail);
-+int _dbus_get_fail_alloc_counter (void);
-+void _dbus_set_fail_alloc_failures (int failures_per_failure);
-+int _dbus_get_fail_alloc_failures (void);
-+dbus_bool_t _dbus_decrement_fail_alloc_counter (void);
-+dbus_bool_t _dbus_disable_mem_pools (void);
-+int _dbus_get_malloc_blocks_outstanding (void);
-+
-+typedef dbus_bool_t (* DBusTestMemoryFunction) (void *data);
-+dbus_bool_t _dbus_test_oom_handling (const char *description,
-+ DBusTestMemoryFunction func,
-+ void *data);
-+#else
-+#define _dbus_set_fail_alloc_counter(n)
-+#define _dbus_get_fail_alloc_counter _DBUS_INT_MAX
-+
-+/* These are constant expressions so that blocks
-+ * they protect should be optimized away
-+ */
-+#define _dbus_decrement_fail_alloc_counter() (FALSE)
-+#define _dbus_disable_mem_pools() (FALSE)
-+#define _dbus_get_malloc_blocks_outstanding (0)
-+#endif /* !DBUS_BUILD_TESTS */
-+
-+typedef void (* DBusShutdownFunction) (void *data);
-+dbus_bool_t _dbus_register_shutdown_func (DBusShutdownFunction function,
-+ void *data);
-+
-+extern int _dbus_current_generation;
-+
-+/* Thread initializers */
-+#define _DBUS_LOCK_NAME(name) _dbus_lock_##name
-+#define _DBUS_DECLARE_GLOBAL_LOCK(name) extern DBusMutex *_dbus_lock_##name
-+#define _DBUS_DEFINE_GLOBAL_LOCK(name) DBusMutex *_dbus_lock_##name
-+#define _DBUS_LOCK(name) _dbus_mutex_lock (_dbus_lock_##name)
-+#define _DBUS_UNLOCK(name) _dbus_mutex_unlock (_dbus_lock_##name)
-+
-+_DBUS_DECLARE_GLOBAL_LOCK (list);
-+_DBUS_DECLARE_GLOBAL_LOCK (connection_slots);
-+_DBUS_DECLARE_GLOBAL_LOCK (pending_call_slots);
-+_DBUS_DECLARE_GLOBAL_LOCK (server_slots);
-+_DBUS_DECLARE_GLOBAL_LOCK (message_slots);
-+_DBUS_DECLARE_GLOBAL_LOCK (atomic);
-+_DBUS_DECLARE_GLOBAL_LOCK (bus);
-+_DBUS_DECLARE_GLOBAL_LOCK (shutdown_funcs);
-+_DBUS_DECLARE_GLOBAL_LOCK (system_users);
-+_DBUS_DECLARE_GLOBAL_LOCK (message_cache);
-+_DBUS_DECLARE_GLOBAL_LOCK (shared_connections);
-+#define _DBUS_N_GLOBAL_LOCKS (11)
-+
-+dbus_bool_t _dbus_threads_init_debug (void);
-+
-+dbus_bool_t _dbus_address_append_escaped (DBusString *escaped,
-+ const DBusString *unescaped);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_INTERNALS_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-keyring.c dbus-0.61/dbus/dbus-keyring.c
---- dbus-0.61.orig/dbus/dbus-keyring.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-keyring.c 2005-11-30 20:32:26.000000000 +0100
-@@ -0,0 +1,1182 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-keyring.c Store secret cookies in your homedir
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-keyring.h"
-+#include "dbus-userdb.h"
-+#include "dbus-protocol.h"
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-sysdeps.h>
-+
-+/**
-+ * @defgroup DBusKeyring keyring class
-+ * @ingroup DBusInternals
-+ * @brief DBusKeyring data structure
-+ *
-+ * Types and functions related to DBusKeyring. DBusKeyring is intended
-+ * to manage cookies used to authenticate clients to servers. This is
-+ * essentially the "verify that client can read the user's homedir"
-+ * authentication mechanism. Both client and server must have access
-+ * to the homedir.
-+ *
-+ * The secret keys are not kept in locked memory, and are written to a
-+ * file in the user's homedir. However they are transient (only used
-+ * by a single server instance for a fixed period of time, then
-+ * discarded). Also, the keys are not sent over the wire.
-+ *
-+ * @todo there's a memory leak on some codepath in here, I saw it once
-+ * when running make check - probably some specific initial cookies
-+ * present in the cookie file, then depending on what we do with them.
-+ */
-+
-+/**
-+ * @defgroup DBusKeyringInternals DBusKeyring implementation details
-+ * @ingroup DBusInternals
-+ * @brief DBusKeyring implementation details
-+ *
-+ * The guts of DBusKeyring.
-+ *
-+ * @{
-+ */
-+
-+/** The maximum age of a key before we create a new key to use in
-+ * challenges. This isn't super-reliably enforced, since system
-+ * clocks can change or be wrong, but we make a best effort to only
-+ * use keys for a short time.
-+ */
-+#define NEW_KEY_TIMEOUT_SECONDS (60*5)
-+/**
-+ * The time after which we drop a key from the secrets file.
-+ * The EXPIRE_KEYS_TIMEOUT_SECONDS - NEW_KEY_TIMEOUT_SECONDS is the minimum
-+ * time window a client has to complete authentication.
-+ */
-+#define EXPIRE_KEYS_TIMEOUT_SECONDS (NEW_KEY_TIMEOUT_SECONDS + (60*2))
-+/**
-+ * The maximum amount of time a key can be in the future.
-+ */
-+#define MAX_TIME_TRAVEL_SECONDS (60*5)
-+
-+/**
-+ * Maximum number of keys in the keyring before
-+ * we just ignore the rest
-+ */
-+#ifdef DBUS_BUILD_TESTS
-+#define MAX_KEYS_IN_FILE 10
-+#else
-+#define MAX_KEYS_IN_FILE 256
-+#endif
-+
-+/**
-+ * A single key from the cookie file
-+ */
-+typedef struct
-+{
-+ dbus_int32_t id; /**< identifier used to refer to the key */
-+
-+ long creation_time; /**< when the key was generated,
-+ * as unix timestamp. signed long
-+ * matches struct timeval.
-+ */
-+
-+ DBusString secret; /**< the actual key */
-+
-+} DBusKey;
-+
-+/**
-+ * @brief Internals of DBusKeyring.
-+ *
-+ * DBusKeyring internals. DBusKeyring is an opaque object, it must be
-+ * used via accessor functions.
-+ */
-+struct DBusKeyring
-+{
-+ int refcount; /**< Reference count */
-+ DBusString username; /**< Username keyring is for */
-+ DBusString directory; /**< Directory the below two items are inside */
-+ DBusString filename; /**< Keyring filename */
-+ DBusString filename_lock; /**< Name of lockfile */
-+ DBusKey *keys; /**< Keys loaded from the file */
-+ int n_keys; /**< Number of keys */
-+};
-+
-+static DBusKeyring*
-+_dbus_keyring_new (void)
-+{
-+ DBusKeyring *keyring;
-+
-+ keyring = dbus_new0 (DBusKeyring, 1);
-+ if (keyring == NULL)
-+ goto out_0;
-+
-+ if (!_dbus_string_init (&keyring->directory))
-+ goto out_1;
-+
-+ if (!_dbus_string_init (&keyring->filename))
-+ goto out_2;
-+
-+ if (!_dbus_string_init (&keyring->filename_lock))
-+ goto out_3;
-+
-+ if (!_dbus_string_init (&keyring->username))
-+ goto out_4;
-+
-+ keyring->refcount = 1;
-+ keyring->keys = NULL;
-+ keyring->n_keys = 0;
-+
-+ return keyring;
-+
-+ out_4:
-+ _dbus_string_free (&keyring->filename_lock);
-+ out_3:
-+ _dbus_string_free (&keyring->filename);
-+ out_2:
-+ _dbus_string_free (&keyring->directory);
-+ out_1:
-+ dbus_free (keyring);
-+ out_0:
-+ return NULL;
-+}
-+
-+static void
-+free_keys (DBusKey *keys,
-+ int n_keys)
-+{
-+ int i;
-+
-+ /* should be safe for args NULL, 0 */
-+
-+ i = 0;
-+ while (i < n_keys)
-+ {
-+ _dbus_string_free (&keys[i].secret);
-+ ++i;
-+ }
-+
-+ dbus_free (keys);
-+}
-+
-+/* Our locking scheme is highly unreliable. However, there is
-+ * unfortunately no reliable locking scheme in user home directories;
-+ * between bugs in Linux NFS, people using Tru64 or other total crap
-+ * NFS, AFS, random-file-system-of-the-week, and so forth, fcntl() in
-+ * homedirs simply generates tons of bug reports. This has been
-+ * learned through hard experience with GConf, unfortunately.
-+ *
-+ * This bad hack might work better for the kind of lock we have here,
-+ * which we don't expect to hold for any length of time. Crashing
-+ * while we hold it should be unlikely, and timing out such that we
-+ * delete a stale lock should also be unlikely except when the
-+ * filesystem is running really slowly. Stuff might break in corner
-+ * cases but as long as it's not a security-level breakage it should
-+ * be OK.
-+ */
-+
-+/** Maximum number of timeouts waiting for lock before we decide it's stale */
-+#define MAX_LOCK_TIMEOUTS 32
-+/** Length of each timeout while waiting for a lock */
-+#define LOCK_TIMEOUT_MILLISECONDS 250
-+
-+static dbus_bool_t
-+_dbus_keyring_lock (DBusKeyring *keyring)
-+{
-+ int n_timeouts;
-+
-+ n_timeouts = 0;
-+ while (n_timeouts < MAX_LOCK_TIMEOUTS)
-+ {
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+ if (_dbus_create_file_exclusively (&keyring->filename_lock,
-+ &error))
-+ break;
-+
-+ _dbus_verbose ("Did not get lock file, sleeping %d milliseconds (%s)\n",
-+ LOCK_TIMEOUT_MILLISECONDS, error.message);
-+ dbus_error_free (&error);
-+
-+ _dbus_sleep_milliseconds (LOCK_TIMEOUT_MILLISECONDS);
-+
-+ ++n_timeouts;
-+ }
-+
-+ if (n_timeouts == MAX_LOCK_TIMEOUTS)
-+ {
-+ DBusError error;
-+
-+ _dbus_verbose ("Lock file timed out %d times, assuming stale\n",
-+ n_timeouts);
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_delete_file (&keyring->filename_lock, &error))
-+ {
-+ _dbus_verbose ("Couldn't delete old lock file: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_create_file_exclusively (&keyring->filename_lock,
-+ &error))
-+ {
-+ _dbus_verbose ("Couldn't create lock file after deleting stale one: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+_dbus_keyring_unlock (DBusKeyring *keyring)
-+{
-+ DBusError error;
-+ dbus_error_init (&error);
-+ if (!_dbus_delete_file (&keyring->filename_lock, &error))
-+ {
-+ _dbus_warn ("Failed to delete lock file: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ }
-+}
-+
-+static DBusKey*
-+find_key_by_id (DBusKey *keys,
-+ int n_keys,
-+ int id)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i < n_keys)
-+ {
-+ if (keys[i].id == id)
-+ return &keys[i];
-+
-+ ++i;
-+ }
-+
-+ return NULL;
-+}
-+
-+static dbus_bool_t
-+add_new_key (DBusKey **keys_p,
-+ int *n_keys_p,
-+ DBusError *error)
-+{
-+ DBusKey *new;
-+ DBusString bytes;
-+ int id;
-+ long timestamp;
-+ const unsigned char *s;
-+ dbus_bool_t retval;
-+ DBusKey *keys;
-+ int n_keys;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!_dbus_string_init (&bytes))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return FALSE;
-+ }
-+
-+ keys = *keys_p;
-+ n_keys = *n_keys_p;
-+ retval = FALSE;
-+
-+ /* Generate an integer ID and then the actual key. */
-+ retry:
-+
-+ if (!_dbus_generate_random_bytes (&bytes, 4))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ s = (const unsigned char*) _dbus_string_get_const_data (&bytes);
-+
-+ id = s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24);
-+ if (id < 0)
-+ id = - id;
-+ _dbus_assert (id >= 0);
-+
-+ if (find_key_by_id (keys, n_keys, id) != NULL)
-+ {
-+ _dbus_string_set_length (&bytes, 0);
-+ _dbus_verbose ("Key ID %d already existed, trying another one\n",
-+ id);
-+ goto retry;
-+ }
-+
-+ _dbus_verbose ("Creating key with ID %d\n", id);
-+
-+#define KEY_LENGTH_BYTES 24
-+ _dbus_string_set_length (&bytes, 0);
-+ if (!_dbus_generate_random_bytes (&bytes, KEY_LENGTH_BYTES))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ new = dbus_realloc (keys, sizeof (DBusKey) * (n_keys + 1));
-+ if (new == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ keys = new;
-+ *keys_p = keys; /* otherwise *keys_p ends up invalid */
-+ n_keys += 1;
-+
-+ if (!_dbus_string_init (&keys[n_keys-1].secret))
-+ {
-+ n_keys -= 1; /* we don't want to free the one we didn't init */
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ _dbus_get_current_time (×tamp, NULL);
-+
-+ keys[n_keys-1].id = id;
-+ keys[n_keys-1].creation_time = timestamp;
-+ if (!_dbus_string_move (&bytes, 0,
-+ &keys[n_keys-1].secret,
-+ 0))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (&keys[n_keys-1].secret);
-+ n_keys -= 1;
-+ goto out;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ *n_keys_p = n_keys;
-+
-+ _dbus_string_free (&bytes);
-+ return retval;
-+}
-+
-+/**
-+ * Reloads the keyring file, optionally adds one new key to the file,
-+ * removes all expired keys from the file iff a key was added, then
-+ * resaves the file. Stores the keys from the file in keyring->keys.
-+ * Note that the file is only resaved (written to) if a key is added,
-+ * this means that only servers ever write to the file and need to
-+ * lock it, which avoids a lot of lock contention at login time and
-+ * such.
-+ *
-+ * @param keyring the keyring
-+ * @param add_new #TRUE to add a new key to the file, expire keys, and resave
-+ * @param error return location for errors
-+ * @returns #FALSE on failure
-+ */
-+static dbus_bool_t
-+_dbus_keyring_reload (DBusKeyring *keyring,
-+ dbus_bool_t add_new,
-+ DBusError *error)
-+{
-+ DBusString contents;
-+ DBusString line;
-+ dbus_bool_t retval;
-+ dbus_bool_t have_lock;
-+ DBusKey *keys;
-+ int n_keys;
-+ int i;
-+ long now;
-+ DBusError tmp_error;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!_dbus_check_dir_is_private_to_user (&keyring->directory, error))
-+ return FALSE;
-+
-+ if (!_dbus_string_init (&contents))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&line))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (&contents);
-+ return FALSE;
-+ }
-+
-+ keys = NULL;
-+ n_keys = 0;
-+ retval = FALSE;
-+ have_lock = FALSE;
-+
-+ _dbus_get_current_time (&now, NULL);
-+
-+ if (add_new)
-+ {
-+ if (!_dbus_keyring_lock (keyring))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Could not lock keyring file to add to it");
-+ goto out;
-+ }
-+
-+ have_lock = TRUE;
-+ }
-+
-+ dbus_error_init (&tmp_error);
-+ if (!_dbus_file_get_contents (&contents,
-+ &keyring->filename,
-+ &tmp_error))
-+ {
-+ _dbus_verbose ("Failed to load keyring file: %s\n",
-+ tmp_error.message);
-+ /* continue with empty keyring file, so we recreate it */
-+ dbus_error_free (&tmp_error);
-+ }
-+
-+ if (!_dbus_string_validate_ascii (&contents, 0,
-+ _dbus_string_get_length (&contents)))
-+ {
-+ _dbus_warn ("Secret keyring file contains non-ASCII! Ignoring existing contents\n");
-+ _dbus_string_set_length (&contents, 0);
-+ }
-+
-+ /* FIXME this is badly inefficient for large keyring files
-+ * (not that large keyring files exist outside of test suites)
-+ */
-+ while (_dbus_string_pop_line (&contents, &line))
-+ {
-+ int next;
-+ long val;
-+ int id;
-+ long timestamp;
-+ int len;
-+ int end;
-+ DBusKey *new;
-+
-+ /* Don't load more than the max. */
-+ if (n_keys >= (add_new ? MAX_KEYS_IN_FILE - 1 : MAX_KEYS_IN_FILE))
-+ break;
-+
-+ next = 0;
-+ if (!_dbus_string_parse_int (&line, 0, &val, &next))
-+ {
-+ _dbus_verbose ("could not parse secret key ID at start of line\n");
-+ continue;
-+ }
-+
-+ if (val > _DBUS_INT32_MAX || val < 0)
-+ {
-+ _dbus_verbose ("invalid secret key ID at start of line\n");
-+ continue;
-+ }
-+
-+ id = val;
-+
-+ _dbus_string_skip_blank (&line, next, &next);
-+
-+ if (!_dbus_string_parse_int (&line, next, ×tamp, &next))
-+ {
-+ _dbus_verbose ("could not parse secret key timestamp\n");
-+ continue;
-+ }
-+
-+ if (timestamp < 0 ||
-+ (now + MAX_TIME_TRAVEL_SECONDS) < timestamp ||
-+ (now - EXPIRE_KEYS_TIMEOUT_SECONDS) > timestamp)
-+ {
-+ _dbus_verbose ("dropping/ignoring %ld-seconds old key with timestamp %ld as current time is %ld\n",
-+ now - timestamp, timestamp, now);
-+ continue;
-+ }
-+
-+ _dbus_string_skip_blank (&line, next, &next);
-+
-+ len = _dbus_string_get_length (&line);
-+
-+ if ((len - next) == 0)
-+ {
-+ _dbus_verbose ("no secret key after ID and timestamp\n");
-+ continue;
-+ }
-+
-+ /* We have all three parts */
-+ new = dbus_realloc (keys, sizeof (DBusKey) * (n_keys + 1));
-+ if (new == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ keys = new;
-+ n_keys += 1;
-+
-+ if (!_dbus_string_init (&keys[n_keys-1].secret))
-+ {
-+ n_keys -= 1; /* we don't want to free the one we didn't init */
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ keys[n_keys-1].id = id;
-+ keys[n_keys-1].creation_time = timestamp;
-+ if (!_dbus_string_hex_decode (&line, next, &end,
-+ &keys[n_keys-1].secret, 0))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ if (_dbus_string_get_length (&line) != end)
-+ {
-+ _dbus_verbose ("invalid hex encoding in keyring file\n");
-+ _dbus_string_free (&keys[n_keys - 1].secret);
-+ n_keys -= 1;
-+ continue;
-+ }
-+ }
-+
-+ _dbus_verbose ("Successfully loaded %d existing keys\n",
-+ n_keys);
-+
-+ if (add_new)
-+ {
-+ if (!add_new_key (&keys, &n_keys, error))
-+ {
-+ _dbus_verbose ("Failed to generate new key: %s\n",
-+ error ? error->message : "(unknown)");
-+ goto out;
-+ }
-+
-+ _dbus_string_set_length (&contents, 0);
-+
-+ i = 0;
-+ while (i < n_keys)
-+ {
-+ if (!_dbus_string_append_int (&contents,
-+ keys[i].id))
-+ goto nomem;
-+
-+ if (!_dbus_string_append_byte (&contents, ' '))
-+ goto nomem;
-+
-+ if (!_dbus_string_append_int (&contents,
-+ keys[i].creation_time))
-+ goto nomem;
-+
-+ if (!_dbus_string_append_byte (&contents, ' '))
-+ goto nomem;
-+
-+ if (!_dbus_string_hex_encode (&keys[i].secret, 0,
-+ &contents,
-+ _dbus_string_get_length (&contents)))
-+ goto nomem;
-+
-+ if (!_dbus_string_append_byte (&contents, '\n'))
-+ goto nomem;
-+
-+ ++i;
-+ continue;
-+
-+ nomem:
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ if (!_dbus_string_save_to_file (&contents, &keyring->filename,
-+ error))
-+ goto out;
-+ }
-+
-+ if (keyring->keys)
-+ free_keys (keyring->keys, keyring->n_keys);
-+ keyring->keys = keys;
-+ keyring->n_keys = n_keys;
-+ keys = NULL;
-+ n_keys = 0;
-+
-+ retval = TRUE;
-+
-+ out:
-+ if (have_lock)
-+ _dbus_keyring_unlock (keyring);
-+
-+ if (! ((retval == TRUE && (error == NULL || error->name == NULL)) ||
-+ (retval == FALSE && (error == NULL || error->name != NULL))))
-+ {
-+ if (error && error->name)
-+ _dbus_verbose ("error is %s: %s\n", error->name, error->message);
-+ _dbus_warn ("returning %d but error pointer %p name %s\n",
-+ retval, error, error->name ? error->name : "(none)");
-+ _dbus_assert_not_reached ("didn't handle errors properly");
-+ }
-+
-+ if (keys != NULL)
-+ {
-+ i = 0;
-+ while (i < n_keys)
-+ {
-+ _dbus_string_zero (&keys[i].secret);
-+ _dbus_string_free (&keys[i].secret);
-+ ++i;
-+ }
-+
-+ dbus_free (keys);
-+ }
-+
-+ _dbus_string_free (&contents);
-+ _dbus_string_free (&line);
-+
-+ return retval;
-+}
-+
-+/** @} */ /* end of internals */
-+
-+/**
-+ * @addtogroup DBusKeyring
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Increments reference count of the keyring
-+ *
-+ * @param keyring the keyring
-+ * @returns the keyring
-+ */
-+DBusKeyring *
-+_dbus_keyring_ref (DBusKeyring *keyring)
-+{
-+ keyring->refcount += 1;
-+
-+ return keyring;
-+}
-+
-+/**
-+ * Decrements refcount and finalizes if it reaches
-+ * zero.
-+ *
-+ * @param keyring the keyring
-+ */
-+void
-+_dbus_keyring_unref (DBusKeyring *keyring)
-+{
-+ keyring->refcount -= 1;
-+
-+ if (keyring->refcount == 0)
-+ {
-+ _dbus_string_free (&keyring->username);
-+ _dbus_string_free (&keyring->filename);
-+ _dbus_string_free (&keyring->filename_lock);
-+ _dbus_string_free (&keyring->directory);
-+ free_keys (keyring->keys, keyring->n_keys);
-+ dbus_free (keyring);
-+ }
-+}
-+
-+/**
-+ * Creates a new keyring that lives in the ~/.dbus-keyrings
-+ * directory of the given user. If the username is #NULL,
-+ * uses the user owning the current process.
-+ *
-+ * @param username username to get keyring for, or #NULL
-+ * @param context which keyring to get
-+ * @param error return location for errors
-+ * @returns the keyring or #NULL on error
-+ */
-+DBusKeyring*
-+_dbus_keyring_new_homedir (const DBusString *username,
-+ const DBusString *context,
-+ DBusError *error)
-+{
-+ DBusString homedir;
-+ DBusKeyring *keyring;
-+ dbus_bool_t error_set;
-+ DBusString dotdir;
-+ DBusError tmp_error;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ keyring = NULL;
-+ error_set = FALSE;
-+
-+ if (!_dbus_string_init (&homedir))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ _dbus_string_init_const (&dotdir, ".dbus-keyrings");
-+
-+ if (username == NULL)
-+ {
-+ const DBusString *const_homedir;
-+
-+ if (!_dbus_username_from_current_process (&username) ||
-+ !_dbus_homedir_from_current_process (&const_homedir))
-+ goto failed;
-+
-+ if (!_dbus_string_copy (const_homedir, 0,
-+ &homedir, 0))
-+ goto failed;
-+ }
-+ else
-+ {
-+ if (!_dbus_homedir_from_username (username, &homedir))
-+ goto failed;
-+ }
-+
-+#ifdef DBUS_BUILD_TESTS
-+ {
-+ const char *override;
-+
-+ override = _dbus_getenv ("DBUS_TEST_HOMEDIR");
-+ if (override != NULL && *override != '\0')
-+ {
-+ _dbus_string_set_length (&homedir, 0);
-+ if (!_dbus_string_append (&homedir, override))
-+ goto failed;
-+
-+ _dbus_verbose ("Using fake homedir for testing: %s\n",
-+ _dbus_string_get_const_data (&homedir));
-+ }
-+ else
-+ {
-+ static dbus_bool_t already_warned = FALSE;
-+ if (!already_warned)
-+ {
-+ _dbus_warn ("Using your real home directory for testing, set DBUS_TEST_HOMEDIR to avoid\n");
-+ already_warned = TRUE;
-+ }
-+ }
-+ }
-+#endif
-+
-+ _dbus_assert (username != NULL);
-+
-+ keyring = _dbus_keyring_new ();
-+ if (keyring == NULL)
-+ goto failed;
-+
-+ /* should have been validated already, but paranoia check here */
-+ if (!_dbus_keyring_validate_context (context))
-+ {
-+ error_set = TRUE;
-+ dbus_set_error_const (error,
-+ DBUS_ERROR_FAILED,
-+ "Invalid context in keyring creation");
-+ goto failed;
-+ }
-+
-+ if (!_dbus_string_copy (username, 0,
-+ &keyring->username, 0))
-+ goto failed;
-+
-+ if (!_dbus_string_copy (&homedir, 0,
-+ &keyring->directory, 0))
-+ goto failed;
-+
-+ if (!_dbus_concat_dir_and_file (&keyring->directory,
-+ &dotdir))
-+ goto failed;
-+
-+ if (!_dbus_string_copy (&keyring->directory, 0,
-+ &keyring->filename, 0))
-+ goto failed;
-+
-+ if (!_dbus_concat_dir_and_file (&keyring->filename,
-+ context))
-+ goto failed;
-+
-+ if (!_dbus_string_copy (&keyring->filename, 0,
-+ &keyring->filename_lock, 0))
-+ goto failed;
-+
-+ if (!_dbus_string_append (&keyring->filename_lock, ".lock"))
-+ goto failed;
-+
-+ dbus_error_init (&tmp_error);
-+ if (!_dbus_keyring_reload (keyring, FALSE, &tmp_error))
-+ {
-+ _dbus_verbose ("didn't load an existing keyring: %s\n",
-+ tmp_error.message);
-+ dbus_error_free (&tmp_error);
-+ }
-+
-+ /* We don't fail fatally if we can't create the directory,
-+ * but the keyring will probably always be empty
-+ * unless someone else manages to create it
-+ */
-+ dbus_error_init (&tmp_error);
-+ if (!_dbus_create_directory (&keyring->directory,
-+ &tmp_error))
-+ {
-+ _dbus_verbose ("Creating keyring directory: %s\n",
-+ tmp_error.message);
-+ dbus_error_free (&tmp_error);
-+ }
-+
-+ _dbus_string_free (&homedir);
-+
-+ return keyring;
-+
-+ failed:
-+ if (!error_set)
-+ dbus_set_error_const (error,
-+ DBUS_ERROR_NO_MEMORY,
-+ NULL);
-+ if (keyring)
-+ _dbus_keyring_unref (keyring);
-+ _dbus_string_free (&homedir);
-+ return NULL;
-+
-+}
-+
-+/**
-+ * Checks whether the context is a valid context.
-+ * Contexts that might cause confusion when used
-+ * in filenames are not allowed (contexts can't
-+ * start with a dot or contain dir separators).
-+ *
-+ * @todo this is the most inefficient implementation
-+ * imaginable.
-+ *
-+ * @param context the context
-+ * @returns #TRUE if valid
-+ */
-+dbus_bool_t
-+_dbus_keyring_validate_context (const DBusString *context)
-+{
-+ if (_dbus_string_get_length (context) == 0)
-+ {
-+ _dbus_verbose ("context is zero-length\n");
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_validate_ascii (context, 0,
-+ _dbus_string_get_length (context)))
-+ {
-+ _dbus_verbose ("context not valid ascii\n");
-+ return FALSE;
-+ }
-+
-+ /* no directory separators */
-+ if (_dbus_string_find (context, 0, "/", NULL))
-+ {
-+ _dbus_verbose ("context contains a slash\n");
-+ return FALSE;
-+ }
-+
-+ if (_dbus_string_find (context, 0, "\\", NULL))
-+ {
-+ _dbus_verbose ("context contains a backslash\n");
-+ return FALSE;
-+ }
-+
-+ /* prevent attempts to use dotfiles or ".." or ".lock"
-+ * all of which might allow some kind of attack
-+ */
-+ if (_dbus_string_find (context, 0, ".", NULL))
-+ {
-+ _dbus_verbose ("context contains a dot\n");
-+ return FALSE;
-+ }
-+
-+ /* no spaces/tabs, those are used for separators in the protocol */
-+ if (_dbus_string_find_blank (context, 0, NULL))
-+ {
-+ _dbus_verbose ("context contains a blank\n");
-+ return FALSE;
-+ }
-+
-+ if (_dbus_string_find (context, 0, "\n", NULL))
-+ {
-+ _dbus_verbose ("context contains a newline\n");
-+ return FALSE;
-+ }
-+
-+ if (_dbus_string_find (context, 0, "\r", NULL))
-+ {
-+ _dbus_verbose ("context contains a carriage return\n");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static DBusKey*
-+find_recent_key (DBusKeyring *keyring)
-+{
-+ int i;
-+ long tv_sec, tv_usec;
-+
-+ _dbus_get_current_time (&tv_sec, &tv_usec);
-+
-+ i = 0;
-+ while (i < keyring->n_keys)
-+ {
-+ DBusKey *key = &keyring->keys[i];
-+
-+ _dbus_verbose ("Key %d is %ld seconds old\n",
-+ i, tv_sec - key->creation_time);
-+
-+ if ((tv_sec - NEW_KEY_TIMEOUT_SECONDS) < key->creation_time)
-+ return key;
-+
-+ ++i;
-+ }
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Gets a recent key to use for authentication.
-+ * If no recent key exists, creates one. Returns
-+ * the key ID. If a key can't be written to the keyring
-+ * file so no recent key can be created, returns -1.
-+ * All valid keys are > 0.
-+ *
-+ * @param keyring the keyring
-+ * @param error error on failure
-+ * @returns key ID to use for auth, or -1 on failure
-+ */
-+int
-+_dbus_keyring_get_best_key (DBusKeyring *keyring,
-+ DBusError *error)
-+{
-+ DBusKey *key;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ key = find_recent_key (keyring);
-+ if (key)
-+ return key->id;
-+
-+ /* All our keys are too old, or we've never loaded the
-+ * keyring. Create a new one.
-+ */
-+ if (!_dbus_keyring_reload (keyring, TRUE,
-+ error))
-+ return -1;
-+
-+ key = find_recent_key (keyring);
-+ if (key)
-+ return key->id;
-+ else
-+ {
-+ dbus_set_error_const (error,
-+ DBUS_ERROR_FAILED,
-+ "No recent-enough key found in keyring, and unable to create a new key");
-+ return -1;
-+ }
-+}
-+
-+/**
-+ * Checks whether the keyring is for the given username.
-+ *
-+ * @param keyring the keyring
-+ * @param username the username to check
-+ *
-+ * @returns #TRUE if the keyring belongs to the given user
-+ */
-+dbus_bool_t
-+_dbus_keyring_is_for_user (DBusKeyring *keyring,
-+ const DBusString *username)
-+{
-+ return _dbus_string_equal (&keyring->username,
-+ username);
-+}
-+
-+/**
-+ * Gets the hex-encoded secret key for the given ID.
-+ * Returns #FALSE if not enough memory. Returns #TRUE
-+ * but empty key on any other error such as unknown
-+ * key ID.
-+ *
-+ * @param keyring the keyring
-+ * @param key_id the key ID
-+ * @param hex_key string to append hex-encoded key to
-+ * @returns #TRUE if we had enough memory
-+ */
-+dbus_bool_t
-+_dbus_keyring_get_hex_key (DBusKeyring *keyring,
-+ int key_id,
-+ DBusString *hex_key)
-+{
-+ DBusKey *key;
-+
-+ key = find_key_by_id (keyring->keys,
-+ keyring->n_keys,
-+ key_id);
-+ if (key == NULL)
-+ return TRUE; /* had enough memory, so TRUE */
-+
-+ return _dbus_string_hex_encode (&key->secret, 0,
-+ hex_key,
-+ _dbus_string_get_length (hex_key));
-+}
-+
-+/** @} */ /* end of exposed API */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+dbus_bool_t
-+_dbus_keyring_test (void)
-+{
-+ DBusString context;
-+ DBusKeyring *ring1;
-+ DBusKeyring *ring2;
-+ int id;
-+ DBusError error;
-+ int i;
-+
-+ ring1 = NULL;
-+ ring2 = NULL;
-+
-+ /* Context validation */
-+
-+ _dbus_string_init_const (&context, "foo");
-+ _dbus_assert (_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, "org_freedesktop_blah");
-+ _dbus_assert (_dbus_keyring_validate_context (&context));
-+
-+ _dbus_string_init_const (&context, "");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, ".foo");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, "bar.foo");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, "bar/foo");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, "bar\\foo");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, "foo\xfa\xf0");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, "foo\x80");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, "foo\x7f");
-+ _dbus_assert (_dbus_keyring_validate_context (&context));
-+ _dbus_string_init_const (&context, "foo bar");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+
-+ if (!_dbus_string_init (&context))
-+ _dbus_assert_not_reached ("no memory");
-+ if (!_dbus_string_append_byte (&context, '\0'))
-+ _dbus_assert_not_reached ("no memory");
-+ _dbus_assert (!_dbus_keyring_validate_context (&context));
-+ _dbus_string_free (&context);
-+
-+ /* Now verify that if we create a key in keyring 1,
-+ * it is properly loaded in keyring 2
-+ */
-+
-+ _dbus_string_init_const (&context, "org_freedesktop_dbus_testsuite");
-+ dbus_error_init (&error);
-+ ring1 = _dbus_keyring_new_homedir (NULL, &context,
-+ &error);
-+ _dbus_assert (ring1);
-+ _dbus_assert (error.name == NULL);
-+
-+ id = _dbus_keyring_get_best_key (ring1, &error);
-+ if (id < 0)
-+ {
-+ fprintf (stderr, "Could not load keyring: %s\n", error.message);
-+ dbus_error_free (&error);
-+ goto failure;
-+ }
-+
-+ ring2 = _dbus_keyring_new_homedir (NULL, &context, &error);
-+ _dbus_assert (ring2);
-+ _dbus_assert (error.name == NULL);
-+
-+ if (ring1->n_keys != ring2->n_keys)
-+ {
-+ fprintf (stderr, "Different number of keys in keyrings\n");
-+ goto failure;
-+ }
-+
-+ /* We guarantee we load and save keeping keys in a fixed
-+ * order
-+ */
-+ i = 0;
-+ while (i < ring1->n_keys)
-+ {
-+ if (ring1->keys[i].id != ring2->keys[i].id)
-+ {
-+ fprintf (stderr, "Keyring 1 has first key ID %d and keyring 2 has %d\n",
-+ ring1->keys[i].id, ring2->keys[i].id);
-+ goto failure;
-+ }
-+
-+ if (ring1->keys[i].creation_time != ring2->keys[i].creation_time)
-+ {
-+ fprintf (stderr, "Keyring 1 has first key time %ld and keyring 2 has %ld\n",
-+ ring1->keys[i].creation_time, ring2->keys[i].creation_time);
-+ goto failure;
-+ }
-+
-+ if (!_dbus_string_equal (&ring1->keys[i].secret,
-+ &ring2->keys[i].secret))
-+ {
-+ fprintf (stderr, "Keyrings 1 and 2 have different secrets for same ID/timestamp\n");
-+ goto failure;
-+ }
-+
-+ ++i;
-+ }
-+
-+ printf (" %d keys in test\n", ring1->n_keys);
-+
-+ /* Test ref/unref */
-+ _dbus_keyring_ref (ring1);
-+ _dbus_keyring_ref (ring2);
-+ _dbus_keyring_unref (ring1);
-+ _dbus_keyring_unref (ring2);
-+
-+
-+ /* really unref */
-+ _dbus_keyring_unref (ring1);
-+ _dbus_keyring_unref (ring2);
-+
-+ return TRUE;
-+
-+ failure:
-+ if (ring1)
-+ _dbus_keyring_unref (ring1);
-+ if (ring2)
-+ _dbus_keyring_unref (ring2);
-+
-+ return FALSE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-keyring.h dbus-0.61/dbus/dbus-keyring.h
---- dbus-0.61.orig/dbus/dbus-keyring.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-keyring.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,50 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-keyring.h Store secret cookies in your homedir
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_KEYRING_H
-+#define DBUS_KEYRING_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-string.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusKeyring DBusKeyring;
-+
-+DBusKeyring* _dbus_keyring_new_homedir (const DBusString *username,
-+ const DBusString *context,
-+ DBusError *error);
-+DBusKeyring* _dbus_keyring_ref (DBusKeyring *keyring);
-+void _dbus_keyring_unref (DBusKeyring *keyring);
-+dbus_bool_t _dbus_keyring_validate_context (const DBusString *context);
-+int _dbus_keyring_get_best_key (DBusKeyring *keyring,
-+ DBusError *error);
-+dbus_bool_t _dbus_keyring_is_for_user (DBusKeyring *keyring,
-+ const DBusString *username);
-+dbus_bool_t _dbus_keyring_get_hex_key (DBusKeyring *keyring,
-+ int key_id,
-+ DBusString *hex_key);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_KEYRING_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-list.c dbus-0.61/dbus/dbus-list.c
---- dbus-0.61.orig/dbus/dbus-list.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-list.c 2005-12-01 01:07:20.000000000 +0100
-@@ -0,0 +1,1406 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-list.c Generic linked list utility (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-list.h"
-+#include "dbus-mempool.h"
-+#include "dbus-threads-internal.h"
-+
-+/**
-+ * @defgroup DBusList Linked list
-+ * @ingroup DBusInternals
-+ * @brief DBusList data structure
-+ *
-+ * Types and functions related to DBusList.
-+ */
-+
-+static DBusMemPool *list_pool;
-+_DBUS_DEFINE_GLOBAL_LOCK (list);
-+
-+/**
-+ * @defgroup DBusListInternals Linked list implementation details
-+ * @ingroup DBusInternals
-+ * @brief DBusList implementation details
-+ *
-+ * The guts of DBusList.
-+ *
-+ * @{
-+ */
-+
-+/* the mem pool is probably a speed hit, with the thread
-+ * lock, though it does still save memory - unknown.
-+ */
-+static DBusList*
-+alloc_link (void *data)
-+{
-+ DBusList *link;
-+
-+ if (!_DBUS_LOCK (list))
-+ return NULL;
-+
-+ if (list_pool == NULL)
-+ {
-+ list_pool = _dbus_mem_pool_new (sizeof (DBusList), TRUE);
-+
-+ if (list_pool == NULL)
-+ {
-+ _DBUS_UNLOCK (list);
-+ return NULL;
-+ }
-+
-+ link = _dbus_mem_pool_alloc (list_pool);
-+ if (link == NULL)
-+ {
-+ _dbus_mem_pool_free (list_pool);
-+ list_pool = NULL;
-+ _DBUS_UNLOCK (list);
-+ return NULL;
-+ }
-+ }
-+ else
-+ {
-+ link = _dbus_mem_pool_alloc (list_pool);
-+ }
-+
-+ if (link)
-+ link->data = data;
-+
-+ _DBUS_UNLOCK (list);
-+
-+ return link;
-+}
-+
-+static void
-+free_link (DBusList *link)
-+{
-+ _DBUS_LOCK (list);
-+ if (_dbus_mem_pool_dealloc (list_pool, link))
-+ {
-+ _dbus_mem_pool_free (list_pool);
-+ list_pool = NULL;
-+ }
-+
-+ _DBUS_UNLOCK (list);
-+}
-+
-+static void
-+link_before (DBusList **list,
-+ DBusList *before_this_link,
-+ DBusList *link)
-+{
-+ if (*list == NULL)
-+ {
-+ link->prev = link;
-+ link->next = link;
-+ *list = link;
-+ }
-+ else
-+ {
-+ link->next = before_this_link;
-+ link->prev = before_this_link->prev;
-+ before_this_link->prev = link;
-+ link->prev->next = link;
-+
-+ if (before_this_link == *list)
-+ *list = link;
-+ }
-+}
-+
-+static void
-+link_after (DBusList **list,
-+ DBusList *after_this_link,
-+ DBusList *link)
-+{
-+ if (*list == NULL)
-+ {
-+ link->prev = link;
-+ link->next = link;
-+ *list = link;
-+ }
-+ else
-+ {
-+ link->prev = after_this_link;
-+ link->next = after_this_link->next;
-+ after_this_link->next = link;
-+ link->next->prev = link;
-+ }
-+}
-+
-+/** @} */
-+
-+/**
-+ * @addtogroup DBusList
-+ * @{
-+ */
-+
-+/**
-+ * @struct DBusList
-+ *
-+ * A node in a linked list.
-+ *
-+ * DBusList is a circular list; that is, the tail of the list
-+ * points back to the head of the list. The empty list is
-+ * represented by a #NULL pointer.
-+ */
-+
-+/**
-+ * @def _dbus_list_get_next_link
-+ *
-+ * Gets the next link in the list, or #NULL if
-+ * there are no more links. Used for iteration.
-+ *
-+ * @code
-+ * DBusList *link;
-+ * link = _dbus_list_get_first_link (&list);
-+ * while (link != NULL)
-+ * {
-+ * printf ("value is %p\n", link->data);
-+ * link = _dbus_list_get_next_link (&link);
-+ * }
-+ * @endcode
-+ *
-+ * @param list address of the list head.
-+ * @param link current link.
-+ * @returns the next link, or %NULL if none.
-+ *
-+ */
-+
-+/**
-+ * @def _dbus_list_get_prev_link
-+ *
-+ * Gets the previous link in the list, or #NULL if
-+ * there are no more links. Used for iteration.
-+ *
-+ * @code
-+ * DBusList *link;
-+ * link = _dbus_list_get_last_link (&list);
-+ * while (link != NULL)
-+ * {
-+ * printf ("value is %p\n", link->data);
-+ * link = _dbus_list_get_prev_link (&link);
-+ * }
-+ * @endcode
-+ *
-+ * @param list address of the list head.
-+ * @param link current link.
-+ * @returns the previous link, or %NULL if none.
-+ *
-+ */
-+
-+/**
-+ * Allocates a linked list node. Useful for preallocating
-+ * nodes and using _dbus_list_append_link() to avoid
-+ * allocations.
-+ *
-+ * @param data the value to store in the link.
-+ * @returns a newly allocated link.
-+ */
-+DBusList*
-+_dbus_list_alloc_link (void *data)
-+{
-+ return alloc_link (data);
-+}
-+
-+/**
-+ * Frees a linked list node allocated with _dbus_list_alloc_link.
-+ * Does not free the data in the node.
-+ *
-+ * @param link the list node
-+ */
-+void
-+_dbus_list_free_link (DBusList *link)
-+{
-+ free_link (link);
-+}
-+
-+
-+/**
-+ * Appends a value to the list. May return #FALSE
-+ * if insufficient memory exists to add a list link.
-+ * This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @param data the value to append.
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_list_append (DBusList **list,
-+ void *data)
-+{
-+ if (!_dbus_list_prepend (list, data))
-+ return FALSE;
-+
-+ /* Now cycle the list forward one so the prepended node is the tail */
-+ *list = (*list)->next;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Prepends a value to the list. May return #FALSE
-+ * if insufficient memory exists to add a list link.
-+ * This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @param data the value to prepend.
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_list_prepend (DBusList **list,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = alloc_link (data);
-+ if (link == NULL)
-+ return FALSE;
-+
-+ link_before (list, *list, link);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Appends a link to the list.
-+ * Cannot fail due to out of memory.
-+ * This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @param link the link to append.
-+ */
-+void
-+_dbus_list_append_link (DBusList **list,
-+ DBusList *link)
-+{
-+ _dbus_list_prepend_link (list, link);
-+
-+ /* Now cycle the list forward one so the prepended node is the tail */
-+ *list = (*list)->next;
-+}
-+
-+/**
-+ * Prepends a link to the list.
-+ * Cannot fail due to out of memory.
-+ * This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @param link the link to prepend.
-+ */
-+void
-+_dbus_list_prepend_link (DBusList **list,
-+ DBusList *link)
-+{
-+ link_before (list, *list, link);
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Inserts data into the list before the given existing link.
-+ *
-+ * @param list the list to modify
-+ * @param before_this_link existing link to insert before, or #NULL to append
-+ * @param data the value to insert
-+ * @returns #TRUE on success, #FALSE if memory allocation fails
-+ */
-+dbus_bool_t
-+_dbus_list_insert_before (DBusList **list,
-+ DBusList *before_this_link,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ if (before_this_link == NULL)
-+ return _dbus_list_append (list, data);
-+ else
-+ {
-+ link = alloc_link (data);
-+ if (link == NULL)
-+ return FALSE;
-+
-+ link_before (list, before_this_link, link);
-+ }
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Inserts data into the list after the given existing link.
-+ *
-+ * @param list the list to modify
-+ * @param after_this_link existing link to insert after, or #NULL to prepend
-+ * @param data the value to insert
-+ * @returns #TRUE on success, #FALSE if memory allocation fails
-+ */
-+dbus_bool_t
-+_dbus_list_insert_after (DBusList **list,
-+ DBusList *after_this_link,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ if (after_this_link == NULL)
-+ return _dbus_list_prepend (list, data);
-+ else
-+ {
-+ link = alloc_link (data);
-+ if (link == NULL)
-+ return FALSE;
-+
-+ link_after (list, after_this_link, link);
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Inserts a link into the list before the given existing link.
-+ *
-+ * @param list the list to modify
-+ * @param before_this_link existing link to insert before, or #NULL to append
-+ * @param link the link to insert
-+ */
-+void
-+_dbus_list_insert_before_link (DBusList **list,
-+ DBusList *before_this_link,
-+ DBusList *link)
-+{
-+ if (before_this_link == NULL)
-+ _dbus_list_append_link (list, link);
-+ else
-+ link_before (list, before_this_link, link);
-+}
-+
-+/**
-+ * Inserts a link into the list after the given existing link.
-+ *
-+ * @param list the list to modify
-+ * @param after_this_link existing link to insert after, or #NULL to prepend
-+ * @param link the link to insert
-+ */
-+void
-+_dbus_list_insert_after_link (DBusList **list,
-+ DBusList *after_this_link,
-+ DBusList *link)
-+{
-+ if (after_this_link == NULL)
-+ _dbus_list_prepend_link (list, link);
-+ else
-+ link_after (list, after_this_link, link);
-+}
-+
-+/**
-+ * Removes a value from the list. Only removes the
-+ * first value equal to the given data pointer,
-+ * even if multiple values exist which match.
-+ * This is a linear-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @param data the value to remove.
-+ * @returns #TRUE if a value was found to remove.
-+ */
-+dbus_bool_t
-+_dbus_list_remove (DBusList **list,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = *list;
-+ while (link != NULL)
-+ {
-+ if (link->data == data)
-+ {
-+ _dbus_list_remove_link (list, link);
-+ return TRUE;
-+ }
-+
-+ link = _dbus_list_get_next_link (list, link);
-+ }
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Removes a value from the list. Only removes the
-+ * last value equal to the given data pointer,
-+ * even if multiple values exist which match.
-+ * This is a linear-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @param data the value to remove.
-+ * @returns #TRUE if a value was found to remove.
-+ */
-+dbus_bool_t
-+_dbus_list_remove_last (DBusList **list,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_find_last (list, data);
-+ if (link)
-+ {
-+ _dbus_list_remove_link (list, link);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Finds a value in the list. Returns the last link
-+ * with value equal to the given data pointer.
-+ * This is a linear-time operation.
-+ * Returns #NULL if no value found that matches.
-+ *
-+ * @param list address of the list head.
-+ * @param data the value to find.
-+ * @returns the link if found
-+ */
-+DBusList*
-+_dbus_list_find_last (DBusList **list,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_last_link (list);
-+
-+ while (link != NULL)
-+ {
-+ if (link->data == data)
-+ return link;
-+
-+ link = _dbus_list_get_prev_link (list, link);
-+ }
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Removes the given link from the list, but doesn't
-+ * free it. _dbus_list_remove_link() both removes the
-+ * link and also frees it.
-+ *
-+ * @param list the list
-+ * @param link the link in the list
-+ */
-+void
-+_dbus_list_unlink (DBusList **list,
-+ DBusList *link)
-+{
-+ if (link->next == link)
-+ {
-+ /* one-element list */
-+ *list = NULL;
-+ }
-+ else
-+ {
-+ link->prev->next = link->next;
-+ link->next->prev = link->prev;
-+
-+ if (*list == link)
-+ *list = link->next;
-+ }
-+
-+ link->next = NULL;
-+ link->prev = NULL;
-+}
-+
-+/**
-+ * Removes a link from the list. This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @param link the list link to remove.
-+ */
-+void
-+_dbus_list_remove_link (DBusList **list,
-+ DBusList *link)
-+{
-+ _dbus_list_unlink (list, link);
-+ free_link (link);
-+}
-+
-+/**
-+ * Frees all links in the list and sets the list head to #NULL. Does
-+ * not free the data in each link, for obvious reasons. This is a
-+ * linear-time operation.
-+ *
-+ * @param list address of the list head.
-+ */
-+void
-+_dbus_list_clear (DBusList **list)
-+{
-+ DBusList *link;
-+
-+ link = *list;
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (list, link);
-+
-+ free_link (link);
-+
-+ link = next;
-+ }
-+
-+ *list = NULL;
-+}
-+
-+/**
-+ * Gets the first link in the list.
-+ * This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @returns the first link, or #NULL for an empty list.
-+ */
-+DBusList*
-+_dbus_list_get_first_link (DBusList **list)
-+{
-+ return *list;
-+}
-+
-+/**
-+ * Gets the last link in the list.
-+ * This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @returns the last link, or #NULL for an empty list.
-+ */
-+DBusList*
-+_dbus_list_get_last_link (DBusList **list)
-+{
-+ if (*list == NULL)
-+ return NULL;
-+ else
-+ return (*list)->prev;
-+}
-+
-+/**
-+ * Gets the last data in the list.
-+ * This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @returns the last data in the list, or #NULL for an empty list.
-+ */
-+void*
-+_dbus_list_get_last (DBusList **list)
-+{
-+ if (*list == NULL)
-+ return NULL;
-+ else
-+ return (*list)->prev->data;
-+}
-+
-+/**
-+ * Gets the first data in the list.
-+ * This is a constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @returns the first data in the list, or #NULL for an empty list.
-+ */
-+void*
-+_dbus_list_get_first (DBusList **list)
-+{
-+ if (*list == NULL)
-+ return NULL;
-+ else
-+ return (*list)->data;
-+}
-+
-+/**
-+ * Removes the first link in the list and returns it. This is a
-+ * constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @returns the first link in the list, or #NULL for an empty list.
-+ */
-+DBusList*
-+_dbus_list_pop_first_link (DBusList **list)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (list);
-+ if (link == NULL)
-+ return NULL;
-+
-+ _dbus_list_unlink (list, link);
-+
-+ return link;
-+}
-+
-+/**
-+ * Removes the first value in the list and returns it. This is a
-+ * constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @returns the first data in the list, or #NULL for an empty list.
-+ */
-+void*
-+_dbus_list_pop_first (DBusList **list)
-+{
-+ DBusList *link;
-+ void *data;
-+
-+ link = _dbus_list_get_first_link (list);
-+ if (link == NULL)
-+ return NULL;
-+
-+ data = link->data;
-+ _dbus_list_remove_link (list, link);
-+
-+ return data;
-+}
-+
-+/**
-+ * Removes the last value in the list and returns it. This is a
-+ * constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @returns the last data in the list, or #NULL for an empty list.
-+ */
-+void*
-+_dbus_list_pop_last (DBusList **list)
-+{
-+ DBusList *link;
-+ void *data;
-+
-+ link = _dbus_list_get_last_link (list);
-+ if (link == NULL)
-+ return NULL;
-+
-+ data = link->data;
-+ _dbus_list_remove_link (list, link);
-+
-+ return data;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Removes the last link in the list and returns it. This is a
-+ * constant-time operation.
-+ *
-+ * @param list address of the list head.
-+ * @returns the last link in the list, or #NULL for an empty list.
-+ */
-+DBusList*
-+_dbus_list_pop_last_link (DBusList **list)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_last_link (list);
-+ if (link == NULL)
-+ return NULL;
-+
-+ _dbus_list_unlink (list, link);
-+
-+ return link;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Copies a list. This is a linear-time operation. If there isn't
-+ * enough memory to copy the entire list, the destination list will be
-+ * set to #NULL.
-+ *
-+ * @param list address of the head of the list to copy.
-+ * @param dest address where the copied list should be placed.
-+ * @returns #TRUE on success, #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_list_copy (DBusList **list,
-+ DBusList **dest)
-+{
-+ DBusList *link;
-+
-+ _dbus_assert (list != dest);
-+
-+ *dest = NULL;
-+
-+ link = *list;
-+ while (link != NULL)
-+ {
-+ if (!_dbus_list_append (dest, link->data))
-+ {
-+ /* free what we have so far */
-+ _dbus_list_clear (dest);
-+ return FALSE;
-+ }
-+
-+ link = _dbus_list_get_next_link (list, link);
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets the length of a list. This is a linear-time
-+ * operation.
-+ *
-+ * @param list address of the head of the list
-+ * @returns number of elements in the list.
-+ */
-+int
-+_dbus_list_get_length (DBusList **list)
-+{
-+ DBusList *link;
-+ int length;
-+
-+ length = 0;
-+
-+ link = *list;
-+ while (link != NULL)
-+ {
-+ ++length;
-+
-+ link = _dbus_list_get_next_link (list, link);
-+ }
-+
-+ return length;
-+}
-+
-+/**
-+ * Calls the given function for each element in the list. The
-+ * function is passed the list element as its first argument, and the
-+ * given data as its second argument.
-+ *
-+ * @param list address of the head of the list.
-+ * @param function function to call for each element.
-+ * @param data extra data for the function.
-+ *
-+ */
-+void
-+_dbus_list_foreach (DBusList **list,
-+ DBusForeachFunction function,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = *list;
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (list, link);
-+
-+ (* function) (link->data, data);
-+
-+ link = next;
-+ }
-+}
-+
-+/**
-+ * Check whether length is exactly one.
-+ *
-+ * @param list the list
-+ * @returns #TRUE if length is exactly one
-+ */
-+dbus_bool_t
-+_dbus_list_length_is_one (DBusList **list)
-+{
-+ return (*list != NULL &&
-+ (*list)->next == *list);
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+static void
-+verify_list (DBusList **list)
-+{
-+ DBusList *link;
-+ int length;
-+
-+ link = *list;
-+
-+ if (link == NULL)
-+ return;
-+
-+ if (link->next == link)
-+ {
-+ _dbus_assert (link->prev == link);
-+ _dbus_assert (*list == link);
-+ return;
-+ }
-+
-+ length = 0;
-+ do
-+ {
-+ length += 1;
-+ _dbus_assert (link->prev->next == link);
-+ _dbus_assert (link->next->prev == link);
-+ link = link->next;
-+ }
-+ while (link != *list);
-+
-+ _dbus_assert (length == _dbus_list_get_length (list));
-+
-+ if (length == 1)
-+ _dbus_assert (_dbus_list_length_is_one (list));
-+ else
-+ _dbus_assert (!_dbus_list_length_is_one (list));
-+}
-+
-+static dbus_bool_t
-+is_ascending_sequence (DBusList **list)
-+{
-+ DBusList *link;
-+ int prev;
-+
-+ prev = _DBUS_INT_MIN;
-+
-+ link = _dbus_list_get_first_link (list);
-+ while (link != NULL)
-+ {
-+ int v = _DBUS_POINTER_TO_INT (link->data);
-+
-+ if (v <= prev)
-+ return FALSE;
-+
-+ prev = v;
-+
-+ link = _dbus_list_get_next_link (list, link);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+is_descending_sequence (DBusList **list)
-+{
-+ DBusList *link;
-+ int prev;
-+
-+ prev = _DBUS_INT_MAX;
-+
-+ link = _dbus_list_get_first_link (list);
-+ while (link != NULL)
-+ {
-+ int v = _DBUS_POINTER_TO_INT (link->data);
-+
-+ if (v >= prev)
-+ return FALSE;
-+
-+ prev = v;
-+
-+ link = _dbus_list_get_next_link (list, link);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+all_even_values (DBusList **list)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (list);
-+ while (link != NULL)
-+ {
-+ int v = _DBUS_POINTER_TO_INT (link->data);
-+
-+ if ((v % 2) != 0)
-+ return FALSE;
-+
-+ link = _dbus_list_get_next_link (list, link);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+all_odd_values (DBusList **list)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (list);
-+ while (link != NULL)
-+ {
-+ int v = _DBUS_POINTER_TO_INT (link->data);
-+
-+ if ((v % 2) == 0)
-+ return FALSE;
-+
-+ link = _dbus_list_get_next_link (list, link);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+lists_equal (DBusList **list1,
-+ DBusList **list2)
-+{
-+ DBusList *link1;
-+ DBusList *link2;
-+
-+ link1 = _dbus_list_get_first_link (list1);
-+ link2 = _dbus_list_get_first_link (list2);
-+ while (link1 && link2)
-+ {
-+ if (link1->data != link2->data)
-+ return FALSE;
-+
-+ link1 = _dbus_list_get_next_link (list1, link1);
-+ link2 = _dbus_list_get_next_link (list2, link2);
-+ }
-+
-+ if (link1 || link2)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * @ingroup DBusListInternals
-+ * Unit test for DBusList
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_list_test (void)
-+{
-+ DBusList *list1;
-+ DBusList *list2;
-+ DBusList *link1;
-+ DBusList *link2;
-+ DBusList *copy1;
-+ DBusList *copy2;
-+ int i;
-+
-+ list1 = NULL;
-+ list2 = NULL;
-+
-+ /* Test append and prepend */
-+
-+ i = 0;
-+ while (i < 10)
-+ {
-+ if (!_dbus_list_append (&list1, _DBUS_INT_TO_POINTER (i)))
-+ _dbus_assert_not_reached ("could not allocate for append");
-+
-+ if (!_dbus_list_prepend (&list2, _DBUS_INT_TO_POINTER (i)))
-+ _dbus_assert_not_reached ("count not allocate for prepend");
-+ ++i;
-+
-+ verify_list (&list1);
-+ verify_list (&list2);
-+
-+ _dbus_assert (_dbus_list_get_length (&list1) == i);
-+ _dbus_assert (_dbus_list_get_length (&list2) == i);
-+ }
-+
-+ _dbus_assert (is_ascending_sequence (&list1));
-+ _dbus_assert (is_descending_sequence (&list2));
-+
-+ /* Test list clear */
-+ _dbus_list_clear (&list1);
-+ _dbus_list_clear (&list2);
-+
-+ verify_list (&list1);
-+ verify_list (&list2);
-+
-+ /* Test get_first, get_last, pop_first, pop_last */
-+
-+ i = 0;
-+ while (i < 10)
-+ {
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (i));
-+ _dbus_list_prepend (&list2, _DBUS_INT_TO_POINTER (i));
-+ ++i;
-+ }
-+
-+ --i;
-+ while (i >= 0)
-+ {
-+ void *got_data1;
-+ void *got_data2;
-+
-+ void *data1;
-+ void *data2;
-+
-+ got_data1 = _dbus_list_get_last (&list1);
-+ got_data2 = _dbus_list_get_first (&list2);
-+
-+ data1 = _dbus_list_pop_last (&list1);
-+ data2 = _dbus_list_pop_first (&list2);
-+
-+ _dbus_assert (got_data1 == data1);
-+ _dbus_assert (got_data2 == data2);
-+
-+ _dbus_assert (_DBUS_POINTER_TO_INT (data1) == i);
-+ _dbus_assert (_DBUS_POINTER_TO_INT (data2) == i);
-+
-+ verify_list (&list1);
-+ verify_list (&list2);
-+
-+ _dbus_assert (is_ascending_sequence (&list1));
-+ _dbus_assert (is_descending_sequence (&list2));
-+
-+ --i;
-+ }
-+
-+ _dbus_assert (list1 == NULL);
-+ _dbus_assert (list2 == NULL);
-+
-+ /* Test get_first_link, get_last_link, pop_first_link, pop_last_link */
-+
-+ i = 0;
-+ while (i < 10)
-+ {
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (i));
-+ _dbus_list_prepend (&list2, _DBUS_INT_TO_POINTER (i));
-+ ++i;
-+ }
-+
-+ --i;
-+ while (i >= 0)
-+ {
-+ DBusList *got_link1;
-+ DBusList *got_link2;
-+
-+ DBusList *link1;
-+ DBusList *link2;
-+
-+ void *data1;
-+ void *data2;
-+
-+ got_link1 = _dbus_list_get_last_link (&list1);
-+ got_link2 = _dbus_list_get_first_link (&list2);
-+
-+ link1 = _dbus_list_pop_last_link (&list1);
-+ link2 = _dbus_list_pop_first_link (&list2);
-+
-+ _dbus_assert (got_link1 == link1);
-+ _dbus_assert (got_link2 == link2);
-+
-+ data1 = link1->data;
-+ data2 = link2->data;
-+
-+ _dbus_list_free_link (link1);
-+ _dbus_list_free_link (link2);
-+
-+ _dbus_assert (_DBUS_POINTER_TO_INT (data1) == i);
-+ _dbus_assert (_DBUS_POINTER_TO_INT (data2) == i);
-+
-+ verify_list (&list1);
-+ verify_list (&list2);
-+
-+ _dbus_assert (is_ascending_sequence (&list1));
-+ _dbus_assert (is_descending_sequence (&list2));
-+
-+ --i;
-+ }
-+
-+ _dbus_assert (list1 == NULL);
-+ _dbus_assert (list2 == NULL);
-+
-+ /* Test iteration */
-+
-+ i = 0;
-+ while (i < 10)
-+ {
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (i));
-+ _dbus_list_prepend (&list2, _DBUS_INT_TO_POINTER (i));
-+ ++i;
-+
-+ verify_list (&list1);
-+ verify_list (&list2);
-+
-+ _dbus_assert (_dbus_list_get_length (&list1) == i);
-+ _dbus_assert (_dbus_list_get_length (&list2) == i);
-+ }
-+
-+ _dbus_assert (is_ascending_sequence (&list1));
-+ _dbus_assert (is_descending_sequence (&list2));
-+
-+ --i;
-+ link2 = _dbus_list_get_first_link (&list2);
-+ while (link2 != NULL)
-+ {
-+ verify_list (&link2); /* pretend this link is the head */
-+
-+ _dbus_assert (_DBUS_POINTER_TO_INT (link2->data) == i);
-+
-+ link2 = _dbus_list_get_next_link (&list2, link2);
-+ --i;
-+ }
-+
-+ i = 0;
-+ link1 = _dbus_list_get_first_link (&list1);
-+ while (link1 != NULL)
-+ {
-+ verify_list (&link1); /* pretend this link is the head */
-+
-+ _dbus_assert (_DBUS_POINTER_TO_INT (link1->data) == i);
-+
-+ link1 = _dbus_list_get_next_link (&list1, link1);
-+ ++i;
-+ }
-+
-+ --i;
-+ link1 = _dbus_list_get_last_link (&list1);
-+ while (link1 != NULL)
-+ {
-+ verify_list (&link1); /* pretend this link is the head */
-+
-+ _dbus_assert (_DBUS_POINTER_TO_INT (link1->data) == i);
-+
-+ link1 = _dbus_list_get_prev_link (&list1, link1);
-+ --i;
-+ }
-+
-+ _dbus_list_clear (&list1);
-+ _dbus_list_clear (&list2);
-+
-+ /* Test remove */
-+
-+ i = 0;
-+ while (i < 10)
-+ {
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (i));
-+ _dbus_list_prepend (&list2, _DBUS_INT_TO_POINTER (i));
-+ ++i;
-+ }
-+
-+ --i;
-+ while (i >= 0)
-+ {
-+ if ((i % 2) == 0)
-+ {
-+ if (!_dbus_list_remove (&list1, _DBUS_INT_TO_POINTER (i)))
-+ _dbus_assert_not_reached ("element should have been in list");
-+ if (!_dbus_list_remove (&list2, _DBUS_INT_TO_POINTER (i)))
-+ _dbus_assert_not_reached ("element should have been in list");
-+
-+ verify_list (&list1);
-+ verify_list (&list2);
-+ }
-+ --i;
-+ }
-+
-+ _dbus_assert (all_odd_values (&list1));
-+ _dbus_assert (all_odd_values (&list2));
-+
-+ _dbus_list_clear (&list1);
-+ _dbus_list_clear (&list2);
-+
-+ /* test removing the other half of the elements */
-+
-+ i = 0;
-+ while (i < 10)
-+ {
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (i));
-+ _dbus_list_prepend (&list2, _DBUS_INT_TO_POINTER (i));
-+ ++i;
-+ }
-+
-+ --i;
-+ while (i >= 0)
-+ {
-+ if ((i % 2) != 0)
-+ {
-+ if (!_dbus_list_remove (&list1, _DBUS_INT_TO_POINTER (i)))
-+ _dbus_assert_not_reached ("element should have been in list");
-+ if (!_dbus_list_remove (&list2, _DBUS_INT_TO_POINTER (i)))
-+ _dbus_assert_not_reached ("element should have been in list");
-+
-+ verify_list (&list1);
-+ verify_list (&list2);
-+ }
-+ --i;
-+ }
-+
-+ _dbus_assert (all_even_values (&list1));
-+ _dbus_assert (all_even_values (&list2));
-+
-+ /* clear list using remove_link */
-+ while (list1 != NULL)
-+ {
-+ _dbus_list_remove_link (&list1, list1);
-+ verify_list (&list1);
-+ }
-+ while (list2 != NULL)
-+ {
-+ _dbus_list_remove_link (&list2, list2);
-+ verify_list (&list2);
-+ }
-+
-+ /* Test remove link more generally */
-+ i = 0;
-+ while (i < 10)
-+ {
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (i));
-+ _dbus_list_prepend (&list2, _DBUS_INT_TO_POINTER (i));
-+ ++i;
-+ }
-+
-+ --i;
-+ link2 = _dbus_list_get_first_link (&list2);
-+ while (link2 != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&list2, link2);
-+
-+ _dbus_assert (_DBUS_POINTER_TO_INT (link2->data) == i);
-+
-+ if ((i % 2) == 0)
-+ _dbus_list_remove_link (&list2, link2);
-+
-+ verify_list (&list2);
-+
-+ link2 = next;
-+ --i;
-+ }
-+
-+ _dbus_assert (all_odd_values (&list2));
-+ _dbus_list_clear (&list2);
-+
-+ i = 0;
-+ link1 = _dbus_list_get_first_link (&list1);
-+ while (link1 != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&list1, link1);
-+
-+ _dbus_assert (_DBUS_POINTER_TO_INT (link1->data) == i);
-+
-+ if ((i % 2) != 0)
-+ _dbus_list_remove_link (&list1, link1);
-+
-+ verify_list (&list1);
-+
-+ link1 = next;
-+ ++i;
-+ }
-+
-+ _dbus_assert (all_even_values (&list1));
-+ _dbus_list_clear (&list1);
-+
-+ /* Test copying a list */
-+ i = 0;
-+ while (i < 10)
-+ {
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (i));
-+ _dbus_list_prepend (&list2, _DBUS_INT_TO_POINTER (i));
-+ ++i;
-+ }
-+
-+ /* bad pointers, because they are allowed in the copy dest */
-+ copy1 = _DBUS_INT_TO_POINTER (0x342234);
-+ copy2 = _DBUS_INT_TO_POINTER (23);
-+
-+ _dbus_list_copy (&list1, ©1);
-+ verify_list (&list1);
-+ verify_list (©1);
-+ _dbus_assert (lists_equal (&list1, ©1));
-+
-+ _dbus_list_copy (&list2, ©2);
-+ verify_list (&list2);
-+ verify_list (©2);
-+ _dbus_assert (lists_equal (&list2, ©2));
-+
-+ /* Now test copying empty lists */
-+ _dbus_list_clear (&list1);
-+ _dbus_list_clear (&list2);
-+ _dbus_list_clear (©1);
-+ _dbus_list_clear (©2);
-+
-+ /* bad pointers, because they are allowed in the copy dest */
-+ copy1 = _DBUS_INT_TO_POINTER (0x342234);
-+ copy2 = _DBUS_INT_TO_POINTER (23);
-+
-+ _dbus_list_copy (&list1, ©1);
-+ verify_list (&list1);
-+ verify_list (©1);
-+ _dbus_assert (lists_equal (&list1, ©1));
-+
-+ _dbus_list_copy (&list2, ©2);
-+ verify_list (&list2);
-+ verify_list (©2);
-+ _dbus_assert (lists_equal (&list2, ©2));
-+
-+ _dbus_list_clear (&list1);
-+ _dbus_list_clear (&list2);
-+
-+ /* insert_before on empty list */
-+ _dbus_list_insert_before (&list1, NULL,
-+ _DBUS_INT_TO_POINTER (0));
-+ verify_list (&list1);
-+
-+ /* inserting before first element */
-+ _dbus_list_insert_before (&list1, list1,
-+ _DBUS_INT_TO_POINTER (2));
-+ verify_list (&list1);
-+ _dbus_assert (is_descending_sequence (&list1));
-+
-+ /* inserting in the middle */
-+ _dbus_list_insert_before (&list1, list1->next,
-+ _DBUS_INT_TO_POINTER (1));
-+ verify_list (&list1);
-+ _dbus_assert (is_descending_sequence (&list1));
-+
-+ /* using insert_before to append */
-+ _dbus_list_insert_before (&list1, NULL,
-+ _DBUS_INT_TO_POINTER (-1));
-+ verify_list (&list1);
-+ _dbus_assert (is_descending_sequence (&list1));
-+
-+ _dbus_list_clear (&list1);
-+
-+ /* insert_after on empty list */
-+ _dbus_list_insert_after (&list1, NULL,
-+ _DBUS_INT_TO_POINTER (0));
-+ verify_list (&list1);
-+
-+ /* inserting after first element */
-+ _dbus_list_insert_after (&list1, list1,
-+ _DBUS_INT_TO_POINTER (1));
-+ verify_list (&list1);
-+ _dbus_assert (is_ascending_sequence (&list1));
-+
-+ /* inserting at the end */
-+ _dbus_list_insert_after (&list1, list1->next,
-+ _DBUS_INT_TO_POINTER (2));
-+ verify_list (&list1);
-+ _dbus_assert (is_ascending_sequence (&list1));
-+
-+ /* using insert_after to prepend */
-+ _dbus_list_insert_after (&list1, NULL,
-+ _DBUS_INT_TO_POINTER (-1));
-+ verify_list (&list1);
-+ _dbus_assert (is_ascending_sequence (&list1));
-+
-+ _dbus_list_clear (&list1);
-+
-+ /* using remove_last */
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (2));
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (1));
-+ _dbus_list_append (&list1, _DBUS_INT_TO_POINTER (3));
-+
-+ _dbus_list_remove_last (&list1, _DBUS_INT_TO_POINTER (2));
-+
-+ verify_list (&list1);
-+ _dbus_assert (is_ascending_sequence (&list1));
-+
-+ _dbus_list_clear (&list1);
-+
-+ return TRUE;
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/dbus/dbus-list.h dbus-0.61/dbus/dbus-list.h
---- dbus-0.61.orig/dbus/dbus-list.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-list.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,99 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-list.h Generic linked list utility (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_LIST_H
-+#define DBUS_LIST_H
-+
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-types.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusList DBusList;
-+
-+struct DBusList
-+{
-+ DBusList *prev; /**< Previous list node. */
-+ DBusList *next; /**< Next list node. */
-+ void *data; /**< Data stored at this element. */
-+};
-+dbus_bool_t _dbus_list_append (DBusList **list,
-+ void *data);
-+dbus_bool_t _dbus_list_prepend (DBusList **list,
-+ void *data);
-+dbus_bool_t _dbus_list_insert_before (DBusList **list,
-+ DBusList *before_this_link,
-+ void *data);
-+dbus_bool_t _dbus_list_insert_after (DBusList **list,
-+ DBusList *after_this_link,
-+ void *data);
-+void _dbus_list_insert_before_link (DBusList **list,
-+ DBusList *before_this_link,
-+ DBusList *link);
-+void _dbus_list_insert_after_link (DBusList **list,
-+ DBusList *after_this_link,
-+ DBusList *link);
-+dbus_bool_t _dbus_list_remove (DBusList **list,
-+ void *data);
-+dbus_bool_t _dbus_list_remove_last (DBusList **list,
-+ void *data);
-+void _dbus_list_remove_link (DBusList **list,
-+ DBusList *link);
-+DBusList* _dbus_list_find_last (DBusList **list,
-+ void *data);
-+void _dbus_list_clear (DBusList **list);
-+DBusList* _dbus_list_get_first_link (DBusList **list);
-+DBusList* _dbus_list_get_last_link (DBusList **list);
-+void* _dbus_list_get_last (DBusList **list);
-+void* _dbus_list_get_first (DBusList **list);
-+void* _dbus_list_pop_first (DBusList **list);
-+void* _dbus_list_pop_last (DBusList **list);
-+DBusList* _dbus_list_pop_first_link (DBusList **list);
-+DBusList* _dbus_list_pop_last_link (DBusList **list);
-+dbus_bool_t _dbus_list_copy (DBusList **list,
-+ DBusList **dest);
-+int _dbus_list_get_length (DBusList **list);
-+DBusList* _dbus_list_alloc_link (void *data);
-+void _dbus_list_free_link (DBusList *link);
-+void _dbus_list_unlink (DBusList **list,
-+ DBusList *link);
-+void _dbus_list_append_link (DBusList **list,
-+ DBusList *link);
-+void _dbus_list_prepend_link (DBusList **list,
-+ DBusList *link);
-+dbus_bool_t _dbus_list_length_is_one (DBusList **list);
-+
-+
-+
-+
-+void _dbus_list_foreach (DBusList **list,
-+ DBusForeachFunction function,
-+ void *data);
-+
-+#define _dbus_list_get_next_link(list, link) ((link)->next == *(list) ? NULL : (link)->next)
-+#define _dbus_list_get_prev_link(list, link) ((link) == *(list) ? NULL : (link)->prev)
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_LIST_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-macros.h dbus-0.61/dbus/dbus-macros.h
---- dbus-0.61.orig/dbus/dbus-macros.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-macros.h 2005-12-19 23:06:24.000000000 +0100
-@@ -0,0 +1,96 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-macros.h generic macros
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_MACROS_H
-+#define DBUS_MACROS_H
-+
-+#ifdef __cplusplus
-+# define DBUS_BEGIN_DECLS extern "C" {
-+# define DBUS_END_DECLS }
-+#else
-+# define DBUS_BEGIN_DECLS
-+# define DBUS_END_DECLS
-+#endif
-+
-+#ifndef TRUE
-+# define TRUE 1
-+#endif
-+#ifndef FALSE
-+# define FALSE 0
-+#endif
-+
-+#ifndef NULL
-+# ifdef __cplusplus
-+# define NULL (0L)
-+# else /* !__cplusplus */
-+# define NULL ((void*) 0)
-+# endif /* !__cplusplus */
-+#endif
-+
-+/* Normally docs are in .c files, but there isn't a .c file for this. */
-+/**
-+ * @defgroup DBusMacros Utility macros
-+ * @ingroup DBus
-+ * @brief #TRUE, #FALSE, #NULL, and so on
-+ *
-+ * Utility macros.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @def DBUS_BEGIN_DECLS
-+ *
-+ * Macro used prior to declaring functions in the D-BUS header
-+ * files. Expands to "extern "C"" when using a C++ compiler,
-+ * and expands to nothing when using a C compiler.
-+ */
-+/**
-+ * @def DBUS_END_DECLS
-+ *
-+ * Macro used after declaring functions in the D-BUS header
-+ * files. Expands to "}" when using a C++ compiler,
-+ * and expands to nothing when using a C compiler.
-+ */
-+/**
-+ * @def TRUE
-+ *
-+ * Expands to "1"
-+ */
-+/**
-+ * @def FALSE
-+ *
-+ * Expands to "0"
-+ */
-+/**
-+ * @def NULL
-+ *
-+ * A null pointer, defined appropriately for C or C++.
-+ */
-+
-+/** @} */
-+
-+#endif /* DBUS_MACROS_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-mainloop.c dbus-0.61/dbus/dbus-mainloop.c
---- dbus-0.61.orig/dbus/dbus-mainloop.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-mainloop.c 2005-01-15 08:15:38.000000000 +0100
-@@ -0,0 +1,908 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-mainloop.c Main loop utility
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-mainloop.h"
-+
-+#ifndef DOXYGEN_SHOULD_SKIP_THIS
-+
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-sysdeps.h>
-+
-+#define MAINLOOP_SPEW 0
-+
-+#if MAINLOOP_SPEW
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+static const char*
-+watch_flags_to_string (int flags)
-+{
-+ const char *watch_type;
-+
-+ if ((flags & DBUS_WATCH_READABLE) &&
-+ (flags & DBUS_WATCH_WRITABLE))
-+ watch_type = "readwrite";
-+ else if (flags & DBUS_WATCH_READABLE)
-+ watch_type = "read";
-+ else if (flags & DBUS_WATCH_WRITABLE)
-+ watch_type = "write";
-+ else
-+ watch_type = "not read or write";
-+ return watch_type;
-+}
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+#endif /* MAINLOOP_SPEW */
-+
-+struct DBusLoop
-+{
-+ int refcount;
-+ DBusList *callbacks;
-+ int callback_list_serial;
-+ int watch_count;
-+ int timeout_count;
-+ int depth; /**< number of recursive runs */
-+ DBusList *need_dispatch;
-+};
-+
-+typedef enum
-+{
-+ CALLBACK_WATCH,
-+ CALLBACK_TIMEOUT
-+} CallbackType;
-+
-+typedef struct
-+{
-+ int refcount;
-+ CallbackType type;
-+ void *data;
-+ DBusFreeFunction free_data_func;
-+} Callback;
-+
-+typedef struct
-+{
-+ Callback callback;
-+ DBusWatchFunction function;
-+ DBusWatch *watch;
-+ /* last watch handle failed due to OOM */
-+ unsigned int last_iteration_oom : 1;
-+} WatchCallback;
-+
-+typedef struct
-+{
-+ Callback callback;
-+ DBusTimeout *timeout;
-+ DBusTimeoutFunction function;
-+ unsigned long last_tv_sec;
-+ unsigned long last_tv_usec;
-+} TimeoutCallback;
-+
-+#define WATCH_CALLBACK(callback) ((WatchCallback*)callback)
-+#define TIMEOUT_CALLBACK(callback) ((TimeoutCallback*)callback)
-+
-+static WatchCallback*
-+watch_callback_new (DBusWatch *watch,
-+ DBusWatchFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_func)
-+{
-+ WatchCallback *cb;
-+
-+ cb = dbus_new (WatchCallback, 1);
-+ if (cb == NULL)
-+ return NULL;
-+
-+ cb->watch = watch;
-+ cb->function = function;
-+ cb->last_iteration_oom = FALSE;
-+ cb->callback.refcount = 1;
-+ cb->callback.type = CALLBACK_WATCH;
-+ cb->callback.data = data;
-+ cb->callback.free_data_func = free_data_func;
-+
-+ return cb;
-+}
-+
-+static TimeoutCallback*
-+timeout_callback_new (DBusTimeout *timeout,
-+ DBusTimeoutFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_func)
-+{
-+ TimeoutCallback *cb;
-+
-+ cb = dbus_new (TimeoutCallback, 1);
-+ if (cb == NULL)
-+ return NULL;
-+
-+ cb->timeout = timeout;
-+ cb->function = function;
-+ _dbus_get_current_time (&cb->last_tv_sec,
-+ &cb->last_tv_usec);
-+ cb->callback.refcount = 1;
-+ cb->callback.type = CALLBACK_TIMEOUT;
-+ cb->callback.data = data;
-+ cb->callback.free_data_func = free_data_func;
-+
-+ return cb;
-+}
-+
-+static Callback *
-+callback_ref (Callback *cb)
-+{
-+ _dbus_assert (cb->refcount > 0);
-+
-+ cb->refcount += 1;
-+
-+ return cb;
-+}
-+
-+static void
-+callback_unref (Callback *cb)
-+{
-+ _dbus_assert (cb->refcount > 0);
-+
-+ cb->refcount -= 1;
-+
-+ if (cb->refcount == 0)
-+ {
-+ if (cb->free_data_func)
-+ (* cb->free_data_func) (cb->data);
-+
-+ dbus_free (cb);
-+ }
-+}
-+
-+static dbus_bool_t
-+add_callback (DBusLoop *loop,
-+ Callback *cb)
-+{
-+ if (!_dbus_list_append (&loop->callbacks, cb))
-+ return FALSE;
-+
-+ loop->callback_list_serial += 1;
-+
-+ switch (cb->type)
-+ {
-+ case CALLBACK_WATCH:
-+ loop->watch_count += 1;
-+ break;
-+ case CALLBACK_TIMEOUT:
-+ loop->timeout_count += 1;
-+ break;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+remove_callback (DBusLoop *loop,
-+ DBusList *link)
-+{
-+ Callback *cb = link->data;
-+
-+ switch (cb->type)
-+ {
-+ case CALLBACK_WATCH:
-+ loop->watch_count -= 1;
-+ break;
-+ case CALLBACK_TIMEOUT:
-+ loop->timeout_count -= 1;
-+ break;
-+ }
-+
-+ callback_unref (cb);
-+ _dbus_list_remove_link (&loop->callbacks, link);
-+ loop->callback_list_serial += 1;
-+}
-+
-+DBusLoop*
-+_dbus_loop_new (void)
-+{
-+ DBusLoop *loop;
-+
-+ loop = dbus_new0 (DBusLoop, 1);
-+ if (loop == NULL)
-+ return NULL;
-+
-+ loop->refcount = 1;
-+
-+ return loop;
-+}
-+
-+DBusLoop *
-+_dbus_loop_ref (DBusLoop *loop)
-+{
-+ _dbus_assert (loop != NULL);
-+ _dbus_assert (loop->refcount > 0);
-+
-+ loop->refcount += 1;
-+
-+ return loop;
-+}
-+
-+void
-+_dbus_loop_unref (DBusLoop *loop)
-+{
-+ _dbus_assert (loop != NULL);
-+ _dbus_assert (loop->refcount > 0);
-+
-+ loop->refcount -= 1;
-+ if (loop->refcount == 0)
-+ {
-+ while (loop->need_dispatch)
-+ {
-+ DBusConnection *connection = _dbus_list_pop_first (&loop->need_dispatch);
-+
-+ dbus_connection_unref (connection);
-+ }
-+
-+ dbus_free (loop);
-+ }
-+}
-+
-+dbus_bool_t
-+_dbus_loop_add_watch (DBusLoop *loop,
-+ DBusWatch *watch,
-+ DBusWatchFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_func)
-+{
-+ WatchCallback *wcb;
-+
-+ wcb = watch_callback_new (watch, function, data, free_data_func);
-+ if (wcb == NULL)
-+ return FALSE;
-+
-+ if (!add_callback (loop, (Callback*) wcb))
-+ {
-+ wcb->callback.free_data_func = NULL; /* don't want to have this side effect */
-+ callback_unref ((Callback*) wcb);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+void
-+_dbus_loop_remove_watch (DBusLoop *loop,
-+ DBusWatch *watch,
-+ DBusWatchFunction function,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&loop->callbacks);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&loop->callbacks, link);
-+ Callback *this = link->data;
-+
-+ if (this->type == CALLBACK_WATCH &&
-+ WATCH_CALLBACK (this)->watch == watch &&
-+ this->data == data &&
-+ WATCH_CALLBACK (this)->function == function)
-+ {
-+ remove_callback (loop, link);
-+
-+ return;
-+ }
-+
-+ link = next;
-+ }
-+
-+ _dbus_warn ("could not find watch %p function %p data %p to remove\n",
-+ watch, (void *)function, data);
-+}
-+
-+dbus_bool_t
-+_dbus_loop_add_timeout (DBusLoop *loop,
-+ DBusTimeout *timeout,
-+ DBusTimeoutFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_func)
-+{
-+ TimeoutCallback *tcb;
-+
-+ tcb = timeout_callback_new (timeout, function, data, free_data_func);
-+ if (tcb == NULL)
-+ return FALSE;
-+
-+ if (!add_callback (loop, (Callback*) tcb))
-+ {
-+ tcb->callback.free_data_func = NULL; /* don't want to have this side effect */
-+ callback_unref ((Callback*) tcb);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+void
-+_dbus_loop_remove_timeout (DBusLoop *loop,
-+ DBusTimeout *timeout,
-+ DBusTimeoutFunction function,
-+ void *data)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&loop->callbacks);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&loop->callbacks, link);
-+ Callback *this = link->data;
-+
-+ if (this->type == CALLBACK_TIMEOUT &&
-+ TIMEOUT_CALLBACK (this)->timeout == timeout &&
-+ this->data == data &&
-+ TIMEOUT_CALLBACK (this)->function == function)
-+ {
-+ remove_callback (loop, link);
-+
-+ return;
-+ }
-+
-+ link = next;
-+ }
-+
-+ _dbus_warn ("could not find timeout %p function %p data %p to remove\n",
-+ timeout, (void *)function, data);
-+}
-+
-+/* Convolutions from GLib, there really must be a better way
-+ * to do this.
-+ */
-+static dbus_bool_t
-+check_timeout (unsigned long tv_sec,
-+ unsigned long tv_usec,
-+ TimeoutCallback *tcb,
-+ int *timeout)
-+{
-+ long sec_remaining;
-+ long msec_remaining;
-+ unsigned long expiration_tv_sec;
-+ unsigned long expiration_tv_usec;
-+ long interval_seconds;
-+ long interval_milliseconds;
-+ int interval;
-+
-+ /* I'm pretty sure this function could suck (a lot) less */
-+
-+ interval = dbus_timeout_get_interval (tcb->timeout);
-+
-+ interval_seconds = interval / 1000L;
-+ interval_milliseconds = interval % 1000L;
-+
-+ expiration_tv_sec = tcb->last_tv_sec + interval_seconds;
-+ expiration_tv_usec = tcb->last_tv_usec + interval_milliseconds * 1000;
-+ if (expiration_tv_usec >= 1000000)
-+ {
-+ expiration_tv_usec -= 1000000;
-+ expiration_tv_sec += 1;
-+ }
-+
-+ sec_remaining = expiration_tv_sec - tv_sec;
-+ /* need to force this to be signed, as it is intended to sometimes
-+ * produce a negative result
-+ */
-+ msec_remaining = ((long) expiration_tv_usec - (long) tv_usec) / 1000L;
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose ("Interval is %ld seconds %ld msecs\n",
-+ interval_seconds,
-+ interval_milliseconds);
-+ _dbus_verbose ("Now is %lu seconds %lu usecs\n",
-+ tv_sec, tv_usec);
-+ _dbus_verbose ("Last is %lu seconds %lu usecs\n",
-+ tcb->last_tv_sec, tcb->last_tv_usec);
-+ _dbus_verbose ("Exp is %lu seconds %lu usecs\n",
-+ expiration_tv_sec, expiration_tv_usec);
-+ _dbus_verbose ("Pre-correction, sec_remaining %ld msec_remaining %ld\n",
-+ sec_remaining, msec_remaining);
-+#endif
-+
-+ /* We do the following in a rather convoluted fashion to deal with
-+ * the fact that we don't have an integral type big enough to hold
-+ * the difference of two timevals in milliseconds.
-+ */
-+ if (sec_remaining < 0 || (sec_remaining == 0 && msec_remaining < 0))
-+ {
-+ *timeout = 0;
-+ }
-+ else
-+ {
-+ if (msec_remaining < 0)
-+ {
-+ msec_remaining += 1000;
-+ sec_remaining -= 1;
-+ }
-+
-+ if (sec_remaining > (_DBUS_INT_MAX / 1000) ||
-+ msec_remaining > _DBUS_INT_MAX)
-+ *timeout = _DBUS_INT_MAX;
-+ else
-+ *timeout = sec_remaining * 1000 + msec_remaining;
-+ }
-+
-+ if (*timeout > interval)
-+ {
-+ /* This indicates that the system clock probably moved backward */
-+ _dbus_verbose ("System clock set backward! Resetting timeout.\n");
-+
-+ tcb->last_tv_sec = tv_sec;
-+ tcb->last_tv_usec = tv_usec;
-+
-+ *timeout = interval;
-+ }
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" timeout expires in %d milliseconds\n", *timeout);
-+#endif
-+
-+ return *timeout == 0;
-+}
-+
-+dbus_bool_t
-+_dbus_loop_dispatch (DBusLoop *loop)
-+{
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" %d connections to dispatch\n", _dbus_list_get_length (&loop->need_dispatch));
-+#endif
-+
-+ if (loop->need_dispatch == NULL)
-+ return FALSE;
-+
-+ next:
-+ while (loop->need_dispatch != NULL)
-+ {
-+ DBusConnection *connection = _dbus_list_pop_first (&loop->need_dispatch);
-+
-+ while (TRUE)
-+ {
-+ DBusDispatchStatus status;
-+
-+ status = dbus_connection_dispatch (connection);
-+
-+ if (status == DBUS_DISPATCH_COMPLETE)
-+ {
-+ dbus_connection_unref (connection);
-+ goto next;
-+ }
-+ else
-+ {
-+ if (status == DBUS_DISPATCH_NEED_MEMORY)
-+ _dbus_wait_for_memory ();
-+ }
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+_dbus_loop_queue_dispatch (DBusLoop *loop,
-+ DBusConnection *connection)
-+{
-+ if (_dbus_list_append (&loop->need_dispatch, connection))
-+ {
-+ dbus_connection_ref (connection);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/* Returns TRUE if we invoked any timeouts or have ready file
-+ * descriptors, which is just used in test code as a debug hack
-+ */
-+
-+dbus_bool_t
-+_dbus_loop_iterate (DBusLoop *loop,
-+ dbus_bool_t block)
-+{
-+#define N_STACK_DESCRIPTORS 64
-+ dbus_bool_t retval;
-+ DBusPollFD *fds;
-+ DBusPollFD stack_fds[N_STACK_DESCRIPTORS];
-+ int n_fds;
-+ WatchCallback **watches_for_fds;
-+ WatchCallback *stack_watches_for_fds[N_STACK_DESCRIPTORS];
-+ int i;
-+ DBusList *link;
-+ int n_ready;
-+ int initial_serial;
-+ long timeout;
-+ dbus_bool_t oom_watch_pending;
-+ int orig_depth;
-+
-+ retval = FALSE;
-+
-+ fds = NULL;
-+ watches_for_fds = NULL;
-+ n_fds = 0;
-+ oom_watch_pending = FALSE;
-+ orig_depth = loop->depth;
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose ("Iteration block=%d depth=%d timeout_count=%d watch_count=%d\n",
-+ block, loop->depth, loop->timeout_count, loop->watch_count);
-+#endif
-+
-+ if (loop->callbacks == NULL)
-+ goto next_iteration;
-+
-+ if (loop->watch_count > N_STACK_DESCRIPTORS)
-+ {
-+ fds = dbus_new0 (DBusPollFD, loop->watch_count);
-+
-+ while (fds == NULL)
-+ {
-+ _dbus_wait_for_memory ();
-+ fds = dbus_new0 (DBusPollFD, loop->watch_count);
-+ }
-+
-+ watches_for_fds = dbus_new (WatchCallback*, loop->watch_count);
-+ while (watches_for_fds == NULL)
-+ {
-+ _dbus_wait_for_memory ();
-+ watches_for_fds = dbus_new (WatchCallback*, loop->watch_count);
-+ }
-+ }
-+ else
-+ {
-+ fds = stack_fds;
-+ watches_for_fds = stack_watches_for_fds;
-+ }
-+
-+ /* fill our array of fds and watches */
-+ n_fds = 0;
-+ link = _dbus_list_get_first_link (&loop->callbacks);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&loop->callbacks, link);
-+ Callback *cb = link->data;
-+ if (cb->type == CALLBACK_WATCH)
-+ {
-+ unsigned int flags;
-+ WatchCallback *wcb = WATCH_CALLBACK (cb);
-+
-+ if (wcb->last_iteration_oom)
-+ {
-+ /* we skip this one this time, but reenable it next time,
-+ * and have a timeout on this iteration
-+ */
-+ wcb->last_iteration_oom = FALSE;
-+ oom_watch_pending = TRUE;
-+
-+ retval = TRUE; /* return TRUE here to keep the loop going,
-+ * since we don't know the watch is inactive
-+ */
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" skipping watch on fd %d as it was out of memory last time\n",
-+ dbus_watch_get_fd (wcb->watch));
-+#endif
-+ }
-+ else if (dbus_watch_get_enabled (wcb->watch))
-+ {
-+ watches_for_fds[n_fds] = wcb;
-+
-+ callback_ref (cb);
-+
-+ flags = dbus_watch_get_flags (wcb->watch);
-+
-+ fds[n_fds].fd = dbus_watch_get_fd (wcb->watch);
-+ fds[n_fds].revents = 0;
-+ fds[n_fds].events = 0;
-+ if (flags & DBUS_WATCH_READABLE)
-+ fds[n_fds].events |= _DBUS_POLLIN;
-+ if (flags & DBUS_WATCH_WRITABLE)
-+ fds[n_fds].events |= _DBUS_POLLOUT;
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" polling watch on fd %d %s\n",
-+ fds[n_fds].fd, watch_flags_to_string (flags));
-+#endif
-+
-+ n_fds += 1;
-+ }
-+ else
-+ {
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" skipping disabled watch on fd %d %s\n",
-+ dbus_watch_get_fd (wcb->watch),
-+ watch_flags_to_string (dbus_watch_get_flags (wcb->watch)));
-+#endif
-+ }
-+ }
-+
-+ link = next;
-+ }
-+
-+ timeout = -1;
-+ if (loop->timeout_count > 0)
-+ {
-+ unsigned long tv_sec;
-+ unsigned long tv_usec;
-+
-+ _dbus_get_current_time (&tv_sec, &tv_usec);
-+
-+ link = _dbus_list_get_first_link (&loop->callbacks);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&loop->callbacks, link);
-+ Callback *cb = link->data;
-+
-+ if (cb->type == CALLBACK_TIMEOUT &&
-+ dbus_timeout_get_enabled (TIMEOUT_CALLBACK (cb)->timeout))
-+ {
-+ TimeoutCallback *tcb = TIMEOUT_CALLBACK (cb);
-+ int msecs_remaining;
-+
-+ check_timeout (tv_sec, tv_usec, tcb, &msecs_remaining);
-+
-+ if (timeout < 0)
-+ timeout = msecs_remaining;
-+ else
-+ timeout = MIN (msecs_remaining, timeout);
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" timeout added, %d remaining, aggregate timeout %ld\n",
-+ msecs_remaining, timeout);
-+#endif
-+
-+ _dbus_assert (timeout >= 0);
-+
-+ if (timeout == 0)
-+ break; /* it's not going to get shorter... */
-+ }
-+#if MAINLOOP_SPEW
-+ else if (cb->type == CALLBACK_TIMEOUT)
-+ {
-+ _dbus_verbose (" skipping disabled timeout\n");
-+ }
-+#endif
-+
-+ link = next;
-+ }
-+ }
-+
-+ /* Never block if we have stuff to dispatch */
-+ if (!block || loop->need_dispatch != NULL)
-+ {
-+ timeout = 0;
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" timeout is 0 as we aren't blocking\n");
-+#endif
-+ }
-+
-+ /* if a watch is OOM, don't wait longer than the OOM
-+ * wait to re-enable it
-+ */
-+ if (oom_watch_pending)
-+ timeout = MIN (timeout, _dbus_get_oom_wait ());
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" polling on %d descriptors timeout %ld\n", n_fds, timeout);
-+#endif
-+
-+ n_ready = _dbus_poll (fds, n_fds, timeout);
-+
-+ initial_serial = loop->callback_list_serial;
-+
-+ if (loop->timeout_count > 0)
-+ {
-+ unsigned long tv_sec;
-+ unsigned long tv_usec;
-+
-+ _dbus_get_current_time (&tv_sec, &tv_usec);
-+
-+ /* It'd be nice to avoid this O(n) thingy here */
-+ link = _dbus_list_get_first_link (&loop->callbacks);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&loop->callbacks, link);
-+ Callback *cb = link->data;
-+
-+ if (initial_serial != loop->callback_list_serial)
-+ goto next_iteration;
-+
-+ if (loop->depth != orig_depth)
-+ goto next_iteration;
-+
-+ if (cb->type == CALLBACK_TIMEOUT &&
-+ dbus_timeout_get_enabled (TIMEOUT_CALLBACK (cb)->timeout))
-+ {
-+ TimeoutCallback *tcb = TIMEOUT_CALLBACK (cb);
-+ int msecs_remaining;
-+
-+ if (check_timeout (tv_sec, tv_usec,
-+ tcb, &msecs_remaining))
-+ {
-+ /* Save last callback time and fire this timeout */
-+ tcb->last_tv_sec = tv_sec;
-+ tcb->last_tv_usec = tv_usec;
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" invoking timeout\n");
-+#endif
-+
-+ (* tcb->function) (tcb->timeout,
-+ cb->data);
-+
-+ retval = TRUE;
-+ }
-+ else
-+ {
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" timeout has not expired\n");
-+#endif
-+ }
-+ }
-+#if MAINLOOP_SPEW
-+ else if (cb->type == CALLBACK_TIMEOUT)
-+ {
-+ _dbus_verbose (" skipping invocation of disabled timeout\n");
-+ }
-+#endif
-+
-+ link = next;
-+ }
-+ }
-+
-+ if (n_ready > 0)
-+ {
-+ i = 0;
-+ while (i < n_fds)
-+ {
-+ /* FIXME I think this "restart if we change the watches"
-+ * approach could result in starving watches
-+ * toward the end of the list.
-+ */
-+ if (initial_serial != loop->callback_list_serial)
-+ goto next_iteration;
-+
-+ if (loop->depth != orig_depth)
-+ goto next_iteration;
-+
-+ if (fds[i].revents != 0)
-+ {
-+ WatchCallback *wcb;
-+ unsigned int condition;
-+
-+ wcb = watches_for_fds[i];
-+
-+ condition = 0;
-+ if (fds[i].revents & _DBUS_POLLIN)
-+ condition |= DBUS_WATCH_READABLE;
-+ if (fds[i].revents & _DBUS_POLLOUT)
-+ condition |= DBUS_WATCH_WRITABLE;
-+ if (fds[i].revents & _DBUS_POLLHUP)
-+ condition |= DBUS_WATCH_HANGUP;
-+ if (fds[i].revents & _DBUS_POLLERR)
-+ condition |= DBUS_WATCH_ERROR;
-+
-+ /* condition may still be 0 if we got some
-+ * weird POLLFOO thing like POLLWRBAND
-+ */
-+
-+ if (condition != 0 &&
-+ dbus_watch_get_enabled (wcb->watch))
-+ {
-+ if (!(* wcb->function) (wcb->watch,
-+ condition,
-+ ((Callback*)wcb)->data))
-+ wcb->last_iteration_oom = TRUE;
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" Invoked watch, oom = %d\n",
-+ wcb->last_iteration_oom);
-+#endif
-+
-+ retval = TRUE;
-+ }
-+ }
-+
-+ ++i;
-+ }
-+ }
-+
-+ next_iteration:
-+#if MAINLOOP_SPEW
-+ _dbus_verbose (" moving to next iteration\n");
-+#endif
-+
-+ if (fds && fds != stack_fds)
-+ dbus_free (fds);
-+ if (watches_for_fds)
-+ {
-+ i = 0;
-+ while (i < n_fds)
-+ {
-+ callback_unref (&watches_for_fds[i]->callback);
-+ ++i;
-+ }
-+
-+ if (watches_for_fds != stack_watches_for_fds)
-+ dbus_free (watches_for_fds);
-+ }
-+
-+ if (_dbus_loop_dispatch (loop))
-+ retval = TRUE;
-+
-+#if MAINLOOP_SPEW
-+ _dbus_verbose ("Returning %d\n", retval);
-+#endif
-+
-+ return retval;
-+}
-+
-+void
-+_dbus_loop_run (DBusLoop *loop)
-+{
-+ int our_exit_depth;
-+
-+ _dbus_assert (loop->depth >= 0);
-+
-+ _dbus_loop_ref (loop);
-+
-+ our_exit_depth = loop->depth;
-+ loop->depth += 1;
-+
-+ _dbus_verbose ("Running main loop, depth %d -> %d\n",
-+ loop->depth - 1, loop->depth);
-+
-+ while (loop->depth != our_exit_depth)
-+ _dbus_loop_iterate (loop, TRUE);
-+
-+ _dbus_loop_unref (loop);
-+}
-+
-+void
-+_dbus_loop_quit (DBusLoop *loop)
-+{
-+ _dbus_assert (loop->depth > 0);
-+
-+ loop->depth -= 1;
-+
-+ _dbus_verbose ("Quit main loop, depth %d -> %d\n",
-+ loop->depth + 1, loop->depth);
-+}
-+
-+int
-+_dbus_get_oom_wait (void)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ /* make tests go fast */
-+ return 0;
-+#else
-+ return 500;
-+#endif
-+}
-+
-+void
-+_dbus_wait_for_memory (void)
-+{
-+ _dbus_verbose ("Waiting for more memory\n");
-+ _dbus_sleep_milliseconds (_dbus_get_oom_wait ());
-+}
-+
-+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-diff -Naur dbus-0.61.orig/dbus/dbus-mainloop.h dbus-0.61/dbus/dbus-mainloop.h
---- dbus-0.61.orig/dbus/dbus-mainloop.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-mainloop.h 2004-08-10 05:07:00.000000000 +0200
-@@ -0,0 +1,76 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-mainloop.h Main loop utility
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_MAINLOOP_H
-+#define DBUS_MAINLOOP_H
-+
-+#ifndef DOXYGEN_SHOULD_SKIP_THIS
-+
-+#include <dbus/dbus.h>
-+
-+typedef struct DBusLoop DBusLoop;
-+
-+typedef dbus_bool_t (* DBusWatchFunction) (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data);
-+typedef void (* DBusTimeoutFunction) (DBusTimeout *timeout,
-+ void *data);
-+
-+DBusLoop* _dbus_loop_new (void);
-+DBusLoop* _dbus_loop_ref (DBusLoop *loop);
-+void _dbus_loop_unref (DBusLoop *loop);
-+dbus_bool_t _dbus_loop_add_watch (DBusLoop *loop,
-+ DBusWatch *watch,
-+ DBusWatchFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_func);
-+void _dbus_loop_remove_watch (DBusLoop *loop,
-+ DBusWatch *watch,
-+ DBusWatchFunction function,
-+ void *data);
-+dbus_bool_t _dbus_loop_add_timeout (DBusLoop *loop,
-+ DBusTimeout *timeout,
-+ DBusTimeoutFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_func);
-+void _dbus_loop_remove_timeout (DBusLoop *loop,
-+ DBusTimeout *timeout,
-+ DBusTimeoutFunction function,
-+ void *data);
-+
-+dbus_bool_t _dbus_loop_queue_dispatch (DBusLoop *loop,
-+ DBusConnection *connection);
-+
-+void _dbus_loop_run (DBusLoop *loop);
-+void _dbus_loop_quit (DBusLoop *loop);
-+dbus_bool_t _dbus_loop_iterate (DBusLoop *loop,
-+ dbus_bool_t block);
-+dbus_bool_t _dbus_loop_dispatch (DBusLoop *loop);
-+
-+int _dbus_get_oom_wait (void);
-+void _dbus_wait_for_memory (void);
-+
-+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-+
-+#endif /* DBUS_MAINLOOP_H */
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-basic.c dbus-0.61/dbus/dbus-marshal-basic.c
---- dbus-0.61.orig/dbus/dbus-marshal-basic.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-basic.c 2005-03-09 18:09:11.000000000 +0100
-@@ -0,0 +1,1970 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-basic.c Marshalling routines for basic (primitive) types
-+ *
-+ * Copyright (C) 2002 CodeFactory AB
-+ * Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-marshal-basic.h"
-+#include "dbus-signature.h"
-+
-+#include <string.h>
-+
-+/**
-+ * @defgroup DBusMarshal marshaling and unmarshaling
-+ * @ingroup DBusInternals
-+ * @brief functions to marshal/unmarshal data from the wire
-+ *
-+ * Types and functions related to converting primitive data types from
-+ * wire format to native machine format, and vice versa.
-+ *
-+ * A signature is just a string with multiple types one after the other.
-+ * for example a type is "i" or "(ii)", a signature is "i(ii)"
-+ * where i is int and (ii) is struct { int; int; }
-+ *
-+ * @{
-+ */
-+
-+static void
-+pack_2_octets (dbus_uint16_t value,
-+ int byte_order,
-+ unsigned char *data)
-+{
-+ _dbus_assert (_DBUS_ALIGN_ADDRESS (data, 2) == data);
-+
-+ if ((byte_order) == DBUS_LITTLE_ENDIAN)
-+ *((dbus_uint16_t*)(data)) = DBUS_UINT16_TO_LE (value);
-+ else
-+ *((dbus_uint16_t*)(data)) = DBUS_UINT16_TO_BE (value);
-+}
-+
-+static void
-+pack_4_octets (dbus_uint32_t value,
-+ int byte_order,
-+ unsigned char *data)
-+{
-+ _dbus_assert (_DBUS_ALIGN_ADDRESS (data, 4) == data);
-+
-+ if ((byte_order) == DBUS_LITTLE_ENDIAN)
-+ *((dbus_uint32_t*)(data)) = DBUS_UINT32_TO_LE (value);
-+ else
-+ *((dbus_uint32_t*)(data)) = DBUS_UINT32_TO_BE (value);
-+}
-+
-+static void
-+pack_8_octets (DBusBasicValue value,
-+ int byte_order,
-+ unsigned char *data)
-+{
-+ _dbus_assert (_DBUS_ALIGN_ADDRESS (data, 8) == data);
-+
-+#ifdef DBUS_HAVE_INT64
-+ if ((byte_order) == DBUS_LITTLE_ENDIAN)
-+ *((dbus_uint64_t*)(data)) = DBUS_UINT64_TO_LE (value.u64);
-+ else
-+ *((dbus_uint64_t*)(data)) = DBUS_UINT64_TO_BE (value.u64);
-+#else
-+ *(DBus8ByteStruct*)data = value.u64;
-+ swap_8_octets ((DBusBasicValue*)data, byte_order);
-+#endif
-+}
-+
-+/**
-+ * Packs a 32 bit unsigned integer into a data pointer.
-+ *
-+ * @param value the value
-+ * @param byte_order the byte order to use
-+ * @param data the data pointer
-+ */
-+void
-+_dbus_pack_uint32 (dbus_uint32_t value,
-+ int byte_order,
-+ unsigned char *data)
-+{
-+ pack_4_octets (value, byte_order, data);
-+}
-+
-+#ifndef DBUS_HAVE_INT64
-+/* from ORBit */
-+static void
-+swap_bytes (unsigned char *data,
-+ unsigned int len)
-+{
-+ unsigned char *p1 = data;
-+ unsigned char *p2 = data + len - 1;
-+
-+ while (p1 < p2)
-+ {
-+ unsigned char tmp = *p1;
-+ *p1 = *p2;
-+ *p2 = tmp;
-+
-+ --p2;
-+ ++p1;
-+ }
-+}
-+#endif /* !DBUS_HAVE_INT64 */
-+
-+static void
-+swap_8_octets (DBusBasicValue *value,
-+ int byte_order)
-+{
-+ if (byte_order != DBUS_COMPILER_BYTE_ORDER)
-+ {
-+#ifdef DBUS_HAVE_INT64
-+ value->u64 = DBUS_UINT64_SWAP_LE_BE (value->u64);
-+#else
-+ swap_bytes ((unsigned char *)value, 8);
-+#endif
-+ }
-+}
-+
-+#if 0
-+static DBusBasicValue
-+unpack_8_octets (int byte_order,
-+ const unsigned char *data)
-+{
-+ DBusBasicValue r;
-+
-+ _dbus_assert (_DBUS_ALIGN_ADDRESS (data, 8) == data);
-+ _dbus_assert (sizeof (r) == 8);
-+
-+#ifdef DBUS_HAVE_INT64
-+ if (byte_order == DBUS_LITTLE_ENDIAN)
-+ r.u64 = DBUS_UINT64_FROM_LE (*(dbus_uint64_t*)data);
-+ else
-+ r.u64 = DBUS_UINT64_FROM_BE (*(dbus_uint64_t*)data);
-+#else
-+ r.u64 = *(DBus8ByteStruct*)data;
-+ swap_8_octets (&r, byte_order);
-+#endif
-+
-+ return r;
-+}
-+#endif
-+
-+#ifndef _dbus_unpack_uint16
-+/**
-+ * Unpacks a 16 bit unsigned integer from a data pointer
-+ *
-+ * @param byte_order The byte order to use
-+ * @param data the data pointer
-+ * @returns the integer
-+ */
-+dbus_uint16_t
-+_dbus_unpack_uint16 (int byte_order,
-+ const unsigned char *data)
-+{
-+ _dbus_assert (_DBUS_ALIGN_ADDRESS (data, 2) == data);
-+
-+ if (byte_order == DBUS_LITTLE_ENDIAN)
-+ return DBUS_UINT16_FROM_LE (*(dbus_uint16_t*)data);
-+ else
-+ return DBUS_UINT16_FROM_BE (*(dbus_uint16_t*)data);
-+}
-+#endif /* _dbus_unpack_uint16 */
-+
-+#ifndef _dbus_unpack_uint32
-+/**
-+ * Unpacks a 32 bit unsigned integer from a data pointer
-+ *
-+ * @param byte_order The byte order to use
-+ * @param data the data pointer
-+ * @returns the integer
-+ */
-+dbus_uint32_t
-+_dbus_unpack_uint32 (int byte_order,
-+ const unsigned char *data)
-+{
-+ _dbus_assert (_DBUS_ALIGN_ADDRESS (data, 4) == data);
-+
-+ if (byte_order == DBUS_LITTLE_ENDIAN)
-+ return DBUS_UINT32_FROM_LE (*(dbus_uint32_t*)data);
-+ else
-+ return DBUS_UINT32_FROM_BE (*(dbus_uint32_t*)data);
-+}
-+#endif /* _dbus_unpack_uint32 */
-+
-+static void
-+set_2_octets (DBusString *str,
-+ int offset,
-+ dbus_uint16_t value,
-+ int byte_order)
-+{
-+ char *data;
-+
-+ _dbus_assert (byte_order == DBUS_LITTLE_ENDIAN ||
-+ byte_order == DBUS_BIG_ENDIAN);
-+
-+ data = _dbus_string_get_data_len (str, offset, 2);
-+
-+ pack_2_octets (value, byte_order, data);
-+}
-+
-+static void
-+set_4_octets (DBusString *str,
-+ int offset,
-+ dbus_uint32_t value,
-+ int byte_order)
-+{
-+ char *data;
-+
-+ _dbus_assert (byte_order == DBUS_LITTLE_ENDIAN ||
-+ byte_order == DBUS_BIG_ENDIAN);
-+
-+ data = _dbus_string_get_data_len (str, offset, 4);
-+
-+ pack_4_octets (value, byte_order, data);
-+}
-+
-+static void
-+set_8_octets (DBusString *str,
-+ int offset,
-+ DBusBasicValue value,
-+ int byte_order)
-+{
-+ char *data;
-+
-+ _dbus_assert (byte_order == DBUS_LITTLE_ENDIAN ||
-+ byte_order == DBUS_BIG_ENDIAN);
-+
-+ data = _dbus_string_get_data_len (str, offset, 8);
-+
-+ pack_8_octets (value, byte_order, data);
-+}
-+
-+/**
-+ * Sets the 4 bytes at the given offset to a marshaled unsigned
-+ * integer, replacing anything found there previously.
-+ *
-+ * @param str the string to write the marshalled int to
-+ * @param pos the byte offset where int should be written
-+ * @param value the value
-+ * @param byte_order the byte order to use
-+ *
-+ */
-+void
-+_dbus_marshal_set_uint32 (DBusString *str,
-+ int pos,
-+ dbus_uint32_t value,
-+ int byte_order)
-+{
-+ set_4_octets (str, pos, value, byte_order);
-+}
-+
-+/**
-+ * Sets the existing marshaled string at the given offset with
-+ * a new marshaled string. The given offset must point to
-+ * an existing string or the wrong length will be deleted
-+ * and replaced with the new string.
-+ *
-+ * Note: no attempt is made by this function to re-align
-+ * any data which has been already marshalled after this
-+ * string. Use with caution.
-+ *
-+ * @param str the string to write the marshalled string to
-+ * @param pos the position of the marshaled string length
-+ * @param value the value
-+ * @param byte_order the byte order to use
-+ * @param old_end_pos place to store byte after the nul byte of the old value
-+ * @param new_end_pos place to store byte after the nul byte of the new value
-+ * @returns #TRUE on success, #FALSE if no memory
-+ *
-+ */
-+static dbus_bool_t
-+set_string (DBusString *str,
-+ int pos,
-+ const char *value,
-+ int byte_order,
-+ int *old_end_pos,
-+ int *new_end_pos)
-+{
-+ int old_len, new_len;
-+ DBusString dstr;
-+
-+ _dbus_string_init_const (&dstr, value);
-+
-+ _dbus_assert (_DBUS_ALIGN_VALUE (pos, 4) == (unsigned) pos);
-+ old_len = _dbus_unpack_uint32 (byte_order,
-+ _dbus_string_get_const_data_len (str, pos, 4));
-+
-+ new_len = _dbus_string_get_length (&dstr);
-+
-+ if (!_dbus_string_replace_len (&dstr, 0, new_len,
-+ str, pos + 4, old_len))
-+ return FALSE;
-+
-+ _dbus_marshal_set_uint32 (str, pos, new_len, byte_order);
-+
-+ if (old_end_pos)
-+ *old_end_pos = pos + 4 + old_len + 1;
-+ if (new_end_pos)
-+ *new_end_pos = pos + 4 + new_len + 1;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Sets the existing marshaled signature at the given offset to a new
-+ * marshaled signature. Same basic ideas as set_string().
-+ *
-+ * @param str the string to write the marshalled signature to
-+ * @param pos the position of the marshaled signature length
-+ * @param value the value
-+ * @param byte_order the byte order to use
-+ * @param old_end_pos place to store byte after the nul byte of the old value
-+ * @param new_end_pos place to store byte after the nul byte of the new value
-+ * @returns #TRUE on success, #FALSE if no memory
-+ *
-+ */
-+static dbus_bool_t
-+set_signature (DBusString *str,
-+ int pos,
-+ const char *value,
-+ int byte_order,
-+ int *old_end_pos,
-+ int *new_end_pos)
-+{
-+ int old_len, new_len;
-+ DBusString dstr;
-+
-+ _dbus_string_init_const (&dstr, value);
-+
-+ old_len = _dbus_string_get_byte (str, pos);
-+ new_len = _dbus_string_get_length (&dstr);
-+
-+ if (!_dbus_string_replace_len (&dstr, 0, new_len,
-+ str, pos + 1, old_len))
-+ return FALSE;
-+
-+ _dbus_string_set_byte (str, pos, new_len);
-+
-+ if (old_end_pos)
-+ *old_end_pos = pos + 1 + old_len + 1;
-+ if (new_end_pos)
-+ *new_end_pos = pos + 1 + new_len + 1;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Sets an existing basic type value to a new value.
-+ * Arguments work the same way as _dbus_marshal_basic_type().
-+ *
-+ * @param str the string
-+ * @param pos location of the current value
-+ * @param type the type of the current and new values
-+ * @param value the address of the new value
-+ * @param byte_order byte order for marshaling
-+ * @param old_end_pos location to store end position of the old value, or #NULL
-+ * @param new_end_pos location to store end position of the new value, or #NULL
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_marshal_set_basic (DBusString *str,
-+ int pos,
-+ int type,
-+ const void *value,
-+ int byte_order,
-+ int *old_end_pos,
-+ int *new_end_pos)
-+{
-+ const DBusBasicValue *vp;
-+
-+ vp = value;
-+
-+ switch (type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ _dbus_string_set_byte (str, pos, vp->byt);
-+ if (old_end_pos)
-+ *old_end_pos = pos + 1;
-+ if (new_end_pos)
-+ *new_end_pos = pos + 1;
-+ return TRUE;
-+ break;
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ pos = _DBUS_ALIGN_VALUE (pos, 2);
-+ set_2_octets (str, pos, vp->u16, byte_order);
-+ if (old_end_pos)
-+ *old_end_pos = pos + 2;
-+ if (new_end_pos)
-+ *new_end_pos = pos + 2;
-+ return TRUE;
-+ break;
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ pos = _DBUS_ALIGN_VALUE (pos, 4);
-+ set_4_octets (str, pos, vp->u32, byte_order);
-+ if (old_end_pos)
-+ *old_end_pos = pos + 4;
-+ if (new_end_pos)
-+ *new_end_pos = pos + 4;
-+ return TRUE;
-+ break;
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ pos = _DBUS_ALIGN_VALUE (pos, 8);
-+ set_8_octets (str, pos, *vp, byte_order);
-+ if (old_end_pos)
-+ *old_end_pos = pos + 8;
-+ if (new_end_pos)
-+ *new_end_pos = pos + 8;
-+ return TRUE;
-+ break;
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ pos = _DBUS_ALIGN_VALUE (pos, 4);
-+ _dbus_assert (vp->str != NULL);
-+ return set_string (str, pos, vp->str, byte_order,
-+ old_end_pos, new_end_pos);
-+ break;
-+ case DBUS_TYPE_SIGNATURE:
-+ _dbus_assert (vp->str != NULL);
-+ return set_signature (str, pos, vp->str, byte_order,
-+ old_end_pos, new_end_pos);
-+ break;
-+ default:
-+ _dbus_assert_not_reached ("not a basic type");
-+ return FALSE;
-+ break;
-+ }
-+}
-+
-+/**
-+ * Convenience function to demarshal a 32 bit unsigned integer.
-+ *
-+ * @param str the string containing the data
-+ * @param byte_order the byte order
-+ * @param pos the position in the string
-+ * @param new_pos the new position of the string
-+ * @returns the demarshaled integer.
-+ */
-+dbus_uint32_t
-+_dbus_marshal_read_uint32 (const DBusString *str,
-+ int pos,
-+ int byte_order,
-+ int *new_pos)
-+{
-+ pos = _DBUS_ALIGN_VALUE (pos, 4);
-+
-+ if (new_pos)
-+ *new_pos = pos + 4;
-+
-+ _dbus_assert (pos + 4 <= _dbus_string_get_length (str));
-+
-+ return _dbus_unpack_uint32 (byte_order,
-+ _dbus_string_get_const_data (str) + pos);
-+}
-+
-+/**
-+ * Demarshals a basic-typed value. The "value" pointer is always
-+ * the address of a variable of the basic type. So e.g.
-+ * if the basic type is "double" then the pointer is
-+ * a double*, and if it's "char*" then the pointer is
-+ * a "char**".
-+ *
-+ * A value of type #DBusBasicValue is guaranteed to be large enough to
-+ * hold any of the types that may be returned, which is handy if you
-+ * are trying to do things generically. For example you can pass
-+ * a DBusBasicValue* in to this function, and then pass the same
-+ * DBusBasicValue* in to _dbus_marshal_basic_type() in order to
-+ * move a value from one place to another.
-+ *
-+ * @param str the string containing the data
-+ * @param pos position in the string
-+ * @param type type of value to demarshal
-+ * @param value pointer to return value data
-+ * @param byte_order the byte order
-+ * @param new_pos pointer to update with new position, or #NULL
-+ **/
-+void
-+_dbus_marshal_read_basic (const DBusString *str,
-+ int pos,
-+ int type,
-+ void *value,
-+ int byte_order,
-+ int *new_pos)
-+{
-+ const char *str_data;
-+ DBusBasicValue *vp;
-+
-+ _dbus_assert (dbus_type_is_basic (type));
-+
-+ str_data = _dbus_string_get_const_data (str);
-+ vp = value;
-+
-+ switch (type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ vp->byt = _dbus_string_get_byte (str, pos);
-+ (pos)++;
-+ break;
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ pos = _DBUS_ALIGN_VALUE (pos, 2);
-+ vp->u16 = *(dbus_uint16_t *)(str_data + pos);
-+ if (byte_order != DBUS_COMPILER_BYTE_ORDER)
-+ vp->u16 = DBUS_UINT16_SWAP_LE_BE (vp->u16);
-+ pos += 2;
-+ break;
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ case DBUS_TYPE_BOOLEAN:
-+ pos = _DBUS_ALIGN_VALUE (pos, 4);
-+ vp->u32 = *(dbus_uint32_t *)(str_data + pos);
-+ if (byte_order != DBUS_COMPILER_BYTE_ORDER)
-+ vp->u32 = DBUS_UINT32_SWAP_LE_BE (vp->u32);
-+ pos += 4;
-+ break;
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ pos = _DBUS_ALIGN_VALUE (pos, 8);
-+#ifdef DBUS_HAVE_INT64
-+ if (byte_order != DBUS_COMPILER_BYTE_ORDER)
-+ vp->u64 = DBUS_UINT64_SWAP_LE_BE (*(dbus_uint64_t*)(str_data + pos));
-+ else
-+ vp->u64 = *(dbus_uint64_t*)(str_data + pos);
-+#else
-+ vp->u64 = *(DBus8ByteStruct*) (str_data + pos);
-+ swap_8_octets (vp, byte_order);
-+#endif
-+ pos += 8;
-+ break;
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ {
-+ int len;
-+
-+ len = _dbus_marshal_read_uint32 (str, pos, byte_order, &pos);
-+
-+ vp->str = (char*) str_data + pos;
-+
-+ pos += len + 1; /* length plus nul */
-+ }
-+ break;
-+ case DBUS_TYPE_SIGNATURE:
-+ {
-+ int len;
-+
-+ len = _dbus_string_get_byte (str, pos);
-+ pos += 1;
-+
-+ vp->str = (char*) str_data + pos;
-+
-+ pos += len + 1; /* length plus nul */
-+ }
-+ break;
-+ default:
-+ _dbus_warn ("type %s %d not a basic type\n",
-+ _dbus_type_to_string (type), type);
-+ _dbus_assert_not_reached ("not a basic type");
-+ break;
-+ }
-+
-+ if (new_pos)
-+ *new_pos = pos;
-+}
-+
-+/**
-+ * Reads a block of fixed-length basic values, as an optimization
-+ * vs. reading each one individually into a new buffer.
-+ *
-+ * This function returns the data in-place; it does not make a copy,
-+ * and it does not swap the bytes.
-+ *
-+ * If you ask for #DBUS_TYPE_DOUBLE you will get a "const double*" back
-+ * and the "value" argument should be a "const double**" and so on.
-+ *
-+ * @todo we aren't using this function (except in the test suite)
-+ *
-+ * @param str the string to read from
-+ * @param pos position to read from
-+ * @param element_type type of array elements
-+ * @param value place to return the array
-+ * @param n_elements number of array elements to read
-+ * @param byte_order the byte order, used to read the array length
-+ * @param new_pos #NULL or location to store a position after the elements
-+ */
-+void
-+_dbus_marshal_read_fixed_multi (const DBusString *str,
-+ int pos,
-+ int element_type,
-+ void *value,
-+ int n_elements,
-+ int byte_order,
-+ int *new_pos)
-+{
-+ int array_len;
-+ int alignment;
-+
-+ _dbus_assert (dbus_type_is_fixed (element_type));
-+ _dbus_assert (dbus_type_is_basic (element_type));
-+
-+#if 0
-+ _dbus_verbose ("reading %d elements of %s\n",
-+ n_elements, _dbus_type_to_string (element_type));
-+#endif
-+
-+ alignment = _dbus_type_get_alignment (element_type);
-+
-+ pos = _DBUS_ALIGN_VALUE (pos, alignment);
-+
-+ array_len = n_elements * alignment;
-+
-+ *(const DBusBasicValue**) value = (void*) _dbus_string_get_const_data_len (str, pos, array_len);
-+ if (new_pos)
-+ *new_pos = pos + array_len;
-+}
-+
-+static dbus_bool_t
-+marshal_2_octets (DBusString *str,
-+ int insert_at,
-+ dbus_uint16_t value,
-+ int byte_order,
-+ int *pos_after)
-+{
-+ dbus_bool_t retval;
-+ int orig_len;
-+
-+ _dbus_assert (sizeof (value) == 2);
-+
-+ if (byte_order != DBUS_COMPILER_BYTE_ORDER)
-+ value = DBUS_UINT16_SWAP_LE_BE (value);
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ retval = _dbus_string_insert_2_aligned (str, insert_at,
-+ (const unsigned char *)&value);
-+
-+ if (pos_after)
-+ {
-+ *pos_after = insert_at + (_dbus_string_get_length (str) - orig_len);
-+ _dbus_assert (*pos_after <= _dbus_string_get_length (str));
-+ }
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+marshal_4_octets (DBusString *str,
-+ int insert_at,
-+ dbus_uint32_t value,
-+ int byte_order,
-+ int *pos_after)
-+{
-+ dbus_bool_t retval;
-+ int orig_len;
-+
-+ _dbus_assert (sizeof (value) == 4);
-+
-+ if (byte_order != DBUS_COMPILER_BYTE_ORDER)
-+ value = DBUS_UINT32_SWAP_LE_BE (value);
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ retval = _dbus_string_insert_4_aligned (str, insert_at,
-+ (const unsigned char *)&value);
-+
-+ if (pos_after)
-+ {
-+ *pos_after = insert_at + (_dbus_string_get_length (str) - orig_len);
-+ _dbus_assert (*pos_after <= _dbus_string_get_length (str));
-+ }
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+marshal_8_octets (DBusString *str,
-+ int insert_at,
-+ DBusBasicValue value,
-+ int byte_order,
-+ int *pos_after)
-+{
-+ dbus_bool_t retval;
-+ int orig_len;
-+
-+ _dbus_assert (sizeof (value) == 8);
-+
-+ swap_8_octets (&value, byte_order);
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ retval = _dbus_string_insert_8_aligned (str, insert_at,
-+ (const unsigned char *)&value);
-+
-+ if (pos_after)
-+ *pos_after = insert_at + _dbus_string_get_length (str) - orig_len;
-+
-+ return retval;
-+}
-+
-+enum
-+ {
-+ MARSHAL_AS_STRING,
-+ MARSHAL_AS_SIGNATURE,
-+ MARSHAL_AS_BYTE_ARRAY
-+ };
-+
-+static dbus_bool_t
-+marshal_len_followed_by_bytes (int marshal_as,
-+ DBusString *str,
-+ int insert_at,
-+ const unsigned char *value,
-+ int data_len, /* doesn't include nul if any */
-+ int byte_order,
-+ int *pos_after)
-+{
-+ int pos;
-+ DBusString value_str;
-+ int value_len;
-+
-+ _dbus_assert (byte_order == DBUS_LITTLE_ENDIAN || byte_order == DBUS_BIG_ENDIAN);
-+ if (insert_at > _dbus_string_get_length (str))
-+ _dbus_warn ("insert_at = %d string len = %d data_len = %d\n",
-+ insert_at, _dbus_string_get_length (str), data_len);
-+
-+ if (marshal_as == MARSHAL_AS_BYTE_ARRAY)
-+ value_len = data_len;
-+ else
-+ value_len = data_len + 1; /* value has a nul */
-+
-+ _dbus_string_init_const_len (&value_str, value, value_len);
-+
-+ pos = insert_at;
-+
-+ if (marshal_as == MARSHAL_AS_SIGNATURE)
-+ {
-+ _dbus_assert (data_len <= DBUS_MAXIMUM_SIGNATURE_LENGTH);
-+ _dbus_assert (data_len <= 255); /* same as max sig len right now */
-+
-+ if (!_dbus_string_insert_byte (str, pos, data_len))
-+ goto oom;
-+
-+ pos += 1;
-+ }
-+ else
-+ {
-+ if (!marshal_4_octets (str, pos, data_len,
-+ byte_order, &pos))
-+ goto oom;
-+ }
-+
-+ if (!_dbus_string_copy_len (&value_str, 0, value_len,
-+ str, pos))
-+ goto oom;
-+
-+#if 0
-+ /* too expensive */
-+ _dbus_assert (_dbus_string_equal_substring (&value_str, 0, value_len,
-+ str, pos));
-+ _dbus_verbose_bytes_of_string (str, pos, value_len);
-+#endif
-+
-+ pos += value_len;
-+
-+ if (pos_after)
-+ *pos_after = pos;
-+
-+ return TRUE;
-+
-+ oom:
-+ /* Delete what we've inserted */
-+ _dbus_string_delete (str, insert_at, pos - insert_at);
-+
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+marshal_string (DBusString *str,
-+ int insert_at,
-+ const char *value,
-+ int byte_order,
-+ int *pos_after)
-+{
-+ return marshal_len_followed_by_bytes (MARSHAL_AS_STRING,
-+ str, insert_at, value,
-+ strlen (value),
-+ byte_order, pos_after);
-+}
-+
-+static dbus_bool_t
-+marshal_signature (DBusString *str,
-+ int insert_at,
-+ const char *value,
-+ int *pos_after)
-+{
-+ return marshal_len_followed_by_bytes (MARSHAL_AS_SIGNATURE,
-+ str, insert_at, value,
-+ strlen (value),
-+ DBUS_COMPILER_BYTE_ORDER, /* irrelevant */
-+ pos_after);
-+}
-+
-+/**
-+ * Marshals a basic-typed value. The "value" pointer is always the
-+ * address of a variable containing the basic type value.
-+ * So for example for int32 it will be dbus_int32_t*, and
-+ * for string it will be const char**. This is for symmetry
-+ * with _dbus_marshal_read_basic() and to have a simple
-+ * consistent rule.
-+ *
-+ * @param str string to marshal to
-+ * @param insert_at where to insert the value
-+ * @param type type of value
-+ * @param value pointer to a variable containing the value
-+ * @param byte_order byte order
-+ * @param pos_after #NULL or the position after the type
-+ * @returns #TRUE on success
-+ **/
-+dbus_bool_t
-+_dbus_marshal_write_basic (DBusString *str,
-+ int insert_at,
-+ int type,
-+ const void *value,
-+ int byte_order,
-+ int *pos_after)
-+{
-+ const DBusBasicValue *vp;
-+
-+ _dbus_assert (dbus_type_is_basic (type));
-+
-+ vp = value;
-+
-+ switch (type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ if (!_dbus_string_insert_byte (str, insert_at, vp->byt))
-+ return FALSE;
-+ if (pos_after)
-+ *pos_after = insert_at + 1;
-+ return TRUE;
-+ break;
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ return marshal_2_octets (str, insert_at, vp->u16,
-+ byte_order, pos_after);
-+ break;
-+ case DBUS_TYPE_BOOLEAN:
-+ return marshal_4_octets (str, insert_at, vp->u32 != FALSE,
-+ byte_order, pos_after);
-+ break;
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ return marshal_4_octets (str, insert_at, vp->u32,
-+ byte_order, pos_after);
-+ break;
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ return marshal_8_octets (str, insert_at, *vp, byte_order, pos_after);
-+ break;
-+
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ _dbus_assert (vp->str != NULL);
-+ return marshal_string (str, insert_at, vp->str, byte_order, pos_after);
-+ break;
-+ case DBUS_TYPE_SIGNATURE:
-+ _dbus_assert (vp->str != NULL);
-+ return marshal_signature (str, insert_at, vp->str, pos_after);
-+ break;
-+ default:
-+ _dbus_assert_not_reached ("not a basic type");
-+ return FALSE;
-+ break;
-+ }
-+}
-+
-+static dbus_bool_t
-+marshal_1_octets_array (DBusString *str,
-+ int insert_at,
-+ const unsigned char *value,
-+ int n_elements,
-+ int byte_order,
-+ int *pos_after)
-+{
-+ int pos;
-+ DBusString value_str;
-+
-+ _dbus_string_init_const_len (&value_str, value, n_elements);
-+
-+ pos = insert_at;
-+
-+ if (!_dbus_string_copy_len (&value_str, 0, n_elements,
-+ str, pos))
-+ return FALSE;
-+
-+ pos += n_elements;
-+
-+ if (pos_after)
-+ *pos_after = pos;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Swaps the elements of an array to the opposite byte order
-+ *
-+ * @param data start of array
-+ * @param n_elements number of elements
-+ * @param alignment size of each element
-+ */
-+void
-+_dbus_swap_array (unsigned char *data,
-+ int n_elements,
-+ int alignment)
-+{
-+ unsigned char *d;
-+ unsigned char *end;
-+
-+ _dbus_assert (_DBUS_ALIGN_ADDRESS (data, alignment) == data);
-+
-+ /* we use const_data and cast it off so DBusString can be a const string
-+ * for the unit tests. don't ask.
-+ */
-+ d = data;
-+ end = d + (n_elements * alignment);
-+
-+ if (alignment == 8)
-+ {
-+ while (d != end)
-+ {
-+#ifdef DBUS_HAVE_INT64
-+ *((dbus_uint64_t*)d) = DBUS_UINT64_SWAP_LE_BE (*((dbus_uint64_t*)d));
-+#else
-+ swap_8_bytes ((DBusBasicValue*) d);
-+#endif
-+ d += 8;
-+ }
-+ }
-+ else if (alignment == 4)
-+ {
-+ while (d != end)
-+ {
-+ *((dbus_uint32_t*)d) = DBUS_UINT32_SWAP_LE_BE (*((dbus_uint32_t*)d));
-+ d += 4;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_assert (alignment == 2);
-+
-+ while (d != end)
-+ {
-+ *((dbus_uint16_t*)d) = DBUS_UINT16_SWAP_LE_BE (*((dbus_uint16_t*)d));
-+ d += 2;
-+ }
-+ }
-+}
-+
-+static void
-+swap_array (DBusString *str,
-+ int array_start,
-+ int n_elements,
-+ int byte_order,
-+ int alignment)
-+{
-+ _dbus_assert (_DBUS_ALIGN_VALUE (array_start, alignment) == (unsigned) array_start);
-+
-+ if (byte_order != DBUS_COMPILER_BYTE_ORDER)
-+ {
-+ /* we use const_data and cast it off so DBusString can be a const string
-+ * for the unit tests. don't ask.
-+ */
-+ _dbus_swap_array ((unsigned char*) (_dbus_string_get_const_data (str) + array_start),
-+ n_elements, alignment);
-+ }
-+}
-+
-+static dbus_bool_t
-+marshal_fixed_multi (DBusString *str,
-+ int insert_at,
-+ const DBusBasicValue *value,
-+ int n_elements,
-+ int byte_order,
-+ int alignment,
-+ int *pos_after)
-+{
-+ int old_string_len;
-+ int array_start;
-+ DBusString t;
-+ int len_in_bytes;
-+
-+ _dbus_assert (n_elements <= DBUS_MAXIMUM_ARRAY_LENGTH / alignment);
-+
-+ old_string_len = _dbus_string_get_length (str);
-+
-+ len_in_bytes = n_elements * alignment;
-+ array_start = insert_at;
-+
-+ /* Note that we do alignment padding unconditionally
-+ * even if the array is empty; this means that
-+ * padding + len is always equal to the number of bytes
-+ * in the array.
-+ */
-+
-+ if (!_dbus_string_insert_alignment (str, &array_start, alignment))
-+ goto error;
-+
-+ _dbus_string_init_const_len (&t,
-+ (const unsigned char*) value,
-+ len_in_bytes);
-+
-+ if (!_dbus_string_copy (&t, 0,
-+ str, array_start))
-+ goto error;
-+
-+ swap_array (str, array_start, n_elements, byte_order, alignment);
-+
-+ if (pos_after)
-+ *pos_after = array_start + len_in_bytes;
-+
-+ return TRUE;
-+
-+ error:
-+ _dbus_string_delete (str, insert_at,
-+ _dbus_string_get_length (str) - old_string_len);
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Marshals a block of values of fixed-length type all at once, as an
-+ * optimization. dbus_type_is_fixed() returns #TRUE for fixed-length
-+ * types, which are the basic types minus the string-like types.
-+ *
-+ * The value argument should be the adddress of an
-+ * array, so e.g. "const dbus_uint32_t**"
-+ *
-+ * @param str string to marshal to
-+ * @param insert_at where to insert the value
-+ * @param element_type type of array elements
-+ * @param value address of an array to marshal
-+ * @param n_elements number of elements in the array
-+ * @param byte_order byte order
-+ * @param pos_after #NULL or the position after the type
-+ * @returns #TRUE on success
-+ **/
-+dbus_bool_t
-+_dbus_marshal_write_fixed_multi (DBusString *str,
-+ int insert_at,
-+ int element_type,
-+ const void *value,
-+ int n_elements,
-+ int byte_order,
-+ int *pos_after)
-+{
-+ const void* vp = *(const DBusBasicValue**)value;
-+
-+ _dbus_assert (dbus_type_is_fixed (element_type));
-+ _dbus_assert (n_elements >= 0);
-+
-+#if 0
-+ _dbus_verbose ("writing %d elements of %s\n",
-+ n_elements, _dbus_type_to_string (element_type));
-+#endif
-+
-+ switch (element_type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ return marshal_1_octets_array (str, insert_at, vp, n_elements, byte_order, pos_after);
-+ break;
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ return marshal_fixed_multi (str, insert_at, vp, n_elements, byte_order, 2, pos_after);
-+ /* FIXME: we canonicalize to 0 or 1 for the single boolean case
-+ * should we here too ? */
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ return marshal_fixed_multi (str, insert_at, vp, n_elements, byte_order, 4, pos_after);
-+ break;
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ return marshal_fixed_multi (str, insert_at, vp, n_elements, byte_order, 8, pos_after);
-+ break;
-+
-+ default:
-+ _dbus_assert_not_reached ("non fixed type in array write");
-+ break;
-+ }
-+
-+ return FALSE;
-+}
-+
-+
-+/**
-+ * Skips over a basic-typed value, reporting the following position.
-+ *
-+ * @param str the string containing the data
-+ * @param type type of value to read
-+ * @param byte_order the byte order
-+ * @param pos pointer to position in the string,
-+ * updated on return to new position
-+ **/
-+void
-+_dbus_marshal_skip_basic (const DBusString *str,
-+ int type,
-+ int byte_order,
-+ int *pos)
-+{
-+ _dbus_assert (byte_order == DBUS_LITTLE_ENDIAN ||
-+ byte_order == DBUS_BIG_ENDIAN);
-+
-+ switch (type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ (*pos)++;
-+ break;
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ *pos = _DBUS_ALIGN_VALUE (*pos, 2);
-+ *pos += 2;
-+ break;
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ *pos = _DBUS_ALIGN_VALUE (*pos, 4);
-+ *pos += 4;
-+ break;
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ *pos = _DBUS_ALIGN_VALUE (*pos, 8);
-+ *pos += 8;
-+ break;
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ {
-+ int len;
-+
-+ len = _dbus_marshal_read_uint32 (str, *pos, byte_order, pos);
-+
-+ *pos += len + 1; /* length plus nul */
-+ }
-+ break;
-+ case DBUS_TYPE_SIGNATURE:
-+ {
-+ int len;
-+
-+ len = _dbus_string_get_byte (str, *pos);
-+
-+ *pos += len + 2; /* length byte plus length plus nul */
-+ }
-+ break;
-+ default:
-+ _dbus_warn ("type %s not a basic type\n",
-+ _dbus_type_to_string (type));
-+ _dbus_assert_not_reached ("not a basic type");
-+ break;
-+ }
-+}
-+
-+/**
-+ * Skips an array, returning the next position.
-+ *
-+ * @param str the string containing the data
-+ * @param element_type the type of array elements
-+ * @param byte_order the byte order
-+ * @param pos pointer to position in the string,
-+ * updated on return to new position
-+ */
-+void
-+_dbus_marshal_skip_array (const DBusString *str,
-+ int element_type,
-+ int byte_order,
-+ int *pos)
-+{
-+ dbus_uint32_t array_len;
-+ int i;
-+ int alignment;
-+
-+ i = _DBUS_ALIGN_VALUE (*pos, 4);
-+
-+ array_len = _dbus_marshal_read_uint32 (str, i, byte_order, &i);
-+
-+ alignment = _dbus_type_get_alignment (element_type);
-+
-+ i = _DBUS_ALIGN_VALUE (i, alignment);
-+
-+ *pos = i + array_len;
-+}
-+
-+/**
-+ * Gets the alignment requirement for the given type;
-+ * will be 1, 4, or 8.
-+ *
-+ * @param typecode the type
-+ * @returns alignment of 1, 4, or 8
-+ */
-+int
-+_dbus_type_get_alignment (int typecode)
-+{
-+ switch (typecode)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ case DBUS_TYPE_VARIANT:
-+ case DBUS_TYPE_SIGNATURE:
-+ return 1;
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ return 2;
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ /* this stuff is 4 since it starts with a length */
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ case DBUS_TYPE_ARRAY:
-+ return 4;
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ /* struct is 8 since it could contain an 8-aligned item
-+ * and it's simpler to just always align structs to 8;
-+ * we want the amount of padding in a struct of a given
-+ * type to be predictable, not location-dependent.
-+ * DICT_ENTRY is always the same as struct.
-+ */
-+ case DBUS_TYPE_STRUCT:
-+ case DBUS_TYPE_DICT_ENTRY:
-+ return 8;
-+
-+ default:
-+ _dbus_assert_not_reached ("unknown typecode in _dbus_type_get_alignment()");
-+ return 0;
-+ }
-+}
-+
-+
-+/**
-+ * Return #TRUE if the typecode is a valid typecode.
-+ * #DBUS_TYPE_INVALID surprisingly enough is not considered valid, and
-+ * random unknown bytes aren't either. This function is safe with
-+ * untrusted data.
-+ *
-+ * @returns #TRUE if valid
-+ */
-+dbus_bool_t
-+_dbus_type_is_valid (int typecode)
-+{
-+ switch (typecode)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ case DBUS_TYPE_SIGNATURE:
-+ case DBUS_TYPE_ARRAY:
-+ case DBUS_TYPE_STRUCT:
-+ case DBUS_TYPE_DICT_ENTRY:
-+ case DBUS_TYPE_VARIANT:
-+ return TRUE;
-+
-+ default:
-+ return FALSE;
-+ }
-+}
-+
-+/**
-+ * Returns a string describing the given type.
-+ *
-+ * @param typecode the type to describe
-+ * @returns a constant string describing the type
-+ */
-+const char *
-+_dbus_type_to_string (int typecode)
-+{
-+ switch (typecode)
-+ {
-+ case DBUS_TYPE_INVALID:
-+ return "invalid";
-+ case DBUS_TYPE_BOOLEAN:
-+ return "boolean";
-+ case DBUS_TYPE_BYTE:
-+ return "byte";
-+ case DBUS_TYPE_INT16:
-+ return "int16";
-+ case DBUS_TYPE_UINT16:
-+ return "uint16";
-+ case DBUS_TYPE_INT32:
-+ return "int32";
-+ case DBUS_TYPE_UINT32:
-+ return "uint32";
-+ case DBUS_TYPE_DOUBLE:
-+ return "double";
-+ case DBUS_TYPE_STRING:
-+ return "string";
-+ case DBUS_TYPE_OBJECT_PATH:
-+ return "object_path";
-+ case DBUS_TYPE_SIGNATURE:
-+ return "signature";
-+ case DBUS_TYPE_STRUCT:
-+ return "struct";
-+ case DBUS_TYPE_DICT_ENTRY:
-+ return "dict_entry";
-+ case DBUS_TYPE_ARRAY:
-+ return "array";
-+ case DBUS_TYPE_VARIANT:
-+ return "variant";
-+ case DBUS_STRUCT_BEGIN_CHAR:
-+ return "begin_struct";
-+ case DBUS_STRUCT_END_CHAR:
-+ return "end_struct";
-+ case DBUS_DICT_ENTRY_BEGIN_CHAR:
-+ return "begin_dict_entry";
-+ case DBUS_DICT_ENTRY_END_CHAR:
-+ return "end_dict_entry";
-+ default:
-+ return "unknown";
-+ }
-+}
-+
-+/**
-+ * If in verbose mode, print a block of binary data.
-+ *
-+ * @todo right now it prints even if not in verbose mode
-+ *
-+ * @param data the data
-+ * @param len the length of the data
-+ * @param offset where to start counting for byte indexes
-+ */
-+void
-+_dbus_verbose_bytes (const unsigned char *data,
-+ int len,
-+ int offset)
-+{
-+ int i;
-+ const unsigned char *aligned;
-+
-+ _dbus_assert (len >= 0);
-+
-+ /* Print blanks on first row if appropriate */
-+ aligned = _DBUS_ALIGN_ADDRESS (data, 4);
-+ if (aligned > data)
-+ aligned -= 4;
-+ _dbus_assert (aligned <= data);
-+
-+ if (aligned != data)
-+ {
-+ _dbus_verbose ("%4d\t%p: ", - (data - aligned), aligned);
-+ while (aligned != data)
-+ {
-+ _dbus_verbose (" ");
-+ ++aligned;
-+ }
-+ }
-+
-+ /* now print the bytes */
-+ i = 0;
-+ while (i < len)
-+ {
-+ if (_DBUS_ALIGN_ADDRESS (&data[i], 4) == &data[i])
-+ {
-+ _dbus_verbose ("%4d\t%p: ",
-+ offset + i, &data[i]);
-+ }
-+
-+ if (data[i] >= 32 &&
-+ data[i] <= 126)
-+ _dbus_verbose (" '%c' ", data[i]);
-+ else
-+ _dbus_verbose ("0x%s%x ",
-+ data[i] <= 0xf ? "0" : "", data[i]);
-+
-+ ++i;
-+
-+ if (_DBUS_ALIGN_ADDRESS (&data[i], 4) == &data[i])
-+ {
-+ if (i > 3)
-+ _dbus_verbose ("BE: %d LE: %d",
-+ _dbus_unpack_uint32 (DBUS_BIG_ENDIAN, &data[i-4]),
-+ _dbus_unpack_uint32 (DBUS_LITTLE_ENDIAN, &data[i-4]));
-+
-+ if (i > 7 &&
-+ _DBUS_ALIGN_ADDRESS (&data[i], 8) == &data[i])
-+ {
-+#ifdef DBUS_HAVE_INT64
-+ /* I think I probably mean "GNU libc printf" and not "GNUC"
-+ * but we'll wait until someone complains. If you hit this,
-+ * just turn off verbose mode as a workaround.
-+ */
-+#if __GNUC__
-+ _dbus_verbose (" u64: 0x%llx",
-+ *(dbus_uint64_t*)&data[i-8]);
-+#endif
-+#endif
-+ _dbus_verbose (" dbl: %g",
-+ *(double*)&data[i-8]);
-+ }
-+
-+ _dbus_verbose ("\n");
-+ }
-+ }
-+
-+ _dbus_verbose ("\n");
-+}
-+
-+/**
-+ * Dump the given part of the string to verbose log.
-+ *
-+ * @param str the string
-+ * @param start the start of range to dump
-+ * @param len length of range
-+ */
-+void
-+_dbus_verbose_bytes_of_string (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ const char *d;
-+ int real_len;
-+
-+ real_len = _dbus_string_get_length (str);
-+
-+ _dbus_assert (start >= 0);
-+
-+ if (start > real_len)
-+ {
-+ _dbus_verbose (" [%d,%d) is not inside string of length %d\n",
-+ start, len, real_len);
-+ return;
-+ }
-+
-+ if ((start + len) > real_len)
-+ {
-+ _dbus_verbose (" [%d,%d) extends outside string of length %d\n",
-+ start, len, real_len);
-+ len = real_len - start;
-+ }
-+
-+ d = _dbus_string_get_const_data_len (str, start, len);
-+
-+ _dbus_verbose_bytes (d, len, start);
-+}
-+
-+static int
-+map_type_char_to_type (int t)
-+{
-+ if (t == DBUS_STRUCT_BEGIN_CHAR)
-+ return DBUS_TYPE_STRUCT;
-+ else if (t == DBUS_DICT_ENTRY_BEGIN_CHAR)
-+ return DBUS_TYPE_DICT_ENTRY;
-+ else
-+ {
-+ _dbus_assert (t != DBUS_STRUCT_END_CHAR);
-+ _dbus_assert (t != DBUS_DICT_ENTRY_END_CHAR);
-+ return t;
-+ }
-+}
-+
-+/**
-+ * Get the first type in the signature. The difference between this
-+ * and just getting the first byte of the signature is that you won't
-+ * get DBUS_STRUCT_BEGIN_CHAR, you'll get DBUS_TYPE_STRUCT
-+ * instead.
-+ *
-+ * @param str string containing signature
-+ * @param pos where the signature starts
-+ * @returns the first type in the signature
-+ */
-+int
-+_dbus_first_type_in_signature (const DBusString *str,
-+ int pos)
-+{
-+ return map_type_char_to_type (_dbus_string_get_byte (str, pos));
-+}
-+
-+/**
-+ * Similar to #_dbus_first_type_in_signature, but operates
-+ * on a C string buffer.
-+ *
-+ * @param str a C string buffer
-+ * @param pos where the signature starts
-+ * @returns the first type in the signature
-+ */
-+int
-+_dbus_first_type_in_signature_c_str (const char *str,
-+ int pos)
-+{
-+ return map_type_char_to_type (str[pos]);
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+static void
-+swap_test_array (void *array,
-+ int len_bytes,
-+ int byte_order,
-+ int alignment)
-+{
-+ DBusString t;
-+
-+ if (alignment == 1)
-+ return;
-+
-+ _dbus_string_init_const_len (&t, array, len_bytes);
-+ swap_array (&t, 0, len_bytes / alignment, byte_order, alignment);
-+}
-+
-+#define MARSHAL_BASIC(typename, byte_order, literal) \
-+ do { \
-+ v_##typename = literal; \
-+ if (!_dbus_marshal_write_basic (&str, pos, DBUS_TYPE_##typename, \
-+ &v_##typename, \
-+ byte_order, NULL)) \
-+ _dbus_assert_not_reached ("no memory"); \
-+ } while (0)
-+
-+#define DEMARSHAL_BASIC(typename, byte_order) \
-+ do { \
-+ _dbus_marshal_read_basic (&str, pos, DBUS_TYPE_##typename, &v_##typename, \
-+ byte_order, &pos); \
-+ } while (0)
-+
-+#define DEMARSHAL_BASIC_AND_CHECK(typename, byte_order, literal) \
-+ do { \
-+ DEMARSHAL_BASIC (typename, byte_order); \
-+ if (literal != v_##typename) \
-+ { \
-+ _dbus_verbose_bytes_of_string (&str, dump_pos, \
-+ _dbus_string_get_length (&str) - dump_pos); \
-+ _dbus_assert_not_reached ("demarshaled wrong value"); \
-+ } \
-+ } while (0)
-+
-+#define MARSHAL_TEST(typename, byte_order, literal) \
-+ do { \
-+ MARSHAL_BASIC (typename, byte_order, literal); \
-+ dump_pos = pos; \
-+ DEMARSHAL_BASIC_AND_CHECK (typename, byte_order, literal); \
-+ } while (0)
-+
-+#define MARSHAL_TEST_STRCMP(typename, byte_order, literal) \
-+ do { \
-+ MARSHAL_BASIC (typename, byte_order, literal); \
-+ dump_pos = pos; \
-+ DEMARSHAL_BASIC (typename, byte_order); \
-+ if (strcmp (literal, v_##typename) != 0) \
-+ { \
-+ _dbus_verbose_bytes_of_string (&str, dump_pos, \
-+ _dbus_string_get_length (&str) - dump_pos); \
-+ _dbus_warn ("literal '%s'\nvalue '%s'\n", literal, v_##typename); \
-+ _dbus_assert_not_reached ("demarshaled wrong value"); \
-+ } \
-+ } while (0)
-+
-+#define MARSHAL_FIXED_ARRAY(typename, byte_order, literal) \
-+ do { \
-+ int next; \
-+ v_UINT32 = sizeof(literal); \
-+ if (!_dbus_marshal_write_basic (&str, pos, DBUS_TYPE_UINT32, &v_UINT32, \
-+ byte_order, &next)) \
-+ _dbus_assert_not_reached ("no memory"); \
-+ v_ARRAY_##typename = literal; \
-+ if (!_dbus_marshal_write_fixed_multi (&str, next, DBUS_TYPE_##typename, \
-+ &v_ARRAY_##typename, _DBUS_N_ELEMENTS(literal), \
-+ byte_order, NULL)) \
-+ _dbus_assert_not_reached ("no memory"); \
-+ } while (0)
-+
-+#define DEMARSHAL_FIXED_ARRAY(typename, byte_order) \
-+ do { \
-+ int next; \
-+ alignment = _dbus_type_get_alignment (DBUS_TYPE_##typename); \
-+ v_UINT32 = _dbus_marshal_read_uint32 (&str, dump_pos, byte_order, &next); \
-+ _dbus_marshal_read_fixed_multi (&str, next, DBUS_TYPE_##typename, &v_ARRAY_##typename, \
-+ v_UINT32/alignment, \
-+ byte_order, NULL); \
-+ swap_test_array (v_ARRAY_##typename, v_UINT32, \
-+ byte_order, alignment); \
-+ } while (0)
-+
-+#define DEMARSHAL_FIXED_ARRAY_AND_CHECK(typename, byte_order, literal) \
-+ do { \
-+ DEMARSHAL_FIXED_ARRAY (typename, byte_order); \
-+ if (memcmp (literal, v_ARRAY_##typename, sizeof (literal) != 0)) \
-+ { \
-+ _dbus_verbose ("MARSHALED DATA\n"); \
-+ _dbus_verbose_bytes_of_string (&str, dump_pos, \
-+ _dbus_string_get_length (&str) - dump_pos); \
-+ _dbus_verbose ("LITERAL DATA\n"); \
-+ _dbus_verbose_bytes ((char*)literal, sizeof (literal), 0); \
-+ _dbus_verbose ("READ DATA\n"); \
-+ _dbus_verbose_bytes ((char*)v_ARRAY_##typename, sizeof (literal), 0); \
-+ _dbus_assert_not_reached ("demarshaled wrong fixed array value"); \
-+ } \
-+ } while (0)
-+
-+#define MARSHAL_TEST_FIXED_ARRAY(typename, byte_order, literal) \
-+ do { \
-+ MARSHAL_FIXED_ARRAY (typename, byte_order, literal); \
-+ dump_pos = pos; \
-+ DEMARSHAL_FIXED_ARRAY_AND_CHECK (typename, byte_order, literal); \
-+ } while (0)
-+
-+dbus_bool_t
-+_dbus_marshal_test (void)
-+{
-+ int alignment;
-+ DBusString str;
-+ int pos, dump_pos;
-+ unsigned char array1[5] = { 3, 4, 0, 1, 9 };
-+ dbus_int16_t array2[3] = { 124, 457, 780 };
-+ dbus_int32_t array4[3] = { 123, 456, 789 };
-+#ifdef DBUS_HAVE_INT64
-+ dbus_int64_t array8[3] = { DBUS_INT64_CONSTANT (0x123ffffffff),
-+ DBUS_INT64_CONSTANT (0x456ffffffff),
-+ DBUS_INT64_CONSTANT (0x789ffffffff) };
-+ dbus_int64_t *v_ARRAY_INT64;
-+#endif
-+ unsigned char *v_ARRAY_BYTE;
-+ dbus_int16_t *v_ARRAY_INT16;
-+ dbus_uint16_t *v_ARRAY_UINT16;
-+ dbus_int32_t *v_ARRAY_INT32;
-+ dbus_uint32_t *v_ARRAY_UINT32;
-+ double *v_ARRAY_DOUBLE;
-+ DBusString t;
-+ double v_DOUBLE;
-+ double t_DOUBLE;
-+ dbus_int16_t v_INT16;
-+ dbus_uint16_t v_UINT16;
-+ dbus_int32_t v_INT32;
-+ dbus_uint32_t v_UINT32;
-+ dbus_int64_t v_INT64;
-+ dbus_uint64_t v_UINT64;
-+ unsigned char v_BYTE;
-+ dbus_bool_t v_BOOLEAN;
-+ const char *v_STRING;
-+ const char *v_SIGNATURE;
-+ const char *v_OBJECT_PATH;
-+ int byte_order;
-+
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ pos = 0;
-+
-+ /* Marshal doubles */
-+ MARSHAL_BASIC (DOUBLE, DBUS_BIG_ENDIAN, 3.14);
-+ DEMARSHAL_BASIC (DOUBLE, DBUS_BIG_ENDIAN);
-+ t_DOUBLE = 3.14;
-+ if (!_DBUS_DOUBLES_BITWISE_EQUAL (t_DOUBLE, v_DOUBLE))
-+ _dbus_assert_not_reached ("got wrong double value");
-+
-+ MARSHAL_BASIC (DOUBLE, DBUS_LITTLE_ENDIAN, 3.14);
-+ DEMARSHAL_BASIC (DOUBLE, DBUS_LITTLE_ENDIAN);
-+ t_DOUBLE = 3.14;
-+ if (!_DBUS_DOUBLES_BITWISE_EQUAL (t_DOUBLE, v_DOUBLE))
-+ _dbus_assert_not_reached ("got wrong double value");
-+
-+ /* Marshal signed 16 integers */
-+ MARSHAL_TEST (INT16, DBUS_BIG_ENDIAN, -12345);
-+ MARSHAL_TEST (INT16, DBUS_LITTLE_ENDIAN, -12345);
-+
-+ /* Marshal unsigned 16 integers */
-+ MARSHAL_TEST (UINT16, DBUS_BIG_ENDIAN, 0x1234);
-+ MARSHAL_TEST (UINT16, DBUS_LITTLE_ENDIAN, 0x1234);
-+
-+ /* Marshal signed integers */
-+ MARSHAL_TEST (INT32, DBUS_BIG_ENDIAN, -12345678);
-+ MARSHAL_TEST (INT32, DBUS_LITTLE_ENDIAN, -12345678);
-+
-+ /* Marshal unsigned integers */
-+ MARSHAL_TEST (UINT32, DBUS_BIG_ENDIAN, 0x12345678);
-+ MARSHAL_TEST (UINT32, DBUS_LITTLE_ENDIAN, 0x12345678);
-+
-+#ifdef DBUS_HAVE_INT64
-+ /* Marshal signed integers */
-+ MARSHAL_TEST (INT64, DBUS_BIG_ENDIAN, DBUS_INT64_CONSTANT (-0x123456789abc7));
-+ MARSHAL_TEST (INT64, DBUS_LITTLE_ENDIAN, DBUS_INT64_CONSTANT (-0x123456789abc7));
-+
-+ /* Marshal unsigned integers */
-+ MARSHAL_TEST (UINT64, DBUS_BIG_ENDIAN, DBUS_UINT64_CONSTANT (0x123456789abc7));
-+ MARSHAL_TEST (UINT64, DBUS_LITTLE_ENDIAN, DBUS_UINT64_CONSTANT (0x123456789abc7));
-+#endif /* DBUS_HAVE_INT64 */
-+
-+ /* Marshal byte */
-+ MARSHAL_TEST (BYTE, DBUS_BIG_ENDIAN, 5);
-+ MARSHAL_TEST (BYTE, DBUS_LITTLE_ENDIAN, 5);
-+
-+ /* Marshal all possible bools! */
-+ MARSHAL_TEST (BOOLEAN, DBUS_BIG_ENDIAN, FALSE);
-+ MARSHAL_TEST (BOOLEAN, DBUS_LITTLE_ENDIAN, FALSE);
-+ MARSHAL_TEST (BOOLEAN, DBUS_BIG_ENDIAN, TRUE);
-+ MARSHAL_TEST (BOOLEAN, DBUS_LITTLE_ENDIAN, TRUE);
-+
-+ /* Marshal strings */
-+ MARSHAL_TEST_STRCMP (STRING, DBUS_BIG_ENDIAN, "");
-+ MARSHAL_TEST_STRCMP (STRING, DBUS_LITTLE_ENDIAN, "");
-+ MARSHAL_TEST_STRCMP (STRING, DBUS_BIG_ENDIAN, "This is the dbus test string");
-+ MARSHAL_TEST_STRCMP (STRING, DBUS_LITTLE_ENDIAN, "This is the dbus test string");
-+
-+ /* object paths */
-+ MARSHAL_TEST_STRCMP (OBJECT_PATH, DBUS_BIG_ENDIAN, "/a/b/c");
-+ MARSHAL_TEST_STRCMP (OBJECT_PATH, DBUS_LITTLE_ENDIAN, "/a/b/c");
-+
-+ /* signatures */
-+ MARSHAL_TEST_STRCMP (SIGNATURE, DBUS_BIG_ENDIAN, "");
-+ MARSHAL_TEST_STRCMP (SIGNATURE, DBUS_LITTLE_ENDIAN, "");
-+ MARSHAL_TEST_STRCMP (SIGNATURE, DBUS_BIG_ENDIAN, "a(ii)");
-+ MARSHAL_TEST_STRCMP (SIGNATURE, DBUS_LITTLE_ENDIAN, "a(ii)");
-+
-+ /* Arrays */
-+ MARSHAL_TEST_FIXED_ARRAY (INT16, DBUS_BIG_ENDIAN, array2);
-+ MARSHAL_TEST_FIXED_ARRAY (INT16, DBUS_LITTLE_ENDIAN, array2);
-+ MARSHAL_TEST_FIXED_ARRAY (UINT16, DBUS_BIG_ENDIAN, array2);
-+ MARSHAL_TEST_FIXED_ARRAY (UINT16, DBUS_LITTLE_ENDIAN, array2);
-+
-+ MARSHAL_TEST_FIXED_ARRAY (INT32, DBUS_BIG_ENDIAN, array4);
-+ MARSHAL_TEST_FIXED_ARRAY (INT32, DBUS_LITTLE_ENDIAN, array4);
-+ MARSHAL_TEST_FIXED_ARRAY (UINT32, DBUS_BIG_ENDIAN, array4);
-+ MARSHAL_TEST_FIXED_ARRAY (UINT32, DBUS_LITTLE_ENDIAN, array4);
-+
-+ MARSHAL_TEST_FIXED_ARRAY (BYTE, DBUS_BIG_ENDIAN, array1);
-+ MARSHAL_TEST_FIXED_ARRAY (BYTE, DBUS_LITTLE_ENDIAN, array1);
-+
-+#ifdef DBUS_HAVE_INT64
-+ MARSHAL_TEST_FIXED_ARRAY (INT64, DBUS_BIG_ENDIAN, array8);
-+ MARSHAL_TEST_FIXED_ARRAY (INT64, DBUS_LITTLE_ENDIAN, array8);
-+#endif
-+
-+#if 0
-+
-+ /*
-+ * FIXME restore the set/pack tests
-+ */
-+
-+#ifdef DBUS_HAVE_INT64
-+ /* set/pack 64-bit integers */
-+ _dbus_string_set_length (&str, 8);
-+
-+ /* signed little */
-+ _dbus_marshal_set_int64 (&str, DBUS_LITTLE_ENDIAN,
-+ 0, DBUS_INT64_CONSTANT (-0x123456789abc7));
-+
-+ _dbus_assert (DBUS_INT64_CONSTANT (-0x123456789abc7) ==
-+ _dbus_unpack_int64 (DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* signed big */
-+ _dbus_marshal_set_int64 (&str, DBUS_BIG_ENDIAN,
-+ 0, DBUS_INT64_CONSTANT (-0x123456789abc7));
-+
-+ _dbus_assert (DBUS_INT64_CONSTANT (-0x123456789abc7) ==
-+ _dbus_unpack_int64 (DBUS_BIG_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* signed little pack */
-+ _dbus_pack_int64 (DBUS_INT64_CONSTANT (-0x123456789abc7),
-+ DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_data (&str));
-+
-+ _dbus_assert (DBUS_INT64_CONSTANT (-0x123456789abc7) ==
-+ _dbus_unpack_int64 (DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* signed big pack */
-+ _dbus_pack_int64 (DBUS_INT64_CONSTANT (-0x123456789abc7),
-+ DBUS_BIG_ENDIAN,
-+ _dbus_string_get_data (&str));
-+
-+ _dbus_assert (DBUS_INT64_CONSTANT (-0x123456789abc7) ==
-+ _dbus_unpack_int64 (DBUS_BIG_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* unsigned little */
-+ _dbus_marshal_set_uint64 (&str, DBUS_LITTLE_ENDIAN,
-+ 0, DBUS_UINT64_CONSTANT (0x123456789abc7));
-+
-+ _dbus_assert (DBUS_UINT64_CONSTANT (0x123456789abc7) ==
-+ _dbus_unpack_uint64 (DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* unsigned big */
-+ _dbus_marshal_set_uint64 (&str, DBUS_BIG_ENDIAN,
-+ 0, DBUS_UINT64_CONSTANT (0x123456789abc7));
-+
-+ _dbus_assert (DBUS_UINT64_CONSTANT (0x123456789abc7) ==
-+ _dbus_unpack_uint64 (DBUS_BIG_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* unsigned little pack */
-+ _dbus_pack_uint64 (DBUS_UINT64_CONSTANT (0x123456789abc7),
-+ DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_data (&str));
-+
-+ _dbus_assert (DBUS_UINT64_CONSTANT (0x123456789abc7) ==
-+ _dbus_unpack_uint64 (DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* unsigned big pack */
-+ _dbus_pack_uint64 (DBUS_UINT64_CONSTANT (0x123456789abc7),
-+ DBUS_BIG_ENDIAN,
-+ _dbus_string_get_data (&str));
-+
-+ _dbus_assert (DBUS_UINT64_CONSTANT (0x123456789abc7) ==
-+ _dbus_unpack_uint64 (DBUS_BIG_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+#endif /* DBUS_HAVE_INT64 */
-+
-+ /* set/pack 32-bit integers */
-+ _dbus_string_set_length (&str, 4);
-+
-+ /* signed little */
-+ _dbus_marshal_set_int32 (&str, DBUS_LITTLE_ENDIAN,
-+ 0, -0x123456);
-+
-+ _dbus_assert (-0x123456 ==
-+ _dbus_unpack_int32 (DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* signed big */
-+ _dbus_marshal_set_int32 (&str, DBUS_BIG_ENDIAN,
-+ 0, -0x123456);
-+
-+ _dbus_assert (-0x123456 ==
-+ _dbus_unpack_int32 (DBUS_BIG_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* signed little pack */
-+ _dbus_pack_int32 (-0x123456,
-+ DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_data (&str));
-+
-+ _dbus_assert (-0x123456 ==
-+ _dbus_unpack_int32 (DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* signed big pack */
-+ _dbus_pack_int32 (-0x123456,
-+ DBUS_BIG_ENDIAN,
-+ _dbus_string_get_data (&str));
-+
-+ _dbus_assert (-0x123456 ==
-+ _dbus_unpack_int32 (DBUS_BIG_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* unsigned little */
-+ _dbus_marshal_set_uint32 (&str,
-+ 0, 0x123456,
-+ DBUS_LITTLE_ENDIAN);
-+
-+ _dbus_assert (0x123456 ==
-+ _dbus_unpack_uint32 (DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* unsigned big */
-+ _dbus_marshal_set_uint32 (&str,
-+ 0, 0x123456,
-+ DBUS_BIG_ENDIAN);
-+
-+ _dbus_assert (0x123456 ==
-+ _dbus_unpack_uint32 (DBUS_BIG_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* unsigned little pack */
-+ _dbus_pack_uint32 (0x123456,
-+ DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_data (&str));
-+
-+ _dbus_assert (0x123456 ==
-+ _dbus_unpack_uint32 (DBUS_LITTLE_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+ /* unsigned big pack */
-+ _dbus_pack_uint32 (0x123456,
-+ DBUS_BIG_ENDIAN,
-+ _dbus_string_get_data (&str));
-+
-+ _dbus_assert (0x123456 ==
-+ _dbus_unpack_uint32 (DBUS_BIG_ENDIAN,
-+ _dbus_string_get_const_data (&str)));
-+
-+#endif /* set/pack tests for integers */
-+
-+ /* Strings in-place set */
-+ byte_order = DBUS_LITTLE_ENDIAN;
-+ while (TRUE)
-+ {
-+ /* Init a string */
-+ _dbus_string_set_length (&str, 0);
-+
-+ /* reset pos for the macros */
-+ pos = 0;
-+
-+ MARSHAL_TEST_STRCMP (STRING, byte_order, "Hello world");
-+
-+ /* Set it to something longer */
-+ _dbus_string_init_const (&t, "Hello world foo");
-+
-+ v_STRING = _dbus_string_get_const_data (&t);
-+ _dbus_marshal_set_basic (&str, 0, DBUS_TYPE_STRING,
-+ &v_STRING, byte_order, NULL, NULL);
-+
-+ _dbus_marshal_read_basic (&str, 0, DBUS_TYPE_STRING,
-+ &v_STRING, byte_order,
-+ NULL);
-+ _dbus_assert (strcmp (v_STRING, "Hello world foo") == 0);
-+
-+ /* Set it to something shorter */
-+ _dbus_string_init_const (&t, "Hello");
-+
-+ v_STRING = _dbus_string_get_const_data (&t);
-+ _dbus_marshal_set_basic (&str, 0, DBUS_TYPE_STRING,
-+ &v_STRING, byte_order, NULL, NULL);
-+ _dbus_marshal_read_basic (&str, 0, DBUS_TYPE_STRING,
-+ &v_STRING, byte_order,
-+ NULL);
-+ _dbus_assert (strcmp (v_STRING, "Hello") == 0);
-+
-+ /* Do the other byte order */
-+ if (byte_order == DBUS_LITTLE_ENDIAN)
-+ byte_order = DBUS_BIG_ENDIAN;
-+ else
-+ break;
-+ }
-+
-+ /* Clean up */
-+ _dbus_string_free (&str);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-basic.h dbus-0.61/dbus/dbus-marshal-basic.h
---- dbus-0.61.orig/dbus/dbus-marshal-basic.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-basic.h 2005-02-24 17:03:56.000000000 +0100
-@@ -0,0 +1,261 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-basic.h Marshalling routines for basic (primitive) types
-+ *
-+ * Copyright (C) 2002 CodeFactory AB
-+ * Copyright (C) 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_MARSHAL_BASIC_H
-+#define DBUS_MARSHAL_BASIC_H
-+
-+#include <config.h>
-+#include <dbus/dbus-protocol.h>
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-arch-deps.h>
-+#include <dbus/dbus-string.h>
-+
-+#ifndef PACKAGE
-+#error "config.h not included here"
-+#endif
-+
-+#ifdef WORDS_BIGENDIAN
-+#define DBUS_COMPILER_BYTE_ORDER DBUS_BIG_ENDIAN
-+#else
-+#define DBUS_COMPILER_BYTE_ORDER DBUS_LITTLE_ENDIAN
-+#endif
-+
-+#define DBUS_UINT16_SWAP_LE_BE_CONSTANT(val) ((dbus_uint16_t) ( \
-+ (dbus_uint16_t) ((dbus_uint16_t) (val) >> 8) | \
-+ (dbus_uint16_t) ((dbus_uint16_t) (val) << 8)))
-+
-+#define DBUS_UINT32_SWAP_LE_BE_CONSTANT(val) ((dbus_uint32_t) ( \
-+ (((dbus_uint32_t) (val) & (dbus_uint32_t) 0x000000ffU) << 24) | \
-+ (((dbus_uint32_t) (val) & (dbus_uint32_t) 0x0000ff00U) << 8) | \
-+ (((dbus_uint32_t) (val) & (dbus_uint32_t) 0x00ff0000U) >> 8) | \
-+ (((dbus_uint32_t) (val) & (dbus_uint32_t) 0xff000000U) >> 24)))
-+
-+#ifdef DBUS_HAVE_INT64
-+
-+#define DBUS_UINT64_SWAP_LE_BE_CONSTANT(val) ((dbus_uint64_t) ( \
-+ (((dbus_uint64_t) (val) & \
-+ (dbus_uint64_t) DBUS_UINT64_CONSTANT (0x00000000000000ff)) << 56) | \
-+ (((dbus_uint64_t) (val) & \
-+ (dbus_uint64_t) DBUS_UINT64_CONSTANT (0x000000000000ff00)) << 40) | \
-+ (((dbus_uint64_t) (val) & \
-+ (dbus_uint64_t) DBUS_UINT64_CONSTANT (0x0000000000ff0000)) << 24) | \
-+ (((dbus_uint64_t) (val) & \
-+ (dbus_uint64_t) DBUS_UINT64_CONSTANT (0x00000000ff000000)) << 8) | \
-+ (((dbus_uint64_t) (val) & \
-+ (dbus_uint64_t) DBUS_UINT64_CONSTANT (0x000000ff00000000)) >> 8) | \
-+ (((dbus_uint64_t) (val) & \
-+ (dbus_uint64_t) DBUS_UINT64_CONSTANT (0x0000ff0000000000)) >> 24) | \
-+ (((dbus_uint64_t) (val) & \
-+ (dbus_uint64_t) DBUS_UINT64_CONSTANT (0x00ff000000000000)) >> 40) | \
-+ (((dbus_uint64_t) (val) & \
-+ (dbus_uint64_t) DBUS_UINT64_CONSTANT (0xff00000000000000)) >> 56)))
-+#endif /* DBUS_HAVE_INT64 */
-+
-+#define DBUS_UINT16_SWAP_LE_BE(val) (DBUS_UINT16_SWAP_LE_BE_CONSTANT (val))
-+#define DBUS_INT16_SWAP_LE_BE(val) ((dbus_int16_t)DBUS_UINT16_SWAP_LE_BE_CONSTANT (val))
-+
-+#define DBUS_UINT32_SWAP_LE_BE(val) (DBUS_UINT32_SWAP_LE_BE_CONSTANT (val))
-+#define DBUS_INT32_SWAP_LE_BE(val) ((dbus_int32_t)DBUS_UINT32_SWAP_LE_BE_CONSTANT (val))
-+
-+#ifdef DBUS_HAVE_INT64
-+# define DBUS_UINT64_SWAP_LE_BE(val) (DBUS_UINT64_SWAP_LE_BE_CONSTANT (val))
-+# define DBUS_INT64_SWAP_LE_BE(val) ((dbus_int64_t)DBUS_UINT64_SWAP_LE_BE_CONSTANT (val))
-+#endif /* DBUS_HAVE_INT64 */
-+
-+#ifdef WORDS_BIGENDIAN
-+
-+# define DBUS_INT16_TO_BE(val) ((dbus_int16_t) (val))
-+# define DBUS_UINT16_TO_BE(val) ((dbus_uint16_t) (val))
-+# define DBUS_INT16_TO_LE(val) (DBUS_INT16_SWAP_LE_BE (val))
-+# define DBUS_UINT16_TO_LE(val) (DBUS_UINT16_SWAP_LE_BE (val))
-+# define DBUS_INT32_TO_BE(val) ((dbus_int32_t) (val))
-+# define DBUS_UINT32_TO_BE(val) ((dbus_uint32_t) (val))
-+# define DBUS_INT32_TO_LE(val) (DBUS_INT32_SWAP_LE_BE (val))
-+# define DBUS_UINT32_TO_LE(val) (DBUS_UINT32_SWAP_LE_BE (val))
-+# ifdef DBUS_HAVE_INT64
-+# define DBUS_INT64_TO_BE(val) ((dbus_int64_t) (val))
-+# define DBUS_UINT64_TO_BE(val) ((dbus_uint64_t) (val))
-+# define DBUS_INT64_TO_LE(val) (DBUS_INT64_SWAP_LE_BE (val))
-+# define DBUS_UINT64_TO_LE(val) (DBUS_UINT64_SWAP_LE_BE (val))
-+# endif /* DBUS_HAVE_INT64 */
-+
-+#else /* WORDS_BIGENDIAN */
-+
-+# define DBUS_INT16_TO_LE(val) ((dbus_int16_t) (val))
-+# define DBUS_UINT16_TO_LE(val) ((dbus_uint16_t) (val))
-+# define DBUS_INT16_TO_BE(val) ((dbus_int16_t) DBUS_UINT16_SWAP_LE_BE (val))
-+# define DBUS_UINT16_TO_BE(val) (DBUS_UINT16_SWAP_LE_BE (val))
-+# define DBUS_INT32_TO_LE(val) ((dbus_int32_t) (val))
-+# define DBUS_UINT32_TO_LE(val) ((dbus_uint32_t) (val))
-+# define DBUS_INT32_TO_BE(val) ((dbus_int32_t) DBUS_UINT32_SWAP_LE_BE (val))
-+# define DBUS_UINT32_TO_BE(val) (DBUS_UINT32_SWAP_LE_BE (val))
-+# ifdef DBUS_HAVE_INT64
-+# define DBUS_INT64_TO_LE(val) ((dbus_int64_t) (val))
-+# define DBUS_UINT64_TO_LE(val) ((dbus_uint64_t) (val))
-+# define DBUS_INT64_TO_BE(val) ((dbus_int64_t) DBUS_UINT64_SWAP_LE_BE (val))
-+# define DBUS_UINT64_TO_BE(val) (DBUS_UINT64_SWAP_LE_BE (val))
-+# endif /* DBUS_HAVE_INT64 */
-+#endif
-+
-+/* The transformation is symmetric, so the FROM just maps to the TO. */
-+#define DBUS_INT16_FROM_LE(val) (DBUS_INT16_TO_LE (val))
-+#define DBUS_UINT16_FROM_LE(val) (DBUS_UINT16_TO_LE (val))
-+#define DBUS_INT16_FROM_BE(val) (DBUS_INT16_TO_BE (val))
-+#define DBUS_UINT16_FROM_BE(val) (DBUS_UINT16_TO_BE (val))
-+#define DBUS_INT32_FROM_LE(val) (DBUS_INT32_TO_LE (val))
-+#define DBUS_UINT32_FROM_LE(val) (DBUS_UINT32_TO_LE (val))
-+#define DBUS_INT32_FROM_BE(val) (DBUS_INT32_TO_BE (val))
-+#define DBUS_UINT32_FROM_BE(val) (DBUS_UINT32_TO_BE (val))
-+#ifdef DBUS_HAVE_INT64
-+# define DBUS_INT64_FROM_LE(val) (DBUS_INT64_TO_LE (val))
-+# define DBUS_UINT64_FROM_LE(val) (DBUS_UINT64_TO_LE (val))
-+# define DBUS_INT64_FROM_BE(val) (DBUS_INT64_TO_BE (val))
-+# define DBUS_UINT64_FROM_BE(val) (DBUS_UINT64_TO_BE (val))
-+#endif /* DBUS_HAVE_INT64 */
-+
-+#ifndef DBUS_HAVE_INT64
-+/**
-+ * An 8-byte struct you could use to access int64 without having
-+ * int64 support
-+ */
-+typedef struct
-+{
-+ dbus_uint32_t first32; /**< first 32 bits in the 8 bytes (beware endian issues) */
-+ dbus_uint32_t second32; /**< second 32 bits in the 8 bytes (beware endian issues) */
-+} DBus8ByteStruct;
-+#endif /* DBUS_HAVE_INT64 */
-+
-+/**
-+ * A simple 8-byte value union that lets you access 8 bytes as if they
-+ * were various types; useful when dealing with basic types via
-+ * void pointers and varargs.
-+ */
-+typedef union
-+{
-+ dbus_int16_t i16; /**< as int16 */
-+ dbus_uint16_t u16; /**< as int16 */
-+ dbus_int32_t i32; /**< as int32 */
-+ dbus_uint32_t u32; /**< as int32 */
-+#ifdef DBUS_HAVE_INT64
-+ dbus_int64_t i64; /**< as int64 */
-+ dbus_uint64_t u64; /**< as int64 */
-+#else
-+ DBus8ByteStruct u64; /**< as 8-byte-struct */
-+#endif
-+ double dbl; /**< as double */
-+ unsigned char byt; /**< as byte */
-+ char *str; /**< as char* */
-+} DBusBasicValue;
-+
-+#ifdef DBUS_DISABLE_ASSERT
-+#define _dbus_unpack_uint16(byte_order, data) \
-+ (((byte_order) == DBUS_LITTLE_ENDIAN) ? \
-+ DBUS_UINT16_FROM_LE (*(dbus_uint16_t*)(data)) : \
-+ DBUS_UINT16_FROM_BE (*(dbus_uint16_t*)(data)))
-+
-+#define _dbus_unpack_uint32(byte_order, data) \
-+ (((byte_order) == DBUS_LITTLE_ENDIAN) ? \
-+ DBUS_UINT32_FROM_LE (*(dbus_uint32_t*)(data)) : \
-+ DBUS_UINT32_FROM_BE (*(dbus_uint32_t*)(data)))
-+#endif
-+
-+#ifndef _dbus_unpack_uint16
-+dbus_uint16_t _dbus_unpack_uint16 (int byte_order,
-+ const unsigned char *data);
-+#endif
-+
-+void _dbus_pack_uint32 (dbus_uint32_t value,
-+ int byte_order,
-+ unsigned char *data);
-+#ifndef _dbus_unpack_uint32
-+dbus_uint32_t _dbus_unpack_uint32 (int byte_order,
-+ const unsigned char *data);
-+#endif
-+
-+dbus_bool_t _dbus_marshal_set_basic (DBusString *str,
-+ int pos,
-+ int type,
-+ const void *value,
-+ int byte_order,
-+ int *old_end_pos,
-+ int *new_end_pos);
-+dbus_bool_t _dbus_marshal_write_basic (DBusString *str,
-+ int insert_at,
-+ int type,
-+ const void *value,
-+ int byte_order,
-+ int *pos_after);
-+dbus_bool_t _dbus_marshal_write_fixed_multi (DBusString *str,
-+ int insert_at,
-+ int element_type,
-+ const void *value,
-+ int n_elements,
-+ int byte_order,
-+ int *pos_after);
-+void _dbus_marshal_read_basic (const DBusString *str,
-+ int pos,
-+ int type,
-+ void *value,
-+ int byte_order,
-+ int *new_pos);
-+void _dbus_marshal_read_fixed_multi (const DBusString *str,
-+ int pos,
-+ int element_type,
-+ void *value,
-+ int n_elements,
-+ int byte_order,
-+ int *new_pos);
-+void _dbus_marshal_skip_basic (const DBusString *str,
-+ int type,
-+ int byte_order,
-+ int *pos);
-+void _dbus_marshal_skip_array (const DBusString *str,
-+ int element_type,
-+ int byte_order,
-+ int *pos);
-+void _dbus_marshal_set_uint32 (DBusString *str,
-+ int pos,
-+ dbus_uint32_t value,
-+ int byte_order);
-+dbus_uint32_t _dbus_marshal_read_uint32 (const DBusString *str,
-+ int pos,
-+ int byte_order,
-+ int *new_pos);
-+dbus_bool_t _dbus_type_is_valid (int typecode);
-+int _dbus_type_get_alignment (int typecode);
-+dbus_bool_t _dbus_type_is_fixed (int typecode);
-+int _dbus_type_get_alignment (int typecode);
-+const char* _dbus_type_to_string (int typecode);
-+
-+int _dbus_first_type_in_signature (const DBusString *str,
-+ int pos);
-+
-+int _dbus_first_type_in_signature_c_str (const char *str,
-+ int pos);
-+
-+void _dbus_swap_array (unsigned char *data,
-+ int n_elements,
-+ int alignment);
-+
-+#endif /* DBUS_MARSHAL_BASIC_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-byteswap-util.c dbus-0.61/dbus/dbus-marshal-byteswap-util.c
---- dbus-0.61.orig/dbus/dbus-marshal-byteswap-util.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-byteswap-util.c 2005-01-28 00:39:26.000000000 +0100
-@@ -0,0 +1,105 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-byteswap-util.c Would be in dbus-marshal-byteswap.c but tests/bus only
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-marshal-byteswap.h"
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+static void
-+do_byteswap_test (int byte_order)
-+{
-+ int sequence;
-+ DBusString signature;
-+ DBusString body;
-+ int opposite_order;
-+
-+ if (!_dbus_string_init (&signature) || !_dbus_string_init (&body))
-+ _dbus_assert_not_reached ("oom");
-+
-+ opposite_order = byte_order == DBUS_LITTLE_ENDIAN ? DBUS_BIG_ENDIAN : DBUS_LITTLE_ENDIAN;
-+
-+ sequence = 0;
-+ while (dbus_internal_do_not_use_generate_bodies (sequence,
-+ byte_order,
-+ &signature, &body))
-+ {
-+ DBusString copy;
-+ DBusTypeReader body_reader;
-+ DBusTypeReader copy_reader;
-+
-+ if (!_dbus_string_init (©))
-+ _dbus_assert_not_reached ("oom");
-+
-+ if (!_dbus_string_copy (&body, 0, ©, 0))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_marshal_byteswap (&signature, 0,
-+ byte_order,
-+ opposite_order,
-+ ©, 0);
-+
-+ _dbus_type_reader_init (&body_reader, byte_order, &signature, 0,
-+ &body, 0);
-+ _dbus_type_reader_init (©_reader, opposite_order, &signature, 0,
-+ ©, 0);
-+
-+ if (!_dbus_type_reader_equal_values (&body_reader, ©_reader))
-+ {
-+ _dbus_verbose_bytes_of_string (&signature, 0,
-+ _dbus_string_get_length (&signature));
-+ _dbus_verbose_bytes_of_string (&body, 0,
-+ _dbus_string_get_length (&body));
-+ _dbus_verbose_bytes_of_string (©, 0,
-+ _dbus_string_get_length (©));
-+
-+ _dbus_warn ("Byte-swapped data did not have same values as original data\n");
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+
-+ _dbus_string_free (©);
-+
-+ _dbus_string_set_length (&signature, 0);
-+ _dbus_string_set_length (&body, 0);
-+ ++sequence;
-+ }
-+
-+ _dbus_string_free (&signature);
-+ _dbus_string_free (&body);
-+
-+ printf (" %d blocks swapped from order '%c' to '%c'\n",
-+ sequence, byte_order, opposite_order);
-+}
-+
-+dbus_bool_t
-+_dbus_marshal_byteswap_test (void)
-+{
-+ do_byteswap_test (DBUS_LITTLE_ENDIAN);
-+ do_byteswap_test (DBUS_BIG_ENDIAN);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-byteswap.c dbus-0.61/dbus/dbus-marshal-byteswap.c
---- dbus-0.61.orig/dbus/dbus-marshal-byteswap.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-byteswap.c 2005-06-16 06:27:45.000000000 +0200
-@@ -0,0 +1,246 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-byteswap.c Swap a block of marshaled data
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-marshal-byteswap.h"
-+#include "dbus-marshal-basic.h"
-+#include "dbus-signature.h"
-+
-+/**
-+ * @addtogroup DBusMarshal
-+ * @{
-+ */
-+
-+static void
-+byteswap_body_helper (DBusTypeReader *reader,
-+ dbus_bool_t walk_reader_to_end,
-+ int old_byte_order,
-+ int new_byte_order,
-+ unsigned char *p,
-+ unsigned char **new_p)
-+{
-+ int current_type;
-+
-+ while ((current_type = _dbus_type_reader_get_current_type (reader)) != DBUS_TYPE_INVALID)
-+ {
-+ switch (current_type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ ++p;
-+ break;
-+
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ {
-+ p = _DBUS_ALIGN_ADDRESS (p, 2);
-+ *((dbus_uint16_t*)p) = DBUS_UINT16_SWAP_LE_BE (*((dbus_uint16_t*)p));
-+ p += 2;
-+ }
-+ break;
-+
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ {
-+ p = _DBUS_ALIGN_ADDRESS (p, 4);
-+ *((dbus_uint32_t*)p) = DBUS_UINT32_SWAP_LE_BE (*((dbus_uint32_t*)p));
-+ p += 4;
-+ }
-+ break;
-+
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ {
-+ p = _DBUS_ALIGN_ADDRESS (p, 8);
-+#ifdef DBUS_HAVE_INT64
-+ *((dbus_uint64_t*)p) = DBUS_UINT64_SWAP_LE_BE (*((dbus_uint64_t*)p));
-+#else
-+ _dbus_swap_array (p, 1, 8);
-+#endif
-+ p += 8;
-+ }
-+ break;
-+
-+ case DBUS_TYPE_ARRAY:
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ {
-+ dbus_uint32_t array_len;
-+
-+ p = _DBUS_ALIGN_ADDRESS (p, 4);
-+
-+ array_len = _dbus_unpack_uint32 (old_byte_order, p);
-+
-+ *((dbus_uint32_t*)p) = DBUS_UINT32_SWAP_LE_BE (*((dbus_uint32_t*)p));
-+ p += 4;
-+
-+ if (current_type == DBUS_TYPE_ARRAY)
-+ {
-+ int elem_type;
-+ int alignment;
-+
-+ elem_type = _dbus_type_reader_get_element_type (reader);
-+ alignment = _dbus_type_get_alignment (elem_type);
-+
-+ _dbus_assert ((array_len / alignment) < DBUS_MAXIMUM_ARRAY_LENGTH);
-+
-+ p = _DBUS_ALIGN_ADDRESS (p, alignment);
-+
-+ if (dbus_type_is_fixed (elem_type))
-+ {
-+ if (alignment > 1)
-+ _dbus_swap_array (p, array_len / alignment, alignment);
-+ p += array_len;
-+ }
-+ else
-+ {
-+ DBusTypeReader sub;
-+ const unsigned char *array_end;
-+
-+ array_end = p + array_len;
-+
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ while (p < array_end)
-+ {
-+ byteswap_body_helper (&sub,
-+ FALSE,
-+ old_byte_order,
-+ new_byte_order,
-+ p, &p);
-+ }
-+ }
-+ }
-+ else
-+ {
-+ _dbus_assert (current_type == DBUS_TYPE_STRING ||
-+ current_type == DBUS_TYPE_OBJECT_PATH);
-+
-+ p += (array_len + 1); /* + 1 for nul */
-+ }
-+ }
-+ break;
-+
-+ case DBUS_TYPE_SIGNATURE:
-+ {
-+ dbus_uint32_t sig_len;
-+
-+ sig_len = *p;
-+
-+ p += (sig_len + 2); /* +2 for len and nul */
-+ }
-+ break;
-+
-+ case DBUS_TYPE_VARIANT:
-+ {
-+ /* 1 byte sig len, sig typecodes, align to
-+ * contained-type-boundary, values.
-+ */
-+ dbus_uint32_t sig_len;
-+ DBusString sig;
-+ DBusTypeReader sub;
-+ int contained_alignment;
-+
-+ sig_len = *p;
-+ ++p;
-+
-+ _dbus_string_init_const_len (&sig, p, sig_len);
-+
-+ p += (sig_len + 1); /* 1 for nul */
-+
-+ contained_alignment = _dbus_type_get_alignment (_dbus_first_type_in_signature (&sig, 0));
-+
-+ p = _DBUS_ALIGN_ADDRESS (p, contained_alignment);
-+
-+ _dbus_type_reader_init_types_only (&sub, &sig, 0);
-+
-+ byteswap_body_helper (&sub, FALSE, old_byte_order, new_byte_order, p, &p);
-+ }
-+ break;
-+
-+ case DBUS_TYPE_STRUCT:
-+ case DBUS_TYPE_DICT_ENTRY:
-+ {
-+ DBusTypeReader sub;
-+
-+ p = _DBUS_ALIGN_ADDRESS (p, 8);
-+
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ byteswap_body_helper (&sub, TRUE, old_byte_order, new_byte_order, p, &p);
-+ }
-+ break;
-+
-+ default:
-+ _dbus_assert_not_reached ("invalid typecode in supposedly-validated signature");
-+ break;
-+ }
-+
-+ if (walk_reader_to_end)
-+ _dbus_type_reader_next (reader);
-+ else
-+ break;
-+ }
-+
-+ if (new_p)
-+ *new_p = p;
-+}
-+
-+/**
-+ * Byteswaps the marshaled data in the given value_str.
-+ *
-+ * @param signature the types in the value_str
-+ * @param signature_start where in signature is the signature
-+ * @param old_byte_order the old byte order
-+ * @param new_byte_order the new byte order
-+ * @param value_str the string containing the body
-+ * @param value_pos where the values start
-+ */
-+void
-+_dbus_marshal_byteswap (const DBusString *signature,
-+ int signature_start,
-+ int old_byte_order,
-+ int new_byte_order,
-+ DBusString *value_str,
-+ int value_pos)
-+{
-+ DBusTypeReader reader;
-+
-+ _dbus_assert (value_pos >= 0);
-+ _dbus_assert (value_pos <= _dbus_string_get_length (value_str));
-+
-+ if (old_byte_order == new_byte_order)
-+ return;
-+
-+ _dbus_type_reader_init_types_only (&reader,
-+ signature, signature_start);
-+
-+ byteswap_body_helper (&reader, TRUE,
-+ old_byte_order, new_byte_order,
-+ _dbus_string_get_data_len (value_str, value_pos, 0),
-+ NULL);
-+}
-+
-+/** @} */
-+
-+/* Tests in dbus-marshal-byteswap-util.c */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-byteswap.h dbus-0.61/dbus/dbus-marshal-byteswap.h
---- dbus-0.61.orig/dbus/dbus-marshal-byteswap.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-byteswap.h 2005-01-28 00:39:26.000000000 +0100
-@@ -0,0 +1,42 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-byteswap.h Swap a block of marshaled data
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_MARSHAL_BYTESWAP_H
-+#define DBUS_MARSHAL_BYTESWAP_H
-+
-+#include <config.h>
-+#include <dbus/dbus-protocol.h>
-+#include <dbus/dbus-marshal-recursive.h>
-+
-+#ifndef PACKAGE
-+#error "config.h not included here"
-+#endif
-+
-+void _dbus_marshal_byteswap (const DBusString *signature,
-+ int signature_start,
-+ int old_byte_order,
-+ int new_byte_order,
-+ DBusString *value_str,
-+ int value_pos);
-+
-+#endif /* DBUS_MARSHAL_BYTESWAP_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-header.c dbus-0.61/dbus/dbus-marshal-header.c
---- dbus-0.61.orig/dbus/dbus-marshal-header.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-header.c 2005-10-27 18:35:43.000000000 +0200
-@@ -0,0 +1,1489 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-header.c Managing marshaling/demarshaling of message headers
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus/dbus-shared.h"
-+#include "dbus-marshal-header.h"
-+#include "dbus-marshal-recursive.h"
-+#include "dbus-marshal-byteswap.h"
-+
-+/**
-+ * @addtogroup DBusMarshal
-+ *
-+ * @{
-+ */
-+
-+
-+/* Not thread locked, but strictly const/read-only so should be OK
-+ */
-+/** Static #DBusString containing the signature of a message header */
-+_DBUS_STRING_DEFINE_STATIC(_dbus_header_signature_str, DBUS_HEADER_SIGNATURE);
-+/** Static #DBusString containing the local interface */
-+_DBUS_STRING_DEFINE_STATIC(_dbus_local_interface_str, DBUS_INTERFACE_LOCAL);
-+/** Static #DBusString containing the local path */
-+_DBUS_STRING_DEFINE_STATIC(_dbus_local_path_str, DBUS_PATH_LOCAL);
-+
-+/** Offset from start of _dbus_header_signature_str to the signature of the fields array */
-+#define FIELDS_ARRAY_SIGNATURE_OFFSET 6
-+/** Offset from start of _dbus_header_signature_str to the signature of an element of the fields array */
-+#define FIELDS_ARRAY_ELEMENT_SIGNATURE_OFFSET 7
-+
-+
-+/** Offset to byte order from start of header */
-+#define BYTE_ORDER_OFFSET 0
-+/** Offset to type from start of header */
-+#define TYPE_OFFSET 1
-+/** Offset to flags from start of header */
-+#define FLAGS_OFFSET 2
-+/** Offset to version from start of header */
-+#define VERSION_OFFSET 3
-+/** Offset to body length from start of header */
-+#define BODY_LENGTH_OFFSET 4
-+/** Offset to client serial from start of header */
-+#define SERIAL_OFFSET 8
-+/** Offset to fields array length from start of header */
-+#define FIELDS_ARRAY_LENGTH_OFFSET 12
-+/** Offset to first field in header */
-+#define FIRST_FIELD_OFFSET 16
-+
-+typedef struct
-+{
-+ unsigned char code;
-+ unsigned char type;
-+} HeaderFieldType;
-+
-+static const HeaderFieldType
-+_dbus_header_field_types[DBUS_HEADER_FIELD_LAST+1] = {
-+ { DBUS_HEADER_FIELD_INVALID, DBUS_TYPE_INVALID },
-+ { DBUS_HEADER_FIELD_PATH, DBUS_TYPE_OBJECT_PATH },
-+ { DBUS_HEADER_FIELD_INTERFACE, DBUS_TYPE_STRING },
-+ { DBUS_HEADER_FIELD_MEMBER, DBUS_TYPE_STRING },
-+ { DBUS_HEADER_FIELD_ERROR_NAME, DBUS_TYPE_STRING },
-+ { DBUS_HEADER_FIELD_REPLY_SERIAL, DBUS_TYPE_UINT32 },
-+ { DBUS_HEADER_FIELD_DESTINATION, DBUS_TYPE_STRING },
-+ { DBUS_HEADER_FIELD_SENDER, DBUS_TYPE_STRING },
-+ { DBUS_HEADER_FIELD_SIGNATURE, DBUS_TYPE_SIGNATURE }
-+};
-+
-+/** Macro to look up the correct type for a field */
-+#define EXPECTED_TYPE_OF_FIELD(field) (_dbus_header_field_types[field].type)
-+
-+/** The most padding we could ever need for a header */
-+#define MAX_POSSIBLE_HEADER_PADDING 7
-+static dbus_bool_t
-+reserve_header_padding (DBusHeader *header)
-+{
-+ _dbus_assert (header->padding <= MAX_POSSIBLE_HEADER_PADDING);
-+
-+ if (!_dbus_string_lengthen (&header->data,
-+ MAX_POSSIBLE_HEADER_PADDING - header->padding))
-+ return FALSE;
-+ header->padding = MAX_POSSIBLE_HEADER_PADDING;
-+ return TRUE;
-+}
-+
-+static void
-+correct_header_padding (DBusHeader *header)
-+{
-+ int unpadded_len;
-+
-+ _dbus_assert (header->padding == 7);
-+
-+ _dbus_string_shorten (&header->data, header->padding);
-+ unpadded_len = _dbus_string_get_length (&header->data);
-+
-+ if (!_dbus_string_align_length (&header->data, 8))
-+ _dbus_assert_not_reached ("couldn't pad header though enough padding was preallocated");
-+
-+ header->padding = _dbus_string_get_length (&header->data) - unpadded_len;
-+}
-+
-+/** Compute the end of the header, ignoring padding */
-+#define HEADER_END_BEFORE_PADDING(header) \
-+ (_dbus_string_get_length (&(header)->data) - (header)->padding)
-+
-+/**
-+ * Invalidates all fields in the cache. This may be used when the
-+ * cache is totally uninitialized (contains junk) so should not
-+ * look at what's in there now.
-+ *
-+ * @param header the header
-+ */
-+static void
-+_dbus_header_cache_invalidate_all (DBusHeader *header)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i <= DBUS_HEADER_FIELD_LAST)
-+ {
-+ header->fields[i].value_pos = _DBUS_HEADER_FIELD_VALUE_UNKNOWN;
-+ ++i;
-+ }
-+}
-+
-+/**
-+ * Caches one field
-+ *
-+ * @param header the header
-+ * @param field_code the field
-+ * @param variant_reader the reader for the variant in the field
-+ */
-+static void
-+_dbus_header_cache_one (DBusHeader *header,
-+ int field_code,
-+ DBusTypeReader *variant_reader)
-+{
-+ header->fields[field_code].value_pos =
-+ _dbus_type_reader_get_value_pos (variant_reader);
-+
-+#if 0
-+ _dbus_verbose ("cached value_pos %d for field %d\n",
-+ header->fields[field_code].value_pos, field_code)
-+#endif
-+}
-+
-+/**
-+ * Revalidates the fields cache
-+ *
-+ * @param header the header
-+ */
-+static void
-+_dbus_header_cache_revalidate (DBusHeader *header)
-+{
-+ DBusTypeReader array;
-+ DBusTypeReader reader;
-+ int i;
-+
-+ i = 0;
-+ while (i <= DBUS_HEADER_FIELD_LAST)
-+ {
-+ header->fields[i].value_pos = _DBUS_HEADER_FIELD_VALUE_NONEXISTENT;
-+ ++i;
-+ }
-+
-+ _dbus_type_reader_init (&reader,
-+ header->byte_order,
-+ &_dbus_header_signature_str,
-+ FIELDS_ARRAY_SIGNATURE_OFFSET,
-+ &header->data,
-+ FIELDS_ARRAY_LENGTH_OFFSET);
-+
-+ _dbus_type_reader_recurse (&reader, &array);
-+
-+ while (_dbus_type_reader_get_current_type (&array) != DBUS_TYPE_INVALID)
-+ {
-+ DBusTypeReader sub;
-+ DBusTypeReader variant;
-+ unsigned char field_code;
-+
-+ _dbus_type_reader_recurse (&array, &sub);
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&sub) == DBUS_TYPE_BYTE);
-+ _dbus_type_reader_read_basic (&sub, &field_code);
-+
-+ /* Unknown fields should be ignored */
-+ if (field_code > DBUS_HEADER_FIELD_LAST)
-+ goto next_field;
-+
-+ _dbus_type_reader_next (&sub);
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&sub) == DBUS_TYPE_VARIANT);
-+ _dbus_type_reader_recurse (&sub, &variant);
-+
-+ _dbus_header_cache_one (header, field_code, &variant);
-+
-+ next_field:
-+ _dbus_type_reader_next (&array);
-+ }
-+}
-+
-+/**
-+ * Checks for a field, updating the cache if required.
-+ *
-+ * @param header the header
-+ * @param field the field to check
-+ * @returns #FALSE if the field doesn't exist
-+ */
-+static dbus_bool_t
-+_dbus_header_cache_check (DBusHeader *header,
-+ int field)
-+{
-+ _dbus_assert (field <= DBUS_HEADER_FIELD_LAST);
-+
-+ if (header->fields[field].value_pos == _DBUS_HEADER_FIELD_VALUE_UNKNOWN)
-+ _dbus_header_cache_revalidate (header);
-+
-+ if (header->fields[field].value_pos == _DBUS_HEADER_FIELD_VALUE_NONEXISTENT)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks whether a field is known not to exist. It may exist
-+ * even if it's not known to exist.
-+ *
-+ * @param header the header
-+ * @param field the field to check
-+ * @returns #FALSE if the field definitely doesn't exist
-+ */
-+static dbus_bool_t
-+_dbus_header_cache_known_nonexistent (DBusHeader *header,
-+ int field)
-+{
-+ _dbus_assert (field <= DBUS_HEADER_FIELD_LAST);
-+
-+ return (header->fields[field].value_pos == _DBUS_HEADER_FIELD_VALUE_NONEXISTENT);
-+}
-+
-+/**
-+ * Writes a struct of { byte, variant } with the given basic type.
-+ *
-+ * @param writer the writer (should be ready to write a struct)
-+ * @param type the type of the value
-+ * @param value the value as for _dbus_marshal_set_basic()
-+ * @returns #FALSE if no memory
-+ */
-+static dbus_bool_t
-+write_basic_field (DBusTypeWriter *writer,
-+ int field,
-+ int type,
-+ const void *value)
-+{
-+ DBusTypeWriter sub;
-+ DBusTypeWriter variant;
-+ int start;
-+ int padding;
-+ unsigned char field_byte;
-+ DBusString contained_type;
-+ char buf[2];
-+
-+ start = writer->value_pos;
-+ padding = _dbus_string_get_length (writer->value_str) - start;
-+
-+ if (!_dbus_type_writer_recurse (writer, DBUS_TYPE_STRUCT,
-+ NULL, 0, &sub))
-+ goto append_failed;
-+
-+ field_byte = field;
-+ if (!_dbus_type_writer_write_basic (&sub, DBUS_TYPE_BYTE,
-+ &field_byte))
-+ goto append_failed;
-+
-+ buf[0] = type;
-+ buf[1] = '\0';
-+ _dbus_string_init_const_len (&contained_type, buf, 1);
-+
-+ if (!_dbus_type_writer_recurse (&sub, DBUS_TYPE_VARIANT,
-+ &contained_type, 0, &variant))
-+ goto append_failed;
-+
-+ if (!_dbus_type_writer_write_basic (&variant, type, value))
-+ goto append_failed;
-+
-+ if (!_dbus_type_writer_unrecurse (&sub, &variant))
-+ goto append_failed;
-+
-+ if (!_dbus_type_writer_unrecurse (writer, &sub))
-+ goto append_failed;
-+
-+ return TRUE;
-+
-+ append_failed:
-+ _dbus_string_delete (writer->value_str,
-+ start,
-+ _dbus_string_get_length (writer->value_str) - start - padding);
-+ return FALSE;
-+}
-+
-+/**
-+ * Sets a struct of { byte, variant } with the given basic type.
-+ *
-+ * @param reader the reader (should be iterating over the array pointing at the field to set)
-+ * @param type the type of the value
-+ * @param value the value as for _dbus_marshal_set_basic()
-+ * @param realign_root where to realign from
-+ * @returns #FALSE if no memory
-+ */
-+static dbus_bool_t
-+set_basic_field (DBusTypeReader *reader,
-+ int field,
-+ int type,
-+ const void *value,
-+ const DBusTypeReader *realign_root)
-+{
-+ DBusTypeReader sub;
-+ DBusTypeReader variant;
-+
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&sub) == DBUS_TYPE_BYTE);
-+#ifndef DBUS_DISABLE_ASSERT
-+ {
-+ unsigned char v_BYTE;
-+ _dbus_type_reader_read_basic (&sub, &v_BYTE);
-+ _dbus_assert (((int) v_BYTE) == field);
-+ }
-+#endif
-+
-+ if (!_dbus_type_reader_next (&sub))
-+ _dbus_assert_not_reached ("no variant field?");
-+
-+ _dbus_type_reader_recurse (&sub, &variant);
-+ _dbus_assert (_dbus_type_reader_get_current_type (&variant) == type);
-+
-+ if (!_dbus_type_reader_set_basic (&variant, value, realign_root))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets the type of the message.
-+ *
-+ * @param header the header
-+ * @returns the type
-+ */
-+int
-+_dbus_header_get_message_type (DBusHeader *header)
-+{
-+ int type;
-+
-+ type = _dbus_string_get_byte (&header->data, TYPE_OFFSET);
-+ _dbus_assert (type != DBUS_MESSAGE_TYPE_INVALID);
-+
-+ return type;
-+}
-+
-+/**
-+ * Sets the serial number of a header. This can only be done once on
-+ * a header.
-+ *
-+ * @param header the header
-+ * @param serial the serial
-+ */
-+void
-+_dbus_header_set_serial (DBusHeader *header,
-+ dbus_uint32_t serial)
-+{
-+ /* we use this function to set the serial on outgoing
-+ * messages, and to reset the serial in dbus_message_copy;
-+ * this assertion should catch a double-set on outgoing.
-+ */
-+ _dbus_assert (_dbus_header_get_serial (header) == 0 ||
-+ serial == 0);
-+
-+ _dbus_marshal_set_uint32 (&header->data,
-+ SERIAL_OFFSET,
-+ serial,
-+ header->byte_order);
-+}
-+
-+/**
-+ * See dbus_message_get_serial()
-+ *
-+ * @param header the header
-+ * @returns the client serial
-+ */
-+dbus_uint32_t
-+_dbus_header_get_serial (DBusHeader *header)
-+{
-+ return _dbus_marshal_read_uint32 (&header->data,
-+ SERIAL_OFFSET,
-+ header->byte_order,
-+ NULL);
-+}
-+
-+/**
-+ * Re-initializes a header that was previously initialized and never
-+ * freed. After this, to make the header valid you have to call
-+ * _dbus_header_create().
-+ *
-+ * @param header header to re-initialize
-+ * @param byte_order byte order of the header
-+ */
-+void
-+_dbus_header_reinit (DBusHeader *header,
-+ int byte_order)
-+{
-+ _dbus_string_set_length (&header->data, 0);
-+
-+ header->byte_order = byte_order;
-+ header->padding = 0;
-+
-+ _dbus_header_cache_invalidate_all (header);
-+}
-+
-+/**
-+ * Initializes a header, but doesn't prepare it for use;
-+ * to make the header valid, you have to call _dbus_header_create().
-+ *
-+ * @param header header to initialize
-+ * @param byte_order byte order of the header
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_header_init (DBusHeader *header,
-+ int byte_order)
-+{
-+ if (!_dbus_string_init_preallocated (&header->data, 32))
-+ return FALSE;
-+
-+ _dbus_header_reinit (header, byte_order);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Frees a header.
-+ *
-+ * @param header the header
-+ */
-+void
-+_dbus_header_free (DBusHeader *header)
-+{
-+ _dbus_string_free (&header->data);
-+}
-+
-+/**
-+ * Initializes dest with a copy of the given header.
-+ * Resets the message serial to 0 on the copy.
-+ *
-+ * @param header header to copy
-+ * @param dest destination for copy
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_header_copy (const DBusHeader *header,
-+ DBusHeader *dest)
-+{
-+ *dest = *header;
-+
-+ if (!_dbus_string_init_preallocated (&dest->data,
-+ _dbus_string_get_length (&header->data)))
-+ return FALSE;
-+
-+ if (!_dbus_string_copy (&header->data, 0, &dest->data, 0))
-+ {
-+ _dbus_string_free (&dest->data);
-+ return FALSE;
-+ }
-+
-+ /* Reset the serial */
-+ _dbus_header_set_serial (dest, 0);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Fills in the primary fields of the header, so the header is ready
-+ * for use. #NULL may be specified for some or all of the fields to
-+ * avoid adding those fields. Some combinations of fields don't make
-+ * sense, and passing them in will trigger an assertion failure.
-+ *
-+ * @param header the header
-+ * @param message_type the message type
-+ * @param destination destination field or #NULL
-+ * @param path path field or #NULL
-+ * @param interface interface field or #NULL
-+ * @param member member field or #NULL
-+ * @param error_name error name or #NULL
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_header_create (DBusHeader *header,
-+ int message_type,
-+ const char *destination,
-+ const char *path,
-+ const char *interface,
-+ const char *member,
-+ const char *error_name)
-+{
-+ unsigned char v_BYTE;
-+ dbus_uint32_t v_UINT32;
-+ DBusTypeWriter writer;
-+ DBusTypeWriter array;
-+
-+ _dbus_assert (((interface || message_type != DBUS_MESSAGE_TYPE_SIGNAL) && member) ||
-+ (error_name) ||
-+ !(interface || member || error_name));
-+ _dbus_assert (_dbus_string_get_length (&header->data) == 0);
-+
-+ if (!reserve_header_padding (header))
-+ return FALSE;
-+
-+ _dbus_type_writer_init_values_only (&writer, header->byte_order,
-+ &_dbus_header_signature_str, 0,
-+ &header->data,
-+ HEADER_END_BEFORE_PADDING (header));
-+
-+ v_BYTE = header->byte_order;
-+ if (!_dbus_type_writer_write_basic (&writer, DBUS_TYPE_BYTE,
-+ &v_BYTE))
-+ goto oom;
-+
-+ v_BYTE = message_type;
-+ if (!_dbus_type_writer_write_basic (&writer, DBUS_TYPE_BYTE,
-+ &v_BYTE))
-+ goto oom;
-+
-+ v_BYTE = 0; /* flags */
-+ if (!_dbus_type_writer_write_basic (&writer, DBUS_TYPE_BYTE,
-+ &v_BYTE))
-+ goto oom;
-+
-+ v_BYTE = DBUS_MAJOR_PROTOCOL_VERSION;
-+ if (!_dbus_type_writer_write_basic (&writer, DBUS_TYPE_BYTE,
-+ &v_BYTE))
-+ goto oom;
-+
-+ v_UINT32 = 0; /* body length */
-+ if (!_dbus_type_writer_write_basic (&writer, DBUS_TYPE_UINT32,
-+ &v_UINT32))
-+ goto oom;
-+
-+ v_UINT32 = 0; /* serial */
-+ if (!_dbus_type_writer_write_basic (&writer, DBUS_TYPE_UINT32,
-+ &v_UINT32))
-+ goto oom;
-+
-+ if (!_dbus_type_writer_recurse (&writer, DBUS_TYPE_ARRAY,
-+ &_dbus_header_signature_str,
-+ FIELDS_ARRAY_SIGNATURE_OFFSET,
-+ &array))
-+ goto oom;
-+
-+ /* Marshal all the fields (Marshall Fields?) */
-+
-+ if (path != NULL)
-+ {
-+ if (!write_basic_field (&array,
-+ DBUS_HEADER_FIELD_PATH,
-+ DBUS_TYPE_OBJECT_PATH,
-+ &path))
-+ goto oom;
-+ }
-+
-+ if (destination != NULL)
-+ {
-+ if (!write_basic_field (&array,
-+ DBUS_HEADER_FIELD_DESTINATION,
-+ DBUS_TYPE_STRING,
-+ &destination))
-+ goto oom;
-+ }
-+
-+ if (interface != NULL)
-+ {
-+ if (!write_basic_field (&array,
-+ DBUS_HEADER_FIELD_INTERFACE,
-+ DBUS_TYPE_STRING,
-+ &interface))
-+ goto oom;
-+ }
-+
-+ if (member != NULL)
-+ {
-+ if (!write_basic_field (&array,
-+ DBUS_HEADER_FIELD_MEMBER,
-+ DBUS_TYPE_STRING,
-+ &member))
-+ goto oom;
-+ }
-+
-+ if (error_name != NULL)
-+ {
-+ if (!write_basic_field (&array,
-+ DBUS_HEADER_FIELD_ERROR_NAME,
-+ DBUS_TYPE_STRING,
-+ &error_name))
-+ goto oom;
-+ }
-+
-+ if (!_dbus_type_writer_unrecurse (&writer, &array))
-+ goto oom;
-+
-+ correct_header_padding (header);
-+
-+ return TRUE;
-+
-+ oom:
-+ _dbus_string_delete (&header->data, 0,
-+ _dbus_string_get_length (&header->data) - header->padding);
-+ correct_header_padding (header);
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Given data long enough to contain the length of the message body
-+ * and the fields array, check whether the data is long enough to
-+ * contain the entire message (assuming the claimed lengths are
-+ * accurate). Also checks that the lengths are in sanity parameters.
-+ *
-+ * @param max_message_length maximum length of a valid message
-+ * @param validity return location for why the data is invalid if it is
-+ * @param byte_order return location for byte order
-+ * @param fields_array_len return location for claimed fields array length
-+ * @param header_len return location for claimed header length
-+ * @param body_len return location for claimed body length
-+ * @param str the data
-+ * @param start start of data, 8-aligned
-+ * @param len length of data
-+ * @returns #TRUE if the data is long enough for the claimed length, and the lengths were valid
-+ */
-+dbus_bool_t
-+_dbus_header_have_message_untrusted (int max_message_length,
-+ DBusValidity *validity,
-+ int *byte_order,
-+ int *fields_array_len,
-+ int *header_len,
-+ int *body_len,
-+ const DBusString *str,
-+ int start,
-+ int len)
-+
-+{
-+ dbus_uint32_t header_len_unsigned;
-+ dbus_uint32_t fields_array_len_unsigned;
-+ dbus_uint32_t body_len_unsigned;
-+
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (start < _DBUS_INT32_MAX / 2);
-+ _dbus_assert (len >= 0);
-+
-+ _dbus_assert (start == (int) _DBUS_ALIGN_VALUE (start, 8));
-+
-+ *byte_order = _dbus_string_get_byte (str, start + BYTE_ORDER_OFFSET);
-+
-+ if (*byte_order != DBUS_LITTLE_ENDIAN && *byte_order != DBUS_BIG_ENDIAN)
-+ {
-+ *validity = DBUS_INVALID_BAD_BYTE_ORDER;
-+ return FALSE;
-+ }
-+
-+ _dbus_assert (FIELDS_ARRAY_LENGTH_OFFSET + 4 <= len);
-+ fields_array_len_unsigned = _dbus_marshal_read_uint32 (str, start + FIELDS_ARRAY_LENGTH_OFFSET,
-+ *byte_order, NULL);
-+
-+ if (fields_array_len_unsigned > (unsigned) max_message_length)
-+ {
-+ *validity = DBUS_INVALID_INSANE_FIELDS_ARRAY_LENGTH;
-+ return FALSE;
-+ }
-+
-+ _dbus_assert (BODY_LENGTH_OFFSET + 4 < len);
-+ body_len_unsigned = _dbus_marshal_read_uint32 (str, start + BODY_LENGTH_OFFSET,
-+ *byte_order, NULL);
-+
-+ if (body_len_unsigned > (unsigned) max_message_length)
-+ {
-+ *validity = DBUS_INVALID_INSANE_BODY_LENGTH;
-+ return FALSE;
-+ }
-+
-+ header_len_unsigned = FIRST_FIELD_OFFSET + fields_array_len_unsigned;
-+ header_len_unsigned = _DBUS_ALIGN_VALUE (header_len_unsigned, 8);
-+
-+ /* overflow should be impossible since the lengths aren't allowed to
-+ * be huge.
-+ */
-+ _dbus_assert (max_message_length < _DBUS_INT32_MAX / 2);
-+ if (body_len_unsigned + header_len_unsigned > (unsigned) max_message_length)
-+ {
-+ *validity = DBUS_INVALID_MESSAGE_TOO_LONG;
-+ return FALSE;
-+ }
-+
-+ _dbus_assert (body_len_unsigned < (unsigned) _DBUS_INT32_MAX);
-+ _dbus_assert (fields_array_len_unsigned < (unsigned) _DBUS_INT32_MAX);
-+ _dbus_assert (header_len_unsigned < (unsigned) _DBUS_INT32_MAX);
-+
-+ *body_len = body_len_unsigned;
-+ *fields_array_len = fields_array_len_unsigned;
-+ *header_len = header_len_unsigned;
-+
-+ *validity = DBUS_VALID;
-+
-+ _dbus_verbose ("have %d bytes, need body %u + header %u = %u\n",
-+ len, body_len_unsigned, header_len_unsigned,
-+ body_len_unsigned + header_len_unsigned);
-+
-+ return (body_len_unsigned + header_len_unsigned) <= (unsigned) len;
-+}
-+
-+static DBusValidity
-+check_mandatory_fields (DBusHeader *header)
-+{
-+#define REQUIRE_FIELD(name) do { if (header->fields[DBUS_HEADER_FIELD_##name].value_pos < 0) return DBUS_INVALID_MISSING_##name; } while (0)
-+
-+ switch (_dbus_header_get_message_type (header))
-+ {
-+ case DBUS_MESSAGE_TYPE_SIGNAL:
-+ REQUIRE_FIELD (INTERFACE);
-+ /* FALL THRU - signals also require the path and member */
-+ case DBUS_MESSAGE_TYPE_METHOD_CALL:
-+ REQUIRE_FIELD (PATH);
-+ REQUIRE_FIELD (MEMBER);
-+ break;
-+ case DBUS_MESSAGE_TYPE_ERROR:
-+ REQUIRE_FIELD (ERROR_NAME);
-+ REQUIRE_FIELD (REPLY_SERIAL);
-+ break;
-+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
-+ REQUIRE_FIELD (REPLY_SERIAL);
-+ break;
-+ default:
-+ /* other message types allowed but ignored */
-+ break;
-+ }
-+
-+ return DBUS_VALID;
-+}
-+
-+static DBusValidity
-+load_and_validate_field (DBusHeader *header,
-+ int field,
-+ DBusTypeReader *variant_reader)
-+{
-+ int type;
-+ int expected_type;
-+ const DBusString *value_str;
-+ int value_pos;
-+ int str_data_pos;
-+ dbus_uint32_t v_UINT32;
-+ int bad_string_code;
-+ dbus_bool_t (* string_validation_func) (const DBusString *str,
-+ int start, int len);
-+
-+ /* Supposed to have been checked already */
-+ _dbus_assert (field <= DBUS_HEADER_FIELD_LAST);
-+ _dbus_assert (field != DBUS_HEADER_FIELD_INVALID);
-+
-+ /* Before we can cache a field, we need to know it has the right type */
-+ type = _dbus_type_reader_get_current_type (variant_reader);
-+
-+ _dbus_assert (_dbus_header_field_types[field].code == field);
-+
-+ expected_type = EXPECTED_TYPE_OF_FIELD (field);
-+ if (type != expected_type)
-+ {
-+ _dbus_verbose ("Field %d should have type %d but has %d\n",
-+ field, expected_type, type);
-+ return DBUS_INVALID_HEADER_FIELD_HAS_WRONG_TYPE;
-+ }
-+
-+ /* If the field was provided twice, we aren't happy */
-+ if (header->fields[field].value_pos >= 0)
-+ {
-+ _dbus_verbose ("Header field %d seen a second time\n", field);
-+ return DBUS_INVALID_HEADER_FIELD_APPEARS_TWICE;
-+ }
-+
-+ /* Now we can cache and look at the field content */
-+ _dbus_verbose ("initially caching field %d\n", field);
-+ _dbus_header_cache_one (header, field, variant_reader);
-+
-+ string_validation_func = NULL;
-+
-+ /* make compiler happy that all this is initialized */
-+ v_UINT32 = 0;
-+ value_str = NULL;
-+ value_pos = -1;
-+ str_data_pos = -1;
-+ bad_string_code = DBUS_VALID;
-+
-+ if (expected_type == DBUS_TYPE_UINT32)
-+ {
-+ _dbus_header_get_field_basic (header, field, expected_type,
-+ &v_UINT32);
-+ }
-+ else if (expected_type == DBUS_TYPE_STRING ||
-+ expected_type == DBUS_TYPE_OBJECT_PATH ||
-+ expected_type == DBUS_TYPE_SIGNATURE)
-+ {
-+ _dbus_header_get_field_raw (header, field,
-+ &value_str, &value_pos);
-+ str_data_pos = _DBUS_ALIGN_VALUE (value_pos, 4) + 4;
-+ }
-+ else
-+ {
-+ _dbus_assert_not_reached ("none of the known fields should have this type");
-+ }
-+
-+ switch (field)
-+ {
-+ case DBUS_HEADER_FIELD_DESTINATION:
-+ string_validation_func = _dbus_validate_bus_name;
-+ bad_string_code = DBUS_INVALID_BAD_DESTINATION;
-+ break;
-+ case DBUS_HEADER_FIELD_INTERFACE:
-+ string_validation_func = _dbus_validate_interface;
-+ bad_string_code = DBUS_INVALID_BAD_INTERFACE;
-+
-+ if (_dbus_string_equal_substring (&_dbus_local_interface_str,
-+ 0,
-+ _dbus_string_get_length (&_dbus_local_interface_str),
-+ value_str, str_data_pos))
-+ {
-+ _dbus_verbose ("Message is on the local interface\n");
-+ return DBUS_INVALID_USES_LOCAL_INTERFACE;
-+ }
-+ break;
-+
-+ case DBUS_HEADER_FIELD_MEMBER:
-+ string_validation_func = _dbus_validate_member;
-+ bad_string_code = DBUS_INVALID_BAD_MEMBER;
-+ break;
-+
-+ case DBUS_HEADER_FIELD_ERROR_NAME:
-+ string_validation_func = _dbus_validate_error_name;
-+ bad_string_code = DBUS_INVALID_BAD_ERROR_NAME;
-+ break;
-+
-+ case DBUS_HEADER_FIELD_SENDER:
-+ string_validation_func = _dbus_validate_bus_name;
-+ bad_string_code = DBUS_INVALID_BAD_SENDER;
-+ break;
-+
-+ case DBUS_HEADER_FIELD_PATH:
-+ /* OBJECT_PATH was validated generically due to its type */
-+ string_validation_func = NULL;
-+
-+ if (_dbus_string_equal_substring (&_dbus_local_path_str,
-+ 0,
-+ _dbus_string_get_length (&_dbus_local_path_str),
-+ value_str, str_data_pos))
-+ {
-+ _dbus_verbose ("Message is from the local path\n");
-+ return DBUS_INVALID_USES_LOCAL_PATH;
-+ }
-+ break;
-+
-+ case DBUS_HEADER_FIELD_REPLY_SERIAL:
-+ /* Can't be 0 */
-+ if (v_UINT32 == 0)
-+ {
-+ return DBUS_INVALID_BAD_SERIAL;
-+ }
-+ break;
-+
-+ case DBUS_HEADER_FIELD_SIGNATURE:
-+ /* SIGNATURE validated generically due to its type */
-+ string_validation_func = NULL;
-+ break;
-+
-+ default:
-+ _dbus_assert_not_reached ("unknown field shouldn't be seen here");
-+ break;
-+ }
-+
-+ if (string_validation_func)
-+ {
-+ dbus_uint32_t len;
-+
-+ _dbus_assert (bad_string_code != DBUS_VALID);
-+
-+ len = _dbus_marshal_read_uint32 (value_str, value_pos,
-+ header->byte_order, NULL);
-+
-+#if 0
-+ _dbus_verbose ("Validating string header field; code %d if fails\n",
-+ bad_string_code);
-+#endif
-+ if (!(*string_validation_func) (value_str, str_data_pos, len))
-+ return bad_string_code;
-+ }
-+
-+ return DBUS_VALID;
-+}
-+
-+/**
-+ * Creates a message header from potentially-untrusted data. The
-+ * return value is #TRUE if there was enough memory and the data was
-+ * valid. If it returns #TRUE, the header will be created. If it
-+ * returns #FALSE and *validity == #DBUS_VALIDITY_UNKNOWN_OOM_ERROR,
-+ * then there wasn't enough memory. If it returns #FALSE
-+ * and *validity != #DBUS_VALIDITY_UNKNOWN_OOM_ERROR then the data was
-+ * invalid.
-+ *
-+ * The byte_order, fields_array_len, and body_len args should be from
-+ * _dbus_header_have_message_untrusted(). Validation performed in
-+ * _dbus_header_have_message_untrusted() is assumed to have been
-+ * already done.
-+ *
-+ * @param header the header (must be initialized)
-+ * @param mode whether to do validation
-+ * @param validity return location for invalidity reason
-+ * @param byte_order byte order from header
-+ * @param fields_array_len claimed length of fields array
-+ * @param body_len claimed length of body
-+ * @param header_len claimed length of header
-+ * @param str a string
-+ * @param start start of header, 8-aligned
-+ * @param len length of string to look at
-+ * @returns #FALSE if no memory or data was invalid, #TRUE otherwise
-+ */
-+dbus_bool_t
-+_dbus_header_load (DBusHeader *header,
-+ DBusValidationMode mode,
-+ DBusValidity *validity,
-+ int byte_order,
-+ int fields_array_len,
-+ int header_len,
-+ int body_len,
-+ const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ int leftover;
-+ DBusValidity v;
-+ DBusTypeReader reader;
-+ DBusTypeReader array_reader;
-+ unsigned char v_byte;
-+ dbus_uint32_t v_uint32;
-+ dbus_uint32_t serial;
-+ int padding_start;
-+ int padding_len;
-+ int i;
-+
-+ _dbus_assert (start == (int) _DBUS_ALIGN_VALUE (start, 8));
-+ _dbus_assert (header_len <= len);
-+ _dbus_assert (_dbus_string_get_length (&header->data) == 0);
-+
-+ if (!_dbus_string_copy_len (str, start, header_len, &header->data, 0))
-+ {
-+ _dbus_verbose ("Failed to copy buffer into new header\n");
-+ *validity = DBUS_VALIDITY_UNKNOWN_OOM_ERROR;
-+ return FALSE;
-+ }
-+
-+ if (mode == DBUS_VALIDATION_MODE_WE_TRUST_THIS_DATA_ABSOLUTELY)
-+ {
-+ leftover = len - header_len - body_len - start;
-+ }
-+ else
-+ {
-+ v = _dbus_validate_body_with_reason (&_dbus_header_signature_str, 0,
-+ byte_order,
-+ &leftover,
-+ str, start, len);
-+
-+ if (v != DBUS_VALID)
-+ {
-+ *validity = v;
-+ goto invalid;
-+ }
-+ }
-+
-+ _dbus_assert (leftover < len);
-+
-+ padding_len = header_len - (FIRST_FIELD_OFFSET + fields_array_len);
-+ padding_start = start + FIRST_FIELD_OFFSET + fields_array_len;
-+ _dbus_assert (start + header_len == (int) _DBUS_ALIGN_VALUE (padding_start, 8));
-+ _dbus_assert (start + header_len == padding_start + padding_len);
-+
-+ if (mode != DBUS_VALIDATION_MODE_WE_TRUST_THIS_DATA_ABSOLUTELY)
-+ {
-+ if (!_dbus_string_validate_nul (str, padding_start, padding_len))
-+ {
-+ *validity = DBUS_INVALID_ALIGNMENT_PADDING_NOT_NUL;
-+ goto invalid;
-+ }
-+ }
-+
-+ header->padding = padding_len;
-+
-+ if (mode == DBUS_VALIDATION_MODE_WE_TRUST_THIS_DATA_ABSOLUTELY)
-+ {
-+ *validity = DBUS_VALID;
-+ return TRUE;
-+ }
-+
-+ /* We now know the data is well-formed, but we have to check that
-+ * it's valid.
-+ */
-+
-+ _dbus_type_reader_init (&reader,
-+ byte_order,
-+ &_dbus_header_signature_str, 0,
-+ str, start);
-+
-+ /* BYTE ORDER */
-+ _dbus_assert (_dbus_type_reader_get_current_type (&reader) == DBUS_TYPE_BYTE);
-+ _dbus_assert (_dbus_type_reader_get_value_pos (&reader) == BYTE_ORDER_OFFSET);
-+ _dbus_type_reader_read_basic (&reader, &v_byte);
-+ _dbus_type_reader_next (&reader);
-+
-+ _dbus_assert (v_byte == byte_order);
-+ header->byte_order = byte_order;
-+
-+ /* MESSAGE TYPE */
-+ _dbus_assert (_dbus_type_reader_get_current_type (&reader) == DBUS_TYPE_BYTE);
-+ _dbus_assert (_dbus_type_reader_get_value_pos (&reader) == TYPE_OFFSET);
-+ _dbus_type_reader_read_basic (&reader, &v_byte);
-+ _dbus_type_reader_next (&reader);
-+
-+ /* unknown message types are supposed to be ignored, so only validation here is
-+ * that it isn't invalid
-+ */
-+ if (v_byte == DBUS_MESSAGE_TYPE_INVALID)
-+ {
-+ *validity = DBUS_INVALID_BAD_MESSAGE_TYPE;
-+ goto invalid;
-+ }
-+
-+ /* FLAGS */
-+ _dbus_assert (_dbus_type_reader_get_current_type (&reader) == DBUS_TYPE_BYTE);
-+ _dbus_assert (_dbus_type_reader_get_value_pos (&reader) == FLAGS_OFFSET);
-+ _dbus_type_reader_read_basic (&reader, &v_byte);
-+ _dbus_type_reader_next (&reader);
-+
-+ /* unknown flags should be ignored */
-+
-+ /* PROTOCOL VERSION */
-+ _dbus_assert (_dbus_type_reader_get_current_type (&reader) == DBUS_TYPE_BYTE);
-+ _dbus_assert (_dbus_type_reader_get_value_pos (&reader) == VERSION_OFFSET);
-+ _dbus_type_reader_read_basic (&reader, &v_byte);
-+ _dbus_type_reader_next (&reader);
-+
-+ if (v_byte != DBUS_MAJOR_PROTOCOL_VERSION)
-+ {
-+ *validity = DBUS_INVALID_BAD_PROTOCOL_VERSION;
-+ goto invalid;
-+ }
-+
-+ /* BODY LENGTH */
-+ _dbus_assert (_dbus_type_reader_get_current_type (&reader) == DBUS_TYPE_UINT32);
-+ _dbus_assert (_dbus_type_reader_get_value_pos (&reader) == BODY_LENGTH_OFFSET);
-+ _dbus_type_reader_read_basic (&reader, &v_uint32);
-+ _dbus_type_reader_next (&reader);
-+
-+ _dbus_assert (body_len == (signed) v_uint32);
-+
-+ /* SERIAL */
-+ _dbus_assert (_dbus_type_reader_get_current_type (&reader) == DBUS_TYPE_UINT32);
-+ _dbus_assert (_dbus_type_reader_get_value_pos (&reader) == SERIAL_OFFSET);
-+ _dbus_type_reader_read_basic (&reader, &serial);
-+ _dbus_type_reader_next (&reader);
-+
-+ if (serial == 0)
-+ {
-+ *validity = DBUS_INVALID_BAD_SERIAL;
-+ goto invalid;
-+ }
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&reader) == DBUS_TYPE_ARRAY);
-+ _dbus_assert (_dbus_type_reader_get_value_pos (&reader) == FIELDS_ARRAY_LENGTH_OFFSET);
-+
-+ _dbus_type_reader_recurse (&reader, &array_reader);
-+ while (_dbus_type_reader_get_current_type (&array_reader) != DBUS_TYPE_INVALID)
-+ {
-+ DBusTypeReader struct_reader;
-+ DBusTypeReader variant_reader;
-+ unsigned char field_code;
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&array_reader) == DBUS_TYPE_STRUCT);
-+
-+ _dbus_type_reader_recurse (&array_reader, &struct_reader);
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&struct_reader) == DBUS_TYPE_BYTE);
-+ _dbus_type_reader_read_basic (&struct_reader, &field_code);
-+ _dbus_type_reader_next (&struct_reader);
-+
-+ if (field_code == DBUS_HEADER_FIELD_INVALID)
-+ {
-+ _dbus_verbose ("invalid header field code\n");
-+ *validity = DBUS_INVALID_HEADER_FIELD_CODE;
-+ goto invalid;
-+ }
-+
-+ if (field_code > DBUS_HEADER_FIELD_LAST)
-+ {
-+ _dbus_verbose ("unknown header field code %d, skipping\n",
-+ field_code);
-+ goto next_field;
-+ }
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&struct_reader) == DBUS_TYPE_VARIANT);
-+ _dbus_type_reader_recurse (&struct_reader, &variant_reader);
-+
-+ v = load_and_validate_field (header, field_code, &variant_reader);
-+ if (v != DBUS_VALID)
-+ {
-+ _dbus_verbose ("Field %d was invalid\n", field_code);
-+ *validity = v;
-+ goto invalid;
-+ }
-+
-+ next_field:
-+ _dbus_type_reader_next (&array_reader);
-+ }
-+
-+ /* Anything we didn't fill in is now known not to exist */
-+ i = 0;
-+ while (i <= DBUS_HEADER_FIELD_LAST)
-+ {
-+ if (header->fields[i].value_pos == _DBUS_HEADER_FIELD_VALUE_UNKNOWN)
-+ header->fields[i].value_pos = _DBUS_HEADER_FIELD_VALUE_NONEXISTENT;
-+ ++i;
-+ }
-+
-+ v = check_mandatory_fields (header);
-+ if (v != DBUS_VALID)
-+ {
-+ _dbus_verbose ("Mandatory fields were missing, code %d\n", v);
-+ *validity = v;
-+ goto invalid;
-+ }
-+
-+ *validity = DBUS_VALID;
-+ return TRUE;
-+
-+ invalid:
-+ _dbus_string_set_length (&header->data, 0);
-+ return FALSE;
-+}
-+
-+/**
-+ * Fills in the correct body length.
-+ *
-+ * @param header the header
-+ * @param body_len the length of the body
-+ */
-+void
-+_dbus_header_update_lengths (DBusHeader *header,
-+ int body_len)
-+{
-+ _dbus_marshal_set_uint32 (&header->data,
-+ BODY_LENGTH_OFFSET,
-+ body_len,
-+ header->byte_order);
-+}
-+
-+static dbus_bool_t
-+find_field_for_modification (DBusHeader *header,
-+ int field,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root)
-+{
-+ dbus_bool_t retval;
-+
-+ retval = FALSE;
-+
-+ _dbus_type_reader_init (realign_root,
-+ header->byte_order,
-+ &_dbus_header_signature_str,
-+ FIELDS_ARRAY_SIGNATURE_OFFSET,
-+ &header->data,
-+ FIELDS_ARRAY_LENGTH_OFFSET);
-+
-+ _dbus_type_reader_recurse (realign_root, reader);
-+
-+ while (_dbus_type_reader_get_current_type (reader) != DBUS_TYPE_INVALID)
-+ {
-+ DBusTypeReader sub;
-+ unsigned char field_code;
-+
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&sub) == DBUS_TYPE_BYTE);
-+ _dbus_type_reader_read_basic (&sub, &field_code);
-+
-+ if (field_code == (unsigned) field)
-+ {
-+ _dbus_assert (_dbus_type_reader_get_current_type (reader) == DBUS_TYPE_STRUCT);
-+ retval = TRUE;
-+ goto done;
-+ }
-+
-+ _dbus_type_reader_next (reader);
-+ }
-+
-+ done:
-+ return retval;
-+}
-+
-+/**
-+ * Sets the value of a field with basic type. If the value is a string
-+ * value, it isn't allowed to be #NULL. If the field doesn't exist,
-+ * it will be created.
-+ *
-+ * @param header the header
-+ * @param field the field to set
-+ * @param type the type of the value
-+ * @param value the value as for _dbus_marshal_set_basic()
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_header_set_field_basic (DBusHeader *header,
-+ int field,
-+ int type,
-+ const void *value)
-+{
-+ _dbus_assert (field <= DBUS_HEADER_FIELD_LAST);
-+
-+ if (!reserve_header_padding (header))
-+ return FALSE;
-+
-+ /* If the field exists we set, otherwise we append */
-+ if (_dbus_header_cache_check (header, field))
-+ {
-+ DBusTypeReader reader;
-+ DBusTypeReader realign_root;
-+
-+ if (!find_field_for_modification (header, field,
-+ &reader, &realign_root))
-+ _dbus_assert_not_reached ("field was marked present in cache but wasn't found");
-+
-+ if (!set_basic_field (&reader, field, type, value, &realign_root))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ DBusTypeWriter writer;
-+ DBusTypeWriter array;
-+
-+ _dbus_type_writer_init_values_only (&writer,
-+ header->byte_order,
-+ &_dbus_header_signature_str,
-+ FIELDS_ARRAY_SIGNATURE_OFFSET,
-+ &header->data,
-+ FIELDS_ARRAY_LENGTH_OFFSET);
-+
-+ /* recurse into array without creating a new length, and jump to
-+ * end of array.
-+ */
-+ if (!_dbus_type_writer_append_array (&writer,
-+ &_dbus_header_signature_str,
-+ FIELDS_ARRAY_ELEMENT_SIGNATURE_OFFSET,
-+ &array))
-+ _dbus_assert_not_reached ("recurse into ARRAY should not have used memory");
-+
-+ _dbus_assert (array.u.array.len_pos == FIELDS_ARRAY_LENGTH_OFFSET);
-+ _dbus_assert (array.u.array.start_pos == FIRST_FIELD_OFFSET);
-+ _dbus_assert (array.value_pos == HEADER_END_BEFORE_PADDING (header));
-+
-+ if (!write_basic_field (&array,
-+ field, type, value))
-+ return FALSE;
-+
-+ if (!_dbus_type_writer_unrecurse (&writer, &array))
-+ _dbus_assert_not_reached ("unrecurse from ARRAY should not have used memory");
-+ }
-+
-+ correct_header_padding (header);
-+
-+ /* We could be smarter about this (only invalidate fields after the
-+ * one we modified, or even only if the one we modified changed
-+ * length). But this hack is a start.
-+ */
-+ _dbus_header_cache_invalidate_all (header);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets the value of a field with basic type. If the field
-+ * doesn't exist, returns #FALSE, otherwise returns #TRUE.
-+ *
-+ * @param header the header
-+ * @param field the field to get
-+ * @param type the type of the value
-+ * @param value the value as for _dbus_marshal_read_basic()
-+ * @returns #FALSE if the field doesn't exist
-+ */
-+dbus_bool_t
-+_dbus_header_get_field_basic (DBusHeader *header,
-+ int field,
-+ int type,
-+ void *value)
-+{
-+ _dbus_assert (field != DBUS_HEADER_FIELD_INVALID);
-+ _dbus_assert (field <= DBUS_HEADER_FIELD_LAST);
-+ _dbus_assert (_dbus_header_field_types[field].code == field);
-+ /* in light of this you might ask why the type is passed in;
-+ * the only rationale I can think of is so the caller has
-+ * to specify its expectation and breaks if we change it
-+ */
-+ _dbus_assert (type == EXPECTED_TYPE_OF_FIELD (field));
-+
-+ if (!_dbus_header_cache_check (header, field))
-+ return FALSE;
-+
-+ _dbus_assert (header->fields[field].value_pos >= 0);
-+
-+ _dbus_marshal_read_basic (&header->data,
-+ header->fields[field].value_pos,
-+ type, value, header->byte_order,
-+ NULL);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets the raw marshaled data for a field. If the field doesn't
-+ * exist, returns #FALSE, otherwise returns #TRUE. Returns the start
-+ * of the marshaled data, i.e. usually the byte where the length
-+ * starts (for strings and arrays) or for basic types just the value
-+ * itself.
-+ *
-+ * @param header the header
-+ * @param field the field to get
-+ * @param str return location for the data string
-+ * @param pos return location for start of field value
-+ * @returns #FALSE if the field doesn't exist
-+ */
-+dbus_bool_t
-+_dbus_header_get_field_raw (DBusHeader *header,
-+ int field,
-+ const DBusString **str,
-+ int *pos)
-+{
-+ if (!_dbus_header_cache_check (header, field))
-+ return FALSE;
-+
-+ if (str)
-+ *str = &header->data;
-+ if (pos)
-+ *pos = header->fields[field].value_pos;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Deletes a field, if it exists.
-+ *
-+ * @param header the header
-+ * @param field the field to delete
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_header_delete_field (DBusHeader *header,
-+ int field)
-+{
-+ DBusTypeReader reader;
-+ DBusTypeReader realign_root;
-+
-+ if (_dbus_header_cache_known_nonexistent (header, field))
-+ return TRUE; /* nothing to do */
-+
-+ /* Scan to the field we want, delete and realign, reappend
-+ * padding. Field may turn out not to exist.
-+ */
-+ if (!find_field_for_modification (header, field,
-+ &reader, &realign_root))
-+ return TRUE; /* nothing to do */
-+
-+ if (!reserve_header_padding (header))
-+ return FALSE;
-+
-+ if (!_dbus_type_reader_delete (&reader,
-+ &realign_root))
-+ return FALSE;
-+
-+ correct_header_padding (header);
-+
-+ _dbus_header_cache_invalidate_all (header);
-+
-+ _dbus_assert (!_dbus_header_cache_check (header, field)); /* Expensive assertion ... */
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Toggles a message flag bit, turning on the bit if value = TRUE and
-+ * flipping it off if value = FALSE.
-+ *
-+ * @param header the header
-+ * @param flag the message flag to toggle
-+ * @param value toggle on or off
-+ */
-+void
-+_dbus_header_toggle_flag (DBusHeader *header,
-+ dbus_uint32_t flag,
-+ dbus_bool_t value)
-+{
-+ unsigned char *flags_p;
-+
-+ flags_p = _dbus_string_get_data_len (&header->data, FLAGS_OFFSET, 1);
-+
-+ if (value)
-+ *flags_p |= flag;
-+ else
-+ *flags_p &= ~flag;
-+}
-+
-+/**
-+ * Gets a message flag bit, returning TRUE if the bit is set.
-+ *
-+ * @param header the header
-+ * @param flag the message flag to get
-+ * @returns #TRUE if the flag is set
-+ */
-+dbus_bool_t
-+_dbus_header_get_flag (DBusHeader *header,
-+ dbus_uint32_t flag)
-+{
-+ const unsigned char *flags_p;
-+
-+ flags_p = _dbus_string_get_const_data_len (&header->data, FLAGS_OFFSET, 1);
-+
-+ return (*flags_p & flag) != 0;
-+}
-+
-+/**
-+ * Swaps the header into the given order if required.
-+ *
-+ * @param header the header
-+ * @param new_order the new byte order
-+ */
-+void
-+_dbus_header_byteswap (DBusHeader *header,
-+ int new_order)
-+{
-+ if (header->byte_order == new_order)
-+ return;
-+
-+ _dbus_marshal_byteswap (&_dbus_header_signature_str,
-+ 0, header->byte_order,
-+ new_order,
-+ &header->data, 0);
-+
-+ header->byte_order = new_order;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+dbus_bool_t
-+_dbus_marshal_header_test (void)
-+{
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-header.h dbus-0.61/dbus/dbus-marshal-header.h
---- dbus-0.61.orig/dbus/dbus-marshal-header.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-header.h 2005-01-28 00:39:26.000000000 +0100
-@@ -0,0 +1,133 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-header.h Managing marshaling/demarshaling of message headers
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_MARSHAL_HEADER_H
-+#define DBUS_MARSHAL_HEADER_H
-+
-+#include <config.h>
-+#include <dbus/dbus-marshal-basic.h>
-+#include <dbus/dbus-marshal-validate.h>
-+
-+#ifndef PACKAGE
-+#error "config.h not included here"
-+#endif
-+
-+typedef struct DBusHeader DBusHeader;
-+typedef struct DBusHeaderField DBusHeaderField;
-+
-+#define _DBUS_HEADER_FIELD_VALUE_UNKNOWN -1
-+#define _DBUS_HEADER_FIELD_VALUE_NONEXISTENT -2
-+
-+/**
-+ * Cached information about a header field in the message
-+ */
-+struct DBusHeaderField
-+{
-+ int value_pos; /**< Position of field value, or -1/-2 */
-+};
-+
-+/**
-+ * Message header data and some cached details of it.
-+ */
-+struct DBusHeader
-+{
-+ DBusString data; /**< Header network data, stored
-+ * separately from body so we can
-+ * independently realloc it.
-+ */
-+
-+ DBusHeaderField fields[DBUS_HEADER_FIELD_LAST + 1]; /**< Track the location
-+ * of each field in header
-+ */
-+
-+ dbus_uint32_t padding : 3; /**< bytes of alignment in header */
-+ dbus_uint32_t byte_order : 8; /**< byte order of header */
-+};
-+
-+dbus_bool_t _dbus_header_init (DBusHeader *header,
-+ int byte_order);
-+void _dbus_header_free (DBusHeader *header);
-+void _dbus_header_reinit (DBusHeader *header,
-+ int byte_order);
-+dbus_bool_t _dbus_header_create (DBusHeader *header,
-+ int type,
-+ const char *destination,
-+ const char *path,
-+ const char *interface,
-+ const char *member,
-+ const char *error_name);
-+dbus_bool_t _dbus_header_copy (const DBusHeader *header,
-+ DBusHeader *dest);
-+int _dbus_header_get_message_type (DBusHeader *header);
-+void _dbus_header_set_serial (DBusHeader *header,
-+ dbus_uint32_t serial);
-+dbus_uint32_t _dbus_header_get_serial (DBusHeader *header);
-+void _dbus_header_update_lengths (DBusHeader *header,
-+ int body_len);
-+dbus_bool_t _dbus_header_set_field_basic (DBusHeader *header,
-+ int field,
-+ int type,
-+ const void *value);
-+dbus_bool_t _dbus_header_get_field_basic (DBusHeader *header,
-+ int field,
-+ int type,
-+ void *value);
-+dbus_bool_t _dbus_header_get_field_raw (DBusHeader *header,
-+ int field,
-+ const DBusString **str,
-+ int *pos);
-+dbus_bool_t _dbus_header_delete_field (DBusHeader *header,
-+ int field);
-+void _dbus_header_toggle_flag (DBusHeader *header,
-+ dbus_uint32_t flag,
-+ dbus_bool_t value);
-+dbus_bool_t _dbus_header_get_flag (DBusHeader *header,
-+ dbus_uint32_t flag);
-+dbus_bool_t _dbus_header_ensure_signature (DBusHeader *header,
-+ DBusString **type_str,
-+ int *type_pos);
-+dbus_bool_t _dbus_header_have_message_untrusted (int max_message_length,
-+ DBusValidity *validity,
-+ int *byte_order,
-+ int *fields_array_len,
-+ int *header_len,
-+ int *body_len,
-+ const DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_header_load (DBusHeader *header,
-+ DBusValidationMode mode,
-+ DBusValidity *validity,
-+ int byte_order,
-+ int fields_array_len,
-+ int header_len,
-+ int body_len,
-+ const DBusString *str,
-+ int start,
-+ int len);
-+void _dbus_header_byteswap (DBusHeader *header,
-+ int new_order);
-+
-+
-+
-+#endif /* DBUS_MARSHAL_HEADER_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-recursive-util.c dbus-0.61/dbus/dbus-marshal-recursive-util.c
---- dbus-0.61.orig/dbus/dbus-marshal-recursive-util.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-recursive-util.c 2005-04-24 00:34:48.000000000 +0200
-@@ -0,0 +1,3572 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-recursive-util.c Would be in dbus-marshal-recursive.c, but only used in bus/tests
-+ *
-+ * Copyright (C) 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+#include "dbus-marshal-recursive.h"
-+#include "dbus-marshal-basic.h"
-+#include "dbus-signature.h"
-+#include "dbus-internals.h"
-+#include <string.h>
-+
-+static void
-+basic_value_zero (DBusBasicValue *value)
-+{
-+
-+#ifdef DBUS_HAVE_INT64
-+ value->u64 = 0;
-+#else
-+ value->u64.first32 = 0;
-+ value->u64.second32 = 0;
-+#endif
-+}
-+
-+static dbus_bool_t
-+basic_value_equal (int type,
-+ DBusBasicValue *lhs,
-+ DBusBasicValue *rhs)
-+{
-+ if (type == DBUS_TYPE_STRING ||
-+ type == DBUS_TYPE_SIGNATURE ||
-+ type == DBUS_TYPE_OBJECT_PATH)
-+ {
-+ return strcmp (lhs->str, rhs->str) == 0;
-+ }
-+ else
-+ {
-+#ifdef DBUS_HAVE_INT64
-+ return lhs->u64 == rhs->u64;
-+#else
-+ return lhs->u64.first32 == rhs->u64.first32 &&
-+ lhs->u64.second32 == rhs->u64.second32;
-+#endif
-+ }
-+}
-+
-+static dbus_bool_t
-+equal_values_helper (DBusTypeReader *lhs,
-+ DBusTypeReader *rhs)
-+{
-+ int lhs_type;
-+ int rhs_type;
-+
-+ lhs_type = _dbus_type_reader_get_current_type (lhs);
-+ rhs_type = _dbus_type_reader_get_current_type (rhs);
-+
-+ if (lhs_type != rhs_type)
-+ return FALSE;
-+
-+ if (lhs_type == DBUS_TYPE_INVALID)
-+ return TRUE;
-+
-+ if (dbus_type_is_basic (lhs_type))
-+ {
-+ DBusBasicValue lhs_value;
-+ DBusBasicValue rhs_value;
-+
-+ basic_value_zero (&lhs_value);
-+ basic_value_zero (&rhs_value);
-+
-+ _dbus_type_reader_read_basic (lhs, &lhs_value);
-+ _dbus_type_reader_read_basic (rhs, &rhs_value);
-+
-+ return basic_value_equal (lhs_type, &lhs_value, &rhs_value);
-+ }
-+ else
-+ {
-+ DBusTypeReader lhs_sub;
-+ DBusTypeReader rhs_sub;
-+
-+ _dbus_type_reader_recurse (lhs, &lhs_sub);
-+ _dbus_type_reader_recurse (rhs, &rhs_sub);
-+
-+ return equal_values_helper (&lhs_sub, &rhs_sub);
-+ }
-+}
-+
-+/**
-+ * See whether the two readers point to identical data blocks.
-+ *
-+ * @param lhs reader 1
-+ * @param rhs reader 2
-+ * @returns #TRUE if the data blocks have the same values
-+ */
-+dbus_bool_t
-+_dbus_type_reader_equal_values (const DBusTypeReader *lhs,
-+ const DBusTypeReader *rhs)
-+{
-+ DBusTypeReader copy_lhs = *lhs;
-+ DBusTypeReader copy_rhs = *rhs;
-+
-+ return equal_values_helper (©_lhs, ©_rhs);
-+}
-+
-+/* TESTS */
-+#include "dbus-test.h"
-+#include "dbus-list.h"
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+/* Whether to do the OOM stuff (only with other expensive tests) */
-+#define TEST_OOM_HANDLING 0
-+/* We do start offset 0 through 9, to get various alignment cases. Still this
-+ * obviously makes the test suite run 10x as slow.
-+ */
-+#define MAX_INITIAL_OFFSET 9
-+
-+/* Largest iteration count to test copying, realignment,
-+ * etc. with. i.e. we only test this stuff with some of the smaller
-+ * data sets.
-+ */
-+#define MAX_ITERATIONS_FOR_EXPENSIVE_TESTS 1000
-+
-+typedef struct
-+{
-+ int byte_order;
-+ int initial_offset;
-+ DBusString signature;
-+ DBusString body;
-+} DataBlock;
-+
-+typedef struct
-+{
-+ int saved_sig_len;
-+ int saved_body_len;
-+} DataBlockState;
-+
-+#define N_FENCE_BYTES 5
-+#define FENCE_BYTES_STR "abcde"
-+#define INITIAL_PADDING_BYTE '\0'
-+
-+static dbus_bool_t
-+data_block_init (DataBlock *block,
-+ int byte_order,
-+ int initial_offset)
-+{
-+ if (!_dbus_string_init (&block->signature))
-+ return FALSE;
-+
-+ if (!_dbus_string_init (&block->body))
-+ {
-+ _dbus_string_free (&block->signature);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_insert_bytes (&block->signature, 0, initial_offset,
-+ INITIAL_PADDING_BYTE) ||
-+ !_dbus_string_insert_bytes (&block->body, 0, initial_offset,
-+ INITIAL_PADDING_BYTE) ||
-+ !_dbus_string_append (&block->signature, FENCE_BYTES_STR) ||
-+ !_dbus_string_append (&block->body, FENCE_BYTES_STR))
-+ {
-+ _dbus_string_free (&block->signature);
-+ _dbus_string_free (&block->body);
-+ return FALSE;
-+ }
-+
-+ block->byte_order = byte_order;
-+ block->initial_offset = initial_offset;
-+
-+ return TRUE;
-+}
-+
-+static void
-+data_block_save (DataBlock *block,
-+ DataBlockState *state)
-+{
-+ state->saved_sig_len = _dbus_string_get_length (&block->signature) - N_FENCE_BYTES;
-+ state->saved_body_len = _dbus_string_get_length (&block->body) - N_FENCE_BYTES;
-+}
-+
-+static void
-+data_block_restore (DataBlock *block,
-+ DataBlockState *state)
-+{
-+ _dbus_string_delete (&block->signature,
-+ state->saved_sig_len,
-+ _dbus_string_get_length (&block->signature) - state->saved_sig_len - N_FENCE_BYTES);
-+ _dbus_string_delete (&block->body,
-+ state->saved_body_len,
-+ _dbus_string_get_length (&block->body) - state->saved_body_len - N_FENCE_BYTES);
-+}
-+
-+static void
-+data_block_verify (DataBlock *block)
-+{
-+ if (!_dbus_string_ends_with_c_str (&block->signature,
-+ FENCE_BYTES_STR))
-+ {
-+ int offset;
-+
-+ offset = _dbus_string_get_length (&block->signature) - N_FENCE_BYTES - 8;
-+ if (offset < 0)
-+ offset = 0;
-+
-+ _dbus_verbose_bytes_of_string (&block->signature,
-+ offset,
-+ _dbus_string_get_length (&block->signature) - offset);
-+ _dbus_assert_not_reached ("block did not verify: bad bytes at end of signature");
-+ }
-+ if (!_dbus_string_ends_with_c_str (&block->body,
-+ FENCE_BYTES_STR))
-+ {
-+ int offset;
-+
-+ offset = _dbus_string_get_length (&block->body) - N_FENCE_BYTES - 8;
-+ if (offset < 0)
-+ offset = 0;
-+
-+ _dbus_verbose_bytes_of_string (&block->body,
-+ offset,
-+ _dbus_string_get_length (&block->body) - offset);
-+ _dbus_assert_not_reached ("block did not verify: bad bytes at end of body");
-+ }
-+
-+ _dbus_assert (_dbus_string_validate_nul (&block->signature,
-+ 0, block->initial_offset));
-+ _dbus_assert (_dbus_string_validate_nul (&block->body,
-+ 0, block->initial_offset));
-+}
-+
-+static void
-+data_block_free (DataBlock *block)
-+{
-+ data_block_verify (block);
-+
-+ _dbus_string_free (&block->signature);
-+ _dbus_string_free (&block->body);
-+}
-+
-+static void
-+data_block_reset (DataBlock *block)
-+{
-+ data_block_verify (block);
-+
-+ _dbus_string_delete (&block->signature,
-+ block->initial_offset,
-+ _dbus_string_get_length (&block->signature) - N_FENCE_BYTES - block->initial_offset);
-+ _dbus_string_delete (&block->body,
-+ block->initial_offset,
-+ _dbus_string_get_length (&block->body) - N_FENCE_BYTES - block->initial_offset);
-+
-+ data_block_verify (block);
-+}
-+
-+static void
-+data_block_init_reader_writer (DataBlock *block,
-+ DBusTypeReader *reader,
-+ DBusTypeWriter *writer)
-+{
-+ if (reader)
-+ _dbus_type_reader_init (reader,
-+ block->byte_order,
-+ &block->signature,
-+ block->initial_offset,
-+ &block->body,
-+ block->initial_offset);
-+
-+ if (writer)
-+ _dbus_type_writer_init (writer,
-+ block->byte_order,
-+ &block->signature,
-+ _dbus_string_get_length (&block->signature) - N_FENCE_BYTES,
-+ &block->body,
-+ _dbus_string_get_length (&block->body) - N_FENCE_BYTES);
-+}
-+
-+static void
-+real_check_expected_type (DBusTypeReader *reader,
-+ int expected,
-+ const char *funcname,
-+ int line)
-+{
-+ int t;
-+
-+ t = _dbus_type_reader_get_current_type (reader);
-+
-+ if (t != expected)
-+ {
-+ _dbus_warn ("Read type %s while expecting %s at %s line %d\n",
-+ _dbus_type_to_string (t),
-+ _dbus_type_to_string (expected),
-+ funcname, line);
-+
-+ _dbus_assert_not_reached ("read wrong type");
-+ }
-+}
-+
-+#define check_expected_type(reader, expected) real_check_expected_type (reader, expected, _DBUS_FUNCTION_NAME, __LINE__)
-+
-+#define NEXT_EXPECTING_TRUE(reader) do { if (!_dbus_type_reader_next (reader)) \
-+ { \
-+ _dbus_warn ("_dbus_type_reader_next() should have returned TRUE at %s %d\n", \
-+ _DBUS_FUNCTION_NAME, __LINE__); \
-+ _dbus_assert_not_reached ("test failed"); \
-+ } \
-+} while (0)
-+
-+#define NEXT_EXPECTING_FALSE(reader) do { if (_dbus_type_reader_next (reader)) \
-+ { \
-+ _dbus_warn ("_dbus_type_reader_next() should have returned FALSE at %s %d\n", \
-+ _DBUS_FUNCTION_NAME, __LINE__); \
-+ _dbus_assert_not_reached ("test failed"); \
-+ } \
-+ check_expected_type (reader, DBUS_TYPE_INVALID); \
-+} while (0)
-+
-+typedef struct TestTypeNode TestTypeNode;
-+typedef struct TestTypeNodeClass TestTypeNodeClass;
-+typedef struct TestTypeNodeContainer TestTypeNodeContainer;
-+typedef struct TestTypeNodeContainerClass TestTypeNodeContainerClass;
-+
-+struct TestTypeNode
-+{
-+ const TestTypeNodeClass *klass;
-+};
-+
-+struct TestTypeNodeContainer
-+{
-+ TestTypeNode base;
-+ DBusList *children;
-+};
-+
-+struct TestTypeNodeClass
-+{
-+ int typecode;
-+
-+ int instance_size;
-+
-+ int subclass_detail; /* a bad hack to avoid a bunch of subclass casting */
-+
-+ dbus_bool_t (* construct) (TestTypeNode *node);
-+ void (* destroy) (TestTypeNode *node);
-+
-+ dbus_bool_t (* write_value) (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+ dbus_bool_t (* read_value) (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+ dbus_bool_t (* set_value) (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+ dbus_bool_t (* build_signature) (TestTypeNode *node,
-+ DBusString *str);
-+ dbus_bool_t (* write_multi) (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed,
-+ int count);
-+ dbus_bool_t (* read_multi) (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed,
-+ int count);
-+};
-+
-+struct TestTypeNodeContainerClass
-+{
-+ TestTypeNodeClass base;
-+};
-+
-+/* FIXME this could be chilled out substantially by unifying
-+ * the basic types into basic_write_value/basic_read_value
-+ * and by merging read_value and set_value into one function
-+ * taking a flag argument.
-+ */
-+static dbus_bool_t int16_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t int16_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t int16_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t int16_write_multi (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed,
-+ int count);
-+static dbus_bool_t int16_read_multi (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed,
-+ int count);
-+static dbus_bool_t int32_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t int32_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t int32_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t int32_write_multi (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed,
-+ int count);
-+static dbus_bool_t int32_read_multi (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed,
-+ int count);
-+static dbus_bool_t int64_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t int64_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t int64_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t string_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t string_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t string_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t bool_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t bool_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t bool_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t byte_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t byte_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t byte_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t double_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t double_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t double_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t object_path_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t object_path_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t object_path_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t signature_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t signature_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t signature_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t struct_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t struct_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t struct_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t struct_build_signature (TestTypeNode *node,
-+ DBusString *str);
-+static dbus_bool_t dict_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t dict_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t dict_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t dict_build_signature (TestTypeNode *node,
-+ DBusString *str);
-+static dbus_bool_t array_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t array_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t array_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static dbus_bool_t array_build_signature (TestTypeNode *node,
-+ DBusString *str);
-+static dbus_bool_t variant_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed);
-+static dbus_bool_t variant_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed);
-+static dbus_bool_t variant_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed);
-+static void container_destroy (TestTypeNode *node);
-+
-+
-+
-+static const TestTypeNodeClass int16_class = {
-+ DBUS_TYPE_INT16,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ int16_write_value,
-+ int16_read_value,
-+ int16_set_value,
-+ NULL,
-+ int16_write_multi,
-+ int16_read_multi
-+};
-+
-+static const TestTypeNodeClass uint16_class = {
-+ DBUS_TYPE_UINT16,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ int16_write_value, /* recycle from int16 */
-+ int16_read_value, /* recycle from int16 */
-+ int16_set_value, /* recycle from int16 */
-+ NULL,
-+ int16_write_multi, /* recycle from int16 */
-+ int16_read_multi /* recycle from int16 */
-+};
-+
-+static const TestTypeNodeClass int32_class = {
-+ DBUS_TYPE_INT32,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ int32_write_value,
-+ int32_read_value,
-+ int32_set_value,
-+ NULL,
-+ int32_write_multi,
-+ int32_read_multi
-+};
-+
-+static const TestTypeNodeClass uint32_class = {
-+ DBUS_TYPE_UINT32,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ int32_write_value, /* recycle from int32 */
-+ int32_read_value, /* recycle from int32 */
-+ int32_set_value, /* recycle from int32 */
-+ NULL,
-+ int32_write_multi, /* recycle from int32 */
-+ int32_read_multi /* recycle from int32 */
-+};
-+
-+static const TestTypeNodeClass int64_class = {
-+ DBUS_TYPE_INT64,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ int64_write_value,
-+ int64_read_value,
-+ int64_set_value,
-+ NULL,
-+ NULL, /* FIXME */
-+ NULL /* FIXME */
-+};
-+
-+static const TestTypeNodeClass uint64_class = {
-+ DBUS_TYPE_UINT64,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ int64_write_value, /* recycle from int64 */
-+ int64_read_value, /* recycle from int64 */
-+ int64_set_value, /* recycle from int64 */
-+ NULL,
-+ NULL, /* FIXME */
-+ NULL /* FIXME */
-+};
-+
-+static const TestTypeNodeClass string_0_class = {
-+ DBUS_TYPE_STRING,
-+ sizeof (TestTypeNode),
-+ 0, /* string length */
-+ NULL,
-+ NULL,
-+ string_write_value,
-+ string_read_value,
-+ string_set_value,
-+ NULL,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass string_1_class = {
-+ DBUS_TYPE_STRING,
-+ sizeof (TestTypeNode),
-+ 1, /* string length */
-+ NULL,
-+ NULL,
-+ string_write_value,
-+ string_read_value,
-+ string_set_value,
-+ NULL,
-+ NULL,
-+ NULL
-+};
-+
-+/* with nul, a len 3 string should fill 4 bytes and thus is "special" */
-+static const TestTypeNodeClass string_3_class = {
-+ DBUS_TYPE_STRING,
-+ sizeof (TestTypeNode),
-+ 3, /* string length */
-+ NULL,
-+ NULL,
-+ string_write_value,
-+ string_read_value,
-+ string_set_value,
-+ NULL,
-+ NULL,
-+ NULL
-+};
-+
-+/* with nul, a len 8 string should fill 9 bytes and thus is "special" (far-fetched I suppose) */
-+static const TestTypeNodeClass string_8_class = {
-+ DBUS_TYPE_STRING,
-+ sizeof (TestTypeNode),
-+ 8, /* string length */
-+ NULL,
-+ NULL,
-+ string_write_value,
-+ string_read_value,
-+ string_set_value,
-+ NULL,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass bool_class = {
-+ DBUS_TYPE_BOOLEAN,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ bool_write_value,
-+ bool_read_value,
-+ bool_set_value,
-+ NULL,
-+ NULL, /* FIXME */
-+ NULL /* FIXME */
-+};
-+
-+static const TestTypeNodeClass byte_class = {
-+ DBUS_TYPE_BYTE,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ byte_write_value,
-+ byte_read_value,
-+ byte_set_value,
-+ NULL,
-+ NULL, /* FIXME */
-+ NULL /* FIXME */
-+};
-+
-+static const TestTypeNodeClass double_class = {
-+ DBUS_TYPE_DOUBLE,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ double_write_value,
-+ double_read_value,
-+ double_set_value,
-+ NULL,
-+ NULL, /* FIXME */
-+ NULL /* FIXME */
-+};
-+
-+static const TestTypeNodeClass object_path_class = {
-+ DBUS_TYPE_OBJECT_PATH,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ object_path_write_value,
-+ object_path_read_value,
-+ object_path_set_value,
-+ NULL,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass signature_class = {
-+ DBUS_TYPE_SIGNATURE,
-+ sizeof (TestTypeNode),
-+ 0,
-+ NULL,
-+ NULL,
-+ signature_write_value,
-+ signature_read_value,
-+ signature_set_value,
-+ NULL,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass struct_1_class = {
-+ DBUS_TYPE_STRUCT,
-+ sizeof (TestTypeNodeContainer),
-+ 1, /* number of times children appear as fields */
-+ NULL,
-+ container_destroy,
-+ struct_write_value,
-+ struct_read_value,
-+ struct_set_value,
-+ struct_build_signature,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass struct_2_class = {
-+ DBUS_TYPE_STRUCT,
-+ sizeof (TestTypeNodeContainer),
-+ 2, /* number of times children appear as fields */
-+ NULL,
-+ container_destroy,
-+ struct_write_value,
-+ struct_read_value,
-+ struct_set_value,
-+ struct_build_signature,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass dict_1_class = {
-+ DBUS_TYPE_ARRAY, /* this is correct, a dict is an array of dict entry */
-+ sizeof (TestTypeNodeContainer),
-+ 1, /* number of entries */
-+ NULL,
-+ container_destroy,
-+ dict_write_value,
-+ dict_read_value,
-+ dict_set_value,
-+ dict_build_signature,
-+ NULL,
-+ NULL
-+};
-+
-+static dbus_bool_t arrays_write_fixed_in_blocks = FALSE;
-+
-+static const TestTypeNodeClass array_0_class = {
-+ DBUS_TYPE_ARRAY,
-+ sizeof (TestTypeNodeContainer),
-+ 0, /* number of array elements */
-+ NULL,
-+ container_destroy,
-+ array_write_value,
-+ array_read_value,
-+ array_set_value,
-+ array_build_signature,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass array_1_class = {
-+ DBUS_TYPE_ARRAY,
-+ sizeof (TestTypeNodeContainer),
-+ 1, /* number of array elements */
-+ NULL,
-+ container_destroy,
-+ array_write_value,
-+ array_read_value,
-+ array_set_value,
-+ array_build_signature,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass array_2_class = {
-+ DBUS_TYPE_ARRAY,
-+ sizeof (TestTypeNodeContainer),
-+ 2, /* number of array elements */
-+ NULL,
-+ container_destroy,
-+ array_write_value,
-+ array_read_value,
-+ array_set_value,
-+ array_build_signature,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass array_9_class = {
-+ DBUS_TYPE_ARRAY,
-+ sizeof (TestTypeNodeContainer),
-+ 9, /* number of array elements */
-+ NULL,
-+ container_destroy,
-+ array_write_value,
-+ array_read_value,
-+ array_set_value,
-+ array_build_signature,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass variant_class = {
-+ DBUS_TYPE_VARIANT,
-+ sizeof (TestTypeNodeContainer),
-+ 0,
-+ NULL,
-+ container_destroy,
-+ variant_write_value,
-+ variant_read_value,
-+ variant_set_value,
-+ NULL,
-+ NULL,
-+ NULL
-+};
-+
-+static const TestTypeNodeClass* const
-+basic_nodes[] = {
-+ &int16_class,
-+ &uint16_class,
-+ &int32_class,
-+ &uint32_class,
-+ &int64_class,
-+ &uint64_class,
-+ &bool_class,
-+ &byte_class,
-+ &double_class,
-+ &string_0_class,
-+ &string_1_class,
-+ &string_3_class,
-+ &string_8_class,
-+ &object_path_class,
-+ &signature_class
-+};
-+#define N_BASICS (_DBUS_N_ELEMENTS (basic_nodes))
-+
-+static const TestTypeNodeClass* const
-+container_nodes[] = {
-+ &struct_1_class,
-+ &array_1_class,
-+ &struct_2_class,
-+ &array_0_class,
-+ &array_2_class,
-+ &variant_class,
-+ &dict_1_class /* last since we want struct and array before it */
-+ /* array_9_class is omitted on purpose, it's too slow;
-+ * we only use it in one hardcoded test below
-+ */
-+};
-+#define N_CONTAINERS (_DBUS_N_ELEMENTS (container_nodes))
-+
-+static TestTypeNode*
-+node_new (const TestTypeNodeClass *klass)
-+{
-+ TestTypeNode *node;
-+
-+ node = dbus_malloc0 (klass->instance_size);
-+ if (node == NULL)
-+ return NULL;
-+
-+ node->klass = klass;
-+
-+ if (klass->construct)
-+ {
-+ if (!(* klass->construct) (node))
-+ {
-+ dbus_free (node);
-+ return FALSE;
-+ }
-+ }
-+
-+ return node;
-+}
-+
-+static void
-+node_destroy (TestTypeNode *node)
-+{
-+ if (node->klass->destroy)
-+ (* node->klass->destroy) (node);
-+ dbus_free (node);
-+}
-+
-+static dbus_bool_t
-+node_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ dbus_bool_t retval;
-+
-+ retval = (* node->klass->write_value) (node, block, writer, seed);
-+
-+#if 0
-+ /* Handy to see where things break, but too expensive to do all the time */
-+ data_block_verify (block);
-+#endif
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+node_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ DBusTypeMark mark;
-+ DBusTypeReader restored;
-+
-+ _dbus_type_reader_save_mark (reader, &mark);
-+
-+ if (!(* node->klass->read_value) (node, reader, seed))
-+ return FALSE;
-+
-+ _dbus_type_reader_init_from_mark (&restored,
-+ reader->byte_order,
-+ reader->type_str,
-+ reader->value_str,
-+ &mark);
-+
-+ if (!(* node->klass->read_value) (node, &restored, seed))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/* Warning: if this one fails due to OOM, it has side effects (can
-+ * modify only some of the sub-values). OK in a test suite, but we
-+ * never do this in real code.
-+ */
-+static dbus_bool_t
-+node_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ if (!(* node->klass->set_value) (node, reader, realign_root, seed))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+node_build_signature (TestTypeNode *node,
-+ DBusString *str)
-+{
-+ if (node->klass->build_signature)
-+ return (* node->klass->build_signature) (node, str);
-+ else
-+ return _dbus_string_append_byte (str, node->klass->typecode);
-+}
-+
-+static dbus_bool_t
-+node_append_child (TestTypeNode *node,
-+ TestTypeNode *child)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+
-+ _dbus_assert (node->klass->instance_size >= (int) sizeof (TestTypeNodeContainer));
-+
-+ if (!_dbus_list_append (&container->children, child))
-+ _dbus_assert_not_reached ("no memory"); /* we never check the return value on node_append_child anyhow - it's run from outside the malloc-failure test code */
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+node_write_multi (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed,
-+ int n_copies)
-+{
-+ dbus_bool_t retval;
-+
-+ _dbus_assert (node->klass->write_multi != NULL);
-+ retval = (* node->klass->write_multi) (node, block, writer, seed, n_copies);
-+
-+#if 0
-+ /* Handy to see where things break, but too expensive to do all the time */
-+ data_block_verify (block);
-+#endif
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+node_read_multi (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed,
-+ int n_copies)
-+{
-+ _dbus_assert (node->klass->read_multi != NULL);
-+
-+ if (!(* node->klass->read_multi) (node, reader, seed, n_copies))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+static int n_iterations_completed_total = 0;
-+static int n_iterations_completed_this_test = 0;
-+static int n_iterations_expected_this_test = 0;
-+
-+typedef struct
-+{
-+ const DBusString *signature;
-+ DataBlock *block;
-+ int type_offset;
-+ TestTypeNode **nodes;
-+ int n_nodes;
-+} NodeIterationData;
-+
-+static dbus_bool_t
-+run_test_copy (NodeIterationData *nid)
-+{
-+ DataBlock *src;
-+ DataBlock dest;
-+ dbus_bool_t retval;
-+ DBusTypeReader reader;
-+ DBusTypeWriter writer;
-+
-+ _dbus_verbose ("%s\n", _DBUS_FUNCTION_NAME);
-+
-+ src = nid->block;
-+
-+ retval = FALSE;
-+
-+ if (!data_block_init (&dest, src->byte_order, src->initial_offset))
-+ return FALSE;
-+
-+ data_block_init_reader_writer (src, &reader, NULL);
-+ data_block_init_reader_writer (&dest, NULL, &writer);
-+
-+ /* DBusTypeWriter assumes it's writing into an existing signature,
-+ * so doesn't add nul on its own. We have to do that.
-+ */
-+ if (!_dbus_string_insert_byte (&dest.signature,
-+ dest.initial_offset, '\0'))
-+ goto out;
-+
-+ if (!_dbus_type_writer_write_reader (&writer, &reader))
-+ goto out;
-+
-+ /* Data blocks should now be identical */
-+ if (!_dbus_string_equal (&src->signature, &dest.signature))
-+ {
-+ _dbus_verbose ("SOURCE\n");
-+ _dbus_verbose_bytes_of_string (&src->signature, 0,
-+ _dbus_string_get_length (&src->signature));
-+ _dbus_verbose ("DEST\n");
-+ _dbus_verbose_bytes_of_string (&dest.signature, 0,
-+ _dbus_string_get_length (&dest.signature));
-+ _dbus_assert_not_reached ("signatures did not match");
-+ }
-+
-+ if (!_dbus_string_equal (&src->body, &dest.body))
-+ {
-+ _dbus_verbose ("SOURCE\n");
-+ _dbus_verbose_bytes_of_string (&src->body, 0,
-+ _dbus_string_get_length (&src->body));
-+ _dbus_verbose ("DEST\n");
-+ _dbus_verbose_bytes_of_string (&dest.body, 0,
-+ _dbus_string_get_length (&dest.body));
-+ _dbus_assert_not_reached ("bodies did not match");
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+
-+ data_block_free (&dest);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+run_test_values_only_write (NodeIterationData *nid)
-+{
-+ DBusTypeReader reader;
-+ DBusTypeWriter writer;
-+ int i;
-+ dbus_bool_t retval;
-+ int sig_len;
-+
-+ _dbus_verbose ("%s\n", _DBUS_FUNCTION_NAME);
-+
-+ retval = FALSE;
-+
-+ data_block_reset (nid->block);
-+
-+ sig_len = _dbus_string_get_length (nid->signature);
-+
-+ _dbus_type_writer_init_values_only (&writer,
-+ nid->block->byte_order,
-+ nid->signature, 0,
-+ &nid->block->body,
-+ _dbus_string_get_length (&nid->block->body) - N_FENCE_BYTES);
-+ _dbus_type_reader_init (&reader,
-+ nid->block->byte_order,
-+ nid->signature, 0,
-+ &nid->block->body,
-+ nid->block->initial_offset);
-+
-+ i = 0;
-+ while (i < nid->n_nodes)
-+ {
-+ if (!node_write_value (nid->nodes[i], nid->block, &writer, i))
-+ goto out;
-+
-+ ++i;
-+ }
-+
-+ /* if we wrote any typecodes then this would fail */
-+ _dbus_assert (sig_len == _dbus_string_get_length (nid->signature));
-+
-+ /* But be sure we wrote out the values correctly */
-+ i = 0;
-+ while (i < nid->n_nodes)
-+ {
-+ if (!node_read_value (nid->nodes[i], &reader, i))
-+ goto out;
-+
-+ if (i + 1 == nid->n_nodes)
-+ NEXT_EXPECTING_FALSE (&reader);
-+ else
-+ NEXT_EXPECTING_TRUE (&reader);
-+
-+ ++i;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ data_block_reset (nid->block);
-+ return retval;
-+}
-+
-+/* offset the seed for setting, so we set different numbers than
-+ * we originally wrote. Don't offset by a huge number since in
-+ * some cases it's value = possibilities[seed % n_possibilities]
-+ * and we don't want to wrap around. bool_from_seed
-+ * is just seed % 2 even.
-+ */
-+#define SET_SEED 1
-+static dbus_bool_t
-+run_test_set_values (NodeIterationData *nid)
-+{
-+ DBusTypeReader reader;
-+ DBusTypeReader realign_root;
-+ dbus_bool_t retval;
-+ int i;
-+
-+ _dbus_verbose ("%s\n", _DBUS_FUNCTION_NAME);
-+
-+ retval = FALSE;
-+
-+ data_block_init_reader_writer (nid->block,
-+ &reader, NULL);
-+
-+ realign_root = reader;
-+
-+ i = 0;
-+ while (i < nid->n_nodes)
-+ {
-+ if (!node_set_value (nid->nodes[i],
-+ &reader, &realign_root,
-+ i + SET_SEED))
-+ goto out;
-+
-+ if (i + 1 == nid->n_nodes)
-+ NEXT_EXPECTING_FALSE (&reader);
-+ else
-+ NEXT_EXPECTING_TRUE (&reader);
-+
-+ ++i;
-+ }
-+
-+ /* Check that the new values were set */
-+
-+ reader = realign_root;
-+
-+ i = 0;
-+ while (i < nid->n_nodes)
-+ {
-+ if (!node_read_value (nid->nodes[i], &reader,
-+ i + SET_SEED))
-+ goto out;
-+
-+ if (i + 1 == nid->n_nodes)
-+ NEXT_EXPECTING_FALSE (&reader);
-+ else
-+ NEXT_EXPECTING_TRUE (&reader);
-+
-+ ++i;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+run_test_delete_values (NodeIterationData *nid)
-+{
-+ DBusTypeReader reader;
-+ dbus_bool_t retval;
-+ int t;
-+
-+ _dbus_verbose ("%s\n", _DBUS_FUNCTION_NAME);
-+
-+ retval = FALSE;
-+
-+ data_block_init_reader_writer (nid->block,
-+ &reader, NULL);
-+
-+ while ((t = _dbus_type_reader_get_current_type (&reader)) != DBUS_TYPE_INVALID)
-+ {
-+ /* Right now, deleting only works on array elements. We delete
-+ * all array elements, and then verify that there aren't any
-+ * left.
-+ */
-+ if (t == DBUS_TYPE_ARRAY)
-+ {
-+ DBusTypeReader array;
-+ int n_elements;
-+ int elem_type;
-+
-+ _dbus_type_reader_recurse (&reader, &array);
-+ n_elements = 0;
-+ while (_dbus_type_reader_get_current_type (&array) != DBUS_TYPE_INVALID)
-+ {
-+ n_elements += 1;
-+ _dbus_type_reader_next (&array);
-+ }
-+
-+ /* reset to start of array */
-+ _dbus_type_reader_recurse (&reader, &array);
-+ _dbus_verbose ("recursing into deletion loop reader.value_pos = %d array.value_pos = %d array.u.start_pos = %d\n",
-+ reader.value_pos, array.value_pos, array.u.array.start_pos);
-+ while ((elem_type = _dbus_type_reader_get_current_type (&array)) != DBUS_TYPE_INVALID)
-+ {
-+ /* We don't want to always delete from the same part of the array. */
-+ static int cycle = 0;
-+ int elem;
-+
-+ _dbus_assert (n_elements > 0);
-+
-+ elem = cycle;
-+ if (elem == 3 || elem >= n_elements) /* end of array */
-+ elem = n_elements - 1;
-+
-+ _dbus_verbose ("deleting array element %d of %d type %s cycle %d reader pos %d elem pos %d\n",
-+ elem, n_elements, _dbus_type_to_string (elem_type),
-+ cycle, reader.value_pos, array.value_pos);
-+ while (elem > 0)
-+ {
-+ if (!_dbus_type_reader_next (&array))
-+ _dbus_assert_not_reached ("should have had another element\n");
-+ --elem;
-+ }
-+
-+ if (!_dbus_type_reader_delete (&array, &reader))
-+ goto out;
-+
-+ n_elements -= 1;
-+
-+ /* reset */
-+ _dbus_type_reader_recurse (&reader, &array);
-+
-+ if (cycle > 2)
-+ cycle = 0;
-+ else
-+ cycle += 1;
-+ }
-+ }
-+ _dbus_type_reader_next (&reader);
-+ }
-+
-+ /* Check that there are no array elements left */
-+ data_block_init_reader_writer (nid->block,
-+ &reader, NULL);
-+
-+ while ((t = _dbus_type_reader_get_current_type (&reader)) != DBUS_TYPE_INVALID)
-+ {
-+ _dbus_type_reader_next (&reader);
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+run_test_nodes_iteration (void *data)
-+{
-+ NodeIterationData *nid = data;
-+ DBusTypeReader reader;
-+ DBusTypeWriter writer;
-+ int i;
-+ dbus_bool_t retval;
-+
-+ /* Stuff to do:
-+ * 1. write the value
-+ * 2. strcmp-compare with the signature we built
-+ * 3. read the value
-+ * 4. type-iterate the signature and the value and see if they are the same type-wise
-+ */
-+ retval = FALSE;
-+
-+ data_block_init_reader_writer (nid->block,
-+ &reader, &writer);
-+
-+ /* DBusTypeWriter assumes it's writing into an existing signature,
-+ * so doesn't add nul on its own. We have to do that.
-+ */
-+ if (!_dbus_string_insert_byte (&nid->block->signature,
-+ nid->type_offset, '\0'))
-+ goto out;
-+
-+ i = 0;
-+ while (i < nid->n_nodes)
-+ {
-+ if (!node_write_value (nid->nodes[i], nid->block, &writer, i))
-+ goto out;
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_string_equal_substring (nid->signature, 0, _dbus_string_get_length (nid->signature),
-+ &nid->block->signature, nid->type_offset))
-+ {
-+ _dbus_warn ("Expected signature '%s' and got '%s' with initial offset %d\n",
-+ _dbus_string_get_const_data (nid->signature),
-+ _dbus_string_get_const_data_len (&nid->block->signature, nid->type_offset, 0),
-+ nid->type_offset);
-+ _dbus_assert_not_reached ("wrong signature");
-+ }
-+
-+ i = 0;
-+ while (i < nid->n_nodes)
-+ {
-+ if (!node_read_value (nid->nodes[i], &reader, i))
-+ goto out;
-+
-+ if (i + 1 == nid->n_nodes)
-+ NEXT_EXPECTING_FALSE (&reader);
-+ else
-+ NEXT_EXPECTING_TRUE (&reader);
-+
-+ ++i;
-+ }
-+
-+ if (n_iterations_expected_this_test <= MAX_ITERATIONS_FOR_EXPENSIVE_TESTS)
-+ {
-+ /* this set values test uses code from copy and
-+ * values_only_write so would ideally be last so you get a
-+ * simpler test case for problems with copying or values_only
-+ * writing; but it also needs an already-written DataBlock so it
-+ * has to go first. Comment it out if it breaks, and see if the
-+ * later tests also break - debug them first if so.
-+ */
-+ if (!run_test_set_values (nid))
-+ goto out;
-+
-+ if (!run_test_delete_values (nid))
-+ goto out;
-+
-+ if (!run_test_copy (nid))
-+ goto out;
-+
-+ if (!run_test_values_only_write (nid))
-+ goto out;
-+ }
-+
-+ /* FIXME type-iterate both signature and value and compare the resulting
-+ * tree to the node tree perhaps
-+ */
-+
-+ retval = TRUE;
-+
-+ out:
-+
-+ data_block_reset (nid->block);
-+
-+ return retval;
-+}
-+
-+static void
-+run_test_nodes_in_one_configuration (TestTypeNode **nodes,
-+ int n_nodes,
-+ const DBusString *signature,
-+ int byte_order,
-+ int initial_offset)
-+{
-+ DataBlock block;
-+ NodeIterationData nid;
-+
-+ if (!data_block_init (&block, byte_order, initial_offset))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ nid.signature = signature;
-+ nid.block = █
-+ nid.type_offset = initial_offset;
-+ nid.nodes = nodes;
-+ nid.n_nodes = n_nodes;
-+
-+ if (TEST_OOM_HANDLING &&
-+ n_iterations_expected_this_test <= MAX_ITERATIONS_FOR_EXPENSIVE_TESTS)
-+ {
-+ _dbus_test_oom_handling ("running test node",
-+ run_test_nodes_iteration,
-+ &nid);
-+ }
-+ else
-+ {
-+ if (!run_test_nodes_iteration (&nid))
-+ _dbus_assert_not_reached ("no memory");
-+ }
-+
-+ data_block_free (&block);
-+}
-+
-+static void
-+run_test_nodes (TestTypeNode **nodes,
-+ int n_nodes)
-+{
-+ int i;
-+ DBusString signature;
-+
-+ if (!_dbus_string_init (&signature))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ i = 0;
-+ while (i < n_nodes)
-+ {
-+ if (! node_build_signature (nodes[i], &signature))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ ++i;
-+ }
-+
-+ _dbus_verbose (">>> test nodes with signature '%s'\n",
-+ _dbus_string_get_const_data (&signature));
-+
-+ i = 0;
-+ while (i <= MAX_INITIAL_OFFSET)
-+ {
-+ run_test_nodes_in_one_configuration (nodes, n_nodes, &signature,
-+ DBUS_LITTLE_ENDIAN, i);
-+ run_test_nodes_in_one_configuration (nodes, n_nodes, &signature,
-+ DBUS_BIG_ENDIAN, i);
-+
-+ ++i;
-+ }
-+
-+ n_iterations_completed_this_test += 1;
-+ n_iterations_completed_total += 1;
-+
-+ if (n_iterations_completed_this_test == n_iterations_expected_this_test)
-+ {
-+ fprintf (stderr, " 100%% %d this test (%d cumulative)\n",
-+ n_iterations_completed_this_test,
-+ n_iterations_completed_total);
-+ }
-+ /* this happens to turn out well with mod == 1 */
-+ else if ((n_iterations_completed_this_test %
-+ (int)(n_iterations_expected_this_test / 10.0)) == 1)
-+ {
-+ fprintf (stderr, " %d%% ", (int) (n_iterations_completed_this_test / (double) n_iterations_expected_this_test * 100));
-+ }
-+
-+ _dbus_string_free (&signature);
-+}
-+
-+#define N_VALUES (N_BASICS * N_CONTAINERS + N_BASICS)
-+
-+static TestTypeNode*
-+value_generator (int *ip)
-+{
-+ int i = *ip;
-+ const TestTypeNodeClass *child_klass;
-+ const TestTypeNodeClass *container_klass;
-+ TestTypeNode *child;
-+ TestTypeNode *node;
-+
-+ _dbus_assert (i <= N_VALUES);
-+
-+ if (i == N_VALUES)
-+ {
-+ return NULL;
-+ }
-+ else if (i < N_BASICS)
-+ {
-+ node = node_new (basic_nodes[i]);
-+ }
-+ else
-+ {
-+ /* imagine an array:
-+ * container 0 of basic 0
-+ * container 0 of basic 1
-+ * container 0 of basic 2
-+ * container 1 of basic 0
-+ * container 1 of basic 1
-+ * container 1 of basic 2
-+ */
-+ i -= N_BASICS;
-+
-+ container_klass = container_nodes[i / N_BASICS];
-+ child_klass = basic_nodes[i % N_BASICS];
-+
-+ node = node_new (container_klass);
-+ child = node_new (child_klass);
-+
-+ node_append_child (node, child);
-+ }
-+
-+ *ip += 1; /* increment the generator */
-+
-+ return node;
-+}
-+
-+static void
-+build_body (TestTypeNode **nodes,
-+ int n_nodes,
-+ int byte_order,
-+ DBusString *signature,
-+ DBusString *body)
-+{
-+ int i;
-+ DataBlock block;
-+ DBusTypeReader reader;
-+ DBusTypeWriter writer;
-+
-+ i = 0;
-+ while (i < n_nodes)
-+ {
-+ if (! node_build_signature (nodes[i], signature))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ ++i;
-+ }
-+
-+ if (!data_block_init (&block, byte_order, 0))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ data_block_init_reader_writer (&block,
-+ &reader, &writer);
-+
-+ /* DBusTypeWriter assumes it's writing into an existing signature,
-+ * so doesn't add nul on its own. We have to do that.
-+ */
-+ if (!_dbus_string_insert_byte (&block.signature,
-+ 0, '\0'))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ i = 0;
-+ while (i < n_nodes)
-+ {
-+ if (!node_write_value (nodes[i], &block, &writer, i))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_string_copy_len (&block.body, 0,
-+ _dbus_string_get_length (&block.body) - N_FENCE_BYTES,
-+ body, 0))
-+ _dbus_assert_not_reached ("oom");
-+
-+ data_block_free (&block);
-+}
-+
-+dbus_bool_t
-+dbus_internal_do_not_use_generate_bodies (int sequence,
-+ int byte_order,
-+ DBusString *signature,
-+ DBusString *body)
-+{
-+ TestTypeNode *nodes[1];
-+ int i;
-+ int n_nodes;
-+
-+ nodes[0] = value_generator (&sequence);
-+
-+ if (nodes[0] == NULL)
-+ return FALSE;
-+
-+ n_nodes = 1;
-+
-+ build_body (nodes, n_nodes, byte_order, signature, body);
-+
-+
-+ i = 0;
-+ while (i < n_nodes)
-+ {
-+ node_destroy (nodes[i]);
-+ ++i;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+make_and_run_values_inside_container (const TestTypeNodeClass *container_klass,
-+ int n_nested)
-+{
-+ TestTypeNode *root;
-+ TestTypeNode *container;
-+ TestTypeNode *child;
-+ int i;
-+
-+ root = node_new (container_klass);
-+ container = root;
-+ for (i = 1; i < n_nested; i++)
-+ {
-+ child = node_new (container_klass);
-+ node_append_child (container, child);
-+ container = child;
-+ }
-+
-+ /* container should now be the most-nested container */
-+
-+ i = 0;
-+ while ((child = value_generator (&i)))
-+ {
-+ node_append_child (container, child);
-+
-+ run_test_nodes (&root, 1);
-+
-+ _dbus_list_clear (&((TestTypeNodeContainer*)container)->children);
-+ node_destroy (child);
-+ }
-+
-+ node_destroy (root);
-+}
-+
-+static void
-+start_next_test (const char *format,
-+ int expected)
-+{
-+ n_iterations_completed_this_test = 0;
-+ n_iterations_expected_this_test = expected;
-+
-+ fprintf (stderr, ">>> >>> ");
-+ fprintf (stderr, format,
-+ n_iterations_expected_this_test);
-+}
-+
-+static void
-+make_and_run_test_nodes (void)
-+{
-+ int i, j, k, m;
-+
-+ /* We try to do this in order of "complicatedness" so that test
-+ * failures tend to show up in the simplest test case that
-+ * demonstrates the failure. There are also some tests that run
-+ * more than once for this reason, first while going through simple
-+ * cases, second while going through a broader range of complex
-+ * cases.
-+ */
-+ /* Each basic node. The basic nodes should include:
-+ *
-+ * - each fixed-size type (in such a way that it has different values each time,
-+ * so we can tell if we mix two of them up)
-+ * - strings of various lengths
-+ * - object path
-+ * - signature
-+ */
-+ /* Each container node. The container nodes should include:
-+ *
-+ * struct with 1 and 2 copies of the contained item
-+ * array with 0, 1, 2 copies of the contained item
-+ * variant
-+ */
-+ /* Let a "value" be a basic node, or a container containing a single basic node.
-+ * Let n_values be the number of such values i.e. (n_container * n_basic + n_basic)
-+ * When iterating through all values to make combinations, do the basic types
-+ * first and the containers second.
-+ */
-+ /* Each item is shown with its number of iterations to complete so
-+ * we can keep a handle on this unit test
-+ */
-+
-+ /* FIXME test just an empty body, no types at all */
-+
-+ start_next_test ("Each value by itself %d iterations\n", N_VALUES);
-+ {
-+ TestTypeNode *node;
-+ i = 0;
-+ while ((node = value_generator (&i)))
-+ {
-+ run_test_nodes (&node, 1);
-+
-+ node_destroy (node);
-+ }
-+ }
-+
-+ start_next_test ("Each value by itself with arrays as blocks %d iterations\n", N_VALUES);
-+ arrays_write_fixed_in_blocks = TRUE;
-+ {
-+ TestTypeNode *node;
-+ i = 0;
-+ while ((node = value_generator (&i)))
-+ {
-+ run_test_nodes (&node, 1);
-+
-+ node_destroy (node);
-+ }
-+ }
-+ arrays_write_fixed_in_blocks = FALSE;
-+
-+ start_next_test ("All values in one big toplevel %d iteration\n", 1);
-+ {
-+ TestTypeNode *nodes[N_VALUES];
-+
-+ i = 0;
-+ while ((nodes[i] = value_generator (&i)))
-+ ;
-+
-+ run_test_nodes (nodes, N_VALUES);
-+
-+ for (i = 0; i < N_VALUES; i++)
-+ node_destroy (nodes[i]);
-+ }
-+
-+ start_next_test ("Each value,value pair combination as toplevel, in both orders %d iterations\n",
-+ N_VALUES * N_VALUES);
-+ {
-+ TestTypeNode *nodes[2];
-+
-+ i = 0;
-+ while ((nodes[0] = value_generator (&i)))
-+ {
-+ j = 0;
-+ while ((nodes[1] = value_generator (&j)))
-+ {
-+ run_test_nodes (nodes, 2);
-+
-+ node_destroy (nodes[1]);
-+ }
-+
-+ node_destroy (nodes[0]);
-+ }
-+ }
-+
-+ start_next_test ("Each container containing each value %d iterations\n",
-+ N_CONTAINERS * N_VALUES);
-+ for (i = 0; i < N_CONTAINERS; i++)
-+ {
-+ const TestTypeNodeClass *container_klass = container_nodes[i];
-+
-+ make_and_run_values_inside_container (container_klass, 1);
-+ }
-+
-+ start_next_test ("Each container containing each value with arrays as blocks %d iterations\n",
-+ N_CONTAINERS * N_VALUES);
-+ arrays_write_fixed_in_blocks = TRUE;
-+ for (i = 0; i < N_CONTAINERS; i++)
-+ {
-+ const TestTypeNodeClass *container_klass = container_nodes[i];
-+
-+ make_and_run_values_inside_container (container_klass, 1);
-+ }
-+ arrays_write_fixed_in_blocks = FALSE;
-+
-+ start_next_test ("Each container of same container of each value %d iterations\n",
-+ N_CONTAINERS * N_VALUES);
-+ for (i = 0; i < N_CONTAINERS; i++)
-+ {
-+ const TestTypeNodeClass *container_klass = container_nodes[i];
-+
-+ make_and_run_values_inside_container (container_klass, 2);
-+ }
-+
-+ start_next_test ("Each container of same container of same container of each value %d iterations\n",
-+ N_CONTAINERS * N_VALUES);
-+ for (i = 0; i < N_CONTAINERS; i++)
-+ {
-+ const TestTypeNodeClass *container_klass = container_nodes[i];
-+
-+ make_and_run_values_inside_container (container_klass, 3);
-+ }
-+
-+ start_next_test ("Each value,value pair inside a struct %d iterations\n",
-+ N_VALUES * N_VALUES);
-+ {
-+ TestTypeNode *val1, *val2;
-+ TestTypeNode *node;
-+
-+ node = node_new (&struct_1_class);
-+
-+ i = 0;
-+ while ((val1 = value_generator (&i)))
-+ {
-+ j = 0;
-+ while ((val2 = value_generator (&j)))
-+ {
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+
-+ node_append_child (node, val1);
-+ node_append_child (node, val2);
-+
-+ run_test_nodes (&node, 1);
-+
-+ _dbus_list_clear (&container->children);
-+ node_destroy (val2);
-+ }
-+ node_destroy (val1);
-+ }
-+ node_destroy (node);
-+ }
-+
-+ start_next_test ("All values in one big struct %d iteration\n",
-+ 1);
-+ {
-+ TestTypeNode *node;
-+ TestTypeNode *child;
-+
-+ node = node_new (&struct_1_class);
-+
-+ i = 0;
-+ while ((child = value_generator (&i)))
-+ node_append_child (node, child);
-+
-+ run_test_nodes (&node, 1);
-+
-+ node_destroy (node);
-+ }
-+
-+ start_next_test ("Each value in a large array %d iterations\n",
-+ N_VALUES);
-+ {
-+ TestTypeNode *val;
-+ TestTypeNode *node;
-+
-+ node = node_new (&array_9_class);
-+
-+ i = 0;
-+ while ((val = value_generator (&i)))
-+ {
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+
-+ node_append_child (node, val);
-+
-+ run_test_nodes (&node, 1);
-+
-+ _dbus_list_clear (&container->children);
-+ node_destroy (val);
-+ }
-+
-+ node_destroy (node);
-+ }
-+
-+ start_next_test ("Each container of each container of each value %d iterations\n",
-+ N_CONTAINERS * N_CONTAINERS * N_VALUES);
-+ for (i = 0; i < N_CONTAINERS; i++)
-+ {
-+ const TestTypeNodeClass *outer_container_klass = container_nodes[i];
-+ TestTypeNode *outer_container = node_new (outer_container_klass);
-+
-+ for (j = 0; j < N_CONTAINERS; j++)
-+ {
-+ TestTypeNode *child;
-+ const TestTypeNodeClass *inner_container_klass = container_nodes[j];
-+ TestTypeNode *inner_container = node_new (inner_container_klass);
-+
-+ node_append_child (outer_container, inner_container);
-+
-+ m = 0;
-+ while ((child = value_generator (&m)))
-+ {
-+ node_append_child (inner_container, child);
-+
-+ run_test_nodes (&outer_container, 1);
-+
-+ _dbus_list_clear (&((TestTypeNodeContainer*)inner_container)->children);
-+ node_destroy (child);
-+ }
-+ _dbus_list_clear (&((TestTypeNodeContainer*)outer_container)->children);
-+ node_destroy (inner_container);
-+ }
-+ node_destroy (outer_container);
-+ }
-+
-+ start_next_test ("Each container of each container of each container of each value %d iterations\n",
-+ N_CONTAINERS * N_CONTAINERS * N_CONTAINERS * N_VALUES);
-+ for (i = 0; i < N_CONTAINERS; i++)
-+ {
-+ const TestTypeNodeClass *outer_container_klass = container_nodes[i];
-+ TestTypeNode *outer_container = node_new (outer_container_klass);
-+
-+ for (j = 0; j < N_CONTAINERS; j++)
-+ {
-+ const TestTypeNodeClass *inner_container_klass = container_nodes[j];
-+ TestTypeNode *inner_container = node_new (inner_container_klass);
-+
-+ node_append_child (outer_container, inner_container);
-+
-+ for (k = 0; k < N_CONTAINERS; k++)
-+ {
-+ TestTypeNode *child;
-+ const TestTypeNodeClass *center_container_klass = container_nodes[k];
-+ TestTypeNode *center_container = node_new (center_container_klass);
-+
-+ node_append_child (inner_container, center_container);
-+
-+ m = 0;
-+ while ((child = value_generator (&m)))
-+ {
-+ node_append_child (center_container, child);
-+
-+ run_test_nodes (&outer_container, 1);
-+
-+ _dbus_list_clear (&((TestTypeNodeContainer*)center_container)->children);
-+ node_destroy (child);
-+ }
-+ _dbus_list_clear (&((TestTypeNodeContainer*)inner_container)->children);
-+ node_destroy (center_container);
-+ }
-+ _dbus_list_clear (&((TestTypeNodeContainer*)outer_container)->children);
-+ node_destroy (inner_container);
-+ }
-+ node_destroy (outer_container);
-+ }
-+
-+#if 0
-+ /* This one takes a really long time, so comment it out for now */
-+ start_next_test ("Each value,value,value triplet combination as toplevel, in all orders %d iterations\n",
-+ N_VALUES * N_VALUES * N_VALUES);
-+ {
-+ TestTypeNode *nodes[3];
-+
-+ i = 0;
-+ while ((nodes[0] = value_generator (&i)))
-+ {
-+ j = 0;
-+ while ((nodes[1] = value_generator (&j)))
-+ {
-+ k = 0;
-+ while ((nodes[2] = value_generator (&k)))
-+ {
-+ run_test_nodes (nodes, 3);
-+
-+ node_destroy (nodes[2]);
-+ }
-+ node_destroy (nodes[1]);
-+ }
-+ node_destroy (nodes[0]);
-+ }
-+ }
-+#endif /* #if 0 expensive test */
-+
-+ fprintf (stderr, "%d total iterations of recursive marshaling tests\n",
-+ n_iterations_completed_total);
-+ fprintf (stderr, "each iteration ran at initial offsets 0 through %d in both big and little endian\n",
-+ MAX_INITIAL_OFFSET);
-+ fprintf (stderr, "out of memory handling %s tested\n",
-+ TEST_OOM_HANDLING ? "was" : "was not");
-+}
-+
-+dbus_bool_t
-+_dbus_marshal_recursive_test (void)
-+{
-+ make_and_run_test_nodes ();
-+
-+ return TRUE;
-+}
-+
-+/*
-+ *
-+ *
-+ * Implementations of each type node class
-+ *
-+ *
-+ *
-+ */
-+#define MAX_MULTI_COUNT 5
-+
-+#define SAMPLE_INT16 1234
-+#define SAMPLE_INT16_ALTERNATE 6785
-+static dbus_int16_t
-+int16_from_seed (int seed)
-+{
-+ /* Generate an integer value that's predictable from seed. We could
-+ * just use seed itself, but that would only ever touch one byte of
-+ * the int so would miss some kinds of bug.
-+ */
-+ dbus_int16_t v;
-+
-+ v = 42; /* just to quiet compiler afaik */
-+ switch (seed % 5)
-+ {
-+ case 0:
-+ v = SAMPLE_INT16;
-+ break;
-+ case 1:
-+ v = SAMPLE_INT16_ALTERNATE;
-+ break;
-+ case 2:
-+ v = -1;
-+ break;
-+ case 3:
-+ v = _DBUS_INT16_MAX;
-+ break;
-+ case 4:
-+ v = 1;
-+ break;
-+ }
-+
-+ if (seed > 1)
-+ v *= seed; /* wraps around eventually, which is fine */
-+
-+ return v;
-+}
-+
-+static dbus_bool_t
-+int16_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ /* also used for uint16 */
-+ dbus_int16_t v;
-+
-+ v = int16_from_seed (seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v);
-+}
-+
-+static dbus_bool_t
-+int16_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ /* also used for uint16 */
-+ dbus_int16_t v;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (dbus_int16_t*) &v);
-+
-+ _dbus_assert (v == int16_from_seed (seed));
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+int16_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ /* also used for uint16 */
-+ dbus_int16_t v;
-+
-+ v = int16_from_seed (seed);
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v,
-+ realign_root);
-+}
-+
-+static dbus_bool_t
-+int16_write_multi (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed,
-+ int count)
-+{
-+ /* also used for uint16 */
-+ dbus_int16_t values[MAX_MULTI_COUNT];
-+ dbus_int16_t *v_ARRAY_INT16 = values;
-+ int i;
-+
-+ for (i = 0; i < count; ++i)
-+ values[i] = int16_from_seed (seed + i);
-+
-+ return _dbus_type_writer_write_fixed_multi (writer,
-+ node->klass->typecode,
-+ &v_ARRAY_INT16, count);
-+}
-+
-+static dbus_bool_t
-+int16_read_multi (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed,
-+ int count)
-+{
-+ /* also used for uint16 */
-+ dbus_int16_t *values;
-+ int n_elements;
-+ int i;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_fixed_multi (reader,
-+ &values,
-+ &n_elements);
-+
-+ if (n_elements != count)
-+ _dbus_warn ("got %d elements expected %d\n", n_elements, count);
-+ _dbus_assert (n_elements == count);
-+
-+ for (i = 0; i < count; i++)
-+ _dbus_assert (((dbus_int16_t)_dbus_unpack_uint16 (reader->byte_order,
-+ (const unsigned char*)values + (i * 2))) ==
-+ int16_from_seed (seed + i));
-+
-+ return TRUE;
-+}
-+
-+
-+#define SAMPLE_INT32 12345678
-+#define SAMPLE_INT32_ALTERNATE 53781429
-+static dbus_int32_t
-+int32_from_seed (int seed)
-+{
-+ /* Generate an integer value that's predictable from seed. We could
-+ * just use seed itself, but that would only ever touch one byte of
-+ * the int so would miss some kinds of bug.
-+ */
-+ dbus_int32_t v;
-+
-+ v = 42; /* just to quiet compiler afaik */
-+ switch (seed % 5)
-+ {
-+ case 0:
-+ v = SAMPLE_INT32;
-+ break;
-+ case 1:
-+ v = SAMPLE_INT32_ALTERNATE;
-+ break;
-+ case 2:
-+ v = -1;
-+ break;
-+ case 3:
-+ v = _DBUS_INT_MAX;
-+ break;
-+ case 4:
-+ v = 1;
-+ break;
-+ }
-+
-+ if (seed > 1)
-+ v *= seed; /* wraps around eventually, which is fine */
-+
-+ return v;
-+}
-+
-+static dbus_bool_t
-+int32_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ /* also used for uint32 */
-+ dbus_int32_t v;
-+
-+ v = int32_from_seed (seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v);
-+}
-+
-+static dbus_bool_t
-+int32_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ /* also used for uint32 */
-+ dbus_int32_t v;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (dbus_int32_t*) &v);
-+
-+ _dbus_assert (v == int32_from_seed (seed));
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+int32_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ /* also used for uint32 */
-+ dbus_int32_t v;
-+
-+ v = int32_from_seed (seed);
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v,
-+ realign_root);
-+}
-+
-+static dbus_bool_t
-+int32_write_multi (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed,
-+ int count)
-+{
-+ /* also used for uint32 */
-+ dbus_int32_t values[MAX_MULTI_COUNT];
-+ dbus_int32_t *v_ARRAY_INT32 = values;
-+ int i;
-+
-+ for (i = 0; i < count; ++i)
-+ values[i] = int32_from_seed (seed + i);
-+
-+ return _dbus_type_writer_write_fixed_multi (writer,
-+ node->klass->typecode,
-+ &v_ARRAY_INT32, count);
-+}
-+
-+static dbus_bool_t
-+int32_read_multi (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed,
-+ int count)
-+{
-+ /* also used for uint32 */
-+ dbus_int32_t *values;
-+ int n_elements;
-+ int i;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_fixed_multi (reader,
-+ &values,
-+ &n_elements);
-+
-+ if (n_elements != count)
-+ _dbus_warn ("got %d elements expected %d\n", n_elements, count);
-+ _dbus_assert (n_elements == count);
-+
-+ for (i = 0; i < count; i++)
-+ _dbus_assert (((int)_dbus_unpack_uint32 (reader->byte_order,
-+ (const unsigned char*)values + (i * 4))) ==
-+ int32_from_seed (seed + i));
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_HAVE_INT64
-+static dbus_int64_t
-+int64_from_seed (int seed)
-+{
-+ dbus_int32_t v32;
-+ dbus_int64_t v;
-+
-+ v32 = int32_from_seed (seed);
-+
-+ v = - (dbus_int32_t) ~ v32;
-+ v |= (((dbus_int64_t)v32) << 32);
-+
-+ return v;
-+}
-+#endif
-+
-+static dbus_bool_t
-+int64_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+#ifdef DBUS_HAVE_INT64
-+ /* also used for uint64 */
-+ dbus_int64_t v;
-+
-+ v = int64_from_seed (seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v);
-+#else
-+ return TRUE;
-+#endif
-+}
-+
-+static dbus_bool_t
-+int64_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+#ifdef DBUS_HAVE_INT64
-+ /* also used for uint64 */
-+ dbus_int64_t v;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (dbus_int64_t*) &v);
-+
-+ _dbus_assert (v == int64_from_seed (seed));
-+
-+ return TRUE;
-+#else
-+ return TRUE;
-+#endif
-+}
-+
-+static dbus_bool_t
-+int64_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+#ifdef DBUS_HAVE_INT64
-+ /* also used for uint64 */
-+ dbus_int64_t v;
-+
-+ v = int64_from_seed (seed);
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v,
-+ realign_root);
-+#else
-+ return TRUE;
-+#endif
-+}
-+
-+#define MAX_SAMPLE_STRING_LEN 10
-+static void
-+string_from_seed (char *buf,
-+ int len,
-+ int seed)
-+{
-+ int i;
-+ unsigned char v;
-+
-+ _dbus_assert (len < MAX_SAMPLE_STRING_LEN);
-+
-+ /* vary the length slightly, though we also have multiple string
-+ * value types for this, varying it here tests the set_value code
-+ */
-+ switch (seed % 3)
-+ {
-+ case 1:
-+ len += 2;
-+ break;
-+ case 2:
-+ len -= 2;
-+ break;
-+ }
-+ if (len < 0)
-+ len = 0;
-+
-+ v = (unsigned char) ('A' + seed);
-+
-+ i = 0;
-+ while (i < len)
-+ {
-+ if (v < 'A' || v > 'z')
-+ v = 'A';
-+
-+ buf[i] = v;
-+
-+ v += 1;
-+ ++i;
-+ }
-+
-+ buf[i] = '\0';
-+}
-+
-+static dbus_bool_t
-+string_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ char buf[MAX_SAMPLE_STRING_LEN + 1]="";
-+ const char *v_string = buf;
-+
-+
-+ string_from_seed (buf, node->klass->subclass_detail,
-+ seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v_string);
-+}
-+
-+static dbus_bool_t
-+string_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ const char *v;
-+ char buf[MAX_SAMPLE_STRING_LEN + 1];
-+ v = buf;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (const char **) &v);
-+
-+ string_from_seed (buf, node->klass->subclass_detail,
-+ seed);
-+
-+ if (strcmp (buf, v) != 0)
-+ {
-+ _dbus_warn ("read string '%s' expected '%s'\n",
-+ v, buf);
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+string_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ char buf[MAX_SAMPLE_STRING_LEN + 1];
-+ const char *v_string = buf;
-+
-+ string_from_seed (buf, node->klass->subclass_detail,
-+ seed);
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ {
-+ const char *old;
-+ _dbus_type_reader_read_basic (reader, &old);
-+ _dbus_verbose ("SETTING new string '%s' len %d in place of '%s' len %d\n",
-+ v_string, strlen (v_string), old, strlen (old));
-+ }
-+#endif
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v_string,
-+ realign_root);
-+}
-+
-+#define BOOL_FROM_SEED(seed) ((dbus_bool_t)((seed) % 2))
-+
-+static dbus_bool_t
-+bool_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ dbus_bool_t v;
-+
-+ v = BOOL_FROM_SEED (seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v);
-+}
-+
-+static dbus_bool_t
-+bool_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ dbus_bool_t v;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (unsigned char*) &v);
-+
-+ _dbus_assert (v == BOOL_FROM_SEED (seed));
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+bool_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ dbus_bool_t v;
-+
-+ v = BOOL_FROM_SEED (seed);
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v,
-+ realign_root);
-+}
-+
-+#define BYTE_FROM_SEED(seed) ((unsigned char) int32_from_seed (seed))
-+
-+static dbus_bool_t
-+byte_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ unsigned char v;
-+
-+ v = BYTE_FROM_SEED (seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v);
-+}
-+
-+static dbus_bool_t
-+byte_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ unsigned char v;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (unsigned char*) &v);
-+
-+ _dbus_assert (v == BYTE_FROM_SEED (seed));
-+
-+ return TRUE;
-+}
-+
-+
-+static dbus_bool_t
-+byte_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ unsigned char v;
-+
-+ v = BYTE_FROM_SEED (seed);
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v,
-+ realign_root);
-+}
-+
-+static double
-+double_from_seed (int seed)
-+{
-+ return SAMPLE_INT32 * (double) seed + 0.3;
-+}
-+
-+static dbus_bool_t
-+double_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ double v;
-+
-+ v = double_from_seed (seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v);
-+}
-+
-+static dbus_bool_t
-+double_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ double v;
-+ double expected;
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (double*) &v);
-+
-+ expected = double_from_seed (seed);
-+
-+ if (!_DBUS_DOUBLES_BITWISE_EQUAL (v, expected))
-+ {
-+#ifdef DBUS_HAVE_INT64
-+ _dbus_warn ("Expected double %g got %g\n bits = 0x%llx vs.\n bits = 0x%llx)\n",
-+ expected, v,
-+ *(dbus_uint64_t*)(char*)&expected,
-+ *(dbus_uint64_t*)(char*)&v);
-+#endif
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+double_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ double v;
-+
-+ v = double_from_seed (seed);
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v,
-+ realign_root);
-+}
-+
-+#define MAX_SAMPLE_OBJECT_PATH_LEN 10
-+static void
-+object_path_from_seed (char *buf,
-+ int seed)
-+{
-+ int i;
-+ unsigned char v;
-+ int len;
-+
-+ len = seed % 9;
-+ _dbus_assert (len < MAX_SAMPLE_OBJECT_PATH_LEN);
-+
-+ v = (unsigned char) ('A' + seed);
-+
-+ if (len < 2)
-+ {
-+ buf[0] = '/';
-+ i = 1;
-+ }
-+ else
-+ {
-+ i = 0;
-+ while (i + 1 < len)
-+ {
-+ if (v < 'A' || v > 'z')
-+ v = 'A';
-+
-+ buf[i] = '/';
-+ ++i;
-+ buf[i] = v;
-+ ++i;
-+
-+ v += 1;
-+ }
-+ }
-+
-+ buf[i] = '\0';
-+}
-+
-+static dbus_bool_t
-+object_path_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ char buf[MAX_SAMPLE_OBJECT_PATH_LEN + 1];
-+ const char *v_string = buf;
-+
-+ object_path_from_seed (buf, seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v_string);
-+}
-+
-+static dbus_bool_t
-+object_path_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ const char *v;
-+ char buf[MAX_SAMPLE_OBJECT_PATH_LEN + 1];
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (const char **) &v);
-+
-+ object_path_from_seed (buf, seed);
-+
-+ if (strcmp (buf, v) != 0)
-+ {
-+ _dbus_warn ("read object path '%s' expected '%s'\n",
-+ v, buf);
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+object_path_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ char buf[MAX_SAMPLE_OBJECT_PATH_LEN + 1];
-+ const char *v_string = buf;
-+
-+ object_path_from_seed (buf, seed);
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v_string,
-+ realign_root);
-+}
-+
-+#define MAX_SAMPLE_SIGNATURE_LEN 10
-+static void
-+signature_from_seed (char *buf,
-+ int seed)
-+{
-+ /* try to avoid ascending, descending, or alternating length to help find bugs */
-+ const char *sample_signatures[] = {
-+ "asax"
-+ "",
-+ "asau(xxxx)",
-+ "x",
-+ "ai",
-+ "a(ii)"
-+ };
-+
-+ strcpy (buf, sample_signatures[seed % _DBUS_N_ELEMENTS(sample_signatures)]);
-+}
-+
-+static dbus_bool_t
-+signature_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ char buf[MAX_SAMPLE_SIGNATURE_LEN + 1];
-+ const char *v_string = buf;
-+
-+ signature_from_seed (buf, seed);
-+
-+ return _dbus_type_writer_write_basic (writer,
-+ node->klass->typecode,
-+ &v_string);
-+}
-+
-+static dbus_bool_t
-+signature_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ const char *v;
-+ char buf[MAX_SAMPLE_SIGNATURE_LEN + 1];
-+
-+ check_expected_type (reader, node->klass->typecode);
-+
-+ _dbus_type_reader_read_basic (reader,
-+ (const char **) &v);
-+
-+ signature_from_seed (buf, seed);
-+
-+ if (strcmp (buf, v) != 0)
-+ {
-+ _dbus_warn ("read signature value '%s' expected '%s'\n",
-+ v, buf);
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+
-+ return TRUE;
-+}
-+
-+
-+static dbus_bool_t
-+signature_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ char buf[MAX_SAMPLE_SIGNATURE_LEN + 1];
-+ const char *v_string = buf;
-+
-+ signature_from_seed (buf, seed);
-+
-+ return _dbus_type_reader_set_basic (reader,
-+ &v_string,
-+ realign_root);
-+}
-+
-+static dbus_bool_t
-+struct_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DataBlockState saved;
-+ DBusTypeWriter sub;
-+ int i;
-+ int n_copies;
-+
-+ n_copies = node->klass->subclass_detail;
-+
-+ _dbus_assert (container->children != NULL);
-+
-+ data_block_save (block, &saved);
-+
-+ if (!_dbus_type_writer_recurse (writer, DBUS_TYPE_STRUCT,
-+ NULL, 0,
-+ &sub))
-+ return FALSE;
-+
-+ i = 0;
-+ while (i < n_copies)
-+ {
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&container->children);
-+ while (link != NULL)
-+ {
-+ TestTypeNode *child = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&container->children, link);
-+
-+ if (!node_write_value (child, block, &sub, seed + i))
-+ {
-+ data_block_restore (block, &saved);
-+ return FALSE;
-+ }
-+
-+ link = next;
-+ }
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_type_writer_unrecurse (writer, &sub))
-+ {
-+ data_block_restore (block, &saved);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+struct_read_or_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DBusTypeReader sub;
-+ int i;
-+ int n_copies;
-+
-+ n_copies = node->klass->subclass_detail;
-+
-+ check_expected_type (reader, DBUS_TYPE_STRUCT);
-+
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ i = 0;
-+ while (i < n_copies)
-+ {
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&container->children);
-+ while (link != NULL)
-+ {
-+ TestTypeNode *child = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&container->children, link);
-+
-+ if (realign_root == NULL)
-+ {
-+ if (!node_read_value (child, &sub, seed + i))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (!node_set_value (child, &sub, realign_root, seed + i))
-+ return FALSE;
-+ }
-+
-+ if (i == (n_copies - 1) && next == NULL)
-+ NEXT_EXPECTING_FALSE (&sub);
-+ else
-+ NEXT_EXPECTING_TRUE (&sub);
-+
-+ link = next;
-+ }
-+
-+ ++i;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+struct_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ return struct_read_or_set_value (node, reader, NULL, seed);
-+}
-+
-+static dbus_bool_t
-+struct_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ return struct_read_or_set_value (node, reader, realign_root, seed);
-+}
-+
-+static dbus_bool_t
-+struct_build_signature (TestTypeNode *node,
-+ DBusString *str)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ int i;
-+ int orig_len;
-+ int n_copies;
-+
-+ n_copies = node->klass->subclass_detail;
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ if (!_dbus_string_append_byte (str, DBUS_STRUCT_BEGIN_CHAR))
-+ goto oom;
-+
-+ i = 0;
-+ while (i < n_copies)
-+ {
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&container->children);
-+ while (link != NULL)
-+ {
-+ TestTypeNode *child = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&container->children, link);
-+
-+ if (!node_build_signature (child, str))
-+ goto oom;
-+
-+ link = next;
-+ }
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_string_append_byte (str, DBUS_STRUCT_END_CHAR))
-+ goto oom;
-+
-+ return TRUE;
-+
-+ oom:
-+ _dbus_string_set_length (str, orig_len);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+array_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DataBlockState saved;
-+ DBusTypeWriter sub;
-+ DBusString element_signature;
-+ int i;
-+ int n_copies;
-+ int element_type;
-+ TestTypeNode *child;
-+
-+ n_copies = node->klass->subclass_detail;
-+
-+ _dbus_assert (container->children != NULL);
-+
-+ data_block_save (block, &saved);
-+
-+ if (!_dbus_string_init (&element_signature))
-+ return FALSE;
-+
-+ child = _dbus_list_get_first (&container->children);
-+
-+ if (!node_build_signature (child,
-+ &element_signature))
-+ goto oom;
-+
-+ element_type = _dbus_first_type_in_signature (&element_signature, 0);
-+
-+ if (!_dbus_type_writer_recurse (writer, DBUS_TYPE_ARRAY,
-+ &element_signature, 0,
-+ &sub))
-+ goto oom;
-+
-+ if (arrays_write_fixed_in_blocks &&
-+ dbus_type_is_fixed (element_type) &&
-+ child->klass->write_multi)
-+ {
-+ if (!node_write_multi (child, block, &sub, seed, n_copies))
-+ goto oom;
-+ }
-+ else
-+ {
-+ i = 0;
-+ while (i < n_copies)
-+ {
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&container->children);
-+ while (link != NULL)
-+ {
-+ TestTypeNode *child = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&container->children, link);
-+
-+ if (!node_write_value (child, block, &sub, seed + i))
-+ goto oom;
-+
-+ link = next;
-+ }
-+
-+ ++i;
-+ }
-+ }
-+
-+ if (!_dbus_type_writer_unrecurse (writer, &sub))
-+ goto oom;
-+
-+ _dbus_string_free (&element_signature);
-+ return TRUE;
-+
-+ oom:
-+ data_block_restore (block, &saved);
-+ _dbus_string_free (&element_signature);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+array_read_or_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DBusTypeReader sub;
-+ int i;
-+ int n_copies;
-+ TestTypeNode *child;
-+
-+ n_copies = node->klass->subclass_detail;
-+
-+ check_expected_type (reader, DBUS_TYPE_ARRAY);
-+
-+ child = _dbus_list_get_first (&container->children);
-+
-+ if (n_copies > 0)
-+ {
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ if (realign_root == NULL && arrays_write_fixed_in_blocks &&
-+ dbus_type_is_fixed (_dbus_type_reader_get_element_type (reader)) &&
-+ child->klass->read_multi)
-+ {
-+ if (!node_read_multi (child, &sub, seed, n_copies))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ i = 0;
-+ while (i < n_copies)
-+ {
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&container->children);
-+ while (link != NULL)
-+ {
-+ TestTypeNode *child = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&container->children, link);
-+
-+ _dbus_assert (child->klass->typecode ==
-+ _dbus_type_reader_get_element_type (reader));
-+
-+ if (realign_root == NULL)
-+ {
-+ if (!node_read_value (child, &sub, seed + i))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (!node_set_value (child, &sub, realign_root, seed + i))
-+ return FALSE;
-+ }
-+
-+ if (i == (n_copies - 1) && next == NULL)
-+ NEXT_EXPECTING_FALSE (&sub);
-+ else
-+ NEXT_EXPECTING_TRUE (&sub);
-+
-+ link = next;
-+ }
-+
-+ ++i;
-+ }
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+array_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ return array_read_or_set_value (node, reader, NULL, seed);
-+}
-+
-+static dbus_bool_t
-+array_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ return array_read_or_set_value (node, reader, realign_root, seed);
-+}
-+
-+static dbus_bool_t
-+array_build_signature (TestTypeNode *node,
-+ DBusString *str)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ int orig_len;
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ if (!_dbus_string_append_byte (str, DBUS_TYPE_ARRAY))
-+ goto oom;
-+
-+ if (!node_build_signature (_dbus_list_get_first (&container->children),
-+ str))
-+ goto oom;
-+
-+ return TRUE;
-+
-+ oom:
-+ _dbus_string_set_length (str, orig_len);
-+ return FALSE;
-+}
-+
-+ /* 10 is random just to add another seed that we use in the suite */
-+#define VARIANT_SEED 10
-+
-+static dbus_bool_t
-+variant_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DataBlockState saved;
-+ DBusTypeWriter sub;
-+ DBusString content_signature;
-+ TestTypeNode *child;
-+
-+ _dbus_assert (container->children != NULL);
-+ _dbus_assert (_dbus_list_length_is_one (&container->children));
-+
-+ child = _dbus_list_get_first (&container->children);
-+
-+ data_block_save (block, &saved);
-+
-+ if (!_dbus_string_init (&content_signature))
-+ return FALSE;
-+
-+ if (!node_build_signature (child,
-+ &content_signature))
-+ goto oom;
-+
-+ if (!_dbus_type_writer_recurse (writer, DBUS_TYPE_VARIANT,
-+ &content_signature, 0,
-+ &sub))
-+ goto oom;
-+
-+ if (!node_write_value (child, block, &sub, seed + VARIANT_SEED))
-+ goto oom;
-+
-+ if (!_dbus_type_writer_unrecurse (writer, &sub))
-+ goto oom;
-+
-+ _dbus_string_free (&content_signature);
-+ return TRUE;
-+
-+ oom:
-+ data_block_restore (block, &saved);
-+ _dbus_string_free (&content_signature);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+variant_read_or_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DBusTypeReader sub;
-+ TestTypeNode *child;
-+
-+ _dbus_assert (container->children != NULL);
-+ _dbus_assert (_dbus_list_length_is_one (&container->children));
-+
-+ child = _dbus_list_get_first (&container->children);
-+
-+ check_expected_type (reader, DBUS_TYPE_VARIANT);
-+
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ if (realign_root == NULL)
-+ {
-+ if (!node_read_value (child, &sub, seed + VARIANT_SEED))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (!node_set_value (child, &sub, realign_root, seed + VARIANT_SEED))
-+ return FALSE;
-+ }
-+
-+ NEXT_EXPECTING_FALSE (&sub);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+variant_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ return variant_read_or_set_value (node, reader, NULL, seed);
-+}
-+
-+static dbus_bool_t
-+variant_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ return variant_read_or_set_value (node, reader, realign_root, seed);
-+}
-+
-+static dbus_bool_t
-+dict_write_value (TestTypeNode *node,
-+ DataBlock *block,
-+ DBusTypeWriter *writer,
-+ int seed)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DataBlockState saved;
-+ DBusTypeWriter sub;
-+ DBusString entry_value_signature;
-+ DBusString dict_entry_signature;
-+ int i;
-+ int n_entries;
-+ int entry_value_type;
-+ TestTypeNode *child;
-+
-+ n_entries = node->klass->subclass_detail;
-+
-+ _dbus_assert (container->children != NULL);
-+
-+ data_block_save (block, &saved);
-+
-+ if (!_dbus_string_init (&entry_value_signature))
-+ return FALSE;
-+
-+ if (!_dbus_string_init (&dict_entry_signature))
-+ {
-+ _dbus_string_free (&entry_value_signature);
-+ return FALSE;
-+ }
-+
-+ child = _dbus_list_get_first (&container->children);
-+
-+ if (!node_build_signature (child,
-+ &entry_value_signature))
-+ goto oom;
-+
-+ if (!_dbus_string_append (&dict_entry_signature,
-+ DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_INT32_AS_STRING))
-+ goto oom;
-+
-+ if (!_dbus_string_copy (&entry_value_signature, 0,
-+ &dict_entry_signature,
-+ _dbus_string_get_length (&dict_entry_signature)))
-+ goto oom;
-+
-+ if (!_dbus_string_append_byte (&dict_entry_signature,
-+ DBUS_DICT_ENTRY_END_CHAR))
-+ goto oom;
-+
-+ entry_value_type = _dbus_first_type_in_signature (&entry_value_signature, 0);
-+
-+ if (!_dbus_type_writer_recurse (writer, DBUS_TYPE_ARRAY,
-+ &dict_entry_signature, 0,
-+ &sub))
-+ goto oom;
-+
-+ i = 0;
-+ while (i < n_entries)
-+ {
-+ DBusTypeWriter entry_sub;
-+ dbus_int32_t key;
-+
-+ if (!_dbus_type_writer_recurse (&sub, DBUS_TYPE_DICT_ENTRY,
-+ NULL, 0,
-+ &entry_sub))
-+ goto oom;
-+
-+ key = int32_from_seed (seed + i);
-+
-+ if (!_dbus_type_writer_write_basic (&entry_sub,
-+ DBUS_TYPE_INT32,
-+ &key))
-+ goto oom;
-+
-+ if (!node_write_value (child, block, &entry_sub, seed + i))
-+ goto oom;
-+
-+ if (!_dbus_type_writer_unrecurse (&sub, &entry_sub))
-+ goto oom;
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_type_writer_unrecurse (writer, &sub))
-+ goto oom;
-+
-+ _dbus_string_free (&entry_value_signature);
-+ _dbus_string_free (&dict_entry_signature);
-+ return TRUE;
-+
-+ oom:
-+ data_block_restore (block, &saved);
-+ _dbus_string_free (&entry_value_signature);
-+ _dbus_string_free (&dict_entry_signature);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+dict_read_or_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DBusTypeReader sub;
-+ int i;
-+ int n_entries;
-+ TestTypeNode *child;
-+
-+ n_entries = node->klass->subclass_detail;
-+
-+ check_expected_type (reader, DBUS_TYPE_ARRAY);
-+
-+ child = _dbus_list_get_first (&container->children);
-+
-+ if (n_entries > 0)
-+ {
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ check_expected_type (&sub, DBUS_TYPE_DICT_ENTRY);
-+
-+ i = 0;
-+ while (i < n_entries)
-+ {
-+ DBusTypeReader entry_sub;
-+
-+ check_expected_type (&sub, DBUS_TYPE_DICT_ENTRY);
-+
-+ _dbus_type_reader_recurse (&sub, &entry_sub);
-+
-+ if (realign_root == NULL)
-+ {
-+ dbus_int32_t v;
-+
-+ check_expected_type (&entry_sub, DBUS_TYPE_INT32);
-+
-+ _dbus_type_reader_read_basic (&entry_sub,
-+ (dbus_int32_t*) &v);
-+
-+ _dbus_assert (v == int32_from_seed (seed + i));
-+
-+ NEXT_EXPECTING_TRUE (&entry_sub);
-+
-+ if (!node_read_value (child, &entry_sub, seed + i))
-+ return FALSE;
-+
-+ NEXT_EXPECTING_FALSE (&entry_sub);
-+ }
-+ else
-+ {
-+ dbus_int32_t v;
-+
-+ v = int32_from_seed (seed + i);
-+
-+ if (!_dbus_type_reader_set_basic (&entry_sub,
-+ &v,
-+ realign_root))
-+ return FALSE;
-+
-+ NEXT_EXPECTING_TRUE (&entry_sub);
-+
-+ if (!node_set_value (child, &entry_sub, realign_root, seed + i))
-+ return FALSE;
-+
-+ NEXT_EXPECTING_FALSE (&entry_sub);
-+ }
-+
-+ if (i == (n_entries - 1))
-+ NEXT_EXPECTING_FALSE (&sub);
-+ else
-+ NEXT_EXPECTING_TRUE (&sub);
-+
-+ ++i;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+dict_read_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ int seed)
-+{
-+ return dict_read_or_set_value (node, reader, NULL, seed);
-+}
-+
-+static dbus_bool_t
-+dict_set_value (TestTypeNode *node,
-+ DBusTypeReader *reader,
-+ DBusTypeReader *realign_root,
-+ int seed)
-+{
-+ return dict_read_or_set_value (node, reader, realign_root, seed);
-+}
-+
-+static dbus_bool_t
-+dict_build_signature (TestTypeNode *node,
-+ DBusString *str)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ int orig_len;
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ if (!_dbus_string_append_byte (str, DBUS_TYPE_ARRAY))
-+ goto oom;
-+
-+ if (!_dbus_string_append (str, DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_INT32_AS_STRING))
-+ goto oom;
-+
-+ if (!node_build_signature (_dbus_list_get_first (&container->children),
-+ str))
-+ goto oom;
-+
-+ if (!_dbus_string_append_byte (str, DBUS_DICT_ENTRY_END_CHAR))
-+ goto oom;
-+
-+ return TRUE;
-+
-+ oom:
-+ _dbus_string_set_length (str, orig_len);
-+ return FALSE;
-+}
-+
-+static void
-+container_destroy (TestTypeNode *node)
-+{
-+ TestTypeNodeContainer *container = (TestTypeNodeContainer*) node;
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&container->children);
-+ while (link != NULL)
-+ {
-+ TestTypeNode *child = link->data;
-+ DBusList *next = _dbus_list_get_next_link (&container->children, link);
-+
-+ node_destroy (child);
-+
-+ _dbus_list_free_link (link);
-+
-+ link = next;
-+ }
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-recursive.c dbus-0.61/dbus/dbus-marshal-recursive.c
---- dbus-0.61.orig/dbus/dbus-marshal-recursive.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-recursive.c 2005-05-11 20:07:22.000000000 +0200
-@@ -0,0 +1,2831 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-recursive.c Marshalling routines for recursive types
-+ *
-+ * Copyright (C) 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-marshal-recursive.h"
-+#include "dbus-marshal-basic.h"
-+#include "dbus-signature.h"
-+#include "dbus-internals.h"
-+
-+/**
-+ * @addtogroup DBusMarshal
-+ * @{
-+ */
-+
-+/** turn this on to get deluged in TypeReader verbose spam */
-+#define RECURSIVE_MARSHAL_READ_TRACE 0
-+
-+/** turn this on to get deluged in TypeWriter verbose spam */
-+#define RECURSIVE_MARSHAL_WRITE_TRACE 0
-+
-+static void
-+free_fixups (DBusList **fixups)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (fixups);
-+ while (link != NULL)
-+ {
-+ DBusList *next;
-+
-+ next = _dbus_list_get_next_link (fixups, link);
-+
-+ dbus_free (link->data);
-+ _dbus_list_free_link (link);
-+
-+ link = next;
-+ }
-+
-+ *fixups = NULL;
-+}
-+
-+static void
-+apply_and_free_fixups (DBusList **fixups,
-+ DBusTypeReader *reader)
-+{
-+ DBusList *link;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ if (*fixups)
-+ _dbus_verbose (" %d FIXUPS to apply\n",
-+ _dbus_list_get_length (fixups));
-+#endif
-+
-+ link = _dbus_list_get_first_link (fixups);
-+ while (link != NULL)
-+ {
-+ DBusList *next;
-+
-+ next = _dbus_list_get_next_link (fixups, link);
-+
-+ if (reader)
-+ {
-+ DBusArrayLenFixup *f;
-+
-+ f = link->data;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" applying FIXUP to reader %p at pos %d new_len = %d old len %d\n",
-+ reader, f->len_pos_in_reader, f->new_len,
-+ _dbus_marshal_read_uint32 (reader->value_str,
-+ f->len_pos_in_reader,
-+ reader->byte_order, NULL));
-+#endif
-+
-+ _dbus_marshal_set_uint32 ((DBusString*) reader->value_str,
-+ f->len_pos_in_reader,
-+ f->new_len,
-+ reader->byte_order);
-+ }
-+
-+ dbus_free (link->data);
-+ _dbus_list_free_link (link);
-+
-+ link = next;
-+ }
-+
-+ *fixups = NULL;
-+}
-+
-+/**
-+ * Virtual table for a type reader.
-+ */
-+struct DBusTypeReaderClass
-+{
-+ const char *name; /**< name for debugging */
-+ int id; /**< index in all_reader_classes */
-+ dbus_bool_t types_only; /**< only iterates over types, not values */
-+ void (* recurse) (DBusTypeReader *sub,
-+ DBusTypeReader *parent); /**< recurse with this reader as sub */
-+ dbus_bool_t (* check_finished) (const DBusTypeReader *reader); /**< check whether reader is at the end */
-+ void (* next) (DBusTypeReader *reader,
-+ int current_type); /**< go to the next value */
-+ void (* init_from_mark) (DBusTypeReader *reader,
-+ const DBusTypeMark *mark); /**< uncompress from a mark */
-+};
-+
-+static int
-+element_type_get_alignment (const DBusString *str,
-+ int pos)
-+{
-+ return _dbus_type_get_alignment (_dbus_first_type_in_signature (str, pos));
-+}
-+
-+static void
-+reader_init (DBusTypeReader *reader,
-+ int byte_order,
-+ const DBusString *type_str,
-+ int type_pos,
-+ const DBusString *value_str,
-+ int value_pos)
-+{
-+ reader->byte_order = byte_order;
-+ reader->finished = FALSE;
-+ reader->type_str = type_str;
-+ reader->type_pos = type_pos;
-+ reader->value_str = value_str;
-+ reader->value_pos = value_pos;
-+}
-+
-+static void
-+base_reader_recurse (DBusTypeReader *sub,
-+ DBusTypeReader *parent)
-+{
-+ /* point subreader at the same place as parent */
-+ reader_init (sub,
-+ parent->byte_order,
-+ parent->type_str,
-+ parent->type_pos,
-+ parent->value_str,
-+ parent->value_pos);
-+}
-+
-+static void
-+struct_or_dict_entry_types_only_reader_recurse (DBusTypeReader *sub,
-+ DBusTypeReader *parent)
-+{
-+ base_reader_recurse (sub, parent);
-+
-+ _dbus_assert (_dbus_string_get_byte (sub->type_str,
-+ sub->type_pos) == DBUS_STRUCT_BEGIN_CHAR ||
-+ _dbus_string_get_byte (sub->type_str,
-+ sub->type_pos) == DBUS_DICT_ENTRY_BEGIN_CHAR);
-+
-+ sub->type_pos += 1;
-+}
-+
-+static void
-+struct_or_dict_entry_reader_recurse (DBusTypeReader *sub,
-+ DBusTypeReader *parent)
-+{
-+ struct_or_dict_entry_types_only_reader_recurse (sub, parent);
-+
-+ /* struct and dict entry have 8 byte alignment */
-+ sub->value_pos = _DBUS_ALIGN_VALUE (sub->value_pos, 8);
-+}
-+
-+static void
-+array_types_only_reader_recurse (DBusTypeReader *sub,
-+ DBusTypeReader *parent)
-+{
-+ base_reader_recurse (sub, parent);
-+
-+ /* point type_pos at the array element type */
-+ sub->type_pos += 1;
-+
-+ /* Init with values likely to crash things if misused */
-+ sub->u.array.start_pos = _DBUS_INT_MAX;
-+ sub->array_len_offset = 7;
-+}
-+
-+/** compute position of array length given array_len_offset, which is
-+ the offset back from start_pos to end of the len */
-+#define ARRAY_READER_LEN_POS(reader) \
-+ ((reader)->u.array.start_pos - ((int)(reader)->array_len_offset) - 4)
-+
-+static int
-+array_reader_get_array_len (const DBusTypeReader *reader)
-+{
-+ dbus_uint32_t array_len;
-+ int len_pos;
-+
-+ len_pos = ARRAY_READER_LEN_POS (reader);
-+
-+ _dbus_assert (_DBUS_ALIGN_VALUE (len_pos, 4) == (unsigned) len_pos);
-+ array_len = _dbus_unpack_uint32 (reader->byte_order,
-+ _dbus_string_get_const_data_len (reader->value_str, len_pos, 4));
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" reader %p len_pos %d array len %u len_offset %d\n",
-+ reader, len_pos, array_len, reader->array_len_offset);
-+#endif
-+
-+ _dbus_assert (reader->u.array.start_pos - len_pos - 4 < 8);
-+
-+ return array_len;
-+}
-+
-+static void
-+array_reader_recurse (DBusTypeReader *sub,
-+ DBusTypeReader *parent)
-+{
-+ int alignment;
-+ int len_pos;
-+
-+ array_types_only_reader_recurse (sub, parent);
-+
-+ sub->value_pos = _DBUS_ALIGN_VALUE (sub->value_pos, 4);
-+
-+ len_pos = sub->value_pos;
-+
-+ sub->value_pos += 4; /* for the length */
-+
-+ alignment = element_type_get_alignment (sub->type_str,
-+ sub->type_pos);
-+
-+ sub->value_pos = _DBUS_ALIGN_VALUE (sub->value_pos, alignment);
-+
-+ sub->u.array.start_pos = sub->value_pos;
-+ _dbus_assert ((sub->u.array.start_pos - (len_pos + 4)) < 8); /* only 3 bits in array_len_offset */
-+ sub->array_len_offset = sub->u.array.start_pos - (len_pos + 4);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p array start = %d len_offset = %d array len = %d array element type = %s\n",
-+ sub,
-+ sub->u.array.start_pos,
-+ sub->array_len_offset,
-+ array_reader_get_array_len (sub),
-+ _dbus_type_to_string (_dbus_first_type_in_signature (sub->type_str,
-+ sub->type_pos)));
-+#endif
-+}
-+
-+static void
-+variant_reader_recurse (DBusTypeReader *sub,
-+ DBusTypeReader *parent)
-+{
-+ int sig_len;
-+ int contained_alignment;
-+
-+ base_reader_recurse (sub, parent);
-+
-+ /* Variant is 1 byte sig length (without nul), signature with nul,
-+ * padding to 8-boundary, then values
-+ */
-+
-+ sig_len = _dbus_string_get_byte (sub->value_str, sub->value_pos);
-+
-+ sub->type_str = sub->value_str;
-+ sub->type_pos = sub->value_pos + 1;
-+
-+ sub->value_pos = sub->type_pos + sig_len + 1;
-+
-+ contained_alignment = _dbus_type_get_alignment (_dbus_first_type_in_signature (sub->type_str,
-+ sub->type_pos));
-+
-+ sub->value_pos = _DBUS_ALIGN_VALUE (sub->value_pos, contained_alignment);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p variant containing '%s'\n",
-+ sub,
-+ _dbus_string_get_const_data_len (sub->type_str,
-+ sub->type_pos, 0));
-+#endif
-+}
-+
-+static dbus_bool_t
-+array_reader_check_finished (const DBusTypeReader *reader)
-+{
-+ int end_pos;
-+
-+ /* return the array element type if elements remain, and
-+ * TYPE_INVALID otherwise
-+ */
-+
-+ end_pos = reader->u.array.start_pos + array_reader_get_array_len (reader);
-+
-+ _dbus_assert (reader->value_pos <= end_pos);
-+ _dbus_assert (reader->value_pos >= reader->u.array.start_pos);
-+
-+ return reader->value_pos == end_pos;
-+}
-+
-+static void
-+skip_one_complete_type (const DBusString *type_str,
-+ int *type_pos)
-+{
-+ _dbus_type_signature_next (_dbus_string_get_const_data (type_str),
-+ type_pos);
-+}
-+
-+/**
-+ * Skips to the next "complete" type inside a type signature.
-+ * The signature is read starting at type_pos, and the next
-+ * type position is stored in the same variable.
-+ *
-+ * @param type_str a type signature (must be valid)
-+ * @param type_pos an integer position in the type signtaure (in and out)
-+ */
-+void
-+_dbus_type_signature_next (const char *type_str,
-+ int *type_pos)
-+{
-+ const unsigned char *p;
-+ const unsigned char *start;
-+
-+ _dbus_assert (type_str != NULL);
-+ _dbus_assert (type_pos != NULL);
-+
-+ start = type_str;
-+ p = start + *type_pos;
-+
-+ _dbus_assert (*p != DBUS_STRUCT_END_CHAR);
-+ _dbus_assert (*p != DBUS_DICT_ENTRY_END_CHAR);
-+
-+ while (*p == DBUS_TYPE_ARRAY)
-+ ++p;
-+
-+ _dbus_assert (*p != DBUS_STRUCT_END_CHAR);
-+ _dbus_assert (*p != DBUS_DICT_ENTRY_END_CHAR);
-+
-+ if (*p == DBUS_STRUCT_BEGIN_CHAR)
-+ {
-+ int depth;
-+
-+ depth = 1;
-+
-+ while (TRUE)
-+ {
-+ _dbus_assert (*p != DBUS_TYPE_INVALID);
-+
-+ ++p;
-+
-+ _dbus_assert (*p != DBUS_TYPE_INVALID);
-+
-+ if (*p == DBUS_STRUCT_BEGIN_CHAR)
-+ depth += 1;
-+ else if (*p == DBUS_STRUCT_END_CHAR)
-+ {
-+ depth -= 1;
-+ if (depth == 0)
-+ {
-+ ++p;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ else if (*p == DBUS_DICT_ENTRY_BEGIN_CHAR)
-+ {
-+ int depth;
-+
-+ depth = 1;
-+
-+ while (TRUE)
-+ {
-+ _dbus_assert (*p != DBUS_TYPE_INVALID);
-+
-+ ++p;
-+
-+ _dbus_assert (*p != DBUS_TYPE_INVALID);
-+
-+ if (*p == DBUS_DICT_ENTRY_BEGIN_CHAR)
-+ depth += 1;
-+ else if (*p == DBUS_DICT_ENTRY_END_CHAR)
-+ {
-+ depth -= 1;
-+ if (depth == 0)
-+ {
-+ ++p;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ else
-+ {
-+ ++p;
-+ }
-+
-+ *type_pos = (int) (p - start);
-+}
-+
-+static int
-+find_len_of_complete_type (const DBusString *type_str,
-+ int type_pos)
-+{
-+ int end;
-+
-+ end = type_pos;
-+
-+ skip_one_complete_type (type_str, &end);
-+
-+ return end - type_pos;
-+}
-+
-+static void
-+base_reader_next (DBusTypeReader *reader,
-+ int current_type)
-+{
-+ switch (current_type)
-+ {
-+ case DBUS_TYPE_DICT_ENTRY:
-+ case DBUS_TYPE_STRUCT:
-+ case DBUS_TYPE_VARIANT:
-+ /* Scan forward over the entire container contents */
-+ {
-+ DBusTypeReader sub;
-+
-+ if (reader->klass->types_only && current_type == DBUS_TYPE_VARIANT)
-+ ;
-+ else
-+ {
-+ /* Recurse into the struct or variant */
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ /* Skip everything in this subreader */
-+ while (_dbus_type_reader_next (&sub))
-+ {
-+ /* nothing */;
-+ }
-+ }
-+ if (!reader->klass->types_only)
-+ reader->value_pos = sub.value_pos;
-+
-+ /* Now we are at the end of this container; for variants, the
-+ * subreader's type_pos is totally inapplicable (it's in the
-+ * value string) but we know that we increment by one past the
-+ * DBUS_TYPE_VARIANT
-+ */
-+ if (current_type == DBUS_TYPE_VARIANT)
-+ reader->type_pos += 1;
-+ else
-+ reader->type_pos = sub.type_pos;
-+ }
-+ break;
-+
-+ case DBUS_TYPE_ARRAY:
-+ {
-+ if (!reader->klass->types_only)
-+ _dbus_marshal_skip_array (reader->value_str,
-+ _dbus_first_type_in_signature (reader->type_str,
-+ reader->type_pos + 1),
-+ reader->byte_order,
-+ &reader->value_pos);
-+
-+ skip_one_complete_type (reader->type_str, &reader->type_pos);
-+ }
-+ break;
-+
-+ default:
-+ if (!reader->klass->types_only)
-+ _dbus_marshal_skip_basic (reader->value_str,
-+ current_type, reader->byte_order,
-+ &reader->value_pos);
-+
-+ reader->type_pos += 1;
-+ break;
-+ }
-+}
-+
-+static void
-+struct_reader_next (DBusTypeReader *reader,
-+ int current_type)
-+{
-+ int t;
-+
-+ base_reader_next (reader, current_type);
-+
-+ /* for STRUCT containers we return FALSE at the end of the struct,
-+ * for INVALID we return FALSE at the end of the signature.
-+ * In both cases we arrange for get_current_type() to return INVALID
-+ * which is defined to happen iff we're at the end (no more next())
-+ */
-+ t = _dbus_string_get_byte (reader->type_str, reader->type_pos);
-+ if (t == DBUS_STRUCT_END_CHAR)
-+ {
-+ reader->type_pos += 1;
-+ reader->finished = TRUE;
-+ }
-+}
-+
-+static void
-+dict_entry_reader_next (DBusTypeReader *reader,
-+ int current_type)
-+{
-+ int t;
-+
-+ base_reader_next (reader, current_type);
-+
-+ /* for STRUCT containers we return FALSE at the end of the struct,
-+ * for INVALID we return FALSE at the end of the signature.
-+ * In both cases we arrange for get_current_type() to return INVALID
-+ * which is defined to happen iff we're at the end (no more next())
-+ */
-+ t = _dbus_string_get_byte (reader->type_str, reader->type_pos);
-+ if (t == DBUS_DICT_ENTRY_END_CHAR)
-+ {
-+ reader->type_pos += 1;
-+ reader->finished = TRUE;
-+ }
-+}
-+
-+static void
-+array_types_only_reader_next (DBusTypeReader *reader,
-+ int current_type)
-+{
-+ /* We have one "element" to be iterated over
-+ * in each array, which is its element type.
-+ * So the finished flag indicates whether we've
-+ * iterated over it yet or not.
-+ */
-+ reader->finished = TRUE;
-+}
-+
-+static void
-+array_reader_next (DBusTypeReader *reader,
-+ int current_type)
-+{
-+ /* Skip one array element */
-+ int end_pos;
-+
-+ end_pos = reader->u.array.start_pos + array_reader_get_array_len (reader);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" reader %p array next START start_pos = %d end_pos = %d value_pos = %d current_type = %s\n",
-+ reader,
-+ reader->u.array.start_pos,
-+ end_pos, reader->value_pos,
-+ _dbus_type_to_string (current_type));
-+#endif
-+
-+ _dbus_assert (reader->value_pos < end_pos);
-+ _dbus_assert (reader->value_pos >= reader->u.array.start_pos);
-+
-+ switch (_dbus_first_type_in_signature (reader->type_str,
-+ reader->type_pos))
-+ {
-+ case DBUS_TYPE_DICT_ENTRY:
-+ case DBUS_TYPE_STRUCT:
-+ case DBUS_TYPE_VARIANT:
-+ {
-+ DBusTypeReader sub;
-+
-+ /* Recurse into the struct or variant */
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ /* Skip everything in this element */
-+ while (_dbus_type_reader_next (&sub))
-+ {
-+ /* nothing */;
-+ }
-+
-+ /* Now we are at the end of this element */
-+ reader->value_pos = sub.value_pos;
-+ }
-+ break;
-+
-+ case DBUS_TYPE_ARRAY:
-+ {
-+ _dbus_marshal_skip_array (reader->value_str,
-+ _dbus_first_type_in_signature (reader->type_str,
-+ reader->type_pos + 1),
-+ reader->byte_order,
-+ &reader->value_pos);
-+ }
-+ break;
-+
-+ default:
-+ {
-+ _dbus_marshal_skip_basic (reader->value_str,
-+ current_type, reader->byte_order,
-+ &reader->value_pos);
-+ }
-+ break;
-+ }
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" reader %p array next END start_pos = %d end_pos = %d value_pos = %d current_type = %s\n",
-+ reader,
-+ reader->u.array.start_pos,
-+ end_pos, reader->value_pos,
-+ _dbus_type_to_string (current_type));
-+#endif
-+
-+ _dbus_assert (reader->value_pos <= end_pos);
-+
-+ if (reader->value_pos == end_pos)
-+ {
-+ skip_one_complete_type (reader->type_str,
-+ &reader->type_pos);
-+ }
-+}
-+
-+static void
-+array_init_from_mark (DBusTypeReader *reader,
-+ const DBusTypeMark *mark)
-+{
-+ /* Fill in the array-specific fields from the mark. The general
-+ * fields are already filled in.
-+ */
-+ reader->u.array.start_pos = mark->array_start_pos;
-+ reader->array_len_offset = mark->array_len_offset;
-+}
-+
-+static const DBusTypeReaderClass body_reader_class = {
-+ "body", 0,
-+ FALSE,
-+ NULL, /* body is always toplevel, so doesn't get recursed into */
-+ NULL,
-+ base_reader_next,
-+ NULL
-+};
-+
-+static const DBusTypeReaderClass body_types_only_reader_class = {
-+ "body types", 1,
-+ TRUE,
-+ NULL, /* body is always toplevel, so doesn't get recursed into */
-+ NULL,
-+ base_reader_next,
-+ NULL
-+};
-+
-+static const DBusTypeReaderClass struct_reader_class = {
-+ "struct", 2,
-+ FALSE,
-+ struct_or_dict_entry_reader_recurse,
-+ NULL,
-+ struct_reader_next,
-+ NULL
-+};
-+
-+static const DBusTypeReaderClass struct_types_only_reader_class = {
-+ "struct types", 3,
-+ TRUE,
-+ struct_or_dict_entry_types_only_reader_recurse,
-+ NULL,
-+ struct_reader_next,
-+ NULL
-+};
-+
-+static const DBusTypeReaderClass dict_entry_reader_class = {
-+ "dict_entry", 4,
-+ FALSE,
-+ struct_or_dict_entry_reader_recurse,
-+ NULL,
-+ dict_entry_reader_next,
-+ NULL
-+};
-+
-+static const DBusTypeReaderClass dict_entry_types_only_reader_class = {
-+ "dict_entry types", 5,
-+ TRUE,
-+ struct_or_dict_entry_types_only_reader_recurse,
-+ NULL,
-+ dict_entry_reader_next,
-+ NULL
-+};
-+
-+static const DBusTypeReaderClass array_reader_class = {
-+ "array", 6,
-+ FALSE,
-+ array_reader_recurse,
-+ array_reader_check_finished,
-+ array_reader_next,
-+ array_init_from_mark
-+};
-+
-+static const DBusTypeReaderClass array_types_only_reader_class = {
-+ "array types", 7,
-+ TRUE,
-+ array_types_only_reader_recurse,
-+ NULL,
-+ array_types_only_reader_next,
-+ NULL
-+};
-+
-+static const DBusTypeReaderClass variant_reader_class = {
-+ "variant", 8,
-+ FALSE,
-+ variant_reader_recurse,
-+ NULL,
-+ base_reader_next,
-+ NULL
-+};
-+
-+static const DBusTypeReaderClass const *
-+all_reader_classes[] = {
-+ &body_reader_class,
-+ &body_types_only_reader_class,
-+ &struct_reader_class,
-+ &struct_types_only_reader_class,
-+ &dict_entry_reader_class,
-+ &dict_entry_types_only_reader_class,
-+ &array_reader_class,
-+ &array_types_only_reader_class,
-+ &variant_reader_class
-+};
-+
-+/**
-+ * Initializes a type reader.
-+ *
-+ * @param reader the reader
-+ * @param byte_order the byte order of the block to read
-+ * @param type_str the signature of the block to read
-+ * @param type_pos location of signature
-+ * @param value_str the string containing values block
-+ * @param value_pos start of values block
-+ */
-+void
-+_dbus_type_reader_init (DBusTypeReader *reader,
-+ int byte_order,
-+ const DBusString *type_str,
-+ int type_pos,
-+ const DBusString *value_str,
-+ int value_pos)
-+{
-+ reader->klass = &body_reader_class;
-+
-+ reader_init (reader, byte_order, type_str, type_pos,
-+ value_str, value_pos);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p init type_pos = %d value_pos = %d remaining sig '%s'\n",
-+ reader, reader->type_pos, reader->value_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0));
-+#endif
-+}
-+
-+/**
-+ * Initializes a type reader that's been compressed into a
-+ * DBusTypeMark. The args have to be the same as those passed in to
-+ * create the original #DBusTypeReader.
-+ *
-+ * @param reader the reader
-+ * @param byte_order the byte order of the value block
-+ * @param type_str string containing the type signature
-+ * @param value_str string containing the values block
-+ * @param mark the mark to decompress from
-+ */
-+void
-+_dbus_type_reader_init_from_mark (DBusTypeReader *reader,
-+ int byte_order,
-+ const DBusString *type_str,
-+ const DBusString *value_str,
-+ const DBusTypeMark *mark)
-+{
-+ reader->klass = all_reader_classes[mark->container_type];
-+
-+ reader_init (reader, byte_order,
-+ mark->type_pos_in_value_str ? value_str : type_str,
-+ mark->type_pos,
-+ value_str, mark->value_pos);
-+
-+ if (reader->klass->init_from_mark)
-+ (* reader->klass->init_from_mark) (reader, mark);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p init from mark type_pos = %d value_pos = %d remaining sig '%s'\n",
-+ reader, reader->type_pos, reader->value_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0));
-+#endif
-+}
-+
-+/**
-+ * Like _dbus_type_reader_init() but the iteration is over the
-+ * signature, not over values.
-+ *
-+ * @param reader the reader
-+ * @param type_str the signature string
-+ * @param type_pos location in the signature string
-+ */
-+void
-+_dbus_type_reader_init_types_only (DBusTypeReader *reader,
-+ const DBusString *type_str,
-+ int type_pos)
-+{
-+ reader->klass = &body_types_only_reader_class;
-+
-+ reader_init (reader, DBUS_COMPILER_BYTE_ORDER /* irrelevant */,
-+ type_str, type_pos, NULL, _DBUS_INT_MAX /* crashes if we screw up */);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p init types only type_pos = %d remaining sig '%s'\n",
-+ reader, reader->type_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0));
-+#endif
-+}
-+
-+/**
-+ * Like _dbus_type_reader_init_from_mark() but only iterates over
-+ * the signature, not the values.
-+ *
-+ * @param reader the reader
-+ * @param type_str the signature string
-+ * @param mark the mark to decompress from
-+ */
-+void
-+_dbus_type_reader_init_types_only_from_mark (DBusTypeReader *reader,
-+ const DBusString *type_str,
-+ const DBusTypeMark *mark)
-+{
-+ reader->klass = all_reader_classes[mark->container_type];
-+ _dbus_assert (reader->klass->types_only);
-+ _dbus_assert (!mark->type_pos_in_value_str);
-+
-+ reader_init (reader, DBUS_COMPILER_BYTE_ORDER, /* irrelevant */
-+ type_str, mark->type_pos,
-+ NULL, _DBUS_INT_MAX /* crashes if we screw up */);
-+
-+ if (reader->klass->init_from_mark)
-+ (* reader->klass->init_from_mark) (reader, mark);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p init types only from mark type_pos = %d remaining sig '%s'\n",
-+ reader, reader->type_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0));
-+#endif
-+}
-+
-+/**
-+ * Compresses a type reader into a #DBusTypeMark, useful for example
-+ * if you want to cache a bunch of positions in a block of values.
-+ *
-+ * @param reader the reader
-+ * @param mark the mark to init
-+ */
-+void
-+_dbus_type_reader_save_mark (const DBusTypeReader *reader,
-+ DBusTypeMark *mark)
-+{
-+ mark->type_pos_in_value_str = (reader->type_str == reader->value_str);
-+ mark->container_type = reader->klass->id;
-+ _dbus_assert (all_reader_classes[reader->klass->id] == reader->klass);
-+
-+ mark->type_pos = reader->type_pos;
-+ mark->value_pos = reader->value_pos;
-+
-+ /* these are just junk if the reader isn't really an array of course */
-+ mark->array_len_offset = reader->array_len_offset;
-+ mark->array_start_pos = reader->u.array.start_pos;
-+}
-+
-+/**
-+ * Gets the type of the value the reader is currently pointing to;
-+ * or for a types-only reader gets the type it's currently pointing to.
-+ * If the reader is at the end of a block or end of a container such
-+ * as an array, returns #DBUS_TYPE_INVALID.
-+ *
-+ * @param reader the reader
-+ */
-+int
-+_dbus_type_reader_get_current_type (const DBusTypeReader *reader)
-+{
-+ int t;
-+
-+ if (reader->finished ||
-+ (reader->klass->check_finished &&
-+ (* reader->klass->check_finished) (reader)))
-+ t = DBUS_TYPE_INVALID;
-+ else
-+ t = _dbus_first_type_in_signature (reader->type_str,
-+ reader->type_pos);
-+
-+ _dbus_assert (t != DBUS_STRUCT_END_CHAR);
-+ _dbus_assert (t != DBUS_STRUCT_BEGIN_CHAR);
-+ _dbus_assert (t != DBUS_DICT_ENTRY_END_CHAR);
-+ _dbus_assert (t != DBUS_DICT_ENTRY_BEGIN_CHAR);
-+
-+#if 0
-+ _dbus_verbose (" type reader %p current type_pos = %d type = %s\n",
-+ reader, reader->type_pos,
-+ _dbus_type_to_string (t));
-+#endif
-+
-+ return t;
-+}
-+
-+/**
-+ * Gets the type of an element of the array the reader is currently
-+ * pointing to. It's an error to call this if
-+ * _dbus_type_reader_get_current_type() doesn't return #DBUS_TYPE_ARRAY
-+ * for this reader.
-+ *
-+ * @param reader the reader
-+ */
-+int
-+_dbus_type_reader_get_element_type (const DBusTypeReader *reader)
-+{
-+ int element_type;
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (reader) == DBUS_TYPE_ARRAY);
-+
-+ element_type = _dbus_first_type_in_signature (reader->type_str,
-+ reader->type_pos + 1);
-+
-+ return element_type;
-+}
-+
-+/**
-+ * Gets the current position in the value block
-+ * @param reader the reader
-+ */
-+int
-+_dbus_type_reader_get_value_pos (const DBusTypeReader *reader)
-+{
-+ return reader->value_pos;
-+}
-+
-+/**
-+ * Get the address of the marshaled value in the data being read. The
-+ * address may not be aligned; you have to align it to the type of the
-+ * value you want to read. Most of the demarshal routines do this for
-+ * you.
-+ *
-+ * @param reader the reader
-+ * @param value_location the address of the marshaled value
-+ */
-+void
-+_dbus_type_reader_read_raw (const DBusTypeReader *reader,
-+ const unsigned char **value_location)
-+{
-+ _dbus_assert (!reader->klass->types_only);
-+
-+ *value_location = _dbus_string_get_const_data_len (reader->value_str,
-+ reader->value_pos,
-+ 0);
-+}
-+
-+/**
-+ * Reads a basic-typed value, as with _dbus_marshal_read_basic().
-+ *
-+ * @param reader the reader
-+ * @param value the address of the value
-+ */
-+void
-+_dbus_type_reader_read_basic (const DBusTypeReader *reader,
-+ void *value)
-+{
-+ int t;
-+
-+ _dbus_assert (!reader->klass->types_only);
-+
-+ t = _dbus_type_reader_get_current_type (reader);
-+
-+ _dbus_marshal_read_basic (reader->value_str,
-+ reader->value_pos,
-+ t, value,
-+ reader->byte_order,
-+ NULL);
-+
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p read basic type_pos = %d value_pos = %d remaining sig '%s'\n",
-+ reader, reader->type_pos, reader->value_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0));
-+#endif
-+}
-+
-+/**
-+ * Returns the number of values remaining in the current array reader.
-+ *
-+ * @param reader the reader to read from
-+ * @returns the number of elements remaining in the array
-+ */
-+int
-+_dbus_type_reader_get_array_length (const DBusTypeReader *reader)
-+{
-+ _dbus_assert (!reader->klass->types_only);
-+ _dbus_assert (reader->klass == &array_reader_class);
-+
-+ return array_reader_get_array_len (reader);
-+}
-+
-+/**
-+ * Reads a block of fixed-length basic values, from the current point
-+ * in an array to the end of the array. Does not work for arrays of
-+ * string or container types.
-+ *
-+ * This function returns the array in-place; it does not make a copy,
-+ * and it does not swap the bytes.
-+ *
-+ * If you ask for #DBUS_TYPE_DOUBLE you will get a "const double*" back
-+ * and the "value" argument should be a "const double**" and so on.
-+ *
-+ * @param reader the reader to read from
-+ * @param value place to return the array values
-+ * @param n_elements place to return number of array elements
-+ */
-+void
-+_dbus_type_reader_read_fixed_multi (const DBusTypeReader *reader,
-+ void *value,
-+ int *n_elements)
-+{
-+ int element_type;
-+ int end_pos;
-+ int remaining_len;
-+ int alignment;
-+ int total_len;
-+
-+ _dbus_assert (!reader->klass->types_only);
-+ _dbus_assert (reader->klass == &array_reader_class);
-+
-+ element_type = _dbus_first_type_in_signature (reader->type_str,
-+ reader->type_pos);
-+
-+ _dbus_assert (element_type != DBUS_TYPE_INVALID); /* why we don't use get_current_type() */
-+ _dbus_assert (dbus_type_is_fixed (element_type));
-+
-+ alignment = _dbus_type_get_alignment (element_type);
-+
-+ _dbus_assert (reader->value_pos >= reader->u.array.start_pos);
-+
-+ total_len = array_reader_get_array_len (reader);
-+ end_pos = reader->u.array.start_pos + total_len;
-+ remaining_len = end_pos - reader->value_pos;
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose ("end_pos %d total_len %d remaining_len %d value_pos %d\n",
-+ end_pos, total_len, remaining_len, reader->value_pos);
-+#endif
-+
-+ _dbus_assert (remaining_len <= total_len);
-+
-+ if (remaining_len == 0)
-+ *(const DBusBasicValue**) value = NULL;
-+ else
-+ *(const DBusBasicValue**) value =
-+ (void*) _dbus_string_get_const_data_len (reader->value_str,
-+ reader->value_pos,
-+ remaining_len);
-+
-+ *n_elements = remaining_len / alignment;
-+ _dbus_assert ((remaining_len % alignment) == 0);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p read fixed array type_pos = %d value_pos = %d remaining sig '%s'\n",
-+ reader, reader->type_pos, reader->value_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0));
-+#endif
-+}
-+
-+/**
-+ * Initialize a new reader pointing to the first type and
-+ * corresponding value that's a child of the current container. It's
-+ * an error to call this if the current type is a non-container.
-+ *
-+ * Note that DBusTypeReader traverses values, not types. So if you
-+ * have an empty array of array of int, you can't recurse into it. You
-+ * can only recurse into each element.
-+ *
-+ * @param reader the reader
-+ * @param sub a reader to init pointing to the first child
-+ */
-+void
-+_dbus_type_reader_recurse (DBusTypeReader *reader,
-+ DBusTypeReader *sub)
-+{
-+ int t;
-+
-+ t = _dbus_first_type_in_signature (reader->type_str, reader->type_pos);
-+
-+ switch (t)
-+ {
-+ case DBUS_TYPE_STRUCT:
-+ if (reader->klass->types_only)
-+ sub->klass = &struct_types_only_reader_class;
-+ else
-+ sub->klass = &struct_reader_class;
-+ break;
-+ case DBUS_TYPE_DICT_ENTRY:
-+ if (reader->klass->types_only)
-+ sub->klass = &dict_entry_types_only_reader_class;
-+ else
-+ sub->klass = &dict_entry_reader_class;
-+ break;
-+ case DBUS_TYPE_ARRAY:
-+ if (reader->klass->types_only)
-+ sub->klass = &array_types_only_reader_class;
-+ else
-+ sub->klass = &array_reader_class;
-+ break;
-+ case DBUS_TYPE_VARIANT:
-+ if (reader->klass->types_only)
-+ _dbus_assert_not_reached ("can't recurse into variant typecode");
-+ else
-+ sub->klass = &variant_reader_class;
-+ break;
-+ default:
-+ _dbus_verbose ("recursing into type %s\n", _dbus_type_to_string (t));
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (t == DBUS_TYPE_INVALID)
-+ _dbus_warn ("You can't recurse into an empty array or off the end of a message body\n");
-+#endif /* DBUS_DISABLE_CHECKS */
-+
-+ _dbus_assert_not_reached ("don't yet handle recursing into this type");
-+ }
-+
-+ _dbus_assert (sub->klass == all_reader_classes[sub->klass->id]);
-+
-+ (* sub->klass->recurse) (sub, reader);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p RECURSED type_pos = %d value_pos = %d remaining sig '%s'\n",
-+ sub, sub->type_pos, sub->value_pos,
-+ _dbus_string_get_const_data_len (sub->type_str, sub->type_pos, 0));
-+#endif
-+}
-+
-+/**
-+ * Skip to the next value on this "level". e.g. the next field in a
-+ * struct, the next value in an array. Returns FALSE at the end of the
-+ * current container.
-+ *
-+ * @param reader the reader
-+ * @returns FALSE if nothing more to read at or below this level
-+ */
-+dbus_bool_t
-+_dbus_type_reader_next (DBusTypeReader *reader)
-+{
-+ int t;
-+
-+ t = _dbus_type_reader_get_current_type (reader);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p START next() { type_pos = %d value_pos = %d remaining sig '%s' current_type = %s\n",
-+ reader, reader->type_pos, reader->value_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0),
-+ _dbus_type_to_string (t));
-+#endif
-+
-+ if (t == DBUS_TYPE_INVALID)
-+ return FALSE;
-+
-+ (* reader->klass->next) (reader, t);
-+
-+#if RECURSIVE_MARSHAL_READ_TRACE
-+ _dbus_verbose (" type reader %p END next() type_pos = %d value_pos = %d remaining sig '%s' current_type = %s\n",
-+ reader, reader->type_pos, reader->value_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0),
-+ _dbus_type_to_string (_dbus_type_reader_get_current_type (reader)));
-+#endif
-+
-+ return _dbus_type_reader_get_current_type (reader) != DBUS_TYPE_INVALID;
-+}
-+
-+/**
-+ * Check whether there's another value on this "level". e.g. the next
-+ * field in a struct, the next value in an array. Returns FALSE at the
-+ * end of the current container.
-+ *
-+ * You probably don't want to use this; it makes for an awkward for/while
-+ * loop. A nicer one is "while ((current_type = get_current_type()) != INVALID)"
-+ *
-+ * @param reader the reader
-+ * @returns FALSE if nothing more to read at or below this level
-+ */
-+dbus_bool_t
-+_dbus_type_reader_has_next (const DBusTypeReader *reader)
-+{
-+ /* Not efficient but works for now. */
-+ DBusTypeReader copy;
-+
-+ copy = *reader;
-+ return _dbus_type_reader_next (©);
-+}
-+
-+/**
-+ * Gets the string and range of said string containing the signature
-+ * of the current value. Essentially a more complete version of
-+ * _dbus_type_reader_get_current_type() (returns the full type
-+ * rather than only the outside of the onion).
-+ *
-+ * Note though that the first byte in a struct signature is
-+ * #DBUS_STRUCT_BEGIN_CHAR while the current type will be
-+ * #DBUS_TYPE_STRUCT so it isn't true that the first byte of the
-+ * signature is always the same as the current type. Another
-+ * difference is that this function will still return a signature when
-+ * inside an empty array; say you recurse into empty array of int32,
-+ * the signature is "i" but the current type will always be
-+ * #DBUS_TYPE_INVALID since there are no elements to be currently
-+ * pointing to.
-+ *
-+ * @param reader the reader
-+ * @param str_p place to return the string with the type in it
-+ * @param start_p place to return start of the type
-+ * @param len_p place to return the length of the type
-+ */
-+void
-+_dbus_type_reader_get_signature (const DBusTypeReader *reader,
-+ const DBusString **str_p,
-+ int *start_p,
-+ int *len_p)
-+{
-+ *str_p = reader->type_str;
-+ *start_p = reader->type_pos;
-+ *len_p = find_len_of_complete_type (reader->type_str, reader->type_pos);
-+}
-+
-+typedef struct
-+{
-+ DBusString replacement;
-+ int padding;
-+} ReplacementBlock;
-+
-+static dbus_bool_t
-+replacement_block_init (ReplacementBlock *block,
-+ DBusTypeReader *reader)
-+{
-+ if (!_dbus_string_init (&block->replacement))
-+ return FALSE;
-+
-+ /* % 8 is the padding to have the same align properties in
-+ * our replacement string as we do at the position being replaced
-+ */
-+ block->padding = reader->value_pos % 8;
-+
-+ if (!_dbus_string_lengthen (&block->replacement, block->padding))
-+ goto oom;
-+
-+ return TRUE;
-+
-+ oom:
-+ _dbus_string_free (&block->replacement);
-+ return FALSE;
-+}
-+
-+static dbus_bool_t
-+replacement_block_replace (ReplacementBlock *block,
-+ DBusTypeReader *reader,
-+ const DBusTypeReader *realign_root)
-+{
-+ DBusTypeWriter writer;
-+ DBusTypeReader realign_reader;
-+ DBusList *fixups;
-+ int orig_len;
-+
-+ _dbus_assert (realign_root != NULL);
-+
-+ orig_len = _dbus_string_get_length (&block->replacement);
-+
-+ realign_reader = *realign_root;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("INITIALIZING replacement block writer %p at value_pos %d\n",
-+ &writer, _dbus_string_get_length (&block->replacement));
-+#endif
-+ _dbus_type_writer_init_values_only (&writer,
-+ realign_reader.byte_order,
-+ realign_reader.type_str,
-+ realign_reader.type_pos,
-+ &block->replacement,
-+ _dbus_string_get_length (&block->replacement));
-+
-+ _dbus_assert (realign_reader.value_pos <= reader->value_pos);
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("COPYING from reader at value_pos %d to writer %p starting after value_pos %d\n",
-+ realign_reader.value_pos, &writer, reader->value_pos);
-+#endif
-+ fixups = NULL;
-+ if (!_dbus_type_writer_write_reader_partial (&writer,
-+ &realign_reader,
-+ reader,
-+ block->padding,
-+ _dbus_string_get_length (&block->replacement) - block->padding,
-+ &fixups))
-+ goto oom;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("REPLACEMENT at padding %d len %d\n", block->padding,
-+ _dbus_string_get_length (&block->replacement) - block->padding);
-+ _dbus_verbose_bytes_of_string (&block->replacement, block->padding,
-+ _dbus_string_get_length (&block->replacement) - block->padding);
-+ _dbus_verbose ("TO BE REPLACED at value_pos = %d (align pad %d) len %d realign_reader.value_pos %d\n",
-+ reader->value_pos, reader->value_pos % 8,
-+ realign_reader.value_pos - reader->value_pos,
-+ realign_reader.value_pos);
-+ _dbus_verbose_bytes_of_string (reader->value_str,
-+ reader->value_pos,
-+ realign_reader.value_pos - reader->value_pos);
-+#endif
-+
-+ /* Move the replacement into position
-+ * (realign_reader should now be at the end of the block to be replaced)
-+ */
-+ if (!_dbus_string_replace_len (&block->replacement, block->padding,
-+ _dbus_string_get_length (&block->replacement) - block->padding,
-+ (DBusString*) reader->value_str,
-+ reader->value_pos,
-+ realign_reader.value_pos - reader->value_pos))
-+ goto oom;
-+
-+ /* Process our fixups now that we can't have an OOM error */
-+ apply_and_free_fixups (&fixups, reader);
-+
-+ return TRUE;
-+
-+ oom:
-+ _dbus_string_set_length (&block->replacement, orig_len);
-+ free_fixups (&fixups);
-+ return FALSE;
-+}
-+
-+static void
-+replacement_block_free (ReplacementBlock *block)
-+{
-+ _dbus_string_free (&block->replacement);
-+}
-+
-+/* In the variable-length case, we have to fix alignment after we insert.
-+ * The strategy is as follows:
-+ *
-+ * - pad a new string to have the same alignment as the
-+ * start of the current basic value
-+ * - write the new basic value
-+ * - copy from the original reader to the new string,
-+ * which will fix the alignment of types following
-+ * the new value
-+ * - this copy has to start at realign_root,
-+ * but not really write anything until it
-+ * passes the value being set
-+ * - as an optimization, we can stop copying
-+ * when the source and dest values are both
-+ * on an 8-boundary, since we know all following
-+ * padding and alignment will be identical
-+ * - copy the new string back to the original
-+ * string, replacing the relevant part of the
-+ * original string
-+ * - now any arrays in the original string that
-+ * contained the replaced string may have the
-+ * wrong length; so we have to fix that
-+ */
-+static dbus_bool_t
-+reader_set_basic_variable_length (DBusTypeReader *reader,
-+ int current_type,
-+ const void *value,
-+ const DBusTypeReader *realign_root)
-+{
-+ dbus_bool_t retval;
-+ ReplacementBlock block;
-+ DBusTypeWriter writer;
-+
-+ _dbus_assert (realign_root != NULL);
-+
-+ retval = FALSE;
-+
-+ if (!replacement_block_init (&block, reader))
-+ return FALSE;
-+
-+ /* Write the new basic value */
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("INITIALIZING writer %p to write basic value at value_pos %d of replacement string\n",
-+ &writer, _dbus_string_get_length (&block.replacement));
-+#endif
-+ _dbus_type_writer_init_values_only (&writer,
-+ reader->byte_order,
-+ reader->type_str,
-+ reader->type_pos,
-+ &block.replacement,
-+ _dbus_string_get_length (&block.replacement));
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("WRITING basic value to writer %p (replacement string)\n", &writer);
-+#endif
-+ if (!_dbus_type_writer_write_basic (&writer, current_type, value))
-+ goto out;
-+
-+ if (!replacement_block_replace (&block,
-+ reader,
-+ realign_root))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ replacement_block_free (&block);
-+ return retval;
-+}
-+
-+static void
-+reader_set_basic_fixed_length (DBusTypeReader *reader,
-+ int current_type,
-+ const void *value)
-+{
-+ _dbus_marshal_set_basic ((DBusString*) reader->value_str,
-+ reader->value_pos,
-+ current_type,
-+ value,
-+ reader->byte_order,
-+ NULL, NULL);
-+}
-+
-+/**
-+ * Sets a new value for the basic type value pointed to by the reader,
-+ * leaving the reader valid to continue reading. Any other readers
-+ * will be invalidated if you set a variable-length type such as a
-+ * string.
-+ *
-+ * The provided realign_root is the reader to start from when
-+ * realigning the data that follows the newly-set value. The reader
-+ * parameter must point to a value below the realign_root parameter.
-+ * If the type being set is fixed-length, then realign_root may be
-+ * #NULL. Only values reachable from realign_root will be realigned,
-+ * so if your string contains other values you will need to deal with
-+ * those somehow yourself. It is OK if realign_root is the same
-+ * reader as the reader parameter, though if you aren't setting the
-+ * root it may not be such a good idea.
-+ *
-+ * @todo DBusTypeReader currently takes "const" versions of the type
-+ * and value strings, and this function modifies those strings by
-+ * casting away the const, which is of course bad if we want to get
-+ * picky. (To be truly clean you'd have an object which contained the
-+ * type and value strings and set_basic would be a method on that
-+ * object... this would also make DBusTypeReader the same thing as
-+ * DBusTypeMark. But since DBusMessage is effectively that object for
-+ * D-BUS it doesn't seem worth creating some random object.)
-+ *
-+ * @todo optimize this by only rewriting until the old and new values
-+ * are at the same alignment. Frequently this should result in only
-+ * replacing the value that's immediately at hand.
-+ *
-+ * @param reader reader indicating where to set a new value
-+ * @param value address of the value to set
-+ * @param realign_root realign from here
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_type_reader_set_basic (DBusTypeReader *reader,
-+ const void *value,
-+ const DBusTypeReader *realign_root)
-+{
-+ int current_type;
-+
-+ _dbus_assert (!reader->klass->types_only);
-+ _dbus_assert (reader->value_str == realign_root->value_str);
-+ _dbus_assert (reader->value_pos >= realign_root->value_pos);
-+
-+ current_type = _dbus_type_reader_get_current_type (reader);
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" SET BASIC type reader %p type_pos = %d value_pos = %d remaining sig '%s' realign_root = %p with value_pos %d current_type = %s\n",
-+ reader, reader->type_pos, reader->value_pos,
-+ _dbus_string_get_const_data_len (reader->type_str, reader->type_pos, 0),
-+ realign_root,
-+ realign_root ? realign_root->value_pos : -1,
-+ _dbus_type_to_string (current_type));
-+ _dbus_verbose_bytes_of_string (realign_root->value_str, realign_root->value_pos,
-+ _dbus_string_get_length (realign_root->value_str) -
-+ realign_root->value_pos);
-+#endif
-+
-+ _dbus_assert (dbus_type_is_basic (current_type));
-+
-+ if (dbus_type_is_fixed (current_type))
-+ {
-+ reader_set_basic_fixed_length (reader, current_type, value);
-+ return TRUE;
-+ }
-+ else
-+ {
-+ _dbus_assert (realign_root != NULL);
-+ return reader_set_basic_variable_length (reader, current_type,
-+ value, realign_root);
-+ }
-+}
-+
-+/**
-+ * Recursively deletes any value pointed to by the reader, leaving the
-+ * reader valid to continue reading. Any other readers will be
-+ * invalidated.
-+ *
-+ * The provided realign_root is the reader to start from when
-+ * realigning the data that follows the newly-set value.
-+ * See _dbus_type_reader_set_basic() for more details on the
-+ * realign_root paramter.
-+ *
-+ * @todo for now this does not delete the typecodes associated with
-+ * the value, so this function should only be used for array elements.
-+ *
-+ * @param reader reader indicating where to delete a value
-+ * @param realign_root realign from here
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_type_reader_delete (DBusTypeReader *reader,
-+ const DBusTypeReader *realign_root)
-+{
-+ dbus_bool_t retval;
-+ ReplacementBlock block;
-+
-+ _dbus_assert (realign_root != NULL);
-+ _dbus_assert (reader->klass == &array_reader_class);
-+
-+ retval = FALSE;
-+
-+ if (!replacement_block_init (&block, reader))
-+ return FALSE;
-+
-+ if (!replacement_block_replace (&block,
-+ reader,
-+ realign_root))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ replacement_block_free (&block);
-+ return retval;
-+}
-+
-+/**
-+ * Compares two readers, which must be iterating over the same value data.
-+ * Returns #TRUE if the first parameter is further along than the second parameter.
-+ *
-+ * @param lhs left-hand-side (first) parameter
-+ * @param rhs left-hand-side (first) parameter
-+ * @returns whether lhs is greater than rhs
-+ */
-+dbus_bool_t
-+_dbus_type_reader_greater_than (const DBusTypeReader *lhs,
-+ const DBusTypeReader *rhs)
-+{
-+ _dbus_assert (lhs->value_str == rhs->value_str);
-+
-+ return lhs->value_pos > rhs->value_pos;
-+}
-+
-+/*
-+ *
-+ *
-+ * DBusTypeWriter
-+ *
-+ *
-+ *
-+ */
-+
-+/**
-+ * Initialize a write iterator, which is used to write out values in
-+ * serialized D-BUS format.
-+ *
-+ * The type_pos passed in is expected to be inside an already-valid,
-+ * though potentially empty, type signature. This means that the byte
-+ * after type_pos must be either #DBUS_TYPE_INVALID (aka nul) or some
-+ * other valid type. #DBusTypeWriter won't enforce that the signature
-+ * is already valid (you can append the nul byte at the end if you
-+ * like), but just be aware that you need the nul byte eventually and
-+ * #DBusTypeWriter isn't going to write it for you.
-+ *
-+ * @param writer the writer to init
-+ * @param byte_order the byte order to marshal into
-+ * @param type_str the string to write typecodes into
-+ * @param type_pos where to insert typecodes
-+ * @param value_str the string to write values into
-+ * @param value_pos where to insert values
-+ *
-+ */
-+void
-+_dbus_type_writer_init (DBusTypeWriter *writer,
-+ int byte_order,
-+ DBusString *type_str,
-+ int type_pos,
-+ DBusString *value_str,
-+ int value_pos)
-+{
-+ writer->byte_order = byte_order;
-+ writer->type_str = type_str;
-+ writer->type_pos = type_pos;
-+ writer->value_str = value_str;
-+ writer->value_pos = value_pos;
-+ writer->container_type = DBUS_TYPE_INVALID;
-+ writer->type_pos_is_expectation = FALSE;
-+ writer->enabled = TRUE;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("writer %p init remaining sig '%s'\n", writer,
-+ writer->type_str ?
-+ _dbus_string_get_const_data_len (writer->type_str, writer->type_pos, 0) :
-+ "unknown");
-+#endif
-+}
-+
-+/**
-+ * Initialize a write iterator, with the signature to be provided
-+ * later.
-+ *
-+ * @param writer the writer to init
-+ * @param byte_order the byte order to marshal into
-+ * @param value_str the string to write values into
-+ * @param value_pos where to insert values
-+ *
-+ */
-+void
-+_dbus_type_writer_init_types_delayed (DBusTypeWriter *writer,
-+ int byte_order,
-+ DBusString *value_str,
-+ int value_pos)
-+{
-+ _dbus_type_writer_init (writer, byte_order,
-+ NULL, 0, value_str, value_pos);
-+}
-+
-+/**
-+ * Adds type string to the writer, if it had none.
-+ *
-+ * @param writer the writer to init
-+ * @param type_str type string to add
-+ * @param type_pos type position
-+ *
-+ */
-+void
-+_dbus_type_writer_add_types (DBusTypeWriter *writer,
-+ DBusString *type_str,
-+ int type_pos)
-+{
-+ if (writer->type_str == NULL) /* keeps us from using this as setter */
-+ {
-+ writer->type_str = type_str;
-+ writer->type_pos = type_pos;
-+ }
-+}
-+
-+/**
-+ * Removes type string from the writer.
-+ *
-+ * @param writer the writer to remove from
-+ */
-+void
-+_dbus_type_writer_remove_types (DBusTypeWriter *writer)
-+{
-+ writer->type_str = NULL;
-+ writer->type_pos = -1;
-+}
-+
-+/**
-+ * Like _dbus_type_writer_init(), except the type string
-+ * passed in should correspond to an existing signature that
-+ * matches what you're going to write out. The writer will
-+ * check what you write vs. this existing signature.
-+ *
-+ * @param writer the writer to init
-+ * @param byte_order the byte order to marshal into
-+ * @param type_str the string with signature
-+ * @param type_pos start of signature
-+ * @param value_str the string to write values into
-+ * @param value_pos where to insert values
-+ *
-+ */
-+void
-+_dbus_type_writer_init_values_only (DBusTypeWriter *writer,
-+ int byte_order,
-+ const DBusString *type_str,
-+ int type_pos,
-+ DBusString *value_str,
-+ int value_pos)
-+{
-+ _dbus_type_writer_init (writer, byte_order,
-+ (DBusString*)type_str, type_pos,
-+ value_str, value_pos);
-+
-+ writer->type_pos_is_expectation = TRUE;
-+}
-+
-+static dbus_bool_t
-+_dbus_type_writer_write_basic_no_typecode (DBusTypeWriter *writer,
-+ int type,
-+ const void *value)
-+{
-+ if (writer->enabled)
-+ return _dbus_marshal_write_basic (writer->value_str,
-+ writer->value_pos,
-+ type,
-+ value,
-+ writer->byte_order,
-+ &writer->value_pos);
-+ else
-+ return TRUE;
-+}
-+
-+/* If our parent is an array, things are a little bit complicated.
-+ *
-+ * The parent must have a complete element type, such as
-+ * "i" or "aai" or "(ii)" or "a(ii)". There can't be
-+ * unclosed parens, or an "a" with no following type.
-+ *
-+ * To recurse, the only allowed operation is to recurse into the
-+ * first type in the element type. So for "i" you can't recurse, for
-+ * "ai" you can recurse into the array, for "(ii)" you can recurse
-+ * into the struct.
-+ *
-+ * If you recurse into the array for "ai", then you must specify
-+ * "i" for the element type of the array you recurse into.
-+ *
-+ * While inside an array at any level, we need to avoid writing to
-+ * type_str, since the type only appears once for the whole array,
-+ * it does not appear for each array element.
-+ *
-+ * While inside an array type_pos points to the expected next
-+ * typecode, rather than the next place we could write a typecode.
-+ */
-+static void
-+writer_recurse_init_and_check (DBusTypeWriter *writer,
-+ int container_type,
-+ DBusTypeWriter *sub)
-+{
-+ _dbus_type_writer_init (sub,
-+ writer->byte_order,
-+ writer->type_str,
-+ writer->type_pos,
-+ writer->value_str,
-+ writer->value_pos);
-+
-+ sub->container_type = container_type;
-+
-+ if (writer->type_pos_is_expectation ||
-+ (sub->container_type == DBUS_TYPE_ARRAY || sub->container_type == DBUS_TYPE_VARIANT))
-+ sub->type_pos_is_expectation = TRUE;
-+ else
-+ sub->type_pos_is_expectation = FALSE;
-+
-+ sub->enabled = writer->enabled;
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (writer->type_pos_is_expectation && writer->type_str)
-+ {
-+ int expected;
-+
-+ expected = _dbus_first_type_in_signature (writer->type_str, writer->type_pos);
-+
-+ if (expected != sub->container_type)
-+ {
-+ _dbus_warn ("Writing an element of type %s, but the expected type here is %s\n",
-+ _dbus_type_to_string (sub->container_type),
-+ _dbus_type_to_string (expected));
-+ _dbus_assert_not_reached ("bad array element or variant content written");
-+ }
-+ }
-+#endif /* DBUS_DISABLE_CHECKS */
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p recurse parent %s type_pos = %d value_pos = %d is_expectation = %d remaining sig '%s' enabled = %d\n",
-+ writer,
-+ _dbus_type_to_string (writer->container_type),
-+ writer->type_pos, writer->value_pos, writer->type_pos_is_expectation,
-+ writer->type_str ?
-+ _dbus_string_get_const_data_len (writer->type_str, writer->type_pos, 0) :
-+ "unknown",
-+ writer->enabled);
-+ _dbus_verbose (" type writer %p recurse sub %s type_pos = %d value_pos = %d is_expectation = %d enabled = %d\n",
-+ sub,
-+ _dbus_type_to_string (sub->container_type),
-+ sub->type_pos, sub->value_pos,
-+ sub->type_pos_is_expectation,
-+ sub->enabled);
-+#endif
-+}
-+
-+static dbus_bool_t
-+write_or_verify_typecode (DBusTypeWriter *writer,
-+ int typecode)
-+{
-+ /* A subwriter inside an array or variant will have type_pos
-+ * pointing to the expected typecode; a writer not inside an array
-+ * or variant has type_pos pointing to the next place to insert a
-+ * typecode.
-+ */
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p write_or_verify start type_pos = %d remaining sig '%s' enabled = %d\n",
-+ writer, writer->type_pos,
-+ writer->type_str ?
-+ _dbus_string_get_const_data_len (writer->type_str, writer->type_pos, 0) :
-+ "unknown",
-+ writer->enabled);
-+#endif
-+
-+ if (writer->type_str == NULL)
-+ return TRUE;
-+
-+ if (writer->type_pos_is_expectation)
-+ {
-+#ifndef DBUS_DISABLE_CHECKS
-+ {
-+ int expected;
-+
-+ expected = _dbus_string_get_byte (writer->type_str, writer->type_pos);
-+
-+ if (expected != typecode)
-+ {
-+ _dbus_warn ("Array or variant type requires that type %s be written, but %s was written\n",
-+ _dbus_type_to_string (expected), _dbus_type_to_string (typecode));
-+ _dbus_assert_not_reached ("bad type inserted somewhere inside an array or variant");
-+ }
-+ }
-+#endif /* DBUS_DISABLE_CHECKS */
-+
-+ /* if immediately inside an array we'd always be appending an element,
-+ * so the expected type doesn't change; if inside a struct or something
-+ * below an array, we need to move through said struct or something.
-+ */
-+ if (writer->container_type != DBUS_TYPE_ARRAY)
-+ writer->type_pos += 1;
-+ }
-+ else
-+ {
-+ if (!_dbus_string_insert_byte (writer->type_str,
-+ writer->type_pos,
-+ typecode))
-+ return FALSE;
-+
-+ writer->type_pos += 1;
-+ }
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p write_or_verify end type_pos = %d remaining sig '%s'\n",
-+ writer, writer->type_pos,
-+ _dbus_string_get_const_data_len (writer->type_str, writer->type_pos, 0));
-+#endif
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+writer_recurse_struct_or_dict_entry (DBusTypeWriter *writer,
-+ int begin_char,
-+ const DBusString *contained_type,
-+ int contained_type_start,
-+ int contained_type_len,
-+ DBusTypeWriter *sub)
-+{
-+ /* FIXME right now contained_type is ignored; we could probably
-+ * almost trivially fix the code so if it's present we
-+ * write it out and then set type_pos_is_expectation
-+ */
-+
-+ /* Ensure that we'll be able to add alignment padding and the typecode */
-+ if (writer->enabled)
-+ {
-+ if (!_dbus_string_alloc_space (sub->value_str, 8))
-+ return FALSE;
-+ }
-+
-+ if (!write_or_verify_typecode (sub, begin_char))
-+ _dbus_assert_not_reached ("failed to insert struct typecode after prealloc");
-+
-+ if (writer->enabled)
-+ {
-+ if (!_dbus_string_insert_bytes (sub->value_str,
-+ sub->value_pos,
-+ _DBUS_ALIGN_VALUE (sub->value_pos, 8) - sub->value_pos,
-+ '\0'))
-+ _dbus_assert_not_reached ("should not have failed to insert alignment padding for struct");
-+ sub->value_pos = _DBUS_ALIGN_VALUE (sub->value_pos, 8);
-+ }
-+
-+ return TRUE;
-+}
-+
-+
-+static dbus_bool_t
-+writer_recurse_array (DBusTypeWriter *writer,
-+ const DBusString *contained_type,
-+ int contained_type_start,
-+ int contained_type_len,
-+ DBusTypeWriter *sub,
-+ dbus_bool_t is_array_append)
-+{
-+ dbus_uint32_t value = 0;
-+ int alignment;
-+ int aligned;
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (writer->container_type == DBUS_TYPE_ARRAY &&
-+ writer->type_str)
-+ {
-+ if (!_dbus_string_equal_substring (contained_type,
-+ contained_type_start,
-+ contained_type_len,
-+ writer->type_str,
-+ writer->u.array.element_type_pos + 1))
-+ {
-+ _dbus_warn ("Writing an array of '%s' but this is incompatible with the expected type of elements in the parent array\n",
-+ _dbus_string_get_const_data_len (contained_type,
-+ contained_type_start,
-+ contained_type_len));
-+ _dbus_assert_not_reached ("incompatible type for child array");
-+ }
-+ }
-+#endif /* DBUS_DISABLE_CHECKS */
-+
-+ if (writer->enabled && !is_array_append)
-+ {
-+ /* 3 pad + 4 bytes for the array length, and 4 bytes possible padding
-+ * before array values
-+ */
-+ if (!_dbus_string_alloc_space (sub->value_str, 3 + 4 + 4))
-+ return FALSE;
-+ }
-+
-+ if (writer->type_str != NULL)
-+ {
-+ sub->type_pos += 1; /* move to point to the element type, since type_pos
-+ * should be the expected type for further writes
-+ */
-+ sub->u.array.element_type_pos = sub->type_pos;
-+ }
-+
-+ if (!writer->type_pos_is_expectation)
-+ {
-+ /* sub is a toplevel/outermost array so we need to write the type data */
-+
-+ /* alloc space for array typecode, element signature */
-+ if (!_dbus_string_alloc_space (writer->type_str, 1 + contained_type_len))
-+ return FALSE;
-+
-+ if (!_dbus_string_insert_byte (writer->type_str,
-+ writer->type_pos,
-+ DBUS_TYPE_ARRAY))
-+ _dbus_assert_not_reached ("failed to insert array typecode after prealloc");
-+
-+ if (!_dbus_string_copy_len (contained_type,
-+ contained_type_start, contained_type_len,
-+ sub->type_str,
-+ sub->u.array.element_type_pos))
-+ _dbus_assert_not_reached ("should not have failed to insert array element typecodes");
-+ }
-+
-+ if (writer->type_str != NULL)
-+ {
-+ /* If the parent is an array, we hold type_pos pointing at the array element type;
-+ * otherwise advance it to reflect the array value we just recursed into
-+ */
-+ if (writer->container_type != DBUS_TYPE_ARRAY)
-+ writer->type_pos += 1 + contained_type_len;
-+ else
-+ _dbus_assert (writer->type_pos_is_expectation); /* because it's an array */
-+ }
-+
-+ if (writer->enabled)
-+ {
-+ /* Write (or jump over, if is_array_append) the length */
-+ sub->u.array.len_pos = _DBUS_ALIGN_VALUE (sub->value_pos, 4);
-+
-+ if (is_array_append)
-+ {
-+ sub->value_pos += 4;
-+ }
-+ else
-+ {
-+ if (!_dbus_type_writer_write_basic_no_typecode (sub, DBUS_TYPE_UINT32,
-+ &value))
-+ _dbus_assert_not_reached ("should not have failed to insert array len");
-+ }
-+
-+ _dbus_assert (sub->u.array.len_pos == sub->value_pos - 4);
-+
-+ /* Write alignment padding for array elements
-+ * Note that we write the padding *even for empty arrays*
-+ * to avoid wonky special cases
-+ */
-+ alignment = element_type_get_alignment (contained_type, contained_type_start);
-+
-+ aligned = _DBUS_ALIGN_VALUE (sub->value_pos, alignment);
-+ if (aligned != sub->value_pos)
-+ {
-+ if (!is_array_append)
-+ {
-+ if (!_dbus_string_insert_bytes (sub->value_str,
-+ sub->value_pos,
-+ aligned - sub->value_pos,
-+ '\0'))
-+ _dbus_assert_not_reached ("should not have failed to insert alignment padding");
-+ }
-+
-+ sub->value_pos = aligned;
-+ }
-+
-+ sub->u.array.start_pos = sub->value_pos;
-+
-+ if (is_array_append)
-+ {
-+ dbus_uint32_t len;
-+
-+ _dbus_assert (_DBUS_ALIGN_VALUE (sub->u.array.len_pos, 4) ==
-+ (unsigned) sub->u.array.len_pos);
-+ len = _dbus_unpack_uint32 (sub->byte_order,
-+ _dbus_string_get_const_data_len (sub->value_str,
-+ sub->u.array.len_pos,
-+ 4));
-+
-+ sub->value_pos += len;
-+ }
-+ }
-+ else
-+ {
-+ /* not enabled, so we won't write the len_pos; set it to -1 to so indicate */
-+ sub->u.array.len_pos = -1;
-+ sub->u.array.start_pos = sub->value_pos;
-+ }
-+
-+ _dbus_assert (sub->u.array.len_pos < sub->u.array.start_pos);
-+ _dbus_assert (is_array_append || sub->u.array.start_pos == sub->value_pos);
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p recurse array done remaining sig '%s' array start_pos = %d len_pos = %d value_pos = %d\n", sub,
-+ sub->type_str ?
-+ _dbus_string_get_const_data_len (sub->type_str, sub->type_pos, 0) :
-+ "unknown",
-+ sub->u.array.start_pos, sub->u.array.len_pos, sub->value_pos);
-+#endif
-+
-+ return TRUE;
-+}
-+
-+/* Variant value will normally have:
-+ * 1 byte signature length not including nul
-+ * signature typecodes (nul terminated)
-+ * padding to alignment of contained type
-+ * body according to signature
-+ *
-+ * The signature string can only have a single type
-+ * in it but that type may be complex/recursive.
-+ *
-+ * So a typical variant type with the integer 3 will have these
-+ * octets:
-+ * 0x1 'i' '\0' [1 byte padding to alignment boundary] 0x0 0x0 0x0 0x3
-+ *
-+ * The main world of hurt for writing out a variant is that the type
-+ * string is the same string as the value string. Which means
-+ * inserting to the type string will move the value_pos; and it means
-+ * that inserting to the type string could break type alignment.
-+ */
-+static dbus_bool_t
-+writer_recurse_variant (DBusTypeWriter *writer,
-+ const DBusString *contained_type,
-+ int contained_type_start,
-+ int contained_type_len,
-+ DBusTypeWriter *sub)
-+{
-+ int contained_alignment;
-+
-+ if (writer->enabled)
-+ {
-+ /* Allocate space for the worst case, which is 1 byte sig
-+ * length, nul byte at end of sig, and 7 bytes padding to
-+ * 8-boundary.
-+ */
-+ if (!_dbus_string_alloc_space (sub->value_str, contained_type_len + 9))
-+ return FALSE;
-+ }
-+
-+ /* write VARIANT typecode to the parent's type string */
-+ if (!write_or_verify_typecode (writer, DBUS_TYPE_VARIANT))
-+ return FALSE;
-+
-+ /* If not enabled, mark that we have no type_str anymore ... */
-+
-+ if (!writer->enabled)
-+ {
-+ sub->type_str = NULL;
-+ sub->type_pos = -1;
-+
-+ return TRUE;
-+ }
-+
-+ /* If we're enabled then continue ... */
-+
-+ if (!_dbus_string_insert_byte (sub->value_str,
-+ sub->value_pos,
-+ contained_type_len))
-+ _dbus_assert_not_reached ("should not have failed to insert variant type sig len");
-+
-+ sub->value_pos += 1;
-+
-+ /* Here we switch over to the expected type sig we're about to write */
-+ sub->type_str = sub->value_str;
-+ sub->type_pos = sub->value_pos;
-+
-+ if (!_dbus_string_copy_len (contained_type, contained_type_start, contained_type_len,
-+ sub->value_str, sub->value_pos))
-+ _dbus_assert_not_reached ("should not have failed to insert variant type sig");
-+
-+ sub->value_pos += contained_type_len;
-+
-+ if (!_dbus_string_insert_byte (sub->value_str,
-+ sub->value_pos,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("should not have failed to insert variant type nul termination");
-+
-+ sub->value_pos += 1;
-+
-+ contained_alignment = _dbus_type_get_alignment (_dbus_first_type_in_signature (contained_type, contained_type_start));
-+
-+ if (!_dbus_string_insert_bytes (sub->value_str,
-+ sub->value_pos,
-+ _DBUS_ALIGN_VALUE (sub->value_pos, contained_alignment) - sub->value_pos,
-+ '\0'))
-+ _dbus_assert_not_reached ("should not have failed to insert alignment padding for variant body");
-+ sub->value_pos = _DBUS_ALIGN_VALUE (sub->value_pos, contained_alignment);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+_dbus_type_writer_recurse_contained_len (DBusTypeWriter *writer,
-+ int container_type,
-+ const DBusString *contained_type,
-+ int contained_type_start,
-+ int contained_type_len,
-+ DBusTypeWriter *sub,
-+ dbus_bool_t is_array_append)
-+{
-+ writer_recurse_init_and_check (writer, container_type, sub);
-+
-+ switch (container_type)
-+ {
-+ case DBUS_TYPE_STRUCT:
-+ return writer_recurse_struct_or_dict_entry (writer,
-+ DBUS_STRUCT_BEGIN_CHAR,
-+ contained_type,
-+ contained_type_start, contained_type_len,
-+ sub);
-+ break;
-+ case DBUS_TYPE_DICT_ENTRY:
-+ return writer_recurse_struct_or_dict_entry (writer,
-+ DBUS_DICT_ENTRY_BEGIN_CHAR,
-+ contained_type,
-+ contained_type_start, contained_type_len,
-+ sub);
-+ break;
-+ case DBUS_TYPE_ARRAY:
-+ return writer_recurse_array (writer,
-+ contained_type, contained_type_start, contained_type_len,
-+ sub, is_array_append);
-+ break;
-+ case DBUS_TYPE_VARIANT:
-+ return writer_recurse_variant (writer,
-+ contained_type, contained_type_start, contained_type_len,
-+ sub);
-+ break;
-+ default:
-+ _dbus_assert_not_reached ("tried to recurse into type that doesn't support that");
-+ return FALSE;
-+ break;
-+ }
-+}
-+
-+/**
-+ * Opens a new container and writes out the initial information for that container.
-+ *
-+ * @param writer the writer
-+ * @param container_type the type of the container to open
-+ * @param contained_type the array element type or variant content type
-+ * @param contained_type_start position to look for the type
-+ * @param sub the new sub-writer to write container contents
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_type_writer_recurse (DBusTypeWriter *writer,
-+ int container_type,
-+ const DBusString *contained_type,
-+ int contained_type_start,
-+ DBusTypeWriter *sub)
-+{
-+ int contained_type_len;
-+
-+ if (contained_type)
-+ contained_type_len = find_len_of_complete_type (contained_type, contained_type_start);
-+ else
-+ contained_type_len = 0;
-+
-+ return _dbus_type_writer_recurse_contained_len (writer, container_type,
-+ contained_type,
-+ contained_type_start,
-+ contained_type_len,
-+ sub,
-+ FALSE);
-+}
-+
-+/**
-+ * Append to an existing array. Essentially, the writer will read an
-+ * existing length at the write location; jump over that length; and
-+ * write new fields. On unrecurse(), the existing length will be
-+ * updated.
-+ *
-+ * @param writer the writer
-+ * @param contained_type element type
-+ * @param contained_type_start position of element type
-+ * @param sub the subwriter to init
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_type_writer_append_array (DBusTypeWriter *writer,
-+ const DBusString *contained_type,
-+ int contained_type_start,
-+ DBusTypeWriter *sub)
-+{
-+ int contained_type_len;
-+
-+ if (contained_type)
-+ contained_type_len = find_len_of_complete_type (contained_type, contained_type_start);
-+ else
-+ contained_type_len = 0;
-+
-+ return _dbus_type_writer_recurse_contained_len (writer, DBUS_TYPE_ARRAY,
-+ contained_type,
-+ contained_type_start,
-+ contained_type_len,
-+ sub,
-+ TRUE);
-+}
-+
-+static int
-+writer_get_array_len (DBusTypeWriter *writer)
-+{
-+ _dbus_assert (writer->container_type == DBUS_TYPE_ARRAY);
-+ return writer->value_pos - writer->u.array.start_pos;
-+}
-+
-+/**
-+ * Closes a container created by _dbus_type_writer_recurse()
-+ * and writes any additional information to the values block.
-+ *
-+ * @param writer the writer
-+ * @param sub the sub-writer created by _dbus_type_writer_recurse()
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_type_writer_unrecurse (DBusTypeWriter *writer,
-+ DBusTypeWriter *sub)
-+{
-+ /* type_pos_is_expectation never gets unset once set, or we'd get all hosed */
-+ _dbus_assert (!writer->type_pos_is_expectation ||
-+ (writer->type_pos_is_expectation && sub->type_pos_is_expectation));
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p unrecurse type_pos = %d value_pos = %d is_expectation = %d container_type = %s\n",
-+ writer, writer->type_pos, writer->value_pos, writer->type_pos_is_expectation,
-+ _dbus_type_to_string (writer->container_type));
-+ _dbus_verbose (" type writer %p unrecurse sub type_pos = %d value_pos = %d is_expectation = %d container_type = %s\n",
-+ sub, sub->type_pos, sub->value_pos,
-+ sub->type_pos_is_expectation,
-+ _dbus_type_to_string (sub->container_type));
-+#endif
-+
-+ if (sub->container_type == DBUS_TYPE_STRUCT)
-+ {
-+ if (!write_or_verify_typecode (sub, DBUS_STRUCT_END_CHAR))
-+ return FALSE;
-+ }
-+ else if (sub->container_type == DBUS_TYPE_DICT_ENTRY)
-+ {
-+ if (!write_or_verify_typecode (sub, DBUS_DICT_ENTRY_END_CHAR))
-+ return FALSE;
-+ }
-+ else if (sub->container_type == DBUS_TYPE_ARRAY)
-+ {
-+ if (sub->u.array.len_pos >= 0) /* len_pos == -1 if we weren't enabled when we passed it */
-+ {
-+ dbus_uint32_t len;
-+
-+ /* Set the array length */
-+ len = writer_get_array_len (sub);
-+ _dbus_marshal_set_uint32 (sub->value_str,
-+ sub->u.array.len_pos,
-+ len,
-+ sub->byte_order);
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" filled in sub array len to %u at len_pos %d\n",
-+ len, sub->u.array.len_pos);
-+#endif
-+ }
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ else
-+ {
-+ _dbus_verbose (" not filling in sub array len because we were disabled when we passed the len\n");
-+ }
-+#endif
-+ }
-+
-+ /* Now get type_pos right for the parent writer. Here are the cases:
-+ *
-+ * Cases !writer->type_pos_is_expectation:
-+ * (in these cases we want to update to the new insertion point)
-+ *
-+ * - if we recursed into a STRUCT then we didn't know in advance
-+ * what the types in the struct would be; so we have to fill in
-+ * that information now.
-+ * writer->type_pos = sub->type_pos
-+ *
-+ * - if we recursed into anything else, we knew the full array
-+ * type, or knew the single typecode marking VARIANT, so
-+ * writer->type_pos is already correct.
-+ * writer->type_pos should remain as-is
-+ *
-+ * - note that the parent is never an ARRAY or VARIANT, if it were
-+ * then type_pos_is_expectation would be TRUE. The parent
-+ * is thus known to be a toplevel or STRUCT.
-+ *
-+ * Cases where writer->type_pos_is_expectation:
-+ * (in these cases we want to update to next expected type to write)
-+ *
-+ * - we recursed from STRUCT into STRUCT and we didn't increment
-+ * type_pos in the parent just to stay consistent with the
-+ * !writer->type_pos_is_expectation case (though we could
-+ * special-case this in recurse_struct instead if we wanted)
-+ * writer->type_pos = sub->type_pos
-+ *
-+ * - we recursed from STRUCT into ARRAY or VARIANT and type_pos
-+ * for parent should have been incremented already
-+ * writer->type_pos should remain as-is
-+ *
-+ * - we recursed from ARRAY into a sub-element, so type_pos in the
-+ * parent is the element type and should remain the element type
-+ * for the benefit of the next child element
-+ * writer->type_pos should remain as-is
-+ *
-+ * - we recursed from VARIANT into its value, so type_pos in the
-+ * parent makes no difference since there's only one value
-+ * and we just finished writing it and won't use type_pos again
-+ * writer->type_pos should remain as-is
-+ *
-+ *
-+ * For all these, DICT_ENTRY is the same as STRUCT
-+ */
-+ if (writer->type_str != NULL)
-+ {
-+ if ((sub->container_type == DBUS_TYPE_STRUCT ||
-+ sub->container_type == DBUS_TYPE_DICT_ENTRY) &&
-+ (writer->container_type == DBUS_TYPE_STRUCT ||
-+ writer->container_type == DBUS_TYPE_DICT_ENTRY ||
-+ writer->container_type == DBUS_TYPE_INVALID))
-+ {
-+ /* Advance the parent to the next struct field */
-+ writer->type_pos = sub->type_pos;
-+ }
-+ }
-+
-+ writer->value_pos = sub->value_pos;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p unrecursed type_pos = %d value_pos = %d remaining sig '%s'\n",
-+ writer, writer->type_pos, writer->value_pos,
-+ writer->type_str ?
-+ _dbus_string_get_const_data_len (writer->type_str, writer->type_pos, 0) :
-+ "unknown");
-+#endif
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Writes out a basic type.
-+ *
-+ * @param writer the writer
-+ * @param type the type to write
-+ * @param value the address of the value to write
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_type_writer_write_basic (DBusTypeWriter *writer,
-+ int type,
-+ const void *value)
-+{
-+ dbus_bool_t retval;
-+
-+ /* First ensure that our type realloc will succeed */
-+ if (!writer->type_pos_is_expectation && writer->type_str != NULL)
-+ {
-+ if (!_dbus_string_alloc_space (writer->type_str, 1))
-+ return FALSE;
-+ }
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_type_writer_write_basic_no_typecode (writer, type, value))
-+ goto out;
-+
-+ if (!write_or_verify_typecode (writer, type))
-+ _dbus_assert_not_reached ("failed to write typecode after prealloc");
-+
-+ retval = TRUE;
-+
-+ out:
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p basic type_pos = %d value_pos = %d is_expectation = %d enabled = %d\n",
-+ writer, writer->type_pos, writer->value_pos, writer->type_pos_is_expectation,
-+ writer->enabled);
-+#endif
-+
-+ return retval;
-+}
-+
-+/**
-+ * Writes a block of fixed-length basic values, i.e. those that are
-+ * both dbus_type_is_fixed() and _dbus_type_is_basic(). The block
-+ * must be written inside an array.
-+ *
-+ * The value parameter should be the address of said array of values,
-+ * so e.g. if it's an array of double, pass in "const double**"
-+ *
-+ * @param writer the writer
-+ * @param element_type type of stuff in the array
-+ * @param value address of the array
-+ * @param n_elements number of elements in the array
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_type_writer_write_fixed_multi (DBusTypeWriter *writer,
-+ int element_type,
-+ const void *value,
-+ int n_elements)
-+{
-+ _dbus_assert (writer->container_type == DBUS_TYPE_ARRAY);
-+ _dbus_assert (dbus_type_is_fixed (element_type));
-+ _dbus_assert (writer->type_pos_is_expectation);
-+ _dbus_assert (n_elements >= 0);
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p entering fixed multi type_pos = %d value_pos = %d n_elements %d\n",
-+ writer, writer->type_pos, writer->value_pos, n_elements);
-+#endif
-+
-+ if (!write_or_verify_typecode (writer, element_type))
-+ _dbus_assert_not_reached ("OOM should not happen if only verifying typecode");
-+
-+ if (writer->enabled)
-+ {
-+ if (!_dbus_marshal_write_fixed_multi (writer->value_str,
-+ writer->value_pos,
-+ element_type,
-+ value,
-+ n_elements,
-+ writer->byte_order,
-+ &writer->value_pos))
-+ return FALSE;
-+ }
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose (" type writer %p fixed multi written new type_pos = %d new value_pos = %d n_elements %d\n",
-+ writer, writer->type_pos, writer->value_pos, n_elements);
-+#endif
-+
-+ return TRUE;
-+}
-+
-+static void
-+enable_if_after (DBusTypeWriter *writer,
-+ DBusTypeReader *reader,
-+ const DBusTypeReader *start_after)
-+{
-+ if (start_after)
-+ {
-+ if (!writer->enabled && _dbus_type_reader_greater_than (reader, start_after))
-+ {
-+ _dbus_type_writer_set_enabled (writer, TRUE);
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("ENABLING writer %p at %d because reader at value_pos %d is after reader at value_pos %d\n",
-+ writer, writer->value_pos, reader->value_pos, start_after->value_pos);
-+#endif
-+ }
-+
-+ _dbus_assert ((!writer->enabled && !_dbus_type_reader_greater_than (reader, start_after)) ||
-+ (writer->enabled && _dbus_type_reader_greater_than (reader, start_after)));
-+ }
-+}
-+
-+static dbus_bool_t
-+append_fixup (DBusList **fixups,
-+ const DBusArrayLenFixup *fixup)
-+{
-+ DBusArrayLenFixup *f;
-+
-+ f = dbus_new (DBusArrayLenFixup, 1);
-+ if (f == NULL)
-+ return FALSE;
-+
-+ *f = *fixup;
-+
-+ if (!_dbus_list_append (fixups, f))
-+ {
-+ dbus_free (f);
-+ return FALSE;
-+ }
-+
-+ _dbus_assert (f->len_pos_in_reader == fixup->len_pos_in_reader);
-+ _dbus_assert (f->new_len == fixup->new_len);
-+
-+ return TRUE;
-+}
-+
-+/* This loop is trivial if you ignore all the start_after nonsense,
-+ * so if you're trying to figure it out, start by ignoring that
-+ */
-+static dbus_bool_t
-+writer_write_reader_helper (DBusTypeWriter *writer,
-+ DBusTypeReader *reader,
-+ const DBusTypeReader *start_after,
-+ int start_after_new_pos,
-+ int start_after_new_len,
-+ DBusList **fixups,
-+ dbus_bool_t inside_start_after)
-+{
-+ int current_type;
-+
-+ while ((current_type = _dbus_type_reader_get_current_type (reader)) != DBUS_TYPE_INVALID)
-+ {
-+ if (dbus_type_is_container (current_type))
-+ {
-+ DBusTypeReader subreader;
-+ DBusTypeWriter subwriter;
-+ const DBusString *sig_str;
-+ int sig_start;
-+ int sig_len;
-+ dbus_bool_t enabled_at_recurse;
-+ dbus_bool_t past_start_after;
-+ int reader_array_len_pos;
-+ int reader_array_start_pos;
-+ dbus_bool_t this_is_start_after;
-+
-+ /* type_pos is checked since e.g. in a struct the struct
-+ * and its first field have the same value_pos.
-+ * type_str will differ in reader/start_after for variants
-+ * where type_str is inside the value_str
-+ */
-+ if (!inside_start_after && start_after &&
-+ reader->value_pos == start_after->value_pos &&
-+ reader->type_str == start_after->type_str &&
-+ reader->type_pos == start_after->type_pos)
-+ this_is_start_after = TRUE;
-+ else
-+ this_is_start_after = FALSE;
-+
-+ _dbus_type_reader_recurse (reader, &subreader);
-+
-+ if (current_type == DBUS_TYPE_ARRAY)
-+ {
-+ reader_array_len_pos = ARRAY_READER_LEN_POS (&subreader);
-+ reader_array_start_pos = subreader.u.array.start_pos;
-+ }
-+ else
-+ {
-+ /* quiet gcc */
-+ reader_array_len_pos = -1;
-+ reader_array_start_pos = -1;
-+ }
-+
-+ _dbus_type_reader_get_signature (&subreader, &sig_str,
-+ &sig_start, &sig_len);
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("about to recurse into %s reader at %d subreader at %d writer at %d start_after reader at %d write target len %d inside_start_after = %d this_is_start_after = %d\n",
-+ _dbus_type_to_string (current_type),
-+ reader->value_pos,
-+ subreader.value_pos,
-+ writer->value_pos,
-+ start_after ? start_after->value_pos : -1,
-+ _dbus_string_get_length (writer->value_str),
-+ inside_start_after, this_is_start_after);
-+#endif
-+
-+ if (!inside_start_after && !this_is_start_after)
-+ enable_if_after (writer, &subreader, start_after);
-+ enabled_at_recurse = writer->enabled;
-+ if (!_dbus_type_writer_recurse_contained_len (writer, current_type,
-+ sig_str, sig_start, sig_len,
-+ &subwriter, FALSE))
-+ goto oom;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("recursed into subwriter at %d write target len %d\n",
-+ subwriter.value_pos,
-+ _dbus_string_get_length (subwriter.value_str));
-+#endif
-+
-+ if (!writer_write_reader_helper (&subwriter, &subreader, start_after,
-+ start_after_new_pos, start_after_new_len,
-+ fixups,
-+ inside_start_after ||
-+ this_is_start_after))
-+ goto oom;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("about to unrecurse from %s subreader at %d writer at %d subwriter at %d write target len %d\n",
-+ _dbus_type_to_string (current_type),
-+ subreader.value_pos,
-+ writer->value_pos,
-+ subwriter.value_pos,
-+ _dbus_string_get_length (writer->value_str));
-+#endif
-+
-+ if (!inside_start_after && !this_is_start_after)
-+ enable_if_after (writer, &subreader, start_after);
-+ past_start_after = writer->enabled;
-+ if (!_dbus_type_writer_unrecurse (writer, &subwriter))
-+ goto oom;
-+
-+ /* If we weren't enabled when we recursed, we didn't
-+ * write an array len; if we passed start_after
-+ * somewhere inside the array, then we need to generate
-+ * a fixup.
-+ */
-+ if (start_after != NULL &&
-+ !enabled_at_recurse && past_start_after &&
-+ current_type == DBUS_TYPE_ARRAY &&
-+ fixups != NULL)
-+ {
-+ DBusArrayLenFixup fixup;
-+ int bytes_written_after_start_after;
-+ int bytes_before_start_after;
-+ int old_len;
-+
-+ /* this subwriter access is moderately unkosher since we
-+ * already unrecursed, but it works as long as unrecurse
-+ * doesn't break us on purpose
-+ */
-+ bytes_written_after_start_after = writer_get_array_len (&subwriter);
-+
-+ bytes_before_start_after =
-+ start_after->value_pos - reader_array_start_pos;
-+
-+ fixup.len_pos_in_reader = reader_array_len_pos;
-+ fixup.new_len =
-+ bytes_before_start_after +
-+ start_after_new_len +
-+ bytes_written_after_start_after;
-+
-+ _dbus_assert (_DBUS_ALIGN_VALUE (fixup.len_pos_in_reader, 4) ==
-+ (unsigned) fixup.len_pos_in_reader);
-+
-+ old_len = _dbus_unpack_uint32 (reader->byte_order,
-+ _dbus_string_get_const_data_len (reader->value_str,
-+ fixup.len_pos_in_reader, 4));
-+
-+ if (old_len != fixup.new_len && !append_fixup (fixups, &fixup))
-+ goto oom;
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("Generated fixup len_pos_in_reader = %d new_len = %d reader_array_start_pos = %d start_after->value_pos = %d bytes_before_start_after = %d start_after_new_len = %d bytes_written_after_start_after = %d\n",
-+ fixup.len_pos_in_reader,
-+ fixup.new_len,
-+ reader_array_start_pos,
-+ start_after->value_pos,
-+ bytes_before_start_after,
-+ start_after_new_len,
-+ bytes_written_after_start_after);
-+#endif
-+ }
-+ }
-+ else
-+ {
-+ DBusBasicValue val;
-+
-+ _dbus_assert (dbus_type_is_basic (current_type));
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("Reading basic value %s at %d\n",
-+ _dbus_type_to_string (current_type),
-+ reader->value_pos);
-+#endif
-+
-+ _dbus_type_reader_read_basic (reader, &val);
-+
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("Writing basic value %s at %d write target len %d inside_start_after = %d\n",
-+ _dbus_type_to_string (current_type),
-+ writer->value_pos,
-+ _dbus_string_get_length (writer->value_str),
-+ inside_start_after);
-+#endif
-+ if (!inside_start_after)
-+ enable_if_after (writer, reader, start_after);
-+ if (!_dbus_type_writer_write_basic (writer, current_type, &val))
-+ goto oom;
-+#if RECURSIVE_MARSHAL_WRITE_TRACE
-+ _dbus_verbose ("Wrote basic value %s, new value_pos %d write target len %d\n",
-+ _dbus_type_to_string (current_type),
-+ writer->value_pos,
-+ _dbus_string_get_length (writer->value_str));
-+#endif
-+ }
-+
-+ _dbus_type_reader_next (reader);
-+ }
-+
-+ return TRUE;
-+
-+ oom:
-+ if (fixups)
-+ apply_and_free_fixups (fixups, NULL); /* NULL for reader to apply to */
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Iterate through all values in the given reader, writing a copy of
-+ * each value to the writer. The reader will be moved forward to its
-+ * end position.
-+ *
-+ * If a reader start_after is provided, it should be a reader for the
-+ * same data as the reader to be written. Only values occurring after
-+ * the value pointed to by start_after will be written to the writer.
-+ *
-+ * If start_after is provided, then the copy of the reader will be
-+ * partial. This means that array lengths will not have been copied.
-+ * The assumption is that you wrote a new version of the value at
-+ * start_after to the writer. You have to pass in the start position
-+ * and length of the new value. (If you are deleting the value
-+ * at start_after, pass in 0 for the length.)
-+ *
-+ * If the fixups parameter is non-#NULL, then any array length that
-+ * was read but not written due to start_after will be provided
-+ * as a #DBusArrayLenFixup. The fixup contains the position of the
-+ * array length in the source data, and the correct array length
-+ * assuming you combine the source data before start_after with
-+ * the written data at start_after and beyond.
-+ *
-+ * @param writer the writer to copy to
-+ * @param reader the reader to copy from
-+ * @param start_after #NULL or a reader showing where to start
-+ * @param start_after_new_pos the position of start_after equivalent in the target data
-+ * @param start_after_new_len the length of start_after equivalent in the target data
-+ * @param fixups list to append #DBusArrayLenFixup if the write was partial
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_type_writer_write_reader_partial (DBusTypeWriter *writer,
-+ DBusTypeReader *reader,
-+ const DBusTypeReader *start_after,
-+ int start_after_new_pos,
-+ int start_after_new_len,
-+ DBusList **fixups)
-+{
-+ DBusTypeWriter orig;
-+ int orig_type_len;
-+ int orig_value_len;
-+ int new_bytes;
-+ int orig_enabled;
-+
-+ orig = *writer;
-+ orig_type_len = _dbus_string_get_length (writer->type_str);
-+ orig_value_len = _dbus_string_get_length (writer->value_str);
-+ orig_enabled = writer->enabled;
-+
-+ if (start_after)
-+ _dbus_type_writer_set_enabled (writer, FALSE);
-+
-+ if (!writer_write_reader_helper (writer, reader, start_after,
-+ start_after_new_pos,
-+ start_after_new_len,
-+ fixups, FALSE))
-+ goto oom;
-+
-+ _dbus_type_writer_set_enabled (writer, orig_enabled);
-+ return TRUE;
-+
-+ oom:
-+ if (!writer->type_pos_is_expectation)
-+ {
-+ new_bytes = _dbus_string_get_length (writer->type_str) - orig_type_len;
-+ _dbus_string_delete (writer->type_str, orig.type_pos, new_bytes);
-+ }
-+ new_bytes = _dbus_string_get_length (writer->value_str) - orig_value_len;
-+ _dbus_string_delete (writer->value_str, orig.value_pos, new_bytes);
-+
-+ *writer = orig;
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Iterate through all values in the given reader, writing a copy of
-+ * each value to the writer. The reader will be moved forward to its
-+ * end position.
-+ *
-+ * @param writer the writer to copy to
-+ * @param reader the reader to copy from
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_type_writer_write_reader (DBusTypeWriter *writer,
-+ DBusTypeReader *reader)
-+{
-+ return _dbus_type_writer_write_reader_partial (writer, reader, NULL, 0, 0, NULL);
-+}
-+
-+/**
-+ * If disabled, a writer can still be iterated forward and recursed/unrecursed
-+ * but won't write any values. Types will still be written unless the
-+ * writer is a "values only" writer, because the writer needs access to
-+ * a valid signature to be able to iterate.
-+ *
-+ * @param writer the type writer
-+ * @param enabled #TRUE if values should be written
-+ */
-+void
-+_dbus_type_writer_set_enabled (DBusTypeWriter *writer,
-+ dbus_bool_t enabled)
-+{
-+ writer->enabled = enabled != FALSE;
-+}
-+
-+/** @} */ /* end of DBusMarshal group */
-+
-+/* tests in dbus-marshal-recursive-util.c */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-recursive.h dbus-0.61/dbus/dbus-marshal-recursive.h
---- dbus-0.61.orig/dbus/dbus-marshal-recursive.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-recursive.h 2005-05-11 20:07:22.000000000 +0200
-@@ -0,0 +1,227 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-recursive.h Marshalling routines for recursive types
-+ *
-+ * Copyright (C) 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_MARSHAL_RECURSIVE_H
-+#define DBUS_MARSHAL_RECURSIVE_H
-+
-+#include <config.h>
-+#include <dbus/dbus-protocol.h>
-+#include <dbus/dbus-list.h>
-+
-+#ifndef PACKAGE
-+#error "config.h not included here"
-+#endif
-+
-+typedef struct DBusTypeMark DBusTypeMark;
-+typedef struct DBusTypeReader DBusTypeReader;
-+typedef struct DBusTypeWriter DBusTypeWriter;
-+typedef struct DBusTypeReaderClass DBusTypeReaderClass;
-+typedef struct DBusArrayLenFixup DBusArrayLenFixup;
-+
-+/** The mark is a way to compress a #DBusTypeReader; it isn't all that
-+ * successful though. The idea was to use this for caching header
-+ * fields in dbus-message.c. However now I'm thinking why not cache
-+ * the actual values (e.g. char*) and if the field needs to be set or
-+ * deleted, just linear search for it. Those operations are uncommon,
-+ * and getting the values should be fast and not involve all this type
-+ * reader nonsense.
-+ *
-+ * @todo DBusTypeMark isn't used right now and probably won't be, we should delete it
-+ */
-+struct DBusTypeMark
-+{
-+ dbus_uint32_t type_pos_in_value_str : 1; /**< true if the type_pos is in value_str and not type_str */
-+ dbus_uint32_t container_type : 3; /**< the "id" of the container type */
-+ dbus_uint32_t array_len_offset : 3; /**< bytes back from start_pos that len ends */
-+ dbus_uint32_t type_pos : DBUS_MAXIMUM_MESSAGE_LENGTH_BITS; /**< position in type_str */
-+ dbus_uint32_t value_pos : DBUS_MAXIMUM_MESSAGE_LENGTH_BITS; /**< position in value_str */
-+ dbus_uint32_t array_start_pos : DBUS_MAXIMUM_MESSAGE_LENGTH_BITS; /**< start of the array the reader was iterating over */
-+};
-+
-+/**
-+ * The type reader is an iterator for reading values from a block of
-+ * values.
-+ */
-+struct DBusTypeReader
-+{
-+ dbus_uint32_t byte_order : 8; /**< byte order of the block */
-+
-+ dbus_uint32_t finished : 1; /**< marks we're at end iterator for cases
-+ * where we don't have another way to tell
-+ */
-+ dbus_uint32_t array_len_offset : 3; /**< bytes back from start_pos that len ends */
-+ const DBusString *type_str; /**< string containing signature of block */
-+ int type_pos; /**< current position in signature */
-+ const DBusString *value_str; /**< string containing values of block */
-+ int value_pos; /**< current position in values */
-+
-+ const DBusTypeReaderClass *klass; /**< the vtable for the reader */
-+ union
-+ {
-+ struct {
-+ int start_pos; /**< for array readers, the start of the array values */
-+ } array;
-+ } u; /**< class-specific data */
-+};
-+
-+/**
-+ * The type writer is an iterator for writing to a block of values.
-+ */
-+struct DBusTypeWriter
-+{
-+ dbus_uint32_t byte_order : 8; /**< byte order to write values with */
-+
-+ dbus_uint32_t container_type : 8; /**< what are we inside? (e.g. struct, variant, array) */
-+
-+ dbus_uint32_t type_pos_is_expectation : 1; /**< type_pos can be either an insertion point for or an expected next type */
-+
-+ dbus_uint32_t enabled : 1; /**< whether to write values */
-+
-+ DBusString *type_str; /**< where to write typecodes (or read type expectations) */
-+ int type_pos; /**< current pos in type_str */
-+ DBusString *value_str; /**< where to write values */
-+ int value_pos; /**< next position to write */
-+
-+ union
-+ {
-+ struct {
-+ int start_pos; /**< position of first element in the array */
-+ int len_pos; /**< position of length of the array */
-+ int element_type_pos; /**< position of array element type in type_str */
-+ } array;
-+ } u; /**< class-specific data */
-+};
-+
-+/**
-+ * When modifying an existing block of values, array lengths may need
-+ * to be adjusted; those adjustments are described by this struct.
-+ */
-+struct DBusArrayLenFixup
-+{
-+ int len_pos_in_reader; /**< where the length was in the original block */
-+ int new_len; /**< the new value of the length in the written-out block */
-+};
-+
-+void _dbus_type_reader_init (DBusTypeReader *reader,
-+ int byte_order,
-+ const DBusString *type_str,
-+ int type_pos,
-+ const DBusString *value_str,
-+ int value_pos);
-+void _dbus_type_reader_init_from_mark (DBusTypeReader *reader,
-+ int byte_order,
-+ const DBusString *type_str,
-+ const DBusString *value_str,
-+ const DBusTypeMark *mark);
-+void _dbus_type_reader_init_types_only (DBusTypeReader *reader,
-+ const DBusString *type_str,
-+ int type_pos);
-+void _dbus_type_reader_init_types_only_from_mark (DBusTypeReader *reader,
-+ const DBusString *type_str,
-+ const DBusTypeMark *mark);
-+void _dbus_type_reader_save_mark (const DBusTypeReader *reader,
-+ DBusTypeMark *mark);
-+int _dbus_type_reader_get_current_type (const DBusTypeReader *reader);
-+int _dbus_type_reader_get_element_type (const DBusTypeReader *reader);
-+int _dbus_type_reader_get_value_pos (const DBusTypeReader *reader);
-+void _dbus_type_reader_read_basic (const DBusTypeReader *reader,
-+ void *value);
-+int _dbus_type_reader_get_array_length (const DBusTypeReader *reader);
-+void _dbus_type_reader_read_fixed_multi (const DBusTypeReader *reader,
-+ void *value,
-+ int *n_elements);
-+void _dbus_type_reader_read_raw (const DBusTypeReader *reader,
-+ const unsigned char **value_location);
-+void _dbus_type_reader_recurse (DBusTypeReader *reader,
-+ DBusTypeReader *subreader);
-+dbus_bool_t _dbus_type_reader_next (DBusTypeReader *reader);
-+dbus_bool_t _dbus_type_reader_has_next (const DBusTypeReader *reader);
-+void _dbus_type_reader_get_signature (const DBusTypeReader *reader,
-+ const DBusString **str_p,
-+ int *start_p,
-+ int *len_p);
-+dbus_bool_t _dbus_type_reader_set_basic (DBusTypeReader *reader,
-+ const void *value,
-+ const DBusTypeReader *realign_root);
-+dbus_bool_t _dbus_type_reader_delete (DBusTypeReader *reader,
-+ const DBusTypeReader *realign_root);
-+dbus_bool_t _dbus_type_reader_greater_than (const DBusTypeReader *lhs,
-+ const DBusTypeReader *rhs);
-+
-+dbus_bool_t _dbus_type_reader_equal_values (const DBusTypeReader *lhs,
-+ const DBusTypeReader *rhs);
-+
-+void _dbus_type_signature_next (const char *signature,
-+ int *type_pos);
-+
-+void _dbus_type_writer_init (DBusTypeWriter *writer,
-+ int byte_order,
-+ DBusString *type_str,
-+ int type_pos,
-+ DBusString *value_str,
-+ int value_pos);
-+void _dbus_type_writer_init_types_delayed (DBusTypeWriter *writer,
-+ int byte_order,
-+ DBusString *value_str,
-+ int value_pos);
-+void _dbus_type_writer_add_types (DBusTypeWriter *writer,
-+ DBusString *type_str,
-+ int type_pos);
-+void _dbus_type_writer_remove_types (DBusTypeWriter *writer);
-+void _dbus_type_writer_init_values_only (DBusTypeWriter *writer,
-+ int byte_order,
-+ const DBusString *type_str,
-+ int type_pos,
-+ DBusString *value_str,
-+ int value_pos);
-+dbus_bool_t _dbus_type_writer_write_basic (DBusTypeWriter *writer,
-+ int type,
-+ const void *value);
-+dbus_bool_t _dbus_type_writer_write_fixed_multi (DBusTypeWriter *writer,
-+ int element_type,
-+ const void *value,
-+ int n_elements);
-+dbus_bool_t _dbus_type_writer_recurse (DBusTypeWriter *writer,
-+ int container_type,
-+ const DBusString *contained_type,
-+ int contained_type_start,
-+ DBusTypeWriter *sub);
-+dbus_bool_t _dbus_type_writer_unrecurse (DBusTypeWriter *writer,
-+ DBusTypeWriter *sub);
-+dbus_bool_t _dbus_type_writer_append_array (DBusTypeWriter *writer,
-+ const DBusString *contained_type,
-+ int contained_type_start,
-+ DBusTypeWriter *sub);
-+dbus_bool_t _dbus_type_writer_write_reader (DBusTypeWriter *writer,
-+ DBusTypeReader *reader);
-+dbus_bool_t _dbus_type_writer_write_reader_partial (DBusTypeWriter *writer,
-+ DBusTypeReader *reader,
-+ const DBusTypeReader *start_after,
-+ int start_after_new_pos,
-+ int start_after_new_len,
-+ DBusList **fixups);
-+void _dbus_type_writer_set_enabled (DBusTypeWriter *writer,
-+ dbus_bool_t enabled);
-+
-+
-+#endif /* DBUS_MARSHAL_RECURSIVE_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-validate-util.c dbus-0.61/dbus/dbus-marshal-validate-util.c
---- dbus-0.61.orig/dbus/dbus-marshal-validate-util.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-validate-util.c 2005-10-05 22:43:46.000000000 +0200
-@@ -0,0 +1,582 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-validate-util.c Would be in dbus-marshal-validate.c, but only used by tests/bus
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-internals.h"
-+#include "dbus-marshal-validate.h"
-+#include "dbus-marshal-recursive.h"
-+
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+typedef struct
-+{
-+ const char *data;
-+ DBusValidity expected;
-+} ValidityTest;
-+
-+static void
-+run_validity_tests (const ValidityTest *tests,
-+ int n_tests,
-+ DBusValidity (* func) (const DBusString*,int,int))
-+{
-+ int i;
-+
-+ for (i = 0; i < n_tests; i++)
-+ {
-+ DBusString str;
-+ DBusValidity v;
-+
-+ _dbus_string_init_const (&str, tests[i].data);
-+
-+ v = (*func) (&str, 0, _dbus_string_get_length (&str));
-+
-+ if (v != tests[i].expected)
-+ {
-+ _dbus_warn ("Improper validation result %d for '%s'\n",
-+ v, tests[i].data);
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+
-+ ++i;
-+ }
-+}
-+
-+static const ValidityTest signature_tests[] = {
-+ { "", DBUS_VALID },
-+ { "i", DBUS_VALID },
-+ { "ai", DBUS_VALID },
-+ { "(i)", DBUS_VALID },
-+ { "w", DBUS_INVALID_UNKNOWN_TYPECODE },
-+ { "a", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
-+ { "aaaaaa", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
-+ { "ii(ii)a", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
-+ { "ia", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
-+ /* DBUS_INVALID_SIGNATURE_TOO_LONG, */ /* too hard to test this way */
-+ { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
-+ DBUS_INVALID_EXCEEDED_MAXIMUM_ARRAY_RECURSION },
-+ { "((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ii))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
-+ DBUS_INVALID_EXCEEDED_MAXIMUM_STRUCT_RECURSION },
-+ { ")", DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED },
-+ { "i)", DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED },
-+ { "a)", DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED },
-+ { "(", DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED },
-+ { "(i", DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED },
-+ { "(iiiii", DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED },
-+ { "(ai", DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED },
-+ { "()", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
-+ { "(())", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
-+ { "a()", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
-+ { "i()", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
-+ { "()i", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
-+ { "(a)", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
-+ { "a{ia}", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
-+ { "a{}", DBUS_INVALID_DICT_ENTRY_HAS_NO_FIELDS },
-+ { "a{aii}", DBUS_INVALID_DICT_KEY_MUST_BE_BASIC_TYPE },
-+ /* { "a{i}", DBUS_INVALID_DICT_ENTRY_HAS_ONLY_ONE_FIELD }, */
-+ /* { "{is}", DBUS_INVALID_DICT_ENTRY_NOT_INSIDE_ARRAY }, */
-+ /* { "a{isi}", DBUS_INVALID_DICT_ENTRY_HAS_TOO_MANY_FIELDS }, */
-+};
-+
-+dbus_bool_t
-+_dbus_marshal_validate_test (void)
-+{
-+ DBusString str;
-+ int i;
-+
-+ const char *valid_paths[] = {
-+ "/",
-+ "/foo/bar",
-+ "/foo",
-+ "/foo/bar/baz"
-+ };
-+ const char *invalid_paths[] = {
-+ "bar",
-+ "bar/baz",
-+ "/foo/bar/",
-+ "/foo/"
-+ "foo/",
-+ "boo//blah",
-+ "//",
-+ "///",
-+ "foo///blah/",
-+ "Hello World",
-+ "",
-+ " ",
-+ "foo bar"
-+ };
-+
-+ const char *valid_interfaces[] = {
-+ "org.freedesktop.Foo",
-+ "Bar.Baz",
-+ "Blah.Blah.Blah.Blah.Blah",
-+ "a.b",
-+ "a.b.c.d.e.f.g",
-+ "a0.b1.c2.d3.e4.f5.g6",
-+ "abc123.foo27"
-+ };
-+ const char *invalid_interfaces[] = {
-+ ".",
-+ "",
-+ "..",
-+ ".Foo.Bar",
-+ "..Foo.Bar",
-+ "Foo.Bar.",
-+ "Foo.Bar..",
-+ "Foo",
-+ "9foo.bar.baz",
-+ "foo.bar..baz",
-+ "foo.bar...baz",
-+ "foo.bar.b..blah",
-+ ":",
-+ ":0-1",
-+ "10",
-+ ":11.34324",
-+ "0.0.0",
-+ "0..0",
-+ "foo.Bar.%",
-+ "foo.Bar!!",
-+ "!Foo.bar.bz",
-+ "foo.$.blah",
-+ "",
-+ " ",
-+ "foo bar"
-+ };
-+
-+ const char *valid_unique_names[] = {
-+ ":0",
-+ ":a",
-+ ":",
-+ ":.a",
-+ ":.1",
-+ ":0.1",
-+ ":000.2222",
-+ ":.blah",
-+ ":abce.freedesktop.blah"
-+ };
-+ const char *invalid_unique_names[] = {
-+ //":-",
-+ ":!",
-+ //":0-10",
-+ ":blah.",
-+ ":blah.",
-+ ":blah..org",
-+ ":blah.org..",
-+ ":..blah.org",
-+ "",
-+ " ",
-+ "foo bar"
-+ };
-+
-+ const char *valid_members[] = {
-+ "Hello",
-+ "Bar",
-+ "foobar",
-+ "_foobar",
-+ "foo89"
-+ };
-+
-+ const char *invalid_members[] = {
-+ "9Hello",
-+ "10",
-+ "1",
-+ "foo-bar",
-+ "blah.org",
-+ ".blah",
-+ "blah.",
-+ "Hello.",
-+ "!foo",
-+ "",
-+ " ",
-+ "foo bar"
-+ };
-+
-+ const char *valid_signatures[] = {
-+ "",
-+ "sss",
-+ "i",
-+ "b"
-+ };
-+
-+ const char *invalid_signatures[] = {
-+ " ",
-+ "not a valid signature",
-+ "123",
-+ ".",
-+ "("
-+ };
-+
-+ /* Signature with reason */
-+
-+ run_validity_tests (signature_tests, _DBUS_N_ELEMENTS (signature_tests),
-+ _dbus_validate_signature_with_reason);
-+
-+ /* Path validation */
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (valid_paths))
-+ {
-+ _dbus_string_init_const (&str, valid_paths[i]);
-+
-+ if (!_dbus_validate_path (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Path \"%s\" should have been valid\n", valid_paths[i]);
-+ _dbus_assert_not_reached ("invalid path");
-+ }
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (invalid_paths))
-+ {
-+ _dbus_string_init_const (&str, invalid_paths[i]);
-+
-+ if (_dbus_validate_path (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Path \"%s\" should have been invalid\n", invalid_paths[i]);
-+ _dbus_assert_not_reached ("valid path");
-+ }
-+
-+ ++i;
-+ }
-+
-+ /* Interface validation */
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (valid_interfaces))
-+ {
-+ _dbus_string_init_const (&str, valid_interfaces[i]);
-+
-+ if (!_dbus_validate_interface (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Interface \"%s\" should have been valid\n", valid_interfaces[i]);
-+ _dbus_assert_not_reached ("invalid interface");
-+ }
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (invalid_interfaces))
-+ {
-+ _dbus_string_init_const (&str, invalid_interfaces[i]);
-+
-+ if (_dbus_validate_interface (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Interface \"%s\" should have been invalid\n", invalid_interfaces[i]);
-+ _dbus_assert_not_reached ("valid interface");
-+ }
-+
-+ ++i;
-+ }
-+
-+ /* Bus name validation (check that valid interfaces are valid bus names,
-+ * and invalid interfaces are invalid services except if they start with ':')
-+ */
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (valid_interfaces))
-+ {
-+ _dbus_string_init_const (&str, valid_interfaces[i]);
-+
-+ if (!_dbus_validate_bus_name (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Bus name \"%s\" should have been valid\n", valid_interfaces[i]);
-+ _dbus_assert_not_reached ("invalid bus name");
-+ }
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (invalid_interfaces))
-+ {
-+ if (invalid_interfaces[i][0] != ':')
-+ {
-+ _dbus_string_init_const (&str, invalid_interfaces[i]);
-+
-+ if (_dbus_validate_bus_name (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Bus name \"%s\" should have been invalid\n", invalid_interfaces[i]);
-+ _dbus_assert_not_reached ("valid bus name");
-+ }
-+ }
-+
-+ ++i;
-+ }
-+
-+ /* unique name validation */
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (valid_unique_names))
-+ {
-+ _dbus_string_init_const (&str, valid_unique_names[i]);
-+
-+ if (!_dbus_validate_bus_name (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Bus name \"%s\" should have been valid\n", valid_unique_names[i]);
-+ _dbus_assert_not_reached ("invalid unique name");
-+ }
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (invalid_unique_names))
-+ {
-+ _dbus_string_init_const (&str, invalid_unique_names[i]);
-+
-+ if (_dbus_validate_bus_name (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Bus name \"%s\" should have been invalid\n", invalid_unique_names[i]);
-+ _dbus_assert_not_reached ("valid unique name");
-+ }
-+
-+ ++i;
-+ }
-+
-+
-+ /* Error name validation (currently identical to interfaces)
-+ */
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (valid_interfaces))
-+ {
-+ _dbus_string_init_const (&str, valid_interfaces[i]);
-+
-+ if (!_dbus_validate_error_name (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Error name \"%s\" should have been valid\n", valid_interfaces[i]);
-+ _dbus_assert_not_reached ("invalid error name");
-+ }
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (invalid_interfaces))
-+ {
-+ if (invalid_interfaces[i][0] != ':')
-+ {
-+ _dbus_string_init_const (&str, invalid_interfaces[i]);
-+
-+ if (_dbus_validate_error_name (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Error name \"%s\" should have been invalid\n", invalid_interfaces[i]);
-+ _dbus_assert_not_reached ("valid error name");
-+ }
-+ }
-+
-+ ++i;
-+ }
-+
-+ /* Member validation */
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (valid_members))
-+ {
-+ _dbus_string_init_const (&str, valid_members[i]);
-+
-+ if (!_dbus_validate_member (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Member \"%s\" should have been valid\n", valid_members[i]);
-+ _dbus_assert_not_reached ("invalid member");
-+ }
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (invalid_members))
-+ {
-+ _dbus_string_init_const (&str, invalid_members[i]);
-+
-+ if (_dbus_validate_member (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Member \"%s\" should have been invalid\n", invalid_members[i]);
-+ _dbus_assert_not_reached ("valid member");
-+ }
-+
-+ ++i;
-+ }
-+
-+ /* Signature validation */
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (valid_signatures))
-+ {
-+ _dbus_string_init_const (&str, valid_signatures[i]);
-+
-+ if (!_dbus_validate_signature (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Signature \"%s\" should have been valid\n", valid_signatures[i]);
-+ _dbus_assert_not_reached ("invalid signature");
-+ }
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (invalid_signatures))
-+ {
-+ _dbus_string_init_const (&str, invalid_signatures[i]);
-+
-+ if (_dbus_validate_signature (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ {
-+ _dbus_warn ("Signature \"%s\" should have been invalid\n", invalid_signatures[i]);
-+ _dbus_assert_not_reached ("valid signature");
-+ }
-+
-+ ++i;
-+ }
-+
-+ /* Validate claimed length longer than real length */
-+ _dbus_string_init_const (&str, "abc.efg");
-+ if (_dbus_validate_bus_name (&str, 0, 8))
-+ _dbus_assert_not_reached ("validated too-long string");
-+ if (_dbus_validate_interface (&str, 0, 8))
-+ _dbus_assert_not_reached ("validated too-long string");
-+ if (_dbus_validate_error_name (&str, 0, 8))
-+ _dbus_assert_not_reached ("validated too-long string");
-+
-+ _dbus_string_init_const (&str, "abc");
-+ if (_dbus_validate_member (&str, 0, 4))
-+ _dbus_assert_not_reached ("validated too-long string");
-+
-+ _dbus_string_init_const (&str, "sss");
-+ if (_dbus_validate_signature (&str, 0, 4))
-+ _dbus_assert_not_reached ("validated too-long signature");
-+
-+ /* Validate string exceeding max name length */
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ while (_dbus_string_get_length (&str) <= DBUS_MAXIMUM_NAME_LENGTH)
-+ if (!_dbus_string_append (&str, "abc.def"))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (_dbus_validate_bus_name (&str, 0, _dbus_string_get_length (&str)))
-+ _dbus_assert_not_reached ("validated overmax string");
-+ if (_dbus_validate_interface (&str, 0, _dbus_string_get_length (&str)))
-+ _dbus_assert_not_reached ("validated overmax string");
-+ if (_dbus_validate_error_name (&str, 0, _dbus_string_get_length (&str)))
-+ _dbus_assert_not_reached ("validated overmax string");
-+
-+ /* overlong member */
-+ _dbus_string_set_length (&str, 0);
-+ while (_dbus_string_get_length (&str) <= DBUS_MAXIMUM_NAME_LENGTH)
-+ if (!_dbus_string_append (&str, "abc"))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (_dbus_validate_member (&str, 0, _dbus_string_get_length (&str)))
-+ _dbus_assert_not_reached ("validated overmax string");
-+
-+ /* overlong unique name */
-+ _dbus_string_set_length (&str, 0);
-+ _dbus_string_append (&str, ":");
-+ while (_dbus_string_get_length (&str) <= DBUS_MAXIMUM_NAME_LENGTH)
-+ if (!_dbus_string_append (&str, "abc"))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (_dbus_validate_bus_name (&str, 0, _dbus_string_get_length (&str)))
-+ _dbus_assert_not_reached ("validated overmax string");
-+
-+ _dbus_string_free (&str);
-+
-+ /* Body validation; test basic validation of valid bodies for both endian */
-+
-+ {
-+ int sequence;
-+ DBusString signature;
-+ DBusString body;
-+
-+ if (!_dbus_string_init (&signature) || !_dbus_string_init (&body))
-+ _dbus_assert_not_reached ("oom");
-+
-+ sequence = 0;
-+ while (dbus_internal_do_not_use_generate_bodies (sequence,
-+ DBUS_LITTLE_ENDIAN,
-+ &signature, &body))
-+ {
-+ DBusValidity validity;
-+
-+ validity = _dbus_validate_body_with_reason (&signature, 0,
-+ DBUS_LITTLE_ENDIAN,
-+ NULL, &body, 0,
-+ _dbus_string_get_length (&body));
-+ if (validity != DBUS_VALID)
-+ {
-+ _dbus_warn ("invalid code %d expected valid on sequence %d little endian\n",
-+ validity, sequence);
-+ _dbus_verbose_bytes_of_string (&signature, 0, _dbus_string_get_length (&signature));
-+ _dbus_verbose_bytes_of_string (&body, 0, _dbus_string_get_length (&body));
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+
-+ _dbus_string_set_length (&signature, 0);
-+ _dbus_string_set_length (&body, 0);
-+ ++sequence;
-+ }
-+
-+ sequence = 0;
-+ while (dbus_internal_do_not_use_generate_bodies (sequence,
-+ DBUS_BIG_ENDIAN,
-+ &signature, &body))
-+ {
-+ DBusValidity validity;
-+
-+ validity = _dbus_validate_body_with_reason (&signature, 0,
-+ DBUS_BIG_ENDIAN,
-+ NULL, &body, 0,
-+ _dbus_string_get_length (&body));
-+ if (validity != DBUS_VALID)
-+ {
-+ _dbus_warn ("invalid code %d expected valid on sequence %d big endian\n",
-+ validity, sequence);
-+ _dbus_verbose_bytes_of_string (&signature, 0, _dbus_string_get_length (&signature));
-+ _dbus_verbose_bytes_of_string (&body, 0, _dbus_string_get_length (&body));
-+ _dbus_assert_not_reached ("test failed");
-+ }
-+
-+ _dbus_string_set_length (&signature, 0);
-+ _dbus_string_set_length (&body, 0);
-+ ++sequence;
-+ }
-+
-+ _dbus_string_free (&signature);
-+ _dbus_string_free (&body);
-+ }
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-validate.c dbus-0.61/dbus/dbus-marshal-validate.c
---- dbus-0.61.orig/dbus/dbus-marshal-validate.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-validate.c 2005-09-12 10:19:33.000000000 +0200
-@@ -0,0 +1,1086 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-validate.c Validation routines for marshaled data
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-marshal-validate.h"
-+#include "dbus-marshal-recursive.h"
-+#include "dbus-marshal-basic.h"
-+#include "dbus-signature.h"
-+#include "dbus-string.h"
-+
-+/**
-+ * @addtogroup DBusMarshal
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Verifies that the range of type_str from type_pos to type_end is a
-+ * valid signature. If this function returns #TRUE, it will be safe
-+ * to iterate over the signature with a types-only #DBusTypeReader.
-+ * The range passed in should NOT include the terminating
-+ * nul/DBUS_TYPE_INVALID.
-+ *
-+ * @todo verify that dict entries have exactly two fields
-+ *
-+ * @todo require that dict entries are in an array
-+ *
-+ * @param type_str the string
-+ * @param type_pos where the typecodes start
-+ * @param len length of typecodes
-+ * @returns #DBUS_VALID if valid, reason why invalid otherwise
-+ */
-+DBusValidity
-+_dbus_validate_signature_with_reason (const DBusString *type_str,
-+ int type_pos,
-+ int len)
-+{
-+ const unsigned char *p;
-+ const unsigned char *end;
-+ int last;
-+ int struct_depth;
-+ int array_depth;
-+ int dict_entry_depth;
-+ DBusValidity result;
-+
-+ int element_count;
-+ DBusList *element_count_stack;
-+
-+ result = DBUS_VALID;
-+ element_count_stack = NULL;
-+
-+ if (!_dbus_list_append (&element_count_stack, _DBUS_INT_TO_POINTER (0)))
-+ {
-+ result = DBUS_VALIDITY_UNKNOWN_OOM_ERROR;
-+ goto out;
-+ }
-+
-+ _dbus_assert (type_str != NULL);
-+ _dbus_assert (type_pos < _DBUS_INT32_MAX - len);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (type_pos >= 0);
-+
-+ if (len > DBUS_MAXIMUM_SIGNATURE_LENGTH)
-+ {
-+ result = DBUS_INVALID_SIGNATURE_TOO_LONG;
-+ goto out;
-+ }
-+
-+ p = _dbus_string_get_const_data_len (type_str, type_pos, 0);
-+
-+ end = _dbus_string_get_const_data_len (type_str, type_pos + len, 0);
-+ struct_depth = 0;
-+ array_depth = 0;
-+ dict_entry_depth = 0;
-+ last = DBUS_TYPE_INVALID;
-+
-+ while (p != end)
-+ {
-+ switch (*p)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ case DBUS_TYPE_SIGNATURE:
-+ case DBUS_TYPE_VARIANT:
-+ break;
-+
-+ case DBUS_TYPE_ARRAY:
-+ array_depth += 1;
-+ if (array_depth > DBUS_MAXIMUM_TYPE_RECURSION_DEPTH)
-+ {
-+ result = DBUS_INVALID_EXCEEDED_MAXIMUM_ARRAY_RECURSION;
-+ goto out;
-+ }
-+ break;
-+
-+ case DBUS_STRUCT_BEGIN_CHAR:
-+ struct_depth += 1;
-+
-+ if (struct_depth > DBUS_MAXIMUM_TYPE_RECURSION_DEPTH)
-+ {
-+ result = DBUS_INVALID_EXCEEDED_MAXIMUM_STRUCT_RECURSION;
-+ goto out;
-+ }
-+
-+ if (!_dbus_list_append (&element_count_stack,
-+ _DBUS_INT_TO_POINTER (0)))
-+ {
-+ result = DBUS_VALIDITY_UNKNOWN_OOM_ERROR;
-+ goto out;
-+ }
-+
-+ break;
-+
-+ case DBUS_STRUCT_END_CHAR:
-+ if (struct_depth == 0)
-+ {
-+ result = DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED;
-+ goto out;
-+ }
-+
-+ if (last == DBUS_STRUCT_BEGIN_CHAR)
-+ {
-+ result = DBUS_INVALID_STRUCT_HAS_NO_FIELDS;
-+ goto out;
-+ }
-+
-+ _dbus_list_pop_last (&element_count_stack);
-+
-+ struct_depth -= 1;
-+ break;
-+
-+ case DBUS_DICT_ENTRY_BEGIN_CHAR:
-+ if (last != DBUS_TYPE_ARRAY)
-+ {
-+ result = DBUS_INVALID_DICT_ENTRY_NOT_INSIDE_ARRAY;
-+ goto out;
-+ }
-+
-+ dict_entry_depth += 1;
-+
-+ if (dict_entry_depth > DBUS_MAXIMUM_TYPE_RECURSION_DEPTH)
-+ {
-+ result = DBUS_INVALID_EXCEEDED_MAXIMUM_DICT_ENTRY_RECURSION;
-+ goto out;
-+ }
-+
-+ if (!_dbus_list_append (&element_count_stack,
-+ _DBUS_INT_TO_POINTER (0)))
-+ {
-+ result = DBUS_VALIDITY_UNKNOWN_OOM_ERROR;
-+ goto out;
-+ }
-+
-+ break;
-+
-+ case DBUS_DICT_ENTRY_END_CHAR:
-+ if (dict_entry_depth == 0)
-+ {
-+ result = DBUS_INVALID_DICT_ENTRY_ENDED_BUT_NOT_STARTED;
-+ goto out;
-+ }
-+
-+ dict_entry_depth -= 1;
-+
-+ element_count =
-+ _DBUS_POINTER_TO_INT (_dbus_list_pop_last (&element_count_stack));
-+
-+ if (element_count != 2)
-+ {
-+ if (element_count == 0)
-+ result = DBUS_INVALID_DICT_ENTRY_HAS_NO_FIELDS;
-+ else if (element_count == 1)
-+ result = DBUS_INVALID_DICT_ENTRY_HAS_ONLY_ONE_FIELD;
-+ else
-+ result = DBUS_INVALID_DICT_ENTRY_HAS_TOO_MANY_FIELDS;
-+
-+ goto out;
-+ }
-+ break;
-+
-+ case DBUS_TYPE_STRUCT: /* doesn't appear in signatures */
-+ case DBUS_TYPE_DICT_ENTRY: /* ditto */
-+ default:
-+ result = DBUS_INVALID_UNKNOWN_TYPECODE;
-+ goto out;
-+ }
-+
-+ if (*p != DBUS_TYPE_ARRAY &&
-+ *p != DBUS_DICT_ENTRY_BEGIN_CHAR &&
-+ *p != DBUS_STRUCT_BEGIN_CHAR)
-+ {
-+ element_count =
-+ _DBUS_POINTER_TO_INT (_dbus_list_pop_last (&element_count_stack));
-+
-+ ++element_count;
-+
-+ if (!_dbus_list_append (&element_count_stack,
-+ _DBUS_INT_TO_POINTER (element_count)))
-+ {
-+ result = DBUS_VALIDITY_UNKNOWN_OOM_ERROR;
-+ goto out;
-+ }
-+ }
-+
-+ if (array_depth > 0)
-+ {
-+ if (*p == DBUS_TYPE_ARRAY && p != end)
-+ {
-+ const char *p1;
-+ p1 = p + 1;
-+ if (*p1 == DBUS_STRUCT_END_CHAR ||
-+ *p1 == DBUS_DICT_ENTRY_END_CHAR)
-+ {
-+ result = DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE;
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ array_depth = 0;
-+ }
-+ }
-+
-+ if (last == DBUS_DICT_ENTRY_BEGIN_CHAR &&
-+ !dbus_type_is_basic (*p))
-+ {
-+ result = DBUS_INVALID_DICT_KEY_MUST_BE_BASIC_TYPE;
-+ goto out;
-+ }
-+
-+ last = *p;
-+ ++p;
-+ }
-+
-+
-+ if (array_depth > 0)
-+ {
-+ result = DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE;
-+ goto out;
-+ }
-+
-+ if (struct_depth > 0)
-+ {
-+ result = DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED;
-+ goto out;
-+ }
-+
-+ if (dict_entry_depth > 0)
-+ {
-+ result = DBUS_INVALID_DICT_ENTRY_STARTED_BUT_NOT_ENDED;
-+ goto out;
-+ }
-+
-+ _dbus_assert (last != DBUS_TYPE_ARRAY);
-+ _dbus_assert (last != DBUS_STRUCT_BEGIN_CHAR);
-+ _dbus_assert (last != DBUS_DICT_ENTRY_BEGIN_CHAR);
-+
-+ result = DBUS_VALID;
-+
-+out:
-+ _dbus_list_clear (&element_count_stack);
-+ return result;
-+}
-+
-+static DBusValidity
-+validate_body_helper (DBusTypeReader *reader,
-+ int byte_order,
-+ dbus_bool_t walk_reader_to_end,
-+ const unsigned char *p,
-+ const unsigned char *end,
-+ const unsigned char **new_p)
-+{
-+ int current_type;
-+
-+ while ((current_type = _dbus_type_reader_get_current_type (reader)) != DBUS_TYPE_INVALID)
-+ {
-+ const unsigned char *a;
-+ int alignment;
-+
-+#if 0
-+ _dbus_verbose (" validating value of type %s type reader %p type_pos %d p %p end %p %d remain\n",
-+ _dbus_type_to_string (current_type), reader, reader->type_pos, p, end,
-+ (int) (end - p));
-+#endif
-+
-+ /* Guarantee that p has one byte to look at */
-+ if (p == end)
-+ return DBUS_INVALID_NOT_ENOUGH_DATA;
-+
-+ switch (current_type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ ++p;
-+ break;
-+
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ alignment = _dbus_type_get_alignment (current_type);
-+ a = _DBUS_ALIGN_ADDRESS (p, alignment);
-+ if (a >= end)
-+ return DBUS_INVALID_NOT_ENOUGH_DATA;
-+ while (p != a)
-+ {
-+ if (*p != '\0')
-+ return DBUS_INVALID_ALIGNMENT_PADDING_NOT_NUL;
-+ ++p;
-+ }
-+
-+ if (current_type == DBUS_TYPE_BOOLEAN)
-+ {
-+ dbus_uint32_t v = _dbus_unpack_uint32 (byte_order,
-+ p);
-+ if (!(v == 0 || v == 1))
-+ return DBUS_INVALID_BOOLEAN_NOT_ZERO_OR_ONE;
-+ }
-+
-+ p += alignment;
-+ break;
-+
-+ case DBUS_TYPE_ARRAY:
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ {
-+ dbus_uint32_t claimed_len;
-+
-+ a = _DBUS_ALIGN_ADDRESS (p, 4);
-+ if (a + 4 > end)
-+ return DBUS_INVALID_NOT_ENOUGH_DATA;
-+ while (p != a)
-+ {
-+ if (*p != '\0')
-+ return DBUS_INVALID_ALIGNMENT_PADDING_NOT_NUL;
-+ ++p;
-+ }
-+
-+ claimed_len = _dbus_unpack_uint32 (byte_order, p);
-+ p += 4;
-+
-+ /* p may now be == end */
-+ _dbus_assert (p <= end);
-+
-+ if (current_type == DBUS_TYPE_ARRAY)
-+ {
-+ int array_elem_type = _dbus_type_reader_get_element_type (reader);
-+ alignment = _dbus_type_get_alignment (array_elem_type);
-+ p = _DBUS_ALIGN_ADDRESS (p, alignment);
-+ }
-+
-+ if (claimed_len > (unsigned long) (end - p))
-+ return DBUS_INVALID_LENGTH_OUT_OF_BOUNDS;
-+
-+ if (current_type == DBUS_TYPE_OBJECT_PATH)
-+ {
-+ DBusString str;
-+ _dbus_string_init_const_len (&str, p, claimed_len);
-+ if (!_dbus_validate_path (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ return DBUS_INVALID_BAD_PATH;
-+
-+ p += claimed_len;
-+ }
-+ else if (current_type == DBUS_TYPE_STRING)
-+ {
-+ DBusString str;
-+ _dbus_string_init_const_len (&str, p, claimed_len);
-+ if (!_dbus_string_validate_utf8 (&str, 0,
-+ _dbus_string_get_length (&str)))
-+ return DBUS_INVALID_BAD_UTF8_IN_STRING;
-+
-+ p += claimed_len;
-+ }
-+ else if (current_type == DBUS_TYPE_ARRAY && claimed_len > 0)
-+ {
-+ DBusTypeReader sub;
-+ DBusValidity validity;
-+ const unsigned char *array_end;
-+
-+ if (claimed_len > DBUS_MAXIMUM_ARRAY_LENGTH)
-+ return DBUS_INVALID_ARRAY_LENGTH_EXCEEDS_MAXIMUM;
-+
-+ /* Remember that the reader is types only, so we can't
-+ * use it to iterate over elements. It stays the same
-+ * for all elements.
-+ */
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ array_end = p + claimed_len;
-+
-+ while (p < array_end)
-+ {
-+ /* FIXME we are calling a function per array element! very bad
-+ * need if (dbus_type_is_fixed(elem_type)) here to just skip
-+ * big blocks of ints/bytes/etc.
-+ */
-+
-+ validity = validate_body_helper (&sub, byte_order, FALSE, p, end, &p);
-+ if (validity != DBUS_VALID)
-+ return validity;
-+ }
-+
-+ if (p != array_end)
-+ return DBUS_INVALID_ARRAY_LENGTH_INCORRECT;
-+ }
-+
-+ /* check nul termination */
-+ if (current_type != DBUS_TYPE_ARRAY)
-+ {
-+ if (p == end)
-+ return DBUS_INVALID_NOT_ENOUGH_DATA;
-+
-+ if (*p != '\0')
-+ return DBUS_INVALID_STRING_MISSING_NUL;
-+ ++p;
-+ }
-+ }
-+ break;
-+
-+ case DBUS_TYPE_SIGNATURE:
-+ {
-+ dbus_uint32_t claimed_len;
-+ DBusString str;
-+ DBusValidity validity;
-+
-+ claimed_len = *p;
-+ ++p;
-+
-+ /* 1 is for nul termination */
-+ if (claimed_len + 1 > (unsigned long) (end - p))
-+ return DBUS_INVALID_SIGNATURE_LENGTH_OUT_OF_BOUNDS;
-+
-+ _dbus_string_init_const_len (&str, p, claimed_len);
-+ validity =
-+ _dbus_validate_signature_with_reason (&str, 0,
-+ _dbus_string_get_length (&str));
-+
-+ if (validity != DBUS_VALID)
-+ return validity;
-+
-+ p += claimed_len;
-+
-+ _dbus_assert (p < end);
-+ if (*p != DBUS_TYPE_INVALID)
-+ return DBUS_INVALID_SIGNATURE_MISSING_NUL;
-+
-+ ++p;
-+
-+ _dbus_verbose ("p = %p end = %p claimed_len %u\n", p, end, claimed_len);
-+ }
-+ break;
-+
-+ case DBUS_TYPE_VARIANT:
-+ {
-+ /* 1 byte sig len, sig typecodes, align to
-+ * contained-type-boundary, values.
-+ */
-+
-+ /* In addition to normal signature validation, we need to be sure
-+ * the signature contains only a single (possibly container) type.
-+ */
-+ dbus_uint32_t claimed_len;
-+ DBusString sig;
-+ DBusTypeReader sub;
-+ DBusValidity validity;
-+ int contained_alignment;
-+ int contained_type;
-+ DBusValidity reason;
-+
-+ claimed_len = *p;
-+ ++p;
-+
-+ /* + 1 for nul */
-+ if (claimed_len + 1 > (unsigned long) (end - p))
-+ return DBUS_INVALID_VARIANT_SIGNATURE_LENGTH_OUT_OF_BOUNDS;
-+
-+ _dbus_string_init_const_len (&sig, p, claimed_len);
-+ reason = _dbus_validate_signature_with_reason (&sig, 0,
-+ _dbus_string_get_length (&sig));
-+ if (!(reason == DBUS_VALID))
-+ {
-+ if (reason == DBUS_VALIDITY_UNKNOWN_OOM_ERROR)
-+ return reason;
-+ else
-+ return DBUS_INVALID_VARIANT_SIGNATURE_BAD;
-+ }
-+
-+ p += claimed_len;
-+
-+ if (*p != DBUS_TYPE_INVALID)
-+ return DBUS_INVALID_VARIANT_SIGNATURE_MISSING_NUL;
-+ ++p;
-+
-+ contained_type = _dbus_first_type_in_signature (&sig, 0);
-+ if (contained_type == DBUS_TYPE_INVALID)
-+ return DBUS_INVALID_VARIANT_SIGNATURE_EMPTY;
-+
-+ contained_alignment = _dbus_type_get_alignment (contained_type);
-+
-+ a = _DBUS_ALIGN_ADDRESS (p, contained_alignment);
-+ if (a > end)
-+ return DBUS_INVALID_NOT_ENOUGH_DATA;
-+ while (p != a)
-+ {
-+ if (*p != '\0')
-+ return DBUS_INVALID_ALIGNMENT_PADDING_NOT_NUL;
-+ ++p;
-+ }
-+
-+ _dbus_type_reader_init_types_only (&sub, &sig, 0);
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&sub) != DBUS_TYPE_INVALID);
-+
-+ validity = validate_body_helper (&sub, byte_order, FALSE, p, end, &p);
-+ if (validity != DBUS_VALID)
-+ return validity;
-+
-+ if (_dbus_type_reader_next (&sub))
-+ return DBUS_INVALID_VARIANT_SIGNATURE_SPECIFIES_MULTIPLE_VALUES;
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&sub) == DBUS_TYPE_INVALID);
-+ }
-+ break;
-+
-+ case DBUS_TYPE_DICT_ENTRY:
-+ case DBUS_TYPE_STRUCT:
-+ {
-+ DBusTypeReader sub;
-+ DBusValidity validity;
-+
-+ a = _DBUS_ALIGN_ADDRESS (p, 8);
-+ if (a > end)
-+ return DBUS_INVALID_NOT_ENOUGH_DATA;
-+ while (p != a)
-+ {
-+ if (*p != '\0')
-+ return DBUS_INVALID_ALIGNMENT_PADDING_NOT_NUL;
-+ ++p;
-+ }
-+
-+ _dbus_type_reader_recurse (reader, &sub);
-+
-+ validity = validate_body_helper (&sub, byte_order, TRUE, p, end, &p);
-+ if (validity != DBUS_VALID)
-+ return validity;
-+ }
-+ break;
-+
-+ default:
-+ _dbus_assert_not_reached ("invalid typecode in supposedly-validated signature");
-+ break;
-+ }
-+
-+#if 0
-+ _dbus_verbose (" validated value of type %s type reader %p type_pos %d p %p end %p %d remain\n",
-+ _dbus_type_to_string (current_type), reader, reader->type_pos, p, end,
-+ (int) (end - p));
-+#endif
-+
-+ if (p > end)
-+ {
-+ _dbus_verbose ("not enough data!!! p = %p end = %p end-p = %d\n",
-+ p, end, (int) (end - p));
-+ return DBUS_INVALID_NOT_ENOUGH_DATA;
-+ }
-+
-+ if (walk_reader_to_end)
-+ _dbus_type_reader_next (reader);
-+ else
-+ break;
-+ }
-+
-+ if (new_p)
-+ *new_p = p;
-+
-+ return DBUS_VALID;
-+}
-+
-+/**
-+ * Verifies that the range of value_str from value_pos to value_end is
-+ * a legitimate value of type expected_signature. If this function
-+ * returns #TRUE, it will be safe to iterate over the values with
-+ * #DBusTypeReader. The signature is assumed to be already valid.
-+ *
-+ * If bytes_remaining is not #NULL, then leftover bytes will be stored
-+ * there and #DBUS_VALID returned. If it is #NULL, then
-+ * #DBUS_INVALID_TOO_MUCH_DATA will be returned if bytes are left
-+ * over.
-+ *
-+ * @param expected_signature the expected types in the value_str
-+ * @param expected_signature_start where in expected_signature is the signature
-+ * @param byte_order the byte order
-+ * @param bytes_remaining place to store leftover bytes
-+ * @param value_str the string containing the body
-+ * @param value_pos where the values start
-+ * @param len length of values after value_pos
-+ * @returns #DBUS_VALID if valid, reason why invalid otherwise
-+ */
-+DBusValidity
-+_dbus_validate_body_with_reason (const DBusString *expected_signature,
-+ int expected_signature_start,
-+ int byte_order,
-+ int *bytes_remaining,
-+ const DBusString *value_str,
-+ int value_pos,
-+ int len)
-+{
-+ DBusTypeReader reader;
-+ const unsigned char *p;
-+ const unsigned char *end;
-+ DBusValidity validity;
-+
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (value_pos >= 0);
-+ _dbus_assert (value_pos <= _dbus_string_get_length (value_str) - len);
-+
-+ _dbus_verbose ("validating body from pos %d len %d sig '%s'\n",
-+ value_pos, len, _dbus_string_get_const_data_len (expected_signature,
-+ expected_signature_start,
-+ 0));
-+
-+ _dbus_type_reader_init_types_only (&reader,
-+ expected_signature, expected_signature_start);
-+
-+ p = _dbus_string_get_const_data_len (value_str, value_pos, len);
-+ end = p + len;
-+
-+ validity = validate_body_helper (&reader, byte_order, TRUE, p, end, &p);
-+ if (validity != DBUS_VALID)
-+ return validity;
-+
-+ if (bytes_remaining)
-+ {
-+ *bytes_remaining = end - p;
-+ return DBUS_VALID;
-+ }
-+ else if (p < end)
-+ return DBUS_INVALID_TOO_MUCH_DATA;
-+ else
-+ {
-+ _dbus_assert (p == end);
-+ return DBUS_VALID;
-+ }
-+}
-+
-+/**
-+ * Determine wether the given character is valid as the first character
-+ * in a name.
-+ */
-+#define VALID_INITIAL_NAME_CHARACTER(c) \
-+ ( ((c) >= 'A' && (c) <= 'Z') || \
-+ ((c) >= 'a' && (c) <= 'z') || \
-+ ((c) == '_') )
-+
-+/**
-+ * Determine wether the given character is valid as a second or later
-+ * character in a name
-+ */
-+#define VALID_NAME_CHARACTER(c) \
-+ ( ((c) >= '0' && (c) <= '9') || \
-+ ((c) >= 'A' && (c) <= 'Z') || \
-+ ((c) >= 'a' && (c) <= 'z') || \
-+ ((c) == '_') )
-+
-+/**
-+ * Checks that the given range of the string is a valid object path
-+ * name in the D-BUS protocol. Part of the validation ensures that
-+ * the object path contains only ASCII.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @todo change spec to disallow more things, such as spaces in the
-+ * path name
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is a valid name
-+ */
-+dbus_bool_t
-+_dbus_validate_path (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ const unsigned char *s;
-+ const unsigned char *end;
-+ const unsigned char *last_slash;
-+
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= _dbus_string_get_length (str));
-+
-+ if (len > _dbus_string_get_length (str) - start)
-+ return FALSE;
-+
-+ if (len == 0)
-+ return FALSE;
-+
-+ s = _dbus_string_get_const_data (str) + start;
-+ end = s + len;
-+
-+ if (*s != '/')
-+ return FALSE;
-+ last_slash = s;
-+ ++s;
-+
-+ while (s != end)
-+ {
-+ if (*s == '/')
-+ {
-+ if ((s - last_slash) < 2)
-+ return FALSE; /* no empty path components allowed */
-+
-+ last_slash = s;
-+ }
-+ else
-+ {
-+ if (_DBUS_UNLIKELY (!VALID_NAME_CHARACTER (*s)))
-+ return FALSE;
-+ }
-+
-+ ++s;
-+ }
-+
-+ if ((end - last_slash) < 2 &&
-+ len > 1)
-+ return FALSE; /* trailing slash not allowed unless the string is "/" */
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks that the given range of the string is a valid interface name
-+ * in the D-BUS protocol. This includes a length restriction and an
-+ * ASCII subset, see the specification.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is a valid name
-+ */
-+dbus_bool_t
-+_dbus_validate_interface (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ const unsigned char *s;
-+ const unsigned char *end;
-+ const unsigned char *iface;
-+ const unsigned char *last_dot;
-+
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= _dbus_string_get_length (str));
-+
-+ if (len > _dbus_string_get_length (str) - start)
-+ return FALSE;
-+
-+ if (len > DBUS_MAXIMUM_NAME_LENGTH)
-+ return FALSE;
-+
-+ if (len == 0)
-+ return FALSE;
-+
-+ last_dot = NULL;
-+ iface = _dbus_string_get_const_data (str) + start;
-+ end = iface + len;
-+ s = iface;
-+
-+ /* check special cases of first char so it doesn't have to be done
-+ * in the loop. Note we know len > 0
-+ */
-+ if (_DBUS_UNLIKELY (*s == '.')) /* disallow starting with a . */
-+ return FALSE;
-+ else if (_DBUS_UNLIKELY (!VALID_INITIAL_NAME_CHARACTER (*s)))
-+ return FALSE;
-+ else
-+ ++s;
-+
-+ while (s != end)
-+ {
-+ if (*s == '.')
-+ {
-+ if (_DBUS_UNLIKELY ((s + 1) == end))
-+ return FALSE;
-+ else if (_DBUS_UNLIKELY (!VALID_INITIAL_NAME_CHARACTER (*(s + 1))))
-+ return FALSE;
-+ last_dot = s;
-+ ++s; /* we just validated the next char, so skip two */
-+ }
-+ else if (_DBUS_UNLIKELY (!VALID_NAME_CHARACTER (*s)))
-+ {
-+ return FALSE;
-+ }
-+
-+ ++s;
-+ }
-+
-+ if (_DBUS_UNLIKELY (last_dot == NULL))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks that the given range of the string is a valid member name
-+ * in the D-BUS protocol. This includes a length restriction, etc.,
-+ * see the specification.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is a valid name
-+ */
-+dbus_bool_t
-+_dbus_validate_member (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ const unsigned char *s;
-+ const unsigned char *end;
-+ const unsigned char *member;
-+
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= _dbus_string_get_length (str));
-+
-+ if (len > _dbus_string_get_length (str) - start)
-+ return FALSE;
-+
-+ if (len > DBUS_MAXIMUM_NAME_LENGTH)
-+ return FALSE;
-+
-+ if (len == 0)
-+ return FALSE;
-+
-+ member = _dbus_string_get_const_data (str) + start;
-+ end = member + len;
-+ s = member;
-+
-+ /* check special cases of first char so it doesn't have to be done
-+ * in the loop. Note we know len > 0
-+ */
-+
-+ if (_DBUS_UNLIKELY (!VALID_INITIAL_NAME_CHARACTER (*s)))
-+ return FALSE;
-+ else
-+ ++s;
-+
-+ while (s != end)
-+ {
-+ if (_DBUS_UNLIKELY (!VALID_NAME_CHARACTER (*s)))
-+ {
-+ return FALSE;
-+ }
-+
-+ ++s;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks that the given range of the string is a valid error name
-+ * in the D-BUS protocol. This includes a length restriction, etc.,
-+ * see the specification.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is a valid name
-+ */
-+dbus_bool_t
-+_dbus_validate_error_name (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ /* Same restrictions as interface name at the moment */
-+ return _dbus_validate_interface (str, start, len);
-+}
-+
-+/**
-+ * Determine wether the given character is valid as the first character
-+ * in a bus name.
-+ */
-+#define VALID_INITIAL_BUS_NAME_CHARACTER(c) \
-+ ( ((c) >= 'A' && (c) <= 'Z') || \
-+ ((c) >= 'a' && (c) <= 'z') || \
-+ ((c) == '_') || ((c) == '-'))
-+
-+/**
-+ * Determine wether the given character is valid as a second or later
-+ * character in a bus name
-+ */
-+#define VALID_BUS_NAME_CHARACTER(c) \
-+ ( ((c) >= '0' && (c) <= '9') || \
-+ ((c) >= 'A' && (c) <= 'Z') || \
-+ ((c) >= 'a' && (c) <= 'z') || \
-+ ((c) == '_') || ((c) == '-'))
-+
-+/**
-+ * Checks that the given range of the string is a valid bus name in
-+ * the D-BUS protocol. This includes a length restriction, etc., see
-+ * the specification.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is a valid name
-+ */
-+dbus_bool_t
-+_dbus_validate_bus_name (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ const unsigned char *s;
-+ const unsigned char *end;
-+ const unsigned char *iface;
-+ const unsigned char *last_dot;
-+
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= _dbus_string_get_length (str));
-+
-+ if (len > _dbus_string_get_length (str) - start)
-+ return FALSE;
-+
-+ if (len > DBUS_MAXIMUM_NAME_LENGTH)
-+ return FALSE;
-+
-+ if (len == 0)
-+ return FALSE;
-+
-+ last_dot = NULL;
-+ iface = _dbus_string_get_const_data (str) + start;
-+ end = iface + len;
-+ s = iface;
-+
-+ /* check special cases of first char so it doesn't have to be done
-+ * in the loop. Note we know len > 0
-+ */
-+ if (*s == ':')
-+ {
-+ /* unique name */
-+ ++s;
-+ while (s != end)
-+ {
-+ if (*s == '.')
-+ {
-+ if (_DBUS_UNLIKELY ((s + 1) == end))
-+ return FALSE;
-+ if (_DBUS_UNLIKELY (!VALID_BUS_NAME_CHARACTER (*(s + 1))))
-+ return FALSE;
-+ ++s; /* we just validated the next char, so skip two */
-+ }
-+ else if (_DBUS_UNLIKELY (!VALID_BUS_NAME_CHARACTER (*s)))
-+ {
-+ return FALSE;
-+ }
-+
-+ ++s;
-+ }
-+
-+ return TRUE;
-+ }
-+ else if (_DBUS_UNLIKELY (*s == '.')) /* disallow starting with a . */
-+ return FALSE;
-+ else if (_DBUS_UNLIKELY (!VALID_INITIAL_BUS_NAME_CHARACTER (*s)))
-+ return FALSE;
-+ else
-+ ++s;
-+
-+ while (s != end)
-+ {
-+ if (*s == '.')
-+ {
-+ if (_DBUS_UNLIKELY ((s + 1) == end))
-+ return FALSE;
-+ else if (_DBUS_UNLIKELY (!VALID_INITIAL_BUS_NAME_CHARACTER (*(s + 1))))
-+ return FALSE;
-+ last_dot = s;
-+ ++s; /* we just validated the next char, so skip two */
-+ }
-+ else if (_DBUS_UNLIKELY (!VALID_BUS_NAME_CHARACTER (*s)))
-+ {
-+ return FALSE;
-+ }
-+
-+ ++s;
-+ }
-+
-+ if (_DBUS_UNLIKELY (last_dot == NULL))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks that the given range of the string is a valid message type
-+ * signature in the D-BUS protocol.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is a valid signature
-+ */
-+dbus_bool_t
-+_dbus_validate_signature (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (start <= _dbus_string_get_length (str));
-+ _dbus_assert (len >= 0);
-+
-+ if (len > _dbus_string_get_length (str) - start)
-+ return FALSE;
-+
-+ return _dbus_validate_signature_with_reason (str, start, len) == DBUS_VALID;
-+}
-+
-+/** define _dbus_check_is_valid_path() */
-+DEFINE_DBUS_NAME_CHECK(path);
-+/** define _dbus_check_is_valid_interface() */
-+DEFINE_DBUS_NAME_CHECK(interface);
-+/** define _dbus_check_is_valid_member() */
-+DEFINE_DBUS_NAME_CHECK(member);
-+/** define _dbus_check_is_valid_error_name() */
-+DEFINE_DBUS_NAME_CHECK(error_name);
-+/** define _dbus_check_is_valid_bus_name() */
-+DEFINE_DBUS_NAME_CHECK(bus_name);
-+/** define _dbus_check_is_valid_signature() */
-+DEFINE_DBUS_NAME_CHECK(signature);
-+
-+/** @} */
-+
-+/* tests in dbus-marshal-validate-util.c */
-diff -Naur dbus-0.61.orig/dbus/dbus-marshal-validate.h dbus-0.61/dbus/dbus-marshal-validate.h
---- dbus-0.61.orig/dbus/dbus-marshal-validate.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-marshal-validate.h 2005-06-15 17:15:32.000000000 +0200
-@@ -0,0 +1,187 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-marshal-validate.h Validation routines for marshaled data
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_MARSHAL_VALIDATE_H
-+#define DBUS_MARSHAL_VALIDATE_H
-+
-+#include <config.h>
-+
-+#ifndef PACKAGE
-+#error "config.h not included here"
-+#endif
-+
-+/**
-+ * This is used rather than a bool for high visibility
-+ */
-+typedef enum
-+{
-+ DBUS_VALIDATION_MODE_WE_TRUST_THIS_DATA_ABSOLUTELY,
-+ DBUS_VALIDATION_MODE_DATA_IS_UNTRUSTED
-+} DBusValidationMode;
-+
-+/**
-+ * This is primarily used in unit testing, so we can verify that each
-+ * invalid message is invalid for the expected reasons. Thus we really
-+ * want a distinct enum value for every codepath leaving the validator
-+ * functions. Enum values are specified manually for ease of debugging
-+ * (so you can see the enum value given a printf)
-+ */
-+typedef enum
-+{
-+#define _DBUS_NEGATIVE_VALIDITY_COUNT 4
-+ DBUS_VALIDITY_UNKNOWN_OOM_ERROR = -4,
-+ DBUS_INVALID_FOR_UNKNOWN_REASON = -3,
-+ DBUS_VALID_BUT_INCOMPLETE = -2,
-+ DBUS_VALIDITY_UNKNOWN = -1,
-+ DBUS_VALID = 0,
-+ DBUS_INVALID_UNKNOWN_TYPECODE = 1,
-+ DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE = 2,
-+ DBUS_INVALID_SIGNATURE_TOO_LONG = 3, /* this one is impossible right now since
-+ * you can't put a too-long value in a byte
-+ */
-+ DBUS_INVALID_EXCEEDED_MAXIMUM_ARRAY_RECURSION = 4,
-+ DBUS_INVALID_EXCEEDED_MAXIMUM_STRUCT_RECURSION = 5,
-+ DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED = 6,
-+ DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED = 7,
-+ DBUS_INVALID_STRUCT_HAS_NO_FIELDS = 8,
-+ DBUS_INVALID_ALIGNMENT_PADDING_NOT_NUL = 9,
-+ DBUS_INVALID_BOOLEAN_NOT_ZERO_OR_ONE = 10,
-+ DBUS_INVALID_NOT_ENOUGH_DATA = 11,
-+ DBUS_INVALID_TOO_MUCH_DATA = 12,
-+ DBUS_INVALID_BAD_BYTE_ORDER = 13,
-+ DBUS_INVALID_BAD_PROTOCOL_VERSION = 14,
-+ DBUS_INVALID_BAD_MESSAGE_TYPE = 15,
-+ DBUS_INVALID_BAD_SERIAL = 16,
-+ DBUS_INVALID_INSANE_FIELDS_ARRAY_LENGTH = 17,
-+ DBUS_INVALID_INSANE_BODY_LENGTH = 18,
-+ DBUS_INVALID_MESSAGE_TOO_LONG = 19,
-+ DBUS_INVALID_HEADER_FIELD_CODE = 20,
-+ DBUS_INVALID_HEADER_FIELD_HAS_WRONG_TYPE = 21,
-+ DBUS_INVALID_USES_LOCAL_INTERFACE = 22,
-+ DBUS_INVALID_USES_LOCAL_PATH = 23,
-+ DBUS_INVALID_HEADER_FIELD_APPEARS_TWICE = 24,
-+ DBUS_INVALID_BAD_DESTINATION = 25,
-+ DBUS_INVALID_BAD_INTERFACE = 26,
-+ DBUS_INVALID_BAD_MEMBER = 27,
-+ DBUS_INVALID_BAD_ERROR_NAME = 28,
-+ DBUS_INVALID_BAD_SENDER = 29,
-+ DBUS_INVALID_MISSING_PATH = 30,
-+ DBUS_INVALID_MISSING_INTERFACE = 31,
-+ DBUS_INVALID_MISSING_MEMBER = 32,
-+ DBUS_INVALID_MISSING_ERROR_NAME = 33,
-+ DBUS_INVALID_MISSING_REPLY_SERIAL = 34,
-+ DBUS_INVALID_LENGTH_OUT_OF_BOUNDS = 35,
-+ DBUS_INVALID_ARRAY_LENGTH_EXCEEDS_MAXIMUM = 36,
-+ DBUS_INVALID_BAD_PATH = 37,
-+ DBUS_INVALID_SIGNATURE_LENGTH_OUT_OF_BOUNDS = 38,
-+ DBUS_INVALID_BAD_UTF8_IN_STRING = 39,
-+ DBUS_INVALID_ARRAY_LENGTH_INCORRECT = 40,
-+ DBUS_INVALID_VARIANT_SIGNATURE_LENGTH_OUT_OF_BOUNDS = 41,
-+ DBUS_INVALID_VARIANT_SIGNATURE_BAD = 42,
-+ DBUS_INVALID_VARIANT_SIGNATURE_EMPTY = 43,
-+ DBUS_INVALID_VARIANT_SIGNATURE_SPECIFIES_MULTIPLE_VALUES = 44,
-+ DBUS_INVALID_VARIANT_SIGNATURE_MISSING_NUL = 45,
-+ DBUS_INVALID_STRING_MISSING_NUL = 46,
-+ DBUS_INVALID_SIGNATURE_MISSING_NUL = 47,
-+ DBUS_INVALID_EXCEEDED_MAXIMUM_DICT_ENTRY_RECURSION = 48,
-+ DBUS_INVALID_DICT_ENTRY_ENDED_BUT_NOT_STARTED = 49,
-+ DBUS_INVALID_DICT_ENTRY_STARTED_BUT_NOT_ENDED = 50,
-+ DBUS_INVALID_DICT_ENTRY_HAS_NO_FIELDS = 51,
-+ DBUS_INVALID_DICT_ENTRY_HAS_ONLY_ONE_FIELD = 52,
-+ DBUS_INVALID_DICT_ENTRY_HAS_TOO_MANY_FIELDS = 53,
-+ DBUS_INVALID_DICT_ENTRY_NOT_INSIDE_ARRAY = 54,
-+ DBUS_INVALID_DICT_KEY_MUST_BE_BASIC_TYPE = 55,
-+ DBUS_VALIDITY_LAST
-+} DBusValidity;
-+
-+DBusValidity _dbus_validate_signature_with_reason (const DBusString *type_str,
-+ int type_pos,
-+ int len);
-+DBusValidity _dbus_validate_body_with_reason (const DBusString *expected_signature,
-+ int expected_signature_start,
-+ int byte_order,
-+ int *bytes_remaining,
-+ const DBusString *value_str,
-+ int value_pos,
-+ int len);
-+
-+dbus_bool_t _dbus_validate_path (const DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_validate_interface (const DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_validate_member (const DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_validate_error_name (const DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_validate_bus_name (const DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_validate_signature (const DBusString *str,
-+ int start,
-+ int len);
-+
-+#ifdef DBUS_DISABLE_CHECKS
-+
-+/* Be sure they don't exist, since we don't want to use them outside of checks
-+ * and so we want the compile failure.
-+ */
-+#define DECLARE_DBUS_NAME_CHECK(what)
-+#define DEFINE_DBUS_NAME_CHECK(what)
-+
-+#else /* !DBUS_DISABLE_CHECKS */
-+
-+/** A name check is used in _dbus_return_if_fail(), it's not suitable
-+ * for validating untrusted data. use _dbus_validate_##what for that.
-+ */
-+#define DECLARE_DBUS_NAME_CHECK(what) \
-+dbus_bool_t _dbus_check_is_valid_##what (const char *name)
-+
-+/** Define a name check to be used in _dbus_return_if_fail() statements.
-+ */
-+#define DEFINE_DBUS_NAME_CHECK(what) \
-+dbus_bool_t \
-+_dbus_check_is_valid_##what (const char *name) \
-+{ \
-+ DBusString str; \
-+ \
-+ if (name == NULL) \
-+ return FALSE; \
-+ \
-+ _dbus_string_init_const (&str, name); \
-+ return _dbus_validate_##what (&str, 0, \
-+ _dbus_string_get_length (&str)); \
-+}
-+#endif /* !DBUS_DISABLE_CHECKS */
-+
-+DECLARE_DBUS_NAME_CHECK(path);
-+DECLARE_DBUS_NAME_CHECK(interface);
-+DECLARE_DBUS_NAME_CHECK(member);
-+DECLARE_DBUS_NAME_CHECK(error_name);
-+DECLARE_DBUS_NAME_CHECK(bus_name);
-+DECLARE_DBUS_NAME_CHECK(signature);
-+
-+#endif /* DBUS_MARSHAL_VALIDATE_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-memory.c dbus-0.61/dbus/dbus-memory.c
---- dbus-0.61.orig/dbus/dbus-memory.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-memory.c 2005-01-16 23:13:34.000000000 +0100
-@@ -0,0 +1,812 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-memory.c D-BUS memory handling
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-memory.h"
-+#include "dbus-internals.h"
-+#include "dbus-sysdeps.h"
-+#include "dbus-list.h"
-+#include <stdlib.h>
-+
-+/**
-+ * @defgroup DBusMemory Memory Allocation
-+ * @ingroup DBus
-+ * @brief dbus_malloc(), dbus_free(), etc.
-+ *
-+ * Functions and macros related to allocating and releasing
-+ * blocks of memory.
-+ *
-+ */
-+
-+/**
-+ * @defgroup DBusMemoryInternals Memory allocation implementation details
-+ * @ingroup DBusInternals
-+ * @brief internals of dbus_malloc() etc.
-+ *
-+ * Implementation details related to allocating and releasing blocks
-+ * of memory.
-+ */
-+
-+/**
-+ * @addtogroup DBusMemory
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @def dbus_new
-+ *
-+ * Safe macro for using dbus_malloc(). Accepts the type
-+ * to allocate and the number of type instances to
-+ * allocate as arguments, and returns a memory block
-+ * cast to the desired type, instead of as a void*.
-+ *
-+ * @param type type name to allocate
-+ * @param count number of instances in the allocated array
-+ * @returns the new memory block or #NULL on failure
-+ */
-+
-+/**
-+ * @def dbus_new0
-+ *
-+ * Safe macro for using dbus_malloc0(). Accepts the type
-+ * to allocate and the number of type instances to
-+ * allocate as arguments, and returns a memory block
-+ * cast to the desired type, instead of as a void*.
-+ * The allocated array is initialized to all-bits-zero.
-+ *
-+ * @param type type name to allocate
-+ * @param count number of instances in the allocated array
-+ * @returns the new memory block or #NULL on failure
-+ */
-+
-+/**
-+ * @typedef DBusFreeFunction
-+ *
-+ * The type of a function which frees a block of memory.
-+ *
-+ * @param memory the memory to free
-+ */
-+
-+/** @} */ /* end of public API docs */
-+
-+/**
-+ * @addtogroup DBusMemoryInternals
-+ *
-+ * @{
-+ */
-+
-+#ifdef DBUS_BUILD_TESTS
-+static dbus_bool_t debug_initialized = FALSE;
-+static int fail_nth = -1;
-+static size_t fail_size = 0;
-+static int fail_alloc_counter = _DBUS_INT_MAX;
-+static int n_failures_per_failure = 1;
-+static int n_failures_this_failure = 0;
-+static dbus_bool_t guards = FALSE;
-+static dbus_bool_t disable_mem_pools = FALSE;
-+static dbus_bool_t backtrace_on_fail_alloc = FALSE;
-+static int n_blocks_outstanding = 0;
-+
-+/** value stored in guard padding for debugging buffer overrun */
-+#define GUARD_VALUE 0xdeadbeef
-+/** size of the information about the block stored in guard mode */
-+#define GUARD_INFO_SIZE 8
-+/** size of the GUARD_VALUE-filled padding after the header info */
-+#define GUARD_START_PAD 16
-+/** size of the GUARD_VALUE-filled padding at the end of the block */
-+#define GUARD_END_PAD 16
-+/** size of stuff at start of block */
-+#define GUARD_START_OFFSET (GUARD_START_PAD + GUARD_INFO_SIZE)
-+/** total extra size over the requested allocation for guard stuff */
-+#define GUARD_EXTRA_SIZE (GUARD_START_OFFSET + GUARD_END_PAD)
-+
-+static void
-+_dbus_initialize_malloc_debug (void)
-+{
-+ if (!debug_initialized)
-+ {
-+ debug_initialized = TRUE;
-+
-+ if (_dbus_getenv ("DBUS_MALLOC_FAIL_NTH") != NULL)
-+ {
-+ fail_nth = atoi (_dbus_getenv ("DBUS_MALLOC_FAIL_NTH"));
-+ fail_alloc_counter = fail_nth;
-+ _dbus_verbose ("Will fail malloc every %d times\n", fail_nth);
-+ }
-+
-+ if (_dbus_getenv ("DBUS_MALLOC_FAIL_GREATER_THAN") != NULL)
-+ {
-+ fail_size = atoi (_dbus_getenv ("DBUS_MALLOC_FAIL_GREATER_THAN"));
-+ _dbus_verbose ("Will fail mallocs over %ld bytes\n",
-+ (long) fail_size);
-+ }
-+
-+ if (_dbus_getenv ("DBUS_MALLOC_GUARDS") != NULL)
-+ {
-+ guards = TRUE;
-+ _dbus_verbose ("Will use malloc guards\n");
-+ }
-+
-+ if (_dbus_getenv ("DBUS_DISABLE_MEM_POOLS") != NULL)
-+ {
-+ disable_mem_pools = TRUE;
-+ _dbus_verbose ("Will disable memory pools\n");
-+ }
-+
-+ if (_dbus_getenv ("DBUS_MALLOC_BACKTRACES") != NULL)
-+ {
-+ backtrace_on_fail_alloc = TRUE;
-+ _dbus_verbose ("Will backtrace on failing a malloc\n");
-+ }
-+ }
-+}
-+
-+/**
-+ * Whether to turn off mem pools, useful for leak checking.
-+ *
-+ * @returns #TRUE if mempools should not be used.
-+ */
-+dbus_bool_t
-+_dbus_disable_mem_pools (void)
-+{
-+ _dbus_initialize_malloc_debug ();
-+ return disable_mem_pools;
-+}
-+
-+/**
-+ * Sets the number of allocations until we simulate a failed
-+ * allocation. If set to 0, the next allocation to run
-+ * fails; if set to 1, one succeeds then the next fails; etc.
-+ * Set to _DBUS_INT_MAX to not fail anything.
-+ *
-+ * @param until_next_fail number of successful allocs before one fails
-+ */
-+void
-+_dbus_set_fail_alloc_counter (int until_next_fail)
-+{
-+ _dbus_initialize_malloc_debug ();
-+
-+ fail_alloc_counter = until_next_fail;
-+
-+#if 0
-+ _dbus_verbose ("Set fail alloc counter = %d\n", fail_alloc_counter);
-+#endif
-+}
-+
-+/**
-+ * Gets the number of successful allocs until we'll simulate
-+ * a failed alloc.
-+ *
-+ * @returns current counter value
-+ */
-+int
-+_dbus_get_fail_alloc_counter (void)
-+{
-+ _dbus_initialize_malloc_debug ();
-+
-+ return fail_alloc_counter;
-+}
-+
-+/**
-+ * Sets how many mallocs to fail when the fail alloc counter reaches
-+ * 0.
-+ *
-+ * @param failures_per_failure number to fail
-+ */
-+void
-+_dbus_set_fail_alloc_failures (int failures_per_failure)
-+{
-+ n_failures_per_failure = failures_per_failure;
-+}
-+
-+/**
-+ * Gets the number of failures we'll have when the fail malloc
-+ * counter reaches 0.
-+ *
-+ * @returns number of failures planned
-+ */
-+int
-+_dbus_get_fail_alloc_failures (void)
-+{
-+ return n_failures_per_failure;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Called when about to alloc some memory; if
-+ * it returns #TRUE, then the allocation should
-+ * fail. If it returns #FALSE, then the allocation
-+ * should not fail.
-+ *
-+ * @returns #TRUE if this alloc should fail
-+ */
-+dbus_bool_t
-+_dbus_decrement_fail_alloc_counter (void)
-+{
-+ _dbus_initialize_malloc_debug ();
-+
-+ if (fail_alloc_counter <= 0)
-+ {
-+ if (backtrace_on_fail_alloc)
-+ _dbus_print_backtrace ();
-+
-+ _dbus_verbose ("failure %d\n", n_failures_this_failure);
-+
-+ n_failures_this_failure += 1;
-+ if (n_failures_this_failure >= n_failures_per_failure)
-+ {
-+ if (fail_nth >= 0)
-+ fail_alloc_counter = fail_nth;
-+ else
-+ fail_alloc_counter = _DBUS_INT_MAX;
-+
-+ n_failures_this_failure = 0;
-+
-+ _dbus_verbose ("reset fail alloc counter to %d\n", fail_alloc_counter);
-+ }
-+
-+ return TRUE;
-+ }
-+ else
-+ {
-+ fail_alloc_counter -= 1;
-+ return FALSE;
-+ }
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Get the number of outstanding malloc()'d blocks.
-+ *
-+ * @returns number of blocks
-+ */
-+int
-+_dbus_get_malloc_blocks_outstanding (void)
-+{
-+ return n_blocks_outstanding;
-+}
-+
-+/**
-+ * Where the block came from.
-+ */
-+typedef enum
-+{
-+ SOURCE_UNKNOWN,
-+ SOURCE_MALLOC,
-+ SOURCE_REALLOC,
-+ SOURCE_MALLOC_ZERO,
-+ SOURCE_REALLOC_NULL
-+} BlockSource;
-+
-+static const char*
-+source_string (BlockSource source)
-+{
-+ switch (source)
-+ {
-+ case SOURCE_UNKNOWN:
-+ return "unknown";
-+ case SOURCE_MALLOC:
-+ return "malloc";
-+ case SOURCE_REALLOC:
-+ return "realloc";
-+ case SOURCE_MALLOC_ZERO:
-+ return "malloc0";
-+ case SOURCE_REALLOC_NULL:
-+ return "realloc(NULL)";
-+ }
-+ _dbus_assert_not_reached ("Invalid malloc block source ID");
-+ return "invalid!";
-+}
-+
-+static void
-+check_guards (void *free_block,
-+ dbus_bool_t overwrite)
-+{
-+ if (free_block != NULL)
-+ {
-+ unsigned char *block = ((unsigned char*)free_block) - GUARD_START_OFFSET;
-+ size_t requested_bytes = *(dbus_uint32_t*)block;
-+ BlockSource source = *(dbus_uint32_t*)(block + 4);
-+ unsigned int i;
-+ dbus_bool_t failed;
-+
-+ failed = FALSE;
-+
-+#if 0
-+ _dbus_verbose ("Checking %d bytes request from source %s\n",
-+ requested_bytes, source_string (source));
-+#endif
-+
-+ i = GUARD_INFO_SIZE;
-+ while (i < GUARD_START_OFFSET)
-+ {
-+ dbus_uint32_t value = *(dbus_uint32_t*) &block[i];
-+ if (value != GUARD_VALUE)
-+ {
-+ _dbus_warn ("Block of %lu bytes from %s had start guard value 0x%ux at %d expected 0x%x\n",
-+ (long) requested_bytes, source_string (source),
-+ value, i, GUARD_VALUE);
-+ failed = TRUE;
-+ }
-+
-+ i += 4;
-+ }
-+
-+ i = GUARD_START_OFFSET + requested_bytes;
-+ while (i < (GUARD_START_OFFSET + requested_bytes + GUARD_END_PAD))
-+ {
-+ dbus_uint32_t value = *(dbus_uint32_t*) &block[i];
-+ if (value != GUARD_VALUE)
-+ {
-+ _dbus_warn ("Block of %lu bytes from %s had end guard value 0x%ux at %d expected 0x%x\n",
-+ (long) requested_bytes, source_string (source),
-+ value, i, GUARD_VALUE);
-+ failed = TRUE;
-+ }
-+
-+ i += 4;
-+ }
-+
-+ /* set memory to anything but nul bytes */
-+ if (overwrite)
-+ memset (free_block, 'g', requested_bytes);
-+
-+ if (failed)
-+ _dbus_assert_not_reached ("guard value corruption");
-+ }
-+}
-+
-+static void*
-+set_guards (void *real_block,
-+ size_t requested_bytes,
-+ BlockSource source)
-+{
-+ unsigned char *block = real_block;
-+ unsigned int i;
-+
-+ if (block == NULL)
-+ return NULL;
-+
-+ _dbus_assert (GUARD_START_OFFSET + GUARD_END_PAD == GUARD_EXTRA_SIZE);
-+
-+ *((dbus_uint32_t*)block) = requested_bytes;
-+ *((dbus_uint32_t*)(block + 4)) = source;
-+
-+ i = GUARD_INFO_SIZE;
-+ while (i < GUARD_START_OFFSET)
-+ {
-+ (*(dbus_uint32_t*) &block[i]) = GUARD_VALUE;
-+
-+ i += 4;
-+ }
-+
-+ i = GUARD_START_OFFSET + requested_bytes;
-+ while (i < (GUARD_START_OFFSET + requested_bytes + GUARD_END_PAD))
-+ {
-+ (*(dbus_uint32_t*) &block[i]) = GUARD_VALUE;
-+
-+ i += 4;
-+ }
-+
-+ check_guards (block + GUARD_START_OFFSET, FALSE);
-+
-+ return block + GUARD_START_OFFSET;
-+}
-+
-+#endif
-+
-+/** @} */ /* End of internals docs */
-+
-+
-+/**
-+ * @addtogroup DBusMemory
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Allocates the given number of bytes, as with standard
-+ * malloc(). Guaranteed to return #NULL if bytes is zero
-+ * on all platforms. Returns #NULL if the allocation fails.
-+ * The memory must be released with dbus_free().
-+ *
-+ * @param bytes number of bytes to allocate
-+ * @return allocated memory, or #NULL if the allocation fails.
-+ */
-+void*
-+dbus_malloc (size_t bytes)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ _dbus_initialize_malloc_debug ();
-+
-+ if (_dbus_decrement_fail_alloc_counter ())
-+ {
-+ _dbus_verbose (" FAILING malloc of %ld bytes\n", (long) bytes);
-+
-+ return NULL;
-+ }
-+#endif
-+
-+ if (bytes == 0) /* some system mallocs handle this, some don't */
-+ return NULL;
-+#ifdef DBUS_BUILD_TESTS
-+ else if (fail_size != 0 && bytes > fail_size)
-+ return NULL;
-+ else if (guards)
-+ {
-+ void *block;
-+
-+ block = malloc (bytes + GUARD_EXTRA_SIZE);
-+ if (block)
-+ n_blocks_outstanding += 1;
-+
-+ return set_guards (block, bytes, SOURCE_MALLOC);
-+ }
-+#endif
-+ else
-+ {
-+ void *mem;
-+ mem = malloc (bytes);
-+#ifdef DBUS_BUILD_TESTS
-+ if (mem)
-+ n_blocks_outstanding += 1;
-+#endif
-+ return mem;
-+ }
-+}
-+
-+/**
-+ * Allocates the given number of bytes, as with standard malloc(), but
-+ * all bytes are initialized to zero as with calloc(). Guaranteed to
-+ * return #NULL if bytes is zero on all platforms. Returns #NULL if the
-+ * allocation fails. The memory must be released with dbus_free().
-+ *
-+ * @param bytes number of bytes to allocate
-+ * @return allocated memory, or #NULL if the allocation fails.
-+ */
-+void*
-+dbus_malloc0 (size_t bytes)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ _dbus_initialize_malloc_debug ();
-+
-+ if (_dbus_decrement_fail_alloc_counter ())
-+ {
-+ _dbus_verbose (" FAILING malloc0 of %ld bytes\n", (long) bytes);
-+
-+ return NULL;
-+ }
-+#endif
-+
-+ if (bytes == 0)
-+ return NULL;
-+#ifdef DBUS_BUILD_TESTS
-+ else if (fail_size != 0 && bytes > fail_size)
-+ return NULL;
-+ else if (guards)
-+ {
-+ void *block;
-+
-+ block = calloc (bytes + GUARD_EXTRA_SIZE, 1);
-+ if (block)
-+ n_blocks_outstanding += 1;
-+ return set_guards (block, bytes, SOURCE_MALLOC_ZERO);
-+ }
-+#endif
-+ else
-+ {
-+ void *mem;
-+ mem = calloc (bytes, 1);
-+#ifdef DBUS_BUILD_TESTS
-+ if (mem)
-+ n_blocks_outstanding += 1;
-+#endif
-+ return mem;
-+ }
-+}
-+
-+/**
-+ * Resizes a block of memory previously allocated by dbus_malloc() or
-+ * dbus_malloc0(). Guaranteed to free the memory and return #NULL if bytes
-+ * is zero on all platforms. Returns #NULL if the resize fails.
-+ * If the resize fails, the memory is not freed.
-+ *
-+ * @param memory block to be resized
-+ * @param bytes new size of the memory block
-+ * @return allocated memory, or #NULL if the resize fails.
-+ */
-+void*
-+dbus_realloc (void *memory,
-+ size_t bytes)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ _dbus_initialize_malloc_debug ();
-+
-+ if (_dbus_decrement_fail_alloc_counter ())
-+ {
-+ _dbus_verbose (" FAILING realloc of %ld bytes\n", (long) bytes);
-+
-+ return NULL;
-+ }
-+#endif
-+
-+ if (bytes == 0) /* guarantee this is safe */
-+ {
-+ dbus_free (memory);
-+ return NULL;
-+ }
-+#ifdef DBUS_BUILD_TESTS
-+ else if (fail_size != 0 && bytes > fail_size)
-+ return NULL;
-+ else if (guards)
-+ {
-+ if (memory)
-+ {
-+ size_t old_bytes;
-+ void *block;
-+
-+ check_guards (memory, FALSE);
-+
-+ block = realloc (((unsigned char*)memory) - GUARD_START_OFFSET,
-+ bytes + GUARD_EXTRA_SIZE);
-+
-+ old_bytes = *(dbus_uint32_t*)block;
-+ if (block && bytes >= old_bytes)
-+ /* old guards shouldn't have moved */
-+ check_guards (((unsigned char*)block) + GUARD_START_OFFSET, FALSE);
-+
-+ return set_guards (block, bytes, SOURCE_REALLOC);
-+ }
-+ else
-+ {
-+ void *block;
-+
-+ block = malloc (bytes + GUARD_EXTRA_SIZE);
-+
-+ if (block)
-+ n_blocks_outstanding += 1;
-+
-+ return set_guards (block, bytes, SOURCE_REALLOC_NULL);
-+ }
-+ }
-+#endif
-+ else
-+ {
-+ void *mem;
-+ mem = realloc (memory, bytes);
-+#ifdef DBUS_BUILD_TESTS
-+ if (memory == NULL && mem != NULL)
-+ n_blocks_outstanding += 1;
-+#endif
-+ return mem;
-+ }
-+}
-+
-+/**
-+ * Frees a block of memory previously allocated by dbus_malloc() or
-+ * dbus_malloc0(). If passed #NULL, does nothing.
-+ *
-+ * @param memory block to be freed
-+ */
-+void
-+dbus_free (void *memory)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ if (guards)
-+ {
-+ check_guards (memory, TRUE);
-+ if (memory)
-+ {
-+ n_blocks_outstanding -= 1;
-+
-+ _dbus_assert (n_blocks_outstanding >= 0);
-+
-+ free (((unsigned char*)memory) - GUARD_START_OFFSET);
-+ }
-+
-+ return;
-+ }
-+#endif
-+
-+ if (memory) /* we guarantee it's safe to free (NULL) */
-+ {
-+#ifdef DBUS_BUILD_TESTS
-+ n_blocks_outstanding -= 1;
-+
-+ _dbus_assert (n_blocks_outstanding >= 0);
-+#endif
-+
-+ free (memory);
-+ }
-+}
-+
-+/**
-+ * Frees a #NULL-terminated array of strings.
-+ * If passed #NULL, does nothing.
-+ *
-+ * @param str_array the array to be freed
-+ */
-+void
-+dbus_free_string_array (char **str_array)
-+{
-+ if (str_array)
-+ {
-+ int i;
-+
-+ i = 0;
-+ while (str_array[i])
-+ {
-+ dbus_free (str_array[i]);
-+ i++;
-+ }
-+
-+ dbus_free (str_array);
-+ }
-+}
-+
-+/** @} */ /* End of public API docs block */
-+
-+
-+/**
-+ * @addtogroup DBusMemoryInternals
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * _dbus_current_generation is used to track each
-+ * time that dbus_shutdown() is called, so we can
-+ * reinit things after it's been called. It is simply
-+ * incremented each time we shut down.
-+ */
-+int _dbus_current_generation = 1;
-+
-+/**
-+ * Represents a function to be called on shutdown.
-+ */
-+typedef struct ShutdownClosure ShutdownClosure;
-+
-+/**
-+ * This struct represents a function to be called on shutdown.
-+ */
-+struct ShutdownClosure
-+{
-+ ShutdownClosure *next; /**< Next ShutdownClosure */
-+ DBusShutdownFunction func; /**< Function to call */
-+ void *data; /**< Data for function */
-+};
-+
-+_DBUS_DEFINE_GLOBAL_LOCK (shutdown_funcs);
-+static ShutdownClosure *registered_globals = NULL;
-+
-+/**
-+ * Register a cleanup function to be called exactly once
-+ * the next time dbus_shutdown() is called.
-+ *
-+ * @param func the function
-+ * @param data data to pass to the function
-+ * @returns #FALSE on not enough memory
-+ */
-+dbus_bool_t
-+_dbus_register_shutdown_func (DBusShutdownFunction func,
-+ void *data)
-+{
-+ ShutdownClosure *c;
-+
-+ c = dbus_new (ShutdownClosure, 1);
-+
-+ if (c == NULL)
-+ return FALSE;
-+
-+ c->func = func;
-+ c->data = data;
-+
-+ _DBUS_LOCK (shutdown_funcs);
-+
-+ c->next = registered_globals;
-+ registered_globals = c;
-+
-+ _DBUS_UNLOCK (shutdown_funcs);
-+
-+ return TRUE;
-+}
-+
-+/** @} */ /* End of private API docs block */
-+
-+
-+/**
-+ * @addtogroup DBusMemory
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * The D-BUS library keeps some internal global variables, for example
-+ * to cache the username of the current process. This function is
-+ * used to free these global variables. It is really useful only for
-+ * leak-checking cleanliness and the like. WARNING: this function is
-+ * NOT thread safe, it must be called while NO other threads are using
-+ * D-BUS. You cannot continue using D-BUS after calling this function,
-+ * as it does things like free global mutexes created by
-+ * dbus_threads_init(). To use a D-BUS function after calling
-+ * dbus_shutdown(), you have to start over from scratch, e.g. calling
-+ * dbus_threads_init() again.
-+ */
-+void
-+dbus_shutdown (void)
-+{
-+ while (registered_globals != NULL)
-+ {
-+ ShutdownClosure *c;
-+
-+ c = registered_globals;
-+ registered_globals = c->next;
-+
-+ (* c->func) (c->data);
-+
-+ dbus_free (c);
-+ }
-+
-+ _dbus_current_generation += 1;
-+}
-+
-+/** @} */ /** End of public API docs block */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+
-+/**
-+ * @ingroup DBusMemoryInternals
-+ * Unit test for DBusMemory
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_memory_test (void)
-+{
-+ dbus_bool_t old_guards;
-+ void *p;
-+ size_t size;
-+
-+ old_guards = guards;
-+ guards = TRUE;
-+ p = dbus_malloc (4);
-+ if (p == NULL)
-+ _dbus_assert_not_reached ("no memory");
-+ for (size = 4; size < 256; size += 4)
-+ {
-+ p = dbus_realloc (p, size);
-+ if (p == NULL)
-+ _dbus_assert_not_reached ("no memory");
-+ }
-+ for (size = 256; size != 0; size -= 4)
-+ {
-+ p = dbus_realloc (p, size);
-+ if (p == NULL)
-+ _dbus_assert_not_reached ("no memory");
-+ }
-+ dbus_free (p);
-+ guards = old_guards;
-+ return TRUE;
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/dbus/dbus-memory.h dbus-0.61/dbus/dbus-memory.h
---- dbus-0.61.orig/dbus/dbus-memory.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-memory.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,52 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-memory.h D-BUS memory handling
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_MEMORY_H
-+#define DBUS_MEMORY_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <stddef.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+void* dbus_malloc (size_t bytes);
-+void* dbus_malloc0 (size_t bytes);
-+void* dbus_realloc (void *memory,
-+ size_t bytes);
-+void dbus_free (void *memory);
-+
-+#define dbus_new(type, count) ((type*)dbus_malloc (sizeof (type) * (count)));
-+#define dbus_new0(type, count) ((type*)dbus_malloc0 (sizeof (type) * (count)));
-+
-+void dbus_free_string_array (char **str_array);
-+
-+typedef void (* DBusFreeFunction) (void *memory);
-+
-+void dbus_shutdown (void);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_MEMORY_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-mempool.c dbus-0.61/dbus/dbus-mempool.c
---- dbus-0.61.orig/dbus/dbus-mempool.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-mempool.c 2004-08-10 05:07:00.000000000 +0200
-@@ -0,0 +1,577 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-mempool.h Memory pools
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-mempool.h"
-+#include "dbus-internals.h"
-+
-+/**
-+ * @defgroup DBusMemPool memory pools
-+ * @ingroup DBusInternals
-+ * @brief DBusMemPool object
-+ *
-+ * Types and functions related to DBusMemPool. A memory pool is used
-+ * to decrease memory fragmentation/overhead and increase speed for
-+ * blocks of small uniformly-sized objects. The main point is to avoid
-+ * the overhead of a malloc block for each small object, speed is
-+ * secondary.
-+ */
-+
-+/**
-+ * @defgroup DBusMemPoolInternals Memory pool implementation details
-+ * @ingroup DBusInternals
-+ * @brief DBusMemPool implementation details
-+ *
-+ * The guts of DBusMemPool.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * typedef so DBusFreedElement struct can refer to itself.
-+ */
-+typedef struct DBusFreedElement DBusFreedElement;
-+
-+/**
-+ * struct representing an element on the free list.
-+ * We just cast freed elements to this so we can
-+ * make a list out of them.
-+ */
-+struct DBusFreedElement
-+{
-+ DBusFreedElement *next; /**< next element of the free list */
-+};
-+
-+/**
-+ * The dummy size of the variable-length "elements"
-+ * field in DBusMemBlock
-+ */
-+#define ELEMENT_PADDING 4
-+
-+/**
-+ * Typedef for DBusMemBlock so the struct can recursively
-+ * point to itself.
-+ */
-+typedef struct DBusMemBlock DBusMemBlock;
-+
-+/**
-+ * DBusMemBlock object represents a single malloc()-returned
-+ * block that gets chunked up into objects in the memory pool.
-+ */
-+struct DBusMemBlock
-+{
-+ DBusMemBlock *next; /**< next block in the list, which is already used up;
-+ * only saved so we can free all the blocks
-+ * when we free the mem pool.
-+ */
-+
-+ /* this is a long so that "elements" is aligned */
-+ long used_so_far; /**< bytes of this block already allocated as elements. */
-+
-+ unsigned char elements[ELEMENT_PADDING]; /**< the block data, actually allocated to required size */
-+};
-+
-+/**
-+ * Internals fields of DBusMemPool
-+ */
-+struct DBusMemPool
-+{
-+ int element_size; /**< size of a single object in the pool */
-+ int block_size; /**< size of most recently allocated block */
-+ unsigned int zero_elements : 1; /**< whether to zero-init allocated elements */
-+
-+ DBusFreedElement *free_elements; /**< a free list of elements to recycle */
-+ DBusMemBlock *blocks; /**< blocks of memory from malloc() */
-+ int allocated_elements; /**< Count of outstanding allocated elements */
-+};
-+
-+/** @} */
-+
-+/**
-+ * @addtogroup DBusMemPool
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @typedef DBusMemPool
-+ *
-+ * Opaque object representing a memory pool. Memory pools allow
-+ * avoiding per-malloc-block memory overhead when allocating a lot of
-+ * small objects that are all the same size. They are slightly
-+ * faster than calling malloc() also.
-+ */
-+
-+/**
-+ * Creates a new memory pool, or returns #NULL on failure. Objects in
-+ * the pool must be at least sizeof(void*) bytes each, due to the way
-+ * memory pools work. To avoid creating 64 bit problems, this means at
-+ * least 8 bytes on all platforms, unless you are 4 bytes on 32-bit
-+ * and 8 bytes on 64-bit.
-+ *
-+ * @param element_size size of an element allocated from the pool.
-+ * @param zero_elements whether to zero-initialize elements
-+ * @returns the new pool or #NULL
-+ */
-+DBusMemPool*
-+_dbus_mem_pool_new (int element_size,
-+ dbus_bool_t zero_elements)
-+{
-+ DBusMemPool *pool;
-+
-+ pool = dbus_new0 (DBusMemPool, 1);
-+ if (pool == NULL)
-+ return NULL;
-+
-+ /* Make the element size at least 8 bytes. */
-+ if (element_size < 8)
-+ element_size = 8;
-+
-+ /* these assertions are equivalent but the first is more clear
-+ * to programmers that see it fail.
-+ */
-+ _dbus_assert (element_size >= (int) sizeof (void*));
-+ _dbus_assert (element_size >= (int) sizeof (DBusFreedElement));
-+
-+ /* align the element size to a pointer boundary so we won't get bus
-+ * errors under other architectures.
-+ */
-+ pool->element_size = _DBUS_ALIGN_VALUE (element_size, sizeof (void *));
-+
-+ pool->zero_elements = zero_elements != FALSE;
-+
-+ pool->allocated_elements = 0;
-+
-+ /* pick a size for the first block; it increases
-+ * for each block we need to allocate. This is
-+ * actually half the initial block size
-+ * since _dbus_mem_pool_alloc() unconditionally
-+ * doubles it prior to creating a new block. */
-+ pool->block_size = pool->element_size * 8;
-+
-+ _dbus_assert ((pool->block_size %
-+ pool->element_size) == 0);
-+
-+ return pool;
-+}
-+
-+/**
-+ * Frees a memory pool (and all elements allocated from it).
-+ *
-+ * @param pool the memory pool.
-+ */
-+void
-+_dbus_mem_pool_free (DBusMemPool *pool)
-+{
-+ DBusMemBlock *block;
-+
-+ block = pool->blocks;
-+ while (block != NULL)
-+ {
-+ DBusMemBlock *next = block->next;
-+
-+ dbus_free (block);
-+
-+ block = next;
-+ }
-+
-+ dbus_free (pool);
-+}
-+
-+/**
-+ * Allocates an object from the memory pool.
-+ * The object must be freed with _dbus_mem_pool_dealloc().
-+ *
-+ * @param pool the memory pool
-+ * @returns the allocated object or #NULL if no memory.
-+ */
-+void*
-+_dbus_mem_pool_alloc (DBusMemPool *pool)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ if (_dbus_disable_mem_pools ())
-+ {
-+ DBusMemBlock *block;
-+ int alloc_size;
-+
-+ /* This is obviously really silly, but it's
-+ * debug-mode-only code that is compiled out
-+ * when tests are disabled (_dbus_disable_mem_pools()
-+ * is a constant expression FALSE so this block
-+ * should vanish)
-+ */
-+
-+ alloc_size = sizeof (DBusMemBlock) - ELEMENT_PADDING +
-+ pool->element_size;
-+
-+ if (pool->zero_elements)
-+ block = dbus_malloc0 (alloc_size);
-+ else
-+ block = dbus_malloc (alloc_size);
-+
-+ if (block != NULL)
-+ {
-+ block->next = pool->blocks;
-+ pool->blocks = block;
-+ pool->allocated_elements += 1;
-+
-+ return (void*) &block->elements[0];
-+ }
-+ else
-+ return NULL;
-+ }
-+ else
-+#endif
-+ {
-+ if (_dbus_decrement_fail_alloc_counter ())
-+ {
-+ _dbus_verbose (" FAILING mempool alloc\n");
-+ return NULL;
-+ }
-+ else if (pool->free_elements)
-+ {
-+ DBusFreedElement *element = pool->free_elements;
-+
-+ pool->free_elements = pool->free_elements->next;
-+
-+ if (pool->zero_elements)
-+ memset (element, '\0', pool->element_size);
-+
-+ pool->allocated_elements += 1;
-+
-+ return element;
-+ }
-+ else
-+ {
-+ void *element;
-+
-+ if (pool->blocks == NULL ||
-+ pool->blocks->used_so_far == pool->block_size)
-+ {
-+ /* Need a new block */
-+ DBusMemBlock *block;
-+ int alloc_size;
-+#ifdef DBUS_BUILD_TESTS
-+ int saved_counter;
-+#endif
-+
-+ if (pool->block_size <= _DBUS_INT_MAX / 4) /* avoid overflow */
-+ {
-+ /* use a larger block size for our next block */
-+ pool->block_size *= 2;
-+ _dbus_assert ((pool->block_size %
-+ pool->element_size) == 0);
-+ }
-+
-+ alloc_size = sizeof (DBusMemBlock) - ELEMENT_PADDING + pool->block_size;
-+
-+#ifdef DBUS_BUILD_TESTS
-+ /* We save/restore the counter, so that memory pools won't
-+ * cause a given function to have different number of
-+ * allocations on different invocations. i.e. when testing
-+ * we want consistent alloc patterns. So we skip our
-+ * malloc here for purposes of failed alloc simulation.
-+ */
-+ saved_counter = _dbus_get_fail_alloc_counter ();
-+ _dbus_set_fail_alloc_counter (_DBUS_INT_MAX);
-+#endif
-+
-+ if (pool->zero_elements)
-+ block = dbus_malloc0 (alloc_size);
-+ else
-+ block = dbus_malloc (alloc_size);
-+
-+#ifdef DBUS_BUILD_TESTS
-+ _dbus_set_fail_alloc_counter (saved_counter);
-+ _dbus_assert (saved_counter == _dbus_get_fail_alloc_counter ());
-+#endif
-+
-+ if (block == NULL)
-+ return NULL;
-+
-+ block->used_so_far = 0;
-+ block->next = pool->blocks;
-+ pool->blocks = block;
-+ }
-+
-+ element = &pool->blocks->elements[pool->blocks->used_so_far];
-+
-+ pool->blocks->used_so_far += pool->element_size;
-+
-+ pool->allocated_elements += 1;
-+
-+ return element;
-+ }
-+ }
-+}
-+
-+/**
-+ * Deallocates an object previously created with
-+ * _dbus_mem_pool_alloc(). The previous object
-+ * must have come from this same pool.
-+ * @param pool the memory pool
-+ * @param element the element earlier allocated.
-+ * @returns #TRUE if there are no remaining allocated elements
-+ */
-+dbus_bool_t
-+_dbus_mem_pool_dealloc (DBusMemPool *pool,
-+ void *element)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ if (_dbus_disable_mem_pools ())
-+ {
-+ DBusMemBlock *block;
-+ DBusMemBlock *prev;
-+
-+ /* mmm, fast. ;-) debug-only code, so doesn't matter. */
-+
-+ prev = NULL;
-+ block = pool->blocks;
-+
-+ while (block != NULL)
-+ {
-+ if (block->elements == (unsigned char*) element)
-+ {
-+ if (prev)
-+ prev->next = block->next;
-+ else
-+ pool->blocks = block->next;
-+
-+ dbus_free (block);
-+
-+ _dbus_assert (pool->allocated_elements > 0);
-+ pool->allocated_elements -= 1;
-+
-+ if (pool->allocated_elements == 0)
-+ _dbus_assert (pool->blocks == NULL);
-+
-+ return pool->blocks == NULL;
-+ }
-+ prev = block;
-+ block = block->next;
-+ }
-+
-+ _dbus_assert_not_reached ("freed nonexistent block");
-+ return FALSE;
-+ }
-+ else
-+#endif
-+ {
-+ DBusFreedElement *freed;
-+
-+ freed = element;
-+ freed->next = pool->free_elements;
-+ pool->free_elements = freed;
-+
-+ _dbus_assert (pool->allocated_elements > 0);
-+ pool->allocated_elements -= 1;
-+
-+ return pool->allocated_elements == 0;
-+ }
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+#include <time.h>
-+
-+static void
-+time_for_size (int size)
-+{
-+ int i;
-+ int j;
-+ clock_t start;
-+ clock_t end;
-+#define FREE_ARRAY_SIZE 512
-+#define N_ITERATIONS FREE_ARRAY_SIZE * 512
-+ void *to_free[FREE_ARRAY_SIZE];
-+ DBusMemPool *pool;
-+
-+ _dbus_verbose ("Timings for size %d\n", size);
-+
-+ _dbus_verbose (" malloc\n");
-+
-+ start = clock ();
-+
-+ i = 0;
-+ j = 0;
-+ while (i < N_ITERATIONS)
-+ {
-+ to_free[j] = dbus_malloc (size);
-+ _dbus_assert (to_free[j] != NULL); /* in a real app of course this is wrong */
-+
-+ ++j;
-+
-+ if (j == FREE_ARRAY_SIZE)
-+ {
-+ j = 0;
-+ while (j < FREE_ARRAY_SIZE)
-+ {
-+ dbus_free (to_free[j]);
-+ ++j;
-+ }
-+
-+ j = 0;
-+ }
-+
-+ ++i;
-+ }
-+
-+ end = clock ();
-+
-+ _dbus_verbose (" created/destroyed %d elements in %g seconds\n",
-+ N_ITERATIONS, (end - start) / (double) CLOCKS_PER_SEC);
-+
-+
-+
-+ _dbus_verbose (" mempools\n");
-+
-+ start = clock ();
-+
-+ pool = _dbus_mem_pool_new (size, FALSE);
-+
-+ i = 0;
-+ j = 0;
-+ while (i < N_ITERATIONS)
-+ {
-+ to_free[j] = _dbus_mem_pool_alloc (pool);
-+ _dbus_assert (to_free[j] != NULL); /* in a real app of course this is wrong */
-+
-+ ++j;
-+
-+ if (j == FREE_ARRAY_SIZE)
-+ {
-+ j = 0;
-+ while (j < FREE_ARRAY_SIZE)
-+ {
-+ _dbus_mem_pool_dealloc (pool, to_free[j]);
-+ ++j;
-+ }
-+
-+ j = 0;
-+ }
-+
-+ ++i;
-+ }
-+
-+ _dbus_mem_pool_free (pool);
-+
-+ end = clock ();
-+
-+ _dbus_verbose (" created/destroyed %d elements in %g seconds\n",
-+ N_ITERATIONS, (end - start) / (double) CLOCKS_PER_SEC);
-+
-+ _dbus_verbose (" zeroed malloc\n");
-+
-+ start = clock ();
-+
-+ i = 0;
-+ j = 0;
-+ while (i < N_ITERATIONS)
-+ {
-+ to_free[j] = dbus_malloc0 (size);
-+ _dbus_assert (to_free[j] != NULL); /* in a real app of course this is wrong */
-+
-+ ++j;
-+
-+ if (j == FREE_ARRAY_SIZE)
-+ {
-+ j = 0;
-+ while (j < FREE_ARRAY_SIZE)
-+ {
-+ dbus_free (to_free[j]);
-+ ++j;
-+ }
-+
-+ j = 0;
-+ }
-+
-+ ++i;
-+ }
-+
-+ end = clock ();
-+
-+ _dbus_verbose (" created/destroyed %d elements in %g seconds\n",
-+ N_ITERATIONS, (end - start) / (double) CLOCKS_PER_SEC);
-+
-+ _dbus_verbose (" zeroed mempools\n");
-+
-+ start = clock ();
-+
-+ pool = _dbus_mem_pool_new (size, TRUE);
-+
-+ i = 0;
-+ j = 0;
-+ while (i < N_ITERATIONS)
-+ {
-+ to_free[j] = _dbus_mem_pool_alloc (pool);
-+ _dbus_assert (to_free[j] != NULL); /* in a real app of course this is wrong */
-+
-+ ++j;
-+
-+ if (j == FREE_ARRAY_SIZE)
-+ {
-+ j = 0;
-+ while (j < FREE_ARRAY_SIZE)
-+ {
-+ _dbus_mem_pool_dealloc (pool, to_free[j]);
-+ ++j;
-+ }
-+
-+ j = 0;
-+ }
-+
-+ ++i;
-+ }
-+
-+ _dbus_mem_pool_free (pool);
-+
-+ end = clock ();
-+
-+ _dbus_verbose (" created/destroyed %d elements in %g seconds\n",
-+ N_ITERATIONS, (end - start) / (double) CLOCKS_PER_SEC);
-+}
-+
-+/**
-+ * @ingroup DBusMemPoolInternals
-+ * Unit test for DBusMemPool
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_mem_pool_test (void)
-+{
-+ int i;
-+ int element_sizes[] = { 4, 8, 16, 50, 124 };
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (element_sizes))
-+ {
-+ time_for_size (element_sizes[i]);
-+ ++i;
-+ }
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-mempool.h dbus-0.61/dbus/dbus-mempool.h
---- dbus-0.61.orig/dbus/dbus-mempool.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-mempool.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,44 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-mempool.h Memory pools
-+ *
-+ * Copyright (C) 2002 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_MEMPOOL_H
-+#define DBUS_MEMPOOL_H
-+
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-types.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusMemPool DBusMemPool;
-+
-+DBusMemPool* _dbus_mem_pool_new (int element_size,
-+ dbus_bool_t zero_elements);
-+void _dbus_mem_pool_free (DBusMemPool *pool);
-+void* _dbus_mem_pool_alloc (DBusMemPool *pool);
-+dbus_bool_t _dbus_mem_pool_dealloc (DBusMemPool *pool,
-+ void *element);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_MEMPOOL_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-message-factory.c dbus-0.61/dbus/dbus-message-factory.c
---- dbus-0.61.orig/dbus/dbus-message-factory.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-message-factory.c 2005-09-07 00:38:54.000000000 +0200
-@@ -0,0 +1,1224 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-message-factory.c Generator of valid and invalid message data for test suite
-+ *
-+ * Copyright (C) 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <config.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-message-factory.h"
-+#include "dbus-message-private.h"
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+typedef enum
-+ {
-+ CHANGE_TYPE_ADJUST,
-+ CHANGE_TYPE_ABSOLUTE
-+ } ChangeType;
-+
-+#define BYTE_ORDER_OFFSET 0
-+#define TYPE_OFFSET 1
-+#define BODY_LENGTH_OFFSET 4
-+#define FIELDS_ARRAY_LENGTH_OFFSET 12
-+
-+static void
-+iter_recurse (DBusMessageDataIter *iter)
-+{
-+ iter->depth += 1;
-+ _dbus_assert (iter->depth < _DBUS_MESSAGE_DATA_MAX_NESTING);
-+ _dbus_assert (iter->sequence_nos[iter->depth] >= 0);
-+}
-+
-+static int
-+iter_get_sequence (DBusMessageDataIter *iter)
-+{
-+ _dbus_assert (iter->sequence_nos[iter->depth] >= 0);
-+ return iter->sequence_nos[iter->depth];
-+}
-+
-+static void
-+iter_set_sequence (DBusMessageDataIter *iter,
-+ int sequence)
-+{
-+ _dbus_assert (sequence >= 0);
-+ iter->sequence_nos[iter->depth] = sequence;
-+}
-+
-+static void
-+iter_unrecurse (DBusMessageDataIter *iter)
-+{
-+ iter->depth -= 1;
-+ _dbus_assert (iter->depth >= 0);
-+}
-+
-+static void
-+iter_next (DBusMessageDataIter *iter)
-+{
-+ iter->sequence_nos[iter->depth] += 1;
-+}
-+
-+static dbus_bool_t
-+iter_first_in_series (DBusMessageDataIter *iter)
-+{
-+ int i;
-+
-+ i = iter->depth;
-+ while (i < _DBUS_MESSAGE_DATA_MAX_NESTING)
-+ {
-+ if (iter->sequence_nos[i] != 0)
-+ return FALSE;
-+ ++i;
-+ }
-+ return TRUE;
-+}
-+
-+typedef dbus_bool_t (* DBusInnerGeneratorFunc) (DBusMessageDataIter *iter,
-+ DBusMessage **message_p);
-+typedef dbus_bool_t (* DBusMessageGeneratorFunc) (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity);
-+
-+static void
-+set_reply_serial (DBusMessage *message)
-+{
-+ if (message == NULL)
-+ _dbus_assert_not_reached ("oom");
-+ if (!dbus_message_set_reply_serial (message, 100))
-+ _dbus_assert_not_reached ("oom");
-+}
-+
-+static dbus_bool_t
-+generate_trivial_inner (DBusMessageDataIter *iter,
-+ DBusMessage **message_p)
-+{
-+ DBusMessage *message;
-+
-+ switch (iter_get_sequence (iter))
-+ {
-+ case 0:
-+ message = dbus_message_new_method_call ("org.freedesktop.TextEditor",
-+ "/foo/bar",
-+ "org.freedesktop.DocumentFactory",
-+ "Create");
-+ break;
-+ case 1:
-+ message = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_RETURN);
-+ set_reply_serial (message);
-+ break;
-+ case 2:
-+ message = dbus_message_new_signal ("/foo/bar",
-+ "org.freedesktop.DocumentFactory",
-+ "Created");
-+ break;
-+ case 3:
-+ message = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR);
-+
-+ if (!dbus_message_set_error_name (message,
-+ "org.freedesktop.TestErrorName"))
-+ _dbus_assert_not_reached ("oom");
-+
-+ {
-+ DBusMessageIter iter;
-+ const char *v_STRING = "This is an error";
-+
-+ dbus_message_iter_init_append (message, &iter);
-+ if (!dbus_message_iter_append_basic (&iter,
-+ DBUS_TYPE_STRING,
-+ &v_STRING))
-+ _dbus_assert_not_reached ("oom");
-+ }
-+
-+ set_reply_serial (message);
-+ break;
-+ default:
-+ return FALSE;
-+ }
-+
-+ if (message == NULL)
-+ _dbus_assert_not_reached ("oom");
-+
-+ *message_p = message;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+generate_many_bodies_inner (DBusMessageDataIter *iter,
-+ DBusMessage **message_p)
-+{
-+ DBusMessage *message;
-+ DBusString signature;
-+ DBusString body;
-+
-+ /* Keeping this small makes things go faster */
-+ message = dbus_message_new_method_call ("o.z.F",
-+ "/",
-+ "o.z.B",
-+ "Nah");
-+ if (message == NULL)
-+ _dbus_assert_not_reached ("oom");
-+
-+ set_reply_serial (message);
-+
-+ if (!_dbus_string_init (&signature) || !_dbus_string_init (&body))
-+ _dbus_assert_not_reached ("oom");
-+
-+ if (dbus_internal_do_not_use_generate_bodies (iter_get_sequence (iter),
-+ message->byte_order,
-+ &signature, &body))
-+ {
-+ const char *v_SIGNATURE;
-+
-+ v_SIGNATURE = _dbus_string_get_const_data (&signature);
-+ if (!_dbus_header_set_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ DBUS_TYPE_SIGNATURE,
-+ &v_SIGNATURE))
-+ _dbus_assert_not_reached ("oom");
-+
-+ if (!_dbus_string_move (&body, 0, &message->body, 0))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_marshal_set_uint32 (&message->header.data, BODY_LENGTH_OFFSET,
-+ _dbus_string_get_length (&message->body),
-+ message->byte_order);
-+
-+ *message_p = message;
-+ }
-+ else
-+ {
-+ dbus_message_unref (message);
-+ *message_p = NULL;
-+ }
-+
-+ _dbus_string_free (&signature);
-+ _dbus_string_free (&body);
-+
-+ return *message_p != NULL;
-+}
-+
-+static void
-+generate_from_message (DBusString *data,
-+ DBusValidity *expected_validity,
-+ DBusMessage *message)
-+{
-+ _dbus_message_set_serial (message, 1);
-+ _dbus_message_lock (message);
-+
-+ *expected_validity = DBUS_VALID;
-+
-+ /* move for efficiency, since we'll nuke the message anyway */
-+ if (!_dbus_string_move (&message->header.data, 0,
-+ data, 0))
-+ _dbus_assert_not_reached ("oom");
-+
-+ if (!_dbus_string_copy (&message->body, 0,
-+ data, _dbus_string_get_length (data)))
-+ _dbus_assert_not_reached ("oom");
-+}
-+
-+static dbus_bool_t
-+generate_outer (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity,
-+ DBusInnerGeneratorFunc func)
-+{
-+ DBusMessage *message;
-+
-+ message = NULL;
-+ if (!(*func)(iter, &message))
-+ return FALSE;
-+
-+ iter_next (iter);
-+
-+ _dbus_assert (message != NULL);
-+
-+ generate_from_message (data, expected_validity, message);
-+
-+ dbus_message_unref (message);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+generate_trivial (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity)
-+{
-+ return generate_outer (iter, data, expected_validity,
-+ generate_trivial_inner);
-+}
-+
-+static dbus_bool_t
-+generate_many_bodies (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity)
-+{
-+ return generate_outer (iter, data, expected_validity,
-+ generate_many_bodies_inner);
-+}
-+
-+static DBusMessage*
-+simple_method_call (void)
-+{
-+ DBusMessage *message;
-+ /* Keeping this small makes stuff go faster */
-+ message = dbus_message_new_method_call ("o.b.Q",
-+ "/f/b",
-+ "o.b.Z",
-+ "Fro");
-+ if (message == NULL)
-+ _dbus_assert_not_reached ("oom");
-+ return message;
-+}
-+
-+static DBusMessage*
-+simple_signal (void)
-+{
-+ DBusMessage *message;
-+ message = dbus_message_new_signal ("/f/b",
-+ "o.b.Z",
-+ "Fro");
-+ if (message == NULL)
-+ _dbus_assert_not_reached ("oom");
-+ return message;
-+}
-+
-+static DBusMessage*
-+simple_method_return (void)
-+{
-+ DBusMessage *message;
-+ message = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_RETURN);
-+ if (message == NULL)
-+ _dbus_assert_not_reached ("oom");
-+
-+ set_reply_serial (message);
-+
-+ return message;
-+}
-+
-+static DBusMessage*
-+simple_error (void)
-+{
-+ DBusMessage *message;
-+ message = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR);
-+ if (message == NULL)
-+ _dbus_assert_not_reached ("oom");
-+
-+ if (!dbus_message_set_error_name (message, "foo.bar"))
-+ _dbus_assert_not_reached ("oom");
-+
-+ set_reply_serial (message);
-+
-+ return message;
-+}
-+
-+static dbus_bool_t
-+generate_special (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity)
-+{
-+ int item_seq;
-+ DBusMessage *message;
-+ int pos;
-+ dbus_int32_t v_INT32;
-+
-+ _dbus_assert (_dbus_string_get_length (data) == 0);
-+
-+ message = NULL;
-+ pos = -1;
-+ v_INT32 = 42;
-+ item_seq = iter_get_sequence (iter);
-+
-+ if (item_seq == 0)
-+ {
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ /* set an invalid typecode */
-+ _dbus_string_set_byte (data, pos + 1, '$');
-+
-+ *expected_validity = DBUS_INVALID_UNKNOWN_TYPECODE;
-+ }
-+ else if (item_seq == 1)
-+ {
-+ char long_sig[DBUS_MAXIMUM_TYPE_RECURSION_DEPTH+2];
-+ const char *v_STRING;
-+ int i;
-+
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ i = 0;
-+ while (i < (DBUS_MAXIMUM_TYPE_RECURSION_DEPTH + 1))
-+ {
-+ long_sig[i] = DBUS_TYPE_ARRAY;
-+ ++i;
-+ }
-+ long_sig[i] = DBUS_TYPE_INVALID;
-+
-+ v_STRING = long_sig;
-+ if (!_dbus_header_set_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ DBUS_TYPE_SIGNATURE,
-+ &v_STRING))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_EXCEEDED_MAXIMUM_ARRAY_RECURSION;
-+ }
-+ else if (item_seq == 2)
-+ {
-+ char long_sig[DBUS_MAXIMUM_TYPE_RECURSION_DEPTH*2+4];
-+ const char *v_STRING;
-+ int i;
-+
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ i = 0;
-+ while (i <= (DBUS_MAXIMUM_TYPE_RECURSION_DEPTH + 1))
-+ {
-+ long_sig[i] = DBUS_STRUCT_BEGIN_CHAR;
-+ ++i;
-+ }
-+
-+ long_sig[i] = DBUS_TYPE_INT32;
-+ ++i;
-+
-+ while (i < (DBUS_MAXIMUM_TYPE_RECURSION_DEPTH*2 + 3))
-+ {
-+ long_sig[i] = DBUS_STRUCT_END_CHAR;
-+ ++i;
-+ }
-+ long_sig[i] = DBUS_TYPE_INVALID;
-+
-+ v_STRING = long_sig;
-+ if (!_dbus_header_set_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ DBUS_TYPE_SIGNATURE,
-+ &v_STRING))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_EXCEEDED_MAXIMUM_STRUCT_RECURSION;
-+ }
-+ else if (item_seq == 3)
-+ {
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_string_set_byte (data, pos + 1, DBUS_STRUCT_BEGIN_CHAR);
-+
-+ *expected_validity = DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED;
-+ }
-+ else if (item_seq == 4)
-+ {
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_string_set_byte (data, pos + 1, DBUS_STRUCT_END_CHAR);
-+
-+ *expected_validity = DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED;
-+ }
-+ else if (item_seq == 5)
-+ {
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_string_set_byte (data, pos + 1, DBUS_STRUCT_BEGIN_CHAR);
-+ _dbus_string_set_byte (data, pos + 2, DBUS_STRUCT_END_CHAR);
-+
-+ *expected_validity = DBUS_INVALID_STRUCT_HAS_NO_FIELDS;
-+ }
-+ else if (item_seq == 6)
-+ {
-+ message = simple_method_call ();
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_string_set_byte (data, TYPE_OFFSET, DBUS_MESSAGE_TYPE_INVALID);
-+
-+ *expected_validity = DBUS_INVALID_BAD_MESSAGE_TYPE;
-+ }
-+ else if (item_seq == 7)
-+ {
-+ /* Messages of unknown type are considered valid */
-+ message = simple_method_call ();
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_string_set_byte (data, TYPE_OFFSET, 100);
-+
-+ *expected_validity = DBUS_VALID;
-+ }
-+ else if (item_seq == 8)
-+ {
-+ message = simple_method_call ();
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_marshal_set_uint32 (data, BODY_LENGTH_OFFSET,
-+ DBUS_MAXIMUM_MESSAGE_LENGTH / 2 + 4,
-+ message->byte_order);
-+ _dbus_marshal_set_uint32 (data, FIELDS_ARRAY_LENGTH_OFFSET,
-+ DBUS_MAXIMUM_MESSAGE_LENGTH / 2 + 4,
-+ message->byte_order);
-+ *expected_validity = DBUS_INVALID_MESSAGE_TOO_LONG;
-+ }
-+ else if (item_seq == 9)
-+ {
-+ const char *v_STRING = "not a valid bus name";
-+ message = simple_method_call ();
-+
-+ if (!_dbus_header_set_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_SENDER,
-+ DBUS_TYPE_STRING, &v_STRING))
-+ _dbus_assert_not_reached ("oom");
-+
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_BAD_SENDER;
-+ }
-+ else if (item_seq == 10)
-+ {
-+ message = simple_method_call ();
-+
-+ if (!dbus_message_set_interface (message, DBUS_INTERFACE_LOCAL))
-+ _dbus_assert_not_reached ("oom");
-+
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_USES_LOCAL_INTERFACE;
-+ }
-+ else if (item_seq == 11)
-+ {
-+ message = simple_method_call ();
-+
-+ if (!dbus_message_set_path (message, DBUS_PATH_LOCAL))
-+ _dbus_assert_not_reached ("oom");
-+
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_USES_LOCAL_PATH;
-+ }
-+ else if (item_seq == 12)
-+ {
-+ /* Method calls don't have to have interface */
-+ message = simple_method_call ();
-+
-+ if (!dbus_message_set_interface (message, NULL))
-+ _dbus_assert_not_reached ("oom");
-+
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_VALID;
-+ }
-+ else if (item_seq == 13)
-+ {
-+ /* Signals require an interface */
-+ message = simple_signal ();
-+
-+ if (!dbus_message_set_interface (message, NULL))
-+ _dbus_assert_not_reached ("oom");
-+
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_MISSING_INTERFACE;
-+ }
-+ else if (item_seq == 14)
-+ {
-+ message = simple_method_return ();
-+
-+ if (!_dbus_header_delete_field (&message->header, DBUS_HEADER_FIELD_REPLY_SERIAL))
-+ _dbus_assert_not_reached ("oom");
-+
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_MISSING_REPLY_SERIAL;
-+ }
-+ else if (item_seq == 15)
-+ {
-+ message = simple_error ();
-+
-+ if (!dbus_message_set_error_name (message, NULL))
-+ _dbus_assert_not_reached ("oom");
-+
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_MISSING_ERROR_NAME;
-+ }
-+ else if (item_seq == 16)
-+ {
-+ char long_sig[DBUS_MAXIMUM_TYPE_RECURSION_DEPTH*4+8];
-+ const char *v_STRING;
-+ int i;
-+ int n_begins;
-+
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ i = 0;
-+ while (i <= (DBUS_MAXIMUM_TYPE_RECURSION_DEPTH*3 + 3))
-+ {
-+ long_sig[i] = DBUS_TYPE_ARRAY;
-+ ++i;
-+ long_sig[i] = DBUS_DICT_ENTRY_BEGIN_CHAR;
-+ ++i;
-+ long_sig[i] = DBUS_TYPE_INT32;
-+ ++i;
-+ }
-+ n_begins = i / 3;
-+
-+ long_sig[i] = DBUS_TYPE_INT32;
-+ ++i;
-+
-+ while (n_begins > 0)
-+ {
-+ long_sig[i] = DBUS_DICT_ENTRY_END_CHAR;
-+ ++i;
-+ n_begins -= 1;
-+ }
-+ long_sig[i] = DBUS_TYPE_INVALID;
-+
-+ v_STRING = long_sig;
-+ if (!_dbus_header_set_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ DBUS_TYPE_SIGNATURE,
-+ &v_STRING))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ *expected_validity = DBUS_INVALID_EXCEEDED_MAXIMUM_DICT_ENTRY_RECURSION;
-+ }
-+ else if (item_seq == 17)
-+ {
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_string_set_byte (data, pos + 1, DBUS_TYPE_ARRAY);
-+ _dbus_string_set_byte (data, pos + 2, DBUS_DICT_ENTRY_BEGIN_CHAR);
-+
-+ *expected_validity = DBUS_INVALID_DICT_ENTRY_STARTED_BUT_NOT_ENDED;
-+ }
-+ else if (item_seq == 18)
-+ {
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_string_set_byte (data, pos + 1, DBUS_DICT_ENTRY_END_CHAR);
-+
-+ *expected_validity = DBUS_INVALID_DICT_ENTRY_ENDED_BUT_NOT_STARTED;
-+ }
-+ else if (item_seq == 19)
-+ {
-+ message = simple_method_call ();
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_INVALID))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_header_get_field_raw (&message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ NULL, &pos);
-+ generate_from_message (data, expected_validity, message);
-+
-+ _dbus_string_set_byte (data, pos + 1, DBUS_TYPE_ARRAY);
-+ _dbus_string_set_byte (data, pos + 2, DBUS_DICT_ENTRY_BEGIN_CHAR);
-+ _dbus_string_set_byte (data, pos + 3, DBUS_DICT_ENTRY_END_CHAR);
-+
-+ *expected_validity = DBUS_INVALID_DICT_ENTRY_HAS_NO_FIELDS;
-+ }
-+ else
-+ {
-+ return FALSE;
-+ }
-+
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ iter_next (iter);
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+generate_wrong_length (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity)
-+{
-+ int lengths[] = { -42, -17, -16, -15, -9, -8, -7, -6, -5, -4, -3, -2, -1,
-+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 15, 16, 30 };
-+ int adjust;
-+ int len_seq;
-+
-+ restart:
-+ len_seq = iter_get_sequence (iter);
-+ if (len_seq == _DBUS_N_ELEMENTS (lengths))
-+ return FALSE;
-+
-+ _dbus_assert (len_seq < _DBUS_N_ELEMENTS (lengths));
-+
-+ iter_recurse (iter);
-+ if (!generate_many_bodies (iter, data, expected_validity))
-+ {
-+ iter_set_sequence (iter, 0); /* reset to first body */
-+ iter_unrecurse (iter);
-+ iter_next (iter); /* next length adjustment */
-+ goto restart;
-+ }
-+ iter_unrecurse (iter);
-+
-+ adjust = lengths[len_seq];
-+
-+ if (adjust < 0)
-+ {
-+ if ((_dbus_string_get_length (data) + adjust) < DBUS_MINIMUM_HEADER_SIZE)
-+ _dbus_string_set_length (data, DBUS_MINIMUM_HEADER_SIZE);
-+ else
-+ _dbus_string_shorten (data, - adjust);
-+ *expected_validity = DBUS_INVALID_FOR_UNKNOWN_REASON;
-+ }
-+ else
-+ {
-+ if (!_dbus_string_lengthen (data, adjust))
-+ _dbus_assert_not_reached ("oom");
-+ *expected_validity = DBUS_INVALID_TOO_MUCH_DATA;
-+ }
-+
-+ /* Fixup lengths */
-+ {
-+ int old_body_len;
-+ int new_body_len;
-+ int byte_order;
-+
-+ _dbus_assert (_dbus_string_get_length (data) >= DBUS_MINIMUM_HEADER_SIZE);
-+
-+ byte_order = _dbus_string_get_byte (data, BYTE_ORDER_OFFSET);
-+ old_body_len = _dbus_marshal_read_uint32 (data,
-+ BODY_LENGTH_OFFSET,
-+ byte_order,
-+ NULL);
-+ _dbus_assert (old_body_len < _dbus_string_get_length (data));
-+ new_body_len = old_body_len + adjust;
-+ if (new_body_len < 0)
-+ {
-+ new_body_len = 0;
-+ /* we just munged the header, and aren't sure how */
-+ *expected_validity = DBUS_VALIDITY_UNKNOWN;
-+ }
-+
-+ _dbus_verbose ("changing body len from %u to %u by adjust %d\n",
-+ old_body_len, new_body_len, adjust);
-+
-+ _dbus_marshal_set_uint32 (data, BODY_LENGTH_OFFSET,
-+ new_body_len,
-+ byte_order);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+generate_byte_changed (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity)
-+{
-+ int byte_seq;
-+ int v_BYTE;
-+
-+ /* This is a little convoluted to make the bodies the
-+ * outer loop and each byte of each body the inner
-+ * loop
-+ */
-+
-+ restart:
-+ if (!generate_many_bodies (iter, data, expected_validity))
-+ return FALSE;
-+
-+ iter_recurse (iter);
-+ byte_seq = iter_get_sequence (iter);
-+ iter_next (iter);
-+ iter_unrecurse (iter);
-+
-+ if (byte_seq == _dbus_string_get_length (data))
-+ {
-+ _dbus_string_set_length (data, 0);
-+ /* reset byte count */
-+ iter_recurse (iter);
-+ iter_set_sequence (iter, 0);
-+ iter_unrecurse (iter);
-+ goto restart;
-+ }
-+ else
-+ {
-+ /* Undo the "next" in generate_many_bodies */
-+ iter_set_sequence (iter, iter_get_sequence (iter) - 1);
-+ }
-+
-+ _dbus_assert (byte_seq < _dbus_string_get_length (data));
-+ v_BYTE = _dbus_string_get_byte (data, byte_seq);
-+ v_BYTE += byte_seq; /* arbitrary but deterministic change to the byte */
-+ _dbus_string_set_byte (data, byte_seq, v_BYTE);
-+ *expected_validity = DBUS_VALIDITY_UNKNOWN;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+find_next_typecode (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity)
-+{
-+ int body_seq;
-+ int byte_seq;
-+ int base_depth;
-+
-+ base_depth = iter->depth;
-+
-+ restart:
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+ _dbus_string_set_length (data, 0);
-+
-+ body_seq = iter_get_sequence (iter);
-+
-+ if (!generate_many_bodies (iter, data, expected_validity))
-+ return FALSE;
-+ /* Undo the "next" in generate_many_bodies */
-+ iter_set_sequence (iter, body_seq);
-+
-+ iter_recurse (iter);
-+ while (TRUE)
-+ {
-+ _dbus_assert (iter->depth == (base_depth + 1));
-+
-+ byte_seq = iter_get_sequence (iter);
-+
-+ _dbus_assert (byte_seq <= _dbus_string_get_length (data));
-+
-+ if (byte_seq == _dbus_string_get_length (data))
-+ {
-+ /* reset byte count */
-+ iter_set_sequence (iter, 0);
-+ iter_unrecurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+ iter_next (iter); /* go to the next body */
-+ goto restart;
-+ }
-+
-+ _dbus_assert (byte_seq < _dbus_string_get_length (data));
-+
-+ if (_dbus_type_is_valid (_dbus_string_get_byte (data, byte_seq)))
-+ break;
-+ else
-+ iter_next (iter);
-+ }
-+
-+ _dbus_assert (byte_seq == iter_get_sequence (iter));
-+ _dbus_assert (byte_seq < _dbus_string_get_length (data));
-+
-+ iter_unrecurse (iter);
-+
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+
-+ return TRUE;
-+}
-+
-+static const int typecodes[] = {
-+ DBUS_TYPE_INVALID,
-+ DBUS_TYPE_BYTE,
-+ DBUS_TYPE_BOOLEAN,
-+ DBUS_TYPE_INT16,
-+ DBUS_TYPE_UINT16,
-+ DBUS_TYPE_INT32,
-+ DBUS_TYPE_UINT32,
-+ DBUS_TYPE_INT64,
-+ DBUS_TYPE_UINT64,
-+ DBUS_TYPE_DOUBLE,
-+ DBUS_TYPE_STRING,
-+ DBUS_TYPE_OBJECT_PATH,
-+ DBUS_TYPE_SIGNATURE,
-+ DBUS_TYPE_ARRAY,
-+ DBUS_TYPE_VARIANT,
-+ DBUS_STRUCT_BEGIN_CHAR,
-+ DBUS_STRUCT_END_CHAR,
-+ DBUS_DICT_ENTRY_BEGIN_CHAR,
-+ DBUS_DICT_ENTRY_END_CHAR,
-+ 255 /* random invalid typecode */
-+};
-+
-+static dbus_bool_t
-+generate_typecode_changed (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity)
-+{
-+ int byte_seq;
-+ int typecode_seq;
-+ int base_depth;
-+
-+ base_depth = iter->depth;
-+
-+ restart:
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+ _dbus_string_set_length (data, 0);
-+
-+ if (!find_next_typecode (iter, data, expected_validity))
-+ return FALSE;
-+
-+ iter_recurse (iter);
-+ byte_seq = iter_get_sequence (iter);
-+
-+ _dbus_assert (byte_seq < _dbus_string_get_length (data));
-+
-+ iter_recurse (iter);
-+ typecode_seq = iter_get_sequence (iter);
-+ iter_next (iter);
-+
-+ _dbus_assert (typecode_seq <= _DBUS_N_ELEMENTS (typecodes));
-+
-+ if (typecode_seq == _DBUS_N_ELEMENTS (typecodes))
-+ {
-+ _dbus_assert (iter->depth == (base_depth + 2));
-+ iter_set_sequence (iter, 0); /* reset typecode sequence */
-+ iter_unrecurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 1));
-+ iter_next (iter); /* go to the next byte_seq */
-+ iter_unrecurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+ goto restart;
-+ }
-+
-+ _dbus_assert (iter->depth == (base_depth + 2));
-+ iter_unrecurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 1));
-+ iter_unrecurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+
-+#if 0
-+ printf ("Changing byte %d in message %d to %c\n",
-+ byte_seq, iter_get_sequence (iter), typecodes[typecode_seq]);
-+#endif
-+
-+ _dbus_string_set_byte (data, byte_seq, typecodes[typecode_seq]);
-+ *expected_validity = DBUS_VALIDITY_UNKNOWN;
-+ return TRUE;
-+}
-+
-+typedef struct
-+{
-+ ChangeType type;
-+ dbus_uint32_t value; /* cast to signed for adjusts */
-+} UIntChange;
-+
-+static const UIntChange uint32_changes[] = {
-+ { CHANGE_TYPE_ADJUST, (dbus_uint32_t) -1 },
-+ { CHANGE_TYPE_ADJUST, (dbus_uint32_t) -2 },
-+ { CHANGE_TYPE_ADJUST, (dbus_uint32_t) -3 },
-+ { CHANGE_TYPE_ADJUST, (dbus_uint32_t) 1 },
-+ { CHANGE_TYPE_ADJUST, (dbus_uint32_t) 2 },
-+ { CHANGE_TYPE_ADJUST, (dbus_uint32_t) 3 },
-+ { CHANGE_TYPE_ABSOLUTE, _DBUS_UINT32_MAX },
-+ { CHANGE_TYPE_ABSOLUTE, 0 },
-+ { CHANGE_TYPE_ABSOLUTE, 1 },
-+ { CHANGE_TYPE_ABSOLUTE, _DBUS_UINT32_MAX - 1 },
-+ { CHANGE_TYPE_ABSOLUTE, _DBUS_UINT32_MAX - 5 }
-+};
-+
-+static dbus_bool_t
-+generate_uint32_changed (DBusMessageDataIter *iter,
-+ DBusString *data,
-+ DBusValidity *expected_validity)
-+{
-+ int body_seq;
-+ int byte_seq;
-+ int change_seq;
-+ dbus_uint32_t v_UINT32;
-+ int byte_order;
-+ const UIntChange *change;
-+ int base_depth;
-+
-+ /* Outer loop is each body, next loop is each change,
-+ * inner loop is each change location
-+ */
-+
-+ base_depth = iter->depth;
-+
-+ next_body:
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+ _dbus_string_set_length (data, 0);
-+ body_seq = iter_get_sequence (iter);
-+
-+ if (!generate_many_bodies (iter, data, expected_validity))
-+ return FALSE;
-+
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+
-+ iter_set_sequence (iter, body_seq); /* undo the "next" from generate_many_bodies */
-+ iter_recurse (iter);
-+ next_change:
-+ _dbus_assert (iter->depth == (base_depth + 1));
-+ change_seq = iter_get_sequence (iter);
-+
-+ if (change_seq == _DBUS_N_ELEMENTS (uint32_changes))
-+ {
-+ /* Reset change count */
-+ iter_set_sequence (iter, 0);
-+ iter_unrecurse (iter);
-+ iter_next (iter);
-+ goto next_body;
-+ }
-+
-+ _dbus_assert (iter->depth == (base_depth + 1));
-+
-+ iter_recurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 2));
-+ byte_seq = iter_get_sequence (iter);
-+ /* skip 4 bytes at a time */
-+ iter_next (iter);
-+ iter_next (iter);
-+ iter_next (iter);
-+ iter_next (iter);
-+ iter_unrecurse (iter);
-+
-+ _dbus_assert (_DBUS_ALIGN_VALUE (byte_seq, 4) == (unsigned) byte_seq);
-+ if (byte_seq >= (_dbus_string_get_length (data) - 4))
-+ {
-+ /* reset byte count */
-+ _dbus_assert (iter->depth == (base_depth + 1));
-+ iter_recurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 2));
-+ iter_set_sequence (iter, 0);
-+ iter_unrecurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 1));
-+ iter_next (iter);
-+ goto next_change;
-+ }
-+
-+ _dbus_assert (byte_seq <= (_dbus_string_get_length (data) - 4));
-+
-+ byte_order = _dbus_string_get_byte (data, BYTE_ORDER_OFFSET);
-+
-+ v_UINT32 = _dbus_marshal_read_uint32 (data, byte_seq, byte_order, NULL);
-+
-+ change = &uint32_changes[change_seq];
-+
-+ if (change->type == CHANGE_TYPE_ADJUST)
-+ {
-+ v_UINT32 += (int) change->value;
-+ }
-+ else
-+ {
-+ v_UINT32 = change->value;
-+ }
-+
-+#if 0
-+ printf ("body %d change %d pos %d ",
-+ body_seq, change_seq, byte_seq);
-+
-+ if (change->type == CHANGE_TYPE_ADJUST)
-+ printf ("adjust by %d", (int) change->value);
-+ else
-+ printf ("set to %u", change->value);
-+
-+ printf (" \t%u -> %u\n",
-+ _dbus_marshal_read_uint32 (data, byte_seq, byte_order, NULL),
-+ v_UINT32);
-+#endif
-+
-+ _dbus_marshal_set_uint32 (data, byte_seq, v_UINT32, byte_order);
-+ *expected_validity = DBUS_VALIDITY_UNKNOWN;
-+
-+ _dbus_assert (iter->depth == (base_depth + 1));
-+ iter_unrecurse (iter);
-+ _dbus_assert (iter->depth == (base_depth + 0));
-+
-+ return TRUE;
-+}
-+
-+typedef struct
-+{
-+ const char *name;
-+ DBusMessageGeneratorFunc func;
-+} DBusMessageGenerator;
-+
-+static const DBusMessageGenerator generators[] = {
-+ { "trivial example of each message type", generate_trivial },
-+ { "assorted arguments", generate_many_bodies },
-+ { "assorted special cases", generate_special },
-+ { "each uint32 modified", generate_uint32_changed },
-+ { "wrong body lengths", generate_wrong_length },
-+ { "each byte modified", generate_byte_changed },
-+#if 0
-+ /* This is really expensive and doesn't add too much coverage */
-+ { "change each typecode", generate_typecode_changed }
-+#endif
-+};
-+
-+void
-+_dbus_message_data_free (DBusMessageData *data)
-+{
-+ _dbus_string_free (&data->data);
-+}
-+
-+void
-+_dbus_message_data_iter_init (DBusMessageDataIter *iter)
-+{
-+ int i;
-+
-+ iter->depth = 0;
-+ i = 0;
-+ while (i < _DBUS_MESSAGE_DATA_MAX_NESTING)
-+ {
-+ iter->sequence_nos[i] = 0;
-+ ++i;
-+ }
-+ iter->count = 0;
-+}
-+
-+dbus_bool_t
-+_dbus_message_data_iter_get_and_next (DBusMessageDataIter *iter,
-+ DBusMessageData *data)
-+{
-+ DBusMessageGeneratorFunc func;
-+ int generator;
-+
-+ restart:
-+ generator = iter_get_sequence (iter);
-+
-+ if (generator == _DBUS_N_ELEMENTS (generators))
-+ return FALSE;
-+
-+ iter_recurse (iter);
-+
-+ if (iter_first_in_series (iter))
-+ {
-+ printf (" testing message loading: %s ", generators[generator].name);
-+ fflush (stdout);
-+ }
-+
-+ func = generators[generator].func;
-+
-+ if (!_dbus_string_init (&data->data))
-+ _dbus_assert_not_reached ("oom");
-+
-+ if ((*func)(iter, &data->data, &data->expected_validity))
-+ ;
-+ else
-+ {
-+ iter_set_sequence (iter, 0);
-+ iter_unrecurse (iter);
-+ iter_next (iter); /* next generator */
-+ _dbus_string_free (&data->data);
-+ printf ("%d test loads cumulative\n", iter->count);
-+ goto restart;
-+ }
-+ iter_unrecurse (iter);
-+
-+ iter->count += 1;
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-message-factory.h dbus-0.61/dbus/dbus-message-factory.h
---- dbus-0.61.orig/dbus/dbus-message-factory.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-message-factory.h 2005-02-05 22:03:28.000000000 +0100
-@@ -0,0 +1,61 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-message-factory.h Generator of valid and invalid message data for test suite
-+ *
-+ * Copyright (C) 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_MESSAGE_FACTORY_H
-+#define DBUS_MESSAGE_FACTORY_H
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-marshal-basic.h>
-+#include <dbus/dbus-marshal-validate.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct
-+{
-+ DBusValidity expected_validity;
-+
-+ DBusString data;
-+
-+} DBusMessageData;
-+
-+#define _DBUS_MESSAGE_DATA_MAX_NESTING 10
-+typedef struct
-+{
-+ int sequence_nos[_DBUS_MESSAGE_DATA_MAX_NESTING];
-+ int depth;
-+ int count;
-+} DBusMessageDataIter;
-+
-+void _dbus_message_data_free (DBusMessageData *data);
-+void _dbus_message_data_iter_init (DBusMessageDataIter *iter);
-+dbus_bool_t _dbus_message_data_iter_get_and_next (DBusMessageDataIter *iter,
-+ DBusMessageData *data);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#endif /* DBUS_MESSAGE_FACTORY_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-message-internal.h dbus-0.61/dbus/dbus-message-internal.h
---- dbus-0.61.orig/dbus/dbus-message-internal.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-message-internal.h 2005-01-17 04:53:40.000000000 +0100
-@@ -0,0 +1,74 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-message-internal.h DBusMessage object internal interfaces
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_MESSAGE_INTERNAL_H
-+#define DBUS_MESSAGE_INTERNAL_H
-+
-+#include <dbus/dbus-message.h>
-+#include <dbus/dbus-resources.h>
-+#include <dbus/dbus-list.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusMessageLoader DBusMessageLoader;
-+
-+void _dbus_message_get_network_data (DBusMessage *message,
-+ const DBusString **header,
-+ const DBusString **body);
-+
-+void _dbus_message_lock (DBusMessage *message);
-+void _dbus_message_unlock (DBusMessage *message);
-+void _dbus_message_set_serial (DBusMessage *message,
-+ dbus_uint32_t serial);
-+dbus_bool_t _dbus_message_add_size_counter (DBusMessage *message,
-+ DBusCounter *counter);
-+void _dbus_message_add_size_counter_link (DBusMessage *message,
-+ DBusList *link);
-+void _dbus_message_remove_size_counter (DBusMessage *message,
-+ DBusCounter *counter,
-+ DBusList **link_return);
-+
-+DBusMessageLoader* _dbus_message_loader_new (void);
-+DBusMessageLoader* _dbus_message_loader_ref (DBusMessageLoader *loader);
-+void _dbus_message_loader_unref (DBusMessageLoader *loader);
-+
-+void _dbus_message_loader_get_buffer (DBusMessageLoader *loader,
-+ DBusString **buffer);
-+void _dbus_message_loader_return_buffer (DBusMessageLoader *loader,
-+ DBusString *buffer,
-+ int bytes_read);
-+dbus_bool_t _dbus_message_loader_queue_messages (DBusMessageLoader *loader);
-+DBusMessage* _dbus_message_loader_peek_message (DBusMessageLoader *loader);
-+DBusMessage* _dbus_message_loader_pop_message (DBusMessageLoader *loader);
-+DBusList* _dbus_message_loader_pop_message_link (DBusMessageLoader *loader);
-+void _dbus_message_loader_putback_message_link (DBusMessageLoader *loader,
-+ DBusList *link);
-+
-+dbus_bool_t _dbus_message_loader_get_is_corrupted (DBusMessageLoader *loader);
-+
-+void _dbus_message_loader_set_max_message_size (DBusMessageLoader *loader,
-+ long size);
-+long _dbus_message_loader_get_max_message_size (DBusMessageLoader *loader);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_MESSAGE_INTERNAL_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-message-private.h dbus-0.61/dbus/dbus-message-private.h
---- dbus-0.61.orig/dbus/dbus-message-private.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-message-private.h 2005-01-30 08:44:08.000000000 +0100
-@@ -0,0 +1,125 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-message-private.h header shared between dbus-message.c and dbus-message-util.c
-+ *
-+ * Copyright (C) 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_MESSAGE_PRIVATE_H
-+#define DBUS_MESSAGE_PRIVATE_H
-+
-+#include <dbus/dbus-message.h>
-+#include <dbus/dbus-message-internal.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-dataslot.h>
-+#include <dbus/dbus-marshal-header.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+/**
-+ * @addtogroup DBusMessageInternals
-+ * @{
-+ */
-+
-+/**
-+ * @typedef DBusMessageLoader
-+ *
-+ * The DBusMessageLoader object encapsulates the process of converting
-+ * a byte stream into a series of DBusMessage. It buffers the incoming
-+ * bytes as efficiently as possible, and generates a queue of
-+ * messages. DBusMessageLoader is typically used as part of a
-+ * DBusTransport implementation. The DBusTransport then hands off
-+ * the loaded messages to a DBusConnection, making the messages
-+ * visible to the application.
-+ *
-+ * @todo write tests for break-loader that a) randomly delete header
-+ * fields and b) set string fields to zero-length and other funky
-+ * values.
-+ *
-+ */
-+
-+/**
-+ * Implementation details of DBusMessageLoader.
-+ * All members are private.
-+ */
-+struct DBusMessageLoader
-+{
-+ int refcount; /**< Reference count. */
-+
-+ DBusString data; /**< Buffered data */
-+
-+ DBusList *messages; /**< Complete messages. */
-+
-+ long max_message_size; /**< Maximum size of a message */
-+
-+ unsigned int buffer_outstanding : 1; /**< Someone is using the buffer to read */
-+
-+ unsigned int corrupted : 1; /**< We got broken data, and are no longer working */
-+
-+ DBusValidity corruption_reason; /**< why we were corrupted */
-+};
-+
-+
-+/** How many bits are in the changed_stamp used to validate iterators */
-+#define CHANGED_STAMP_BITS 21
-+
-+/**
-+ * @brief Internals of DBusMessage
-+ *
-+ * Object representing a message received from or to be sent to
-+ * another application. This is an opaque object, all members
-+ * are private.
-+ */
-+struct DBusMessage
-+{
-+ DBusAtomic refcount; /**< Reference count */
-+
-+ DBusHeader header; /**< Header network data and associated cache */
-+
-+ DBusString body; /**< Body network data. */
-+
-+ char byte_order; /**< Message byte order. */
-+
-+ unsigned int locked : 1; /**< Message being sent, no modifications allowed. */
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ unsigned int in_cache : 1; /**< Has been "freed" since it's in the cache (this is a debug feature) */
-+#endif
-+
-+ DBusList *size_counters; /**< 0-N DBusCounter used to track message size. */
-+ long size_counter_delta; /**< Size we incremented the size counters by. */
-+
-+ dbus_uint32_t changed_stamp : CHANGED_STAMP_BITS; /**< Incremented when iterators are invalidated. */
-+
-+ DBusDataSlotList slot_list; /**< Data stored by allocated integer ID */
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ int generation; /**< _dbus_current_generation when message was created */
-+#endif
-+};
-+
-+dbus_bool_t _dbus_message_iter_get_args_valist (DBusMessageIter *iter,
-+ DBusError *error,
-+ int first_arg_type,
-+ va_list var_args);
-+
-+/** @} */
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_MESSAGE_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-message-util.c dbus-0.61/dbus/dbus-message-util.c
---- dbus-0.61.orig/dbus/dbus-message-util.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-message-util.c 2005-04-10 01:50:58.000000000 +0200
-@@ -0,0 +1,1279 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-message-util.c Would be in dbus-message.c, but only used by bus/tests
-+ *
-+ * Copyright (C) 2002, 2003, 2004, 2005 Red Hat Inc.
-+ * Copyright (C) 2002, 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-test.h"
-+#include "dbus-message-private.h"
-+#include "dbus-marshal-recursive.h"
-+#include "dbus-string.h"
-+
-+/**
-+ * @addtogroup DBusMessage
-+ * @{
-+ */
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Reads arguments from a message iterator given a variable argument
-+ * list. Only arguments of basic type and arrays of fixed-length
-+ * basic type may be read with this function. See
-+ * dbus_message_get_args() for more details.
-+ *
-+ * @todo this is static for now because there's no corresponding
-+ * iter_append_args() and I'm not sure we need this function to be
-+ * public since dbus_message_get_args() is what you usually want
-+ *
-+ * @param iter the message iterator
-+ * @param error error to be filled in on failure
-+ * @param first_arg_type the first argument type
-+ * @param ... location for first argument value, then list of type-location pairs
-+ * @returns #FALSE if the error was set
-+ */
-+static dbus_bool_t
-+dbus_message_iter_get_args (DBusMessageIter *iter,
-+ DBusError *error,
-+ int first_arg_type,
-+ ...)
-+{
-+ dbus_bool_t retval;
-+ va_list var_args;
-+
-+ _dbus_return_val_if_fail (iter != NULL, FALSE);
-+ _dbus_return_val_if_error_is_set (error, FALSE);
-+
-+ va_start (var_args, first_arg_type);
-+ retval = _dbus_message_iter_get_args_valist (iter, error, first_arg_type, var_args);
-+ va_end (var_args);
-+
-+ return retval;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include "dbus-message-factory.h"
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+static int validities_seen[DBUS_VALIDITY_LAST + _DBUS_NEGATIVE_VALIDITY_COUNT];
-+
-+static void
-+reset_validities_seen (void)
-+{
-+ int i;
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (validities_seen))
-+ {
-+ validities_seen[i] = 0;
-+ ++i;
-+ }
-+}
-+
-+static void
-+record_validity_seen (DBusValidity validity)
-+{
-+ validities_seen[validity + _DBUS_NEGATIVE_VALIDITY_COUNT] += 1;
-+}
-+
-+static void
-+print_validities_seen (dbus_bool_t not_seen)
-+{
-+ int i;
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (validities_seen))
-+ {
-+ if ((i - _DBUS_NEGATIVE_VALIDITY_COUNT) == DBUS_VALIDITY_UNKNOWN ||
-+ (i - _DBUS_NEGATIVE_VALIDITY_COUNT) == DBUS_INVALID_FOR_UNKNOWN_REASON)
-+ ;
-+ else if ((not_seen && validities_seen[i] == 0) ||
-+ (!not_seen && validities_seen[i] > 0))
-+ printf ("validity %3d seen %d times\n",
-+ i - _DBUS_NEGATIVE_VALIDITY_COUNT,
-+ validities_seen[i]);
-+ ++i;
-+ }
-+}
-+
-+static void
-+check_memleaks (void)
-+{
-+ dbus_shutdown ();
-+
-+ if (_dbus_get_malloc_blocks_outstanding () != 0)
-+ {
-+ _dbus_warn ("%d dbus_malloc blocks were not freed in %s\n",
-+ _dbus_get_malloc_blocks_outstanding (), __FILE__);
-+ _dbus_assert_not_reached ("memleaks");
-+ }
-+}
-+
-+static dbus_bool_t
-+check_have_valid_message (DBusMessageLoader *loader)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t retval;
-+
-+ message = NULL;
-+ retval = FALSE;
-+
-+ if (_dbus_message_loader_get_is_corrupted (loader))
-+ {
-+ _dbus_warn ("loader corrupted on message that was expected to be valid; invalid reason %d\n",
-+ loader->corruption_reason);
-+ goto failed;
-+ }
-+
-+ message = _dbus_message_loader_pop_message (loader);
-+ if (message == NULL)
-+ {
-+ _dbus_warn ("didn't load message that was expected to be valid (message not popped)\n");
-+ goto failed;
-+ }
-+
-+ if (_dbus_string_get_length (&loader->data) > 0)
-+ {
-+ _dbus_warn ("had leftover bytes from expected-to-be-valid single message\n");
-+ goto failed;
-+ }
-+
-+#if 0
-+ /* FIXME */
-+ /* Verify that we're able to properly deal with the message.
-+ * For example, this would detect improper handling of messages
-+ * in nonstandard byte order.
-+ */
-+ if (!check_message_handling (message))
-+ goto failed;
-+#endif
-+
-+ record_validity_seen (DBUS_VALID);
-+
-+ retval = TRUE;
-+
-+ failed:
-+ if (message)
-+ dbus_message_unref (message);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_invalid_message (DBusMessageLoader *loader,
-+ DBusValidity expected_validity)
-+{
-+ dbus_bool_t retval;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_message_loader_get_is_corrupted (loader))
-+ {
-+ _dbus_warn ("loader not corrupted on message that was expected to be invalid\n");
-+ goto failed;
-+ }
-+
-+ record_validity_seen (loader->corruption_reason);
-+
-+ if (expected_validity != DBUS_INVALID_FOR_UNKNOWN_REASON &&
-+ loader->corruption_reason != expected_validity)
-+ {
-+ _dbus_warn ("expected message to be corrupted for reason %d and was corrupted for %d instead\n",
-+ expected_validity, loader->corruption_reason);
-+ goto failed;
-+ }
-+
-+ retval = TRUE;
-+
-+ failed:
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_incomplete_message (DBusMessageLoader *loader)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t retval;
-+
-+ message = NULL;
-+ retval = FALSE;
-+
-+ if (_dbus_message_loader_get_is_corrupted (loader))
-+ {
-+ _dbus_warn ("loader corrupted on message that was expected to be valid (but incomplete), corruption reason %d\n",
-+ loader->corruption_reason);
-+ goto failed;
-+ }
-+
-+ message = _dbus_message_loader_pop_message (loader);
-+ if (message != NULL)
-+ {
-+ _dbus_warn ("loaded message that was expected to be incomplete\n");
-+ goto failed;
-+ }
-+
-+ record_validity_seen (DBUS_VALID_BUT_INCOMPLETE);
-+ retval = TRUE;
-+
-+ failed:
-+ if (message)
-+ dbus_message_unref (message);
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+check_loader_results (DBusMessageLoader *loader,
-+ DBusValidity expected_validity)
-+{
-+ if (!_dbus_message_loader_queue_messages (loader))
-+ _dbus_assert_not_reached ("no memory to queue messages");
-+
-+ if (expected_validity == DBUS_VALID)
-+ return check_have_valid_message (loader);
-+ else if (expected_validity == DBUS_VALID_BUT_INCOMPLETE)
-+ return check_incomplete_message (loader);
-+ else if (expected_validity == DBUS_VALIDITY_UNKNOWN)
-+ {
-+ /* here we just know we didn't segfault and that was the
-+ * only test. Also, we record that we got coverage
-+ * for the validity reason.
-+ */
-+ if (_dbus_message_loader_get_is_corrupted (loader))
-+ record_validity_seen (loader->corruption_reason);
-+
-+ return TRUE;
-+ }
-+ else
-+ return check_invalid_message (loader, expected_validity);
-+}
-+
-+/**
-+ * Loads the message in the given message file.
-+ *
-+ * @param filename filename to load
-+ * @param data string to load message into
-+ * @returns #TRUE if the message was loaded
-+ */
-+dbus_bool_t
-+dbus_internal_do_not_use_load_message_file (const DBusString *filename,
-+ DBusString *data)
-+{
-+ dbus_bool_t retval;
-+ DBusError error;
-+
-+ retval = FALSE;
-+
-+ _dbus_verbose ("Loading raw %s\n", _dbus_string_get_const_data (filename));
-+ dbus_error_init (&error);
-+ if (!_dbus_file_get_contents (data, filename, &error))
-+ {
-+ _dbus_warn ("Could not load message file %s: %s\n",
-+ _dbus_string_get_const_data (filename),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto failed;
-+ }
-+
-+ retval = TRUE;
-+
-+ failed:
-+
-+ return retval;
-+}
-+
-+/**
-+ * Tries loading the message in the given message file
-+ * and verifies that DBusMessageLoader can handle it.
-+ *
-+ * @param filename filename to load
-+ * @param expected_validity what the message has to be like to return #TRUE
-+ * @returns #TRUE if the message has the expected validity
-+ */
-+dbus_bool_t
-+dbus_internal_do_not_use_try_message_file (const DBusString *filename,
-+ DBusValidity expected_validity)
-+{
-+ DBusString data;
-+ dbus_bool_t retval;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_string_init (&data))
-+ _dbus_assert_not_reached ("could not allocate string\n");
-+
-+ if (!dbus_internal_do_not_use_load_message_file (filename, &data))
-+ goto failed;
-+
-+ retval = dbus_internal_do_not_use_try_message_data (&data, expected_validity);
-+
-+ failed:
-+
-+ if (!retval)
-+ {
-+ if (_dbus_string_get_length (&data) > 0)
-+ _dbus_verbose_bytes_of_string (&data, 0,
-+ _dbus_string_get_length (&data));
-+
-+ _dbus_warn ("Failed message loader test on %s\n",
-+ _dbus_string_get_const_data (filename));
-+ }
-+
-+ _dbus_string_free (&data);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Tries loading the given message data.
-+ *
-+ *
-+ * @param data the message data
-+ * @param expected_validity what the message has to be like to return #TRUE
-+ * @returns #TRUE if the message has the expected validity
-+ */
-+dbus_bool_t
-+dbus_internal_do_not_use_try_message_data (const DBusString *data,
-+ DBusValidity expected_validity)
-+{
-+ DBusMessageLoader *loader;
-+ dbus_bool_t retval;
-+ int len;
-+ int i;
-+
-+ loader = NULL;
-+ retval = FALSE;
-+
-+ /* Write the data one byte at a time */
-+
-+ loader = _dbus_message_loader_new ();
-+
-+ /* check some trivial loader functions */
-+ _dbus_message_loader_ref (loader);
-+ _dbus_message_loader_unref (loader);
-+ _dbus_message_loader_get_max_message_size (loader);
-+
-+ len = _dbus_string_get_length (data);
-+ for (i = 0; i < len; i++)
-+ {
-+ DBusString *buffer;
-+
-+ _dbus_message_loader_get_buffer (loader, &buffer);
-+ _dbus_string_append_byte (buffer,
-+ _dbus_string_get_byte (data, i));
-+ _dbus_message_loader_return_buffer (loader, buffer, 1);
-+ }
-+
-+ if (!check_loader_results (loader, expected_validity))
-+ goto failed;
-+
-+ _dbus_message_loader_unref (loader);
-+ loader = NULL;
-+
-+ /* Write the data all at once */
-+
-+ loader = _dbus_message_loader_new ();
-+
-+ {
-+ DBusString *buffer;
-+
-+ _dbus_message_loader_get_buffer (loader, &buffer);
-+ _dbus_string_copy (data, 0, buffer,
-+ _dbus_string_get_length (buffer));
-+ _dbus_message_loader_return_buffer (loader, buffer, 1);
-+ }
-+
-+ if (!check_loader_results (loader, expected_validity))
-+ goto failed;
-+
-+ _dbus_message_loader_unref (loader);
-+ loader = NULL;
-+
-+ /* Write the data 2 bytes at a time */
-+
-+ loader = _dbus_message_loader_new ();
-+
-+ len = _dbus_string_get_length (data);
-+ for (i = 0; i < len; i += 2)
-+ {
-+ DBusString *buffer;
-+
-+ _dbus_message_loader_get_buffer (loader, &buffer);
-+ _dbus_string_append_byte (buffer,
-+ _dbus_string_get_byte (data, i));
-+ if ((i+1) < len)
-+ _dbus_string_append_byte (buffer,
-+ _dbus_string_get_byte (data, i+1));
-+ _dbus_message_loader_return_buffer (loader, buffer, 1);
-+ }
-+
-+ if (!check_loader_results (loader, expected_validity))
-+ goto failed;
-+
-+ _dbus_message_loader_unref (loader);
-+ loader = NULL;
-+
-+ retval = TRUE;
-+
-+ failed:
-+
-+ if (loader)
-+ _dbus_message_loader_unref (loader);
-+
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+process_test_subdir (const DBusString *test_base_dir,
-+ const char *subdir,
-+ DBusValidity expected_validity,
-+ DBusForeachMessageFileFunc function,
-+ void *user_data)
-+{
-+ DBusString test_directory;
-+ DBusString filename;
-+ DBusDirIter *dir;
-+ dbus_bool_t retval;
-+ DBusError error;
-+
-+ retval = FALSE;
-+ dir = NULL;
-+
-+ if (!_dbus_string_init (&test_directory))
-+ _dbus_assert_not_reached ("didn't allocate test_directory\n");
-+
-+ _dbus_string_init_const (&filename, subdir);
-+
-+ if (!_dbus_string_copy (test_base_dir, 0,
-+ &test_directory, 0))
-+ _dbus_assert_not_reached ("couldn't copy test_base_dir to test_directory");
-+
-+ if (!_dbus_concat_dir_and_file (&test_directory, &filename))
-+ _dbus_assert_not_reached ("couldn't allocate full path");
-+
-+ _dbus_string_free (&filename);
-+ if (!_dbus_string_init (&filename))
-+ _dbus_assert_not_reached ("didn't allocate filename string\n");
-+
-+ dbus_error_init (&error);
-+ dir = _dbus_directory_open (&test_directory, &error);
-+ if (dir == NULL)
-+ {
-+ _dbus_warn ("Could not open %s: %s\n",
-+ _dbus_string_get_const_data (&test_directory),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto failed;
-+ }
-+
-+ printf ("Testing %s:\n", subdir);
-+
-+ next:
-+ while (_dbus_directory_get_next_file (dir, &filename, &error))
-+ {
-+ DBusString full_path;
-+
-+ if (!_dbus_string_init (&full_path))
-+ _dbus_assert_not_reached ("couldn't init string");
-+
-+ if (!_dbus_string_copy (&test_directory, 0, &full_path, 0))
-+ _dbus_assert_not_reached ("couldn't copy dir to full_path");
-+
-+ if (!_dbus_concat_dir_and_file (&full_path, &filename))
-+ _dbus_assert_not_reached ("couldn't concat file to dir");
-+
-+ if (_dbus_string_ends_with_c_str (&filename, ".message-raw"))
-+ ;
-+ else
-+ {
-+ if (_dbus_string_ends_with_c_str (&filename, ".message"))
-+ {
-+ _dbus_warn ("Could not load %s, message builder language no longer supported\n",
-+ _dbus_string_get_const_data (&filename));
-+ }
-+
-+ _dbus_verbose ("Skipping non-.message file %s\n",
-+ _dbus_string_get_const_data (&filename));
-+ _dbus_string_free (&full_path);
-+ goto next;
-+ }
-+
-+ printf (" %s\n",
-+ _dbus_string_get_const_data (&filename));
-+
-+ if (! (*function) (&full_path,
-+ expected_validity, user_data))
-+ {
-+ _dbus_string_free (&full_path);
-+ goto failed;
-+ }
-+ else
-+ _dbus_string_free (&full_path);
-+ }
-+
-+ if (dbus_error_is_set (&error))
-+ {
-+ _dbus_warn ("Could not get next file in %s: %s\n",
-+ _dbus_string_get_const_data (&test_directory),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto failed;
-+ }
-+
-+ retval = TRUE;
-+
-+ failed:
-+
-+ if (dir)
-+ _dbus_directory_close (dir);
-+ _dbus_string_free (&test_directory);
-+ _dbus_string_free (&filename);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Runs the given function on every message file in the test suite.
-+ * The function should return #FALSE on test failure or fatal error.
-+ *
-+ * @param test_data_dir root dir of the test suite data files (top_srcdir/test/data)
-+ * @param func the function to run
-+ * @param user_data data for function
-+ * @returns #FALSE if there's a failure
-+ */
-+dbus_bool_t
-+dbus_internal_do_not_use_foreach_message_file (const char *test_data_dir,
-+ DBusForeachMessageFileFunc func,
-+ void *user_data)
-+{
-+ DBusString test_directory;
-+ dbus_bool_t retval;
-+
-+ retval = FALSE;
-+
-+ _dbus_string_init_const (&test_directory, test_data_dir);
-+
-+ if (!process_test_subdir (&test_directory, "valid-messages",
-+ DBUS_VALID, func, user_data))
-+ goto failed;
-+
-+ check_memleaks ();
-+
-+ if (!process_test_subdir (&test_directory, "invalid-messages",
-+ DBUS_INVALID_FOR_UNKNOWN_REASON, func, user_data))
-+ goto failed;
-+
-+ check_memleaks ();
-+
-+ if (!process_test_subdir (&test_directory, "incomplete-messages",
-+ DBUS_VALID_BUT_INCOMPLETE, func, user_data))
-+ goto failed;
-+
-+ check_memleaks ();
-+
-+ retval = TRUE;
-+
-+ failed:
-+
-+ _dbus_string_free (&test_directory);
-+
-+ return retval;
-+}
-+
-+#if 0
-+#define GET_AND_CHECK(iter, typename, literal) \
-+ do { \
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_##typename) \
-+ _dbus_assert_not_reached ("got wrong argument type from message iter"); \
-+ dbus_message_iter_get_basic (&iter, &v_##typename); \
-+ if (v_##typename != literal) \
-+ _dbus_assert_not_reached ("got wrong value from message iter"); \
-+ } while (0)
-+
-+#define GET_AND_CHECK_STRCMP(iter, typename, literal) \
-+ do { \
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_##typename) \
-+ _dbus_assert_not_reached ("got wrong argument type from message iter"); \
-+ dbus_message_iter_get_basic (&iter, &v_##typename); \
-+ if (strcmp (v_##typename, literal) != 0) \
-+ _dbus_assert_not_reached ("got wrong value from message iter"); \
-+ } while (0)
-+
-+#define GET_AND_CHECK_AND_NEXT(iter, typename, literal) \
-+ do { \
-+ GET_AND_CHECK(iter, typename, literal); \
-+ if (!dbus_message_iter_next (&iter)) \
-+ _dbus_assert_not_reached ("failed to move iter to next"); \
-+ } while (0)
-+
-+#define GET_AND_CHECK_STRCMP_AND_NEXT(iter, typename, literal) \
-+ do { \
-+ GET_AND_CHECK_STRCMP(iter, typename, literal); \
-+ if (!dbus_message_iter_next (&iter)) \
-+ _dbus_assert_not_reached ("failed to move iter to next"); \
-+ } while (0)
-+
-+static void
-+message_iter_test (DBusMessage *message)
-+{
-+ DBusMessageIter iter, array, array2;
-+ const char *v_STRING;
-+ double v_DOUBLE;
-+ dbus_int16_t v_INT16;
-+ dbus_uint16_t v_UINT16;
-+ dbus_int32_t v_INT32;
-+ dbus_uint32_t v_UINT32;
-+#ifdef DBUS_HAVE_INT64
-+ dbus_int64_t v_INT64;
-+ dbus_uint64_t v_UINT64;
-+#endif
-+ unsigned char v_BYTE;
-+ dbus_bool_t v_BOOLEAN;
-+
-+ const dbus_int32_t *our_int_array;
-+ int len;
-+
-+ dbus_message_iter_init (message, &iter);
-+
-+ GET_AND_CHECK_STRCMP_AND_NEXT (iter, STRING, "Test string");
-+ GET_AND_CHECK_AND_NEXT (iter, INT32, -0x12345678);
-+ GET_AND_CHECK_AND_NEXT (iter, UINT32, 0xedd1e);
-+ GET_AND_CHECK_AND_NEXT (iter, DOUBLE, 3.14159);
-+
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY)
-+ _dbus_assert_not_reached ("Argument type not an array");
-+
-+ if (dbus_message_iter_get_element_type (&iter) != DBUS_TYPE_DOUBLE)
-+ _dbus_assert_not_reached ("Array type not double");
-+
-+ dbus_message_iter_recurse (&iter, &array);
-+
-+ GET_AND_CHECK_AND_NEXT (array, DOUBLE, 1.5);
-+ GET_AND_CHECK (array, DOUBLE, 2.5);
-+
-+ if (dbus_message_iter_next (&array))
-+ _dbus_assert_not_reached ("Didn't reach end of array");
-+
-+ if (!dbus_message_iter_next (&iter))
-+ _dbus_assert_not_reached ("Reached end of arguments");
-+
-+ GET_AND_CHECK_AND_NEXT (iter, BYTE, 0xF0);
-+
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_ARRAY)
-+ _dbus_assert_not_reached ("no array");
-+
-+ if (dbus_message_iter_get_element_type (&iter) != DBUS_TYPE_INT32)
-+ _dbus_assert_not_reached ("Array type not int32");
-+
-+ /* Empty array */
-+ dbus_message_iter_recurse (&iter, &array);
-+
-+ if (dbus_message_iter_next (&array))
-+ _dbus_assert_not_reached ("Didn't reach end of array");
-+
-+ if (!dbus_message_iter_next (&iter))
-+ _dbus_assert_not_reached ("Reached end of arguments");
-+
-+ GET_AND_CHECK (iter, BYTE, 0xF0);
-+
-+ if (dbus_message_iter_next (&iter))
-+ _dbus_assert_not_reached ("Didn't reach end of arguments");
-+}
-+#endif
-+
-+static void
-+verify_test_message (DBusMessage *message)
-+{
-+ DBusMessageIter iter;
-+ DBusError error;
-+ dbus_int16_t our_int16;
-+ dbus_uint16_t our_uint16;
-+ dbus_int32_t our_int;
-+ dbus_uint32_t our_uint;
-+ const char *our_str;
-+ double our_double;
-+ double v_DOUBLE;
-+ dbus_bool_t our_bool;
-+ unsigned char our_byte_1, our_byte_2;
-+ const dbus_uint32_t *our_uint32_array = (void*)0xdeadbeef;
-+ int our_uint32_array_len;
-+ dbus_int32_t *our_int32_array = (void*)0xdeadbeef;
-+ int our_int32_array_len;
-+#ifdef DBUS_HAVE_INT64
-+ dbus_int64_t our_int64;
-+ dbus_uint64_t our_uint64;
-+ dbus_int64_t *our_uint64_array = (void*)0xdeadbeef;
-+ int our_uint64_array_len;
-+ const dbus_int64_t *our_int64_array = (void*)0xdeadbeef;
-+ int our_int64_array_len;
-+#endif
-+ const double *our_double_array = (void*)0xdeadbeef;
-+ int our_double_array_len;
-+ const unsigned char *our_byte_array = (void*)0xdeadbeef;
-+ int our_byte_array_len;
-+ const dbus_bool_t *our_boolean_array = (void*)0xdeadbeef;
-+ int our_boolean_array_len;
-+ char **our_string_array;
-+ int our_string_array_len;
-+
-+ dbus_message_iter_init (message, &iter);
-+
-+ dbus_error_init (&error);
-+ if (!dbus_message_iter_get_args (&iter, &error,
-+ DBUS_TYPE_INT16, &our_int16,
-+ DBUS_TYPE_UINT16, &our_uint16,
-+ DBUS_TYPE_INT32, &our_int,
-+ DBUS_TYPE_UINT32, &our_uint,
-+#ifdef DBUS_HAVE_INT64
-+ DBUS_TYPE_INT64, &our_int64,
-+ DBUS_TYPE_UINT64, &our_uint64,
-+#endif
-+ DBUS_TYPE_STRING, &our_str,
-+ DBUS_TYPE_DOUBLE, &our_double,
-+ DBUS_TYPE_BOOLEAN, &our_bool,
-+ DBUS_TYPE_BYTE, &our_byte_1,
-+ DBUS_TYPE_BYTE, &our_byte_2,
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32,
-+ &our_uint32_array, &our_uint32_array_len,
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_INT32,
-+ &our_int32_array, &our_int32_array_len,
-+#ifdef DBUS_HAVE_INT64
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT64,
-+ &our_uint64_array, &our_uint64_array_len,
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_INT64,
-+ &our_int64_array, &our_int64_array_len,
-+#endif
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE,
-+ &our_double_array, &our_double_array_len,
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
-+ &our_byte_array, &our_byte_array_len,
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_BOOLEAN,
-+ &our_boolean_array, &our_boolean_array_len,
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
-+ &our_string_array, &our_string_array_len,
-+ 0))
-+ {
-+ _dbus_warn ("error: %s - %s\n", error.name,
-+ (error.message != NULL) ? error.message : "no message");
-+ _dbus_assert_not_reached ("Could not get arguments");
-+ }
-+
-+ if (our_int16 != -0x123)
-+ _dbus_assert_not_reached ("16-bit integers differ!");
-+
-+ if (our_uint16 != 0x123)
-+ _dbus_assert_not_reached ("16-bit uints differ!");
-+
-+ if (our_int != -0x12345678)
-+ _dbus_assert_not_reached ("integers differ!");
-+
-+ if (our_uint != 0x12300042)
-+ _dbus_assert_not_reached ("uints differ!");
-+
-+#ifdef DBUS_HAVE_INT64
-+ if (our_int64 != DBUS_INT64_CONSTANT (-0x123456789abcd))
-+ _dbus_assert_not_reached ("64-bit integers differ!");
-+ if (our_uint64 != DBUS_UINT64_CONSTANT (0x123456789abcd))
-+ _dbus_assert_not_reached ("64-bit unsigned integers differ!");
-+#endif
-+
-+ v_DOUBLE = 3.14159;
-+ if (! _DBUS_DOUBLES_BITWISE_EQUAL (our_double, v_DOUBLE))
-+ _dbus_assert_not_reached ("doubles differ!");
-+
-+ if (strcmp (our_str, "Test string") != 0)
-+ _dbus_assert_not_reached ("strings differ!");
-+
-+ if (!our_bool)
-+ _dbus_assert_not_reached ("booleans differ");
-+
-+ if (our_byte_1 != 42)
-+ _dbus_assert_not_reached ("bytes differ!");
-+
-+ if (our_byte_2 != 24)
-+ _dbus_assert_not_reached ("bytes differ!");
-+
-+ if (our_uint32_array_len != 4 ||
-+ our_uint32_array[0] != 0x12345678 ||
-+ our_uint32_array[1] != 0x23456781 ||
-+ our_uint32_array[2] != 0x34567812 ||
-+ our_uint32_array[3] != 0x45678123)
-+ _dbus_assert_not_reached ("uint array differs");
-+
-+ if (our_int32_array_len != 4 ||
-+ our_int32_array[0] != 0x12345678 ||
-+ our_int32_array[1] != -0x23456781 ||
-+ our_int32_array[2] != 0x34567812 ||
-+ our_int32_array[3] != -0x45678123)
-+ _dbus_assert_not_reached ("int array differs");
-+
-+#ifdef DBUS_HAVE_INT64
-+ if (our_uint64_array_len != 4 ||
-+ our_uint64_array[0] != 0x12345678 ||
-+ our_uint64_array[1] != 0x23456781 ||
-+ our_uint64_array[2] != 0x34567812 ||
-+ our_uint64_array[3] != 0x45678123)
-+ _dbus_assert_not_reached ("uint64 array differs");
-+
-+ if (our_int64_array_len != 4 ||
-+ our_int64_array[0] != 0x12345678 ||
-+ our_int64_array[1] != -0x23456781 ||
-+ our_int64_array[2] != 0x34567812 ||
-+ our_int64_array[3] != -0x45678123)
-+ _dbus_assert_not_reached ("int64 array differs");
-+#endif /* DBUS_HAVE_INT64 */
-+
-+ if (our_double_array_len != 3)
-+ _dbus_assert_not_reached ("double array had wrong length");
-+
-+ /* On all IEEE machines (i.e. everything sane) exact equality
-+ * should be preserved over the wire
-+ */
-+ v_DOUBLE = 0.1234;
-+ if (! _DBUS_DOUBLES_BITWISE_EQUAL (our_double_array[0], v_DOUBLE))
-+ _dbus_assert_not_reached ("double array had wrong values");
-+ v_DOUBLE = 9876.54321;
-+ if (! _DBUS_DOUBLES_BITWISE_EQUAL (our_double_array[1], v_DOUBLE))
-+ _dbus_assert_not_reached ("double array had wrong values");
-+ v_DOUBLE = -300.0;
-+ if (! _DBUS_DOUBLES_BITWISE_EQUAL (our_double_array[2], v_DOUBLE))
-+ _dbus_assert_not_reached ("double array had wrong values");
-+
-+ if (our_byte_array_len != 4)
-+ _dbus_assert_not_reached ("byte array had wrong length");
-+
-+ if (our_byte_array[0] != 'a' ||
-+ our_byte_array[1] != 'b' ||
-+ our_byte_array[2] != 'c' ||
-+ our_byte_array[3] != 234)
-+ _dbus_assert_not_reached ("byte array had wrong values");
-+
-+ if (our_boolean_array_len != 5)
-+ _dbus_assert_not_reached ("bool array had wrong length");
-+
-+ if (our_boolean_array[0] != TRUE ||
-+ our_boolean_array[1] != FALSE ||
-+ our_boolean_array[2] != TRUE ||
-+ our_boolean_array[3] != TRUE ||
-+ our_boolean_array[4] != FALSE)
-+ _dbus_assert_not_reached ("bool array had wrong values");
-+
-+ if (our_string_array_len != 4)
-+ _dbus_assert_not_reached ("string array was wrong length");
-+
-+ if (strcmp (our_string_array[0], "Foo") != 0 ||
-+ strcmp (our_string_array[1], "bar") != 0 ||
-+ strcmp (our_string_array[2], "") != 0 ||
-+ strcmp (our_string_array[3], "woo woo woo woo") != 0)
-+ _dbus_assert_not_reached ("string array had wrong values");
-+
-+ dbus_free_string_array (our_string_array);
-+
-+ if (dbus_message_iter_next (&iter))
-+ _dbus_assert_not_reached ("Didn't reach end of arguments");
-+}
-+
-+/**
-+ * @ingroup DBusMessageInternals
-+ * Unit test for DBusMessage.
-+ *
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_message_test (const char *test_data_dir)
-+{
-+ DBusMessage *message;
-+ DBusMessageLoader *loader;
-+ int i;
-+ const char *data;
-+ DBusMessage *copy;
-+ const char *name1;
-+ const char *name2;
-+ const dbus_uint32_t our_uint32_array[] =
-+ { 0x12345678, 0x23456781, 0x34567812, 0x45678123 };
-+ const dbus_int32_t our_int32_array[] =
-+ { 0x12345678, -0x23456781, 0x34567812, -0x45678123 };
-+ const dbus_uint32_t *v_ARRAY_UINT32 = our_uint32_array;
-+ const dbus_int32_t *v_ARRAY_INT32 = our_int32_array;
-+#ifdef DBUS_HAVE_INT64
-+ const dbus_uint64_t our_uint64_array[] =
-+ { 0x12345678, 0x23456781, 0x34567812, 0x45678123 };
-+ const dbus_int64_t our_int64_array[] =
-+ { 0x12345678, -0x23456781, 0x34567812, -0x45678123 };
-+ const dbus_uint64_t *v_ARRAY_UINT64 = our_uint64_array;
-+ const dbus_int64_t *v_ARRAY_INT64 = our_int64_array;
-+#endif
-+ const char *our_string_array[] = { "Foo", "bar", "", "woo woo woo woo" };
-+ const char **v_ARRAY_STRING = our_string_array;
-+ const double our_double_array[] = { 0.1234, 9876.54321, -300.0 };
-+ const double *v_ARRAY_DOUBLE = our_double_array;
-+ const unsigned char our_byte_array[] = { 'a', 'b', 'c', 234 };
-+ const unsigned char *v_ARRAY_BYTE = our_byte_array;
-+ const dbus_bool_t our_boolean_array[] = { TRUE, FALSE, TRUE, TRUE, FALSE };
-+ const dbus_bool_t *v_ARRAY_BOOLEAN = our_boolean_array;
-+ char sig[64];
-+ const char *s;
-+ const char *v_STRING;
-+ double v_DOUBLE;
-+ dbus_int16_t v_INT16;
-+ dbus_uint16_t v_UINT16;
-+ dbus_int32_t v_INT32;
-+ dbus_uint32_t v_UINT32;
-+#ifdef DBUS_HAVE_INT64
-+ dbus_int64_t v_INT64;
-+ dbus_uint64_t v_UINT64;
-+#endif
-+ unsigned char v_BYTE;
-+ unsigned char v2_BYTE;
-+ dbus_bool_t v_BOOLEAN;
-+
-+ message = dbus_message_new_method_call ("org.freedesktop.DBus.TestService",
-+ "/org/freedesktop/TestPath",
-+ "Foo.TestInterface",
-+ "TestMethod");
-+ _dbus_assert (dbus_message_has_destination (message, "org.freedesktop.DBus.TestService"));
-+ _dbus_assert (dbus_message_is_method_call (message, "Foo.TestInterface",
-+ "TestMethod"));
-+ _dbus_assert (strcmp (dbus_message_get_path (message),
-+ "/org/freedesktop/TestPath") == 0);
-+ _dbus_message_set_serial (message, 1234);
-+
-+ /* string length including nul byte not a multiple of 4 */
-+ if (!dbus_message_set_sender (message, "org.foo.bar1"))
-+ _dbus_assert_not_reached ("out of memory");
-+
-+ _dbus_assert (dbus_message_has_sender (message, "org.foo.bar1"));
-+ dbus_message_set_reply_serial (message, 5678);
-+
-+ _dbus_verbose_bytes_of_string (&message->header.data, 0,
-+ _dbus_string_get_length (&message->header.data));
-+ _dbus_verbose_bytes_of_string (&message->body, 0,
-+ _dbus_string_get_length (&message->body));
-+
-+ if (!dbus_message_set_sender (message, NULL))
-+ _dbus_assert_not_reached ("out of memory");
-+
-+
-+ _dbus_verbose_bytes_of_string (&message->header.data, 0,
-+ _dbus_string_get_length (&message->header.data));
-+ _dbus_verbose_bytes_of_string (&message->body, 0,
-+ _dbus_string_get_length (&message->body));
-+
-+
-+ _dbus_assert (!dbus_message_has_sender (message, "org.foo.bar1"));
-+ _dbus_assert (dbus_message_get_serial (message) == 1234);
-+ _dbus_assert (dbus_message_get_reply_serial (message) == 5678);
-+ _dbus_assert (dbus_message_has_destination (message, "org.freedesktop.DBus.TestService"));
-+
-+ _dbus_assert (dbus_message_get_no_reply (message) == FALSE);
-+ dbus_message_set_no_reply (message, TRUE);
-+ _dbus_assert (dbus_message_get_no_reply (message) == TRUE);
-+ dbus_message_set_no_reply (message, FALSE);
-+ _dbus_assert (dbus_message_get_no_reply (message) == FALSE);
-+
-+ /* Set/get some header fields */
-+
-+ if (!dbus_message_set_path (message, "/foo"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_path (message),
-+ "/foo") == 0);
-+
-+ if (!dbus_message_set_interface (message, "org.Foo"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_interface (message),
-+ "org.Foo") == 0);
-+
-+ if (!dbus_message_set_member (message, "Bar"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_member (message),
-+ "Bar") == 0);
-+
-+ /* Set/get them with longer values */
-+ if (!dbus_message_set_path (message, "/foo/bar"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_path (message),
-+ "/foo/bar") == 0);
-+
-+ if (!dbus_message_set_interface (message, "org.Foo.Bar"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_interface (message),
-+ "org.Foo.Bar") == 0);
-+
-+ if (!dbus_message_set_member (message, "BarFoo"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_member (message),
-+ "BarFoo") == 0);
-+
-+ /* Realloc shorter again */
-+
-+ if (!dbus_message_set_path (message, "/foo"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_path (message),
-+ "/foo") == 0);
-+
-+ if (!dbus_message_set_interface (message, "org.Foo"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_interface (message),
-+ "org.Foo") == 0);
-+
-+ if (!dbus_message_set_member (message, "Bar"))
-+ _dbus_assert_not_reached ("out of memory");
-+ _dbus_assert (strcmp (dbus_message_get_member (message),
-+ "Bar") == 0);
-+
-+ dbus_message_unref (message);
-+
-+ /* Test the vararg functions */
-+ message = dbus_message_new_method_call ("org.freedesktop.DBus.TestService",
-+ "/org/freedesktop/TestPath",
-+ "Foo.TestInterface",
-+ "TestMethod");
-+ _dbus_message_set_serial (message, 1);
-+ dbus_message_set_reply_serial (message, 5678);
-+
-+ v_INT16 = -0x123;
-+ v_UINT16 = 0x123;
-+ v_INT32 = -0x12345678;
-+ v_UINT32 = 0x12300042;
-+#ifdef DBUS_HAVE_INT64
-+ v_INT64 = DBUS_INT64_CONSTANT (-0x123456789abcd);
-+ v_UINT64 = DBUS_UINT64_CONSTANT (0x123456789abcd);
-+#endif
-+ v_STRING = "Test string";
-+ v_DOUBLE = 3.14159;
-+ v_BOOLEAN = TRUE;
-+ v_BYTE = 42;
-+ v2_BYTE = 24;
-+
-+ dbus_message_append_args (message,
-+ DBUS_TYPE_INT16, &v_INT16,
-+ DBUS_TYPE_UINT16, &v_UINT16,
-+ DBUS_TYPE_INT32, &v_INT32,
-+ DBUS_TYPE_UINT32, &v_UINT32,
-+#ifdef DBUS_HAVE_INT64
-+ DBUS_TYPE_INT64, &v_INT64,
-+ DBUS_TYPE_UINT64, &v_UINT64,
-+#endif
-+ DBUS_TYPE_STRING, &v_STRING,
-+ DBUS_TYPE_DOUBLE, &v_DOUBLE,
-+ DBUS_TYPE_BOOLEAN, &v_BOOLEAN,
-+ DBUS_TYPE_BYTE, &v_BYTE,
-+ DBUS_TYPE_BYTE, &v2_BYTE,
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &v_ARRAY_UINT32,
-+ _DBUS_N_ELEMENTS (our_uint32_array),
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_INT32, &v_ARRAY_INT32,
-+ _DBUS_N_ELEMENTS (our_int32_array),
-+#ifdef DBUS_HAVE_INT64
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_UINT64, &v_ARRAY_UINT64,
-+ _DBUS_N_ELEMENTS (our_uint64_array),
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_INT64, &v_ARRAY_INT64,
-+ _DBUS_N_ELEMENTS (our_int64_array),
-+#endif
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE, &v_ARRAY_DOUBLE,
-+ _DBUS_N_ELEMENTS (our_double_array),
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &v_ARRAY_BYTE,
-+ _DBUS_N_ELEMENTS (our_byte_array),
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_BOOLEAN, &v_ARRAY_BOOLEAN,
-+ _DBUS_N_ELEMENTS (our_boolean_array),
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &v_ARRAY_STRING,
-+ _DBUS_N_ELEMENTS (our_string_array),
-+ DBUS_TYPE_INVALID);
-+
-+ i = 0;
-+ sig[i++] = DBUS_TYPE_INT16;
-+ sig[i++] = DBUS_TYPE_UINT16;
-+ sig[i++] = DBUS_TYPE_INT32;
-+ sig[i++] = DBUS_TYPE_UINT32;
-+#ifdef DBUS_HAVE_INT64
-+ sig[i++] = DBUS_TYPE_INT64;
-+ sig[i++] = DBUS_TYPE_UINT64;
-+#endif
-+ sig[i++] = DBUS_TYPE_STRING;
-+ sig[i++] = DBUS_TYPE_DOUBLE;
-+ sig[i++] = DBUS_TYPE_BOOLEAN;
-+ sig[i++] = DBUS_TYPE_BYTE;
-+ sig[i++] = DBUS_TYPE_BYTE;
-+ sig[i++] = DBUS_TYPE_ARRAY;
-+ sig[i++] = DBUS_TYPE_UINT32;
-+ sig[i++] = DBUS_TYPE_ARRAY;
-+ sig[i++] = DBUS_TYPE_INT32;
-+#ifdef DBUS_HAVE_INT64
-+ sig[i++] = DBUS_TYPE_ARRAY;
-+ sig[i++] = DBUS_TYPE_UINT64;
-+ sig[i++] = DBUS_TYPE_ARRAY;
-+ sig[i++] = DBUS_TYPE_INT64;
-+#endif
-+ sig[i++] = DBUS_TYPE_ARRAY;
-+ sig[i++] = DBUS_TYPE_DOUBLE;
-+ sig[i++] = DBUS_TYPE_ARRAY;
-+ sig[i++] = DBUS_TYPE_BYTE;
-+ sig[i++] = DBUS_TYPE_ARRAY;
-+ sig[i++] = DBUS_TYPE_BOOLEAN;
-+ sig[i++] = DBUS_TYPE_ARRAY;
-+ sig[i++] = DBUS_TYPE_STRING;
-+ sig[i++] = DBUS_TYPE_INVALID;
-+
-+ _dbus_assert (i < (int) _DBUS_N_ELEMENTS (sig));
-+
-+ _dbus_verbose ("HEADER\n");
-+ _dbus_verbose_bytes_of_string (&message->header.data, 0,
-+ _dbus_string_get_length (&message->header.data));
-+ _dbus_verbose ("BODY\n");
-+ _dbus_verbose_bytes_of_string (&message->body, 0,
-+ _dbus_string_get_length (&message->body));
-+
-+ _dbus_verbose ("Signature expected \"%s\" actual \"%s\"\n",
-+ sig, dbus_message_get_signature (message));
-+
-+ s = dbus_message_get_signature (message);
-+
-+ _dbus_assert (dbus_message_has_signature (message, sig));
-+ _dbus_assert (strcmp (s, sig) == 0);
-+
-+ verify_test_message (message);
-+
-+ copy = dbus_message_copy (message);
-+
-+ _dbus_assert (dbus_message_get_reply_serial (message) ==
-+ dbus_message_get_reply_serial (copy));
-+ _dbus_assert (message->header.padding == copy->header.padding);
-+
-+ _dbus_assert (_dbus_string_get_length (&message->header.data) ==
-+ _dbus_string_get_length (©->header.data));
-+
-+ _dbus_assert (_dbus_string_get_length (&message->body) ==
-+ _dbus_string_get_length (©->body));
-+
-+ verify_test_message (copy);
-+
-+ name1 = dbus_message_get_interface (message);
-+ name2 = dbus_message_get_interface (copy);
-+
-+ _dbus_assert (strcmp (name1, name2) == 0);
-+
-+ name1 = dbus_message_get_member (message);
-+ name2 = dbus_message_get_member (copy);
-+
-+ _dbus_assert (strcmp (name1, name2) == 0);
-+
-+ dbus_message_unref (copy);
-+
-+ /* Message loader test */
-+ _dbus_message_lock (message);
-+ loader = _dbus_message_loader_new ();
-+
-+ /* check ref/unref */
-+ _dbus_message_loader_ref (loader);
-+ _dbus_message_loader_unref (loader);
-+
-+ /* Write the header data one byte at a time */
-+ data = _dbus_string_get_const_data (&message->header.data);
-+ for (i = 0; i < _dbus_string_get_length (&message->header.data); i++)
-+ {
-+ DBusString *buffer;
-+
-+ _dbus_message_loader_get_buffer (loader, &buffer);
-+ _dbus_string_append_byte (buffer, data[i]);
-+ _dbus_message_loader_return_buffer (loader, buffer, 1);
-+ }
-+
-+ /* Write the body data one byte at a time */
-+ data = _dbus_string_get_const_data (&message->body);
-+ for (i = 0; i < _dbus_string_get_length (&message->body); i++)
-+ {
-+ DBusString *buffer;
-+
-+ _dbus_message_loader_get_buffer (loader, &buffer);
-+ _dbus_string_append_byte (buffer, data[i]);
-+ _dbus_message_loader_return_buffer (loader, buffer, 1);
-+ }
-+
-+ dbus_message_unref (message);
-+
-+ /* Now pop back the message */
-+ if (!_dbus_message_loader_queue_messages (loader))
-+ _dbus_assert_not_reached ("no memory to queue messages");
-+
-+ if (_dbus_message_loader_get_is_corrupted (loader))
-+ _dbus_assert_not_reached ("message loader corrupted");
-+
-+ message = _dbus_message_loader_pop_message (loader);
-+ if (!message)
-+ _dbus_assert_not_reached ("received a NULL message");
-+
-+ if (dbus_message_get_reply_serial (message) != 5678)
-+ _dbus_assert_not_reached ("reply serial fields differ");
-+
-+ verify_test_message (message);
-+
-+ dbus_message_unref (message);
-+ _dbus_message_loader_unref (loader);
-+
-+ check_memleaks ();
-+
-+ /* Load all the sample messages from the message factory */
-+ {
-+ DBusMessageDataIter diter;
-+ DBusMessageData mdata;
-+ int count;
-+
-+ reset_validities_seen ();
-+
-+ count = 0;
-+ _dbus_message_data_iter_init (&diter);
-+
-+ while (_dbus_message_data_iter_get_and_next (&diter,
-+ &mdata))
-+ {
-+ if (!dbus_internal_do_not_use_try_message_data (&mdata.data,
-+ mdata.expected_validity))
-+ {
-+ _dbus_warn ("expected validity %d and did not get it\n",
-+ mdata.expected_validity);
-+ _dbus_assert_not_reached ("message data failed");
-+ }
-+
-+ _dbus_message_data_free (&mdata);
-+
-+ count += 1;
-+ }
-+
-+ printf ("%d sample messages tested\n", count);
-+
-+ print_validities_seen (FALSE);
-+ print_validities_seen (TRUE);
-+ }
-+
-+ check_memleaks ();
-+
-+ /* Now load every message in test_data_dir if we have one */
-+ if (test_data_dir == NULL)
-+ return TRUE;
-+
-+ return dbus_internal_do_not_use_foreach_message_file (test_data_dir,
-+ (DBusForeachMessageFileFunc)
-+ dbus_internal_do_not_use_try_message_file,
-+ NULL);
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-message.c dbus-0.61/dbus/dbus-message.c
---- dbus-0.61.orig/dbus/dbus-message.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-message.c 2006-02-16 01:43:41.000000000 +0100
-@@ -0,0 +1,3746 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-message.c DBusMessage object
-+ *
-+ * Copyright (C) 2002, 2003, 2004, 2005 Red Hat Inc.
-+ * Copyright (C) 2002, 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-marshal-recursive.h"
-+#include "dbus-marshal-validate.h"
-+#include "dbus-marshal-byteswap.h"
-+#include "dbus-marshal-header.h"
-+#include "dbus-signature.h"
-+#include "dbus-message-private.h"
-+#include "dbus-object-tree.h"
-+#include "dbus-memory.h"
-+#include "dbus-list.h"
-+#include "dbus-threads-internal.h"
-+#include <string.h>
-+
-+/**
-+ * @defgroup DBusMessageInternals DBusMessage implementation details
-+ * @ingroup DBusInternals
-+ * @brief DBusMessage private implementation details.
-+ *
-+ * The guts of DBusMessage and its methods.
-+ *
-+ * @{
-+ */
-+
-+/* Not thread locked, but strictly const/read-only so should be OK
-+ */
-+/** An static string representing an empty signature */
-+_DBUS_STRING_DEFINE_STATIC(_dbus_empty_signature_str, "");
-+
-+/* these have wacky values to help trap uninitialized iterators;
-+ * but has to fit in 3 bits
-+ */
-+enum {
-+ DBUS_MESSAGE_ITER_TYPE_READER = 3,
-+ DBUS_MESSAGE_ITER_TYPE_WRITER = 7
-+};
-+
-+/** typedef for internals of message iterator */
-+typedef struct DBusMessageRealIter DBusMessageRealIter;
-+
-+/**
-+ * @brief Internals of DBusMessageIter
-+ *
-+ * Object representing a position in a message. All fields are internal.
-+ */
-+struct DBusMessageRealIter
-+{
-+ DBusMessage *message; /**< Message used */
-+ dbus_uint32_t changed_stamp : CHANGED_STAMP_BITS; /**< stamp to detect invalid iters */
-+ dbus_uint32_t iter_type : 3; /**< whether this is a reader or writer iter */
-+ dbus_uint32_t sig_refcount : 8; /**< depth of open_signature() */
-+ union
-+ {
-+ DBusTypeWriter writer; /**< writer */
-+ DBusTypeReader reader; /**< reader */
-+ } u; /**< the type writer or reader that does all the work */
-+};
-+
-+static void
-+get_const_signature (DBusHeader *header,
-+ const DBusString **type_str_p,
-+ int *type_pos_p)
-+{
-+ if (_dbus_header_get_field_raw (header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ type_str_p,
-+ type_pos_p))
-+ {
-+ *type_pos_p += 1; /* skip the signature length which is 1 byte */
-+ }
-+ else
-+ {
-+ *type_str_p = &_dbus_empty_signature_str;
-+ *type_pos_p = 0;
-+ }
-+}
-+
-+/**
-+ * Swaps the message to compiler byte order if required
-+ *
-+ * @param message the message
-+ */
-+static void
-+_dbus_message_byteswap (DBusMessage *message)
-+{
-+ const DBusString *type_str;
-+ int type_pos;
-+
-+ if (message->byte_order == DBUS_COMPILER_BYTE_ORDER)
-+ return;
-+
-+ _dbus_verbose ("Swapping message into compiler byte order\n");
-+
-+ get_const_signature (&message->header, &type_str, &type_pos);
-+
-+ _dbus_marshal_byteswap (type_str, type_pos,
-+ message->byte_order,
-+ DBUS_COMPILER_BYTE_ORDER,
-+ &message->body, 0);
-+
-+ message->byte_order = DBUS_COMPILER_BYTE_ORDER;
-+
-+ _dbus_header_byteswap (&message->header, DBUS_COMPILER_BYTE_ORDER);
-+}
-+
-+#define ensure_byte_order(message) \
-+ if (message->byte_order != DBUS_COMPILER_BYTE_ORDER) \
-+ _dbus_message_byteswap (message)
-+
-+/**
-+ * Gets the data to be sent over the network for this message.
-+ * The header and then the body should be written out.
-+ * This function is guaranteed to always return the same
-+ * data once a message is locked (with _dbus_message_lock()).
-+ *
-+ * @param message the message.
-+ * @param header return location for message header data.
-+ * @param body return location for message body data.
-+ */
-+void
-+_dbus_message_get_network_data (DBusMessage *message,
-+ const DBusString **header,
-+ const DBusString **body)
-+{
-+ _dbus_assert (message->locked);
-+
-+ *header = &message->header.data;
-+ *body = &message->body;
-+}
-+
-+/**
-+ * Sets the serial number of a message.
-+ * This can only be done once on a message.
-+ *
-+ * @param message the message
-+ * @param serial the serial
-+ */
-+void
-+_dbus_message_set_serial (DBusMessage *message,
-+ dbus_uint32_t serial)
-+{
-+ _dbus_assert (message != NULL);
-+ _dbus_assert (!message->locked);
-+ _dbus_assert (dbus_message_get_serial (message) == 0);
-+
-+ _dbus_header_set_serial (&message->header, serial);
-+}
-+
-+/**
-+ * Adds a counter to be incremented immediately with the
-+ * size of this message, and decremented by the size
-+ * of this message when this message if finalized.
-+ * The link contains a counter with its refcount already
-+ * incremented, but the counter itself not incremented.
-+ * Ownership of link and counter refcount is passed to
-+ * the message.
-+ *
-+ * @param message the message
-+ * @param link link with counter as data
-+ */
-+void
-+_dbus_message_add_size_counter_link (DBusMessage *message,
-+ DBusList *link)
-+{
-+ /* right now we don't recompute the delta when message
-+ * size changes, and that's OK for current purposes
-+ * I think, but could be important to change later.
-+ * Do recompute it whenever there are no outstanding counters,
-+ * since it's basically free.
-+ */
-+ if (message->size_counters == NULL)
-+ {
-+ message->size_counter_delta =
-+ _dbus_string_get_length (&message->header.data) +
-+ _dbus_string_get_length (&message->body);
-+
-+#if 0
-+ _dbus_verbose ("message has size %ld\n",
-+ message->size_counter_delta);
-+#endif
-+ }
-+
-+ _dbus_list_append_link (&message->size_counters, link);
-+
-+ _dbus_counter_adjust (link->data, message->size_counter_delta);
-+}
-+
-+/**
-+ * Adds a counter to be incremented immediately with the
-+ * size of this message, and decremented by the size
-+ * of this message when this message if finalized.
-+ *
-+ * @param message the message
-+ * @param counter the counter
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_message_add_size_counter (DBusMessage *message,
-+ DBusCounter *counter)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_alloc_link (counter);
-+ if (link == NULL)
-+ return FALSE;
-+
-+ _dbus_counter_ref (counter);
-+ _dbus_message_add_size_counter_link (message, link);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Removes a counter tracking the size of this message, and decrements
-+ * the counter by the size of this message.
-+ *
-+ * @param message the message
-+ * @param link_return return the link used
-+ * @param counter the counter
-+ */
-+void
-+_dbus_message_remove_size_counter (DBusMessage *message,
-+ DBusCounter *counter,
-+ DBusList **link_return)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_find_last (&message->size_counters,
-+ counter);
-+ _dbus_assert (link != NULL);
-+
-+ _dbus_list_unlink (&message->size_counters,
-+ link);
-+ if (link_return)
-+ *link_return = link;
-+ else
-+ _dbus_list_free_link (link);
-+
-+ _dbus_counter_adjust (counter, - message->size_counter_delta);
-+
-+ _dbus_counter_unref (counter);
-+}
-+
-+/**
-+ * Locks a message. Allows checking that applications don't keep a
-+ * reference to a message in the outgoing queue and change it
-+ * underneath us. Messages are locked when they enter the outgoing
-+ * queue (dbus_connection_send_message()), and the library complains
-+ * if the message is modified while locked.
-+ *
-+ * @param message the message to lock.
-+ */
-+void
-+_dbus_message_lock (DBusMessage *message)
-+{
-+ if (!message->locked)
-+ {
-+ _dbus_header_update_lengths (&message->header,
-+ _dbus_string_get_length (&message->body));
-+
-+ /* must have a signature if you have a body */
-+ _dbus_assert (_dbus_string_get_length (&message->body) == 0 ||
-+ dbus_message_get_signature (message) != NULL);
-+
-+ message->locked = TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+set_or_delete_string_field (DBusMessage *message,
-+ int field,
-+ int typecode,
-+ const char *value)
-+{
-+ if (value == NULL)
-+ return _dbus_header_delete_field (&message->header, field);
-+ else
-+ return _dbus_header_set_field_basic (&message->header,
-+ field,
-+ typecode,
-+ &value);
-+}
-+
-+#if 0
-+/* Probably we don't need to use this */
-+/**
-+ * Sets the signature of the message, i.e. the arguments in the
-+ * message payload. The signature includes only "in" arguments for
-+ * #DBUS_MESSAGE_TYPE_METHOD_CALL and only "out" arguments for
-+ * #DBUS_MESSAGE_TYPE_METHOD_RETURN, so is slightly different from
-+ * what you might expect (it does not include the signature of the
-+ * entire C++-style method).
-+ *
-+ * The signature is a string made up of type codes such as
-+ * #DBUS_TYPE_INT32. The string is terminated with nul (nul is also
-+ * the value of #DBUS_TYPE_INVALID). The macros such as
-+ * #DBUS_TYPE_INT32 evaluate to integers; to assemble a signature you
-+ * may find it useful to use the string forms, such as
-+ * #DBUS_TYPE_INT32_AS_STRING.
-+ *
-+ * An "unset" or #NULL signature is considered the same as an empty
-+ * signature. In fact dbus_message_get_signature() will never return
-+ * #NULL.
-+ *
-+ * @param message the message
-+ * @param signature the type signature or #NULL to unset
-+ * @returns #FALSE if no memory
-+ */
-+static dbus_bool_t
-+_dbus_message_set_signature (DBusMessage *message,
-+ const char *signature)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (!message->locked, FALSE);
-+ _dbus_return_val_if_fail (signature == NULL ||
-+ _dbus_check_is_valid_signature (signature));
-+ /* can't delete the signature if you have a message body */
-+ _dbus_return_val_if_fail (_dbus_string_get_length (&message->body) == 0 ||
-+ signature != NULL);
-+
-+ return set_or_delete_string_field (message,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ DBUS_TYPE_SIGNATURE,
-+ signature);
-+}
-+#endif
-+
-+/** @} */
-+
-+/**
-+ * @defgroup DBusMessage DBusMessage
-+ * @ingroup DBus
-+ * @brief Message to be sent or received over a DBusConnection.
-+ *
-+ * A DBusMessage is the most basic unit of communication over a
-+ * DBusConnection. A DBusConnection represents a stream of messages
-+ * received from a remote application, and a stream of messages
-+ * sent to a remote application.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @typedef DBusMessage
-+ *
-+ * Opaque data type representing a message received from or to be
-+ * sent to another application.
-+ */
-+
-+/**
-+ * Returns the serial of a message or 0 if none has been specified.
-+ * The message's serial number is provided by the application sending
-+ * the message and is used to identify replies to this message. All
-+ * messages received on a connection will have a serial, but messages
-+ * you haven't sent yet may return 0.
-+ *
-+ * @param message the message
-+ * @returns the client serial
-+ */
-+dbus_uint32_t
-+dbus_message_get_serial (DBusMessage *message)
-+{
-+ _dbus_return_val_if_fail (message != NULL, 0);
-+
-+ return _dbus_header_get_serial (&message->header);
-+}
-+
-+/**
-+ * Sets the reply serial of a message (the client serial
-+ * of the message this is a reply to).
-+ *
-+ * @param message the message
-+ * @param reply_serial the client serial
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_set_reply_serial (DBusMessage *message,
-+ dbus_uint32_t reply_serial)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (!message->locked, FALSE);
-+ _dbus_return_val_if_fail (reply_serial != 0, FALSE); /* 0 is invalid */
-+
-+ return _dbus_header_set_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_REPLY_SERIAL,
-+ DBUS_TYPE_UINT32,
-+ &reply_serial);
-+}
-+
-+/**
-+ * Returns the serial that the message is a reply to or 0 if none.
-+ *
-+ * @param message the message
-+ * @returns the reply serial
-+ */
-+dbus_uint32_t
-+dbus_message_get_reply_serial (DBusMessage *message)
-+{
-+ dbus_uint32_t v_UINT32;
-+
-+ _dbus_return_val_if_fail (message != NULL, 0);
-+
-+ if (_dbus_header_get_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_REPLY_SERIAL,
-+ DBUS_TYPE_UINT32,
-+ &v_UINT32))
-+ return v_UINT32;
-+ else
-+ return 0;
-+}
-+
-+static void
-+free_size_counter (void *element,
-+ void *data)
-+{
-+ DBusCounter *counter = element;
-+ DBusMessage *message = data;
-+
-+ _dbus_counter_adjust (counter, - message->size_counter_delta);
-+
-+ _dbus_counter_unref (counter);
-+}
-+
-+static void
-+dbus_message_finalize (DBusMessage *message)
-+{
-+ _dbus_assert (message->refcount.value == 0);
-+
-+ /* This calls application callbacks! */
-+ _dbus_data_slot_list_free (&message->slot_list);
-+
-+ _dbus_list_foreach (&message->size_counters,
-+ free_size_counter, message);
-+ _dbus_list_clear (&message->size_counters);
-+
-+ _dbus_header_free (&message->header);
-+ _dbus_string_free (&message->body);
-+
-+ _dbus_assert (message->refcount.value == 0);
-+
-+ dbus_free (message);
-+}
-+
-+/* Message Cache
-+ *
-+ * We cache some DBusMessage to reduce the overhead of allocating
-+ * them. In my profiling this consistently made about an 8%
-+ * difference. It avoids the malloc for the message, the malloc for
-+ * the slot list, the malloc for the header string and body string,
-+ * and the associated free() calls. It does introduce another global
-+ * lock which could be a performance issue in certain cases.
-+ *
-+ * For the echo client/server the round trip time goes from around
-+ * .000077 to .000069 with the message cache on my laptop. The sysprof
-+ * change is as follows (numbers are cumulative percentage):
-+ *
-+ * with message cache implemented as array as it is now (0.000069 per):
-+ * new_empty_header 1.46
-+ * mutex_lock 0.56 # i.e. _DBUS_LOCK(message_cache)
-+ * mutex_unlock 0.25
-+ * self 0.41
-+ * unref 2.24
-+ * self 0.68
-+ * list_clear 0.43
-+ * mutex_lock 0.33 # i.e. _DBUS_LOCK(message_cache)
-+ * mutex_unlock 0.25
-+ *
-+ * with message cache implemented as list (0.000070 per roundtrip):
-+ * new_empty_header 2.72
-+ * list_pop_first 1.88
-+ * unref 3.3
-+ * list_prepend 1.63
-+ *
-+ * without cache (0.000077 per roundtrip):
-+ * new_empty_header 6.7
-+ * string_init_preallocated 3.43
-+ * dbus_malloc 2.43
-+ * dbus_malloc0 2.59
-+ *
-+ * unref 4.02
-+ * string_free 1.82
-+ * dbus_free 1.63
-+ * dbus_free 0.71
-+ *
-+ * If you implement the message_cache with a list, the primary reason
-+ * it's slower is that you add another thread lock (on the DBusList
-+ * mempool).
-+ */
-+
-+/** Avoid caching huge messages */
-+#define MAX_MESSAGE_SIZE_TO_CACHE 10 * _DBUS_ONE_KILOBYTE
-+
-+/** Avoid caching too many messages */
-+#define MAX_MESSAGE_CACHE_SIZE 5
-+
-+_DBUS_DEFINE_GLOBAL_LOCK (message_cache);
-+static DBusMessage *message_cache[MAX_MESSAGE_CACHE_SIZE];
-+static int message_cache_count = 0;
-+static dbus_bool_t message_cache_shutdown_registered = FALSE;
-+
-+static void
-+dbus_message_cache_shutdown (void *data)
-+{
-+ int i;
-+
-+ _DBUS_LOCK (message_cache);
-+
-+ i = 0;
-+ while (i < MAX_MESSAGE_CACHE_SIZE)
-+ {
-+ if (message_cache[i])
-+ dbus_message_finalize (message_cache[i]);
-+
-+ ++i;
-+ }
-+
-+ message_cache_count = 0;
-+ message_cache_shutdown_registered = FALSE;
-+
-+ _DBUS_UNLOCK (message_cache);
-+}
-+
-+/**
-+ * Tries to get a message from the message cache. The retrieved
-+ * message will have junk in it, so it still needs to be cleared out
-+ * in dbus_message_new_empty_header()
-+ *
-+ * @returns the message, or #NULL if none cached
-+ */
-+static DBusMessage*
-+dbus_message_get_cached (void)
-+{
-+ DBusMessage *message;
-+ int i;
-+
-+ message = NULL;
-+
-+ _DBUS_LOCK (message_cache);
-+
-+ _dbus_assert (message_cache_count >= 0);
-+
-+ if (message_cache_count == 0)
-+ {
-+ _DBUS_UNLOCK (message_cache);
-+ return NULL;
-+ }
-+
-+ /* This is not necessarily true unless count > 0, and
-+ * message_cache is uninitialized until the shutdown is
-+ * registered
-+ */
-+ _dbus_assert (message_cache_shutdown_registered);
-+
-+ i = 0;
-+ while (i < MAX_MESSAGE_CACHE_SIZE)
-+ {
-+ if (message_cache[i])
-+ {
-+ message = message_cache[i];
-+ message_cache[i] = NULL;
-+ message_cache_count -= 1;
-+ break;
-+ }
-+ ++i;
-+ }
-+ _dbus_assert (message_cache_count >= 0);
-+ _dbus_assert (i < MAX_MESSAGE_CACHE_SIZE);
-+ _dbus_assert (message != NULL);
-+
-+ _DBUS_UNLOCK (message_cache);
-+
-+ _dbus_assert (message->refcount.value == 0);
-+ _dbus_assert (message->size_counters == NULL);
-+
-+ return message;
-+}
-+
-+/**
-+ * Tries to cache a message, otherwise finalize it.
-+ *
-+ * @param message the message
-+ */
-+static void
-+dbus_message_cache_or_finalize (DBusMessage *message)
-+{
-+ dbus_bool_t was_cached;
-+ int i;
-+
-+ _dbus_assert (message->refcount.value == 0);
-+
-+ /* This calls application code and has to be done first thing
-+ * without holding the lock
-+ */
-+ _dbus_data_slot_list_clear (&message->slot_list);
-+
-+ _dbus_list_foreach (&message->size_counters,
-+ free_size_counter, message);
-+ _dbus_list_clear (&message->size_counters);
-+
-+ was_cached = FALSE;
-+
-+ _DBUS_LOCK (message_cache);
-+
-+ if (!message_cache_shutdown_registered)
-+ {
-+ _dbus_assert (message_cache_count == 0);
-+
-+ if (!_dbus_register_shutdown_func (dbus_message_cache_shutdown, NULL))
-+ goto out;
-+
-+ i = 0;
-+ while (i < MAX_MESSAGE_CACHE_SIZE)
-+ {
-+ message_cache[i] = NULL;
-+ ++i;
-+ }
-+
-+ message_cache_shutdown_registered = TRUE;
-+ }
-+
-+ _dbus_assert (message_cache_count >= 0);
-+
-+ if ((_dbus_string_get_length (&message->header.data) +
-+ _dbus_string_get_length (&message->body)) >
-+ MAX_MESSAGE_SIZE_TO_CACHE)
-+ goto out;
-+
-+ if (message_cache_count >= MAX_MESSAGE_CACHE_SIZE)
-+ goto out;
-+
-+ /* Find empty slot */
-+ i = 0;
-+ while (message_cache[i] != NULL)
-+ ++i;
-+
-+ _dbus_assert (i < MAX_MESSAGE_CACHE_SIZE);
-+
-+ _dbus_assert (message_cache[i] == NULL);
-+ message_cache[i] = message;
-+ message_cache_count += 1;
-+ was_cached = TRUE;
-+#ifndef DBUS_DISABLE_CHECKS
-+ message->in_cache = TRUE;
-+#endif
-+
-+ out:
-+ _DBUS_UNLOCK (message_cache);
-+
-+ _dbus_assert (message->refcount.value == 0);
-+
-+ if (!was_cached)
-+ dbus_message_finalize (message);
-+}
-+
-+static DBusMessage*
-+dbus_message_new_empty_header (void)
-+{
-+ DBusMessage *message;
-+ dbus_bool_t from_cache;
-+
-+ message = dbus_message_get_cached ();
-+
-+ if (message != NULL)
-+ {
-+ from_cache = TRUE;
-+ }
-+ else
-+ {
-+ from_cache = FALSE;
-+ message = dbus_new (DBusMessage, 1);
-+ if (message == NULL)
-+ return NULL;
-+#ifndef DBUS_DISABLE_CHECKS
-+ message->generation = _dbus_current_generation;
-+#endif
-+ }
-+
-+ message->refcount.value = 1;
-+ message->byte_order = DBUS_COMPILER_BYTE_ORDER;
-+ message->locked = FALSE;
-+#ifndef DBUS_DISABLE_CHECKS
-+ message->in_cache = FALSE;
-+#endif
-+ message->size_counters = NULL;
-+ message->size_counter_delta = 0;
-+ message->changed_stamp = 0;
-+
-+ if (!from_cache)
-+ _dbus_data_slot_list_init (&message->slot_list);
-+
-+ if (from_cache)
-+ {
-+ _dbus_header_reinit (&message->header, message->byte_order);
-+ _dbus_string_set_length (&message->body, 0);
-+ }
-+ else
-+ {
-+ if (!_dbus_header_init (&message->header, message->byte_order))
-+ {
-+ dbus_free (message);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_init_preallocated (&message->body, 32))
-+ {
-+ _dbus_header_free (&message->header);
-+ dbus_free (message);
-+ return NULL;
-+ }
-+ }
-+
-+ return message;
-+}
-+
-+/**
-+ * Constructs a new message of the given message type.
-+ * Types include #DBUS_MESSAGE_TYPE_METHOD_CALL,
-+ * #DBUS_MESSAGE_TYPE_SIGNAL, and so forth.
-+ *
-+ * @param message_type type of message
-+ * @returns new message or #NULL If no memory
-+ */
-+DBusMessage*
-+dbus_message_new (int message_type)
-+{
-+ DBusMessage *message;
-+
-+ _dbus_return_val_if_fail (message_type != DBUS_MESSAGE_TYPE_INVALID, NULL);
-+
-+ message = dbus_message_new_empty_header ();
-+ if (message == NULL)
-+ return NULL;
-+
-+ if (!_dbus_header_create (&message->header,
-+ message_type,
-+ NULL, NULL, NULL, NULL, NULL))
-+ {
-+ dbus_message_unref (message);
-+ return NULL;
-+ }
-+
-+ return message;
-+}
-+
-+/**
-+ * Constructs a new message to invoke a method on a remote
-+ * object. Returns #NULL if memory can't be allocated for the
-+ * message. The destination may be #NULL in which case no destination
-+ * is set; this is appropriate when using D-BUS in a peer-to-peer
-+ * context (no message bus). The interface may be #NULL, which means
-+ * that if multiple methods with the given name exist it is undefined
-+ * which one will be invoked.
-+ *
-+ * @param destination name that the message should be sent to or #NULL
-+ * @param path object path the message should be sent to
-+ * @param interface interface to invoke method on
-+ * @param method method to invoke
-+ *
-+ * @returns a new DBusMessage, free with dbus_message_unref()
-+ * @see dbus_message_unref()
-+ */
-+DBusMessage*
-+dbus_message_new_method_call (const char *destination,
-+ const char *path,
-+ const char *interface,
-+ const char *method)
-+{
-+ DBusMessage *message;
-+
-+ _dbus_return_val_if_fail (path != NULL, NULL);
-+ _dbus_return_val_if_fail (method != NULL, NULL);
-+ _dbus_return_val_if_fail (destination == NULL ||
-+ _dbus_check_is_valid_bus_name (destination), NULL);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_path (path), NULL);
-+ _dbus_return_val_if_fail (interface == NULL ||
-+ _dbus_check_is_valid_interface (interface), NULL);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_member (method), NULL);
-+
-+ message = dbus_message_new_empty_header ();
-+ if (message == NULL)
-+ return NULL;
-+
-+ if (!_dbus_header_create (&message->header,
-+ DBUS_MESSAGE_TYPE_METHOD_CALL,
-+ destination, path, interface, method, NULL))
-+ {
-+ dbus_message_unref (message);
-+ return NULL;
-+ }
-+
-+ return message;
-+}
-+
-+/**
-+ * Constructs a message that is a reply to a method call. Returns
-+ * #NULL if memory can't be allocated for the message.
-+ *
-+ * @param method_call the message which the created
-+ * message is a reply to.
-+ * @returns a new DBusMessage, free with dbus_message_unref()
-+ * @see dbus_message_new_method_call(), dbus_message_unref()
-+ */
-+DBusMessage*
-+dbus_message_new_method_return (DBusMessage *method_call)
-+{
-+ DBusMessage *message;
-+ const char *sender;
-+
-+ _dbus_return_val_if_fail (method_call != NULL, NULL);
-+
-+ sender = dbus_message_get_sender (method_call);
-+
-+ /* sender is allowed to be null here in peer-to-peer case */
-+
-+ message = dbus_message_new_empty_header ();
-+ if (message == NULL)
-+ return NULL;
-+
-+ if (!_dbus_header_create (&message->header,
-+ DBUS_MESSAGE_TYPE_METHOD_RETURN,
-+ sender, NULL, NULL, NULL, NULL))
-+ {
-+ dbus_message_unref (message);
-+ return NULL;
-+ }
-+
-+ dbus_message_set_no_reply (message, TRUE);
-+
-+ if (!dbus_message_set_reply_serial (message,
-+ dbus_message_get_serial (method_call)))
-+ {
-+ dbus_message_unref (message);
-+ return NULL;
-+ }
-+
-+ return message;
-+}
-+
-+/**
-+ * Constructs a new message representing a signal emission. Returns
-+ * #NULL if memory can't be allocated for the message. A signal is
-+ * identified by its originating interface, and the name of the
-+ * signal.
-+ *
-+ * @param path the path to the object emitting the signal
-+ * @param interface the interface the signal is emitted from
-+ * @param name name of the signal
-+ * @returns a new DBusMessage, free with dbus_message_unref()
-+ * @see dbus_message_unref()
-+ */
-+DBusMessage*
-+dbus_message_new_signal (const char *path,
-+ const char *interface,
-+ const char *name)
-+{
-+ DBusMessage *message;
-+
-+ _dbus_return_val_if_fail (path != NULL, NULL);
-+ _dbus_return_val_if_fail (interface != NULL, NULL);
-+ _dbus_return_val_if_fail (name != NULL, NULL);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_path (path), NULL);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_interface (interface), NULL);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_member (name), NULL);
-+
-+ message = dbus_message_new_empty_header ();
-+ if (message == NULL)
-+ return NULL;
-+
-+ if (!_dbus_header_create (&message->header,
-+ DBUS_MESSAGE_TYPE_SIGNAL,
-+ NULL, path, interface, name, NULL))
-+ {
-+ dbus_message_unref (message);
-+ return NULL;
-+ }
-+
-+ dbus_message_set_no_reply (message, TRUE);
-+
-+ return message;
-+}
-+
-+/**
-+ * Creates a new message that is an error reply to a certain message.
-+ * Error replies are possible in response to method calls primarily.
-+ *
-+ * @param reply_to the original message
-+ * @param error_name the error name
-+ * @param error_message the error message string or #NULL for none
-+ * @returns a new error message
-+ */
-+DBusMessage*
-+dbus_message_new_error (DBusMessage *reply_to,
-+ const char *error_name,
-+ const char *error_message)
-+{
-+ DBusMessage *message;
-+ const char *sender;
-+ DBusMessageIter iter;
-+
-+ _dbus_return_val_if_fail (reply_to != NULL, NULL);
-+ _dbus_return_val_if_fail (error_name != NULL, NULL);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_error_name (error_name), NULL);
-+
-+ sender = dbus_message_get_sender (reply_to);
-+
-+ /* sender may be NULL for non-message-bus case or
-+ * when the message bus is dealing with an unregistered
-+ * connection.
-+ */
-+ message = dbus_message_new_empty_header ();
-+ if (message == NULL)
-+ return NULL;
-+
-+ if (!_dbus_header_create (&message->header,
-+ DBUS_MESSAGE_TYPE_ERROR,
-+ sender, NULL, NULL, NULL, error_name))
-+ {
-+ dbus_message_unref (message);
-+ return NULL;
-+ }
-+
-+ dbus_message_set_no_reply (message, TRUE);
-+
-+ if (!dbus_message_set_reply_serial (message,
-+ dbus_message_get_serial (reply_to)))
-+ {
-+ dbus_message_unref (message);
-+ return NULL;
-+ }
-+
-+ if (error_message != NULL)
-+ {
-+ dbus_message_iter_init_append (message, &iter);
-+ if (!dbus_message_iter_append_basic (&iter,
-+ DBUS_TYPE_STRING,
-+ &error_message))
-+ {
-+ dbus_message_unref (message);
-+ return NULL;
-+ }
-+ }
-+
-+ return message;
-+}
-+
-+/**
-+ * Creates a new message that is an error reply to a certain message.
-+ * Error replies are possible in response to method calls primarily.
-+ *
-+ * @param reply_to the original message
-+ * @param error_name the error name
-+ * @param error_format the error message format as with printf
-+ * @param ... format string arguments
-+ * @returns a new error message
-+ */
-+DBusMessage*
-+dbus_message_new_error_printf (DBusMessage *reply_to,
-+ const char *error_name,
-+ const char *error_format,
-+ ...)
-+{
-+ va_list args;
-+ DBusString str;
-+ DBusMessage *message;
-+
-+ _dbus_return_val_if_fail (reply_to != NULL, NULL);
-+ _dbus_return_val_if_fail (error_name != NULL, NULL);
-+ _dbus_return_val_if_fail (_dbus_check_is_valid_error_name (error_name), NULL);
-+
-+ if (!_dbus_string_init (&str))
-+ return NULL;
-+
-+ va_start (args, error_format);
-+
-+ if (_dbus_string_append_printf_valist (&str, error_format, args))
-+ message = dbus_message_new_error (reply_to, error_name,
-+ _dbus_string_get_const_data (&str));
-+ else
-+ message = NULL;
-+
-+ _dbus_string_free (&str);
-+
-+ va_end (args);
-+
-+ return message;
-+}
-+
-+
-+/**
-+ * Creates a new message that is an exact replica of the message
-+ * specified, except that its refcount is set to 1, its message serial
-+ * is reset to 0, and if the original message was "locked" (in the
-+ * outgoing message queue and thus not modifiable) the new message
-+ * will not be locked.
-+ *
-+ * @param message the message.
-+ * @returns the new message.
-+ */
-+DBusMessage *
-+dbus_message_copy (const DBusMessage *message)
-+{
-+ DBusMessage *retval;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ retval = dbus_new0 (DBusMessage, 1);
-+ if (retval == NULL)
-+ return NULL;
-+
-+ retval->refcount.value = 1;
-+ retval->byte_order = message->byte_order;
-+ retval->locked = FALSE;
-+#ifndef DBUS_DISABLE_CHECKS
-+ retval->generation = message->generation;
-+#endif
-+
-+ if (!_dbus_header_copy (&message->header, &retval->header))
-+ {
-+ dbus_free (retval);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_init_preallocated (&retval->body,
-+ _dbus_string_get_length (&message->body)))
-+ {
-+ _dbus_header_free (&retval->header);
-+ dbus_free (retval);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_copy (&message->body, 0,
-+ &retval->body, 0))
-+ goto failed_copy;
-+
-+ return retval;
-+
-+ failed_copy:
-+ _dbus_header_free (&retval->header);
-+ _dbus_string_free (&retval->body);
-+ dbus_free (retval);
-+
-+ return NULL;
-+}
-+
-+
-+/**
-+ * Increments the reference count of a DBusMessage.
-+ *
-+ * @param message The message
-+ * @returns the message
-+ * @see dbus_message_unref
-+ */
-+DBusMessage *
-+dbus_message_ref (DBusMessage *message)
-+{
-+ dbus_int32_t old_refcount;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+ _dbus_return_val_if_fail (message->generation == _dbus_current_generation, NULL);
-+ _dbus_return_val_if_fail (!message->in_cache, NULL);
-+
-+ old_refcount = _dbus_atomic_inc (&message->refcount);
-+ _dbus_assert (old_refcount >= 1);
-+
-+ return message;
-+}
-+
-+/**
-+ * Decrements the reference count of a DBusMessage.
-+ *
-+ * @param message The message
-+ * @see dbus_message_ref
-+ */
-+void
-+dbus_message_unref (DBusMessage *message)
-+{
-+ dbus_int32_t old_refcount;
-+
-+ _dbus_return_if_fail (message != NULL);
-+ _dbus_return_if_fail (message->generation == _dbus_current_generation);
-+ _dbus_return_if_fail (!message->in_cache);
-+
-+ old_refcount = _dbus_atomic_dec (&message->refcount);
-+
-+ _dbus_assert (old_refcount >= 0);
-+
-+ if (old_refcount == 1)
-+ {
-+ /* Calls application callbacks! */
-+ dbus_message_cache_or_finalize (message);
-+ }
-+}
-+
-+/**
-+ * Gets the type of a message. Types include
-+ * #DBUS_MESSAGE_TYPE_METHOD_CALL, #DBUS_MESSAGE_TYPE_METHOD_RETURN,
-+ * #DBUS_MESSAGE_TYPE_ERROR, #DBUS_MESSAGE_TYPE_SIGNAL, but other
-+ * types are allowed and all code must silently ignore messages of
-+ * unknown type. DBUS_MESSAGE_TYPE_INVALID will never be returned,
-+ * however.
-+ *
-+ *
-+ * @param message the message
-+ * @returns the type of the message
-+ */
-+int
-+dbus_message_get_type (DBusMessage *message)
-+{
-+ _dbus_return_val_if_fail (message != NULL, DBUS_MESSAGE_TYPE_INVALID);
-+
-+ return _dbus_header_get_message_type (&message->header);
-+}
-+
-+/**
-+ * Appends fields to a message given a variable argument list. The
-+ * variable argument list should contain the type of each argument
-+ * followed by the value to append. Appendable types are basic types,
-+ * and arrays of fixed-length basic types. To append variable-length
-+ * basic types, or any more complex value, you have to use an iterator
-+ * rather than this function.
-+ *
-+ * To append a basic type, specify its type code followed by the
-+ * address of the value. For example:
-+ *
-+ * @code
-+ *
-+ * dbus_int32_t v_INT32 = 42;
-+ * const char *v_STRING = "Hello World";
-+ * DBUS_TYPE_INT32, &v_INT32,
-+ * DBUS_TYPE_STRING, &v_STRING,
-+ * @endcode
-+ *
-+ * To append an array of fixed-length basic types, pass in the
-+ * DBUS_TYPE_ARRAY typecode, the element typecode, the address of
-+ * the array pointer, and a 32-bit integer giving the number of
-+ * elements in the array. So for example:
-+ * @code
-+ * const dbus_int32_t array[] = { 1, 2, 3 };
-+ * const dbus_int32_t *v_ARRAY = array;
-+ * DBUS_TYPE_ARRAY, DBUS_TYPE_INT32, &v_ARRAY, 3
-+ * @endcode
-+ *
-+ * @warning in C, given "int array[]", "&array == array" (the
-+ * comp.lang.c FAQ says otherwise, but gcc and the FAQ don't agree).
-+ * So if you're using an array instead of a pointer you have to create
-+ * a pointer variable, assign the array to it, then take the address
-+ * of the pointer variable. For strings it works to write
-+ * const char *array = "Hello" and then use &array though.
-+ *
-+ * The last argument to this function must be #DBUS_TYPE_INVALID,
-+ * marking the end of the argument list.
-+ *
-+ * String/signature/path arrays should be passed in as "const char***
-+ * address_of_array" and "int n_elements"
-+ *
-+ * @todo support DBUS_TYPE_STRUCT and DBUS_TYPE_VARIANT and complex arrays
-+ *
-+ * @todo If this fails due to lack of memory, the message is hosed and
-+ * you have to start over building the whole message.
-+ *
-+ * @param message the message
-+ * @param first_arg_type type of the first argument
-+ * @param ... value of first argument, list of additional type-value pairs
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+dbus_message_append_args (DBusMessage *message,
-+ int first_arg_type,
-+ ...)
-+{
-+ dbus_bool_t retval;
-+ va_list var_args;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+
-+ va_start (var_args, first_arg_type);
-+ retval = dbus_message_append_args_valist (message,
-+ first_arg_type,
-+ var_args);
-+ va_end (var_args);
-+
-+ return retval;
-+}
-+
-+/**
-+ * This function takes a va_list for use by language bindings.
-+ * It's otherwise the same as dbus_message_append_args().
-+ *
-+ * @todo for now, if this function fails due to OOM it will leave
-+ * the message half-written and you have to discard the message
-+ * and start over.
-+ *
-+ * @see dbus_message_append_args.
-+ * @param message the message
-+ * @param first_arg_type type of first argument
-+ * @param var_args value of first argument, then list of type/value pairs
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+dbus_message_append_args_valist (DBusMessage *message,
-+ int first_arg_type,
-+ va_list var_args)
-+{
-+ int type;
-+ DBusMessageIter iter;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+
-+ type = first_arg_type;
-+
-+ dbus_message_iter_init_append (message, &iter);
-+
-+ while (type != DBUS_TYPE_INVALID)
-+ {
-+ if (dbus_type_is_basic (type))
-+ {
-+ const DBusBasicValue *value;
-+ value = va_arg (var_args, const DBusBasicValue*);
-+
-+ if (!dbus_message_iter_append_basic (&iter,
-+ type,
-+ value))
-+ goto failed;
-+ }
-+ else if (type == DBUS_TYPE_ARRAY)
-+ {
-+ int element_type;
-+ DBusMessageIter array;
-+ char buf[2];
-+
-+ element_type = va_arg (var_args, int);
-+
-+ buf[0] = element_type;
-+ buf[1] = '\0';
-+ if (!dbus_message_iter_open_container (&iter,
-+ DBUS_TYPE_ARRAY,
-+ buf,
-+ &array))
-+ goto failed;
-+
-+ if (dbus_type_is_fixed (element_type))
-+ {
-+ const DBusBasicValue **value;
-+ int n_elements;
-+
-+ value = va_arg (var_args, const DBusBasicValue**);
-+ n_elements = va_arg (var_args, int);
-+
-+ if (!dbus_message_iter_append_fixed_array (&array,
-+ element_type,
-+ value,
-+ n_elements))
-+ goto failed;
-+ }
-+ else if (element_type == DBUS_TYPE_STRING ||
-+ element_type == DBUS_TYPE_SIGNATURE ||
-+ element_type == DBUS_TYPE_OBJECT_PATH)
-+ {
-+ const char ***value_p;
-+ const char **value;
-+ int n_elements;
-+ int i;
-+
-+ value_p = va_arg (var_args, const char***);
-+ n_elements = va_arg (var_args, int);
-+
-+ value = *value_p;
-+
-+ i = 0;
-+ while (i < n_elements)
-+ {
-+ if (!dbus_message_iter_append_basic (&array,
-+ element_type,
-+ &value[i]))
-+ goto failed;
-+ ++i;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_warn ("arrays of %s can't be appended with %s for now\n",
-+ _dbus_type_to_string (element_type),
-+ _DBUS_FUNCTION_NAME);
-+ goto failed;
-+ }
-+
-+ if (!dbus_message_iter_close_container (&iter, &array))
-+ goto failed;
-+ }
-+#ifndef DBUS_DISABLE_CHECKS
-+ else
-+ {
-+ _dbus_warn ("type %s isn't supported yet in %s\n",
-+ _dbus_type_to_string (type), _DBUS_FUNCTION_NAME);
-+ goto failed;
-+ }
-+#endif
-+
-+ type = va_arg (var_args, int);
-+ }
-+
-+ return TRUE;
-+
-+ failed:
-+ return FALSE;
-+}
-+
-+/**
-+ * Gets arguments from a message given a variable argument list. The
-+ * supported types include those supported by
-+ * dbus_message_append_args(); that is, basic types and arrays of
-+ * fixed-length basic types. The arguments are the same as they would
-+ * be for dbus_message_iter_get_basic() or
-+ * dbus_message_iter_get_fixed_array().
-+ *
-+ * In addition to those types, arrays of string, object path, and
-+ * signature are supported; but these are returned as allocated memory
-+ * and must be freed with dbus_free_string_array(), while the other
-+ * types are returned as const references. To get a string array
-+ * pass in "char ***array_location" and "int *n_elements"
-+ *
-+ * The variable argument list should contain the type of the argument
-+ * followed by a pointer to where the value should be stored. The list
-+ * is terminated with #DBUS_TYPE_INVALID.
-+ *
-+ * The returned values are constant; do not free them. They point
-+ * into the #DBusMessage.
-+ *
-+ * If the requested arguments are not present, or do not have the
-+ * requested types, then an error will be set.
-+ *
-+ * @todo support DBUS_TYPE_STRUCT and DBUS_TYPE_VARIANT and complex arrays
-+ *
-+ * @param message the message
-+ * @param error error to be filled in on failure
-+ * @param first_arg_type the first argument type
-+ * @param ... location for first argument value, then list of type-location pairs
-+ * @returns #FALSE if the error was set
-+ */
-+dbus_bool_t
-+dbus_message_get_args (DBusMessage *message,
-+ DBusError *error,
-+ int first_arg_type,
-+ ...)
-+{
-+ dbus_bool_t retval;
-+ va_list var_args;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_error_is_set (error, FALSE);
-+
-+ va_start (var_args, first_arg_type);
-+ retval = dbus_message_get_args_valist (message, error, first_arg_type, var_args);
-+ va_end (var_args);
-+
-+ return retval;
-+}
-+
-+/**
-+ * This function takes a va_list for use by language bindings. It is
-+ * otherwise the same as dbus_message_get_args().
-+ *
-+ * @see dbus_message_get_args
-+ * @param message the message
-+ * @param error error to be filled in
-+ * @param first_arg_type type of the first argument
-+ * @param var_args return location for first argument, followed by list of type/location pairs
-+ * @returns #FALSE if error was set
-+ */
-+dbus_bool_t
-+dbus_message_get_args_valist (DBusMessage *message,
-+ DBusError *error,
-+ int first_arg_type,
-+ va_list var_args)
-+{
-+ DBusMessageIter iter;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_error_is_set (error, FALSE);
-+
-+ dbus_message_iter_init (message, &iter);
-+ return _dbus_message_iter_get_args_valist (&iter, error, first_arg_type, var_args);
-+}
-+
-+static void
-+_dbus_message_iter_init_common (DBusMessage *message,
-+ DBusMessageRealIter *real,
-+ int iter_type)
-+{
-+ _dbus_assert (sizeof (DBusMessageRealIter) <= sizeof (DBusMessageIter));
-+
-+ /* Since the iterator will read or write who-knows-what from the
-+ * message, we need to get in the right byte order
-+ */
-+ ensure_byte_order (message);
-+
-+ real->message = message;
-+ real->changed_stamp = message->changed_stamp;
-+ real->iter_type = iter_type;
-+ real->sig_refcount = 0;
-+}
-+
-+/**
-+ * Initializes a #DBusMessageIter for reading the arguments of the
-+ * message passed in.
-+ *
-+ * @param message the message
-+ * @param iter pointer to an iterator to initialize
-+ * @returns #FALSE if the message has no arguments
-+ */
-+dbus_bool_t
-+dbus_message_iter_init (DBusMessage *message,
-+ DBusMessageIter *iter)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+ const DBusString *type_str;
-+ int type_pos;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (iter != NULL, FALSE);
-+
-+ get_const_signature (&message->header, &type_str, &type_pos);
-+
-+ _dbus_message_iter_init_common (message, real,
-+ DBUS_MESSAGE_ITER_TYPE_READER);
-+
-+ _dbus_type_reader_init (&real->u.reader,
-+ message->byte_order,
-+ type_str, type_pos,
-+ &message->body,
-+ 0);
-+
-+ return _dbus_type_reader_get_current_type (&real->u.reader) != DBUS_TYPE_INVALID;
-+}
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+static dbus_bool_t
-+_dbus_message_iter_check (DBusMessageRealIter *iter)
-+{
-+ if (iter == NULL)
-+ {
-+ _dbus_warn ("dbus message iterator is NULL\n");
-+ return FALSE;
-+ }
-+
-+ if (iter->iter_type == DBUS_MESSAGE_ITER_TYPE_READER)
-+ {
-+ if (iter->u.reader.byte_order != iter->message->byte_order)
-+ {
-+ _dbus_warn ("dbus message changed byte order since iterator was created\n");
-+ return FALSE;
-+ }
-+ /* because we swap the message into compiler order when you init an iter */
-+ _dbus_assert (iter->u.reader.byte_order == DBUS_COMPILER_BYTE_ORDER);
-+ }
-+ else if (iter->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER)
-+ {
-+ if (iter->u.writer.byte_order != iter->message->byte_order)
-+ {
-+ _dbus_warn ("dbus message changed byte order since append iterator was created\n");
-+ return FALSE;
-+ }
-+ /* because we swap the message into compiler order when you init an iter */
-+ _dbus_assert (iter->u.writer.byte_order == DBUS_COMPILER_BYTE_ORDER);
-+ }
-+ else
-+ {
-+ _dbus_warn ("dbus message iterator looks uninitialized or corrupted\n");
-+ return FALSE;
-+ }
-+
-+ if (iter->changed_stamp != iter->message->changed_stamp)
-+ {
-+ _dbus_warn ("dbus message iterator invalid because the message has been modified (or perhaps the iterator is just uninitialized)\n");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_DISABLE_CHECKS */
-+
-+/**
-+ * Checks if an iterator has any more fields.
-+ *
-+ * @param iter the message iter
-+ * @returns #TRUE if there are more fields
-+ * following
-+ */
-+dbus_bool_t
-+dbus_message_iter_has_next (DBusMessageIter *iter)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_check (real), FALSE);
-+ _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_READER, FALSE);
-+
-+ return _dbus_type_reader_has_next (&real->u.reader);
-+}
-+
-+/**
-+ * Moves the iterator to the next field, if any. If there's no next
-+ * field, returns #FALSE. If the iterator moves forward, returns
-+ * #TRUE.
-+ *
-+ * @param iter the message iter
-+ * @returns #TRUE if the iterator was moved to the next field
-+ */
-+dbus_bool_t
-+dbus_message_iter_next (DBusMessageIter *iter)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_check (real), FALSE);
-+ _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_READER, FALSE);
-+
-+ return _dbus_type_reader_next (&real->u.reader);
-+}
-+
-+/**
-+ * Returns the argument type of the argument that the message iterator
-+ * points to. If the iterator is at the end of the message, returns
-+ * #DBUS_TYPE_INVALID. You can thus write a loop as follows:
-+ *
-+ * @code
-+ * dbus_message_iter_init (&iter);
-+ * while ((current_type = dbus_message_iter_get_arg_type (&iter)) != DBUS_TYPE_INVALID)
-+ * dbus_message_iter_next (&iter);
-+ * @endcode
-+ *
-+ * @param iter the message iter
-+ * @returns the argument type
-+ */
-+int
-+dbus_message_iter_get_arg_type (DBusMessageIter *iter)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_check (real), DBUS_TYPE_INVALID);
-+ _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_READER, FALSE);
-+
-+ return _dbus_type_reader_get_current_type (&real->u.reader);
-+}
-+
-+/**
-+ * Returns the element type of the array that the message iterator
-+ * points to. Note that you need to check that the iterator points to
-+ * an array prior to using this function.
-+ *
-+ * @param iter the message iter
-+ * @returns the array element type
-+ */
-+int
-+dbus_message_iter_get_element_type (DBusMessageIter *iter)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_check (real), DBUS_TYPE_INVALID);
-+ _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_READER, DBUS_TYPE_INVALID);
-+ _dbus_return_val_if_fail (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_ARRAY, DBUS_TYPE_INVALID);
-+
-+ return _dbus_type_reader_get_element_type (&real->u.reader);
-+}
-+
-+/**
-+ * Recurses into a container value when reading values from a message,
-+ * initializing a sub-iterator to use for traversing the child values
-+ * of the container.
-+ *
-+ * Note that this recurses into a value, not a type, so you can only
-+ * recurse if the value exists. The main implication of this is that
-+ * if you have for example an empty array of array of int32, you can
-+ * recurse into the outermost array, but it will have no values, so
-+ * you won't be able to recurse further. There's no array of int32 to
-+ * recurse into.
-+ *
-+ * @param iter the message iterator
-+ * @param sub the sub-iterator to initialize
-+ */
-+void
-+dbus_message_iter_recurse (DBusMessageIter *iter,
-+ DBusMessageIter *sub)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+ DBusMessageRealIter *real_sub = (DBusMessageRealIter *)sub;
-+
-+ _dbus_return_if_fail (_dbus_message_iter_check (real));
-+ _dbus_return_if_fail (sub != NULL);
-+
-+ *real_sub = *real;
-+ _dbus_type_reader_recurse (&real->u.reader, &real_sub->u.reader);
-+}
-+
-+/**
-+ * Returns the current signature of a message iterator. This
-+ * is useful primarily for dealing with variants; one can
-+ * recurse into a variant and determine the signature of
-+ * the variant's value.
-+ *
-+ * @param iter the message iterator
-+ * @returns the contained signature, or NULL if out of memory
-+ */
-+char *
-+dbus_message_iter_get_signature (DBusMessageIter *iter)
-+{
-+ const DBusString *sig;
-+ DBusString retstr;
-+ char *ret;
-+ int start, len;
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_check (real), NULL);
-+
-+ if (!_dbus_string_init (&retstr))
-+ return NULL;
-+
-+ _dbus_type_reader_get_signature (&real->u.reader, &sig,
-+ &start, &len);
-+ if (!_dbus_string_append_len (&retstr,
-+ _dbus_string_get_const_data (sig) + start,
-+ len))
-+ return NULL;
-+ if (!_dbus_string_steal_data (&retstr, &ret))
-+ return NULL;
-+ _dbus_string_free (&retstr);
-+ return ret;
-+}
-+
-+/**
-+ * Reads a basic-typed value from the message iterator.
-+ * Basic types are the non-containers such as integer and string.
-+ *
-+ * The value argument should be the address of a location to store
-+ * the returned value. So for int32 it should be a "dbus_int32_t*"
-+ * and for string a "const char**". The returned value is
-+ * by reference and should not be freed.
-+ *
-+ * All returned values are guaranteed to fit in 8 bytes. So you can
-+ * write code like this:
-+ *
-+ * @code
-+ * #ifdef DBUS_HAVE_INT64
-+ * dbus_uint64_t value;
-+ * int type;
-+ * dbus_message_iter_get_basic (&read_iter, &value);
-+ * type = dbus_message_iter_get_arg_type (&read_iter);
-+ * dbus_message_iter_append_basic (&write_iter, type, &value);
-+ * #endif
-+ * @endcode
-+ *
-+ * To avoid the #DBUS_HAVE_INT64 conditional, create a struct or
-+ * something that occupies at least 8 bytes, e.g. you could use a
-+ * struct with two int32 values in it. dbus_uint64_t is just one
-+ * example of a type that's large enough to hold any possible value.
-+ *
-+ * Be sure you have somehow checked that
-+ * dbus_message_iter_get_arg_type() matches the type you are
-+ * expecting, or you'll crash when you try to use an integer as a
-+ * string or something.
-+ *
-+ * @param iter the iterator
-+ * @param value location to store the value
-+ */
-+void
-+dbus_message_iter_get_basic (DBusMessageIter *iter,
-+ void *value)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+
-+ _dbus_return_if_fail (_dbus_message_iter_check (real));
-+ _dbus_return_if_fail (value != NULL);
-+
-+ _dbus_type_reader_read_basic (&real->u.reader,
-+ value);
-+}
-+
-+/**
-+ * Returns the number of elements in the array;
-+ *
-+ * @param iter the iterator
-+ * @returns the number of elements in the array
-+ */
-+int
-+dbus_message_iter_get_array_len (DBusMessageIter *iter)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_check (real), 0);
-+
-+ return _dbus_type_reader_get_array_length (&real->u.reader);
-+}
-+
-+/**
-+ * Reads a block of fixed-length values from the message iterator.
-+ * Fixed-length values are those basic types that are not string-like,
-+ * such as integers, bool, double. The block read will be from the
-+ * current position in the array until the end of the array.
-+ *
-+ * This function should only be used if #dbus_type_is_fixed returns
-+ * #TRUE for the element type.
-+ *
-+ * The value argument should be the address of a location to store the
-+ * returned array. So for int32 it should be a "const dbus_int32_t**"
-+ * The returned value is by reference and should not be freed.
-+ *
-+ * @param iter the iterator
-+ * @param value location to store the block
-+ * @param n_elements number of elements in the block
-+ */
-+void
-+dbus_message_iter_get_fixed_array (DBusMessageIter *iter,
-+ void *value,
-+ int *n_elements)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+ int subtype = _dbus_type_reader_get_current_type(&real->u.reader);
-+
-+ _dbus_return_if_fail (_dbus_message_iter_check (real));
-+ _dbus_return_if_fail (value != NULL);
-+ _dbus_return_if_fail ((subtype == DBUS_TYPE_INVALID) ||
-+ dbus_type_is_fixed (subtype));
-+
-+ _dbus_type_reader_read_fixed_multi (&real->u.reader,
-+ value, n_elements);
-+}
-+
-+/**
-+ * This function takes a va_list for use by language bindings and is
-+ * otherwise the same as dbus_message_iter_get_args().
-+ * dbus_message_get_args() is the place to go for complete
-+ * documentation.
-+ *
-+ * @see dbus_message_get_args
-+ * @param iter the message iter
-+ * @param error error to be filled in
-+ * @param first_arg_type type of the first argument
-+ * @param var_args return location for first argument, followed by list of type/location pairs
-+ * @returns #FALSE if error was set
-+ */
-+dbus_bool_t
-+_dbus_message_iter_get_args_valist (DBusMessageIter *iter,
-+ DBusError *error,
-+ int first_arg_type,
-+ va_list var_args)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+ int spec_type, msg_type, i;
-+ dbus_bool_t retval;
-+
-+ _dbus_assert (_dbus_message_iter_check (real));
-+
-+ retval = FALSE;
-+
-+ spec_type = first_arg_type;
-+ i = 0;
-+
-+ while (spec_type != DBUS_TYPE_INVALID)
-+ {
-+ msg_type = dbus_message_iter_get_arg_type (iter);
-+
-+ if (msg_type != spec_type)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
-+ "Argument %d is specified to be of type \"%s\", but "
-+ "is actually of type \"%s\"\n", i,
-+ _dbus_type_to_string (spec_type),
-+ _dbus_type_to_string (msg_type));
-+
-+ goto out;
-+ }
-+
-+ if (dbus_type_is_basic (spec_type))
-+ {
-+ DBusBasicValue *ptr;
-+
-+ ptr = va_arg (var_args, DBusBasicValue*);
-+
-+ _dbus_assert (ptr != NULL);
-+
-+ _dbus_type_reader_read_basic (&real->u.reader,
-+ ptr);
-+ }
-+ else if (spec_type == DBUS_TYPE_ARRAY)
-+ {
-+ int element_type;
-+ int spec_element_type;
-+ const DBusBasicValue **ptr;
-+ int *n_elements_p;
-+ DBusTypeReader array;
-+
-+ spec_element_type = va_arg (var_args, int);
-+ element_type = _dbus_type_reader_get_element_type (&real->u.reader);
-+
-+ if (spec_element_type != element_type)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
-+ "Argument %d is specified to be an array of \"%s\", but "
-+ "is actually an array of \"%s\"\n",
-+ i,
-+ _dbus_type_to_string (spec_element_type),
-+ _dbus_type_to_string (element_type));
-+
-+ goto out;
-+ }
-+
-+ if (dbus_type_is_fixed (spec_element_type))
-+ {
-+ ptr = va_arg (var_args, const DBusBasicValue**);
-+ n_elements_p = va_arg (var_args, int*);
-+
-+ _dbus_assert (ptr != NULL);
-+ _dbus_assert (n_elements_p != NULL);
-+
-+ _dbus_type_reader_recurse (&real->u.reader, &array);
-+
-+ _dbus_type_reader_read_fixed_multi (&array,
-+ ptr, n_elements_p);
-+ }
-+ else if (spec_element_type == DBUS_TYPE_STRING ||
-+ spec_element_type == DBUS_TYPE_SIGNATURE ||
-+ spec_element_type == DBUS_TYPE_OBJECT_PATH)
-+ {
-+ char ***str_array_p;
-+ int n_elements;
-+ char **str_array;
-+
-+ str_array_p = va_arg (var_args, char***);
-+ n_elements_p = va_arg (var_args, int*);
-+
-+ _dbus_assert (str_array_p != NULL);
-+ _dbus_assert (n_elements_p != NULL);
-+
-+ /* Count elements in the array */
-+ _dbus_type_reader_recurse (&real->u.reader, &array);
-+
-+ n_elements = 0;
-+ while (_dbus_type_reader_get_current_type (&array) != DBUS_TYPE_INVALID)
-+ {
-+ ++n_elements;
-+ _dbus_type_reader_next (&array);
-+ }
-+
-+ str_array = dbus_new0 (char*, n_elements + 1);
-+ if (str_array == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ /* Now go through and dup each string */
-+ _dbus_type_reader_recurse (&real->u.reader, &array);
-+
-+ i = 0;
-+ while (i < n_elements)
-+ {
-+ const char *s;
-+ _dbus_type_reader_read_basic (&array,
-+ &s);
-+
-+ str_array[i] = _dbus_strdup (s);
-+ if (str_array[i] == NULL)
-+ {
-+ dbus_free_string_array (str_array);
-+ _DBUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ ++i;
-+
-+ if (!_dbus_type_reader_next (&array))
-+ _dbus_assert (i == n_elements);
-+ }
-+
-+ _dbus_assert (_dbus_type_reader_get_current_type (&array) == DBUS_TYPE_INVALID);
-+ _dbus_assert (i == n_elements);
-+ _dbus_assert (str_array[i] == NULL);
-+
-+ *str_array_p = str_array;
-+ *n_elements_p = n_elements;
-+ }
-+#ifndef DBUS_DISABLE_CHECKS
-+ else
-+ {
-+ _dbus_warn ("you can't read arrays of container types (struct, variant, array) with %s for now\n",
-+ _DBUS_FUNCTION_NAME);
-+ goto out;
-+ }
-+#endif
-+ }
-+#ifndef DBUS_DISABLE_CHECKS
-+ else
-+ {
-+ _dbus_warn ("you can only read arrays and basic types with %s for now\n",
-+ _DBUS_FUNCTION_NAME);
-+ goto out;
-+ }
-+#endif
-+
-+ spec_type = va_arg (var_args, int);
-+ if (!_dbus_type_reader_next (&real->u.reader) && spec_type != DBUS_TYPE_INVALID)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_INVALID_ARGS,
-+ "Message has only %d arguments, but more were expected", i);
-+ goto out;
-+ }
-+
-+ i++;
-+ }
-+
-+ retval = TRUE;
-+
-+ out:
-+
-+ return retval;
-+}
-+
-+/**
-+ * Initializes a #DBusMessageIter for appending arguments to the end
-+ * of a message.
-+ *
-+ * @todo If appending any of the arguments fails due to lack of
-+ * memory, generally the message is hosed and you have to start over
-+ * building the whole message.
-+ *
-+ * @param message the message
-+ * @param iter pointer to an iterator to initialize
-+ */
-+void
-+dbus_message_iter_init_append (DBusMessage *message,
-+ DBusMessageIter *iter)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+
-+ _dbus_return_if_fail (message != NULL);
-+ _dbus_return_if_fail (iter != NULL);
-+
-+ _dbus_message_iter_init_common (message, real,
-+ DBUS_MESSAGE_ITER_TYPE_WRITER);
-+
-+ /* We create the signature string and point iterators at it "on demand"
-+ * when a value is actually appended. That means that init() never fails
-+ * due to OOM.
-+ */
-+ _dbus_type_writer_init_types_delayed (&real->u.writer,
-+ message->byte_order,
-+ &message->body,
-+ _dbus_string_get_length (&message->body));
-+}
-+
-+/**
-+ * Creates a temporary signature string containing the current
-+ * signature, stores it in the iterator, and points the iterator to
-+ * the end of it. Used any time we write to the message.
-+ *
-+ * @param real an iterator without a type_str
-+ * @returns #FALSE if no memory
-+ */
-+static dbus_bool_t
-+_dbus_message_iter_open_signature (DBusMessageRealIter *real)
-+{
-+ DBusString *str;
-+ const DBusString *current_sig;
-+ int current_sig_pos;
-+
-+ _dbus_assert (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER);
-+
-+ if (real->u.writer.type_str != NULL)
-+ {
-+ _dbus_assert (real->sig_refcount > 0);
-+ real->sig_refcount += 1;
-+ return TRUE;
-+ }
-+
-+ str = dbus_new (DBusString, 1);
-+ if (str == NULL)
-+ return FALSE;
-+
-+ if (!_dbus_header_get_field_raw (&real->message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ ¤t_sig, ¤t_sig_pos))
-+ current_sig = NULL;
-+
-+ if (current_sig)
-+ {
-+ int current_len;
-+
-+ current_len = _dbus_string_get_byte (current_sig, current_sig_pos);
-+ current_sig_pos += 1; /* move on to sig data */
-+
-+ if (!_dbus_string_init_preallocated (str, current_len + 4))
-+ {
-+ dbus_free (str);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_copy_len (current_sig, current_sig_pos, current_len,
-+ str, 0))
-+ {
-+ _dbus_string_free (str);
-+ dbus_free (str);
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ if (!_dbus_string_init_preallocated (str, 4))
-+ {
-+ dbus_free (str);
-+ return FALSE;
-+ }
-+ }
-+
-+ real->sig_refcount = 1;
-+
-+ _dbus_type_writer_add_types (&real->u.writer,
-+ str, _dbus_string_get_length (str));
-+ return TRUE;
-+}
-+
-+/**
-+ * Sets the new signature as the message signature, frees the
-+ * signature string, and marks the iterator as not having a type_str
-+ * anymore. Frees the signature even if it fails, so you can't
-+ * really recover from failure. Kinda busted.
-+ *
-+ * @param real an iterator without a type_str
-+ * @returns #FALSE if no memory
-+ */
-+static dbus_bool_t
-+_dbus_message_iter_close_signature (DBusMessageRealIter *real)
-+{
-+ DBusString *str;
-+ const char *v_STRING;
-+ dbus_bool_t retval;
-+
-+ _dbus_assert (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER);
-+ _dbus_assert (real->u.writer.type_str != NULL);
-+ _dbus_assert (real->sig_refcount > 0);
-+
-+ real->sig_refcount -= 1;
-+
-+ if (real->sig_refcount > 0)
-+ return TRUE;
-+ _dbus_assert (real->sig_refcount == 0);
-+
-+ retval = TRUE;
-+
-+ str = real->u.writer.type_str;
-+
-+ v_STRING = _dbus_string_get_const_data (str);
-+ if (!_dbus_header_set_field_basic (&real->message->header,
-+ DBUS_HEADER_FIELD_SIGNATURE,
-+ DBUS_TYPE_SIGNATURE,
-+ &v_STRING))
-+ retval = FALSE;
-+
-+ _dbus_type_writer_remove_types (&real->u.writer);
-+ _dbus_string_free (str);
-+ dbus_free (str);
-+
-+ return retval;
-+}
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+static dbus_bool_t
-+_dbus_message_iter_append_check (DBusMessageRealIter *iter)
-+{
-+ if (!_dbus_message_iter_check (iter))
-+ return FALSE;
-+
-+ if (iter->message->locked)
-+ {
-+ _dbus_warn ("dbus append iterator can't be used: message is locked (has already been sent)\n");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_DISABLE_CHECKS */
-+
-+/**
-+ * Appends a basic-typed value to the message. The basic types are the
-+ * non-container types such as integer and string.
-+ *
-+ * The "value" argument should be the address of a basic-typed value.
-+ * So for string, const char**. For integer, dbus_int32_t*.
-+ *
-+ * @todo If this fails due to lack of memory, the message is hosed and
-+ * you have to start over building the whole message.
-+ *
-+ * @param iter the append iterator
-+ * @param type the type of the value
-+ * @param value the address of the value
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_iter_append_basic (DBusMessageIter *iter,
-+ int type,
-+ const void *value)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+ dbus_bool_t ret;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_append_check (real), FALSE);
-+ _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, FALSE);
-+ _dbus_return_val_if_fail (dbus_type_is_basic (type), FALSE);
-+ _dbus_return_val_if_fail (value != NULL, FALSE);
-+
-+ if (!_dbus_message_iter_open_signature (real))
-+ return FALSE;
-+
-+ ret = _dbus_type_writer_write_basic (&real->u.writer, type, value);
-+
-+ if (!_dbus_message_iter_close_signature (real))
-+ ret = FALSE;
-+
-+ return ret;
-+}
-+
-+/**
-+ * Appends a block of fixed-length values to an array. The
-+ * fixed-length types are all basic types that are not string-like. So
-+ * int32, double, bool, etc. You must call
-+ * dbus_message_iter_open_container() to open an array of values
-+ * before calling this function. You may call this function multiple
-+ * times (and intermixed with calls to
-+ * dbus_message_iter_append_basic()) for the same array.
-+ *
-+ * The "value" argument should be the address of the array. So for
-+ * integer, "dbus_int32_t**" is expected for example.
-+ *
-+ * @warning in C, given "int array[]", "&array == array" (the
-+ * comp.lang.c FAQ says otherwise, but gcc and the FAQ don't agree).
-+ * So if you're using an array instead of a pointer you have to create
-+ * a pointer variable, assign the array to it, then take the address
-+ * of the pointer variable.
-+ * @code
-+ * const dbus_int32_t array[] = { 1, 2, 3 };
-+ * const dbus_int32_t *v_ARRAY = array;
-+ * if (!dbus_message_iter_append_fixed_array (&iter, DBUS_TYPE_INT32, &v_ARRAY, 3))
-+ * fprintf (stderr, "No memory!\n");
-+ * @endcode
-+ * For strings it works to write const char *array = "Hello" and then
-+ * use &array though.
-+ *
-+ * @todo If this fails due to lack of memory, the message is hosed and
-+ * you have to start over building the whole message.
-+ *
-+ * @param iter the append iterator
-+ * @param element_type the type of the array elements
-+ * @param value the address of the array
-+ * @param n_elements the number of elements to append
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_iter_append_fixed_array (DBusMessageIter *iter,
-+ int element_type,
-+ const void *value,
-+ int n_elements)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+ dbus_bool_t ret;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_append_check (real), FALSE);
-+ _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, FALSE);
-+ _dbus_return_val_if_fail (dbus_type_is_fixed (element_type), FALSE);
-+ _dbus_return_val_if_fail (real->u.writer.container_type == DBUS_TYPE_ARRAY, FALSE);
-+ _dbus_return_val_if_fail (value != NULL, FALSE);
-+ _dbus_return_val_if_fail (n_elements >= 0, FALSE);
-+ _dbus_return_val_if_fail (n_elements <=
-+ DBUS_MAXIMUM_ARRAY_LENGTH / _dbus_type_get_alignment (element_type),
-+ FALSE);
-+
-+ ret = _dbus_type_writer_write_fixed_multi (&real->u.writer, element_type, value, n_elements);
-+
-+ return ret;
-+}
-+
-+/**
-+ * Appends a container-typed value to the message; you are required to
-+ * append the contents of the container using the returned
-+ * sub-iterator, and then call
-+ * dbus_message_iter_close_container(). Container types are for
-+ * example struct, variant, and array. For variants, the
-+ * contained_signature should be the type of the single value inside
-+ * the variant. For structs and dict entries, contained_signature
-+ * should be #NULL; it will be set to whatever types you write into
-+ * the struct. For arrays, contained_signature should be the type of
-+ * the array elements.
-+ *
-+ * @todo If this fails due to lack of memory, the message is hosed and
-+ * you have to start over building the whole message.
-+ *
-+ * @param iter the append iterator
-+ * @param type the type of the value
-+ * @param contained_signature the type of container contents
-+ * @param sub sub-iterator to initialize
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_iter_open_container (DBusMessageIter *iter,
-+ int type,
-+ const char *contained_signature,
-+ DBusMessageIter *sub)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+ DBusMessageRealIter *real_sub = (DBusMessageRealIter *)sub;
-+ DBusString contained_str;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_append_check (real), FALSE);
-+ _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, FALSE);
-+ _dbus_return_val_if_fail (dbus_type_is_container (type), FALSE);
-+ _dbus_return_val_if_fail (sub != NULL, FALSE);
-+ _dbus_return_val_if_fail ((type == DBUS_TYPE_STRUCT &&
-+ contained_signature == NULL) ||
-+ (type == DBUS_TYPE_DICT_ENTRY &&
-+ contained_signature == NULL) ||
-+ contained_signature != NULL, FALSE);
-+
-+#if 0
-+ /* FIXME this would fail if the contained_signature is a dict entry,
-+ * since dict entries are invalid signatures standalone (they must be in
-+ * an array)
-+ */
-+ _dbus_return_val_if_fail (contained_signature == NULL ||
-+ _dbus_check_is_valid_signature (contained_signature));
-+#endif
-+
-+ if (!_dbus_message_iter_open_signature (real))
-+ return FALSE;
-+
-+ *real_sub = *real;
-+
-+ if (contained_signature != NULL)
-+ {
-+ _dbus_string_init_const (&contained_str, contained_signature);
-+
-+ return _dbus_type_writer_recurse (&real->u.writer,
-+ type,
-+ &contained_str, 0,
-+ &real_sub->u.writer);
-+ }
-+ else
-+ {
-+ return _dbus_type_writer_recurse (&real->u.writer,
-+ type,
-+ NULL, 0,
-+ &real_sub->u.writer);
-+ }
-+}
-+
-+
-+/**
-+ * Closes a container-typed value appended to the message; may write
-+ * out more information to the message known only after the entire
-+ * container is written, and may free resources created by
-+ * dbus_message_iter_open_container().
-+ *
-+ * @todo If this fails due to lack of memory, the message is hosed and
-+ * you have to start over building the whole message.
-+ *
-+ * @param iter the append iterator
-+ * @param sub sub-iterator to close
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_iter_close_container (DBusMessageIter *iter,
-+ DBusMessageIter *sub)
-+{
-+ DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
-+ DBusMessageRealIter *real_sub = (DBusMessageRealIter *)sub;
-+ dbus_bool_t ret;
-+
-+ _dbus_return_val_if_fail (_dbus_message_iter_append_check (real), FALSE);
-+ _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, FALSE);
-+ _dbus_return_val_if_fail (_dbus_message_iter_append_check (real_sub), FALSE);
-+ _dbus_return_val_if_fail (real_sub->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, FALSE);
-+
-+ ret = _dbus_type_writer_unrecurse (&real->u.writer,
-+ &real_sub->u.writer);
-+
-+ if (!_dbus_message_iter_close_signature (real))
-+ ret = FALSE;
-+
-+ return ret;
-+}
-+
-+/**
-+ * Sets a flag indicating that the message does not want a reply; if
-+ * this flag is set, the other end of the connection may (but is not
-+ * required to) optimize by not sending method return or error
-+ * replies. If this flag is set, there is no way to know whether the
-+ * message successfully arrived at the remote end. Normally you know a
-+ * message was received when you receive the reply to it.
-+ *
-+ * @param message the message
-+ * @param no_reply #TRUE if no reply is desired
-+ */
-+void
-+dbus_message_set_no_reply (DBusMessage *message,
-+ dbus_bool_t no_reply)
-+{
-+ _dbus_return_if_fail (message != NULL);
-+ _dbus_return_if_fail (!message->locked);
-+
-+ _dbus_header_toggle_flag (&message->header,
-+ DBUS_HEADER_FLAG_NO_REPLY_EXPECTED,
-+ no_reply);
-+}
-+
-+/**
-+ * Returns #TRUE if the message does not expect
-+ * a reply.
-+ *
-+ * @param message the message
-+ * @returns #TRUE if the message sender isn't waiting for a reply
-+ */
-+dbus_bool_t
-+dbus_message_get_no_reply (DBusMessage *message)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+
-+ return _dbus_header_get_flag (&message->header,
-+ DBUS_HEADER_FLAG_NO_REPLY_EXPECTED);
-+}
-+
-+/**
-+ * Sets a flag indicating that an owner for the destination name will
-+ * be automatically started before the message is delivered. When this
-+ * flag is set, the message is held until a name owner finishes
-+ * starting up, or fails to start up. In case of failure, the reply
-+ * will be an error.
-+ *
-+ * @param message the message
-+ * @param auto_start #TRUE if auto-starting is desired
-+ */
-+void
-+dbus_message_set_auto_start (DBusMessage *message,
-+ dbus_bool_t auto_start)
-+{
-+ _dbus_return_if_fail (message != NULL);
-+ _dbus_return_if_fail (!message->locked);
-+
-+ _dbus_header_toggle_flag (&message->header,
-+ DBUS_HEADER_FLAG_NO_AUTO_START,
-+ !auto_start);
-+}
-+
-+/**
-+ * Returns #TRUE if the message will cause an owner for
-+ * destination name to be auto-started.
-+ *
-+ * @param message the message
-+ * @returns #TRUE if the message will use auto-start
-+ */
-+dbus_bool_t
-+dbus_message_get_auto_start (DBusMessage *message)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+
-+ return !_dbus_header_get_flag (&message->header,
-+ DBUS_HEADER_FLAG_NO_AUTO_START);
-+}
-+
-+
-+/**
-+ * Sets the object path this message is being sent to (for
-+ * DBUS_MESSAGE_TYPE_METHOD_CALL) or the one a signal is being
-+ * emitted from (for DBUS_MESSAGE_TYPE_SIGNAL).
-+ *
-+ * @param message the message
-+ * @param object_path the path or #NULL to unset
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_set_path (DBusMessage *message,
-+ const char *object_path)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (!message->locked, FALSE);
-+ _dbus_return_val_if_fail (object_path == NULL ||
-+ _dbus_check_is_valid_path (object_path),
-+ FALSE);
-+
-+ return set_or_delete_string_field (message,
-+ DBUS_HEADER_FIELD_PATH,
-+ DBUS_TYPE_OBJECT_PATH,
-+ object_path);
-+}
-+
-+/**
-+ * Gets the object path this message is being sent to (for
-+ * DBUS_MESSAGE_TYPE_METHOD_CALL) or being emitted from (for
-+ * DBUS_MESSAGE_TYPE_SIGNAL). Returns #NULL if none.
-+ *
-+ * @param message the message
-+ * @returns the path (should not be freed) or #NULL
-+ */
-+const char*
-+dbus_message_get_path (DBusMessage *message)
-+{
-+ const char *v;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ v = NULL; /* in case field doesn't exist */
-+ _dbus_header_get_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_PATH,
-+ DBUS_TYPE_OBJECT_PATH,
-+ &v);
-+ return v;
-+}
-+
-+/**
-+ * Checks if the message has a path
-+ *
-+ * @param message the message
-+ * @param path the path name
-+ * @returns #TRUE if there is a path field in the header
-+ */
-+dbus_bool_t
-+dbus_message_has_path (DBusMessage *message,
-+ const char *path)
-+{
-+ const char *msg_path;
-+ msg_path = dbus_message_get_path (message);
-+
-+ if (msg_path == NULL)
-+ {
-+ if (path == NULL)
-+ return TRUE;
-+ else
-+ return FALSE;
-+ }
-+
-+ if (path == NULL)
-+ return FALSE;
-+
-+ if (strcmp (msg_path, path) == 0)
-+ return TRUE;
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Gets the object path this message is being sent to
-+ * (for DBUS_MESSAGE_TYPE_METHOD_CALL) or being emitted
-+ * from (for DBUS_MESSAGE_TYPE_SIGNAL) in a decomposed
-+ * format (one array element per path component).
-+ * Free the returned array with dbus_free_string_array().
-+ *
-+ * An empty but non-NULL path array means the path "/".
-+ * So the path "/foo/bar" becomes { "foo", "bar", NULL }
-+ * and the path "/" becomes { NULL }.
-+ *
-+ * @todo this could be optimized by using the len from the message
-+ * instead of calling strlen() again
-+ *
-+ * @param message the message
-+ * @param path place to store allocated array of path components; #NULL set here if no path field exists
-+ * @returns #FALSE if no memory to allocate the array
-+ */
-+dbus_bool_t
-+dbus_message_get_path_decomposed (DBusMessage *message,
-+ char ***path)
-+{
-+ const char *v;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (path != NULL, FALSE);
-+
-+ *path = NULL;
-+
-+ v = dbus_message_get_path (message);
-+ if (v != NULL)
-+ {
-+ if (!_dbus_decompose_path (v, strlen (v),
-+ path, NULL))
-+ return FALSE;
-+ }
-+ return TRUE;
-+}
-+
-+/**
-+ * Sets the interface this message is being sent to
-+ * (for DBUS_MESSAGE_TYPE_METHOD_CALL) or
-+ * the interface a signal is being emitted from
-+ * (for DBUS_MESSAGE_TYPE_SIGNAL).
-+ *
-+ * @param message the message
-+ * @param interface the interface or #NULL to unset
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_set_interface (DBusMessage *message,
-+ const char *interface)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (!message->locked, FALSE);
-+ _dbus_return_val_if_fail (interface == NULL ||
-+ _dbus_check_is_valid_interface (interface),
-+ FALSE);
-+
-+ return set_or_delete_string_field (message,
-+ DBUS_HEADER_FIELD_INTERFACE,
-+ DBUS_TYPE_STRING,
-+ interface);
-+}
-+
-+/**
-+ * Gets the interface this message is being sent to
-+ * (for DBUS_MESSAGE_TYPE_METHOD_CALL) or being emitted
-+ * from (for DBUS_MESSAGE_TYPE_SIGNAL).
-+ * The interface name is fully-qualified (namespaced).
-+ * Returns #NULL if none.
-+ *
-+ * @param message the message
-+ * @returns the message interface (should not be freed) or #NULL
-+ */
-+const char*
-+dbus_message_get_interface (DBusMessage *message)
-+{
-+ const char *v;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ v = NULL; /* in case field doesn't exist */
-+ _dbus_header_get_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_INTERFACE,
-+ DBUS_TYPE_STRING,
-+ &v);
-+ return v;
-+}
-+
-+/**
-+ * Checks if the message has an interface
-+ *
-+ * @param message the message
-+ * @param interface the interface name
-+ * @returns #TRUE if there is a interface field in the header
-+ */
-+dbus_bool_t
-+dbus_message_has_interface (DBusMessage *message,
-+ const char *interface)
-+{
-+ const char *msg_interface;
-+ msg_interface = dbus_message_get_interface (message);
-+
-+ if (msg_interface == NULL)
-+ {
-+ if (interface == NULL)
-+ return TRUE;
-+ else
-+ return FALSE;
-+ }
-+
-+ if (interface == NULL)
-+ return FALSE;
-+
-+ if (strcmp (msg_interface, interface) == 0)
-+ return TRUE;
-+
-+ return FALSE;
-+
-+}
-+
-+/**
-+ * Sets the interface member being invoked
-+ * (DBUS_MESSAGE_TYPE_METHOD_CALL) or emitted
-+ * (DBUS_MESSAGE_TYPE_SIGNAL).
-+ * The interface name is fully-qualified (namespaced).
-+ *
-+ * @param message the message
-+ * @param member the member or #NULL to unset
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_set_member (DBusMessage *message,
-+ const char *member)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (!message->locked, FALSE);
-+ _dbus_return_val_if_fail (member == NULL ||
-+ _dbus_check_is_valid_member (member),
-+ FALSE);
-+
-+ return set_or_delete_string_field (message,
-+ DBUS_HEADER_FIELD_MEMBER,
-+ DBUS_TYPE_STRING,
-+ member);
-+}
-+
-+/**
-+ * Gets the interface member being invoked
-+ * (DBUS_MESSAGE_TYPE_METHOD_CALL) or emitted
-+ * (DBUS_MESSAGE_TYPE_SIGNAL). Returns #NULL if none.
-+ *
-+ * @param message the message
-+ * @returns the member name (should not be freed) or #NULL
-+ */
-+const char*
-+dbus_message_get_member (DBusMessage *message)
-+{
-+ const char *v;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ v = NULL; /* in case field doesn't exist */
-+ _dbus_header_get_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_MEMBER,
-+ DBUS_TYPE_STRING,
-+ &v);
-+ return v;
-+}
-+
-+/**
-+ * Checks if the message has an interface member
-+ *
-+ * @param message the message
-+ * @param member the member name
-+ * @returns #TRUE if there is a member field in the header
-+ */
-+dbus_bool_t
-+dbus_message_has_member (DBusMessage *message,
-+ const char *member)
-+{
-+ const char *msg_member;
-+ msg_member = dbus_message_get_member (message);
-+
-+ if (msg_member == NULL)
-+ {
-+ if (member == NULL)
-+ return TRUE;
-+ else
-+ return FALSE;
-+ }
-+
-+ if (member == NULL)
-+ return FALSE;
-+
-+ if (strcmp (msg_member, member) == 0)
-+ return TRUE;
-+
-+ return FALSE;
-+
-+}
-+
-+/**
-+ * Sets the name of the error (DBUS_MESSAGE_TYPE_ERROR).
-+ * The name is fully-qualified (namespaced).
-+ *
-+ * @param message the message
-+ * @param error_name the name or #NULL to unset
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_set_error_name (DBusMessage *message,
-+ const char *error_name)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (!message->locked, FALSE);
-+ _dbus_return_val_if_fail (error_name == NULL ||
-+ _dbus_check_is_valid_error_name (error_name),
-+ FALSE);
-+
-+ return set_or_delete_string_field (message,
-+ DBUS_HEADER_FIELD_ERROR_NAME,
-+ DBUS_TYPE_STRING,
-+ error_name);
-+}
-+
-+/**
-+ * Gets the error name (DBUS_MESSAGE_TYPE_ERROR only)
-+ * or #NULL if none.
-+ *
-+ * @param message the message
-+ * @returns the error name (should not be freed) or #NULL
-+ */
-+const char*
-+dbus_message_get_error_name (DBusMessage *message)
-+{
-+ const char *v;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ v = NULL; /* in case field doesn't exist */
-+ _dbus_header_get_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_ERROR_NAME,
-+ DBUS_TYPE_STRING,
-+ &v);
-+ return v;
-+}
-+
-+/**
-+ * Sets the message's destination. The destination is the name of
-+ * another connection on the bus and may be either the unique name
-+ * assigned by the bus to each connection, or a well-known name
-+ * specified in advance.
-+ *
-+ * @param message the message
-+ * @param destination the destination name or #NULL to unset
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_set_destination (DBusMessage *message,
-+ const char *destination)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (!message->locked, FALSE);
-+ _dbus_return_val_if_fail (destination == NULL ||
-+ _dbus_check_is_valid_bus_name (destination),
-+ FALSE);
-+
-+ return set_or_delete_string_field (message,
-+ DBUS_HEADER_FIELD_DESTINATION,
-+ DBUS_TYPE_STRING,
-+ destination);
-+}
-+
-+/**
-+ * Gets the destination of a message or #NULL if there is none set.
-+ *
-+ * @param message the message
-+ * @returns the message destination (should not be freed) or #NULL
-+ */
-+const char*
-+dbus_message_get_destination (DBusMessage *message)
-+{
-+ const char *v;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ v = NULL; /* in case field doesn't exist */
-+ _dbus_header_get_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_DESTINATION,
-+ DBUS_TYPE_STRING,
-+ &v);
-+ return v;
-+}
-+
-+/**
-+ * Sets the message sender.
-+ *
-+ * @param message the message
-+ * @param sender the sender or #NULL to unset
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_message_set_sender (DBusMessage *message,
-+ const char *sender)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (!message->locked, FALSE);
-+ _dbus_return_val_if_fail (sender == NULL ||
-+ _dbus_check_is_valid_bus_name (sender),
-+ FALSE);
-+
-+ return set_or_delete_string_field (message,
-+ DBUS_HEADER_FIELD_SENDER,
-+ DBUS_TYPE_STRING,
-+ sender);
-+}
-+
-+/**
-+ * Gets the unique name of the connection which originated this
-+ * message, or #NULL if unknown or inapplicable. The sender is filled
-+ * in by the message bus.
-+ *
-+ * @param message the message
-+ * @returns the unique name of the sender or #NULL
-+ */
-+const char*
-+dbus_message_get_sender (DBusMessage *message)
-+{
-+ const char *v;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ v = NULL; /* in case field doesn't exist */
-+ _dbus_header_get_field_basic (&message->header,
-+ DBUS_HEADER_FIELD_SENDER,
-+ DBUS_TYPE_STRING,
-+ &v);
-+ return v;
-+}
-+
-+/**
-+ * Gets the type signature of the message, i.e. the arguments in the
-+ * message payload. The signature includes only "in" arguments for
-+ * #DBUS_MESSAGE_TYPE_METHOD_CALL and only "out" arguments for
-+ * #DBUS_MESSAGE_TYPE_METHOD_RETURN, so is slightly different from
-+ * what you might expect (it does not include the signature of the
-+ * entire C++-style method).
-+ *
-+ * The signature is a string made up of type codes such as
-+ * #DBUS_TYPE_INT32. The string is terminated with nul (nul is also
-+ * the value of #DBUS_TYPE_INVALID).
-+ *
-+ * @param message the message
-+ * @returns the type signature
-+ */
-+const char*
-+dbus_message_get_signature (DBusMessage *message)
-+{
-+ const DBusString *type_str;
-+ int type_pos;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ get_const_signature (&message->header, &type_str, &type_pos);
-+
-+ return _dbus_string_get_const_data_len (type_str, type_pos, 0);
-+}
-+
-+static dbus_bool_t
-+_dbus_message_has_type_interface_member (DBusMessage *message,
-+ int type,
-+ const char *interface,
-+ const char *member)
-+{
-+ const char *n;
-+
-+ _dbus_assert (message != NULL);
-+ _dbus_assert (interface != NULL);
-+ _dbus_assert (member != NULL);
-+
-+ if (dbus_message_get_type (message) != type)
-+ return FALSE;
-+
-+ /* Optimize by checking the short member name first
-+ * instead of the longer interface name
-+ */
-+
-+ n = dbus_message_get_member (message);
-+
-+ if (n && strcmp (n, member) == 0)
-+ {
-+ n = dbus_message_get_interface (message);
-+
-+ if (n == NULL || strcmp (n, interface) == 0)
-+ return TRUE;
-+ }
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Checks whether the message is a method call with the given
-+ * interface and member fields. If the message is not
-+ * #DBUS_MESSAGE_TYPE_METHOD_CALL, or has a different interface or
-+ * member field, returns #FALSE. If the interface field is missing,
-+ * then it will be assumed equal to the provided interface. The D-BUS
-+ * protocol allows method callers to leave out the interface name.
-+ *
-+ * @param message the message
-+ * @param interface the name to check (must not be #NULL)
-+ * @param method the name to check (must not be #NULL)
-+ *
-+ * @returns #TRUE if the message is the specified method call
-+ */
-+dbus_bool_t
-+dbus_message_is_method_call (DBusMessage *message,
-+ const char *interface,
-+ const char *method)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (interface != NULL, FALSE);
-+ _dbus_return_val_if_fail (method != NULL, FALSE);
-+ /* don't check that interface/method are valid since it would be
-+ * expensive, and not catch many common errors
-+ */
-+
-+ return _dbus_message_has_type_interface_member (message,
-+ DBUS_MESSAGE_TYPE_METHOD_CALL,
-+ interface, method);
-+}
-+
-+/**
-+ * Checks whether the message is a signal with the given interface and
-+ * member fields. If the message is not #DBUS_MESSAGE_TYPE_SIGNAL, or
-+ * has a different interface or member field, returns #FALSE. If the
-+ * interface field in the message is missing, it is assumed to match
-+ * any interface you pass in to this function.
-+ *
-+ * @param message the message
-+ * @param interface the name to check (must not be #NULL)
-+ * @param signal_name the name to check (must not be #NULL)
-+ *
-+ * @returns #TRUE if the message is the specified signal
-+ */
-+dbus_bool_t
-+dbus_message_is_signal (DBusMessage *message,
-+ const char *interface,
-+ const char *signal_name)
-+{
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (interface != NULL, FALSE);
-+ _dbus_return_val_if_fail (signal_name != NULL, FALSE);
-+ /* don't check that interface/name are valid since it would be
-+ * expensive, and not catch many common errors
-+ */
-+
-+ return _dbus_message_has_type_interface_member (message,
-+ DBUS_MESSAGE_TYPE_SIGNAL,
-+ interface, signal_name);
-+}
-+
-+/**
-+ * Checks whether the message is an error reply with the given error
-+ * name. If the message is not #DBUS_MESSAGE_TYPE_ERROR, or has a
-+ * different name, returns #FALSE.
-+ *
-+ * @param message the message
-+ * @param error_name the name to check (must not be #NULL)
-+ *
-+ * @returns #TRUE if the message is the specified error
-+ */
-+dbus_bool_t
-+dbus_message_is_error (DBusMessage *message,
-+ const char *error_name)
-+{
-+ const char *n;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (error_name != NULL, FALSE);
-+ /* don't check that error_name is valid since it would be expensive,
-+ * and not catch many common errors
-+ */
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_ERROR)
-+ return FALSE;
-+
-+ n = dbus_message_get_error_name (message);
-+
-+ if (n && strcmp (n, error_name) == 0)
-+ return TRUE;
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Checks whether the message was sent to the given name. If the
-+ * message has no destination specified or has a different
-+ * destination, returns #FALSE.
-+ *
-+ * @param message the message
-+ * @param name the name to check (must not be #NULL)
-+ *
-+ * @returns #TRUE if the message has the given destination name
-+ */
-+dbus_bool_t
-+dbus_message_has_destination (DBusMessage *message,
-+ const char *name)
-+{
-+ const char *s;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (name != NULL, FALSE);
-+ /* don't check that name is valid since it would be expensive, and
-+ * not catch many common errors
-+ */
-+
-+ s = dbus_message_get_destination (message);
-+
-+ if (s && strcmp (s, name) == 0)
-+ return TRUE;
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Checks whether the message has the given unique name as its sender.
-+ * If the message has no sender specified or has a different sender,
-+ * returns #FALSE. Note that a peer application will always have the
-+ * unique name of the connection as the sender. So you can't use this
-+ * function to see whether a sender owned a well-known name.
-+ *
-+ * Messages from the bus itself will have #DBUS_SERVICE_DBUS
-+ * as the sender.
-+ *
-+ * @param message the message
-+ * @param name the name to check (must not be #NULL)
-+ *
-+ * @returns #TRUE if the message has the given sender
-+ */
-+dbus_bool_t
-+dbus_message_has_sender (DBusMessage *message,
-+ const char *name)
-+{
-+ const char *s;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (name != NULL, FALSE);
-+ /* don't check that name is valid since it would be expensive, and
-+ * not catch many common errors
-+ */
-+
-+ s = dbus_message_get_sender (message);
-+
-+ if (s && strcmp (s, name) == 0)
-+ return TRUE;
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Checks whether the message has the given signature; see
-+ * dbus_message_get_signature() for more details on what the signature
-+ * looks like.
-+ *
-+ * @param message the message
-+ * @param signature typecode array
-+ * @returns #TRUE if message has the given signature
-+*/
-+dbus_bool_t
-+dbus_message_has_signature (DBusMessage *message,
-+ const char *signature)
-+{
-+ const char *s;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (signature != NULL, FALSE);
-+ /* don't check that signature is valid since it would be expensive,
-+ * and not catch many common errors
-+ */
-+
-+ s = dbus_message_get_signature (message);
-+
-+ if (s && strcmp (s, signature) == 0)
-+ return TRUE;
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Sets a #DBusError based on the contents of the given
-+ * message. The error is only set if the message
-+ * is an error message, as in DBUS_MESSAGE_TYPE_ERROR.
-+ * The name of the error is set to the name of the message,
-+ * and the error message is set to the first argument
-+ * if the argument exists and is a string.
-+ *
-+ * The return value indicates whether the error was set (the error is
-+ * set if and only if the message is an error message). So you can
-+ * check for an error reply and convert it to DBusError in one go:
-+ * @code
-+ * if (dbus_set_error_from_message (error, reply))
-+ * return error;
-+ * else
-+ * process reply;
-+ * @endcode
-+ *
-+ * @param error the error to set
-+ * @param message the message to set it from
-+ * @returns #TRUE if dbus_message_get_is_error() returns #TRUE for the message
-+ */
-+dbus_bool_t
-+dbus_set_error_from_message (DBusError *error,
-+ DBusMessage *message)
-+{
-+ const char *str;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_error_is_set (error, FALSE);
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_ERROR)
-+ return FALSE;
-+
-+ str = NULL;
-+ dbus_message_get_args (message, NULL,
-+ DBUS_TYPE_STRING, &str,
-+ DBUS_TYPE_INVALID);
-+
-+ dbus_set_error (error, dbus_message_get_error_name (message),
-+ str ? "%s" : NULL, str);
-+
-+ return TRUE;
-+}
-+
-+/** @} */
-+
-+/**
-+ * @addtogroup DBusMessageInternals
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * The initial buffer size of the message loader.
-+ *
-+ * @todo this should be based on min header size plus some average
-+ * body size, or something. Or rather, the min header size only, if we
-+ * want to try to read only the header, store that in a DBusMessage,
-+ * then read only the body and store that, etc., depends on
-+ * how we optimize _dbus_message_loader_get_buffer() and what
-+ * the exact message format is.
-+ */
-+#define INITIAL_LOADER_DATA_LEN 32
-+
-+/**
-+ * Creates a new message loader. Returns #NULL if memory can't
-+ * be allocated.
-+ *
-+ * @returns new loader, or #NULL.
-+ */
-+DBusMessageLoader*
-+_dbus_message_loader_new (void)
-+{
-+ DBusMessageLoader *loader;
-+
-+ loader = dbus_new0 (DBusMessageLoader, 1);
-+ if (loader == NULL)
-+ return NULL;
-+
-+ loader->refcount = 1;
-+
-+ loader->corrupted = FALSE;
-+ loader->corruption_reason = DBUS_VALID;
-+
-+ /* this can be configured by the app, but defaults to the protocol max */
-+ loader->max_message_size = DBUS_MAXIMUM_MESSAGE_LENGTH;
-+
-+ if (!_dbus_string_init (&loader->data))
-+ {
-+ dbus_free (loader);
-+ return NULL;
-+ }
-+
-+ /* preallocate the buffer for speed, ignore failure */
-+ _dbus_string_set_length (&loader->data, INITIAL_LOADER_DATA_LEN);
-+ _dbus_string_set_length (&loader->data, 0);
-+
-+ return loader;
-+}
-+
-+/**
-+ * Increments the reference count of the loader.
-+ *
-+ * @param loader the loader.
-+ * @returns the loader
-+ */
-+DBusMessageLoader *
-+_dbus_message_loader_ref (DBusMessageLoader *loader)
-+{
-+ loader->refcount += 1;
-+
-+ return loader;
-+}
-+
-+/**
-+ * Decrements the reference count of the loader and finalizes the
-+ * loader when the count reaches zero.
-+ *
-+ * @param loader the loader.
-+ */
-+void
-+_dbus_message_loader_unref (DBusMessageLoader *loader)
-+{
-+ loader->refcount -= 1;
-+ if (loader->refcount == 0)
-+ {
-+ _dbus_list_foreach (&loader->messages,
-+ (DBusForeachFunction) dbus_message_unref,
-+ NULL);
-+ _dbus_list_clear (&loader->messages);
-+ _dbus_string_free (&loader->data);
-+ dbus_free (loader);
-+ }
-+}
-+
-+/**
-+ * Gets the buffer to use for reading data from the network. Network
-+ * data is read directly into an allocated buffer, which is then used
-+ * in the DBusMessage, to avoid as many extra memcpy's as possible.
-+ * The buffer must always be returned immediately using
-+ * _dbus_message_loader_return_buffer(), even if no bytes are
-+ * successfully read.
-+ *
-+ * @todo this function can be a lot more clever. For example
-+ * it can probably always return a buffer size to read exactly
-+ * the body of the next message, thus avoiding any memory wastage
-+ * or reallocs.
-+ *
-+ * @todo we need to enforce a max length on strings in header fields.
-+ *
-+ * @param loader the message loader.
-+ * @param buffer the buffer
-+ */
-+void
-+_dbus_message_loader_get_buffer (DBusMessageLoader *loader,
-+ DBusString **buffer)
-+{
-+ _dbus_assert (!loader->buffer_outstanding);
-+
-+ *buffer = &loader->data;
-+
-+ loader->buffer_outstanding = TRUE;
-+}
-+
-+/**
-+ * Returns a buffer obtained from _dbus_message_loader_get_buffer(),
-+ * indicating to the loader how many bytes of the buffer were filled
-+ * in. This function must always be called, even if no bytes were
-+ * successfully read.
-+ *
-+ * @param loader the loader.
-+ * @param buffer the buffer.
-+ * @param bytes_read number of bytes that were read into the buffer.
-+ */
-+void
-+_dbus_message_loader_return_buffer (DBusMessageLoader *loader,
-+ DBusString *buffer,
-+ int bytes_read)
-+{
-+ _dbus_assert (loader->buffer_outstanding);
-+ _dbus_assert (buffer == &loader->data);
-+
-+ loader->buffer_outstanding = FALSE;
-+}
-+
-+/*
-+ * FIXME when we move the header out of the buffer, that memmoves all
-+ * buffered messages. Kind of crappy.
-+ *
-+ * Also we copy the header and body, which is kind of crappy. To
-+ * avoid this, we have to allow header and body to be in a single
-+ * memory block, which is good for messages we read and bad for
-+ * messages we are creating. But we could move_len() the buffer into
-+ * this single memory block, and move_len() will just swap the buffers
-+ * if you're moving the entire buffer replacing the dest string.
-+ *
-+ * We could also have the message loader tell the transport how many
-+ * bytes to read; so it would first ask for some arbitrary number like
-+ * 256, then if the message was incomplete it would use the
-+ * header/body len to ask for exactly the size of the message (or
-+ * blocks the size of a typical kernel buffer for the socket). That
-+ * way we don't get trailing bytes in the buffer that have to be
-+ * memmoved. Though I suppose we also don't have a chance of reading a
-+ * bunch of small messages at once, so the optimization may be stupid.
-+ *
-+ * Another approach would be to keep a "start" index into
-+ * loader->data and only delete it occasionally, instead of after
-+ * each message is loaded.
-+ *
-+ * load_message() returns FALSE if not enough memory OR the loader was corrupted
-+ */
-+static dbus_bool_t
-+load_message (DBusMessageLoader *loader,
-+ DBusMessage *message,
-+ int byte_order,
-+ int fields_array_len,
-+ int header_len,
-+ int body_len)
-+{
-+ dbus_bool_t oom;
-+ DBusValidity validity;
-+ const DBusString *type_str;
-+ int type_pos;
-+ DBusValidationMode mode;
-+
-+ mode = DBUS_VALIDATION_MODE_DATA_IS_UNTRUSTED;
-+
-+ oom = FALSE;
-+
-+#if 0
-+ _dbus_verbose_bytes_of_string (&loader->data, 0, header_len /* + body_len */);
-+#endif
-+
-+ /* 1. VALIDATE AND COPY OVER HEADER */
-+ _dbus_assert (_dbus_string_get_length (&message->header.data) == 0);
-+ _dbus_assert ((header_len + body_len) <= _dbus_string_get_length (&loader->data));
-+
-+ if (!_dbus_header_load (&message->header,
-+ mode,
-+ &validity,
-+ byte_order,
-+ fields_array_len,
-+ header_len,
-+ body_len,
-+ &loader->data, 0,
-+ _dbus_string_get_length (&loader->data)))
-+ {
-+ _dbus_verbose ("Failed to load header for new message code %d\n", validity);
-+
-+ /* assert here so we can catch any code that still uses DBUS_VALID to indicate
-+ oom errors. They should use DBUS_VALIDITY_UNKNOWN_OOM_ERROR instead */
-+ _dbus_assert (validity != DBUS_VALID);
-+
-+ if (validity == DBUS_VALIDITY_UNKNOWN_OOM_ERROR)
-+ oom = TRUE;
-+ else
-+ {
-+ loader->corrupted = TRUE;
-+ loader->corruption_reason = validity;
-+ }
-+ goto failed;
-+ }
-+
-+ _dbus_assert (validity == DBUS_VALID);
-+
-+ message->byte_order = byte_order;
-+
-+ /* 2. VALIDATE BODY */
-+ if (mode != DBUS_VALIDATION_MODE_WE_TRUST_THIS_DATA_ABSOLUTELY)
-+ {
-+ get_const_signature (&message->header, &type_str, &type_pos);
-+
-+ /* Because the bytes_remaining arg is NULL, this validates that the
-+ * body is the right length
-+ */
-+ validity = _dbus_validate_body_with_reason (type_str,
-+ type_pos,
-+ byte_order,
-+ NULL,
-+ &loader->data,
-+ header_len,
-+ body_len);
-+ if (validity != DBUS_VALID)
-+ {
-+ _dbus_verbose ("Failed to validate message body code %d\n", validity);
-+
-+ loader->corrupted = TRUE;
-+ loader->corruption_reason = validity;
-+
-+ goto failed;
-+ }
-+ }
-+
-+ /* 3. COPY OVER BODY AND QUEUE MESSAGE */
-+
-+ if (!_dbus_list_append (&loader->messages, message))
-+ {
-+ _dbus_verbose ("Failed to append new message to loader queue\n");
-+ oom = TRUE;
-+ goto failed;
-+ }
-+
-+ _dbus_assert (_dbus_string_get_length (&message->body) == 0);
-+ _dbus_assert (_dbus_string_get_length (&loader->data) >=
-+ (header_len + body_len));
-+
-+ if (!_dbus_string_copy_len (&loader->data, header_len, body_len, &message->body, 0))
-+ {
-+ _dbus_verbose ("Failed to move body into new message\n");
-+ oom = TRUE;
-+ goto failed;
-+ }
-+
-+ _dbus_string_delete (&loader->data, 0, header_len + body_len);
-+
-+ _dbus_assert (_dbus_string_get_length (&message->header.data) == header_len);
-+ _dbus_assert (_dbus_string_get_length (&message->body) == body_len);
-+
-+ _dbus_verbose ("Loaded message %p\n", message);
-+
-+ _dbus_assert (!oom);
-+ _dbus_assert (!loader->corrupted);
-+ _dbus_assert (loader->messages != NULL);
-+ _dbus_assert (_dbus_list_find_last (&loader->messages, message) != NULL);
-+
-+ return TRUE;
-+
-+ failed:
-+
-+ /* Clean up */
-+
-+ /* does nothing if the message isn't in the list */
-+ _dbus_list_remove_last (&loader->messages, message);
-+
-+ if (oom)
-+ _dbus_assert (!loader->corrupted);
-+ else
-+ _dbus_assert (loader->corrupted);
-+
-+ _dbus_verbose_bytes_of_string (&loader->data, 0, _dbus_string_get_length (&loader->data));
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Converts buffered data into messages, if we have enough data. If
-+ * we don't have enough data, does nothing.
-+ *
-+ * @todo we need to check that the proper named header fields exist
-+ * for each message type.
-+ *
-+ * @todo If a message has unknown type, we should probably eat it
-+ * right here rather than passing it out to applications. However
-+ * it's not an error to see messages of unknown type.
-+ *
-+ * @param loader the loader.
-+ * @returns #TRUE if we had enough memory to finish.
-+ */
-+dbus_bool_t
-+_dbus_message_loader_queue_messages (DBusMessageLoader *loader)
-+{
-+ while (!loader->corrupted &&
-+ _dbus_string_get_length (&loader->data) >= DBUS_MINIMUM_HEADER_SIZE)
-+ {
-+ DBusValidity validity;
-+ int byte_order, fields_array_len, header_len, body_len;
-+
-+ if (_dbus_header_have_message_untrusted (loader->max_message_size,
-+ &validity,
-+ &byte_order,
-+ &fields_array_len,
-+ &header_len,
-+ &body_len,
-+ &loader->data, 0,
-+ _dbus_string_get_length (&loader->data)))
-+ {
-+ DBusMessage *message;
-+
-+ _dbus_assert (validity == DBUS_VALID);
-+
-+ message = dbus_message_new_empty_header ();
-+ if (message == NULL)
-+ return FALSE;
-+
-+ if (!load_message (loader, message,
-+ byte_order, fields_array_len,
-+ header_len, body_len))
-+ {
-+ dbus_message_unref (message);
-+ /* load_message() returns false if corrupted or OOM; if
-+ * corrupted then return TRUE for not OOM
-+ */
-+ return loader->corrupted;
-+ }
-+
-+ _dbus_assert (loader->messages != NULL);
-+ _dbus_assert (_dbus_list_find_last (&loader->messages, message) != NULL);
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Initial peek at header says we don't have a whole message yet, or data broken with invalid code %d\n",
-+ validity);
-+ if (validity != DBUS_VALID)
-+ {
-+ loader->corrupted = TRUE;
-+ loader->corruption_reason = validity;
-+ }
-+ return TRUE;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Peeks at first loaded message, returns #NULL if no messages have
-+ * been queued.
-+ *
-+ * @param loader the loader.
-+ * @returns the next message, or #NULL if none.
-+ */
-+DBusMessage*
-+_dbus_message_loader_peek_message (DBusMessageLoader *loader)
-+{
-+ if (loader->messages)
-+ return loader->messages->data;
-+ else
-+ return NULL;
-+}
-+
-+/**
-+ * Pops a loaded message (passing ownership of the message
-+ * to the caller). Returns #NULL if no messages have been
-+ * queued.
-+ *
-+ * @param loader the loader.
-+ * @returns the next message, or #NULL if none.
-+ */
-+DBusMessage*
-+_dbus_message_loader_pop_message (DBusMessageLoader *loader)
-+{
-+ return _dbus_list_pop_first (&loader->messages);
-+}
-+
-+/**
-+ * Pops a loaded message inside a list link (passing ownership of the
-+ * message and link to the caller). Returns #NULL if no messages have
-+ * been loaded.
-+ *
-+ * @param loader the loader.
-+ * @returns the next message link, or #NULL if none.
-+ */
-+DBusList*
-+_dbus_message_loader_pop_message_link (DBusMessageLoader *loader)
-+{
-+ return _dbus_list_pop_first_link (&loader->messages);
-+}
-+
-+/**
-+ * Returns a popped message link, used to undo a pop.
-+ *
-+ * @param loader the loader
-+ * @param link the link with a message in it
-+ */
-+void
-+_dbus_message_loader_putback_message_link (DBusMessageLoader *loader,
-+ DBusList *link)
-+{
-+ _dbus_list_prepend_link (&loader->messages, link);
-+}
-+
-+/**
-+ * Checks whether the loader is confused due to bad data.
-+ * If messages are received that are invalid, the
-+ * loader gets confused and gives up permanently.
-+ * This state is called "corrupted."
-+ *
-+ * @param loader the loader
-+ * @returns #TRUE if the loader is hosed.
-+ */
-+dbus_bool_t
-+_dbus_message_loader_get_is_corrupted (DBusMessageLoader *loader)
-+{
-+ _dbus_assert ((loader->corrupted && loader->corruption_reason != DBUS_VALID) ||
-+ (!loader->corrupted && loader->corruption_reason == DBUS_VALID));
-+ return loader->corrupted;
-+}
-+
-+/**
-+ * Sets the maximum size message we allow.
-+ *
-+ * @param loader the loader
-+ * @param size the max message size in bytes
-+ */
-+void
-+_dbus_message_loader_set_max_message_size (DBusMessageLoader *loader,
-+ long size)
-+{
-+ if (size > DBUS_MAXIMUM_MESSAGE_LENGTH)
-+ {
-+ _dbus_verbose ("clamping requested max message size %ld to %d\n",
-+ size, DBUS_MAXIMUM_MESSAGE_LENGTH);
-+ size = DBUS_MAXIMUM_MESSAGE_LENGTH;
-+ }
-+ loader->max_message_size = size;
-+}
-+
-+/**
-+ * Gets the maximum allowed message size in bytes.
-+ *
-+ * @param loader the loader
-+ * @returns max size in bytes
-+ */
-+long
-+_dbus_message_loader_get_max_message_size (DBusMessageLoader *loader)
-+{
-+ return loader->max_message_size;
-+}
-+
-+static DBusDataSlotAllocator slot_allocator;
-+_DBUS_DEFINE_GLOBAL_LOCK (message_slots);
-+
-+/**
-+ * Allocates an integer ID to be used for storing application-specific
-+ * data on any DBusMessage. The allocated ID may then be used
-+ * with dbus_message_set_data() and dbus_message_get_data().
-+ * The passed-in slot must be initialized to -1, and is filled in
-+ * with the slot ID. If the passed-in slot is not -1, it's assumed
-+ * to be already allocated, and its refcount is incremented.
-+ *
-+ * The allocated slot is global, i.e. all DBusMessage objects will
-+ * have a slot with the given integer ID reserved.
-+ *
-+ * @param slot_p address of a global variable storing the slot
-+ * @returns #FALSE on failure (no memory)
-+ */
-+dbus_bool_t
-+dbus_message_allocate_data_slot (dbus_int32_t *slot_p)
-+{
-+ return _dbus_data_slot_allocator_alloc (&slot_allocator,
-+ _DBUS_LOCK_NAME (message_slots),
-+ slot_p);
-+}
-+
-+/**
-+ * Deallocates a global ID for message data slots.
-+ * dbus_message_get_data() and dbus_message_set_data() may no
-+ * longer be used with this slot. Existing data stored on existing
-+ * DBusMessage objects will be freed when the message is
-+ * finalized, but may not be retrieved (and may only be replaced if
-+ * someone else reallocates the slot). When the refcount on the
-+ * passed-in slot reaches 0, it is set to -1.
-+ *
-+ * @param slot_p address storing the slot to deallocate
-+ */
-+void
-+dbus_message_free_data_slot (dbus_int32_t *slot_p)
-+{
-+ _dbus_return_if_fail (*slot_p >= 0);
-+
-+ _dbus_data_slot_allocator_free (&slot_allocator, slot_p);
-+}
-+
-+/**
-+ * Stores a pointer on a DBusMessage, along
-+ * with an optional function to be used for freeing
-+ * the data when the data is set again, or when
-+ * the message is finalized. The slot number
-+ * must have been allocated with dbus_message_allocate_data_slot().
-+ *
-+ * @param message the message
-+ * @param slot the slot number
-+ * @param data the data to store
-+ * @param free_data_func finalizer function for the data
-+ * @returns #TRUE if there was enough memory to store the data
-+ */
-+dbus_bool_t
-+dbus_message_set_data (DBusMessage *message,
-+ dbus_int32_t slot,
-+ void *data,
-+ DBusFreeFunction free_data_func)
-+{
-+ DBusFreeFunction old_free_func;
-+ void *old_data;
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (message != NULL, FALSE);
-+ _dbus_return_val_if_fail (slot >= 0, FALSE);
-+
-+ retval = _dbus_data_slot_list_set (&slot_allocator,
-+ &message->slot_list,
-+ slot, data, free_data_func,
-+ &old_free_func, &old_data);
-+
-+ if (retval)
-+ {
-+ /* Do the actual free outside the message lock */
-+ if (old_free_func)
-+ (* old_free_func) (old_data);
-+ }
-+
-+ return retval;
-+}
-+
-+/**
-+ * Retrieves data previously set with dbus_message_set_data().
-+ * The slot must still be allocated (must not have been freed).
-+ *
-+ * @param message the message
-+ * @param slot the slot to get data from
-+ * @returns the data, or #NULL if not found
-+ */
-+void*
-+dbus_message_get_data (DBusMessage *message,
-+ dbus_int32_t slot)
-+{
-+ void *res;
-+
-+ _dbus_return_val_if_fail (message != NULL, NULL);
-+
-+ res = _dbus_data_slot_list_get (&slot_allocator,
-+ &message->slot_list,
-+ slot);
-+
-+ return res;
-+}
-+
-+/**
-+ * Utility function to convert a machine-readable (not translated)
-+ * string into a D-BUS message type.
-+ *
-+ * @code
-+ * "method_call" -> DBUS_MESSAGE_TYPE_METHOD_CALL
-+ * "method_return" -> DBUS_MESSAGE_TYPE_METHOD_RETURN
-+ * "signal" -> DBUS_MESSAGE_TYPE_SIGNAL
-+ * "error" -> DBUS_MESSAGE_TYPE_ERROR
-+ * anything else -> DBUS_MESSAGE_TYPE_INVALID
-+ * @endcode
-+ *
-+ */
-+int
-+dbus_message_type_from_string (const char *type_str)
-+{
-+ if (strcmp (type_str, "method_call") == 0)
-+ return DBUS_MESSAGE_TYPE_METHOD_CALL;
-+ if (strcmp (type_str, "method_return") == 0)
-+ return DBUS_MESSAGE_TYPE_METHOD_RETURN;
-+ else if (strcmp (type_str, "signal") == 0)
-+ return DBUS_MESSAGE_TYPE_SIGNAL;
-+ else if (strcmp (type_str, "error") == 0)
-+ return DBUS_MESSAGE_TYPE_ERROR;
-+ else
-+ return DBUS_MESSAGE_TYPE_INVALID;
-+}
-+
-+/**
-+ * Utility function to convert a D-BUS message type into a
-+ * machine-readable string (not translated).
-+ *
-+ * @code
-+ * DBUS_MESSAGE_TYPE_METHOD_CALL -> "method_call"
-+ * DBUS_MESSAGE_TYPE_METHOD_RETURN -> "method_return"
-+ * DBUS_MESSAGE_TYPE_SIGNAL -> "signal"
-+ * DBUS_MESSAGE_TYPE_ERROR -> "error"
-+ * DBUS_MESSAGE_TYPE_INVALID -> "invalid"
-+ * @endcode
-+ *
-+ */
-+const char *
-+dbus_message_type_to_string (int type)
-+{
-+ switch (type)
-+ {
-+ case DBUS_MESSAGE_TYPE_METHOD_CALL:
-+ return "method_call";
-+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
-+ return "method_return";
-+ case DBUS_MESSAGE_TYPE_SIGNAL:
-+ return "signal";
-+ case DBUS_MESSAGE_TYPE_ERROR:
-+ return "error";
-+ default:
-+ return "invalid";
-+ }
-+}
-+
-+/** @} */
-+
-+/* tests in dbus-message-util.c */
-diff -Naur dbus-0.61.orig/dbus/dbus-message.h dbus-0.61/dbus/dbus-message.h
---- dbus-0.61.orig/dbus/dbus-message.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-message.h 2005-06-15 17:59:57.000000000 +0200
-@@ -0,0 +1,207 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-message.h DBusMessage object
-+ *
-+ * Copyright (C) 2002, 2003, 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_MESSAGE_H
-+#define DBUS_MESSAGE_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-arch-deps.h>
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-errors.h>
-+#include <stdarg.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusMessage DBusMessage;
-+typedef struct DBusMessageIter DBusMessageIter;
-+
-+/**
-+ * DBusMessageIter struct; contains no public fields
-+ */
-+struct DBusMessageIter
-+{
-+ void *dummy1; /**< Don't use this */
-+ void *dummy2; /**< Don't use this */
-+ dbus_uint32_t dummy3; /**< Don't use this */
-+ int dummy4; /**< Don't use this */
-+ int dummy5; /**< Don't use this */
-+ int dummy6; /**< Don't use this */
-+ int dummy7; /**< Don't use this */
-+ int dummy8; /**< Don't use this */
-+ int dummy9; /**< Don't use this */
-+ int dummy10; /**< Don't use this */
-+ int dummy11; /**< Don't use this */
-+ int pad1; /**< Don't use this */
-+ int pad2; /**< Don't use this */
-+ void *pad3; /**< Don't use this */
-+};
-+
-+DBusMessage* dbus_message_new (int message_type);
-+DBusMessage* dbus_message_new_method_call (const char *bus_name,
-+ const char *path,
-+ const char *interface,
-+ const char *method);
-+DBusMessage* dbus_message_new_method_return (DBusMessage *method_call);
-+DBusMessage* dbus_message_new_signal (const char *path,
-+ const char *interface,
-+ const char *name);
-+DBusMessage* dbus_message_new_error (DBusMessage *reply_to,
-+ const char *error_name,
-+ const char *error_message);
-+DBusMessage* dbus_message_new_error_printf (DBusMessage *reply_to,
-+ const char *error_name,
-+ const char *error_format,
-+ ...);
-+
-+DBusMessage* dbus_message_copy (const DBusMessage *message);
-+
-+DBusMessage* dbus_message_ref (DBusMessage *message);
-+void dbus_message_unref (DBusMessage *message);
-+int dbus_message_get_type (DBusMessage *message);
-+dbus_bool_t dbus_message_set_path (DBusMessage *message,
-+ const char *object_path);
-+const char* dbus_message_get_path (DBusMessage *message);
-+dbus_bool_t dbus_message_has_path (DBusMessage *message,
-+ const char *object_path);
-+dbus_bool_t dbus_message_set_interface (DBusMessage *message,
-+ const char *interface);
-+const char* dbus_message_get_interface (DBusMessage *message);
-+dbus_bool_t dbus_message_has_interface (DBusMessage *message,
-+ const char *interface);
-+dbus_bool_t dbus_message_set_member (DBusMessage *message,
-+ const char *member);
-+const char* dbus_message_get_member (DBusMessage *message);
-+dbus_bool_t dbus_message_has_member (DBusMessage *message,
-+ const char *member);
-+dbus_bool_t dbus_message_set_error_name (DBusMessage *message,
-+ const char *name);
-+const char* dbus_message_get_error_name (DBusMessage *message);
-+dbus_bool_t dbus_message_set_destination (DBusMessage *message,
-+ const char *destination);
-+const char* dbus_message_get_destination (DBusMessage *message);
-+dbus_bool_t dbus_message_set_sender (DBusMessage *message,
-+ const char *sender);
-+const char* dbus_message_get_sender (DBusMessage *message);
-+const char* dbus_message_get_signature (DBusMessage *message);
-+void dbus_message_set_no_reply (DBusMessage *message,
-+ dbus_bool_t no_reply);
-+dbus_bool_t dbus_message_get_no_reply (DBusMessage *message);
-+dbus_bool_t dbus_message_is_method_call (DBusMessage *message,
-+ const char *interface,
-+ const char *method);
-+dbus_bool_t dbus_message_is_signal (DBusMessage *message,
-+ const char *interface,
-+ const char *signal_name);
-+dbus_bool_t dbus_message_is_error (DBusMessage *message,
-+ const char *error_name);
-+dbus_bool_t dbus_message_has_destination (DBusMessage *message,
-+ const char *bus_name);
-+dbus_bool_t dbus_message_has_sender (DBusMessage *message,
-+ const char *unique_bus_name);
-+dbus_bool_t dbus_message_has_signature (DBusMessage *message,
-+ const char *signature);
-+dbus_uint32_t dbus_message_get_serial (DBusMessage *message);
-+dbus_bool_t dbus_message_set_reply_serial (DBusMessage *message,
-+ dbus_uint32_t reply_serial);
-+dbus_uint32_t dbus_message_get_reply_serial (DBusMessage *message);
-+
-+void dbus_message_set_auto_start (DBusMessage *message,
-+ dbus_bool_t auto_start);
-+dbus_bool_t dbus_message_get_auto_start (DBusMessage *message);
-+
-+dbus_bool_t dbus_message_get_path_decomposed (DBusMessage *message,
-+ char ***path);
-+
-+dbus_bool_t dbus_message_append_args (DBusMessage *message,
-+ int first_arg_type,
-+ ...);
-+dbus_bool_t dbus_message_append_args_valist (DBusMessage *message,
-+ int first_arg_type,
-+ va_list var_args);
-+dbus_bool_t dbus_message_get_args (DBusMessage *message,
-+ DBusError *error,
-+ int first_arg_type,
-+ ...);
-+dbus_bool_t dbus_message_get_args_valist (DBusMessage *message,
-+ DBusError *error,
-+ int first_arg_type,
-+ va_list var_args);
-+
-+
-+dbus_bool_t dbus_message_iter_init (DBusMessage *message,
-+ DBusMessageIter *iter);
-+dbus_bool_t dbus_message_iter_has_next (DBusMessageIter *iter);
-+dbus_bool_t dbus_message_iter_next (DBusMessageIter *iter);
-+char* dbus_message_iter_get_signature (DBusMessageIter *iter);
-+int dbus_message_iter_get_arg_type (DBusMessageIter *iter);
-+int dbus_message_iter_get_element_type (DBusMessageIter *iter);
-+void dbus_message_iter_recurse (DBusMessageIter *iter,
-+ DBusMessageIter *sub);
-+void dbus_message_iter_get_basic (DBusMessageIter *iter,
-+ void *value);
-+int dbus_message_iter_get_array_len (DBusMessageIter *iter);
-+void dbus_message_iter_get_fixed_array (DBusMessageIter *iter,
-+ void *value,
-+ int *n_elements);
-+
-+
-+void dbus_message_iter_init_append (DBusMessage *message,
-+ DBusMessageIter *iter);
-+dbus_bool_t dbus_message_iter_append_basic (DBusMessageIter *iter,
-+ int type,
-+ const void *value);
-+dbus_bool_t dbus_message_iter_append_fixed_array (DBusMessageIter *iter,
-+ int element_type,
-+ const void *value,
-+ int n_elements);
-+dbus_bool_t dbus_message_iter_open_container (DBusMessageIter *iter,
-+ int type,
-+ const char *contained_signature,
-+ DBusMessageIter *sub);
-+dbus_bool_t dbus_message_iter_close_container (DBusMessageIter *iter,
-+ DBusMessageIter *sub);
-+
-+
-+dbus_bool_t dbus_set_error_from_message (DBusError *error,
-+ DBusMessage *message);
-+
-+
-+dbus_bool_t dbus_message_allocate_data_slot (dbus_int32_t *slot_p);
-+void dbus_message_free_data_slot (dbus_int32_t *slot_p);
-+dbus_bool_t dbus_message_set_data (DBusMessage *message,
-+ dbus_int32_t slot,
-+ void *data,
-+ DBusFreeFunction free_data_func);
-+void* dbus_message_get_data (DBusMessage *message,
-+ dbus_int32_t slot);
-+
-+int dbus_message_type_from_string (const char *type_str);
-+const char * dbus_message_type_to_string (int type);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_MESSAGE_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-object-tree.c dbus-0.61/dbus/dbus-object-tree.c
---- dbus-0.61.orig/dbus/dbus-object-tree.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-object-tree.c 2005-09-05 21:37:19.000000000 +0200
-@@ -0,0 +1,1934 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-object-tree.c DBusObjectTree (internals of DBusConnection)
-+ *
-+ * Copyright (C) 2003, 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-object-tree.h"
-+#include "dbus-connection-internal.h"
-+#include "dbus-internals.h"
-+#include "dbus-hash.h"
-+#include "dbus-protocol.h"
-+#include "dbus-string.h"
-+#include <string.h>
-+#include <stdlib.h>
-+
-+/**
-+ * @defgroup DBusObjectTree A hierarchy of objects with container-contained relationship
-+ * @ingroup DBusInternals
-+ * @brief DBusObjectTree is used by DBusConnection to track the object tree
-+ *
-+ * Types and functions related to DBusObjectTree. These
-+ * are all library-internal.
-+ *
-+ * @{
-+ */
-+
-+/** Subnode of the object hierarchy */
-+typedef struct DBusObjectSubtree DBusObjectSubtree;
-+
-+static DBusObjectSubtree* _dbus_object_subtree_new (const char *name,
-+ const DBusObjectPathVTable *vtable,
-+ void *user_data);
-+static DBusObjectSubtree* _dbus_object_subtree_ref (DBusObjectSubtree *subtree);
-+static void _dbus_object_subtree_unref (DBusObjectSubtree *subtree);
-+
-+/**
-+ * Internals of DBusObjectTree
-+ */
-+struct DBusObjectTree
-+{
-+ int refcount; /**< Reference count */
-+ DBusConnection *connection; /**< Connection this tree belongs to */
-+
-+ DBusObjectSubtree *root; /**< Root of the tree ("/" node) */
-+};
-+
-+/**
-+ * Struct representing a single registered subtree handler, or node
-+ * that's a parent of a registered subtree handler. If
-+ * message_function != NULL there's actually a handler at this node.
-+ */
-+struct DBusObjectSubtree
-+{
-+ DBusAtomic refcount; /**< Reference count */
-+ DBusObjectSubtree *parent; /**< Parent node */
-+ DBusObjectPathUnregisterFunction unregister_function; /**< Function to call on unregister */
-+ DBusObjectPathMessageFunction message_function; /**< Function to handle messages */
-+ void *user_data; /**< Data for functions */
-+ DBusObjectSubtree **subtrees; /**< Child nodes */
-+ int n_subtrees; /**< Number of child nodes */
-+ int max_subtrees; /**< Number of allocated entries in subtrees */
-+ unsigned int invoke_as_fallback : 1; /**< Whether to invoke message_function when child nodes don't handle the message */
-+ char name[1]; /**< Allocated as large as necessary */
-+};
-+
-+/**
-+ * Creates a new object tree, representing a mapping from paths
-+ * to handler vtables.
-+ *
-+ * @param connection the connection this tree belongs to
-+ * @returns the new tree or #NULL if no memory
-+ */
-+DBusObjectTree*
-+_dbus_object_tree_new (DBusConnection *connection)
-+{
-+ DBusObjectTree *tree;
-+
-+ /* the connection passed in here isn't fully constructed,
-+ * so don't do anything more than store a pointer to
-+ * it
-+ */
-+
-+ tree = dbus_new0 (DBusObjectTree, 1);
-+ if (tree == NULL)
-+ goto oom;
-+
-+ tree->refcount = 1;
-+ tree->connection = connection;
-+ tree->root = _dbus_object_subtree_new ("/", NULL, NULL);
-+ if (tree->root == NULL)
-+ goto oom;
-+ tree->root->invoke_as_fallback = TRUE;
-+
-+ return tree;
-+
-+ oom:
-+ if (tree)
-+ {
-+ dbus_free (tree);
-+ }
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Increment the reference count
-+ * @param tree the object tree
-+ * @returns the object tree
-+ */
-+DBusObjectTree *
-+_dbus_object_tree_ref (DBusObjectTree *tree)
-+{
-+ _dbus_assert (tree->refcount > 0);
-+
-+ tree->refcount += 1;
-+
-+ return tree;
-+}
-+
-+/**
-+ * Decrement the reference count
-+ * @param tree the object tree
-+ */
-+void
-+_dbus_object_tree_unref (DBusObjectTree *tree)
-+{
-+ _dbus_assert (tree->refcount > 0);
-+
-+ tree->refcount -= 1;
-+
-+ if (tree->refcount == 0)
-+ {
-+ _dbus_object_tree_free_all_unlocked (tree);
-+
-+ dbus_free (tree);
-+ }
-+}
-+
-+/** Set to 1 to get a bunch of debug spew about finding the
-+ * subtree nodes
-+ */
-+#define VERBOSE_FIND 0
-+
-+static DBusObjectSubtree*
-+find_subtree_recurse (DBusObjectSubtree *subtree,
-+ const char **path,
-+ dbus_bool_t create_if_not_found,
-+ int *index_in_parent,
-+ dbus_bool_t *exact_match)
-+{
-+ int i, j;
-+ dbus_bool_t return_deepest_match;
-+
-+ return_deepest_match = exact_match != NULL;
-+
-+ _dbus_assert (!(return_deepest_match && create_if_not_found));
-+
-+ if (path[0] == NULL)
-+ {
-+#if VERBOSE_FIND
-+ _dbus_verbose (" path exhausted, returning %s\n",
-+ subtree->name);
-+#endif
-+ if (exact_match != NULL)
-+ *exact_match = TRUE;
-+ return subtree;
-+ }
-+
-+#if VERBOSE_FIND
-+ _dbus_verbose (" searching children of %s for %s\n",
-+ subtree->name, path[0]);
-+#endif
-+
-+ i = 0;
-+ j = subtree->n_subtrees;
-+ while (i < j)
-+ {
-+ int k, v;
-+
-+ k = (i + j) / 2;
-+ v = strcmp (path[0], subtree->subtrees[k]->name);
-+
-+#if VERBOSE_FIND
-+ _dbus_verbose (" %s cmp %s = %d\n",
-+ path[0], subtree->subtrees[k]->name,
-+ v);
-+#endif
-+
-+ if (v == 0)
-+ {
-+ if (index_in_parent)
-+ {
-+#if VERBOSE_FIND
-+ _dbus_verbose (" storing parent index %d\n", k);
-+#endif
-+ *index_in_parent = k;
-+ }
-+
-+ if (return_deepest_match)
-+ {
-+ DBusObjectSubtree *next;
-+
-+ next = find_subtree_recurse (subtree->subtrees[k],
-+ &path[1], create_if_not_found,
-+ index_in_parent, exact_match);
-+ if (next == NULL &&
-+ subtree->invoke_as_fallback)
-+ {
-+#if VERBOSE_FIND
-+ _dbus_verbose (" no deeper match found, returning %s\n",
-+ subtree->name);
-+#endif
-+ if (exact_match != NULL)
-+ *exact_match = FALSE;
-+ return subtree;
-+ }
-+ else
-+ return next;
-+ }
-+ else
-+ return find_subtree_recurse (subtree->subtrees[k],
-+ &path[1], create_if_not_found,
-+ index_in_parent, exact_match);
-+ }
-+ else if (v < 0)
-+ {
-+ j = k;
-+ }
-+ else
-+ {
-+ i = k + 1;
-+ }
-+ }
-+
-+#if VERBOSE_FIND
-+ _dbus_verbose (" no match found, current tree %s, create_if_not_found = %d\n",
-+ subtree->name, create_if_not_found);
-+#endif
-+
-+ if (create_if_not_found)
-+ {
-+ DBusObjectSubtree* child;
-+ int child_pos, new_n_subtrees;
-+
-+#if VERBOSE_FIND
-+ _dbus_verbose (" creating subtree %s\n",
-+ path[0]);
-+#endif
-+
-+ child = _dbus_object_subtree_new (path[0],
-+ NULL, NULL);
-+ if (child == NULL)
-+ return NULL;
-+
-+ new_n_subtrees = subtree->n_subtrees + 1;
-+ if (new_n_subtrees > subtree->max_subtrees)
-+ {
-+ int new_max_subtrees;
-+ DBusObjectSubtree **new_subtrees;
-+
-+ new_max_subtrees = subtree->max_subtrees == 0 ? 1 : 2 * subtree->max_subtrees;
-+ new_subtrees = dbus_realloc (subtree->subtrees,
-+ new_max_subtrees * sizeof (DBusObjectSubtree*));
-+ if (new_subtrees == NULL)
-+ {
-+ _dbus_object_subtree_unref (child);
-+ return NULL;
-+ }
-+ subtree->subtrees = new_subtrees;
-+ subtree->max_subtrees = new_max_subtrees;
-+ }
-+
-+ /* The binary search failed, so i == j points to the
-+ place the child should be inserted. */
-+ child_pos = i;
-+ _dbus_assert (child_pos < new_n_subtrees &&
-+ new_n_subtrees <= subtree->max_subtrees);
-+ if (child_pos + 1 < new_n_subtrees)
-+ {
-+ memmove (&subtree->subtrees[child_pos+1],
-+ &subtree->subtrees[child_pos],
-+ (new_n_subtrees - child_pos - 1) *
-+ sizeof subtree->subtrees[0]);
-+ }
-+ subtree->subtrees[child_pos] = child;
-+
-+ if (index_in_parent)
-+ *index_in_parent = child_pos;
-+ subtree->n_subtrees = new_n_subtrees;
-+ child->parent = subtree;
-+
-+ return find_subtree_recurse (child,
-+ &path[1], create_if_not_found,
-+ index_in_parent, exact_match);
-+ }
-+ else
-+ {
-+ if (exact_match != NULL)
-+ *exact_match = FALSE;
-+ return (return_deepest_match && subtree->invoke_as_fallback) ? subtree : NULL;
-+ }
-+}
-+
-+static DBusObjectSubtree*
-+find_subtree (DBusObjectTree *tree,
-+ const char **path,
-+ int *index_in_parent)
-+{
-+ DBusObjectSubtree *subtree;
-+
-+#if VERBOSE_FIND
-+ _dbus_verbose ("Looking for exact registered subtree\n");
-+#endif
-+
-+ subtree = find_subtree_recurse (tree->root, path, FALSE, index_in_parent, NULL);
-+
-+ if (subtree && subtree->message_function == NULL)
-+ return NULL;
-+ else
-+ return subtree;
-+}
-+
-+static DBusObjectSubtree*
-+lookup_subtree (DBusObjectTree *tree,
-+ const char **path)
-+{
-+#if VERBOSE_FIND
-+ _dbus_verbose ("Looking for subtree\n");
-+#endif
-+ return find_subtree_recurse (tree->root, path, FALSE, NULL, NULL);
-+}
-+
-+static DBusObjectSubtree*
-+find_handler (DBusObjectTree *tree,
-+ const char **path,
-+ dbus_bool_t *exact_match)
-+{
-+#if VERBOSE_FIND
-+ _dbus_verbose ("Looking for deepest handler\n");
-+#endif
-+ _dbus_assert (exact_match != NULL);
-+
-+ *exact_match = FALSE; /* ensure always initialized */
-+
-+ return find_subtree_recurse (tree->root, path, FALSE, NULL, exact_match);
-+}
-+
-+static DBusObjectSubtree*
-+ensure_subtree (DBusObjectTree *tree,
-+ const char **path)
-+{
-+#if VERBOSE_FIND
-+ _dbus_verbose ("Ensuring subtree\n");
-+#endif
-+ return find_subtree_recurse (tree->root, path, TRUE, NULL, NULL);
-+}
-+
-+/**
-+ * Registers a new subtree in the global object tree.
-+ *
-+ * @param tree the global object tree
-+ * @param fallback #TRUE to handle messages to children of this path
-+ * @param path NULL-terminated array of path elements giving path to subtree
-+ * @param vtable the vtable used to traverse this subtree
-+ * @param user_data user data to pass to methods in the vtable
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_object_tree_register (DBusObjectTree *tree,
-+ dbus_bool_t fallback,
-+ const char **path,
-+ const DBusObjectPathVTable *vtable,
-+ void *user_data)
-+{
-+ DBusObjectSubtree *subtree;
-+
-+ _dbus_assert (tree != NULL);
-+ _dbus_assert (vtable->message_function != NULL);
-+ _dbus_assert (path != NULL);
-+
-+ subtree = ensure_subtree (tree, path);
-+ if (subtree == NULL)
-+ return FALSE;
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (subtree->message_function != NULL)
-+ {
-+ _dbus_warn ("A handler is already registered for the path starting with path[0] = \"%s\"\n",
-+ path[0] ? path[0] : "null");
-+ return FALSE;
-+ }
-+#else
-+ _dbus_assert (subtree->message_function == NULL);
-+#endif
-+
-+ subtree->message_function = vtable->message_function;
-+ subtree->unregister_function = vtable->unregister_function;
-+ subtree->user_data = user_data;
-+ subtree->invoke_as_fallback = fallback != FALSE;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Unregisters an object subtree that was registered with the
-+ * same path.
-+ *
-+ * @param tree the global object tree
-+ * @param path path to the subtree (same as the one passed to _dbus_object_tree_register())
-+ */
-+void
-+_dbus_object_tree_unregister_and_unlock (DBusObjectTree *tree,
-+ const char **path)
-+{
-+ int i;
-+ DBusObjectSubtree *subtree;
-+ DBusObjectPathUnregisterFunction unregister_function;
-+ void *user_data;
-+ DBusConnection *connection;
-+
-+ _dbus_assert (path != NULL);
-+
-+ unregister_function = NULL;
-+ user_data = NULL;
-+
-+ subtree = find_subtree (tree, path, &i);
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (subtree == NULL)
-+ {
-+ _dbus_warn ("Attempted to unregister path (path[0] = %s path[1] = %s) which isn't registered\n",
-+ path[0] ? path[0] : "null",
-+ path[1] ? path[1] : "null");
-+ goto unlock;
-+ }
-+#else
-+ _dbus_assert (subtree != NULL);
-+#endif
-+
-+ _dbus_assert (subtree->parent == NULL ||
-+ (i >= 0 && subtree->parent->subtrees[i] == subtree));
-+
-+ subtree->message_function = NULL;
-+
-+ unregister_function = subtree->unregister_function;
-+ user_data = subtree->user_data;
-+
-+ subtree->unregister_function = NULL;
-+ subtree->user_data = NULL;
-+
-+ /* If we have no subtrees of our own, remove from
-+ * our parent (FIXME could also be more aggressive
-+ * and remove our parent if it becomes empty)
-+ */
-+ if (subtree->parent && subtree->n_subtrees == 0)
-+ {
-+ /* assumes a 0-byte memmove is OK */
-+ memmove (&subtree->parent->subtrees[i],
-+ &subtree->parent->subtrees[i+1],
-+ (subtree->parent->n_subtrees - i - 1) *
-+ sizeof (subtree->parent->subtrees[0]));
-+ subtree->parent->n_subtrees -= 1;
-+
-+ subtree->parent = NULL;
-+
-+ _dbus_object_subtree_unref (subtree);
-+ }
-+ subtree = NULL;
-+
-+unlock:
-+ connection = tree->connection;
-+
-+ /* Unlock and call application code */
-+#ifdef DBUS_BUILD_TESTS
-+ if (connection)
-+#endif
-+ {
-+ _dbus_connection_ref_unlocked (connection);
-+ _dbus_verbose ("unlock %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_unlock (connection);
-+ }
-+
-+ if (unregister_function)
-+ (* unregister_function) (connection, user_data);
-+
-+#ifdef DBUS_BUILD_TESTS
-+ if (connection)
-+#endif
-+ dbus_connection_unref (connection);
-+}
-+
-+static void
-+free_subtree_recurse (DBusConnection *connection,
-+ DBusObjectSubtree *subtree)
-+{
-+ /* Delete them from the end, for slightly
-+ * more robustness against odd reentrancy.
-+ */
-+ while (subtree->n_subtrees > 0)
-+ {
-+ DBusObjectSubtree *child;
-+
-+ child = subtree->subtrees[subtree->n_subtrees - 1];
-+ subtree->subtrees[subtree->n_subtrees - 1] = NULL;
-+ subtree->n_subtrees -= 1;
-+ child->parent = NULL;
-+
-+ free_subtree_recurse (connection, child);
-+ }
-+
-+ /* Call application code */
-+ if (subtree->unregister_function)
-+ (* subtree->unregister_function) (connection,
-+ subtree->user_data);
-+
-+ subtree->message_function = NULL;
-+ subtree->unregister_function = NULL;
-+ subtree->user_data = NULL;
-+
-+ /* Now free ourselves */
-+ _dbus_object_subtree_unref (subtree);
-+}
-+
-+/**
-+ * Free all the handlers in the tree. Lock on tree's connection
-+ * must not be held.
-+ *
-+ * @param tree the object tree
-+ */
-+void
-+_dbus_object_tree_free_all_unlocked (DBusObjectTree *tree)
-+{
-+ if (tree->root)
-+ free_subtree_recurse (tree->connection,
-+ tree->root);
-+ tree->root = NULL;
-+}
-+
-+static dbus_bool_t
-+_dbus_object_tree_list_registered_unlocked (DBusObjectTree *tree,
-+ const char **parent_path,
-+ char ***child_entries)
-+{
-+ DBusObjectSubtree *subtree;
-+ char **retval;
-+
-+ _dbus_assert (parent_path != NULL);
-+ _dbus_assert (child_entries != NULL);
-+
-+ *child_entries = NULL;
-+
-+ subtree = lookup_subtree (tree, parent_path);
-+ if (subtree == NULL)
-+ {
-+ retval = dbus_new0 (char *, 1);
-+ }
-+ else
-+ {
-+ int i;
-+ retval = dbus_new0 (char*, subtree->n_subtrees + 1);
-+ if (retval == NULL)
-+ goto out;
-+ i = 0;
-+ while (i < subtree->n_subtrees)
-+ {
-+ retval[i] = _dbus_strdup (subtree->subtrees[i]->name);
-+ if (retval[i] == NULL)
-+ {
-+ dbus_free_string_array (retval);
-+ retval = NULL;
-+ goto out;
-+ }
-+ ++i;
-+ }
-+ }
-+
-+ out:
-+
-+ *child_entries = retval;
-+ return retval != NULL;
-+}
-+
-+static DBusHandlerResult
-+handle_default_introspect_and_unlock (DBusObjectTree *tree,
-+ DBusMessage *message,
-+ const char **path)
-+{
-+ DBusString xml;
-+ DBusHandlerResult result;
-+ char **children;
-+ int i;
-+ DBusMessage *reply;
-+ DBusMessageIter iter;
-+ const char *v_STRING;
-+ dbus_bool_t already_unlocked;
-+
-+ /* We have the connection lock here */
-+
-+ already_unlocked = FALSE;
-+
-+ _dbus_verbose (" considering default Introspect() handler...\n");
-+
-+ reply = NULL;
-+
-+ if (!dbus_message_is_method_call (message,
-+ DBUS_INTERFACE_INTROSPECTABLE,
-+ "Introspect"))
-+ {
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ _dbus_verbose ("unlock %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ _dbus_connection_unlock (tree->connection);
-+ }
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+
-+ _dbus_verbose (" using default Introspect() handler!\n");
-+
-+ if (!_dbus_string_init (&xml))
-+ {
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ _dbus_verbose ("unlock %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ _dbus_connection_unlock (tree->connection);
-+ }
-+
-+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
-+ }
-+
-+ result = DBUS_HANDLER_RESULT_NEED_MEMORY;
-+
-+ children = NULL;
-+ if (!_dbus_object_tree_list_registered_unlocked (tree, path, &children))
-+ goto out;
-+
-+ if (!_dbus_string_append (&xml, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE))
-+ goto out;
-+
-+ if (!_dbus_string_append (&xml, "<node>\n"))
-+ goto out;
-+
-+ i = 0;
-+ while (children[i] != NULL)
-+ {
-+ if (!_dbus_string_append_printf (&xml, " <node name=\"%s\"/>\n",
-+ children[i]))
-+ goto out;
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_string_append (&xml, "</node>\n"))
-+ goto out;
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto out;
-+
-+ dbus_message_iter_init_append (reply, &iter);
-+ v_STRING = _dbus_string_get_const_data (&xml);
-+ if (!dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &v_STRING))
-+ goto out;
-+
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ already_unlocked = TRUE;
-+
-+ if (!_dbus_connection_send_and_unlock (tree->connection, reply, NULL))
-+ goto out;
-+ }
-+
-+ result = DBUS_HANDLER_RESULT_HANDLED;
-+
-+ out:
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ if (!already_unlocked)
-+ {
-+ _dbus_verbose ("unlock %s %d\n", _DBUS_FUNCTION_NAME, __LINE__);
-+ _dbus_connection_unlock (tree->connection);
-+ }
-+ }
-+
-+ _dbus_string_free (&xml);
-+ dbus_free_string_array (children);
-+ if (reply)
-+ dbus_message_unref (reply);
-+
-+ return result;
-+}
-+
-+/**
-+ * Tries to dispatch a message by directing it to handler for the
-+ * object path listed in the message header, if any. Messages are
-+ * dispatched first to the registered handler that matches the largest
-+ * number of path elements; that is, message to /foo/bar/baz would go
-+ * to the handler for /foo/bar before the one for /foo.
-+ *
-+ * @todo thread problems
-+ *
-+ * @param tree the global object tree
-+ * @param message the message to dispatch
-+ * @returns whether message was handled successfully
-+ */
-+DBusHandlerResult
-+_dbus_object_tree_dispatch_and_unlock (DBusObjectTree *tree,
-+ DBusMessage *message)
-+{
-+ char **path;
-+ dbus_bool_t exact_match;
-+ DBusList *list;
-+ DBusList *link;
-+ DBusHandlerResult result;
-+ DBusObjectSubtree *subtree;
-+
-+#if 0
-+ _dbus_verbose ("Dispatch of message by object path\n");
-+#endif
-+
-+ path = NULL;
-+ if (!dbus_message_get_path_decomposed (message, &path))
-+ {
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ _dbus_verbose ("unlock %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_unlock (tree->connection);
-+ }
-+
-+ _dbus_verbose ("No memory to get decomposed path\n");
-+
-+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
-+ }
-+
-+ if (path == NULL)
-+ {
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ _dbus_verbose ("unlock %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_unlock (tree->connection);
-+ }
-+
-+ _dbus_verbose ("No path field in message\n");
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+
-+ /* Find the deepest path that covers the path in the message */
-+ subtree = find_handler (tree, (const char**) path, &exact_match);
-+
-+ /* Build a list of all paths that cover the path in the message */
-+
-+ list = NULL;
-+
-+ while (subtree != NULL)
-+ {
-+ if (subtree->message_function != NULL && (exact_match || subtree->invoke_as_fallback))
-+ {
-+ _dbus_object_subtree_ref (subtree);
-+
-+ /* run deepest paths first */
-+ if (!_dbus_list_append (&list, subtree))
-+ {
-+ result = DBUS_HANDLER_RESULT_NEED_MEMORY;
-+ _dbus_object_subtree_unref (subtree);
-+ goto free_and_return;
-+ }
-+ }
-+
-+ exact_match = FALSE;
-+ subtree = subtree->parent;
-+ }
-+
-+ _dbus_verbose ("%d handlers in the path tree for this message\n",
-+ _dbus_list_get_length (&list));
-+
-+ /* Invoke each handler in the list */
-+
-+ result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+
-+ link = _dbus_list_get_first_link (&list);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&list, link);
-+ subtree = link->data;
-+
-+ /* message_function is NULL if we're unregistered
-+ * due to reentrancy
-+ */
-+ if (subtree->message_function)
-+ {
-+ DBusObjectPathMessageFunction message_function;
-+ void *user_data;
-+
-+ message_function = subtree->message_function;
-+ user_data = subtree->user_data;
-+
-+#if 0
-+ _dbus_verbose (" (invoking a handler)\n");
-+#endif
-+
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ _dbus_verbose ("unlock %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_unlock (tree->connection);
-+ }
-+
-+ /* FIXME you could unregister the subtree in another thread
-+ * before we invoke the callback, and I can't figure out a
-+ * good way to solve this.
-+ */
-+
-+ result = (* message_function) (tree->connection,
-+ message,
-+ user_data);
-+
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ _dbus_connection_lock (tree->connection);
-+
-+ if (result != DBUS_HANDLER_RESULT_NOT_YET_HANDLED)
-+ goto free_and_return;
-+ }
-+
-+ link = next;
-+ }
-+
-+ free_and_return:
-+
-+ if (result == DBUS_HANDLER_RESULT_NOT_YET_HANDLED)
-+ {
-+ /* This hardcoded default handler does a minimal Introspect()
-+ */
-+ result = handle_default_introspect_and_unlock (tree, message,
-+ (const char**) path);
-+ }
-+ else
-+ {
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ _dbus_verbose ("unlock %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_unlock (tree->connection);
-+ }
-+ }
-+
-+ while (list != NULL)
-+ {
-+ link = _dbus_list_get_first_link (&list);
-+ _dbus_object_subtree_unref (link->data);
-+ _dbus_list_remove_link (&list, link);
-+ }
-+
-+ dbus_free_string_array (path);
-+
-+ return result;
-+}
-+
-+/**
-+ * Looks up the data passed to _dbus_object_tree_register() for a
-+ * handler at the given path.
-+ *
-+ * @param tree the global object tree
-+ * @param path NULL-terminated array of path elements giving path to subtree
-+ * @returns the object's user_data or #NULL if none found
-+ */
-+void*
-+_dbus_object_tree_get_user_data_unlocked (DBusObjectTree *tree,
-+ const char **path)
-+{
-+ dbus_bool_t exact_match;
-+ DBusObjectSubtree *subtree;
-+
-+ _dbus_assert (tree != NULL);
-+ _dbus_assert (path != NULL);
-+
-+ /* Find the deepest path that covers the path in the message */
-+ subtree = find_handler (tree, (const char**) path, &exact_match);
-+
-+ if ((subtree == NULL) || !exact_match)
-+ {
-+ _dbus_verbose ("%s: No object at specified path found\n",
-+ _DBUS_FUNCTION_NAME);
-+ return NULL;
-+ }
-+
-+ return subtree->user_data;
-+}
-+
-+/**
-+ * Allocates a subtree object.
-+ *
-+ * @param name name to duplicate.
-+ * @returns newly-allocated subtree
-+ */
-+static DBusObjectSubtree*
-+allocate_subtree_object (const char *name)
-+{
-+ int len;
-+ DBusObjectSubtree *subtree;
-+ const size_t front_padding = _DBUS_STRUCT_OFFSET (DBusObjectSubtree, name);
-+
-+ _dbus_assert (name != NULL);
-+
-+ len = strlen (name);
-+
-+ subtree = dbus_malloc (front_padding + (len + 1));
-+
-+ if (subtree == NULL)
-+ return NULL;
-+
-+ memcpy (subtree->name, name, len + 1);
-+
-+ return subtree;
-+}
-+
-+static DBusObjectSubtree*
-+_dbus_object_subtree_new (const char *name,
-+ const DBusObjectPathVTable *vtable,
-+ void *user_data)
-+{
-+ DBusObjectSubtree *subtree;
-+
-+ subtree = allocate_subtree_object (name);
-+ if (subtree == NULL)
-+ goto oom;
-+
-+ _dbus_assert (name != NULL);
-+
-+ subtree->parent = NULL;
-+
-+ if (vtable)
-+ {
-+ subtree->message_function = vtable->message_function;
-+ subtree->unregister_function = vtable->unregister_function;
-+ }
-+ else
-+ {
-+ subtree->message_function = NULL;
-+ subtree->unregister_function = NULL;
-+ }
-+
-+ subtree->user_data = user_data;
-+ subtree->refcount.value = 1;
-+ subtree->subtrees = NULL;
-+ subtree->n_subtrees = 0;
-+ subtree->max_subtrees = 0;
-+ subtree->invoke_as_fallback = FALSE;
-+
-+ return subtree;
-+
-+ oom:
-+ if (subtree)
-+ {
-+ dbus_free (subtree);
-+ }
-+
-+ return NULL;
-+}
-+
-+static DBusObjectSubtree *
-+_dbus_object_subtree_ref (DBusObjectSubtree *subtree)
-+{
-+ _dbus_assert (subtree->refcount.value > 0);
-+ _dbus_atomic_inc (&subtree->refcount);
-+
-+ return subtree;
-+}
-+
-+static void
-+_dbus_object_subtree_unref (DBusObjectSubtree *subtree)
-+{
-+ _dbus_assert (subtree->refcount.value > 0);
-+
-+ if (_dbus_atomic_dec (&subtree->refcount) == 1)
-+ {
-+ _dbus_assert (subtree->unregister_function == NULL);
-+ _dbus_assert (subtree->message_function == NULL);
-+
-+ dbus_free (subtree->subtrees);
-+ dbus_free (subtree);
-+ }
-+}
-+
-+/**
-+ * Lists the registered fallback handlers and object path handlers at
-+ * the given parent_path. The returned array should be freed with
-+ * dbus_free_string_array().
-+ *
-+ * @param tree the object tree
-+ * @param parent_path the path to list the child handlers of
-+ * @param child_entries returns #NULL-terminated array of children
-+ * @returns #FALSE if no memory to allocate the child entries
-+ */
-+dbus_bool_t
-+_dbus_object_tree_list_registered_and_unlock (DBusObjectTree *tree,
-+ const char **parent_path,
-+ char ***child_entries)
-+{
-+ dbus_bool_t result;
-+
-+ result = _dbus_object_tree_list_registered_unlocked (tree,
-+ parent_path,
-+ child_entries);
-+
-+#ifdef DBUS_BUILD_TESTS
-+ if (tree->connection)
-+#endif
-+ {
-+ _dbus_verbose ("unlock %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_unlock (tree->connection);
-+ }
-+
-+ return result;
-+}
-+
-+
-+/** Set to 1 to get a bunch of spew about disassembling the path string */
-+#define VERBOSE_DECOMPOSE 0
-+
-+/**
-+ * Decompose an object path. A path of just "/" is
-+ * represented as an empty vector of strings.
-+ * The path need not be nul terminated.
-+ *
-+ * @param data the path data
-+ * @param len the length of the path string
-+ * @param path address to store new object path
-+ * @param path_len length of stored path
-+ */
-+dbus_bool_t
-+_dbus_decompose_path (const char* data,
-+ int len,
-+ char ***path,
-+ int *path_len)
-+{
-+ char **retval;
-+ int n_components;
-+ int i, j, comp;
-+
-+ _dbus_assert (data != NULL);
-+
-+#if VERBOSE_DECOMPOSE
-+ _dbus_verbose ("Decomposing path \"%s\"\n",
-+ data);
-+#endif
-+
-+ n_components = 0;
-+ if (len > 1) /* if path is not just "/" */
-+ {
-+ i = 0;
-+ while (i < len)
-+ {
-+ if (data[i] == '/')
-+ n_components += 1;
-+ ++i;
-+ }
-+ }
-+
-+ retval = dbus_new0 (char*, n_components + 1);
-+
-+ if (retval == NULL)
-+ return FALSE;
-+
-+ comp = 0;
-+ if (n_components == 0)
-+ i = 1;
-+ else
-+ i = 0;
-+ while (comp < n_components)
-+ {
-+ _dbus_assert (i < len);
-+
-+ if (data[i] == '/')
-+ ++i;
-+ j = i;
-+
-+ while (j < len && data[j] != '/')
-+ ++j;
-+
-+ /* Now [i, j) is the path component */
-+ _dbus_assert (i < j);
-+ _dbus_assert (data[i] != '/');
-+ _dbus_assert (j == len || data[j] == '/');
-+
-+#if VERBOSE_DECOMPOSE
-+ _dbus_verbose (" (component in [%d,%d))\n",
-+ i, j);
-+#endif
-+
-+ retval[comp] = _dbus_memdup (&data[i], j - i + 1);
-+ if (retval[comp] == NULL)
-+ {
-+ dbus_free_string_array (retval);
-+ return FALSE;
-+ }
-+ retval[comp][j-i] = '\0';
-+#if VERBOSE_DECOMPOSE
-+ _dbus_verbose (" (component %d = \"%s\")\n",
-+ comp, retval[comp]);
-+#endif
-+
-+ ++comp;
-+ i = j;
-+ }
-+ _dbus_assert (i == len);
-+
-+ *path = retval;
-+ if (path_len)
-+ *path_len = n_components;
-+
-+ return TRUE;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+static char*
-+flatten_path (const char **path)
-+{
-+ DBusString str;
-+ char *s;
-+
-+ if (!_dbus_string_init (&str))
-+ return NULL;
-+
-+ if (path[0] == NULL)
-+ {
-+ if (!_dbus_string_append_byte (&str, '/'))
-+ goto nomem;
-+ }
-+ else
-+ {
-+ int i;
-+
-+ i = 0;
-+ while (path[i])
-+ {
-+ if (!_dbus_string_append_byte (&str, '/'))
-+ goto nomem;
-+
-+ if (!_dbus_string_append (&str, path[i]))
-+ goto nomem;
-+
-+ ++i;
-+ }
-+ }
-+
-+ if (!_dbus_string_steal_data (&str, &s))
-+ goto nomem;
-+
-+ _dbus_string_free (&str);
-+
-+ return s;
-+
-+ nomem:
-+ _dbus_string_free (&str);
-+ return NULL;
-+}
-+
-+
-+typedef enum
-+{
-+ STR_EQUAL,
-+ STR_PREFIX,
-+ STR_DIFFERENT
-+} StrComparison;
-+
-+/* Returns TRUE if container is a parent of child
-+ */
-+static StrComparison
-+path_contains (const char **container,
-+ const char **child)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (child[i] != NULL)
-+ {
-+ int v;
-+
-+ if (container[i] == NULL)
-+ return STR_PREFIX; /* container ran out, child continues;
-+ * thus the container is a parent of the
-+ * child.
-+ */
-+
-+ _dbus_assert (container[i] != NULL);
-+ _dbus_assert (child[i] != NULL);
-+
-+ v = strcmp (container[i], child[i]);
-+
-+ if (v != 0)
-+ return STR_DIFFERENT; /* they overlap until here and then are different,
-+ * not overlapping
-+ */
-+
-+ ++i;
-+ }
-+
-+ /* Child ran out; if container also did, they are equal;
-+ * otherwise, the child is a parent of the container.
-+ */
-+ if (container[i] == NULL)
-+ return STR_EQUAL;
-+ else
-+ return STR_DIFFERENT;
-+}
-+
-+#if 0
-+static void
-+spew_subtree_recurse (DBusObjectSubtree *subtree,
-+ int indent)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i < indent)
-+ {
-+ _dbus_verbose (" ");
-+ ++i;
-+ }
-+
-+ _dbus_verbose ("%s (%d children)\n",
-+ subtree->name, subtree->n_subtrees);
-+
-+ i = 0;
-+ while (i < subtree->n_subtrees)
-+ {
-+ spew_subtree_recurse (subtree->subtrees[i], indent + 2);
-+
-+ ++i;
-+ }
-+}
-+
-+static void
-+spew_tree (DBusObjectTree *tree)
-+{
-+ spew_subtree_recurse (tree->root, 0);
-+}
-+#endif
-+
-+/**
-+ * Callback data used in tests
-+ */
-+typedef struct
-+{
-+ const char **path; /**< Path */
-+ dbus_bool_t handler_fallback; /**< true if the handler may be called as fallback */
-+ dbus_bool_t message_handled; /**< Gets set to true if message handler called */
-+ dbus_bool_t handler_unregistered; /**< gets set to true if handler is unregistered */
-+} TreeTestData;
-+
-+
-+static void
-+test_unregister_function (DBusConnection *connection,
-+ void *user_data)
-+{
-+ TreeTestData *ttd = user_data;
-+
-+ ttd->handler_unregistered = TRUE;
-+}
-+
-+static DBusHandlerResult
-+test_message_function (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ TreeTestData *ttd = user_data;
-+
-+ ttd->message_handled = TRUE;
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static dbus_bool_t
-+do_register (DBusObjectTree *tree,
-+ const char **path,
-+ dbus_bool_t fallback,
-+ int i,
-+ TreeTestData *tree_test_data)
-+{
-+ DBusObjectPathVTable vtable = { test_unregister_function,
-+ test_message_function, NULL };
-+
-+ tree_test_data[i].message_handled = FALSE;
-+ tree_test_data[i].handler_unregistered = FALSE;
-+ tree_test_data[i].handler_fallback = fallback;
-+ tree_test_data[i].path = path;
-+
-+ if (!_dbus_object_tree_register (tree, fallback, path,
-+ &vtable,
-+ &tree_test_data[i]))
-+ return FALSE;
-+
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path) ==
-+ &tree_test_data[i]);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+do_test_dispatch (DBusObjectTree *tree,
-+ const char **path,
-+ int i,
-+ TreeTestData *tree_test_data,
-+ int n_test_data)
-+{
-+ DBusMessage *message;
-+ int j;
-+ DBusHandlerResult result;
-+ char *flat;
-+
-+ message = NULL;
-+
-+ flat = flatten_path (path);
-+ if (flat == NULL)
-+ goto oom;
-+
-+ message = dbus_message_new_method_call (NULL,
-+ flat,
-+ "org.freedesktop.TestInterface",
-+ "Foo");
-+ dbus_free (flat);
-+ if (message == NULL)
-+ goto oom;
-+
-+ j = 0;
-+ while (j < n_test_data)
-+ {
-+ tree_test_data[j].message_handled = FALSE;
-+ ++j;
-+ }
-+
-+ result = _dbus_object_tree_dispatch_and_unlock (tree, message);
-+ if (result == DBUS_HANDLER_RESULT_NEED_MEMORY)
-+ goto oom;
-+
-+ _dbus_assert (tree_test_data[i].message_handled);
-+
-+ j = 0;
-+ while (j < n_test_data)
-+ {
-+ if (tree_test_data[j].message_handled)
-+ {
-+ if (tree_test_data[j].handler_fallback)
-+ _dbus_assert (path_contains (tree_test_data[j].path,
-+ path) != STR_DIFFERENT);
-+ else
-+ _dbus_assert (path_contains (tree_test_data[j].path, path) == STR_EQUAL);
-+ }
-+ else
-+ {
-+ if (tree_test_data[j].handler_fallback)
-+ _dbus_assert (path_contains (tree_test_data[j].path,
-+ path) == STR_DIFFERENT);
-+ else
-+ _dbus_assert (path_contains (tree_test_data[j].path, path) != STR_EQUAL);
-+ }
-+
-+ ++j;
-+ }
-+
-+ dbus_message_unref (message);
-+
-+ return TRUE;
-+
-+ oom:
-+ if (message)
-+ dbus_message_unref (message);
-+ return FALSE;
-+}
-+
-+static size_t
-+string_array_length (const char **array)
-+{
-+ size_t i;
-+ for (i = 0; array[i]; i++) ;
-+ return i;
-+}
-+
-+typedef struct
-+{
-+ const char *path;
-+ const char *result[20];
-+} DecomposePathTest;
-+
-+static DecomposePathTest decompose_tests[] = {
-+ { "/foo", { "foo", NULL } },
-+ { "/foo/bar", { "foo", "bar", NULL } },
-+ { "/", { NULL } },
-+ { "/a/b", { "a", "b", NULL } },
-+ { "/a/b/c", { "a", "b", "c", NULL } },
-+ { "/a/b/c/d", { "a", "b", "c", "d", NULL } },
-+ { "/foo/bar/q", { "foo", "bar", "q", NULL } },
-+ { "/foo/bar/this/is/longer", { "foo", "bar", "this", "is", "longer", NULL } }
-+};
-+
-+static dbus_bool_t
-+run_decompose_tests (void)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (decompose_tests))
-+ {
-+ char **result;
-+ int result_len;
-+ int expected_len;
-+
-+ if (!_dbus_decompose_path (decompose_tests[i].path,
-+ strlen (decompose_tests[i].path),
-+ &result, &result_len))
-+ return FALSE;
-+
-+ expected_len = string_array_length (decompose_tests[i].result);
-+
-+ if (result_len != (int) string_array_length ((const char**)result) ||
-+ expected_len != result_len ||
-+ path_contains (decompose_tests[i].result,
-+ (const char**) result) != STR_EQUAL)
-+ {
-+ int real_len = string_array_length ((const char**)result);
-+ _dbus_warn ("Expected decompose of %s to have len %d, returned %d, appears to have %d\n",
-+ decompose_tests[i].path, expected_len, result_len,
-+ real_len);
-+ _dbus_warn ("Decompose resulted in elements: { ");
-+ i = 0;
-+ while (i < real_len)
-+ {
-+ _dbus_warn ("\"%s\"%s", result[i],
-+ (i + 1) == real_len ? "" : ", ");
-+ ++i;
-+ }
-+ _dbus_warn ("}\n");
-+ _dbus_assert_not_reached ("path decompose failed\n");
-+ }
-+
-+ dbus_free_string_array (result);
-+
-+ ++i;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+object_tree_test_iteration (void *data)
-+{
-+ const char *path0[] = { NULL };
-+ const char *path1[] = { "foo", NULL };
-+ const char *path2[] = { "foo", "bar", NULL };
-+ const char *path3[] = { "foo", "bar", "baz", NULL };
-+ const char *path4[] = { "foo", "bar", "boo", NULL };
-+ const char *path5[] = { "blah", NULL };
-+ const char *path6[] = { "blah", "boof", NULL };
-+ const char *path7[] = { "blah", "boof", "this", "is", "really", "long", NULL };
-+ const char *path8[] = { "childless", NULL };
-+ DBusObjectTree *tree;
-+ TreeTestData tree_test_data[9];
-+ int i;
-+ dbus_bool_t exact_match;
-+
-+ if (!run_decompose_tests ())
-+ return FALSE;
-+
-+ tree = NULL;
-+
-+ tree = _dbus_object_tree_new (NULL);
-+ if (tree == NULL)
-+ goto out;
-+
-+ if (!do_register (tree, path0, TRUE, 0, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ _dbus_assert (find_handler (tree, path0, &exact_match) && exact_match);
-+ _dbus_assert (find_handler (tree, path1, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path2, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path3, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path4, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path5, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path6, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path7, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path8, &exact_match) == tree->root && !exact_match);
-+
-+ if (!do_register (tree, path1, TRUE, 1, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path0, NULL));
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ _dbus_assert (find_handler (tree, path0, &exact_match) && exact_match);
-+ _dbus_assert (find_handler (tree, path1, &exact_match) && exact_match);
-+ _dbus_assert (find_handler (tree, path2, &exact_match) && !exact_match);
-+ _dbus_assert (find_handler (tree, path3, &exact_match) && !exact_match);
-+ _dbus_assert (find_handler (tree, path4, &exact_match) && !exact_match);
-+ _dbus_assert (find_handler (tree, path5, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path6, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path7, &exact_match) == tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path8, &exact_match) == tree->root && !exact_match);
-+
-+ if (!do_register (tree, path2, TRUE, 2, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ if (!do_register (tree, path3, TRUE, 3, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path0, NULL));
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ if (!do_register (tree, path4, TRUE, 4, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path0, NULL));
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ if (!do_register (tree, path5, TRUE, 5, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path0, NULL));
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ _dbus_assert (find_handler (tree, path0, &exact_match) == tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path1, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path2, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path3, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path4, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path5, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path6, &exact_match) != tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path7, &exact_match) != tree->root && !exact_match);
-+ _dbus_assert (find_handler (tree, path8, &exact_match) == tree->root && !exact_match);
-+
-+ if (!do_register (tree, path6, TRUE, 6, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path0, NULL));
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ if (!do_register (tree, path7, TRUE, 7, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path0, NULL));
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ if (!do_register (tree, path8, TRUE, 8, tree_test_data))
-+ goto out;
-+
-+ _dbus_assert (find_subtree (tree, path0, NULL));
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_assert (find_handler (tree, path0, &exact_match) == tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path1, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path2, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path3, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path4, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path5, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path6, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path7, &exact_match) != tree->root && exact_match);
-+ _dbus_assert (find_handler (tree, path8, &exact_match) != tree->root && exact_match);
-+
-+ /* test the list_registered function */
-+
-+ {
-+ const char *root[] = { NULL };
-+ char **child_entries;
-+ int nb;
-+
-+ _dbus_object_tree_list_registered_unlocked (tree, path1, &child_entries);
-+ if (child_entries != NULL)
-+ {
-+ nb = string_array_length ((const char**)child_entries);
-+ _dbus_assert (nb == 1);
-+ dbus_free_string_array (child_entries);
-+ }
-+
-+ _dbus_object_tree_list_registered_unlocked (tree, path2, &child_entries);
-+ if (child_entries != NULL)
-+ {
-+ nb = string_array_length ((const char**)child_entries);
-+ _dbus_assert (nb == 2);
-+ dbus_free_string_array (child_entries);
-+ }
-+
-+ _dbus_object_tree_list_registered_unlocked (tree, path8, &child_entries);
-+ if (child_entries != NULL)
-+ {
-+ nb = string_array_length ((const char**)child_entries);
-+ _dbus_assert (nb == 0);
-+ dbus_free_string_array (child_entries);
-+ }
-+
-+ _dbus_object_tree_list_registered_unlocked (tree, root, &child_entries);
-+ if (child_entries != NULL)
-+ {
-+ nb = string_array_length ((const char**)child_entries);
-+ _dbus_assert (nb == 3);
-+ dbus_free_string_array (child_entries);
-+ }
-+ }
-+
-+ /* Check that destroying tree calls unregister funcs */
-+ _dbus_object_tree_unref (tree);
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (tree_test_data))
-+ {
-+ _dbus_assert (tree_test_data[i].handler_unregistered);
-+ _dbus_assert (!tree_test_data[i].message_handled);
-+ ++i;
-+ }
-+
-+ /* Now start again and try the individual unregister function */
-+ tree = _dbus_object_tree_new (NULL);
-+ if (tree == NULL)
-+ goto out;
-+
-+ if (!do_register (tree, path0, TRUE, 0, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path1, TRUE, 1, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path2, TRUE, 2, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path3, TRUE, 3, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path4, TRUE, 4, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path5, TRUE, 5, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path6, TRUE, 6, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path7, TRUE, 7, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path8, TRUE, 8, tree_test_data))
-+ goto out;
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path0);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path0) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path1);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path1) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path2);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path2) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path3);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path3) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path4);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path4) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path5);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path5) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path6);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path6) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path7);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path7) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (find_subtree (tree, path8, NULL));
-+
-+ _dbus_object_tree_unregister_and_unlock (tree, path8);
-+ _dbus_assert (_dbus_object_tree_get_user_data_unlocked (tree, path8) == NULL);
-+
-+ _dbus_assert (!find_subtree (tree, path0, NULL));
-+ _dbus_assert (!find_subtree (tree, path1, NULL));
-+ _dbus_assert (!find_subtree (tree, path2, NULL));
-+ _dbus_assert (!find_subtree (tree, path3, NULL));
-+ _dbus_assert (!find_subtree (tree, path4, NULL));
-+ _dbus_assert (!find_subtree (tree, path5, NULL));
-+ _dbus_assert (!find_subtree (tree, path6, NULL));
-+ _dbus_assert (!find_subtree (tree, path7, NULL));
-+ _dbus_assert (!find_subtree (tree, path8, NULL));
-+
-+ i = 0;
-+ while (i < (int) _DBUS_N_ELEMENTS (tree_test_data))
-+ {
-+ _dbus_assert (tree_test_data[i].handler_unregistered);
-+ _dbus_assert (!tree_test_data[i].message_handled);
-+ ++i;
-+ }
-+
-+ /* Register it all again, and test dispatch */
-+
-+ if (!do_register (tree, path0, TRUE, 0, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path1, FALSE, 1, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path2, TRUE, 2, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path3, TRUE, 3, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path4, TRUE, 4, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path5, TRUE, 5, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path6, FALSE, 6, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path7, TRUE, 7, tree_test_data))
-+ goto out;
-+ if (!do_register (tree, path8, TRUE, 8, tree_test_data))
-+ goto out;
-+
-+#if 0
-+ spew_tree (tree);
-+#endif
-+
-+ if (!do_test_dispatch (tree, path0, 0, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+ if (!do_test_dispatch (tree, path1, 1, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+ if (!do_test_dispatch (tree, path2, 2, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+ if (!do_test_dispatch (tree, path3, 3, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+ if (!do_test_dispatch (tree, path4, 4, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+ if (!do_test_dispatch (tree, path5, 5, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+ if (!do_test_dispatch (tree, path6, 6, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+ if (!do_test_dispatch (tree, path7, 7, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+ if (!do_test_dispatch (tree, path8, 8, tree_test_data, _DBUS_N_ELEMENTS (tree_test_data)))
-+ goto out;
-+
-+ out:
-+ if (tree)
-+ {
-+ /* test ref */
-+ _dbus_object_tree_ref (tree);
-+ _dbus_object_tree_unref (tree);
-+ _dbus_object_tree_unref (tree);
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * @ingroup DBusObjectTree
-+ * Unit test for DBusObjectTree
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_object_tree_test (void)
-+{
-+ _dbus_test_oom_handling ("object tree",
-+ object_tree_test_iteration,
-+ NULL);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-object-tree.h dbus-0.61/dbus/dbus-object-tree.h
---- dbus-0.61.orig/dbus/dbus-object-tree.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-object-tree.h 2005-04-24 16:04:16.000000000 +0200
-@@ -0,0 +1,61 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-object-tree.h DBusObjectTree (internals of DBusConnection)
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_OBJECT_TREE_H
-+#define DBUS_OBJECT_TREE_H
-+
-+#include <dbus/dbus-connection.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusObjectTree DBusObjectTree;
-+
-+DBusObjectTree* _dbus_object_tree_new (DBusConnection *connection);
-+DBusObjectTree* _dbus_object_tree_ref (DBusObjectTree *tree);
-+void _dbus_object_tree_unref (DBusObjectTree *tree);
-+
-+dbus_bool_t _dbus_object_tree_register (DBusObjectTree *tree,
-+ dbus_bool_t fallback,
-+ const char **path,
-+ const DBusObjectPathVTable *vtable,
-+ void *user_data);
-+void _dbus_object_tree_unregister_and_unlock (DBusObjectTree *tree,
-+ const char **path);
-+DBusHandlerResult _dbus_object_tree_dispatch_and_unlock (DBusObjectTree *tree,
-+ DBusMessage *message);
-+void* _dbus_object_tree_get_user_data_unlocked (DBusObjectTree *tree,
-+ const char **path);
-+void _dbus_object_tree_free_all_unlocked (DBusObjectTree *tree);
-+
-+
-+dbus_bool_t _dbus_object_tree_list_registered_and_unlock (DBusObjectTree *tree,
-+ const char **parent_path,
-+ char ***child_entries);
-+
-+dbus_bool_t _dbus_decompose_path (const char *data,
-+ int len,
-+ char ***path,
-+ int *path_len);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_OBJECT_TREE_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-pending-call.c dbus-0.61/dbus/dbus-pending-call.c
---- dbus-0.61.orig/dbus/dbus-pending-call.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-pending-call.c 2005-02-16 05:37:27.000000000 +0100
-@@ -0,0 +1,436 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-pending-call.c Object representing a call in progress.
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-connection-internal.h"
-+#include "dbus-pending-call.h"
-+#include "dbus-list.h"
-+#include "dbus-threads.h"
-+#include "dbus-test.h"
-+
-+/**
-+ * @defgroup DBusPendingCallInternals DBusPendingCall implementation details
-+ * @ingroup DBusInternals
-+ * @brief DBusPendingCall private implementation details.
-+ *
-+ * The guts of DBusPendingCall and its methods.
-+ *
-+ * @{
-+ */
-+
-+static dbus_int32_t notify_user_data_slot = -1;
-+
-+/**
-+ * Creates a new pending reply object.
-+ *
-+ * @param connection connection where reply will arrive
-+ * @param timeout_milliseconds length of timeout, -1 for default
-+ * @param timeout_handler timeout handler, takes pending call as data
-+ * @returns a new #DBusPendingCall or #NULL if no memory.
-+ */
-+DBusPendingCall*
-+_dbus_pending_call_new (DBusConnection *connection,
-+ int timeout_milliseconds,
-+ DBusTimeoutHandler timeout_handler)
-+{
-+ DBusPendingCall *pending;
-+ DBusTimeout *timeout;
-+
-+ _dbus_assert (timeout_milliseconds >= 0 || timeout_milliseconds == -1);
-+
-+ if (timeout_milliseconds == -1)
-+ timeout_milliseconds = _DBUS_DEFAULT_TIMEOUT_VALUE;
-+
-+ /* it would probably seem logical to pass in _DBUS_INT_MAX for
-+ * infinite timeout, but then math in
-+ * _dbus_connection_block_for_reply would get all overflow-prone, so
-+ * smack that down.
-+ */
-+ if (timeout_milliseconds > _DBUS_ONE_HOUR_IN_MILLISECONDS * 6)
-+ timeout_milliseconds = _DBUS_ONE_HOUR_IN_MILLISECONDS * 6;
-+
-+ if (!dbus_pending_call_allocate_data_slot (¬ify_user_data_slot))
-+ return NULL;
-+
-+ pending = dbus_new0 (DBusPendingCall, 1);
-+
-+ if (pending == NULL)
-+ {
-+ dbus_pending_call_free_data_slot (¬ify_user_data_slot);
-+ return NULL;
-+ }
-+
-+ timeout = _dbus_timeout_new (timeout_milliseconds,
-+ timeout_handler,
-+ pending, NULL);
-+
-+ if (timeout == NULL)
-+ {
-+ dbus_pending_call_free_data_slot (¬ify_user_data_slot);
-+ dbus_free (pending);
-+ return NULL;
-+ }
-+
-+ pending->refcount.value = 1;
-+ pending->connection = connection;
-+ pending->timeout = timeout;
-+
-+ _dbus_data_slot_list_init (&pending->slot_list);
-+
-+ return pending;
-+}
-+
-+/**
-+ * Calls notifier function for the pending call
-+ * and sets the call to completed.
-+ *
-+ * @param pending the pending call
-+ *
-+ */
-+void
-+_dbus_pending_call_notify (DBusPendingCall *pending)
-+{
-+ _dbus_assert (!pending->completed);
-+
-+ pending->completed = TRUE;
-+
-+ if (pending->function)
-+ {
-+ void *user_data;
-+ user_data = dbus_pending_call_get_data (pending,
-+ notify_user_data_slot);
-+
-+ (* pending->function) (pending, user_data);
-+ }
-+}
-+
-+/** @} */
-+
-+/**
-+ * @defgroup DBusPendingCall DBusPendingCall
-+ * @ingroup DBus
-+ * @brief Pending reply to a method call message
-+ *
-+ * A DBusPendingCall is an object representing an
-+ * expected reply. A #DBusPendingCall can be created
-+ * when you send a message that should have a reply.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @typedef DBusPendingCall
-+ *
-+ * Opaque data type representing a message pending.
-+ */
-+
-+/**
-+ * Increments the reference count on a pending call.
-+ *
-+ * @param pending the pending call object
-+ * @returns the pending call object
-+ */
-+DBusPendingCall *
-+dbus_pending_call_ref (DBusPendingCall *pending)
-+{
-+ _dbus_return_val_if_fail (pending != NULL, NULL);
-+
-+ _dbus_atomic_inc (&pending->refcount);
-+
-+ return pending;
-+}
-+
-+/**
-+ * Decrements the reference count on a pending call,
-+ * freeing it if the count reaches 0.
-+ *
-+ * @param pending the pending call object
-+ */
-+void
-+dbus_pending_call_unref (DBusPendingCall *pending)
-+{
-+ dbus_bool_t last_unref;
-+
-+ _dbus_return_if_fail (pending != NULL);
-+
-+ last_unref = (_dbus_atomic_dec (&pending->refcount) == 1);
-+
-+ if (last_unref)
-+ {
-+ /* If we get here, we should be already detached
-+ * from the connection, or never attached.
-+ */
-+ _dbus_assert (pending->connection == NULL);
-+ _dbus_assert (!pending->timeout_added);
-+
-+ /* this assumes we aren't holding connection lock... */
-+ _dbus_data_slot_list_free (&pending->slot_list);
-+
-+ if (pending->timeout != NULL)
-+ _dbus_timeout_unref (pending->timeout);
-+
-+ if (pending->timeout_link)
-+ {
-+ dbus_message_unref ((DBusMessage *)pending->timeout_link->data);
-+ _dbus_list_free_link (pending->timeout_link);
-+ pending->timeout_link = NULL;
-+ }
-+
-+ if (pending->reply)
-+ {
-+ dbus_message_unref (pending->reply);
-+ pending->reply = NULL;
-+ }
-+
-+ dbus_free (pending);
-+
-+ dbus_pending_call_free_data_slot (¬ify_user_data_slot);
-+ }
-+}
-+
-+/**
-+ * Sets a notification function to be called when the reply is
-+ * received or the pending call times out.
-+ *
-+ * @param pending the pending call
-+ * @param function notifier function
-+ * @param user_data data to pass to notifier function
-+ * @param free_user_data function to free the user data
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+dbus_pending_call_set_notify (DBusPendingCall *pending,
-+ DBusPendingCallNotifyFunction function,
-+ void *user_data,
-+ DBusFreeFunction free_user_data)
-+{
-+ _dbus_return_val_if_fail (pending != NULL, FALSE);
-+
-+ /* could invoke application code! */
-+ if (!dbus_pending_call_set_data (pending, notify_user_data_slot,
-+ user_data, free_user_data))
-+ return FALSE;
-+
-+ pending->function = function;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Cancels the pending call, such that any reply or error received
-+ * will just be ignored. Drops the dbus library's internal reference
-+ * to the #DBusPendingCall so will free the call if nobody else is
-+ * holding a reference. However you usually get a reference
-+ * from dbus_connection_send() so probably your app owns a ref also.
-+ *
-+ * @param pending the pending call
-+ */
-+void
-+dbus_pending_call_cancel (DBusPendingCall *pending)
-+{
-+ if (pending->connection)
-+ _dbus_connection_remove_pending_call (pending->connection,
-+ pending);
-+}
-+
-+/**
-+ * Checks whether the pending call has received a reply
-+ * yet, or not.
-+ *
-+ * @todo not thread safe? I guess it has to lock though it sucks
-+ *
-+ * @param pending the pending call
-+ * @returns #TRUE if a reply has been received */
-+dbus_bool_t
-+dbus_pending_call_get_completed (DBusPendingCall *pending)
-+{
-+ return pending->completed;
-+}
-+
-+/**
-+ * Gets the reply, or returns #NULL if none has been received
-+ * yet. Ownership of the reply message passes to the caller. This
-+ * function can only be called once per pending call, since the reply
-+ * message is tranferred to the caller.
-+ *
-+ * @param pending the pending call
-+ * @returns the reply message or #NULL.
-+ */
-+DBusMessage*
-+dbus_pending_call_steal_reply (DBusPendingCall *pending)
-+{
-+ DBusMessage *message;
-+
-+ _dbus_return_val_if_fail (pending->completed, NULL);
-+ _dbus_return_val_if_fail (pending->reply != NULL, NULL);
-+
-+ message = pending->reply;
-+ pending->reply = NULL;
-+
-+ return message;
-+}
-+
-+/**
-+ * Block until the pending call is completed. The blocking is as with
-+ * dbus_connection_send_with_reply_and_block(); it does not enter the
-+ * main loop or process other messages, it simply waits for the reply
-+ * in question.
-+ *
-+ * If the pending call is already completed, this function returns
-+ * immediately.
-+ *
-+ * @todo when you start blocking, the timeout is reset, but it should
-+ * really only use time remaining since the pending call was created.
-+ *
-+ * @param pending the pending call
-+ */
-+void
-+dbus_pending_call_block (DBusPendingCall *pending)
-+{
-+ _dbus_connection_block_pending_call (pending);
-+}
-+
-+static DBusDataSlotAllocator slot_allocator;
-+_DBUS_DEFINE_GLOBAL_LOCK (pending_call_slots);
-+
-+/**
-+ * Allocates an integer ID to be used for storing application-specific
-+ * data on any DBusPendingCall. The allocated ID may then be used
-+ * with dbus_pending_call_set_data() and dbus_pending_call_get_data().
-+ * The passed-in slot must be initialized to -1, and is filled in
-+ * with the slot ID. If the passed-in slot is not -1, it's assumed
-+ * to be already allocated, and its refcount is incremented.
-+ *
-+ * The allocated slot is global, i.e. all DBusPendingCall objects will
-+ * have a slot with the given integer ID reserved.
-+ *
-+ * @param slot_p address of a global variable storing the slot
-+ * @returns #FALSE on failure (no memory)
-+ */
-+dbus_bool_t
-+dbus_pending_call_allocate_data_slot (dbus_int32_t *slot_p)
-+{
-+ return _dbus_data_slot_allocator_alloc (&slot_allocator,
-+ _DBUS_LOCK_NAME (pending_call_slots),
-+ slot_p);
-+}
-+
-+/**
-+ * Deallocates a global ID for #DBusPendingCall data slots.
-+ * dbus_pending_call_get_data() and dbus_pending_call_set_data() may
-+ * no longer be used with this slot. Existing data stored on existing
-+ * DBusPendingCall objects will be freed when the #DBusPendingCall is
-+ * finalized, but may not be retrieved (and may only be replaced if
-+ * someone else reallocates the slot). When the refcount on the
-+ * passed-in slot reaches 0, it is set to -1.
-+ *
-+ * @param slot_p address storing the slot to deallocate
-+ */
-+void
-+dbus_pending_call_free_data_slot (dbus_int32_t *slot_p)
-+{
-+ _dbus_return_if_fail (*slot_p >= 0);
-+
-+ _dbus_data_slot_allocator_free (&slot_allocator, slot_p);
-+}
-+
-+/**
-+ * Stores a pointer on a #DBusPendingCall, along
-+ * with an optional function to be used for freeing
-+ * the data when the data is set again, or when
-+ * the pending call is finalized. The slot number
-+ * must have been allocated with dbus_pending_call_allocate_data_slot().
-+ *
-+ * @param pending the pending_call
-+ * @param slot the slot number
-+ * @param data the data to store
-+ * @param free_data_func finalizer function for the data
-+ * @returns #TRUE if there was enough memory to store the data
-+ */
-+dbus_bool_t
-+dbus_pending_call_set_data (DBusPendingCall *pending,
-+ dbus_int32_t slot,
-+ void *data,
-+ DBusFreeFunction free_data_func)
-+{
-+ DBusFreeFunction old_free_func;
-+ void *old_data;
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (pending != NULL, FALSE);
-+ _dbus_return_val_if_fail (slot >= 0, FALSE);
-+
-+ retval = _dbus_data_slot_list_set (&slot_allocator,
-+ &pending->slot_list,
-+ slot, data, free_data_func,
-+ &old_free_func, &old_data);
-+
-+ if (retval)
-+ {
-+ if (old_free_func)
-+ (* old_free_func) (old_data);
-+ }
-+
-+ return retval;
-+}
-+
-+/**
-+ * Retrieves data previously set with dbus_pending_call_set_data().
-+ * The slot must still be allocated (must not have been freed).
-+ *
-+ * @param pending the pending_call
-+ * @param slot the slot to get data from
-+ * @returns the data, or #NULL if not found
-+ */
-+void*
-+dbus_pending_call_get_data (DBusPendingCall *pending,
-+ dbus_int32_t slot)
-+{
-+ void *res;
-+
-+ _dbus_return_val_if_fail (pending != NULL, NULL);
-+
-+ res = _dbus_data_slot_list_get (&slot_allocator,
-+ &pending->slot_list,
-+ slot);
-+
-+ return res;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+/**
-+ * @ingroup DBusPendingCallInternals
-+ * Unit test for DBusPendingCall.
-+ *
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_pending_call_test (const char *test_data_dir)
-+{
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-pending-call.h dbus-0.61/dbus/dbus-pending-call.h
---- dbus-0.61.orig/dbus/dbus-pending-call.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-pending-call.h 2005-02-16 05:37:27.000000000 +0100
-@@ -0,0 +1,58 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-pending-call.h Object representing a call in progress.
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_PENDING_CALL_H
-+#define DBUS_PENDING_CALL_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-connection.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+DBusPendingCall* dbus_pending_call_ref (DBusPendingCall *pending);
-+void dbus_pending_call_unref (DBusPendingCall *pending);
-+dbus_bool_t dbus_pending_call_set_notify (DBusPendingCall *pending,
-+ DBusPendingCallNotifyFunction function,
-+ void *user_data,
-+ DBusFreeFunction free_user_data);
-+void dbus_pending_call_cancel (DBusPendingCall *pending);
-+dbus_bool_t dbus_pending_call_get_completed (DBusPendingCall *pending);
-+DBusMessage* dbus_pending_call_steal_reply (DBusPendingCall *pending);
-+void dbus_pending_call_block (DBusPendingCall *pending);
-+
-+dbus_bool_t dbus_pending_call_allocate_data_slot (dbus_int32_t *slot_p);
-+void dbus_pending_call_free_data_slot (dbus_int32_t *slot_p);
-+dbus_bool_t dbus_pending_call_set_data (DBusPendingCall *pending,
-+ dbus_int32_t slot,
-+ void *data,
-+ DBusFreeFunction free_data_func);
-+void* dbus_pending_call_get_data (DBusPendingCall *pending,
-+ dbus_int32_t slot);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_PENDING_CALL_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-protocol.h dbus-0.61/dbus/dbus-protocol.h
---- dbus-0.61.orig/dbus/dbus-protocol.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-protocol.h 2005-12-20 00:58:22.000000000 +0100
-@@ -0,0 +1,269 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-protocol.h D-Bus protocol constants
-+ *
-+ * Copyright (C) 2002, 2003 CodeFactory AB
-+ * Copyright (C) 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_PROTOCOL_H
-+#define DBUS_PROTOCOL_H
-+
-+/* Don't include anything in here from anywhere else. It's
-+ * intended for use by any random library.
-+ */
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+/* Normally docs are in .c files, but there isn't a .c file for this. */
-+/**
-+ * @defgroup DBusProtocol Protocol constants
-+ * @ingroup DBus
-+ *
-+ * D-Bus protocol constants
-+ *
-+ * @brief Defines constants which are part of the D-Bus protocol
-+ * @{
-+ */
-+
-+
-+/* Message byte order */
-+#define DBUS_LITTLE_ENDIAN ('l') /**< LSB first */
-+#define DBUS_BIG_ENDIAN ('B') /**< MSB first */
-+
-+/** Protocol version */
-+#define DBUS_MAJOR_PROTOCOL_VERSION 1
-+
-+/** Never a legitimate type */
-+#define DBUS_TYPE_INVALID ((int) '\0')
-+#define DBUS_TYPE_INVALID_AS_STRING "\0"
-+
-+/* Primitive types */
-+#define DBUS_TYPE_BYTE ((int) 'y')
-+#define DBUS_TYPE_BYTE_AS_STRING "y"
-+#define DBUS_TYPE_BOOLEAN ((int) 'b')
-+#define DBUS_TYPE_BOOLEAN_AS_STRING "b"
-+#define DBUS_TYPE_INT16 ((int) 'n')
-+#define DBUS_TYPE_INT16_AS_STRING "n"
-+#define DBUS_TYPE_UINT16 ((int) 'q')
-+#define DBUS_TYPE_UINT16_AS_STRING "q"
-+#define DBUS_TYPE_INT32 ((int) 'i')
-+#define DBUS_TYPE_INT32_AS_STRING "i"
-+#define DBUS_TYPE_UINT32 ((int) 'u')
-+#define DBUS_TYPE_UINT32_AS_STRING "u"
-+#define DBUS_TYPE_INT64 ((int) 'x')
-+#define DBUS_TYPE_INT64_AS_STRING "x"
-+#define DBUS_TYPE_UINT64 ((int) 't')
-+#define DBUS_TYPE_UINT64_AS_STRING "t"
-+#define DBUS_TYPE_DOUBLE ((int) 'd')
-+#define DBUS_TYPE_DOUBLE_AS_STRING "d"
-+#define DBUS_TYPE_STRING ((int) 's')
-+#define DBUS_TYPE_STRING_AS_STRING "s"
-+#define DBUS_TYPE_OBJECT_PATH ((int) 'o')
-+#define DBUS_TYPE_OBJECT_PATH_AS_STRING "o"
-+#define DBUS_TYPE_SIGNATURE ((int) 'g')
-+#define DBUS_TYPE_SIGNATURE_AS_STRING "g"
-+
-+/* Compound types */
-+#define DBUS_TYPE_ARRAY ((int) 'a')
-+#define DBUS_TYPE_ARRAY_AS_STRING "a"
-+#define DBUS_TYPE_VARIANT ((int) 'v')
-+#define DBUS_TYPE_VARIANT_AS_STRING "v"
-+
-+/** STRUCT and DICT_ENTRY are sort of special since their codes can't
-+ * appear in a type string, instead
-+ * DBUS_STRUCT_BEGIN_CHAR/DBUS_DICT_ENTRY_BEGIN_CHAR have to appear
-+ */
-+#define DBUS_TYPE_STRUCT ((int) 'r')
-+#define DBUS_TYPE_STRUCT_AS_STRING "r"
-+#define DBUS_TYPE_DICT_ENTRY ((int) 'e')
-+#define DBUS_TYPE_DICT_ENTRY_AS_STRING "e"
-+
-+/** Does not count INVALID */
-+#define DBUS_NUMBER_OF_TYPES (16)
-+
-+/* characters other than typecodes that appear in type signatures */
-+#define DBUS_STRUCT_BEGIN_CHAR ((int) '(')
-+#define DBUS_STRUCT_BEGIN_CHAR_AS_STRING "("
-+#define DBUS_STRUCT_END_CHAR ((int) ')')
-+#define DBUS_STRUCT_END_CHAR_AS_STRING ")"
-+#define DBUS_DICT_ENTRY_BEGIN_CHAR ((int) '{')
-+#define DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING "{"
-+#define DBUS_DICT_ENTRY_END_CHAR ((int) '}')
-+#define DBUS_DICT_ENTRY_END_CHAR_AS_STRING "}"
-+
-+/** Max length in bytes of a bus name, interface, or member (not object
-+ * path, paths are unlimited). This is limited because lots of stuff
-+ * is O(n) in this number, plus it would be obnoxious to type in a
-+ * paragraph-long method name so most likely something like that would
-+ * be an exploit.
-+ */
-+#define DBUS_MAXIMUM_NAME_LENGTH 255
-+
-+/** This one is 255 so it fits in a byte */
-+#define DBUS_MAXIMUM_SIGNATURE_LENGTH 255
-+
-+/** Max length of a match rule string; to keep people from hosing the
-+ * daemon with some huge rule
-+ */
-+#define DBUS_MAXIMUM_MATCH_RULE_LENGTH 1024
-+
-+/** Max arg number you can match on in a match rule, e.g.
-+ * arg0='hello' is OK, arg3489720987='hello' is not
-+ */
-+#define DBUS_MAXIMUM_MATCH_RULE_ARG_NUMBER 63
-+
-+/** Max length of a marshaled array in bytes (64M, 2^26) We use signed
-+ * int for lengths so must be INT_MAX or less. We need something a
-+ * bit smaller than INT_MAX because the array is inside a message with
-+ * header info, etc. so an INT_MAX array wouldn't allow the message
-+ * overhead. The 64M number is an attempt at a larger number than
-+ * we'd reasonably ever use, but small enough that your bus would chew
-+ * through it fairly quickly without locking up forever. If you have
-+ * data that's likely to be larger than this, you should probably be
-+ * sending it in multiple incremental messages anyhow.
-+ */
-+#define DBUS_MAXIMUM_ARRAY_LENGTH (67108864)
-+/** Number of bits you need in an unsigned to store the max array size */
-+#define DBUS_MAXIMUM_ARRAY_LENGTH_BITS 26
-+
-+/** The maximum total message size including header and body; similar
-+ * rationale to max array size.
-+ */
-+#define DBUS_MAXIMUM_MESSAGE_LENGTH (DBUS_MAXIMUM_ARRAY_LENGTH * 2)
-+/** Number of bits you need in an unsigned to store the max message size */
-+#define DBUS_MAXIMUM_MESSAGE_LENGTH_BITS 27
-+
-+/** Depth of recursion in the type tree. This is automatically limited
-+ * to DBUS_MAXIMUM_SIGNATURE_LENGTH since you could only have an array
-+ * of array of array of ... that fit in the max signature. But that's
-+ * probably a bit too large.
-+ */
-+#define DBUS_MAXIMUM_TYPE_RECURSION_DEPTH 32
-+
-+/* Types of message */
-+#define DBUS_MESSAGE_TYPE_INVALID 0
-+#define DBUS_MESSAGE_TYPE_METHOD_CALL 1
-+#define DBUS_MESSAGE_TYPE_METHOD_RETURN 2
-+#define DBUS_MESSAGE_TYPE_ERROR 3
-+#define DBUS_MESSAGE_TYPE_SIGNAL 4
-+
-+/* Header flags */
-+#define DBUS_HEADER_FLAG_NO_REPLY_EXPECTED 0x1
-+#define DBUS_HEADER_FLAG_NO_AUTO_START 0x2
-+
-+/* Header fields */
-+#define DBUS_HEADER_FIELD_INVALID 0
-+#define DBUS_HEADER_FIELD_PATH 1
-+#define DBUS_HEADER_FIELD_INTERFACE 2
-+#define DBUS_HEADER_FIELD_MEMBER 3
-+#define DBUS_HEADER_FIELD_ERROR_NAME 4
-+#define DBUS_HEADER_FIELD_REPLY_SERIAL 5
-+#define DBUS_HEADER_FIELD_DESTINATION 6
-+#define DBUS_HEADER_FIELD_SENDER 7
-+#define DBUS_HEADER_FIELD_SIGNATURE 8
-+
-+#define DBUS_HEADER_FIELD_LAST DBUS_HEADER_FIELD_SIGNATURE
-+
-+/** Header format is defined as a signature:
-+ * byte byte order
-+ * byte message type ID
-+ * byte flags
-+ * byte protocol version
-+ * uint32 body length
-+ * uint32 serial
-+ * array of struct (byte,variant) (field name, value)
-+ *
-+ * The length of the header can be computed as the
-+ * fixed size of the initial data, plus the length of
-+ * the array at the end, plus padding to an 8-boundary.
-+ */
-+#define DBUS_HEADER_SIGNATURE \
-+ DBUS_TYPE_BYTE_AS_STRING \
-+ DBUS_TYPE_BYTE_AS_STRING \
-+ DBUS_TYPE_BYTE_AS_STRING \
-+ DBUS_TYPE_BYTE_AS_STRING \
-+ DBUS_TYPE_UINT32_AS_STRING \
-+ DBUS_TYPE_UINT32_AS_STRING \
-+ DBUS_TYPE_ARRAY_AS_STRING \
-+ DBUS_STRUCT_BEGIN_CHAR_AS_STRING \
-+ DBUS_TYPE_BYTE_AS_STRING \
-+ DBUS_TYPE_VARIANT_AS_STRING \
-+ DBUS_STRUCT_END_CHAR_AS_STRING
-+
-+
-+/**
-+ * The smallest header size that can occur. (It won't be valid due to
-+ * missing required header fields.) This is 4 bytes, two uint32, an
-+ * array length. This isn't any kind of resource limit, just the
-+ * necessary/logical outcome of the header signature.
-+ */
-+#define DBUS_MINIMUM_HEADER_SIZE 16
-+
-+/* Errors */
-+/* WARNING these get autoconverted to an enum in dbus-glib.h. Thus,
-+ * if you change the order it breaks the ABI. Keep them in order.
-+ * Also, don't change the formatting since that will break the sed
-+ * script.
-+ */
-+#define DBUS_ERROR_FAILED "org.freedesktop.DBus.Error.Failed"
-+#define DBUS_ERROR_NO_MEMORY "org.freedesktop.DBus.Error.NoMemory"
-+#define DBUS_ERROR_SERVICE_UNKNOWN "org.freedesktop.DBus.Error.ServiceUnknown"
-+#define DBUS_ERROR_NAME_HAS_NO_OWNER "org.freedesktop.DBus.Error.NameHasNoOwner"
-+#define DBUS_ERROR_NO_REPLY "org.freedesktop.DBus.Error.NoReply"
-+#define DBUS_ERROR_IO_ERROR "org.freedesktop.DBus.Error.IOError"
-+#define DBUS_ERROR_BAD_ADDRESS "org.freedesktop.DBus.Error.BadAddress"
-+#define DBUS_ERROR_NOT_SUPPORTED "org.freedesktop.DBus.Error.NotSupported"
-+#define DBUS_ERROR_LIMITS_EXCEEDED "org.freedesktop.DBus.Error.LimitsExceeded"
-+#define DBUS_ERROR_ACCESS_DENIED "org.freedesktop.DBus.Error.AccessDenied"
-+#define DBUS_ERROR_AUTH_FAILED "org.freedesktop.DBus.Error.AuthFailed"
-+#define DBUS_ERROR_NO_SERVER "org.freedesktop.DBus.Error.NoServer"
-+#define DBUS_ERROR_TIMEOUT "org.freedesktop.DBus.Error.Timeout"
-+#define DBUS_ERROR_NO_NETWORK "org.freedesktop.DBus.Error.NoNetwork"
-+#define DBUS_ERROR_ADDRESS_IN_USE "org.freedesktop.DBus.Error.AddressInUse"
-+#define DBUS_ERROR_DISCONNECTED "org.freedesktop.DBus.Error.Disconnected"
-+#define DBUS_ERROR_INVALID_ARGS "org.freedesktop.DBus.Error.InvalidArgs"
-+#define DBUS_ERROR_FILE_NOT_FOUND "org.freedesktop.DBus.Error.FileNotFound"
-+#define DBUS_ERROR_UNKNOWN_METHOD "org.freedesktop.DBus.Error.UnknownMethod"
-+#define DBUS_ERROR_TIMED_OUT "org.freedesktop.DBus.Error.TimedOut"
-+#define DBUS_ERROR_MATCH_RULE_NOT_FOUND "org.freedesktop.DBus.Error.MatchRuleNotFound"
-+#define DBUS_ERROR_MATCH_RULE_INVALID "org.freedesktop.DBus.Error.MatchRuleInvalid"
-+#define DBUS_ERROR_SPAWN_EXEC_FAILED "org.freedesktop.DBus.Error.Spawn.ExecFailed"
-+#define DBUS_ERROR_SPAWN_FORK_FAILED "org.freedesktop.DBus.Error.Spawn.ForkFailed"
-+#define DBUS_ERROR_SPAWN_CHILD_EXITED "org.freedesktop.DBus.Error.Spawn.ChildExited"
-+#define DBUS_ERROR_SPAWN_CHILD_SIGNALED "org.freedesktop.DBus.Error.Spawn.ChildSignaled"
-+#define DBUS_ERROR_SPAWN_FAILED "org.freedesktop.DBus.Error.Spawn.Failed"
-+#define DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN "org.freedesktop.DBus.Error.UnixProcessIdUnknown"
-+#define DBUS_ERROR_INVALID_SIGNATURE "org.freedesktop.DBus.Error.InvalidSignature"
-+#define DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN "org.freedesktop.DBus.Error.SELinuxSecurityContextUnknown"
-+
-+#define DBUS_INTROSPECT_1_0_XML_NAMESPACE "http://www.freedesktop.org/standards/dbus"
-+#define DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-+#define DBUS_INTROSPECT_1_0_XML_SYSTEM_IDENTIFIER "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"
-+#define DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE "<!DOCTYPE node PUBLIC \""DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER"\"\n\""DBUS_INTROSPECT_1_0_XML_SYSTEM_IDENTIFIER"\">\n"
-+
-+/** @} */
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* DBUS_PROTOCOL_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-resources.c dbus-0.61/dbus/dbus-resources.c
---- dbus-0.61.orig/dbus/dbus-resources.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-resources.c 2004-08-10 05:07:00.000000000 +0200
-@@ -0,0 +1,194 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-resources.c Resource tracking/limits
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <dbus/dbus-resources.h>
-+#include <dbus/dbus-internals.h>
-+
-+/**
-+ * @defgroup DBusResources Resource limits related code
-+ * @ingroup DBusInternals
-+ * @brief DBusCounter and other stuff related to resource limits
-+ *
-+ * Types and functions related to tracking resource limits,
-+ * such as the maximum amount of memory a connection can use
-+ * for messages, etc.
-+ */
-+
-+/**
-+ * @defgroup DBusResourcesInternals Resource limits implementation details
-+ * @ingroup DBusInternals
-+ * @brief Resource limits implementation details
-+ *
-+ * Implementation details of resource limits code.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @brief Internals of DBusCounter.
-+ *
-+ * DBusCounter internals. DBusCounter is an opaque object, it must be
-+ * used via accessor functions.
-+ */
-+struct DBusCounter
-+{
-+ int refcount; /**< reference count */
-+
-+ long value; /**< current counter value */
-+
-+ long notify_guard_value; /**< call notify function when crossing this value */
-+ DBusCounterNotifyFunction notify_function; /**< notify function */
-+ void *notify_data; /**< data for notify function */
-+};
-+
-+/** @} */ /* end of resource limits internals docs */
-+
-+/**
-+ * @addtogroup DBusResources
-+ * @{
-+ */
-+
-+/**
-+ * Creates a new DBusCounter. DBusCounter is used
-+ * to count usage of some resource such as memory.
-+ *
-+ * @returns new counter or #NULL on failure
-+ */
-+DBusCounter*
-+_dbus_counter_new (void)
-+{
-+ DBusCounter *counter;
-+
-+ counter = dbus_new (DBusCounter, 1);
-+ if (counter == NULL)
-+ return NULL;
-+
-+ counter->refcount = 1;
-+ counter->value = 0;
-+
-+ counter->notify_guard_value = 0;
-+ counter->notify_function = NULL;
-+ counter->notify_data = NULL;
-+
-+ return counter;
-+}
-+
-+/**
-+ * Increments refcount of the counter
-+ *
-+ * @param counter the counter
-+ * @returns the counter
-+ */
-+DBusCounter *
-+_dbus_counter_ref (DBusCounter *counter)
-+{
-+ _dbus_assert (counter->refcount > 0);
-+
-+ counter->refcount += 1;
-+
-+ return counter;
-+}
-+
-+/**
-+ * Decrements refcount of the counter and possibly
-+ * finalizes the counter.
-+ *
-+ * @param counter the counter
-+ */
-+void
-+_dbus_counter_unref (DBusCounter *counter)
-+{
-+ _dbus_assert (counter->refcount > 0);
-+
-+ counter->refcount -= 1;
-+
-+ if (counter->refcount == 0)
-+ {
-+
-+ dbus_free (counter);
-+ }
-+}
-+
-+/**
-+ * Adjusts the value of the counter by the given
-+ * delta which may be positive or negative.
-+ * Calls the notify function from _dbus_counter_set_notify()
-+ * if that function has been specified.
-+ *
-+ * @param counter the counter
-+ * @param delta value to add to the counter's current value
-+ */
-+void
-+_dbus_counter_adjust (DBusCounter *counter,
-+ long delta)
-+{
-+ long old = counter->value;
-+
-+ counter->value += delta;
-+
-+#if 0
-+ _dbus_verbose ("Adjusting counter %ld by %ld = %ld\n",
-+ old, delta, counter->value);
-+#endif
-+
-+ if (counter->notify_function != NULL &&
-+ ((old < counter->notify_guard_value &&
-+ counter->value >= counter->notify_guard_value) ||
-+ (old >= counter->notify_guard_value &&
-+ counter->value < counter->notify_guard_value)))
-+ (* counter->notify_function) (counter, counter->notify_data);
-+}
-+
-+/**
-+ * Gets the current value of the counter.
-+ *
-+ * @param counter the counter
-+ * @returns its current value
-+ */
-+long
-+_dbus_counter_get_value (DBusCounter *counter)
-+{
-+ return counter->value;
-+}
-+
-+/**
-+ * Sets the notify function for this counter; the notify function is
-+ * called whenever the counter's value crosses the guard value in
-+ * either direction (moving up, or moving down).
-+ *
-+ * @param counter the counter
-+ * @param guard_value the value we're notified if the counter crosses
-+ * @param function function to call in order to notify
-+ * @param user_data data to pass to the function
-+ */
-+void
-+_dbus_counter_set_notify (DBusCounter *counter,
-+ long guard_value,
-+ DBusCounterNotifyFunction function,
-+ void *user_data)
-+{
-+ counter->notify_guard_value = guard_value;
-+ counter->notify_function = function;
-+ counter->notify_data = user_data;
-+}
-+
-+/** @} */ /* end of resource limits exported API */
-diff -Naur dbus-0.61.orig/dbus/dbus-resources.h dbus-0.61/dbus/dbus-resources.h
---- dbus-0.61.orig/dbus/dbus-resources.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-resources.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,52 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-resources.h Resource tracking/limits
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_RESOURCES_H
-+#define DBUS_RESOURCES_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-connection.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusCounter DBusCounter;
-+
-+typedef void (* DBusCounterNotifyFunction) (DBusCounter *counter,
-+ void *user_data);
-+
-+DBusCounter* _dbus_counter_new (void);
-+DBusCounter* _dbus_counter_ref (DBusCounter *counter);
-+void _dbus_counter_unref (DBusCounter *counter);
-+void _dbus_counter_adjust (DBusCounter *counter,
-+ long delta);
-+long _dbus_counter_get_value (DBusCounter *counter);
-+
-+void _dbus_counter_set_notify (DBusCounter *counter,
-+ long guard_value,
-+ DBusCounterNotifyFunction function,
-+ void *user_data);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_RESOURCES_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-server-debug-pipe.c dbus-0.61/dbus/dbus-server-debug-pipe.c
---- dbus-0.61.orig/dbus/dbus-server-debug-pipe.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-server-debug-pipe.c 2005-11-30 20:32:26.000000000 +0100
-@@ -0,0 +1,329 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-server-debug-pipe.c In-proc debug server implementation
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-server-debug-pipe.h"
-+#include "dbus-transport-unix.h"
-+#include "dbus-connection-internal.h"
-+#include "dbus-hash.h"
-+#include "dbus-string.h"
-+#include "dbus-protocol.h"
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+/**
-+ * @defgroup DBusServerDebugPipe DBusServerDebugPipe
-+ * @ingroup DBusInternals
-+ * @brief In-process pipe debug server used in unit tests.
-+ *
-+ * Types and functions related to DBusServerDebugPipe.
-+ * This is used for unit testing.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Opaque object representing a debug server implementation.
-+ */
-+typedef struct DBusServerDebugPipe DBusServerDebugPipe;
-+
-+/**
-+ * Implementation details of DBusServerDebugPipe. All members
-+ * are private.
-+ */
-+struct DBusServerDebugPipe
-+{
-+ DBusServer base; /**< Parent class members. */
-+
-+ char *name; /**< Server name. */
-+
-+ dbus_bool_t disconnected; /**< TRUE if disconnect has been called */
-+};
-+
-+/* FIXME not threadsafe (right now the test suite doesn't use threads anyhow ) */
-+static DBusHashTable *server_pipe_hash;
-+static int server_pipe_hash_refcount = 0;
-+
-+static dbus_bool_t
-+pipe_hash_ref (void)
-+{
-+ if (!server_pipe_hash)
-+ {
-+ _dbus_assert (server_pipe_hash_refcount == 0);
-+
-+ server_pipe_hash = _dbus_hash_table_new (DBUS_HASH_STRING, NULL, NULL);
-+
-+ if (!server_pipe_hash)
-+ return FALSE;
-+ }
-+
-+ server_pipe_hash_refcount = 1;
-+
-+ return TRUE;
-+}
-+
-+static void
-+pipe_hash_unref (void)
-+{
-+ _dbus_assert (server_pipe_hash != NULL);
-+ _dbus_assert (server_pipe_hash_refcount > 0);
-+
-+ server_pipe_hash_refcount -= 1;
-+ if (server_pipe_hash_refcount == 0)
-+ {
-+ _dbus_hash_table_unref (server_pipe_hash);
-+ server_pipe_hash = NULL;
-+ }
-+}
-+
-+static void
-+debug_finalize (DBusServer *server)
-+{
-+ DBusServerDebugPipe *debug_server = (DBusServerDebugPipe*) server;
-+
-+ pipe_hash_unref ();
-+
-+ _dbus_server_finalize_base (server);
-+
-+ dbus_free (debug_server->name);
-+ dbus_free (server);
-+}
-+
-+static void
-+debug_disconnect (DBusServer *server)
-+{
-+ ((DBusServerDebugPipe*)server)->disconnected = TRUE;
-+}
-+
-+static DBusServerVTable debug_vtable = {
-+ debug_finalize,
-+ debug_disconnect
-+};
-+
-+/**
-+ * Creates a new debug server using an in-process pipe
-+ *
-+ * @param server_name the name of the server.
-+ * @param error address where an error can be returned.
-+ * @returns a new server, or #NULL on failure.
-+ */
-+DBusServer*
-+_dbus_server_debug_pipe_new (const char *server_name,
-+ DBusError *error)
-+{
-+ DBusServerDebugPipe *debug_server;
-+ DBusString address;
-+ DBusString name_str;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!pipe_hash_ref ())
-+ return NULL;
-+
-+ if (_dbus_hash_table_lookup_string (server_pipe_hash, server_name) != NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_ADDRESS_IN_USE, NULL);
-+ pipe_hash_unref ();
-+ return NULL;
-+ }
-+
-+ debug_server = dbus_new0 (DBusServerDebugPipe, 1);
-+ if (debug_server == NULL)
-+ goto nomem_0;
-+
-+ if (!_dbus_string_init (&address))
-+ goto nomem_1;
-+
-+ _dbus_string_init_const (&name_str, server_name);
-+ if (!_dbus_string_append (&address, "debug-pipe:name=") ||
-+ !_dbus_address_append_escaped (&address, &name_str))
-+ goto nomem_2;
-+
-+ debug_server->name = _dbus_strdup (server_name);
-+ if (debug_server->name == NULL)
-+ goto nomem_2;
-+
-+ if (!_dbus_server_init_base (&debug_server->base,
-+ &debug_vtable, &address))
-+ goto nomem_3;
-+
-+ if (!_dbus_hash_table_insert_string (server_pipe_hash,
-+ debug_server->name,
-+ debug_server))
-+ goto nomem_4;
-+
-+ _dbus_string_free (&address);
-+
-+ /* server keeps the pipe hash ref */
-+
-+ return (DBusServer *)debug_server;
-+
-+ nomem_4:
-+ _dbus_server_finalize_base (&debug_server->base);
-+ nomem_3:
-+ dbus_free (debug_server->name);
-+ nomem_2:
-+ _dbus_string_free (&address);
-+ nomem_1:
-+ dbus_free (debug_server);
-+ nomem_0:
-+ pipe_hash_unref ();
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+}
-+
-+/**
-+ * Creates the client-side transport for
-+ * a debug-pipe connection connected to the
-+ * given debug-pipe server name.
-+ *
-+ * @param server_name name of server to connect to
-+ * @param error address where an error can be returned.
-+ * @returns #NULL on no memory or transport
-+ */
-+DBusTransport*
-+_dbus_transport_debug_pipe_new (const char *server_name,
-+ DBusError *error)
-+{
-+ DBusTransport *client_transport;
-+ DBusTransport *server_transport;
-+ DBusConnection *connection;
-+ int client_fd, server_fd;
-+ DBusServer *server;
-+ DBusString address;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (server_pipe_hash == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_SERVER, NULL);
-+ return NULL;
-+ }
-+
-+ server = _dbus_hash_table_lookup_string (server_pipe_hash,
-+ server_name);
-+ if (server == NULL ||
-+ ((DBusServerDebugPipe*)server)->disconnected)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_SERVER, NULL);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_init (&address))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_append (&address, "debug-pipe:name=") ||
-+ !_dbus_string_append (&address, server_name))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (&address);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_full_duplex_pipe (&client_fd, &server_fd, FALSE,
-+ NULL))
-+ {
-+ _dbus_verbose ("failed to create full duplex pipe\n");
-+ dbus_set_error (error, DBUS_ERROR_FAILED, "Could not create full-duplex pipe");
-+ _dbus_string_free (&address);
-+ return NULL;
-+ }
-+
-+ _dbus_fd_set_close_on_exec (client_fd);
-+ _dbus_fd_set_close_on_exec (server_fd);
-+
-+ client_transport = _dbus_transport_new_for_fd (client_fd,
-+ FALSE, &address);
-+ if (client_transport == NULL)
-+ {
-+ _dbus_close (client_fd, NULL);
-+ _dbus_close (server_fd, NULL);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (&address);
-+ return NULL;
-+ }
-+
-+ _dbus_string_free (&address);
-+
-+ client_fd = -1;
-+
-+ server_transport = _dbus_transport_new_for_fd (server_fd,
-+ &server->guid_hex, NULL);
-+ if (server_transport == NULL)
-+ {
-+ _dbus_transport_unref (client_transport);
-+ _dbus_close (server_fd, NULL);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ server_fd = -1;
-+
-+ if (!_dbus_transport_set_auth_mechanisms (server_transport,
-+ (const char**) server->auth_mechanisms))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_transport_unref (server_transport);
-+ _dbus_transport_unref (client_transport);
-+ return NULL;
-+ }
-+
-+ connection = _dbus_connection_new_for_transport (server_transport);
-+ _dbus_transport_unref (server_transport);
-+ server_transport = NULL;
-+
-+ if (connection == NULL)
-+ {
-+ _dbus_transport_unref (client_transport);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ /* See if someone wants to handle this new connection,
-+ * self-referencing for paranoia
-+ */
-+ if (server->new_connection_function)
-+ {
-+ dbus_server_ref (server);
-+ (* server->new_connection_function) (server, connection,
-+ server->new_connection_data);
-+ dbus_server_unref (server);
-+ }
-+
-+ /* If no one grabbed a reference, the connection will die,
-+ * and the client transport will get an immediate disconnect
-+ */
-+ dbus_connection_unref (connection);
-+
-+ return client_transport;
-+}
-+
-+
-+/** @} */
-+
-+#endif /* DBUS_BUILD_TESTS */
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-server-debug-pipe.h dbus-0.61/dbus/dbus-server-debug-pipe.h
---- dbus-0.61.orig/dbus/dbus-server-debug-pipe.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-server-debug-pipe.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,40 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-server-debug-pipe.h In-proc debug server implementation
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_SERVER_DEBUG_PIPE_H
-+#define DBUS_SERVER_DEBUG_PIPE_H
-+
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-server-protected.h>
-+#include <dbus/dbus-transport.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+DBusServer* _dbus_server_debug_pipe_new (const char *server_name,
-+ DBusError *error);
-+DBusTransport* _dbus_transport_debug_pipe_new (const char *server_name,
-+ DBusError *error);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SERVER_DEBUG_PIPE_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-server-protected.h dbus-0.61/dbus/dbus-server-protected.h
---- dbus-0.61.orig/dbus/dbus-server-protected.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-server-protected.h 2005-02-26 07:37:46.000000000 +0100
-@@ -0,0 +1,157 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-server-protected.h Used by subclasses of DBusServer object (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_SERVER_PROTECTED_H
-+#define DBUS_SERVER_PROTECTED_H
-+
-+#include <config.h>
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-threads-internal.h>
-+#include <dbus/dbus-server.h>
-+#include <dbus/dbus-timeout.h>
-+#include <dbus/dbus-watch.h>
-+#include <dbus/dbus-resources.h>
-+#include <dbus/dbus-dataslot.h>
-+#include <dbus/dbus-string.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusServerVTable DBusServerVTable;
-+typedef union DBusGUID DBusGUID;
-+
-+/**
-+ * A server's globally unique ID
-+ */
-+union DBusGUID
-+{
-+ dbus_uint32_t as_uint32s[4];
-+ unsigned char as_bytes[16];
-+};
-+
-+/**
-+ * Virtual table to be implemented by all server "subclasses"
-+ */
-+struct DBusServerVTable
-+{
-+ void (* finalize) (DBusServer *server);
-+ /**< The finalize method must free the server. */
-+
-+ void (* disconnect) (DBusServer *server);
-+ /**< Disconnect this server. */
-+};
-+
-+/**
-+ * Internals of DBusServer object
-+ */
-+struct DBusServer
-+{
-+ DBusAtomic refcount; /**< Reference count. */
-+ const DBusServerVTable *vtable; /**< Virtual methods for this instance. */
-+ DBusMutex *mutex; /**< Lock on the server object */
-+
-+ DBusGUID guid; /**< Globally unique ID of server */
-+
-+ DBusString guid_hex; /**< Hex-encoded version of GUID */
-+
-+ DBusWatchList *watches; /**< Our watches */
-+ DBusTimeoutList *timeouts; /**< Our timeouts */
-+
-+ char *address; /**< Address this server is listening on. */
-+
-+ int max_connections; /**< Max number of connections allowed at once. */
-+
-+ DBusDataSlotList slot_list; /**< Data stored by allocated integer ID */
-+
-+ DBusNewConnectionFunction new_connection_function;
-+ /**< Callback to invoke when a new connection is created. */
-+ void *new_connection_data;
-+ /**< Data for new connection callback */
-+ DBusFreeFunction new_connection_free_data_function;
-+ /**< Callback to invoke to free new_connection_data
-+ * when server is finalized or data is replaced.
-+ */
-+
-+ char **auth_mechanisms; /**< Array of allowed authentication mechanisms */
-+
-+ unsigned int disconnected : 1; /**< TRUE if we are disconnected. */
-+
-+#ifndef DBUS_DISABLE_CHECKS
-+ unsigned int have_server_lock : 1; /**< Does someone have the server mutex locked */
-+#endif
-+};
-+
-+dbus_bool_t _dbus_server_init_base (DBusServer *server,
-+ const DBusServerVTable *vtable,
-+ const DBusString *address);
-+void _dbus_server_finalize_base (DBusServer *server);
-+dbus_bool_t _dbus_server_add_watch (DBusServer *server,
-+ DBusWatch *watch);
-+void _dbus_server_remove_watch (DBusServer *server,
-+ DBusWatch *watch);
-+void _dbus_server_toggle_watch (DBusServer *server,
-+ DBusWatch *watch,
-+ dbus_bool_t enabled);
-+dbus_bool_t _dbus_server_add_timeout (DBusServer *server,
-+ DBusTimeout *timeout);
-+void _dbus_server_remove_timeout (DBusServer *server,
-+ DBusTimeout *timeout);
-+void _dbus_server_toggle_timeout (DBusServer *server,
-+ DBusTimeout *timeout,
-+ dbus_bool_t enabled);
-+
-+void _dbus_server_ref_unlocked (DBusServer *server);
-+void _dbus_server_unref_unlocked (DBusServer *server);
-+
-+#ifdef DBUS_DISABLE_CHECKS
-+#define TOOK_LOCK_CHECK(server)
-+#define RELEASING_LOCK_CHECK(server)
-+#define HAVE_LOCK_CHECK(server)
-+#else
-+#define TOOK_LOCK_CHECK(server) do { \
-+ _dbus_assert (!(server)->have_server_lock); \
-+ (server)->have_server_lock = TRUE; \
-+ } while (0)
-+#define RELEASING_LOCK_CHECK(server) do { \
-+ _dbus_assert ((server)->have_server_lock); \
-+ (server)->have_server_lock = FALSE; \
-+ } while (0)
-+#define HAVE_LOCK_CHECK(server) _dbus_assert ((server)->have_server_lock)
-+/* A "DO_NOT_HAVE_LOCK_CHECK" is impossible since we need the lock to check the flag */
-+#endif
-+
-+#define TRACE_LOCKS 0
-+
-+#define SERVER_LOCK(server) do { \
-+ if (TRACE_LOCKS) { _dbus_verbose (" LOCK: %s\n", _DBUS_FUNCTION_NAME); } \
-+ _dbus_mutex_lock ((server)->mutex); \
-+ TOOK_LOCK_CHECK (server); \
-+ } while (0)
-+
-+#define SERVER_UNLOCK(server) do { \
-+ if (TRACE_LOCKS) { _dbus_verbose (" UNLOCK: %s\n", _DBUS_FUNCTION_NAME); } \
-+ RELEASING_LOCK_CHECK (server); \
-+ _dbus_mutex_unlock ((server)->mutex); \
-+ } while (0)
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SERVER_PROTECTED_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-server-unix.c dbus-0.61/dbus/dbus-server-unix.c
---- dbus-0.61.orig/dbus/dbus-server-unix.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-server-unix.c 2005-10-25 17:57:13.000000000 +0200
-@@ -0,0 +1,452 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-server-unix.c Server implementation for Unix network protocols.
-+ *
-+ * Copyright (C) 2002, 2003, 2004 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-server-unix.h"
-+#include "dbus-transport-unix.h"
-+#include "dbus-connection-internal.h"
-+#include "dbus-string.h"
-+#include <sys/types.h>
-+#include <unistd.h>
-+
-+/**
-+ * @defgroup DBusServerUnix DBusServer implementations for UNIX
-+ * @ingroup DBusInternals
-+ * @brief Implementation details of DBusServer on UNIX
-+ *
-+ * @{
-+ */
-+/**
-+ *
-+ * Opaque object representing a Unix server implementation.
-+ */
-+typedef struct DBusServerUnix DBusServerUnix;
-+
-+/**
-+ * Implementation details of DBusServerUnix. All members
-+ * are private.
-+ */
-+struct DBusServerUnix
-+{
-+ DBusServer base; /**< Parent class members. */
-+ int fd; /**< File descriptor or -1 if disconnected. */
-+ DBusWatch *watch; /**< File descriptor watch. */
-+ char *socket_name; /**< Name of domain socket, to unlink if appropriate */
-+};
-+
-+static void
-+unix_finalize (DBusServer *server)
-+{
-+ DBusServerUnix *unix_server = (DBusServerUnix*) server;
-+
-+ _dbus_server_finalize_base (server);
-+
-+ if (unix_server->watch)
-+ {
-+ _dbus_watch_unref (unix_server->watch);
-+ unix_server->watch = NULL;
-+ }
-+
-+ dbus_free (unix_server->socket_name);
-+ dbus_free (server);
-+}
-+
-+/**
-+ * @todo unreffing the connection at the end may cause
-+ * us to drop the last ref to the connection before
-+ * disconnecting it. That is invalid.
-+ *
-+ * @todo doesn't this leak a server refcount if
-+ * new_connection_function is NULL?
-+ */
-+/* Return value is just for memory, not other failures. */
-+static dbus_bool_t
-+handle_new_client_fd_and_unlock (DBusServer *server,
-+ int client_fd)
-+{
-+ DBusConnection *connection;
-+ DBusTransport *transport;
-+ DBusNewConnectionFunction new_connection_function;
-+ void *new_connection_data;
-+
-+ _dbus_verbose ("Creating new client connection with fd %d\n", client_fd);
-+
-+ HAVE_LOCK_CHECK (server);
-+
-+ if (!_dbus_set_fd_nonblocking (client_fd, NULL))
-+ {
-+ SERVER_UNLOCK (server);
-+ return TRUE;
-+ }
-+
-+ transport = _dbus_transport_new_for_fd (client_fd, &server->guid_hex, NULL);
-+ if (transport == NULL)
-+ {
-+ close (client_fd);
-+ SERVER_UNLOCK (server);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_transport_set_auth_mechanisms (transport,
-+ (const char **) server->auth_mechanisms))
-+ {
-+ _dbus_transport_unref (transport);
-+ SERVER_UNLOCK (server);
-+ return FALSE;
-+ }
-+
-+ /* note that client_fd is now owned by the transport, and will be
-+ * closed on transport disconnection/finalization
-+ */
-+
-+ connection = _dbus_connection_new_for_transport (transport);
-+ _dbus_transport_unref (transport);
-+ transport = NULL; /* now under the connection lock */
-+
-+ if (connection == NULL)
-+ {
-+ SERVER_UNLOCK (server);
-+ return FALSE;
-+ }
-+
-+ /* See if someone wants to handle this new connection, self-referencing
-+ * for paranoia.
-+ */
-+ new_connection_function = server->new_connection_function;
-+ new_connection_data = server->new_connection_data;
-+
-+ _dbus_server_ref_unlocked (server);
-+ SERVER_UNLOCK (server);
-+
-+ if (new_connection_function)
-+ {
-+ (* new_connection_function) (server, connection,
-+ new_connection_data);
-+ dbus_server_unref (server);
-+ }
-+
-+ /* If no one grabbed a reference, the connection will die. */
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+unix_handle_watch (DBusWatch *watch,
-+ unsigned int flags,
-+ void *data)
-+{
-+ DBusServer *server = data;
-+ DBusServerUnix *unix_server = data;
-+
-+ SERVER_LOCK (server);
-+
-+ _dbus_assert (watch == unix_server->watch);
-+
-+ _dbus_verbose ("Handling client connection, flags 0x%x\n", flags);
-+
-+ if (flags & DBUS_WATCH_READABLE)
-+ {
-+ int client_fd;
-+ int listen_fd;
-+
-+ listen_fd = dbus_watch_get_fd (watch);
-+
-+ client_fd = _dbus_accept (listen_fd);
-+
-+ if (client_fd < 0)
-+ {
-+ /* EINTR handled for us */
-+
-+ if (errno == EAGAIN || errno == EWOULDBLOCK)
-+ _dbus_verbose ("No client available to accept after all\n");
-+ else
-+ _dbus_verbose ("Failed to accept a client connection: %s\n",
-+ _dbus_strerror (errno));
-+
-+ SERVER_UNLOCK (server);
-+ }
-+ else
-+ {
-+ _dbus_fd_set_close_on_exec (client_fd);
-+
-+ if (!handle_new_client_fd_and_unlock (server, client_fd))
-+ _dbus_verbose ("Rejected client connection due to lack of memory\n");
-+ }
-+ }
-+
-+ if (flags & DBUS_WATCH_ERROR)
-+ _dbus_verbose ("Error on server listening socket\n");
-+
-+ if (flags & DBUS_WATCH_HANGUP)
-+ _dbus_verbose ("Hangup on server listening socket\n");
-+
-+ return TRUE;
-+}
-+
-+static void
-+unix_disconnect (DBusServer *server)
-+{
-+ DBusServerUnix *unix_server = (DBusServerUnix*) server;
-+
-+ HAVE_LOCK_CHECK (server);
-+
-+ if (unix_server->watch)
-+ {
-+ _dbus_server_remove_watch (server,
-+ unix_server->watch);
-+ _dbus_watch_unref (unix_server->watch);
-+ unix_server->watch = NULL;
-+ }
-+
-+ close (unix_server->fd);
-+ unix_server->fd = -1;
-+
-+ if (unix_server->socket_name != NULL)
-+ {
-+ DBusString tmp;
-+ _dbus_string_init_const (&tmp, unix_server->socket_name);
-+ _dbus_delete_file (&tmp, NULL);
-+ }
-+
-+ HAVE_LOCK_CHECK (server);
-+}
-+
-+static const DBusServerVTable unix_vtable = {
-+ unix_finalize,
-+ unix_disconnect
-+};
-+
-+/**
-+ * Creates a new server listening on the given file descriptor. The
-+ * file descriptor should be nonblocking (use
-+ * _dbus_set_fd_nonblocking() to make it so). The file descriptor
-+ * should be listening for connections, that is, listen() should have
-+ * been successfully invoked on it. The server will use accept() to
-+ * accept new client connections.
-+ *
-+ * @param fd the file descriptor.
-+ * @param address the server's address
-+ * @returns the new server, or #NULL if no memory.
-+ *
-+ */
-+DBusServer*
-+_dbus_server_new_for_fd (int fd,
-+ const DBusString *address)
-+{
-+ DBusServerUnix *unix_server;
-+ DBusServer *server;
-+ DBusWatch *watch;
-+
-+ unix_server = dbus_new0 (DBusServerUnix, 1);
-+ if (unix_server == NULL)
-+ return NULL;
-+
-+ watch = _dbus_watch_new (fd,
-+ DBUS_WATCH_READABLE,
-+ TRUE,
-+ unix_handle_watch, unix_server,
-+ NULL);
-+ if (watch == NULL)
-+ {
-+ dbus_free (unix_server);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_server_init_base (&unix_server->base,
-+ &unix_vtable, address))
-+ {
-+ _dbus_watch_unref (watch);
-+ dbus_free (unix_server);
-+ return NULL;
-+ }
-+
-+ server = (DBusServer*) unix_server;
-+
-+ SERVER_LOCK (server);
-+
-+ if (!_dbus_server_add_watch (&unix_server->base,
-+ watch))
-+ {
-+ SERVER_UNLOCK (server);
-+ _dbus_server_finalize_base (&unix_server->base);
-+ _dbus_watch_unref (watch);
-+ dbus_free (unix_server);
-+ return NULL;
-+ }
-+
-+ unix_server->fd = fd;
-+ unix_server->watch = watch;
-+
-+ SERVER_UNLOCK (server);
-+
-+ return (DBusServer*) unix_server;
-+}
-+
-+/**
-+ * Creates a new server listening on the given Unix domain socket.
-+ *
-+ * @param path the path for the domain socket.
-+ * @param abstract #TRUE to use abstract socket namespace
-+ * @param error location to store reason for failure.
-+ * @returns the new server, or #NULL on failure.
-+ */
-+DBusServer*
-+_dbus_server_new_for_domain_socket (const char *path,
-+ dbus_bool_t abstract,
-+ DBusError *error)
-+{
-+ DBusServer *server;
-+ DBusServerUnix *unix_server;
-+ int listen_fd;
-+ DBusString address;
-+ char *path_copy;
-+ DBusString path_str;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!_dbus_string_init (&address))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ _dbus_string_init_const (&path_str, path);
-+ if ((abstract &&
-+ !_dbus_string_append (&address, "unix:abstract=")) ||
-+ (!abstract &&
-+ !_dbus_string_append (&address, "unix:path=")) ||
-+ !_dbus_address_append_escaped (&address, &path_str))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed_0;
-+ }
-+
-+ path_copy = _dbus_strdup (path);
-+ if (path_copy == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed_0;
-+ }
-+
-+ listen_fd = _dbus_listen_unix_socket (path, abstract, error);
-+ _dbus_fd_set_close_on_exec (listen_fd);
-+
-+ if (listen_fd < 0)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed_1;
-+ }
-+
-+ server = _dbus_server_new_for_fd (listen_fd, &address);
-+ if (server == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed_2;
-+ }
-+
-+ unix_server = (DBusServerUnix*) server;
-+ unix_server->socket_name = path_copy;
-+
-+ _dbus_string_free (&address);
-+
-+ return server;
-+
-+ failed_2:
-+ _dbus_close (listen_fd, NULL);
-+ failed_1:
-+ dbus_free (path_copy);
-+ failed_0:
-+ _dbus_string_free (&address);
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Creates a new server listening on the given hostname and port.
-+ * If the hostname is NULL, listens on localhost.
-+ *
-+ * @param host the hostname to listen on.
-+ * @param port the port to listen on.
-+ * @param error location to store reason for failure.
-+ * @returns the new server, or #NULL on failure.
-+ */
-+DBusServer*
-+_dbus_server_new_for_tcp_socket (const char *host,
-+ dbus_uint32_t port,
-+ DBusError *error)
-+{
-+ DBusServer *server;
-+ int listen_fd;
-+ DBusString address;
-+ DBusString host_str;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!_dbus_string_init (&address))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ if (host == NULL)
-+ host = "localhost";
-+
-+ _dbus_string_init_const (&host_str, host);
-+ if (!_dbus_string_append (&address, "tcp:host=") ||
-+ !_dbus_address_append_escaped (&address, &host_str) ||
-+ !_dbus_string_append (&address, ",port=") ||
-+ !_dbus_string_append_int (&address, port))
-+ {
-+ _dbus_string_free (&address);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ listen_fd = _dbus_listen_tcp_socket (host, port, error);
-+ _dbus_fd_set_close_on_exec (listen_fd);
-+
-+ if (listen_fd < 0)
-+ {
-+ _dbus_string_free (&address);
-+ return NULL;
-+ }
-+
-+ server = _dbus_server_new_for_fd (listen_fd, &address);
-+ if (server == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ close (listen_fd);
-+ _dbus_string_free (&address);
-+ return NULL;
-+ }
-+
-+ _dbus_string_free (&address);
-+
-+ return server;
-+
-+
-+}
-+
-+/** @} */
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-server-unix.h dbus-0.61/dbus/dbus-server-unix.h
---- dbus-0.61.orig/dbus/dbus-server-unix.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-server-unix.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,43 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-server-unix.h Server implementation for Unix network protocols.
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_SERVER_UNIX_H
-+#define DBUS_SERVER_UNIX_H
-+
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-server-protected.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+DBusServer* _dbus_server_new_for_fd (int fd,
-+ const DBusString *address);
-+DBusServer* _dbus_server_new_for_domain_socket (const char *path,
-+ dbus_bool_t abstract,
-+ DBusError *error);
-+DBusServer* _dbus_server_new_for_tcp_socket (const char *host,
-+ dbus_uint32_t port,
-+ DBusError *error);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SERVER_UNIX_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-server.c dbus-0.61/dbus/dbus-server.c
---- dbus-0.61.orig/dbus/dbus-server.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-server.c 2005-04-10 01:50:58.000000000 +0200
-@@ -0,0 +1,1198 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-server.c DBusServer object
-+ *
-+ * Copyright (C) 2002, 2003, 2004, 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-server.h"
-+#include "dbus-server-unix.h"
-+#include "dbus-string.h"
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-server-debug-pipe.h"
-+#endif
-+#include "dbus-address.h"
-+#include "dbus-protocol.h"
-+
-+/**
-+ * @defgroup DBusServer DBusServer
-+ * @ingroup DBus
-+ * @brief Server that listens for new connections.
-+ *
-+ * Types and functions related to DBusServer.
-+ * A DBusServer represents a server that other applications
-+ * can connect to. Each connection from another application
-+ * is represented by a DBusConnection.
-+ *
-+ * @todo Thread safety hasn't been looked at for #DBusServer
-+ * @todo Need notification to apps of disconnection, may matter for some transports
-+ */
-+
-+/**
-+ * @defgroup DBusServerInternals DBusServer implementation details
-+ * @ingroup DBusInternals
-+ * @brief Implementation details of DBusServer
-+ *
-+ * @{
-+ */
-+
-+static void
-+init_guid (DBusGUID *guid)
-+{
-+ long now;
-+ char *p;
-+ int ts_size;
-+
-+ _dbus_get_current_time (&now, NULL);
-+
-+ guid->as_uint32s[0] = now;
-+
-+ ts_size = sizeof (guid->as_uint32s[0]);
-+ p = ((char*)guid->as_bytes) + ts_size;
-+
-+ _dbus_generate_random_bytes_buffer (p,
-+ sizeof (guid->as_bytes) - ts_size);
-+}
-+
-+/* this is a little fragile since it assumes the address doesn't
-+ * already have a guid, but it shouldn't
-+ */
-+static char*
-+copy_address_with_guid_appended (const DBusString *address,
-+ const DBusString *guid_hex)
-+{
-+ DBusString with_guid;
-+ char *retval;
-+
-+ if (!_dbus_string_init (&with_guid))
-+ return NULL;
-+
-+ if (!_dbus_string_copy (address, 0, &with_guid,
-+ _dbus_string_get_length (&with_guid)) ||
-+ !_dbus_string_append (&with_guid, ",guid=") ||
-+ !_dbus_string_copy (guid_hex, 0,
-+ &with_guid, _dbus_string_get_length (&with_guid)))
-+ {
-+ _dbus_string_free (&with_guid);
-+ return NULL;
-+ }
-+
-+ retval = NULL;
-+ _dbus_string_steal_data (&with_guid, &retval);
-+
-+ _dbus_string_free (&with_guid);
-+
-+ return retval; /* may be NULL if steal_data failed */
-+}
-+
-+/**
-+ * Initializes the members of the DBusServer base class.
-+ * Chained up to by subclass constructors.
-+ *
-+ * @param server the server.
-+ * @param vtable the vtable for the subclass.
-+ * @param address the server's address
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_server_init_base (DBusServer *server,
-+ const DBusServerVTable *vtable,
-+ const DBusString *address)
-+{
-+ DBusString guid_raw;
-+
-+ server->vtable = vtable;
-+ server->refcount.value = 1;
-+
-+ server->address = NULL;
-+ server->watches = NULL;
-+ server->timeouts = NULL;
-+
-+ if (!_dbus_string_init (&server->guid_hex))
-+ return FALSE;
-+
-+ init_guid (&server->guid);
-+
-+ _dbus_string_init_const_len (&guid_raw, (signed char*) server->guid.as_bytes,
-+ sizeof (server->guid.as_bytes));
-+ if (!_dbus_string_hex_encode (&guid_raw, 0,
-+ &server->guid_hex,
-+ _dbus_string_get_length (&server->guid_hex)))
-+ goto failed;
-+
-+ server->address = copy_address_with_guid_appended (address,
-+ &server->guid_hex);
-+ if (server->address == NULL)
-+ goto failed;
-+
-+ server->mutex = _dbus_mutex_new ();
-+ if (server->mutex == NULL)
-+ goto failed;
-+
-+ server->watches = _dbus_watch_list_new ();
-+ if (server->watches == NULL)
-+ goto failed;
-+
-+ server->timeouts = _dbus_timeout_list_new ();
-+ if (server->timeouts == NULL)
-+ goto failed;
-+
-+ _dbus_data_slot_list_init (&server->slot_list);
-+
-+ _dbus_verbose ("Initialized server on address %s\n", server->address);
-+
-+ return TRUE;
-+
-+ failed:
-+ if (server->mutex)
-+ {
-+ _dbus_mutex_free (server->mutex);
-+ server->mutex = NULL;
-+ }
-+ if (server->watches)
-+ {
-+ _dbus_watch_list_free (server->watches);
-+ server->watches = NULL;
-+ }
-+ if (server->timeouts)
-+ {
-+ _dbus_timeout_list_free (server->timeouts);
-+ server->timeouts = NULL;
-+ }
-+ if (server->address)
-+ {
-+ dbus_free (server->address);
-+ server->address = NULL;
-+ }
-+ _dbus_string_free (&server->guid_hex);
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Finalizes the members of the DBusServer base class.
-+ * Chained up to by subclass finalizers.
-+ *
-+ * @param server the server.
-+ */
-+void
-+_dbus_server_finalize_base (DBusServer *server)
-+{
-+ /* We don't have the lock, but nobody should be accessing
-+ * concurrently since they don't have a ref
-+ */
-+#ifndef DBUS_DISABLE_CHECKS
-+ _dbus_assert (!server->have_server_lock);
-+#endif
-+ _dbus_assert (server->disconnected);
-+
-+ /* calls out to application code... */
-+ _dbus_data_slot_list_free (&server->slot_list);
-+
-+ dbus_server_set_new_connection_function (server, NULL, NULL, NULL);
-+
-+ _dbus_watch_list_free (server->watches);
-+ _dbus_timeout_list_free (server->timeouts);
-+
-+ _dbus_mutex_free (server->mutex);
-+
-+ dbus_free (server->address);
-+
-+ dbus_free_string_array (server->auth_mechanisms);
-+
-+ _dbus_string_free (&server->guid_hex);
-+}
-+
-+
-+typedef dbus_bool_t (* DBusWatchAddFunction) (DBusWatchList *list,
-+ DBusWatch *watch);
-+typedef void (* DBusWatchRemoveFunction) (DBusWatchList *list,
-+ DBusWatch *watch);
-+typedef void (* DBusWatchToggleFunction) (DBusWatchList *list,
-+ DBusWatch *watch,
-+ dbus_bool_t enabled);
-+
-+static dbus_bool_t
-+protected_change_watch (DBusServer *server,
-+ DBusWatch *watch,
-+ DBusWatchAddFunction add_function,
-+ DBusWatchRemoveFunction remove_function,
-+ DBusWatchToggleFunction toggle_function,
-+ dbus_bool_t enabled)
-+{
-+ DBusWatchList *watches;
-+ dbus_bool_t retval;
-+
-+ HAVE_LOCK_CHECK (server);
-+
-+ /* This isn't really safe or reasonable; a better pattern is the "do
-+ * everything, then drop lock and call out" one; but it has to be
-+ * propagated up through all callers
-+ */
-+
-+ watches = server->watches;
-+ if (watches)
-+ {
-+ server->watches = NULL;
-+ _dbus_server_ref_unlocked (server);
-+ SERVER_UNLOCK (server);
-+
-+ if (add_function)
-+ retval = (* add_function) (watches, watch);
-+ else if (remove_function)
-+ {
-+ retval = TRUE;
-+ (* remove_function) (watches, watch);
-+ }
-+ else
-+ {
-+ retval = TRUE;
-+ (* toggle_function) (watches, watch, enabled);
-+ }
-+
-+ SERVER_LOCK (server);
-+ server->watches = watches;
-+ _dbus_server_unref_unlocked (server);
-+
-+ return retval;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Adds a watch for this server, chaining out to application-provided
-+ * watch handlers.
-+ *
-+ * @param server the server.
-+ * @param watch the watch to add.
-+ */
-+dbus_bool_t
-+_dbus_server_add_watch (DBusServer *server,
-+ DBusWatch *watch)
-+{
-+ HAVE_LOCK_CHECK (server);
-+ return protected_change_watch (server, watch,
-+ _dbus_watch_list_add_watch,
-+ NULL, NULL, FALSE);
-+}
-+
-+/**
-+ * Removes a watch previously added with _dbus_server_remove_watch().
-+ *
-+ * @param server the server.
-+ * @param watch the watch to remove.
-+ */
-+void
-+_dbus_server_remove_watch (DBusServer *server,
-+ DBusWatch *watch)
-+{
-+ HAVE_LOCK_CHECK (server);
-+ protected_change_watch (server, watch,
-+ NULL,
-+ _dbus_watch_list_remove_watch,
-+ NULL, FALSE);
-+}
-+
-+/**
-+ * Toggles a watch and notifies app via server's
-+ * DBusWatchToggledFunction if available. It's an error to call this
-+ * function on a watch that was not previously added.
-+ *
-+ * @param server the server.
-+ * @param watch the watch to toggle.
-+ * @param enabled whether to enable or disable
-+ */
-+void
-+_dbus_server_toggle_watch (DBusServer *server,
-+ DBusWatch *watch,
-+ dbus_bool_t enabled)
-+{
-+ _dbus_assert (watch != NULL);
-+
-+ HAVE_LOCK_CHECK (server);
-+ protected_change_watch (server, watch,
-+ NULL, NULL,
-+ _dbus_watch_list_toggle_watch,
-+ enabled);
-+}
-+
-+
-+typedef dbus_bool_t (* DBusTimeoutAddFunction) (DBusTimeoutList *list,
-+ DBusTimeout *timeout);
-+typedef void (* DBusTimeoutRemoveFunction) (DBusTimeoutList *list,
-+ DBusTimeout *timeout);
-+typedef void (* DBusTimeoutToggleFunction) (DBusTimeoutList *list,
-+ DBusTimeout *timeout,
-+ dbus_bool_t enabled);
-+
-+
-+static dbus_bool_t
-+protected_change_timeout (DBusServer *server,
-+ DBusTimeout *timeout,
-+ DBusTimeoutAddFunction add_function,
-+ DBusTimeoutRemoveFunction remove_function,
-+ DBusTimeoutToggleFunction toggle_function,
-+ dbus_bool_t enabled)
-+{
-+ DBusTimeoutList *timeouts;
-+ dbus_bool_t retval;
-+
-+ HAVE_LOCK_CHECK (server);
-+
-+ /* This isn't really safe or reasonable; a better pattern is the "do everything, then
-+ * drop lock and call out" one; but it has to be propagated up through all callers
-+ */
-+
-+ timeouts = server->timeouts;
-+ if (timeouts)
-+ {
-+ server->timeouts = NULL;
-+ _dbus_server_ref_unlocked (server);
-+ SERVER_UNLOCK (server);
-+
-+ if (add_function)
-+ retval = (* add_function) (timeouts, timeout);
-+ else if (remove_function)
-+ {
-+ retval = TRUE;
-+ (* remove_function) (timeouts, timeout);
-+ }
-+ else
-+ {
-+ retval = TRUE;
-+ (* toggle_function) (timeouts, timeout, enabled);
-+ }
-+
-+ SERVER_LOCK (server);
-+ server->timeouts = timeouts;
-+ _dbus_server_unref_unlocked (server);
-+
-+ return retval;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Adds a timeout for this server, chaining out to
-+ * application-provided timeout handlers. The timeout should be
-+ * repeatedly handled with dbus_timeout_handle() at its given interval
-+ * until it is removed.
-+ *
-+ * @param server the server.
-+ * @param timeout the timeout to add.
-+ */
-+dbus_bool_t
-+_dbus_server_add_timeout (DBusServer *server,
-+ DBusTimeout *timeout)
-+{
-+ return protected_change_timeout (server, timeout,
-+ _dbus_timeout_list_add_timeout,
-+ NULL, NULL, FALSE);
-+}
-+
-+/**
-+ * Removes a timeout previously added with _dbus_server_add_timeout().
-+ *
-+ * @param server the server.
-+ * @param timeout the timeout to remove.
-+ */
-+void
-+_dbus_server_remove_timeout (DBusServer *server,
-+ DBusTimeout *timeout)
-+{
-+ protected_change_timeout (server, timeout,
-+ NULL,
-+ _dbus_timeout_list_remove_timeout,
-+ NULL, FALSE);
-+}
-+
-+/**
-+ * Toggles a timeout and notifies app via server's
-+ * DBusTimeoutToggledFunction if available. It's an error to call this
-+ * function on a timeout that was not previously added.
-+ *
-+ * @param server the server.
-+ * @param timeout the timeout to toggle.
-+ * @param enabled whether to enable or disable
-+ */
-+void
-+_dbus_server_toggle_timeout (DBusServer *server,
-+ DBusTimeout *timeout,
-+ dbus_bool_t enabled)
-+{
-+ protected_change_timeout (server, timeout,
-+ NULL, NULL,
-+ _dbus_timeout_list_toggle_timeout,
-+ enabled);
-+}
-+
-+
-+/** @} */
-+
-+/**
-+ * @addtogroup DBusServer
-+ *
-+ * @{
-+ */
-+
-+
-+/**
-+ * @typedef DBusServer
-+ *
-+ * An opaque object representing a server that listens for
-+ * connections from other applications. Each time a connection
-+ * is made, a new DBusConnection is created and made available
-+ * via an application-provided DBusNewConnectionFunction.
-+ * The DBusNewConnectionFunction is provided with
-+ * dbus_server_set_new_connection_function().
-+ *
-+ */
-+
-+/**
-+ * Listens for new connections on the given address.
-+ * Returns #NULL if listening fails for any reason.
-+ * Otherwise returns a new #DBusServer.
-+ * dbus_server_set_new_connection_function() and
-+ * dbus_server_set_watch_functions() should be called
-+ * immediately to render the server fully functional.
-+ *
-+ * @todo error messages on bad address could really be better.
-+ * DBusResultCode is a bit limiting here.
-+ *
-+ * @param address the address of this server.
-+ * @param error location to store rationale for failure.
-+ * @returns a new DBusServer, or #NULL on failure.
-+ *
-+ */
-+DBusServer*
-+dbus_server_listen (const char *address,
-+ DBusError *error)
-+{
-+ DBusServer *server;
-+ DBusAddressEntry **entries;
-+ int len, i;
-+ const char *address_problem_type;
-+ const char *address_problem_field;
-+ const char *address_problem_other;
-+
-+ _dbus_return_val_if_fail (address != NULL, NULL);
-+ _dbus_return_val_if_error_is_set (error, NULL);
-+
-+ if (!dbus_parse_address (address, &entries, &len, error))
-+ return NULL;
-+
-+ server = NULL;
-+ address_problem_type = NULL;
-+ address_problem_field = NULL;
-+ address_problem_other = NULL;
-+
-+ for (i = 0; i < len; i++)
-+ {
-+ const char *method;
-+
-+ method = dbus_address_entry_get_method (entries[i]);
-+
-+ if (strcmp (method, "unix") == 0)
-+ {
-+ const char *path = dbus_address_entry_get_value (entries[i], "path");
-+ const char *tmpdir = dbus_address_entry_get_value (entries[i], "tmpdir");
-+ const char *abstract = dbus_address_entry_get_value (entries[i], "abstract");
-+
-+ if (path == NULL && tmpdir == NULL && abstract == NULL)
-+ {
-+ address_problem_type = "unix";
-+ address_problem_field = "path or tmpdir or abstract";
-+ goto bad_address;
-+ }
-+
-+ if ((path && tmpdir) ||
-+ (path && abstract) ||
-+ (tmpdir && abstract))
-+ {
-+ address_problem_other = "cannot specify two of \"path\" and \"tmpdir\" and \"abstract\" at the same time";
-+ goto bad_address;
-+ }
-+
-+ if (tmpdir != NULL)
-+ {
-+ DBusString full_path;
-+ DBusString filename;
-+
-+ if (!_dbus_string_init (&full_path))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ if (!_dbus_string_init (&filename))
-+ {
-+ _dbus_string_free (&full_path);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ if (!_dbus_string_append (&filename,
-+ "dbus-") ||
-+ !_dbus_generate_random_ascii (&filename, 10) ||
-+ !_dbus_string_append (&full_path, tmpdir) ||
-+ !_dbus_concat_dir_and_file (&full_path, &filename))
-+ {
-+ _dbus_string_free (&full_path);
-+ _dbus_string_free (&filename);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto out;
-+ }
-+
-+ /* FIXME - we will unconditionally unlink() the path if
-+ * we don't support abstract namespace. unlink() does
-+ * not follow symlinks, but would like independent
-+ * confirmation this is safe enough. See also
-+ * _dbus_listen_unix_socket() and comments therein.
-+ */
-+
-+ /* Always use abstract namespace if possible with tmpdir */
-+
-+ server =
-+ _dbus_server_new_for_domain_socket (_dbus_string_get_const_data (&full_path),
-+#ifdef HAVE_ABSTRACT_SOCKETS
-+ TRUE,
-+#else
-+ FALSE,
-+#endif
-+ error);
-+
-+ _dbus_string_free (&full_path);
-+ _dbus_string_free (&filename);
-+ }
-+ else
-+ {
-+ if (path)
-+ server = _dbus_server_new_for_domain_socket (path, FALSE, error);
-+ else
-+ server = _dbus_server_new_for_domain_socket (abstract, TRUE, error);
-+ }
-+ }
-+ else if (strcmp (method, "tcp") == 0)
-+ {
-+ const char *host = dbus_address_entry_get_value (entries[i], "host");
-+ const char *port = dbus_address_entry_get_value (entries[i], "port");
-+ DBusString str;
-+ long lport;
-+ dbus_bool_t sresult;
-+
-+ if (port == NULL)
-+ {
-+ address_problem_type = "tcp";
-+ address_problem_field = "port";
-+ goto bad_address;
-+ }
-+
-+ _dbus_string_init_const (&str, port);
-+ sresult = _dbus_string_parse_int (&str, 0, &lport, NULL);
-+ _dbus_string_free (&str);
-+
-+ if (sresult == FALSE || lport <= 0 || lport > 65535)
-+ {
-+ address_problem_other = "Port is not an integer between 0 and 65535";
-+ goto bad_address;
-+ }
-+
-+ server = _dbus_server_new_for_tcp_socket (host, lport, error);
-+
-+ if (server)
-+ break;
-+ }
-+#ifdef DBUS_BUILD_TESTS
-+ else if (strcmp (method, "debug-pipe") == 0)
-+ {
-+ const char *name = dbus_address_entry_get_value (entries[i], "name");
-+
-+ if (name == NULL)
-+ {
-+ address_problem_type = "debug-pipe";
-+ address_problem_field = "name";
-+ goto bad_address;
-+ }
-+
-+ server = _dbus_server_debug_pipe_new (name, error);
-+ }
-+#endif
-+ else
-+ {
-+ address_problem_other = "Unknown address type (examples of valid types are \"unix\" and \"tcp\")";
-+ goto bad_address;
-+ }
-+
-+ if (server)
-+ break;
-+ }
-+
-+ out:
-+
-+ dbus_address_entries_free (entries);
-+ return server;
-+
-+ bad_address:
-+ dbus_address_entries_free (entries);
-+ if (address_problem_type != NULL)
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "Server address of type %s was missing argument %s",
-+ address_problem_type, address_problem_field);
-+ else
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "Could not parse server address: %s",
-+ address_problem_other);
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Increments the reference count of a DBusServer.
-+ *
-+ * @param server the server.
-+ * @returns the server
-+ */
-+DBusServer *
-+dbus_server_ref (DBusServer *server)
-+{
-+ _dbus_return_val_if_fail (server != NULL, NULL);
-+ _dbus_return_val_if_fail (server->refcount.value > 0, NULL);
-+
-+#ifdef DBUS_HAVE_ATOMIC_INT
-+ _dbus_atomic_inc (&server->refcount);
-+#else
-+ SERVER_LOCK (server);
-+ _dbus_assert (server->refcount.value > 0);
-+
-+ server->refcount.value += 1;
-+ SERVER_UNLOCK (server);
-+#endif
-+
-+ return server;
-+}
-+
-+/**
-+ * Decrements the reference count of a DBusServer. Finalizes the
-+ * server if the reference count reaches zero.
-+ *
-+ * The server must be disconnected before the refcount reaches zero.
-+ *
-+ * @param server the server.
-+ */
-+void
-+dbus_server_unref (DBusServer *server)
-+{
-+ dbus_bool_t last_unref;
-+
-+ _dbus_return_if_fail (server != NULL);
-+ _dbus_return_if_fail (server->refcount.value > 0);
-+
-+#ifdef DBUS_HAVE_ATOMIC_INT
-+ last_unref = (_dbus_atomic_dec (&server->refcount) == 1);
-+#else
-+ SERVER_LOCK (server);
-+
-+ _dbus_assert (server->refcount.value > 0);
-+
-+ server->refcount.value -= 1;
-+ last_unref = (server->refcount.value == 0);
-+
-+ SERVER_UNLOCK (server);
-+#endif
-+
-+ if (last_unref)
-+ {
-+ /* lock not held! */
-+ _dbus_assert (server->disconnected);
-+
-+ _dbus_assert (server->vtable->finalize != NULL);
-+
-+ (* server->vtable->finalize) (server);
-+ }
-+}
-+
-+/**
-+ * Like dbus_server_ref() but does not acquire the lock (must already be held)
-+ *
-+ * @param server the server.
-+ */
-+void
-+_dbus_server_ref_unlocked (DBusServer *server)
-+{
-+ _dbus_assert (server != NULL);
-+ _dbus_assert (server->refcount.value > 0);
-+
-+ HAVE_LOCK_CHECK (server);
-+
-+#ifdef DBUS_HAVE_ATOMIC_INT
-+ _dbus_atomic_inc (&server->refcount);
-+#else
-+ _dbus_assert (server->refcount.value > 0);
-+
-+ server->refcount.value += 1;
-+#endif
-+}
-+
-+/**
-+ * Like dbus_server_unref() but does not acquire the lock (must already be held)
-+ *
-+ * @param server the server.
-+ */
-+void
-+_dbus_server_unref_unlocked (DBusServer *server)
-+{
-+ dbus_bool_t last_unref;
-+
-+ _dbus_assert (server != NULL);
-+ _dbus_assert (server->refcount.value > 0);
-+
-+ HAVE_LOCK_CHECK (server);
-+
-+#ifdef DBUS_HAVE_ATOMIC_INT
-+ last_unref = (_dbus_atomic_dec (&server->refcount) == 1);
-+#else
-+ _dbus_assert (server->refcount.value > 0);
-+
-+ server->refcount.value -= 1;
-+ last_unref = (server->refcount.value == 0);
-+#endif
-+
-+ if (last_unref)
-+ {
-+ _dbus_assert (server->disconnected);
-+
-+ SERVER_UNLOCK (server);
-+
-+ _dbus_assert (server->vtable->finalize != NULL);
-+
-+ (* server->vtable->finalize) (server);
-+ }
-+}
-+
-+/**
-+ * Releases the server's address and stops listening for
-+ * new clients. If called more than once, only the first
-+ * call has an effect. Does not modify the server's
-+ * reference count.
-+ *
-+ * @param server the server.
-+ */
-+void
-+dbus_server_disconnect (DBusServer *server)
-+{
-+ _dbus_return_if_fail (server != NULL);
-+ _dbus_return_if_fail (server->refcount.value > 0);
-+
-+ SERVER_LOCK (server);
-+ _dbus_server_ref_unlocked (server);
-+
-+ _dbus_assert (server->vtable->disconnect != NULL);
-+
-+ if (!server->disconnected)
-+ {
-+ /* this has to be first so recursive calls to disconnect don't happen */
-+ server->disconnected = TRUE;
-+
-+ (* server->vtable->disconnect) (server);
-+ }
-+
-+ SERVER_UNLOCK (server);
-+ dbus_server_unref (server);
-+}
-+
-+/**
-+ * Returns #TRUE if the server is still listening for new connections.
-+ *
-+ * @param server the server.
-+ */
-+dbus_bool_t
-+dbus_server_get_is_connected (DBusServer *server)
-+{
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (server != NULL, FALSE);
-+
-+ SERVER_LOCK (server);
-+ retval = !server->disconnected;
-+ SERVER_UNLOCK (server);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Returns the address of the server, as a newly-allocated
-+ * string which must be freed by the caller.
-+ *
-+ * @param server the server
-+ * @returns the address or #NULL if no memory
-+ */
-+char*
-+dbus_server_get_address (DBusServer *server)
-+{
-+ char *retval;
-+
-+ _dbus_return_val_if_fail (server != NULL, NULL);
-+
-+ SERVER_LOCK (server);
-+ retval = _dbus_strdup (server->address);
-+ SERVER_UNLOCK (server);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Sets a function to be used for handling new connections. The given
-+ * function is passed each new connection as the connection is
-+ * created. If the new connection function increments the connection's
-+ * reference count, the connection will stay alive. Otherwise, the
-+ * connection will be unreferenced and closed.
-+ *
-+ * @param server the server.
-+ * @param function a function to handle new connections.
-+ * @param data data to pass to the new connection handler.
-+ * @param free_data_function function to free the data.
-+ */
-+void
-+dbus_server_set_new_connection_function (DBusServer *server,
-+ DBusNewConnectionFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ DBusFreeFunction old_free_function;
-+ void *old_data;
-+
-+ _dbus_return_if_fail (server != NULL);
-+
-+ SERVER_LOCK (server);
-+ old_free_function = server->new_connection_free_data_function;
-+ old_data = server->new_connection_data;
-+
-+ server->new_connection_function = function;
-+ server->new_connection_data = data;
-+ server->new_connection_free_data_function = free_data_function;
-+ SERVER_UNLOCK (server);
-+
-+ if (old_free_function != NULL)
-+ (* old_free_function) (old_data);
-+}
-+
-+/**
-+ * Sets the watch functions for the connection. These functions are
-+ * responsible for making the application's main loop aware of file
-+ * descriptors that need to be monitored for events.
-+ *
-+ * This function behaves exactly like dbus_connection_set_watch_functions();
-+ * see the documentation for that routine.
-+ *
-+ * @param server the server.
-+ * @param add_function function to begin monitoring a new descriptor.
-+ * @param remove_function function to stop monitoring a descriptor.
-+ * @param toggled_function function to notify when the watch is enabled/disabled
-+ * @param data data to pass to add_function and remove_function.
-+ * @param free_data_function function to be called to free the data.
-+ * @returns #FALSE on failure (no memory)
-+ */
-+dbus_bool_t
-+dbus_server_set_watch_functions (DBusServer *server,
-+ DBusAddWatchFunction add_function,
-+ DBusRemoveWatchFunction remove_function,
-+ DBusWatchToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ dbus_bool_t result;
-+ DBusWatchList *watches;
-+
-+ _dbus_return_val_if_fail (server != NULL, FALSE);
-+
-+ SERVER_LOCK (server);
-+ watches = server->watches;
-+ server->watches = NULL;
-+ if (watches)
-+ {
-+ SERVER_UNLOCK (server);
-+ result = _dbus_watch_list_set_functions (watches,
-+ add_function,
-+ remove_function,
-+ toggled_function,
-+ data,
-+ free_data_function);
-+ SERVER_LOCK (server);
-+ }
-+ else
-+ {
-+ _dbus_warn ("Re-entrant call to %s\n", _DBUS_FUNCTION_NAME);
-+ result = FALSE;
-+ }
-+ server->watches = watches;
-+ SERVER_UNLOCK (server);
-+
-+ return result;
-+}
-+
-+/**
-+ * Sets the timeout functions for the connection. These functions are
-+ * responsible for making the application's main loop aware of timeouts.
-+ *
-+ * This function behaves exactly like dbus_connection_set_timeout_functions();
-+ * see the documentation for that routine.
-+ *
-+ * @param server the server.
-+ * @param add_function function to add a timeout.
-+ * @param remove_function function to remove a timeout.
-+ * @param toggled_function function to notify when the timeout is enabled/disabled
-+ * @param data data to pass to add_function and remove_function.
-+ * @param free_data_function function to be called to free the data.
-+ * @returns #FALSE on failure (no memory)
-+ */
-+dbus_bool_t
-+dbus_server_set_timeout_functions (DBusServer *server,
-+ DBusAddTimeoutFunction add_function,
-+ DBusRemoveTimeoutFunction remove_function,
-+ DBusTimeoutToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ dbus_bool_t result;
-+ DBusTimeoutList *timeouts;
-+
-+ _dbus_return_val_if_fail (server != NULL, FALSE);
-+
-+ SERVER_LOCK (server);
-+ timeouts = server->timeouts;
-+ server->timeouts = NULL;
-+ if (timeouts)
-+ {
-+ SERVER_UNLOCK (server);
-+ result = _dbus_timeout_list_set_functions (timeouts,
-+ add_function,
-+ remove_function,
-+ toggled_function,
-+ data,
-+ free_data_function);
-+ SERVER_LOCK (server);
-+ }
-+ else
-+ {
-+ _dbus_warn ("Re-entrant call to %s\n", _DBUS_FUNCTION_NAME);
-+ result = FALSE;
-+ }
-+ server->timeouts = timeouts;
-+ SERVER_UNLOCK (server);
-+
-+ return result;
-+}
-+
-+/**
-+ * Sets the authentication mechanisms that this server offers
-+ * to clients, as a list of SASL mechanisms. This function
-+ * only affects connections created *after* it is called.
-+ * Pass #NULL instead of an array to use all available mechanisms.
-+ *
-+ * @param server the server
-+ * @param mechanisms #NULL-terminated array of mechanisms
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+dbus_server_set_auth_mechanisms (DBusServer *server,
-+ const char **mechanisms)
-+{
-+ char **copy;
-+
-+ _dbus_return_val_if_fail (server != NULL, FALSE);
-+
-+ SERVER_LOCK (server);
-+
-+ if (mechanisms != NULL)
-+ {
-+ copy = _dbus_dup_string_array (mechanisms);
-+ if (copy == NULL)
-+ return FALSE;
-+ }
-+ else
-+ copy = NULL;
-+
-+ dbus_free_string_array (server->auth_mechanisms);
-+ server->auth_mechanisms = copy;
-+
-+ SERVER_UNLOCK (server);
-+
-+ return TRUE;
-+}
-+
-+
-+static DBusDataSlotAllocator slot_allocator;
-+_DBUS_DEFINE_GLOBAL_LOCK (server_slots);
-+
-+/**
-+ * Allocates an integer ID to be used for storing application-specific
-+ * data on any DBusServer. The allocated ID may then be used
-+ * with dbus_server_set_data() and dbus_server_get_data().
-+ * The slot must be initialized with -1. If a nonnegative
-+ * slot is passed in, the refcount is incremented on that
-+ * slot, rather than creating a new slot.
-+ *
-+ * The allocated slot is global, i.e. all DBusServer objects will have
-+ * a slot with the given integer ID reserved.
-+ *
-+ * @param slot_p address of global variable storing the slot ID
-+ * @returns #FALSE on no memory
-+ */
-+dbus_bool_t
-+dbus_server_allocate_data_slot (dbus_int32_t *slot_p)
-+{
-+ return _dbus_data_slot_allocator_alloc (&slot_allocator,
-+ _DBUS_LOCK_NAME (server_slots),
-+ slot_p);
-+}
-+
-+/**
-+ * Deallocates a global ID for server data slots.
-+ * dbus_server_get_data() and dbus_server_set_data()
-+ * may no longer be used with this slot.
-+ * Existing data stored on existing DBusServer objects
-+ * will be freed when the server is finalized,
-+ * but may not be retrieved (and may only be replaced
-+ * if someone else reallocates the slot).
-+ *
-+ * @param slot_p address of the slot to deallocate
-+ */
-+void
-+dbus_server_free_data_slot (dbus_int32_t *slot_p)
-+{
-+ _dbus_return_if_fail (*slot_p >= 0);
-+
-+ _dbus_data_slot_allocator_free (&slot_allocator, slot_p);
-+}
-+
-+/**
-+ * Stores a pointer on a DBusServer, along
-+ * with an optional function to be used for freeing
-+ * the data when the data is set again, or when
-+ * the server is finalized. The slot number
-+ * must have been allocated with dbus_server_allocate_data_slot().
-+ *
-+ * @param server the server
-+ * @param slot the slot number
-+ * @param data the data to store
-+ * @param free_data_func finalizer function for the data
-+ * @returns #TRUE if there was enough memory to store the data
-+ */
-+dbus_bool_t
-+dbus_server_set_data (DBusServer *server,
-+ int slot,
-+ void *data,
-+ DBusFreeFunction free_data_func)
-+{
-+ DBusFreeFunction old_free_func;
-+ void *old_data;
-+ dbus_bool_t retval;
-+
-+ _dbus_return_val_if_fail (server != NULL, FALSE);
-+
-+ SERVER_LOCK (server);
-+
-+ retval = _dbus_data_slot_list_set (&slot_allocator,
-+ &server->slot_list,
-+ slot, data, free_data_func,
-+ &old_free_func, &old_data);
-+
-+
-+ SERVER_UNLOCK (server);
-+
-+ if (retval)
-+ {
-+ /* Do the actual free outside the server lock */
-+ if (old_free_func)
-+ (* old_free_func) (old_data);
-+ }
-+
-+ return retval;
-+}
-+
-+/**
-+ * Retrieves data previously set with dbus_server_set_data().
-+ * The slot must still be allocated (must not have been freed).
-+ *
-+ * @param server the server
-+ * @param slot the slot to get data from
-+ * @returns the data, or #NULL if not found
-+ */
-+void*
-+dbus_server_get_data (DBusServer *server,
-+ int slot)
-+{
-+ void *res;
-+
-+ _dbus_return_val_if_fail (server != NULL, NULL);
-+
-+ SERVER_LOCK (server);
-+
-+ res = _dbus_data_slot_list_get (&slot_allocator,
-+ &server->slot_list,
-+ slot);
-+
-+ SERVER_UNLOCK (server);
-+
-+ return res;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+
-+dbus_bool_t
-+_dbus_server_test (void)
-+{
-+ const char *valid_addresses[] = {
-+ "tcp:port=1234",
-+ "unix:path=./boogie",
-+ "tcp:host=localhost,port=1234",
-+ "tcp:host=localhost,port=1234;tcp:port=5678",
-+ "tcp:port=1234;unix:path=./boogie",
-+ };
-+
-+ DBusServer *server;
-+ int i;
-+
-+ for (i = 0; i < _DBUS_N_ELEMENTS (valid_addresses); i++)
-+ {
-+ server = dbus_server_listen (valid_addresses[i], NULL);
-+ if (server == NULL)
-+ _dbus_assert_not_reached ("Failed to listen for valid address.");
-+
-+ dbus_server_disconnect (server);
-+ dbus_server_unref (server);
-+
-+ /* Try disconnecting before unreffing */
-+ server = dbus_server_listen (valid_addresses[i], NULL);
-+ if (server == NULL)
-+ _dbus_assert_not_reached ("Failed to listen for valid address.");
-+
-+ dbus_server_disconnect (server);
-+ dbus_server_unref (server);
-+ }
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-server.h dbus-0.61/dbus/dbus-server.h
---- dbus-0.61.orig/dbus/dbus-server.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-server.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,80 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-server.h DBusServer object
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_SERVER_H
-+#define DBUS_SERVER_H
-+
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-message.h>
-+#include <dbus/dbus-connection.h>
-+#include <dbus/dbus-protocol.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusServer DBusServer;
-+
-+typedef void (* DBusNewConnectionFunction) (DBusServer *server,
-+ DBusConnection *new_connection,
-+ void *data);
-+
-+DBusServer* dbus_server_listen (const char *address,
-+ DBusError *error);
-+DBusServer* dbus_server_ref (DBusServer *server);
-+void dbus_server_unref (DBusServer *server);
-+void dbus_server_disconnect (DBusServer *server);
-+dbus_bool_t dbus_server_get_is_connected (DBusServer *server);
-+char* dbus_server_get_address (DBusServer *server);
-+void dbus_server_set_new_connection_function (DBusServer *server,
-+ DBusNewConnectionFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t dbus_server_set_watch_functions (DBusServer *server,
-+ DBusAddWatchFunction add_function,
-+ DBusRemoveWatchFunction remove_function,
-+ DBusWatchToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t dbus_server_set_timeout_functions (DBusServer *server,
-+ DBusAddTimeoutFunction add_function,
-+ DBusRemoveTimeoutFunction remove_function,
-+ DBusTimeoutToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t dbus_server_set_auth_mechanisms (DBusServer *server,
-+ const char **mechanisms);
-+
-+dbus_bool_t dbus_server_allocate_data_slot (dbus_int32_t *slot_p);
-+void dbus_server_free_data_slot (dbus_int32_t *slot_p);
-+dbus_bool_t dbus_server_set_data (DBusServer *server,
-+ int slot,
-+ void *data,
-+ DBusFreeFunction free_data_func);
-+void* dbus_server_get_data (DBusServer *server,
-+ int slot);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SERVER_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-sha.c dbus-0.61/dbus/dbus-sha.c
---- dbus-0.61.orig/dbus/dbus-sha.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-sha.c 2005-01-15 08:15:38.000000000 +0100
-@@ -0,0 +1,969 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-sha.c SHA-1 implementation
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ * Copyright (C) 1995 A. M. Kuchling
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-sha.h"
-+#include "dbus-marshal-basic.h" /* for byteswap routines */
-+#include <string.h>
-+
-+/* The following comments have the history of where this code
-+ * comes from. I actually copied it from GNet in GNOME CVS.
-+ * - hp at redhat.com
-+ */
-+
-+/*
-+ * sha.h : Implementation of the Secure Hash Algorithm
-+ *
-+ * Part of the Python Cryptography Toolkit, version 1.0.0
-+ *
-+ * Copyright (C) 1995, A.M. Kuchling
-+ *
-+ * Distribute and use freely; there are no restrictions on further
-+ * dissemination and usage except those imposed by the laws of your
-+ * country of residence.
-+ *
-+ */
-+
-+/* SHA: NIST's Secure Hash Algorithm */
-+
-+/* Based on SHA code originally posted to sci.crypt by Peter Gutmann
-+ in message <30ajo5$oe8 at ccu2.auckland.ac.nz>.
-+ Modified to test for endianness on creation of SHA objects by AMK.
-+ Also, the original specification of SHA was found to have a weakness
-+ by NSA/NIST. This code implements the fixed version of SHA.
-+*/
-+
-+/* Here's the first paragraph of Peter Gutmann's posting:
-+
-+The following is my SHA (FIPS 180) code updated to allow use of the "fixed"
-+SHA, thanks to Jim Gillogly and an anonymous contributor for the information on
-+what's changed in the new version. The fix is a simple change which involves
-+adding a single rotate in the initial expansion function. It is unknown
-+whether this is an optimal solution to the problem which was discovered in the
-+SHA or whether it's simply a bandaid which fixes the problem with a minimum of
-+effort (for example the reengineering of a great many Capstone chips).
-+*/
-+
-+/**
-+ * @defgroup DBusSHA SHA implementation
-+ * @ingroup DBusInternals
-+ * @brief SHA-1 hash
-+ *
-+ * Types and functions related to computing SHA-1 hash.
-+ */
-+
-+/**
-+ * @defgroup DBusSHAInternals SHA implementation details
-+ * @ingroup DBusInternals
-+ * @brief Internals of SHA implementation.
-+ *
-+ * The implementation of SHA-1 (see http://www.itl.nist.gov/fipspubs/fip180-1.htm).
-+ * This SHA implementation was written by A.M. Kuchling
-+ *
-+ * @{
-+ */
-+
-+#ifndef DOXYGEN_SHOULD_SKIP_THIS
-+
-+/* The SHA block size and message digest sizes, in bytes */
-+
-+#define SHA_DATASIZE 64
-+#define SHA_DIGESTSIZE 20
-+
-+/* The SHA f()-functions. The f1 and f3 functions can be optimized to
-+ save one boolean operation each - thanks to Rich Schroeppel,
-+ rcs at cs.arizona.edu for discovering this */
-+
-+/*#define f1(x,y,z) ( ( x & y ) | ( ~x & z ) ) // Rounds 0-19 */
-+#define f1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) /* Rounds 0-19 */
-+#define f2(x,y,z) ( x ^ y ^ z ) /* Rounds 20-39 */
-+/*#define f3(x,y,z) ( ( x & y ) | ( x & z ) | ( y & z ) ) // Rounds 40-59 */
-+#define f3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) /* Rounds 40-59 */
-+#define f4(x,y,z) ( x ^ y ^ z ) /* Rounds 60-79 */
-+
-+/* The SHA Mysterious Constants */
-+
-+#define K1 0x5A827999L /* Rounds 0-19 */
-+#define K2 0x6ED9EBA1L /* Rounds 20-39 */
-+#define K3 0x8F1BBCDCL /* Rounds 40-59 */
-+#define K4 0xCA62C1D6L /* Rounds 60-79 */
-+
-+/* SHA initial values */
-+
-+#define h0init 0x67452301L
-+#define h1init 0xEFCDAB89L
-+#define h2init 0x98BADCFEL
-+#define h3init 0x10325476L
-+#define h4init 0xC3D2E1F0L
-+
-+/* Note that it may be necessary to add parentheses to these macros if they
-+ are to be called with expressions as arguments */
-+/* 32-bit rotate left - kludged with shifts */
-+
-+#define ROTL(n,X) ( ( ( X ) << n ) | ( ( X ) >> ( 32 - n ) ) )
-+
-+/* The initial expanding function. The hash function is defined over an
-+ 80-word expanded input array W, where the first 16 are copies of the input
-+ data, and the remaining 64 are defined by
-+
-+ W[ i ] = W[ i - 16 ] ^ W[ i - 14 ] ^ W[ i - 8 ] ^ W[ i - 3 ]
-+
-+ This implementation generates these values on the fly in a circular
-+ buffer - thanks to Colin Plumb, colin at nyx10.cs.du.edu for this
-+ optimization.
-+
-+ The updated SHA changes the expanding function by adding a rotate of 1
-+ bit. Thanks to Jim Gillogly, jim at rand.org, and an anonymous contributor
-+ for this information */
-+
-+#define expand(W,i) ( W[ i & 15 ] = ROTL( 1, ( W[ i & 15 ] ^ W[ (i - 14) & 15 ] ^ \
-+ W[ (i - 8) & 15 ] ^ W[ (i - 3) & 15 ] ) ) )
-+
-+
-+/* The prototype SHA sub-round. The fundamental sub-round is:
-+
-+ a' = e + ROTL( 5, a ) + f( b, c, d ) + k + data;
-+ b' = a;
-+ c' = ROTL( 30, b );
-+ d' = c;
-+ e' = d;
-+
-+ but this is implemented by unrolling the loop 5 times and renaming the
-+ variables ( e, a, b, c, d ) = ( a', b', c', d', e' ) each iteration.
-+ This code is then replicated 20 times for each of the 4 functions, using
-+ the next 20 values from the W[] array each time */
-+
-+#define subRound(a, b, c, d, e, f, k, data) \
-+ ( e += ROTL( 5, a ) + f( b, c, d ) + k + data, b = ROTL( 30, b ) )
-+
-+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-+
-+/* Perform the SHA transformation. Note that this code, like MD5, seems to
-+ break some optimizing compilers due to the complexity of the expressions
-+ and the size of the basic block. It may be necessary to split it into
-+ sections, e.g. based on the four subrounds
-+
-+ Note that this corrupts the context->data area */
-+
-+static void
-+SHATransform(dbus_uint32_t *digest, dbus_uint32_t *data)
-+{
-+ dbus_uint32_t A, B, C, D, E; /* Local vars */
-+ dbus_uint32_t eData[16]; /* Expanded data */
-+
-+ /* Set up first buffer and local data buffer */
-+ A = digest[0];
-+ B = digest[1];
-+ C = digest[2];
-+ D = digest[3];
-+ E = digest[4];
-+ memmove (eData, data, SHA_DATASIZE);
-+
-+ /* Heavy mangling, in 4 sub-rounds of 20 interations each. */
-+ subRound (A, B, C, D, E, f1, K1, eData[0]);
-+ subRound (E, A, B, C, D, f1, K1, eData[1]);
-+ subRound (D, E, A, B, C, f1, K1, eData[2]);
-+ subRound (C, D, E, A, B, f1, K1, eData[3]);
-+ subRound (B, C, D, E, A, f1, K1, eData[4]);
-+ subRound (A, B, C, D, E, f1, K1, eData[5]);
-+ subRound (E, A, B, C, D, f1, K1, eData[6]);
-+ subRound (D, E, A, B, C, f1, K1, eData[7]);
-+ subRound (C, D, E, A, B, f1, K1, eData[8]);
-+ subRound (B, C, D, E, A, f1, K1, eData[9]);
-+ subRound (A, B, C, D, E, f1, K1, eData[10]);
-+ subRound (E, A, B, C, D, f1, K1, eData[11]);
-+ subRound (D, E, A, B, C, f1, K1, eData[12]);
-+ subRound (C, D, E, A, B, f1, K1, eData[13]);
-+ subRound (B, C, D, E, A, f1, K1, eData[14]);
-+ subRound (A, B, C, D, E, f1, K1, eData[15]);
-+ subRound (E, A, B, C, D, f1, K1, expand ( eData, 16) );
-+ subRound (D, E, A, B, C, f1, K1, expand ( eData, 17) );
-+ subRound (C, D, E, A, B, f1, K1, expand ( eData, 18) );
-+ subRound (B, C, D, E, A, f1, K1, expand ( eData, 19) );
-+
-+ subRound (A, B, C, D, E, f2, K2, expand ( eData, 20) );
-+ subRound (E, A, B, C, D, f2, K2, expand ( eData, 21) );
-+ subRound (D, E, A, B, C, f2, K2, expand ( eData, 22) );
-+ subRound (C, D, E, A, B, f2, K2, expand ( eData, 23) );
-+ subRound (B, C, D, E, A, f2, K2, expand ( eData, 24) );
-+ subRound (A, B, C, D, E, f2, K2, expand ( eData, 25) );
-+ subRound (E, A, B, C, D, f2, K2, expand ( eData, 26) );
-+ subRound (D, E, A, B, C, f2, K2, expand ( eData, 27) );
-+ subRound (C, D, E, A, B, f2, K2, expand ( eData, 28) );
-+ subRound (B, C, D, E, A, f2, K2, expand ( eData, 29) );
-+ subRound (A, B, C, D, E, f2, K2, expand ( eData, 30) );
-+ subRound (E, A, B, C, D, f2, K2, expand ( eData, 31) );
-+ subRound (D, E, A, B, C, f2, K2, expand ( eData, 32) );
-+ subRound (C, D, E, A, B, f2, K2, expand ( eData, 33) );
-+ subRound (B, C, D, E, A, f2, K2, expand ( eData, 34) );
-+ subRound (A, B, C, D, E, f2, K2, expand ( eData, 35) );
-+ subRound (E, A, B, C, D, f2, K2, expand ( eData, 36) );
-+ subRound (D, E, A, B, C, f2, K2, expand ( eData, 37) );
-+ subRound (C, D, E, A, B, f2, K2, expand ( eData, 38) );
-+ subRound (B, C, D, E, A, f2, K2, expand ( eData, 39) );
-+
-+ subRound (A, B, C, D, E, f3, K3, expand ( eData, 40) );
-+ subRound (E, A, B, C, D, f3, K3, expand ( eData, 41) );
-+ subRound (D, E, A, B, C, f3, K3, expand ( eData, 42) );
-+ subRound (C, D, E, A, B, f3, K3, expand ( eData, 43) );
-+ subRound (B, C, D, E, A, f3, K3, expand ( eData, 44) );
-+ subRound (A, B, C, D, E, f3, K3, expand ( eData, 45) );
-+ subRound (E, A, B, C, D, f3, K3, expand ( eData, 46) );
-+ subRound (D, E, A, B, C, f3, K3, expand ( eData, 47) );
-+ subRound (C, D, E, A, B, f3, K3, expand ( eData, 48) );
-+ subRound (B, C, D, E, A, f3, K3, expand ( eData, 49) );
-+ subRound (A, B, C, D, E, f3, K3, expand ( eData, 50) );
-+ subRound (E, A, B, C, D, f3, K3, expand ( eData, 51) );
-+ subRound (D, E, A, B, C, f3, K3, expand ( eData, 52) );
-+ subRound (C, D, E, A, B, f3, K3, expand ( eData, 53) );
-+ subRound (B, C, D, E, A, f3, K3, expand ( eData, 54) );
-+ subRound (A, B, C, D, E, f3, K3, expand ( eData, 55) );
-+ subRound (E, A, B, C, D, f3, K3, expand ( eData, 56) );
-+ subRound (D, E, A, B, C, f3, K3, expand ( eData, 57) );
-+ subRound (C, D, E, A, B, f3, K3, expand ( eData, 58) );
-+ subRound (B, C, D, E, A, f3, K3, expand ( eData, 59) );
-+
-+ subRound (A, B, C, D, E, f4, K4, expand ( eData, 60) );
-+ subRound (E, A, B, C, D, f4, K4, expand ( eData, 61) );
-+ subRound (D, E, A, B, C, f4, K4, expand ( eData, 62) );
-+ subRound (C, D, E, A, B, f4, K4, expand ( eData, 63) );
-+ subRound (B, C, D, E, A, f4, K4, expand ( eData, 64) );
-+ subRound (A, B, C, D, E, f4, K4, expand ( eData, 65) );
-+ subRound (E, A, B, C, D, f4, K4, expand ( eData, 66) );
-+ subRound (D, E, A, B, C, f4, K4, expand ( eData, 67) );
-+ subRound (C, D, E, A, B, f4, K4, expand ( eData, 68) );
-+ subRound (B, C, D, E, A, f4, K4, expand ( eData, 69) );
-+ subRound (A, B, C, D, E, f4, K4, expand ( eData, 70) );
-+ subRound (E, A, B, C, D, f4, K4, expand ( eData, 71) );
-+ subRound (D, E, A, B, C, f4, K4, expand ( eData, 72) );
-+ subRound (C, D, E, A, B, f4, K4, expand ( eData, 73) );
-+ subRound (B, C, D, E, A, f4, K4, expand ( eData, 74) );
-+ subRound (A, B, C, D, E, f4, K4, expand ( eData, 75) );
-+ subRound (E, A, B, C, D, f4, K4, expand ( eData, 76) );
-+ subRound (D, E, A, B, C, f4, K4, expand ( eData, 77) );
-+ subRound (C, D, E, A, B, f4, K4, expand ( eData, 78) );
-+ subRound (B, C, D, E, A, f4, K4, expand ( eData, 79) );
-+
-+ /* Build message digest */
-+ digest[0] += A;
-+ digest[1] += B;
-+ digest[2] += C;
-+ digest[3] += D;
-+ digest[4] += E;
-+}
-+
-+/* When run on a little-endian CPU we need to perform byte reversal on an
-+ array of longwords. */
-+
-+#ifdef WORDS_BIGENDIAN
-+#define swap_words(buffer, byte_count)
-+#else
-+static void
-+swap_words (dbus_uint32_t *buffer,
-+ int byte_count)
-+{
-+ byte_count /= sizeof (dbus_uint32_t);
-+ while (byte_count--)
-+ {
-+ *buffer = DBUS_UINT32_SWAP_LE_BE (*buffer);
-+ ++buffer;
-+ }
-+}
-+#endif
-+
-+static void
-+sha_init (DBusSHAContext *context)
-+{
-+ /* Set the h-vars to their initial values */
-+ context->digest[0] = h0init;
-+ context->digest[1] = h1init;
-+ context->digest[2] = h2init;
-+ context->digest[3] = h3init;
-+ context->digest[4] = h4init;
-+
-+ /* Initialise bit count */
-+ context->count_lo = context->count_hi = 0;
-+}
-+
-+static void
-+sha_append (DBusSHAContext *context,
-+ const unsigned char *buffer,
-+ unsigned int count)
-+{
-+ dbus_uint32_t tmp;
-+ unsigned int dataCount;
-+
-+ /* Update bitcount */
-+ tmp = context->count_lo;
-+ if (( context->count_lo = tmp + ( ( dbus_uint32_t) count << 3) ) < tmp)
-+ context->count_hi++; /* Carry from low to high */
-+ context->count_hi += count >> 29;
-+
-+ /* Get count of bytes already in data */
-+ dataCount = (int) (tmp >> 3) & 0x3F;
-+
-+ /* Handle any leading odd-sized chunks */
-+ if (dataCount)
-+ {
-+ unsigned char *p = (unsigned char *) context->data + dataCount;
-+
-+ dataCount = SHA_DATASIZE - dataCount;
-+ if (count < dataCount)
-+ {
-+ memmove (p, buffer, count);
-+ return;
-+ }
-+ memmove (p, buffer, dataCount);
-+ swap_words (context->data, SHA_DATASIZE);
-+ SHATransform (context->digest, context->data);
-+ buffer += dataCount;
-+ count -= dataCount;
-+ }
-+
-+ /* Process data in SHA_DATASIZE chunks */
-+ while (count >= SHA_DATASIZE)
-+ {
-+ memmove (context->data, buffer, SHA_DATASIZE);
-+ swap_words (context->data, SHA_DATASIZE);
-+ SHATransform (context->digest, context->data);
-+ buffer += SHA_DATASIZE;
-+ count -= SHA_DATASIZE;
-+ }
-+
-+ /* Handle any remaining bytes of data. */
-+ memmove (context->data, buffer, count);
-+}
-+
-+
-+/* Final wrapup - pad to SHA_DATASIZE-byte boundary with the bit pattern
-+ 1 0* (64-bit count of bits processed, MSB-first) */
-+
-+static void
-+sha_finish (DBusSHAContext *context, unsigned char digest[20])
-+{
-+ int count;
-+ unsigned char *data_p;
-+
-+ /* Compute number of bytes mod 64 */
-+ count = (int) context->count_lo;
-+ count = (count >> 3) & 0x3F;
-+
-+ /* Set the first char of padding to 0x80. This is safe since there is
-+ always at least one byte free */
-+ data_p = (unsigned char *) context->data + count;
-+ *data_p++ = 0x80;
-+
-+ /* Bytes of padding needed to make 64 bytes */
-+ count = SHA_DATASIZE - 1 - count;
-+
-+ /* Pad out to 56 mod 64 */
-+ if (count < 8)
-+ {
-+ /* Two lots of padding: Pad the first block to 64 bytes */
-+ memset (data_p, 0, count);
-+ swap_words (context->data, SHA_DATASIZE);
-+ SHATransform (context->digest, context->data);
-+
-+ /* Now fill the next block with 56 bytes */
-+ memset (context->data, 0, SHA_DATASIZE - 8);
-+ }
-+ else
-+ /* Pad block to 56 bytes */
-+ memset (data_p, 0, count - 8);
-+
-+ /* Append length in bits and transform */
-+ context->data[14] = context->count_hi;
-+ context->data[15] = context->count_lo;
-+
-+ swap_words (context->data, SHA_DATASIZE - 8);
-+ SHATransform (context->digest, context->data);
-+ swap_words (context->digest, SHA_DIGESTSIZE);
-+ memmove (digest, context->digest, SHA_DIGESTSIZE);
-+}
-+
-+/** @} */ /* End of internals */
-+
-+/**
-+ * @addtogroup DBusSHA
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Initializes the SHA context.
-+ *
-+ * @param context an uninitialized context, typically on the stack.
-+ */
-+void
-+_dbus_sha_init (DBusSHAContext *context)
-+{
-+ sha_init (context);
-+}
-+
-+/**
-+ * Feeds more data into an existing shasum computation.
-+ *
-+ * @param context the SHA context
-+ * @param data the additional data to hash
-+ */
-+void
-+_dbus_sha_update (DBusSHAContext *context,
-+ const DBusString *data)
-+{
-+ unsigned int inputLen;
-+ const unsigned char *input;
-+
-+ input = (const unsigned char*) _dbus_string_get_const_data (data);
-+ inputLen = _dbus_string_get_length (data);
-+
-+ sha_append (context, input, inputLen);
-+}
-+
-+/**
-+ * SHA finalization. Ends an SHA message-digest operation, writing the
-+ * the message digest and zeroing the context. The results are
-+ * returned as a raw 20-byte digest, not as the ascii-hex-digits
-+ * string form of the digest.
-+ *
-+ * @param context the SHA context
-+ * @param results string to append the 20-byte SHA digest to
-+ * @returns #FALSE if not enough memory to append the digest
-+ *
-+ */
-+dbus_bool_t
-+_dbus_sha_final (DBusSHAContext *context,
-+ DBusString *results)
-+{
-+ unsigned char digest[20];
-+
-+ sha_finish (context, digest);
-+
-+ if (!_dbus_string_append_len (results, digest, 20))
-+ return FALSE;
-+
-+ /* some kind of security paranoia, though it seems pointless
-+ * to me given the nonzeroed stuff flying around
-+ */
-+ memset ((void*)context, '\0', sizeof (DBusSHAContext));
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Computes the ASCII hex-encoded shasum of the given data and
-+ * appends it to the output string.
-+ *
-+ * @param data input data to be hashed
-+ * @param ascii_output string to append ASCII shasum to
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_sha_compute (const DBusString *data,
-+ DBusString *ascii_output)
-+{
-+ DBusSHAContext context;
-+ DBusString digest;
-+
-+ _dbus_sha_init (&context);
-+
-+ _dbus_sha_update (&context, data);
-+
-+ if (!_dbus_string_init (&digest))
-+ return FALSE;
-+
-+ if (!_dbus_sha_final (&context, &digest))
-+ goto error;
-+
-+ if (!_dbus_string_hex_encode (&digest, 0, ascii_output,
-+ _dbus_string_get_length (ascii_output)))
-+ goto error;
-+
-+ _dbus_string_free (&digest);
-+
-+ return TRUE;
-+
-+ error:
-+ _dbus_string_free (&digest);
-+ return FALSE;
-+}
-+
-+/** @} */ /* end of exported functions */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+static dbus_bool_t
-+check_sha_binary (const unsigned char *input,
-+ int input_len,
-+ const char *expected)
-+{
-+ DBusString input_str;
-+ DBusString expected_str;
-+ DBusString results;
-+
-+ _dbus_string_init_const_len (&input_str, input, input_len);
-+ _dbus_string_init_const (&expected_str, expected);
-+
-+ if (!_dbus_string_init (&results))
-+ _dbus_assert_not_reached ("no memory for SHA-1 results");
-+
-+ if (!_dbus_sha_compute (&input_str, &results))
-+ _dbus_assert_not_reached ("no memory for SHA-1 results");
-+
-+ if (!_dbus_string_equal (&expected_str, &results))
-+ {
-+ _dbus_warn ("Expected hash %s got %s for SHA-1 sum\n",
-+ expected,
-+ _dbus_string_get_const_data (&results));
-+ _dbus_string_free (&results);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&results);
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+check_sha_str (const char *input,
-+ const char *expected)
-+{
-+ return check_sha_binary (input, strlen (input), expected);
-+}
-+
-+static dbus_bool_t
-+decode_compact_string (const DBusString *line,
-+ DBusString *decoded)
-+{
-+ int n_bits;
-+ dbus_bool_t current_b;
-+ int offset;
-+ int next;
-+ long val;
-+ int length_bytes;
-+
-+ offset = 0;
-+ next = 0;
-+
-+ if (!_dbus_string_parse_int (line, offset, &val, &next))
-+ {
-+ fprintf (stderr, "could not parse length at start of compact string: %s\n",
-+ _dbus_string_get_const_data (line));
-+ return FALSE;
-+ }
-+
-+ _dbus_string_skip_blank (line, next, &next);
-+
-+ offset = next;
-+ if (!_dbus_string_parse_int (line, offset, &val, &next))
-+ {
-+ fprintf (stderr, "could not parse start bit 'b' in compact string: %s\n",
-+ _dbus_string_get_const_data (line));
-+ return FALSE;
-+ }
-+
-+ if (!(val == 0 || val == 1))
-+ {
-+ fprintf (stderr, "the value 'b' must be 0 or 1, see sha-1/Readme.txt\n");
-+ return FALSE;
-+ }
-+
-+ _dbus_string_skip_blank (line, next, &next);
-+
-+ current_b = val;
-+ n_bits = 0;
-+
-+ while (next < _dbus_string_get_length (line))
-+ {
-+ int total_bits;
-+
-+ offset = next;
-+
-+ if (_dbus_string_get_byte (line, offset) == '^')
-+ break;
-+
-+ if (!_dbus_string_parse_int (line, offset, &val, &next))
-+ {
-+ fprintf (stderr, "could not parse bit count in compact string\n");
-+ return FALSE;
-+ }
-+
-+ /* We now append "val" copies of "current_b" bits to the string */
-+ total_bits = n_bits + val;
-+ while (n_bits < total_bits)
-+ {
-+ int byte_containing_next_bit = n_bits / 8;
-+ int bit_containing_next_bit = 7 - (n_bits % 8);
-+ unsigned char old_byte;
-+
-+ if (byte_containing_next_bit >= _dbus_string_get_length (decoded))
-+ {
-+ if (!_dbus_string_set_length (decoded, byte_containing_next_bit + 1))
-+ _dbus_assert_not_reached ("no memory to extend to next byte");
-+ }
-+
-+ old_byte = _dbus_string_get_byte (decoded, byte_containing_next_bit);
-+ old_byte |= current_b << bit_containing_next_bit;
-+
-+#if 0
-+ printf ("Appending bit %d to byte %d at bit %d resulting in byte 0x%x\n",
-+ current_b, byte_containing_next_bit,
-+ bit_containing_next_bit, old_byte);
-+#endif
-+
-+ _dbus_string_set_byte (decoded, byte_containing_next_bit, old_byte);
-+
-+ ++n_bits;
-+ }
-+
-+ _dbus_string_skip_blank (line, next, &next);
-+
-+ current_b = !current_b;
-+ }
-+
-+ length_bytes = (n_bits / 8 + ((n_bits % 8) ? 1 : 0));
-+
-+ if (_dbus_string_get_length (decoded) != length_bytes)
-+ {
-+ fprintf (stderr, "Expected length %d bytes %d bits for compact string, got %d bytes\n",
-+ length_bytes, n_bits, _dbus_string_get_length (decoded));
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+get_next_expected_result (DBusString *results,
-+ DBusString *result)
-+{
-+ DBusString line;
-+ dbus_bool_t retval;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_string_init (&line))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ next_iteration:
-+ while (_dbus_string_pop_line (results, &line))
-+ {
-+ _dbus_string_delete_leading_blanks (&line);
-+
-+ if (_dbus_string_get_length (&line) == 0)
-+ goto next_iteration;
-+ else if (_dbus_string_starts_with_c_str (&line, "#"))
-+ goto next_iteration;
-+ else if (_dbus_string_starts_with_c_str (&line, "H>"))
-+ {
-+ /* don't print */
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line, "D>") ||
-+ _dbus_string_starts_with_c_str (&line, "<D"))
-+ goto next_iteration;
-+ else
-+ {
-+ int i;
-+
-+ if (!_dbus_string_move (&line, 0, result, 0))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ i = 0;
-+ while (i < _dbus_string_get_length (result))
-+ {
-+ switch (_dbus_string_get_byte (result, i))
-+ {
-+ case 'A':
-+ _dbus_string_set_byte (result, i, 'a');
-+ break;
-+ case 'B':
-+ _dbus_string_set_byte (result, i, 'b');
-+ break;
-+ case 'C':
-+ _dbus_string_set_byte (result, i, 'c');
-+ break;
-+ case 'D':
-+ _dbus_string_set_byte (result, i, 'd');
-+ break;
-+ case 'E':
-+ _dbus_string_set_byte (result, i, 'e');
-+ break;
-+ case 'F':
-+ _dbus_string_set_byte (result, i, 'f');
-+ break;
-+ case '^':
-+ case ' ':
-+ _dbus_string_delete (result, i, 1);
-+ --i; /* to offset ++i below */
-+ break;
-+ }
-+
-+ ++i;
-+ }
-+
-+ break;
-+ }
-+ }
-+
-+ retval = TRUE;
-+
-+ /* out: */
-+ _dbus_string_free (&line);
-+ return retval;
-+}
-+
-+static dbus_bool_t
-+process_test_data (const char *test_data_dir)
-+{
-+ DBusString tests_file;
-+ DBusString results_file;
-+ DBusString tests;
-+ DBusString results;
-+ DBusString line;
-+ DBusString tmp;
-+ int line_no;
-+ dbus_bool_t retval;
-+ int success_count;
-+ DBusError error;
-+
-+ retval = FALSE;
-+
-+ if (!_dbus_string_init (&tests_file))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_init (&results_file))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_init (&tests))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_init (&results))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_init (&line))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_append (&tests_file, test_data_dir))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_append (&results_file, test_data_dir))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ _dbus_string_init_const (&tmp, "sha-1/byte-messages.sha1");
-+ if (!_dbus_concat_dir_and_file (&tests_file, &tmp))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ _dbus_string_init_const (&tmp, "sha-1/byte-hashes.sha1");
-+ if (!_dbus_concat_dir_and_file (&results_file, &tmp))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ dbus_error_init (&error);
-+ if (!_dbus_file_get_contents (&tests, &tests_file, &error))
-+ {
-+ fprintf (stderr, "could not load test data file %s: %s\n",
-+ _dbus_string_get_const_data (&tests_file),
-+ error.message);
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+
-+ if (!_dbus_file_get_contents (&results, &results_file, &error))
-+ {
-+ fprintf (stderr, "could not load results data file %s: %s\n",
-+ _dbus_string_get_const_data (&results_file), error.message);
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+
-+ success_count = 0;
-+ line_no = 0;
-+ next_iteration:
-+ while (_dbus_string_pop_line (&tests, &line))
-+ {
-+ line_no += 1;
-+
-+ _dbus_string_delete_leading_blanks (&line);
-+
-+ if (_dbus_string_get_length (&line) == 0)
-+ goto next_iteration;
-+ else if (_dbus_string_starts_with_c_str (&line, "#"))
-+ goto next_iteration;
-+ else if (_dbus_string_starts_with_c_str (&line, "H>"))
-+ {
-+ printf ("SHA-1: %s\n", _dbus_string_get_const_data (&line));
-+
-+ if (_dbus_string_find (&line, 0, "Type 3", NULL))
-+ {
-+ /* See sha-1/Readme.txt - the "Type 3" tests are
-+ * random seeds, rather than data to be hashed.
-+ * we'd have to do a little bit more implementation
-+ * to use those tests.
-+ */
-+
-+ printf (" (ending tests due to Type 3 tests seen - this is normal)\n");
-+ break;
-+ }
-+ }
-+ else if (_dbus_string_starts_with_c_str (&line, "D>") ||
-+ _dbus_string_starts_with_c_str (&line, "<D"))
-+ goto next_iteration;
-+ else
-+ {
-+ DBusString test;
-+ DBusString result;
-+ DBusString next_line;
-+ DBusString expected;
-+ dbus_bool_t success;
-+
-+ success = FALSE;
-+
-+ if (!_dbus_string_init (&next_line))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_init (&expected))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_init (&test))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_init (&result))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ /* the "compact strings" are "^"-terminated not
-+ * newline-terminated so readahead to find the
-+ * "^"
-+ */
-+ while (!_dbus_string_find (&line, 0, "^", NULL) &&
-+ _dbus_string_pop_line (&tests, &next_line))
-+ {
-+ if (!_dbus_string_append_byte (&line, ' ') ||
-+ !_dbus_string_move (&next_line, 0, &line,
-+ _dbus_string_get_length (&line)))
-+ _dbus_assert_not_reached ("no memory");
-+ }
-+
-+ if (!decode_compact_string (&line, &test))
-+ {
-+ fprintf (stderr, "Failed to decode line %d as a compact string\n",
-+ line_no);
-+ goto failure;
-+ }
-+
-+ if (!_dbus_sha_compute (&test, &result))
-+ _dbus_assert_not_reached ("no memory for SHA-1 result");
-+
-+ if (!get_next_expected_result (&results, &expected))
-+ {
-+ fprintf (stderr, "Failed to read an expected result\n");
-+ goto failure;
-+ }
-+
-+ if (!_dbus_string_equal (&result, &expected))
-+ {
-+ fprintf (stderr, " for line %d got hash %s expected %s\n",
-+ line_no,
-+ _dbus_string_get_const_data (&result),
-+ _dbus_string_get_const_data (&expected));
-+ goto failure;
-+ }
-+ else
-+ {
-+ success_count += 1;
-+ }
-+
-+ success = TRUE;
-+
-+ failure:
-+ _dbus_string_free (&test);
-+ _dbus_string_free (&result);
-+ _dbus_string_free (&next_line);
-+ _dbus_string_free (&expected);
-+
-+ if (!success)
-+ goto out;
-+ }
-+ }
-+
-+ retval = TRUE;
-+
-+ printf ("Passed the %d SHA-1 tests in the test file\n",
-+ success_count);
-+
-+ out:
-+ _dbus_string_free (&tests_file);
-+ _dbus_string_free (&results_file);
-+ _dbus_string_free (&tests);
-+ _dbus_string_free (&results);
-+ _dbus_string_free (&line);
-+
-+ return retval;
-+}
-+
-+/**
-+ * @ingroup DBusSHAInternals
-+ * Unit test for SHA computation.
-+ *
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_sha_test (const char *test_data_dir)
-+{
-+ unsigned char all_bytes[256];
-+ int i;
-+
-+ if (test_data_dir != NULL)
-+ {
-+ if (!process_test_data (test_data_dir))
-+ return FALSE;
-+ }
-+ else
-+ printf ("No test data dir\n");
-+
-+ i = 0;
-+ while (i < 256)
-+ {
-+ all_bytes[i] = i;
-+ ++i;
-+ }
-+
-+ if (!check_sha_binary (all_bytes, 256,
-+ "4916d6bdb7f78e6803698cab32d1586ea457dfc8"))
-+ return FALSE;
-+
-+#define CHECK(input,expected) if (!check_sha_str (input, expected)) return FALSE
-+
-+ CHECK ("", "da39a3ee5e6b4b0d3255bfef95601890afd80709");
-+ CHECK ("a", "86f7e437faa5a7fce15d1ddcb9eaeaea377667b8");
-+ CHECK ("abc", "a9993e364706816aba3e25717850c26c9cd0d89d");
-+ CHECK ("message digest", "c12252ceda8be8994d5fa0290a47231c1d16aae3");
-+ CHECK ("abcdefghijklmnopqrstuvwxyz", "32d10c7b8cf96570ca04ce37f2a19d84240d3a89");
-+ CHECK ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
-+ "761c457bf73b14d27e9e9265c46f4b4dda11f940");
-+ CHECK ("12345678901234567890123456789012345678901234567890123456789012345678901234567890",
-+ "50abf5706a150990a08b2c5ea40fa0e585554732");
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-sha.h dbus-0.61/dbus/dbus-sha.h
---- dbus-0.61.orig/dbus/dbus-sha.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-sha.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,55 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-sha.h SHA-1 implementation
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_SHA_H
-+#define DBUS_SHA_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-string.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusSHAContext DBusSHAContext;
-+
-+/**
-+ * Struct storing state of the SHA algorithm
-+ */
-+struct DBusSHAContext
-+{
-+ dbus_uint32_t digest[5]; /**< Message digest */
-+ dbus_uint32_t count_lo; /**< 64-bit bit count */
-+ dbus_uint32_t count_hi; /**< No clue */
-+ dbus_uint32_t data[16]; /**< SHA data buffer */
-+};
-+
-+void _dbus_sha_init (DBusSHAContext *context);
-+void _dbus_sha_update (DBusSHAContext *context,
-+ const DBusString *data);
-+dbus_bool_t _dbus_sha_final (DBusSHAContext *context,
-+ DBusString *results);
-+dbus_bool_t _dbus_sha_compute (const DBusString *data,
-+ DBusString *ascii_output);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SHA_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-shared.h dbus-0.61/dbus/dbus-shared.h
---- dbus-0.61.orig/dbus/dbus-shared.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-shared.h 2005-12-20 00:58:22.000000000 +0100
-@@ -0,0 +1,108 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-shared.h Stuff used by both dbus/dbus.h low-level and C/C++ binding APIs
-+ *
-+ * Copyright (C) 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_SHARED_H
-+#define DBUS_SHARED_H
-+
-+/* Don't include anything in here from anywhere else. It's
-+ * intended for use by any random library.
-+ */
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+/* Normally docs are in .c files, but there isn't a .c file for this. */
-+/**
-+ * @defgroup DBusShared Shared constants
-+ * @ingroup DBus
-+ *
-+ * Shared constants.
-+ *
-+ * @brief Stuff used by both dbus/dbus.h low-level and C/C++ binding APIs
-+ * @{
-+ */
-+
-+
-+typedef enum
-+{
-+ DBUS_BUS_SESSION, /**< The login session bus */
-+ DBUS_BUS_SYSTEM, /**< The systemwide bus */
-+ DBUS_BUS_STARTER /**< The bus that started us, if any */
-+} DBusBusType;
-+
-+typedef enum
-+{
-+ DBUS_HANDLER_RESULT_HANDLED, /**< Message has had its effect */
-+ DBUS_HANDLER_RESULT_NOT_YET_HANDLED, /**< Message has not had any effect */
-+ DBUS_HANDLER_RESULT_NEED_MEMORY /**< Need more memory to return another result */
-+} DBusHandlerResult;
-+
-+/* Services */
-+#define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
-+
-+/* Paths */
-+#define DBUS_PATH_DBUS "/org/freedesktop/DBus"
-+#define DBUS_PATH_LOCAL "/org/freedesktop/DBus/Local"
-+
-+/* Interfaces, these #define don't do much other than
-+ * catch typos at compile time
-+ */
-+#define DBUS_INTERFACE_DBUS "org.freedesktop.DBus"
-+#define DBUS_INTERFACE_INTROSPECTABLE "org.freedesktop.DBus.Introspectable"
-+#define DBUS_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties"
-+#define DBUS_INTERFACE_PEER "org.freedesktop.DBus.Peer"
-+
-+/** This is a special interface whose methods can only be invoked
-+ * by the local implementation (messages from remote apps aren't
-+ * allowed to specify this interface).
-+ */
-+#define DBUS_INTERFACE_LOCAL "org.freedesktop.DBus.Local"
-+
-+/* Owner flags */
-+#define DBUS_NAME_FLAG_ALLOW_REPLACEMENT 0x1 /**< Allow another service to become the primary owner if requested */
-+#define DBUS_NAME_FLAG_REPLACE_EXISTING 0x2 /**< Request to replace the current primary owner */
-+#define DBUS_NAME_FLAG_DO_NOT_QUEUE 0x4 /**< If we can not become the primary owner do not place us in the queue */
-+
-+/* Replies to request for a name */
-+#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1 /**< Service has become the primary owner of the requested name */
-+#define DBUS_REQUEST_NAME_REPLY_IN_QUEUE 2 /**< Service could not become the primary owner and has been placed in the queue */
-+#define DBUS_REQUEST_NAME_REPLY_EXISTS 3 /**< Service is already in the queue */
-+#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4 /**< Service is already the primary owner */
-+
-+/* Replies to releasing a name */
-+#define DBUS_RELEASE_NAME_REPLY_RELEASED 1 /**< Service was released from the given name */
-+#define DBUS_RELEASE_NAME_REPLY_NON_EXISTENT 2 /**< The given name does not exist on the bus */
-+#define DBUS_RELEASE_NAME_REPLY_NOT_OWNER 3 /**< Service is not an owner of the given name */
-+
-+/* Replies to service starts */
-+#define DBUS_START_REPLY_SUCCESS 1 /**< service was auto started */
-+#define DBUS_START_REPLY_ALREADY_RUNNING 2 /**< service was already running */
-+
-+/** @} */
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* DBUS_SHARED_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-shell.c dbus-0.61/dbus/dbus-shell.c
---- dbus-0.61.orig/dbus/dbus-shell.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-shell.c 2005-07-14 22:44:15.000000000 +0200
-@@ -0,0 +1,706 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-shell.c Shell command line utility functions.
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <string.h>
-+#include "dbus-internals.h"
-+#include "dbus-list.h"
-+#include "dbus-memory.h"
-+#include "dbus-protocol.h"
-+#include "dbus-shell.h"
-+#include "dbus-string.h"
-+
-+/* Single quotes preserve the literal string exactly. escape
-+ * sequences are not allowed; not even \' - if you want a '
-+ * in the quoted text, you have to do something like 'foo'\''bar'
-+ *
-+ * Double quotes allow $ ` " \ and newline to be escaped with backslash.
-+ * Otherwise double quotes preserve things literally.
-+ */
-+
-+static dbus_bool_t
-+unquote_string_inplace (char* str, char** end)
-+{
-+ char* dest;
-+ char* s;
-+ char quote_char;
-+
-+ dest = s = str;
-+
-+ quote_char = *s;
-+
-+ if (!(*s == '"' || *s == '\''))
-+ {
-+ *end = str;
-+ return FALSE;
-+ }
-+
-+ /* Skip the initial quote mark */
-+ ++s;
-+
-+ if (quote_char == '"')
-+ {
-+ while (*s)
-+ {
-+ _dbus_assert(s > dest); /* loop invariant */
-+
-+ switch (*s)
-+ {
-+ case '"':
-+ /* End of the string, return now */
-+ *dest = '\0';
-+ ++s;
-+ *end = s;
-+ return TRUE;
-+
-+ case '\\':
-+ /* Possible escaped quote or \ */
-+ ++s;
-+ switch (*s)
-+ {
-+ case '"':
-+ case '\\':
-+ case '`':
-+ case '$':
-+ case '\n':
-+ *dest = *s;
-+ ++s;
-+ ++dest;
-+ break;
-+
-+ default:
-+ /* not an escaped char */
-+ *dest = '\\';
-+ ++dest;
-+ /* ++s already done. */
-+ break;
-+ }
-+ break;
-+
-+ default:
-+ *dest = *s;
-+ ++dest;
-+ ++s;
-+ break;
-+ }
-+
-+ _dbus_assert(s > dest); /* loop invariant */
-+ }
-+ }
-+ else
-+ {
-+ while (*s)
-+ {
-+ _dbus_assert(s > dest); /* loop invariant */
-+
-+ if (*s == '\'')
-+ {
-+ /* End of the string, return now */
-+ *dest = '\0';
-+ ++s;
-+ *end = s;
-+ return TRUE;
-+ }
-+ else
-+ {
-+ *dest = *s;
-+ ++dest;
-+ ++s;
-+ }
-+
-+ _dbus_assert(s > dest); /* loop invariant */
-+ }
-+ }
-+
-+ /* If we reach here this means the close quote was never encountered */
-+
-+ *dest = '\0';
-+
-+ *end = s;
-+ return FALSE;
-+}
-+
-+/**
-+ * Quotes a string so that the shell (/bin/sh) will interpret the
-+ * quoted string to mean @unquoted_string. If you pass a filename to
-+ * the shell, for example, you should first quote it with this
-+ * function. The return value must be freed with dbus_free(). The
-+ * quoting style used is undefined (single or double quotes may be
-+ * used).
-+ *
-+ * @unquoted_string: a literal string
-+ **/
-+char*
-+_dbus_shell_quote (const char *unquoted_string)
-+{
-+ /* We always use single quotes, because the algorithm is cheesier.
-+ * We could use double if we felt like it, that might be more
-+ * human-readable.
-+ */
-+
-+ const char *p;
-+ char *ret;
-+ DBusString dest;
-+
-+ _dbus_string_init (&dest);
-+
-+ p = unquoted_string;
-+
-+ /* could speed this up a lot by appending chunks of text at a
-+ * time.
-+ */
-+ while (*p)
-+ {
-+ /* Replace literal ' with a close ', a \', and a open ' */
-+ if (*p == '\'')
-+ {
-+ if (!_dbus_string_append (&dest, "'\\''"))
-+ {
-+ _dbus_string_free (&dest);
-+ return NULL;
-+ }
-+ }
-+ else
-+ {
-+ if (!_dbus_string_append_byte (&dest, *p))
-+ {
-+ _dbus_string_free (&dest);
-+ return NULL;
-+ }
-+ }
-+
-+ ++p;
-+ }
-+
-+ /* close the quote */
-+ if (_dbus_string_append_byte (&dest, '\''))
-+ {
-+ ret = _dbus_strdup (_dbus_string_get_data (&dest));
-+ _dbus_string_free (&dest);
-+
-+ return ret;
-+ }
-+
-+ _dbus_string_free (&dest);
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Unquotes a string as the shell (/bin/sh) would. Only handles
-+ * quotes; if a string contains file globs, arithmetic operators,
-+ * variables, backticks, redirections, or other special-to-the-shell
-+ * features, the result will be different from the result a real shell
-+ * would produce (the variables, backticks, etc. will be passed
-+ * through literally instead of being expanded). This function is
-+ * guaranteed to succeed if applied to the result of
-+ * _dbus_shell_quote(). If it fails, it returns %NULL.
-+ * The @quoted_string need not actually contain quoted or
-+ * escaped text; _dbus_shell_unquote() simply goes through the string and
-+ * unquotes/unescapes anything that the shell would. Both single and
-+ * double quotes are handled, as are escapes including escaped
-+ * newlines. The return value must be freed with dbus_free().
-+ *
-+ * Shell quoting rules are a bit strange. Single quotes preserve the
-+ * literal string exactly. escape sequences are not allowed; not even
-+ * \' - if you want a ' in the quoted text, you have to do something
-+ * like 'foo'\''bar'. Double quotes allow $, `, ", \, and newline to
-+ * be escaped with backslash. Otherwise double quotes preserve things
-+ * literally.
-+ *
-+ * @quoted_string: shell-quoted string
-+ **/
-+char*
-+_dbus_shell_unquote (const char *quoted_string)
-+{
-+ char *unquoted;
-+ char *end;
-+ char *start;
-+ char *ret;
-+ DBusString retval;
-+
-+ unquoted = _dbus_strdup (quoted_string);
-+ if (unquoted == NULL)
-+ return NULL;
-+
-+ start = unquoted;
-+ end = unquoted;
-+ if (!_dbus_string_init (&retval))
-+ {
-+ dbus_free (unquoted);
-+ return NULL;
-+ }
-+
-+ /* The loop allows cases such as
-+ * "foo"blah blah'bar'woo foo"baz"la la la\'\''foo'
-+ */
-+ while (*start)
-+ {
-+ /* Append all non-quoted chars, honoring backslash escape
-+ */
-+
-+ while (*start && !(*start == '"' || *start == '\''))
-+ {
-+ if (*start == '\\')
-+ {
-+ /* all characters can get escaped by backslash,
-+ * except newline, which is removed if it follows
-+ * a backslash outside of quotes
-+ */
-+
-+ ++start;
-+ if (*start)
-+ {
-+ if (*start != '\n')
-+ {
-+ if (!_dbus_string_append_byte (&retval, *start))
-+ goto error;
-+ }
-+ ++start;
-+ }
-+ }
-+ else
-+ {
-+ if (!_dbus_string_append_byte (&retval, *start))
-+ goto error;
-+ ++start;
-+ }
-+ }
-+
-+ if (*start)
-+ {
-+ if (!unquote_string_inplace (start, &end))
-+ goto error;
-+ else
-+ {
-+ if (!_dbus_string_append (&retval, start))
-+ goto error;
-+ start = end;
-+ }
-+ }
-+ }
-+
-+ ret = _dbus_strdup (_dbus_string_get_data (&retval));
-+ if (!ret)
-+ goto error;
-+
-+ dbus_free (unquoted);
-+ _dbus_string_free (&retval);
-+
-+ return ret;
-+
-+ error:
-+ dbus_free (unquoted);
-+ _dbus_string_free (&retval);
-+ return NULL;
-+}
-+
-+/* _dbus_shell_parse_argv() does a semi-arbitrary weird subset of the way
-+ * the shell parses a command line. We don't do variable expansion,
-+ * don't understand that operators are tokens, don't do tilde expansion,
-+ * don't do command substitution, no arithmetic expansion, IFS gets ignored,
-+ * don't do filename globs, don't remove redirection stuff, etc.
-+ *
-+ * READ THE UNIX98 SPEC on "Shell Command Language" before changing
-+ * the behavior of this code.
-+ *
-+ * Steps to parsing the argv string:
-+ *
-+ * - tokenize the string (but since we ignore operators,
-+ * our tokenization may diverge from what the shell would do)
-+ * note that tokenization ignores the internals of a quoted
-+ * word and it always splits on spaces, not on IFS even
-+ * if we used IFS. We also ignore "end of input indicator"
-+ * (I guess this is control-D?)
-+ *
-+ * Tokenization steps, from UNIX98 with operator stuff removed,
-+ * are:
-+ *
-+ * 1) "If the current character is backslash, single-quote or
-+ * double-quote (\, ' or ") and it is not quoted, it will affect
-+ * quoting for subsequent characters up to the end of the quoted
-+ * text. The rules for quoting are as described in Quoting
-+ * . During token recognition no substitutions will be actually
-+ * performed, and the result token will contain exactly the
-+ * characters that appear in the input (except for newline
-+ * character joining), unmodified, including any embedded or
-+ * enclosing quotes or substitution operators, between the quote
-+ * mark and the end of the quoted text. The token will not be
-+ * delimited by the end of the quoted field."
-+ *
-+ * 2) "If the current character is an unquoted newline character,
-+ * the current token will be delimited."
-+ *
-+ * 3) "If the current character is an unquoted blank character, any
-+ * token containing the previous character is delimited and the
-+ * current character will be discarded."
-+ *
-+ * 4) "If the previous character was part of a word, the current
-+ * character will be appended to that word."
-+ *
-+ * 5) "If the current character is a "#", it and all subsequent
-+ * characters up to, but excluding, the next newline character
-+ * will be discarded as a comment. The newline character that
-+ * ends the line is not considered part of the comment. The
-+ * "#" starts a comment only when it is at the beginning of a
-+ * token. Since the search for the end-of-comment does not
-+ * consider an escaped newline character specially, a comment
-+ * cannot be continued to the next line."
-+ *
-+ * 6) "The current character will be used as the start of a new word."
-+ *
-+ *
-+ * - for each token (word), perform portions of word expansion, namely
-+ * field splitting (using default whitespace IFS) and quote
-+ * removal. Field splitting may increase the number of words.
-+ * Quote removal does not increase the number of words.
-+ *
-+ * "If the complete expansion appropriate for a word results in an
-+ * empty field, that empty field will be deleted from the list of
-+ * fields that form the completely expanded command, unless the
-+ * original word contained single-quote or double-quote characters."
-+ * - UNIX98 spec
-+ *
-+ *
-+ */
-+
-+static dbus_bool_t
-+delimit_token (DBusString *token,
-+ DBusList **retval,
-+ DBusError *error)
-+{
-+ char *str;
-+
-+ str = _dbus_strdup (_dbus_string_get_data (token));
-+ if (!str)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_list_append (retval, str))
-+ {
-+ dbus_free (str);
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static DBusList*
-+tokenize_command_line (const char *command_line, DBusError *error)
-+{
-+ char current_quote;
-+ const char *p;
-+ DBusString current_token;
-+ DBusList *retval = NULL;
-+ dbus_bool_t quoted;;
-+
-+ current_quote = '\0';
-+ quoted = FALSE;
-+ p = command_line;
-+
-+ if (!_dbus_string_init (¤t_token))
-+ {
-+ _DBUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ while (*p)
-+ {
-+ if (current_quote == '\\')
-+ {
-+ if (*p == '\n')
-+ {
-+ /* we append nothing; backslash-newline become nothing */
-+ }
-+ else
-+ {
-+ if (!_dbus_string_append_byte (¤t_token, '\\') ||
-+ !_dbus_string_append_byte (¤t_token, *p))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto error;
-+ }
-+ }
-+
-+ current_quote = '\0';
-+ }
-+ else if (current_quote == '#')
-+ {
-+ /* Discard up to and including next newline */
-+ while (*p && *p != '\n')
-+ ++p;
-+
-+ current_quote = '\0';
-+
-+ if (*p == '\0')
-+ break;
-+ }
-+ else if (current_quote)
-+ {
-+ if (*p == current_quote &&
-+ /* check that it isn't an escaped double quote */
-+ !(current_quote == '"' && quoted))
-+ {
-+ /* close the quote */
-+ current_quote = '\0';
-+ }
-+
-+ /* Everything inside quotes, and the close quote,
-+ * gets appended literally.
-+ */
-+
-+ if (!_dbus_string_append_byte (¤t_token, *p))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto error;
-+ }
-+ }
-+ else
-+ {
-+ switch (*p)
-+ {
-+ case '\n':
-+ if (!delimit_token (¤t_token, &retval, error))
-+ goto error;
-+
-+ _dbus_string_free (¤t_token);
-+
-+ if (!_dbus_string_init (¤t_token))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto init_error;
-+ }
-+
-+ break;
-+
-+ case ' ':
-+ case '\t':
-+ /* If the current token contains the previous char, delimit
-+ * the current token. A nonzero length
-+ * token should always contain the previous char.
-+ */
-+ if (_dbus_string_get_length (¤t_token) > 0)
-+ {
-+ if (!delimit_token (¤t_token, &retval, error))
-+ goto error;
-+
-+ _dbus_string_free (¤t_token);
-+
-+ if (!_dbus_string_init (¤t_token))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto init_error;
-+ }
-+
-+ }
-+
-+ /* discard all unquoted blanks (don't add them to a token) */
-+ break;
-+
-+
-+ /* single/double quotes are appended to the token,
-+ * escapes are maybe appended next time through the loop,
-+ * comment chars are never appended.
-+ */
-+
-+ case '\'':
-+ case '"':
-+ if (!_dbus_string_append_byte (¤t_token, *p))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto error;
-+ }
-+
-+ /* FALL THRU */
-+
-+ case '#':
-+ case '\\':
-+ current_quote = *p;
-+ break;
-+
-+ default:
-+ /* Combines rules 4) and 6) - if we have a token, append to it,
-+ * otherwise create a new token.
-+ */
-+ if (!_dbus_string_append_byte (¤t_token, *p))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto error;
-+ }
-+ break;
-+ }
-+ }
-+
-+ /* We need to count consecutive backslashes mod 2,
-+ * to detect escaped doublequotes.
-+ */
-+ if (*p != '\\')
-+ quoted = FALSE;
-+ else
-+ quoted = !quoted;
-+
-+ ++p;
-+ }
-+
-+ if (!delimit_token (¤t_token, &retval, error))
-+ goto error;
-+
-+ if (current_quote)
-+ {
-+ dbus_set_error_const (error, DBUS_ERROR_INVALID_ARGS, "Unclosed quotes in command line");
-+ goto error;
-+ }
-+
-+ if (retval == NULL)
-+ {
-+ dbus_set_error_const (error, DBUS_ERROR_INVALID_ARGS, "No tokens found in command line");
-+ goto error;
-+ }
-+
-+ _dbus_string_free (¤t_token);
-+
-+ return retval;
-+
-+ error:
-+ _dbus_string_free (¤t_token);
-+
-+ init_error:
-+ if (retval)
-+ {
-+ _dbus_list_foreach (&retval, (DBusForeachFunction) dbus_free, NULL);
-+ _dbus_list_clear (&retval);
-+ }
-+
-+ return NULL;
-+}
-+
-+/**
-+ * _dbus_shell_parse_argv:
-+ *
-+ * Parses a command line into an argument vector, in much the same way
-+ * the shell would, but without many of the expansions the shell would
-+ * perform (variable expansion, globs, operators, filename expansion,
-+ * etc. are not supported). The results are defined to be the same as
-+ * those you would get from a UNIX98 /bin/sh, as long as the input
-+ * contains none of the unsupported shell expansions. If the input
-+ * does contain such expansions, they are passed through
-+ * literally. Free the returned vector with dbus_free_string_array().
-+ *
-+ * @command_line: command line to parse
-+ * @argcp: return location for number of args
-+ * @argvp: return location for array of args
-+ * @error: error information
-+ **/
-+dbus_bool_t
-+_dbus_shell_parse_argv (const char *command_line,
-+ int *argcp,
-+ char ***argvp,
-+ DBusError *error)
-+{
-+ /* Code based on poptParseArgvString() from libpopt */
-+ int argc = 0;
-+ char **argv = NULL;
-+ DBusList *tokens = NULL;
-+ int i;
-+ DBusList *tmp_list;
-+
-+ if (!command_line)
-+ {
-+ _dbus_verbose ("Command line is NULL\n");
-+ return FALSE;
-+ }
-+
-+ tokens = tokenize_command_line (command_line, error);
-+ if (tokens == NULL)
-+ {
-+ _dbus_verbose ("No tokens for command line '%s'\n", command_line);
-+ return FALSE;
-+ }
-+
-+ /* Because we can't have introduced any new blank space into the
-+ * tokens (we didn't do any new expansions), we don't need to
-+ * perform field splitting. If we were going to honor IFS or do any
-+ * expansions, we would have to do field splitting on each word
-+ * here. Also, if we were going to do any expansion we would need to
-+ * remove any zero-length words that didn't contain quotes
-+ * originally; but since there's no expansion we know all words have
-+ * nonzero length, unless they contain quotes.
-+ *
-+ * So, we simply remove quotes, and don't do any field splitting or
-+ * empty word removal, since we know there was no way to introduce
-+ * such things.
-+ */
-+
-+ argc = _dbus_list_get_length (&tokens);
-+ argv = dbus_new (char *, argc + 1);
-+ if (!argv)
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto error;
-+ }
-+
-+ i = 0;
-+ tmp_list = tokens;
-+ while (tmp_list)
-+ {
-+ argv[i] = _dbus_shell_unquote (tmp_list->data);
-+
-+ if (!argv[i])
-+ {
-+ int j;
-+ for (j = 0; j < i; j++)
-+ dbus_free(argv[j]);
-+
-+ dbus_free (argv);
-+ _DBUS_SET_OOM (error);
-+ goto error;
-+ }
-+
-+ tmp_list = _dbus_list_get_next_link (&tokens, tmp_list);
-+ ++i;
-+ }
-+ argv[argc] = NULL;
-+
-+ _dbus_list_foreach (&tokens, (DBusForeachFunction) dbus_free, NULL);
-+ _dbus_list_clear (&tokens);
-+
-+ if (argcp)
-+ *argcp = argc;
-+
-+ if (argvp)
-+ *argvp = argv;
-+ else
-+ dbus_free_string_array (argv);
-+
-+ return TRUE;
-+
-+ error:
-+ _dbus_list_foreach (&tokens, (DBusForeachFunction) dbus_free, NULL);
-+ _dbus_list_clear (&tokens);
-+
-+ return FALSE;
-+
-+}
-diff -Naur dbus-0.61.orig/dbus/dbus-shell.h dbus-0.61/dbus/dbus-shell.h
---- dbus-0.61.orig/dbus/dbus-shell.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-shell.h 2005-07-14 22:44:15.000000000 +0200
-@@ -0,0 +1,42 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-shell.h Shell command line utility functions.
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+
-+#ifndef DBUS_SHELL_H
-+#define DBUS_SHELL_H
-+
-+DBUS_BEGIN_DECLS
-+
-+char* _dbus_shell_quote (const char *unquoted_string);
-+char* _dbus_shell_unquote (const char *quoted_string);
-+dbus_bool_t _dbus_shell_parse_argv (const char *command_line,
-+ int *argcp,
-+ char ***argvp,
-+ DBusError *error);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SHELL_H */
-+
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-signature.c dbus-0.61/dbus/dbus-signature.c
---- dbus-0.61.orig/dbus/dbus-signature.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-signature.c 2006-02-10 23:36:57.000000000 +0100
-@@ -0,0 +1,493 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-signature.c Routines for reading recursive type signatures
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-signature.h"
-+#include "dbus-marshal-recursive.h"
-+#include "dbus-marshal-basic.h"
-+#include "dbus-internals.h"
-+#include "dbus-test.h"
-+
-+typedef struct
-+{
-+ const char *pos;
-+ unsigned int finished : 1;
-+ unsigned int in_array : 1;
-+} DBusSignatureRealIter;
-+
-+/**
-+ * @defgroup DBusSignature Type signature parsing
-+ * @ingroup DBus
-+ * @brief Parsing D-BUS type signatures
-+ * @{
-+ */
-+
-+/**
-+ * Initializes a #DBusSignatureIter for reading a type signature. This
-+ * function is not safe to use on invalid signatures; be sure to
-+ * validate potentially invalid signatures with dbus_signature_validate
-+ * before using this function.
-+ *
-+ * @param iter pointer to an iterator to initialize
-+ * @param signature the type signature
-+ */
-+void
-+dbus_signature_iter_init (DBusSignatureIter *iter,
-+ const char *signature)
-+{
-+ DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-+
-+ real_iter->pos = signature;
-+ real_iter->finished = FALSE;
-+ real_iter->in_array = FALSE;
-+}
-+
-+/**
-+ * Returns the current type pointed to by the iterator.
-+ * If the iterator is pointing at a type code such as 's', then
-+ * it will be returned directly.
-+ *
-+ * However, when the parser encounters a container type start
-+ * character such as '(' for a structure, the corresponding type for
-+ * the container will be returned, e.g. DBUS_TYPE_STRUCT, not '('.
-+ * In this case, you should initialize a sub-iterator with
-+ * dbus_signature_iter_recurse to parse the container type.
-+ *
-+ * @param iter pointer to an iterator
-+ * @returns current type (e.g. DBUS_TYPE_STRING, DBUS_TYPE_ARRAY)
-+ */
-+int
-+dbus_signature_iter_get_current_type (const DBusSignatureIter *iter)
-+{
-+ DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-+
-+ return _dbus_first_type_in_signature_c_str (real_iter->pos, 0);
-+}
-+
-+/**
-+ * Returns the full type signature represented by the current
-+ * iterator as a C string.
-+ *
-+ * @param iter pointer to an iterator
-+ * @returns current signature; or NULL on OOM. Should be freed with #dbus_free
-+ */
-+char *
-+dbus_signature_iter_get_signature (const DBusSignatureIter *iter)
-+{
-+ DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-+ DBusString str;
-+ char *ret;
-+ int pos;
-+
-+ if (!_dbus_string_init (&str))
-+ return NULL;
-+
-+ pos = 0;
-+ _dbus_type_signature_next (real_iter->pos, &pos);
-+
-+ if (!_dbus_string_append_len (&str, real_iter->pos, pos))
-+ return NULL;
-+ if (!_dbus_string_steal_data (&str, &ret))
-+ ret = NULL;
-+ _dbus_string_free (&str);
-+
-+ return ret;
-+}
-+
-+/**
-+ * Convenience function for returning the element type of an array;
-+ * This function allows you to avoid initializing a sub-iterator and
-+ * getting its current type.
-+ *
-+ * It is an error to invoke this function if the current type of the
-+ * iterator is not DBUS_TYPE_ARRAY.
-+ *
-+ * @param iter pointer to an iterator
-+ * @returns current array element type
-+ */
-+int
-+dbus_signature_iter_get_element_type (const DBusSignatureIter *iter)
-+{
-+ DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-+
-+ _dbus_return_val_if_fail (dbus_signature_iter_get_current_type (iter) == DBUS_TYPE_ARRAY, DBUS_TYPE_INVALID);
-+
-+ return _dbus_first_type_in_signature_c_str (real_iter->pos, 1);
-+}
-+
-+/**
-+ * Skip to the next value on this "level". e.g. the next field in a
-+ * struct, the next value in an array. Returns FALSE at the end of the
-+ * current container.
-+ *
-+ * @param iter the iterator
-+ * @returns FALSE if nothing more to read at or below this level
-+ */
-+dbus_bool_t
-+dbus_signature_iter_next (DBusSignatureIter *iter)
-+{
-+ DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-+
-+ if (real_iter->finished)
-+ return FALSE;
-+ else
-+ {
-+ int pos;
-+
-+ if (real_iter->in_array)
-+ {
-+ real_iter->finished = TRUE;
-+ return FALSE;
-+ }
-+
-+ pos = 0;
-+ _dbus_type_signature_next (real_iter->pos, &pos);
-+ real_iter->pos += pos;
-+
-+ if (*real_iter->pos == DBUS_STRUCT_END_CHAR
-+ || *real_iter->pos == DBUS_DICT_ENTRY_END_CHAR)
-+ {
-+ real_iter->finished = TRUE;
-+ return FALSE;
-+ }
-+
-+ return *real_iter->pos != DBUS_TYPE_INVALID;
-+ }
-+}
-+
-+/**
-+ * Initialize a new iterator pointing to the first type current
-+ * container. It's an error to call this if the current type is a
-+ * non-container (i.e. if dbus_type_is_container returns FALSE).
-+ *
-+ * @param iter the current interator
-+ * @param subiter an iterator to initialize pointing to the first child
-+ */
-+void
-+dbus_signature_iter_recurse (const DBusSignatureIter *iter,
-+ DBusSignatureIter *subiter)
-+{
-+ DBusSignatureRealIter *real_iter = (DBusSignatureRealIter *) iter;
-+ DBusSignatureRealIter *real_sub_iter = (DBusSignatureRealIter *) subiter;
-+
-+ _dbus_return_if_fail (dbus_type_is_container (dbus_signature_iter_get_current_type (iter)));
-+
-+ *real_sub_iter = *real_iter;
-+ real_sub_iter->in_array = FALSE;
-+ real_sub_iter->pos++;
-+
-+ if (dbus_signature_iter_get_current_type (iter) == DBUS_TYPE_ARRAY)
-+ real_sub_iter->in_array = TRUE;
-+}
-+
-+/**
-+ * Check a type signature for validity.
-+ *
-+ * @param signature a potentially invalid type signature
-+ * @param error error return
-+ * @returns TRUE iif signature is valid
-+ */
-+dbus_bool_t
-+dbus_signature_validate (const char *signature,
-+ DBusError *error)
-+
-+{
-+ DBusString str;
-+
-+ _dbus_string_init_const (&str, signature);
-+ if (_dbus_validate_signature (&str, 0, _dbus_string_get_length (&str)))
-+ return TRUE;
-+ dbus_set_error (error, DBUS_ERROR_INVALID_SIGNATURE, "Corrupt type signature");
-+ return FALSE;
-+}
-+
-+/**
-+ * Check that a type signature is both valid and contains exactly
-+ * one complete type.
-+ *
-+ * @param signature a potentially invalid type signature
-+ * @param error error return
-+ * @returns TRUE iif signature is valid and has exactly one complete type
-+ */
-+dbus_bool_t
-+dbus_signature_validate_single (const char *signature,
-+ DBusError *error)
-+{
-+ DBusSignatureIter iter;
-+
-+ if (!dbus_signature_validate (signature, error))
-+ return FALSE;
-+
-+ dbus_signature_iter_init (&iter, signature);
-+ if (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_INVALID)
-+ goto lose;
-+ if (!dbus_signature_iter_next (&iter))
-+ return TRUE;
-+ lose:
-+ dbus_set_error (error, DBUS_ERROR_INVALID_SIGNATURE, "Exactly one complete type required in signature");
-+ return FALSE;
-+}
-+
-+/** macro that checks whether a typecode is a container type */
-+#define TYPE_IS_CONTAINER(typecode) \
-+ ((typecode) == DBUS_TYPE_STRUCT || \
-+ (typecode) == DBUS_TYPE_DICT_ENTRY || \
-+ (typecode) == DBUS_TYPE_VARIANT || \
-+ (typecode) == DBUS_TYPE_ARRAY)
-+
-+/**
-+ * A "container type" can contain basic types, or nested
-+ * container types. #DBUS_TYPE_INVALID is not a container type.
-+ * This function will crash if passed a typecode that isn't
-+ * in dbus-protocol.h
-+ *
-+ * @returns #TRUE if type is a container
-+ */
-+dbus_bool_t
-+dbus_type_is_container (int typecode)
-+{
-+ /* only reasonable (non-line-noise) typecodes are allowed */
-+ _dbus_return_val_if_fail (_dbus_type_is_valid (typecode) || typecode == DBUS_TYPE_INVALID,
-+ FALSE);
-+ return TYPE_IS_CONTAINER (typecode);
-+}
-+
-+/**
-+ * A "basic type" is a somewhat arbitrary concept, but the intent
-+ * is to include those types that are fully-specified by a single
-+ * typecode, with no additional type information or nested
-+ * values. So all numbers and strings are basic types and
-+ * structs, arrays, and variants are not basic types.
-+ * #DBUS_TYPE_INVALID is not a basic type.
-+ *
-+ * This function will crash if passed a typecode that isn't
-+ * in dbus-protocol.h
-+ *
-+ * @returns #TRUE if type is basic
-+ */
-+dbus_bool_t
-+dbus_type_is_basic (int typecode)
-+{
-+ /* only reasonable (non-line-noise) typecodes are allowed */
-+ _dbus_return_val_if_fail (_dbus_type_is_valid (typecode) || typecode == DBUS_TYPE_INVALID,
-+ FALSE);
-+
-+ /* everything that isn't invalid or a container */
-+ return !(typecode == DBUS_TYPE_INVALID || TYPE_IS_CONTAINER (typecode));
-+}
-+
-+/**
-+ * Tells you whether values of this type can change length if you set
-+ * them to some other value. For this purpose, you assume that the
-+ * first byte of the old and new value would be in the same location,
-+ * so alignment padding is not a factor.
-+ *
-+ * This function is useful to determine whether #dbus_message_iter_get_fixed_array
-+ * may be used.
-+ *
-+ * @returns #FALSE if the type can occupy different lengths
-+ */
-+dbus_bool_t
-+dbus_type_is_fixed (int typecode)
-+{
-+ switch (typecode)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_UINT16:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ return TRUE;
-+ default:
-+ return FALSE;
-+ }
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+/**
-+ * @ingroup DBusSignatureInternals
-+ * Unit test for DBusSignature.
-+ *
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_signature_test (void)
-+{
-+ DBusSignatureIter iter;
-+ DBusSignatureIter subiter;
-+ DBusSignatureIter subsubiter;
-+ DBusSignatureIter subsubsubiter;
-+ const char *sig;
-+
-+ _dbus_assert (sizeof (DBusSignatureIter) >= sizeof (DBusSignatureRealIter));
-+
-+ sig = "";
-+ _dbus_assert (dbus_signature_validate (sig, NULL));
-+ _dbus_assert (!dbus_signature_validate_single (sig, NULL));
-+ dbus_signature_iter_init (&iter, sig);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_INVALID);
-+
-+ sig = DBUS_TYPE_STRING_AS_STRING;
-+ _dbus_assert (dbus_signature_validate (sig, NULL));
-+ _dbus_assert (dbus_signature_validate_single (sig, NULL));
-+ dbus_signature_iter_init (&iter, sig);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_STRING);
-+
-+ sig = DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_BYTE_AS_STRING;
-+ _dbus_assert (dbus_signature_validate (sig, NULL));
-+ dbus_signature_iter_init (&iter, sig);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_STRING);
-+ _dbus_assert (dbus_signature_iter_next (&iter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_BYTE);
-+
-+ sig = DBUS_TYPE_UINT16_AS_STRING
-+ DBUS_STRUCT_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_STRING_AS_STRING
-+ DBUS_TYPE_UINT32_AS_STRING
-+ DBUS_TYPE_VARIANT_AS_STRING
-+ DBUS_TYPE_DOUBLE_AS_STRING
-+ DBUS_STRUCT_END_CHAR_AS_STRING;
-+ _dbus_assert (dbus_signature_validate (sig, NULL));
-+ dbus_signature_iter_init (&iter, sig);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_UINT16);
-+ _dbus_assert (dbus_signature_iter_next (&iter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_STRUCT);
-+ dbus_signature_iter_recurse (&iter, &subiter);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_STRING);
-+ _dbus_assert (dbus_signature_iter_next (&subiter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_UINT32);
-+ _dbus_assert (dbus_signature_iter_next (&subiter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_VARIANT);
-+ _dbus_assert (dbus_signature_iter_next (&subiter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_DOUBLE);
-+
-+ sig = DBUS_TYPE_UINT16_AS_STRING
-+ DBUS_STRUCT_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_UINT32_AS_STRING
-+ DBUS_TYPE_BYTE_AS_STRING
-+ DBUS_TYPE_ARRAY_AS_STRING
-+ DBUS_TYPE_ARRAY_AS_STRING
-+ DBUS_TYPE_DOUBLE_AS_STRING
-+ DBUS_STRUCT_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_BYTE_AS_STRING
-+ DBUS_STRUCT_END_CHAR_AS_STRING
-+ DBUS_STRUCT_END_CHAR_AS_STRING;
-+ _dbus_assert (dbus_signature_validate (sig, NULL));
-+ dbus_signature_iter_init (&iter, sig);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_UINT16);
-+ _dbus_assert (dbus_signature_iter_next (&iter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_STRUCT);
-+ dbus_signature_iter_recurse (&iter, &subiter);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_UINT32);
-+ _dbus_assert (dbus_signature_iter_next (&subiter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_BYTE);
-+ _dbus_assert (dbus_signature_iter_next (&subiter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_ARRAY);
-+ _dbus_assert (dbus_signature_iter_get_element_type (&subiter) == DBUS_TYPE_ARRAY);
-+
-+ dbus_signature_iter_recurse (&subiter, &subsubiter);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subsubiter) == DBUS_TYPE_ARRAY);
-+ _dbus_assert (dbus_signature_iter_get_element_type (&subsubiter) == DBUS_TYPE_DOUBLE);
-+
-+ dbus_signature_iter_recurse (&subsubiter, &subsubsubiter);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subsubsubiter) == DBUS_TYPE_DOUBLE);
-+ _dbus_assert (dbus_signature_iter_next (&subiter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subiter) == DBUS_TYPE_STRUCT);
-+ dbus_signature_iter_recurse (&subiter, &subsubiter);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subsubiter) == DBUS_TYPE_BYTE);
-+
-+ sig = DBUS_TYPE_ARRAY_AS_STRING
-+ DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_INT16_AS_STRING
-+ DBUS_TYPE_STRING_AS_STRING
-+ DBUS_DICT_ENTRY_END_CHAR_AS_STRING
-+ DBUS_TYPE_VARIANT_AS_STRING;
-+ _dbus_assert (dbus_signature_validate (sig, NULL));
-+ _dbus_assert (!dbus_signature_validate_single (sig, NULL));
-+ dbus_signature_iter_init (&iter, sig);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_ARRAY);
-+ _dbus_assert (dbus_signature_iter_get_element_type (&iter) == DBUS_TYPE_DICT_ENTRY);
-+
-+ dbus_signature_iter_recurse (&iter, &subiter);
-+ dbus_signature_iter_recurse (&subiter, &subsubiter);
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subsubiter) == DBUS_TYPE_INT16);
-+ _dbus_assert (dbus_signature_iter_next (&subsubiter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&subsubiter) == DBUS_TYPE_STRING);
-+ _dbus_assert (!dbus_signature_iter_next (&subsubiter));
-+
-+ _dbus_assert (dbus_signature_iter_next (&iter));
-+ _dbus_assert (dbus_signature_iter_get_current_type (&iter) == DBUS_TYPE_VARIANT);
-+ _dbus_assert (!dbus_signature_iter_next (&iter));
-+
-+ sig = DBUS_TYPE_DICT_ENTRY_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_TYPE_ARRAY_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_TYPE_UINT32_AS_STRING
-+ DBUS_TYPE_ARRAY_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_TYPE_ARRAY_AS_STRING
-+ DBUS_TYPE_DICT_ENTRY_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_DICT_ENTRY_END_CHAR_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_INT32_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_INT32_AS_STRING
-+ DBUS_TYPE_STRING_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_STRUCT_END_CHAR_AS_STRING
-+ DBUS_STRUCT_BEGIN_CHAR_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+
-+ sig = DBUS_STRUCT_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_BOOLEAN_AS_STRING;
-+ _dbus_assert (!dbus_signature_validate (sig, NULL));
-+ return TRUE;
-+#if 0
-+ oom:
-+ _dbus_assert_not_reached ("out of memory");
-+ return FALSE;
-+#endif
-+}
-+
-+#endif
-+
-+/** @} */ /* end of DBusSignature group */
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-signature.h dbus-0.61/dbus/dbus-signature.h
---- dbus-0.61.orig/dbus/dbus-signature.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-signature.h 2006-02-27 22:33:30.000000000 +0100
-@@ -0,0 +1,74 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-signatures.h utility functions for D-BUS types
-+ *
-+ * Copyright (C) 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_SIGNATURES_H
-+#define DBUS_SIGNATURES_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-errors.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+/**
-+ * DBusSignatureIter struct; contains no public fields
-+ */
-+typedef struct
-+{
-+ void *dummy1; /**< Don't use this */
-+ void *dummy2; /**< Don't use this */
-+ dbus_uint32_t dummy8; /**< Don't use this */
-+ int dummy12; /**< Don't use this */
-+ int dummy17; /**< Don't use this */
-+} DBusSignatureIter;
-+
-+void dbus_signature_iter_init (DBusSignatureIter *iter,
-+ const char *signature);
-+
-+int dbus_signature_iter_get_current_type (const DBusSignatureIter *iter);
-+
-+char * dbus_signature_iter_get_signature (const DBusSignatureIter *iter);
-+
-+int dbus_signature_iter_get_element_type (const DBusSignatureIter *iter);
-+
-+dbus_bool_t dbus_signature_iter_next (DBusSignatureIter *iter);
-+
-+void dbus_signature_iter_recurse (const DBusSignatureIter *iter,
-+ DBusSignatureIter *subiter);
-+
-+dbus_bool_t dbus_signature_validate (const char *signature,
-+ DBusError *error);
-+
-+dbus_bool_t dbus_signature_validate_single (const char *signature,
-+ DBusError *error);
-+
-+dbus_bool_t dbus_type_is_basic (int typecode);
-+dbus_bool_t dbus_type_is_container (int typecode);
-+dbus_bool_t dbus_type_is_fixed (int typecode);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SIGNATURE_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-spawn.c dbus-0.61/dbus/dbus-spawn.c
---- dbus-0.61.orig/dbus/dbus-spawn.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-spawn.c 2005-06-28 17:14:21.000000000 +0200
-@@ -0,0 +1,1412 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-spawn.c Wrapper around fork/exec
-+ *
-+ * Copyright (C) 2002, 2003, 2004 Red Hat, Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-spawn.h"
-+#include "dbus-sysdeps.h"
-+#include "dbus-internals.h"
-+#include "dbus-test.h"
-+#include "dbus-protocol.h"
-+
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <signal.h>
-+#include <sys/wait.h>
-+#include <errno.h>
-+#include <stdlib.h>
-+
-+/**
-+ * @addtogroup DBusInternalsUtils
-+ * @{
-+ */
-+
-+/*
-+ * I'm pretty sure this whole spawn file could be made simpler,
-+ * if you thought about it a bit.
-+ */
-+
-+/**
-+ * Enumeration for status of a read()
-+ */
-+typedef enum
-+{
-+ READ_STATUS_OK, /**< Read succeeded */
-+ READ_STATUS_ERROR, /**< Some kind of error */
-+ READ_STATUS_EOF /**< EOF returned */
-+} ReadStatus;
-+
-+static ReadStatus
-+read_ints (int fd,
-+ int *buf,
-+ int n_ints_in_buf,
-+ int *n_ints_read,
-+ DBusError *error)
-+{
-+ size_t bytes = 0;
-+ ReadStatus retval;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ retval = READ_STATUS_OK;
-+
-+ while (TRUE)
-+ {
-+ size_t chunk;
-+ size_t to_read;
-+
-+ to_read = sizeof (int) * n_ints_in_buf - bytes;
-+
-+ if (to_read == 0)
-+ break;
-+
-+ again:
-+
-+ chunk = read (fd,
-+ ((char*)buf) + bytes,
-+ to_read);
-+
-+ if (chunk < 0 && errno == EINTR)
-+ goto again;
-+
-+ if (chunk < 0)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_SPAWN_FAILED,
-+ "Failed to read from child pipe (%s)",
-+ _dbus_strerror (errno));
-+
-+ retval = READ_STATUS_ERROR;
-+ break;
-+ }
-+ else if (chunk == 0)
-+ {
-+ retval = READ_STATUS_EOF;
-+ break; /* EOF */
-+ }
-+ else /* chunk > 0 */
-+ bytes += chunk;
-+ }
-+
-+ *n_ints_read = (int)(bytes / sizeof(int));
-+
-+ return retval;
-+}
-+
-+static ReadStatus
-+read_pid (int fd,
-+ pid_t *buf,
-+ DBusError *error)
-+{
-+ size_t bytes = 0;
-+ ReadStatus retval;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ retval = READ_STATUS_OK;
-+
-+ while (TRUE)
-+ {
-+ size_t chunk;
-+ size_t to_read;
-+
-+ to_read = sizeof (pid_t) - bytes;
-+
-+ if (to_read == 0)
-+ break;
-+
-+ again:
-+
-+ chunk = read (fd,
-+ ((char*)buf) + bytes,
-+ to_read);
-+ if (chunk < 0 && errno == EINTR)
-+ goto again;
-+
-+ if (chunk < 0)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_SPAWN_FAILED,
-+ "Failed to read from child pipe (%s)",
-+ _dbus_strerror (errno));
-+
-+ retval = READ_STATUS_ERROR;
-+ break;
-+ }
-+ else if (chunk == 0)
-+ {
-+ retval = READ_STATUS_EOF;
-+ break; /* EOF */
-+ }
-+ else /* chunk > 0 */
-+ bytes += chunk;
-+ }
-+
-+ return retval;
-+}
-+
-+/* The implementation uses an intermediate child between the main process
-+ * and the grandchild. The grandchild is our spawned process. The intermediate
-+ * child is a babysitter process; it keeps track of when the grandchild
-+ * exits/crashes, and reaps the grandchild.
-+ */
-+
-+/* Messages from children to parents */
-+enum
-+{
-+ CHILD_EXITED, /* This message is followed by the exit status int */
-+ CHILD_FORK_FAILED, /* Followed by errno */
-+ CHILD_EXEC_FAILED, /* Followed by errno */
-+ CHILD_PID /* Followed by pid_t */
-+};
-+
-+/**
-+ * Babysitter implementation details
-+ */
-+struct DBusBabysitter
-+{
-+ int refcount; /**< Reference count */
-+
-+ char *executable; /**< executable name to use in error messages */
-+
-+ int socket_to_babysitter; /**< Connection to the babysitter process */
-+ int error_pipe_from_child; /**< Connection to the process that does the exec() */
-+
-+ pid_t sitter_pid; /**< PID Of the babysitter */
-+ pid_t grandchild_pid; /**< PID of the grandchild */
-+
-+ DBusWatchList *watches; /**< Watches */
-+
-+ DBusWatch *error_watch; /**< Error pipe watch */
-+ DBusWatch *sitter_watch; /**< Sitter pipe watch */
-+
-+ int errnum; /**< Error number */
-+ int status; /**< Exit status code */
-+ unsigned int have_child_status : 1; /**< True if child status has been reaped */
-+ unsigned int have_fork_errnum : 1; /**< True if we have an error code from fork() */
-+ unsigned int have_exec_errnum : 1; /**< True if we have an error code from exec() */
-+};
-+
-+static DBusBabysitter*
-+_dbus_babysitter_new (void)
-+{
-+ DBusBabysitter *sitter;
-+
-+ sitter = dbus_new0 (DBusBabysitter, 1);
-+ if (sitter == NULL)
-+ return NULL;
-+
-+ sitter->refcount = 1;
-+
-+ sitter->socket_to_babysitter = -1;
-+ sitter->error_pipe_from_child = -1;
-+
-+ sitter->sitter_pid = -1;
-+ sitter->grandchild_pid = -1;
-+
-+ sitter->watches = _dbus_watch_list_new ();
-+ if (sitter->watches == NULL)
-+ goto failed;
-+
-+ return sitter;
-+
-+ failed:
-+ _dbus_babysitter_unref (sitter);
-+ return NULL;
-+}
-+
-+/**
-+ * Increment the reference count on the babysitter object.
-+ *
-+ * @param sitter the babysitter
-+ * @returns the babysitter
-+ */
-+DBusBabysitter *
-+_dbus_babysitter_ref (DBusBabysitter *sitter)
-+{
-+ _dbus_assert (sitter != NULL);
-+ _dbus_assert (sitter->refcount > 0);
-+
-+ sitter->refcount += 1;
-+
-+ return sitter;
-+}
-+
-+/**
-+ * Decrement the reference count on the babysitter object.
-+ * When the reference count of the babysitter object reaches
-+ * zero, the babysitter is killed and the child that was being
-+ * babysat gets emancipated.
-+ *
-+ * @param sitter the babysitter
-+ */
-+void
-+_dbus_babysitter_unref (DBusBabysitter *sitter)
-+{
-+ _dbus_assert (sitter != NULL);
-+ _dbus_assert (sitter->refcount > 0);
-+
-+ sitter->refcount -= 1;
-+ if (sitter->refcount == 0)
-+ {
-+ if (sitter->socket_to_babysitter >= 0)
-+ {
-+ /* If we haven't forked other babysitters
-+ * since this babysitter and socket were
-+ * created then this close will cause the
-+ * babysitter to wake up from poll with
-+ * a hangup and then the babysitter will
-+ * quit itself.
-+ */
-+ close (sitter->socket_to_babysitter);
-+ sitter->socket_to_babysitter = -1;
-+ }
-+
-+ if (sitter->error_pipe_from_child >= 0)
-+ {
-+ close (sitter->error_pipe_from_child);
-+ sitter->error_pipe_from_child = -1;
-+ }
-+
-+ if (sitter->sitter_pid > 0)
-+ {
-+ int status;
-+ int ret;
-+
-+ /* It's possible the babysitter died on its own above
-+ * from the close, or was killed randomly
-+ * by some other process, so first try to reap it
-+ */
-+ ret = waitpid (sitter->sitter_pid, &status, WNOHANG);
-+
-+ /* If we couldn't reap the child then kill it, and
-+ * try again
-+ */
-+ if (ret == 0)
-+ kill (sitter->sitter_pid, SIGKILL);
-+
-+ again:
-+ if (ret == 0)
-+ ret = waitpid (sitter->sitter_pid, &status, 0);
-+
-+ if (ret < 0)
-+ {
-+ if (errno == EINTR)
-+ goto again;
-+ else if (errno == ECHILD)
-+ _dbus_warn ("Babysitter process not available to be reaped; should not happen\n");
-+ else
-+ _dbus_warn ("Unexpected error %d in waitpid() for babysitter: %s\n",
-+ errno, _dbus_strerror (errno));
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Reaped %ld, waiting for babysitter %ld\n",
-+ (long) ret, (long) sitter->sitter_pid);
-+
-+ if (WIFEXITED (sitter->status))
-+ _dbus_verbose ("Babysitter exited with status %d\n",
-+ WEXITSTATUS (sitter->status));
-+ else if (WIFSIGNALED (sitter->status))
-+ _dbus_verbose ("Babysitter received signal %d\n",
-+ WTERMSIG (sitter->status));
-+ else
-+ _dbus_verbose ("Babysitter exited abnormally\n");
-+ }
-+
-+ sitter->sitter_pid = -1;
-+ }
-+
-+ if (sitter->error_watch)
-+ {
-+ _dbus_watch_invalidate (sitter->error_watch);
-+ _dbus_watch_unref (sitter->error_watch);
-+ sitter->error_watch = NULL;
-+ }
-+
-+ if (sitter->sitter_watch)
-+ {
-+ _dbus_watch_invalidate (sitter->sitter_watch);
-+ _dbus_watch_unref (sitter->sitter_watch);
-+ sitter->sitter_watch = NULL;
-+ }
-+
-+ if (sitter->watches)
-+ _dbus_watch_list_free (sitter->watches);
-+
-+ dbus_free (sitter->executable);
-+
-+ dbus_free (sitter);
-+ }
-+}
-+
-+static ReadStatus
-+read_data (DBusBabysitter *sitter,
-+ int fd)
-+{
-+ int what;
-+ int got;
-+ DBusError error;
-+ ReadStatus r;
-+
-+ dbus_error_init (&error);
-+
-+ r = read_ints (fd, &what, 1, &got, &error);
-+
-+ switch (r)
-+ {
-+ case READ_STATUS_ERROR:
-+ _dbus_warn ("Failed to read data from fd %d: %s\n", fd, error.message);
-+ dbus_error_free (&error);
-+ return r;
-+
-+ case READ_STATUS_EOF:
-+ return r;
-+
-+ case READ_STATUS_OK:
-+ break;
-+ }
-+
-+ if (got == 1)
-+ {
-+ switch (what)
-+ {
-+ case CHILD_EXITED:
-+ case CHILD_FORK_FAILED:
-+ case CHILD_EXEC_FAILED:
-+ {
-+ int arg;
-+
-+ r = read_ints (fd, &arg, 1, &got, &error);
-+
-+ switch (r)
-+ {
-+ case READ_STATUS_ERROR:
-+ _dbus_warn ("Failed to read arg from fd %d: %s\n", fd, error.message);
-+ dbus_error_free (&error);
-+ return r;
-+ case READ_STATUS_EOF:
-+ return r;
-+ case READ_STATUS_OK:
-+ break;
-+ }
-+
-+ if (got == 1)
-+ {
-+ if (what == CHILD_EXITED)
-+ {
-+ sitter->have_child_status = TRUE;
-+ sitter->status = arg;
-+ _dbus_verbose ("recorded child status exited = %d signaled = %d exitstatus = %d termsig = %d\n",
-+ WIFEXITED (sitter->status), WIFSIGNALED (sitter->status),
-+ WEXITSTATUS (sitter->status), WTERMSIG (sitter->status));
-+ }
-+ else if (what == CHILD_FORK_FAILED)
-+ {
-+ sitter->have_fork_errnum = TRUE;
-+ sitter->errnum = arg;
-+ _dbus_verbose ("recorded fork errnum %d\n", sitter->errnum);
-+ }
-+ else if (what == CHILD_EXEC_FAILED)
-+ {
-+ sitter->have_exec_errnum = TRUE;
-+ sitter->errnum = arg;
-+ _dbus_verbose ("recorded exec errnum %d\n", sitter->errnum);
-+ }
-+ }
-+ }
-+ break;
-+ case CHILD_PID:
-+ {
-+ pid_t pid = -1;
-+
-+ r = read_pid (fd, &pid, &error);
-+
-+ switch (r)
-+ {
-+ case READ_STATUS_ERROR:
-+ _dbus_warn ("Failed to read PID from fd %d: %s\n", fd, error.message);
-+ dbus_error_free (&error);
-+ return r;
-+ case READ_STATUS_EOF:
-+ return r;
-+ case READ_STATUS_OK:
-+ break;
-+ }
-+
-+ sitter->grandchild_pid = pid;
-+
-+ _dbus_verbose ("recorded grandchild pid %d\n", sitter->grandchild_pid);
-+ }
-+ break;
-+ default:
-+ _dbus_warn ("Unknown message received from babysitter process\n");
-+ break;
-+ }
-+ }
-+
-+ return r;
-+}
-+
-+static void
-+close_socket_to_babysitter (DBusBabysitter *sitter)
-+{
-+ _dbus_verbose ("Closing babysitter\n");
-+ close (sitter->socket_to_babysitter);
-+ sitter->socket_to_babysitter = -1;
-+}
-+
-+static void
-+close_error_pipe_from_child (DBusBabysitter *sitter)
-+{
-+ _dbus_verbose ("Closing child error\n");
-+ close (sitter->error_pipe_from_child);
-+ sitter->error_pipe_from_child = -1;
-+}
-+
-+static void
-+handle_babysitter_socket (DBusBabysitter *sitter,
-+ int revents)
-+{
-+ /* Even if we have POLLHUP, we want to keep reading
-+ * data until POLLIN goes away; so this function only
-+ * looks at HUP/ERR if no IN is set.
-+ */
-+ if (revents & _DBUS_POLLIN)
-+ {
-+ _dbus_verbose ("Reading data from babysitter\n");
-+ if (read_data (sitter, sitter->socket_to_babysitter) != READ_STATUS_OK)
-+ close_socket_to_babysitter (sitter);
-+ }
-+ else if (revents & (_DBUS_POLLERR | _DBUS_POLLHUP))
-+ {
-+ close_socket_to_babysitter (sitter);
-+ }
-+}
-+
-+static void
-+handle_error_pipe (DBusBabysitter *sitter,
-+ int revents)
-+{
-+ if (revents & _DBUS_POLLIN)
-+ {
-+ _dbus_verbose ("Reading data from child error\n");
-+ if (read_data (sitter, sitter->error_pipe_from_child) != READ_STATUS_OK)
-+ close_error_pipe_from_child (sitter);
-+ }
-+ else if (revents & (_DBUS_POLLERR | _DBUS_POLLHUP))
-+ {
-+ close_error_pipe_from_child (sitter);
-+ }
-+}
-+
-+/* returns whether there were any poll events handled */
-+static dbus_bool_t
-+babysitter_iteration (DBusBabysitter *sitter,
-+ dbus_bool_t block)
-+{
-+ DBusPollFD fds[2];
-+ int i;
-+ dbus_bool_t descriptors_ready;
-+
-+ descriptors_ready = FALSE;
-+
-+ i = 0;
-+
-+ if (sitter->error_pipe_from_child >= 0)
-+ {
-+ fds[i].fd = sitter->error_pipe_from_child;
-+ fds[i].events = _DBUS_POLLIN;
-+ fds[i].revents = 0;
-+ ++i;
-+ }
-+
-+ if (sitter->socket_to_babysitter >= 0)
-+ {
-+ fds[i].fd = sitter->socket_to_babysitter;
-+ fds[i].events = _DBUS_POLLIN;
-+ fds[i].revents = 0;
-+ ++i;
-+ }
-+
-+ if (i > 0)
-+ {
-+ int ret;
-+
-+ ret = _dbus_poll (fds, i, 0);
-+ if (ret == 0 && block)
-+ ret = _dbus_poll (fds, i, -1);
-+
-+ if (ret > 0)
-+ {
-+ descriptors_ready = TRUE;
-+
-+ while (i > 0)
-+ {
-+ --i;
-+ if (fds[i].fd == sitter->error_pipe_from_child)
-+ handle_error_pipe (sitter, fds[i].revents);
-+ else if (fds[i].fd == sitter->socket_to_babysitter)
-+ handle_babysitter_socket (sitter, fds[i].revents);
-+ }
-+ }
-+ }
-+
-+ return descriptors_ready;
-+}
-+
-+/**
-+ * Macro returns #TRUE if the babysitter still has live sockets open to the
-+ * babysitter child or the grandchild.
-+ */
-+#define LIVE_CHILDREN(sitter) ((sitter)->socket_to_babysitter >= 0 || (sitter)->error_pipe_from_child >= 0)
-+
-+/**
-+ * Blocks until the babysitter process gives us the PID of the spawned grandchild,
-+ * then kills the spawned grandchild.
-+ *
-+ * @param sitter the babysitter object
-+ */
-+void
-+_dbus_babysitter_kill_child (DBusBabysitter *sitter)
-+{
-+ /* be sure we have the PID of the child */
-+ while (LIVE_CHILDREN (sitter) &&
-+ sitter->grandchild_pid == -1)
-+ babysitter_iteration (sitter, TRUE);
-+
-+ _dbus_verbose ("Got child PID %ld for killing\n",
-+ (long) sitter->grandchild_pid);
-+
-+ if (sitter->grandchild_pid == -1)
-+ return; /* child is already dead, or we're so hosed we'll never recover */
-+
-+ kill (sitter->grandchild_pid, SIGKILL);
-+}
-+
-+/**
-+ * Checks whether the child has exited, without blocking.
-+ *
-+ * @param sitter the babysitter
-+ */
-+dbus_bool_t
-+_dbus_babysitter_get_child_exited (DBusBabysitter *sitter)
-+{
-+
-+ /* Be sure we're up-to-date */
-+ while (LIVE_CHILDREN (sitter) &&
-+ babysitter_iteration (sitter, FALSE))
-+ ;
-+
-+ /* We will have exited the babysitter when the child has exited */
-+ return sitter->socket_to_babysitter < 0;
-+}
-+
-+/**
-+ * Sets the #DBusError with an explanation of why the spawned
-+ * child process exited (on a signal, or whatever). If
-+ * the child process has not exited, does nothing (error
-+ * will remain unset).
-+ *
-+ * @param sitter the babysitter
-+ * @param error an error to fill in
-+ */
-+void
-+_dbus_babysitter_set_child_exit_error (DBusBabysitter *sitter,
-+ DBusError *error)
-+{
-+ if (!_dbus_babysitter_get_child_exited (sitter))
-+ return;
-+
-+ /* Note that if exec fails, we will also get a child status
-+ * from the babysitter saying the child exited,
-+ * so we need to give priority to the exec error
-+ */
-+ if (sitter->have_exec_errnum)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_SPAWN_EXEC_FAILED,
-+ "Failed to execute program %s: %s",
-+ sitter->executable, _dbus_strerror (sitter->errnum));
-+ }
-+ else if (sitter->have_fork_errnum)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY,
-+ "Failed to fork a new process %s: %s",
-+ sitter->executable, _dbus_strerror (sitter->errnum));
-+ }
-+ else if (sitter->have_child_status)
-+ {
-+ if (WIFEXITED (sitter->status))
-+ dbus_set_error (error, DBUS_ERROR_SPAWN_CHILD_EXITED,
-+ "Process %s exited with status %d",
-+ sitter->executable, WEXITSTATUS (sitter->status));
-+ else if (WIFSIGNALED (sitter->status))
-+ dbus_set_error (error, DBUS_ERROR_SPAWN_CHILD_SIGNALED,
-+ "Process %s received signal %d",
-+ sitter->executable, WTERMSIG (sitter->status));
-+ else
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Process %s exited abnormally",
-+ sitter->executable);
-+ }
-+ else
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Process %s exited, reason unknown",
-+ sitter->executable);
-+ }
-+}
-+
-+/**
-+ * Sets watch functions to notify us when the
-+ * babysitter object needs to read/write file descriptors.
-+ *
-+ * @param sitter the babysitter
-+ * @param add_function function to begin monitoring a new descriptor.
-+ * @param remove_function function to stop monitoring a descriptor.
-+ * @param toggled_function function to notify when the watch is enabled/disabled
-+ * @param data data to pass to add_function and remove_function.
-+ * @param free_data_function function to be called to free the data.
-+ * @returns #FALSE on failure (no memory)
-+ */
-+dbus_bool_t
-+_dbus_babysitter_set_watch_functions (DBusBabysitter *sitter,
-+ DBusAddWatchFunction add_function,
-+ DBusRemoveWatchFunction remove_function,
-+ DBusWatchToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ return _dbus_watch_list_set_functions (sitter->watches,
-+ add_function,
-+ remove_function,
-+ toggled_function,
-+ data,
-+ free_data_function);
-+}
-+
-+static dbus_bool_t
-+handle_watch (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data)
-+{
-+ DBusBabysitter *sitter = data;
-+ int revents;
-+ int fd;
-+
-+ revents = 0;
-+ if (condition & DBUS_WATCH_READABLE)
-+ revents |= _DBUS_POLLIN;
-+ if (condition & DBUS_WATCH_ERROR)
-+ revents |= _DBUS_POLLERR;
-+ if (condition & DBUS_WATCH_HANGUP)
-+ revents |= _DBUS_POLLHUP;
-+
-+ fd = dbus_watch_get_fd (watch);
-+
-+ if (fd == sitter->error_pipe_from_child)
-+ handle_error_pipe (sitter, revents);
-+ else if (fd == sitter->socket_to_babysitter)
-+ handle_babysitter_socket (sitter, revents);
-+
-+ while (LIVE_CHILDREN (sitter) &&
-+ babysitter_iteration (sitter, FALSE))
-+ ;
-+
-+ return TRUE;
-+}
-+
-+/** Helps remember which end of the pipe is which */
-+#define READ_END 0
-+/** Helps remember which end of the pipe is which */
-+#define WRITE_END 1
-+
-+
-+/* Avoids a danger in threaded situations (calling close()
-+ * on a file descriptor twice, and another thread has
-+ * re-opened it since the first close)
-+ */
-+static int
-+close_and_invalidate (int *fd)
-+{
-+ int ret;
-+
-+ if (*fd < 0)
-+ return -1;
-+ else
-+ {
-+ ret = close (*fd);
-+ *fd = -1;
-+ }
-+
-+ return ret;
-+}
-+
-+static dbus_bool_t
-+make_pipe (int p[2],
-+ DBusError *error)
-+{
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (pipe (p) < 0)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_SPAWN_FAILED,
-+ "Failed to create pipe for communicating with child process (%s)",
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+do_write (int fd, const void *buf, size_t count)
-+{
-+ size_t bytes_written;
-+ int ret;
-+
-+ bytes_written = 0;
-+
-+ again:
-+
-+ ret = write (fd, ((const char*)buf) + bytes_written, count - bytes_written);
-+
-+ if (ret < 0)
-+ {
-+ if (errno == EINTR)
-+ goto again;
-+ else
-+ {
-+ _dbus_warn ("Failed to write data to pipe!\n");
-+ exit (1); /* give up, we suck */
-+ }
-+ }
-+ else
-+ bytes_written += ret;
-+
-+ if (bytes_written < count)
-+ goto again;
-+}
-+
-+static void
-+write_err_and_exit (int fd, int msg)
-+{
-+ int en = errno;
-+
-+ do_write (fd, &msg, sizeof (msg));
-+ do_write (fd, &en, sizeof (en));
-+
-+ exit (1);
-+}
-+
-+static void
-+write_pid (int fd, pid_t pid)
-+{
-+ int msg = CHILD_PID;
-+
-+ do_write (fd, &msg, sizeof (msg));
-+ do_write (fd, &pid, sizeof (pid));
-+}
-+
-+static void
-+write_status_and_exit (int fd, int status)
-+{
-+ int msg = CHILD_EXITED;
-+
-+ do_write (fd, &msg, sizeof (msg));
-+ do_write (fd, &status, sizeof (status));
-+
-+ exit (0);
-+}
-+
-+static void
-+do_exec (int child_err_report_fd,
-+ char **argv,
-+ DBusSpawnChildSetupFunc child_setup,
-+ void *user_data)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ int i, max_open;
-+#endif
-+
-+ _dbus_verbose_reset ();
-+ _dbus_verbose ("Child process has PID %lu\n",
-+ _dbus_getpid ());
-+
-+ if (child_setup)
-+ (* child_setup) (user_data);
-+
-+#ifdef DBUS_BUILD_TESTS
-+ max_open = sysconf (_SC_OPEN_MAX);
-+
-+ for (i = 3; i < max_open; i++)
-+ {
-+ int retval;
-+
-+ if (i == child_err_report_fd)
-+ continue;
-+
-+ retval = fcntl (i, F_GETFD);
-+
-+ if (retval != -1 && !(retval & FD_CLOEXEC))
-+ _dbus_warn ("Fd %d did not have the close-on-exec flag set!\n", i);
-+ }
-+#endif
-+
-+ execv (argv[0], argv);
-+
-+ /* Exec failed */
-+ write_err_and_exit (child_err_report_fd,
-+ CHILD_EXEC_FAILED);
-+}
-+
-+static void
-+check_babysit_events (pid_t grandchild_pid,
-+ int parent_pipe,
-+ int revents)
-+{
-+ pid_t ret;
-+ int status;
-+
-+ do
-+ {
-+ ret = waitpid (grandchild_pid, &status, WNOHANG);
-+ /* The man page says EINTR can't happen with WNOHANG,
-+ * but there are reports of it (maybe only with valgrind?)
-+ */
-+ }
-+ while (ret < 0 && errno == EINTR);
-+
-+ if (ret == 0)
-+ {
-+ _dbus_verbose ("no child exited\n");
-+
-+ ; /* no child exited */
-+ }
-+ else if (ret < 0)
-+ {
-+ /* This isn't supposed to happen. */
-+ _dbus_warn ("unexpected waitpid() failure in check_babysit_events(): %s\n",
-+ _dbus_strerror (errno));
-+ exit (1);
-+ }
-+ else if (ret == grandchild_pid)
-+ {
-+ /* Child exited */
-+ _dbus_verbose ("reaped child pid %ld\n", (long) ret);
-+
-+ write_status_and_exit (parent_pipe, status);
-+ }
-+ else
-+ {
-+ _dbus_warn ("waitpid() reaped pid %d that we've never heard of\n",
-+ (int) ret);
-+ exit (1);
-+ }
-+
-+ if (revents & _DBUS_POLLIN)
-+ {
-+ _dbus_verbose ("babysitter got POLLIN from parent pipe\n");
-+ }
-+
-+ if (revents & (_DBUS_POLLERR | _DBUS_POLLHUP))
-+ {
-+ /* Parent is gone, so we just exit */
-+ _dbus_verbose ("babysitter got POLLERR or POLLHUP from parent\n");
-+ exit (0);
-+ }
-+}
-+
-+static int babysit_sigchld_pipe = -1;
-+
-+static void
-+babysit_signal_handler (int signo)
-+{
-+ char b = '\0';
-+ again:
-+ write (babysit_sigchld_pipe, &b, 1);
-+ if (errno == EINTR)
-+ goto again;
-+}
-+
-+static void
-+babysit (pid_t grandchild_pid,
-+ int parent_pipe)
-+{
-+ int sigchld_pipe[2];
-+
-+ /* We don't exec, so we keep parent state, such as the pid that
-+ * _dbus_verbose() uses. Reset the pid here.
-+ */
-+ _dbus_verbose_reset ();
-+
-+ /* I thought SIGCHLD would just wake up the poll, but
-+ * that didn't seem to work, so added this pipe.
-+ * Probably the pipe is more likely to work on busted
-+ * operating systems anyhow.
-+ */
-+ if (pipe (sigchld_pipe) < 0)
-+ {
-+ _dbus_warn ("Not enough file descriptors to create pipe in babysitter process\n");
-+ exit (1);
-+ }
-+
-+ babysit_sigchld_pipe = sigchld_pipe[WRITE_END];
-+
-+ _dbus_set_signal_handler (SIGCHLD, babysit_signal_handler);
-+
-+ write_pid (parent_pipe, grandchild_pid);
-+
-+ check_babysit_events (grandchild_pid, parent_pipe, 0);
-+
-+ while (TRUE)
-+ {
-+ DBusPollFD pfds[2];
-+
-+ pfds[0].fd = parent_pipe;
-+ pfds[0].events = _DBUS_POLLIN;
-+ pfds[0].revents = 0;
-+
-+ pfds[1].fd = sigchld_pipe[READ_END];
-+ pfds[1].events = _DBUS_POLLIN;
-+ pfds[1].revents = 0;
-+
-+ _dbus_poll (pfds, _DBUS_N_ELEMENTS (pfds), -1);
-+
-+ if (pfds[0].revents != 0)
-+ {
-+ check_babysit_events (grandchild_pid, parent_pipe, pfds[0].revents);
-+ }
-+ else if (pfds[1].revents & _DBUS_POLLIN)
-+ {
-+ char b;
-+ read (sigchld_pipe[READ_END], &b, 1);
-+ /* do waitpid check */
-+ check_babysit_events (grandchild_pid, parent_pipe, 0);
-+ }
-+ }
-+
-+ exit (1);
-+}
-+
-+/**
-+ * Spawns a new process. The executable name and argv[0]
-+ * are the same, both are provided in argv[0]. The child_setup
-+ * function is passed the given user_data and is run in the child
-+ * just before calling exec().
-+ *
-+ * Also creates a "babysitter" which tracks the status of the
-+ * child process, advising the parent if the child exits.
-+ * If the spawn fails, no babysitter is created.
-+ * If sitter_p is #NULL, no babysitter is kept.
-+ *
-+ * @param sitter_p return location for babysitter or #NULL
-+ * @param argv the executable and arguments
-+ * @param child_setup function to call in child pre-exec()
-+ * @param user_data user data for setup function
-+ * @param error error object to be filled in if function fails
-+ * @returns #TRUE on success, #FALSE if error is filled in
-+ */
-+dbus_bool_t
-+_dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p,
-+ char **argv,
-+ DBusSpawnChildSetupFunc child_setup,
-+ void *user_data,
-+ DBusError *error)
-+{
-+ DBusBabysitter *sitter;
-+ int child_err_report_pipe[2] = { -1, -1 };
-+ int babysitter_pipe[2] = { -1, -1 };
-+ pid_t pid;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ *sitter_p = NULL;
-+ sitter = NULL;
-+
-+ sitter = _dbus_babysitter_new ();
-+ if (sitter == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return FALSE;
-+ }
-+
-+ sitter->executable = _dbus_strdup (argv[0]);
-+ if (sitter->executable == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto cleanup_and_fail;
-+ }
-+
-+ if (!make_pipe (child_err_report_pipe, error))
-+ goto cleanup_and_fail;
-+
-+ _dbus_fd_set_close_on_exec (child_err_report_pipe[READ_END]);
-+
-+ if (!_dbus_full_duplex_pipe (&babysitter_pipe[0], &babysitter_pipe[1], TRUE, error))
-+ goto cleanup_and_fail;
-+
-+ _dbus_fd_set_close_on_exec (babysitter_pipe[0]);
-+ _dbus_fd_set_close_on_exec (babysitter_pipe[1]);
-+
-+ /* Setting up the babysitter is only useful in the parent,
-+ * but we don't want to run out of memory and fail
-+ * after we've already forked, since then we'd leak
-+ * child processes everywhere.
-+ */
-+ sitter->error_watch = _dbus_watch_new (child_err_report_pipe[READ_END],
-+ DBUS_WATCH_READABLE,
-+ TRUE, handle_watch, sitter, NULL);
-+ if (sitter->error_watch == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto cleanup_and_fail;
-+ }
-+
-+ if (!_dbus_watch_list_add_watch (sitter->watches, sitter->error_watch))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto cleanup_and_fail;
-+ }
-+
-+ sitter->sitter_watch = _dbus_watch_new (babysitter_pipe[0],
-+ DBUS_WATCH_READABLE,
-+ TRUE, handle_watch, sitter, NULL);
-+ if (sitter->sitter_watch == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto cleanup_and_fail;
-+ }
-+
-+ if (!_dbus_watch_list_add_watch (sitter->watches, sitter->sitter_watch))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto cleanup_and_fail;
-+ }
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ pid = fork ();
-+
-+ if (pid < 0)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_SPAWN_FORK_FAILED,
-+ "Failed to fork (%s)",
-+ _dbus_strerror (errno));
-+ goto cleanup_and_fail;
-+ }
-+ else if (pid == 0)
-+ {
-+ /* Immediate child, this is the babysitter process. */
-+ int grandchild_pid;
-+
-+ /* Be sure we crash if the parent exits
-+ * and we write to the err_report_pipe
-+ */
-+ signal (SIGPIPE, SIG_DFL);
-+
-+ /* Close the parent's end of the pipes. */
-+ close_and_invalidate (&child_err_report_pipe[READ_END]);
-+ close_and_invalidate (&babysitter_pipe[0]);
-+
-+ /* Create the child that will exec () */
-+ grandchild_pid = fork ();
-+
-+ if (grandchild_pid < 0)
-+ {
-+ write_err_and_exit (babysitter_pipe[1],
-+ CHILD_FORK_FAILED);
-+ _dbus_assert_not_reached ("Got to code after write_err_and_exit()");
-+ }
-+ else if (grandchild_pid == 0)
-+ {
-+ do_exec (child_err_report_pipe[WRITE_END],
-+ argv,
-+ child_setup, user_data);
-+ _dbus_assert_not_reached ("Got to code after exec() - should have exited on error");
-+ }
-+ else
-+ {
-+ babysit (grandchild_pid, babysitter_pipe[1]);
-+ _dbus_assert_not_reached ("Got to code after babysit()");
-+ }
-+ }
-+ else
-+ {
-+ /* Close the uncared-about ends of the pipes */
-+ close_and_invalidate (&child_err_report_pipe[WRITE_END]);
-+ close_and_invalidate (&babysitter_pipe[1]);
-+
-+ sitter->socket_to_babysitter = babysitter_pipe[0];
-+ babysitter_pipe[0] = -1;
-+
-+ sitter->error_pipe_from_child = child_err_report_pipe[READ_END];
-+ child_err_report_pipe[READ_END] = -1;
-+
-+ sitter->sitter_pid = pid;
-+
-+ if (sitter_p != NULL)
-+ *sitter_p = sitter;
-+ else
-+ _dbus_babysitter_unref (sitter);
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ return TRUE;
-+ }
-+
-+ cleanup_and_fail:
-+
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+
-+ close_and_invalidate (&child_err_report_pipe[READ_END]);
-+ close_and_invalidate (&child_err_report_pipe[WRITE_END]);
-+ close_and_invalidate (&babysitter_pipe[0]);
-+ close_and_invalidate (&babysitter_pipe[1]);
-+
-+ if (sitter != NULL)
-+ _dbus_babysitter_unref (sitter);
-+
-+ return FALSE;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+static void
-+_dbus_babysitter_block_for_child_exit (DBusBabysitter *sitter)
-+{
-+ while (LIVE_CHILDREN (sitter))
-+ babysitter_iteration (sitter, TRUE);
-+}
-+
-+static dbus_bool_t
-+check_spawn_nonexistent (void *data)
-+{
-+ char *argv[4] = { NULL, NULL, NULL, NULL };
-+ DBusBabysitter *sitter;
-+ DBusError error;
-+
-+ sitter = NULL;
-+
-+ dbus_error_init (&error);
-+
-+ /*** Test launching nonexistent binary */
-+
-+ argv[0] = "/this/does/not/exist/32542sdgafgafdg";
-+ if (_dbus_spawn_async_with_babysitter (&sitter, argv,
-+ NULL, NULL,
-+ &error))
-+ {
-+ _dbus_babysitter_block_for_child_exit (sitter);
-+ _dbus_babysitter_set_child_exit_error (sitter, &error);
-+ }
-+
-+ if (sitter)
-+ _dbus_babysitter_unref (sitter);
-+
-+ if (!dbus_error_is_set (&error))
-+ {
-+ _dbus_warn ("Did not get an error launching nonexistent executable\n");
-+ return FALSE;
-+ }
-+
-+ if (!(dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY) ||
-+ dbus_error_has_name (&error, DBUS_ERROR_SPAWN_EXEC_FAILED)))
-+ {
-+ _dbus_warn ("Not expecting error when launching nonexistent executable: %s: %s\n",
-+ error.name, error.message);
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+
-+ dbus_error_free (&error);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+check_spawn_segfault (void *data)
-+{
-+ char *argv[4] = { NULL, NULL, NULL, NULL };
-+ DBusBabysitter *sitter;
-+ DBusError error;
-+
-+ sitter = NULL;
-+
-+ dbus_error_init (&error);
-+
-+ /*** Test launching segfault binary */
-+
-+ argv[0] = TEST_SEGFAULT_BINARY;
-+ if (_dbus_spawn_async_with_babysitter (&sitter, argv,
-+ NULL, NULL,
-+ &error))
-+ {
-+ _dbus_babysitter_block_for_child_exit (sitter);
-+ _dbus_babysitter_set_child_exit_error (sitter, &error);
-+ }
-+
-+ if (sitter)
-+ _dbus_babysitter_unref (sitter);
-+
-+ if (!dbus_error_is_set (&error))
-+ {
-+ _dbus_warn ("Did not get an error launching segfaulting binary\n");
-+ return FALSE;
-+ }
-+
-+ if (!(dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY) ||
-+ dbus_error_has_name (&error, DBUS_ERROR_SPAWN_CHILD_SIGNALED)))
-+ {
-+ _dbus_warn ("Not expecting error when launching segfaulting executable: %s: %s\n",
-+ error.name, error.message);
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+
-+ dbus_error_free (&error);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+check_spawn_exit (void *data)
-+{
-+ char *argv[4] = { NULL, NULL, NULL, NULL };
-+ DBusBabysitter *sitter;
-+ DBusError error;
-+
-+ sitter = NULL;
-+
-+ dbus_error_init (&error);
-+
-+ /*** Test launching exit failure binary */
-+
-+ argv[0] = TEST_EXIT_BINARY;
-+ if (_dbus_spawn_async_with_babysitter (&sitter, argv,
-+ NULL, NULL,
-+ &error))
-+ {
-+ _dbus_babysitter_block_for_child_exit (sitter);
-+ _dbus_babysitter_set_child_exit_error (sitter, &error);
-+ }
-+
-+ if (sitter)
-+ _dbus_babysitter_unref (sitter);
-+
-+ if (!dbus_error_is_set (&error))
-+ {
-+ _dbus_warn ("Did not get an error launching binary that exited with failure code\n");
-+ return FALSE;
-+ }
-+
-+ if (!(dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY) ||
-+ dbus_error_has_name (&error, DBUS_ERROR_SPAWN_CHILD_EXITED)))
-+ {
-+ _dbus_warn ("Not expecting error when launching exiting executable: %s: %s\n",
-+ error.name, error.message);
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+
-+ dbus_error_free (&error);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+check_spawn_and_kill (void *data)
-+{
-+ char *argv[4] = { NULL, NULL, NULL, NULL };
-+ DBusBabysitter *sitter;
-+ DBusError error;
-+
-+ sitter = NULL;
-+
-+ dbus_error_init (&error);
-+
-+ /*** Test launching sleeping binary then killing it */
-+
-+ argv[0] = TEST_SLEEP_FOREVER_BINARY;
-+ if (_dbus_spawn_async_with_babysitter (&sitter, argv,
-+ NULL, NULL,
-+ &error))
-+ {
-+ _dbus_babysitter_kill_child (sitter);
-+
-+ _dbus_babysitter_block_for_child_exit (sitter);
-+
-+ _dbus_babysitter_set_child_exit_error (sitter, &error);
-+ }
-+
-+ if (sitter)
-+ _dbus_babysitter_unref (sitter);
-+
-+ if (!dbus_error_is_set (&error))
-+ {
-+ _dbus_warn ("Did not get an error after killing spawned binary\n");
-+ return FALSE;
-+ }
-+
-+ if (!(dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY) ||
-+ dbus_error_has_name (&error, DBUS_ERROR_SPAWN_CHILD_SIGNALED)))
-+ {
-+ _dbus_warn ("Not expecting error when killing executable: %s: %s\n",
-+ error.name, error.message);
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+
-+ dbus_error_free (&error);
-+
-+ return TRUE;
-+}
-+
-+dbus_bool_t
-+_dbus_spawn_test (const char *test_data_dir)
-+{
-+ if (!_dbus_test_oom_handling ("spawn_nonexistent",
-+ check_spawn_nonexistent,
-+ NULL))
-+ return FALSE;
-+
-+ if (!_dbus_test_oom_handling ("spawn_segfault",
-+ check_spawn_segfault,
-+ NULL))
-+ return FALSE;
-+
-+ if (!_dbus_test_oom_handling ("spawn_exit",
-+ check_spawn_exit,
-+ NULL))
-+ return FALSE;
-+
-+ if (!_dbus_test_oom_handling ("spawn_and_kill",
-+ check_spawn_and_kill,
-+ NULL))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+#endif
-diff -Naur dbus-0.61.orig/dbus/dbus-spawn.h dbus-0.61/dbus/dbus-spawn.h
---- dbus-0.61.orig/dbus/dbus-spawn.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-spawn.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,58 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-spawn.h Wrapper around fork/exec
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_SPAWN_H
-+#define DBUS_SPAWN_H
-+
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-watch.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef void (* DBusSpawnChildSetupFunc) (void *user_data);
-+
-+typedef struct DBusBabysitter DBusBabysitter;
-+
-+dbus_bool_t _dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p,
-+ char **argv,
-+ DBusSpawnChildSetupFunc child_setup,
-+ void *user_data,
-+ DBusError *error);
-+DBusBabysitter* _dbus_babysitter_ref (DBusBabysitter *sitter);
-+void _dbus_babysitter_unref (DBusBabysitter *sitter);
-+void _dbus_babysitter_kill_child (DBusBabysitter *sitter);
-+dbus_bool_t _dbus_babysitter_get_child_exited (DBusBabysitter *sitter);
-+void _dbus_babysitter_set_child_exit_error (DBusBabysitter *sitter,
-+ DBusError *error);
-+dbus_bool_t _dbus_babysitter_set_watch_functions (DBusBabysitter *sitter,
-+ DBusAddWatchFunction add_function,
-+ DBusRemoveWatchFunction remove_function,
-+ DBusWatchToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SPAWN_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-string-private.h dbus-0.61/dbus/dbus-string-private.h
---- dbus-0.61.orig/dbus/dbus-string-private.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-string-private.h 2005-01-28 04:06:55.000000000 +0100
-@@ -0,0 +1,114 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-string-private.h String utility class (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_STRING_PRIVATE_H
-+#define DBUS_STRING_PRIVATE_H
-+
-+#include <config.h>
-+
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-types.h>
-+
-+#ifndef DBUS_CAN_USE_DBUS_STRING_PRIVATE
-+#error "Don't go including dbus-string-private.h for no good reason"
-+#endif
-+
-+DBUS_BEGIN_DECLS
-+
-+/**
-+ * @brief Internals of DBusString.
-+ *
-+ * DBusString internals. DBusString is an opaque objects, it must be
-+ * used via accessor functions.
-+ */
-+typedef struct
-+{
-+ unsigned char *str; /**< String data, plus nul termination */
-+ int len; /**< Length without nul */
-+ int allocated; /**< Allocated size of data */
-+ int max_length; /**< Max length of this string, without nul byte */
-+ unsigned int constant : 1; /**< String data is not owned by DBusString */
-+ unsigned int locked : 1; /**< DBusString has been locked and can't be changed */
-+ unsigned int invalid : 1; /**< DBusString is invalid (e.g. already freed) */
-+ unsigned int align_offset : 3; /**< str - align_offset is the actual malloc block */
-+} DBusRealString;
-+
-+
-+/**
-+ * @defgroup DBusStringInternals DBusString implementation details
-+ * @ingroup DBusInternals
-+ * @brief DBusString implementation details
-+ *
-+ * The guts of DBusString.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * This is the maximum max length (and thus also the maximum length)
-+ * of a DBusString
-+ */
-+#define _DBUS_STRING_MAX_MAX_LENGTH (_DBUS_INT32_MAX - _DBUS_STRING_ALLOCATION_PADDING)
-+
-+/**
-+ * Checks a bunch of assertions about a string object
-+ *
-+ * @param real the DBusRealString
-+ */
-+#define DBUS_GENERIC_STRING_PREAMBLE(real) _dbus_assert ((real) != NULL); _dbus_assert (!(real)->invalid); _dbus_assert ((real)->len >= 0); _dbus_assert ((real)->allocated >= 0); _dbus_assert ((real)->max_length >= 0); _dbus_assert ((real)->len <= ((real)->allocated - _DBUS_STRING_ALLOCATION_PADDING)); _dbus_assert ((real)->len <= (real)->max_length)
-+
-+/**
-+ * Checks assertions about a string object that needs to be
-+ * modifiable - may not be locked or const. Also declares
-+ * the "real" variable pointing to DBusRealString.
-+ * @param str the string
-+ */
-+#define DBUS_STRING_PREAMBLE(str) DBusRealString *real = (DBusRealString*) str; \
-+ DBUS_GENERIC_STRING_PREAMBLE (real); \
-+ _dbus_assert (!(real)->constant); \
-+ _dbus_assert (!(real)->locked)
-+
-+/**
-+ * Checks assertions about a string object that may be locked but
-+ * can't be const. i.e. a string object that we can free. Also
-+ * declares the "real" variable pointing to DBusRealString.
-+ *
-+ * @param str the string
-+ */
-+#define DBUS_LOCKED_STRING_PREAMBLE(str) DBusRealString *real = (DBusRealString*) str; \
-+ DBUS_GENERIC_STRING_PREAMBLE (real); \
-+ _dbus_assert (!(real)->constant)
-+
-+/**
-+ * Checks assertions about a string that may be const or locked. Also
-+ * declares the "real" variable pointing to DBusRealString.
-+ * @param str the string.
-+ */
-+#define DBUS_CONST_STRING_PREAMBLE(str) const DBusRealString *real = (DBusRealString*) str; \
-+ DBUS_GENERIC_STRING_PREAMBLE (real)
-+
-+/** @} */
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_STRING_PRIVATE_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-string-util.c dbus-0.61/dbus/dbus-string-util.c
---- dbus-0.61.orig/dbus/dbus-string-util.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-string-util.c 2005-02-25 23:03:30.000000000 +0100
-@@ -0,0 +1,746 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-string-util.c Would be in dbus-string.c, but not used in libdbus
-+ *
-+ * Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-string.h"
-+#define DBUS_CAN_USE_DBUS_STRING_PRIVATE 1
-+#include "dbus-string-private.h"
-+
-+/**
-+ * @addtogroup DBusString
-+ * @{
-+ */
-+
-+/**
-+ * Returns whether a string ends with the given suffix
-+ *
-+ * @todo memcmp might make this faster.
-+ *
-+ * @param a the string
-+ * @param c_str the C-style string
-+ * @returns #TRUE if the string ends with the suffix
-+ */
-+dbus_bool_t
-+_dbus_string_ends_with_c_str (const DBusString *a,
-+ const char *c_str)
-+{
-+ const unsigned char *ap;
-+ const unsigned char *bp;
-+ const unsigned char *a_end;
-+ unsigned long c_str_len;
-+ const DBusRealString *real_a = (const DBusRealString*) a;
-+ DBUS_GENERIC_STRING_PREAMBLE (real_a);
-+ _dbus_assert (c_str != NULL);
-+
-+ c_str_len = strlen (c_str);
-+ if (((unsigned long)real_a->len) < c_str_len)
-+ return FALSE;
-+
-+ ap = real_a->str + (real_a->len - c_str_len);
-+ bp = (const unsigned char*) c_str;
-+ a_end = real_a->str + real_a->len;
-+ while (ap != a_end)
-+ {
-+ if (*ap != *bp)
-+ return FALSE;
-+
-+ ++ap;
-+ ++bp;
-+ }
-+
-+ _dbus_assert (*ap == '\0');
-+ _dbus_assert (*bp == '\0');
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Find the given byte scanning backward from the given start.
-+ * Sets *found to -1 if the byte is not found.
-+ *
-+ * @param str the string
-+ * @param start the place to start scanning (will not find the byte at this point)
-+ * @param byte the byte to find
-+ * @param found return location for where it was found
-+ * @returns #TRUE if found
-+ */
-+dbus_bool_t
-+_dbus_string_find_byte_backward (const DBusString *str,
-+ int start,
-+ unsigned char byte,
-+ int *found)
-+{
-+ int i;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (found != NULL);
-+
-+ i = start - 1;
-+ while (i >= 0)
-+ {
-+ if (real->str[i] == byte)
-+ break;
-+
-+ --i;
-+ }
-+
-+ if (found)
-+ *found = i;
-+
-+ return i >= 0;
-+}
-+
-+/**
-+ * Skips whitespace from start, storing the first non-whitespace in *end.
-+ * (whitespace is space, tab, newline, CR).
-+ *
-+ * @param str the string
-+ * @param start where to start
-+ * @param end where to store the first non-whitespace byte index
-+ */
-+void
-+_dbus_string_skip_white (const DBusString *str,
-+ int start,
-+ int *end)
-+{
-+ int i;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (start >= 0);
-+
-+ i = start;
-+ while (i < real->len)
-+ {
-+ if (!(real->str[i] == ' ' ||
-+ real->str[i] == '\n' ||
-+ real->str[i] == '\r' ||
-+ real->str[i] == '\t'))
-+ break;
-+
-+ ++i;
-+ }
-+
-+ _dbus_assert (i == real->len || !(real->str[i] == ' ' ||
-+ real->str[i] == '\t'));
-+
-+ if (end)
-+ *end = i;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-test.h"
-+#include <stdio.h>
-+
-+static void
-+test_max_len (DBusString *str,
-+ int max_len)
-+{
-+ if (max_len > 0)
-+ {
-+ if (!_dbus_string_set_length (str, max_len - 1))
-+ _dbus_assert_not_reached ("setting len to one less than max should have worked");
-+ }
-+
-+ if (!_dbus_string_set_length (str, max_len))
-+ _dbus_assert_not_reached ("setting len to max len should have worked");
-+
-+ if (_dbus_string_set_length (str, max_len + 1))
-+ _dbus_assert_not_reached ("setting len to one more than max len should not have worked");
-+
-+ if (!_dbus_string_set_length (str, 0))
-+ _dbus_assert_not_reached ("setting len to zero should have worked");
-+}
-+
-+static void
-+test_hex_roundtrip (const unsigned char *data,
-+ int len)
-+{
-+ DBusString orig;
-+ DBusString encoded;
-+ DBusString decoded;
-+ int end;
-+
-+ if (len < 0)
-+ len = strlen (data);
-+
-+ if (!_dbus_string_init (&orig))
-+ _dbus_assert_not_reached ("could not init string");
-+
-+ if (!_dbus_string_init (&encoded))
-+ _dbus_assert_not_reached ("could not init string");
-+
-+ if (!_dbus_string_init (&decoded))
-+ _dbus_assert_not_reached ("could not init string");
-+
-+ if (!_dbus_string_append_len (&orig, data, len))
-+ _dbus_assert_not_reached ("couldn't append orig data");
-+
-+ if (!_dbus_string_hex_encode (&orig, 0, &encoded, 0))
-+ _dbus_assert_not_reached ("could not encode");
-+
-+ if (!_dbus_string_hex_decode (&encoded, 0, &end, &decoded, 0))
-+ _dbus_assert_not_reached ("could not decode");
-+
-+ _dbus_assert (_dbus_string_get_length (&encoded) == end);
-+
-+ if (!_dbus_string_equal (&orig, &decoded))
-+ {
-+ const char *s;
-+
-+ printf ("Original string %d bytes encoded %d bytes decoded %d bytes\n",
-+ _dbus_string_get_length (&orig),
-+ _dbus_string_get_length (&encoded),
-+ _dbus_string_get_length (&decoded));
-+ printf ("Original: %s\n", data);
-+ s = _dbus_string_get_const_data (&decoded);
-+ printf ("Decoded: %s\n", s);
-+ _dbus_assert_not_reached ("original string not the same as string decoded from hex");
-+ }
-+
-+ _dbus_string_free (&orig);
-+ _dbus_string_free (&encoded);
-+ _dbus_string_free (&decoded);
-+}
-+
-+typedef void (* TestRoundtripFunc) (const unsigned char *data,
-+ int len);
-+static void
-+test_roundtrips (TestRoundtripFunc func)
-+{
-+ (* func) ("Hello this is a string\n", -1);
-+ (* func) ("Hello this is a string\n1", -1);
-+ (* func) ("Hello this is a string\n12", -1);
-+ (* func) ("Hello this is a string\n123", -1);
-+ (* func) ("Hello this is a string\n1234", -1);
-+ (* func) ("Hello this is a string\n12345", -1);
-+ (* func) ("", 0);
-+ (* func) ("1", 1);
-+ (* func) ("12", 2);
-+ (* func) ("123", 3);
-+ (* func) ("1234", 4);
-+ (* func) ("12345", 5);
-+ (* func) ("", 1);
-+ (* func) ("1", 2);
-+ (* func) ("12", 3);
-+ (* func) ("123", 4);
-+ (* func) ("1234", 5);
-+ (* func) ("12345", 6);
-+ {
-+ unsigned char buf[512];
-+ int i;
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (buf))
-+ {
-+ buf[i] = i;
-+ ++i;
-+ }
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (buf))
-+ {
-+ (* func) (buf, i);
-+ ++i;
-+ }
-+ }
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* The max length thing is sort of a historical artifact
-+ * from a feature that turned out to be dumb; perhaps
-+ * we should purge it entirely. The problem with
-+ * the feature is that it looks like memory allocation
-+ * failure, but is not a transient or resolvable failure.
-+ */
-+static void
-+set_max_length (DBusString *str,
-+ int max_length)
-+{
-+ DBusRealString *real;
-+
-+ real = (DBusRealString*) str;
-+
-+ real->max_length = max_length;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * @ingroup DBusStringInternals
-+ * Unit test for DBusString.
-+ *
-+ * @todo Need to write tests for _dbus_string_copy() and
-+ * _dbus_string_move() moving to/from each of start/middle/end of a
-+ * string. Also need tests for _dbus_string_move_len ()
-+ *
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_string_test (void)
-+{
-+ DBusString str;
-+ DBusString other;
-+ int i, end;
-+ long v;
-+ double d;
-+ int lens[] = { 0, 1, 2, 3, 4, 5, 10, 16, 17, 18, 25, 31, 32, 33, 34, 35, 63, 64, 65, 66, 67, 68, 69, 70, 71, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136 };
-+ char *s;
-+ dbus_unichar_t ch;
-+
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (lens))
-+ {
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ set_max_length (&str, lens[i]);
-+
-+ test_max_len (&str, lens[i]);
-+ _dbus_string_free (&str);
-+
-+ ++i;
-+ }
-+
-+ /* Test shortening and setting length */
-+ i = 0;
-+ while (i < _DBUS_N_ELEMENTS (lens))
-+ {
-+ int j;
-+
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ set_max_length (&str, lens[i]);
-+
-+ if (!_dbus_string_set_length (&str, lens[i]))
-+ _dbus_assert_not_reached ("failed to set string length");
-+
-+ j = lens[i];
-+ while (j > 0)
-+ {
-+ _dbus_assert (_dbus_string_get_length (&str) == j);
-+ if (j > 0)
-+ {
-+ _dbus_string_shorten (&str, 1);
-+ _dbus_assert (_dbus_string_get_length (&str) == (j - 1));
-+ }
-+ --j;
-+ }
-+
-+ _dbus_string_free (&str);
-+
-+ ++i;
-+ }
-+
-+ /* Test equality */
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("oom");
-+
-+ if (!_dbus_string_append (&str, "Hello World"))
-+ _dbus_assert_not_reached ("oom");
-+
-+ _dbus_string_init_const (&other, "H");
-+ _dbus_assert (_dbus_string_equal_substring (&str, 0, 1, &other, 0));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 1, 0, &other, 1));
-+ _dbus_string_init_const (&other, "Hello");
-+ _dbus_assert (_dbus_string_equal_substring (&str, 0, 5, &other, 0));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 1, 4, &other, 1));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 2, 3, &other, 2));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 3, 2, &other, 3));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 4, 1, &other, 4));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 5, 0, &other, 5));
-+
-+ _dbus_assert (_dbus_string_equal_substring (&other, 0, 5, &str, 0));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 1, 4, &str, 1));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 2, 3, &str, 2));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 3, 2, &str, 3));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 4, 1, &str, 4));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 5, 0, &str, 5));
-+
-+
-+ _dbus_string_init_const (&other, "World");
-+ _dbus_assert (_dbus_string_equal_substring (&str, 6, 5, &other, 0));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 7, 4, &other, 1));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 8, 3, &other, 2));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 9, 2, &other, 3));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 10, 1, &other, 4));
-+ _dbus_assert (_dbus_string_equal_substring (&str, 11, 0, &other, 5));
-+
-+ _dbus_assert (_dbus_string_equal_substring (&other, 0, 5, &str, 6));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 1, 4, &str, 7));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 2, 3, &str, 8));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 3, 2, &str, 9));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 4, 1, &str, 10));
-+ _dbus_assert (_dbus_string_equal_substring (&other, 5, 0, &str, 11));
-+
-+ _dbus_string_free (&str);
-+
-+ /* Test appending data */
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ i = 0;
-+ while (i < 10)
-+ {
-+ if (!_dbus_string_append (&str, "a"))
-+ _dbus_assert_not_reached ("failed to append string to string\n");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == i * 2 + 1);
-+
-+ if (!_dbus_string_append_byte (&str, 'b'))
-+ _dbus_assert_not_reached ("failed to append byte to string\n");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == i * 2 + 2);
-+
-+ ++i;
-+ }
-+
-+ _dbus_string_free (&str);
-+
-+ /* Check steal_data */
-+
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ if (!_dbus_string_append (&str, "Hello World"))
-+ _dbus_assert_not_reached ("could not append to string");
-+
-+ i = _dbus_string_get_length (&str);
-+
-+ if (!_dbus_string_steal_data (&str, &s))
-+ _dbus_assert_not_reached ("failed to steal data");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == 0);
-+ _dbus_assert (((int)strlen (s)) == i);
-+
-+ dbus_free (s);
-+
-+ /* Check move */
-+
-+ if (!_dbus_string_append (&str, "Hello World"))
-+ _dbus_assert_not_reached ("could not append to string");
-+
-+ i = _dbus_string_get_length (&str);
-+
-+ if (!_dbus_string_init (&other))
-+ _dbus_assert_not_reached ("could not init string");
-+
-+ if (!_dbus_string_move (&str, 0, &other, 0))
-+ _dbus_assert_not_reached ("could not move");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == 0);
-+ _dbus_assert (_dbus_string_get_length (&other) == i);
-+
-+ if (!_dbus_string_append (&str, "Hello World"))
-+ _dbus_assert_not_reached ("could not append to string");
-+
-+ if (!_dbus_string_move (&str, 0, &other, _dbus_string_get_length (&other)))
-+ _dbus_assert_not_reached ("could not move");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == 0);
-+ _dbus_assert (_dbus_string_get_length (&other) == i * 2);
-+
-+ if (!_dbus_string_append (&str, "Hello World"))
-+ _dbus_assert_not_reached ("could not append to string");
-+
-+ if (!_dbus_string_move (&str, 0, &other, _dbus_string_get_length (&other) / 2))
-+ _dbus_assert_not_reached ("could not move");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == 0);
-+ _dbus_assert (_dbus_string_get_length (&other) == i * 3);
-+
-+ _dbus_string_free (&other);
-+
-+ /* Check copy */
-+
-+ if (!_dbus_string_append (&str, "Hello World"))
-+ _dbus_assert_not_reached ("could not append to string");
-+
-+ i = _dbus_string_get_length (&str);
-+
-+ if (!_dbus_string_init (&other))
-+ _dbus_assert_not_reached ("could not init string");
-+
-+ if (!_dbus_string_copy (&str, 0, &other, 0))
-+ _dbus_assert_not_reached ("could not copy");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == i);
-+ _dbus_assert (_dbus_string_get_length (&other) == i);
-+
-+ if (!_dbus_string_copy (&str, 0, &other, _dbus_string_get_length (&other)))
-+ _dbus_assert_not_reached ("could not copy");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == i);
-+ _dbus_assert (_dbus_string_get_length (&other) == i * 2);
-+ _dbus_assert (_dbus_string_equal_c_str (&other,
-+ "Hello WorldHello World"));
-+
-+ if (!_dbus_string_copy (&str, 0, &other, _dbus_string_get_length (&other) / 2))
-+ _dbus_assert_not_reached ("could not copy");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == i);
-+ _dbus_assert (_dbus_string_get_length (&other) == i * 3);
-+ _dbus_assert (_dbus_string_equal_c_str (&other,
-+ "Hello WorldHello WorldHello World"));
-+
-+ _dbus_string_free (&str);
-+ _dbus_string_free (&other);
-+
-+ /* Check replace */
-+
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ if (!_dbus_string_append (&str, "Hello World"))
-+ _dbus_assert_not_reached ("could not append to string");
-+
-+ i = _dbus_string_get_length (&str);
-+
-+ if (!_dbus_string_init (&other))
-+ _dbus_assert_not_reached ("could not init string");
-+
-+ if (!_dbus_string_replace_len (&str, 0, _dbus_string_get_length (&str),
-+ &other, 0, _dbus_string_get_length (&other)))
-+ _dbus_assert_not_reached ("could not replace");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == i);
-+ _dbus_assert (_dbus_string_get_length (&other) == i);
-+ _dbus_assert (_dbus_string_equal_c_str (&other, "Hello World"));
-+
-+ if (!_dbus_string_replace_len (&str, 0, _dbus_string_get_length (&str),
-+ &other, 5, 1))
-+ _dbus_assert_not_reached ("could not replace center space");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == i);
-+ _dbus_assert (_dbus_string_get_length (&other) == i * 2 - 1);
-+ _dbus_assert (_dbus_string_equal_c_str (&other,
-+ "HelloHello WorldWorld"));
-+
-+
-+ if (!_dbus_string_replace_len (&str, 1, 1,
-+ &other,
-+ _dbus_string_get_length (&other) - 1,
-+ 1))
-+ _dbus_assert_not_reached ("could not replace end character");
-+
-+ _dbus_assert (_dbus_string_get_length (&str) == i);
-+ _dbus_assert (_dbus_string_get_length (&other) == i * 2 - 1);
-+ _dbus_assert (_dbus_string_equal_c_str (&other,
-+ "HelloHello WorldWorle"));
-+
-+ _dbus_string_free (&str);
-+ _dbus_string_free (&other);
-+
-+ /* Check append/get unichar */
-+
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ ch = 0;
-+ if (!_dbus_string_append_unichar (&str, 0xfffc))
-+ _dbus_assert_not_reached ("failed to append unichar");
-+
-+ _dbus_string_get_unichar (&str, 0, &ch, &i);
-+
-+ _dbus_assert (ch == 0xfffc);
-+ _dbus_assert (i == _dbus_string_get_length (&str));
-+
-+ _dbus_string_free (&str);
-+
-+ /* Check insert/set/get byte */
-+
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ if (!_dbus_string_append (&str, "Hello"))
-+ _dbus_assert_not_reached ("failed to append Hello");
-+
-+ _dbus_assert (_dbus_string_get_byte (&str, 0) == 'H');
-+ _dbus_assert (_dbus_string_get_byte (&str, 1) == 'e');
-+ _dbus_assert (_dbus_string_get_byte (&str, 2) == 'l');
-+ _dbus_assert (_dbus_string_get_byte (&str, 3) == 'l');
-+ _dbus_assert (_dbus_string_get_byte (&str, 4) == 'o');
-+
-+ _dbus_string_set_byte (&str, 1, 'q');
-+ _dbus_assert (_dbus_string_get_byte (&str, 1) == 'q');
-+
-+ if (!_dbus_string_insert_bytes (&str, 0, 1, 255))
-+ _dbus_assert_not_reached ("can't insert byte");
-+
-+ if (!_dbus_string_insert_bytes (&str, 2, 4, 'Z'))
-+ _dbus_assert_not_reached ("can't insert byte");
-+
-+ if (!_dbus_string_insert_bytes (&str, _dbus_string_get_length (&str), 1, 'W'))
-+ _dbus_assert_not_reached ("can't insert byte");
-+
-+ _dbus_assert (_dbus_string_get_byte (&str, 0) == 255);
-+ _dbus_assert (_dbus_string_get_byte (&str, 1) == 'H');
-+ _dbus_assert (_dbus_string_get_byte (&str, 2) == 'Z');
-+ _dbus_assert (_dbus_string_get_byte (&str, 3) == 'Z');
-+ _dbus_assert (_dbus_string_get_byte (&str, 4) == 'Z');
-+ _dbus_assert (_dbus_string_get_byte (&str, 5) == 'Z');
-+ _dbus_assert (_dbus_string_get_byte (&str, 6) == 'q');
-+ _dbus_assert (_dbus_string_get_byte (&str, 7) == 'l');
-+ _dbus_assert (_dbus_string_get_byte (&str, 8) == 'l');
-+ _dbus_assert (_dbus_string_get_byte (&str, 9) == 'o');
-+ _dbus_assert (_dbus_string_get_byte (&str, 10) == 'W');
-+
-+ _dbus_string_free (&str);
-+
-+ /* Check append/parse int/double */
-+
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ if (!_dbus_string_append_int (&str, 27))
-+ _dbus_assert_not_reached ("failed to append int");
-+
-+ i = _dbus_string_get_length (&str);
-+
-+ if (!_dbus_string_parse_int (&str, 0, &v, &end))
-+ _dbus_assert_not_reached ("failed to parse int");
-+
-+ _dbus_assert (v == 27);
-+ _dbus_assert (end == i);
-+
-+ _dbus_string_free (&str);
-+
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ if (!_dbus_string_append_double (&str, 50.3))
-+ _dbus_assert_not_reached ("failed to append float");
-+
-+ i = _dbus_string_get_length (&str);
-+
-+ if (!_dbus_string_parse_double (&str, 0, &d, &end))
-+ _dbus_assert_not_reached ("failed to parse float");
-+
-+ _dbus_assert (d > (50.3 - 1e-6) && d < (50.3 + 1e-6));
-+ _dbus_assert (end == i);
-+
-+ _dbus_string_free (&str);
-+
-+ /* Test find */
-+ if (!_dbus_string_init (&str))
-+ _dbus_assert_not_reached ("failed to init string");
-+
-+ if (!_dbus_string_append (&str, "Hello"))
-+ _dbus_assert_not_reached ("couldn't append to string");
-+
-+ if (!_dbus_string_find (&str, 0, "He", &i))
-+ _dbus_assert_not_reached ("didn't find 'He'");
-+ _dbus_assert (i == 0);
-+
-+ if (!_dbus_string_find (&str, 0, "Hello", &i))
-+ _dbus_assert_not_reached ("didn't find 'Hello'");
-+ _dbus_assert (i == 0);
-+
-+ if (!_dbus_string_find (&str, 0, "ello", &i))
-+ _dbus_assert_not_reached ("didn't find 'ello'");
-+ _dbus_assert (i == 1);
-+
-+ if (!_dbus_string_find (&str, 0, "lo", &i))
-+ _dbus_assert_not_reached ("didn't find 'lo'");
-+ _dbus_assert (i == 3);
-+
-+ if (!_dbus_string_find (&str, 2, "lo", &i))
-+ _dbus_assert_not_reached ("didn't find 'lo'");
-+ _dbus_assert (i == 3);
-+
-+ if (_dbus_string_find (&str, 4, "lo", &i))
-+ _dbus_assert_not_reached ("did find 'lo'");
-+
-+ if (!_dbus_string_find (&str, 0, "l", &i))
-+ _dbus_assert_not_reached ("didn't find 'l'");
-+ _dbus_assert (i == 2);
-+
-+ if (!_dbus_string_find (&str, 0, "H", &i))
-+ _dbus_assert_not_reached ("didn't find 'H'");
-+ _dbus_assert (i == 0);
-+
-+ if (!_dbus_string_find (&str, 0, "", &i))
-+ _dbus_assert_not_reached ("didn't find ''");
-+ _dbus_assert (i == 0);
-+
-+ if (_dbus_string_find (&str, 0, "Hello!", NULL))
-+ _dbus_assert_not_reached ("Did find 'Hello!'");
-+
-+ if (_dbus_string_find (&str, 0, "Oh, Hello", NULL))
-+ _dbus_assert_not_reached ("Did find 'Oh, Hello'");
-+
-+ if (_dbus_string_find (&str, 0, "ill", NULL))
-+ _dbus_assert_not_reached ("Did find 'ill'");
-+
-+ if (_dbus_string_find (&str, 0, "q", NULL))
-+ _dbus_assert_not_reached ("Did find 'q'");
-+
-+ if (!_dbus_string_find_to (&str, 0, 2, "He", NULL))
-+ _dbus_assert_not_reached ("Didn't find 'He'");
-+
-+ if (_dbus_string_find_to (&str, 0, 2, "Hello", NULL))
-+ _dbus_assert_not_reached ("Did find 'Hello'");
-+
-+ if (!_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str), 'H', &i))
-+ _dbus_assert_not_reached ("Did not find 'H'");
-+ _dbus_assert (i == 0);
-+
-+ if (!_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str), 'o', &i))
-+ _dbus_assert_not_reached ("Did not find 'o'");
-+ _dbus_assert (i == _dbus_string_get_length (&str) - 1);
-+
-+ if (_dbus_string_find_byte_backward (&str, _dbus_string_get_length (&str) - 1, 'o', &i))
-+ _dbus_assert_not_reached ("Did find 'o'");
-+ _dbus_assert (i == -1);
-+
-+ if (_dbus_string_find_byte_backward (&str, 1, 'e', &i))
-+ _dbus_assert_not_reached ("Did find 'e'");
-+ _dbus_assert (i == -1);
-+
-+ if (!_dbus_string_find_byte_backward (&str, 2, 'e', &i))
-+ _dbus_assert_not_reached ("Didn't find 'e'");
-+ _dbus_assert (i == 1);
-+
-+ _dbus_string_free (&str);
-+
-+ /* Hex encoding */
-+ _dbus_string_init_const (&str, "cafebabe, this is a bogus hex string");
-+ if (!_dbus_string_init (&other))
-+ _dbus_assert_not_reached ("could not init string");
-+
-+ if (!_dbus_string_hex_decode (&str, 0, &end, &other, 0))
-+ _dbus_assert_not_reached ("deccoded bogus hex string with no error");
-+
-+ _dbus_assert (end == 8);
-+
-+ _dbus_string_free (&other);
-+
-+ test_roundtrips (test_hex_roundtrip);
-+
-+ _dbus_string_free (&str);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-string.c dbus-0.61/dbus/dbus-string.c
---- dbus-0.61.orig/dbus/dbus-string.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-string.c 2006-02-16 01:43:41.000000000 +0100
-@@ -0,0 +1,2678 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-string.c String utility class (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-string.h"
-+/* we allow a system header here, for speed/convenience */
-+#include <string.h>
-+/* for vsnprintf */
-+#include <stdio.h>
-+#define DBUS_CAN_USE_DBUS_STRING_PRIVATE 1
-+#include "dbus-string-private.h"
-+#include "dbus-marshal-basic.h" /* probably should be removed by moving the usage of DBUS_TYPE
-+ * into the marshaling-related files
-+ */
-+/* for DBUS_VA_COPY */
-+#include "dbus-sysdeps.h"
-+
-+/**
-+ * @defgroup DBusString string class
-+ * @ingroup DBusInternals
-+ * @brief DBusString data structure
-+ *
-+ * Types and functions related to DBusString. DBusString is intended
-+ * to be a string class that makes it hard to mess up security issues
-+ * (and just in general harder to write buggy code). It should be
-+ * used (or extended and then used) rather than the libc stuff in
-+ * string.h. The string class is a bit inconvenient at spots because
-+ * it handles out-of-memory failures and tries to be extra-robust.
-+ *
-+ * A DBusString has a maximum length set at initialization time; this
-+ * can be used to ensure that a buffer doesn't get too big. The
-+ * _dbus_string_lengthen() method checks for overflow, and for max
-+ * length being exceeded.
-+ *
-+ * Try to avoid conversion to a plain C string, i.e. add methods on
-+ * the string object instead, only convert to C string when passing
-+ * things out to the public API. In particular, no sprintf, strcpy,
-+ * strcat, any of that should be used. The GString feature of
-+ * accepting negative numbers for "length of string" is also absent,
-+ * because it could keep us from detecting bogus huge lengths. i.e. if
-+ * we passed in some bogus huge length it would be taken to mean
-+ * "current length of string" instead of "broken crack"
-+ *
-+ * @todo #DBusString needs a lot of cleaning up; some of the
-+ * API is no longer used, and the API is pretty inconsistent.
-+ * In particular all the "append" APIs, especially those involving
-+ * alignment but probably lots of them, are no longer used by the
-+ * marshaling code which always does "inserts" now.
-+ */
-+
-+/**
-+ * @addtogroup DBusString
-+ * @{
-+ */
-+
-+static void
-+fixup_alignment (DBusRealString *real)
-+{
-+ unsigned char *aligned;
-+ unsigned char *real_block;
-+ unsigned int old_align_offset;
-+
-+ /* we have to have extra space in real->allocated for the align offset and nul byte */
-+ _dbus_assert (real->len <= real->allocated - _DBUS_STRING_ALLOCATION_PADDING);
-+
-+ old_align_offset = real->align_offset;
-+ real_block = real->str - old_align_offset;
-+
-+ aligned = _DBUS_ALIGN_ADDRESS (real_block, 8);
-+
-+ real->align_offset = aligned - real_block;
-+ real->str = aligned;
-+
-+ if (old_align_offset != real->align_offset)
-+ {
-+ /* Here comes the suck */
-+ memmove (real_block + real->align_offset,
-+ real_block + old_align_offset,
-+ real->len + 1);
-+ }
-+
-+ _dbus_assert (real->align_offset < 8);
-+ _dbus_assert (_DBUS_ALIGN_ADDRESS (real->str, 8) == real->str);
-+}
-+
-+static void
-+undo_alignment (DBusRealString *real)
-+{
-+ if (real->align_offset != 0)
-+ {
-+ memmove (real->str - real->align_offset,
-+ real->str,
-+ real->len + 1);
-+
-+ real->str = real->str - real->align_offset;
-+ real->align_offset = 0;
-+ }
-+}
-+
-+/**
-+ * Initializes a string that can be up to the given allocation size
-+ * before it has to realloc. The string starts life with zero length.
-+ * The string must eventually be freed with _dbus_string_free().
-+ *
-+ * @param str memory to hold the string
-+ * @param allocate_size amount to preallocate
-+ * @returns #TRUE on success, #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_init_preallocated (DBusString *str,
-+ int allocate_size)
-+{
-+ DBusRealString *real;
-+
-+ _dbus_assert (str != NULL);
-+
-+ _dbus_assert (sizeof (DBusString) == sizeof (DBusRealString));
-+
-+ real = (DBusRealString*) str;
-+
-+ /* It's very important not to touch anything
-+ * other than real->str if we're going to fail,
-+ * since we also use this function to reset
-+ * an existing string, e.g. in _dbus_string_steal_data()
-+ */
-+
-+ real->str = dbus_malloc (_DBUS_STRING_ALLOCATION_PADDING + allocate_size);
-+ if (real->str == NULL)
-+ return FALSE;
-+
-+ real->allocated = _DBUS_STRING_ALLOCATION_PADDING + allocate_size;
-+ real->len = 0;
-+ real->str[real->len] = '\0';
-+
-+ real->max_length = _DBUS_STRING_MAX_MAX_LENGTH;
-+ real->constant = FALSE;
-+ real->locked = FALSE;
-+ real->invalid = FALSE;
-+ real->align_offset = 0;
-+
-+ fixup_alignment (real);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Initializes a string. The string starts life with zero length. The
-+ * string must eventually be freed with _dbus_string_free().
-+ *
-+ * @param str memory to hold the string
-+ * @returns #TRUE on success, #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_init (DBusString *str)
-+{
-+ return _dbus_string_init_preallocated (str, 0);
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* The max length thing is sort of a historical artifact
-+ * from a feature that turned out to be dumb; perhaps
-+ * we should purge it entirely. The problem with
-+ * the feature is that it looks like memory allocation
-+ * failure, but is not a transient or resolvable failure.
-+ */
-+static void
-+set_max_length (DBusString *str,
-+ int max_length)
-+{
-+ DBusRealString *real;
-+
-+ real = (DBusRealString*) str;
-+
-+ real->max_length = max_length;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Initializes a constant string. The value parameter is not copied
-+ * (should be static), and the string may never be modified.
-+ * It is safe but not necessary to call _dbus_string_free()
-+ * on a const string. The string has a length limit of MAXINT - 8.
-+ *
-+ * @param str memory to use for the string
-+ * @param value a string to be stored in str (not copied!!!)
-+ */
-+void
-+_dbus_string_init_const (DBusString *str,
-+ const char *value)
-+{
-+ _dbus_assert (value != NULL);
-+
-+ _dbus_string_init_const_len (str, value,
-+ strlen (value));
-+}
-+
-+/**
-+ * Initializes a constant string with a length. The value parameter is
-+ * not copied (should be static), and the string may never be
-+ * modified. It is safe but not necessary to call _dbus_string_free()
-+ * on a const string.
-+ *
-+ * @param str memory to use for the string
-+ * @param value a string to be stored in str (not copied!!!)
-+ * @param len the length to use
-+ */
-+void
-+_dbus_string_init_const_len (DBusString *str,
-+ const char *value,
-+ int len)
-+{
-+ DBusRealString *real;
-+
-+ _dbus_assert (str != NULL);
-+ _dbus_assert (len == 0 || value != NULL);
-+ _dbus_assert (len <= _DBUS_STRING_MAX_MAX_LENGTH);
-+ _dbus_assert (len >= 0);
-+
-+ real = (DBusRealString*) str;
-+
-+ real->str = (unsigned char*) value;
-+ real->len = len;
-+ real->allocated = real->len + _DBUS_STRING_ALLOCATION_PADDING; /* a lie, just to avoid special-case assertions... */
-+ real->max_length = real->len + 1;
-+ real->constant = TRUE;
-+ real->locked = TRUE;
-+ real->invalid = FALSE;
-+ real->align_offset = 0;
-+
-+ /* We don't require const strings to be 8-byte aligned as the
-+ * memory is coming from elsewhere.
-+ */
-+}
-+
-+/**
-+ * Frees a string created by _dbus_string_init().
-+ *
-+ * @param str memory where the string is stored.
-+ */
-+void
-+_dbus_string_free (DBusString *str)
-+{
-+ DBusRealString *real = (DBusRealString*) str;
-+ DBUS_GENERIC_STRING_PREAMBLE (real);
-+
-+ if (real->constant)
-+ return;
-+ dbus_free (real->str - real->align_offset);
-+
-+ real->invalid = TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* Not using this feature at the moment,
-+ * so marked DBUS_BUILD_TESTS-only
-+ */
-+/**
-+ * Locks a string such that any attempts to change the string will
-+ * result in aborting the program. Also, if the string is wasting a
-+ * lot of memory (allocation is sufficiently larger than what the
-+ * string is really using), _dbus_string_lock() will realloc the
-+ * string's data to "compact" it.
-+ *
-+ * @param str the string to lock.
-+ */
-+void
-+_dbus_string_lock (DBusString *str)
-+{
-+ DBUS_LOCKED_STRING_PREAMBLE (str); /* can lock multiple times */
-+
-+ real->locked = TRUE;
-+
-+ /* Try to realloc to avoid excess memory usage, since
-+ * we know we won't change the string further
-+ */
-+#define MAX_WASTE 48
-+ if (real->allocated - MAX_WASTE > real->len)
-+ {
-+ unsigned char *new_str;
-+ int new_allocated;
-+
-+ new_allocated = real->len + _DBUS_STRING_ALLOCATION_PADDING;
-+
-+ new_str = dbus_realloc (real->str - real->align_offset,
-+ new_allocated);
-+ if (new_str != NULL)
-+ {
-+ real->str = new_str + real->align_offset;
-+ real->allocated = new_allocated;
-+ fixup_alignment (real);
-+ }
-+ }
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+static dbus_bool_t
-+reallocate_for_length (DBusRealString *real,
-+ int new_length)
-+{
-+ int new_allocated;
-+ unsigned char *new_str;
-+
-+ /* at least double our old allocation to avoid O(n), avoiding
-+ * overflow
-+ */
-+ if (real->allocated > (_DBUS_STRING_MAX_MAX_LENGTH + _DBUS_STRING_ALLOCATION_PADDING) / 2)
-+ new_allocated = _DBUS_STRING_MAX_MAX_LENGTH + _DBUS_STRING_ALLOCATION_PADDING;
-+ else
-+ new_allocated = real->allocated * 2;
-+
-+ /* if you change the code just above here, run the tests without
-+ * the following assert-only hack before you commit
-+ */
-+ /* This is keyed off asserts in addition to tests so when you
-+ * disable asserts to profile, you don't get this destroyer
-+ * of profiles.
-+ */
-+#ifdef DBUS_DISABLE_ASSERT
-+#else
-+#ifdef DBUS_BUILD_TESTS
-+ new_allocated = 0; /* ensure a realloc every time so that we go
-+ * through all malloc failure codepaths
-+ */
-+#endif /* DBUS_BUILD_TESTS */
-+#endif /* !DBUS_DISABLE_ASSERT */
-+
-+ /* But be sure we always alloc at least space for the new length */
-+ new_allocated = MAX (new_allocated,
-+ new_length + _DBUS_STRING_ALLOCATION_PADDING);
-+
-+ _dbus_assert (new_allocated >= real->allocated); /* code relies on this */
-+ new_str = dbus_realloc (real->str - real->align_offset, new_allocated);
-+ if (_DBUS_UNLIKELY (new_str == NULL))
-+ return FALSE;
-+
-+ real->str = new_str + real->align_offset;
-+ real->allocated = new_allocated;
-+ fixup_alignment (real);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+set_length (DBusRealString *real,
-+ int new_length)
-+{
-+ /* Note, we are setting the length not including nul termination */
-+
-+ /* exceeding max length is the same as failure to allocate memory */
-+ if (_DBUS_UNLIKELY (new_length > real->max_length))
-+ return FALSE;
-+ else if (new_length > (real->allocated - _DBUS_STRING_ALLOCATION_PADDING) &&
-+ _DBUS_UNLIKELY (!reallocate_for_length (real, new_length)))
-+ return FALSE;
-+ else
-+ {
-+ real->len = new_length;
-+ real->str[new_length] = '\0';
-+ return TRUE;
-+ }
-+}
-+
-+static dbus_bool_t
-+open_gap (int len,
-+ DBusRealString *dest,
-+ int insert_at)
-+{
-+ if (len == 0)
-+ return TRUE;
-+
-+ if (len > dest->max_length - dest->len)
-+ return FALSE; /* detected overflow of dest->len + len below */
-+
-+ if (!set_length (dest, dest->len + len))
-+ return FALSE;
-+
-+ memmove (dest->str + insert_at + len,
-+ dest->str + insert_at,
-+ dest->len - len - insert_at);
-+
-+ return TRUE;
-+}
-+
-+#ifndef _dbus_string_get_data
-+/**
-+ * Gets the raw character buffer from the string. The returned buffer
-+ * will be nul-terminated, but note that strings may contain binary
-+ * data so there may be extra nul characters prior to the termination.
-+ * This function should be little-used, extend DBusString or add
-+ * stuff to dbus-sysdeps.c instead. It's an error to use this
-+ * function on a const string.
-+ *
-+ * @param str the string
-+ * @returns the data
-+ */
-+char*
-+_dbus_string_get_data (DBusString *str)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ return (char*) real->str;
-+}
-+#endif /* _dbus_string_get_data */
-+
-+/* only do the function if we don't have the macro */
-+#ifndef _dbus_string_get_const_data
-+/**
-+ * Gets the raw character buffer from a const string.
-+ *
-+ * @param str the string
-+ * @returns the string data
-+ */
-+const char*
-+_dbus_string_get_const_data (const DBusString *str)
-+{
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+
-+ return (const char*) real->str;
-+}
-+#endif /* _dbus_string_get_const_data */
-+
-+/**
-+ * Gets a sub-portion of the raw character buffer from the
-+ * string. The "len" field is required simply for error
-+ * checking, to be sure you don't try to use more
-+ * string than exists. The nul termination of the
-+ * returned buffer remains at the end of the entire
-+ * string, not at start + len.
-+ *
-+ * @param str the string
-+ * @param start byte offset to return
-+ * @param len length of segment to return
-+ * @returns the string data
-+ */
-+char*
-+_dbus_string_get_data_len (DBusString *str,
-+ int start,
-+ int len)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (len <= real->len - start);
-+
-+ return (char*) real->str + start;
-+}
-+
-+/* only do the function if we don't have the macro */
-+#ifndef _dbus_string_get_const_data_len
-+/**
-+ * const version of _dbus_string_get_data_len().
-+ *
-+ * @param str the string
-+ * @param start byte offset to return
-+ * @param len length of segment to return
-+ * @returns the string data
-+ */
-+const char*
-+_dbus_string_get_const_data_len (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (len <= real->len - start);
-+
-+ return (const char*) real->str + start;
-+}
-+#endif /* _dbus_string_get_const_data_len */
-+
-+/* only do the function if we don't have the macro */
-+#ifndef _dbus_string_set_byte
-+/**
-+ * Sets the value of the byte at the given position.
-+ *
-+ * @param str the string
-+ * @param i the position
-+ * @param byte the new value
-+ */
-+void
-+_dbus_string_set_byte (DBusString *str,
-+ int i,
-+ unsigned char byte)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (i < real->len);
-+ _dbus_assert (i >= 0);
-+
-+ real->str[i] = byte;
-+}
-+#endif /* _dbus_string_set_byte */
-+
-+/* only have the function if we didn't create a macro */
-+#ifndef _dbus_string_get_byte
-+/**
-+ * Gets the byte at the given position. It is
-+ * allowed to ask for the nul byte at the end of
-+ * the string.
-+ *
-+ * @param str the string
-+ * @param start the position
-+ * @returns the byte at that position
-+ */
-+unsigned char
-+_dbus_string_get_byte (const DBusString *str,
-+ int start)
-+{
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (start >= 0);
-+
-+ return real->str[start];
-+}
-+#endif /* _dbus_string_get_byte */
-+
-+/**
-+ * Inserts a number of bytes of a given value at the
-+ * given position.
-+ *
-+ * @param str the string
-+ * @param i the position
-+ * @param n_bytes number of bytes
-+ * @param byte the value to insert
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_string_insert_bytes (DBusString *str,
-+ int i,
-+ int n_bytes,
-+ unsigned char byte)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (i <= real->len);
-+ _dbus_assert (i >= 0);
-+ _dbus_assert (n_bytes >= 0);
-+
-+ if (n_bytes == 0)
-+ return TRUE;
-+
-+ if (!open_gap (n_bytes, real, i))
-+ return FALSE;
-+
-+ memset (real->str + i, byte, n_bytes);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Inserts a single byte at the given position.
-+ *
-+ * @param str the string
-+ * @param i the position
-+ * @param byte the value to insert
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_string_insert_byte (DBusString *str,
-+ int i,
-+ unsigned char byte)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (i <= real->len);
-+ _dbus_assert (i >= 0);
-+
-+ if (!open_gap (1, real, i))
-+ return FALSE;
-+
-+ real->str[i] = byte;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Like _dbus_string_get_data(), but removes the
-+ * gotten data from the original string. The caller
-+ * must free the data returned. This function may
-+ * fail due to lack of memory, and return #FALSE.
-+ *
-+ * @param str the string
-+ * @param data_return location to return the buffer
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_string_steal_data (DBusString *str,
-+ char **data_return)
-+{
-+ int old_max_length;
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (data_return != NULL);
-+
-+ undo_alignment (real);
-+
-+ *data_return = (char*) real->str;
-+
-+ old_max_length = real->max_length;
-+
-+ /* reset the string */
-+ if (!_dbus_string_init (str))
-+ {
-+ /* hrm, put it back then */
-+ real->str = (unsigned char*) *data_return;
-+ *data_return = NULL;
-+ fixup_alignment (real);
-+ return FALSE;
-+ }
-+
-+ real->max_length = old_max_length;
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Like _dbus_string_get_data_len(), but removes the gotten data from
-+ * the original string. The caller must free the data returned. This
-+ * function may fail due to lack of memory, and return #FALSE.
-+ * The returned string is nul-terminated and has length len.
-+ *
-+ * @todo this function is broken because on failure it
-+ * may corrupt the source string.
-+ *
-+ * @param str the string
-+ * @param data_return location to return the buffer
-+ * @param start the start of segment to steal
-+ * @param len the length of segment to steal
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_string_steal_data_len (DBusString *str,
-+ char **data_return,
-+ int start,
-+ int len)
-+{
-+ DBusString dest;
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (data_return != NULL);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (len <= real->len - start);
-+
-+ if (!_dbus_string_init (&dest))
-+ return FALSE;
-+
-+ set_max_length (&dest, real->max_length);
-+
-+ if (!_dbus_string_move_len (str, start, len, &dest, 0))
-+ {
-+ _dbus_string_free (&dest);
-+ return FALSE;
-+ }
-+
-+ _dbus_warn ("Broken code in _dbus_string_steal_data_len(), see @todo, FIXME\n");
-+ if (!_dbus_string_steal_data (&dest, data_return))
-+ {
-+ _dbus_string_free (&dest);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&dest);
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Copies the data from the string into a char*
-+ *
-+ * @param str the string
-+ * @param data_return place to return the data
-+ * @returns #TRUE on success, #FALSE on no memory
-+ */
-+dbus_bool_t
-+_dbus_string_copy_data (const DBusString *str,
-+ char **data_return)
-+{
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (data_return != NULL);
-+
-+ *data_return = dbus_malloc (real->len + 1);
-+ if (*data_return == NULL)
-+ return FALSE;
-+
-+ memcpy (*data_return, real->str, real->len + 1);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Copies the contents of a DBusString into a different
-+ * buffer. The resulting buffer will be nul-terminated.
-+ *
-+ * @param str a string
-+ * @param buffer a C buffer to copy data to
-+ * @param avail_len maximum length of C buffer
-+ */
-+void
-+_dbus_string_copy_to_buffer (const DBusString *str,
-+ char *buffer,
-+ int avail_len)
-+{
-+ int copy_len;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+
-+ _dbus_assert (avail_len >= 0);
-+
-+ copy_len = MIN (avail_len, real->len+1);
-+ memcpy (buffer, real->str, copy_len);
-+ if (avail_len > 0 && avail_len == copy_len)
-+ buffer[avail_len-1] = '\0';
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Copies a segment of the string into a char*
-+ *
-+ * @param str the string
-+ * @param data_return place to return the data
-+ * @param start start index
-+ * @param len length to copy
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_copy_data_len (const DBusString *str,
-+ char **data_return,
-+ int start,
-+ int len)
-+{
-+ DBusString dest;
-+
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (data_return != NULL);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (len <= real->len - start);
-+
-+ if (!_dbus_string_init (&dest))
-+ return FALSE;
-+
-+ set_max_length (&dest, real->max_length);
-+
-+ if (!_dbus_string_copy_len (str, start, len, &dest, 0))
-+ {
-+ _dbus_string_free (&dest);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_steal_data (&dest, data_return))
-+ {
-+ _dbus_string_free (&dest);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&dest);
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/* Only have the function if we don't have the macro */
-+#ifndef _dbus_string_get_length
-+/**
-+ * Gets the length of a string (not including nul termination).
-+ *
-+ * @returns the length.
-+ */
-+int
-+_dbus_string_get_length (const DBusString *str)
-+{
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+
-+ return real->len;
-+}
-+#endif /* !_dbus_string_get_length */
-+
-+/**
-+ * Makes a string longer by the given number of bytes. Checks whether
-+ * adding additional_length to the current length would overflow an
-+ * integer, and checks for exceeding a string's max length.
-+ * The new bytes are not initialized, other than nul-terminating
-+ * the end of the string. The uninitialized bytes may contain
-+ * nul bytes or other junk.
-+ *
-+ * @param str a string
-+ * @param additional_length length to add to the string.
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_string_lengthen (DBusString *str,
-+ int additional_length)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (additional_length >= 0);
-+
-+ if (_DBUS_UNLIKELY (additional_length > real->max_length - real->len))
-+ return FALSE; /* would overflow */
-+
-+ return set_length (real,
-+ real->len + additional_length);
-+}
-+
-+/**
-+ * Makes a string shorter by the given number of bytes.
-+ *
-+ * @param str a string
-+ * @param length_to_remove length to remove from the string.
-+ */
-+void
-+_dbus_string_shorten (DBusString *str,
-+ int length_to_remove)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (length_to_remove >= 0);
-+ _dbus_assert (length_to_remove <= real->len);
-+
-+ set_length (real,
-+ real->len - length_to_remove);
-+}
-+
-+/**
-+ * Sets the length of a string. Can be used to truncate or lengthen
-+ * the string. If the string is lengthened, the function may fail and
-+ * return #FALSE. Newly-added bytes are not initialized, as with
-+ * _dbus_string_lengthen().
-+ *
-+ * @param str a string
-+ * @param length new length of the string.
-+ * @returns #FALSE on failure.
-+ */
-+dbus_bool_t
-+_dbus_string_set_length (DBusString *str,
-+ int length)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (length >= 0);
-+
-+ return set_length (real, length);
-+}
-+
-+static dbus_bool_t
-+align_insert_point_then_open_gap (DBusString *str,
-+ int *insert_at_p,
-+ int alignment,
-+ int gap_size)
-+{
-+ unsigned long new_len; /* ulong to avoid _DBUS_ALIGN_VALUE overflow */
-+ unsigned long gap_pos;
-+ int insert_at;
-+ int delta;
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (alignment >= 1);
-+ _dbus_assert (alignment <= 8); /* it has to be a bug if > 8 */
-+
-+ insert_at = *insert_at_p;
-+
-+ _dbus_assert (insert_at <= real->len);
-+
-+ gap_pos = _DBUS_ALIGN_VALUE (insert_at, alignment);
-+ new_len = real->len + (gap_pos - insert_at) + gap_size;
-+
-+ if (_DBUS_UNLIKELY (new_len > (unsigned long) real->max_length))
-+ return FALSE;
-+
-+ delta = new_len - real->len;
-+ _dbus_assert (delta >= 0);
-+
-+ if (delta == 0) /* only happens if gap_size == 0 and insert_at is aligned already */
-+ {
-+ _dbus_assert (((unsigned long) *insert_at_p) == gap_pos);
-+ return TRUE;
-+ }
-+
-+ if (_DBUS_UNLIKELY (!open_gap (new_len - real->len,
-+ real, insert_at)))
-+ return FALSE;
-+
-+ /* nul the padding if we had to add any padding */
-+ if (gap_size < delta)
-+ {
-+ memset (&real->str[insert_at], '\0',
-+ gap_pos - insert_at);
-+ }
-+
-+ *insert_at_p = gap_pos;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+align_length_then_lengthen (DBusString *str,
-+ int alignment,
-+ int then_lengthen_by)
-+{
-+ int insert_at;
-+
-+ insert_at = _dbus_string_get_length (str);
-+
-+ return align_insert_point_then_open_gap (str,
-+ &insert_at,
-+ alignment, then_lengthen_by);
-+}
-+
-+/**
-+ * Align the length of a string to a specific alignment (typically 4 or 8)
-+ * by appending nul bytes to the string.
-+ *
-+ * @param str a string
-+ * @param alignment the alignment
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_align_length (DBusString *str,
-+ int alignment)
-+{
-+ return align_length_then_lengthen (str, alignment, 0);
-+}
-+
-+/**
-+ * Preallocate extra_bytes such that a future lengthening of the
-+ * string by extra_bytes is guaranteed to succeed without an out of
-+ * memory error.
-+ *
-+ * @param str a string
-+ * @param extra_bytes bytes to alloc
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_alloc_space (DBusString *str,
-+ int extra_bytes)
-+{
-+ if (!_dbus_string_lengthen (str, extra_bytes))
-+ return FALSE;
-+ _dbus_string_shorten (str, extra_bytes);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+append (DBusRealString *real,
-+ const char *buffer,
-+ int buffer_len)
-+{
-+ if (buffer_len == 0)
-+ return TRUE;
-+
-+ if (!_dbus_string_lengthen ((DBusString*)real, buffer_len))
-+ return FALSE;
-+
-+ memcpy (real->str + (real->len - buffer_len),
-+ buffer,
-+ buffer_len);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Appends a nul-terminated C-style string to a DBusString.
-+ *
-+ * @param str the DBusString
-+ * @param buffer the nul-terminated characters to append
-+ * @returns #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_string_append (DBusString *str,
-+ const char *buffer)
-+{
-+ unsigned long buffer_len;
-+
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (buffer != NULL);
-+
-+ buffer_len = strlen (buffer);
-+ if (buffer_len > (unsigned long) real->max_length)
-+ return FALSE;
-+
-+ return append (real, buffer, buffer_len);
-+}
-+
-+/** assign 2 bytes from one string to another */
-+#define ASSIGN_2_OCTETS(p, octets) \
-+ *((dbus_uint16_t*)(p)) = *((dbus_uint16_t*)(octets));
-+
-+/** assign 4 bytes from one string to another */
-+#define ASSIGN_4_OCTETS(p, octets) \
-+ *((dbus_uint32_t*)(p)) = *((dbus_uint32_t*)(octets));
-+
-+#ifdef DBUS_HAVE_INT64
-+/** assign 8 bytes from one string to another */
-+#define ASSIGN_8_OCTETS(p, octets) \
-+ *((dbus_uint64_t*)(p)) = *((dbus_uint64_t*)(octets));
-+#else
-+/** assign 8 bytes from one string to another */
-+#define ASSIGN_8_OCTETS(p, octets) \
-+do { \
-+ unsigned char *b; \
-+ \
-+ b = p; \
-+ \
-+ *b++ = octets[0]; \
-+ *b++ = octets[1]; \
-+ *b++ = octets[2]; \
-+ *b++ = octets[3]; \
-+ *b++ = octets[4]; \
-+ *b++ = octets[5]; \
-+ *b++ = octets[6]; \
-+ *b++ = octets[7]; \
-+ _dbus_assert (b == p + 8); \
-+} while (0)
-+#endif /* DBUS_HAVE_INT64 */
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Appends 4 bytes aligned on a 4 byte boundary
-+ * with any alignment padding initialized to 0.
-+ *
-+ * @param str the DBusString
-+ * @param octets 4 bytes to append
-+ * @returns #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_string_append_4_aligned (DBusString *str,
-+ const unsigned char octets[4])
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ if (!align_length_then_lengthen (str, 4, 4))
-+ return FALSE;
-+
-+ ASSIGN_4_OCTETS (real->str + (real->len - 4), octets);
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Appends 8 bytes aligned on an 8 byte boundary
-+ * with any alignment padding initialized to 0.
-+ *
-+ * @param str the DBusString
-+ * @param octets 8 bytes to append
-+ * @returns #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_string_append_8_aligned (DBusString *str,
-+ const unsigned char octets[8])
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ if (!align_length_then_lengthen (str, 8, 8))
-+ return FALSE;
-+
-+ ASSIGN_8_OCTETS (real->str + (real->len - 8), octets);
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Inserts 2 bytes aligned on a 2 byte boundary
-+ * with any alignment padding initialized to 0.
-+ *
-+ * @param str the DBusString
-+ * @param insert_at where to insert
-+ * @param octets 2 bytes to insert
-+ * @returns #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_string_insert_2_aligned (DBusString *str,
-+ int insert_at,
-+ const unsigned char octets[4])
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ if (!align_insert_point_then_open_gap (str, &insert_at, 2, 2))
-+ return FALSE;
-+
-+ ASSIGN_2_OCTETS (real->str + insert_at, octets);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Inserts 4 bytes aligned on a 4 byte boundary
-+ * with any alignment padding initialized to 0.
-+ *
-+ * @param str the DBusString
-+ * @param insert_at where to insert
-+ * @param octets 4 bytes to insert
-+ * @returns #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_string_insert_4_aligned (DBusString *str,
-+ int insert_at,
-+ const unsigned char octets[4])
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ if (!align_insert_point_then_open_gap (str, &insert_at, 4, 4))
-+ return FALSE;
-+
-+ ASSIGN_4_OCTETS (real->str + insert_at, octets);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Inserts 8 bytes aligned on an 8 byte boundary
-+ * with any alignment padding initialized to 0.
-+ *
-+ * @param str the DBusString
-+ * @param insert_at where to insert
-+ * @param octets 8 bytes to insert
-+ * @returns #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_string_insert_8_aligned (DBusString *str,
-+ int insert_at,
-+ const unsigned char octets[8])
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ if (!align_insert_point_then_open_gap (str, &insert_at, 8, 8))
-+ return FALSE;
-+
-+ _dbus_assert (_DBUS_ALIGN_VALUE (insert_at, 8) == (unsigned) insert_at);
-+
-+ ASSIGN_8_OCTETS (real->str + insert_at, octets);
-+
-+ return TRUE;
-+}
-+
-+
-+/**
-+ * Inserts padding at *insert_at such to align it to the given
-+ * boundary. Initializes the padding to nul bytes. Sets *insert_at
-+ * to the aligned position.
-+ *
-+ * @param str the DBusString
-+ * @param insert_at location to be aligned
-+ * @param alignment alignment boundary (1, 2, 4, or 8)
-+ * @returns #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_string_insert_alignment (DBusString *str,
-+ int *insert_at,
-+ int alignment)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ if (!align_insert_point_then_open_gap (str, insert_at, alignment, 0))
-+ return FALSE;
-+
-+ _dbus_assert (_DBUS_ALIGN_VALUE (*insert_at, alignment) == (unsigned) *insert_at);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Appends a printf-style formatted string
-+ * to the #DBusString.
-+ *
-+ * @param str the string
-+ * @param format printf format
-+ * @param args variable argument list
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_append_printf_valist (DBusString *str,
-+ const char *format,
-+ va_list args)
-+{
-+ int len;
-+ char c;
-+ va_list args_copy;
-+
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ DBUS_VA_COPY (args_copy, args);
-+
-+ /* Measure the message length without terminating nul */
-+ len = vsnprintf (&c, 1, format, args);
-+
-+ if (!_dbus_string_lengthen (str, len))
-+ {
-+ /* don't leak the copy */
-+ va_end (args_copy);
-+ return FALSE;
-+ }
-+
-+ vsprintf ((char*) (real->str + (real->len - len)),
-+ format, args_copy);
-+
-+ va_end (args_copy);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Appends a printf-style formatted string
-+ * to the #DBusString.
-+ *
-+ * @param str the string
-+ * @param format printf format
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_append_printf (DBusString *str,
-+ const char *format,
-+ ...)
-+{
-+ va_list args;
-+ dbus_bool_t retval;
-+
-+ va_start (args, format);
-+ retval = _dbus_string_append_printf_valist (str, format, args);
-+ va_end (args);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Appends block of bytes with the given length to a DBusString.
-+ *
-+ * @param str the DBusString
-+ * @param buffer the bytes to append
-+ * @param len the number of bytes to append
-+ * @returns #FALSE if not enough memory.
-+ */
-+dbus_bool_t
-+_dbus_string_append_len (DBusString *str,
-+ const char *buffer,
-+ int len)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (buffer != NULL);
-+ _dbus_assert (len >= 0);
-+
-+ return append (real, buffer, len);
-+}
-+
-+/**
-+ * Appends a single byte to the string, returning #FALSE
-+ * if not enough memory.
-+ *
-+ * @param str the string
-+ * @param byte the byte to append
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_string_append_byte (DBusString *str,
-+ unsigned char byte)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ if (!set_length (real, real->len + 1))
-+ return FALSE;
-+
-+ real->str[real->len-1] = byte;
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Appends a single Unicode character, encoding the character
-+ * in UTF-8 format.
-+ *
-+ * @param str the string
-+ * @param ch the Unicode character
-+ */
-+dbus_bool_t
-+_dbus_string_append_unichar (DBusString *str,
-+ dbus_unichar_t ch)
-+{
-+ int len;
-+ int first;
-+ int i;
-+ unsigned char *out;
-+
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ /* this code is from GLib but is pretty standard I think */
-+
-+ len = 0;
-+
-+ if (ch < 0x80)
-+ {
-+ first = 0;
-+ len = 1;
-+ }
-+ else if (ch < 0x800)
-+ {
-+ first = 0xc0;
-+ len = 2;
-+ }
-+ else if (ch < 0x10000)
-+ {
-+ first = 0xe0;
-+ len = 3;
-+ }
-+ else if (ch < 0x200000)
-+ {
-+ first = 0xf0;
-+ len = 4;
-+ }
-+ else if (ch < 0x4000000)
-+ {
-+ first = 0xf8;
-+ len = 5;
-+ }
-+ else
-+ {
-+ first = 0xfc;
-+ len = 6;
-+ }
-+
-+ if (len > (real->max_length - real->len))
-+ return FALSE; /* real->len + len would overflow */
-+
-+ if (!set_length (real, real->len + len))
-+ return FALSE;
-+
-+ out = real->str + (real->len - len);
-+
-+ for (i = len - 1; i > 0; --i)
-+ {
-+ out[i] = (ch & 0x3f) | 0x80;
-+ ch >>= 6;
-+ }
-+ out[0] = ch | first;
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+static void
-+delete (DBusRealString *real,
-+ int start,
-+ int len)
-+{
-+ if (len == 0)
-+ return;
-+
-+ memmove (real->str + start, real->str + start + len, real->len - (start + len));
-+ real->len -= len;
-+ real->str[real->len] = '\0';
-+}
-+
-+/**
-+ * Deletes a segment of a DBusString with length len starting at
-+ * start. (Hint: to clear an entire string, setting length to 0
-+ * with _dbus_string_set_length() is easier.)
-+ *
-+ * @param str the DBusString
-+ * @param start where to start deleting
-+ * @param len the number of bytes to delete
-+ */
-+void
-+_dbus_string_delete (DBusString *str,
-+ int start,
-+ int len)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (len <= real->len - start);
-+
-+ delete (real, start, len);
-+}
-+
-+static dbus_bool_t
-+copy (DBusRealString *source,
-+ int start,
-+ int len,
-+ DBusRealString *dest,
-+ int insert_at)
-+{
-+ if (len == 0)
-+ return TRUE;
-+
-+ if (!open_gap (len, dest, insert_at))
-+ return FALSE;
-+
-+ memmove (dest->str + insert_at,
-+ source->str + start,
-+ len);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks assertions for two strings we're copying a segment between,
-+ * and declares real_source/real_dest variables.
-+ *
-+ * @param source the source string
-+ * @param start the starting offset
-+ * @param dest the dest string
-+ * @param insert_at where the copied segment is inserted
-+ */
-+#define DBUS_STRING_COPY_PREAMBLE(source, start, dest, insert_at) \
-+ DBusRealString *real_source = (DBusRealString*) source; \
-+ DBusRealString *real_dest = (DBusRealString*) dest; \
-+ _dbus_assert ((source) != (dest)); \
-+ DBUS_GENERIC_STRING_PREAMBLE (real_source); \
-+ DBUS_GENERIC_STRING_PREAMBLE (real_dest); \
-+ _dbus_assert (!real_dest->constant); \
-+ _dbus_assert (!real_dest->locked); \
-+ _dbus_assert ((start) >= 0); \
-+ _dbus_assert ((start) <= real_source->len); \
-+ _dbus_assert ((insert_at) >= 0); \
-+ _dbus_assert ((insert_at) <= real_dest->len)
-+
-+/**
-+ * Moves the end of one string into another string. Both strings
-+ * must be initialized, valid strings.
-+ *
-+ * @param source the source string
-+ * @param start where to chop off the source string
-+ * @param dest the destination string
-+ * @param insert_at where to move the chopped-off part of source string
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_string_move (DBusString *source,
-+ int start,
-+ DBusString *dest,
-+ int insert_at)
-+{
-+ DBusRealString *real_source = (DBusRealString*) source;
-+ _dbus_assert (start <= real_source->len);
-+
-+ return _dbus_string_move_len (source, start,
-+ real_source->len - start,
-+ dest, insert_at);
-+}
-+
-+/**
-+ * Like _dbus_string_move(), but does not delete the section
-+ * of the source string that's copied to the dest string.
-+ *
-+ * @param source the source string
-+ * @param start where to start copying the source string
-+ * @param dest the destination string
-+ * @param insert_at where to place the copied part of source string
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_string_copy (const DBusString *source,
-+ int start,
-+ DBusString *dest,
-+ int insert_at)
-+{
-+ DBUS_STRING_COPY_PREAMBLE (source, start, dest, insert_at);
-+
-+ return copy (real_source, start,
-+ real_source->len - start,
-+ real_dest,
-+ insert_at);
-+}
-+
-+/**
-+ * Like _dbus_string_move(), but can move a segment from
-+ * the middle of the source string.
-+ *
-+ * @todo this doesn't do anything with max_length field.
-+ * we should probably just kill the max_length field though.
-+ *
-+ * @param source the source string
-+ * @param start first byte of source string to move
-+ * @param len length of segment to move
-+ * @param dest the destination string
-+ * @param insert_at where to move the bytes from the source string
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_string_move_len (DBusString *source,
-+ int start,
-+ int len,
-+ DBusString *dest,
-+ int insert_at)
-+
-+{
-+ DBUS_STRING_COPY_PREAMBLE (source, start, dest, insert_at);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert ((start + len) <= real_source->len);
-+
-+
-+ if (len == 0)
-+ {
-+ return TRUE;
-+ }
-+ else if (start == 0 &&
-+ len == real_source->len &&
-+ real_dest->len == 0)
-+ {
-+ /* Short-circuit moving an entire existing string to an empty string
-+ * by just swapping the buffers.
-+ */
-+ /* we assume ->constant doesn't matter as you can't have
-+ * a constant string involved in a move.
-+ */
-+#define ASSIGN_DATA(a, b) do { \
-+ (a)->str = (b)->str; \
-+ (a)->len = (b)->len; \
-+ (a)->allocated = (b)->allocated; \
-+ (a)->align_offset = (b)->align_offset; \
-+ } while (0)
-+
-+ DBusRealString tmp;
-+
-+ ASSIGN_DATA (&tmp, real_source);
-+ ASSIGN_DATA (real_source, real_dest);
-+ ASSIGN_DATA (real_dest, &tmp);
-+
-+ return TRUE;
-+ }
-+ else
-+ {
-+ if (!copy (real_source, start, len,
-+ real_dest,
-+ insert_at))
-+ return FALSE;
-+
-+ delete (real_source, start,
-+ len);
-+
-+ return TRUE;
-+ }
-+}
-+
-+/**
-+ * Like _dbus_string_copy(), but can copy a segment from the middle of
-+ * the source string.
-+ *
-+ * @param source the source string
-+ * @param start where to start copying the source string
-+ * @param len length of segment to copy
-+ * @param dest the destination string
-+ * @param insert_at where to place the copied segment of source string
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_string_copy_len (const DBusString *source,
-+ int start,
-+ int len,
-+ DBusString *dest,
-+ int insert_at)
-+{
-+ DBUS_STRING_COPY_PREAMBLE (source, start, dest, insert_at);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= real_source->len);
-+ _dbus_assert (len <= real_source->len - start);
-+
-+ return copy (real_source, start, len,
-+ real_dest,
-+ insert_at);
-+}
-+
-+/**
-+ * Replaces a segment of dest string with a segment of source string.
-+ *
-+ * @todo optimize the case where the two lengths are the same, and
-+ * avoid memmoving the data in the trailing part of the string twice.
-+ *
-+ * @todo avoid inserting the source into dest, then deleting
-+ * the replaced chunk of dest (which creates a potentially large
-+ * intermediate string). Instead, extend the replaced chunk
-+ * of dest with padding to the same size as the source chunk,
-+ * then copy in the source bytes.
-+ *
-+ * @param source the source string
-+ * @param start where to start copying the source string
-+ * @param len length of segment to copy
-+ * @param dest the destination string
-+ * @param replace_at start of segment of dest string to replace
-+ * @param replace_len length of segment of dest string to replace
-+ * @returns #FALSE if not enough memory
-+ *
-+ */
-+dbus_bool_t
-+_dbus_string_replace_len (const DBusString *source,
-+ int start,
-+ int len,
-+ DBusString *dest,
-+ int replace_at,
-+ int replace_len)
-+{
-+ DBUS_STRING_COPY_PREAMBLE (source, start, dest, replace_at);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= real_source->len);
-+ _dbus_assert (len <= real_source->len - start);
-+ _dbus_assert (replace_at >= 0);
-+ _dbus_assert (replace_at <= real_dest->len);
-+ _dbus_assert (replace_len <= real_dest->len - replace_at);
-+
-+ if (!copy (real_source, start, len,
-+ real_dest, replace_at))
-+ return FALSE;
-+
-+ delete (real_dest, replace_at + len, replace_len);
-+
-+ return TRUE;
-+}
-+
-+/* Unicode macros and utf8_validate() from GLib Owen Taylor, Havoc
-+ * Pennington, and Tom Tromey are the authors and authorized relicense.
-+ */
-+
-+/** computes length and mask of a unicode character
-+ * @param Char the char
-+ * @param Mask the mask variable to assign to
-+ * @param Len the length variable to assign to
-+ */
-+#define UTF8_COMPUTE(Char, Mask, Len) \
-+ if (Char < 128) \
-+ { \
-+ Len = 1; \
-+ Mask = 0x7f; \
-+ } \
-+ else if ((Char & 0xe0) == 0xc0) \
-+ { \
-+ Len = 2; \
-+ Mask = 0x1f; \
-+ } \
-+ else if ((Char & 0xf0) == 0xe0) \
-+ { \
-+ Len = 3; \
-+ Mask = 0x0f; \
-+ } \
-+ else if ((Char & 0xf8) == 0xf0) \
-+ { \
-+ Len = 4; \
-+ Mask = 0x07; \
-+ } \
-+ else if ((Char & 0xfc) == 0xf8) \
-+ { \
-+ Len = 5; \
-+ Mask = 0x03; \
-+ } \
-+ else if ((Char & 0xfe) == 0xfc) \
-+ { \
-+ Len = 6; \
-+ Mask = 0x01; \
-+ } \
-+ else \
-+ { \
-+ Len = 0; \
-+ Mask = 0; \
-+ }
-+
-+/**
-+ * computes length of a unicode character in UTF-8
-+ * @param Char the char
-+ */
-+#define UTF8_LENGTH(Char) \
-+ ((Char) < 0x80 ? 1 : \
-+ ((Char) < 0x800 ? 2 : \
-+ ((Char) < 0x10000 ? 3 : \
-+ ((Char) < 0x200000 ? 4 : \
-+ ((Char) < 0x4000000 ? 5 : 6)))))
-+
-+/**
-+ * Gets a UTF-8 value.
-+ *
-+ * @param Result variable for extracted unicode char.
-+ * @param Chars the bytes to decode
-+ * @param Count counter variable
-+ * @param Mask mask for this char
-+ * @param Len length for this char in bytes
-+ */
-+#define UTF8_GET(Result, Chars, Count, Mask, Len) \
-+ (Result) = (Chars)[0] & (Mask); \
-+ for ((Count) = 1; (Count) < (Len); ++(Count)) \
-+ { \
-+ if (((Chars)[(Count)] & 0xc0) != 0x80) \
-+ { \
-+ (Result) = -1; \
-+ break; \
-+ } \
-+ (Result) <<= 6; \
-+ (Result) |= ((Chars)[(Count)] & 0x3f); \
-+ }
-+
-+/**
-+ * Check whether a unicode char is in a valid range.
-+ *
-+ * @param Char the character
-+ */
-+#define UNICODE_VALID(Char) \
-+ ((Char) < 0x110000 && \
-+ (((Char) & 0xFFFFF800) != 0xD800) && \
-+ ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \
-+ ((Char) & 0xFFFF) != 0xFFFF)
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Gets a unicode character from a UTF-8 string. Does no validation;
-+ * you must verify that the string is valid UTF-8 in advance and must
-+ * pass in the start of a character.
-+ *
-+ * @param str the string
-+ * @param start the start of the UTF-8 character.
-+ * @param ch_return location to return the character
-+ * @param end_return location to return the byte index of next character
-+ */
-+void
-+_dbus_string_get_unichar (const DBusString *str,
-+ int start,
-+ dbus_unichar_t *ch_return,
-+ int *end_return)
-+{
-+ int i, mask, len;
-+ dbus_unichar_t result;
-+ unsigned char c;
-+ unsigned char *p;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (start <= real->len);
-+
-+ if (ch_return)
-+ *ch_return = 0;
-+ if (end_return)
-+ *end_return = real->len;
-+
-+ mask = 0;
-+ p = real->str + start;
-+ c = *p;
-+
-+ UTF8_COMPUTE (c, mask, len);
-+ if (len == 0)
-+ return;
-+ UTF8_GET (result, p, i, mask, len);
-+
-+ if (result == (dbus_unichar_t)-1)
-+ return;
-+
-+ if (ch_return)
-+ *ch_return = result;
-+ if (end_return)
-+ *end_return = start + len;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Finds the given substring in the string,
-+ * returning #TRUE and filling in the byte index
-+ * where the substring was found, if it was found.
-+ * Returns #FALSE if the substring wasn't found.
-+ * Sets *start to the length of the string if the substring
-+ * is not found.
-+ *
-+ * @param str the string
-+ * @param start where to start looking
-+ * @param substr the substring
-+ * @param found return location for where it was found, or #NULL
-+ * @returns #TRUE if found
-+ */
-+dbus_bool_t
-+_dbus_string_find (const DBusString *str,
-+ int start,
-+ const char *substr,
-+ int *found)
-+{
-+ return _dbus_string_find_to (str, start,
-+ ((const DBusRealString*)str)->len,
-+ substr, found);
-+}
-+
-+/**
-+ * Finds the given substring in the string,
-+ * up to a certain position,
-+ * returning #TRUE and filling in the byte index
-+ * where the substring was found, if it was found.
-+ * Returns #FALSE if the substring wasn't found.
-+ * Sets *start to the length of the string if the substring
-+ * is not found.
-+ *
-+ * @param str the string
-+ * @param start where to start looking
-+ * @param end where to stop looking
-+ * @param substr the substring
-+ * @param found return location for where it was found, or #NULL
-+ * @returns #TRUE if found
-+ */
-+dbus_bool_t
-+_dbus_string_find_to (const DBusString *str,
-+ int start,
-+ int end,
-+ const char *substr,
-+ int *found)
-+{
-+ int i;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (substr != NULL);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (substr != NULL);
-+ _dbus_assert (end <= real->len);
-+ _dbus_assert (start <= end);
-+
-+ /* we always "find" an empty string */
-+ if (*substr == '\0')
-+ {
-+ if (found)
-+ *found = start;
-+ return TRUE;
-+ }
-+
-+ i = start;
-+ while (i < end)
-+ {
-+ if (real->str[i] == substr[0])
-+ {
-+ int j = i + 1;
-+
-+ while (j < end)
-+ {
-+ if (substr[j - i] == '\0')
-+ break;
-+ else if (real->str[j] != substr[j - i])
-+ break;
-+
-+ ++j;
-+ }
-+
-+ if (substr[j - i] == '\0')
-+ {
-+ if (found)
-+ *found = i;
-+ return TRUE;
-+ }
-+ }
-+
-+ ++i;
-+ }
-+
-+ if (found)
-+ *found = end;
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Finds a blank (space or tab) in the string. Returns #TRUE
-+ * if found, #FALSE otherwise. If a blank is not found sets
-+ * *found to the length of the string.
-+ *
-+ * @param str the string
-+ * @param start byte index to start looking
-+ * @param found place to store the location of the first blank
-+ * @returns #TRUE if a blank was found
-+ */
-+dbus_bool_t
-+_dbus_string_find_blank (const DBusString *str,
-+ int start,
-+ int *found)
-+{
-+ int i;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (start >= 0);
-+
-+ i = start;
-+ while (i < real->len)
-+ {
-+ if (real->str[i] == ' ' ||
-+ real->str[i] == '\t')
-+ {
-+ if (found)
-+ *found = i;
-+ return TRUE;
-+ }
-+
-+ ++i;
-+ }
-+
-+ if (found)
-+ *found = real->len;
-+
-+ return FALSE;
-+}
-+
-+/**
-+ * Skips blanks from start, storing the first non-blank in *end
-+ * (blank is space or tab).
-+ *
-+ * @param str the string
-+ * @param start where to start
-+ * @param end where to store the first non-blank byte index
-+ */
-+void
-+_dbus_string_skip_blank (const DBusString *str,
-+ int start,
-+ int *end)
-+{
-+ int i;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (start >= 0);
-+
-+ i = start;
-+ while (i < real->len)
-+ {
-+ if (!(real->str[i] == ' ' ||
-+ real->str[i] == '\t'))
-+ break;
-+
-+ ++i;
-+ }
-+
-+ _dbus_assert (i == real->len || !(real->str[i] == ' ' ||
-+ real->str[i] == '\t'));
-+
-+ if (end)
-+ *end = i;
-+}
-+
-+/**
-+ * Assigns a newline-terminated or \\r\\n-terminated line from the front
-+ * of the string to the given dest string. The dest string's previous
-+ * contents are deleted. If the source string contains no newline,
-+ * moves the entire source string to the dest string.
-+ *
-+ * @todo owen correctly notes that this is a stupid function (it was
-+ * written purely for test code,
-+ * e.g. dbus-message-builder.c). Probably should be enforced as test
-+ * code only with #ifdef DBUS_BUILD_TESTS
-+ *
-+ * @param source the source string
-+ * @param dest the destination string (contents are replaced)
-+ * @returns #FALSE if no memory, or source has length 0
-+ */
-+dbus_bool_t
-+_dbus_string_pop_line (DBusString *source,
-+ DBusString *dest)
-+{
-+ int eol;
-+ dbus_bool_t have_newline;
-+
-+ _dbus_string_set_length (dest, 0);
-+
-+ eol = 0;
-+ if (_dbus_string_find (source, 0, "\n", &eol))
-+ {
-+ have_newline = TRUE;
-+ eol += 1; /* include newline */
-+ }
-+ else
-+ {
-+ eol = _dbus_string_get_length (source);
-+ have_newline = FALSE;
-+ }
-+
-+ if (eol == 0)
-+ return FALSE; /* eof */
-+
-+ if (!_dbus_string_move_len (source, 0, eol,
-+ dest, 0))
-+ {
-+ return FALSE;
-+ }
-+
-+ /* dump the newline and the \r if we have one */
-+ if (have_newline)
-+ {
-+ dbus_bool_t have_cr;
-+
-+ _dbus_assert (_dbus_string_get_length (dest) > 0);
-+
-+ if (_dbus_string_get_length (dest) > 1 &&
-+ _dbus_string_get_byte (dest,
-+ _dbus_string_get_length (dest) - 2) == '\r')
-+ have_cr = TRUE;
-+ else
-+ have_cr = FALSE;
-+
-+ _dbus_string_set_length (dest,
-+ _dbus_string_get_length (dest) -
-+ (have_cr ? 2 : 1));
-+ }
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Deletes up to and including the first blank space
-+ * in the string.
-+ *
-+ * @param str the string
-+ */
-+void
-+_dbus_string_delete_first_word (DBusString *str)
-+{
-+ int i;
-+
-+ if (_dbus_string_find_blank (str, 0, &i))
-+ _dbus_string_skip_blank (str, i, &i);
-+
-+ _dbus_string_delete (str, 0, i);
-+}
-+#endif
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Deletes any leading blanks in the string
-+ *
-+ * @param str the string
-+ */
-+void
-+_dbus_string_delete_leading_blanks (DBusString *str)
-+{
-+ int i;
-+
-+ _dbus_string_skip_blank (str, 0, &i);
-+
-+ if (i > 0)
-+ _dbus_string_delete (str, 0, i);
-+}
-+#endif
-+
-+/**
-+ * Tests two DBusString for equality.
-+ *
-+ * @todo memcmp is probably faster
-+ *
-+ * @param a first string
-+ * @param b second string
-+ * @returns #TRUE if equal
-+ */
-+dbus_bool_t
-+_dbus_string_equal (const DBusString *a,
-+ const DBusString *b)
-+{
-+ const unsigned char *ap;
-+ const unsigned char *bp;
-+ const unsigned char *a_end;
-+ const DBusRealString *real_a = (const DBusRealString*) a;
-+ const DBusRealString *real_b = (const DBusRealString*) b;
-+ DBUS_GENERIC_STRING_PREAMBLE (real_a);
-+ DBUS_GENERIC_STRING_PREAMBLE (real_b);
-+
-+ if (real_a->len != real_b->len)
-+ return FALSE;
-+
-+ ap = real_a->str;
-+ bp = real_b->str;
-+ a_end = real_a->str + real_a->len;
-+ while (ap != a_end)
-+ {
-+ if (*ap != *bp)
-+ return FALSE;
-+
-+ ++ap;
-+ ++bp;
-+ }
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Tests two DBusString for equality up to the given length.
-+ * The strings may be shorter than the given length.
-+ *
-+ * @todo write a unit test
-+ *
-+ * @todo memcmp is probably faster
-+ *
-+ * @param a first string
-+ * @param b second string
-+ * @param len the maximum length to look at
-+ * @returns #TRUE if equal for the given number of bytes
-+ */
-+dbus_bool_t
-+_dbus_string_equal_len (const DBusString *a,
-+ const DBusString *b,
-+ int len)
-+{
-+ const unsigned char *ap;
-+ const unsigned char *bp;
-+ const unsigned char *a_end;
-+ const DBusRealString *real_a = (const DBusRealString*) a;
-+ const DBusRealString *real_b = (const DBusRealString*) b;
-+ DBUS_GENERIC_STRING_PREAMBLE (real_a);
-+ DBUS_GENERIC_STRING_PREAMBLE (real_b);
-+
-+ if (real_a->len != real_b->len &&
-+ (real_a->len < len || real_b->len < len))
-+ return FALSE;
-+
-+ ap = real_a->str;
-+ bp = real_b->str;
-+ a_end = real_a->str + MIN (real_a->len, len);
-+ while (ap != a_end)
-+ {
-+ if (*ap != *bp)
-+ return FALSE;
-+
-+ ++ap;
-+ ++bp;
-+ }
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Tests two sub-parts of two DBusString for equality. The specified
-+ * range of the first string must exist; the specified start position
-+ * of the second string must exist.
-+ *
-+ * @todo write a unit test
-+ *
-+ * @todo memcmp is probably faster
-+ *
-+ * @param a first string
-+ * @param a_start where to start substring in first string
-+ * @param a_len length of substring in first string
-+ * @param b second string
-+ * @param b_start where to start substring in second string
-+ * @returns #TRUE if the two substrings are equal
-+ */
-+dbus_bool_t
-+_dbus_string_equal_substring (const DBusString *a,
-+ int a_start,
-+ int a_len,
-+ const DBusString *b,
-+ int b_start)
-+{
-+ const unsigned char *ap;
-+ const unsigned char *bp;
-+ const unsigned char *a_end;
-+ const DBusRealString *real_a = (const DBusRealString*) a;
-+ const DBusRealString *real_b = (const DBusRealString*) b;
-+ DBUS_GENERIC_STRING_PREAMBLE (real_a);
-+ DBUS_GENERIC_STRING_PREAMBLE (real_b);
-+ _dbus_assert (a_start >= 0);
-+ _dbus_assert (a_len >= 0);
-+ _dbus_assert (a_start <= real_a->len);
-+ _dbus_assert (a_len <= real_a->len - a_start);
-+ _dbus_assert (b_start >= 0);
-+ _dbus_assert (b_start <= real_b->len);
-+
-+ if (a_len > real_b->len - b_start)
-+ return FALSE;
-+
-+ ap = real_a->str + a_start;
-+ bp = real_b->str + b_start;
-+ a_end = ap + a_len;
-+ while (ap != a_end)
-+ {
-+ if (*ap != *bp)
-+ return FALSE;
-+
-+ ++ap;
-+ ++bp;
-+ }
-+
-+ _dbus_assert (bp <= (real_b->str + real_b->len));
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks whether a string is equal to a C string.
-+ *
-+ * @param a the string
-+ * @param c_str the C string
-+ * @returns #TRUE if equal
-+ */
-+dbus_bool_t
-+_dbus_string_equal_c_str (const DBusString *a,
-+ const char *c_str)
-+{
-+ const unsigned char *ap;
-+ const unsigned char *bp;
-+ const unsigned char *a_end;
-+ const DBusRealString *real_a = (const DBusRealString*) a;
-+ DBUS_GENERIC_STRING_PREAMBLE (real_a);
-+ _dbus_assert (c_str != NULL);
-+
-+ ap = real_a->str;
-+ bp = (const unsigned char*) c_str;
-+ a_end = real_a->str + real_a->len;
-+ while (ap != a_end && *bp)
-+ {
-+ if (*ap != *bp)
-+ return FALSE;
-+
-+ ++ap;
-+ ++bp;
-+ }
-+
-+ if (ap != a_end || *bp)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Checks whether a string starts with the given C string.
-+ *
-+ * @param a the string
-+ * @param c_str the C string
-+ * @returns #TRUE if string starts with it
-+ */
-+dbus_bool_t
-+_dbus_string_starts_with_c_str (const DBusString *a,
-+ const char *c_str)
-+{
-+ const unsigned char *ap;
-+ const unsigned char *bp;
-+ const unsigned char *a_end;
-+ const DBusRealString *real_a = (const DBusRealString*) a;
-+ DBUS_GENERIC_STRING_PREAMBLE (real_a);
-+ _dbus_assert (c_str != NULL);
-+
-+ ap = real_a->str;
-+ bp = (const unsigned char*) c_str;
-+ a_end = real_a->str + real_a->len;
-+ while (ap != a_end && *bp)
-+ {
-+ if (*ap != *bp)
-+ return FALSE;
-+
-+ ++ap;
-+ ++bp;
-+ }
-+
-+ if (*bp == '\0')
-+ return TRUE;
-+ else
-+ return FALSE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Appends a two-character hex digit to a string, where the hex digit
-+ * has the value of the given byte.
-+ *
-+ * @param str the string
-+ * @param byte the byte
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_append_byte_as_hex (DBusString *str,
-+ int byte)
-+{
-+ const char hexdigits[16] = {
-+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-+ 'a', 'b', 'c', 'd', 'e', 'f'
-+ };
-+
-+ if (!_dbus_string_append_byte (str,
-+ hexdigits[(byte >> 4)]))
-+ return FALSE;
-+
-+ if (!_dbus_string_append_byte (str,
-+ hexdigits[(byte & 0x0f)]))
-+ {
-+ _dbus_string_set_length (str,
-+ _dbus_string_get_length (str) - 1);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Encodes a string in hex, the way MD5 and SHA-1 are usually
-+ * encoded. (Each byte is two hex digits.)
-+ *
-+ * @param source the string to encode
-+ * @param start byte index to start encoding
-+ * @param dest string where encoded data should be placed
-+ * @param insert_at where to place encoded data
-+ * @returns #TRUE if encoding was successful, #FALSE if no memory etc.
-+ */
-+dbus_bool_t
-+_dbus_string_hex_encode (const DBusString *source,
-+ int start,
-+ DBusString *dest,
-+ int insert_at)
-+{
-+ DBusString result;
-+ const unsigned char *p;
-+ const unsigned char *end;
-+ dbus_bool_t retval;
-+
-+ _dbus_assert (start <= _dbus_string_get_length (source));
-+
-+ if (!_dbus_string_init (&result))
-+ return FALSE;
-+
-+ retval = FALSE;
-+
-+ p = (const unsigned char*) _dbus_string_get_const_data (source);
-+ end = p + _dbus_string_get_length (source);
-+ p += start;
-+
-+ while (p != end)
-+ {
-+ if (!_dbus_string_append_byte_as_hex (&result, *p))
-+ goto out;
-+
-+ ++p;
-+ }
-+
-+ if (!_dbus_string_move (&result, 0, dest, insert_at))
-+ goto out;
-+
-+ retval = TRUE;
-+
-+ out:
-+ _dbus_string_free (&result);
-+ return retval;
-+}
-+
-+/**
-+ * Decodes a string from hex encoding.
-+ *
-+ * @param source the string to decode
-+ * @param start byte index to start decode
-+ * @param end_return return location of the end of the hex data, or #NULL
-+ * @param dest string where decoded data should be placed
-+ * @param insert_at where to place decoded data
-+ * @returns #TRUE if decoding was successful, #FALSE if no memory.
-+ */
-+dbus_bool_t
-+_dbus_string_hex_decode (const DBusString *source,
-+ int start,
-+ int *end_return,
-+ DBusString *dest,
-+ int insert_at)
-+{
-+ DBusString result;
-+ const unsigned char *p;
-+ const unsigned char *end;
-+ dbus_bool_t retval;
-+ dbus_bool_t high_bits;
-+
-+ _dbus_assert (start <= _dbus_string_get_length (source));
-+
-+ if (!_dbus_string_init (&result))
-+ return FALSE;
-+
-+ retval = FALSE;
-+
-+ high_bits = TRUE;
-+ p = (const unsigned char*) _dbus_string_get_const_data (source);
-+ end = p + _dbus_string_get_length (source);
-+ p += start;
-+
-+ while (p != end)
-+ {
-+ unsigned int val;
-+
-+ switch (*p)
-+ {
-+ case '0':
-+ val = 0;
-+ break;
-+ case '1':
-+ val = 1;
-+ break;
-+ case '2':
-+ val = 2;
-+ break;
-+ case '3':
-+ val = 3;
-+ break;
-+ case '4':
-+ val = 4;
-+ break;
-+ case '5':
-+ val = 5;
-+ break;
-+ case '6':
-+ val = 6;
-+ break;
-+ case '7':
-+ val = 7;
-+ break;
-+ case '8':
-+ val = 8;
-+ break;
-+ case '9':
-+ val = 9;
-+ break;
-+ case 'a':
-+ case 'A':
-+ val = 10;
-+ break;
-+ case 'b':
-+ case 'B':
-+ val = 11;
-+ break;
-+ case 'c':
-+ case 'C':
-+ val = 12;
-+ break;
-+ case 'd':
-+ case 'D':
-+ val = 13;
-+ break;
-+ case 'e':
-+ case 'E':
-+ val = 14;
-+ break;
-+ case 'f':
-+ case 'F':
-+ val = 15;
-+ break;
-+ default:
-+ goto done;
-+ }
-+
-+ if (high_bits)
-+ {
-+ if (!_dbus_string_append_byte (&result,
-+ val << 4))
-+ goto out;
-+ }
-+ else
-+ {
-+ int len;
-+ unsigned char b;
-+
-+ len = _dbus_string_get_length (&result);
-+
-+ b = _dbus_string_get_byte (&result, len - 1);
-+
-+ b |= val;
-+
-+ _dbus_string_set_byte (&result, len - 1, b);
-+ }
-+
-+ high_bits = !high_bits;
-+
-+ ++p;
-+ }
-+
-+ done:
-+ if (!_dbus_string_move (&result, 0, dest, insert_at))
-+ goto out;
-+
-+ if (end_return)
-+ *end_return = p - (const unsigned char*) _dbus_string_get_const_data (source);
-+
-+ retval = TRUE;
-+
-+ out:
-+ _dbus_string_free (&result);
-+ return retval;
-+}
-+
-+/**
-+ * Checks that the given range of the string is valid ASCII with no
-+ * nul bytes. If the given range is not entirely contained in the
-+ * string, returns #FALSE.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is all valid ASCII
-+ */
-+dbus_bool_t
-+_dbus_string_validate_ascii (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ const unsigned char *s;
-+ const unsigned char *end;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (len >= 0);
-+
-+ if (len > real->len - start)
-+ return FALSE;
-+
-+ s = real->str + start;
-+ end = s + len;
-+ while (s != end)
-+ {
-+ if (_DBUS_UNLIKELY (!_DBUS_ISASCII (*s)))
-+ return FALSE;
-+
-+ ++s;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks that the given range of the string is valid UTF-8. If the
-+ * given range is not entirely contained in the string, returns
-+ * #FALSE. If the string contains any nul bytes in the given range,
-+ * returns #FALSE. If the start and start+len are not on character
-+ * boundaries, returns #FALSE.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is all valid UTF-8
-+ */
-+dbus_bool_t
-+_dbus_string_validate_utf8 (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ const unsigned char *p;
-+ const unsigned char *end;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (start <= real->len);
-+ _dbus_assert (len >= 0);
-+
-+ /* we are doing _DBUS_UNLIKELY() here which might be
-+ * dubious in a generic library like GLib, but in D-BUS
-+ * we know we're validating messages and that it would
-+ * only be evil/broken apps that would have invalid
-+ * UTF-8. Also, this function seems to be a performance
-+ * bottleneck in profiles.
-+ */
-+
-+ if (_DBUS_UNLIKELY (len > real->len - start))
-+ return FALSE;
-+
-+ p = real->str + start;
-+ end = p + len;
-+
-+ while (p < end)
-+ {
-+ int i, mask, char_len;
-+ dbus_unichar_t result;
-+
-+ /* nul bytes considered invalid */
-+ if (*p == '\0')
-+ break;
-+
-+ /* Special-case ASCII; this makes us go a lot faster in
-+ * D-BUS profiles where we are typically validating
-+ * function names and such. We have to know that
-+ * all following checks will pass for ASCII though,
-+ * comments follow ...
-+ */
-+ if (*p < 128)
-+ {
-+ ++p;
-+ continue;
-+ }
-+
-+ UTF8_COMPUTE (*p, mask, char_len);
-+
-+ if (_DBUS_UNLIKELY (char_len == 0)) /* ASCII: char_len == 1 */
-+ break;
-+
-+ /* check that the expected number of bytes exists in the remaining length */
-+ if (_DBUS_UNLIKELY ((end - p) < char_len)) /* ASCII: p < end and char_len == 1 */
-+ break;
-+
-+ UTF8_GET (result, p, i, mask, char_len);
-+
-+ /* Check for overlong UTF-8 */
-+ if (_DBUS_UNLIKELY (UTF8_LENGTH (result) != char_len)) /* ASCII: UTF8_LENGTH == 1 */
-+ break;
-+#if 0
-+ /* The UNICODE_VALID check below will catch this */
-+ if (_DBUS_UNLIKELY (result == (dbus_unichar_t)-1)) /* ASCII: result = ascii value */
-+ break;
-+#endif
-+
-+ if (_DBUS_UNLIKELY (!UNICODE_VALID (result))) /* ASCII: always valid */
-+ break;
-+
-+ /* UNICODE_VALID should have caught it */
-+ _dbus_assert (result != (dbus_unichar_t)-1);
-+
-+ p += char_len;
-+ }
-+
-+ /* See that we covered the entire length if a length was
-+ * passed in
-+ */
-+ if (_DBUS_UNLIKELY (p != end))
-+ return FALSE;
-+ else
-+ return TRUE;
-+}
-+
-+/**
-+ * Checks that the given range of the string is all nul bytes. If the
-+ * given range is not entirely contained in the string, returns
-+ * #FALSE.
-+ *
-+ * @todo this is inconsistent with most of DBusString in that
-+ * it allows a start,len range that extends past the string end.
-+ *
-+ * @param str the string
-+ * @param start first byte index to check
-+ * @param len number of bytes to check
-+ * @returns #TRUE if the byte range exists and is all nul bytes
-+ */
-+dbus_bool_t
-+_dbus_string_validate_nul (const DBusString *str,
-+ int start,
-+ int len)
-+{
-+ const unsigned char *s;
-+ const unsigned char *end;
-+ DBUS_CONST_STRING_PREAMBLE (str);
-+ _dbus_assert (start >= 0);
-+ _dbus_assert (len >= 0);
-+ _dbus_assert (start <= real->len);
-+
-+ if (len > real->len - start)
-+ return FALSE;
-+
-+ s = real->str + start;
-+ end = s + len;
-+ while (s != end)
-+ {
-+ if (_DBUS_UNLIKELY (*s != '\0'))
-+ return FALSE;
-+ ++s;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Clears all allocated bytes in the string to zero.
-+ *
-+ * @param str the string
-+ */
-+void
-+_dbus_string_zero (DBusString *str)
-+{
-+ DBUS_STRING_PREAMBLE (str);
-+
-+ memset (real->str - real->align_offset, '\0', real->allocated);
-+}
-+/** @} */
-+
-+/* tests are in dbus-string-util.c */
-diff -Naur dbus-0.61.orig/dbus/dbus-string.h dbus-0.61/dbus/dbus-string.h
---- dbus-0.61.orig/dbus/dbus-string.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-string.h 2005-02-11 04:37:03.000000000 +0100
-@@ -0,0 +1,304 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-string.h String utility class (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_STRING_H
-+#define DBUS_STRING_H
-+
-+#include <config.h>
-+
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-sysdeps.h>
-+
-+#include <stdarg.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+/**
-+ * DBusString object
-+ */
-+struct DBusString
-+{
-+ const void *dummy1; /**< placeholder */
-+ int dummy2; /**< placeholder */
-+ int dummy3; /**< placeholder */
-+ int dummy4; /**< placeholder */
-+ unsigned int dummy5 : 1; /**< placeholder */
-+ unsigned int dummy6 : 1; /**< placeholder */
-+ unsigned int dummy7 : 1; /**< placeholder */
-+ unsigned int dummy8 : 3; /**< placeholder */
-+};
-+
-+#ifdef DBUS_DISABLE_ASSERT
-+/* Some simple inlining hacks; the current linker is not smart enough
-+ * to inline non-exported symbols across files in the library.
-+ * Note that these break type safety (due to the casts)
-+ */
-+#define _dbus_string_get_data(s) ((char*)(((DBusString*)(s))->dummy1))
-+#define _dbus_string_get_length(s) (((DBusString*)(s))->dummy2)
-+#define _dbus_string_set_byte(s, i, b) ((((unsigned char*)(((DBusString*)(s))->dummy1))[(i)]) = (unsigned char) (b))
-+#define _dbus_string_get_byte(s, i) (((const unsigned char*)(((DBusString*)(s))->dummy1))[(i)])
-+#define _dbus_string_get_const_data(s) ((const char*)(((DBusString*)(s))->dummy1))
-+#define _dbus_string_get_const_data_len(s,start,len) (((const char*)(((DBusString*)(s))->dummy1)) + (start))
-+#endif
-+
-+dbus_bool_t _dbus_string_init (DBusString *str);
-+void _dbus_string_init_const (DBusString *str,
-+ const char *value);
-+void _dbus_string_init_const_len (DBusString *str,
-+ const char *value,
-+ int len);
-+dbus_bool_t _dbus_string_init_preallocated (DBusString *str,
-+ int allocate_size);
-+void _dbus_string_free (DBusString *str);
-+void _dbus_string_lock (DBusString *str);
-+#ifndef _dbus_string_get_data
-+char* _dbus_string_get_data (DBusString *str);
-+#endif /* _dbus_string_get_data */
-+#ifndef _dbus_string_get_const_data
-+const char* _dbus_string_get_const_data (const DBusString *str);
-+#endif /* _dbus_string_get_const_data */
-+char* _dbus_string_get_data_len (DBusString *str,
-+ int start,
-+ int len);
-+#ifndef _dbus_string_get_const_data_len
-+const char* _dbus_string_get_const_data_len (const DBusString *str,
-+ int start,
-+ int len);
-+#endif
-+#ifndef _dbus_string_set_byte
-+void _dbus_string_set_byte (DBusString *str,
-+ int i,
-+ unsigned char byte);
-+#endif
-+#ifndef _dbus_string_get_byte
-+unsigned char _dbus_string_get_byte (const DBusString *str,
-+ int start);
-+#endif /* _dbus_string_get_byte */
-+dbus_bool_t _dbus_string_insert_bytes (DBusString *str,
-+ int i,
-+ int n_bytes,
-+ unsigned char byte);
-+dbus_bool_t _dbus_string_insert_byte (DBusString *str,
-+ int i,
-+ unsigned char byte);
-+dbus_bool_t _dbus_string_steal_data (DBusString *str,
-+ char **data_return);
-+dbus_bool_t _dbus_string_steal_data_len (DBusString *str,
-+ char **data_return,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_string_copy_data (const DBusString *str,
-+ char **data_return);
-+dbus_bool_t _dbus_string_copy_data_len (const DBusString *str,
-+ char **data_return,
-+ int start,
-+ int len);
-+void _dbus_string_copy_to_buffer (const DBusString *str,
-+ char *buffer,
-+ int len);
-+#ifndef _dbus_string_get_length
-+int _dbus_string_get_length (const DBusString *str);
-+#endif /* !_dbus_string_get_length */
-+
-+dbus_bool_t _dbus_string_lengthen (DBusString *str,
-+ int additional_length);
-+void _dbus_string_shorten (DBusString *str,
-+ int length_to_remove);
-+dbus_bool_t _dbus_string_set_length (DBusString *str,
-+ int length);
-+dbus_bool_t _dbus_string_align_length (DBusString *str,
-+ int alignment);
-+dbus_bool_t _dbus_string_alloc_space (DBusString *str,
-+ int extra_bytes);
-+dbus_bool_t _dbus_string_append (DBusString *str,
-+ const char *buffer);
-+dbus_bool_t _dbus_string_append_len (DBusString *str,
-+ const char *buffer,
-+ int len);
-+dbus_bool_t _dbus_string_append_int (DBusString *str,
-+ long value);
-+dbus_bool_t _dbus_string_append_uint (DBusString *str,
-+ unsigned long value);
-+dbus_bool_t _dbus_string_append_double (DBusString *str,
-+ double value);
-+dbus_bool_t _dbus_string_append_byte (DBusString *str,
-+ unsigned char byte);
-+dbus_bool_t _dbus_string_append_unichar (DBusString *str,
-+ dbus_unichar_t ch);
-+dbus_bool_t _dbus_string_append_4_aligned (DBusString *str,
-+ const unsigned char octets[4]);
-+dbus_bool_t _dbus_string_append_8_aligned (DBusString *str,
-+ const unsigned char octets[8]);
-+dbus_bool_t _dbus_string_append_printf (DBusString *str,
-+ const char *format,
-+ ...) _DBUS_GNUC_PRINTF (2, 3);
-+dbus_bool_t _dbus_string_append_printf_valist (DBusString *str,
-+ const char *format,
-+ va_list args);
-+dbus_bool_t _dbus_string_insert_2_aligned (DBusString *str,
-+ int insert_at,
-+ const unsigned char octets[2]);
-+dbus_bool_t _dbus_string_insert_4_aligned (DBusString *str,
-+ int insert_at,
-+ const unsigned char octets[4]);
-+dbus_bool_t _dbus_string_insert_8_aligned (DBusString *str,
-+ int insert_at,
-+ const unsigned char octets[8]);
-+dbus_bool_t _dbus_string_insert_alignment (DBusString *str,
-+ int *insert_at,
-+ int alignment);
-+void _dbus_string_delete (DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_string_move (DBusString *source,
-+ int start,
-+ DBusString *dest,
-+ int insert_at);
-+dbus_bool_t _dbus_string_copy (const DBusString *source,
-+ int start,
-+ DBusString *dest,
-+ int insert_at);
-+dbus_bool_t _dbus_string_move_len (DBusString *source,
-+ int start,
-+ int len,
-+ DBusString *dest,
-+ int insert_at);
-+dbus_bool_t _dbus_string_copy_len (const DBusString *source,
-+ int start,
-+ int len,
-+ DBusString *dest,
-+ int insert_at);
-+dbus_bool_t _dbus_string_replace_len (const DBusString *source,
-+ int start,
-+ int len,
-+ DBusString *dest,
-+ int replace_at,
-+ int replace_len);
-+void _dbus_string_get_unichar (const DBusString *str,
-+ int start,
-+ dbus_unichar_t *ch_return,
-+ int *end_return);
-+dbus_bool_t _dbus_string_parse_int (const DBusString *str,
-+ int start,
-+ long *value_return,
-+ int *end_return);
-+dbus_bool_t _dbus_string_parse_uint (const DBusString *str,
-+ int start,
-+ unsigned long *value_return,
-+ int *end_return);
-+dbus_bool_t _dbus_string_parse_double (const DBusString *str,
-+ int start,
-+ double *value,
-+ int *end_return);
-+dbus_bool_t _dbus_string_find (const DBusString *str,
-+ int start,
-+ const char *substr,
-+ int *found);
-+dbus_bool_t _dbus_string_find_to (const DBusString *str,
-+ int start,
-+ int end,
-+ const char *substr,
-+ int *found);
-+dbus_bool_t _dbus_string_find_byte_backward (const DBusString *str,
-+ int start,
-+ unsigned char byte,
-+ int *found);
-+dbus_bool_t _dbus_string_find_blank (const DBusString *str,
-+ int start,
-+ int *found);
-+void _dbus_string_skip_blank (const DBusString *str,
-+ int start,
-+ int *end);
-+void _dbus_string_skip_white (const DBusString *str,
-+ int start,
-+ int *end);
-+dbus_bool_t _dbus_string_equal (const DBusString *a,
-+ const DBusString *b);
-+dbus_bool_t _dbus_string_equal_c_str (const DBusString *a,
-+ const char *c_str);
-+dbus_bool_t _dbus_string_equal_len (const DBusString *a,
-+ const DBusString *b,
-+ int len);
-+dbus_bool_t _dbus_string_equal_substring (const DBusString *a,
-+ int a_start,
-+ int a_len,
-+ const DBusString *b,
-+ int b_start);
-+dbus_bool_t _dbus_string_starts_with_c_str (const DBusString *a,
-+ const char *c_str);
-+dbus_bool_t _dbus_string_ends_with_c_str (const DBusString *a,
-+ const char *c_str);
-+dbus_bool_t _dbus_string_pop_line (DBusString *source,
-+ DBusString *dest);
-+void _dbus_string_delete_first_word (DBusString *str);
-+void _dbus_string_delete_leading_blanks (DBusString *str);
-+dbus_bool_t _dbus_string_append_byte_as_hex (DBusString *str,
-+ int byte);
-+dbus_bool_t _dbus_string_hex_encode (const DBusString *source,
-+ int start,
-+ DBusString *dest,
-+ int insert_at);
-+dbus_bool_t _dbus_string_hex_decode (const DBusString *source,
-+ int start,
-+ int *end_return,
-+ DBusString *dest,
-+ int insert_at);
-+dbus_bool_t _dbus_string_validate_ascii (const DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_string_validate_utf8 (const DBusString *str,
-+ int start,
-+ int len);
-+dbus_bool_t _dbus_string_validate_nul (const DBusString *str,
-+ int start,
-+ int len);
-+void _dbus_string_zero (DBusString *str);
-+
-+
-+/**
-+ * We allocate 1 byte for nul termination, plus 7 bytes for possible
-+ * align_offset, so we always need 8 bytes on top of the string's
-+ * length to be in the allocated block.
-+ */
-+#define _DBUS_STRING_ALLOCATION_PADDING 8
-+
-+/**
-+ * Defines a static const variable with type #DBusString called "name"
-+ * containing the given string literal.
-+ *
-+ * @param name the name of the variable
-+ * @param str the string value
-+ */
-+#define _DBUS_STRING_DEFINE_STATIC(name, str) \
-+ static const char _dbus_static_string_##name[] = str; \
-+ static const DBusString name = { _dbus_static_string_##name, \
-+ sizeof(_dbus_static_string_##name), \
-+ sizeof(_dbus_static_string_##name) + \
-+ _DBUS_STRING_ALLOCATION_PADDING, \
-+ sizeof(_dbus_static_string_##name), \
-+ TRUE, TRUE, FALSE, 0 }
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_STRING_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-sysdeps-util.c dbus-0.61/dbus/dbus-sysdeps-util.c
---- dbus-0.61.orig/dbus/dbus-sysdeps-util.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-sysdeps-util.c 2006-02-24 16:46:45.000000000 +0100
-@@ -0,0 +1,860 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-sysdeps-util.c Would be in dbus-sysdeps.c, but not used in libdbus
-+ *
-+ * Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-sysdeps.h"
-+#include "dbus-internals.h"
-+#include "dbus-protocol.h"
-+#include "dbus-string.h"
-+#define DBUS_USERDB_INCLUDES_PRIVATE 1
-+#include "dbus-userdb.h"
-+#include "dbus-test.h"
-+
-+#include <sys/types.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <signal.h>
-+#include <unistd.h>
-+#include <stdio.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <sys/stat.h>
-+#include <grp.h>
-+#include <sys/socket.h>
-+#include <dirent.h>
-+#include <sys/un.h>
-+
-+#ifndef O_BINARY
-+#define O_BINARY 0
-+#endif
-+
-+/**
-+ * @addtogroup DBusInternalsUtils
-+ * @{
-+ */
-+
-+/**
-+ * Does the chdir, fork, setsid, etc. to become a daemon process.
-+ *
-+ * @param pidfile #NULL, or pidfile to create
-+ * @param print_pid_fd file descriptor to print daemon's pid to, or -1 for none
-+ * @param error return location for errors
-+ * @returns #FALSE on failure
-+ */
-+dbus_bool_t
-+_dbus_become_daemon (const DBusString *pidfile,
-+ int print_pid_fd,
-+ DBusError *error)
-+{
-+ const char *s;
-+ pid_t child_pid;
-+ int dev_null_fd;
-+
-+ _dbus_verbose ("Becoming a daemon...\n");
-+
-+ _dbus_verbose ("chdir to /\n");
-+ if (chdir ("/") < 0)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Could not chdir() to root directory");
-+ return FALSE;
-+ }
-+
-+ _dbus_verbose ("forking...\n");
-+ switch ((child_pid = fork ()))
-+ {
-+ case -1:
-+ _dbus_verbose ("fork failed\n");
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to fork daemon: %s", _dbus_strerror (errno));
-+ return FALSE;
-+ break;
-+
-+ case 0:
-+ _dbus_verbose ("in child, closing std file descriptors\n");
-+
-+ /* silently ignore failures here, if someone
-+ * doesn't have /dev/null we may as well try
-+ * to continue anyhow
-+ */
-+
-+ dev_null_fd = open ("/dev/null", O_RDWR);
-+ if (dev_null_fd >= 0)
-+ {
-+ dup2 (dev_null_fd, 0);
-+ dup2 (dev_null_fd, 1);
-+
-+ s = _dbus_getenv ("DBUS_DEBUG_OUTPUT");
-+ if (s == NULL || *s == '\0')
-+ dup2 (dev_null_fd, 2);
-+ else
-+ _dbus_verbose ("keeping stderr open due to DBUS_DEBUG_OUTPUT\n");
-+ }
-+
-+ /* Get a predictable umask */
-+ _dbus_verbose ("setting umask\n");
-+ umask (022);
-+ break;
-+
-+ default:
-+ if (pidfile)
-+ {
-+ _dbus_verbose ("parent writing pid file\n");
-+ if (!_dbus_write_pid_file (pidfile,
-+ child_pid,
-+ error))
-+ {
-+ _dbus_verbose ("pid file write failed, killing child\n");
-+ kill (child_pid, SIGTERM);
-+ return FALSE;
-+ }
-+ }
-+
-+ /* Write PID if requested */
-+ if (print_pid_fd >= 0)
-+ {
-+ DBusString pid;
-+ int bytes;
-+
-+ if (!_dbus_string_init (&pid))
-+ {
-+ _DBUS_SET_OOM (error);
-+ kill (child_pid, SIGTERM);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append_int (&pid, child_pid) ||
-+ !_dbus_string_append (&pid, "\n"))
-+ {
-+ _dbus_string_free (&pid);
-+ _DBUS_SET_OOM (error);
-+ kill (child_pid, SIGTERM);
-+ return FALSE;
-+ }
-+
-+ bytes = _dbus_string_get_length (&pid);
-+ if (_dbus_write (print_pid_fd, &pid, 0, bytes) != bytes)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Printing message bus PID: %s\n",
-+ _dbus_strerror (errno));
-+ _dbus_string_free (&pid);
-+ kill (child_pid, SIGTERM);
-+ return FALSE;
-+ }
-+
-+ _dbus_string_free (&pid);
-+ }
-+ _dbus_verbose ("parent exiting\n");
-+ _exit (0);
-+ break;
-+ }
-+
-+ _dbus_verbose ("calling setsid()\n");
-+ if (setsid () == -1)
-+ _dbus_assert_not_reached ("setsid() failed");
-+
-+ return TRUE;
-+}
-+
-+
-+/**
-+ * Creates a file containing the process ID.
-+ *
-+ * @param filename the filename to write to
-+ * @param pid our process ID
-+ * @param error return location for errors
-+ * @returns #FALSE on failure
-+ */
-+dbus_bool_t
-+_dbus_write_pid_file (const DBusString *filename,
-+ unsigned long pid,
-+ DBusError *error)
-+{
-+ const char *cfilename;
-+ int fd;
-+ FILE *f;
-+
-+ cfilename = _dbus_string_get_const_data (filename);
-+
-+ fd = open (cfilename, O_WRONLY|O_CREAT|O_EXCL|O_BINARY, 0644);
-+
-+ if (fd < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to open \"%s\": %s", cfilename,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ if ((f = fdopen (fd, "w")) == NULL)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to fdopen fd %d: %s", fd, _dbus_strerror (errno));
-+ close (fd);
-+ return FALSE;
-+ }
-+
-+ if (fprintf (f, "%lu\n", pid) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to write to \"%s\": %s", cfilename,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ if (fclose (f) == EOF)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to close \"%s\": %s", cfilename,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+
-+/**
-+ * Changes the user and group the bus is running as.
-+ *
-+ * @param uid the new user ID
-+ * @param gid the new group ID
-+ * @param error return location for errors
-+ * @returns #FALSE on failure
-+ */
-+dbus_bool_t
-+_dbus_change_identity (dbus_uid_t uid,
-+ dbus_gid_t gid,
-+ DBusError *error)
-+{
-+ /* setgroups() only works if we are a privileged process,
-+ * so we don't return error on failure; the only possible
-+ * failure is that we don't have perms to do it.
-+ * FIXME not sure this is right, maybe if setuid()
-+ * is going to work then setgroups() should also work.
-+ */
-+ if (setgroups (0, NULL) < 0)
-+ _dbus_warn ("Failed to drop supplementary groups: %s\n",
-+ _dbus_strerror (errno));
-+
-+ /* Set GID first, or the setuid may remove our permission
-+ * to change the GID
-+ */
-+ if (setgid (gid) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to set GID to %lu: %s", gid,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ if (setuid (uid) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to set UID to %lu: %s", uid,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/** Installs a UNIX signal handler
-+ *
-+ * @param sig the signal to handle
-+ * @param handler the handler
-+ */
-+void
-+_dbus_set_signal_handler (int sig,
-+ DBusSignalHandler handler)
-+{
-+ struct sigaction act;
-+ sigset_t empty_mask;
-+
-+ sigemptyset (&empty_mask);
-+ act.sa_handler = handler;
-+ act.sa_mask = empty_mask;
-+ act.sa_flags = 0;
-+ sigaction (sig, &act, 0);
-+}
-+
-+
-+/**
-+ * Removes a directory; Directory must be empty
-+ *
-+ * @param filename directory filename
-+ * @param error initialized error object
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_delete_directory (const DBusString *filename,
-+ DBusError *error)
-+{
-+ const char *filename_c;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ filename_c = _dbus_string_get_const_data (filename);
-+
-+ if (rmdir (filename_c) != 0)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Failed to remove directory %s: %s\n",
-+ filename_c, _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/** Checks if a file exists
-+*
-+* @param file full path to the file
-+* @returns #TRUE if file exists
-+*/
-+dbus_bool_t
-+_dbus_file_exists (const char *file)
-+{
-+ return (access (file, F_OK) == 0);
-+}
-+
-+/** Checks if user is at the console
-+*
-+* @param username user to check
-+* @param error return location for errors
-+* @returns #TRUE is the user is at the consolei and there are no errors
-+*/
-+dbus_bool_t
-+_dbus_user_at_console (const char *username,
-+ DBusError *error)
-+{
-+
-+ DBusString f;
-+ dbus_bool_t result;
-+
-+ result = FALSE;
-+ if (!_dbus_string_init (&f))
-+ {
-+ _DBUS_SET_OOM (error);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append (&f, DBUS_CONSOLE_AUTH_DIR))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+
-+ if (!_dbus_string_append (&f, username))
-+ {
-+ _DBUS_SET_OOM (error);
-+ goto out;
-+ }
-+
-+ result = _dbus_file_exists (_dbus_string_get_const_data (&f));
-+
-+ out:
-+ _dbus_string_free (&f);
-+
-+ return result;
-+}
-+
-+
-+/**
-+ * Checks whether the filename is an absolute path
-+ *
-+ * @param filename the filename
-+ * @returns #TRUE if an absolute path
-+ */
-+dbus_bool_t
-+_dbus_path_is_absolute (const DBusString *filename)
-+{
-+ if (_dbus_string_get_length (filename) > 0)
-+ return _dbus_string_get_byte (filename, 0) == '/';
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * stat() wrapper.
-+ *
-+ * @param filename the filename to stat
-+ * @param statbuf the stat info to fill in
-+ * @param error return location for error
-+ * @returns #FALSE if error was set
-+ */
-+dbus_bool_t
-+_dbus_stat (const DBusString *filename,
-+ DBusStat *statbuf,
-+ DBusError *error)
-+{
-+ const char *filename_c;
-+ struct stat sb;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ filename_c = _dbus_string_get_const_data (filename);
-+
-+ if (stat (filename_c, &sb) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "%s", _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ statbuf->mode = sb.st_mode;
-+ statbuf->nlink = sb.st_nlink;
-+ statbuf->uid = sb.st_uid;
-+ statbuf->gid = sb.st_gid;
-+ statbuf->size = sb.st_size;
-+ statbuf->atime = sb.st_atime;
-+ statbuf->mtime = sb.st_mtime;
-+ statbuf->ctime = sb.st_ctime;
-+
-+ return TRUE;
-+}
-+
-+
-+/**
-+ * Internals of directory iterator
-+ */
-+struct DBusDirIter
-+{
-+ DIR *d; /**< The DIR* from opendir() */
-+
-+};
-+
-+/**
-+ * Open a directory to iterate over.
-+ *
-+ * @param filename the directory name
-+ * @param error exception return object or #NULL
-+ * @returns new iterator, or #NULL on error
-+ */
-+DBusDirIter*
-+_dbus_directory_open (const DBusString *filename,
-+ DBusError *error)
-+{
-+ DIR *d;
-+ DBusDirIter *iter;
-+ const char *filename_c;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ filename_c = _dbus_string_get_const_data (filename);
-+
-+ d = opendir (filename_c);
-+ if (d == NULL)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to read directory \"%s\": %s",
-+ filename_c,
-+ _dbus_strerror (errno));
-+ return NULL;
-+ }
-+ iter = dbus_new0 (DBusDirIter, 1);
-+ if (iter == NULL)
-+ {
-+ closedir (d);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY,
-+ "Could not allocate memory for directory iterator");
-+ return NULL;
-+ }
-+
-+ iter->d = d;
-+
-+ return iter;
-+}
-+
-+/**
-+ * Get next file in the directory. Will not return "." or ".." on
-+ * UNIX. If an error occurs, the contents of "filename" are
-+ * undefined. The error is never set if the function succeeds.
-+ *
-+ * @todo for thread safety, I think we have to use
-+ * readdir_r(). (GLib has the same issue, should file a bug.)
-+ *
-+ * @param iter the iterator
-+ * @param filename string to be set to the next file in the dir
-+ * @param error return location for error
-+ * @returns #TRUE if filename was filled in with a new filename
-+ */
-+dbus_bool_t
-+_dbus_directory_get_next_file (DBusDirIter *iter,
-+ DBusString *filename,
-+ DBusError *error)
-+{
-+ struct dirent *ent;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ again:
-+ errno = 0;
-+ ent = readdir (iter->d);
-+ if (ent == NULL)
-+ {
-+ if (errno != 0)
-+ dbus_set_error (error,
-+ _dbus_error_from_errno (errno),
-+ "%s", _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+ else if (ent->d_name[0] == '.' &&
-+ (ent->d_name[1] == '\0' ||
-+ (ent->d_name[1] == '.' && ent->d_name[2] == '\0')))
-+ goto again;
-+ else
-+ {
-+ _dbus_string_set_length (filename, 0);
-+ if (!_dbus_string_append (filename, ent->d_name))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY,
-+ "No memory to read directory entry");
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+ }
-+}
-+
-+/**
-+ * Closes a directory iteration.
-+ */
-+void
-+_dbus_directory_close (DBusDirIter *iter)
-+{
-+ closedir (iter->d);
-+ dbus_free (iter);
-+}
-+
-+static dbus_bool_t
-+fill_user_info_from_group (struct group *g,
-+ DBusGroupInfo *info,
-+ DBusError *error)
-+{
-+ _dbus_assert (g->gr_name != NULL);
-+
-+ info->gid = g->gr_gid;
-+ info->groupname = _dbus_strdup (g->gr_name);
-+
-+ /* info->members = dbus_strdupv (g->gr_mem) */
-+
-+ if (info->groupname == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+fill_group_info (DBusGroupInfo *info,
-+ dbus_gid_t gid,
-+ const DBusString *groupname,
-+ DBusError *error)
-+{
-+ const char *group_c_str;
-+
-+ _dbus_assert (groupname != NULL || gid != DBUS_GID_UNSET);
-+ _dbus_assert (groupname == NULL || gid == DBUS_GID_UNSET);
-+
-+ if (groupname)
-+ group_c_str = _dbus_string_get_const_data (groupname);
-+ else
-+ group_c_str = NULL;
-+
-+ /* For now assuming that the getgrnam() and getgrgid() flavors
-+ * always correspond to the pwnam flavors, if not we have
-+ * to add more configure checks.
-+ */
-+
-+#if defined (HAVE_POSIX_GETPWNAM_R) || defined (HAVE_NONPOSIX_GETPWNAM_R)
-+ {
-+ struct group *g;
-+ int result;
-+ char buf[1024];
-+ struct group g_str;
-+
-+ g = NULL;
-+#ifdef HAVE_POSIX_GETPWNAM_R
-+
-+ if (group_c_str)
-+ result = getgrnam_r (group_c_str, &g_str, buf, sizeof (buf),
-+ &g);
-+ else
-+ result = getgrgid_r (gid, &g_str, buf, sizeof (buf),
-+ &g);
-+#else
-+ g = getgrnam_r (group_c_str, &g_str, buf, sizeof (buf));
-+ result = 0;
-+#endif /* !HAVE_POSIX_GETPWNAM_R */
-+ if (result == 0 && g == &g_str)
-+ {
-+ return fill_user_info_from_group (g, info, error);
-+ }
-+ else
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Group %s unknown or failed to look it up\n",
-+ group_c_str ? group_c_str : "???");
-+ return FALSE;
-+ }
-+ }
-+#else /* ! HAVE_GETPWNAM_R */
-+ {
-+ /* I guess we're screwed on thread safety here */
-+ struct group *g;
-+
-+ g = getgrnam (group_c_str);
-+
-+ if (g != NULL)
-+ {
-+ return fill_user_info_from_group (g, info, error);
-+ }
-+ else
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Group %s unknown or failed to look it up\n",
-+ group_c_str ? group_c_str : "???");
-+ return FALSE;
-+ }
-+ }
-+#endif /* ! HAVE_GETPWNAM_R */
-+}
-+
-+/**
-+ * Initializes the given DBusGroupInfo struct
-+ * with information about the given group name.
-+ *
-+ * @param info the group info struct
-+ * @param groupname name of group
-+ * @param error the error return
-+ * @returns #FALSE if error is set
-+ */
-+dbus_bool_t
-+_dbus_group_info_fill (DBusGroupInfo *info,
-+ const DBusString *groupname,
-+ DBusError *error)
-+{
-+ return fill_group_info (info, DBUS_GID_UNSET,
-+ groupname, error);
-+
-+}
-+
-+/**
-+ * Initializes the given DBusGroupInfo struct
-+ * with information about the given group ID.
-+ *
-+ * @param info the group info struct
-+ * @param gid group ID
-+ * @param error the error return
-+ * @returns #FALSE if error is set
-+ */
-+dbus_bool_t
-+_dbus_group_info_fill_gid (DBusGroupInfo *info,
-+ dbus_gid_t gid,
-+ DBusError *error)
-+{
-+ return fill_group_info (info, gid, NULL, error);
-+}
-+
-+/** @} */ /* End of DBusInternalsUtils functions */
-+
-+/**
-+ * @addtogroup DBusString
-+ *
-+ * @{
-+ */
-+/**
-+ * Get the directory name from a complete filename
-+ * @param filename the filename
-+ * @param dirname string to append directory name to
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_string_get_dirname (const DBusString *filename,
-+ DBusString *dirname)
-+{
-+ int sep;
-+
-+ _dbus_assert (filename != dirname);
-+ _dbus_assert (filename != NULL);
-+ _dbus_assert (dirname != NULL);
-+
-+ /* Ignore any separators on the end */
-+ sep = _dbus_string_get_length (filename);
-+ if (sep == 0)
-+ return _dbus_string_append (dirname, "."); /* empty string passed in */
-+
-+ while (sep > 0 && _dbus_string_get_byte (filename, sep - 1) == '/')
-+ --sep;
-+
-+ _dbus_assert (sep >= 0);
-+
-+ if (sep == 0)
-+ return _dbus_string_append (dirname, "/");
-+
-+ /* Now find the previous separator */
-+ _dbus_string_find_byte_backward (filename, sep, '/', &sep);
-+ if (sep < 0)
-+ return _dbus_string_append (dirname, ".");
-+
-+ /* skip multiple separators */
-+ while (sep > 0 && _dbus_string_get_byte (filename, sep - 1) == '/')
-+ --sep;
-+
-+ _dbus_assert (sep >= 0);
-+
-+ if (sep == 0 &&
-+ _dbus_string_get_byte (filename, 0) == '/')
-+ return _dbus_string_append (dirname, "/");
-+ else
-+ return _dbus_string_copy_len (filename, 0, sep - 0,
-+ dirname, _dbus_string_get_length (dirname));
-+}
-+/** @} */ /* DBusString stuff */
-+
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include <stdlib.h>
-+static void
-+check_dirname (const char *filename,
-+ const char *dirname)
-+{
-+ DBusString f, d;
-+
-+ _dbus_string_init_const (&f, filename);
-+
-+ if (!_dbus_string_init (&d))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_get_dirname (&f, &d))
-+ _dbus_assert_not_reached ("no memory");
-+
-+ if (!_dbus_string_equal_c_str (&d, dirname))
-+ {
-+ _dbus_warn ("For filename \"%s\" got dirname \"%s\" and expected \"%s\"\n",
-+ filename,
-+ _dbus_string_get_const_data (&d),
-+ dirname);
-+ exit (1);
-+ }
-+
-+ _dbus_string_free (&d);
-+}
-+
-+static void
-+check_path_absolute (const char *path,
-+ dbus_bool_t expected)
-+{
-+ DBusString p;
-+
-+ _dbus_string_init_const (&p, path);
-+
-+ if (_dbus_path_is_absolute (&p) != expected)
-+ {
-+ _dbus_warn ("For path \"%s\" expected absolute = %d got %d\n",
-+ path, expected, _dbus_path_is_absolute (&p));
-+ exit (1);
-+ }
-+}
-+
-+/**
-+ * Unit test for dbus-sysdeps.c.
-+ *
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_sysdeps_test (void)
-+{
-+ DBusString str;
-+ double val;
-+ int pos;
-+
-+ check_dirname ("foo", ".");
-+ check_dirname ("foo/bar", "foo");
-+ check_dirname ("foo//bar", "foo");
-+ check_dirname ("foo///bar", "foo");
-+ check_dirname ("foo/bar/", "foo");
-+ check_dirname ("foo//bar/", "foo");
-+ check_dirname ("foo///bar/", "foo");
-+ check_dirname ("foo/bar//", "foo");
-+ check_dirname ("foo//bar////", "foo");
-+ check_dirname ("foo///bar///////", "foo");
-+ check_dirname ("/foo", "/");
-+ check_dirname ("////foo", "/");
-+ check_dirname ("/foo/bar", "/foo");
-+ check_dirname ("/foo//bar", "/foo");
-+ check_dirname ("/foo///bar", "/foo");
-+ check_dirname ("/", "/");
-+ check_dirname ("///", "/");
-+ check_dirname ("", ".");
-+
-+
-+ _dbus_string_init_const (&str, "3.5");
-+ if (!_dbus_string_parse_double (&str,
-+ 0, &val, &pos))
-+ {
-+ _dbus_warn ("Failed to parse double");
-+ exit (1);
-+ }
-+ if (ABS(3.5 - val) > 1e-6)
-+ {
-+ _dbus_warn ("Failed to parse 3.5 correctly, got: %f", val);
-+ exit (1);
-+ }
-+ if (pos != 3)
-+ {
-+ _dbus_warn ("_dbus_string_parse_double of \"3.5\" returned wrong position %d", pos);
-+ exit (1);
-+ }
-+
-+ _dbus_string_init_const (&str, "0xff");
-+ if (!_dbus_string_parse_double (&str,
-+ 0, &val, &pos))
-+ {
-+ _dbus_warn ("Failed to parse double");
-+ exit (1);
-+ }
-+ if (ABS (0xff - val) > 1e-6)
-+ {
-+ _dbus_warn ("Failed to parse 0xff correctly, got: %f\n", val);
-+ exit (1);
-+ }
-+ if (pos != 4)
-+ {
-+ _dbus_warn ("_dbus_string_parse_double of \"0xff\" returned wrong position %d", pos);
-+ exit (1);
-+ }
-+
-+ check_path_absolute ("/", TRUE);
-+ check_path_absolute ("/foo", TRUE);
-+ check_path_absolute ("", FALSE);
-+ check_path_absolute ("foo", FALSE);
-+ check_path_absolute ("foo/bar", FALSE);
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-sysdeps.c dbus-0.61/dbus/dbus-sysdeps.c
---- dbus-0.61.orig/dbus/dbus-sysdeps.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-sysdeps.c 2006-02-24 16:46:45.000000000 +0100
-@@ -0,0 +1,2988 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-sysdeps.c Wrappers around system/libc features (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-sysdeps.h"
-+#include "dbus-threads.h"
-+#include "dbus-protocol.h"
-+#include "dbus-string.h"
-+#include <sys/types.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <signal.h>
-+#include <unistd.h>
-+#include <stdio.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <sys/socket.h>
-+#include <dirent.h>
-+#include <sys/un.h>
-+#include <pwd.h>
-+#include <time.h>
-+#include <locale.h>
-+#include <sys/time.h>
-+#include <sys/stat.h>
-+#include <sys/wait.h>
-+#include <netinet/in.h>
-+#include <netdb.h>
-+#include <grp.h>
-+
-+#ifdef HAVE_WRITEV
-+#include <sys/uio.h>
-+#endif
-+#ifdef HAVE_POLL
-+#include <sys/poll.h>
-+#endif
-+#ifdef HAVE_BACKTRACE
-+#include <execinfo.h>
-+#endif
-+#ifdef HAVE_GETPEERUCRED
-+#include <ucred.h>
-+#endif
-+
-+#ifndef O_BINARY
-+#define O_BINARY 0
-+#endif
-+
-+#ifndef HAVE_SOCKLEN_T
-+#define socklen_t int
-+#endif
-+
-+/**
-+ * @addtogroup DBusInternalsUtils
-+ * @{
-+ */
-+#ifndef DBUS_DISABLE_ASSERT
-+/**
-+ * Aborts the program with SIGABRT (dumping core).
-+ */
-+void
-+_dbus_abort (void)
-+{
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ const char *s;
-+ s = _dbus_getenv ("DBUS_PRINT_BACKTRACE");
-+ if (s && *s)
-+ _dbus_print_backtrace ();
-+#endif
-+ abort ();
-+ _exit (1); /* in case someone manages to ignore SIGABRT */
-+}
-+#endif
-+
-+/**
-+ * Wrapper for setenv(). If the value is #NULL, unsets
-+ * the environment variable.
-+ *
-+ * @todo if someone can verify it's safe, we could avoid the
-+ * memleak when doing an unset.
-+ *
-+ * @param varname name of environment variable
-+ * @param value value of environment variable
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_setenv (const char *varname,
-+ const char *value)
-+{
-+ _dbus_assert (varname != NULL);
-+
-+ if (value == NULL)
-+ {
-+#ifdef HAVE_UNSETENV
-+ unsetenv (varname);
-+ return TRUE;
-+#else
-+ char *putenv_value;
-+ size_t len;
-+
-+ len = strlen (varname);
-+
-+ /* Use system malloc to avoid memleaks that dbus_malloc
-+ * will get upset about.
-+ */
-+
-+ putenv_value = malloc (len + 1);
-+ if (putenv_value == NULL)
-+ return FALSE;
-+
-+ strcpy (putenv_value, varname);
-+
-+ return (putenv (putenv_value) == 0);
-+#endif
-+ }
-+ else
-+ {
-+#ifdef HAVE_SETENV
-+ return (setenv (varname, value, TRUE) == 0);
-+#else
-+ char *putenv_value;
-+ size_t len;
-+ size_t varname_len;
-+ size_t value_len;
-+
-+ varname_len = strlen (varname);
-+ value_len = strlen (value);
-+
-+ len = varname_len + value_len + 1 /* '=' */ ;
-+
-+ /* Use system malloc to avoid memleaks that dbus_malloc
-+ * will get upset about.
-+ */
-+
-+ putenv_value = malloc (len + 1);
-+ if (putenv_value == NULL)
-+ return FALSE;
-+
-+ strcpy (putenv_value, varname);
-+ strcpy (putenv_value + varname_len, "=");
-+ strcpy (putenv_value + varname_len + 1, value);
-+
-+ return (putenv (putenv_value) == 0);
-+#endif
-+ }
-+}
-+
-+/**
-+ * Wrapper for getenv().
-+ *
-+ * @param varname name of environment variable
-+ * @returns value of environment variable or #NULL if unset
-+ */
-+const char*
-+_dbus_getenv (const char *varname)
-+{
-+ return getenv (varname);
-+}
-+
-+/**
-+ * Thin wrapper around the read() system call that appends
-+ * the data it reads to the DBusString buffer. It appends
-+ * up to the given count, and returns the same value
-+ * and same errno as read(). The only exception is that
-+ * _dbus_read() handles EINTR for you. _dbus_read() can
-+ * return ENOMEM, even though regular UNIX read doesn't.
-+ *
-+ * @param fd the file descriptor to read from
-+ * @param buffer the buffer to append data to
-+ * @param count the amount of data to read
-+ * @returns the number of bytes read or -1
-+ */
-+int
-+_dbus_read (int fd,
-+ DBusString *buffer,
-+ int count)
-+{
-+ int bytes_read;
-+ int start;
-+ char *data;
-+
-+ _dbus_assert (count >= 0);
-+
-+ start = _dbus_string_get_length (buffer);
-+
-+ if (!_dbus_string_lengthen (buffer, count))
-+ {
-+ errno = ENOMEM;
-+ return -1;
-+ }
-+
-+ data = _dbus_string_get_data_len (buffer, start, count);
-+
-+ again:
-+
-+ bytes_read = read (fd, data, count);
-+
-+ if (bytes_read < 0)
-+ {
-+ if (errno == EINTR)
-+ goto again;
-+ else
-+ {
-+ /* put length back (note that this doesn't actually realloc anything) */
-+ _dbus_string_set_length (buffer, start);
-+ return -1;
-+ }
-+ }
-+ else
-+ {
-+ /* put length back (doesn't actually realloc) */
-+ _dbus_string_set_length (buffer, start + bytes_read);
-+
-+#if 0
-+ if (bytes_read > 0)
-+ _dbus_verbose_bytes_of_string (buffer, start, bytes_read);
-+#endif
-+
-+ return bytes_read;
-+ }
-+}
-+
-+/**
-+ * Thin wrapper around the write() system call that writes a part of a
-+ * DBusString and handles EINTR for you.
-+ *
-+ * @param fd the file descriptor to write
-+ * @param buffer the buffer to write data from
-+ * @param start the first byte in the buffer to write
-+ * @param len the number of bytes to try to write
-+ * @returns the number of bytes written or -1 on error
-+ */
-+int
-+_dbus_write (int fd,
-+ const DBusString *buffer,
-+ int start,
-+ int len)
-+{
-+ const char *data;
-+ int bytes_written;
-+
-+ data = _dbus_string_get_const_data_len (buffer, start, len);
-+
-+ again:
-+
-+ bytes_written = write (fd, data, len);
-+
-+ if (bytes_written < 0 && errno == EINTR)
-+ goto again;
-+
-+#if 0
-+ if (bytes_written > 0)
-+ _dbus_verbose_bytes_of_string (buffer, start, bytes_written);
-+#endif
-+
-+ return bytes_written;
-+}
-+
-+/**
-+ * Like _dbus_write() but will use writev() if possible
-+ * to write both buffers in sequence. The return value
-+ * is the number of bytes written in the first buffer,
-+ * plus the number written in the second. If the first
-+ * buffer is written successfully and an error occurs
-+ * writing the second, the number of bytes in the first
-+ * is returned (i.e. the error is ignored), on systems that
-+ * don't have writev. Handles EINTR for you.
-+ * The second buffer may be #NULL.
-+ *
-+ * @param fd the file descriptor
-+ * @param buffer1 first buffer
-+ * @param start1 first byte to write in first buffer
-+ * @param len1 number of bytes to write from first buffer
-+ * @param buffer2 second buffer, or #NULL
-+ * @param start2 first byte to write in second buffer
-+ * @param len2 number of bytes to write in second buffer
-+ * @returns total bytes written from both buffers, or -1 on error
-+ */
-+int
-+_dbus_write_two (int fd,
-+ const DBusString *buffer1,
-+ int start1,
-+ int len1,
-+ const DBusString *buffer2,
-+ int start2,
-+ int len2)
-+{
-+ _dbus_assert (buffer1 != NULL);
-+ _dbus_assert (start1 >= 0);
-+ _dbus_assert (start2 >= 0);
-+ _dbus_assert (len1 >= 0);
-+ _dbus_assert (len2 >= 0);
-+
-+#ifdef HAVE_WRITEV
-+ {
-+ struct iovec vectors[2];
-+ const char *data1;
-+ const char *data2;
-+ int bytes_written;
-+
-+ data1 = _dbus_string_get_const_data_len (buffer1, start1, len1);
-+
-+ if (buffer2 != NULL)
-+ data2 = _dbus_string_get_const_data_len (buffer2, start2, len2);
-+ else
-+ {
-+ data2 = NULL;
-+ start2 = 0;
-+ len2 = 0;
-+ }
-+
-+ vectors[0].iov_base = (char*) data1;
-+ vectors[0].iov_len = len1;
-+ vectors[1].iov_base = (char*) data2;
-+ vectors[1].iov_len = len2;
-+
-+ again:
-+
-+ bytes_written = writev (fd,
-+ vectors,
-+ data2 ? 2 : 1);
-+
-+ if (bytes_written < 0 && errno == EINTR)
-+ goto again;
-+
-+ return bytes_written;
-+ }
-+#else /* HAVE_WRITEV */
-+ {
-+ int ret1;
-+
-+ ret1 = _dbus_write (fd, buffer1, start1, len1);
-+ if (ret1 == len1 && buffer2 != NULL)
-+ {
-+ ret2 = _dbus_write (fd, buffer2, start2, len2);
-+ if (ret2 < 0)
-+ ret2 = 0; /* we can't report an error as the first write was OK */
-+
-+ return ret1 + ret2;
-+ }
-+ else
-+ return ret1;
-+ }
-+#endif /* !HAVE_WRITEV */
-+}
-+
-+#define _DBUS_MAX_SUN_PATH_LENGTH 99
-+
-+/**
-+ * @def _DBUS_MAX_SUN_PATH_LENGTH
-+ *
-+ * Maximum length of the path to a UNIX domain socket,
-+ * sockaddr_un::sun_path member. POSIX requires that all systems
-+ * support at least 100 bytes here, including the nul termination.
-+ * We use 99 for the max value to allow for the nul.
-+ *
-+ * We could probably also do sizeof (addr.sun_path)
-+ * but this way we are the same on all platforms
-+ * which is probably a good idea.
-+ */
-+
-+/**
-+ * Creates a socket and connects it to the UNIX domain socket at the
-+ * given path. The connection fd is returned, and is set up as
-+ * nonblocking.
-+ *
-+ * Uses abstract sockets instead of filesystem-linked sockets if
-+ * requested (it's possible only on Linux; see "man 7 unix" on Linux).
-+ * On non-Linux abstract socket usage always fails.
-+ *
-+ * @param path the path to UNIX domain socket
-+ * @param abstract #TRUE to use abstract namespace
-+ * @param error return location for error code
-+ * @returns connection file descriptor or -1 on error
-+ */
-+int
-+_dbus_connect_unix_socket (const char *path,
-+ dbus_bool_t abstract,
-+ DBusError *error)
-+{
-+ int fd;
-+ size_t path_len;
-+ struct sockaddr_un addr;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ _dbus_verbose ("connecting to unix socket %s abstract=%d\n",
-+ path, abstract);
-+
-+ fd = socket (PF_UNIX, SOCK_STREAM, 0);
-+
-+ if (fd < 0)
-+ {
-+ dbus_set_error (error,
-+ _dbus_error_from_errno (errno),
-+ "Failed to create socket: %s",
-+ _dbus_strerror (errno));
-+
-+ return -1;
-+ }
-+
-+ _DBUS_ZERO (addr);
-+ addr.sun_family = AF_UNIX;
-+ path_len = strlen (path);
-+
-+ if (abstract)
-+ {
-+#ifdef HAVE_ABSTRACT_SOCKETS
-+ addr.sun_path[0] = '\0'; /* this is what says "use abstract" */
-+ path_len++; /* Account for the extra nul byte added to the start of sun_path */
-+
-+ if (path_len > _DBUS_MAX_SUN_PATH_LENGTH)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "Abstract socket name too long\n");
-+ close (fd);
-+ return -1;
-+ }
-+
-+ strncpy (&addr.sun_path[1], path, path_len);
-+ /* _dbus_verbose_bytes (addr.sun_path, sizeof (addr.sun_path)); */
-+#else /* HAVE_ABSTRACT_SOCKETS */
-+ dbus_set_error (error, DBUS_ERROR_NOT_SUPPORTED,
-+ "Operating system does not support abstract socket namespace\n");
-+ close (fd);
-+ return -1;
-+#endif /* ! HAVE_ABSTRACT_SOCKETS */
-+ }
-+ else
-+ {
-+ if (path_len > _DBUS_MAX_SUN_PATH_LENGTH)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "Socket name too long\n");
-+ close (fd);
-+ return -1;
-+ }
-+
-+ strncpy (addr.sun_path, path, path_len);
-+ }
-+
-+ if (connect (fd, (struct sockaddr*) &addr, _DBUS_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0)
-+ {
-+ dbus_set_error (error,
-+ _dbus_error_from_errno (errno),
-+ "Failed to connect to socket %s: %s",
-+ path, _dbus_strerror (errno));
-+
-+ close (fd);
-+ fd = -1;
-+
-+ return -1;
-+ }
-+
-+ if (!_dbus_set_fd_nonblocking (fd, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+
-+ close (fd);
-+ fd = -1;
-+
-+ return -1;
-+ }
-+
-+ return fd;
-+}
-+
-+/**
-+ * Creates a socket and binds it to the given path,
-+ * then listens on the socket. The socket is
-+ * set to be nonblocking.
-+ *
-+ * Uses abstract sockets instead of filesystem-linked
-+ * sockets if requested (it's possible only on Linux;
-+ * see "man 7 unix" on Linux).
-+ * On non-Linux abstract socket usage always fails.
-+ *
-+ * @param path the socket name
-+ * @param abstract #TRUE to use abstract namespace
-+ * @param error return location for errors
-+ * @returns the listening file descriptor or -1 on error
-+ */
-+int
-+_dbus_listen_unix_socket (const char *path,
-+ dbus_bool_t abstract,
-+ DBusError *error)
-+{
-+ int listen_fd;
-+ struct sockaddr_un addr;
-+ size_t path_len;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ _dbus_verbose ("listening on unix socket %s abstract=%d\n",
-+ path, abstract);
-+
-+ listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
-+
-+ if (listen_fd < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to create socket \"%s\": %s",
-+ path, _dbus_strerror (errno));
-+ return -1;
-+ }
-+
-+ _DBUS_ZERO (addr);
-+ addr.sun_family = AF_UNIX;
-+ path_len = strlen (path);
-+
-+ if (abstract)
-+ {
-+#ifdef HAVE_ABSTRACT_SOCKETS
-+ /* remember that abstract names aren't nul-terminated so we rely
-+ * on sun_path being filled in with zeroes above.
-+ */
-+ addr.sun_path[0] = '\0'; /* this is what says "use abstract" */
-+ path_len++; /* Account for the extra nul byte added to the start of sun_path */
-+
-+ if (path_len > _DBUS_MAX_SUN_PATH_LENGTH)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "Abstract socket name too long\n");
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ strncpy (&addr.sun_path[1], path, path_len);
-+ /* _dbus_verbose_bytes (addr.sun_path, sizeof (addr.sun_path)); */
-+#else /* HAVE_ABSTRACT_SOCKETS */
-+ dbus_set_error (error, DBUS_ERROR_NOT_SUPPORTED,
-+ "Operating system does not support abstract socket namespace\n");
-+ close (listen_fd);
-+ return -1;
-+#endif /* ! HAVE_ABSTRACT_SOCKETS */
-+ }
-+ else
-+ {
-+ /* FIXME discussed security implications of this with Nalin,
-+ * and we couldn't think of where it would kick our ass, but
-+ * it still seems a bit sucky. It also has non-security suckage;
-+ * really we'd prefer to exit if the socket is already in use.
-+ * But there doesn't seem to be a good way to do this.
-+ *
-+ * Just to be extra careful, I threw in the stat() - clearly
-+ * the stat() can't *fix* any security issue, but it at least
-+ * avoids inadvertent/accidental data loss.
-+ */
-+ {
-+ struct stat sb;
-+
-+ if (stat (path, &sb) == 0 &&
-+ S_ISSOCK (sb.st_mode))
-+ unlink (path);
-+ }
-+
-+ if (path_len > _DBUS_MAX_SUN_PATH_LENGTH)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "Abstract socket name too long\n");
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ strncpy (addr.sun_path, path, path_len);
-+ }
-+
-+ if (bind (listen_fd, (struct sockaddr*) &addr, _DBUS_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to bind socket \"%s\": %s",
-+ path, _dbus_strerror (errno));
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ if (listen (listen_fd, 30 /* backlog */) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to listen on socket \"%s\": %s",
-+ path, _dbus_strerror (errno));
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ if (!_dbus_set_fd_nonblocking (listen_fd, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ /* Try opening up the permissions, but if we can't, just go ahead
-+ * and continue, maybe it will be good enough.
-+ */
-+ if (!abstract && chmod (path, 0777) < 0)
-+ _dbus_warn ("Could not set mode 0777 on socket %s\n",
-+ path);
-+
-+ return listen_fd;
-+}
-+
-+/**
-+ * Creates a socket and connects to a socket at the given host
-+ * and port. The connection fd is returned, and is set up as
-+ * nonblocking.
-+ *
-+ * @param host the host name to connect to
-+ * @param port the prot to connect to
-+ * @param error return location for error code
-+ * @returns connection file descriptor or -1 on error
-+ */
-+int
-+_dbus_connect_tcp_socket (const char *host,
-+ dbus_uint32_t port,
-+ DBusError *error)
-+{
-+ int fd;
-+ struct sockaddr_in addr;
-+ struct hostent *he;
-+ struct in_addr *haddr;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ fd = socket (AF_INET, SOCK_STREAM, 0);
-+
-+ if (fd < 0)
-+ {
-+ dbus_set_error (error,
-+ _dbus_error_from_errno (errno),
-+ "Failed to create socket: %s",
-+ _dbus_strerror (errno));
-+
-+ return -1;
-+ }
-+
-+ if (host == NULL)
-+ host = "localhost";
-+
-+ he = gethostbyname (host);
-+ if (he == NULL)
-+ {
-+ dbus_set_error (error,
-+ _dbus_error_from_errno (errno),
-+ "Failed to lookup hostname: %s",
-+ host);
-+ close (fd);
-+ return -1;
-+ }
-+
-+ haddr = ((struct in_addr *) (he->h_addr_list)[0]);
-+
-+ _DBUS_ZERO (addr);
-+ memcpy (&addr.sin_addr, haddr, sizeof(struct in_addr));
-+ addr.sin_family = AF_INET;
-+ addr.sin_port = htons (port);
-+
-+ if (connect (fd, (struct sockaddr*) &addr, sizeof (addr)) < 0)
-+ {
-+ dbus_set_error (error,
-+ _dbus_error_from_errno (errno),
-+ "Failed to connect to socket %s: %s:%d",
-+ host, _dbus_strerror (errno), port);
-+
-+ close (fd);
-+ fd = -1;
-+
-+ return -1;
-+ }
-+
-+ if (!_dbus_set_fd_nonblocking (fd, error))
-+ {
-+ close (fd);
-+ fd = -1;
-+
-+ return -1;
-+ }
-+
-+ return fd;
-+}
-+
-+/**
-+ * Creates a socket and binds it to the given path,
-+ * then listens on the socket. The socket is
-+ * set to be nonblocking.
-+ *
-+ * @param host the host name to listen on
-+ * @param port the prot to listen on
-+ * @param error return location for errors
-+ * @returns the listening file descriptor or -1 on error
-+ */
-+int
-+_dbus_listen_tcp_socket (const char *host,
-+ dbus_uint32_t port,
-+ DBusError *error)
-+{
-+ int listen_fd;
-+ struct sockaddr_in addr;
-+ struct hostent *he;
-+ struct in_addr *haddr;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ listen_fd = socket (AF_INET, SOCK_STREAM, 0);
-+
-+ if (listen_fd < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to create socket \"%s:%d\": %s",
-+ host, port, _dbus_strerror (errno));
-+ return -1;
-+ }
-+
-+ he = gethostbyname (host);
-+ if (he == NULL)
-+ {
-+ dbus_set_error (error,
-+ _dbus_error_from_errno (errno),
-+ "Failed to lookup hostname: %s",
-+ host);
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ haddr = ((struct in_addr *) (he->h_addr_list)[0]);
-+
-+ _DBUS_ZERO (addr);
-+ memcpy (&addr.sin_addr, haddr, sizeof (struct in_addr));
-+ addr.sin_family = AF_INET;
-+ addr.sin_port = htons (port);
-+
-+ if (bind (listen_fd, (struct sockaddr*) &addr, sizeof (struct sockaddr)))
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to bind socket \"%s:%d\": %s",
-+ host, port, _dbus_strerror (errno));
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ if (listen (listen_fd, 30 /* backlog */) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to listen on socket \"%s:%d\": %s",
-+ host, port, _dbus_strerror (errno));
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ if (!_dbus_set_fd_nonblocking (listen_fd, error))
-+ {
-+ close (listen_fd);
-+ return -1;
-+ }
-+
-+ return listen_fd;
-+}
-+
-+static dbus_bool_t
-+write_credentials_byte (int server_fd,
-+ DBusError *error)
-+{
-+ int bytes_written;
-+ char buf[1] = { '\0' };
-+#if defined(HAVE_CMSGCRED) && !defined(LOCAL_CREDS)
-+ struct {
-+ struct cmsghdr hdr;
-+ struct cmsgcred cred;
-+ } cmsg;
-+ struct iovec iov;
-+ struct msghdr msg;
-+#endif
-+
-+#if defined(HAVE_CMSGCRED) && !defined(LOCAL_CREDS)
-+ iov.iov_base = buf;
-+ iov.iov_len = 1;
-+
-+ memset (&msg, 0, sizeof (msg));
-+ msg.msg_iov = &iov;
-+ msg.msg_iovlen = 1;
-+
-+ msg.msg_control = &cmsg;
-+ msg.msg_controllen = sizeof (cmsg);
-+ memset (&cmsg, 0, sizeof (cmsg));
-+ cmsg.hdr.cmsg_len = sizeof (cmsg);
-+ cmsg.hdr.cmsg_level = SOL_SOCKET;
-+ cmsg.hdr.cmsg_type = SCM_CREDS;
-+#endif
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ again:
-+
-+#if defined(HAVE_CMSGCRED) && !defined(LOCAL_CREDS)
-+ bytes_written = sendmsg (server_fd, &msg, 0);
-+#else
-+ bytes_written = write (server_fd, buf, 1);
-+#endif
-+
-+ if (bytes_written < 0 && errno == EINTR)
-+ goto again;
-+
-+ if (bytes_written < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to write credentials byte: %s",
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+ else if (bytes_written == 0)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_IO_ERROR,
-+ "wrote zero bytes writing credentials byte");
-+ return FALSE;
-+ }
-+ else
-+ {
-+ _dbus_assert (bytes_written == 1);
-+ _dbus_verbose ("wrote credentials byte\n");
-+ return TRUE;
-+ }
-+}
-+
-+/**
-+ * Reads a single byte which must be nul (an error occurs otherwise),
-+ * and reads unix credentials if available. Fills in pid/uid/gid with
-+ * -1 if no credentials are available. Return value indicates whether
-+ * a byte was read, not whether we got valid credentials. On some
-+ * systems, such as Linux, reading/writing the byte isn't actually
-+ * required, but we do it anyway just to avoid multiple codepaths.
-+ *
-+ * Fails if no byte is available, so you must select() first.
-+ *
-+ * The point of the byte is that on some systems we have to
-+ * use sendmsg()/recvmsg() to transmit credentials.
-+ *
-+ * @param client_fd the client file descriptor
-+ * @param credentials struct to fill with credentials of client
-+ * @param error location to store error code
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_read_credentials_unix_socket (int client_fd,
-+ DBusCredentials *credentials,
-+ DBusError *error)
-+{
-+ struct msghdr msg;
-+ struct iovec iov;
-+ char buf;
-+
-+#ifdef HAVE_CMSGCRED
-+ struct {
-+ struct cmsghdr hdr;
-+ struct cmsgcred cred;
-+ } cmsg;
-+#endif
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* The POSIX spec certainly doesn't promise this, but
-+ * we need these assertions to fail as soon as we're wrong about
-+ * it so we can do the porting fixups
-+ */
-+ _dbus_assert (sizeof (pid_t) <= sizeof (credentials->pid));
-+ _dbus_assert (sizeof (uid_t) <= sizeof (credentials->uid));
-+ _dbus_assert (sizeof (gid_t) <= sizeof (credentials->gid));
-+
-+ _dbus_credentials_clear (credentials);
-+
-+#if defined(LOCAL_CREDS) && defined(HAVE_CMSGCRED)
-+ /* Set the socket to receive credentials on the next message */
-+ {
-+ int on = 1;
-+ if (setsockopt (client_fd, 0, LOCAL_CREDS, &on, sizeof (on)) < 0)
-+ {
-+ _dbus_verbose ("Unable to set LOCAL_CREDS socket option\n");
-+ return FALSE;
-+ }
-+ }
-+#endif
-+
-+ iov.iov_base = &buf;
-+ iov.iov_len = 1;
-+
-+ memset (&msg, 0, sizeof (msg));
-+ msg.msg_iov = &iov;
-+ msg.msg_iovlen = 1;
-+
-+#ifdef HAVE_CMSGCRED
-+ memset (&cmsg, 0, sizeof (cmsg));
-+ msg.msg_control = &cmsg;
-+ msg.msg_controllen = sizeof (cmsg);
-+#endif
-+
-+ again:
-+ if (recvmsg (client_fd, &msg, 0) < 0)
-+ {
-+ if (errno == EINTR)
-+ goto again;
-+
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to read credentials byte: %s",
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ if (buf != '\0')
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Credentials byte was not nul");
-+ return FALSE;
-+ }
-+
-+#ifdef HAVE_CMSGCRED
-+ if (cmsg.hdr.cmsg_len < sizeof (cmsg) || cmsg.hdr.cmsg_type != SCM_CREDS)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Message from recvmsg() was not SCM_CREDS");
-+ return FALSE;
-+ }
-+#endif
-+
-+ _dbus_verbose ("read credentials byte\n");
-+
-+ {
-+#ifdef SO_PEERCRED
-+ struct ucred cr;
-+ int cr_len = sizeof (cr);
-+
-+ if (getsockopt (client_fd, SOL_SOCKET, SO_PEERCRED, &cr, &cr_len) == 0 &&
-+ cr_len == sizeof (cr))
-+ {
-+ credentials->pid = cr.pid;
-+ credentials->uid = cr.uid;
-+ credentials->gid = cr.gid;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Failed to getsockopt() credentials, returned len %d/%d: %s\n",
-+ cr_len, (int) sizeof (cr), _dbus_strerror (errno));
-+ }
-+#elif defined(HAVE_CMSGCRED)
-+ credentials->pid = cmsg.cred.cmcred_pid;
-+ credentials->uid = cmsg.cred.cmcred_euid;
-+ credentials->gid = cmsg.cred.cmcred_groups[0];
-+#elif defined(HAVE_GETPEEREID)
-+ uid_t euid;
-+ gid_t egid;
-+ if (getpeereid (client_fd, &euid, &egid) == 0)
-+ {
-+ credentials->uid = euid;
-+ credentials->gid = egid;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Failed to getpeereid() credentials: %s\n", _dbus_strerror (errno));
-+ }
-+#elif defined(HAVE_GETPEERUCRED)
-+ ucred_t * ucred = NULL;
-+ if (getpeerucred (client_fd, &ucred) == 0)
-+ {
-+ credentials->pid = ucred_getpid (ucred);
-+ credentials->uid = ucred_geteuid (ucred);
-+ credentials->gid = ucred_getegid (ucred);
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Failed to getpeerucred() credentials: %s\n", _dbus_strerror (errno));
-+ }
-+ if (ucred != NULL)
-+ ucred_free (ucred);
-+#else /* !SO_PEERCRED && !HAVE_CMSGCRED && !HAVE_GETPEEREID && !HAVE_GETPEERUCRED */
-+ _dbus_verbose ("Socket credentials not supported on this OS\n");
-+#endif
-+ }
-+
-+ _dbus_verbose ("Credentials:"
-+ " pid "DBUS_PID_FORMAT
-+ " uid "DBUS_UID_FORMAT
-+ " gid "DBUS_GID_FORMAT"\n",
-+ credentials->pid,
-+ credentials->uid,
-+ credentials->gid);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Sends a single nul byte with our UNIX credentials as ancillary
-+ * data. Returns #TRUE if the data was successfully written. On
-+ * systems that don't support sending credentials, just writes a byte,
-+ * doesn't send any credentials. On some systems, such as Linux,
-+ * reading/writing the byte isn't actually required, but we do it
-+ * anyway just to avoid multiple codepaths.
-+ *
-+ * Fails if no byte can be written, so you must select() first.
-+ *
-+ * The point of the byte is that on some systems we have to
-+ * use sendmsg()/recvmsg() to transmit credentials.
-+ *
-+ * @param server_fd file descriptor for connection to server
-+ * @param error return location for error code
-+ * @returns #TRUE if the byte was sent
-+ */
-+dbus_bool_t
-+_dbus_send_credentials_unix_socket (int server_fd,
-+ DBusError *error)
-+{
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (write_credentials_byte (server_fd, error))
-+ return TRUE;
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Accepts a connection on a listening socket.
-+ * Handles EINTR for you.
-+ *
-+ * @param listen_fd the listen file descriptor
-+ * @returns the connection fd of the client, or -1 on error
-+ */
-+int
-+_dbus_accept (int listen_fd)
-+{
-+ int client_fd;
-+ struct sockaddr addr;
-+ socklen_t addrlen;
-+
-+ addrlen = sizeof (addr);
-+
-+ retry:
-+ client_fd = accept (listen_fd, &addr, &addrlen);
-+
-+ if (client_fd < 0)
-+ {
-+ if (errno == EINTR)
-+ goto retry;
-+ }
-+
-+ return client_fd;
-+}
-+
-+/** @} */
-+
-+/**
-+ * @addtogroup DBusString
-+ *
-+ * @{
-+ */
-+/**
-+ * Appends an integer to a DBusString.
-+ *
-+ * @param str the string
-+ * @param value the integer value
-+ * @returns #FALSE if not enough memory or other failure.
-+ */
-+dbus_bool_t
-+_dbus_string_append_int (DBusString *str,
-+ long value)
-+{
-+ /* this calculation is from comp.lang.c faq */
-+#define MAX_LONG_LEN ((sizeof (long) * 8 + 2) / 3 + 1) /* +1 for '-' */
-+ int orig_len;
-+ int i;
-+ char *buf;
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ if (!_dbus_string_lengthen (str, MAX_LONG_LEN))
-+ return FALSE;
-+
-+ buf = _dbus_string_get_data_len (str, orig_len, MAX_LONG_LEN);
-+
-+ snprintf (buf, MAX_LONG_LEN, "%ld", value);
-+
-+ i = 0;
-+ while (*buf)
-+ {
-+ ++buf;
-+ ++i;
-+ }
-+
-+ _dbus_string_shorten (str, MAX_LONG_LEN - i);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Appends an unsigned integer to a DBusString.
-+ *
-+ * @param str the string
-+ * @param value the integer value
-+ * @returns #FALSE if not enough memory or other failure.
-+ */
-+dbus_bool_t
-+_dbus_string_append_uint (DBusString *str,
-+ unsigned long value)
-+{
-+ /* this is wrong, but definitely on the high side. */
-+#define MAX_ULONG_LEN (MAX_LONG_LEN * 2)
-+ int orig_len;
-+ int i;
-+ char *buf;
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ if (!_dbus_string_lengthen (str, MAX_ULONG_LEN))
-+ return FALSE;
-+
-+ buf = _dbus_string_get_data_len (str, orig_len, MAX_ULONG_LEN);
-+
-+ snprintf (buf, MAX_ULONG_LEN, "%lu", value);
-+
-+ i = 0;
-+ while (*buf)
-+ {
-+ ++buf;
-+ ++i;
-+ }
-+
-+ _dbus_string_shorten (str, MAX_ULONG_LEN - i);
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Appends a double to a DBusString.
-+ *
-+ * @param str the string
-+ * @param value the floating point value
-+ * @returns #FALSE if not enough memory or other failure.
-+ */
-+dbus_bool_t
-+_dbus_string_append_double (DBusString *str,
-+ double value)
-+{
-+#define MAX_DOUBLE_LEN 64 /* this is completely made up :-/ */
-+ int orig_len;
-+ char *buf;
-+ int i;
-+
-+ orig_len = _dbus_string_get_length (str);
-+
-+ if (!_dbus_string_lengthen (str, MAX_DOUBLE_LEN))
-+ return FALSE;
-+
-+ buf = _dbus_string_get_data_len (str, orig_len, MAX_DOUBLE_LEN);
-+
-+ snprintf (buf, MAX_LONG_LEN, "%g", value);
-+
-+ i = 0;
-+ while (*buf)
-+ {
-+ ++buf;
-+ ++i;
-+ }
-+
-+ _dbus_string_shorten (str, MAX_DOUBLE_LEN - i);
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Parses an integer contained in a DBusString. Either return parameter
-+ * may be #NULL if you aren't interested in it. The integer is parsed
-+ * and stored in value_return. Return parameters are not initialized
-+ * if the function returns #FALSE.
-+ *
-+ * @param str the string
-+ * @param start the byte index of the start of the integer
-+ * @param value_return return location of the integer value or #NULL
-+ * @param end_return return location of the end of the integer, or #NULL
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_string_parse_int (const DBusString *str,
-+ int start,
-+ long *value_return,
-+ int *end_return)
-+{
-+ long v;
-+ const char *p;
-+ char *end;
-+
-+ p = _dbus_string_get_const_data_len (str, start,
-+ _dbus_string_get_length (str) - start);
-+
-+ end = NULL;
-+ errno = 0;
-+ v = strtol (p, &end, 0);
-+ if (end == NULL || end == p || errno != 0)
-+ return FALSE;
-+
-+ if (value_return)
-+ *value_return = v;
-+ if (end_return)
-+ *end_return = start + (end - p);
-+
-+ return TRUE;
-+}
-+
-+/**
-+* Checks to make sure the given directory is
-+* private to the user
-+*
-+* @param dir the name of the directory
-+* @param error error return
-+* @returns #FALSE on failure
-+**/
-+dbus_bool_t
-+_dbus_check_dir_is_private_to_user (DBusString *dir, DBusError *error)
-+{
-+ const char *directory;
-+ struct stat sb;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ directory = _dbus_string_get_const_data (dir);
-+
-+ if (stat (directory, &sb) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "%s", _dbus_strerror (errno));
-+
-+ return FALSE;
-+ }
-+
-+ if ((S_IROTH & sb.st_mode) || (S_IWOTH & sb.st_mode) ||
-+ (S_IRGRP & sb.st_mode) || (S_IWGRP & sb.st_mode))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "%s directory is not private to the user", directory);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Parses an unsigned integer contained in a DBusString. Either return
-+ * parameter may be #NULL if you aren't interested in it. The integer
-+ * is parsed and stored in value_return. Return parameters are not
-+ * initialized if the function returns #FALSE.
-+ *
-+ * @param str the string
-+ * @param start the byte index of the start of the integer
-+ * @param value_return return location of the integer value or #NULL
-+ * @param end_return return location of the end of the integer, or #NULL
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_string_parse_uint (const DBusString *str,
-+ int start,
-+ unsigned long *value_return,
-+ int *end_return)
-+{
-+ unsigned long v;
-+ const char *p;
-+ char *end;
-+
-+ p = _dbus_string_get_const_data_len (str, start,
-+ _dbus_string_get_length (str) - start);
-+
-+ end = NULL;
-+ errno = 0;
-+ v = strtoul (p, &end, 0);
-+ if (end == NULL || end == p || errno != 0)
-+ return FALSE;
-+
-+ if (value_return)
-+ *value_return = v;
-+ if (end_return)
-+ *end_return = start + (end - p);
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+static dbus_bool_t
-+ascii_isspace (char c)
-+{
-+ return (c == ' ' ||
-+ c == '\f' ||
-+ c == '\n' ||
-+ c == '\r' ||
-+ c == '\t' ||
-+ c == '\v');
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#ifdef DBUS_BUILD_TESTS
-+static dbus_bool_t
-+ascii_isdigit (char c)
-+{
-+ return c >= '0' && c <= '9';
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#ifdef DBUS_BUILD_TESTS
-+static dbus_bool_t
-+ascii_isxdigit (char c)
-+{
-+ return (ascii_isdigit (c) ||
-+ (c >= 'a' && c <= 'f') ||
-+ (c >= 'A' && c <= 'F'));
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#ifdef DBUS_BUILD_TESTS
-+/* Calls strtod in a locale-independent fashion, by looking at
-+ * the locale data and patching the decimal comma to a point.
-+ *
-+ * Relicensed from glib.
-+ */
-+static double
-+ascii_strtod (const char *nptr,
-+ char **endptr)
-+{
-+ char *fail_pos;
-+ double val;
-+ struct lconv *locale_data;
-+ const char *decimal_point;
-+ int decimal_point_len;
-+ const char *p, *decimal_point_pos;
-+ const char *end = NULL; /* Silence gcc */
-+
-+ fail_pos = NULL;
-+
-+ locale_data = localeconv ();
-+ decimal_point = locale_data->decimal_point;
-+ decimal_point_len = strlen (decimal_point);
-+
-+ _dbus_assert (decimal_point_len != 0);
-+
-+ decimal_point_pos = NULL;
-+ if (decimal_point[0] != '.' ||
-+ decimal_point[1] != 0)
-+ {
-+ p = nptr;
-+ /* Skip leading space */
-+ while (ascii_isspace (*p))
-+ p++;
-+
-+ /* Skip leading optional sign */
-+ if (*p == '+' || *p == '-')
-+ p++;
-+
-+ if (p[0] == '0' &&
-+ (p[1] == 'x' || p[1] == 'X'))
-+ {
-+ p += 2;
-+ /* HEX - find the (optional) decimal point */
-+
-+ while (ascii_isxdigit (*p))
-+ p++;
-+
-+ if (*p == '.')
-+ {
-+ decimal_point_pos = p++;
-+
-+ while (ascii_isxdigit (*p))
-+ p++;
-+
-+ if (*p == 'p' || *p == 'P')
-+ p++;
-+ if (*p == '+' || *p == '-')
-+ p++;
-+ while (ascii_isdigit (*p))
-+ p++;
-+ end = p;
-+ }
-+ }
-+ else
-+ {
-+ while (ascii_isdigit (*p))
-+ p++;
-+
-+ if (*p == '.')
-+ {
-+ decimal_point_pos = p++;
-+
-+ while (ascii_isdigit (*p))
-+ p++;
-+
-+ if (*p == 'e' || *p == 'E')
-+ p++;
-+ if (*p == '+' || *p == '-')
-+ p++;
-+ while (ascii_isdigit (*p))
-+ p++;
-+ end = p;
-+ }
-+ }
-+ /* For the other cases, we need not convert the decimal point */
-+ }
-+
-+ /* Set errno to zero, so that we can distinguish zero results
-+ and underflows */
-+ errno = 0;
-+
-+ if (decimal_point_pos)
-+ {
-+ char *copy, *c;
-+
-+ /* We need to convert the '.' to the locale specific decimal point */
-+ copy = dbus_malloc (end - nptr + 1 + decimal_point_len);
-+
-+ c = copy;
-+ memcpy (c, nptr, decimal_point_pos - nptr);
-+ c += decimal_point_pos - nptr;
-+ memcpy (c, decimal_point, decimal_point_len);
-+ c += decimal_point_len;
-+ memcpy (c, decimal_point_pos + 1, end - (decimal_point_pos + 1));
-+ c += end - (decimal_point_pos + 1);
-+ *c = 0;
-+
-+ val = strtod (copy, &fail_pos);
-+
-+ if (fail_pos)
-+ {
-+ if (fail_pos > decimal_point_pos)
-+ fail_pos = (char *)nptr + (fail_pos - copy) - (decimal_point_len - 1);
-+ else
-+ fail_pos = (char *)nptr + (fail_pos - copy);
-+ }
-+
-+ dbus_free (copy);
-+
-+ }
-+ else
-+ val = strtod (nptr, &fail_pos);
-+
-+ if (endptr)
-+ *endptr = fail_pos;
-+
-+ return val;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Parses a floating point number contained in a DBusString. Either
-+ * return parameter may be #NULL if you aren't interested in it. The
-+ * integer is parsed and stored in value_return. Return parameters are
-+ * not initialized if the function returns #FALSE.
-+ *
-+ * @param str the string
-+ * @param start the byte index of the start of the float
-+ * @param value_return return location of the float value or #NULL
-+ * @param end_return return location of the end of the float, or #NULL
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_string_parse_double (const DBusString *str,
-+ int start,
-+ double *value_return,
-+ int *end_return)
-+{
-+ double v;
-+ const char *p;
-+ char *end;
-+
-+ p = _dbus_string_get_const_data_len (str, start,
-+ _dbus_string_get_length (str) - start);
-+
-+ end = NULL;
-+ errno = 0;
-+ v = ascii_strtod (p, &end);
-+ if (end == NULL || end == p || errno != 0)
-+ return FALSE;
-+
-+ if (value_return)
-+ *value_return = v;
-+ if (end_return)
-+ *end_return = start + (end - p);
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/** @} */ /* DBusString group */
-+
-+/**
-+ * @addtogroup DBusInternalsUtils
-+ * @{
-+ */
-+static dbus_bool_t
-+fill_user_info_from_passwd (struct passwd *p,
-+ DBusUserInfo *info,
-+ DBusError *error)
-+{
-+ _dbus_assert (p->pw_name != NULL);
-+ _dbus_assert (p->pw_dir != NULL);
-+
-+ info->uid = p->pw_uid;
-+ info->primary_gid = p->pw_gid;
-+ info->username = _dbus_strdup (p->pw_name);
-+ info->homedir = _dbus_strdup (p->pw_dir);
-+
-+ if (info->username == NULL ||
-+ info->homedir == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+fill_user_info (DBusUserInfo *info,
-+ dbus_uid_t uid,
-+ const DBusString *username,
-+ DBusError *error)
-+{
-+ const char *username_c;
-+
-+ /* exactly one of username/uid provided */
-+ _dbus_assert (username != NULL || uid != DBUS_UID_UNSET);
-+ _dbus_assert (username == NULL || uid == DBUS_UID_UNSET);
-+
-+ info->uid = DBUS_UID_UNSET;
-+ info->primary_gid = DBUS_GID_UNSET;
-+ info->group_ids = NULL;
-+ info->n_group_ids = 0;
-+ info->username = NULL;
-+ info->homedir = NULL;
-+
-+ if (username != NULL)
-+ username_c = _dbus_string_get_const_data (username);
-+ else
-+ username_c = NULL;
-+
-+ /* For now assuming that the getpwnam() and getpwuid() flavors
-+ * are always symmetrical, if not we have to add more configure
-+ * checks
-+ */
-+
-+#if defined (HAVE_POSIX_GETPWNAM_R) || defined (HAVE_NONPOSIX_GETPWNAM_R)
-+ {
-+ struct passwd *p;
-+ int result;
-+ char buf[1024];
-+ struct passwd p_str;
-+
-+ p = NULL;
-+#ifdef HAVE_POSIX_GETPWNAM_R
-+ if (uid != DBUS_UID_UNSET)
-+ result = getpwuid_r (uid, &p_str, buf, sizeof (buf),
-+ &p);
-+ else
-+ result = getpwnam_r (username_c, &p_str, buf, sizeof (buf),
-+ &p);
-+#else
-+ if (uid != DBUS_UID_UNSET)
-+ p = getpwuid_r (uid, &p_str, buf, sizeof (buf));
-+ else
-+ p = getpwnam_r (username_c, &p_str, buf, sizeof (buf));
-+ result = 0;
-+#endif /* !HAVE_POSIX_GETPWNAM_R */
-+ if (result == 0 && p == &p_str)
-+ {
-+ if (!fill_user_info_from_passwd (p, info, error))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "User \"%s\" unknown or no memory to allocate password entry\n",
-+ username_c ? username_c : "???");
-+ _dbus_verbose ("User %s unknown\n", username_c ? username_c : "???");
-+ return FALSE;
-+ }
-+ }
-+#else /* ! HAVE_GETPWNAM_R */
-+ {
-+ /* I guess we're screwed on thread safety here */
-+ struct passwd *p;
-+
-+ if (uid != DBUS_UID_UNSET)
-+ p = getpwuid (uid);
-+ else
-+ p = getpwnam (username_c);
-+
-+ if (p != NULL)
-+ {
-+ if (!fill_user_info_from_passwd (p, info, error))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "User \"%s\" unknown or no memory to allocate password entry\n",
-+ username_c ? username_c : "???");
-+ _dbus_verbose ("User %s unknown\n", username_c ? username_c : "???");
-+ return FALSE;
-+ }
-+ }
-+#endif /* ! HAVE_GETPWNAM_R */
-+
-+ /* Fill this in so we can use it to get groups */
-+ username_c = info->username;
-+
-+#ifdef HAVE_GETGROUPLIST
-+ {
-+ gid_t *buf;
-+ int buf_count;
-+ int i;
-+
-+ buf_count = 17;
-+ buf = dbus_new (gid_t, buf_count);
-+ if (buf == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed;
-+ }
-+
-+ if (getgrouplist (username_c,
-+ info->primary_gid,
-+ buf, &buf_count) < 0)
-+ {
-+ gid_t *new = dbus_realloc (buf, buf_count * sizeof (buf[0]));
-+ if (new == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ dbus_free (buf);
-+ goto failed;
-+ }
-+
-+ buf = new;
-+
-+ errno = 0;
-+ if (getgrouplist (username_c, info->primary_gid, buf, &buf_count) < 0)
-+ {
-+ dbus_set_error (error,
-+ _dbus_error_from_errno (errno),
-+ "Failed to get groups for username \"%s\" primary GID "
-+ DBUS_GID_FORMAT ": %s\n",
-+ username_c, info->primary_gid,
-+ _dbus_strerror (errno));
-+ dbus_free (buf);
-+ goto failed;
-+ }
-+ }
-+
-+ info->group_ids = dbus_new (dbus_gid_t, buf_count);
-+ if (info->group_ids == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ dbus_free (buf);
-+ goto failed;
-+ }
-+
-+ for (i = 0; i < buf_count; ++i)
-+ info->group_ids[i] = buf[i];
-+
-+ info->n_group_ids = buf_count;
-+
-+ dbus_free (buf);
-+ }
-+#else /* HAVE_GETGROUPLIST */
-+ {
-+ /* We just get the one group ID */
-+ info->group_ids = dbus_new (dbus_gid_t, 1);
-+ if (info->group_ids == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed;
-+ }
-+
-+ info->n_group_ids = 1;
-+
-+ (info->group_ids)[0] = info->primary_gid;
-+ }
-+#endif /* HAVE_GETGROUPLIST */
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ return TRUE;
-+
-+ failed:
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return FALSE;
-+}
-+
-+/**
-+ * Gets user info for the given username.
-+ *
-+ * @param info user info object to initialize
-+ * @param username the username
-+ * @param error error return
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_user_info_fill (DBusUserInfo *info,
-+ const DBusString *username,
-+ DBusError *error)
-+{
-+ return fill_user_info (info, DBUS_UID_UNSET,
-+ username, error);
-+}
-+
-+/**
-+ * Gets user info for the given user ID.
-+ *
-+ * @param info user info object to initialize
-+ * @param uid the user ID
-+ * @param error error return
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_user_info_fill_uid (DBusUserInfo *info,
-+ dbus_uid_t uid,
-+ DBusError *error)
-+{
-+ return fill_user_info (info, uid,
-+ NULL, error);
-+}
-+
-+/**
-+ * Frees the members of info
-+ * (but not info itself)
-+ * @param info the user info struct
-+ */
-+void
-+_dbus_user_info_free (DBusUserInfo *info)
-+{
-+ dbus_free (info->group_ids);
-+ dbus_free (info->username);
-+ dbus_free (info->homedir);
-+}
-+
-+/**
-+ * Frees the members of info (but not info itself).
-+ *
-+ * @param info the group info
-+ */
-+void
-+_dbus_group_info_free (DBusGroupInfo *info)
-+{
-+ dbus_free (info->groupname);
-+}
-+
-+/**
-+ * Sets fields in DBusCredentials to DBUS_PID_UNSET,
-+ * DBUS_UID_UNSET, DBUS_GID_UNSET.
-+ *
-+ * @param credentials the credentials object to fill in
-+ */
-+void
-+_dbus_credentials_clear (DBusCredentials *credentials)
-+{
-+ credentials->pid = DBUS_PID_UNSET;
-+ credentials->uid = DBUS_UID_UNSET;
-+ credentials->gid = DBUS_GID_UNSET;
-+}
-+
-+/**
-+ * Gets the credentials of the current process.
-+ *
-+ * @param credentials credentials to fill in.
-+ */
-+void
-+_dbus_credentials_from_current_process (DBusCredentials *credentials)
-+{
-+ /* The POSIX spec certainly doesn't promise this, but
-+ * we need these assertions to fail as soon as we're wrong about
-+ * it so we can do the porting fixups
-+ */
-+ _dbus_assert (sizeof (pid_t) <= sizeof (credentials->pid));
-+ _dbus_assert (sizeof (uid_t) <= sizeof (credentials->uid));
-+ _dbus_assert (sizeof (gid_t) <= sizeof (credentials->gid));
-+
-+ credentials->pid = getpid ();
-+ credentials->uid = getuid ();
-+ credentials->gid = getgid ();
-+}
-+
-+/**
-+ * Checks whether the provided_credentials are allowed to log in
-+ * as the expected_credentials.
-+ *
-+ * @param expected_credentials credentials we're trying to log in as
-+ * @param provided_credentials credentials we have
-+ * @returns #TRUE if we can log in
-+ */
-+dbus_bool_t
-+_dbus_credentials_match (const DBusCredentials *expected_credentials,
-+ const DBusCredentials *provided_credentials)
-+{
-+ if (provided_credentials->uid == DBUS_UID_UNSET)
-+ return FALSE;
-+ else if (expected_credentials->uid == DBUS_UID_UNSET)
-+ return FALSE;
-+ else if (provided_credentials->uid == 0)
-+ return TRUE;
-+ else if (provided_credentials->uid == expected_credentials->uid)
-+ return TRUE;
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Gets our process ID
-+ * @returns process ID
-+ */
-+unsigned long
-+_dbus_getpid (void)
-+{
-+ return getpid ();
-+}
-+
-+/** Gets our UID
-+ * @returns process UID
-+ */
-+dbus_uid_t
-+_dbus_getuid (void)
-+{
-+ return getuid ();
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/** Gets our GID
-+ * @returns process GID
-+ */
-+dbus_gid_t
-+_dbus_getgid (void)
-+{
-+ return getgid ();
-+}
-+#endif
-+
-+_DBUS_DEFINE_GLOBAL_LOCK (atomic);
-+
-+#ifdef DBUS_USE_ATOMIC_INT_486
-+/* Taken from CVS version 1.7 of glibc's sysdeps/i386/i486/atomicity.h */
-+/* Since the asm stuff here is gcc-specific we go ahead and use "inline" also */
-+static inline dbus_int32_t
-+atomic_exchange_and_add (DBusAtomic *atomic,
-+ volatile dbus_int32_t val)
-+{
-+ register dbus_int32_t result;
-+
-+ __asm__ __volatile__ ("lock; xaddl %0,%1"
-+ : "=r" (result), "=m" (atomic->value)
-+ : "0" (val), "m" (atomic->value));
-+ return result;
-+}
-+#endif
-+
-+/**
-+ * Atomically increments an integer
-+ *
-+ * @param atomic pointer to the integer to increment
-+ * @returns the value before incrementing
-+ *
-+ * @todo implement arch-specific faster atomic ops
-+ */
-+dbus_int32_t
-+_dbus_atomic_inc (DBusAtomic *atomic)
-+{
-+#ifdef DBUS_USE_ATOMIC_INT_486
-+ return atomic_exchange_and_add (atomic, 1);
-+#else
-+ dbus_int32_t res;
-+ _DBUS_LOCK (atomic);
-+ res = atomic->value;
-+ atomic->value += 1;
-+ _DBUS_UNLOCK (atomic);
-+ return res;
-+#endif
-+}
-+
-+/**
-+ * Atomically decrement an integer
-+ *
-+ * @param atomic pointer to the integer to decrement
-+ * @returns the value before decrementing
-+ *
-+ * @todo implement arch-specific faster atomic ops
-+ */
-+dbus_int32_t
-+_dbus_atomic_dec (DBusAtomic *atomic)
-+{
-+#ifdef DBUS_USE_ATOMIC_INT_486
-+ return atomic_exchange_and_add (atomic, -1);
-+#else
-+ dbus_int32_t res;
-+
-+ _DBUS_LOCK (atomic);
-+ res = atomic->value;
-+ atomic->value -= 1;
-+ _DBUS_UNLOCK (atomic);
-+ return res;
-+#endif
-+}
-+
-+/**
-+ * Wrapper for poll().
-+ *
-+ * @param fds the file descriptors to poll
-+ * @param n_fds number of descriptors in the array
-+ * @param timeout_milliseconds timeout or -1 for infinite
-+ * @returns numbers of fds with revents, or <0 on error
-+ */
-+int
-+_dbus_poll (DBusPollFD *fds,
-+ int n_fds,
-+ int timeout_milliseconds)
-+{
-+#ifdef HAVE_POLL
-+ /* This big thing is a constant expression and should get optimized
-+ * out of existence. So it's more robust than a configure check at
-+ * no cost.
-+ */
-+ if (_DBUS_POLLIN == POLLIN &&
-+ _DBUS_POLLPRI == POLLPRI &&
-+ _DBUS_POLLOUT == POLLOUT &&
-+ _DBUS_POLLERR == POLLERR &&
-+ _DBUS_POLLHUP == POLLHUP &&
-+ _DBUS_POLLNVAL == POLLNVAL &&
-+ sizeof (DBusPollFD) == sizeof (struct pollfd) &&
-+ _DBUS_STRUCT_OFFSET (DBusPollFD, fd) ==
-+ _DBUS_STRUCT_OFFSET (struct pollfd, fd) &&
-+ _DBUS_STRUCT_OFFSET (DBusPollFD, events) ==
-+ _DBUS_STRUCT_OFFSET (struct pollfd, events) &&
-+ _DBUS_STRUCT_OFFSET (DBusPollFD, revents) ==
-+ _DBUS_STRUCT_OFFSET (struct pollfd, revents))
-+ {
-+ return poll ((struct pollfd*) fds,
-+ n_fds,
-+ timeout_milliseconds);
-+ }
-+ else
-+ {
-+ /* We have to convert the DBusPollFD to an array of
-+ * struct pollfd, poll, and convert back.
-+ */
-+ _dbus_warn ("didn't implement poll() properly for this system yet\n");
-+ return -1;
-+ }
-+#else /* ! HAVE_POLL */
-+
-+ fd_set read_set, write_set, err_set;
-+ int max_fd = 0;
-+ int i;
-+ struct timeval tv;
-+ int ready;
-+
-+ FD_ZERO (&read_set);
-+ FD_ZERO (&write_set);
-+ FD_ZERO (&err_set);
-+
-+ for (i = 0; i < n_fds; i++)
-+ {
-+ DBusPollFD *fdp = &fds[i];
-+
-+ if (fdp->events & _DBUS_POLLIN)
-+ FD_SET (fdp->fd, &read_set);
-+
-+ if (fdp->events & _DBUS_POLLOUT)
-+ FD_SET (fdp->fd, &write_set);
-+
-+ FD_SET (fdp->fd, &err_set);
-+
-+ max_fd = MAX (max_fd, fdp->fd);
-+ }
-+
-+ tv.tv_sec = timeout_milliseconds / 1000;
-+ tv.tv_usec = (timeout_milliseconds % 1000) * 1000;
-+
-+ ready = select (max_fd + 1, &read_set, &write_set, &err_set,
-+ timeout_milliseconds < 0 ? NULL : &tv);
-+
-+ if (ready > 0)
-+ {
-+ for (i = 0; i < n_fds; i++)
-+ {
-+ DBusPollFD *fdp = &fds[i];
-+
-+ fdp->revents = 0;
-+
-+ if (FD_ISSET (fdp->fd, &read_set))
-+ fdp->revents |= _DBUS_POLLIN;
-+
-+ if (FD_ISSET (fdp->fd, &write_set))
-+ fdp->revents |= _DBUS_POLLOUT;
-+
-+ if (FD_ISSET (fdp->fd, &err_set))
-+ fdp->revents |= _DBUS_POLLERR;
-+ }
-+ }
-+
-+ return ready;
-+#endif
-+}
-+
-+/** nanoseconds in a second */
-+#define NANOSECONDS_PER_SECOND 1000000000
-+/** microseconds in a second */
-+#define MICROSECONDS_PER_SECOND 1000000
-+/** milliseconds in a second */
-+#define MILLISECONDS_PER_SECOND 1000
-+/** nanoseconds in a millisecond */
-+#define NANOSECONDS_PER_MILLISECOND 1000000
-+/** microseconds in a millisecond */
-+#define MICROSECONDS_PER_MILLISECOND 1000
-+
-+/**
-+ * Sleeps the given number of milliseconds.
-+ * @param milliseconds number of milliseconds
-+ */
-+void
-+_dbus_sleep_milliseconds (int milliseconds)
-+{
-+#ifdef HAVE_NANOSLEEP
-+ struct timespec req;
-+ struct timespec rem;
-+
-+ req.tv_sec = milliseconds / MILLISECONDS_PER_SECOND;
-+ req.tv_nsec = (milliseconds % MILLISECONDS_PER_SECOND) * NANOSECONDS_PER_MILLISECOND;
-+ rem.tv_sec = 0;
-+ rem.tv_nsec = 0;
-+
-+ while (nanosleep (&req, &rem) < 0 && errno == EINTR)
-+ req = rem;
-+#elif defined (HAVE_USLEEP)
-+ usleep (milliseconds * MICROSECONDS_PER_MILLISECOND);
-+#else /* ! HAVE_USLEEP */
-+ sleep (MAX (milliseconds / 1000, 1));
-+#endif
-+}
-+
-+/**
-+ * Get current time, as in gettimeofday().
-+ *
-+ * @param tv_sec return location for number of seconds
-+ * @param tv_usec return location for number of microseconds (thousandths)
-+ */
-+void
-+_dbus_get_current_time (long *tv_sec,
-+ long *tv_usec)
-+{
-+ struct timeval t;
-+
-+ gettimeofday (&t, NULL);
-+
-+ if (tv_sec)
-+ *tv_sec = t.tv_sec;
-+ if (tv_usec)
-+ *tv_usec = t.tv_usec;
-+}
-+
-+/**
-+ * Appends the contents of the given file to the string,
-+ * returning error code. At the moment, won't open a file
-+ * more than a megabyte in size.
-+ *
-+ * @param str the string to append to
-+ * @param filename filename to load
-+ * @param error place to set an error
-+ * @returns #FALSE if error was set
-+ */
-+dbus_bool_t
-+_dbus_file_get_contents (DBusString *str,
-+ const DBusString *filename,
-+ DBusError *error)
-+{
-+ int fd;
-+ struct stat sb;
-+ int orig_len;
-+ int total;
-+ const char *filename_c;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ filename_c = _dbus_string_get_const_data (filename);
-+
-+ /* O_BINARY useful on Cygwin */
-+ fd = open (filename_c, O_RDONLY | O_BINARY);
-+ if (fd < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to open \"%s\": %s",
-+ filename_c,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ if (fstat (fd, &sb) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to stat \"%s\": %s",
-+ filename_c,
-+ _dbus_strerror (errno));
-+
-+ _dbus_verbose ("fstat() failed: %s",
-+ _dbus_strerror (errno));
-+
-+ close (fd);
-+
-+ return FALSE;
-+ }
-+
-+ if (sb.st_size > _DBUS_ONE_MEGABYTE)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "File size %lu of \"%s\" is too large.",
-+ (unsigned long) sb.st_size, filename_c);
-+ close (fd);
-+ return FALSE;
-+ }
-+
-+ total = 0;
-+ orig_len = _dbus_string_get_length (str);
-+ if (sb.st_size > 0 && S_ISREG (sb.st_mode))
-+ {
-+ int bytes_read;
-+
-+ while (total < (int) sb.st_size)
-+ {
-+ bytes_read = _dbus_read (fd, str,
-+ sb.st_size - total);
-+ if (bytes_read <= 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Error reading \"%s\": %s",
-+ filename_c,
-+ _dbus_strerror (errno));
-+
-+ _dbus_verbose ("read() failed: %s",
-+ _dbus_strerror (errno));
-+
-+ close (fd);
-+ _dbus_string_set_length (str, orig_len);
-+ return FALSE;
-+ }
-+ else
-+ total += bytes_read;
-+ }
-+
-+ close (fd);
-+ return TRUE;
-+ }
-+ else if (sb.st_size != 0)
-+ {
-+ _dbus_verbose ("Can only open regular files at the moment.\n");
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "\"%s\" is not a regular file",
-+ filename_c);
-+ close (fd);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ close (fd);
-+ return TRUE;
-+ }
-+}
-+
-+/**
-+ * Writes a string out to a file. If the file exists,
-+ * it will be atomically overwritten by the new data.
-+ *
-+ * @param str the string to write out
-+ * @param filename the file to save string to
-+ * @param error error to be filled in on failure
-+ * @returns #FALSE on failure
-+ */
-+dbus_bool_t
-+_dbus_string_save_to_file (const DBusString *str,
-+ const DBusString *filename,
-+ DBusError *error)
-+{
-+ int fd;
-+ int bytes_to_write;
-+ const char *filename_c;
-+ DBusString tmp_filename;
-+ const char *tmp_filename_c;
-+ int total;
-+ dbus_bool_t need_unlink;
-+ dbus_bool_t retval;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ fd = -1;
-+ retval = FALSE;
-+ need_unlink = FALSE;
-+
-+ if (!_dbus_string_init (&tmp_filename))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_copy (filename, 0, &tmp_filename, 0))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (&tmp_filename);
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append (&tmp_filename, "."))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (&tmp_filename);
-+ return FALSE;
-+ }
-+
-+#define N_TMP_FILENAME_RANDOM_BYTES 8
-+ if (!_dbus_generate_random_ascii (&tmp_filename, N_TMP_FILENAME_RANDOM_BYTES))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_string_free (&tmp_filename);
-+ return FALSE;
-+ }
-+
-+ filename_c = _dbus_string_get_const_data (filename);
-+ tmp_filename_c = _dbus_string_get_const_data (&tmp_filename);
-+
-+ fd = open (tmp_filename_c, O_WRONLY | O_BINARY | O_EXCL | O_CREAT,
-+ 0600);
-+ if (fd < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Could not create %s: %s", tmp_filename_c,
-+ _dbus_strerror (errno));
-+ goto out;
-+ }
-+
-+ need_unlink = TRUE;
-+
-+ total = 0;
-+ bytes_to_write = _dbus_string_get_length (str);
-+
-+ while (total < bytes_to_write)
-+ {
-+ int bytes_written;
-+
-+ bytes_written = _dbus_write (fd, str, total,
-+ bytes_to_write - total);
-+
-+ if (bytes_written <= 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Could not write to %s: %s", tmp_filename_c,
-+ _dbus_strerror (errno));
-+
-+ goto out;
-+ }
-+
-+ total += bytes_written;
-+ }
-+
-+ if (close (fd) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Could not close file %s: %s",
-+ tmp_filename_c, _dbus_strerror (errno));
-+
-+ goto out;
-+ }
-+
-+ fd = -1;
-+
-+ if (rename (tmp_filename_c, filename_c) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Could not rename %s to %s: %s",
-+ tmp_filename_c, filename_c,
-+ _dbus_strerror (errno));
-+
-+ goto out;
-+ }
-+
-+ need_unlink = FALSE;
-+
-+ retval = TRUE;
-+
-+ out:
-+ /* close first, then unlink, to prevent ".nfs34234235" garbage
-+ * files
-+ */
-+
-+ if (fd >= 0)
-+ close (fd);
-+
-+ if (need_unlink && unlink (tmp_filename_c) < 0)
-+ _dbus_verbose ("Failed to unlink temp file %s: %s\n",
-+ tmp_filename_c, _dbus_strerror (errno));
-+
-+ _dbus_string_free (&tmp_filename);
-+
-+ if (!retval)
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+
-+ return retval;
-+}
-+
-+/** Creates the given file, failing if the file already exists.
-+ *
-+ * @param filename the filename
-+ * @param error error location
-+ * @returns #TRUE if we created the file and it didn't exist
-+ */
-+dbus_bool_t
-+_dbus_create_file_exclusively (const DBusString *filename,
-+ DBusError *error)
-+{
-+ int fd;
-+ const char *filename_c;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ filename_c = _dbus_string_get_const_data (filename);
-+
-+ fd = open (filename_c, O_WRONLY | O_BINARY | O_EXCL | O_CREAT,
-+ 0600);
-+ if (fd < 0)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_FAILED,
-+ "Could not create file %s: %s\n",
-+ filename_c,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ if (close (fd) < 0)
-+ {
-+ dbus_set_error (error,
-+ DBUS_ERROR_FAILED,
-+ "Could not close file %s: %s\n",
-+ filename_c,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Deletes the given file.
-+ *
-+ * @param filename the filename
-+ * @param error error location
-+ *
-+ * @returns #TRUE if unlink() succeeded
-+ */
-+dbus_bool_t
-+_dbus_delete_file (const DBusString *filename,
-+ DBusError *error)
-+{
-+ const char *filename_c;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ filename_c = _dbus_string_get_const_data (filename);
-+
-+ if (unlink (filename_c) < 0)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Failed to delete file %s: %s\n",
-+ filename_c, _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+}
-+
-+/**
-+ * Creates a directory; succeeds if the directory
-+ * is created or already existed.
-+ *
-+ * @param filename directory filename
-+ * @param error initialized error object
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_create_directory (const DBusString *filename,
-+ DBusError *error)
-+{
-+ const char *filename_c;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ filename_c = _dbus_string_get_const_data (filename);
-+
-+ if (mkdir (filename_c, 0700) < 0)
-+ {
-+ if (errno == EEXIST)
-+ return TRUE;
-+
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "Failed to create directory %s: %s\n",
-+ filename_c, _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+}
-+
-+/**
-+ * Appends the given filename to the given directory.
-+ *
-+ * @todo it might be cute to collapse multiple '/' such as "foo//"
-+ * concat "//bar"
-+ *
-+ * @param dir the directory name
-+ * @param next_component the filename
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_concat_dir_and_file (DBusString *dir,
-+ const DBusString *next_component)
-+{
-+ dbus_bool_t dir_ends_in_slash;
-+ dbus_bool_t file_starts_with_slash;
-+
-+ if (_dbus_string_get_length (dir) == 0 ||
-+ _dbus_string_get_length (next_component) == 0)
-+ return TRUE;
-+
-+ dir_ends_in_slash = '/' == _dbus_string_get_byte (dir,
-+ _dbus_string_get_length (dir) - 1);
-+
-+ file_starts_with_slash = '/' == _dbus_string_get_byte (next_component, 0);
-+
-+ if (dir_ends_in_slash && file_starts_with_slash)
-+ {
-+ _dbus_string_shorten (dir, 1);
-+ }
-+ else if (!(dir_ends_in_slash || file_starts_with_slash))
-+ {
-+ if (!_dbus_string_append_byte (dir, '/'))
-+ return FALSE;
-+ }
-+
-+ return _dbus_string_copy (next_component, 0, dir,
-+ _dbus_string_get_length (dir));
-+}
-+
-+static void
-+pseudorandom_generate_random_bytes_buffer (char *buffer,
-+ int n_bytes)
-+{
-+ unsigned long tv_usec;
-+ int i;
-+
-+ /* fall back to pseudorandom */
-+ _dbus_verbose ("Falling back to pseudorandom for %d bytes\n",
-+ n_bytes);
-+
-+ _dbus_get_current_time (NULL, &tv_usec);
-+ srand (tv_usec);
-+
-+ i = 0;
-+ while (i < n_bytes)
-+ {
-+ double r;
-+ unsigned int b;
-+
-+ r = rand ();
-+ b = (r / (double) RAND_MAX) * 255.0;
-+
-+ buffer[i] = b;
-+
-+ ++i;
-+ }
-+}
-+
-+static dbus_bool_t
-+pseudorandom_generate_random_bytes (DBusString *str,
-+ int n_bytes)
-+{
-+ int old_len;
-+ char *p;
-+
-+ old_len = _dbus_string_get_length (str);
-+
-+ if (!_dbus_string_lengthen (str, n_bytes))
-+ return FALSE;
-+
-+ p = _dbus_string_get_data_len (str, old_len, n_bytes);
-+
-+ pseudorandom_generate_random_bytes_buffer (p, n_bytes);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Fills n_bytes of the given buffer with random bytes.
-+ *
-+ * @param buffer an allocated buffer
-+ * @param n_bytes the number of bytes in buffer to write to
-+ */
-+void
-+_dbus_generate_random_bytes_buffer (char *buffer,
-+ int n_bytes)
-+{
-+ DBusString str;
-+
-+ if (!_dbus_string_init (&str))
-+ {
-+ pseudorandom_generate_random_bytes_buffer (buffer, n_bytes);
-+ return;
-+ }
-+
-+ if (!_dbus_generate_random_bytes (&str, n_bytes))
-+ {
-+ _dbus_string_free (&str);
-+ pseudorandom_generate_random_bytes_buffer (buffer, n_bytes);
-+ return;
-+ }
-+
-+ _dbus_string_copy_to_buffer (&str, buffer, n_bytes);
-+
-+ _dbus_string_free (&str);
-+}
-+
-+/**
-+ * Generates the given number of random bytes,
-+ * using the best mechanism we can come up with.
-+ *
-+ * @param str the string
-+ * @param n_bytes the number of random bytes to append to string
-+ * @returns #TRUE on success, #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_generate_random_bytes (DBusString *str,
-+ int n_bytes)
-+{
-+ int old_len;
-+ int fd;
-+
-+ /* FALSE return means "no memory", if it could
-+ * mean something else then we'd need to return
-+ * a DBusError. So we always fall back to pseudorandom
-+ * if the I/O fails.
-+ */
-+
-+ old_len = _dbus_string_get_length (str);
-+ fd = -1;
-+
-+ /* note, urandom on linux will fall back to pseudorandom */
-+ fd = open ("/dev/urandom", O_RDONLY);
-+ if (fd < 0)
-+ return pseudorandom_generate_random_bytes (str, n_bytes);
-+
-+ if (_dbus_read (fd, str, n_bytes) != n_bytes)
-+ {
-+ close (fd);
-+ _dbus_string_set_length (str, old_len);
-+ return pseudorandom_generate_random_bytes (str, n_bytes);
-+ }
-+
-+ _dbus_verbose ("Read %d bytes from /dev/urandom\n",
-+ n_bytes);
-+
-+ close (fd);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Generates the given number of random bytes, where the bytes are
-+ * chosen from the alphanumeric ASCII subset.
-+ *
-+ * @param str the string
-+ * @param n_bytes the number of random ASCII bytes to append to string
-+ * @returns #TRUE on success, #FALSE if no memory or other failure
-+ */
-+dbus_bool_t
-+_dbus_generate_random_ascii (DBusString *str,
-+ int n_bytes)
-+{
-+ static const char letters[] =
-+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
-+ int i;
-+ int len;
-+
-+ if (!_dbus_generate_random_bytes (str, n_bytes))
-+ return FALSE;
-+
-+ len = _dbus_string_get_length (str);
-+ i = len - n_bytes;
-+ while (i < len)
-+ {
-+ _dbus_string_set_byte (str, i,
-+ letters[_dbus_string_get_byte (str, i) %
-+ (sizeof (letters) - 1)]);
-+
-+ ++i;
-+ }
-+
-+ _dbus_assert (_dbus_string_validate_ascii (str, len - n_bytes,
-+ n_bytes));
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * A wrapper around strerror() because some platforms
-+ * may be lame and not have strerror().
-+ *
-+ * @param error_number errno.
-+ * @returns error description.
-+ */
-+const char*
-+_dbus_strerror (int error_number)
-+{
-+ const char *msg;
-+
-+ msg = strerror (error_number);
-+ if (msg == NULL)
-+ msg = "unknown";
-+
-+ return msg;
-+}
-+
-+/**
-+ * signal (SIGPIPE, SIG_IGN);
-+ */
-+void
-+_dbus_disable_sigpipe (void)
-+{
-+ signal (SIGPIPE, SIG_IGN);
-+}
-+
-+/**
-+ * Sets the file descriptor to be close
-+ * on exec. Should be called for all file
-+ * descriptors in D-BUS code.
-+ *
-+ * @param fd the file descriptor
-+ */
-+void
-+_dbus_fd_set_close_on_exec (int fd)
-+{
-+ int val;
-+
-+ val = fcntl (fd, F_GETFD, 0);
-+
-+ if (val < 0)
-+ return;
-+
-+ val |= FD_CLOEXEC;
-+
-+ fcntl (fd, F_SETFD, val);
-+}
-+
-+/**
-+ * Converts a UNIX errno into a #DBusError name.
-+ *
-+ * @todo should cover more errnos, specifically those
-+ * from open().
-+ *
-+ * @param error_number the errno.
-+ * @returns an error name
-+ */
-+const char*
-+_dbus_error_from_errno (int error_number)
-+{
-+ switch (error_number)
-+ {
-+ case 0:
-+ return DBUS_ERROR_FAILED;
-+
-+#ifdef EPROTONOSUPPORT
-+ case EPROTONOSUPPORT:
-+ return DBUS_ERROR_NOT_SUPPORTED;
-+#endif
-+#ifdef EAFNOSUPPORT
-+ case EAFNOSUPPORT:
-+ return DBUS_ERROR_NOT_SUPPORTED;
-+#endif
-+#ifdef ENFILE
-+ case ENFILE:
-+ return DBUS_ERROR_LIMITS_EXCEEDED; /* kernel out of memory */
-+#endif
-+#ifdef EMFILE
-+ case EMFILE:
-+ return DBUS_ERROR_LIMITS_EXCEEDED;
-+#endif
-+#ifdef EACCES
-+ case EACCES:
-+ return DBUS_ERROR_ACCESS_DENIED;
-+#endif
-+#ifdef EPERM
-+ case EPERM:
-+ return DBUS_ERROR_ACCESS_DENIED;
-+#endif
-+#ifdef ENOBUFS
-+ case ENOBUFS:
-+ return DBUS_ERROR_NO_MEMORY;
-+#endif
-+#ifdef ENOMEM
-+ case ENOMEM:
-+ return DBUS_ERROR_NO_MEMORY;
-+#endif
-+#ifdef EINVAL
-+ case EINVAL:
-+ return DBUS_ERROR_FAILED;
-+#endif
-+#ifdef EBADF
-+ case EBADF:
-+ return DBUS_ERROR_FAILED;
-+#endif
-+#ifdef EFAULT
-+ case EFAULT:
-+ return DBUS_ERROR_FAILED;
-+#endif
-+#ifdef ENOTSOCK
-+ case ENOTSOCK:
-+ return DBUS_ERROR_FAILED;
-+#endif
-+#ifdef EISCONN
-+ case EISCONN:
-+ return DBUS_ERROR_FAILED;
-+#endif
-+#ifdef ECONNREFUSED
-+ case ECONNREFUSED:
-+ return DBUS_ERROR_NO_SERVER;
-+#endif
-+#ifdef ETIMEDOUT
-+ case ETIMEDOUT:
-+ return DBUS_ERROR_TIMEOUT;
-+#endif
-+#ifdef ENETUNREACH
-+ case ENETUNREACH:
-+ return DBUS_ERROR_NO_NETWORK;
-+#endif
-+#ifdef EADDRINUSE
-+ case EADDRINUSE:
-+ return DBUS_ERROR_ADDRESS_IN_USE;
-+#endif
-+#ifdef EEXIST
-+ case EEXIST:
-+ return DBUS_ERROR_FILE_NOT_FOUND;
-+#endif
-+#ifdef ENOENT
-+ case ENOENT:
-+ return DBUS_ERROR_FILE_NOT_FOUND;
-+#endif
-+ }
-+
-+ return DBUS_ERROR_FAILED;
-+}
-+
-+/**
-+ * Exit the process, returning the given value.
-+ *
-+ * @param code the exit code
-+ */
-+void
-+_dbus_exit (int code)
-+{
-+ _exit (code);
-+}
-+
-+/**
-+ * Closes a file descriptor.
-+ *
-+ * @param fd the file descriptor
-+ * @param error error object
-+ * @returns #FALSE if error set
-+ */
-+dbus_bool_t
-+_dbus_close (int fd,
-+ DBusError *error)
-+{
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ again:
-+ if (close (fd) < 0)
-+ {
-+ if (errno == EINTR)
-+ goto again;
-+
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Could not close fd %d", fd);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Sets a file descriptor to be nonblocking.
-+ *
-+ * @param fd the file descriptor.
-+ * @param error address of error location.
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_set_fd_nonblocking (int fd,
-+ DBusError *error)
-+{
-+ int val;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ val = fcntl (fd, F_GETFL, 0);
-+ if (val < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to get flags from file descriptor %d: %s",
-+ fd, _dbus_strerror (errno));
-+ _dbus_verbose ("Failed to get flags for fd %d: %s\n", fd,
-+ _dbus_strerror (errno));
-+ return FALSE;
-+ }
-+
-+ if (fcntl (fd, F_SETFL, val | O_NONBLOCK) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Failed to set nonblocking flag of file descriptor %d: %s",
-+ fd, _dbus_strerror (errno));
-+ _dbus_verbose ("Failed to set fd %d nonblocking: %s\n",
-+ fd, _dbus_strerror (errno));
-+
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+#if !defined (DBUS_DISABLE_ASSERT) || defined(DBUS_BUILD_TESTS)
-+/**
-+ * On GNU libc systems, print a crude backtrace to the verbose log.
-+ * On other systems, print "no backtrace support"
-+ *
-+ */
-+void
-+_dbus_print_backtrace (void)
-+{
-+#if defined (HAVE_BACKTRACE) && defined (DBUS_ENABLE_VERBOSE_MODE)
-+ void *bt[500];
-+ int bt_size;
-+ int i;
-+ char **syms;
-+
-+ bt_size = backtrace (bt, 500);
-+
-+ syms = backtrace_symbols (bt, bt_size);
-+
-+ i = 0;
-+ while (i < bt_size)
-+ {
-+ _dbus_verbose (" %s\n", syms[i]);
-+ ++i;
-+ }
-+
-+ free (syms);
-+#else
-+ _dbus_verbose (" D-BUS not compiled with backtrace support\n");
-+#endif
-+}
-+#endif /* asserts or tests enabled */
-+
-+
-+/**
-+ * Gets a UID from a UID string.
-+ *
-+ * @param uid_str the UID in string form
-+ * @param uid UID to fill in
-+ * @returns #TRUE if successfully filled in UID
-+ */
-+dbus_bool_t
-+_dbus_parse_uid (const DBusString *uid_str,
-+ dbus_uid_t *uid)
-+{
-+ int end;
-+ long val;
-+
-+ if (_dbus_string_get_length (uid_str) == 0)
-+ {
-+ _dbus_verbose ("UID string was zero length\n");
-+ return FALSE;
-+ }
-+
-+ val = -1;
-+ end = 0;
-+ if (!_dbus_string_parse_int (uid_str, 0, &val,
-+ &end))
-+ {
-+ _dbus_verbose ("could not parse string as a UID\n");
-+ return FALSE;
-+ }
-+
-+ if (end != _dbus_string_get_length (uid_str))
-+ {
-+ _dbus_verbose ("string contained trailing stuff after UID\n");
-+ return FALSE;
-+ }
-+
-+ *uid = val;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Creates a full-duplex pipe (as in socketpair()).
-+ * Sets both ends of the pipe nonblocking.
-+ *
-+ * @todo libdbus only uses this for the debug-pipe server, so in
-+ * principle it could be in dbus-sysdeps-util.c, except that
-+ * dbus-sysdeps-util.c isn't in libdbus when tests are enabled and the
-+ * debug-pipe server is used.
-+ *
-+ * @param fd1 return location for one end
-+ * @param fd2 return location for the other end
-+ * @param blocking #TRUE if pipe should be blocking
-+ * @param error error return
-+ * @returns #FALSE on failure (if error is set)
-+ */
-+dbus_bool_t
-+_dbus_full_duplex_pipe (int *fd1,
-+ int *fd2,
-+ dbus_bool_t blocking,
-+ DBusError *error)
-+{
-+#ifdef HAVE_SOCKETPAIR
-+ int fds[2];
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (socketpair (AF_UNIX, SOCK_STREAM, 0, fds) < 0)
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Could not create full-duplex pipe");
-+ return FALSE;
-+ }
-+
-+ if (!blocking &&
-+ (!_dbus_set_fd_nonblocking (fds[0], NULL) ||
-+ !_dbus_set_fd_nonblocking (fds[1], NULL)))
-+ {
-+ dbus_set_error (error, _dbus_error_from_errno (errno),
-+ "Could not set full-duplex pipe nonblocking");
-+
-+ close (fds[0]);
-+ close (fds[1]);
-+
-+ return FALSE;
-+ }
-+
-+ *fd1 = fds[0];
-+ *fd2 = fds[1];
-+
-+ _dbus_verbose ("full-duplex pipe %d <-> %d\n",
-+ *fd1, *fd2);
-+
-+ return TRUE;
-+#else
-+ _dbus_warn ("_dbus_full_duplex_pipe() not implemented on this OS\n");
-+ dbus_set_error (error, DBUS_ERROR_FAILED,
-+ "_dbus_full_duplex_pipe() not implemented on this OS");
-+ return FALSE;
-+#endif
-+}
-+
-+/** @} end of sysdeps */
-+
-+/* tests in dbus-sysdeps-util.c */
-diff -Naur dbus-0.61.orig/dbus/dbus-sysdeps.h dbus-0.61/dbus/dbus-sysdeps.h
---- dbus-0.61.orig/dbus/dbus-sysdeps.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-sysdeps.h 2005-07-08 16:36:22.000000000 +0200
-@@ -0,0 +1,355 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-sysdeps.h Wrappers around system/libc features (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat, Inc.
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_SYSDEPS_H
-+#define DBUS_SYSDEPS_H
-+
-+#include <config.h>
-+
-+#include <dbus/dbus-errors.h>
-+
-+/* this is perhaps bogus, but strcmp() etc. are faster if we use the
-+ * stuff straight out of string.h, so have this here for now.
-+ */
-+#include <string.h>
-+
-+/* and it would just be annoying to abstract this */
-+#include <errno.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+/* The idea of this file is to encapsulate everywhere that we're
-+ * relying on external libc features, for ease of security
-+ * auditing. The idea is from vsftpd. This also gives us a chance to
-+ * make things more convenient to use, e.g. by reading into a
-+ * DBusString. Operating system headers aren't intended to be used
-+ * outside of this file and a limited number of others (such as
-+ * dbus-memory.c)
-+ */
-+
-+typedef struct DBusString DBusString;
-+
-+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
-+#define _DBUS_GNUC_PRINTF( format_idx, arg_idx ) \
-+ __attribute__((__format__ (__printf__, format_idx, arg_idx)))
-+#define _DBUS_GNUC_SCANF( format_idx, arg_idx ) \
-+ __attribute__((__format__ (__scanf__, format_idx, arg_idx)))
-+#define _DBUS_GNUC_FORMAT( arg_idx ) \
-+ __attribute__((__format_arg__ (arg_idx)))
-+#define _DBUS_GNUC_NORETURN \
-+ __attribute__((__noreturn__))
-+#else /* !__GNUC__ */
-+#define _DBUS_GNUC_PRINTF( format_idx, arg_idx )
-+#define _DBUS_GNUC_SCANF( format_idx, arg_idx )
-+#define _DBUS_GNUC_FORMAT( arg_idx )
-+#define _DBUS_GNUC_NORETURN
-+#endif /* !__GNUC__ */
-+
-+void _dbus_abort (void) _DBUS_GNUC_NORETURN;
-+
-+const char* _dbus_getenv (const char *varname);
-+dbus_bool_t _dbus_setenv (const char *varname,
-+ const char *value);
-+
-+int _dbus_read (int fd,
-+ DBusString *buffer,
-+ int count);
-+int _dbus_write (int fd,
-+ const DBusString *buffer,
-+ int start,
-+ int len);
-+int _dbus_write_two (int fd,
-+ const DBusString *buffer1,
-+ int start1,
-+ int len1,
-+ const DBusString *buffer2,
-+ int start2,
-+ int len2);
-+
-+typedef unsigned long dbus_pid_t;
-+typedef unsigned long dbus_uid_t;
-+typedef unsigned long dbus_gid_t;
-+
-+#define DBUS_PID_UNSET ((dbus_pid_t) -1)
-+#define DBUS_UID_UNSET ((dbus_uid_t) -1)
-+#define DBUS_GID_UNSET ((dbus_gid_t) -1)
-+
-+#define DBUS_PID_FORMAT "%lu"
-+#define DBUS_UID_FORMAT "%lu"
-+#define DBUS_GID_FORMAT "%lu"
-+
-+/**
-+ * Struct representing socket credentials
-+ */
-+typedef struct
-+{
-+ dbus_pid_t pid; /**< process ID or DBUS_PID_UNSET */
-+ dbus_uid_t uid; /**< user ID or DBUS_UID_UNSET */
-+ dbus_gid_t gid; /**< group ID or DBUS_GID_UNSET */
-+} DBusCredentials;
-+
-+int _dbus_connect_unix_socket (const char *path,
-+ dbus_bool_t abstract,
-+ DBusError *error);
-+int _dbus_listen_unix_socket (const char *path,
-+ dbus_bool_t abstract,
-+ DBusError *error);
-+int _dbus_connect_tcp_socket (const char *host,
-+ dbus_uint32_t port,
-+ DBusError *error);
-+int _dbus_listen_tcp_socket (const char *host,
-+ dbus_uint32_t port,
-+ DBusError *error);
-+int _dbus_accept (int listen_fd);
-+
-+dbus_bool_t _dbus_read_credentials_unix_socket (int client_fd,
-+ DBusCredentials *credentials,
-+ DBusError *error);
-+dbus_bool_t _dbus_send_credentials_unix_socket (int server_fd,
-+ DBusError *error);
-+
-+
-+void _dbus_credentials_clear (DBusCredentials *credentials);
-+void _dbus_credentials_from_current_process (DBusCredentials *credentials);
-+dbus_bool_t _dbus_credentials_match (const DBusCredentials *expected_credentials,
-+ const DBusCredentials *provided_credentials);
-+
-+
-+typedef struct DBusUserInfo DBusUserInfo;
-+typedef struct DBusGroupInfo DBusGroupInfo;
-+
-+/**
-+ * Information about a UNIX user
-+ */
-+struct DBusUserInfo
-+{
-+ dbus_uid_t uid; /**< UID */
-+ dbus_gid_t primary_gid; /**< GID */
-+ dbus_gid_t *group_ids; /**< Groups IDs, *including* above primary group */
-+ int n_group_ids; /**< Size of group IDs array */
-+ char *username; /**< Username */
-+ char *homedir; /**< Home directory */
-+};
-+
-+/**
-+ * Information about a UNIX group
-+ */
-+struct DBusGroupInfo
-+{
-+ dbus_gid_t gid; /**< GID */
-+ char *groupname; /**< Group name */
-+};
-+
-+dbus_bool_t _dbus_user_info_fill (DBusUserInfo *info,
-+ const DBusString *username,
-+ DBusError *error);
-+dbus_bool_t _dbus_user_info_fill_uid (DBusUserInfo *info,
-+ dbus_uid_t uid,
-+ DBusError *error);
-+void _dbus_user_info_free (DBusUserInfo *info);
-+
-+dbus_bool_t _dbus_group_info_fill (DBusGroupInfo *info,
-+ const DBusString *groupname,
-+ DBusError *error);
-+dbus_bool_t _dbus_group_info_fill_gid (DBusGroupInfo *info,
-+ dbus_gid_t gid,
-+ DBusError *error);
-+void _dbus_group_info_free (DBusGroupInfo *info);
-+
-+
-+unsigned long _dbus_getpid (void);
-+dbus_uid_t _dbus_getuid (void);
-+dbus_gid_t _dbus_getgid (void);
-+
-+typedef struct DBusAtomic DBusAtomic;
-+
-+/**
-+ * An atomic integer.
-+ */
-+struct DBusAtomic
-+{
-+ volatile dbus_int32_t value; /**< Value of the atomic integer. */
-+};
-+
-+dbus_int32_t _dbus_atomic_inc (DBusAtomic *atomic);
-+dbus_int32_t _dbus_atomic_dec (DBusAtomic *atomic);
-+
-+#define _DBUS_POLLIN 0x0001 /* There is data to read */
-+#define _DBUS_POLLPRI 0x0002 /* There is urgent data to read */
-+#define _DBUS_POLLOUT 0x0004 /* Writing now will not block */
-+#define _DBUS_POLLERR 0x0008 /* Error condition */
-+#define _DBUS_POLLHUP 0x0010 /* Hung up */
-+#define _DBUS_POLLNVAL 0x0020 /* Invalid request: fd not open */
-+
-+/**
-+ * A portable struct pollfd wrapper.
-+ */
-+typedef struct
-+{
-+ int fd; /**< File descriptor */
-+ short events; /**< Events to poll for */
-+ short revents; /**< Events that occurred */
-+} DBusPollFD;
-+
-+int _dbus_poll (DBusPollFD *fds,
-+ int n_fds,
-+ int timeout_milliseconds);
-+
-+void _dbus_sleep_milliseconds (int milliseconds);
-+
-+void _dbus_get_current_time (long *tv_sec,
-+ long *tv_usec);
-+
-+
-+dbus_bool_t _dbus_file_get_contents (DBusString *str,
-+ const DBusString *filename,
-+ DBusError *error);
-+dbus_bool_t _dbus_string_save_to_file (const DBusString *str,
-+ const DBusString *filename,
-+ DBusError *error);
-+
-+dbus_bool_t _dbus_create_file_exclusively (const DBusString *filename,
-+ DBusError *error);
-+dbus_bool_t _dbus_delete_file (const DBusString *filename,
-+ DBusError *error);
-+dbus_bool_t _dbus_create_directory (const DBusString *filename,
-+ DBusError *error);
-+dbus_bool_t _dbus_delete_directory (const DBusString *filename,
-+ DBusError *error);
-+
-+dbus_bool_t _dbus_concat_dir_and_file (DBusString *dir,
-+ const DBusString *next_component);
-+dbus_bool_t _dbus_string_get_dirname (const DBusString *filename,
-+ DBusString *dirname);
-+dbus_bool_t _dbus_path_is_absolute (const DBusString *filename);
-+
-+typedef struct DBusDirIter DBusDirIter;
-+
-+DBusDirIter* _dbus_directory_open (const DBusString *filename,
-+ DBusError *error);
-+dbus_bool_t _dbus_directory_get_next_file (DBusDirIter *iter,
-+ DBusString *filename,
-+ DBusError *error);
-+void _dbus_directory_close (DBusDirIter *iter);
-+
-+dbus_bool_t _dbus_check_dir_is_private_to_user (DBusString *dir,
-+ DBusError *error);
-+
-+void _dbus_generate_random_bytes_buffer (char *buffer,
-+ int n_bytes);
-+dbus_bool_t _dbus_generate_random_bytes (DBusString *str,
-+ int n_bytes);
-+dbus_bool_t _dbus_generate_random_ascii (DBusString *str,
-+ int n_bytes);
-+
-+const char *_dbus_errno_to_string (int errnum);
-+const char* _dbus_error_from_errno (int error_number);
-+
-+void _dbus_disable_sigpipe (void);
-+
-+void _dbus_fd_set_close_on_exec (int fd);
-+
-+void _dbus_exit (int code) _DBUS_GNUC_NORETURN;
-+
-+/**
-+ * Portable struct with stat() results
-+ */
-+typedef struct
-+{
-+ unsigned long mode; /**< File mode */
-+ unsigned long nlink; /**< Number of hard links */
-+ dbus_uid_t uid; /**< User owning file */
-+ dbus_gid_t gid; /**< Group owning file */
-+ unsigned long size; /**< Size of file */
-+ unsigned long atime; /**< Access time */
-+ unsigned long mtime; /**< Modify time */
-+ unsigned long ctime; /**< Creation time */
-+} DBusStat;
-+
-+dbus_bool_t _dbus_stat (const DBusString *filename,
-+ DBusStat *statbuf,
-+ DBusError *error);
-+dbus_bool_t _dbus_full_duplex_pipe (int *fd1,
-+ int *fd2,
-+ dbus_bool_t blocking,
-+ DBusError *error);
-+dbus_bool_t _dbus_close (int fd,
-+ DBusError *error);
-+
-+void _dbus_print_backtrace (void);
-+
-+dbus_bool_t _dbus_become_daemon (const DBusString *pidfile,
-+ int print_pid_fd,
-+ DBusError *error);
-+dbus_bool_t _dbus_write_pid_file (const DBusString *filename,
-+ unsigned long pid,
-+ DBusError *error);
-+dbus_bool_t _dbus_change_identity (unsigned long uid,
-+ unsigned long gid,
-+ DBusError *error);
-+
-+typedef void (* DBusSignalHandler) (int sig);
-+
-+void _dbus_set_signal_handler (int sig,
-+ DBusSignalHandler handler);
-+
-+dbus_bool_t _dbus_file_exists (const char *file);
-+dbus_bool_t _dbus_user_at_console (const char *username,
-+ DBusError *error);
-+
-+/* Define DBUS_VA_COPY() to do the right thing for copying va_list variables.
-+ * config.h may have already defined DBUS_VA_COPY as va_copy or __va_copy.
-+ */
-+#if !defined (DBUS_VA_COPY)
-+# if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
-+# define DBUS_VA_COPY(ap1, ap2) (*(ap1) = *(ap2))
-+# elif defined (DBUS_VA_COPY_AS_ARRAY)
-+# define DBUS_VA_COPY(ap1, ap2) memcpy ((ap1), (ap2), sizeof (va_list))
-+# else /* va_list is a pointer */
-+# define DBUS_VA_COPY(ap1, ap2) ((ap1) = (ap2))
-+# endif /* va_list is a pointer */
-+#endif /* !DBUS_VA_COPY */
-+
-+/* On x86 there is an 80-bit FPU, and if you do "a == b" it may have a
-+ * or b in an 80-bit register, thus failing to compare the two 64-bit
-+ * doubles for bitwise equality.
-+ */
-+#define _DBUS_BYTE_OF_PRIMITIVE(p, i) \
-+ (((const char*)&(p))[(i)])
-+#define _DBUS_DOUBLES_BITWISE_EQUAL(a, b) \
-+ (_DBUS_BYTE_OF_PRIMITIVE (a, 0) == _DBUS_BYTE_OF_PRIMITIVE (b, 0) && \
-+ _DBUS_BYTE_OF_PRIMITIVE (a, 1) == _DBUS_BYTE_OF_PRIMITIVE (b, 1) && \
-+ _DBUS_BYTE_OF_PRIMITIVE (a, 2) == _DBUS_BYTE_OF_PRIMITIVE (b, 2) && \
-+ _DBUS_BYTE_OF_PRIMITIVE (a, 3) == _DBUS_BYTE_OF_PRIMITIVE (b, 3) && \
-+ _DBUS_BYTE_OF_PRIMITIVE (a, 4) == _DBUS_BYTE_OF_PRIMITIVE (b, 4) && \
-+ _DBUS_BYTE_OF_PRIMITIVE (a, 5) == _DBUS_BYTE_OF_PRIMITIVE (b, 5) && \
-+ _DBUS_BYTE_OF_PRIMITIVE (a, 6) == _DBUS_BYTE_OF_PRIMITIVE (b, 6) && \
-+ _DBUS_BYTE_OF_PRIMITIVE (a, 7) == _DBUS_BYTE_OF_PRIMITIVE (b, 7))
-+
-+dbus_bool_t _dbus_parse_uid (const DBusString *uid_str,
-+ dbus_uid_t *uid);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_SYSDEPS_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-test-main.c dbus-0.61/dbus/dbus-test-main.c
---- dbus-0.61.orig/dbus/dbus-test-main.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-test-main.c 2005-02-21 20:38:06.000000000 +0100
-@@ -0,0 +1,54 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-test.c Program to run all tests
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+
-+#include "dbus-types.h"
-+#include "dbus-test.h"
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <locale.h>
-+
-+int
-+main (int argc,
-+ char **argv)
-+{
-+ const char *test_data_dir;
-+ const char *specific_test;
-+
-+ setlocale(LC_ALL, "");
-+
-+
-+ if (argc > 1)
-+ test_data_dir = argv[1];
-+ else
-+ test_data_dir = NULL;
-+
-+ if (argc > 2)
-+ specific_test = argv[2];
-+ else
-+ specific_test = NULL;
-+
-+ dbus_internal_do_not_use_run_tests (test_data_dir, specific_test);
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/dbus/dbus-test.c dbus-0.61/dbus/dbus-test.c
---- dbus-0.61.orig/dbus/dbus-test.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-test.c 2005-02-24 17:03:56.000000000 +0100
-@@ -0,0 +1,181 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-test.c Program to run all tests
-+ *
-+ * Copyright (C) 2002, 2003, 2004, 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "dbus-test.h"
-+#include "dbus-sysdeps.h"
-+#include "dbus-internals.h"
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+static void
-+die (const char *failure)
-+{
-+ fprintf (stderr, "Unit test failed: %s\n", failure);
-+ exit (1);
-+}
-+
-+static void
-+check_memleaks (void)
-+{
-+ dbus_shutdown ();
-+
-+ printf ("%s: checking for memleaks\n", "dbus-test");
-+ if (_dbus_get_malloc_blocks_outstanding () != 0)
-+ {
-+ _dbus_warn ("%d dbus_malloc blocks were not freed\n",
-+ _dbus_get_malloc_blocks_outstanding ());
-+ die ("memleaks");
-+ }
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-+
-+typedef dbus_bool_t (*TestFunc)(void);
-+typedef dbus_bool_t (*TestDataFunc)(const char *data);
-+
-+static void
-+run_test (const char *test_name,
-+ const char *specific_test,
-+ TestFunc test)
-+{
-+ if (!specific_test || strcmp (specific_test, test_name) == 0)
-+ {
-+ printf ("%s: running %s tests\n", "dbus-test", test_name);
-+ if (!test ())
-+ die (test_name);
-+ }
-+
-+ check_memleaks ();
-+}
-+
-+static void
-+run_data_test (const char *test_name,
-+ const char *specific_test,
-+ TestDataFunc test,
-+ const char *test_data_dir)
-+{
-+ if (!specific_test || strcmp (specific_test, test_name) == 0)
-+ {
-+ printf ("%s: running %s tests\n", "dbus-test", test_name);
-+ if (!test (test_data_dir))
-+ die (test_name);
-+ }
-+
-+ check_memleaks ();
-+}
-+
-+/**
-+ * An exported symbol to be run in order to execute
-+ * unit tests. Should not be used by
-+ * any app other than our test app, this symbol
-+ * won't exist in some builds of the library.
-+ * (with --enable-tests=no)
-+ *
-+ * @param test_data_dir the directory with test data (test/data normally)
-+ */
-+void
-+dbus_internal_do_not_use_run_tests (const char *test_data_dir, const char *specific_test)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ if (!_dbus_threads_init_debug ())
-+ die ("debug threads init");
-+
-+ if (test_data_dir == NULL)
-+ test_data_dir = _dbus_getenv ("DBUS_TEST_DATA");
-+
-+ if (test_data_dir != NULL)
-+ printf ("Test data in %s\n", test_data_dir);
-+ else
-+ printf ("No test data!\n");
-+
-+ run_test ("string", specific_test, _dbus_string_test);
-+
-+ run_test ("sysdeps", specific_test, _dbus_sysdeps_test);
-+
-+ run_test ("data-slot", specific_test, _dbus_data_slot_test);
-+
-+ run_test ("address", specific_test, _dbus_address_test);
-+
-+ run_test ("server", specific_test, _dbus_server_test);
-+
-+ run_test ("object-tree", specific_test, _dbus_object_tree_test);
-+
-+ run_test ("signature", specific_test, _dbus_signature_test);
-+
-+ run_test ("marshalling", specific_test, _dbus_marshal_test);
-+
-+#if 0
-+ printf ("%s: running recursive marshalling tests\n", "dbus-test");
-+ if (!_dbus_marshal_recursive_test ())
-+ die ("recursive marshal");
-+
-+ check_memleaks ();
-+#else
-+ _dbus_warn ("recursive marshal tests disabled\n");
-+#endif
-+
-+ run_test ("byteswap", specific_test, _dbus_marshal_byteswap_test);
-+
-+ run_test ("memory", specific_test, _dbus_memory_test);
-+
-+#if 1
-+ run_test ("mem-pool", specific_test, _dbus_mem_pool_test);
-+#endif
-+
-+ run_test ("list", specific_test, _dbus_list_test);
-+
-+ run_test ("marshal-validate", specific_test, _dbus_marshal_validate_test);
-+
-+ run_test ("marshal-header", specific_test, _dbus_marshal_header_test);
-+
-+ run_data_test ("message", specific_test, _dbus_message_test, test_data_dir);
-+
-+ run_test ("hash", specific_test, _dbus_hash_test);
-+
-+ run_data_test ("spawn", specific_test, _dbus_spawn_test, test_data_dir);
-+
-+ run_data_test ("userdb", specific_test, _dbus_userdb_test, test_data_dir);
-+
-+ run_test ("keyring", specific_test, _dbus_keyring_test);
-+
-+#if 0
-+ printf ("%s: running md5 tests\n", "dbus-test");
-+ if (!_dbus_md5_test ())
-+ die ("md5");
-+
-+ check_memleaks ();
-+#endif
-+
-+ run_data_test ("sha", specific_test, _dbus_sha_test, test_data_dir);
-+
-+ run_data_test ("auth", specific_test, _dbus_auth_test, test_data_dir);
-+
-+ run_data_test ("pending-call", specific_test, _dbus_pending_call_test, test_data_dir);
-+
-+ printf ("%s: completed successfully\n", "dbus-test");
-+#else
-+ printf ("Not compiled with unit tests, not running any\n");
-+#endif
-+}
-diff -Naur dbus-0.61.orig/dbus/dbus-test.h dbus-0.61/dbus/dbus-test.h
---- dbus-0.61.orig/dbus/dbus-test.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-test.h 2005-02-24 17:03:56.000000000 +0100
-@@ -0,0 +1,81 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-test.h Declarations of test functions.
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_TEST_H
-+#define DBUS_TEST_H
-+
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-marshal-validate.h>
-+
-+dbus_bool_t _dbus_hash_test (void);
-+dbus_bool_t _dbus_dict_test (void);
-+dbus_bool_t _dbus_list_test (void);
-+dbus_bool_t _dbus_marshal_test (void);
-+dbus_bool_t _dbus_marshal_recursive_test (void);
-+dbus_bool_t _dbus_marshal_byteswap_test (void);
-+dbus_bool_t _dbus_marshal_header_test (void);
-+dbus_bool_t _dbus_marshal_validate_test (void);
-+dbus_bool_t _dbus_signature_test (void);
-+dbus_bool_t _dbus_mem_pool_test (void);
-+dbus_bool_t _dbus_string_test (void);
-+dbus_bool_t _dbus_address_test (void);
-+dbus_bool_t _dbus_server_test (void);
-+dbus_bool_t _dbus_message_test (const char *test_data_dir);
-+dbus_bool_t _dbus_auth_test (const char *test_data_dir);
-+dbus_bool_t _dbus_md5_test (void);
-+dbus_bool_t _dbus_sha_test (const char *test_data_dir);
-+dbus_bool_t _dbus_keyring_test (void);
-+dbus_bool_t _dbus_data_slot_test (void);
-+dbus_bool_t _dbus_sysdeps_test (void);
-+dbus_bool_t _dbus_spawn_test (const char *test_data_dir);
-+dbus_bool_t _dbus_userdb_test (const char *test_data_dir);
-+dbus_bool_t _dbus_memory_test (void);
-+dbus_bool_t _dbus_object_tree_test (void);
-+dbus_bool_t _dbus_pending_call_test (const char *test_data_dir);
-+
-+void dbus_internal_do_not_use_run_tests (const char *test_data_dir,
-+ const char *specific_test);
-+dbus_bool_t dbus_internal_do_not_use_try_message_file (const DBusString *filename,
-+ DBusValidity expected_validity);
-+dbus_bool_t dbus_internal_do_not_use_try_message_data (const DBusString *data,
-+ DBusValidity expected_validity);
-+dbus_bool_t dbus_internal_do_not_use_load_message_file (const DBusString *filename,
-+ DBusString *data);
-+
-+
-+/* returns FALSE on fatal failure */
-+typedef dbus_bool_t (* DBusForeachMessageFileFunc) (const DBusString *filename,
-+ DBusValidity expected_validity,
-+ void *data);
-+
-+dbus_bool_t dbus_internal_do_not_use_foreach_message_file (const char *test_data_dir,
-+ DBusForeachMessageFileFunc func,
-+ void *user_data);
-+dbus_bool_t dbus_internal_do_not_use_generate_bodies (int sequence,
-+ int byte_order,
-+ DBusString *signature,
-+ DBusString *body);
-+
-+
-+#endif /* DBUS_TEST_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-threads-internal.h dbus-0.61/dbus/dbus-threads-internal.h
---- dbus-0.61.orig/dbus/dbus-threads-internal.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-threads-internal.h 2005-02-24 20:00:57.000000000 +0100
-@@ -0,0 +1,50 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-threads-internal.h D-BUS thread primitives
-+ *
-+ * Copyright (C) 2002, 2005 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_THREADS_INTERNAL_H
-+#define DBUS_THREADS_INTERNAL_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-types.h>
-+#include <dbus/dbus-threads.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+DBusMutex* _dbus_mutex_new (void);
-+void _dbus_mutex_free (DBusMutex *mutex);
-+dbus_bool_t _dbus_mutex_lock (DBusMutex *mutex);
-+dbus_bool_t _dbus_mutex_unlock (DBusMutex *mutex);
-+
-+DBusCondVar* _dbus_condvar_new (void);
-+void _dbus_condvar_free (DBusCondVar *cond);
-+void _dbus_condvar_wait (DBusCondVar *cond,
-+ DBusMutex *mutex);
-+dbus_bool_t _dbus_condvar_wait_timeout (DBusCondVar *cond,
-+ DBusMutex *mutex,
-+ int timeout_milliseconds);
-+void _dbus_condvar_wake_one (DBusCondVar *cond);
-+void _dbus_condvar_wake_all (DBusCondVar *cond);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_THREADS_INTERNAL_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-threads.c dbus-0.61/dbus/dbus-threads.c
---- dbus-0.61.orig/dbus/dbus-threads.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-threads.c 2005-02-26 07:37:46.000000000 +0100
-@@ -0,0 +1,522 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-threads.h D-BUS threads handling
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-threads.h"
-+#include "dbus-internals.h"
-+#include "dbus-threads-internal.h"
-+
-+static DBusThreadFunctions thread_functions =
-+{
-+ 0,
-+ NULL, NULL, NULL, NULL,
-+ NULL, NULL, NULL, NULL, NULL,
-+
-+ NULL, NULL, NULL, NULL,
-+ NULL, NULL, NULL, NULL
-+};
-+static int thread_init_generation = 0;
-+
-+/** This is used for the no-op default mutex pointer, just to be distinct from #NULL */
-+#define _DBUS_DUMMY_MUTEX ((DBusMutex*)0xABCDEF)
-+
-+/** This is used for the no-op default mutex pointer, just to be distinct from #NULL */
-+#define _DBUS_DUMMY_CONDVAR ((DBusCondVar*)0xABCDEF2)
-+
-+/**
-+ * @defgroup DBusThreadsInternals Thread functions
-+ * @ingroup DBusInternals
-+ * @brief _dbus_mutex_lock(), etc.
-+ *
-+ * Functions and macros related to threads and thread locks.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Creates a new mutex using the function supplied to dbus_threads_init(),
-+ * or creates a no-op mutex if threads are not initialized.
-+ * May return #NULL even if threads are initialized, indicating
-+ * out-of-memory.
-+ *
-+ * @returns new mutex or #NULL
-+ */
-+DBusMutex*
-+_dbus_mutex_new (void)
-+{
-+ if (thread_functions.mutex_new)
-+ return (* thread_functions.mutex_new) ();
-+ else
-+ return _DBUS_DUMMY_MUTEX;
-+}
-+
-+/**
-+ * Frees a mutex created with dbus_mutex_new(); does
-+ * nothing if passed a #NULL pointer.
-+ */
-+void
-+_dbus_mutex_free (DBusMutex *mutex)
-+{
-+ if (mutex && thread_functions.mutex_free)
-+ (* thread_functions.mutex_free) (mutex);
-+}
-+
-+/**
-+ * Locks a mutex. Does nothing if passed a #NULL pointer.
-+ * Locks are not recursive.
-+ *
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_mutex_lock (DBusMutex *mutex)
-+{
-+ if (mutex && thread_functions.mutex_lock)
-+ return (* thread_functions.mutex_lock) (mutex);
-+ else
-+ return TRUE;
-+}
-+
-+/**
-+ * Unlocks a mutex. Does nothing if passed a #NULL pointer.
-+ *
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_mutex_unlock (DBusMutex *mutex)
-+{
-+ if (mutex && thread_functions.mutex_unlock)
-+ return (* thread_functions.mutex_unlock) (mutex);
-+ else
-+ return TRUE;
-+}
-+
-+/**
-+ * Creates a new condition variable using the function supplied
-+ * to dbus_threads_init(), or creates a no-op condition variable
-+ * if threads are not initialized. May return #NULL even if
-+ * threads are initialized, indicating out-of-memory.
-+ *
-+ * @returns new mutex or #NULL
-+ */
-+DBusCondVar *
-+_dbus_condvar_new (void)
-+{
-+ if (thread_functions.condvar_new)
-+ return (* thread_functions.condvar_new) ();
-+ else
-+ return _DBUS_DUMMY_CONDVAR;
-+}
-+
-+/**
-+ * Frees a conditional variable created with dbus_condvar_new(); does
-+ * nothing if passed a #NULL pointer.
-+ */
-+void
-+_dbus_condvar_free (DBusCondVar *cond)
-+{
-+ if (cond && thread_functions.condvar_free)
-+ (* thread_functions.condvar_free) (cond);
-+}
-+
-+/**
-+ * Atomically unlocks the mutex and waits for the conditions
-+ * variable to be signalled. Locks the mutex again before
-+ * returning.
-+ * Does nothing if passed a #NULL pointer.
-+ */
-+void
-+_dbus_condvar_wait (DBusCondVar *cond,
-+ DBusMutex *mutex)
-+{
-+ if (cond && mutex && thread_functions.condvar_wait)
-+ (* thread_functions.condvar_wait) (cond, mutex);
-+}
-+
-+/**
-+ * Atomically unlocks the mutex and waits for the conditions
-+ * variable to be signalled, or for a timeout. Locks the
-+ * mutex again before returning.
-+ * Does nothing if passed a #NULL pointer.
-+ *
-+ * @param cond the condition variable
-+ * @param mutex the mutex
-+ * @param timeout_milliseconds the maximum time to wait
-+ * @returns TRUE if the condition was reached, or FALSE if the
-+ * timeout was reached.
-+ */
-+dbus_bool_t
-+_dbus_condvar_wait_timeout (DBusCondVar *cond,
-+ DBusMutex *mutex,
-+ int timeout_milliseconds)
-+{
-+ if (cond && mutex && thread_functions.condvar_wait)
-+ return (* thread_functions.condvar_wait_timeout) (cond, mutex, timeout_milliseconds);
-+ else
-+ return TRUE;
-+}
-+
-+/**
-+ * If there are threads waiting on the condition variable, wake
-+ * up exactly one.
-+ * Does nothing if passed a #NULL pointer.
-+ */
-+void
-+_dbus_condvar_wake_one (DBusCondVar *cond)
-+{
-+ if (cond && thread_functions.condvar_wake_one)
-+ (* thread_functions.condvar_wake_one) (cond);
-+}
-+
-+/**
-+ * If there are threads waiting on the condition variable, wake
-+ * up all of them.
-+ * Does nothing if passed a #NULL pointer.
-+ */
-+void
-+_dbus_condvar_wake_all (DBusCondVar *cond)
-+{
-+ if (cond && thread_functions.condvar_wake_all)
-+ (* thread_functions.condvar_wake_all) (cond);
-+}
-+
-+static void
-+shutdown_global_locks (void *data)
-+{
-+ DBusMutex ***locks = data;
-+ int i;
-+
-+ i = 0;
-+ while (i < _DBUS_N_GLOBAL_LOCKS)
-+ {
-+ _dbus_mutex_free (*(locks[i]));
-+ *(locks[i]) = NULL;
-+ ++i;
-+ }
-+
-+ dbus_free (locks);
-+}
-+
-+static dbus_bool_t
-+init_global_locks (void)
-+{
-+ int i;
-+ DBusMutex ***dynamic_global_locks;
-+
-+ DBusMutex **global_locks[] = {
-+#define LOCK_ADDR(name) (& _dbus_lock_##name)
-+ LOCK_ADDR (list),
-+ LOCK_ADDR (connection_slots),
-+ LOCK_ADDR (pending_call_slots),
-+ LOCK_ADDR (server_slots),
-+ LOCK_ADDR (message_slots),
-+ LOCK_ADDR (atomic),
-+ LOCK_ADDR (bus),
-+ LOCK_ADDR (shutdown_funcs),
-+ LOCK_ADDR (system_users),
-+ LOCK_ADDR (message_cache),
-+ LOCK_ADDR (shared_connections)
-+#undef LOCK_ADDR
-+ };
-+
-+ _dbus_assert (_DBUS_N_ELEMENTS (global_locks) ==
-+ _DBUS_N_GLOBAL_LOCKS);
-+
-+ i = 0;
-+
-+ dynamic_global_locks = dbus_new (DBusMutex**, _DBUS_N_GLOBAL_LOCKS);
-+ if (dynamic_global_locks == NULL)
-+ goto failed;
-+
-+ while (i < _DBUS_N_ELEMENTS (global_locks))
-+ {
-+ *global_locks[i] = _dbus_mutex_new ();
-+
-+ if (*global_locks[i] == NULL)
-+ goto failed;
-+
-+ dynamic_global_locks[i] = global_locks[i];
-+
-+ ++i;
-+ }
-+
-+ if (!_dbus_register_shutdown_func (shutdown_global_locks,
-+ dynamic_global_locks))
-+ goto failed;
-+
-+ return TRUE;
-+
-+ failed:
-+ dbus_free (dynamic_global_locks);
-+
-+ for (i = i - 1; i >= 0; i--)
-+ {
-+ _dbus_mutex_free (*global_locks[i]);
-+ *global_locks[i] = NULL;
-+ }
-+ return FALSE;
-+}
-+
-+/** @} */ /* end of internals */
-+
-+/**
-+ * @defgroup DBusThreads Thread functions
-+ * @ingroup DBus
-+ * @brief dbus_threads_init()
-+ *
-+ * Functions and macros related to threads and thread locks.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ *
-+ * Initializes threads. If this function is not called,
-+ * the D-BUS library will not lock any data structures.
-+ * If it is called, D-BUS will do locking, at some cost
-+ * in efficiency. Note that this function must be called
-+ * BEFORE using any other D-BUS functions.
-+ *
-+ * This function may be called more than once, as long
-+ * as you pass in the same functions each time. If it's
-+ * called multiple times with different functions, then
-+ * a warning is printed, because someone is confused.
-+ *
-+ * @param functions functions for using threads
-+ * @returns #TRUE on success, #FALSE if no memory
-+ */
-+dbus_bool_t
-+dbus_threads_init (const DBusThreadFunctions *functions)
-+{
-+ _dbus_assert (functions != NULL);
-+
-+ /* these base functions are required. Future additions to
-+ * DBusThreadFunctions may be optional.
-+ */
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_MUTEX_NEW_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_MUTEX_FREE_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_MUTEX_LOCK_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_MUTEX_UNLOCK_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_CONDVAR_NEW_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_CONDVAR_FREE_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_TIMEOUT_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ONE_MASK);
-+ _dbus_assert (functions->mask & DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ALL_MASK);
-+ _dbus_assert (functions->mutex_new != NULL);
-+ _dbus_assert (functions->mutex_free != NULL);
-+ _dbus_assert (functions->mutex_lock != NULL);
-+ _dbus_assert (functions->mutex_unlock != NULL);
-+ _dbus_assert (functions->condvar_new != NULL);
-+ _dbus_assert (functions->condvar_free != NULL);
-+ _dbus_assert (functions->condvar_wait != NULL);
-+ _dbus_assert (functions->condvar_wait_timeout != NULL);
-+ _dbus_assert (functions->condvar_wake_one != NULL);
-+ _dbus_assert (functions->condvar_wake_all != NULL);
-+
-+ /* Check that all bits in the mask actually are valid mask bits.
-+ * ensures people won't write code that breaks when we add
-+ * new bits.
-+ */
-+ _dbus_assert ((functions->mask & ~DBUS_THREAD_FUNCTIONS_ALL_MASK) == 0);
-+
-+ if (thread_init_generation != _dbus_current_generation)
-+ thread_functions.mask = 0; /* allow re-init in new generation */
-+
-+ if (thread_functions.mask != 0)
-+ {
-+ /* Silently allow multiple init if the functions are the same ones.
-+ * Well, we only bother checking two of them, just out of laziness.
-+ */
-+ if (thread_functions.mask == functions->mask &&
-+ thread_functions.mutex_new == functions->mutex_new &&
-+ thread_functions.condvar_new == functions->condvar_new)
-+ {
-+ return TRUE;
-+ }
-+ else
-+ {
-+ _dbus_warn ("dbus_threads_init() called twice with two different sets of functions\n");
-+ return FALSE;
-+ }
-+ }
-+
-+ thread_functions.mutex_new = functions->mutex_new;
-+ thread_functions.mutex_free = functions->mutex_free;
-+ thread_functions.mutex_lock = functions->mutex_lock;
-+ thread_functions.mutex_unlock = functions->mutex_unlock;
-+
-+ thread_functions.condvar_new = functions->condvar_new;
-+ thread_functions.condvar_free = functions->condvar_free;
-+ thread_functions.condvar_wait = functions->condvar_wait;
-+ thread_functions.condvar_wait_timeout = functions->condvar_wait_timeout;
-+ thread_functions.condvar_wake_one = functions->condvar_wake_one;
-+ thread_functions.condvar_wake_all = functions->condvar_wake_all;
-+
-+ thread_functions.mask = functions->mask;
-+
-+ if (!init_global_locks ())
-+ return FALSE;
-+
-+ thread_init_generation = _dbus_current_generation;
-+
-+ return TRUE;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+/** Fake mutex used for debugging */
-+typedef struct DBusFakeMutex DBusFakeMutex;
-+/** Fake mutex used for debugging */
-+struct DBusFakeMutex
-+{
-+ dbus_bool_t locked; /**< Mutex is "locked" */
-+};
-+
-+static DBusMutex * dbus_fake_mutex_new (void);
-+static void dbus_fake_mutex_free (DBusMutex *mutex);
-+static dbus_bool_t dbus_fake_mutex_lock (DBusMutex *mutex);
-+static dbus_bool_t dbus_fake_mutex_unlock (DBusMutex *mutex);
-+static DBusCondVar* dbus_fake_condvar_new (void);
-+static void dbus_fake_condvar_free (DBusCondVar *cond);
-+static void dbus_fake_condvar_wait (DBusCondVar *cond,
-+ DBusMutex *mutex);
-+static dbus_bool_t dbus_fake_condvar_wait_timeout (DBusCondVar *cond,
-+ DBusMutex *mutex,
-+ int timeout_msec);
-+static void dbus_fake_condvar_wake_one (DBusCondVar *cond);
-+static void dbus_fake_condvar_wake_all (DBusCondVar *cond);
-+
-+
-+static const DBusThreadFunctions fake_functions =
-+{
-+ DBUS_THREAD_FUNCTIONS_MUTEX_NEW_MASK |
-+ DBUS_THREAD_FUNCTIONS_MUTEX_FREE_MASK |
-+ DBUS_THREAD_FUNCTIONS_MUTEX_LOCK_MASK |
-+ DBUS_THREAD_FUNCTIONS_MUTEX_UNLOCK_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_NEW_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_FREE_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_TIMEOUT_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ONE_MASK|
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ALL_MASK,
-+ dbus_fake_mutex_new,
-+ dbus_fake_mutex_free,
-+ dbus_fake_mutex_lock,
-+ dbus_fake_mutex_unlock,
-+ dbus_fake_condvar_new,
-+ dbus_fake_condvar_free,
-+ dbus_fake_condvar_wait,
-+ dbus_fake_condvar_wait_timeout,
-+ dbus_fake_condvar_wake_one,
-+ dbus_fake_condvar_wake_all
-+};
-+
-+static DBusMutex *
-+dbus_fake_mutex_new (void)
-+{
-+ DBusFakeMutex *mutex;
-+
-+ mutex = dbus_new0 (DBusFakeMutex, 1);
-+
-+ return (DBusMutex *)mutex;
-+}
-+
-+static void
-+dbus_fake_mutex_free (DBusMutex *mutex)
-+{
-+ DBusFakeMutex *fake = (DBusFakeMutex*) mutex;
-+
-+ _dbus_assert (!fake->locked);
-+
-+ dbus_free (fake);
-+}
-+
-+static dbus_bool_t
-+dbus_fake_mutex_lock (DBusMutex *mutex)
-+{
-+ DBusFakeMutex *fake = (DBusFakeMutex*) mutex;
-+
-+ _dbus_assert (!fake->locked);
-+
-+ fake->locked = TRUE;
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+dbus_fake_mutex_unlock (DBusMutex *mutex)
-+{
-+ DBusFakeMutex *fake = (DBusFakeMutex*) mutex;
-+
-+ _dbus_assert (fake->locked);
-+
-+ fake->locked = FALSE;
-+
-+ return TRUE;
-+}
-+
-+static DBusCondVar*
-+dbus_fake_condvar_new (void)
-+{
-+ return (DBusCondVar*) _dbus_strdup ("FakeCondvar");
-+}
-+
-+static void
-+dbus_fake_condvar_free (DBusCondVar *cond)
-+{
-+ dbus_free (cond);
-+}
-+
-+static void
-+dbus_fake_condvar_wait (DBusCondVar *cond,
-+ DBusMutex *mutex)
-+{
-+
-+}
-+
-+static dbus_bool_t
-+dbus_fake_condvar_wait_timeout (DBusCondVar *cond,
-+ DBusMutex *mutex,
-+ int timeout_msec)
-+{
-+ return TRUE;
-+}
-+
-+static void
-+dbus_fake_condvar_wake_one (DBusCondVar *cond)
-+{
-+
-+}
-+
-+static void
-+dbus_fake_condvar_wake_all (DBusCondVar *cond)
-+{
-+
-+}
-+
-+dbus_bool_t
-+_dbus_threads_init_debug (void)
-+{
-+ return dbus_threads_init (&fake_functions);
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-threads.h dbus-0.61/dbus/dbus-threads.h
---- dbus-0.61.orig/dbus/dbus-threads.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-threads.h 2005-02-24 19:37:16.000000000 +0100
-@@ -0,0 +1,104 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-threads.h D-BUS threads handling
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_THREADS_H
-+#define DBUS_THREADS_H
-+
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-types.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusMutex DBusMutex;
-+typedef struct DBusCondVar DBusCondVar;
-+
-+typedef DBusMutex* (* DBusMutexNewFunction) (void);
-+typedef void (* DBusMutexFreeFunction) (DBusMutex *mutex);
-+typedef dbus_bool_t (* DBusMutexLockFunction) (DBusMutex *mutex);
-+typedef dbus_bool_t (* DBusMutexUnlockFunction) (DBusMutex *mutex);
-+
-+typedef DBusCondVar* (* DBusCondVarNewFunction) (void);
-+typedef void (* DBusCondVarFreeFunction) (DBusCondVar *cond);
-+typedef void (* DBusCondVarWaitFunction) (DBusCondVar *cond,
-+ DBusMutex *mutex);
-+typedef dbus_bool_t (* DBusCondVarWaitTimeoutFunction) (DBusCondVar *cond,
-+ DBusMutex *mutex,
-+ int timeout_milliseconds);
-+typedef void (* DBusCondVarWakeOneFunction) (DBusCondVar *cond);
-+typedef void (* DBusCondVarWakeAllFunction) (DBusCondVar *cond);
-+
-+typedef enum
-+{
-+ DBUS_THREAD_FUNCTIONS_MUTEX_NEW_MASK = 1 << 0,
-+ DBUS_THREAD_FUNCTIONS_MUTEX_FREE_MASK = 1 << 1,
-+ DBUS_THREAD_FUNCTIONS_MUTEX_LOCK_MASK = 1 << 2,
-+ DBUS_THREAD_FUNCTIONS_MUTEX_UNLOCK_MASK = 1 << 3,
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_NEW_MASK = 1 << 4,
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_FREE_MASK = 1 << 5,
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_MASK = 1 << 6,
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_TIMEOUT_MASK = 1 << 7,
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ONE_MASK = 1 << 8,
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ALL_MASK = 1 << 9,
-+
-+ DBUS_THREAD_FUNCTIONS_ALL_MASK = (1 << 10) - 1
-+} DBusThreadFunctionsMask;
-+
-+/**
-+ * Functions that must be implemented to make the D-BUS
-+ * library thread-aware.
-+ */
-+typedef struct
-+{
-+ unsigned int mask; /**< Mask indicating which functions are present. */
-+
-+ DBusMutexNewFunction mutex_new; /**< Function to create a mutex */
-+ DBusMutexFreeFunction mutex_free; /**< Function to free a mutex */
-+ DBusMutexLockFunction mutex_lock; /**< Function to lock a mutex */
-+ DBusMutexUnlockFunction mutex_unlock; /**< Function to unlock a mutex */
-+
-+ DBusCondVarNewFunction condvar_new; /**< Function to create a condition variable */
-+ DBusCondVarFreeFunction condvar_free; /**< Function to free a condition variable */
-+ DBusCondVarWaitFunction condvar_wait; /**< Function to wait on a condition */
-+ DBusCondVarWaitTimeoutFunction condvar_wait_timeout; /**< Function to wait on a condition with a timeout */
-+ DBusCondVarWakeOneFunction condvar_wake_one; /**< Function to wake one thread waiting on the condition */
-+ DBusCondVarWakeAllFunction condvar_wake_all; /**< Function to wake all threads waiting on the condition */
-+
-+ void (* padding1) (void); /**< Reserved for future expansion */
-+ void (* padding2) (void); /**< Reserved for future expansion */
-+ void (* padding3) (void); /**< Reserved for future expansion */
-+ void (* padding4) (void); /**< Reserved for future expansion */
-+ void (* padding5) (void); /**< Reserved for future expansion */
-+ void (* padding6) (void); /**< Reserved for future expansion */
-+ void (* padding7) (void); /**< Reserved for future expansion */
-+ void (* padding8) (void); /**< Reserved for future expansion */
-+
-+} DBusThreadFunctions;
-+
-+dbus_bool_t dbus_threads_init (const DBusThreadFunctions *functions);
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_THREADS_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-timeout.c dbus-0.61/dbus/dbus-timeout.c
---- dbus-0.61.orig/dbus/dbus-timeout.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-timeout.c 2005-09-11 12:02:47.000000000 +0200
-@@ -0,0 +1,487 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-timeout.c DBusTimeout implementation
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-timeout.h"
-+#include "dbus-list.h"
-+
-+/**
-+ * @defgroup DBusTimeoutInternals DBusTimeout implementation details
-+ * @ingroup DBusInternals
-+ * @brief implementation details for DBusTimeout
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Internals of DBusTimeout
-+ */
-+struct DBusTimeout
-+{
-+ int refcount; /**< Reference count */
-+ int interval; /**< Timeout interval in milliseconds. */
-+
-+ DBusTimeoutHandler handler; /**< Timeout handler. */
-+ void *handler_data; /**< Timeout handler data. */
-+ DBusFreeFunction free_handler_data_function; /**< Free the timeout handler data. */
-+
-+ void *data; /**< Application data. */
-+ DBusFreeFunction free_data_function; /**< Free the application data. */
-+ unsigned int enabled : 1; /**< True if timeout is active. */
-+};
-+
-+/**
-+ * Creates a new DBusTimeout, enabled by default.
-+ * @param interval the timeout interval in milliseconds.
-+ * @param handler function to call when the timeout occurs.
-+ * @param data data to pass to the handler
-+ * @param free_data_function function to be called to free the data.
-+ * @returns the new DBusTimeout object,
-+ */
-+DBusTimeout*
-+_dbus_timeout_new (int interval,
-+ DBusTimeoutHandler handler,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ DBusTimeout *timeout;
-+
-+ timeout = dbus_new0 (DBusTimeout, 1);
-+ if (timeout == NULL)
-+ return NULL;
-+
-+ timeout->refcount = 1;
-+ timeout->interval = interval;
-+
-+ timeout->handler = handler;
-+ timeout->handler_data = data;
-+ timeout->free_handler_data_function = free_data_function;
-+
-+ timeout->enabled = TRUE;
-+
-+ return timeout;
-+}
-+
-+/**
-+ * Increments the reference count of a DBusTimeout object.
-+ *
-+ * @param timeout the timeout object.
-+ * @returns the timeout object.
-+ */
-+DBusTimeout *
-+_dbus_timeout_ref (DBusTimeout *timeout)
-+{
-+ timeout->refcount += 1;
-+
-+ return timeout;
-+}
-+
-+/**
-+ * Decrements the reference count of a DBusTimeout object
-+ * and finalizes the object if the count reaches zero.
-+ *
-+ * @param timeout the timeout object.
-+ */
-+void
-+_dbus_timeout_unref (DBusTimeout *timeout)
-+{
-+ _dbus_assert (timeout != NULL);
-+ _dbus_assert (timeout->refcount > 0);
-+
-+ timeout->refcount -= 1;
-+ if (timeout->refcount == 0)
-+ {
-+ dbus_timeout_set_data (timeout, NULL, NULL); /* call free_data_function */
-+
-+ if (timeout->free_handler_data_function)
-+ (* timeout->free_handler_data_function) (timeout->handler_data);
-+
-+ dbus_free (timeout);
-+ }
-+}
-+
-+/**
-+ * Changes the timeout interval. Note that you have to disable and
-+ * re-enable the timeout using the timeout toggle function
-+ * (_dbus_connection_toggle_timeout_unlocked() etc.) to notify the
-+ * application of this change.
-+ *
-+ * @param timeout the timeout
-+ * @param interval the new interval
-+ */
-+void
-+_dbus_timeout_set_interval (DBusTimeout *timeout,
-+ int interval)
-+{
-+ _dbus_assert (interval >= 0);
-+
-+ timeout->interval = interval;
-+}
-+
-+/**
-+ * Changes the timeout's enabled-ness. Note that you should use
-+ * _dbus_connection_toggle_timeout_unlocked() etc. instead, if
-+ * the timeout is passed out to an application main loop.
-+ * i.e. you can't use this function in the D-BUS library, it's
-+ * only used in the message bus daemon implementation.
-+ *
-+ * @param timeout the timeout
-+ * @param enabled #TRUE if timeout should be enabled.
-+ */
-+void
-+_dbus_timeout_set_enabled (DBusTimeout *timeout,
-+ dbus_bool_t enabled)
-+{
-+ timeout->enabled = enabled != FALSE;
-+}
-+
-+
-+/**
-+ * @typedef DBusTimeoutList
-+ *
-+ * Opaque data type representing a list of timeouts
-+ * and a set of DBusAddTimeoutFunction/DBusRemoveTimeoutFunction.
-+ * Automatically handles removing/re-adding timeouts
-+ * when the DBusAddTimeoutFunction is updated or changed.
-+ * Holds a reference count to each timeout.
-+ *
-+ */
-+
-+/**
-+ * DBusTimeoutList implementation details. All fields
-+ * are private.
-+ *
-+ */
-+struct DBusTimeoutList
-+{
-+ DBusList *timeouts; /**< Timeout objects. */
-+
-+ DBusAddTimeoutFunction add_timeout_function; /**< Callback for adding a timeout. */
-+ DBusRemoveTimeoutFunction remove_timeout_function; /**< Callback for removing a timeout. */
-+ DBusTimeoutToggledFunction timeout_toggled_function; /**< Callback when timeout is enabled/disabled or changes interval */
-+ void *timeout_data; /**< Data for timeout callbacks */
-+ DBusFreeFunction timeout_free_data_function; /**< Free function for timeout callback data */
-+};
-+
-+/**
-+ * Creates a new timeout list. Returns #NULL if insufficient
-+ * memory exists.
-+ *
-+ * @returns the new timeout list, or #NULL on failure.
-+ */
-+DBusTimeoutList*
-+_dbus_timeout_list_new (void)
-+{
-+ DBusTimeoutList *timeout_list;
-+
-+ timeout_list = dbus_new0 (DBusTimeoutList, 1);
-+ if (timeout_list == NULL)
-+ return NULL;
-+
-+ return timeout_list;
-+}
-+
-+/**
-+ * Frees a DBusTimeoutList.
-+ *
-+ * @param timeout_list the timeout list.
-+ */
-+void
-+_dbus_timeout_list_free (DBusTimeoutList *timeout_list)
-+{
-+ /* free timeout_data and remove timeouts as a side effect */
-+ _dbus_timeout_list_set_functions (timeout_list,
-+ NULL, NULL, NULL, NULL, NULL);
-+
-+ _dbus_list_foreach (&timeout_list->timeouts,
-+ (DBusForeachFunction) _dbus_timeout_unref,
-+ NULL);
-+ _dbus_list_clear (&timeout_list->timeouts);
-+
-+ dbus_free (timeout_list);
-+}
-+
-+/**
-+ * Sets the timeout functions. This function is the "backend"
-+ * for dbus_connection_set_timeout_functions().
-+ *
-+ * @param timeout_list the timeout list
-+ * @param add_function the add timeout function.
-+ * @param remove_function the remove timeout function.
-+ * @param toggled_function toggle notify function, or #NULL
-+ * @param data the data for those functions.
-+ * @param free_data_function the function to free the data.
-+ * @returns #FALSE if no memory
-+ *
-+ */
-+dbus_bool_t
-+_dbus_timeout_list_set_functions (DBusTimeoutList *timeout_list,
-+ DBusAddTimeoutFunction add_function,
-+ DBusRemoveTimeoutFunction remove_function,
-+ DBusTimeoutToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ /* Add timeouts with the new function, failing on OOM */
-+ if (add_function != NULL)
-+ {
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&timeout_list->timeouts);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&timeout_list->timeouts,
-+ link);
-+
-+ if (!(* add_function) (link->data, data))
-+ {
-+ /* remove it all again and return FALSE */
-+ DBusList *link2;
-+
-+ link2 = _dbus_list_get_first_link (&timeout_list->timeouts);
-+ while (link2 != link)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&timeout_list->timeouts,
-+ link2);
-+
-+ (* remove_function) (link2->data, data);
-+
-+ link2 = next;
-+ }
-+
-+ return FALSE;
-+ }
-+
-+ link = next;
-+ }
-+ }
-+
-+ /* Remove all current timeouts from previous timeout handlers */
-+
-+ if (timeout_list->remove_timeout_function != NULL)
-+ {
-+ _dbus_list_foreach (&timeout_list->timeouts,
-+ (DBusForeachFunction) timeout_list->remove_timeout_function,
-+ timeout_list->timeout_data);
-+ }
-+
-+ if (timeout_list->timeout_free_data_function != NULL)
-+ (* timeout_list->timeout_free_data_function) (timeout_list->timeout_data);
-+
-+ timeout_list->add_timeout_function = add_function;
-+ timeout_list->remove_timeout_function = remove_function;
-+ timeout_list->timeout_toggled_function = toggled_function;
-+ timeout_list->timeout_data = data;
-+ timeout_list->timeout_free_data_function = free_data_function;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Adds a new timeout to the timeout list, invoking the
-+ * application DBusAddTimeoutFunction if appropriate.
-+ *
-+ * @param timeout_list the timeout list.
-+ * @param timeout the timeout to add.
-+ * @returns #TRUE on success, #FALSE If no memory.
-+ */
-+dbus_bool_t
-+_dbus_timeout_list_add_timeout (DBusTimeoutList *timeout_list,
-+ DBusTimeout *timeout)
-+{
-+ if (!_dbus_list_append (&timeout_list->timeouts, timeout))
-+ return FALSE;
-+
-+ _dbus_timeout_ref (timeout);
-+
-+ if (timeout_list->add_timeout_function != NULL)
-+ {
-+ if (!(* timeout_list->add_timeout_function) (timeout,
-+ timeout_list->timeout_data))
-+ {
-+ _dbus_list_remove_last (&timeout_list->timeouts, timeout);
-+ _dbus_timeout_unref (timeout);
-+ return FALSE;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Removes a timeout from the timeout list, invoking the
-+ * application's DBusRemoveTimeoutFunction if appropriate.
-+ *
-+ * @param timeout_list the timeout list.
-+ * @param timeout the timeout to remove.
-+ */
-+void
-+_dbus_timeout_list_remove_timeout (DBusTimeoutList *timeout_list,
-+ DBusTimeout *timeout)
-+{
-+ if (!_dbus_list_remove (&timeout_list->timeouts, timeout))
-+ _dbus_assert_not_reached ("Nonexistent timeout was removed");
-+
-+ if (timeout_list->remove_timeout_function != NULL)
-+ (* timeout_list->remove_timeout_function) (timeout,
-+ timeout_list->timeout_data);
-+
-+ _dbus_timeout_unref (timeout);
-+}
-+
-+/**
-+ * Sets a timeout to the given enabled state, invoking the
-+ * application's DBusTimeoutToggledFunction if appropriate.
-+ *
-+ * @param timeout_list the timeout list.
-+ * @param timeout the timeout to toggle.
-+ * @param enabled #TRUE to enable
-+ */
-+void
-+_dbus_timeout_list_toggle_timeout (DBusTimeoutList *timeout_list,
-+ DBusTimeout *timeout,
-+ dbus_bool_t enabled)
-+{
-+ enabled = !!enabled;
-+
-+ if (enabled == timeout->enabled)
-+ return;
-+
-+ timeout->enabled = enabled;
-+
-+ if (timeout_list->timeout_toggled_function != NULL)
-+ (* timeout_list->timeout_toggled_function) (timeout,
-+ timeout_list->timeout_data);
-+}
-+
-+/** @} */
-+
-+/**
-+ * @defgroup DBusTimeout DBusTimeout
-+ * @ingroup DBus
-+ * @brief Object representing a timeout
-+ *
-+ * Types and functions related to DBusTimeout. A timeout
-+ * represents a timeout that the main loop needs to monitor,
-+ * as in Qt's QTimer or GLib's g_timeout_add().
-+ *
-+ * @{
-+ */
-+
-+
-+/**
-+ * @typedef DBusTimeout
-+ *
-+ * Opaque object representing a timeout.
-+ */
-+
-+/**
-+ * Gets the timeout interval. The dbus_timeout_handle()
-+ * should be called each time this interval elapses,
-+ * starting after it elapses once.
-+ *
-+ * The interval may change during the life of the
-+ * timeout; if so, the timeout will be disabled and
-+ * re-enabled (calling the "timeout toggled function")
-+ * to notify you of the change.
-+ *
-+ * @param timeout the DBusTimeout object.
-+ * @returns the interval in milliseconds.
-+ */
-+int
-+dbus_timeout_get_interval (DBusTimeout *timeout)
-+{
-+ return timeout->interval;
-+}
-+
-+/**
-+ * Gets data previously set with dbus_timeout_set_data()
-+ * or #NULL if none.
-+ *
-+ * @param timeout the DBusTimeout object.
-+ * @returns previously-set data.
-+ */
-+void*
-+dbus_timeout_get_data (DBusTimeout *timeout)
-+{
-+ return timeout->data;
-+}
-+
-+/**
-+ * Sets data which can be retrieved with dbus_timeout_get_data().
-+ * Intended for use by the DBusAddTimeoutFunction and
-+ * DBusRemoveTimeoutFunction to store their own data. For example with
-+ * Qt you might store the QTimer for this timeout and with GLib
-+ * you might store a g_timeout_add result id.
-+ *
-+ * @param timeout the DBusTimeout object.
-+ * @param data the data.
-+ * @param free_data_function function to be called to free the data.
-+ */
-+void
-+dbus_timeout_set_data (DBusTimeout *timeout,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ if (timeout->free_data_function != NULL)
-+ (* timeout->free_data_function) (timeout->data);
-+
-+ timeout->data = data;
-+ timeout->free_data_function = free_data_function;
-+}
-+
-+/**
-+ * Calls the timeout handler for this timeout.
-+ * This function should be called when the timeout
-+ * occurs.
-+ *
-+ * If this function returns #FALSE, then there wasn't
-+ * enough memory to handle the timeout. Typically just
-+ * letting the timeout fire again next time it naturally
-+ * times out is an adequate response to that problem,
-+ * but you could try to do more if you wanted.
-+ *
-+ * @param timeout the DBusTimeout object.
-+ * @returns #FALSE if there wasn't enough memory
-+ */
-+dbus_bool_t
-+dbus_timeout_handle (DBusTimeout *timeout)
-+{
-+ return (* timeout->handler) (timeout->handler_data);
-+}
-+
-+
-+/**
-+ * Returns whether a timeout is enabled or not. If not
-+ * enabled, it should not be polled by the main loop.
-+ *
-+ * @param timeout the DBusTimeout object
-+ * @returns #TRUE if the timeout is enabled
-+ */
-+dbus_bool_t
-+dbus_timeout_get_enabled (DBusTimeout *timeout)
-+{
-+ return timeout->enabled;
-+}
-+
-+/** @} end public API docs */
-diff -Naur dbus-0.61.orig/dbus/dbus-timeout.h dbus-0.61/dbus/dbus-timeout.h
---- dbus-0.61.orig/dbus/dbus-timeout.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-timeout.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,67 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-timeout.h DBusTimeout internal interfaces
-+ *
-+ * Copyright (C) 2003 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_TIMEOUT_H
-+#define DBUS_TIMEOUT_H
-+
-+#include <dbus/dbus-connection.h>
-+#include <dbus/dbus-internals.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusTimeoutList DBusTimeoutList;
-+
-+/* Public methods on DBusTimeout are in dbus-connection.h */
-+
-+typedef dbus_bool_t (* DBusTimeoutHandler) (void *data);
-+
-+DBusTimeout* _dbus_timeout_new (int interval,
-+ DBusTimeoutHandler handler,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+DBusTimeout* _dbus_timeout_ref (DBusTimeout *timeout);
-+void _dbus_timeout_unref (DBusTimeout *timeout);
-+void _dbus_timeout_set_interval (DBusTimeout *timeout,
-+ int interval);
-+void _dbus_timeout_set_enabled (DBusTimeout *timeout,
-+ dbus_bool_t enabled);
-+
-+DBusTimeoutList *_dbus_timeout_list_new (void);
-+void _dbus_timeout_list_free (DBusTimeoutList *timeout_list);
-+dbus_bool_t _dbus_timeout_list_set_functions (DBusTimeoutList *timeout_list,
-+ DBusAddTimeoutFunction add_function,
-+ DBusRemoveTimeoutFunction remove_function,
-+ DBusTimeoutToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t _dbus_timeout_list_add_timeout (DBusTimeoutList *timeout_list,
-+ DBusTimeout *timeout);
-+void _dbus_timeout_list_remove_timeout (DBusTimeoutList *timeout_list,
-+ DBusTimeout *timeout);
-+void _dbus_timeout_list_toggle_timeout (DBusTimeoutList *timeout_list,
-+ DBusTimeout *timeout,
-+ dbus_bool_t enabled);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_TIMEOUT_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-transport-protected.h dbus-0.61/dbus/dbus-transport-protected.h
---- dbus-0.61.orig/dbus/dbus-transport-protected.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-transport-protected.h 2005-05-06 00:02:11.000000000 +0200
-@@ -0,0 +1,126 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-transport-protected.h Used by subclasses of DBusTransport object (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2004 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_TRANSPORT_PROTECTED_H
-+#define DBUS_TRANSPORT_PROTECTED_H
-+
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-transport.h>
-+#include <dbus/dbus-message-internal.h>
-+#include <dbus/dbus-auth.h>
-+#include <dbus/dbus-resources.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusTransportVTable DBusTransportVTable;
-+
-+/**
-+ * The virtual table that must be implemented to
-+ * create a new kind of transport.
-+ */
-+struct DBusTransportVTable
-+{
-+ void (* finalize) (DBusTransport *transport);
-+ /**< The finalize method must free the transport. */
-+
-+ dbus_bool_t (* handle_watch) (DBusTransport *transport,
-+ DBusWatch *watch,
-+ unsigned int flags);
-+ /**< The handle_watch method handles reading/writing
-+ * data as indicated by the flags.
-+ */
-+
-+ void (* disconnect) (DBusTransport *transport);
-+ /**< Disconnect this transport. */
-+
-+ dbus_bool_t (* connection_set) (DBusTransport *transport);
-+ /**< Called when transport->connection has been filled in */
-+
-+ void (* do_iteration) (DBusTransport *transport,
-+ unsigned int flags,
-+ int timeout_milliseconds);
-+ /**< Called to do a single "iteration" (block on select/poll
-+ * followed by reading or writing data).
-+ */
-+
-+ void (* live_messages_changed) (DBusTransport *transport);
-+ /**< Outstanding messages counter changed */
-+
-+ dbus_bool_t (* get_unix_fd) (DBusTransport *transport,
-+ int *fd_p);
-+ /**< Get UNIX file descriptor */
-+};
-+
-+/**
-+ * Object representing a transport such as a socket.
-+ * A transport can shuttle messages from point A to point B,
-+ * and is the backend for a #DBusConnection.
-+ *
-+ */
-+struct DBusTransport
-+{
-+ int refcount; /**< Reference count. */
-+
-+ const DBusTransportVTable *vtable; /**< Virtual methods for this instance. */
-+
-+ DBusConnection *connection; /**< Connection owning this transport. */
-+
-+ DBusMessageLoader *loader; /**< Message-loading buffer. */
-+
-+ DBusAuth *auth; /**< Authentication conversation */
-+
-+ DBusCredentials credentials; /**< Credentials of other end */
-+
-+ long max_live_messages_size; /**< Max total size of received messages. */
-+
-+ DBusCounter *live_messages_size; /**< Counter for size of all live messages. */
-+
-+
-+ char *address; /**< Address of the server we are connecting to (#NULL for the server side of a transport) */
-+
-+ char *expected_guid; /**< GUID we expect the server to have, #NULL on server side or if we don't have an expectation */
-+
-+ DBusAllowUnixUserFunction unix_user_function; /**< Function for checking whether a user is authorized. */
-+ void *unix_user_data; /**< Data for unix_user_function */
-+
-+ DBusFreeFunction free_unix_user_data; /**< Function to free unix_user_data */
-+
-+ unsigned int disconnected : 1; /**< #TRUE if we are disconnected. */
-+ unsigned int authenticated : 1; /**< Cache of auth state; use _dbus_transport_get_is_authenticated() to query value */
-+ unsigned int send_credentials_pending : 1; /**< #TRUE if we need to send credentials */
-+ unsigned int receive_credentials_pending : 1; /**< #TRUE if we need to receive credentials */
-+ unsigned int is_server : 1; /**< #TRUE if on the server side */
-+ unsigned int unused_bytes_recovered : 1; /**< #TRUE if we've recovered unused bytes from auth */
-+};
-+
-+dbus_bool_t _dbus_transport_init_base (DBusTransport *transport,
-+ const DBusTransportVTable *vtable,
-+ const DBusString *server_guid,
-+ const DBusString *address);
-+void _dbus_transport_finalize_base (DBusTransport *transport);
-+
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_TRANSPORT_PROTECTED_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-transport-unix.c dbus-0.61/dbus/dbus-transport-unix.c
---- dbus-0.61.orig/dbus/dbus-transport-unix.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-transport-unix.c 2005-10-25 17:57:13.000000000 +0200
-@@ -0,0 +1,1313 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-transport-unix.c UNIX socket subclasses of DBusTransport
-+ *
-+ * Copyright (C) 2002, 2003, 2004 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-connection-internal.h"
-+#include "dbus-transport-unix.h"
-+#include "dbus-transport-protected.h"
-+#include "dbus-watch.h"
-+
-+
-+/**
-+ * @defgroup DBusTransportUnix DBusTransport implementations for UNIX
-+ * @ingroup DBusInternals
-+ * @brief Implementation details of DBusTransport on UNIX
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Opaque object representing a Unix file descriptor transport.
-+ */
-+typedef struct DBusTransportUnix DBusTransportUnix;
-+
-+/**
-+ * Implementation details of DBusTransportUnix. All members are private.
-+ */
-+struct DBusTransportUnix
-+{
-+ DBusTransport base; /**< Parent instance */
-+ int fd; /**< File descriptor. */
-+ DBusWatch *read_watch; /**< Watch for readability. */
-+ DBusWatch *write_watch; /**< Watch for writability. */
-+
-+ int max_bytes_read_per_iteration; /**< To avoid blocking too long. */
-+ int max_bytes_written_per_iteration; /**< To avoid blocking too long. */
-+
-+ int message_bytes_written; /**< Number of bytes of current
-+ * outgoing message that have
-+ * been written.
-+ */
-+ DBusString encoded_outgoing; /**< Encoded version of current
-+ * outgoing message.
-+ */
-+ DBusString encoded_incoming; /**< Encoded version of current
-+ * incoming data.
-+ */
-+};
-+
-+static void
-+free_watches (DBusTransport *transport)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+
-+ _dbus_verbose ("%s start\n", _DBUS_FUNCTION_NAME);
-+
-+ if (unix_transport->read_watch)
-+ {
-+ if (transport->connection)
-+ _dbus_connection_remove_watch_unlocked (transport->connection,
-+ unix_transport->read_watch);
-+ _dbus_watch_invalidate (unix_transport->read_watch);
-+ _dbus_watch_unref (unix_transport->read_watch);
-+ unix_transport->read_watch = NULL;
-+ }
-+
-+ if (unix_transport->write_watch)
-+ {
-+ if (transport->connection)
-+ _dbus_connection_remove_watch_unlocked (transport->connection,
-+ unix_transport->write_watch);
-+ _dbus_watch_invalidate (unix_transport->write_watch);
-+ _dbus_watch_unref (unix_transport->write_watch);
-+ unix_transport->write_watch = NULL;
-+ }
-+
-+ _dbus_verbose ("%s end\n", _DBUS_FUNCTION_NAME);
-+}
-+
-+static void
-+unix_finalize (DBusTransport *transport)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+
-+ _dbus_verbose ("%s\n", _DBUS_FUNCTION_NAME);
-+
-+ free_watches (transport);
-+
-+ _dbus_string_free (&unix_transport->encoded_outgoing);
-+ _dbus_string_free (&unix_transport->encoded_incoming);
-+
-+ _dbus_transport_finalize_base (transport);
-+
-+ _dbus_assert (unix_transport->read_watch == NULL);
-+ _dbus_assert (unix_transport->write_watch == NULL);
-+
-+ dbus_free (transport);
-+}
-+
-+static void
-+check_write_watch (DBusTransport *transport)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+ dbus_bool_t needed;
-+
-+ if (transport->connection == NULL)
-+ return;
-+
-+ if (transport->disconnected)
-+ {
-+ _dbus_assert (unix_transport->write_watch == NULL);
-+ return;
-+ }
-+
-+ _dbus_transport_ref (transport);
-+
-+ if (_dbus_transport_get_is_authenticated (transport))
-+ needed = _dbus_connection_has_messages_to_send_unlocked (transport->connection);
-+ else
-+ {
-+ if (transport->send_credentials_pending)
-+ needed = TRUE;
-+ else
-+ {
-+ DBusAuthState auth_state;
-+
-+ auth_state = _dbus_auth_do_work (transport->auth);
-+
-+ /* If we need memory we install the write watch just in case,
-+ * if there's no need for it, it will get de-installed
-+ * next time we try reading.
-+ */
-+ if (auth_state == DBUS_AUTH_STATE_HAVE_BYTES_TO_SEND ||
-+ auth_state == DBUS_AUTH_STATE_WAITING_FOR_MEMORY)
-+ needed = TRUE;
-+ else
-+ needed = FALSE;
-+ }
-+ }
-+
-+ _dbus_verbose ("check_write_watch(): needed = %d on connection %p watch %p fd = %d outgoing messages exist %d\n",
-+ needed, transport->connection, unix_transport->write_watch,
-+ unix_transport->fd,
-+ _dbus_connection_has_messages_to_send_unlocked (transport->connection));
-+
-+ _dbus_connection_toggle_watch_unlocked (transport->connection,
-+ unix_transport->write_watch,
-+ needed);
-+
-+ _dbus_transport_unref (transport);
-+}
-+
-+static void
-+check_read_watch (DBusTransport *transport)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+ dbus_bool_t need_read_watch;
-+
-+ _dbus_verbose ("%s: fd = %d\n",
-+ _DBUS_FUNCTION_NAME, unix_transport->fd);
-+
-+ if (transport->connection == NULL)
-+ return;
-+
-+ if (transport->disconnected)
-+ {
-+ _dbus_assert (unix_transport->read_watch == NULL);
-+ return;
-+ }
-+
-+ _dbus_transport_ref (transport);
-+
-+ if (_dbus_transport_get_is_authenticated (transport))
-+ need_read_watch =
-+ _dbus_counter_get_value (transport->live_messages_size) < transport->max_live_messages_size;
-+ else
-+ {
-+ if (transport->receive_credentials_pending)
-+ need_read_watch = TRUE;
-+ else
-+ {
-+ /* The reason to disable need_read_watch when not WAITING_FOR_INPUT
-+ * is to avoid spinning on the file descriptor when we're waiting
-+ * to write or for some other part of the auth process
-+ */
-+ DBusAuthState auth_state;
-+
-+ auth_state = _dbus_auth_do_work (transport->auth);
-+
-+ /* If we need memory we install the read watch just in case,
-+ * if there's no need for it, it will get de-installed
-+ * next time we try reading. If we're authenticated we
-+ * install it since we normally have it installed while
-+ * authenticated.
-+ */
-+ if (auth_state == DBUS_AUTH_STATE_WAITING_FOR_INPUT ||
-+ auth_state == DBUS_AUTH_STATE_WAITING_FOR_MEMORY ||
-+ auth_state == DBUS_AUTH_STATE_AUTHENTICATED)
-+ need_read_watch = TRUE;
-+ else
-+ need_read_watch = FALSE;
-+ }
-+ }
-+
-+ _dbus_verbose (" setting read watch enabled = %d\n", need_read_watch);
-+ _dbus_connection_toggle_watch_unlocked (transport->connection,
-+ unix_transport->read_watch,
-+ need_read_watch);
-+
-+ _dbus_transport_unref (transport);
-+}
-+
-+static void
-+do_io_error (DBusTransport *transport)
-+{
-+ _dbus_transport_ref (transport);
-+ _dbus_transport_disconnect (transport);
-+ _dbus_transport_unref (transport);
-+}
-+
-+/* return value is whether we successfully read any new data. */
-+static dbus_bool_t
-+read_data_into_auth (DBusTransport *transport,
-+ dbus_bool_t *oom)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+ DBusString *buffer;
-+ int bytes_read;
-+
-+ *oom = FALSE;
-+
-+ _dbus_auth_get_buffer (transport->auth, &buffer);
-+
-+ bytes_read = _dbus_read (unix_transport->fd,
-+ buffer, unix_transport->max_bytes_read_per_iteration);
-+
-+ _dbus_auth_return_buffer (transport->auth, buffer,
-+ bytes_read > 0 ? bytes_read : 0);
-+
-+ if (bytes_read > 0)
-+ {
-+ _dbus_verbose (" read %d bytes in auth phase\n", bytes_read);
-+
-+ return TRUE;
-+ }
-+ else if (bytes_read < 0)
-+ {
-+ /* EINTR already handled for us */
-+
-+ if (errno == ENOMEM)
-+ {
-+ *oom = TRUE;
-+ }
-+ else if (errno == EAGAIN ||
-+ errno == EWOULDBLOCK)
-+ ; /* do nothing, just return FALSE below */
-+ else
-+ {
-+ _dbus_verbose ("Error reading from remote app: %s\n",
-+ _dbus_strerror (errno));
-+ do_io_error (transport);
-+ }
-+
-+ return FALSE;
-+ }
-+ else
-+ {
-+ _dbus_assert (bytes_read == 0);
-+
-+ _dbus_verbose ("Disconnected from remote app\n");
-+ do_io_error (transport);
-+
-+ return FALSE;
-+ }
-+}
-+
-+/* Return value is whether we successfully wrote any bytes */
-+static dbus_bool_t
-+write_data_from_auth (DBusTransport *transport)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+ int bytes_written;
-+ const DBusString *buffer;
-+
-+ if (!_dbus_auth_get_bytes_to_send (transport->auth,
-+ &buffer))
-+ return FALSE;
-+
-+ bytes_written = _dbus_write (unix_transport->fd,
-+ buffer,
-+ 0, _dbus_string_get_length (buffer));
-+
-+ if (bytes_written > 0)
-+ {
-+ _dbus_auth_bytes_sent (transport->auth, bytes_written);
-+ return TRUE;
-+ }
-+ else if (bytes_written < 0)
-+ {
-+ /* EINTR already handled for us */
-+
-+ if (errno == EAGAIN ||
-+ errno == EWOULDBLOCK)
-+ ;
-+ else
-+ {
-+ _dbus_verbose ("Error writing to remote app: %s\n",
-+ _dbus_strerror (errno));
-+ do_io_error (transport);
-+ }
-+ }
-+
-+ return FALSE;
-+}
-+
-+static void
-+exchange_credentials (DBusTransport *transport,
-+ dbus_bool_t do_reading,
-+ dbus_bool_t do_writing)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+
-+ if (do_writing && transport->send_credentials_pending)
-+ {
-+ if (_dbus_send_credentials_unix_socket (unix_transport->fd,
-+ NULL))
-+ {
-+ transport->send_credentials_pending = FALSE;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Failed to write credentials\n");
-+ do_io_error (transport);
-+ }
-+ }
-+
-+ if (do_reading && transport->receive_credentials_pending)
-+ {
-+ if (_dbus_read_credentials_unix_socket (unix_transport->fd,
-+ &transport->credentials,
-+ NULL))
-+ {
-+ transport->receive_credentials_pending = FALSE;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Failed to read credentials\n");
-+ do_io_error (transport);
-+ }
-+ }
-+
-+ if (!(transport->send_credentials_pending ||
-+ transport->receive_credentials_pending))
-+ {
-+ _dbus_auth_set_credentials (transport->auth,
-+ &transport->credentials);
-+ }
-+}
-+
-+static dbus_bool_t
-+do_authentication (DBusTransport *transport,
-+ dbus_bool_t do_reading,
-+ dbus_bool_t do_writing,
-+ dbus_bool_t *auth_completed)
-+{
-+ dbus_bool_t oom;
-+ dbus_bool_t orig_auth_state;
-+
-+ oom = FALSE;
-+
-+ orig_auth_state = _dbus_transport_get_is_authenticated (transport);
-+
-+ /* This is essential to avoid the check_write_watch() at the end,
-+ * we don't want to add a write watch in do_iteration before
-+ * we try writing and get EAGAIN
-+ */
-+ if (orig_auth_state)
-+ {
-+ if (auth_completed)
-+ *auth_completed = FALSE;
-+ return TRUE;
-+ }
-+
-+ _dbus_transport_ref (transport);
-+
-+ while (!_dbus_transport_get_is_authenticated (transport) &&
-+ _dbus_transport_get_is_connected (transport))
-+ {
-+ exchange_credentials (transport, do_reading, do_writing);
-+
-+ if (transport->send_credentials_pending ||
-+ transport->receive_credentials_pending)
-+ {
-+ _dbus_verbose ("send_credentials_pending = %d receive_credentials_pending = %d\n",
-+ transport->send_credentials_pending,
-+ transport->receive_credentials_pending);
-+ goto out;
-+ }
-+
-+#define TRANSPORT_SIDE(t) ((t)->is_server ? "server" : "client")
-+ switch (_dbus_auth_do_work (transport->auth))
-+ {
-+ case DBUS_AUTH_STATE_WAITING_FOR_INPUT:
-+ _dbus_verbose (" %s auth state: waiting for input\n",
-+ TRANSPORT_SIDE (transport));
-+ if (!do_reading || !read_data_into_auth (transport, &oom))
-+ goto out;
-+ break;
-+
-+ case DBUS_AUTH_STATE_WAITING_FOR_MEMORY:
-+ _dbus_verbose (" %s auth state: waiting for memory\n",
-+ TRANSPORT_SIDE (transport));
-+ oom = TRUE;
-+ goto out;
-+ break;
-+
-+ case DBUS_AUTH_STATE_HAVE_BYTES_TO_SEND:
-+ _dbus_verbose (" %s auth state: bytes to send\n",
-+ TRANSPORT_SIDE (transport));
-+ if (!do_writing || !write_data_from_auth (transport))
-+ goto out;
-+ break;
-+
-+ case DBUS_AUTH_STATE_NEED_DISCONNECT:
-+ _dbus_verbose (" %s auth state: need to disconnect\n",
-+ TRANSPORT_SIDE (transport));
-+ do_io_error (transport);
-+ break;
-+
-+ case DBUS_AUTH_STATE_AUTHENTICATED:
-+ _dbus_verbose (" %s auth state: authenticated\n",
-+ TRANSPORT_SIDE (transport));
-+ break;
-+ }
-+ }
-+
-+ out:
-+ if (auth_completed)
-+ *auth_completed = (orig_auth_state != _dbus_transport_get_is_authenticated (transport));
-+
-+ check_read_watch (transport);
-+ check_write_watch (transport);
-+ _dbus_transport_unref (transport);
-+
-+ if (oom)
-+ return FALSE;
-+ else
-+ return TRUE;
-+}
-+
-+/* returns false on oom */
-+static dbus_bool_t
-+do_writing (DBusTransport *transport)
-+{
-+ int total;
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+ dbus_bool_t oom;
-+
-+ /* No messages without authentication! */
-+ if (!_dbus_transport_get_is_authenticated (transport))
-+ {
-+ _dbus_verbose ("Not authenticated, not writing anything\n");
-+ return TRUE;
-+ }
-+
-+ if (transport->disconnected)
-+ {
-+ _dbus_verbose ("Not connected, not writing anything\n");
-+ return TRUE;
-+ }
-+
-+#if 1
-+ _dbus_verbose ("do_writing(), have_messages = %d, fd = %d\n",
-+ _dbus_connection_has_messages_to_send_unlocked (transport->connection),
-+ unix_transport->fd);
-+#endif
-+
-+ oom = FALSE;
-+ total = 0;
-+
-+ while (!transport->disconnected &&
-+ _dbus_connection_has_messages_to_send_unlocked (transport->connection))
-+ {
-+ int bytes_written;
-+ DBusMessage *message;
-+ const DBusString *header;
-+ const DBusString *body;
-+ int header_len, body_len;
-+ int total_bytes_to_write;
-+
-+ if (total > unix_transport->max_bytes_written_per_iteration)
-+ {
-+ _dbus_verbose ("%d bytes exceeds %d bytes written per iteration, returning\n",
-+ total, unix_transport->max_bytes_written_per_iteration);
-+ goto out;
-+ }
-+
-+ message = _dbus_connection_get_message_to_send (transport->connection);
-+ _dbus_assert (message != NULL);
-+ _dbus_message_lock (message);
-+
-+#if 0
-+ _dbus_verbose ("writing message %p\n", message);
-+#endif
-+
-+ _dbus_message_get_network_data (message,
-+ &header, &body);
-+
-+ header_len = _dbus_string_get_length (header);
-+ body_len = _dbus_string_get_length (body);
-+
-+ if (_dbus_auth_needs_encoding (transport->auth))
-+ {
-+ if (_dbus_string_get_length (&unix_transport->encoded_outgoing) == 0)
-+ {
-+ if (!_dbus_auth_encode_data (transport->auth,
-+ header, &unix_transport->encoded_outgoing))
-+ {
-+ oom = TRUE;
-+ goto out;
-+ }
-+
-+ if (!_dbus_auth_encode_data (transport->auth,
-+ body, &unix_transport->encoded_outgoing))
-+ {
-+ _dbus_string_set_length (&unix_transport->encoded_outgoing, 0);
-+ oom = TRUE;
-+ goto out;
-+ }
-+ }
-+
-+ total_bytes_to_write = _dbus_string_get_length (&unix_transport->encoded_outgoing);
-+
-+#if 0
-+ _dbus_verbose ("encoded message is %d bytes\n",
-+ total_bytes_to_write);
-+#endif
-+
-+ bytes_written =
-+ _dbus_write (unix_transport->fd,
-+ &unix_transport->encoded_outgoing,
-+ unix_transport->message_bytes_written,
-+ total_bytes_to_write - unix_transport->message_bytes_written);
-+ }
-+ else
-+ {
-+ total_bytes_to_write = header_len + body_len;
-+
-+#if 0
-+ _dbus_verbose ("message is %d bytes\n",
-+ total_bytes_to_write);
-+#endif
-+
-+ if (unix_transport->message_bytes_written < header_len)
-+ {
-+ bytes_written =
-+ _dbus_write_two (unix_transport->fd,
-+ header,
-+ unix_transport->message_bytes_written,
-+ header_len - unix_transport->message_bytes_written,
-+ body,
-+ 0, body_len);
-+ }
-+ else
-+ {
-+ bytes_written =
-+ _dbus_write (unix_transport->fd,
-+ body,
-+ (unix_transport->message_bytes_written - header_len),
-+ body_len -
-+ (unix_transport->message_bytes_written - header_len));
-+ }
-+ }
-+
-+ if (bytes_written < 0)
-+ {
-+ /* EINTR already handled for us */
-+
-+ if (errno == EAGAIN ||
-+ errno == EWOULDBLOCK)
-+ goto out;
-+ else
-+ {
-+ _dbus_verbose ("Error writing to remote app: %s\n",
-+ _dbus_strerror (errno));
-+ do_io_error (transport);
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_verbose (" wrote %d bytes of %d\n", bytes_written,
-+ total_bytes_to_write);
-+
-+ total += bytes_written;
-+ unix_transport->message_bytes_written += bytes_written;
-+
-+ _dbus_assert (unix_transport->message_bytes_written <=
-+ total_bytes_to_write);
-+
-+ if (unix_transport->message_bytes_written == total_bytes_to_write)
-+ {
-+ unix_transport->message_bytes_written = 0;
-+ _dbus_string_set_length (&unix_transport->encoded_outgoing, 0);
-+
-+ _dbus_connection_message_sent (transport->connection,
-+ message);
-+ }
-+ }
-+ }
-+
-+ out:
-+ if (oom)
-+ return FALSE;
-+ else
-+ return TRUE;
-+}
-+
-+/* returns false on out-of-memory */
-+static dbus_bool_t
-+do_reading (DBusTransport *transport)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+ DBusString *buffer;
-+ int bytes_read;
-+ int total;
-+ dbus_bool_t oom;
-+
-+ _dbus_verbose ("%s: fd = %d\n", _DBUS_FUNCTION_NAME,
-+ unix_transport->fd);
-+
-+ /* No messages without authentication! */
-+ if (!_dbus_transport_get_is_authenticated (transport))
-+ return TRUE;
-+
-+ oom = FALSE;
-+
-+ total = 0;
-+
-+ again:
-+
-+ /* See if we've exceeded max messages and need to disable reading */
-+ check_read_watch (transport);
-+
-+ if (total > unix_transport->max_bytes_read_per_iteration)
-+ {
-+ _dbus_verbose ("%d bytes exceeds %d bytes read per iteration, returning\n",
-+ total, unix_transport->max_bytes_read_per_iteration);
-+ goto out;
-+ }
-+
-+ _dbus_assert (unix_transport->read_watch != NULL ||
-+ transport->disconnected);
-+
-+ if (transport->disconnected)
-+ goto out;
-+
-+ if (!dbus_watch_get_enabled (unix_transport->read_watch))
-+ return TRUE;
-+
-+ if (_dbus_auth_needs_decoding (transport->auth))
-+ {
-+ if (_dbus_string_get_length (&unix_transport->encoded_incoming) > 0)
-+ bytes_read = _dbus_string_get_length (&unix_transport->encoded_incoming);
-+ else
-+ bytes_read = _dbus_read (unix_transport->fd,
-+ &unix_transport->encoded_incoming,
-+ unix_transport->max_bytes_read_per_iteration);
-+
-+ _dbus_assert (_dbus_string_get_length (&unix_transport->encoded_incoming) ==
-+ bytes_read);
-+
-+ if (bytes_read > 0)
-+ {
-+ int orig_len;
-+
-+ _dbus_message_loader_get_buffer (transport->loader,
-+ &buffer);
-+
-+ orig_len = _dbus_string_get_length (buffer);
-+
-+ if (!_dbus_auth_decode_data (transport->auth,
-+ &unix_transport->encoded_incoming,
-+ buffer))
-+ {
-+ _dbus_verbose ("Out of memory decoding incoming data\n");
-+ oom = TRUE;
-+ goto out;
-+ }
-+
-+ _dbus_message_loader_return_buffer (transport->loader,
-+ buffer,
-+ _dbus_string_get_length (buffer) - orig_len);
-+
-+ _dbus_string_set_length (&unix_transport->encoded_incoming, 0);
-+ }
-+ }
-+ else
-+ {
-+ _dbus_message_loader_get_buffer (transport->loader,
-+ &buffer);
-+
-+ bytes_read = _dbus_read (unix_transport->fd,
-+ buffer, unix_transport->max_bytes_read_per_iteration);
-+
-+ _dbus_message_loader_return_buffer (transport->loader,
-+ buffer,
-+ bytes_read < 0 ? 0 : bytes_read);
-+ }
-+
-+ if (bytes_read < 0)
-+ {
-+ /* EINTR already handled for us */
-+
-+ if (errno == ENOMEM)
-+ {
-+ _dbus_verbose ("Out of memory in read()/do_reading()\n");
-+ oom = TRUE;
-+ goto out;
-+ }
-+ else if (errno == EAGAIN ||
-+ errno == EWOULDBLOCK)
-+ goto out;
-+ else
-+ {
-+ _dbus_verbose ("Error reading from remote app: %s\n",
-+ _dbus_strerror (errno));
-+ do_io_error (transport);
-+ goto out;
-+ }
-+ }
-+ else if (bytes_read == 0)
-+ {
-+ _dbus_verbose ("Disconnected from remote app\n");
-+ do_io_error (transport);
-+ goto out;
-+ }
-+ else
-+ {
-+ _dbus_verbose (" read %d bytes\n", bytes_read);
-+
-+ total += bytes_read;
-+
-+ if (!_dbus_transport_queue_messages (transport))
-+ {
-+ oom = TRUE;
-+ _dbus_verbose (" out of memory when queueing messages we just read in the transport\n");
-+ goto out;
-+ }
-+
-+ /* Try reading more data until we get EAGAIN and return, or
-+ * exceed max bytes per iteration. If in blocking mode of
-+ * course we'll block instead of returning.
-+ */
-+ goto again;
-+ }
-+
-+ out:
-+ if (oom)
-+ return FALSE;
-+ else
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+unix_handle_watch (DBusTransport *transport,
-+ DBusWatch *watch,
-+ unsigned int flags)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+
-+ _dbus_assert (watch == unix_transport->read_watch ||
-+ watch == unix_transport->write_watch);
-+ _dbus_assert (watch != NULL);
-+
-+ /* Disconnect in case of an error. In case of hangup do not
-+ * disconnect the transport because data can still be in the buffer
-+ * and do_reading may need several iteration to read it all (because
-+ * of its max_bytes_read_per_iteration limit). The condition where
-+ * flags == HANGUP (without READABLE) probably never happen in fact.
-+ */
-+ if ((flags & DBUS_WATCH_ERROR) ||
-+ ((flags & DBUS_WATCH_HANGUP) && !(flags & DBUS_WATCH_READABLE)))
-+ {
-+ _dbus_verbose ("Hang up or error on watch\n");
-+ _dbus_transport_disconnect (transport);
-+ return TRUE;
-+ }
-+
-+ if (watch == unix_transport->read_watch &&
-+ (flags & DBUS_WATCH_READABLE))
-+ {
-+ dbus_bool_t auth_finished;
-+#if 1
-+ _dbus_verbose ("handling read watch %p flags = %x\n",
-+ watch, flags);
-+#endif
-+ if (!do_authentication (transport, TRUE, FALSE, &auth_finished))
-+ return FALSE;
-+
-+ /* We don't want to do a read immediately following
-+ * a successful authentication. This is so we
-+ * have a chance to propagate the authentication
-+ * state further up. Specifically, we need to
-+ * process any pending data from the auth object.
-+ */
-+ if (!auth_finished)
-+ {
-+ if (!do_reading (transport))
-+ {
-+ _dbus_verbose ("no memory to read\n");
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Not reading anything since we just completed the authentication\n");
-+ }
-+ }
-+ else if (watch == unix_transport->write_watch &&
-+ (flags & DBUS_WATCH_WRITABLE))
-+ {
-+#if 1
-+ _dbus_verbose ("handling write watch, have_outgoing_messages = %d\n",
-+ _dbus_connection_has_messages_to_send_unlocked (transport->connection));
-+#endif
-+ if (!do_authentication (transport, FALSE, TRUE, NULL))
-+ return FALSE;
-+
-+ if (!do_writing (transport))
-+ {
-+ _dbus_verbose ("no memory to write\n");
-+ return FALSE;
-+ }
-+
-+ /* See if we still need the write watch */
-+ check_write_watch (transport);
-+ }
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ else
-+ {
-+ if (watch == unix_transport->read_watch)
-+ _dbus_verbose ("asked to handle read watch with non-read condition 0x%x\n",
-+ flags);
-+ else if (watch == unix_transport->write_watch)
-+ _dbus_verbose ("asked to handle write watch with non-write condition 0x%x\n",
-+ flags);
-+ else
-+ _dbus_verbose ("asked to handle watch %p on fd %d that we don't recognize\n",
-+ watch, dbus_watch_get_fd (watch));
-+ }
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+
-+ return TRUE;
-+}
-+
-+static void
-+unix_disconnect (DBusTransport *transport)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+
-+ _dbus_verbose ("%s\n", _DBUS_FUNCTION_NAME);
-+
-+ free_watches (transport);
-+
-+ _dbus_close (unix_transport->fd, NULL);
-+ unix_transport->fd = -1;
-+}
-+
-+static dbus_bool_t
-+unix_connection_set (DBusTransport *transport)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+
-+ _dbus_watch_set_handler (unix_transport->write_watch,
-+ _dbus_connection_handle_watch,
-+ transport->connection, NULL);
-+
-+ _dbus_watch_set_handler (unix_transport->read_watch,
-+ _dbus_connection_handle_watch,
-+ transport->connection, NULL);
-+
-+ if (!_dbus_connection_add_watch_unlocked (transport->connection,
-+ unix_transport->write_watch))
-+ return FALSE;
-+
-+ if (!_dbus_connection_add_watch_unlocked (transport->connection,
-+ unix_transport->read_watch))
-+ {
-+ _dbus_connection_remove_watch_unlocked (transport->connection,
-+ unix_transport->write_watch);
-+ return FALSE;
-+ }
-+
-+ check_read_watch (transport);
-+ check_write_watch (transport);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * @todo We need to have a way to wake up the select sleep if
-+ * a new iteration request comes in with a flag (read/write) that
-+ * we're not currently serving. Otherwise a call that just reads
-+ * could block a write call forever (if there are no incoming
-+ * messages).
-+ */
-+static void
-+unix_do_iteration (DBusTransport *transport,
-+ unsigned int flags,
-+ int timeout_milliseconds)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+ DBusPollFD poll_fd;
-+ int poll_res;
-+ int poll_timeout;
-+
-+ _dbus_verbose (" iteration flags = %s%s timeout = %d read_watch = %p write_watch = %p fd = %d\n",
-+ flags & DBUS_ITERATION_DO_READING ? "read" : "",
-+ flags & DBUS_ITERATION_DO_WRITING ? "write" : "",
-+ timeout_milliseconds,
-+ unix_transport->read_watch,
-+ unix_transport->write_watch,
-+ unix_transport->fd);
-+
-+ /* the passed in DO_READING/DO_WRITING flags indicate whether to
-+ * read/write messages, but regardless of those we may need to block
-+ * for reading/writing to do auth. But if we do reading for auth,
-+ * we don't want to read any messages yet if not given DO_READING.
-+ */
-+
-+ poll_fd.fd = unix_transport->fd;
-+ poll_fd.events = 0;
-+
-+ if (_dbus_transport_get_is_authenticated (transport))
-+ {
-+ /* This is kind of a hack; if we have stuff to write, then try
-+ * to avoid the poll. This is probably about a 5% speedup on an
-+ * echo client/server.
-+ *
-+ * If both reading and writing were requested, we want to avoid this
-+ * since it could have funky effects:
-+ * - both ends spinning waiting for the other one to read
-+ * data so they can finish writing
-+ * - prioritizing all writing ahead of reading
-+ */
-+ if ((flags & DBUS_ITERATION_DO_WRITING) &&
-+ !(flags & (DBUS_ITERATION_DO_READING | DBUS_ITERATION_BLOCK)) &&
-+ !transport->disconnected &&
-+ _dbus_connection_has_messages_to_send_unlocked (transport->connection))
-+ {
-+ do_writing (transport);
-+
-+ if (transport->disconnected ||
-+ !_dbus_connection_has_messages_to_send_unlocked (transport->connection))
-+ goto out;
-+ }
-+
-+ /* If we get here, we decided to do the poll() after all */
-+ _dbus_assert (unix_transport->read_watch);
-+ if (flags & DBUS_ITERATION_DO_READING)
-+ poll_fd.events |= _DBUS_POLLIN;
-+
-+ _dbus_assert (unix_transport->write_watch);
-+ if (flags & DBUS_ITERATION_DO_WRITING)
-+ poll_fd.events |= _DBUS_POLLOUT;
-+ }
-+ else
-+ {
-+ DBusAuthState auth_state;
-+
-+ auth_state = _dbus_auth_do_work (transport->auth);
-+
-+ if (transport->receive_credentials_pending ||
-+ auth_state == DBUS_AUTH_STATE_WAITING_FOR_INPUT)
-+ poll_fd.events |= _DBUS_POLLIN;
-+
-+ if (transport->send_credentials_pending ||
-+ auth_state == DBUS_AUTH_STATE_HAVE_BYTES_TO_SEND)
-+ poll_fd.events |= _DBUS_POLLOUT;
-+ }
-+
-+ if (poll_fd.events)
-+ {
-+ if (flags & DBUS_ITERATION_BLOCK)
-+ poll_timeout = timeout_milliseconds;
-+ else
-+ poll_timeout = 0;
-+
-+ /* For blocking selects we drop the connection lock here
-+ * to avoid blocking out connection access during a potentially
-+ * indefinite blocking call. The io path is still protected
-+ * by the io_path_cond condvar, so we won't reenter this.
-+ */
-+ if (flags & DBUS_ITERATION_BLOCK)
-+ {
-+ _dbus_verbose ("unlock %s pre poll\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_unlock (transport->connection);
-+ }
-+
-+ again:
-+ poll_res = _dbus_poll (&poll_fd, 1, poll_timeout);
-+
-+ if (poll_res < 0 && errno == EINTR)
-+ goto again;
-+
-+ if (flags & DBUS_ITERATION_BLOCK)
-+ {
-+ _dbus_verbose ("lock %s post poll\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_lock (transport->connection);
-+ }
-+
-+ if (poll_res >= 0)
-+ {
-+ if (poll_fd.revents & _DBUS_POLLERR)
-+ do_io_error (transport);
-+ else
-+ {
-+ dbus_bool_t need_read = (poll_fd.revents & _DBUS_POLLIN) > 0;
-+ dbus_bool_t need_write = (poll_fd.revents & _DBUS_POLLOUT) > 0;
-+ dbus_bool_t authentication_completed;
-+
-+ _dbus_verbose ("in iteration, need_read=%d need_write=%d\n",
-+ need_read, need_write);
-+ do_authentication (transport, need_read, need_write,
-+ &authentication_completed);
-+
-+ /* See comment in unix_handle_watch. */
-+ if (authentication_completed)
-+ goto out;
-+
-+ if (need_read && (flags & DBUS_ITERATION_DO_READING))
-+ do_reading (transport);
-+ if (need_write && (flags & DBUS_ITERATION_DO_WRITING))
-+ do_writing (transport);
-+ }
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Error from _dbus_poll(): %s\n",
-+ _dbus_strerror (errno));
-+ }
-+ }
-+
-+
-+ out:
-+ /* We need to install the write watch only if we did not
-+ * successfully write everything. Note we need to be careful that we
-+ * don't call check_write_watch *before* do_writing, since it's
-+ * inefficient to add the write watch, and we can avoid it most of
-+ * the time since we can write immediately.
-+ *
-+ * However, we MUST always call check_write_watch(); DBusConnection code
-+ * relies on the fact that running an iteration will notice that
-+ * messages are pending.
-+ */
-+ check_write_watch (transport);
-+
-+ _dbus_verbose (" ... leaving do_iteration()\n");
-+}
-+
-+static void
-+unix_live_messages_changed (DBusTransport *transport)
-+{
-+ /* See if we should look for incoming messages again */
-+ check_read_watch (transport);
-+}
-+
-+
-+static dbus_bool_t
-+unix_get_unix_fd (DBusTransport *transport,
-+ int *fd_p)
-+{
-+ DBusTransportUnix *unix_transport = (DBusTransportUnix*) transport;
-+
-+ *fd_p = unix_transport->fd;
-+
-+ return TRUE;
-+}
-+
-+static const DBusTransportVTable unix_vtable = {
-+ unix_finalize,
-+ unix_handle_watch,
-+ unix_disconnect,
-+ unix_connection_set,
-+ unix_do_iteration,
-+ unix_live_messages_changed,
-+ unix_get_unix_fd
-+};
-+
-+/**
-+ * Creates a new transport for the given file descriptor. The file
-+ * descriptor must be nonblocking (use _dbus_set_fd_nonblocking() to
-+ * make it so). This function is shared by various transports that
-+ * boil down to a full duplex file descriptor.
-+ *
-+ * @param fd the file descriptor.
-+ * @param server_guid non-#NULL if this transport is on the server side of a connection
-+ * @param address the transport's address
-+ * @returns the new transport, or #NULL if no memory.
-+ */
-+DBusTransport*
-+_dbus_transport_new_for_fd (int fd,
-+ const DBusString *server_guid,
-+ const DBusString *address)
-+{
-+ DBusTransportUnix *unix_transport;
-+
-+ unix_transport = dbus_new0 (DBusTransportUnix, 1);
-+ if (unix_transport == NULL)
-+ return NULL;
-+
-+ if (!_dbus_string_init (&unix_transport->encoded_outgoing))
-+ goto failed_0;
-+
-+ if (!_dbus_string_init (&unix_transport->encoded_incoming))
-+ goto failed_1;
-+
-+ unix_transport->write_watch = _dbus_watch_new (fd,
-+ DBUS_WATCH_WRITABLE,
-+ FALSE,
-+ NULL, NULL, NULL);
-+ if (unix_transport->write_watch == NULL)
-+ goto failed_2;
-+
-+ unix_transport->read_watch = _dbus_watch_new (fd,
-+ DBUS_WATCH_READABLE,
-+ FALSE,
-+ NULL, NULL, NULL);
-+ if (unix_transport->read_watch == NULL)
-+ goto failed_3;
-+
-+ if (!_dbus_transport_init_base (&unix_transport->base,
-+ &unix_vtable,
-+ server_guid, address))
-+ goto failed_4;
-+
-+ unix_transport->fd = fd;
-+ unix_transport->message_bytes_written = 0;
-+
-+ /* These values should probably be tunable or something. */
-+ unix_transport->max_bytes_read_per_iteration = 2048;
-+ unix_transport->max_bytes_written_per_iteration = 2048;
-+
-+ return (DBusTransport*) unix_transport;
-+
-+ failed_4:
-+ _dbus_watch_unref (unix_transport->read_watch);
-+ failed_3:
-+ _dbus_watch_unref (unix_transport->write_watch);
-+ failed_2:
-+ _dbus_string_free (&unix_transport->encoded_incoming);
-+ failed_1:
-+ _dbus_string_free (&unix_transport->encoded_outgoing);
-+ failed_0:
-+ dbus_free (unix_transport);
-+ return NULL;
-+}
-+
-+/**
-+ * Creates a new transport for the given Unix domain socket
-+ * path. This creates a client-side of a transport.
-+ *
-+ * @todo once we add a way to escape paths in a dbus
-+ * address, this function needs to do escaping.
-+ *
-+ * @param path the path to the domain socket.
-+ * @param abstract #TRUE to use abstract socket namespace
-+ * @param error address where an error can be returned.
-+ * @returns a new transport, or #NULL on failure.
-+ */
-+DBusTransport*
-+_dbus_transport_new_for_domain_socket (const char *path,
-+ dbus_bool_t abstract,
-+ DBusError *error)
-+{
-+ int fd;
-+ DBusTransport *transport;
-+ DBusString address;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!_dbus_string_init (&address))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ fd = -1;
-+
-+ if ((abstract &&
-+ !_dbus_string_append (&address, "unix:abstract=")) ||
-+ (!abstract &&
-+ !_dbus_string_append (&address, "unix:path=")) ||
-+ !_dbus_string_append (&address, path))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed_0;
-+ }
-+
-+ fd = _dbus_connect_unix_socket (path, abstract, error);
-+ if (fd < 0)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ goto failed_0;
-+ }
-+
-+ _dbus_fd_set_close_on_exec (fd);
-+
-+ _dbus_verbose ("Successfully connected to unix socket %s\n",
-+ path);
-+
-+ transport = _dbus_transport_new_for_fd (fd, FALSE, &address);
-+ if (transport == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ goto failed_1;
-+ }
-+
-+ _dbus_string_free (&address);
-+
-+ return transport;
-+
-+ failed_1:
-+ _dbus_close (fd, NULL);
-+ failed_0:
-+ _dbus_string_free (&address);
-+ return NULL;
-+}
-+
-+/**
-+ * Creates a new transport for the given hostname and port.
-+ *
-+ * @param host the host to connect to
-+ * @param port the port to connect to
-+ * @param error location to store reason for failure.
-+ * @returns a new transport, or #NULL on failure.
-+ */
-+DBusTransport*
-+_dbus_transport_new_for_tcp_socket (const char *host,
-+ dbus_int32_t port,
-+ DBusError *error)
-+{
-+ int fd;
-+ DBusTransport *transport;
-+ DBusString address;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ if (!_dbus_string_init (&address))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_string_append (&address, "tcp:host=") ||
-+ !_dbus_string_append (&address, host) ||
-+ !_dbus_string_append (&address, ",port=") ||
-+ !_dbus_string_append_int (&address, port))
-+ {
-+ _dbus_string_free (&address);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ fd = _dbus_connect_tcp_socket (host, port, error);
-+ if (fd < 0)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_string_free (&address);
-+ return NULL;
-+ }
-+
-+ _dbus_fd_set_close_on_exec (fd);
-+
-+ _dbus_verbose ("Successfully connected to tcp socket %s:%d\n",
-+ host, port);
-+
-+ transport = _dbus_transport_new_for_fd (fd, FALSE, &address);
-+ if (transport == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_close (fd, NULL);
-+ _dbus_string_free (&address);
-+ fd = -1;
-+ }
-+
-+ _dbus_string_free (&address);
-+
-+ return transport;
-+}
-+
-+/** @} */
-+
-diff -Naur dbus-0.61.orig/dbus/dbus-transport-unix.h dbus-0.61/dbus/dbus-transport-unix.h
---- dbus-0.61.orig/dbus/dbus-transport-unix.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-transport-unix.h 2005-02-26 07:37:46.000000000 +0100
-@@ -0,0 +1,43 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-transport-unix.h UNIX socket subclasses of DBusTransport
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_TRANSPORT_UNIX_H
-+#define DBUS_TRANSPORT_UNIX_H
-+
-+#include <dbus/dbus-transport.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+DBusTransport* _dbus_transport_new_for_fd (int fd,
-+ const DBusString *server_guid,
-+ const DBusString *address);
-+DBusTransport* _dbus_transport_new_for_domain_socket (const char *path,
-+ dbus_bool_t abstract,
-+ DBusError *error);
-+DBusTransport* _dbus_transport_new_for_tcp_socket (const char *host,
-+ dbus_int32_t port,
-+ DBusError *error);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_TRANSPORT_UNIX_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-transport.c dbus-0.61/dbus/dbus-transport.c
---- dbus-0.61.orig/dbus/dbus-transport.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-transport.c 2005-05-06 00:02:11.000000000 +0200
-@@ -0,0 +1,1063 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-transport.c DBusTransport object (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-transport-protected.h"
-+#include "dbus-transport-unix.h"
-+#include "dbus-connection-internal.h"
-+#include "dbus-watch.h"
-+#include "dbus-auth.h"
-+#include "dbus-address.h"
-+#ifdef DBUS_BUILD_TESTS
-+#include "dbus-server-debug-pipe.h"
-+#endif
-+
-+/**
-+ * @defgroup DBusTransport DBusTransport object
-+ * @ingroup DBusInternals
-+ * @brief "Backend" for a DBusConnection.
-+ *
-+ * Types and functions related to DBusTransport. A transport is an
-+ * abstraction that can send and receive data via various kinds of
-+ * network connections or other IPC mechanisms.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @typedef DBusTransport
-+ *
-+ * Opaque object representing a way message stream.
-+ * DBusTransport abstracts various kinds of actual
-+ * transport mechanism, such as different network protocols,
-+ * or encryption schemes.
-+ */
-+
-+static void
-+live_messages_size_notify (DBusCounter *counter,
-+ void *user_data)
-+{
-+ DBusTransport *transport = user_data;
-+
-+ _dbus_transport_ref (transport);
-+
-+#if 0
-+ _dbus_verbose ("Counter value is now %d\n",
-+ (int) _dbus_counter_get_value (counter));
-+#endif
-+
-+ /* disable or re-enable the read watch for the transport if
-+ * required.
-+ */
-+ if (* transport->vtable->live_messages_changed)
-+ (* transport->vtable->live_messages_changed) (transport);
-+
-+ _dbus_transport_unref (transport);
-+}
-+
-+/**
-+ * Initializes the base class members of DBusTransport. Chained up to
-+ * by subclasses in their constructor. The server GUID is the
-+ * globally unique ID for the server creating this connection
-+ * and will be #NULL for the client side of a connection. The GUID
-+ * is in hex format.
-+ *
-+ * @param transport the transport being created.
-+ * @param vtable the subclass vtable.
-+ * @param server_guid non-#NULL if this transport is on the server side of a connection
-+ * @param address the address of the transport
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_transport_init_base (DBusTransport *transport,
-+ const DBusTransportVTable *vtable,
-+ const DBusString *server_guid,
-+ const DBusString *address)
-+{
-+ DBusMessageLoader *loader;
-+ DBusAuth *auth;
-+ DBusCounter *counter;
-+ char *address_copy;
-+
-+ loader = _dbus_message_loader_new ();
-+ if (loader == NULL)
-+ return FALSE;
-+
-+ if (server_guid)
-+ auth = _dbus_auth_server_new (server_guid);
-+ else
-+ auth = _dbus_auth_client_new ();
-+ if (auth == NULL)
-+ {
-+ _dbus_message_loader_unref (loader);
-+ return FALSE;
-+ }
-+
-+ counter = _dbus_counter_new ();
-+ if (counter == NULL)
-+ {
-+ _dbus_auth_unref (auth);
-+ _dbus_message_loader_unref (loader);
-+ return FALSE;
-+ }
-+
-+ if (server_guid)
-+ {
-+ _dbus_assert (address == NULL);
-+ address_copy = NULL;
-+ }
-+ else
-+ {
-+ _dbus_assert (address != NULL);
-+
-+ if (!_dbus_string_copy_data (address, &address_copy))
-+ {
-+ _dbus_counter_unref (counter);
-+ _dbus_auth_unref (auth);
-+ _dbus_message_loader_unref (loader);
-+ return FALSE;
-+ }
-+ }
-+
-+ transport->refcount = 1;
-+ transport->vtable = vtable;
-+ transport->loader = loader;
-+ transport->auth = auth;
-+ transport->live_messages_size = counter;
-+ transport->authenticated = FALSE;
-+ transport->disconnected = FALSE;
-+ transport->is_server = (server_guid != NULL);
-+ transport->send_credentials_pending = !transport->is_server;
-+ transport->receive_credentials_pending = transport->is_server;
-+ transport->address = address_copy;
-+
-+ transport->unix_user_function = NULL;
-+ transport->unix_user_data = NULL;
-+ transport->free_unix_user_data = NULL;
-+
-+ transport->expected_guid = NULL;
-+
-+ /* Try to default to something that won't totally hose the system,
-+ * but doesn't impose too much of a limitation.
-+ */
-+ transport->max_live_messages_size = _DBUS_ONE_MEGABYTE * 63;
-+
-+ transport->credentials.pid = -1;
-+ transport->credentials.uid = -1;
-+ transport->credentials.gid = -1;
-+
-+ _dbus_counter_set_notify (transport->live_messages_size,
-+ transport->max_live_messages_size,
-+ live_messages_size_notify,
-+ transport);
-+
-+ if (transport->address)
-+ _dbus_verbose ("Initialized transport on address %s\n", transport->address);
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Finalizes base class members of DBusTransport.
-+ * Chained up to from subclass finalizers.
-+ *
-+ * @param transport the transport.
-+ */
-+void
-+_dbus_transport_finalize_base (DBusTransport *transport)
-+{
-+ if (!transport->disconnected)
-+ _dbus_transport_disconnect (transport);
-+
-+ if (transport->free_unix_user_data != NULL)
-+ (* transport->free_unix_user_data) (transport->unix_user_data);
-+
-+ _dbus_message_loader_unref (transport->loader);
-+ _dbus_auth_unref (transport->auth);
-+ _dbus_counter_set_notify (transport->live_messages_size,
-+ 0, NULL, NULL);
-+ _dbus_counter_unref (transport->live_messages_size);
-+ dbus_free (transport->address);
-+ dbus_free (transport->expected_guid);
-+}
-+
-+/**
-+ * Try to open a new transport for the given address entry. (This
-+ * opens a client-side-of-the-connection transport.)
-+ *
-+ * @param entry the address entry
-+ * @param error location to store reason for failure.
-+ * @returns new transport of #NULL on failure.
-+ */
-+DBusTransport*
-+_dbus_transport_open (DBusAddressEntry *entry,
-+ DBusError *error)
-+{
-+ DBusTransport *transport;
-+ const char *address_problem_type;
-+ const char *address_problem_field;
-+ const char *address_problem_other;
-+ const char *method;
-+ const char *expected_guid_orig;
-+ char *expected_guid;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ transport = NULL;
-+ address_problem_type = NULL;
-+ address_problem_field = NULL;
-+ address_problem_other = NULL;
-+ expected_guid_orig = dbus_address_entry_get_value (entry, "guid");
-+ expected_guid = _dbus_strdup (expected_guid_orig);
-+
-+ if (expected_guid_orig != NULL && expected_guid == NULL)
-+ {
-+ _DBUS_SET_OOM (error);
-+ return NULL;
-+ }
-+
-+ method = dbus_address_entry_get_method (entry);
-+ _dbus_assert (method != NULL);
-+
-+ if (strcmp (method, "unix") == 0)
-+ {
-+ const char *path = dbus_address_entry_get_value (entry, "path");
-+ const char *tmpdir = dbus_address_entry_get_value (entry, "tmpdir");
-+ const char *abstract = dbus_address_entry_get_value (entry, "abstract");
-+
-+ if (tmpdir != NULL)
-+ {
-+ address_problem_other = "cannot use the \"tmpdir\" option for an address to connect to, only in an address to listen on";
-+ goto bad_address;
-+ }
-+
-+ if (path == NULL && abstract == NULL)
-+ {
-+ address_problem_type = "unix";
-+ address_problem_field = "path or abstract";
-+ goto bad_address;
-+ }
-+
-+ if (path != NULL && abstract != NULL)
-+ {
-+ address_problem_other = "can't specify both \"path\" and \"abstract\" options in an address";
-+ goto bad_address;
-+ }
-+
-+ if (path)
-+ transport = _dbus_transport_new_for_domain_socket (path, FALSE,
-+ error);
-+ else
-+ transport = _dbus_transport_new_for_domain_socket (abstract, TRUE,
-+ error);
-+ }
-+ else if (strcmp (method, "tcp") == 0)
-+ {
-+ const char *host = dbus_address_entry_get_value (entry, "host");
-+ const char *port = dbus_address_entry_get_value (entry, "port");
-+ DBusString str;
-+ long lport;
-+ dbus_bool_t sresult;
-+
-+ if (port == NULL)
-+ {
-+ address_problem_type = "tcp";
-+ address_problem_field = "port";
-+ goto bad_address;
-+ }
-+
-+ _dbus_string_init_const (&str, port);
-+ sresult = _dbus_string_parse_int (&str, 0, &lport, NULL);
-+ _dbus_string_free (&str);
-+
-+ if (sresult == FALSE || lport <= 0 || lport > 65535)
-+ {
-+ address_problem_other = "Port is not an integer between 0 and 65535";
-+ goto bad_address;
-+ }
-+
-+ transport = _dbus_transport_new_for_tcp_socket (host, lport, error);
-+ }
-+#ifdef DBUS_BUILD_TESTS
-+ else if (strcmp (method, "debug-pipe") == 0)
-+ {
-+ const char *name = dbus_address_entry_get_value (entry, "name");
-+
-+ if (name == NULL)
-+ {
-+ address_problem_type = "debug-pipe";
-+ address_problem_field = "name";
-+ goto bad_address;
-+ }
-+
-+ transport = _dbus_transport_debug_pipe_new (name, error);
-+ }
-+#endif
-+ else
-+ {
-+ address_problem_other = "Unknown address type (examples of valid types are \"unix\" and \"tcp\")";
-+ goto bad_address;
-+ }
-+
-+ if (transport == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ dbus_free (expected_guid);
-+ }
-+ else
-+ {
-+ transport->expected_guid = expected_guid;
-+ }
-+
-+ return transport;
-+
-+ bad_address:
-+ dbus_free (expected_guid);
-+
-+ if (address_problem_type != NULL)
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "Address of type %s was missing argument %s",
-+ address_problem_type, address_problem_field);
-+ else
-+ dbus_set_error (error, DBUS_ERROR_BAD_ADDRESS,
-+ "Could not parse address: %s",
-+ address_problem_other);
-+
-+ return NULL;
-+}
-+
-+/**
-+ * Increments the reference count for the transport.
-+ *
-+ * @param transport the transport.
-+ * @returns the transport.
-+ */
-+DBusTransport *
-+_dbus_transport_ref (DBusTransport *transport)
-+{
-+ _dbus_assert (transport->refcount > 0);
-+
-+ transport->refcount += 1;
-+
-+ return transport;
-+}
-+
-+/**
-+ * Decrements the reference count for the transport.
-+ * Disconnects and finalizes the transport if
-+ * the reference count reaches zero.
-+ *
-+ * @param transport the transport.
-+ */
-+void
-+_dbus_transport_unref (DBusTransport *transport)
-+{
-+ _dbus_assert (transport != NULL);
-+ _dbus_assert (transport->refcount > 0);
-+
-+ transport->refcount -= 1;
-+ if (transport->refcount == 0)
-+ {
-+ _dbus_verbose ("%s: finalizing\n", _DBUS_FUNCTION_NAME);
-+
-+ _dbus_assert (transport->vtable->finalize != NULL);
-+
-+ (* transport->vtable->finalize) (transport);
-+ }
-+}
-+
-+/**
-+ * Closes our end of the connection to a remote application. Further
-+ * attempts to use this transport will fail. Only the first call to
-+ * _dbus_transport_disconnect() will have an effect.
-+ *
-+ * @param transport the transport.
-+ *
-+ */
-+void
-+_dbus_transport_disconnect (DBusTransport *transport)
-+{
-+ _dbus_verbose ("%s start\n", _DBUS_FUNCTION_NAME);
-+
-+ _dbus_assert (transport->vtable->disconnect != NULL);
-+
-+ if (transport->disconnected)
-+ return;
-+
-+ (* transport->vtable->disconnect) (transport);
-+
-+ transport->disconnected = TRUE;
-+
-+ _dbus_verbose ("%s end\n", _DBUS_FUNCTION_NAME);
-+}
-+
-+/**
-+ * Returns #TRUE if the transport has not been disconnected.
-+ * Disconnection can result from _dbus_transport_disconnect()
-+ * or because the server drops its end of the connection.
-+ *
-+ * @param transport the transport.
-+ * @returns whether we're connected
-+ */
-+dbus_bool_t
-+_dbus_transport_get_is_connected (DBusTransport *transport)
-+{
-+ return !transport->disconnected;
-+}
-+
-+/**
-+ * Returns #TRUE if we have been authenticated. Will return #TRUE
-+ * even if the transport is disconnected.
-+ *
-+ * @todo we drop connection->mutex when calling the unix_user_function,
-+ * which may not be safe really.
-+ *
-+ * @param transport the transport
-+ * @returns whether we're authenticated
-+ */
-+dbus_bool_t
-+_dbus_transport_get_is_authenticated (DBusTransport *transport)
-+{
-+ if (transport->authenticated)
-+ return TRUE;
-+ else
-+ {
-+ dbus_bool_t maybe_authenticated;
-+
-+ if (transport->disconnected)
-+ return FALSE;
-+
-+ /* paranoia ref since we call user callbacks sometimes */
-+ _dbus_connection_ref_unlocked (transport->connection);
-+
-+ maybe_authenticated =
-+ (!(transport->send_credentials_pending ||
-+ transport->receive_credentials_pending));
-+
-+ if (maybe_authenticated)
-+ {
-+ switch (_dbus_auth_do_work (transport->auth))
-+ {
-+ case DBUS_AUTH_STATE_AUTHENTICATED:
-+ /* leave as maybe_authenticated */
-+ break;
-+ default:
-+ maybe_authenticated = FALSE;
-+ }
-+ }
-+
-+ if (maybe_authenticated && !transport->is_server)
-+ {
-+ const char *server_guid;
-+
-+ server_guid = _dbus_auth_get_guid_from_server (transport->auth);
-+ _dbus_assert (server_guid != NULL);
-+
-+ if (transport->expected_guid &&
-+ strcmp (transport->expected_guid, server_guid) != 0)
-+ {
-+ _dbus_verbose ("Client expected GUID '%s' and we got '%s' from the server\n",
-+ transport->expected_guid, server_guid);
-+ _dbus_transport_disconnect (transport);
-+ _dbus_connection_unref_unlocked (transport->connection);
-+ return FALSE;
-+ }
-+
-+ if (transport->expected_guid == NULL)
-+ {
-+ transport->expected_guid = _dbus_strdup (server_guid);
-+
-+ if (transport->expected_guid == NULL)
-+ {
-+ _dbus_verbose ("No memory to complete auth in %s\n", _DBUS_FUNCTION_NAME);
-+ return FALSE;
-+ }
-+ }
-+ }
-+
-+ /* If we've authenticated as some identity, check that the auth
-+ * identity is the same as our own identity. In the future, we
-+ * may have API allowing applications to specify how this is
-+ * done, for example they may allow connection as any identity,
-+ * but then impose restrictions on certain identities.
-+ * Or they may give certain identities extra privileges.
-+ */
-+
-+ if (maybe_authenticated && transport->is_server)
-+ {
-+ DBusCredentials auth_identity;
-+
-+ _dbus_auth_get_identity (transport->auth, &auth_identity);
-+
-+ if (transport->unix_user_function != NULL)
-+ {
-+ dbus_bool_t allow;
-+ DBusConnection *connection;
-+ DBusAllowUnixUserFunction unix_user_function;
-+ void *unix_user_data;
-+
-+ /* Dropping the lock here probably isn't that safe. */
-+
-+ connection = transport->connection;
-+ unix_user_function = transport->unix_user_function;
-+ unix_user_data = transport->unix_user_data;
-+
-+ _dbus_verbose ("unlock %s\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_unlock (connection);
-+
-+ allow = (* unix_user_function) (connection,
-+ auth_identity.uid,
-+ unix_user_data);
-+
-+ _dbus_verbose ("lock %s post unix user function\n", _DBUS_FUNCTION_NAME);
-+ _dbus_connection_lock (connection);
-+
-+ if (allow)
-+ {
-+ _dbus_verbose ("Client UID "DBUS_UID_FORMAT" authorized\n", auth_identity.uid);
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Client UID "DBUS_UID_FORMAT
-+ " was rejected, disconnecting\n",
-+ auth_identity.uid);
-+ _dbus_transport_disconnect (transport);
-+ _dbus_connection_unref_unlocked (connection);
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ DBusCredentials our_identity;
-+
-+ _dbus_credentials_from_current_process (&our_identity);
-+
-+ if (!_dbus_credentials_match (&our_identity,
-+ &auth_identity))
-+ {
-+ _dbus_verbose ("Client authorized as UID "DBUS_UID_FORMAT
-+ " but our UID is "DBUS_UID_FORMAT", disconnecting\n",
-+ auth_identity.uid, our_identity.uid);
-+ _dbus_transport_disconnect (transport);
-+ _dbus_connection_unref_unlocked (transport->connection);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ _dbus_verbose ("Client authorized as UID "DBUS_UID_FORMAT
-+ " matching our UID "DBUS_UID_FORMAT"\n",
-+ auth_identity.uid, our_identity.uid);
-+ }
-+ }
-+ }
-+
-+ transport->authenticated = maybe_authenticated;
-+
-+ _dbus_connection_unref_unlocked (transport->connection);
-+ return maybe_authenticated;
-+ }
-+}
-+
-+/**
-+ * Gets the address of a transport. It will be
-+ * #NULL for a server-side transport.
-+ *
-+ * @param transport the transport
-+ * @returns transport's address
-+ */
-+const char*
-+_dbus_transport_get_address (DBusTransport *transport)
-+{
-+ return transport->address;
-+}
-+
-+/**
-+ * Handles a watch by reading data, writing data, or disconnecting
-+ * the transport, as appropriate for the given condition.
-+ *
-+ * @param transport the transport.
-+ * @param watch the watch.
-+ * @param condition the current state of the watched file descriptor.
-+ * @returns #FALSE if not enough memory to fully handle the watch
-+ */
-+dbus_bool_t
-+_dbus_transport_handle_watch (DBusTransport *transport,
-+ DBusWatch *watch,
-+ unsigned int condition)
-+{
-+ dbus_bool_t retval;
-+
-+ _dbus_assert (transport->vtable->handle_watch != NULL);
-+
-+ if (transport->disconnected)
-+ return TRUE;
-+
-+ if (dbus_watch_get_fd (watch) < 0)
-+ {
-+ _dbus_warn ("Tried to handle an invalidated watch; this watch should have been removed\n");
-+ return TRUE;
-+ }
-+
-+ _dbus_watch_sanitize_condition (watch, &condition);
-+
-+ _dbus_transport_ref (transport);
-+ _dbus_watch_ref (watch);
-+ retval = (* transport->vtable->handle_watch) (transport, watch, condition);
-+ _dbus_watch_unref (watch);
-+ _dbus_transport_unref (transport);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Sets the connection using this transport. Allows the transport
-+ * to add watches to the connection, queue incoming messages,
-+ * and pull outgoing messages.
-+ *
-+ * @param transport the transport.
-+ * @param connection the connection.
-+ * @returns #FALSE if not enough memory
-+ */
-+dbus_bool_t
-+_dbus_transport_set_connection (DBusTransport *transport,
-+ DBusConnection *connection)
-+{
-+ _dbus_assert (transport->vtable->connection_set != NULL);
-+ _dbus_assert (transport->connection == NULL);
-+
-+ transport->connection = connection;
-+
-+ _dbus_transport_ref (transport);
-+ if (!(* transport->vtable->connection_set) (transport))
-+ transport->connection = NULL;
-+ _dbus_transport_unref (transport);
-+
-+ return transport->connection != NULL;
-+}
-+
-+/**
-+ * Get the UNIX file descriptor, if any.
-+ *
-+ * @param transport the transport
-+ * @param fd_p pointer to fill in with the descriptor
-+ * @returns #TRUE if a descriptor was available
-+ */
-+dbus_bool_t
-+_dbus_transport_get_unix_fd (DBusTransport *transport,
-+ int *fd_p)
-+{
-+ dbus_bool_t retval;
-+
-+ if (transport->vtable->get_unix_fd == NULL)
-+ return FALSE;
-+
-+ if (transport->disconnected)
-+ return FALSE;
-+
-+ _dbus_transport_ref (transport);
-+
-+ retval = (* transport->vtable->get_unix_fd) (transport,
-+ fd_p);
-+
-+ _dbus_transport_unref (transport);
-+
-+ return retval;
-+}
-+
-+/**
-+ * Performs a single poll()/select() on the transport's file
-+ * descriptors and then reads/writes data as appropriate,
-+ * queueing incoming messages and sending outgoing messages.
-+ * This is the backend for _dbus_connection_do_iteration().
-+ * See _dbus_connection_do_iteration() for full details.
-+ *
-+ * @param transport the transport.
-+ * @param flags indicates whether to read or write, and whether to block.
-+ * @param timeout_milliseconds if blocking, timeout or -1 for no timeout.
-+ */
-+void
-+_dbus_transport_do_iteration (DBusTransport *transport,
-+ unsigned int flags,
-+ int timeout_milliseconds)
-+{
-+ _dbus_assert (transport->vtable->do_iteration != NULL);
-+
-+ _dbus_verbose ("Transport iteration flags 0x%x timeout %d connected = %d\n",
-+ flags, timeout_milliseconds, !transport->disconnected);
-+
-+ if ((flags & (DBUS_ITERATION_DO_WRITING |
-+ DBUS_ITERATION_DO_READING)) == 0)
-+ return; /* Nothing to do */
-+
-+ if (transport->disconnected)
-+ return;
-+
-+ _dbus_transport_ref (transport);
-+ (* transport->vtable->do_iteration) (transport, flags,
-+ timeout_milliseconds);
-+ _dbus_transport_unref (transport);
-+
-+ _dbus_verbose ("%s end\n", _DBUS_FUNCTION_NAME);
-+}
-+
-+static dbus_bool_t
-+recover_unused_bytes (DBusTransport *transport)
-+{
-+ if (_dbus_auth_needs_decoding (transport->auth))
-+ {
-+ DBusString plaintext;
-+ const DBusString *encoded;
-+ DBusString *buffer;
-+ int orig_len;
-+
-+ if (!_dbus_string_init (&plaintext))
-+ goto nomem;
-+
-+ _dbus_auth_get_unused_bytes (transport->auth,
-+ &encoded);
-+
-+ if (!_dbus_auth_decode_data (transport->auth,
-+ encoded, &plaintext))
-+ {
-+ _dbus_string_free (&plaintext);
-+ goto nomem;
-+ }
-+
-+ _dbus_message_loader_get_buffer (transport->loader,
-+ &buffer);
-+
-+ orig_len = _dbus_string_get_length (buffer);
-+
-+ if (!_dbus_string_move (&plaintext, 0, buffer,
-+ orig_len))
-+ {
-+ _dbus_string_free (&plaintext);
-+ goto nomem;
-+ }
-+
-+ _dbus_verbose (" %d unused bytes sent to message loader\n",
-+ _dbus_string_get_length (buffer) -
-+ orig_len);
-+
-+ _dbus_message_loader_return_buffer (transport->loader,
-+ buffer,
-+ _dbus_string_get_length (buffer) -
-+ orig_len);
-+
-+ _dbus_auth_delete_unused_bytes (transport->auth);
-+
-+ _dbus_string_free (&plaintext);
-+ }
-+ else
-+ {
-+ const DBusString *bytes;
-+ DBusString *buffer;
-+ int orig_len;
-+ dbus_bool_t succeeded;
-+
-+ _dbus_message_loader_get_buffer (transport->loader,
-+ &buffer);
-+
-+ orig_len = _dbus_string_get_length (buffer);
-+
-+ _dbus_auth_get_unused_bytes (transport->auth,
-+ &bytes);
-+
-+ succeeded = TRUE;
-+ if (!_dbus_string_copy (bytes, 0, buffer, _dbus_string_get_length (buffer)))
-+ succeeded = FALSE;
-+
-+ _dbus_verbose (" %d unused bytes sent to message loader\n",
-+ _dbus_string_get_length (buffer) -
-+ orig_len);
-+
-+ _dbus_message_loader_return_buffer (transport->loader,
-+ buffer,
-+ _dbus_string_get_length (buffer) -
-+ orig_len);
-+
-+ if (succeeded)
-+ _dbus_auth_delete_unused_bytes (transport->auth);
-+ else
-+ goto nomem;
-+ }
-+
-+ return TRUE;
-+
-+ nomem:
-+ _dbus_verbose ("Not enough memory to transfer unused bytes from auth conversation\n");
-+ return FALSE;
-+}
-+
-+/**
-+ * Reports our current dispatch status (whether there's buffered
-+ * data to be queued as messages, or not, or we need memory).
-+ *
-+ * @param transport the transport
-+ * @returns current status
-+ */
-+DBusDispatchStatus
-+_dbus_transport_get_dispatch_status (DBusTransport *transport)
-+{
-+ if (_dbus_counter_get_value (transport->live_messages_size) >= transport->max_live_messages_size)
-+ return DBUS_DISPATCH_COMPLETE; /* complete for now */
-+
-+ if (!_dbus_transport_get_is_authenticated (transport))
-+ {
-+ if (_dbus_auth_do_work (transport->auth) ==
-+ DBUS_AUTH_STATE_WAITING_FOR_MEMORY)
-+ return DBUS_DISPATCH_NEED_MEMORY;
-+ else if (!_dbus_transport_get_is_authenticated (transport))
-+ return DBUS_DISPATCH_COMPLETE;
-+ }
-+
-+ if (!transport->unused_bytes_recovered &&
-+ !recover_unused_bytes (transport))
-+ return DBUS_DISPATCH_NEED_MEMORY;
-+
-+ transport->unused_bytes_recovered = TRUE;
-+
-+ if (!_dbus_message_loader_queue_messages (transport->loader))
-+ return DBUS_DISPATCH_NEED_MEMORY;
-+
-+ if (_dbus_message_loader_peek_message (transport->loader) != NULL)
-+ return DBUS_DISPATCH_DATA_REMAINS;
-+ else
-+ return DBUS_DISPATCH_COMPLETE;
-+}
-+
-+/**
-+ * Processes data we've read while handling a watch, potentially
-+ * converting some of it to messages and queueing those messages on
-+ * the connection.
-+ *
-+ * @param transport the transport
-+ * @returns #TRUE if we had enough memory to queue all messages
-+ */
-+dbus_bool_t
-+_dbus_transport_queue_messages (DBusTransport *transport)
-+{
-+ DBusDispatchStatus status;
-+
-+#if 0
-+ _dbus_verbose ("_dbus_transport_queue_messages()\n");
-+#endif
-+
-+ /* Queue any messages */
-+ while ((status = _dbus_transport_get_dispatch_status (transport)) == DBUS_DISPATCH_DATA_REMAINS)
-+ {
-+ DBusMessage *message;
-+ DBusList *link;
-+
-+ link = _dbus_message_loader_pop_message_link (transport->loader);
-+ _dbus_assert (link != NULL);
-+
-+ message = link->data;
-+
-+ _dbus_verbose ("queueing received message %p\n", message);
-+
-+ if (!_dbus_message_add_size_counter (message, transport->live_messages_size))
-+ {
-+ _dbus_message_loader_putback_message_link (transport->loader,
-+ link);
-+ status = DBUS_DISPATCH_NEED_MEMORY;
-+ break;
-+ }
-+ else
-+ {
-+ /* pass ownership of link and message ref to connection */
-+ _dbus_connection_queue_received_message_link (transport->connection,
-+ link);
-+ }
-+ }
-+
-+ if (_dbus_message_loader_get_is_corrupted (transport->loader))
-+ {
-+ _dbus_verbose ("Corrupted message stream, disconnecting\n");
-+ _dbus_transport_disconnect (transport);
-+ }
-+
-+ return status != DBUS_DISPATCH_NEED_MEMORY;
-+}
-+
-+/**
-+ * See dbus_connection_set_max_message_size().
-+ *
-+ * @param transport the transport
-+ * @param size the max size of a single message
-+ */
-+void
-+_dbus_transport_set_max_message_size (DBusTransport *transport,
-+ long size)
-+{
-+ _dbus_message_loader_set_max_message_size (transport->loader, size);
-+}
-+
-+/**
-+ * See dbus_connection_get_max_message_size().
-+ *
-+ * @param transport the transport
-+ * @returns max message size
-+ */
-+long
-+_dbus_transport_get_max_message_size (DBusTransport *transport)
-+{
-+ return _dbus_message_loader_get_max_message_size (transport->loader);
-+}
-+
-+/**
-+ * See dbus_connection_set_max_received_size().
-+ *
-+ * @param transport the transport
-+ * @param size the max size of all incoming messages
-+ */
-+void
-+_dbus_transport_set_max_received_size (DBusTransport *transport,
-+ long size)
-+{
-+ transport->max_live_messages_size = size;
-+ _dbus_counter_set_notify (transport->live_messages_size,
-+ transport->max_live_messages_size,
-+ live_messages_size_notify,
-+ transport);
-+}
-+
-+
-+/**
-+ * See dbus_connection_get_max_received_size().
-+ *
-+ * @param transport the transport
-+ * @returns max bytes for all live messages
-+ */
-+long
-+_dbus_transport_get_max_received_size (DBusTransport *transport)
-+{
-+ return transport->max_live_messages_size;
-+}
-+
-+/**
-+ * See dbus_connection_get_unix_user().
-+ *
-+ * @param transport the transport
-+ * @param uid return location for the user ID
-+ * @returns #TRUE if uid is filled in with a valid user ID
-+ */
-+dbus_bool_t
-+_dbus_transport_get_unix_user (DBusTransport *transport,
-+ unsigned long *uid)
-+{
-+ DBusCredentials auth_identity;
-+
-+ *uid = _DBUS_INT32_MAX; /* better than some root or system user in
-+ * case of bugs in the caller. Caller should
-+ * never use this value on purpose, however.
-+ */
-+
-+ if (!transport->authenticated)
-+ return FALSE;
-+
-+ _dbus_auth_get_identity (transport->auth, &auth_identity);
-+
-+ if (auth_identity.uid != DBUS_UID_UNSET)
-+ {
-+ *uid = auth_identity.uid;
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * See dbus_connection_get_unix_process_id().
-+ *
-+ * @param transport the transport
-+ * @param pid return location for the process ID
-+ * @returns #TRUE if uid is filled in with a valid process ID
-+ */
-+dbus_bool_t
-+_dbus_transport_get_unix_process_id (DBusTransport *transport,
-+ unsigned long *pid)
-+{
-+ DBusCredentials auth_identity;
-+
-+ *pid = DBUS_PID_UNSET; /* Caller should never use this value on purpose,
-+ * but we set it to a safe number, INT_MAX,
-+ * just to root out possible bugs in bad callers.
-+ */
-+
-+ if (!transport->authenticated)
-+ return FALSE;
-+
-+ _dbus_auth_get_identity (transport->auth, &auth_identity);
-+
-+ if (auth_identity.pid != DBUS_PID_UNSET)
-+ {
-+ *pid = auth_identity.pid;
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * See dbus_connection_set_unix_user_function().
-+ *
-+ * @param transport the transport
-+ * @param function the predicate
-+ * @param data data to pass to the predicate
-+ * @param free_data_function function to free the data
-+ * @param old_data the old user data to be freed
-+ * @param old_free_data_function old free data function to free it with
-+ */
-+void
-+_dbus_transport_set_unix_user_function (DBusTransport *transport,
-+ DBusAllowUnixUserFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_function,
-+ void **old_data,
-+ DBusFreeFunction *old_free_data_function)
-+{
-+ *old_data = transport->unix_user_data;
-+ *old_free_data_function = transport->free_unix_user_data;
-+
-+ transport->unix_user_function = function;
-+ transport->unix_user_data = data;
-+ transport->free_unix_user_data = free_data_function;
-+}
-+
-+/**
-+ * Sets the SASL authentication mechanisms supported by this transport.
-+ *
-+ * @param transport the transport
-+ * @param mechanisms the #NULL-terminated array of mechanisms
-+ *
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_transport_set_auth_mechanisms (DBusTransport *transport,
-+ const char **mechanisms)
-+{
-+ return _dbus_auth_set_mechanisms (transport->auth, mechanisms);
-+}
-+
-+
-+/** @} */
-diff -Naur dbus-0.61.orig/dbus/dbus-transport.h dbus-0.61/dbus/dbus-transport.h
---- dbus-0.61.orig/dbus/dbus-transport.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-transport.h 2005-02-26 07:37:46.000000000 +0100
-@@ -0,0 +1,80 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-transport.h DBusTransport object (internal to D-BUS implementation)
-+ *
-+ * Copyright (C) 2002, 2004 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_TRANSPORT_H
-+#define DBUS_TRANSPORT_H
-+
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-connection.h>
-+#include <dbus/dbus-protocol.h>
-+#include <dbus/dbus-address.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusTransport DBusTransport;
-+
-+DBusTransport* _dbus_transport_open (DBusAddressEntry *entry,
-+ DBusError *error);
-+DBusTransport* _dbus_transport_ref (DBusTransport *transport);
-+void _dbus_transport_unref (DBusTransport *transport);
-+void _dbus_transport_disconnect (DBusTransport *transport);
-+dbus_bool_t _dbus_transport_get_is_connected (DBusTransport *transport);
-+dbus_bool_t _dbus_transport_get_is_authenticated (DBusTransport *transport);
-+const char* _dbus_transport_get_address (DBusTransport *transport);
-+dbus_bool_t _dbus_transport_handle_watch (DBusTransport *transport,
-+ DBusWatch *watch,
-+ unsigned int condition);
-+dbus_bool_t _dbus_transport_set_connection (DBusTransport *transport,
-+ DBusConnection *connection);
-+void _dbus_transport_do_iteration (DBusTransport *transport,
-+ unsigned int flags,
-+ int timeout_milliseconds);
-+DBusDispatchStatus _dbus_transport_get_dispatch_status (DBusTransport *transport);
-+dbus_bool_t _dbus_transport_queue_messages (DBusTransport *transport);
-+void _dbus_transport_set_max_message_size (DBusTransport *transport,
-+ long size);
-+long _dbus_transport_get_max_message_size (DBusTransport *transport);
-+void _dbus_transport_set_max_received_size (DBusTransport *transport,
-+ long size);
-+long _dbus_transport_get_max_received_size (DBusTransport *transport);
-+dbus_bool_t _dbus_transport_get_unix_user (DBusTransport *transport,
-+ unsigned long *uid);
-+dbus_bool_t _dbus_transport_get_unix_fd (DBusTransport *transport,
-+ int *fd_p);
-+
-+dbus_bool_t _dbus_transport_get_unix_process_id (DBusTransport *transport,
-+ unsigned long *pid);
-+void _dbus_transport_set_unix_user_function (DBusTransport *transport,
-+ DBusAllowUnixUserFunction function,
-+ void *data,
-+ DBusFreeFunction free_data_function,
-+ void **old_data,
-+ DBusFreeFunction *old_free_data_function);
-+dbus_bool_t _dbus_transport_set_auth_mechanisms (DBusTransport *transport,
-+ const char **mechanisms);
-+
-+
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_TRANSPORT_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-types.h dbus-0.61/dbus/dbus-types.h
---- dbus-0.61.orig/dbus/dbus-types.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-types.h 2005-01-28 04:06:56.000000000 +0100
-@@ -0,0 +1,119 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-types.h types such as dbus_bool_t
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)
-+#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."
-+#endif
-+
-+#ifndef DBUS_TYPES_H
-+#define DBUS_TYPES_H
-+
-+#include <stddef.h>
-+#include <dbus/dbus-arch-deps.h>
-+
-+typedef dbus_uint32_t dbus_unichar_t;
-+/* boolean size must be fixed at 4 bytes due to wire protocol! */
-+typedef dbus_uint32_t dbus_bool_t;
-+
-+/* Normally docs are in .c files, but there isn't a .c file for this. */
-+/**
-+ * @defgroup DBusTypes Basic types
-+ * @ingroup DBus
-+ * @brief dbus_bool_t, dbus_int32_t, etc.
-+ *
-+ * Typedefs for common primitive types.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @typedef dbus_bool_t
-+ *
-+ * A boolean, valid values are #TRUE and #FALSE.
-+ */
-+
-+/**
-+ * @typedef dbus_uint32_t
-+ *
-+ * A 32-bit unsigned integer on all platforms.
-+ */
-+
-+/**
-+ * @typedef dbus_int32_t
-+ *
-+ * A 32-bit signed integer on all platforms.
-+ */
-+
-+/**
-+ * @typedef dbus_uint16_t
-+ *
-+ * A 16-bit unsigned integer on all platforms.
-+ */
-+
-+/**
-+ * @typedef dbus_int16_t
-+ *
-+ * A 16-bit signed integer on all platforms.
-+ */
-+
-+
-+/**
-+ * @typedef dbus_uint64_t
-+ *
-+ * A 64-bit unsigned integer on all platforms that support it.
-+ * If supported, #DBUS_HAVE_INT64 will be defined.
-+ *
-+ * C99 requires a 64-bit type and most likely all interesting
-+ * compilers support one. GLib for example flat-out requires
-+ * a 64-bit type.
-+ */
-+
-+/**
-+ * @typedef dbus_int64_t
-+ *
-+ * A 64-bit signed integer on all platforms that support it.
-+ * If supported, #DBUS_HAVE_INT64 will be defined.
-+ *
-+ * C99 requires a 64-bit type and most likely all interesting
-+ * compilers support one. GLib for example flat-out requires
-+ * a 64-bit type.
-+ */
-+
-+/**
-+ * @def DBUS_INT64_CONSTANT
-+ *
-+ * Declare a 64-bit signed integer constant. The macro
-+ * adds the necessary "LL" or whatever after the integer,
-+ * giving a literal such as "325145246765LL"
-+ */
-+
-+/**
-+ * @def DBUS_UINT64_CONSTANT
-+ *
-+ * Declare a 64-bit unsigned integer constant. The macro
-+ * adds the necessary "ULL" or whatever after the integer,
-+ * giving a literal such as "325145246765ULL"
-+ */
-+
-+/** @} */
-+
-+#endif /* DBUS_TYPES_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-userdb-util.c dbus-0.61/dbus/dbus-userdb-util.c
---- dbus-0.61.orig/dbus/dbus-userdb-util.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-userdb-util.c 2005-03-22 18:57:27.000000000 +0100
-@@ -0,0 +1,400 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-userdb-util.c Would be in dbus-userdb.c, but not used in libdbus
-+ *
-+ * Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#define DBUS_USERDB_INCLUDES_PRIVATE 1
-+#include "dbus-userdb.h"
-+#include "dbus-test.h"
-+#include "dbus-internals.h"
-+#include "dbus-protocol.h"
-+#include <string.h>
-+
-+/**
-+ * @addtogroup DBusInternalsUtils
-+ * @{
-+ */
-+
-+/**
-+ * Checks to see if the UID sent in is the console user
-+ *
-+ * @param uid UID of person to check
-+ * @param error return location for errors
-+ * @returns #TRUE if the UID is the same as the console user and there are no errors
-+ */
-+dbus_bool_t
-+_dbus_is_console_user (dbus_uid_t uid,
-+ DBusError *error)
-+{
-+
-+ DBusUserDatabase *db;
-+ const DBusUserInfo *info;
-+ dbus_bool_t result = FALSE;
-+
-+ _dbus_user_database_lock_system ();
-+
-+ db = _dbus_user_database_get_system ();
-+ if (db == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_FAILED, "Could not get system database.");
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ info = _dbus_user_database_lookup (db, uid, NULL, error);
-+
-+ if (info == NULL)
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ result = _dbus_user_at_console (info->username, error);
-+
-+ _dbus_user_database_unlock_system ();
-+
-+ return result;
-+}
-+
-+
-+/**
-+ * Gets the credentials corresponding to the given UID.
-+ *
-+ * @param uid the UID
-+ * @param credentials credentials to fill in
-+ * @returns #TRUE if the UID existed and we got some credentials
-+ */
-+dbus_bool_t
-+_dbus_credentials_from_uid (dbus_uid_t uid,
-+ DBusCredentials *credentials)
-+{
-+ DBusUserDatabase *db;
-+ const DBusUserInfo *info;
-+ _dbus_user_database_lock_system ();
-+
-+ db = _dbus_user_database_get_system ();
-+ if (db == NULL)
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_user_database_get_uid (db, uid,
-+ &info, NULL))
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ _dbus_assert (info->uid == uid);
-+
-+ credentials->pid = DBUS_PID_UNSET;
-+ credentials->uid = info->uid;
-+ credentials->gid = info->primary_gid;
-+
-+ _dbus_user_database_unlock_system ();
-+ return TRUE;
-+}
-+
-+
-+/**
-+ * Gets user ID given username
-+ *
-+ * @param username the username
-+ * @param uid return location for UID
-+ * @returns #TRUE if username existed and we got the UID
-+ */
-+dbus_bool_t
-+_dbus_get_user_id (const DBusString *username,
-+ dbus_uid_t *uid)
-+{
-+ DBusCredentials creds;
-+
-+ if (!_dbus_credentials_from_username (username, &creds))
-+ return FALSE;
-+
-+ if (creds.uid == DBUS_UID_UNSET)
-+ return FALSE;
-+
-+ *uid = creds.uid;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets group ID given groupname
-+ *
-+ * @param groupname the groupname
-+ * @param gid return location for GID
-+ * @returns #TRUE if group name existed and we got the GID
-+ */
-+dbus_bool_t
-+_dbus_get_group_id (const DBusString *groupname,
-+ dbus_gid_t *gid)
-+{
-+ DBusUserDatabase *db;
-+ const DBusGroupInfo *info;
-+ _dbus_user_database_lock_system ();
-+
-+ db = _dbus_user_database_get_system ();
-+ if (db == NULL)
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_user_database_get_groupname (db, groupname,
-+ &info, NULL))
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ *gid = info->gid;
-+
-+ _dbus_user_database_unlock_system ();
-+ return TRUE;
-+}
-+
-+/**
-+ * Looks up a gid or group name in the user database. Only one of
-+ * name or GID can be provided. There are wrapper functions for this
-+ * that are better to use, this one does no locking or anything on the
-+ * database and otherwise sort of sucks.
-+ *
-+ * @param db the database
-+ * @param gid the group ID or #DBUS_GID_UNSET
-+ * @param groupname group name or #NULL
-+ * @param error error to fill in
-+ * @returns the entry in the database
-+ */
-+DBusGroupInfo*
-+_dbus_user_database_lookup_group (DBusUserDatabase *db,
-+ dbus_gid_t gid,
-+ const DBusString *groupname,
-+ DBusError *error)
-+{
-+ DBusGroupInfo *info;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ /* See if the group is really a number */
-+ if (gid == DBUS_UID_UNSET)
-+ {
-+ unsigned long n;
-+
-+ if (_dbus_is_a_number (groupname, &n))
-+ gid = n;
-+ }
-+
-+
-+ if (gid != DBUS_GID_UNSET)
-+ info = _dbus_hash_table_lookup_ulong (db->groups, gid);
-+ else
-+ info = _dbus_hash_table_lookup_string (db->groups_by_name,
-+ _dbus_string_get_const_data (groupname));
-+ if (info)
-+ {
-+ _dbus_verbose ("Using cache for GID "DBUS_GID_FORMAT" information\n",
-+ info->gid);
-+ return info;
-+ }
-+ else
-+ {
-+ if (gid != DBUS_GID_UNSET)
-+ _dbus_verbose ("No cache for GID "DBUS_GID_FORMAT"\n",
-+ gid);
-+ else
-+ _dbus_verbose ("No cache for groupname \"%s\"\n",
-+ _dbus_string_get_const_data (groupname));
-+
-+ info = dbus_new0 (DBusGroupInfo, 1);
-+ if (info == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ if (gid != DBUS_GID_UNSET)
-+ {
-+ if (!_dbus_group_info_fill_gid (info, gid, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_group_info_free_allocated (info);
-+ return NULL;
-+ }
-+ }
-+ else
-+ {
-+ if (!_dbus_group_info_fill (info, groupname, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_group_info_free_allocated (info);
-+ return NULL;
-+ }
-+ }
-+
-+ /* don't use these past here */
-+ gid = DBUS_GID_UNSET;
-+ groupname = NULL;
-+
-+ if (!_dbus_hash_table_insert_ulong (db->groups, info->gid, info))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_group_info_free_allocated (info);
-+ return NULL;
-+ }
-+
-+
-+ if (!_dbus_hash_table_insert_string (db->groups_by_name,
-+ info->groupname,
-+ info))
-+ {
-+ _dbus_hash_table_remove_ulong (db->groups, info->gid);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ return info;
-+ }
-+}
-+
-+
-+/**
-+ * Gets the user information for the given group name,
-+ * returned group info should not be freed.
-+ *
-+ * @param db user database
-+ * @param groupname the group name
-+ * @param info return location for const ref to group info
-+ * @param error error location
-+ * @returns #FALSE if error is set
-+ */
-+dbus_bool_t
-+_dbus_user_database_get_groupname (DBusUserDatabase *db,
-+ const DBusString *groupname,
-+ const DBusGroupInfo **info,
-+ DBusError *error)
-+{
-+ *info = _dbus_user_database_lookup_group (db, DBUS_GID_UNSET, groupname, error);
-+ return *info != NULL;
-+}
-+
-+/**
-+ * Gets the user information for the given GID,
-+ * returned group info should not be freed.
-+ *
-+ * @param db user database
-+ * @param gid the group ID
-+ * @param info return location for const ref to group info
-+ * @param error error location
-+ * @returns #FALSE if error is set
-+ */
-+dbus_bool_t
-+_dbus_user_database_get_gid (DBusUserDatabase *db,
-+ dbus_gid_t gid,
-+ const DBusGroupInfo **info,
-+ DBusError *error)
-+{
-+ *info = _dbus_user_database_lookup_group (db, gid, NULL, error);
-+ return *info != NULL;
-+}
-+
-+
-+/**
-+ * Gets all groups for a particular user. Returns #FALSE
-+ * if no memory, or user isn't known, but always initializes
-+ * group_ids to a NULL array. Sets error to the reason
-+ * for returning #FALSE.
-+ *
-+ * @param db the user database object
-+ * @param uid the user ID
-+ * @param group_ids return location for array of group IDs
-+ * @param n_group_ids return location for length of returned array
-+ * @param error return location for error
-+ * @returns #TRUE on success
-+ */
-+dbus_bool_t
-+_dbus_user_database_get_groups (DBusUserDatabase *db,
-+ dbus_uid_t uid,
-+ dbus_gid_t **group_ids,
-+ int *n_group_ids,
-+ DBusError *error)
-+{
-+ DBusUserInfo *info;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+
-+ *group_ids = NULL;
-+ *n_group_ids = 0;
-+
-+ info = _dbus_user_database_lookup (db, uid, NULL, error);
-+ if (info == NULL)
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ return FALSE;
-+ }
-+
-+ if (info->n_group_ids > 0)
-+ {
-+ *group_ids = dbus_new (dbus_gid_t, info->n_group_ids);
-+ if (*group_ids == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return FALSE;
-+ }
-+
-+ *n_group_ids = info->n_group_ids;
-+
-+ memcpy (*group_ids, info->group_ids, info->n_group_ids * sizeof (dbus_gid_t));
-+ }
-+
-+ return TRUE;
-+}
-+
-+/** @} */
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include <stdio.h>
-+
-+/**
-+ * Unit test for dbus-userdb.c.
-+ *
-+ * @returns #TRUE on success.
-+ */
-+dbus_bool_t
-+_dbus_userdb_test (const char *test_data_dir)
-+{
-+ const DBusString *username;
-+ const DBusString *homedir;
-+
-+ if (!_dbus_username_from_current_process (&username))
-+ _dbus_assert_not_reached ("didn't get username");
-+
-+ if (!_dbus_homedir_from_current_process (&homedir))
-+ _dbus_assert_not_reached ("didn't get homedir");
-+
-+ printf (" Current user: %s homedir: %s\n",
-+ _dbus_string_get_const_data (username),
-+ _dbus_string_get_const_data (homedir));
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/dbus/dbus-userdb.c dbus-0.61/dbus/dbus-userdb.c
---- dbus-0.61.orig/dbus/dbus-userdb.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-userdb.c 2006-02-24 16:46:45.000000000 +0100
-@@ -0,0 +1,565 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-userdb.c User database abstraction
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#define DBUS_USERDB_INCLUDES_PRIVATE 1
-+#include "dbus-userdb.h"
-+#include "dbus-hash.h"
-+#include "dbus-test.h"
-+#include "dbus-internals.h"
-+#include "dbus-protocol.h"
-+#include <string.h>
-+
-+/**
-+ * @addtogroup DBusInternalsUtils
-+ * @{
-+ */
-+
-+/**
-+ * Frees the given #DBusUserInfo's members with _dbus_user_info_free()
-+ * and also calls dbus_free() on the block itself
-+ *
-+ * @param info the info
-+ */
-+void
-+_dbus_user_info_free_allocated (DBusUserInfo *info)
-+{
-+ if (info == NULL) /* hash table will pass NULL */
-+ return;
-+
-+ _dbus_user_info_free (info);
-+ dbus_free (info);
-+}
-+
-+/**
-+ * Frees the given #DBusGroupInfo's members with _dbus_group_info_free()
-+ * and also calls dbus_free() on the block itself
-+ *
-+ * @param info the info
-+ */
-+void
-+_dbus_group_info_free_allocated (DBusGroupInfo *info)
-+{
-+ if (info == NULL) /* hash table will pass NULL */
-+ return;
-+
-+ _dbus_group_info_free (info);
-+ dbus_free (info);
-+}
-+
-+/**
-+ * Checks if a given string is actually a number
-+ * and converts it if it is
-+ *
-+ * @param str the string to check
-+ * @param num the memory location of the unsigned long to fill in
-+ * @returns TRUE if str is a number and num is filled in
-+ */
-+dbus_bool_t
-+_dbus_is_a_number (const DBusString *str,
-+ unsigned long *num)
-+{
-+ int end;
-+
-+ if (_dbus_string_parse_int (str, 0, num, &end) &&
-+ end == _dbus_string_get_length (str))
-+ return TRUE;
-+ else
-+ return FALSE;
-+}
-+
-+/**
-+ * Looks up a uid or username in the user database. Only one of name
-+ * or UID can be provided. There are wrapper functions for this that
-+ * are better to use, this one does no locking or anything on the
-+ * database and otherwise sort of sucks.
-+ *
-+ * @param db the database
-+ * @param uid the user ID or #DBUS_UID_UNSET
-+ * @param username username or #NULL
-+ * @param error error to fill in
-+ * @returns the entry in the database
-+ */
-+DBusUserInfo*
-+_dbus_user_database_lookup (DBusUserDatabase *db,
-+ dbus_uid_t uid,
-+ const DBusString *username,
-+ DBusError *error)
-+{
-+ DBusUserInfo *info;
-+
-+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-+ _dbus_assert (uid != DBUS_UID_UNSET || username != NULL);
-+
-+ /* See if the username is really a number */
-+ if (uid == DBUS_UID_UNSET)
-+ {
-+ unsigned long n;
-+
-+ if (_dbus_is_a_number (username, &n))
-+ uid = n;
-+ }
-+
-+ if (uid != DBUS_UID_UNSET)
-+ info = _dbus_hash_table_lookup_ulong (db->users, uid);
-+ else
-+ info = _dbus_hash_table_lookup_string (db->users_by_name, _dbus_string_get_const_data (username));
-+
-+ if (info)
-+ {
-+ _dbus_verbose ("Using cache for UID "DBUS_UID_FORMAT" information\n",
-+ info->uid);
-+ return info;
-+ }
-+ else
-+ {
-+ if (uid != DBUS_UID_UNSET)
-+ _dbus_verbose ("No cache for UID "DBUS_UID_FORMAT"\n",
-+ uid);
-+ else
-+ _dbus_verbose ("No cache for user \"%s\"\n",
-+ _dbus_string_get_const_data (username));
-+
-+ info = dbus_new0 (DBusUserInfo, 1);
-+ if (info == NULL)
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ if (uid != DBUS_UID_UNSET)
-+ {
-+ if (!_dbus_user_info_fill_uid (info, uid, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_user_info_free_allocated (info);
-+ return NULL;
-+ }
-+ }
-+ else
-+ {
-+ if (!_dbus_user_info_fill (info, username, error))
-+ {
-+ _DBUS_ASSERT_ERROR_IS_SET (error);
-+ _dbus_user_info_free_allocated (info);
-+ return NULL;
-+ }
-+ }
-+
-+ /* be sure we don't use these after here */
-+ uid = DBUS_UID_UNSET;
-+ username = NULL;
-+
-+ /* insert into hash */
-+ if (!_dbus_hash_table_insert_ulong (db->users, info->uid, info))
-+ {
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ _dbus_user_info_free_allocated (info);
-+ return NULL;
-+ }
-+
-+ if (!_dbus_hash_table_insert_string (db->users_by_name,
-+ info->username,
-+ info))
-+ {
-+ _dbus_hash_table_remove_ulong (db->users, info->uid);
-+ dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
-+ return NULL;
-+ }
-+
-+ return info;
-+ }
-+}
-+
-+_DBUS_DEFINE_GLOBAL_LOCK(system_users);
-+static dbus_bool_t database_locked = FALSE;
-+static DBusUserDatabase *system_db = NULL;
-+static DBusString process_username;
-+static DBusString process_homedir;
-+
-+static void
-+shutdown_system_db (void *data)
-+{
-+ _dbus_user_database_unref (system_db);
-+ system_db = NULL;
-+ _dbus_string_free (&process_username);
-+ _dbus_string_free (&process_homedir);
-+}
-+
-+static dbus_bool_t
-+init_system_db (void)
-+{
-+ _dbus_assert (database_locked);
-+
-+ if (system_db == NULL)
-+ {
-+ DBusError error;
-+ const DBusUserInfo *info;
-+
-+ system_db = _dbus_user_database_new ();
-+ if (system_db == NULL)
-+ return FALSE;
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_user_database_get_uid (system_db,
-+ _dbus_getuid (),
-+ &info,
-+ &error))
-+ {
-+ _dbus_user_database_unref (system_db);
-+ system_db = NULL;
-+
-+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
-+ {
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+ else
-+ {
-+ /* This really should not happen. */
-+ _dbus_warn ("Could not get password database information for UID of current process: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return FALSE;
-+ }
-+ }
-+
-+ if (!_dbus_string_init (&process_username))
-+ {
-+ _dbus_user_database_unref (system_db);
-+ system_db = NULL;
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_init (&process_homedir))
-+ {
-+ _dbus_string_free (&process_username);
-+ _dbus_user_database_unref (system_db);
-+ system_db = NULL;
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append (&process_username,
-+ info->username) ||
-+ !_dbus_string_append (&process_homedir,
-+ info->homedir) ||
-+ !_dbus_register_shutdown_func (shutdown_system_db, NULL))
-+ {
-+ _dbus_string_free (&process_username);
-+ _dbus_string_free (&process_homedir);
-+ _dbus_user_database_unref (system_db);
-+ system_db = NULL;
-+ return FALSE;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Locks global system user database.
-+ */
-+void
-+_dbus_user_database_lock_system (void)
-+{
-+ _DBUS_LOCK (system_users);
-+ database_locked = TRUE;
-+}
-+
-+/**
-+ * Unlocks global system user database.
-+ */
-+void
-+_dbus_user_database_unlock_system (void)
-+{
-+ database_locked = FALSE;
-+ _DBUS_UNLOCK (system_users);
-+}
-+
-+/**
-+ * Gets the system global user database;
-+ * must be called with lock held (_dbus_user_database_lock_system()).
-+ *
-+ * @returns the database or #NULL if no memory
-+ */
-+DBusUserDatabase*
-+_dbus_user_database_get_system (void)
-+{
-+ _dbus_assert (database_locked);
-+
-+ init_system_db ();
-+
-+ return system_db;
-+}
-+
-+/**
-+ * Gets username of user owning current process. The returned string
-+ * is valid until dbus_shutdown() is called.
-+ *
-+ * @param username place to store pointer to username
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_username_from_current_process (const DBusString **username)
-+{
-+ _dbus_user_database_lock_system ();
-+ if (!init_system_db ())
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+ *username = &process_username;
-+ _dbus_user_database_unlock_system ();
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets homedir of user owning current process. The returned string
-+ * is valid until dbus_shutdown() is called.
-+ *
-+ * @param homedir place to store pointer to homedir
-+ * @returns #FALSE if no memory
-+ */
-+dbus_bool_t
-+_dbus_homedir_from_current_process (const DBusString **homedir)
-+{
-+ _dbus_user_database_lock_system ();
-+ if (!init_system_db ())
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+ *homedir = &process_homedir;
-+ _dbus_user_database_unlock_system ();
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets the home directory for the given user.
-+ *
-+ * @param username the username
-+ * @param homedir string to append home directory to
-+ * @returns #TRUE if user existed and we appended their homedir
-+ */
-+dbus_bool_t
-+_dbus_homedir_from_username (const DBusString *username,
-+ DBusString *homedir)
-+{
-+ DBusUserDatabase *db;
-+ const DBusUserInfo *info;
-+ _dbus_user_database_lock_system ();
-+
-+ db = _dbus_user_database_get_system ();
-+ if (db == NULL)
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_user_database_get_username (db, username,
-+ &info, NULL))
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_string_append (homedir, info->homedir))
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ _dbus_user_database_unlock_system ();
-+ return TRUE;
-+}
-+
-+/**
-+ * Gets the credentials corresponding to the given username.
-+ *
-+ * @param username the username
-+ * @param credentials credentials to fill in
-+ * @returns #TRUE if the username existed and we got some credentials
-+ */
-+dbus_bool_t
-+_dbus_credentials_from_username (const DBusString *username,
-+ DBusCredentials *credentials)
-+{
-+ DBusUserDatabase *db;
-+ const DBusUserInfo *info;
-+ _dbus_user_database_lock_system ();
-+
-+ db = _dbus_user_database_get_system ();
-+ if (db == NULL)
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ if (!_dbus_user_database_get_username (db, username,
-+ &info, NULL))
-+ {
-+ _dbus_user_database_unlock_system ();
-+ return FALSE;
-+ }
-+
-+ credentials->pid = DBUS_PID_UNSET;
-+ credentials->uid = info->uid;
-+ credentials->gid = info->primary_gid;
-+
-+ _dbus_user_database_unlock_system ();
-+ return TRUE;
-+}
-+
-+/**
-+ * Creates a new user database object used to look up and
-+ * cache user information.
-+ * @returns new database, or #NULL on out of memory
-+ */
-+DBusUserDatabase*
-+_dbus_user_database_new (void)
-+{
-+ DBusUserDatabase *db;
-+
-+ db = dbus_new0 (DBusUserDatabase, 1);
-+ if (db == NULL)
-+ return NULL;
-+
-+ db->refcount = 1;
-+
-+ db->users = _dbus_hash_table_new (DBUS_HASH_ULONG,
-+ NULL, (DBusFreeFunction) _dbus_user_info_free_allocated);
-+
-+ if (db->users == NULL)
-+ goto failed;
-+
-+ db->groups = _dbus_hash_table_new (DBUS_HASH_ULONG,
-+ NULL, (DBusFreeFunction) _dbus_group_info_free_allocated);
-+
-+ if (db->groups == NULL)
-+ goto failed;
-+
-+ db->users_by_name = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ NULL, NULL);
-+ if (db->users_by_name == NULL)
-+ goto failed;
-+
-+ db->groups_by_name = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ NULL, NULL);
-+ if (db->groups_by_name == NULL)
-+ goto failed;
-+
-+ return db;
-+
-+ failed:
-+ _dbus_user_database_unref (db);
-+ return NULL;
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+/**
-+ * Increments refcount of user database.
-+ * @param db the database
-+ * @returns the database
-+ */
-+DBusUserDatabase *
-+_dbus_user_database_ref (DBusUserDatabase *db)
-+{
-+ _dbus_assert (db->refcount > 0);
-+
-+ db->refcount += 1;
-+
-+ return db;
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * Decrements refcount of user database.
-+ * @param db the database
-+ */
-+void
-+_dbus_user_database_unref (DBusUserDatabase *db)
-+{
-+ _dbus_assert (db->refcount > 0);
-+
-+ db->refcount -= 1;
-+ if (db->refcount == 0)
-+ {
-+ if (db->users)
-+ _dbus_hash_table_unref (db->users);
-+
-+ if (db->groups)
-+ _dbus_hash_table_unref (db->groups);
-+
-+ if (db->users_by_name)
-+ _dbus_hash_table_unref (db->users_by_name);
-+
-+ if (db->groups_by_name)
-+ _dbus_hash_table_unref (db->groups_by_name);
-+
-+ dbus_free (db);
-+ }
-+}
-+
-+/**
-+ * Gets the user information for the given UID,
-+ * returned user info should not be freed.
-+ *
-+ * @param db user database
-+ * @param uid the user ID
-+ * @param info return location for const ref to user info
-+ * @param error error location
-+ * @returns #FALSE if error is set
-+ */
-+dbus_bool_t
-+_dbus_user_database_get_uid (DBusUserDatabase *db,
-+ dbus_uid_t uid,
-+ const DBusUserInfo **info,
-+ DBusError *error)
-+{
-+ *info = _dbus_user_database_lookup (db, uid, NULL, error);
-+ return *info != NULL;
-+}
-+
-+/**
-+ * Gets the user information for the given username.
-+ *
-+ * @param db user database
-+ * @param username the user name
-+ * @param info return location for const ref to user info
-+ * @param error error location
-+ * @returns #FALSE if error is set
-+ */
-+dbus_bool_t
-+_dbus_user_database_get_username (DBusUserDatabase *db,
-+ const DBusString *username,
-+ const DBusUserInfo **info,
-+ DBusError *error)
-+{
-+ *info = _dbus_user_database_lookup (db, DBUS_UID_UNSET, username, error);
-+ return *info != NULL;
-+}
-+
-+/** @} */
-+
-+/* Tests in dbus-userdb-util.c */
-diff -Naur dbus-0.61.orig/dbus/dbus-userdb.h dbus-0.61/dbus/dbus-userdb.h
---- dbus-0.61.orig/dbus/dbus-userdb.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-userdb.h 2005-03-22 18:57:27.000000000 +0100
-@@ -0,0 +1,115 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-userdb.h User database abstraction
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_USERDB_H
-+#define DBUS_USERDB_H
-+
-+#include <dbus/dbus-sysdeps.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+typedef struct DBusUserDatabase DBusUserDatabase;
-+
-+#ifdef DBUS_USERDB_INCLUDES_PRIVATE
-+#include <dbus/dbus-hash.h>
-+
-+/**
-+ * Internals of DBusUserDatabase
-+ */
-+struct DBusUserDatabase
-+{
-+ int refcount; /**< Reference count */
-+
-+ DBusHashTable *users; /**< Users in the database by UID */
-+ DBusHashTable *groups; /**< Groups in the database by GID */
-+ DBusHashTable *users_by_name; /**< Users in the database by name */
-+ DBusHashTable *groups_by_name; /**< Groups in the database by name */
-+
-+};
-+
-+#endif /* DBUS_USERDB_INCLUDES_PRIVATE */
-+
-+DBusUserDatabase* _dbus_user_database_new (void);
-+DBusUserDatabase* _dbus_user_database_ref (DBusUserDatabase *db);
-+void _dbus_user_database_unref (DBusUserDatabase *db);
-+dbus_bool_t _dbus_user_database_get_groups (DBusUserDatabase *db,
-+ dbus_uid_t uid,
-+ dbus_gid_t **group_ids,
-+ int *n_group_ids,
-+ DBusError *error);
-+dbus_bool_t _dbus_user_database_get_uid (DBusUserDatabase *db,
-+ dbus_uid_t uid,
-+ const DBusUserInfo **info,
-+ DBusError *error);
-+dbus_bool_t _dbus_user_database_get_gid (DBusUserDatabase *db,
-+ dbus_gid_t gid,
-+ const DBusGroupInfo **info,
-+ DBusError *error);
-+dbus_bool_t _dbus_user_database_get_username (DBusUserDatabase *db,
-+ const DBusString *username,
-+ const DBusUserInfo **info,
-+ DBusError *error);
-+dbus_bool_t _dbus_user_database_get_groupname (DBusUserDatabase *db,
-+ const DBusString *groupname,
-+ const DBusGroupInfo **info,
-+ DBusError *error);
-+
-+#ifdef DBUS_USERDB_INCLUDES_PRIVATE
-+DBusUserInfo* _dbus_user_database_lookup (DBusUserDatabase *db,
-+ dbus_uid_t uid,
-+ const DBusString *username,
-+ DBusError *error);
-+DBusGroupInfo* _dbus_user_database_lookup_group (DBusUserDatabase *db,
-+ dbus_gid_t gid,
-+ const DBusString *groupname,
-+ DBusError *error);
-+void _dbus_user_info_free_allocated (DBusUserInfo *info);
-+void _dbus_group_info_free_allocated (DBusGroupInfo *info);
-+#endif /* DBUS_USERDB_INCLUDES_PRIVATE */
-+
-+DBusUserDatabase* _dbus_user_database_get_system (void);
-+void _dbus_user_database_lock_system (void);
-+void _dbus_user_database_unlock_system (void);
-+
-+dbus_bool_t _dbus_username_from_current_process (const DBusString **username);
-+dbus_bool_t _dbus_homedir_from_current_process (const DBusString **homedir);
-+dbus_bool_t _dbus_homedir_from_username (const DBusString *username,
-+ DBusString *homedir);
-+dbus_bool_t _dbus_get_user_id (const DBusString *username,
-+ dbus_uid_t *uid);
-+dbus_bool_t _dbus_get_group_id (const DBusString *group_name,
-+ dbus_gid_t *gid);
-+dbus_bool_t _dbus_credentials_from_username (const DBusString *username,
-+ DBusCredentials *credentials);
-+dbus_bool_t _dbus_credentials_from_uid (dbus_uid_t user_id,
-+ DBusCredentials *credentials);
-+dbus_bool_t _dbus_is_console_user (dbus_uid_t uid,
-+ DBusError *error);
-+
-+dbus_bool_t _dbus_is_a_number (const DBusString *str,
-+ unsigned long *num);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_USERDB_H */
-diff -Naur dbus-0.61.orig/dbus/dbus-watch.c dbus-0.61/dbus/dbus-watch.c
---- dbus-0.61.orig/dbus/dbus-watch.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-watch.c 2004-11-26 02:53:13.000000000 +0100
-@@ -0,0 +1,619 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-watch.c DBusWatch implementation
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-internals.h"
-+#include "dbus-watch.h"
-+#include "dbus-list.h"
-+
-+/**
-+ * @defgroup DBusWatchInternals DBusWatch implementation details
-+ * @ingroup DBusInternals
-+ * @brief implementation details for DBusWatch
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Implementation of DBusWatch
-+ */
-+struct DBusWatch
-+{
-+ int refcount; /**< Reference count */
-+ int fd; /**< File descriptor. */
-+ unsigned int flags; /**< Conditions to watch. */
-+
-+ DBusWatchHandler handler; /**< Watch handler. */
-+ void *handler_data; /**< Watch handler data. */
-+ DBusFreeFunction free_handler_data_function; /**< Free the watch handler data. */
-+
-+ void *data; /**< Application data. */
-+ DBusFreeFunction free_data_function; /**< Free the application data. */
-+ unsigned int enabled : 1; /**< Whether it's enabled. */
-+};
-+
-+/**
-+ * Creates a new DBusWatch. Used to add a file descriptor to be polled
-+ * by a main loop.
-+ *
-+ * @param fd the file descriptor to be watched.
-+ * @param flags the conditions to watch for on the descriptor.
-+ * @param enabled the initial enabled state
-+ * @param handler the handler function
-+ * @param data data for handler function
-+ * @param free_data_function function to free the data
-+ * @returns the new DBusWatch object.
-+ */
-+DBusWatch*
-+_dbus_watch_new (int fd,
-+ unsigned int flags,
-+ dbus_bool_t enabled,
-+ DBusWatchHandler handler,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ DBusWatch *watch;
-+
-+#define VALID_WATCH_FLAGS (DBUS_WATCH_WRITABLE | DBUS_WATCH_READABLE)
-+
-+ _dbus_assert ((flags & VALID_WATCH_FLAGS) == flags);
-+
-+ watch = dbus_new0 (DBusWatch, 1);
-+ if (watch == NULL)
-+ return NULL;
-+
-+ watch->refcount = 1;
-+ watch->fd = fd;
-+ watch->flags = flags;
-+ watch->enabled = enabled;
-+
-+ watch->handler = handler;
-+ watch->handler_data = data;
-+ watch->free_handler_data_function = free_data_function;
-+
-+ return watch;
-+}
-+
-+/**
-+ * Increments the reference count of a DBusWatch object.
-+ *
-+ * @param watch the watch object.
-+ * @returns the watch object.
-+ */
-+DBusWatch *
-+_dbus_watch_ref (DBusWatch *watch)
-+{
-+ watch->refcount += 1;
-+
-+ return watch;
-+}
-+
-+/**
-+ * Decrements the reference count of a DBusWatch object
-+ * and finalizes the object if the count reaches zero.
-+ *
-+ * @param watch the watch object.
-+ */
-+void
-+_dbus_watch_unref (DBusWatch *watch)
-+{
-+ _dbus_assert (watch != NULL);
-+ _dbus_assert (watch->refcount > 0);
-+
-+ watch->refcount -= 1;
-+ if (watch->refcount == 0)
-+ {
-+ dbus_watch_set_data (watch, NULL, NULL); /* call free_data_function */
-+
-+ if (watch->free_handler_data_function)
-+ (* watch->free_handler_data_function) (watch->handler_data);
-+
-+ dbus_free (watch);
-+ }
-+}
-+
-+/**
-+ * Clears the file descriptor from a now-invalid watch object so that
-+ * no one tries to use it. This is because a watch may stay alive due
-+ * to reference counts after the file descriptor is closed.
-+ * Invalidation makes it easier to catch bugs. It also
-+ * keeps people from doing dorky things like assuming file descriptors
-+ * are unique (never recycled).
-+ *
-+ * @param watch the watch object.
-+ */
-+void
-+_dbus_watch_invalidate (DBusWatch *watch)
-+{
-+ watch->fd = -1;
-+ watch->flags = 0;
-+}
-+
-+/**
-+ * Sanitizes the given condition so that it only contains
-+ * flags that the DBusWatch requested. e.g. if the
-+ * watch is a DBUS_WATCH_READABLE watch then
-+ * DBUS_WATCH_WRITABLE will be stripped from the condition.
-+ *
-+ * @param watch the watch object.
-+ * @param condition address of the condition to sanitize.
-+ */
-+void
-+_dbus_watch_sanitize_condition (DBusWatch *watch,
-+ unsigned int *condition)
-+{
-+ if (!(watch->flags & DBUS_WATCH_READABLE))
-+ *condition &= ~DBUS_WATCH_READABLE;
-+ if (!(watch->flags & DBUS_WATCH_WRITABLE))
-+ *condition &= ~DBUS_WATCH_WRITABLE;
-+}
-+
-+
-+/**
-+ * @typedef DBusWatchList
-+ *
-+ * Opaque data type representing a list of watches
-+ * and a set of DBusAddWatchFunction/DBusRemoveWatchFunction.
-+ * Automatically handles removing/re-adding watches
-+ * when the DBusAddWatchFunction is updated or changed.
-+ * Holds a reference count to each watch.
-+ *
-+ * Used in the implementation of both DBusServer and
-+ * DBusClient.
-+ *
-+ */
-+
-+/**
-+ * DBusWatchList implementation details. All fields
-+ * are private.
-+ *
-+ */
-+struct DBusWatchList
-+{
-+ DBusList *watches; /**< Watch objects. */
-+
-+ DBusAddWatchFunction add_watch_function; /**< Callback for adding a watch. */
-+ DBusRemoveWatchFunction remove_watch_function; /**< Callback for removing a watch. */
-+ DBusWatchToggledFunction watch_toggled_function; /**< Callback on toggling enablement */
-+ void *watch_data; /**< Data for watch callbacks */
-+ DBusFreeFunction watch_free_data_function; /**< Free function for watch callback data */
-+};
-+
-+/**
-+ * Creates a new watch list. Returns #NULL if insufficient
-+ * memory exists.
-+ *
-+ * @returns the new watch list, or #NULL on failure.
-+ */
-+DBusWatchList*
-+_dbus_watch_list_new (void)
-+{
-+ DBusWatchList *watch_list;
-+
-+ watch_list = dbus_new0 (DBusWatchList, 1);
-+ if (watch_list == NULL)
-+ return NULL;
-+
-+ return watch_list;
-+}
-+
-+/**
-+ * Frees a DBusWatchList.
-+ *
-+ * @param watch_list the watch list.
-+ */
-+void
-+_dbus_watch_list_free (DBusWatchList *watch_list)
-+{
-+ /* free watch_data and removes watches as a side effect */
-+ _dbus_watch_list_set_functions (watch_list,
-+ NULL, NULL, NULL, NULL, NULL);
-+ _dbus_list_foreach (&watch_list->watches,
-+ (DBusForeachFunction) _dbus_watch_unref,
-+ NULL);
-+ _dbus_list_clear (&watch_list->watches);
-+
-+ dbus_free (watch_list);
-+}
-+
-+/**
-+ * Sets the watch functions. This function is the "backend"
-+ * for dbus_connection_set_watch_functions() and
-+ * dbus_server_set_watch_functions().
-+ *
-+ * @param watch_list the watch list.
-+ * @param add_function the add watch function.
-+ * @param remove_function the remove watch function.
-+ * @param toggled_function function on toggling enabled flag, or #NULL
-+ * @param data the data for those functions.
-+ * @param free_data_function the function to free the data.
-+ * @returns #FALSE if not enough memory
-+ *
-+ */
-+dbus_bool_t
-+_dbus_watch_list_set_functions (DBusWatchList *watch_list,
-+ DBusAddWatchFunction add_function,
-+ DBusRemoveWatchFunction remove_function,
-+ DBusWatchToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ /* Add watches with the new watch function, failing on OOM */
-+ if (add_function != NULL)
-+ {
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&watch_list->watches);
-+ while (link != NULL)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&watch_list->watches,
-+ link);
-+
-+#ifdef DBUS_ENABLE_VERBOSE_MODE
-+ {
-+ const char *watch_type;
-+ int flags;
-+
-+ flags = dbus_watch_get_flags (link->data);
-+ if ((flags & DBUS_WATCH_READABLE) &&
-+ (flags & DBUS_WATCH_WRITABLE))
-+ watch_type = "readwrite";
-+ else if (flags & DBUS_WATCH_READABLE)
-+ watch_type = "read";
-+ else if (flags & DBUS_WATCH_WRITABLE)
-+ watch_type = "write";
-+ else
-+ watch_type = "not read or write";
-+
-+ _dbus_verbose ("Adding a %s watch on fd %d using newly-set add watch function\n",
-+ watch_type,
-+ dbus_watch_get_fd (link->data));
-+ }
-+#endif /* DBUS_ENABLE_VERBOSE_MODE */
-+
-+ if (!(* add_function) (link->data, data))
-+ {
-+ /* remove it all again and return FALSE */
-+ DBusList *link2;
-+
-+ link2 = _dbus_list_get_first_link (&watch_list->watches);
-+ while (link2 != link)
-+ {
-+ DBusList *next = _dbus_list_get_next_link (&watch_list->watches,
-+ link2);
-+
-+ _dbus_verbose ("Removing watch on fd %d using newly-set remove function because initial add failed\n",
-+ dbus_watch_get_fd (link2->data));
-+
-+ (* remove_function) (link2->data, data);
-+
-+ link2 = next;
-+ }
-+
-+ return FALSE;
-+ }
-+
-+ link = next;
-+ }
-+ }
-+
-+ /* Remove all current watches from previous watch handlers */
-+
-+ if (watch_list->remove_watch_function != NULL)
-+ {
-+ _dbus_verbose ("Removing all pre-existing watches\n");
-+
-+ _dbus_list_foreach (&watch_list->watches,
-+ (DBusForeachFunction) watch_list->remove_watch_function,
-+ watch_list->watch_data);
-+ }
-+
-+ if (watch_list->watch_free_data_function != NULL)
-+ (* watch_list->watch_free_data_function) (watch_list->watch_data);
-+
-+ watch_list->add_watch_function = add_function;
-+ watch_list->remove_watch_function = remove_function;
-+ watch_list->watch_toggled_function = toggled_function;
-+ watch_list->watch_data = data;
-+ watch_list->watch_free_data_function = free_data_function;
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Adds a new watch to the watch list, invoking the
-+ * application DBusAddWatchFunction if appropriate.
-+ *
-+ * @param watch_list the watch list.
-+ * @param watch the watch to add.
-+ * @returns #TRUE on success, #FALSE if no memory.
-+ */
-+dbus_bool_t
-+_dbus_watch_list_add_watch (DBusWatchList *watch_list,
-+ DBusWatch *watch)
-+{
-+ if (!_dbus_list_append (&watch_list->watches, watch))
-+ return FALSE;
-+
-+ _dbus_watch_ref (watch);
-+
-+ if (watch_list->add_watch_function != NULL)
-+ {
-+ _dbus_verbose ("Adding watch on fd %d\n",
-+ dbus_watch_get_fd (watch));
-+
-+ if (!(* watch_list->add_watch_function) (watch,
-+ watch_list->watch_data))
-+ {
-+ _dbus_list_remove_last (&watch_list->watches, watch);
-+ _dbus_watch_unref (watch);
-+ return FALSE;
-+ }
-+ }
-+
-+ return TRUE;
-+}
-+
-+/**
-+ * Removes a watch from the watch list, invoking the
-+ * application's DBusRemoveWatchFunction if appropriate.
-+ *
-+ * @param watch_list the watch list.
-+ * @param watch the watch to remove.
-+ */
-+void
-+_dbus_watch_list_remove_watch (DBusWatchList *watch_list,
-+ DBusWatch *watch)
-+{
-+ if (!_dbus_list_remove (&watch_list->watches, watch))
-+ _dbus_assert_not_reached ("Nonexistent watch was removed");
-+
-+ if (watch_list->remove_watch_function != NULL)
-+ {
-+ _dbus_verbose ("Removing watch on fd %d\n",
-+ dbus_watch_get_fd (watch));
-+
-+ (* watch_list->remove_watch_function) (watch,
-+ watch_list->watch_data);
-+ }
-+
-+ _dbus_watch_unref (watch);
-+}
-+
-+/**
-+ * Sets a watch to the given enabled state, invoking the
-+ * application's DBusWatchToggledFunction if appropriate.
-+ *
-+ * @param watch_list the watch list.
-+ * @param watch the watch to toggle.
-+ * @param enabled #TRUE to enable
-+ */
-+void
-+_dbus_watch_list_toggle_watch (DBusWatchList *watch_list,
-+ DBusWatch *watch,
-+ dbus_bool_t enabled)
-+{
-+ enabled = !!enabled;
-+
-+ if (enabled == watch->enabled)
-+ return;
-+
-+ watch->enabled = enabled;
-+
-+ if (watch_list->watch_toggled_function != NULL)
-+ {
-+ _dbus_verbose ("Toggling watch %p on fd %d to %d\n",
-+ watch, dbus_watch_get_fd (watch), watch->enabled);
-+
-+ (* watch_list->watch_toggled_function) (watch,
-+ watch_list->watch_data);
-+ }
-+}
-+
-+/**
-+ * Sets the handler for the watch.
-+ *
-+ * @todo this function only exists because of the weird
-+ * way connection watches are done, see the note
-+ * in docs for _dbus_connection_handle_watch().
-+ *
-+ * @param watch the watch
-+ * @param handler the new handler
-+ * @param data the data
-+ * @param free_data_function free data with this
-+ */
-+void
-+_dbus_watch_set_handler (DBusWatch *watch,
-+ DBusWatchHandler handler,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ if (watch->free_handler_data_function)
-+ (* watch->free_handler_data_function) (watch->handler_data);
-+
-+ watch->handler = handler;
-+ watch->handler_data = data;
-+ watch->free_handler_data_function = free_data_function;
-+}
-+
-+/** @} */
-+
-+/**
-+ * @defgroup DBusWatch DBusWatch
-+ * @ingroup DBus
-+ * @brief Object representing a file descriptor to be watched.
-+ *
-+ * Types and functions related to DBusWatch. A watch represents
-+ * a file descriptor that the main loop needs to monitor,
-+ * as in Qt's QSocketNotifier or GLib's g_io_add_watch().
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @typedef DBusWatch
-+ *
-+ * Opaque object representing a file descriptor
-+ * to be watched for changes in readability,
-+ * writability, or hangup.
-+ */
-+
-+/**
-+ * Gets the file descriptor that should be watched.
-+ *
-+ * @param watch the DBusWatch object.
-+ * @returns the file descriptor to watch.
-+ */
-+int
-+dbus_watch_get_fd (DBusWatch *watch)
-+{
-+ return watch->fd;
-+}
-+
-+/**
-+ * Gets flags from DBusWatchFlags indicating
-+ * what conditions should be monitored on the
-+ * file descriptor.
-+ *
-+ * The flags returned will only contain DBUS_WATCH_READABLE
-+ * and DBUS_WATCH_WRITABLE, never DBUS_WATCH_HANGUP or
-+ * DBUS_WATCH_ERROR; all watches implicitly include a watch
-+ * for hangups, errors, and other exceptional conditions.
-+ *
-+ * @param watch the DBusWatch object.
-+ * @returns the conditions to watch.
-+ */
-+unsigned int
-+dbus_watch_get_flags (DBusWatch *watch)
-+{
-+ _dbus_assert ((watch->flags & VALID_WATCH_FLAGS) == watch->flags);
-+
-+ return watch->flags;
-+}
-+
-+/**
-+ * Gets data previously set with dbus_watch_set_data()
-+ * or #NULL if none.
-+ *
-+ * @param watch the DBusWatch object.
-+ * @returns previously-set data.
-+ */
-+void*
-+dbus_watch_get_data (DBusWatch *watch)
-+{
-+ return watch->data;
-+}
-+
-+/**
-+ * Sets data which can be retrieved with dbus_watch_get_data().
-+ * Intended for use by the DBusAddWatchFunction and
-+ * DBusRemoveWatchFunction to store their own data. For example with
-+ * Qt you might store the QSocketNotifier for this watch and with GLib
-+ * you might store a GSource.
-+ *
-+ * @param watch the DBusWatch object.
-+ * @param data the data.
-+ * @param free_data_function function to be called to free the data.
-+ */
-+void
-+dbus_watch_set_data (DBusWatch *watch,
-+ void *data,
-+ DBusFreeFunction free_data_function)
-+{
-+ _dbus_verbose ("Setting watch fd %d data to data = %p function = %p from data = %p function = %p\n",
-+ dbus_watch_get_fd (watch),
-+ data, free_data_function, watch->data, watch->free_data_function);
-+
-+ if (watch->free_data_function != NULL)
-+ (* watch->free_data_function) (watch->data);
-+
-+ watch->data = data;
-+ watch->free_data_function = free_data_function;
-+}
-+
-+/**
-+ * Returns whether a watch is enabled or not. If not
-+ * enabled, it should not be polled by the main loop.
-+ *
-+ * @param watch the DBusWatch object
-+ * @returns #TRUE if the watch is enabled
-+ */
-+dbus_bool_t
-+dbus_watch_get_enabled (DBusWatch *watch)
-+{
-+ _dbus_assert (watch != NULL);
-+ return watch->enabled;
-+}
-+
-+
-+/**
-+ * Called to notify the D-BUS library when a previously-added watch is
-+ * ready for reading or writing, or has an exception such as a hangup.
-+ *
-+ * If this function returns #FALSE, then the file descriptor may still
-+ * be ready for reading or writing, but more memory is needed in order
-+ * to do the reading or writing. If you ignore the #FALSE return, your
-+ * application may spin in a busy loop on the file descriptor until
-+ * memory becomes available, but nothing more catastrophic should
-+ * happen.
-+ *
-+ * dbus_watch_handle() cannot be called during the
-+ * DBusAddWatchFunction, as the connection will not be ready to handle
-+ * that watch yet.
-+ *
-+ * It is not allowed to reference a DBusWatch after it has been passed
-+ * to remove_function.
-+ *
-+ * @param watch the DBusWatch object.
-+ * @param flags the poll condition using #DBusWatchFlags values
-+ * @returns #FALSE if there wasn't enough memory
-+ */
-+dbus_bool_t
-+dbus_watch_handle (DBusWatch *watch,
-+ unsigned int flags)
-+{
-+#ifndef DBUS_DISABLE_CHECKS
-+ if (watch->fd < 0 || watch->flags == 0)
-+ {
-+ _dbus_warn ("%s: Watch is invalid, it should have been removed\n",
-+ _DBUS_FUNCTION_NAME);
-+ return TRUE;
-+ }
-+#endif
-+
-+ _dbus_return_val_if_fail (watch->fd >= 0 /* fails if watch was removed */, TRUE);
-+
-+ _dbus_watch_sanitize_condition (watch, &flags);
-+
-+ if (flags == 0)
-+ {
-+ _dbus_verbose ("After sanitization, watch flags on fd %d were 0\n",
-+ watch->fd);
-+ return TRUE;
-+ }
-+ else
-+ return (* watch->handler) (watch, flags,
-+ watch->handler_data);
-+}
-+
-+
-+/** @} */
-diff -Naur dbus-0.61.orig/dbus/dbus-watch.h dbus-0.61/dbus/dbus-watch.h
---- dbus-0.61.orig/dbus/dbus-watch.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus-watch.h 2004-09-09 12:20:17.000000000 +0200
-@@ -0,0 +1,75 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-watch.h DBusWatch internal interfaces
-+ *
-+ * Copyright (C) 2002 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_WATCH_H
-+#define DBUS_WATCH_H
-+
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-connection.h>
-+
-+DBUS_BEGIN_DECLS
-+
-+/* Public methods on DBusWatch are in dbus-connection.h */
-+
-+typedef struct DBusWatchList DBusWatchList;
-+
-+typedef dbus_bool_t (* DBusWatchHandler) (DBusWatch *watch,
-+ unsigned int flags,
-+ void *data);
-+
-+DBusWatch* _dbus_watch_new (int fd,
-+ unsigned int flags,
-+ dbus_bool_t enabled,
-+ DBusWatchHandler handler,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+DBusWatch* _dbus_watch_ref (DBusWatch *watch);
-+void _dbus_watch_unref (DBusWatch *watch);
-+void _dbus_watch_invalidate (DBusWatch *watch);
-+void _dbus_watch_sanitize_condition (DBusWatch *watch,
-+ unsigned int *condition);
-+void _dbus_watch_set_handler (DBusWatch *watch,
-+ DBusWatchHandler handler,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+
-+
-+DBusWatchList* _dbus_watch_list_new (void);
-+void _dbus_watch_list_free (DBusWatchList *watch_list);
-+dbus_bool_t _dbus_watch_list_set_functions (DBusWatchList *watch_list,
-+ DBusAddWatchFunction add_function,
-+ DBusRemoveWatchFunction remove_function,
-+ DBusWatchToggledFunction toggled_function,
-+ void *data,
-+ DBusFreeFunction free_data_function);
-+dbus_bool_t _dbus_watch_list_add_watch (DBusWatchList *watch_list,
-+ DBusWatch *watch);
-+void _dbus_watch_list_remove_watch (DBusWatchList *watch_list,
-+ DBusWatch *watch);
-+void _dbus_watch_list_toggle_watch (DBusWatchList *watch_list,
-+ DBusWatch *watch,
-+ dbus_bool_t enabled);
-+
-+
-+DBUS_END_DECLS
-+
-+#endif /* DBUS_WATCH_H */
-diff -Naur dbus-0.61.orig/dbus/dbus.h dbus-0.61/dbus/dbus.h
---- dbus-0.61.orig/dbus/dbus.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/dbus.h 2006-02-27 22:33:30.000000000 +0100
-@@ -0,0 +1,66 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus.h Convenience header including all other headers
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_H
-+#define DBUS_H
-+
-+#define DBUS_INSIDE_DBUS_H 1
-+
-+#ifndef DBUS_API_SUBJECT_TO_CHANGE
-+#error "Please define DBUS_API_SUBJECT_TO_CHANGE to acknowledge your understanding that D-BUS hasn't reached 1.0 and is subject to protocol and API churn. See the README for a full explanation."
-+#endif
-+
-+#include <dbus/dbus-arch-deps.h>
-+#include <dbus/dbus-address.h>
-+#include <dbus/dbus-bus.h>
-+#include <dbus/dbus-connection.h>
-+#include <dbus/dbus-errors.h>
-+#include <dbus/dbus-macros.h>
-+#include <dbus/dbus-message.h>
-+#include <dbus/dbus-pending-call.h>
-+#include <dbus/dbus-protocol.h>
-+#include <dbus/dbus-server.h>
-+#include <dbus/dbus-shared.h>
-+#include <dbus/dbus-signature.h>
-+#include <dbus/dbus-threads.h>
-+#include <dbus/dbus-types.h>
-+
-+#undef DBUS_INSIDE_DBUS_H
-+
-+/**
-+ * @defgroup DBus D-BUS low-level public API
-+ * @brief The low-level public API of the D-BUS library
-+ *
-+ * libdbus provides a low-level API intended primarily for use by
-+ * bindings to specific object systems and languages. D-BUS is most
-+ * convenient when used with the GLib bindings, Python bindings, Qt
-+ * bindings, Mono bindings, and so forth. This low-level API has a
-+ * lot of complexity useful only for bindings.
-+ *
-+ * @{
-+ */
-+
-+/** @} */
-+
-+
-+#endif /* DBUS_H */
-diff -Naur dbus-0.61.orig/dbus/make-dbus-glib-error-enum.sh dbus-0.61/dbus/make-dbus-glib-error-enum.sh
---- dbus-0.61.orig/dbus/make-dbus-glib-error-enum.sh 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/make-dbus-glib-error-enum.sh 2005-06-26 19:02:09.000000000 +0200
-@@ -0,0 +1,25 @@
-+#!/bin/sh
-+
-+SRC=$1
-+DEST=$2
-+
-+die()
-+{
-+ echo $1 1>&2
-+ /bin/rm $DEST.tmp
-+ exit 1
-+}
-+
-+cat $SRC | grep '#define DBUS_ERROR' | sed -e 's/#define //g' | \
-+ sed -e 's/".*//g' | sed -e 's/DBUS_ERROR/DBUS_GERROR/g' | sed -e 's/ *$/,/g' > $DEST.tmp
-+
-+if ! test -s $DEST.tmp ; then
-+ die "$DEST.tmp is empty, something went wrong, see any preceding error message"
-+fi
-+echo "DBUS_GERROR_REMOTE_EXCEPTION" >> $DEST.tmp
-+
-+echo "#ifndef DBUS_INSIDE_DBUS_GLIB_H" >> $DEST.tmp
-+echo '#error "' "$DEST" 'may only be included by dbus-glib.h"' >> $DEST.tmp
-+echo "#endif" >> $DEST.tmp
-+
-+mv $DEST.tmp $DEST || die "could not move $DEST.tmp to $DEST"
-diff -Naur dbus-0.61.orig/dbus/qdbus.h dbus-0.61/dbus/qdbus.h
---- dbus-0.61.orig/dbus/qdbus.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus/qdbus.h 2005-09-23 18:24:36.000000000 +0200
-@@ -0,0 +1,42 @@
-+/* qdbus.h precompiled header
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef QDBUS_H
-+#define QDBUS_H
-+
-+#include <QtCore/qglobal.h>
-+
-+#ifndef DBUS_COMPILATION
-+# define QDBUS_EXPORT Q_DECL_IMPORT
-+# include <dbus/qdbusconnection.h>
-+# include <dbus/qdbuserror.h>
-+# include <dbus/qdbusmessage.h>
-+# include <dbus/qdbusserver.h>
-+#else
-+# define QDBUS_EXPORT Q_DECL_EXPORT
-+# include <qt/qdbusconnection.h>
-+# include <qt/qdbuserror.h>
-+# include <qt/qdbusmessage.h>
-+# include <qt/qdbusserver.h>
-+#endif
-+
-+#endif
-diff -Naur dbus-0.61.orig/dbus-1.pc.in dbus-0.61/dbus-1.pc.in
---- dbus-0.61.orig/dbus-1.pc.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus-1.pc.in 2005-09-26 20:49:53.000000000 +0200
-@@ -0,0 +1,13 @@
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+libdir=@libdir@
-+includedir=@includedir@
-+system_bus_default_address=@DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+sysconfdir=@EXPANDED_SYSCONFDIR@
-+
-+Name: dbus
-+Description: Free desktop message bus
-+Version: @VERSION@
-+Libs: -L${libdir} -ldbus-1
-+Cflags: -I${includedir}/dbus-1.0 -I${libdir}/dbus-1.0/include
-+
-diff -Naur dbus-0.61.orig/dbus-glib-1.pc.in dbus-0.61/dbus-glib-1.pc.in
---- dbus-0.61.orig/dbus-glib-1.pc.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus-glib-1.pc.in 2003-06-22 08:53:42.000000000 +0200
-@@ -0,0 +1,12 @@
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+libdir=@libdir@
-+includedir=@includedir@
-+
-+Name: dbus-glib
-+Description: GLib integration for the free desktop message bus
-+Version: @VERSION@
-+Requires: dbus-1 glib-2.0
-+Libs: -L${libdir} -ldbus-glib-1
-+
-+
-diff -Naur dbus-0.61.orig/dbus-sharp.pc.in dbus-0.61/dbus-sharp.pc.in
---- dbus-0.61.orig/dbus-sharp.pc.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/dbus-sharp.pc.in 2004-06-10 14:55:28.000000000 +0200
-@@ -0,0 +1,8 @@
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+libdir=@libdir@
-+
-+Name: DBus#
-+Description: DBus# - D-BUS .NET Bindings
-+Version: @VERSION@
-+Libs: -r:${libdir}/mono/dbus-sharp/dbus-sharp.dll
-diff -Naur dbus-0.61.orig/debian/changelog dbus-0.61/debian/changelog
---- dbus-0.61.orig/debian/changelog 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/changelog 2006-02-27 21:50:19.000000000 +0100
-@@ -0,0 +1,693 @@
-+dbus (0.61-1) unstable; urgency=medium
-+
-+ * New upstream release
-+ * debian/patches/dbus-0.60-mono-arguments-fix.diff
-+ - Removed. Fixed upstream
-+ * debian/patches/dbus-0.60-mono-return-null-fix.diff
-+ - Removed. Fixed upstream
-+ * debian/patches/dbus-moc-selection.patch
-+ - Removed. Fixed upstream
-+ * debian/patches/dbus-qdbusmarshall-amd64.patch
-+ - Removed. Fixed upstream
-+ * Update cli-common depend to >= 0.2.0. Older versions have known bugs
-+ * Let binary-predeb/libdbus-1-cil:: depend on
-+ common-binary-post-install-arch, so dh_clideps can do it's work correctly.
-+ * debian/patches/dbus-qt-buildfix.patch
-+ + Added. Fix compilation of the Qt bindings (from CVS)
-+ * debian/patches/dbus-update-automake.patch
-+ + Added. Do a new autogen run, because the qt patch patches autotools
-+ files
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Fri, 24 Feb 2006 22:09:17 +0100
-+
-+dbus (0.60-6) unstable; urgency=low
-+
-+ * Sync relavant changes from ubuntu
-+ + dbus-0.60-mono-arguments-fix.diff
-+ - Added. 64bit fixes ((fd.o bugzilla #4410)
-+ + dbus-0.60-mono-return-null-fix.diff
-+ - Added. Don't return null for the session bus (fd.o bugzilla #5716)
-+ + Send the update-notifier reboot required notification if it's installed
-+ + Build mono bindings as arch indep.
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Thu, 16 Feb 2006 12:32:31 +0100
-+
-+dbus (0.60-5) unstable; urgency=low
-+
-+ * Fix a bashim in the postinst script (Closes: #347453)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Wed, 11 Jan 2006 20:15:02 +0100
-+
-+dbus (0.60-4) unstable; urgency=low
-+
-+ * Upload to unstable
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Thu, 5 Jan 2006 21:55:49 +0100
-+
-+dbus (0.60-3) experimental; urgency=low
-+
-+ * debian/patches/dbus-qdbusmarshall-amd64.patch
-+ + Fix build failure on amd64 (Closes: #343746)
-+ * Ignore the exit code of run-parts in the init script.
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Thu, 5 Jan 2006 12:30:26 +0100
-+
-+dbus (0.60-2) experimental; urgency=low
-+
-+ * Let python2.4-dbus depend on python2.4-libxml2 (Closes: #343715)
-+ * Changed maintainer address to
-+ pkg-utopia-maintainers at lists.alioth.debian.org
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Thu, 15 Dec 2005 20:01:11 +0100
-+
-+dbus (0.60-1) experimental; urgency=low
-+
-+ * New upstream release
-+ * Soname of libdbus-1 and libdbus-glib-1 were bumped to 2
-+ * debian/patches/dbus-reloadconfig-reply.patch
-+ + Removed. Merged upstream
-+ * debian/patches/dbus-monitor.patch
-+ + Removed. Merged upstream
-+ * debian/patches/dbus-make-libtool-safe.patch
-+ + Removed. Fixed upstream
-+ * debian/patches/dbus-moc-selection.patch
-+ + Added. Enable the Qt moc paths to be specified to configure
-+ * Depend on lsb-base >= 3.0
-+ * Let dbus conflicht with libdbus-1-1 and libdbus-1-2 with dbus << 0.60.
-+ Some bus changes could result in strange bugs when mixing the old libs
-+ with the new bus.
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Wed, 14 Dec 2005 19:53:07 +0100
-+
-+dbus (0.50-3) experimental; urgency=low
-+
-+ * Also move dbus-launch and dbus-send manpages to the dbus package
-+ * debian/dbus.init
-+ + Make force-reload an alias of reload instead of restart
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Mon, 21 Nov 2005 11:17:57 +0100
-+
-+dbus (0.50-2) experimental; urgency=low
-+
-+ * maintainance is actually spelled "maintenance" (Closes: #332238)
-+ * Disable --enable-verbose because of the big performance hit
-+ * Move dbus-binding-tool from dbus-1-utils to libdbus-glib-1-dev
-+ * Move dbus-launch and dbus-send into the dbus package (Closes: #337212)
-+ * Move the /etc/X11/Xsession.d/ script from dbus-1-utils to dbus
-+ * Add reload function to the init script
-+ * Use log_daemon_msg instead of log_begin_msg in the init script where
-+ applicable
-+ * debian/patches/dbus-reloadconfig-reply.patch
-+ + Added. Send a reply message when org.freedesktop.DBus.ReloadConfig is
-+ called
-+ * Prefix the long description of monodoc-dubs-1-manual with one space
-+ instead of two (Closes: #337032)
-+ * Add LSB formatted dependency info in the init script (Closes: #337644)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Wed, 9 Nov 2005 20:02:09 +0100
-+
-+dbus (0.50-1) experimental; urgency=low
-+
-+ * New upstream release
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Thu, 8 Sep 2005 10:01:21 +0200
-+
-+dbus (0.36.2-1) experimental; urgency=low
-+
-+ * New upstream release
-+ * Fix descriptions to refer to dbus rather than dbus-1.
-+ * Make dbus-1-utils depend on dbus
-+ * debian/patches/dbus-sessionbus-checkuid.patch
-+ + Removed. Fixed upstream
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Tue, 6 Sep 2005 09:26:19 +0200
-+
-+dbus (0.36.1-1) experimental; urgency=low
-+
-+ * New upstream release (Closes: #319593, #324016)
-+ * debian/patches/dbus_cmsgcred.patch
-+ + Removed. Fixed upstream.
-+ * debian/patches/dbus-gilstate.patch
-+ + Removed. Fixed upstream.
-+ * Sync with the ubuntu package
-+ + Remove dbus_bindings.{a,la} from python2.4-dbus
-+ + debian/patches/dbus-make-libtool-safe.patch
-+ - Added. Replace explicit libtool calls with $(LIBTOOL) in
-+ glib/Makefile.*
-+ + Don't include the .la files in the dev packages.
-+ + Don't restart dbus on upgrade. Too many applications don't handle it
-+ correctly.
-+ + Switched the init script to lsb-base
-+ + Ship dbus-binding-tool and dbus-viewer with dbus-1-utils
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Fri, 26 Aug 2005 21:58:42 +0200
-+
-+dbus (0.34-4) experimental; urgency=low
-+
-+ * libdbus-1-cil improvements based on comments from Mirco Bauer
-+ + Call dh_clideps before dh_makeclilibs
-+ + libdbus-1-cil can be arch all
-+ + Use CLI instead of .NET in the package description
-+ * Add debian/patches/dbus-sessionbus-checkuid.patch:
-+ - bus/session.conf.in: Do not allow any user to connect to any session bus
-+ by default.
-+ - bus/policy.c: "allowed" now defaults to true if the connecting user id
-+ matches the session bus user id.
-+ - This stops other users from listening and sending to other user's
-+ session dbus instances.
-+ - References:
-+ CAN-2005-0201
-+ https://bugs.freedesktop.org/show_bug.cgi?id=2436
-+ * debian/patches/dbus-gilstate: Fix segfaults in python bindings.
-+ Patch by Anthony Baxter.
-+ * Add D-BUS monodoc documentation package
-+ * C++ transition
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Mon, 11 Jul 2005 10:22:44 +0200
-+
-+dbus (0.34-3) experimental; urgency=low
-+
-+ * Build-depend on python-pyrex instead of python2.3-pyrex
-+ * debian/dbus.postinst
-+ + Forgot to rename dbus-1 to dbus in the previous package.
-+ * Rename libdbus-cil to libdbus-1-cil
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Wed, 22 Jun 2005 18:53:22 +0200
-+
-+dbus (0.34-2) experimental; urgency=low
-+
-+ * debian/dbus.init
-+ + The even.d dir is in /etc/dbus-1 not in /etc/dbus
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Tue, 21 Jun 2005 16:16:43 +0200
-+
-+dbus (0.34-1) experimental; urgency=low
-+
-+ * New upstream release
-+ * Build libdbus-cil on amd64 too (Closes: #314247)
-+ * Python bindings need python2.4, so build them against python2.4.
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Mon, 20 Jun 2005 13:07:04 +0200
-+
-+dbus (0.33-1) experimental; urgency=low
-+
-+ * New upstream release (Closes: #299049)
-+ * Redone the package names to be much more sane.
-+ - Based on ubuntu's dbus 0.33 package by Daniel Stone.
-+ - dbus deamon goes into the dbus package instead of dbus-1
-+ - glib bindings in libdbus-glib-1-1 instead of dbus-glib-1
-+ - qt bindings in libdbus-qt-1-1 instead of dbus-qt-1
-+ - Library component from dbus-1 goed into libdbus-1-1
-+ * debian/patches/dbus-fixverbose.patch
-+ - Removed. Fixed upstream
-+ * debian/patches/dbus-getpwname.patch
-+ - Removed. Fixed upstream
-+ * debian/patches/fix-policy-group.patch
-+ - Removed. Not relevant anymore
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Mon, 20 Jun 2005 11:12:12 +0200
-+
-+dbus (0.23.4-2) unstable; urgency=low
-+
-+ * Upload version with QT and Mono bindings to unstable. (Closes: #271895)
-+ (Closes: #271896) (Closes: #260044) (Closes: #290622)
-+ * debian/patches/dbus_cmsgcred.patch
-+ - Added. Fix syntax error on systems where HAVE_CMSGCRED is defined
-+ (Thanks to Michael Banck) (Closes: #311726)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Mon, 6 Jun 2005 22:48:08 +0200
-+
-+dbus (0.23.4-1bindings0) experimental; urgency=low
-+
-+ * Enable Mono and QT bindings.
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Tue, 5 Apr 2005 22:15:29 +0200
-+
-+dbus (0.23.4-1) unstable; urgency=low
-+
-+ * New upstream release
-+ * debian/patches/dbus-abi-api.patch
-+ - Removed, fixed upstream
-+ * debian/patches/dbus-python-fix.patch
-+ - Removed, fixed upstream
-+ * debian/patches/fix-policy-group.patch
-+ - Stop segfaulting at "<policy group="..."> tags (Closes: #297495)
-+ * debian/patches/dbus-fixverbose.patch
-+ - Fix inaccurate messages in the debug output of the uid/gid lookup code
-+ (Thanks to Tom Parker) (Closes: #297497)
-+ * debian/patches/dbus-getpwname.patch
-+ * Add .la files in the -dev packages (Closes: #297936)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Wed, 30 Mar 2005 23:02:00 +0200
-+
-+dbus (0.23.2-3) unstable; urgency=low
-+
-+ * debian/patches/dbus-abi-api.patch
-+ - Fix dbus api and abi breakage between 0.23.1 and 0.23.2 (Closes: #297020)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Mon, 28 Feb 2005 15:05:19 +0100
-+
-+dbus (0.23.2-2) unstable; urgency=low
-+
-+ * debian/patches/dbus-python-fix.patch
-+ - Fix python bindings (Based on dbus CVS fix)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Thu, 24 Feb 2005 11:19:03 +0100
-+
-+dbus (0.23.2-1bindings0) experimental; urgency=low
-+ * debian/patches/dbus-monofixes.patch
-+ + Removed. Fixed in this release
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Thu, 17 Feb 2005 13:24:22 +0100
-+
-+dbus (0.23.2-1) unstable; urgency=low
-+ * New upstream release
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Wed, 23 Feb 2005 13:04:21 +0100
-+
-+dbus (0.23.1-1bindings0) experimental; urgency=low
-+
-+ * New upstream release
-+ * debian/patches/dbus-monofixes.patch
-+ + Added. Some mono fixes from dbus cvs
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Thu, 17 Feb 2005 13:24:22 +0100
-+
-+dbus (0.23-1mono1) experimental; urgency=low
-+
-+ * Enable the qt bindings. Thanks to Kevin Ottens
-+ (Closes: #271895) (Closes: #271896) (Closes: #290622)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Sat, 22 Jan 2005 13:53:27 +0100
-+
-+dbus (0.23-1mono0) experimental; urgency=low
-+
-+ * Enable the mono bindings
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Fri, 14 Jan 2005 17:54:26 +0100
-+
-+dbus (0.23-1) unstable; urgency=low
-+
-+ * New upstream release
-+ * Disable the mono bindings for the unstable packages untill mono goes into
-+ testing.
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Fri, 14 Jan 2005 15:22:20 +0100
-+
-+dbus (0.22+cvs.20050104-1) experimental; urgency=low
-+
-+ * CVS snapshot
-+ * Package the dbus mono bindings for i386, powerpc and s390. Mostly based on
-+ patches from Edd Dumbill. (Closes: #260044)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Wed, 5 Jan 2005 18:20:47 +0100
-+
-+dbus (0.22-4) unstable; urgency=low
-+
-+ * Let the initscript check if the pid in the pidfile actually corresponds
-+ to a dbus daemon process (Closes: #285758)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Wed, 5 Jan 2005 16:55:45 +0100
-+
-+dbus (0.22-3) unstable; urgency=medium
-+
-+ * Actually ship the init script improvements mentioned in the previous
-+ upload. (please pass the brown paper bag)
-+ * Call run-parts --reverse on the event.d dir when stopping dbus
-+ (Closes: #269283)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Sat, 6 Nov 2004 16:17:40 +0100
-+
-+dbus (0.22-2) unstable; urgency=medium
-+
-+ * debian/patches/dbus-monitor.patch
-+ + Updated. Unbreak dbus-monitor when arguments are given. (From the ubuntu
-+ dbus package)
-+ * Use run-parts --arg instead of -a, which works with woody's run-parts
-+ (Closes: #269708) (Closes: #274702)
-+ * Use start-stop-daemon --retry when stopping to ensure the system bus
-+ stopped. Prevents race conditions with the dbus pidfile (Closes: #277148)
-+ * Add myself to Uploaders
-+ * Acknowledge my own NMU (Closes: #272862)
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Tue, 02 Nov 2004 12:19:47 +0100
-+
-+dbus (0.22-1.1) unstable; urgency=high
-+
-+ * Non-maintainer upload with maintainers permission
-+ * debian/patches/dbus-python-64bit.patch
-+ + Added. Taken from dbus cvs. Add support for int64 and uint64 to the
-+ python bindings (Closes: #272862)
-+ * Urgency high because the hal package depending on this fix fixes RC bugs.
-+
-+ -- Sjoerd Simons <sjoerd at debian.org> Sat, 25 Sep 2004 17:45:33 +0200
-+
-+dbus (0.22-1) unstable; urgency=high
-+
-+ * New upstream release.
-+ + Urgency high so it slips into sarge before the freeze.
-+
-+ -- Daniel Stone <daniels at debian.org> Tue, 17 Aug 2004 00:42:56 +0100
-+
-+dbus (0.21-7) unstable; urgency=low
-+
-+ * Created /etc/dbus-1/event.d/ and added support to dbus' init script
-+ to run the files in it on stop/start/restart
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Thu, 22 Jul 2004 14:13:44 +0100
-+
-+dbus (0.21-6) unstable; urgency=low
-+
-+ * Add a chown,chgrp to the init script to make sure the pid dir is owned
-+ by the messagebus user.
-+ * Modify the dbus-1 init script to remove some arguments from the invocation
-+ of start-stop-daemon so that it will work when being asked to stop a
-+ dbus instance which has a different executable to that installed.
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Mon, 12 Jul 2004 21:56:45 +0100
-+
-+dbus (0.21-5) unstable; urgency=low
-+
-+ * Change debian/control to indicate that dbus is group maintained.
-+ * Build-depend on the version of python2.3-pyrex which theoretically has
-+ the fixed patch for coping with unsigned long int vs. long unsigned int
-+ * Removed the seddery introduced in 0.21-2 because the above build-depend
-+ change should ensure we're safe.
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Mon, 5 Jul 2004 17:44:06 +0100
-+
-+dbus (0.21-4) unstable; urgency=low
-+
-+ * Updated debian/copyright to the AFL 2.0 closes: #239332
-+ * Updated debian/dbus-1.init to create /var/run/dbus if it
-+ doesn't already exist. closes: #242639
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Fri, 18 Jun 2004 00:20:27 +0100
-+
-+dbus (0.21-3) unstable; urgency=low
-+
-+ * Add the sed call to Makefile.in too. Damn my forgetfulness.
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Wed, 16 Jun 2004 18:06:28 +0100
-+
-+dbus (0.21-2) unstable; urgency=low
-+
-+ * Add a sed -e's/long unsigned/unsigned long/g' to the python bindings
-+ preparation line. This *should* solve the FTBFS on alpha, s390 and ia64
-+ * Also, fix an a-umlaut to 'ae' in the changelog to prevent nasty
-+ debian-changelog-file-uses-obsolete-national-charset errors from lintian
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Tue, 15 Jun 2004 19:26:12 +0100
-+
-+dbus (0.21-1) unstable; urgency=low
-+
-+ * New upstream version.
-+ + Fixes varargs crap - cleaner patch from David Zeuthen applied. (closes:
-+ #229274)
-+ * Added provides/replaces/conflicts on dbus-1-utils << 0.20-4, per -4's
-+ moving of manpages.
-+
-+ -- Daniel Stone <daniels at debian.org> Sun, 21 Mar 2004 02:42:53 +1100
-+
-+dbus (0.20-6) unstable; urgency=low
-+
-+ * Add a touch of usage information to the top of the dbus Xsession.d file.
-+ Also since we've had confirmation that this file does enough, this version
-+ closes: #230835
-+ * Add an extra rm -f $PIDFILE to /etc/init.d/dbus-1 to help on restart.
-+ closes: #229609
-+ * Temporarily quiesce error reports in system.d/*.conf files when loading.
-+ This breaks the standard that the daemon shouldn't start with malformed
-+ configuration files, but at least for now it seems sensible to do.
-+ closes: #230231
-+ NOTE: this is likely to be removed in a future version of dbus after the
-+ configuration file syntax stabilises. Please report bugs against packages
-+ which have configs which fail to parse with the latest dbus package.
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Tue, 10 Feb 2004 00:46:52 +0000
-+
-+dbus (0.20-5) unstable; urgency=low
-+
-+ * Add an /etc/X11/Xsession.d/ entry to launch a session bus.
-+ You will need to add 'use-session-dbus' to your /etc/X11/Xsession.options
-+ file to enable it.
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Tue, 3 Feb 2004 18:15:48 +0000
-+
-+dbus (0.20-4) unstable; urgency=low
-+
-+ * Ensure the manpages are installed into the right package.
-+ * Add /usr/lib/dbus-1.0/services to the dbus-1 package. (closes: #230413)
-+ * dbus-glib-1-dev now depends on libglib2.0-dev which is kinda needed in order
-+ to get glib-object.h
-+ * Removed the dbus-qt-1 and dbus-qt-1-dev packages until upstream actually
-+ do something with the binding (like putting some code into it)
-+
-+ -- Daniel Silverstone <dsilvers at debian.org> Sun, 1 Feb 2004 22:22:59 +0000
-+
-+dbus (0.20-3) unstable; urgency=high
-+
-+ * Urgency high because the old package was virtually useless.
-+ * debian/patches/fix-varargs-usage.diff:
-+ + Merged patch from Michel Daenzer (thanks Michel!) to fix varargs usage,
-+ so we don't segfault on --system anymore. (closes: #229274, #229005,
-+ #229609)
-+
-+ -- Daniel Stone <daniels at debian.org> Wed, 28 Jan 2004 06:51:07 +1100
-+
-+dbus (0.20-2) unstable; urgency=low
-+
-+ * The "gotta keep the ftpmaster cab^Whappy release".
-+ + Hey, I need the overrides ...
-+ * debian/python2.3-dbus.install:
-+ + Stop installing .a and .la files (thanks Daniel Silverstone).
-+ * debian/dbus-qt-1-dev.install:
-+ + Install the .la file ... yep, Daniel Silverstone
-+ * debian/patches/dbus-monitor.patch:
-+ + Patch from Daniel Silverstone to add suport for filters to dbus-monitor:
-+ only watch for certain events.
-+ * debian/rules:
-+ + Add --enable-verbose-mode to make debugging far more easier.
-+ - Daniel Silverstone strikes again!
-+
-+ -- Daniel Stone <daniels at debian.org> Wed, 21 Jan 2004 11:07:37 +1100
-+
-+dbus (0.20-1) unstable; urgency=low
-+
-+ * New upstream release (closes: #223400).
-+ + This version includes Qt and Python support.
-+ - New packages: dbus-1-qt, python2.3-dbus.
-+ * debian/dbus-1.postinst:
-+ + Call addgroup with --system so it doesn't get a userspace GID.
-+ (closes: #222563)
-+ * debian/control, debian/rules:
-+ + Start building Qt and Python bindings.
-+ * debian/patches/dbus-python-signals-dze.patch:
-+ + Merged patch (already applied in HEAD) to enhance signal support in the
-+ Python interface; available from
-+ http://freedesktop.org/~david/dbus-python-signals-dze.patch.
-+
-+ -- Daniel Stone <daniels at debian.org> Sat, 6 Dec 2003 00:17:50 +1100
-+
-+dbus (0.13-1) unstable; urgency=low
-+
-+ * New upstream release.
-+ * debian/control:
-+ + Update Maintainer address to debian.org.
-+ + Add Recommends: dbus-glib-1 to dbus-1-utils, for the dbus-monitor
-+ program. (closes: #213914)
-+
-+ -- Daniel Stone <daniels at debian.org> Wed, 22 Oct 2003 13:54:53 +1000
-+
-+dbus (0.12-4) unstable; urgency=low
-+
-+ * debian/control:
-+ + Taking over from Colin as maintainer.
-+ + Bump debhelper Build-Dep to >=4.1.46, when dh_installlogcheck was first
-+ introduced.
-+ + Bump Standards-Version to 3.6.1.
-+ + Add Replaces/Provides/Conflicts on earlier dbus-1 versions to
-+ dbus-1-utils.
-+ * debian/dbus-1.init:
-+ + Clean up after the daemon's pidfile mess, ensuring smooth upgrades.
-+ (closes: #209143)
-+
-+ -- Daniel Stone <daniel at fooishbar.org> Mon, 22 Sep 2003 12:13:06 +1000
-+
-+dbus (0.12-3) unstable; urgency=low
-+
-+ * debian/control:
-+ - Break out utilities into separate dbus-1-utils package.
-+
-+ -- Colin Walters <walters at debian.org> Sat, 30 Aug 2003 20:07:28 -0400
-+
-+dbus (0.12-2) unstable; urgency=low
-+
-+ * debian/control:
-+ - [dbus-1] Add Depends on adduser (Closes: #204871)
-+
-+ -- Colin Walters <walters at debian.org> Sun, 10 Aug 2003 22:23:36 -0400
-+
-+dbus (0.12-1) unstable; urgency=low
-+
-+ * New upstream release.
-+ * debian/control:
-+ - Bump Standards-Version to 3.6.0, no changes required.
-+
-+ -- Colin Walters <walters at debian.org> Wed, 6 Aug 2003 01:50:13 -0400
-+
-+dbus (0.11+cvs200307017-1) unstable; urgency=low
-+
-+ * New upstream CVS snapshot.
-+ - Creates services directory (Closes: #198433)
-+
-+ -- Colin Walters <walters at debian.org> Thu, 17 Jul 2003 19:05:37 -0400
-+
-+dbus (0.11+cvs20030528-2) unstable; urgency=low
-+
-+ * debian/rules:
-+ - Include utils.mk.
-+
-+ -- Colin Walters <walters at debian.org> Thu, 29 May 2003 02:14:29 -0400
-+
-+dbus (0.11+cvs20030528-1) unstable; urgency=low
-+
-+ * New upstream CVS snapshot.
-+ * debian/control:
-+ - Build-Depend on latest cdbs to get some minor fixes.
-+
-+ -- Colin Walters <walters at debian.org> Wed, 28 May 2003 16:56:29 -0400
-+
-+dbus (0.11-2) unstable; urgency=low
-+
-+ * debian/control:
-+ - Add Build-Depends on cdbs, just because it's so freaking sweet.
-+ * debian/rules:
-+ - Convert to CDBS.
-+ * debian/rocks:
-+ - Removed.
-+
-+ -- Colin Walters <walters at debian.org> Mon, 19 May 2003 19:21:33 -0400
-+
-+dbus (0.11-1) unstable; urgency=low
-+
-+ * The "Bill Gates Grants Self 18 Dexterity, 20 Charisma" release.
-+ * New upstream release.
-+ * debian/control:
-+ - Bump Standards-Version to 3.5.10, no changes required.
-+ * debian/rocks:
-+ - No need to create system.d anymore, upstream does it now.
-+
-+ -- Colin Walters <walters at debian.org> Thu, 15 May 2003 22:01:23 -0400
-+
-+dbus (0.10+cvs20030503-2) unstable; urgency=low
-+
-+ * The "I've Got To Stop Taking Lives So Seriously" release.
-+ * debian/control:
-+ - Add Build-Depends on docbook-utils.
-+
-+ -- Colin Walters <walters at debian.org> Sat, 3 May 2003 16:58:20 -0400
-+
-+dbus (0.10+cvs20030503-1) unstable; urgency=low
-+
-+ * The "Chimp Study On Human-Evasion Response To Feces-Hurling Nearly
-+ Complete" release.
-+ * New upstream snapshot.
-+ - Includes some of my patches; this will among other things make
-+ the system bus go again.
-+ * debian/rocks:
-+ - Add --enable-docs to DEB_CONFIGURE_EXTRA_FLAGS.
-+ * debian/dbus-1-dev.install:
-+ - Update to handle new upstream .pc name.
-+ * debian/rules:
-+ - Update to latest version of Colin's Build System.
-+
-+ -- Colin Walters <walters at debian.org> Sat, 3 May 2003 03:58:53 -0400
-+
-+dbus (0.10-1) unstable; urgency=low
-+
-+ * The "West-Wing Tech-Support' Crew Be A Buncha Wack Bitches" release.
-+ * New upstream release.
-+ * debian/dbus-1.install:
-+ - Install all binaries.
-+ * debian/dbus-1-dev.install:
-+ - Install headers from /usr/lib/dbus-1.0 too.
-+ * debian/rocks:
-+ - Create etc/dbus-1/system.d.
-+
-+ -- Colin Walters <walters at debian.org> Mon, 28 Apr 2003 17:29:50 -0400
-+
-+dbus (0.9-2) unstable; urgency=low
-+
-+ * The "New Fox Reality Show To Determine Ruler Of Iraq" release.
-+ * debian/rocks:
-+ - Generate API docs via doxygen (Closes: #185470)
-+ * debian/control:
-+ - Build-Depend on doxygen.
-+ * debian/dbus-1-doc.install:
-+ - Install docs in correct place.
-+ - Install newly generated doxygen docs.
-+ * debian/rules:
-+ - Update to latest version of Colin's Build System.
-+ - Eagerly await ftpmaster installing build-common.
-+
-+ -- Colin Walters <walters at debian.org> Wed, 23 Apr 2003 23:40:00 -0400
-+
-+dbus (0.9-1) unstable; urgency=low
-+
-+ * The "Starbucks To Begin Sinister 'Phase Two' Of Operation" release.
-+ * New upstream release.
-+ * debian/control:
-+ - Drop "lib*" prefix from all packages, and change suffix from "0" to "-1".
-+ D-BUS isn't technically just a shared library; it also includes a
-+ daemon. This could really go either way; I could just put the daemon
-+ in the libdbus0 package and be done with it, but I think that's more
-+ confusing in the end, since people have been very conditioned to
-+ expect libfoo -> just shared library.
-+ - Add Conflicts: and Replaces: on older lib* packages.
-+ - Remove Provides and Conflicts on libdbus-dev in new dbus-1-dev
-+ package, since they are actually parallel installable.
-+ - Ditto for libdbus-glib0-dev.
-+ - Touch up descriptions.
-+ - Update to Standards-Version: 3.5.9; no changes required.
-+ - Add libexpat-dev to Build-Depends.
-+ * debian/dbus0.init:
-+ - New file; runs the D-BUS daemon.
-+ * debian/dbus0.default:
-+ - New file.
-+ * debian/dbus0.postinst:
-+ - New file; creates the messagebus user and stuff.
-+ * debian/dbus0.install:
-+ - Install configuration files.
-+ * debian/rocks:
-+ - Add --with-xml=expat.
-+ - Update to correspond with changes to debian/control.
-+ - Make dbus-glib-1 package be built after dbus-1 package.
-+ - Add debian/dbus-1/usr/lib to DEB_SHLIBDEPS_INCLUDE_dbus-glib-1 so we
-+ pick up the right shlibs.
-+ * debian/rules:
-+ - Update to latest version of Colin's Build System.
-+
-+ -- Colin Walters <walters at debian.org> Sun, 13 Apr 2003 23:40:29 -0400
-+
-+dbus (0.6-1) unstable; urgency=low
-+
-+ * New upstream release.
-+ * debian/control:
-+ - [libdbus0] Flesh out description somewhat.
-+
-+ -- Colin Walters <walters at debian.org> Tue, 18 Mar 2003 10:50:42 -0500
-+
-+dbus (0.5-2) unstable; urgency=low
-+
-+ * debian/libdbus0-dev.install:
-+ - Don't include dbus-glib-1.0.pc.
-+ - Don't include dbus-glib-1.a or .so.
-+
-+ -- Colin Walters <walters at debian.org> Thu, 6 Mar 2003 23:17:53 -0500
-+
-+dbus (0.5-1) unstable; urgency=low
-+
-+ * Initial version (Closes: #183739)
-+
-+ -- Colin Walters <walters at debian.org> Thu, 6 Mar 2003 17:58:06 -0500
-diff -Naur dbus-0.61.orig/debian/compat dbus-0.61/debian/compat
---- dbus-0.61.orig/debian/compat 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/compat 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1 @@
-+4
-diff -Naur dbus-0.61.orig/debian/control dbus-0.61/debian/control
---- dbus-0.61.orig/debian/control 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/control 2006-02-20 00:32:17.000000000 +0100
-@@ -0,0 +1,224 @@
-+Source: dbus
-+Section: devel
-+Priority: optional
-+Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers at lists.alioth.debian.org>
-+Uploaders: Daniel Stone <daniels at debian.org>, Sjoerd Simons <sjoerd at debian.org>
-+Build-Depends: cdbs (>= 0.4.5.1), debhelper (>= 4.1.46), libglib2.0-dev, libexpat-dev, doxygen, docbook-utils, python2.4, libgtk2.0-dev, python-pyrex (>= 0.9.2.1-3), xmlto, python2.4-dev, libqt3-mt-dev, libqt4-dev
-+Build-Depends-Indep: libgtk-cil, cli-common (>= 0.2.0), libmono-dev, mono-mcs, mono-gac, monodoc-base
-+Standards-Version: 3.6.1.0
-+
-+Package: dbus
-+Architecture: any
-+Depends: ${shlibs:Depends}, adduser, debianutils (>= 1.22.0), lsb-base (>= 3.0)
-+Conflicts: libdbus0, dbus-1, dbus-1-utils (<< 0.50-2), libdbus-1-1
-+Replaces: libdbus0, dbus-1
-+Description: simple interprocess messaging system
-+ D-BUS is a message bus, used for sending messages between
-+ applications. Conceptually, it fits somewhere in between raw sockets
-+ and CORBA in terms of complexity.
-+ .
-+ D-BUS supports broadcast messages, asynchronous messages (thus
-+ decreasing latency), authentication, and more. It is designed to be
-+ low-overhead; messages are sent using a binary protocol, not using
-+ XML. D-BUS also supports a method call mapping for its messages, but
-+ it is not required; this makes using the system quite simple.
-+ .
-+ D-BUS is still under heavy development, but is expected to be widely
-+ used. It comes with several interfaces, including GLib. See the
-+ description of dbus-glib-1 for more information about those.
-+ .
-+ This package contains the D-BUS daemon; the client-side library can
-+ be found in the libdbus-1-2 package, as it is no longer contained in
-+ this package.
-+
-+Package: libdbus-1-2
-+Architecture: any
-+Depends: ${shlibs:Depends}
-+Conflicts: dbus (<< 0.60)
-+Description: simple interprocess messaging system
-+ D-BUS is a message bus, used for sending messages between
-+ applications. Conceptually, it fits somewhere in between raw sockets
-+ and CORBA in terms of complexity.
-+ .
-+ D-BUS supports broadcast messages, asynchronous messages (thus
-+ decreasing latency), authentication, and more. It is designed to be
-+ low-overhead; messages are sent using a binary protocol, not using
-+ XML. D-BUS also supports a method call mapping for its messages, but
-+ it is not required; this makes using the system quite simple.
-+ .
-+ D-BUS is still under heavy development, but is expected to be widely
-+ used. It comes with several interfaces, including GLib. See the
-+ description of libdbus-glib-1-2 for more information about those.
-+ .
-+ The daemon can be found in the dbus package.
-+
-+Package: dbus-1-utils
-+Architecture: any
-+Section: utils
-+Depends: ${shlibs:Depends}, dbus
-+Description: simple interprocess messaging system (utilities)
-+ D-BUS is a message bus, used for sending messages between
-+ applications. Conceptually, it fits somewhere in between raw sockets
-+ and CORBA in terms of complexity.
-+ .
-+ This package contains several D-BUS related utilities like
-+ dbus-launch and dbus-send.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: dbus-1-doc
-+Section: doc
-+Architecture: all
-+Suggests: dbus-1-dev
-+Conflicts: libdbus0-doc
-+Replaces: libdbus0-doc
-+Description: simple interprocess messaging system (documentation)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package contains the API documentation for D-BUS, as well as
-+ the protocol specification.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: libdbus-1-dev
-+Section: libdevel
-+Architecture: any
-+Depends: libdbus-1-2 (= ${Source-Version}), pkg-config
-+Conflicts: dbus-1-dev
-+Replaces: libdbus0-dev, dbus-1-dev
-+Description: simple interprocess messaging system (development headers)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: libdbus-glib-1-dev
-+Section: libdevel
-+Architecture: any
-+Depends: libdbus-glib-1-2 (= ${Source-Version}), libdbus-1-dev (= ${Source-Version}), libglib2.0-dev
-+Conflicts: libdbus-glib-dev, dbus-glib-1-dev, dbus-1-utils (<< 0.50-2)
-+Replaces: libdbus-glib0-dev, dbus-glib-1-dev
-+Description: simple interprocess messaging system (GLib interface)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package provides a GLib-style interface to D-BUS.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: libdbus-glib-1-2
-+Section: libs
-+Architecture: any
-+Depends: ${shlibs:Depends}
-+Description: simple interprocess messaging system (GLib-based shared library)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package provides the GLib-based shared library for applications using the
-+ GLib interface to D-BUS.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: libdbus-qt-1-dev
-+Section: libdevel
-+Architecture: any
-+Depends: libdbus-qt-1-1c2 (= ${Source-Version}), libdbus-1-dev (= ${Source-Version}), libqt3-mt-dev
-+Conflicts: dbus-qt-1-dev
-+Replaces: dbus-qt-1-dev
-+Description: simple interprocess messaging system (Qt interface)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package provides a Qt-style interface to D-BUS.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: libdbus-qt-1-1c2
-+Section: libs
-+Architecture: any
-+Depends: ${shlibs:Depends}
-+Conflicts: dbus-qt-1, dbus-qt-1c2, libdbus-qt-1-1
-+Replaces: dbus-qt-1, dbus-qt-1c2, libdbus-qt-1-1
-+Description: simple interprocess messaging system (Qt-based shared library)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package provides the Qt-based shared library for applications using the
-+ Qt interface to D-BUS.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: libdbus-qt4-1-dev
-+Section: libdevel
-+Architecture: any
-+Depends: libdbus-qt4-1-1 (= ${Source-Version}), libdbus-1-dev (= ${Source-Version}), libqt4-dev
-+Description: simple interprocess messaging system (Qt4 interface)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package provides a Qt4-style interface to D-BUS.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: libdbus-qt4-1-1
-+Section: libs
-+Architecture: any
-+Depends: ${shlibs:Depends}
-+Description: simple interprocess messaging system (Qt4-based shared library)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package provides the Qt4-based shared library for applications using the
-+ Qt4 interface to D-BUS.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: python2.4-dbus
-+Section: python
-+Architecture: any
-+Depends: ${shlibs:Depends}, ${python:Depends}, python2.4-libxml2
-+Description: simple interprocess messaging system (Python interface)
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package provides a Python interface to D-BUS.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: libdbus-1-cil
-+Section: libs
-+Conflicts: libdbus-cil
-+Replaces: libdbus-cil
-+Architecture: all
-+Depends: ${cli:Depends}, libdbus-glib-1-2
-+Description: CLI binding for D-BUS interprocess messaging system
-+ D-BUS is a message bus, used for sending messages between applications.
-+ Conceptually, it fits somewhere in between raw sockets and CORBA in
-+ terms of complexity.
-+ .
-+ This package provides a CLI binding to D-BUS, for use with Mono or
-+ other ECMA CLI implementations.
-+ .
-+ See the dbus description for more information about D-BUS in general.
-+
-+Package: monodoc-dbus-1-manual
-+Section: doc
-+Depends: monodoc-manual
-+Architecture: all
-+Description: compiled XML documentation for the D-BUS CLI bindings
-+ The MonoDoc Project is the documentation framework of the Mono project which
-+ provides detailed API documentation for all Mono components and the Mono CLI
-+ implementation.
-+ .
-+ This packages contains the compiled XML documentation for the D-BUS CLI
-+ bindings
-diff -Naur dbus-0.61.orig/debian/copyright dbus-0.61/debian/copyright
---- dbus-0.61.orig/debian/copyright 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/copyright 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1,213 @@
-+This package was debianized by Colin Walters <walters at debian.org> on
-+Thu, 6 Mar 2003 18:01:37 -0500
-+
-+It was downloaded from http://www.freedesktop.org/software/dbus
-+
-+This package is dual-licensed under the Academic Free License, and the
-+GPL. For a description of the GPL, see /usr/share/common-licenses/GPL
-+on your Debian system.
-+
-+Portions of the package are only licensed under the GPL (notably
-+tools/dbus-cleanup-sockets.c and test/decode-gcov.c ).
-+
-+The Academic Free License follows:
-+
-+ The Academic Free License
-+ v. 2.0
-+
-+This Academic Free License (the "License") applies to any original
-+work of authorship (the "Original Work") whose owner (the "Licensor")
-+has placed the following notice immediately following the copyright
-+notice for the Original Work:
-+
-+Licensed under the Academic Free License version 2.0
-+
-+1) Grant of Copyright License. Licensor hereby grants You a
-+world-wide, royalty-free, non-exclusive, perpetual, sublicenseable
-+license to do the following:
-+
-+a) to reproduce the Original Work in copies;
-+
-+b) to prepare derivative works ("Derivative Works") based upon the Original Work;
-+
-+c) to distribute copies of the Original Work and Derivative Works to the public;
-+
-+d) to perform the Original Work publicly; and
-+
-+e) to display the Original Work publicly.
-+
-+2) Grant of Patent License. Licensor hereby grants You a world-wide,
-+royalty-free, non-exclusive, perpetual, sublicenseable license, under
-+patent claims owned or controlled by the Licensor that are embodied in
-+the Original Work as furnished by the Licensor, to make, use, sell and
-+offer for sale the Original Work and Derivative Works.
-+
-+3) Grant of Source Code License. The term "Source Code" means the
-+preferred form of the Original Work for making modifications to it and
-+all available documentation describing how to modify the Original
-+Work. Licensor hereby agrees to provide a machine-readable copy of
-+the Source Code of the Original Work along with each copy of the
-+Original Work that Licensor distributes. Licensor reserves the right
-+to satisfy this obligation by placing a machine-readable copy of the
-+Source Code in an information repository reasonably calculated to
-+permit inexpensive and convenient access by You for as long as
-+Licensor continues to distribute the Original Work, and by publishing
-+the address of that information repository in a notice immediately
-+following the copyright notice that applies to the Original Work.
-+
-+4) Exclusions From License Grant. Neither the names of Licensor, nor
-+the names of any contributors to the Original Work, nor any of their
-+trademarks or service marks, may be used to endorse or promote
-+products derived from this Original Work without express prior written
-+permission of the Licensor. Nothing in this License shall be deemed
-+to grant any rights to trademarks, copyrights, patents, trade secrets
-+or any other intellectual property of Licensor except as expressly
-+stated herein. No patent license is granted to make, use, sell or
-+offer to sell embodiments of any patent claims other than the licensed
-+claims defined in Section 2. No right is granted to the trademarks of
-+Licensor even if such marks are included in the Original Work.
-+Nothing in this License shall be interpreted to prohibit Licensor from
-+licensing under different terms from this License any Original Work
-+that Licensor otherwise would have a right to license.
-+
-+5) This section intentionally omitted.
-+
-+6) Attribution Rights. You must retain, in the Source Code of any
-+Derivative Works that You create, all copyright, patent or trademark
-+notices from the Source Code of the Original Work, as well as any
-+notices of licensing and any descriptive text identified therein as an
-+"Attribution Notice." You must cause the Source Code for any
-+Derivative Works that You create to carry a prominent Attribution
-+Notice reasonably calculated to inform recipients that You have
-+modified the Original Work.
-+
-+7) Warranty of Provenance and Disclaimer of Warranty. Licensor
-+warrants that the copyright in and to the Original Work and the patent
-+rights granted herein by Licensor are owned by the Licensor or are
-+sublicensed to You under the terms of this License with the permission
-+of the contributor(s) of those copyrights and patent rights. Except
-+as expressly stated in the immediately proceeding sentence, the
-+Original Work is provided under this License on an "AS IS" BASIS and
-+WITHOUT WARRANTY, either express or implied, including, without
-+limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or
-+FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY
-+OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY
-+constitutes an essential part of this License. No license to Original
-+Work is granted hereunder except under this disclaimer.
-+
-+8) Limitation of Liability. Under no circumstances and under no legal
-+theory, whether in tort (including negligence), contract, or
-+otherwise, shall the Licensor be liable to any person for any direct,
-+indirect, special, incidental, or consequential damages of any
-+character arising as a result of this License or the use of the
-+Original Work including, without limitation, damages for loss of
-+goodwill, work stoppage, computer failure or malfunction, or any and
-+all other commercial damages or losses. This limitation of liability
-+shall not apply to liability for death or personal injury resulting
-+from Licensor's negligence to the extent applicable law prohibits such
-+limitation. Some jurisdictions do not allow the exclusion or
-+limitation of incidental or consequential damages, so this exclusion
-+and limitation may not apply to You.
-+
-+9) Acceptance and Termination. If You distribute copies of the
-+Original Work or a Derivative Work, You must make a reasonable effort
-+under the circumstances to obtain the express assent of recipients to
-+the terms of this License. Nothing else but this License (or another
-+written agreement between Licensor and You) grants You permission to
-+create Derivative Works based upon the Original Work or to exercise
-+any of the rights granted in Section 1 herein, and any attempt to do
-+so except under the terms of this License (or another written
-+agreement between Licensor and You) is expressly prohibited by
-+U.S. copyright law, the equivalent laws of other countries, and by
-+international treaty. Therefore, by exercising any of the rights
-+granted to You in Section 1 herein, You indicate Your acceptance of
-+this License and all of its terms and conditions.
-+
-+10) Termination for Patent Action. This License shall terminate
-+automatically and You may no longer exercise any of the rights granted
-+to You by this License as of the date You commence an action,
-+including a cross-claim or counterclaim, for patent infringement (i)
-+against Licensor with respect to a patent applicable to software or
-+(ii) against any entity with respect to a patent applicable to the
-+Original Work (but excluding combinations of the Original Work with
-+other software or hardware).
-+
-+11) Jurisdiction, Venue and Governing Law. Any action or suit relating
-+to this License may be brought only in the courts of a jurisdiction
-+wherein the Licensor resides or in which Licensor conducts its primary
-+business, and under the laws of that jurisdiction excluding its
-+conflict-of-law provisions. The application of the United Nations
-+Convention on Contracts for the International Sale of Goods is
-+expressly excluded. Any use of the Original Work outside the scope of
-+this License or after its termination shall be subject to the
-+requirements and penalties of the U.S. Copyright Act, 17 U.S.C. \u00a4
-+101 et seq., the equivalent laws of other countries, and international
-+treaty. This section shall survive the termination of this License.
-+
-+12) Attorneys Fees. In any action to enforce the terms of this License
-+or seeking damages relating thereto, the prevailing party shall be
-+entitled to recover its costs and expenses, including, without
-+limitation, reasonable attorneys' fees and costs incurred in
-+connection with such action, including any appeal of such action.
-+This section shall survive the termination of this License.
-+
-+13) Miscellaneous. This License represents the complete agreement
-+concerning the subject matter hereof. If any provision of this
-+License is held to be unenforceable, such provision shall be reformed
-+only to the extent necessary to make it enforceable.
-+
-+14) Definition of "You" in This License. "You" throughout this
-+License, whether in upper or lower case, means an individual or a
-+legal entity exercising rights under, and complying with all of the
-+terms of, this License. For legal entities, "You" includes any entity
-+that controls, is controlled by, or is under common control with you.
-+For purposes of this definition, "control" means (i) the power, direct
-+or indirect, to cause the direction or management of such entity,
-+whether by contract or otherwise, or (ii) ownership of fifty percent
-+(50%) or more of the outstanding shares, or (iii) beneficial ownership
-+of such entity.
-+
-+15) Right to Use. You may use the Original Work in all ways not
-+otherwise restricted or conditioned by this License or by law, and
-+Licensor promises not to interfere with or be responsible for such
-+uses by You.
-+
-+This license is Copyright (C) 2003 Lawrence E. Rosen. All rights
-+reserved. Permission is hereby granted to copy and distribute this
-+license without modification. This license may not be modified
-+without the express written permission of its copyright owner.
-+
-+--
-+END OF ACADEMIC FREE LICENSE. The following is intended to describe the essential
-+differences between the Academic Free License (AFL) version 1.0 and other
-+open source licenses:
-+
-+The Academic Free License is similar to the BSD, MIT, UoI/NCSA and Apache
-+licenses in many respects but it is intended to solve a few problems with
-+those licenses.
-+
-+* The AFL is written so as to make it clear what software is being
-+licensed (by the inclusion of a statement following the copyright notice
-+in the software). This way, the license functions better than a template
-+license. The BSD, MIT and UoI/NCSA licenses apply to unidentified software.
-+
-+* The AFL contains a complete copyright grant to the software. The BSD
-+and Apache licenses are vague and incomplete in that respect.
-+
-+* The AFL contains a complete patent grant to the software. The BSD, MIT,
-+UoI/NCSA and Apache licenses rely on an implied patent license and contain
-+no explicit patent grant.
-+
-+* The AFL makes it clear that no trademark rights are granted to the
-+licensor's trademarks. The Apache license contains such a provision, but the
-+BSD, MIT and UoI/NCSA licenses do not.
-+
-+* The AFL includes the warranty by the licensor that it either owns the
-+copyright or that it is distributing the software under a license. None of
-+the other licenses contain that warranty. All other warranties are disclaimed,
-+as is the case for the other licenses.
-+
-+* The AFL is itself copyrighted (with the right granted to copy and distribute
-+without modification). This ensures that the owner of the copyright to the
-+license will control changes. The Apache license contains a copyright notice,
-+but the BSD, MIT and UoI/NCSA licenses do not.
-diff -Naur dbus-0.61.orig/debian/dbus-1-doc.install dbus-0.61/debian/dbus-1-doc.install
---- dbus-0.61.orig/debian/dbus-1-doc.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus-1-doc.install 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1,4 @@
-+doc/dbus-specification.html usr/share/doc/dbus-1-doc
-+doc/dbus-test-plan.html usr/share/doc/dbus-1-doc
-+doc/dcop-howto.txt usr/share/doc/dbus-1-doc
-+doc/api/html usr/share/doc/dbus-1-doc/api/
-diff -Naur dbus-0.61.orig/debian/dbus-1-utils.install dbus-0.61/debian/dbus-1-utils.install
---- dbus-0.61.orig/debian/dbus-1-utils.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus-1-utils.install 2005-11-15 11:11:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+debian/tmp/usr/bin/dbus-viewer
-+debian/tmp/usr/bin/dbus-monitor
-+debian/tmp/usr/share/man/man1/dbus-monitor.1
-diff -Naur dbus-0.61.orig/debian/dbus-Xsession dbus-0.61/debian/dbus-Xsession
---- dbus-0.61.orig/debian/dbus-Xsession 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus-Xsession 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1,17 @@
-+# $Id:$
-+# In order to activate the session bus at X session launch
-+# simply place use-session-dbus into your /etc/X11/Xsession.options file
-+#
-+
-+STARTDBUS=
-+DBUSLAUNCH=/usr/bin/dbus-launch
-+
-+if grep -qs ^use-session-dbus "$OPTIONFILE"; then
-+ if [ -x "$DBUSLAUNCH" ]; then
-+ STARTDBUS=yes
-+ fi
-+fi
-+
-+if [ -n "$STARTDBUS" ]; then
-+ STARTUP="$DBUSLAUNCH --exit-with-session $STARTUP"
-+fi
-diff -Naur dbus-0.61.orig/debian/dbus.default dbus-0.61/debian/dbus.default
---- dbus-0.61.orig/debian/dbus.default 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus.default 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1,10 @@
-+# This is a configuration file for /etc/init.d/dbus; it allows you to
-+# perform common modifications to the behavior of the dbus daemon
-+# startup without editing the init script (and thus getting prompted
-+# by dpkg on upgrades). We all love dpkg prompts.
-+
-+# Parameters to pass to dbus.
-+PARAMS=""
-+
-+# Whether or not to run the dbus system daemon; set to 0 to disable.
-+ENABLED=1
-diff -Naur dbus-0.61.orig/debian/dbus.init dbus-0.61/debian/dbus.init
---- dbus-0.61.orig/debian/dbus.init 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus.init 2005-12-22 13:15:27.000000000 +0100
-@@ -0,0 +1,109 @@
-+#! /bin/sh
-+### BEGIN INIT INFO
-+# Provides: dbus
-+# Required-Start: $local_fs $syslog
-+# Required-Stop: $local_fs $syslog
-+# Default-Start: 2 3 4 5
-+# Default-Stop: S 0 1 6
-+### END INIT INFO
-+# -*- coding: utf-8 -*-
-+# Debian init.d script for D-BUS
-+# Copyright © 2003 Colin Walters <walters at debian.org>
-+# Copyright © 2005 Sjoerd Simons <sjoerd at debian.org>
-+
-+set -e
-+
-+DAEMON=/usr/bin/dbus-daemon
-+NAME=dbus
-+DAEMONUSER=messagebus
-+PIDDIR=/var/run/dbus
-+PIDFILE=$PIDDIR/pid
-+DESC="system message bus"
-+EVENTDIR=/etc/dbus-1/event.d
-+
-+test -x $DAEMON || exit 0
-+
-+. /lib/lsb/init-functions
-+
-+# Source defaults file; edit that file to configure this script.
-+ENABLED=1
-+PARAMS=""
-+if [ -e /etc/default/dbus ]; then
-+ . /etc/default/dbus
-+fi
-+
-+test "$ENABLED" != "0" || exit 0
-+
-+start_it_up()
-+{
-+ if [ ! -d $PIDDIR ]; then
-+ mkdir -p $PIDDIR
-+ chown $DAEMONUSER $PIDDIR
-+ chgrp $DAEMONUSER $PIDDIR
-+ fi
-+ if [ -e $PIDFILE ]; then
-+ PIDDIR=/proc/$(cat $PIDFILE)
-+ if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
-+ log_success_msg "$DESC already started; not starting."
-+ else
-+ log_success_msg "Removing stale PID file $PIDFILE."
-+ rm -f $PIDFILE
-+ fi
-+ fi
-+ log_daemon_msg "Starting $DESC" "$NAME"
-+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
-+ --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS
-+ log_end_msg $?
-+ if [ -d $EVENTDIR ]; then
-+ run-parts --arg=start $EVENTDIR || true
-+ fi
-+}
-+
-+shut_it_down()
-+{
-+ if [ -d $EVENTDIR ]; then
-+ run-parts --reverse --arg=stop $EVENTDIR || true
-+ fi
-+ log_daemon_msg "Stopping $DESC" "$NAME"
-+ start-stop-daemon --stop --retry 60 --quiet --oknodo --pidfile $PIDFILE \
-+ --user $DAEMONUSER
-+ # We no longer include these arguments so that start-stop-daemon
-+ # can do its job even given that we may have been upgraded.
-+ # We rely on the pidfile being sanely managed
-+ # --exec $DAEMON -- --system $PARAMS
-+ log_end_msg $?
-+ rm -f $PIDFILE
-+}
-+
-+reload_it()
-+{
-+ log_begin_msg "Reloading $DESC config"
-+ dbus-send --print-reply --system --type=method_call \
-+ --dest=org.freedesktop.DBus \
-+ / org.freedesktop.DBus.ReloadConfig > /dev/null
-+ # hopefully this is enough time for dbus to reload it's config file.
-+ log_end_msg $?
-+}
-+
-+case "$1" in
-+ start)
-+ start_it_up
-+ ;;
-+ stop)
-+ shut_it_down
-+ ;;
-+ reload|force-reload)
-+ reload_it
-+ ;;
-+ restart)
-+ shut_it_down
-+ sleep 1
-+ start_it_up
-+ ;;
-+ *)
-+ echo "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload}" >&2
-+ exit 1
-+ ;;
-+esac
-+
-+exit 0
-diff -Naur dbus-0.61.orig/debian/dbus.install dbus-0.61/debian/dbus.install
---- dbus-0.61.orig/debian/dbus.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus.install 2005-11-15 11:11:24.000000000 +0100
-@@ -0,0 +1,12 @@
-+debian/tmp/var/run/dbus
-+debian/tmp/etc/dbus-1
-+debian/tmp/usr/bin/dbus-daemon
-+debian/tmp/usr/bin/dbus-cleanup-sockets
-+debian/tmp/usr/bin/dbus-launch
-+debian/tmp/usr/bin/dbus-send
-+debian/tmp/usr/share/man/man1/dbus-daemon.1
-+debian/tmp/usr/share/man/man1/dbus-cleanup-sockets.1
-+debian/tmp/usr/share/dbus-1/services
-+debian/tmp/usr/share/dbus-1/services/*
-+debian/tmp/usr/share/man/man1/dbus-launch.1
-+debian/tmp/usr/share/man/man1/dbus-send.1
-diff -Naur dbus-0.61.orig/debian/dbus.postinst dbus-0.61/debian/dbus.postinst
---- dbus-0.61.orig/debian/dbus.postinst 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus.postinst 2006-02-16 12:04:55.000000000 +0100
-@@ -0,0 +1,28 @@
-+#!/bin/sh
-+# -*- coding: utf-8 -*-
-+# Post-installation script for D-BUS
-+# Copyright © 2003 Colin Walters <walters at debian.org>
-+# Copyright © 2006 Sjoerd Simons <sjoerd at debian.org>
-+
-+set -e
-+
-+MESSAGEUSER=messagebus
-+MESSAGEHOME=/var/run/dbus
-+
-+
-+chgrp "$MESSAGEUSER" "$MESSAGEHOME" 2>/dev/null || addgroup --system "$MESSAGEUSER"
-+chown "$MESSAGEUSER"."$MESSAGEUSER" "$MESSAGEHOME" 2>/dev/null || \
-+ adduser --system --home "$MESSAGEHOME" --no-create-home --disabled-password --ingroup "$MESSAGEUSER" "$MESSAGEUSER"
-+
-+# Do not restart dbus on upgrades, only on fresh installations
-+if [ "$1" = "configure" ]; then
-+ if [ -e /var/run/dbus/pid ] &&
-+ ps --no-heading -p $(cat /var/run/dbus/pid) > /dev/null; then
-+ # trigger an update notification which recommends to reboot
-+ [ -x /usr/share/update-notifier/notify-reboot-required ] && \
-+ /usr/share/update-notifier/notify-reboot-required || true
-+ exit 0
-+ fi
-+fi
-+
-+#DEBHELPER#
-diff -Naur dbus-0.61.orig/debian/dbus.preinst dbus-0.61/debian/dbus.preinst
---- dbus-0.61.orig/debian/dbus.preinst 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus.preinst 2005-12-22 12:13:15.000000000 +0100
-@@ -0,0 +1,28 @@
-+#!/bin/sh
-+
-+set -e
-+
-+rm_conffile() {
-+ CONFFILE="$1"
-+ OLD_MD5SUM="$2"
-+ if [ -e "$CONFFILE" ]; then
-+ md5sum="`md5sum \"$CONFFILE\" | sed -e \"s/ .*//\"`"
-+ if [ "$md5sum" != "$OLD_MD5SUM" ]; then
-+ echo "Obsolete conffile $CONFFILE has been modified by you."
-+ echo "Saving as $CONFFILE.dpkg-bak ..."
-+ mv -f "$CONFFILE" "$CONFFILE".bak
-+ else
-+ echo "Removing obsolete conffile $CONFFILE ..."
-+ rm -f "$CONFFILE"
-+ fi
-+ fi
-+}
-+
-+case "$1" in
-+install|upgrade)
-+ if dpkg --compare-versions "$2" lt "0.50-2"; then
-+ rm_conffile "/etc/X11/Xsession.d/75dbus-1-utils_dbus-launch" f16c15c4b018d37ca3ea2b6aba224439
-+ fi
-+esac
-+
-+#DEBHELPER#
-diff -Naur dbus-0.61.orig/debian/dbus.prerm dbus-0.61/debian/dbus.prerm
---- dbus-0.61.orig/debian/dbus.prerm 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/dbus.prerm 2005-08-26 21:57:04.000000000 +0200
-@@ -0,0 +1,8 @@
-+#!/bin/sh -e
-+
-+# Do not restart dbus on upgrades, only stop if we remove the package
-+if [ "$1" = "upgrade" ]; then
-+ exit 0
-+fi
-+
-+#DEBHELPER#
-diff -Naur dbus-0.61.orig/debian/libdbus-1-2.install dbus-0.61/debian/libdbus-1-2.install
---- dbus-0.61.orig/debian/libdbus-1-2.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-1-2.install 2005-12-04 13:16:43.000000000 +0100
-@@ -0,0 +1 @@
-+debian/tmp/usr/lib/libdbus-1*.so.*
-diff -Naur dbus-0.61.orig/debian/libdbus-1-cil.install dbus-0.61/debian/libdbus-1-cil.install
---- dbus-0.61.orig/debian/libdbus-1-cil.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-1-cil.install 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1,4 @@
-+debian/tmp/usr/lib/pkgconfig/dbus-sharp.pc
-+debian/tmp/usr/lib/mono/*
-+debian/tmp/usr/share/dotnet/mono/*
-+debian/tmp/usr/share/dotnet/monodoc/*
-diff -Naur dbus-0.61.orig/debian/libdbus-1-dev.install dbus-0.61/debian/libdbus-1-dev.install
---- dbus-0.61.orig/debian/libdbus-1-dev.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-1-dev.install 2005-08-26 21:57:04.000000000 +0200
-@@ -0,0 +1,5 @@
-+debian/tmp/usr/include/dbus*/dbus/dbus*.h
-+debian/tmp/usr/lib/dbus*/include/dbus/dbus*.h
-+debian/tmp/usr/lib/pkgconfig/dbus-1.pc
-+debian/tmp/usr/lib/libdbus-1*.a
-+debian/tmp/usr/lib/libdbus-1*.so
-diff -Naur dbus-0.61.orig/debian/libdbus-glib-1-2.install dbus-0.61/debian/libdbus-glib-1-2.install
---- dbus-0.61.orig/debian/libdbus-glib-1-2.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-glib-1-2.install 2005-12-04 13:16:43.000000000 +0100
-@@ -0,0 +1 @@
-+debian/tmp/usr/lib/libdbus-glib*.so.*
-diff -Naur dbus-0.61.orig/debian/libdbus-glib-1-dev.install dbus-0.61/debian/libdbus-glib-1-dev.install
---- dbus-0.61.orig/debian/libdbus-glib-1-dev.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-glib-1-dev.install 2005-11-02 21:48:10.000000000 +0100
-@@ -0,0 +1,5 @@
-+debian/tmp/usr/bin/dbus-binding-tool
-+debian/tmp/usr/include/dbus*/dbus/dbus-glib.h
-+debian/tmp/usr/lib/pkgconfig/dbus-glib-1.pc
-+debian/tmp/usr/lib/libdbus-glib-*.a
-+debian/tmp/usr/lib/libdbus-glib-*.so
-diff -Naur dbus-0.61.orig/debian/libdbus-qt-1-1c2.install dbus-0.61/debian/libdbus-qt-1-1c2.install
---- dbus-0.61.orig/debian/libdbus-qt-1-1c2.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-qt-1-1c2.install 2005-12-04 16:49:26.000000000 +0100
-@@ -0,0 +1 @@
-+debian/tmp/usr/lib/libdbus-qt-*.so.*
-diff -Naur dbus-0.61.orig/debian/libdbus-qt-1-dev.install dbus-0.61/debian/libdbus-qt-1-dev.install
---- dbus-0.61.orig/debian/libdbus-qt-1-dev.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-qt-1-dev.install 2005-08-26 21:57:04.000000000 +0200
-@@ -0,0 +1,6 @@
-+debian/tmp/usr/include/dbus*/dbus/dbus-qt.h
-+debian/tmp/usr/include/dbus*/dbus/connection.h
-+debian/tmp/usr/include/dbus*/dbus/server.h
-+debian/tmp/usr/include/dbus*/dbus/message.h
-+debian/tmp/usr/lib/libdbus-qt*.a
-+debian/tmp/usr/lib/libdbus-qt*.so
-diff -Naur dbus-0.61.orig/debian/libdbus-qt4-1-1.install dbus-0.61/debian/libdbus-qt4-1-1.install
---- dbus-0.61.orig/debian/libdbus-qt4-1-1.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-qt4-1-1.install 2005-12-04 16:49:26.000000000 +0100
-@@ -0,0 +1 @@
-+debian/tmp/usr/lib/libdbus-qt4*.so.*
-diff -Naur dbus-0.61.orig/debian/libdbus-qt4-1-dev.install dbus-0.61/debian/libdbus-qt4-1-dev.install
---- dbus-0.61.orig/debian/libdbus-qt4-1-dev.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/libdbus-qt4-1-dev.install 2005-12-04 16:49:26.000000000 +0100
-@@ -0,0 +1,7 @@
-+debian/tmp/usr/include/dbus*/dbus/qdbuserror.h
-+debian/tmp/usr/include/dbus*/dbus/qdbusmessage.h
-+debian/tmp/usr/include/dbus*/dbus/qdbusserver.h
-+debian/tmp/usr/include/dbus*/dbus/qdbusconnection.h
-+debian/tmp/usr/include/dbus*/dbus/qdbusvariant.h
-+debian/tmp/usr/lib/libdbus-qt4*.a
-+debian/tmp/usr/lib/libdbus-qt4*.so
-diff -Naur dbus-0.61.orig/debian/monodoc-dbus-1-manual.install dbus-0.61/debian/monodoc-dbus-1-manual.install
---- dbus-0.61.orig/debian/monodoc-dbus-1-manual.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/monodoc-dbus-1-manual.install 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1 @@
-+debian/tmp/usr/lib/monodoc/sources/*
-diff -Naur dbus-0.61.orig/debian/monodoc-dbus-1-manual.postinst dbus-0.61/debian/monodoc-dbus-1-manual.postinst
---- dbus-0.61.orig/debian/monodoc-dbus-1-manual.postinst 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/monodoc-dbus-1-manual.postinst 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1,9 @@
-+#!/bin/sh
-+set -e
-+
-+if [ -x /usr/lib/monodoc/browser.exe ]; then
-+ echo "generating monodoc search index..."
-+ monodoc --make-index > /dev/null
-+fi
-+
-+#DEBHELPER#
-diff -Naur dbus-0.61.orig/debian/patches/dbus-qt-buildfix.patch dbus-0.61/debian/patches/dbus-qt-buildfix.patch
---- dbus-0.61.orig/debian/patches/dbus-qt-buildfix.patch 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/patches/dbus-qt-buildfix.patch 2006-02-27 18:31:04.000000000 +0100
-@@ -0,0 +1,75 @@
-+Index: qt/Makefile.am
-+===================================================================
-+RCS file: /cvs/dbus/dbus/qt/Makefile.am,v
-+retrieving revision 1.14
-+retrieving revision 1.15
-+diff -u -r1.14 -r1.15
-+--- qt/Makefile.am 17 Feb 2006 00:04:38 -0000 1.14
-++++ qt/Makefile.am 25 Feb 2006 19:54:56 -0000 1.15
-+@@ -58,9 +58,9 @@
-+ $(top_srcdir)/qt/qdbusxmlparser_p.h
-+
-+
-+-$(top_srcdir)/qt/qdbusabstractadaptor.lo: qdbusabstractadaptor.moc
-+-$(top_srcdir)/qt/qdbusserver.lo: qdbusserver.moc
-+-$(top_srcdir)/qt/qdbusconnection.lo: qdbusconnection_p.moc
-++qdbusabstractadaptor.lo: qdbusabstractadaptor.moc
-++qdbusserver.lo: qdbusserver.moc
-++qdbusconnection.lo: qdbusconnection_p.moc
-+
-+ CLEANFILES=qdbusabstractadaptor.moc qdbusserver.moc qdbusconnection.moc
-+
-+Index: dbus/Makefile.am
-+===================================================================
-+RCS file: /cvs/dbus/dbus/dbus/Makefile.am,v
-+retrieving revision 1.73
-+retrieving revision 1.74
-+diff -u -r1.73 -r1.74
-+--- dbus/Makefile.am 23 Sep 2005 16:24:36 -0000 1.73
-++++ dbus/Makefile.am 25 Feb 2006 18:34:12 -0000 1.74
-+@@ -37,6 +37,7 @@
-+ dbus-protocol.h \
-+ dbus-server.h \
-+ dbus-shared.h \
-++ dbus-signature.h \
-+ dbus-threads.h \
-+ dbus-types.h \
-+ $(GLIB_INCLUDES) \
-+@@ -84,7 +85,6 @@
-+ dbus-sha.c \
-+ dbus-sha.h \
-+ dbus-signature.c \
-+- dbus-signature.h \
-+ dbus-timeout.c \
-+ dbus-timeout.h \
-+ dbus-threads-internal.h \
-+Index: dbus/dbus-signature.h
-+===================================================================
-+RCS file: /cvs/dbus/dbus/dbus/dbus-signature.h,v
-+retrieving revision 1.3
-+retrieving revision 1.4
-+diff -u -r1.3 -r1.4
-+--- dbus/dbus-signature.h 11 May 2005 18:07:22 -0000 1.3
-++++ dbus/dbus-signature.h 25 Feb 2006 18:34:12 -0000 1.4
-+@@ -71,4 +71,4 @@
-+
-+ DBUS_END_DECLS
-+
-+-#endif /* DBUS_MESSAGE_H */
-++#endif /* DBUS_SIGNATURE_H */
-+Index: dbus/dbus.h
-+===================================================================
-+RCS file: /cvs/dbus/dbus/dbus/dbus.h,v
-+retrieving revision 1.20
-+retrieving revision 1.21
-+diff -u -r1.20 -r1.21
-+--- dbus/dbus.h 21 Jan 2005 05:06:10 -0000 1.20
-++++ dbus/dbus.h 25 Feb 2006 18:34:12 -0000 1.21
-+@@ -41,6 +41,7 @@
-+ #include <dbus/dbus-protocol.h>
-+ #include <dbus/dbus-server.h>
-+ #include <dbus/dbus-shared.h>
-++#include <dbus/dbus-signature.h>
-+ #include <dbus/dbus-threads.h>
-+ #include <dbus/dbus-types.h>
-+
-diff -Naur dbus-0.61.orig/debian/patches/dbus-quiesce-startup-errors.patch dbus-0.61/debian/patches/dbus-quiesce-startup-errors.patch
---- dbus-0.61.orig/debian/patches/dbus-quiesce-startup-errors.patch 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/patches/dbus-quiesce-startup-errors.patch 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1,23 @@
-+--- dbus-0.20-virgin-patches/bus/config-parser.c 2003-10-14 21:30:21.000000000 +0100
-++++ dbus-0.20/bus/config-parser.c 2004-02-10 00:40:05.000000000 +0000
-+@@ -1710,8 +1710,18 @@
-+ {
-+ if (!include_file (parser, &full_path, TRUE, error))
-+ {
-+- _dbus_string_free (&full_path);
-+- goto failed;
-++ /* Debian patch to skip malformed /etc/dbus-1/system.d entries */
-++ /*
-++ * _dbus_string_free (&full_path);
-++ * goto failed;
-++ */
-++ if (dbus_error_is_set (error))
-++ {
-++ _dbus_warn("\nEncountered error '%s' while parsing '%s'\n",
-++ error->message,
-++ _dbus_string_get_const_data(&full_path));
-++ dbus_error_free (error);
-++ }
-+ }
-+ }
-+
-diff -Naur dbus-0.61.orig/debian/patches/dbus-update-automake.patch dbus-0.61/debian/patches/dbus-update-automake.patch
---- dbus-0.61.orig/debian/patches/dbus-update-automake.patch 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/patches/dbus-update-automake.patch 2006-02-27 21:50:19.000000000 +0100
-@@ -0,0 +1,4202 @@
-+diff -Naur dbus-0.61.orig/aclocal.m4 dbus-0.61/aclocal.m4
-+--- dbus-0.61.orig/aclocal.m4 2006-02-27 21:44:03.000000000 +0100
-++++ dbus-0.61/aclocal.m4 2006-02-27 21:44:42.000000000 +0100
-+@@ -412,7 +412,7 @@
-+
-+ # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-+
-+-# serial 48 AC_PROG_LIBTOOL
-++# serial 48 Debian 1.5.22-2 AC_PROG_LIBTOOL
-+
-+
-+ # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-+@@ -1977,27 +1977,10 @@
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+- # find out which ABI we are using
-+- libsuff=
-+- case "$host_cpu" in
-+- x86_64*|s390x*|powerpc64*)
-+- echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-+- if AC_TRY_EVAL(ac_compile); then
-+- case `/usr/bin/file conftest.$ac_objext` in
-+- *64-bit*)
-+- libsuff=64
-+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
-+- ;;
-+- esac
-+- fi
-+- rm -rf conftest*
-+- ;;
-+- esac
-+-
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
-++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+@@ -2009,6 +1992,18 @@
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
-++netbsdelf*-gnu)
-++ version_type=linux
-++ need_lib_prefix=no
-++ need_version=no
-++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-++ soname_spec='${libname}${release}${shared_ext}$major'
-++ shlibpath_var=LD_LIBRARY_PATH
-++ shlibpath_overrides_runpath=no
-++ hardcode_into_libs=yes
-++ dynamic_linker='NetBSD ld.elf_so'
-++ ;;
-++
-+ knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+@@ -2784,7 +2779,7 @@
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+-netbsd*)
-++netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
-+ else
-+@@ -3793,7 +3788,7 @@
-+ ;;
-+ esac
-+ ;;
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-+ wlarc=
-+@@ -5417,7 +5412,7 @@
-+ ;;
-+ esac
-+ ;;
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ ;;
-+ osf3* | osf4* | osf5*)
-+ case $cc_basename in
-+@@ -5769,6 +5764,12 @@
-+ cygwin* | mingw*)
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
-+ ;;
-++ kfreebsd*-gnu)
-++ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-++ ;;
-++ linux*)
-++ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-++ ;;
-+ *)
-+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ ;;
-+@@ -5965,12 +5966,13 @@
-+ $echo "local: *; };" >> $output_objdir/$libname.ver~
-+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-+ fi
-++ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-+ else
-+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
-+ fi
-+ ;;
-+
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-+ wlarc=
-+@@ -6300,11 +6302,20 @@
-+ ;;
-+
-+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-+- freebsd* | kfreebsd*-gnu | dragonfly*)
-++ freebsd* | dragonfly*)
-++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-++ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-++ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-++ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-++ ;;
-++
-++ # GNU/kFreeBSD uses gcc -shared to do shared libraries.
-++ kfreebsd*-gnu)
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-++ _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-+ ;;
-+
-+ hpux9*)
-+@@ -6402,7 +6413,7 @@
-+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-+ ;;
-+
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
-+ else
-+@@ -7143,7 +7154,7 @@
-+ # with or without modifications, as long as this notice is preserved.
-+
-+ AC_DEFUN([AM_PROG_GCJ],[
-+-AC_CHECK_PROGS(GCJ, gcj, gcj)
-++AC_CHECK_PROGS(GCJ, [gcj gcj-3.2 gcj-3.1 gcj-3.0 gcj-2.95], gcj)
-+ test -z "$GCJ" && AC_MSG_ERROR([no acceptable gcj found in \$PATH])
-+ if test "x${GCJFLAGS-unset}" = xunset; then
-+ GCJFLAGS="-g -O2"
-+diff -Naur dbus-0.61.orig/config.guess dbus-0.61/config.guess
-+--- dbus-0.61.orig/config.guess 2006-02-27 21:44:03.000000000 +0100
-++++ dbus-0.61/config.guess 2006-02-25 16:29:12.000000000 +0100
-+@@ -1,9 +1,9 @@
-+ #! /bin/sh
-+ # Attempt to guess a canonical system name.
-+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-+-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-++# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-+
-+-timestamp='2003-06-17'
-++timestamp='2006-02-23'
-+
-+ # This file is free software; you can redistribute it and/or modify it
-+ # under the terms of the GNU General Public License as published by
-+@@ -17,13 +17,15 @@
-+ #
-+ # You should have received a copy of the GNU General Public License
-+ # along with this program; if not, write to the Free Software
-+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-++# 02110-1301, USA.
-+ #
-+ # As a special exception to the GNU General Public License, if you
-+ # distribute this file as part of a program that contains a
-+ # configuration script generated by Autoconf, you may include it under
-+ # the same distribution terms that you use for the rest of that program.
-+
-++
-+ # Originally written by Per Bothner <per at bothner.com>.
-+ # Please send patches to <config-patches at gnu.org>. Submit a context
-+ # diff and a properly formatted ChangeLog entry.
-+@@ -53,7 +55,7 @@
-+ GNU config.guess ($timestamp)
-+
-+ Originally written by Per Bothner.
-+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-+ Free Software Foundation, Inc.
-+
-+ This is free software; see the source for copying conditions. There is NO
-+@@ -66,11 +68,11 @@
-+ while test $# -gt 0 ; do
-+ case $1 in
-+ --time-stamp | --time* | -t )
-+- echo "$timestamp" ; exit 0 ;;
-++ echo "$timestamp" ; exit ;;
-+ --version | -v )
-+- echo "$version" ; exit 0 ;;
-++ echo "$version" ; exit ;;
-+ --help | --h* | -h )
-+- echo "$usage"; exit 0 ;;
-++ echo "$usage"; exit ;;
-+ -- ) # Stop option processing
-+ shift; break ;;
-+ - ) # Use stdin as input.
-+@@ -104,7 +106,7 @@
-+ trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-+ trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-+ : ${TMPDIR=/tmp} ;
-+- { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
-++ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
-+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
-+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
-+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-+@@ -123,7 +125,7 @@
-+ ;;
-+ ,,*) CC_FOR_BUILD=$CC ;;
-+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-+-esac ;'
-++esac ; set_cc_for_build= ;'
-+
-+ # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-+ # (ghazi at noc.rutgers.edu 1994-08-24)
-+@@ -136,13 +138,6 @@
-+ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-+
-+-## for Red Hat Linux
-+-if test -f /etc/redhat-release ; then
-+- VENDOR=redhat ;
-+-else
-+- VENDOR= ;
-+-fi
-+-
-+ # Note: order is significant - the case branches are not exclusive.
-+
-+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-+@@ -203,50 +198,32 @@
-+ # contains redundant information, the shorter form:
-+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-+ echo "${machine}-${os}${release}"
-+- exit 0 ;;
-+- amiga:OpenBSD:*:*)
-+- echo m68k-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- arc:OpenBSD:*:*)
-+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- hp300:OpenBSD:*:*)
-+- echo m68k-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- mac68k:OpenBSD:*:*)
-+- echo m68k-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- macppc:OpenBSD:*:*)
-+- echo powerpc-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- mvme68k:OpenBSD:*:*)
-+- echo m68k-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- mvme88k:OpenBSD:*:*)
-+- echo m88k-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- mvmeppc:OpenBSD:*:*)
-+- echo powerpc-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- pmax:OpenBSD:*:*)
-+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- sgi:OpenBSD:*:*)
-+- echo mipseb-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- sun3:OpenBSD:*:*)
-+- echo m68k-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-+- wgrisc:OpenBSD:*:*)
-+- echo mipsel-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:OpenBSD:*:*)
-+- echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-+- exit 0 ;;
-++ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-++ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-++ exit ;;
-++ *:ekkoBSD:*:*)
-++ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-++ exit ;;
-++ *:SolidBSD:*:*)
-++ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-++ exit ;;
-++ macppc:MirBSD:*:*)
-++ echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-++ exit ;;
-++ *:MirBSD:*:*)
-++ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-++ exit ;;
-+ alpha:OSF1:*:*)
-+- if test $UNAME_RELEASE = "V4.0"; then
-++ case $UNAME_RELEASE in
-++ *4.0)
-+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-+- fi
-++ ;;
-++ *5.*)
-++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-++ ;;
-++ esac
-+ # According to Compaq, /usr/sbin/psrinfo has been available on
-+ # OSF/1 and Tru64 systems produced since 1995. I hope that
-+ # covers most systems running today. This code pipes the CPU
-+@@ -284,42 +261,49 @@
-+ "EV7.9 (21364A)")
-+ UNAME_MACHINE="alphaev79" ;;
-+ esac
-++ # A Pn.n version is a patched version.
-+ # A Vn.n version is a released version.
-+ # A Tn.n version is a released field test version.
-+ # A Xn.n version is an unreleased experimental baselevel.
-+ # 1.2 uses "1.2" for uname -r.
-+- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-+- exit 0 ;;
-+- Alpha*:OpenVMS:*:*)
-+- echo alpha-hp-vms
-+- exit 0 ;;
-++ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-++ exit ;;
-+ Alpha\ *:Windows_NT*:*)
-+ # How do we know it's Interix rather than the generic POSIX subsystem?
-+ # Should we change UNAME_MACHINE based on the output of uname instead
-+ # of the specific Alpha model?
-+ echo alpha-pc-interix
-+- exit 0 ;;
-++ exit ;;
-+ 21064:Windows_NT:50:3)
-+ echo alpha-dec-winnt3.5
-+- exit 0 ;;
-++ exit ;;
-+ Amiga*:UNIX_System_V:4.0:*)
-+ echo m68k-unknown-sysv4
-+- exit 0;;
-++ exit ;;
-+ *:[Aa]miga[Oo][Ss]:*:*)
-+ echo ${UNAME_MACHINE}-unknown-amigaos
-+- exit 0 ;;
-++ exit ;;
-+ *:[Mm]orph[Oo][Ss]:*:*)
-+ echo ${UNAME_MACHINE}-unknown-morphos
-+- exit 0 ;;
-++ exit ;;
-+ *:OS/390:*:*)
-+ echo i370-ibm-openedition
-+- exit 0 ;;
-++ exit ;;
-++ *:z/VM:*:*)
-++ echo s390-ibm-zvmoe
-++ exit ;;
-++ *:OS400:*:*)
-++ echo powerpc-ibm-os400
-++ exit ;;
-+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-+ echo arm-acorn-riscix${UNAME_RELEASE}
-+- exit 0;;
-++ exit ;;
-++ arm:riscos:*:*|arm:RISCOS:*:*)
-++ echo arm-unknown-riscos
-++ exit ;;
-+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-+ echo hppa1.1-hitachi-hiuxmpp
-+- exit 0;;
-++ exit ;;
-+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-+ # akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
-+@@ -327,32 +311,32 @@
-+ else
-+ echo pyramid-pyramid-bsd
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ NILE*:*:*:dcosx)
-+ echo pyramid-pyramid-svr4
-+- exit 0 ;;
-++ exit ;;
-+ DRS?6000:unix:4.0:6*)
-+ echo sparc-icl-nx6
-+- exit 0 ;;
-+- DRS?6000:UNIX_SV:4.2*:7*)
-++ exit ;;
-++ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-+ case `/usr/bin/uname -p` in
-+- sparc) echo sparc-icl-nx7 && exit 0 ;;
-++ sparc) echo sparc-icl-nx7; exit ;;
-+ esac ;;
-+ sun4H:SunOS:5.*:*)
-+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+- exit 0 ;;
-++ exit ;;
-+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+- exit 0 ;;
-++ exit ;;
-+ i86pc:SunOS:5.*:*)
-+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+- exit 0 ;;
-++ exit ;;
-+ sun4*:SunOS:6*:*)
-+ # According to config.sub, this is the proper way to canonicalize
-+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
-+ # it's likely to be more like Solaris than SunOS4.
-+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+- exit 0 ;;
-++ exit ;;
-+ sun4*:SunOS:*:*)
-+ case "`/usr/bin/arch -k`" in
-+ Series*|S4*)
-+@@ -361,10 +345,10 @@
-+ esac
-+ # Japanese Language versions have a version number like `4.1.3-JL'.
-+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-+- exit 0 ;;
-++ exit ;;
-+ sun3*:SunOS:*:*)
-+ echo m68k-sun-sunos${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ sun*:*:4.2BSD:*)
-+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-+@@ -376,10 +360,10 @@
-+ echo sparc-sun-sunos${UNAME_RELEASE}
-+ ;;
-+ esac
-+- exit 0 ;;
-++ exit ;;
-+ aushp:SunOS:*:*)
-+ echo sparc-auspex-sunos${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ # The situation for MiNT is a little confusing. The machine name
-+ # can be virtually everything (everything which is not
-+ # "atarist" or "atariste" at least should have a processor
-+@@ -390,37 +374,40 @@
-+ # be no problem.
-+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-+ echo m68k-atari-mint${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-+ echo m68k-atari-mint${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-+ echo m68k-atari-mint${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-+ echo m68k-milan-mint${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-+ echo m68k-hades-mint${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-+ echo m68k-unknown-mint${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-++ m68k:machten:*:*)
-++ echo m68k-apple-machten${UNAME_RELEASE}
-++ exit ;;
-+ powerpc:machten:*:*)
-+ echo powerpc-apple-machten${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ RISC*:Mach:*:*)
-+ echo mips-dec-mach_bsd4.3
-+- exit 0 ;;
-++ exit ;;
-+ RISC*:ULTRIX:*:*)
-+ echo mips-dec-ultrix${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ VAX*:ULTRIX*:*:*)
-+ echo vax-dec-ultrix${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ 2020:CLIX:*:* | 2430:CLIX:*:*)
-+ echo clipper-intergraph-clix${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ mips:*:*:UMIPS | mips:*:*:RISCos)
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+@@ -444,32 +431,33 @@
-+ exit (-1);
-+ }
-+ EOF
-+- $CC_FOR_BUILD -o $dummy $dummy.c \
-+- && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-+- && exit 0
-++ $CC_FOR_BUILD -o $dummy $dummy.c &&
-++ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-++ SYSTEM_NAME=`$dummy $dummyarg` &&
-++ { echo "$SYSTEM_NAME"; exit; }
-+ echo mips-mips-riscos${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ Motorola:PowerMAX_OS:*:*)
-+ echo powerpc-motorola-powermax
-+- exit 0 ;;
-++ exit ;;
-+ Motorola:*:4.3:PL8-*)
-+ echo powerpc-harris-powermax
-+- exit 0 ;;
-++ exit ;;
-+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-+ echo powerpc-harris-powermax
-+- exit 0 ;;
-++ exit ;;
-+ Night_Hawk:Power_UNIX:*:*)
-+ echo powerpc-harris-powerunix
-+- exit 0 ;;
-++ exit ;;
-+ m88k:CX/UX:7*:*)
-+ echo m88k-harris-cxux7
-+- exit 0 ;;
-++ exit ;;
-+ m88k:*:4*:R4*)
-+ echo m88k-motorola-sysv4
-+- exit 0 ;;
-++ exit ;;
-+ m88k:*:3*:R3*)
-+ echo m88k-motorola-sysv3
-+- exit 0 ;;
-++ exit ;;
-+ AViiON:dgux:*:*)
-+ # DG/UX returns AViiON for all architectures
-+ UNAME_PROCESSOR=`/usr/bin/uname -p`
-+@@ -485,29 +473,29 @@
-+ else
-+ echo i586-dg-dgux${UNAME_RELEASE}
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
-+ echo m88k-dolphin-sysv3
-+- exit 0 ;;
-++ exit ;;
-+ M88*:*:R3*:*)
-+ # Delta 88k system running SVR3
-+ echo m88k-motorola-sysv3
-+- exit 0 ;;
-++ exit ;;
-+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-+ echo m88k-tektronix-sysv3
-+- exit 0 ;;
-++ exit ;;
-+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-+ echo m68k-tektronix-bsd
-+- exit 0 ;;
-++ exit ;;
-+ *:IRIX*:*:*)
-+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-+- exit 0 ;;
-++ exit ;;
-+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-+- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
-+- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-++ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
-++ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
-+ i*86:AIX:*:*)
-+ echo i386-ibm-aix
-+- exit 0 ;;
-++ exit ;;
-+ ia64:AIX:*:*)
-+ if [ -x /usr/bin/oslevel ] ; then
-+ IBM_REV=`/usr/bin/oslevel`
-+@@ -515,7 +503,7 @@
-+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-+ fi
-+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-+- exit 0 ;;
-++ exit ;;
-+ *:AIX:2:3)
-+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-+ eval $set_cc_for_build
-+@@ -530,14 +518,18 @@
-+ exit(0);
-+ }
-+ EOF
-+- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-+- echo rs6000-ibm-aix3.2.5
-++ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-++ then
-++ echo "$SYSTEM_NAME"
-++ else
-++ echo rs6000-ibm-aix3.2.5
-++ fi
-+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-+ echo rs6000-ibm-aix3.2.4
-+ else
-+ echo rs6000-ibm-aix3.2
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ *:AIX:*:[45])
-+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-+@@ -551,28 +543,28 @@
-+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-+ fi
-+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-+- exit 0 ;;
-++ exit ;;
-+ *:AIX:*:*)
-+ echo rs6000-ibm-aix
-+- exit 0 ;;
-++ exit ;;
-+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-+ echo romp-ibm-bsd4.4
-+- exit 0 ;;
-++ exit ;;
-+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
-+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
-+- exit 0 ;; # report: romp-ibm BSD 4.3
-++ exit ;; # report: romp-ibm BSD 4.3
-+ *:BOSX:*:*)
-+ echo rs6000-bull-bosx
-+- exit 0 ;;
-++ exit ;;
-+ DPX/2?00:B.O.S.:*:*)
-+ echo m68k-bull-sysv3
-+- exit 0 ;;
-++ exit ;;
-+ 9000/[34]??:4.3bsd:1.*:*)
-+ echo m68k-hp-bsd
-+- exit 0 ;;
-++ exit ;;
-+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-+ echo m68k-hp-bsd4.4
-+- exit 0 ;;
-++ exit ;;
-+ 9000/[34678]??:HP-UX:*:*)
-+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-+ case "${UNAME_MACHINE}" in
-+@@ -634,9 +626,19 @@
-+ esac
-+ if [ ${HP_ARCH} = "hppa2.0w" ]
-+ then
-+- # avoid double evaluation of $set_cc_for_build
-+- test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-+- if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
-++ eval $set_cc_for_build
-++
-++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-++ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
-++ # generating 64-bit code. GNU and HP use different nomenclature:
-++ #
-++ # $ CC_FOR_BUILD=cc ./config.guess
-++ # => hppa2.0w-hp-hpux11.23
-++ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-++ # => hppa64-hp-hpux11.23
-++
-++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-++ grep __LP64__ >/dev/null
-+ then
-+ HP_ARCH="hppa2.0w"
-+ else
-+@@ -644,11 +646,11 @@
-+ fi
-+ fi
-+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-+- exit 0 ;;
-++ exit ;;
-+ ia64:HP-UX:*:*)
-+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-+ echo ia64-hp-hpux${HPUX_REV}
-+- exit 0 ;;
-++ exit ;;
-+ 3050*:HI-UX:*:*)
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+@@ -676,150 +678,177 @@
-+ exit (0);
-+ }
-+ EOF
-+- $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-++ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-++ { echo "$SYSTEM_NAME"; exit; }
-+ echo unknown-hitachi-hiuxwe2
-+- exit 0 ;;
-++ exit ;;
-+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-+ echo hppa1.1-hp-bsd
-+- exit 0 ;;
-++ exit ;;
-+ 9000/8??:4.3bsd:*:*)
-+ echo hppa1.0-hp-bsd
-+- exit 0 ;;
-++ exit ;;
-+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-+ echo hppa1.0-hp-mpeix
-+- exit 0 ;;
-++ exit ;;
-+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-+ echo hppa1.1-hp-osf
-+- exit 0 ;;
-++ exit ;;
-+ hp8??:OSF1:*:*)
-+ echo hppa1.0-hp-osf
-+- exit 0 ;;
-++ exit ;;
-+ i*86:OSF1:*:*)
-+ if [ -x /usr/sbin/sysversion ] ; then
-+ echo ${UNAME_MACHINE}-unknown-osf1mk
-+ else
-+ echo ${UNAME_MACHINE}-unknown-osf1
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ parisc*:Lites*:*:*)
-+ echo hppa1.1-hp-lites
-+- exit 0 ;;
-++ exit ;;
-+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-+ echo c1-convex-bsd
-+- exit 0 ;;
-++ exit ;;
-+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-+ if getsysinfo -f scalar_acc
-+ then echo c32-convex-bsd
-+ else echo c2-convex-bsd
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-+ echo c34-convex-bsd
-+- exit 0 ;;
-++ exit ;;
-+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-+ echo c38-convex-bsd
-+- exit 0 ;;
-++ exit ;;
-+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-+ echo c4-convex-bsd
-+- exit 0 ;;
-++ exit ;;
-+ CRAY*Y-MP:*:*:*)
-+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-+- exit 0 ;;
-++ exit ;;
-+ CRAY*[A-Z]90:*:*:*)
-+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-+ -e 's/\.[^.]*$/.X/'
-+- exit 0 ;;
-++ exit ;;
-+ CRAY*TS:*:*:*)
-+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-+- exit 0 ;;
-++ exit ;;
-+ CRAY*T3E:*:*:*)
-+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-+- exit 0 ;;
-++ exit ;;
-+ CRAY*SV1:*:*:*)
-+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-+- exit 0 ;;
-++ exit ;;
-+ *:UNICOS/mp:*:*)
-+- echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-+- exit 0 ;;
-++ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-++ exit ;;
-+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-+- exit 0 ;;
-++ exit ;;
-++ 5000:UNIX_System_V:4.*:*)
-++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-++ exit ;;
-+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ sparc*:BSD/OS:*:*)
-+ echo sparc-unknown-bsdi${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:BSD/OS:*:*)
-+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-+- exit 0 ;;
-+- *:FreeBSD:*:*|*:GNU/FreeBSD:*:*)
-+- # Determine whether the default compiler uses glibc.
-+- eval $set_cc_for_build
-+- sed 's/^ //' << EOF >$dummy.c
-+- #include <features.h>
-+- #if __GLIBC__ >= 2
-+- LIBC=gnu
-+- #else
-+- LIBC=
-+- #endif
-+-EOF
-+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-+- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
-+- exit 0 ;;
-++ exit ;;
-++ *:FreeBSD:*:*)
-++ case ${UNAME_MACHINE} in
-++ pc98)
-++ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-++ *)
-++ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-++ esac
-++ exit ;;
-+ i*:CYGWIN*:*)
-+ echo ${UNAME_MACHINE}-pc-cygwin
-+- exit 0 ;;
-++ exit ;;
-+ i*:MINGW*:*)
-+ echo ${UNAME_MACHINE}-pc-mingw32
-+- exit 0 ;;
-++ exit ;;
-++ i*:MSYS_NT-*:*:*)
-++ echo ${UNAME_MACHINE}-pc-mingw32
-++ exit ;;
-++ i*:windows32*:*)
-++ # uname -m includes "-pc" on this system.
-++ echo ${UNAME_MACHINE}-mingw32
-++ exit ;;
-+ i*:PW*:*)
-+ echo ${UNAME_MACHINE}-pc-pw32
-+- exit 0 ;;
-+- x86:Interix*:[34]*)
-+- echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-+- exit 0 ;;
-++ exit ;;
-++ x86:Interix*:[345]*)
-++ echo i586-pc-interix${UNAME_RELEASE}
-++ exit ;;
-++ EM64T:Interix*:[345]*)
-++ echo x86_64-unknown-interix${UNAME_RELEASE}
-++ exit ;;
-+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-+ echo i${UNAME_MACHINE}-pc-mks
-+- exit 0 ;;
-++ exit ;;
-+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-+ # How do we know it's Interix rather than the generic POSIX subsystem?
-+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-+ # UNAME_MACHINE based on the output of uname instead of i386?
-+ echo i586-pc-interix
-+- exit 0 ;;
-++ exit ;;
-+ i*:UWIN*:*)
-+ echo ${UNAME_MACHINE}-pc-uwin
-+- exit 0 ;;
-++ exit ;;
-++ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-++ echo x86_64-unknown-cygwin
-++ exit ;;
-+ p*:CYGWIN*:*)
-+ echo powerpcle-unknown-cygwin
-+- exit 0 ;;
-++ exit ;;
-+ prep*:SunOS:5.*:*)
-+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-+- exit 0 ;;
-++ exit ;;
-+ *:GNU:*:*)
-++ # the GNU system
-+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-+- exit 0 ;;
-++ exit ;;
-++ *:GNU/*:*:*)
-++ # other systems with GNU libc and userland
-++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-++ exit ;;
-+ i*86:Minix:*:*)
-+ echo ${UNAME_MACHINE}-pc-minix
-+- exit 0 ;;
-++ exit ;;
-+ arm*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+- exit 0 ;;
-++ exit ;;
-+ cris:Linux:*:*)
-+ echo cris-axis-linux-gnu
-+- exit 0 ;;
-++ exit ;;
-++ crisv32:Linux:*:*)
-++ echo crisv32-axis-linux-gnu
-++ exit ;;
-++ frv:Linux:*:*)
-++ echo frv-unknown-linux-gnu
-++ exit ;;
-+ ia64:Linux:*:*)
-+- echo ${UNAME_MACHINE}-${VENDOR:-unknown}-linux-gnu
-+- exit 0 ;;
-++ echo ${UNAME_MACHINE}-unknown-linux-gnu
-++ exit ;;
-++ m32r*:Linux:*:*)
-++ echo ${UNAME_MACHINE}-unknown-linux-gnu
-++ exit ;;
-+ m68*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+- exit 0 ;;
-++ exit ;;
-+ mips:Linux:*:*)
-+ eval $set_cc_for_build
-+ sed 's/^ //' << EOF >$dummy.c
-+@@ -836,8 +865,12 @@
-+ #endif
-+ #endif
-+ EOF
-+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-+- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-++ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-++ /^CPU/{
-++ s: ::g
-++ p
-++ }'`"
-++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-+ ;;
-+ mips64:Linux:*:*)
-+ eval $set_cc_for_build
-+@@ -855,15 +888,22 @@
-+ #endif
-+ #endif
-+ EOF
-+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-+- test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
-++ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-++ /^CPU/{
-++ s: ::g
-++ p
-++ }'`"
-++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-+ ;;
-++ or32:Linux:*:*)
-++ echo or32-unknown-linux-gnu
-++ exit ;;
-+ ppc:Linux:*:*)
-+- echo powerpc-${VENDOR:-unknown}-linux-gnu
-+- exit 0 ;;
-++ echo powerpc-unknown-linux-gnu
-++ exit ;;
-+ ppc64:Linux:*:*)
-+- echo powerpc64-${VENDOR:-unknown}-linux-gnu
-+- exit 0 ;;
-++ echo powerpc64-unknown-linux-gnu
-++ exit ;;
-+ alpha:Linux:*:*)
-+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-+ EV5) UNAME_MACHINE=alphaev5 ;;
-+@@ -877,7 +917,7 @@
-+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-+- exit 0 ;;
-++ exit ;;
-+ parisc:Linux:*:* | hppa:Linux:*:*)
-+ # Look for CPU level
-+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-+@@ -885,25 +925,28 @@
-+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
-+ *) echo hppa-unknown-linux-gnu ;;
-+ esac
-+- exit 0 ;;
-++ exit ;;
-+ parisc64:Linux:*:* | hppa64:Linux:*:*)
-+ echo hppa64-unknown-linux-gnu
-+- exit 0 ;;
-++ exit ;;
-+ s390:Linux:*:* | s390x:Linux:*:*)
-+- echo ${UNAME_MACHINE}-${VENDOR:-ibm}-linux-gnu
-+- exit 0 ;;
-++ echo ${UNAME_MACHINE}-ibm-linux
-++ exit ;;
-+ sh64*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+- exit 0 ;;
-++ exit ;;
-+ sh*:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+- exit 0 ;;
-++ exit ;;
-+ sparc:Linux:*:* | sparc64:Linux:*:*)
-+ echo ${UNAME_MACHINE}-unknown-linux-gnu
-+- exit 0 ;;
-++ exit ;;
-++ vax:Linux:*:*)
-++ echo ${UNAME_MACHINE}-dec-linux-gnu
-++ exit ;;
-+ x86_64:Linux:*:*)
-+- echo x86_64-${VENDOR:-unknown}-linux-gnu
-+- exit 0 ;;
-++ echo x86_64-unknown-linux-gnu
-++ exit ;;
-+ i*86:Linux:*:*)
-+ # The BFD linker knows what the default object file format is, so
-+ # first see if it will tell us. cd to the root directory to prevent
-+@@ -921,15 +964,15 @@
-+ ;;
-+ a.out-i386-linux)
-+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-+- exit 0 ;;
-++ exit ;;
-+ coff-i386)
-+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-+- exit 0 ;;
-++ exit ;;
-+ "")
-+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
-+ # one that does not give us useful --help.
-+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-+- exit 0 ;;
-++ exit ;;
-+ esac
-+ # Determine whether the default compiler is a.out or elf
-+ eval $set_cc_for_build
-+@@ -946,23 +989,33 @@
-+ LIBC=gnulibc1
-+ # endif
-+ #else
-+- #ifdef __INTEL_COMPILER
-++ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun)
-+ LIBC=gnu
-+ #else
-+ LIBC=gnuaout
-+ #endif
-+ #endif
-++ #ifdef __dietlibc__
-++ LIBC=dietlibc
-++ #endif
-+ EOF
-+- eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-+- test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR:-pc}-linux-${LIBC}" && exit 0
-+- test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
-++ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-++ /^LIBC/{
-++ s: ::g
-++ p
-++ }'`"
-++ test x"${LIBC}" != x && {
-++ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-++ exit
-++ }
-++ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
-+ ;;
-+ i*86:DYNIX/ptx:4*:*)
-+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-+ # earlier versions are messed up and put the nodename in both
-+ # sysname and nodename.
-+ echo i386-sequent-sysv4
-+- exit 0 ;;
-++ exit ;;
-+ i*86:UNIX_SV:4.2MP:2.*)
-+ # Unixware is an offshoot of SVR4, but it has its own version
-+ # number series starting with 2...
-+@@ -970,24 +1023,27 @@
-+ # I just have to hope. -- rms.
-+ # Use sysv4.2uw... so that sysv4* matches it.
-+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-+- exit 0 ;;
-++ exit ;;
-+ i*86:OS/2:*:*)
-+ # If we were able to find `uname', then EMX Unix compatibility
-+ # is probably installed.
-+ echo ${UNAME_MACHINE}-pc-os2-emx
-+- exit 0 ;;
-++ exit ;;
-+ i*86:XTS-300:*:STOP)
-+ echo ${UNAME_MACHINE}-unknown-stop
-+- exit 0 ;;
-++ exit ;;
-+ i*86:atheos:*:*)
-+ echo ${UNAME_MACHINE}-unknown-atheos
-+- exit 0 ;;
-++ exit ;;
-++ i*86:syllable:*:*)
-++ echo ${UNAME_MACHINE}-pc-syllable
-++ exit ;;
-+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
-+ echo i386-unknown-lynxos${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ i*86:*DOS:*:*)
-+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
-+- exit 0 ;;
-++ exit ;;
-+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-+@@ -995,15 +1051,16 @@
-+ else
-+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-+ fi
-+- exit 0 ;;
-+- i*86:*:5:[78]*)
-++ exit ;;
-++ i*86:*:5:[678]*)
-++ # UnixWare 7.x, OpenUNIX and OpenServer 6.
-+ case `/bin/uname -X | grep "^Machine"` in
-+ *486*) UNAME_MACHINE=i486 ;;
-+ *Pentium) UNAME_MACHINE=i586 ;;
-+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-+ esac
-+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-+- exit 0 ;;
-++ exit ;;
-+ i*86:*:3.2:*)
-+ if test -f /usr/options/cb.name; then
-+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-+@@ -1021,73 +1078,73 @@
-+ else
-+ echo ${UNAME_MACHINE}-pc-sysv32
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ pc:*:*:*)
-+ # Left here for compatibility:
-+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
-+ # the processor, so we play safe by assuming i386.
-+ echo i386-pc-msdosdjgpp
-+- exit 0 ;;
-++ exit ;;
-+ Intel:Mach:3*:*)
-+ echo i386-pc-mach3
-+- exit 0 ;;
-++ exit ;;
-+ paragon:*:*:*)
-+ echo i860-intel-osf1
-+- exit 0 ;;
-++ exit ;;
-+ i860:*:4.*:*) # i860-SVR4
-+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-+ else # Add other i860-SVR4 vendors below as they are discovered.
-+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ mini*:CTIX:SYS*5:*)
-+ # "miniframe"
-+ echo m68010-convergent-sysv
-+- exit 0 ;;
-++ exit ;;
-+ mc68k:UNIX:SYSTEM5:3.51m)
-+ echo m68k-convergent-sysv
-+- exit 0 ;;
-++ exit ;;
-+ M680?0:D-NIX:5.3:*)
-+ echo m68k-diab-dnix
-+- exit 0 ;;
-+- M68*:*:R3V[567]*:*)
-+- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-+- 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
-++ exit ;;
-++ M68*:*:R3V[5678]*:*)
-++ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-++ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-+ OS_REL=''
-+ test -r /etc/.relid \
-+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-+- && echo i486-ncr-sysv4.3${OS_REL} && exit 0
-++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-+- && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
-++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-+- && echo i486-ncr-sysv4 && exit 0 ;;
-++ && { echo i486-ncr-sysv4; exit; } ;;
-+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-+ echo m68k-unknown-lynxos${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ mc68030:UNIX_System_V:4.*:*)
-+ echo m68k-atari-sysv4
-+- exit 0 ;;
-++ exit ;;
-+ TSUNAMI:LynxOS:2.*:*)
-+ echo sparc-unknown-lynxos${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ rs6000:LynxOS:2.*:*)
-+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
-+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ SM[BE]S:UNIX_SV:*:*)
-+ echo mips-dde-sysv${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ RM*:ReliantUNIX-*:*:*)
-+ echo mips-sni-sysv4
-+- exit 0 ;;
-++ exit ;;
-+ RM*:SINIX-*:*:*)
-+ echo mips-sni-sysv4
-+- exit 0 ;;
-++ exit ;;
-+ *:SINIX-*:*:*)
-+ if uname -p 2>/dev/null >/dev/null ; then
-+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
-+@@ -1095,68 +1152,72 @@
-+ else
-+ echo ns32k-sni-sysv
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-+ # says <Richard.M.Bartel at ccMail.Census.GOV>
-+ echo i586-unisys-sysv4
-+- exit 0 ;;
-++ exit ;;
-+ *:UNIX_System_V:4*:FTX*)
-+ # From Gerald Hewes <hewes at openmarket.com>.
-+ # How about differentiating between stratus architectures? -djm
-+ echo hppa1.1-stratus-sysv4
-+- exit 0 ;;
-++ exit ;;
-+ *:*:*:FTX*)
-+ # From seanf at swdc.stratus.com.
-+ echo i860-stratus-sysv4
-+- exit 0 ;;
-++ exit ;;
-++ i*86:VOS:*:*)
-++ # From Paul.Green at stratus.com.
-++ echo ${UNAME_MACHINE}-stratus-vos
-++ exit ;;
-+ *:VOS:*:*)
-+ # From Paul.Green at stratus.com.
-+ echo hppa1.1-stratus-vos
-+- exit 0 ;;
-++ exit ;;
-+ mc68*:A/UX:*:*)
-+ echo m68k-apple-aux${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ news*:NEWS-OS:6*:*)
-+ echo mips-sony-newsos6
-+- exit 0 ;;
-++ exit ;;
-+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-+ if [ -d /usr/nec ]; then
-+ echo mips-nec-sysv${UNAME_RELEASE}
-+ else
-+ echo mips-unknown-sysv${UNAME_RELEASE}
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
-+ echo powerpc-be-beos
-+- exit 0 ;;
-++ exit ;;
-+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
-+ echo powerpc-apple-beos
-+- exit 0 ;;
-++ exit ;;
-+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
-+ echo i586-pc-beos
-+- exit 0 ;;
-++ exit ;;
-+ SX-4:SUPER-UX:*:*)
-+ echo sx4-nec-superux${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ SX-5:SUPER-UX:*:*)
-+ echo sx5-nec-superux${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ SX-6:SUPER-UX:*:*)
-+ echo sx6-nec-superux${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ Power*:Rhapsody:*:*)
-+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:Rhapsody:*:*)
-+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:Darwin:*:*)
-+- case `uname -p` in
-+- *86) UNAME_PROCESSOR=i686 ;;
-+- powerpc) UNAME_PROCESSOR=powerpc ;;
-++ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-++ case $UNAME_PROCESSOR in
-++ unknown) UNAME_PROCESSOR=powerpc ;;
-+ esac
-+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
-+ UNAME_PROCESSOR=`uname -p`
-+ if test "$UNAME_PROCESSOR" = "x86"; then
-+@@ -1164,22 +1225,25 @@
-+ UNAME_MACHINE=pc
-+ fi
-+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:QNX:*:4*)
-+ echo i386-pc-qnx
-+- exit 0 ;;
-+- NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
-++ exit ;;
-++ NSE-?:NONSTOP_KERNEL:*:*)
-++ echo nse-tandem-nsk${UNAME_RELEASE}
-++ exit ;;
-++ NSR-?:NONSTOP_KERNEL:*:*)
-+ echo nsr-tandem-nsk${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:NonStop-UX:*:*)
-+ echo mips-compaq-nonstopux
-+- exit 0 ;;
-++ exit ;;
-+ BS2000:POSIX*:*:*)
-+ echo bs2000-siemens-sysv
-+- exit 0 ;;
-++ exit ;;
-+ DS/*:UNIX_System_V:*:*)
-+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-+ *:Plan9:*:*)
-+ # "uname -m" is not consistent, so use $cputype instead. 386
-+ # is converted to i386 for consistency with other x86
-+@@ -1190,28 +1254,47 @@
-+ UNAME_MACHINE="$cputype"
-+ fi
-+ echo ${UNAME_MACHINE}-unknown-plan9
-+- exit 0 ;;
-++ exit ;;
-+ *:TOPS-10:*:*)
-+ echo pdp10-unknown-tops10
-+- exit 0 ;;
-++ exit ;;
-+ *:TENEX:*:*)
-+ echo pdp10-unknown-tenex
-+- exit 0 ;;
-++ exit ;;
-+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-+ echo pdp10-dec-tops20
-+- exit 0 ;;
-++ exit ;;
-+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-+ echo pdp10-xkl-tops20
-+- exit 0 ;;
-++ exit ;;
-+ *:TOPS-20:*:*)
-+ echo pdp10-unknown-tops20
-+- exit 0 ;;
-++ exit ;;
-+ *:ITS:*:*)
-+ echo pdp10-unknown-its
-+- exit 0 ;;
-++ exit ;;
-+ SEI:*:*:SEIUX)
-+ echo mips-sei-seiux${UNAME_RELEASE}
-+- exit 0 ;;
-++ exit ;;
-++ *:DragonFly:*:*)
-++ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-++ exit ;;
-++ *:*VMS:*:*)
-++ UNAME_MACHINE=`(uname -p) 2>/dev/null`
-++ case "${UNAME_MACHINE}" in
-++ A*) echo alpha-dec-vms ; exit ;;
-++ I*) echo ia64-dec-vms ; exit ;;
-++ V*) echo vax-dec-vms ; exit ;;
-++ esac ;;
-++ *:XENIX:*:SysV)
-++ echo i386-pc-xenix
-++ exit ;;
-++ i*86:skyos:*:*)
-++ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-++ exit ;;
-++ i*86:rdos:*:*)
-++ echo ${UNAME_MACHINE}-pc-rdos
-++ exit ;;
-+ esac
-+
-+ #echo '(No uname command or uname output not recognized.)' 1>&2
-+@@ -1243,7 +1326,7 @@
-+ #endif
-+
-+ #if defined (__arm) && defined (__acorn) && defined (__unix)
-+- printf ("arm-acorn-riscix"); exit (0);
-++ printf ("arm-acorn-riscix\n"); exit (0);
-+ #endif
-+
-+ #if defined (hp300) && !defined (hpux)
-+@@ -1332,11 +1415,12 @@
-+ }
-+ EOF
-+
-+-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
-++$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-++ { echo "$SYSTEM_NAME"; exit; }
-+
-+ # Apollos put the system type in the environment.
-+
-+-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-++test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-+
-+ # Convex versions that predate uname can use getsysinfo(1)
-+
-+@@ -1345,22 +1429,22 @@
-+ case `getsysinfo -f cpu_type` in
-+ c1*)
-+ echo c1-convex-bsd
-+- exit 0 ;;
-++ exit ;;
-+ c2*)
-+ if getsysinfo -f scalar_acc
-+ then echo c32-convex-bsd
-+ else echo c2-convex-bsd
-+ fi
-+- exit 0 ;;
-++ exit ;;
-+ c34*)
-+ echo c34-convex-bsd
-+- exit 0 ;;
-++ exit ;;
-+ c38*)
-+ echo c38-convex-bsd
-+- exit 0 ;;
-++ exit ;;
-+ c4*)
-+ echo c4-convex-bsd
-+- exit 0 ;;
-++ exit ;;
-+ esac
-+ fi
-+
-+@@ -1371,7 +1455,9 @@
-+ the operating system you are using. It is advised that you
-+ download the most up to date version of the config scripts from
-+
-+- ftp://ftp.gnu.org/pub/gnu/config/
-++ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
-++and
-++ http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
-+
-+ If the version you run ($0) is already up to date, please
-+ send the following data and any information you think might be
-+diff -Naur dbus-0.61.orig/config.sub dbus-0.61/config.sub
-+--- dbus-0.61.orig/config.sub 2006-02-27 21:44:03.000000000 +0100
-++++ dbus-0.61/config.sub 2006-02-25 16:29:12.000000000 +0100
-+@@ -1,9 +1,9 @@
-+ #! /bin/sh
-+ # Configuration validation subroutine script.
-+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-+-# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
-++# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
-+
-+-timestamp='2003-06-18'
-++timestamp='2006-02-23'
-+
-+ # This file is (in principle) common to ALL GNU software.
-+ # The presence of a machine in this file suggests that SOME GNU software
-+@@ -21,14 +21,15 @@
-+ #
-+ # You should have received a copy of the GNU General Public License
-+ # along with this program; if not, write to the Free Software
-+-# Foundation, Inc., 59 Temple Place - Suite 330,
-+-# Boston, MA 02111-1307, USA.
-+-
-++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-++# 02110-1301, USA.
-++#
-+ # As a special exception to the GNU General Public License, if you
-+ # distribute this file as part of a program that contains a
-+ # configuration script generated by Autoconf, you may include it under
-+ # the same distribution terms that you use for the rest of that program.
-+
-++
-+ # Please send patches to <config-patches at gnu.org>. Submit a context
-+ # diff and a properly formatted ChangeLog entry.
-+ #
-+@@ -70,7 +71,7 @@
-+ version="\
-+ GNU config.sub ($timestamp)
-+
-+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
-++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-+ Free Software Foundation, Inc.
-+
-+ This is free software; see the source for copying conditions. There is NO
-+@@ -83,11 +84,11 @@
-+ while test $# -gt 0 ; do
-+ case $1 in
-+ --time-stamp | --time* | -t )
-+- echo "$timestamp" ; exit 0 ;;
-++ echo "$timestamp" ; exit ;;
-+ --version | -v )
-+- echo "$version" ; exit 0 ;;
-++ echo "$version" ; exit ;;
-+ --help | --h* | -h )
-+- echo "$usage"; exit 0 ;;
-++ echo "$usage"; exit ;;
-+ -- ) # Stop option processing
-+ shift; break ;;
-+ - ) # Use stdin as input.
-+@@ -99,7 +100,7 @@
-+ *local*)
-+ # First pass through any local machine types.
-+ echo $1
-+- exit 0;;
-++ exit ;;
-+
-+ * )
-+ break ;;
-+@@ -118,7 +119,9 @@
-+ # Here we must recognize all the valid KERNEL-OS combinations.
-+ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-+ case $maybe_os in
-+- nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
-++ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-++ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
-++ storm-chaos* | os2-emx* | rtmk-nova*)
-+ os=-$maybe_os
-+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-+ ;;
-+@@ -144,7 +147,7 @@
-+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-+- -apple | -axis)
-++ -apple | -axis | -knuth | -cray)
-+ os=
-+ basic_machine=$1
-+ ;;
-+@@ -169,6 +172,10 @@
-+ -hiux*)
-+ os=-hiuxwe2
-+ ;;
-++ -sco6)
-++ os=-sco5v6
-++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-++ ;;
-+ -sco5)
-+ os=-sco3.2v5
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+@@ -185,6 +192,10 @@
-+ # Don't forget version if it is 3.2v4 or newer.
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+ ;;
-++ -sco5v6*)
-++ # Don't forget version if it is 3.2v4 or newer.
-++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-++ ;;
-+ -sco*)
-+ os=-sco3.2v2
-+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-+@@ -228,14 +239,16 @@
-+ | a29k \
-+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-++ | am33_2.0 \
-+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
-++ | bfin \
-+ | c4x | clipper \
-+ | d10v | d30v | dlx | dsp16xx \
-+ | fr30 | frv \
-+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-+ | i370 | i860 | i960 | ia64 \
-+- | ip2k \
-+- | m32r | m68000 | m68k | m88k | mcore \
-++ | ip2k | iq2000 \
-++ | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \
-+ | mips | mipsbe | mipseb | mipsel | mipsle \
-+ | mips16 \
-+ | mips64 | mips64el \
-+@@ -244,31 +257,38 @@
-+ | mips64vr4100 | mips64vr4100el \
-+ | mips64vr4300 | mips64vr4300el \
-+ | mips64vr5000 | mips64vr5000el \
-++ | mips64vr5900 | mips64vr5900el \
-+ | mipsisa32 | mipsisa32el \
-+ | mipsisa32r2 | mipsisa32r2el \
-+ | mipsisa64 | mipsisa64el \
-++ | mipsisa64r2 | mipsisa64r2el \
-+ | mipsisa64sb1 | mipsisa64sb1el \
-+ | mipsisa64sr71k | mipsisa64sr71kel \
-+ | mipstx39 | mipstx39el \
-+ | mn10200 | mn10300 \
-++ | mt \
-+ | msp430 \
-++ | nios | nios2 \
-+ | ns16k | ns32k \
-+- | openrisc | or32 \
-++ | or32 \
-+ | pdp10 | pdp11 | pj | pjl \
-+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-+ | pyramid \
-+- | s390 | s390x \
-+- | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-++ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
-+ | sh64 | sh64le \
-+- | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
-++ | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
-++ | sparcv8 | sparcv9 | sparcv9b \
-+ | strongarm \
-+ | tahoe | thumb | tic4x | tic80 | tron \
-+ | v850 | v850e \
-+ | we32k \
-+- | x86 | xscale | xstormy16 | xtensa \
-++ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
-+ | z8k)
-+ basic_machine=$basic_machine-unknown
-+ ;;
-++ m32c)
-++ basic_machine=$basic_machine-unknown
-++ ;;
-+ m6811 | m68hc11 | m6812 | m68hc12)
-+ # Motorola 68HC11/12.
-+ basic_machine=$basic_machine-unknown
-+@@ -276,6 +296,9 @@
-+ ;;
-+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-+ ;;
-++ ms1)
-++ basic_machine=mt-unknown
-++ ;;
-+
-+ # We use `pc' rather than `unknown'
-+ # because (1) that's what they normally are, and
-+@@ -296,19 +319,19 @@
-+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
-+ | avr-* \
-+- | bs2000-* \
-++ | bfin-* | bs2000-* \
-+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-+- | clipper-* | cydra-* \
-++ | clipper-* | craynv-* | cydra-* \
-+ | d10v-* | d30v-* | dlx-* \
-+ | elxsi-* \
-+ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
-+ | h8300-* | h8500-* \
-+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-+ | i*86-* | i860-* | i960-* | ia64-* \
-+- | ip2k-* \
-+- | m32r-* \
-++ | ip2k-* | iq2000-* \
-++ | m32r-* | m32rle-* \
-+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-+- | m88110-* | m88k-* | mcore-* \
-++ | m88110-* | m88k-* | maxq-* | mcore-* \
-+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-+ | mips16-* \
-+ | mips64-* | mips64el-* \
-+@@ -317,34 +340,41 @@
-+ | mips64vr4100-* | mips64vr4100el-* \
-+ | mips64vr4300-* | mips64vr4300el-* \
-+ | mips64vr5000-* | mips64vr5000el-* \
-++ | mips64vr5900-* | mips64vr5900el-* \
-+ | mipsisa32-* | mipsisa32el-* \
-+ | mipsisa32r2-* | mipsisa32r2el-* \
-+ | mipsisa64-* | mipsisa64el-* \
-++ | mipsisa64r2-* | mipsisa64r2el-* \
-+ | mipsisa64sb1-* | mipsisa64sb1el-* \
-+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-+ | mipstx39-* | mipstx39el-* \
-++ | mmix-* \
-++ | mt-* \
-+ | msp430-* \
-+- | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
-++ | nios-* | nios2-* \
-++ | none-* | np1-* | ns16k-* | ns32k-* \
-+ | orion-* \
-+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-+ | pyramid-* \
-+ | romp-* | rs6000-* \
-+- | s390-* | s390x-* \
-+- | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
-++ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \
-+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-+- | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
-++ | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
-++ | sparclite-* \
-+ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
-+ | tahoe-* | thumb-* \
-+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-+ | tron-* \
-+ | v850-* | v850e-* | vax-* \
-+ | we32k-* \
-+- | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
-+- | xtensa-* \
-++ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
-++ | xstormy16-* | xtensa-* \
-+ | ymp-* \
-+ | z8k-*)
-+ ;;
-++ m32c-*)
-++ ;;
-+ # Recognize the various machine names and aliases which stand
-+ # for a CPU type and a company and sometimes even an OS.
-+ 386bsd)
-+@@ -361,6 +391,9 @@
-+ basic_machine=a29k-amd
-+ os=-udi
-+ ;;
-++ abacus)
-++ basic_machine=abacus-unknown
-++ ;;
-+ adobe68k)
-+ basic_machine=m68010-adobe
-+ os=-scout
-+@@ -378,6 +411,9 @@
-+ amd64)
-+ basic_machine=x86_64-pc
-+ ;;
-++ amd64-*)
-++ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-++ ;;
-+ amdahl)
-+ basic_machine=580-amdahl
-+ os=-sysv
-+@@ -437,12 +473,27 @@
-+ basic_machine=j90-cray
-+ os=-unicos
-+ ;;
-++ craynv)
-++ basic_machine=craynv-cray
-++ os=-unicosmp
-++ ;;
-++ cr16c)
-++ basic_machine=cr16c-unknown
-++ os=-elf
-++ ;;
-+ crds | unos)
-+ basic_machine=m68k-crds
-+ ;;
-++ crisv32 | crisv32-* | etraxfs*)
-++ basic_machine=crisv32-axis
-++ ;;
-+ cris | cris-* | etrax*)
-+ basic_machine=cris-axis
-+ ;;
-++ crx)
-++ basic_machine=crx-unknown
-++ os=-elf
-++ ;;
-+ da30 | da30-*)
-+ basic_machine=m68k-da30
-+ ;;
-+@@ -465,6 +516,10 @@
-+ basic_machine=m88k-motorola
-+ os=-sysv3
-+ ;;
-++ djgpp)
-++ basic_machine=i586-pc
-++ os=-msdosdjgpp
-++ ;;
-+ dpx20 | dpx20-*)
-+ basic_machine=rs6000-bull
-+ os=-bosx
-+@@ -643,10 +698,6 @@
-+ mips3*)
-+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-+ ;;
-+- mmix*)
-+- basic_machine=mmix-knuth
-+- os=-mmixware
-+- ;;
-+ monitor)
-+ basic_machine=m68k-rom68k
-+ os=-coff
-+@@ -659,6 +710,9 @@
-+ basic_machine=i386-pc
-+ os=-msdos
-+ ;;
-++ ms1-*)
-++ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-++ ;;
-+ mvs)
-+ basic_machine=i370-ibm
-+ os=-mvs
-+@@ -727,10 +781,6 @@
-+ np1)
-+ basic_machine=np1-gould
-+ ;;
-+- nv1)
-+- basic_machine=nv1-cray
-+- os=-unicosmp
-+- ;;
-+ nsr-tandem)
-+ basic_machine=nsr-tandem
-+ ;;
-+@@ -738,9 +788,12 @@
-+ basic_machine=hppa1.1-oki
-+ os=-proelf
-+ ;;
-+- or32 | or32-*)
-++ openrisc | openrisc-*)
-+ basic_machine=or32-unknown
-+- os=-coff
-++ ;;
-++ os400)
-++ basic_machine=powerpc-ibm
-++ os=-os400
-+ ;;
-+ OSE68000 | ose68000)
-+ basic_machine=m68000-ericsson
-+@@ -767,6 +820,12 @@
-+ pc532 | pc532-*)
-+ basic_machine=ns32k-pc532
-+ ;;
-++ pc98)
-++ basic_machine=i386-pc
-++ ;;
-++ pc98-*)
-++ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-++ ;;
-+ pentium | p5 | k5 | k6 | nexgen | viac3)
-+ basic_machine=i586-pc
-+ ;;
-+@@ -823,6 +882,10 @@
-+ basic_machine=i586-unknown
-+ os=-pw32
-+ ;;
-++ rdos)
-++ basic_machine=i386-pc
-++ os=-rdos
-++ ;;
-+ rom68k)
-+ basic_machine=m68k-rom68k
-+ os=-coff
-+@@ -833,6 +896,12 @@
-+ rtpc | rtpc-*)
-+ basic_machine=romp-ibm
-+ ;;
-++ s390 | s390-*)
-++ basic_machine=s390-ibm
-++ ;;
-++ s390x | s390x-*)
-++ basic_machine=s390x-ibm
-++ ;;
-+ sa29200)
-+ basic_machine=a29k-amd
-+ os=-udi
-+@@ -956,6 +1025,10 @@
-+ tower | tower-32)
-+ basic_machine=m68k-ncr
-+ ;;
-++ tpf)
-++ basic_machine=s390x-ibm
-++ os=-tpf
-++ ;;
-+ udi29k)
-+ basic_machine=a29k-amd
-+ os=-udi
-+@@ -999,6 +1072,10 @@
-+ basic_machine=hppa1.1-winbond
-+ os=-proelf
-+ ;;
-++ xbox)
-++ basic_machine=i686-pc
-++ os=-mingw32
-++ ;;
-+ xps | xps100)
-+ basic_machine=xps100-honeywell
-+ ;;
-+@@ -1029,6 +1106,9 @@
-+ romp)
-+ basic_machine=romp-ibm
-+ ;;
-++ mmix)
-++ basic_machine=mmix-knuth
-++ ;;
-+ rs6000)
-+ basic_machine=rs6000-ibm
-+ ;;
-+@@ -1045,12 +1125,9 @@
-+ we32k)
-+ basic_machine=we32k-att
-+ ;;
-+- sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
-++ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
-+ basic_machine=sh-unknown
-+ ;;
-+- sh64)
-+- basic_machine=sh64-unknown
-+- ;;
-+ sparc | sparcv8 | sparcv9 | sparcv9b)
-+ basic_machine=sparc-sun
-+ ;;
-+@@ -1124,19 +1201,23 @@
-+ | -aos* \
-+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-+- | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
-+- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-++ | -openbsd* | -solidbsd* \
-++ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-++ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-+ | -chorusos* | -chorusrdb* \
-+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-+- | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
-++ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
-++ | -uxpv* | -beos* | -mpeix* | -udk* \
-+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-+- | -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
-++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-++ | -skyos* | -haiku* | -rdos*)
-+ # Remember, each alternative MUST END IN *, to match a version number.
-+ ;;
-+ -qnx*)
-+@@ -1154,12 +1235,15 @@
-+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
-+ ;;
-+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-+- | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-+ ;;
-+ -mac*)
-+ os=`echo $os | sed -e 's|mac|macos|'`
-+ ;;
-++ -linux-dietlibc)
-++ os=-linux-dietlibc
-++ ;;
-+ -linux*)
-+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
-+ ;;
-+@@ -1172,6 +1256,9 @@
-+ -opened*)
-+ os=-openedition
-+ ;;
-++ -os400*)
-++ os=-os400
-++ ;;
-+ -wince*)
-+ os=-wince
-+ ;;
-+@@ -1193,6 +1280,9 @@
-+ -atheos*)
-+ os=-atheos
-+ ;;
-++ -syllable*)
-++ os=-syllable
-++ ;;
-+ -386bsd)
-+ os=-bsd
-+ ;;
-+@@ -1215,6 +1305,9 @@
-+ -sinix*)
-+ os=-sysv4
-+ ;;
-++ -tpf*)
-++ os=-tpf
-++ ;;
-+ -triton*)
-+ os=-sysv3
-+ ;;
-+@@ -1251,6 +1344,9 @@
-+ -kaos*)
-+ os=-kaos
-+ ;;
-++ -zvmoe)
-++ os=-zvmoe
-++ ;;
-+ -none)
-+ ;;
-+ *)
-+@@ -1282,9 +1378,9 @@
-+ arm*-semi)
-+ os=-aout
-+ ;;
-+- c4x-* | tic4x-*)
-+- os=-coff
-+- ;;
-++ c4x-* | tic4x-*)
-++ os=-coff
-++ ;;
-+ # This must come before the *-dec entry.
-+ pdp10-*)
-+ os=-tops20
-+@@ -1328,9 +1424,15 @@
-+ *-be)
-+ os=-beos
-+ ;;
-++ *-haiku)
-++ os=-haiku
-++ ;;
-+ *-ibm)
-+ os=-aix
-+ ;;
-++ *-knuth)
-++ os=-mmixware
-++ ;;
-+ *-wec)
-+ os=-proelf
-+ ;;
-+@@ -1463,9 +1565,15 @@
-+ -mvs* | -opened*)
-+ vendor=ibm
-+ ;;
-++ -os400*)
-++ vendor=ibm
-++ ;;
-+ -ptx*)
-+ vendor=sequent
-+ ;;
-++ -tpf*)
-++ vendor=ibm
-++ ;;
-+ -vxsim* | -vxworks* | -windiss*)
-+ vendor=wrs
-+ ;;
-+@@ -1490,7 +1598,7 @@
-+ esac
-+
-+ echo $basic_machine$os
-+-exit 0
-++exit
-+
-+ # Local variables:
-+ # eval: (add-hook 'write-file-hooks 'time-stamp)
-+diff -Naur dbus-0.61.orig/configure dbus-0.61/configure
-+--- dbus-0.61.orig/configure 2006-02-27 21:44:03.000000000 +0100
-++++ dbus-0.61/configure 2006-02-27 21:45:19.000000000 +0100
-+@@ -1197,7 +1197,7 @@
-+ else
-+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-+ fi
-+- cd $ac_popdir
-++ cd "$ac_popdir"
-+ done
-+ fi
-+
-+@@ -2696,8 +2696,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -2755,8 +2754,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -2872,8 +2870,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -2927,8 +2924,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -2973,8 +2969,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -3018,8 +3013,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -3377,8 +3371,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_cxx_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -3436,8 +3429,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_cxx_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -3508,8 +3500,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_cxx_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -3553,8 +3544,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_cxx_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -3735,8 +3725,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -3790,8 +3779,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -4106,8 +4094,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -4630,7 +4617,7 @@
-+ else
-+ # Needs to be here so libtool wont get confused
-+
-+-for ac_prog in gcj
-++for ac_prog in gcj gcj-3.2 gcj-3.1 gcj-3.0 gcj-2.95
-+ do
-+ # Extract the first word of "$ac_prog", so it can be a program name with args.
-+ set dummy $ac_prog; ac_word=$2
-+@@ -5299,7 +5286,7 @@
-+ lt_cv_deplibs_check_method=pass_all
-+ ;;
-+
-+-netbsd*)
-++netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
-+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
-+ else
-+@@ -5415,7 +5402,7 @@
-+ ;;
-+ *-*-irix6*)
-+ # Find out which ABI we are using.
-+- echo '#line 5418 "configure"' > conftest.$ac_ext
-++ echo '#line 5405 "configure"' > conftest.$ac_ext
-+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+ (eval $ac_compile) 2>&5
-+ ac_status=$?
-+@@ -5535,8 +5522,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -5635,8 +5621,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -5703,8 +5688,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -6149,7 +6133,7 @@
-+
-+
-+ # Provide some information about the compiler.
-+-echo "$as_me:6152:" \
-++echo "$as_me:6136:" \
-+ "checking for Fortran 77 compiler version" >&5
-+ ac_compiler=`set X $ac_compile; echo $2`
-+ { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
-+@@ -6195,8 +6179,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_f77_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -6245,8 +6228,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_f77_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -7212,11 +7194,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:7215: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:7197: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
-+- echo "$as_me:7219: \$? = $ac_status" >&5
-++ echo "$as_me:7201: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+@@ -7480,11 +7462,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:7483: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:7465: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
-+- echo "$as_me:7487: \$? = $ac_status" >&5
-++ echo "$as_me:7469: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+@@ -7584,11 +7566,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:7587: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:7569: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&5
-+- echo "$as_me:7591: \$? = $ac_status" >&5
-++ echo "$as_me:7573: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+@@ -7839,12 +7821,13 @@
-+ $echo "local: *; };" >> $output_objdir/$libname.ver~
-+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-+ fi
-++ link_all_deplibs=no
-+ else
-+ ld_shlibs=no
-+ fi
-+ ;;
-+
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-+ wlarc=
-+@@ -8060,8 +8043,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -8121,8 +8103,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -8276,13 +8257,22 @@
-+ ;;
-+
-+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-+- freebsd* | kfreebsd*-gnu | dragonfly*)
-++ freebsd* | dragonfly*)
-+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec='-R$libdir'
-+ hardcode_direct=yes
-+ hardcode_shlibpath_var=no
-+ ;;
-+
-++ # GNU/kFreeBSD uses gcc -shared to do shared libraries.
-++ kfreebsd*-gnu)
-++ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-++ hardcode_libdir_flag_spec='-R$libdir'
-++ hardcode_direct=yes
-++ hardcode_shlibpath_var=no
-++ link_all_deplibs=no
-++ ;;
-++
-+ hpux9*)
-+ if test "$GCC" = yes; then
-+ archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-+@@ -8378,7 +8368,7 @@
-+ link_all_deplibs=yes
-+ ;;
-+
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
-+ else
-+@@ -9049,31 +9039,10 @@
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+- # find out which ABI we are using
-+- libsuff=
-+- case "$host_cpu" in
-+- x86_64*|s390x*|powerpc64*)
-+- echo '#line 9056 "configure"' > conftest.$ac_ext
-+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+- (eval $ac_compile) 2>&5
-+- ac_status=$?
-+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+- (exit $ac_status); }; then
-+- case `/usr/bin/file conftest.$ac_objext` in
-+- *64-bit*)
-+- libsuff=64
-+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
-+- ;;
-+- esac
-+- fi
-+- rm -rf conftest*
-+- ;;
-+- esac
-+-
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
-++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+@@ -9085,6 +9054,18 @@
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
-++netbsdelf*-gnu)
-++ version_type=linux
-++ need_lib_prefix=no
-++ need_version=no
-++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-++ soname_spec='${libname}${release}${shared_ext}$major'
-++ shlibpath_var=LD_LIBRARY_PATH
-++ shlibpath_overrides_runpath=no
-++ hardcode_into_libs=yes
-++ dynamic_linker='NetBSD ld.elf_so'
-++ ;;
-++
-+ knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+@@ -9410,8 +9391,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -9514,8 +9494,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -9580,8 +9559,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -9674,8 +9652,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -9740,8 +9717,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -9807,8 +9783,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -9874,8 +9849,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -9950,7 +9924,7 @@
-+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-+ lt_status=$lt_dlunknown
-+ cat > conftest.$ac_ext <<EOF
-+-#line 9953 "configure"
-++#line 9927 "configure"
-+ #include "confdefs.h"
-+
-+ #if HAVE_DLFCN_H
-+@@ -10050,7 +10024,7 @@
-+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-+ lt_status=$lt_dlunknown
-+ cat > conftest.$ac_ext <<EOF
-+-#line 10053 "configure"
-++#line 10027 "configure"
-+ #include "confdefs.h"
-+
-+ #if HAVE_DLFCN_H
-+@@ -11133,8 +11107,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_cxx_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -11195,8 +11168,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_cxx_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -11628,7 +11600,7 @@
-+ ;;
-+ esac
-+ ;;
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-+ wlarc=
-+@@ -12281,7 +12253,7 @@
-+ ;;
-+ esac
-+ ;;
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ ;;
-+ osf3* | osf4* | osf5*)
-+ case $cc_basename in
-+@@ -12390,11 +12362,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:12393: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:12365: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
-+- echo "$as_me:12397: \$? = $ac_status" >&5
-++ echo "$as_me:12369: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+@@ -12494,11 +12466,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:12497: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:12469: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&5
-+- echo "$as_me:12501: \$? = $ac_status" >&5
-++ echo "$as_me:12473: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+@@ -12566,6 +12538,12 @@
-+ cygwin* | mingw*)
-+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
-+ ;;
-++ kfreebsd*-gnu)
-++ link_all_deplibs_CXX=no
-++ ;;
-++ linux*)
-++ link_all_deplibs_CXX=no
-++ ;;
-+ *)
-+ export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-+ ;;
-+@@ -13026,31 +13004,10 @@
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+- # find out which ABI we are using
-+- libsuff=
-+- case "$host_cpu" in
-+- x86_64*|s390x*|powerpc64*)
-+- echo '#line 13033 "configure"' > conftest.$ac_ext
-+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+- (eval $ac_compile) 2>&5
-+- ac_status=$?
-+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+- (exit $ac_status); }; then
-+- case `/usr/bin/file conftest.$ac_objext` in
-+- *64-bit*)
-+- libsuff=64
-+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
-+- ;;
-+- esac
-+- fi
-+- rm -rf conftest*
-+- ;;
-+- esac
-+-
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
-++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+@@ -13062,6 +13019,18 @@
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
-++netbsdelf*-gnu)
-++ version_type=linux
-++ need_lib_prefix=no
-++ need_version=no
-++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-++ soname_spec='${libname}${release}${shared_ext}$major'
-++ shlibpath_var=LD_LIBRARY_PATH
-++ shlibpath_overrides_runpath=no
-++ hardcode_into_libs=yes
-++ dynamic_linker='NetBSD ld.elf_so'
-++ ;;
-++
-+ knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+@@ -14085,11 +14054,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:14088: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:14057: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
-+- echo "$as_me:14092: \$? = $ac_status" >&5
-++ echo "$as_me:14061: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+@@ -14189,11 +14158,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:14192: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:14161: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&5
-+- echo "$as_me:14196: \$? = $ac_status" >&5
-++ echo "$as_me:14165: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+@@ -14444,12 +14413,13 @@
-+ $echo "local: *; };" >> $output_objdir/$libname.ver~
-+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-+ fi
-++ link_all_deplibs_F77=no
-+ else
-+ ld_shlibs_F77=no
-+ fi
-+ ;;
-+
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-+ wlarc=
-+@@ -14655,8 +14625,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_f77_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -14706,8 +14675,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_f77_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -14861,11 +14829,20 @@
-+ ;;
-+
-+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-+- freebsd* | kfreebsd*-gnu | dragonfly*)
-++ freebsd* | dragonfly*)
-++ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-++ hardcode_libdir_flag_spec_F77='-R$libdir'
-++ hardcode_direct_F77=yes
-++ hardcode_shlibpath_var_F77=no
-++ ;;
-++
-++ # GNU/kFreeBSD uses gcc -shared to do shared libraries.
-++ kfreebsd*-gnu)
-+ archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec_F77='-R$libdir'
-+ hardcode_direct_F77=yes
-+ hardcode_shlibpath_var_F77=no
-++ link_all_deplibs_F77=no
-+ ;;
-+
-+ hpux9*)
-+@@ -14963,7 +14940,7 @@
-+ link_all_deplibs_F77=yes
-+ ;;
-+
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
-+ else
-+@@ -15634,31 +15611,10 @@
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+- # find out which ABI we are using
-+- libsuff=
-+- case "$host_cpu" in
-+- x86_64*|s390x*|powerpc64*)
-+- echo '#line 15641 "configure"' > conftest.$ac_ext
-+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+- (eval $ac_compile) 2>&5
-+- ac_status=$?
-+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+- (exit $ac_status); }; then
-+- case `/usr/bin/file conftest.$ac_objext` in
-+- *64-bit*)
-+- libsuff=64
-+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
-+- ;;
-+- esac
-+- fi
-+- rm -rf conftest*
-+- ;;
-+- esac
-+-
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
-++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+@@ -15670,6 +15626,18 @@
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
-++netbsdelf*-gnu)
-++ version_type=linux
-++ need_lib_prefix=no
-++ need_version=no
-++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-++ soname_spec='${libname}${release}${shared_ext}$major'
-++ shlibpath_var=LD_LIBRARY_PATH
-++ shlibpath_overrides_runpath=no
-++ hardcode_into_libs=yes
-++ dynamic_linker='NetBSD ld.elf_so'
-++ ;;
-++
-+ knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+@@ -16413,11 +16381,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:16416: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:16384: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
-+- echo "$as_me:16420: \$? = $ac_status" >&5
-++ echo "$as_me:16388: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+@@ -16681,11 +16649,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:16684: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:16652: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>conftest.err)
-+ ac_status=$?
-+ cat conftest.err >&5
-+- echo "$as_me:16688: \$? = $ac_status" >&5
-++ echo "$as_me:16656: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s "$ac_outfile"; then
-+ # The compiler can only warn and ignore the option if not recognized
-+ # So say no if there are warnings other than the usual output.
-+@@ -16785,11 +16753,11 @@
-+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-+ -e 's:$: $lt_compiler_flag:'`
-+- (eval echo "\"\$as_me:16788: $lt_compile\"" >&5)
-++ (eval echo "\"\$as_me:16756: $lt_compile\"" >&5)
-+ (eval "$lt_compile" 2>out/conftest.err)
-+ ac_status=$?
-+ cat out/conftest.err >&5
-+- echo "$as_me:16792: \$? = $ac_status" >&5
-++ echo "$as_me:16760: \$? = $ac_status" >&5
-+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
-+ then
-+ # The compiler can only warn and ignore the option if not recognized
-+@@ -17040,12 +17008,13 @@
-+ $echo "local: *; };" >> $output_objdir/$libname.ver~
-+ $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
-+ fi
-++ link_all_deplibs_GCJ=no
-+ else
-+ ld_shlibs_GCJ=no
-+ fi
-+ ;;
-+
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-+ wlarc=
-+@@ -17261,8 +17230,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -17322,8 +17290,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -17477,11 +17444,20 @@
-+ ;;
-+
-+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-+- freebsd* | kfreebsd*-gnu | dragonfly*)
-++ freebsd* | dragonfly*)
-++ archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-++ hardcode_libdir_flag_spec_GCJ='-R$libdir'
-++ hardcode_direct_GCJ=yes
-++ hardcode_shlibpath_var_GCJ=no
-++ ;;
-++
-++ # GNU/kFreeBSD uses gcc -shared to do shared libraries.
-++ kfreebsd*-gnu)
-+ archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-+ hardcode_libdir_flag_spec_GCJ='-R$libdir'
-+ hardcode_direct_GCJ=yes
-+ hardcode_shlibpath_var_GCJ=no
-++ link_all_deplibs_GCJ=no
-+ ;;
-+
-+ hpux9*)
-+@@ -17579,7 +17555,7 @@
-+ link_all_deplibs_GCJ=yes
-+ ;;
-+
-+- netbsd*)
-++ netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
-+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-+ archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
-+ else
-+@@ -18250,31 +18226,10 @@
-+ # before this can be enabled.
-+ hardcode_into_libs=yes
-+
-+- # find out which ABI we are using
-+- libsuff=
-+- case "$host_cpu" in
-+- x86_64*|s390x*|powerpc64*)
-+- echo '#line 18257 "configure"' > conftest.$ac_ext
-+- if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-+- (eval $ac_compile) 2>&5
-+- ac_status=$?
-+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+- (exit $ac_status); }; then
-+- case `/usr/bin/file conftest.$ac_objext` in
-+- *64-bit*)
-+- libsuff=64
-+- sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
-+- ;;
-+- esac
-+- fi
-+- rm -rf conftest*
-+- ;;
-+- esac
-+-
-+ # Append ld.so.conf contents to the search path
-+ if test -f /etc/ld.so.conf; then
-+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
-+- sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra"
-++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
-+ fi
-+
-+ # We used to test for /lib/ld.so.1 and disable shared libraries on
-+@@ -18286,6 +18241,18 @@
-+ dynamic_linker='GNU/Linux ld.so'
-+ ;;
-+
-++netbsdelf*-gnu)
-++ version_type=linux
-++ need_lib_prefix=no
-++ need_version=no
-++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-++ soname_spec='${libname}${release}${shared_ext}$major'
-++ shlibpath_var=LD_LIBRARY_PATH
-++ shlibpath_overrides_runpath=no
-++ hardcode_into_libs=yes
-++ dynamic_linker='NetBSD ld.elf_so'
-++ ;;
-++
-+ knetbsd*-gnu)
-+ version_type=linux
-+ need_lib_prefix=no
-+@@ -20262,8 +20229,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20325,8 +20291,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20366,8 +20331,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20423,8 +20387,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20464,8 +20427,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20529,8 +20491,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20561,10 +20522,8 @@
-+ esac
-+ else
-+ if test "$cross_compiling" = yes; then
-+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&5
-+-echo "$as_me: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&2;}
-++ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
-++echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ cat >conftest.$ac_ext <<_ACEOF
-+@@ -20676,8 +20635,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20739,8 +20697,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20780,8 +20737,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20837,8 +20793,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20878,8 +20833,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20943,8 +20897,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -20975,10 +20928,8 @@
-+ esac
-+ else
-+ if test "$cross_compiling" = yes; then
-+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&5
-+-echo "$as_me: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&2;}
-++ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
-++echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ cat >conftest.$ac_ext <<_ACEOF
-+@@ -21090,8 +21041,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21153,8 +21103,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21194,8 +21143,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21251,8 +21199,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21292,8 +21239,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21357,8 +21303,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21389,10 +21334,8 @@
-+ esac
-+ else
-+ if test "$cross_compiling" = yes; then
-+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&5
-+-echo "$as_me: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&2;}
-++ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
-++echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ cat >conftest.$ac_ext <<_ACEOF
-+@@ -21504,8 +21447,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21567,8 +21509,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21608,8 +21549,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21665,8 +21605,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21706,8 +21645,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21771,8 +21709,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21803,10 +21740,8 @@
-+ esac
-+ else
-+ if test "$cross_compiling" = yes; then
-+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&5
-+-echo "$as_me: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&2;}
-++ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
-++echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ cat >conftest.$ac_ext <<_ACEOF
-+@@ -21918,8 +21853,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -21981,8 +21915,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22022,8 +21955,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22079,8 +22011,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22120,8 +22051,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22185,8 +22115,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22217,10 +22146,8 @@
-+ esac
-+ else
-+ if test "$cross_compiling" = yes; then
-+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&5
-+-echo "$as_me: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&2;}
-++ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
-++echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ cat >conftest.$ac_ext <<_ACEOF
-+@@ -22332,8 +22259,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22395,8 +22321,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22436,8 +22361,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22493,8 +22417,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22534,8 +22457,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22599,8 +22521,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22631,10 +22552,8 @@
-+ esac
-+ else
-+ if test "$cross_compiling" = yes; then
-+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&5
-+-echo "$as_me: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&2;}
-++ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
-++echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ cat >conftest.$ac_ext <<_ACEOF
-+@@ -22746,8 +22665,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22809,8 +22727,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22850,8 +22767,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22907,8 +22823,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -22948,8 +22863,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23013,8 +22927,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23045,10 +22958,8 @@
-+ esac
-+ else
-+ if test "$cross_compiling" = yes; then
-+- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&5
-+-echo "$as_me: error: cannot run test program while cross compiling
-+-See \`config.log' for more details." >&2;}
-++ { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
-++echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
-+ { (exit 1); exit 1; }; }
-+ else
-+ cat >conftest.$ac_ext <<_ACEOF
-+@@ -23268,8 +23179,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23311,8 +23221,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23369,8 +23278,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23495,8 +23403,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23551,8 +23458,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23737,8 +23643,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23811,8 +23716,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23924,8 +23828,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -23992,8 +23895,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24172,8 +24074,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24306,8 +24207,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24373,8 +24273,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24439,8 +24338,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24619,8 +24517,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24687,8 +24584,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24741,8 +24637,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24813,8 +24708,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -24915,8 +24809,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25111,8 +25004,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25257,8 +25149,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25329,8 +25220,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25474,8 +25364,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25533,8 +25422,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25631,8 +25519,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25711,8 +25598,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25776,8 +25662,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25841,8 +25726,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25919,8 +25803,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -25984,8 +25867,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -26101,8 +25983,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -26269,8 +26150,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -26403,8 +26283,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -26489,8 +26368,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -26703,8 +26581,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -26764,8 +26641,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -27091,8 +26967,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -27155,8 +27030,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28117,9 +27991,12 @@
-+
-+
-+ ### X11 detection
-+-echo "$as_me:$LINENO: checking for X" >&5
-++
-++if test "x$ac_path_x_has_been_run" != xyes; then
-++ echo "$as_me:$LINENO: checking for X" >&5
-+ echo $ECHO_N "checking for X... $ECHO_C" >&6
-+
-++ac_path_x_has_been_run=yes
-+
-+ # Check whether --with-x or --without-x was given.
-+ if test "${with_x+set}" = set; then
-+@@ -28212,7 +28089,7 @@
-+ /usr/openwin/share/include'
-+
-+ if test "$ac_x_includes" = no; then
-+- # Guess where to find include files, by looking for Xlib.h.
-++ # Guess where to find include files, by looking for a specified header file.
-+ # First, try using that file with no special directory specified.
-+ cat >conftest.$ac_ext <<_ACEOF
-+ /* confdefs.h. */
-+@@ -28261,7 +28138,7 @@
-+ # See if we find them without any special options.
-+ # Don't add to $LIBS permanently.
-+ ac_save_LIBS=$LIBS
-+- LIBS="-lXt $LIBS"
-++ LIBS="-lX11 $LIBS"
-+ cat >conftest.$ac_ext <<_ACEOF
-+ /* confdefs.h. */
-+ _ACEOF
-+@@ -28286,8 +28163,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28311,7 +28187,7 @@
-+ do
-+ # Don't even attempt the hair of trying to link an X program!
-+ for ac_extension in a so sl; do
-+- if test -r $ac_dir/libXt.$ac_extension; then
-++ if test -r $ac_dir/libX11.$ac_extension; then
-+ ac_x_libraries=$ac_dir
-+ break 2
-+ fi
-+@@ -28347,10 +28223,15 @@
-+ # Update the cache value to reflect the command line values.
-+ ac_cv_have_x="have_x=yes \
-+ ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
-+- echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
-+-echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6
-++ # It might be that x_includes is empty (headers are found in the
-++ # standard search path. Then output the corresponding message
-++ ac_out_x_includes=$x_includes
-++ test "x$x_includes" = x && ac_out_x_includes="in standard search path"
-++ echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5
-++echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6
-+ fi
-+
-++fi
-+ if test "$no_x" = yes; then
-+ # Not all programs may use this symbol, but it does not hurt to define it.
-+
-+@@ -28398,8 +28279,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28450,8 +28330,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28527,8 +28406,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28583,8 +28461,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28652,8 +28529,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28761,8 +28637,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28826,8 +28701,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -28895,8 +28769,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -29000,8 +28873,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -29065,8 +28937,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -29163,8 +29034,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -29228,8 +29098,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -29326,8 +29195,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -29391,8 +29259,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -29471,8 +29338,7 @@
-+ cat conftest.err >&5
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); } &&
-+- { ac_try='test -z "$ac_c_werror_flag"
-+- || test ! -s conftest.err'
-++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+@@ -31490,11 +31356,6 @@
-+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
-+ esac
-+
-+- if test x"$ac_file" != x-; then
-+- { echo "$as_me:$LINENO: creating $ac_file" >&5
-+-echo "$as_me: creating $ac_file" >&6;}
-+- rm -f "$ac_file"
-+- fi
-+ # Let's still pretend it is `configure' which instantiates (i.e., don't
-+ # use $as_me), people would be surprised to read:
-+ # /* config.h. Generated by config.status. */
-+@@ -31533,6 +31394,12 @@
-+ fi;;
-+ esac
-+ done` || { (exit 1); exit 1; }
-++
-++ if test x"$ac_file" != x-; then
-++ { echo "$as_me:$LINENO: creating $ac_file" >&5
-++echo "$as_me: creating $ac_file" >&6;}
-++ rm -f "$ac_file"
-++ fi
-+ _ACEOF
-+ cat >>$CONFIG_STATUS <<_ACEOF
-+ sed "$ac_vpsub
-+diff -Naur dbus-0.61.orig/dbus/Makefile.in dbus-0.61/dbus/Makefile.in
-+--- dbus-0.61.orig/dbus/Makefile.in 2006-02-27 21:44:03.000000000 +0100
-++++ dbus-0.61/dbus/Makefile.in 2006-02-27 21:45:02.000000000 +0100
-+@@ -113,9 +113,9 @@
-+ am__dbusinclude_HEADERS_DIST = dbus.h dbus-address.h dbus-bus.h \
-+ dbus-connection.h dbus-errors.h dbus-macros.h dbus-memory.h \
-+ dbus-message.h dbus-pending-call.h dbus-protocol.h \
-+- dbus-server.h dbus-shared.h dbus-threads.h dbus-types.h \
-+- dbus-glib.h dbus-glib-lowlevel.h dbus-glib-error-enum.h \
-+- qdbus.h
-++ dbus-server.h dbus-shared.h dbus-signature.h dbus-threads.h \
-++ dbus-types.h dbus-glib.h dbus-glib-lowlevel.h \
-++ dbus-glib-error-enum.h qdbus.h
-+ dbusincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-+ HEADERS = $(dbusarchinclude_HEADERS) $(dbusinclude_HEADERS)
-+ ETAGS = etags
-+@@ -400,6 +400,7 @@
-+ dbus-protocol.h \
-+ dbus-server.h \
-+ dbus-shared.h \
-++ dbus-signature.h \
-+ dbus-threads.h \
-+ dbus-types.h \
-+ $(GLIB_INCLUDES) \
-+@@ -448,7 +449,6 @@
-+ dbus-sha.c \
-+ dbus-sha.h \
-+ dbus-signature.c \
-+- dbus-signature.h \
-+ dbus-timeout.c \
-+ dbus-timeout.h \
-+ dbus-threads-internal.h \
-+diff -Naur dbus-0.61.orig/ltmain.sh dbus-0.61/ltmain.sh
-+--- dbus-0.61.orig/ltmain.sh 2006-02-27 21:44:03.000000000 +0100
-++++ dbus-0.61/ltmain.sh 2006-01-09 16:21:15.000000000 +0100
-+@@ -43,7 +43,7 @@
-+
-+ PROGRAM=ltmain.sh
-+ PACKAGE=libtool
-+-VERSION=1.5.22
-++VERSION="1.5.22 Debian 1.5.22-2"
-+ TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
-+
-+ # See if we are running on zsh, and set the options which allow our
-+@@ -2082,7 +2082,10 @@
-+ case $pass in
-+ dlopen) libs="$dlfiles" ;;
-+ dlpreopen) libs="$dlprefiles" ;;
-+- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
-++ link)
-++ libs="$deplibs %DEPLIBS%"
-++ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
-++ ;;
-+ esac
-+ fi
-+ if test "$pass" = dlopen; then
-+@@ -3201,6 +3204,11 @@
-+ age="$number_minor"
-+ revision="$number_minor"
-+ ;;
-++ *)
-++ $echo "$modename: unknown library version type \`$version_type'" 1>&2
-++ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
-++ exit $EXIT_FAILURE
-++ ;;
-+ esac
-+ ;;
-+ no)
-+diff -Naur dbus-0.61.orig/qt/Makefile.in dbus-0.61/qt/Makefile.in
-+--- dbus-0.61.orig/qt/Makefile.in 2006-02-27 21:44:03.000000000 +0100
-++++ dbus-0.61/qt/Makefile.in 2006-02-27 21:45:11.000000000 +0100
-+@@ -551,7 +551,7 @@
-+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-+
-+-qdbusconnection.lo: $(top_srcdir)/qt/qdbusconnection.cpp
-++ at HAVE_QT_FALSE@qdbusconnection.lo: $(top_srcdir)/qt/qdbusconnection.cpp
-+ @am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusconnection.lo -MD -MP -MF "$(DEPDIR)/qdbusconnection.Tpo" -c -o qdbusconnection.lo `test -f '$(top_srcdir)/qt/qdbusconnection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusconnection.cpp; \
-+ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusconnection.Tpo" "$(DEPDIR)/qdbusconnection.Plo"; else rm -f "$(DEPDIR)/qdbusconnection.Tpo"; exit 1; fi
-+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusconnection.cpp' object='qdbusconnection.lo' libtool=yes @AMDEPBACKSLASH@
-+@@ -586,7 +586,7 @@
-+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusmessage.lo `test -f '$(top_srcdir)/qt/qdbusmessage.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmessage.cpp
-+
-+-qdbusserver.lo: $(top_srcdir)/qt/qdbusserver.cpp
-++ at HAVE_QT_FALSE@qdbusserver.lo: $(top_srcdir)/qt/qdbusserver.cpp
-+ @am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusserver.lo -MD -MP -MF "$(DEPDIR)/qdbusserver.Tpo" -c -o qdbusserver.lo `test -f '$(top_srcdir)/qt/qdbusserver.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusserver.cpp; \
-+ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusserver.Tpo" "$(DEPDIR)/qdbusserver.Plo"; else rm -f "$(DEPDIR)/qdbusserver.Tpo"; exit 1; fi
-+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusserver.cpp' object='qdbusserver.lo' libtool=yes @AMDEPBACKSLASH@
-+@@ -642,7 +642,7 @@
-+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusintrospection.lo `test -f '$(top_srcdir)/qt/qdbusintrospection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintrospection.cpp
-+
-+-qdbusabstractadaptor.lo: $(top_srcdir)/qt/qdbusabstractadaptor.cpp
-++ at HAVE_QT_FALSE@qdbusabstractadaptor.lo: $(top_srcdir)/qt/qdbusabstractadaptor.cpp
-+ @am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusabstractadaptor.lo -MD -MP -MF "$(DEPDIR)/qdbusabstractadaptor.Tpo" -c -o qdbusabstractadaptor.lo `test -f '$(top_srcdir)/qt/qdbusabstractadaptor.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusabstractadaptor.cpp; \
-+ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusabstractadaptor.Tpo" "$(DEPDIR)/qdbusabstractadaptor.Plo"; else rm -f "$(DEPDIR)/qdbusabstractadaptor.Tpo"; exit 1; fi
-+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusabstractadaptor.cpp' object='qdbusabstractadaptor.lo' libtool=yes @AMDEPBACKSLASH@
-+@@ -857,9 +857,9 @@
-+ uninstall-libLTLIBRARIES
-+
-+
-+- at HAVE_QT_TRUE@$(top_srcdir)/qt/qdbusabstractadaptor.lo: qdbusabstractadaptor.moc
-+- at HAVE_QT_TRUE@$(top_srcdir)/qt/qdbusserver.lo: qdbusserver.moc
-+- at HAVE_QT_TRUE@$(top_srcdir)/qt/qdbusconnection.lo: qdbusconnection_p.moc
-++ at HAVE_QT_TRUE@qdbusabstractadaptor.lo: qdbusabstractadaptor.moc
-++ at HAVE_QT_TRUE@qdbusserver.lo: qdbusserver.moc
-++ at HAVE_QT_TRUE@qdbusconnection.lo: qdbusconnection_p.moc
-+
-+ @HAVE_QT_TRUE@%.moc: %.h
-+ @HAVE_QT_TRUE@ $(QT_MOC) $< > $@
-diff -Naur dbus-0.61.orig/debian/python2.4-dbus.install dbus-0.61/debian/python2.4-dbus.install
---- dbus-0.61.orig/debian/python2.4-dbus.install 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/python2.4-dbus.install 2005-08-23 16:17:21.000000000 +0200
-@@ -0,0 +1 @@
-+debian/tmp/usr/lib/python2.4/site-packages/dbus
-diff -Naur dbus-0.61.orig/debian/rules dbus-0.61/debian/rules
---- dbus-0.61.orig/debian/rules 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/debian/rules 2006-02-24 22:40:50.000000000 +0100
-@@ -0,0 +1,79 @@
-+#!/usr/bin/make -f
-+# Copyright © 2002,2003 Colin Walters <walters at verbum.org>
-+# Copyright © 2003 Daniel Stone <daniels at debian.org>
-+DEB_AUTO_UPDATE_AUTOCONF="yes"
-+
-+binary/libdbus-glib-1-2:: binary/libdbus-1-2
-+binary/libdbus-qt-1-1c2:: binary/libdbus-1-2
-+binary/dbus-1-utils:: binary/libdbus-glib-1-2
-+binary/python2.4-dbus::
-+ rm debian/python2.4-dbus/usr/lib/python2.4/site-packages/dbus/dbus_bindings.*a
-+ dh_python -ppython2.4-dbus
-+
-+include /usr/share/cdbs/1/rules/simple-patchsys.mk
-+include /usr/share/cdbs/1/rules/utils.mk
-+include /usr/share/cdbs/1/rules/debhelper.mk
-+include /usr/share/cdbs/1/class/autotools.mk
-+
-+
-+ifeq ($(DEB_BUILD_ARCH),powerpc)
-+ MONO_FLAGS=--enable-mono --enable-mono-docs
-+endif
-+ifeq ($(DEB_BUILD_ARCH),amd64)
-+ MONO_FLAGS=--enable-mono --enable-mono-docs
-+endif
-+ifeq ($(DEB_BUILD_ARCH),i386)
-+ MONO_FLAGS=--enable-mono --enable-mono-docs
-+endif
-+
-+
-+DEB_CONFIGURE_SCRIPT_ENV += PYTHON=/usr/bin/python2.4
-+DEB_CONFIGURE_EXTRA_FLAGS := --enable-glib --enable-gtk \
-+ --enable-qt3 --with-qt3-moc=/usr/bin/moc-qt3 \
-+ --enable-qt --with-qt-moc=/usr/bin/moc-qt4 \
-+ --enable-python --with-xml=expat --enable-docs \
-+ --enable-xml-docs --enable-doxygen-docs \
-+ --enable-mono=auto --enable-mono-docs=auto
-+
-+# $(MONO_FLAGS)
-+
-+DEB_SHLIBDEPS_INCLUDE_libdbus-glib-1-2 := debian/libdbus-1-2/usr/lib/
-+DEB_SHLIBDEPS_INCLUDE_dbus-1-utils := debian/libdbus-1-2/usr/lib/ debian/dbus-gl
-+DEB_SHLIBDEPS_INCLUDE_libdbus-qt-1-1c2 := debian/libdbus-1-2/usr/lib/
-+DEB_SHLIBDEPS_INCLUDE_libdbus-qt4-1-1 := debian/libdbus-1-2/usr/lib/
-+DEB_SHLIBDEPS_INCLUDE_python2.4-dbus := debian/libdbus-1-2/usr/lib/
-+
-+# Strict library versioning
-+DEB_DH_MAKESHLIBS_ARGS_ALL := -V
-+
-+export MONO_SHARED_DIR=$(CURDIR)
-+
-+binary-predeb/libdbus-1-cil:: binary-arch
-+ dh_makeclilibs -V
-+ dh_clideps
-+
-+common-configure-indep::
-+ mkdir -p $(MONO_SHARED_DIR)/.wapi
-+
-+common-configure-impl::
-+ chmod +x py-compile
-+
-+binary-post-install/libdbus-1-dev::
-+ rm -f debian/libdbus-1-dev/usr/include/dbus*/dbus/dbus-glib.h
-+ rm -f debian/libdbus-1-dev/usr/include/dbus*/dbus/dbus-qt.h
-+
-+binary-post-install/dbus::
-+ mkdir -p debian/dbus/etc/dbus-1/event.d
-+ mkdir -p debian/dbus/etc/X11/Xsession.d
-+ cp debian/dbus-Xsession debian/dbus/etc/X11/Xsession.d/75dbus_dbus-launch
-+
-+binary-post-install/libdbus-1-cil::
-+ cd $(CURDIR)/debian/libdbus-1-cil && \
-+ find -type f -name "*.dll" -exec chmod -x {} \;
-+
-+build/dbus-1-doc::
-+ doxygen Doxyfile
-+
-+clean::
-+ rm -rf doc/api
-+ rm -rf $(MONO_SHARED_DIR)/.wapi
-diff -Naur dbus-0.61.orig/depcomp dbus-0.61/depcomp
---- dbus-0.61.orig/depcomp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/depcomp 2005-12-19 16:38:26.000000000 +0100
-@@ -0,0 +1,530 @@
-+#! /bin/sh
-+# depcomp - compile a program generating dependencies as side-effects
-+
-+scriptversion=2005-07-09.11
-+
-+# Copyright (C) 1999, 2000, 2003, 2004, 2005 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 2, or (at your option)
-+# 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, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+# 02110-1301, USA.
-+
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
-+
-+case $1 in
-+ '')
-+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
-+ exit 1;
-+ ;;
-+ -h | --h*)
-+ cat <<\EOF
-+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-+
-+Run PROGRAMS ARGS to compile a file, generating dependencies
-+as side-effects.
-+
-+Environment variables:
-+ depmode Dependency tracking mode.
-+ source Source file read by `PROGRAMS ARGS'.
-+ object Object file output by `PROGRAMS ARGS'.
-+ DEPDIR directory where to store dependencies.
-+ depfile Dependency file to output.
-+ tmpdepfile Temporary file to use when outputing dependencies.
-+ libtool Whether libtool is used (yes/no).
-+
-+Report bugs to <bug-automake at gnu.org>.
-+EOF
-+ exit $?
-+ ;;
-+ -v | --v*)
-+ echo "depcomp $scriptversion"
-+ exit $?
-+ ;;
-+esac
-+
-+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
-+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
-+ exit 1
-+fi
-+
-+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-+depfile=${depfile-`echo "$object" |
-+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-+
-+rm -f "$tmpdepfile"
-+
-+# Some modes work just like other modes, but use different flags. We
-+# parameterize here, but still list the modes in the big case below,
-+# to make depend.m4 easier to write. Note that we *cannot* use a case
-+# here, because this file can only contain one case statement.
-+if test "$depmode" = hp; then
-+ # HP compiler uses -M and no extra arg.
-+ gccflag=-M
-+ depmode=gcc
-+fi
-+
-+if test "$depmode" = dashXmstdout; then
-+ # This is just like dashmstdout with a different argument.
-+ dashmflag=-xM
-+ depmode=dashmstdout
-+fi
-+
-+case "$depmode" in
-+gcc3)
-+## gcc 3 implements dependency tracking that does exactly what
-+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
-+## it if -MD -MP comes after the -MF stuff. Hmm.
-+ "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
-+ stat=$?
-+ if test $stat -eq 0; then :
-+ else
-+ rm -f "$tmpdepfile"
-+ exit $stat
-+ fi
-+ mv "$tmpdepfile" "$depfile"
-+ ;;
-+
-+gcc)
-+## There are various ways to get dependency output from gcc. Here's
-+## why we pick this rather obscure method:
-+## - Don't want to use -MD because we'd like the dependencies to end
-+## up in a subdir. Having to rename by hand is ugly.
-+## (We might end up doing this anyway to support other compilers.)
-+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-+## -MM, not -M (despite what the docs say).
-+## - Using -M directly means running the compiler twice (even worse
-+## than renaming).
-+ if test -z "$gccflag"; then
-+ gccflag=-MD,
-+ fi
-+ "$@" -Wp,"$gccflag$tmpdepfile"
-+ stat=$?
-+ if test $stat -eq 0; then :
-+ else
-+ rm -f "$tmpdepfile"
-+ exit $stat
-+ fi
-+ rm -f "$depfile"
-+ echo "$object : \\" > "$depfile"
-+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-+## The second -e expression handles DOS-style file names with drive letters.
-+ sed -e 's/^[^:]*: / /' \
-+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-+## This next piece of magic avoids the `deleted header file' problem.
-+## The problem is that when a header file which appears in a .P file
-+## is deleted, the dependency causes make to die (because there is
-+## typically no way to rebuild the header). We avoid this by adding
-+## dummy dependencies for each header file. Too bad gcc doesn't do
-+## this for us directly.
-+ tr ' ' '
-+' < "$tmpdepfile" |
-+## Some versions of gcc put a space before the `:'. On the theory
-+## that the space means something, we add a space to the output as
-+## well.
-+## Some versions of the HPUX 10.20 sed can't process this invocation
-+## correctly. Breaking it into two sed invocations is a workaround.
-+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-+ rm -f "$tmpdepfile"
-+ ;;
-+
-+hp)
-+ # This case exists only to let depend.m4 do its work. It works by
-+ # looking at the text of this script. This case will never be run,
-+ # since it is checked for above.
-+ exit 1
-+ ;;
-+
-+sgi)
-+ if test "$libtool" = yes; then
-+ "$@" "-Wp,-MDupdate,$tmpdepfile"
-+ else
-+ "$@" -MDupdate "$tmpdepfile"
-+ fi
-+ stat=$?
-+ if test $stat -eq 0; then :
-+ else
-+ rm -f "$tmpdepfile"
-+ exit $stat
-+ fi
-+ rm -f "$depfile"
-+
-+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
-+ echo "$object : \\" > "$depfile"
-+
-+ # Clip off the initial element (the dependent). Don't try to be
-+ # clever and replace this with sed code, as IRIX sed won't handle
-+ # lines with more than a fixed number of characters (4096 in
-+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
-+ # the IRIX cc adds comments like `#:fec' to the end of the
-+ # dependency line.
-+ tr ' ' '
-+' < "$tmpdepfile" \
-+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-+ tr '
-+' ' ' >> $depfile
-+ echo >> $depfile
-+
-+ # The second pass generates a dummy entry for each header file.
-+ tr ' ' '
-+' < "$tmpdepfile" \
-+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-+ >> $depfile
-+ else
-+ # The sourcefile does not contain any dependencies, so just
-+ # store a dummy comment line, to avoid errors with the Makefile
-+ # "include basename.Plo" scheme.
-+ echo "#dummy" > "$depfile"
-+ fi
-+ rm -f "$tmpdepfile"
-+ ;;
-+
-+aix)
-+ # The C for AIX Compiler uses -M and outputs the dependencies
-+ # in a .u file. In older versions, this file always lives in the
-+ # current directory. Also, the AIX compiler puts `$object:' at the
-+ # start of each line; $object doesn't have directory information.
-+ # Version 6 uses the directory in both cases.
-+ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
-+ tmpdepfile="$stripped.u"
-+ if test "$libtool" = yes; then
-+ "$@" -Wc,-M
-+ else
-+ "$@" -M
-+ fi
-+ stat=$?
-+
-+ if test -f "$tmpdepfile"; then :
-+ else
-+ stripped=`echo "$stripped" | sed 's,^.*/,,'`
-+ tmpdepfile="$stripped.u"
-+ fi
-+
-+ if test $stat -eq 0; then :
-+ else
-+ rm -f "$tmpdepfile"
-+ exit $stat
-+ fi
-+
-+ if test -f "$tmpdepfile"; then
-+ outname="$stripped.o"
-+ # Each line is of the form `foo.o: dependent.h'.
-+ # Do two passes, one to just change these to
-+ # `$object: dependent.h' and one to simply `dependent.h:'.
-+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
-+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
-+ else
-+ # The sourcefile does not contain any dependencies, so just
-+ # store a dummy comment line, to avoid errors with the Makefile
-+ # "include basename.Plo" scheme.
-+ echo "#dummy" > "$depfile"
-+ fi
-+ rm -f "$tmpdepfile"
-+ ;;
-+
-+icc)
-+ # Intel's C compiler understands `-MD -MF file'. However on
-+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-+ # ICC 7.0 will fill foo.d with something like
-+ # foo.o: sub/foo.c
-+ # foo.o: sub/foo.h
-+ # which is wrong. We want:
-+ # sub/foo.o: sub/foo.c
-+ # sub/foo.o: sub/foo.h
-+ # sub/foo.c:
-+ # sub/foo.h:
-+ # ICC 7.1 will output
-+ # foo.o: sub/foo.c sub/foo.h
-+ # and will wrap long lines using \ :
-+ # foo.o: sub/foo.c ... \
-+ # sub/foo.h ... \
-+ # ...
-+
-+ "$@" -MD -MF "$tmpdepfile"
-+ stat=$?
-+ if test $stat -eq 0; then :
-+ else
-+ rm -f "$tmpdepfile"
-+ exit $stat
-+ fi
-+ rm -f "$depfile"
-+ # Each line is of the form `foo.o: dependent.h',
-+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
-+ # Do two passes, one to just change these to
-+ # `$object: dependent.h' and one to simply `dependent.h:'.
-+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-+ # Some versions of the HPUX 10.20 sed can't process this invocation
-+ # correctly. Breaking it into two sed invocations is a workaround.
-+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-+ sed -e 's/$/ :/' >> "$depfile"
-+ rm -f "$tmpdepfile"
-+ ;;
-+
-+tru64)
-+ # The Tru64 compiler uses -MD to generate dependencies as a side
-+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-+ # dependencies in `foo.d' instead, so we check for that too.
-+ # Subdirectories are respected.
-+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-+ test "x$dir" = "x$object" && dir=
-+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-+
-+ if test "$libtool" = yes; then
-+ # With Tru64 cc, shared objects can also be used to make a
-+ # static library. This mecanism is used in libtool 1.4 series to
-+ # handle both shared and static libraries in a single compilation.
-+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-+ #
-+ # With libtool 1.5 this exception was removed, and libtool now
-+ # generates 2 separate objects for the 2 libraries. These two
-+ # compilations output dependencies in in $dir.libs/$base.o.d and
-+ # in $dir$base.o.d. We have to check for both files, because
-+ # one of the two compilations can be disabled. We should prefer
-+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-+ # automatically cleaned when .libs/ is deleted, while ignoring
-+ # the former would cause a distcleancheck panic.
-+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
-+ tmpdepfile2=$dir$base.o.d # libtool 1.5
-+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
-+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
-+ "$@" -Wc,-MD
-+ else
-+ tmpdepfile1=$dir$base.o.d
-+ tmpdepfile2=$dir$base.d
-+ tmpdepfile3=$dir$base.d
-+ tmpdepfile4=$dir$base.d
-+ "$@" -MD
-+ fi
-+
-+ stat=$?
-+ if test $stat -eq 0; then :
-+ else
-+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-+ exit $stat
-+ fi
-+
-+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-+ do
-+ test -f "$tmpdepfile" && break
-+ done
-+ if test -f "$tmpdepfile"; then
-+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-+ # That's a tab and a space in the [].
-+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-+ else
-+ echo "#dummy" > "$depfile"
-+ fi
-+ rm -f "$tmpdepfile"
-+ ;;
-+
-+#nosideeffect)
-+ # This comment above is used by automake to tell side-effect
-+ # dependency tracking mechanisms from slower ones.
-+
-+dashmstdout)
-+ # Important note: in order to support this mode, a compiler *must*
-+ # always write the preprocessed file to stdout, regardless of -o.
-+ "$@" || exit $?
-+
-+ # Remove the call to Libtool.
-+ if test "$libtool" = yes; then
-+ while test $1 != '--mode=compile'; do
-+ shift
-+ done
-+ shift
-+ fi
-+
-+ # Remove `-o $object'.
-+ IFS=" "
-+ for arg
-+ do
-+ case $arg in
-+ -o)
-+ shift
-+ ;;
-+ $object)
-+ shift
-+ ;;
-+ *)
-+ set fnord "$@" "$arg"
-+ shift # fnord
-+ shift # $arg
-+ ;;
-+ esac
-+ done
-+
-+ test -z "$dashmflag" && dashmflag=-M
-+ # Require at least two characters before searching for `:'
-+ # in the target name. This is to cope with DOS-style filenames:
-+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
-+ "$@" $dashmflag |
-+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
-+ rm -f "$depfile"
-+ cat < "$tmpdepfile" > "$depfile"
-+ tr ' ' '
-+' < "$tmpdepfile" | \
-+## Some versions of the HPUX 10.20 sed can't process this invocation
-+## correctly. Breaking it into two sed invocations is a workaround.
-+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-+ rm -f "$tmpdepfile"
-+ ;;
-+
-+dashXmstdout)
-+ # This case only exists to satisfy depend.m4. It is never actually
-+ # run, as this mode is specially recognized in the preamble.
-+ exit 1
-+ ;;
-+
-+makedepend)
-+ "$@" || exit $?
-+ # Remove any Libtool call
-+ if test "$libtool" = yes; then
-+ while test $1 != '--mode=compile'; do
-+ shift
-+ done
-+ shift
-+ fi
-+ # X makedepend
-+ shift
-+ cleared=no
-+ for arg in "$@"; do
-+ case $cleared in
-+ no)
-+ set ""; shift
-+ cleared=yes ;;
-+ esac
-+ case "$arg" in
-+ -D*|-I*)
-+ set fnord "$@" "$arg"; shift ;;
-+ # Strip any option that makedepend may not understand. Remove
-+ # the object too, otherwise makedepend will parse it as a source file.
-+ -*|$object)
-+ ;;
-+ *)
-+ set fnord "$@" "$arg"; shift ;;
-+ esac
-+ done
-+ obj_suffix="`echo $object | sed 's/^.*\././'`"
-+ touch "$tmpdepfile"
-+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
-+ rm -f "$depfile"
-+ cat < "$tmpdepfile" > "$depfile"
-+ sed '1,2d' "$tmpdepfile" | tr ' ' '
-+' | \
-+## Some versions of the HPUX 10.20 sed can't process this invocation
-+## correctly. Breaking it into two sed invocations is a workaround.
-+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-+ rm -f "$tmpdepfile" "$tmpdepfile".bak
-+ ;;
-+
-+cpp)
-+ # Important note: in order to support this mode, a compiler *must*
-+ # always write the preprocessed file to stdout.
-+ "$@" || exit $?
-+
-+ # Remove the call to Libtool.
-+ if test "$libtool" = yes; then
-+ while test $1 != '--mode=compile'; do
-+ shift
-+ done
-+ shift
-+ fi
-+
-+ # Remove `-o $object'.
-+ IFS=" "
-+ for arg
-+ do
-+ case $arg in
-+ -o)
-+ shift
-+ ;;
-+ $object)
-+ shift
-+ ;;
-+ *)
-+ set fnord "$@" "$arg"
-+ shift # fnord
-+ shift # $arg
-+ ;;
-+ esac
-+ done
-+
-+ "$@" -E |
-+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-+ sed '$ s: \\$::' > "$tmpdepfile"
-+ rm -f "$depfile"
-+ echo "$object : \\" > "$depfile"
-+ cat < "$tmpdepfile" >> "$depfile"
-+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
-+ rm -f "$tmpdepfile"
-+ ;;
-+
-+msvisualcpp)
-+ # Important note: in order to support this mode, a compiler *must*
-+ # always write the preprocessed file to stdout, regardless of -o,
-+ # because we must use -o when running libtool.
-+ "$@" || exit $?
-+ IFS=" "
-+ for arg
-+ do
-+ case "$arg" in
-+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-+ set fnord "$@"
-+ shift
-+ shift
-+ ;;
-+ *)
-+ set fnord "$@" "$arg"
-+ shift
-+ shift
-+ ;;
-+ esac
-+ done
-+ "$@" -E |
-+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
-+ rm -f "$depfile"
-+ echo "$object : \\" > "$depfile"
-+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
-+ echo " " >> "$depfile"
-+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
-+ rm -f "$tmpdepfile"
-+ ;;
-+
-+none)
-+ exec "$@"
-+ ;;
-+
-+*)
-+ echo "Unknown depmode $depmode" 1>&2
-+ exit 1
-+ ;;
-+esac
-+
-+exit 0
-+
-+# Local Variables:
-+# mode: shell-script
-+# sh-indentation: 2
-+# eval: (add-hook 'write-file-hooks 'time-stamp)
-+# time-stamp-start: "scriptversion="
-+# time-stamp-format: "%:y-%02m-%02d.%02H"
-+# time-stamp-end: "$"
-+# End:
-diff -Naur dbus-0.61.orig/doc/Makefile.am dbus-0.61/doc/Makefile.am
---- dbus-0.61.orig/doc/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/Makefile.am 2005-08-18 06:04:57.000000000 +0200
-@@ -0,0 +1,38 @@
-+EXTRA_DIST= \
-+ busconfig.dtd \
-+ introspect.dtd \
-+ dbus-faq.xml \
-+ dbus-specification.xml \
-+ dbus-test-plan.xml \
-+ dbus-tutorial.xml \
-+ dcop-howto.txt \
-+ file-boilerplate.c \
-+ introspect.xsl
-+
-+HTML_FILES= \
-+ dbus-faq.html \
-+ dbus-specification.html \
-+ dbus-test-plan.html \
-+ dbus-tutorial.html
-+
-+if DBUS_XML_DOCS_ENABLED
-+all-local: $(HTML_FILES)
-+
-+EXTRA_DIST += $(HTML_FILES)
-+
-+dbus-specification.html: dbus-specification.xml
-+ $(XMLTO) html-nochunks $<
-+
-+dbus-test-plan.html: dbus-test-plan.xml
-+ $(XMLTO) html-nochunks $<
-+
-+dbus-tutorial.html: dbus-tutorial.xml
-+ $(XMLTO) html-nochunks $<
-+
-+dbus-faq.html: dbus-faq.xml
-+ $(XMLTO) html-nochunks $<
-+
-+endif
-+
-+maintainer-clean-local:
-+ rm -f $(HTML_FILES)
-diff -Naur dbus-0.61.orig/doc/Makefile.in dbus-0.61/doc/Makefile.in
---- dbus-0.61.orig/doc/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/Makefile.in 2006-02-27 22:34:30.000000000 +0100
-@@ -0,0 +1,498 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+ at DBUS_XML_DOCS_ENABLED_TRUE@am__append_1 = $(HTML_FILES)
-+subdir = doc
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+SOURCES =
-+DIST_SOURCES =
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+EXTRA_DIST = busconfig.dtd introspect.dtd dbus-faq.xml \
-+ dbus-specification.xml dbus-test-plan.xml dbus-tutorial.xml \
-+ dcop-howto.txt file-boilerplate.c introspect.xsl \
-+ $(am__append_1)
-+HTML_FILES = \
-+ dbus-faq.html \
-+ dbus-specification.html \
-+ dbus-test-plan.html \
-+ dbus-tutorial.html
-+
-+all: all-am
-+
-+.SUFFIXES:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu doc/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+tags: TAGS
-+TAGS:
-+
-+ctags: CTAGS
-+CTAGS:
-+
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-am
-+ at DBUS_XML_DOCS_ENABLED_FALSE@all-local:
-+all-am: Makefile all-local
-+installdirs:
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-libtool
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic \
-+ maintainer-clean-local
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+.PHONY: all all-am all-local check check-am clean clean-generic \
-+ clean-libtool distclean distclean-generic distclean-libtool \
-+ distdir dvi dvi-am html html-am info info-am install \
-+ install-am install-data install-data-am install-exec \
-+ install-exec-am install-info install-info-am install-man \
-+ install-strip installcheck installcheck-am installdirs \
-+ maintainer-clean maintainer-clean-generic \
-+ maintainer-clean-local mostlyclean mostlyclean-generic \
-+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
-+ uninstall-info-am
-+
-+
-+ at DBUS_XML_DOCS_ENABLED_TRUE@all-local: $(HTML_FILES)
-+
-+ at DBUS_XML_DOCS_ENABLED_TRUE@dbus-specification.html: dbus-specification.xml
-+ at DBUS_XML_DOCS_ENABLED_TRUE@ $(XMLTO) html-nochunks $<
-+
-+ at DBUS_XML_DOCS_ENABLED_TRUE@dbus-test-plan.html: dbus-test-plan.xml
-+ at DBUS_XML_DOCS_ENABLED_TRUE@ $(XMLTO) html-nochunks $<
-+
-+ at DBUS_XML_DOCS_ENABLED_TRUE@dbus-tutorial.html: dbus-tutorial.xml
-+ at DBUS_XML_DOCS_ENABLED_TRUE@ $(XMLTO) html-nochunks $<
-+
-+ at DBUS_XML_DOCS_ENABLED_TRUE@dbus-faq.html: dbus-faq.xml
-+ at DBUS_XML_DOCS_ENABLED_TRUE@ $(XMLTO) html-nochunks $<
-+
-+maintainer-clean-local:
-+ rm -f $(HTML_FILES)
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/doc/TODO dbus-0.61/doc/TODO
---- dbus-0.61.orig/doc/TODO 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/TODO 2006-02-15 17:38:11.000000000 +0100
-@@ -0,0 +1,156 @@
-+Important for 1.0
-+===
-+
-+ - add a new return code from dbus_connection_dispatch() called
-+ IN_PROGRESS or RECURSED or something, indicating that DATA_REMAINS
-+ but another dispatch is in progress, so we can't dispatch at
-+ this time. Fixes the recursive deadlock. See the @todo for more
-+ and this thread: http://lists.freedesktop.org/archives/dbus/2006-February/004128.html
-+
-+
-+ - Remove all deprecated functions
-+
-+ - Audit @todo and FIXME for security issues
-+
-+ - the "break loader" and valid/invalid message tests are all disabled;
-+ they need to be fixed and re-enabled with the new message args stuff.
-+ I think I want to drop the .message files thing and just have code
-+ that generates messages, more like the tests for
-+ dbus-marshal-recursive.c (this is mostly done now, just needs some
-+ cleanup)
-+
-+ - just before 1.0, try a HAVE_INT64=0 build and be sure it runs
-+
-+ - dbus-pending-call.c has some API and thread safety issues to review
-+
-+ - Add test harness for selinux allow/deny cf. this message
-+ http://lists.freedesktop.org/archives/dbus/2005-April/002506.html
-+
-+ - publish the introspection dtd at its URL
-+
-+ - RequestName flags seem a bit strange; see the docs for dbus_bus_request_name()
-+ and think about use cases in better detail.
-+ Proposal on list:
-+ http://lists.freedesktop.org/archives/dbus/2005-August/003207.html
-+
-+ Kind of a major API change, but seems high-value.
-+
-+Important for 1.0 GLib Bindings
-+===
-+
-+ - Test point-to-point mode
-+
-+ - Add support for getting sender
-+
-+ - format_version in the object info doesn't look like it's handled correctly. The creator
-+ of the object info should specify some fixed number per struct version; the library
-+ should handle only specific numbers it knows about. There's no assumption that all
-+ numbers >= the given one are compatible. The idea is that new versions of the lib
-+ can offer totally different object info structs, but old versions
-+ keep working.
-+
-+Important for 1.0 Python bindings
-+===
-+
-+ - Hammer down API
-+
-+ - Fix removing of signals from the match tree
-+
-+ - Fix refcounting and userdata lifecycles
-+
-+ - Write a generic mainloop
-+
-+Might as Well for 1.0
-+===
-+
-+ - protocol version in each message is pretty silly
-+
-+Can Be Post 1.0
-+===
-+
-+ - if the GUID is obtained only during authentication, not in the address,
-+ we could still share the connection
-+
-+ - Allow a dbus_g_proxy_to_string()/g_object_to_string() that
-+ would convert the proxy to an "IOR" and dbus_g_proxy_from_string()
-+ that would decode; using these, dbus-glib users could avoid
-+ DBusConnection entirely. Of course the same applies to other kinds
-+ of binding. This would use dbus_connection_open()'s connection-sharing
-+ feature to avoid massive proliferation of connections.
-+
-+ - DBusWatchList/TimeoutList duplicate a lot of code, as do
-+ protected_change_watch/protected_change_timeout in dbus-connection.c
-+ and dbus-server.c. This could all be mopped up, cut-and-paste
-+ fixed, code size reduced.
-+
-+ - change .service files to allow Names=list in addition to Name=string
-+
-+ - The message bus internal code still says "service" for
-+ "name", "base service" for "unique name", "activate" for
-+ "start"; would be nice to clean up.
-+
-+ - Property list feature on message bus (list of properties associated
-+ with a connection). May also include message matching rules
-+ that involve the properties of the source or destination
-+ connection.
-+
-+ - Disconnecting the remote end on invalid UTF-8 is probably not a good
-+ idea. The definition of "valid" is slightly fuzzy. I think it might
-+ be better to just silently "fix" the UTF-8, or perhaps return an error.
-+
-+ - build and install the Doxygen manual in Makefile when --enable-docs
-+
-+ - if you send the same message to multiple connections, the serial number
-+ will only be right for one of them. Probably need to just write() the serial
-+ number, rather than putting it in the DBusMessage, or something.
-+
-+ - perhaps the bus driver should have properties that reflect attributes
-+ of the session, such as hostname, architecture, operating system,
-+ etc. Could be useful for code that wants to special-case behavior
-+ for a particular host or class of hosts, for example.
-+
-+ - currently the security policy stuff for messages to/from
-+ the bus driver is kind of strange; basically it's hardcoded that
-+ you can always talk to the driver, but the default config file
-+ has rules for it anyway, or something. it's conceptually
-+ screwy at the moment.
-+
-+ - when making a method call, if the call serial were globally unique,
-+ we could forward the call serial along with any method calls made
-+ as a result of the first method call, and allow reentrancy that was
-+ strictly part of the call stack of said method call. But I don't
-+ really see how to do this without making the user pass around the
-+ call serial to all method calls all the time, or disallowing
-+ async calls.
-+
-+ If done post 1.0 will probably be an optional/ugly-API type
-+ of thing.
-+
-+ - I don't want to introduce DBusObject, but refcounting and object
-+ data could still be factored out into an internal "base class"
-+ perhaps.
-+
-+ - Keep convenience wrappers in sync with bus methods
-+
-+ - document the auth protocol as a set of states and transitions, and
-+ then reimplement it in those terms
-+
-+ - recursive dispatch, see dbus_connection_dispatch()
-+
-+ - do we need per-display activation; if so I'd like to do this by setting a
-+ "display ID" property on screen 0, with a GUID, and keying activation by
-+ said GUID. Otherwise you get all kinds of unrobust
-+ string/hostname-based mess. per-screen is then done by appending screen number
-+ to the display. If displays have a deterministic ID like this, you can
-+ do per-display by simply including GUID in the service name.
-+
-+ - optimization and profiling!
-+
-+ - Match rules aren't in the spec (probably a lot of methods on the bus
-+ are not)
-+
-+Should Be Post 1.0
-+===
-+
-+ - look into supporting the concept of a "connection" generically
-+
-diff -Naur dbus-0.61.orig/doc/busconfig.dtd dbus-0.61/doc/busconfig.dtd
---- dbus-0.61.orig/doc/busconfig.dtd 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/busconfig.dtd 2004-10-18 06:04:12.000000000 +0200
-@@ -0,0 +1,61 @@
-+<!ELEMENT busconfig (user |
-+ type |
-+ fork |
-+ listen |
-+ pidfile |
-+ includedir |
-+ servicedir |
-+ auth |
-+ include |
-+ policy |
-+ limit |
-+ selinux)*>
-+
-+<!ELEMENT user (#PCDATA)>
-+<!ELEMENT listen (#PCDATA)>
-+<!ELEMENT includedir (#PCDATA)>
-+<!ELEMENT servicedir (#PCDATA)>
-+<!ELEMENT auth (#PCDATA)>
-+<!ELEMENT type (#PCDATA)>
-+<!ELEMENT pidfile (#PCDATA)>
-+<!ELEMENT fork EMPTY>
-+
-+<!ELEMENT include (#PCDATA)>
-+<!ATTLIST include
-+ ignore_missing (yes|no) "no"
-+ if_selinux_enabled (yes|no) "no"
-+ selinux_root_relative (yes|no) "no">
-+
-+<!ELEMENT policy (allow|deny)*>
-+<!ATTLIST policy
-+ context (default|mandatory) #IMPLIED
-+ user CDATA #IMPLIED
-+ group CDATA #IMPLIED
-+ at_console (yes|no) #IMPLIED>
-+
-+<!ELEMENT allow EMPTY>
-+<!ATTLIST allow
-+ user CDATA #IMPLIED
-+ send CDATA #IMPLIED
-+ receive CDATA #IMPLIED
-+ own CDATA #IMPLIED
-+ send_to CDATA #IMPLIED
-+ receive_from CDATA #IMPLIED>
-+
-+<!ELEMENT deny EMPTY>
-+<!ATTLIST deny
-+ user CDATA #IMPLIED
-+ send CDATA #IMPLIED
-+ receive CDATA #IMPLIED
-+ own CDATA #IMPLIED
-+ send_to CDATA #IMPLIED
-+ receive_from CDATA #IMPLIED>
-+
-+<!ELEMENT limit (#PCDATA)>
-+<!ATTLIST limit name CDATA #REQUIRED>
-+
-+<!ELEMENT selinux (associate)*>
-+<!ELEMENT associate EMPTY>
-+<!ATTLIST associate
-+ own CDATA #REQUIRED
-+ context CDATA #REQUIRED>
-diff -Naur dbus-0.61.orig/doc/dbus-faq.html dbus-0.61/doc/dbus-faq.html
---- dbus-0.61.orig/doc/dbus-faq.html 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dbus-faq.html 2006-02-24 16:50:17.000000000 +0100
-@@ -0,0 +1,417 @@
-+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>D-BUS FAQ</title><meta name="generator" content="DocBook XSL Stylesheets V1.69.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="index"></a>D-BUS FAQ</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">Havoc</span> <span class="surname">Pennington</span></h3><div class="affiliation"><span class="orgname">Red Hat, Inc.<br></span><div class="address"><p><br>
-+ <code class="email"><<a href="mailto:hp at pobox.com">hp at pobox.com</a>></code><br>
-+ </p></div></div></div><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="othername">A</span> <span class="surname">Wheeler</span></h3></div></div></div><div><p class="releaseinfo">Version 0.1</p></div></div><hr></div><div class="qandaset"><dl><dt>1. <a href="#id2546029">
-+ What is D-BUS?
-+ </a></dt><dt>2. <a href="#id2576718">
-+ Is D-BUS stable/finished?
-+ </a></dt><dt>3. <a href="#id2576748">
-+ How is the reference implementation licensed? Can I use it in
-+ proprietary applications?
-+ </a></dt><dt>4. <a href="#id2541253">
-+ What is the difference between a bus name, and object path,
-+ and an interface?
-+ </a></dt><dt>5. <a href="#service">
-+ What is a "service"?
-+ </a></dt><dt>6. <a href="#components">
-+ Is D-BUS a "component system"?
-+ </a></dt><dt>7. <a href="#speed">
-+ How fast is the D-BUS reference implementation?
-+ </a></dt><dt>8. <a href="#size">
-+ How large is the D-BUS reference implementation?
-+ </a></dt><dt>9. <a href="#other-ipc">
-+ How does D-BUS differ from other interprocess communication
-+ or networking protocols?
-+ </a></dt><dt>10. <a href="#corba">
-+ How does D-BUS differ from CORBA?
-+ </a></dt><dt>11. <a href="#xmlrpcsoap">
-+ How does D-BUS differ from XML-RPC and SOAP?
-+ </a></dt><dt>12. <a href="#dce">
-+ How does D-BUS differ from DCE?
-+ </a></dt><dt>13. <a href="#dcom">
-+ How does D-BUS differ from DCOM and COM?
-+ </a></dt><dt>14. <a href="#internet-communications-engine">
-+ How does D-BUS differ from ZeroC's Internet Communications Engine (Ice)
-+ </a></dt><dt>15. <a href="#inter-client-exchange">
-+ How does D-BUS differ from Inter-Client Exchange (ICE)?
-+ </a></dt><dt>16. <a href="#dcop">
-+ How does D-BUS differ from DCOP?
-+ </a></dt><dt>17. <a href="#yet-more-ipc">
-+ How does D-BUS differ from [yet more IPC mechanisms]?
-+ </a></dt><dt>18. <a href="#which-ipc">
-+ Which IPC mechanism should I use?
-+ </a></dt><dt>19. <a href="#id2585947">
-+ How can I submit a bug or patch?
-+ </a></dt></dl><table border="0" summary="Q and A Set"><col align="left" width="1%"><tbody><tr class="question"><td align="left" valign="top"><a name="id2546029"></a><a name="id2546032"></a><b>1.</b></td><td align="left" valign="top"><p>
-+ What is D-BUS?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ This is probably best answered by reading the D-BUS <a href="dbus-tutorial.html" target="_top">tutorial</a>. In
-+ short, it is a system consisting of 1) a wire protocol for exposing a
-+ typical object-oriented language/framework to other applications; and
-+ 2) a bus daemon that allows applications to find and monitor one another.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576718"></a><a name="id2576720"></a><b>2.</b></td><td align="left" valign="top"><p>
-+ Is D-BUS stable/finished?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ D-BUS has not yet reached 1.0. The <a href="README" target="_top">README</a>
-+ file has a discussion of the API/ABI stability guarantees before and
-+ after 1.0. In short, there are no guarantees before 1.0, and stability
-+ of both protocol and reference library will be maintained after 1.0.
-+ As of January 2005 we don't expect major protocol or API changes prior
-+ to the 1.0 release, but anything is possible.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2576748"></a><a name="id2576750"></a><b>3.</b></td><td align="left" valign="top"><p>
-+ How is the reference implementation licensed? Can I use it in
-+ proprietary applications?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ The short answer is yes, you can use it in proprietary applications.
-+ You should read the <a href="COPYING" target="_top">COPYING</a> file, which
-+ offers you the choice of two licenses. These are the GPL and the
-+ AFL. The GPL requires that your application be licensed under the GPL
-+ as well. The AFL is an "X-style" or "BSD-style" license compatible
-+ with proprietary licensing, but it does have some requirements; in
-+ particular it prohibits you from filing a lawsuit alleging that the
-+ D-BUS software infringes your patents <span class="emphasis"><em>while you continue to
-+ use D-BUS</em></span>. If you're going to sue, you have to stop using
-+ the software. Read the licenses to determine their meaning, this FAQ
-+ entry is not intended to change the meaning or terms of the licenses.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2541253"></a><a name="id2541256"></a><b>4.</b></td><td align="left" valign="top"><p>
-+ What is the difference between a bus name, and object path,
-+ and an interface?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ If you imagine a C++ program that implements a network service, then
-+ the bus name is the hostname of the computer running this C++ program,
-+ the object path is a C++ object instance pointer, and an interface is
-+ a C++ class (a pure virtual or abstract class, to be exact).
-+ </p><p>
-+ In Java terms, the object path is an object reference,
-+ and an interface is a Java interface.
-+ </p><p>
-+ People get confused because if they write an application
-+ with a single object instance and a single interface,
-+ then the bus name, object path, and interface look
-+ redundant. For example, you might have a text editor
-+ that uses the bus name <code class="literal">org.freedesktop.TextEditor</code>,
-+ has a global singleton object called
-+ <code class="literal">/org/freedesktop/TextEditor</code>, and
-+ that singleton object could implement the interface
-+ <code class="literal">org.freedesktop.TextEditor</code>.
-+ </p><p>
-+ However, a text editor application could as easily own multiple bus
-+ names (for example, <code class="literal">org.kde.KWrite</code> in addition to
-+ generic <code class="literal">TextEditor</code>), have multiple objects (maybe
-+ <code class="literal">/org/kde/documents/4352</code> where the number changes
-+ according to the document), and each object could implement multiple
-+ interfaces, such as <code class="literal">org.freedesktop.DBus.Introspectable</code>,
-+ <code class="literal">org.freedesktop.BasicTextField</code>,
-+ <code class="literal">org.kde.RichTextDocument</code>.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="service"></a><a name="id2541360"></a><b>5.</b></td><td align="left" valign="top"><p>
-+ What is a "service"?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ A service is a program that can be launched by the bus daemon
-+ to provide some functionality to other programs. Services
-+ are normally launched according to the bus name they will
-+ have.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="components"></a><a name="id2541385"></a><b>6.</b></td><td align="left" valign="top"><p>
-+ Is D-BUS a "component system"?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ D-BUS is not a component system. "Component system" was originally
-+ defined by COM, and was essentially a workaround for the limitations
-+ of the C++ object system (adding introspection, runtime location of
-+ objects, ABI guarantees, and so forth). With the C# language and CLR,
-+ Microsoft added these features to the primary object system, leaving
-+ COM obsolete. Similarly, Java has much less need for something like
-+ COM than C++ did. Even QObject (from Qt) and GObject (from GLib) offer
-+ some of the same features found in COM.
-+ </p><p>
-+ Component systems are not about GUI control embedding. Embedding
-+ a spreadsheet in a word processor document is a matter of defining
-+ some specific <span class="emphasis"><em>interfaces</em></span> that objects
-+ can implement. These interfaces provide methods related to
-+ GUI controls. So an object implementing those interfaces
-+ can be embedded.
-+ </p><p>
-+ The word "component" just means "object with some fancy features" and
-+ in modern languages all objects are effectively "components."
-+ </p><p>
-+ A third, orthogonal feature is interprocess communication or IPC.
-+ D-BUS is an IPC system. Given an object (or "component" if you must),
-+ you can expose the functionality of that object over an IPC system.
-+ Examples of IPC systems are DCOM, CORBA, SOAP, XML-RPC, and D-BUS.
-+ You can use any of these IPC systems with any object/component system,
-+ though some of them are "tuned" for specific object systems.
-+ You can think of an IPC system primarily as a wire protocol.
-+ </p><p>
-+ If you combine an IPC system with a set of GUI control interfaces,
-+ then you can have an out-of-process or dynamically-loaded GUI control.
-+ </p><p>
-+ Summarizing, there are three orthogonal things:
-+ </p><div class="orderedlist"><ol type="1"><li><p>
-+ Object/component system
-+ </p></li><li><p>
-+ Control embedding interfaces
-+ </p></li><li><p>
-+ Interprocess communication system or wire protocol
-+ </p></li></ol></div><p>
-+ </p><p>
-+ Another related concept is the <em class="firstterm">plugin</em> or
-+ <em class="firstterm">extension</em>. Generic plugin systems such as the
-+ <a href="http://eclipse.org" target="_top">Eclipse</a> system are not so different
-+ from component/object systems, though perhaps a "plugin" tends to be a
-+ bundle of objects with a user-visible name and can be
-+ downloaded/packaged as a unit.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="speed"></a><a name="id2541511"></a><b>7.</b></td><td align="left" valign="top"><p>
-+ How fast is the D-BUS reference implementation?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Of course it depends a bit on what you're doing.
-+ <a href="http://lists.freedesktop.org/pipermail/dbus/2004-November/001779.html" target="_top">
-+ This mail</a> contains some benchmarking. At the time of that
-+ benchmark, D-BUS one-to-one communication was about 2.5x slower than
-+ simply pushing the data raw over a socket. After the recent rewrite of
-+ the marshaling code, D-BUS is slower than that because a lot of
-+ optimization work was lost. But it can probably be sped up again.
-+ </p><p>
-+ D-BUS communication with the intermediate bus daemon should be
-+ (and as last profiled, was) about twice as slow as one-to-one
-+ mode, because a round trip involves four socket reads/writes rather
-+ than two socket reads/writes.
-+ </p><p>
-+ The overhead comes from a couple of places; part of it is simply
-+ "abstraction penalty" (there are layers of code to support
-+ multiple main loops, multiple transport types, security, etc.).
-+ Probably the largest part comes from data validation
-+ (because the reference implementation does not trust incoming data).
-+ It would be simple to add a "no validation" mode, but probably
-+ not a good idea all things considered.
-+ </p><p>
-+ Raw bandwidth isn't the only concern; D-BUS is designed to
-+ enable asynchronous communication and avoid round trips.
-+ This is frequently a more important performance issue
-+ than throughput.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="size"></a><a name="id2545332"></a><b>8.</b></td><td align="left" valign="top"><p>
-+ How large is the D-BUS reference implementation?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ A production build (with assertions, unit tests, and verbose logging
-+ disabled) is on the order of a 150K shared library.
-+ </p><p>
-+ A much, much smaller implementation would be possible by omitting out
-+ of memory handling, hardcoding a main loop (or always using blocking
-+ I/O), skipping validation, and otherwise simplifying things.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="other-ipc"></a><a name="id2545362"></a><b>9.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from other interprocess communication
-+ or networking protocols?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ The best place to start is to read the D-BUS <a href="dbus-tutorial.html" target="_top">tutorial</a>, so
-+ you have a concrete idea what D-BUS actually is. If you
-+ understand other protocols on a wire format level, you
-+ may also want to read the D-BUS <a href="dbus-specification.html" target="_top">specification</a> to see what
-+ D-BUS looks like on a low level.
-+ </p><p>
-+ As the <a href="dbus-tutorial.html" target="_top">tutorial</a> and <a href="dbus-specification.html" target="_top">specification</a> both explain, D-BUS is tuned
-+ for some specific use cases. Thus, it probably isn't tuned
-+ for what you want to do, unless you are doing the things
-+ D-BUS was designed for. Don't make the mistake of thinking
-+ that any system labeled "IPC" is the same thing.
-+ </p><p>
-+ The D-BUS authors would not recommend using D-BUS
-+ for applications where it doesn't make sense.
-+ The following questions compare D-BUS to some other
-+ protocols primarily to help you understand D-BUS
-+ and decide whether it's appropriate; D-BUS is neither intended
-+ nor claimed to be the right choice for every application.
-+ </p><p>
-+ It should be possible to bridge D-BUS to other IPC systems,
-+ just as D-BUS can be bridged to object systems.
-+ </p><p>
-+ Note: the D-BUS mailing list subscribers are <span class="emphasis"><em>very much not
-+ interested</em></span> in debating which IPC system is the One True
-+ System. So if you want to discuss that, please use another forum.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="corba"></a><a name="id2545448"></a><b>10.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from CORBA?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Start by reading <a href="#other-ipc">Q: 9</a>.
-+ </p><p>
-+ <a href="http://www.omg.org" target="_top">CORBA</a> is designed to support
-+ object-oriented IPC between objects, automatically marshalling
-+ parameters as necessary. CORBA is strongly supported by the <a href="http://www.omg.org" target="_top">Open Management Group (OMG)</a>, which
-+ produces various standards and supporting documents for CORBA and has
-+ the backing of many large organizations. There are many CORBA ORBs
-+ available, both proprietary ORBs and free / open source software ORBs
-+ (the latter include <a href="http://orbit-resource.sourceforge.net/" target="_top">ORBit</a>, <a href="http://www.mico.org/" target="_top">MICO</a>, and <a href="http://www.theaceorb.com/" target="_top">The ACE Orb (TAO)</a>). Many
-+ organizations continue to use CORBA ORBs for various kinds of IPC.
-+ </p><p>
-+ Both GNOME and KDE have used CORBA and then moved away from it. KDE
-+ had more success with a system called DCOP, and GNOME layered a system
-+ called Bonobo on top of CORBA. Without custom extensions, CORBA does
-+ not support many of the things one wants to do in a desktop
-+ environment with the GNOME/KDE architecture.
-+ </p><p>
-+ CORBA on the other hand has a number of features of interest for
-+ enterprise and web application development, though XML systems such as
-+ SOAP are the latest fad.
-+ </p><p>
-+ Like D-BUS, CORBA uses a fast binary protocol (IIOP). Both systems
-+ work in terms of objects and methods, and have concepts such as
-+ "oneway" calls. Only D-BUS has direct support for "signals" as in
-+ GLib/Qt (or Java listeners, or C# delegates).
-+ </p><p>
-+ D-BUS hardcodes and specifies a lot of things that CORBA leaves open-ended,
-+ because CORBA is more generic and D-BUS has two specific use-cases in mind.
-+ This makes D-BUS a bit simpler.
-+ </p><p>
-+ However, unlike CORBA D-BUS does <span class="emphasis"><em>not</em></span> specify the
-+ API for the language bindings. Instead, "native" bindings adapted
-+ specifically to the conventions of a framework such as QObject,
-+ GObject, C#, Java, Python, etc. are encouraged. The libdbus reference
-+ implementation is designed to be a backend for bindings of this
-+ nature, rather than to be used directly. The rationale is that an IPC
-+ system API should not "leak" all over a program; it should come into
-+ play only just before data goes over the wire. As an aside, OMG is
-+ apparently working on a simpler C++ binding for CORBA.
-+ </p><p>
-+ Many CORBA implementations such as ORBit are faster than the libdbus
-+ reference implementation. One reason is that D-BUS considers data
-+ from the other end of the connection to be untrusted and extensively
-+ validates it. But generally speaking other priorities were placed
-+ ahead of raw speed in the libdbus implementation. A fast D-BUS
-+ implementation along the lines of ORBit should be possible, of course.
-+ </p><p>
-+ On a more trivial note, D-BUS involves substantially fewer acronyms
-+ than CORBA.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="xmlrpcsoap"></a><a name="id2540977"></a><b>11.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from XML-RPC and SOAP?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Start by reading <a href="#other-ipc">Q: 9</a>.
-+ </p><p>
-+ In <a href="http://www.w3.org/TR/SOAP/" target="_top">SOAP</a> and <a href="http://www.xmlrpc.com" target="_top">XML-RPC</a>, RPC calls are transformed
-+ into an XML-based format, then sent over the wire (typically using the
-+ HTTP protocol), where they are processed and returned. XML-RPC is the
-+ simple protocol (its spec is only a page or two), and SOAP is the
-+ full-featured protocol.
-+ </p><p>
-+ XML-RPC and SOAP impose XML parsing overhead that is normally
-+ irrelevant in the context of the Internet, but significant for
-+ constant fine-grained IPC among applications in a desktop session.
-+ </p><p>
-+ D-BUS offers persistent connections and with the bus daemon
-+ supports lifecycle tracking of other applications connected
-+ to the bus. With XML-RPC and SOAP, typically each method call
-+ exists in isolation and has its own HTTP connection.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="dce"></a><a name="id2541039"></a><b>12.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from DCE?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Start by reading <a href="#other-ipc">Q: 9</a>.
-+ </p><p>
-+ <a href="http://www.opengroup.org/dce/" target="_top">Distributed Computing
-+ Environment (DCE)</a> is an industry-standard vendor-neutral
-+ standard that includes an IPC mechanism. <a href="http://www.opengroup.org/comm/press/05-01-12.htm" target="_top">The Open Group
-+ has released an implementation as open source software</a>. DCE
-+ is quite capable, and includes a vast amount of functionality such as
-+ a distributed time service. As the name implies, DCE is intended for
-+ use in a large, multi-computer distributed application. D-BUS would
-+ not be well-suited for this.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="dcom"></a><a name="id2541090"></a><b>13.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from DCOM and COM?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Start by reading <a href="#other-ipc">Q: 9</a>.
-+ </p><p>
-+ Comparing D-BUS to COM is apples and oranges;
-+ see <a href="#components">Q: 6</a>.
-+ </p><p>
-+ DCOM (distributed COM) is a Windows IPC system designed for use with
-+ the COM object system. It's similar in some ways to DCE and CORBA.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="internet-communications-engine"></a><a name="id2585686"></a><b>14.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from ZeroC's Internet Communications Engine (Ice)
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Start by reading <a href="#other-ipc">Q: 9</a>.
-+ </p><p>
-+ The <a href="http://www.zeroc.com/ice.html" target="_top"> Internet
-+ Communications Engine (Ice)</a> is a powerful IPC mechanism more
-+ on the level of SOAP or CORBA than D-BUS. Ice has a "dual-license"
-+ business around it; i.e. you can use it under the GPL, or pay for a
-+ proprietary license.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="inter-client-exchange"></a><a name="id2585728"></a><b>15.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from Inter-Client Exchange (ICE)?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ <a href="http://www.x.org/X11R6.8.1/docs/ICE/ice.pdf" target="_top">ICE</a>
-+ was developed for the X Session Management protocol (XSMP), as part of
-+ the X Window System (X11R6.1). The idea was to allow desktop sessions
-+ to contain nongraphical clients in addition to X clients.
-+ </p><p>
-+ ICE is a binary protocol designed for desktop use, and KDE's DCOP
-+ builds on ICE. ICE is substantially simpler than D-BUS (in contrast
-+ to most of the other IPC systems mentioned here, which are more
-+ complex). ICE doesn't really define a mapping to objects and methods
-+ (DCOP adds that layer). The reference implementation of ICE (libICE)
-+ is often considered to be horrible (and horribly insecure).
-+ </p><p>
-+ DCOP and XSMP are the only two widely-used applications of ICE,
-+ and both could in principle be replaced by D-BUS. (Though whether
-+ GNOME and KDE will bother is an open question.)
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="dcop"></a><a name="id2585777"></a><b>16.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from DCOP?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Start by reading <a href="#other-ipc">Q: 9</a>.
-+ </p><p>
-+ D-BUS is intentionally pretty similar to <a href="http://developer.kde.org/documentation/library/kdeqt/dcop.html" target="_top">DCOP</a>,
-+ and can be thought of as a "DCOP the next generation" suitable for
-+ sharing between the various open source desktop projects.
-+ </p><p>
-+ D-BUS is a bit more complex than DCOP, though the Qt binding for D-BUS
-+ should not be more complex for programmers. The additional complexity
-+ of D-BUS arises from its separation of object references vs. bus names
-+ vs. interfaces as distinct concepts, and its support for one-to-one
-+ connections in addition to connections over the bus. The libdbus
-+ reference implementation has a lot of API to support multiple bindings
-+ and main loops, and performs data validation and out-of-memory handling
-+ in order to support secure applications such as the systemwide bus.
-+ </p><p>
-+ D-BUS is probably somewhat slower than DCOP due to data validation
-+ and more "layers" in the reference implementation. A comparison
-+ hasn't been posted to the list though.
-+ </p><p>
-+ At this time, KDE has not committed to using D-BUS, but there have
-+ been discussions of KDE bridging D-BUS and DCOP, or even changing
-+ DCOP's implementation to use D-BUS internally (so that GNOME and KDE
-+ would end up using exactly the same bus). See the KDE mailing list
-+ archives for some of these discussions.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="yet-more-ipc"></a><a name="id2585848"></a><b>17.</b></td><td align="left" valign="top"><p>
-+ How does D-BUS differ from [yet more IPC mechanisms]?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Start by reading <a href="#other-ipc">Q: 9</a>.
-+ </p><p>
-+ There are countless uses of network sockets in the world. <a href="http://www.mbus.org/" target="_top">MBUS</a>, Sun ONC/RPC, Jabber/XMPP,
-+ SIP, are some we can think of quickly.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="which-ipc"></a><a name="id2585887"></a><b>18.</b></td><td align="left" valign="top"><p>
-+ Which IPC mechanism should I use?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ Start by reading <a href="#other-ipc">Q: 9</a>.
-+ </p><p>
-+ If you're writing an Internet or Intranet application, XML-RPC or SOAP
-+ work for many people. These are standard, available for most
-+ languages, simple to debug and easy to use.
-+ </p><p>
-+ If you're writing a desktop application for UNIX,
-+ then D-BUS is of course our recommendation for
-+ talking to other parts of the desktop session.
-+ (With the caveat that you should use a stable release
-+ of D-BUS; until we reach 1.0, there isn't a stable release.)
-+ </p><p>
-+ If you're doing something complicated such as clustering,
-+ distributed swarms, peer-to-peer, or whatever then
-+ the authors of this FAQ don't have expertise in these
-+ areas and you should ask someone else or try a search engine.
-+ </p><p>
-+ Note: the D-BUS mailing list is probably not the place to
-+ discuss which system is appropriate for your application,
-+ though you are welcome to ask specific questions about
-+ D-BUS <span class="emphasis"><em>after reading this FAQ, the tutorial, and
-+ searching the list archives</em></span>. The best way
-+ to search the list archives is probably to use
-+ an Internet engine such as Google. On Google,
-+ include "site:freedesktop.org" in your search.
-+ </p></td></tr><tr class="question"><td align="left" valign="top"><a name="id2585947"></a><a name="id2585949"></a><b>19.</b></td><td align="left" valign="top"><p>
-+ How can I submit a bug or patch?
-+ </p></td></tr><tr class="answer"><td align="left" valign="top"><b></b></td><td align="left" valign="top"><p>
-+ The D-BUS <a href="http://dbus.freedesktop.org" target="_top">web site</a>
-+ has a link to the bug tracker, which is the best place to store
-+ patches. You can also post them to the list, especially if you want
-+ to discuss the patch or get feedback.
-+ </p></td></tr></tbody></table></div></div></body></html>
-diff -Naur dbus-0.61.orig/doc/dbus-faq.xml dbus-0.61/doc/dbus-faq.xml
---- dbus-0.61.orig/doc/dbus-faq.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dbus-faq.xml 2005-02-17 22:19:49.000000000 +0100
-@@ -0,0 +1,650 @@
-+<?xml version="1.0" standalone="no"?>
-+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
-+[
-+]>
-+
-+<article id="index">
-+ <articleinfo>
-+ <title>D-BUS FAQ</title>
-+ <releaseinfo>Version 0.1</releaseinfo>
-+ <date>22 January 2005</date>
-+ <authorgroup>
-+ <author>
-+ <firstname>Havoc</firstname>
-+ <surname>Pennington</surname>
-+ <affiliation>
-+ <orgname>Red Hat, Inc.</orgname>
-+ <address>
-+ <email>hp at pobox.com</email>
-+ </address>
-+ </affiliation>
-+ </author>
-+ <author>
-+ <firstname>David</firstname>
-+ <othername role="mi">A</othername>
-+ <surname>Wheeler</surname>
-+ </author>
-+ </authorgroup>
-+ </articleinfo>
-+
-+ <qandaset id="faq">
-+
-+ <qandaentry>
-+ <question>
-+ <para>
-+ What is D-BUS?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ This is probably best answered by reading the D-BUS <ulink url="dbus-tutorial.html">tutorial</ulink>. In
-+ short, it is a system consisting of 1) a wire protocol for exposing a
-+ typical object-oriented language/framework to other applications; and
-+ 2) a bus daemon that allows applications to find and monitor one another.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry>
-+ <question>
-+ <para>
-+ Is D-BUS stable/finished?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ D-BUS has not yet reached 1.0. The <ulink url="README">README</ulink>
-+ file has a discussion of the API/ABI stability guarantees before and
-+ after 1.0. In short, there are no guarantees before 1.0, and stability
-+ of both protocol and reference library will be maintained after 1.0.
-+ As of January 2005 we don't expect major protocol or API changes prior
-+ to the 1.0 release, but anything is possible.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry>
-+ <question>
-+ <para>
-+ How is the reference implementation licensed? Can I use it in
-+ proprietary applications?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ The short answer is yes, you can use it in proprietary applications.
-+ You should read the <ulink url="COPYING">COPYING</ulink> file, which
-+ offers you the choice of two licenses. These are the GPL and the
-+ AFL. The GPL requires that your application be licensed under the GPL
-+ as well. The AFL is an "X-style" or "BSD-style" license compatible
-+ with proprietary licensing, but it does have some requirements; in
-+ particular it prohibits you from filing a lawsuit alleging that the
-+ D-BUS software infringes your patents <emphasis>while you continue to
-+ use D-BUS</emphasis>. If you're going to sue, you have to stop using
-+ the software. Read the licenses to determine their meaning, this FAQ
-+ entry is not intended to change the meaning or terms of the licenses.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry>
-+ <question>
-+ <para>
-+ What is the difference between a bus name, and object path,
-+ and an interface?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ If you imagine a C++ program that implements a network service, then
-+ the bus name is the hostname of the computer running this C++ program,
-+ the object path is a C++ object instance pointer, and an interface is
-+ a C++ class (a pure virtual or abstract class, to be exact).
-+ </para>
-+ <para>
-+ In Java terms, the object path is an object reference,
-+ and an interface is a Java interface.
-+ </para>
-+ <para>
-+ People get confused because if they write an application
-+ with a single object instance and a single interface,
-+ then the bus name, object path, and interface look
-+ redundant. For example, you might have a text editor
-+ that uses the bus name <literal>org.freedesktop.TextEditor</literal>,
-+ has a global singleton object called
-+ <literal>/org/freedesktop/TextEditor</literal>, and
-+ that singleton object could implement the interface
-+ <literal>org.freedesktop.TextEditor</literal>.
-+ </para>
-+ <para>
-+ However, a text editor application could as easily own multiple bus
-+ names (for example, <literal>org.kde.KWrite</literal> in addition to
-+ generic <literal>TextEditor</literal>), have multiple objects (maybe
-+ <literal>/org/kde/documents/4352</literal> where the number changes
-+ according to the document), and each object could implement multiple
-+ interfaces, such as <literal>org.freedesktop.DBus.Introspectable</literal>,
-+ <literal>org.freedesktop.BasicTextField</literal>,
-+ <literal>org.kde.RichTextDocument</literal>.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+ <qandaentry id="service">
-+ <question>
-+ <para>
-+ What is a "service"?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ A service is a program that can be launched by the bus daemon
-+ to provide some functionality to other programs. Services
-+ are normally launched according to the bus name they will
-+ have.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry id="components">
-+ <question>
-+ <para>
-+ Is D-BUS a "component system"?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ D-BUS is not a component system. "Component system" was originally
-+ defined by COM, and was essentially a workaround for the limitations
-+ of the C++ object system (adding introspection, runtime location of
-+ objects, ABI guarantees, and so forth). With the C# language and CLR,
-+ Microsoft added these features to the primary object system, leaving
-+ COM obsolete. Similarly, Java has much less need for something like
-+ COM than C++ did. Even QObject (from Qt) and GObject (from GLib) offer
-+ some of the same features found in COM.
-+ </para>
-+ <para>
-+ Component systems are not about GUI control embedding. Embedding
-+ a spreadsheet in a word processor document is a matter of defining
-+ some specific <emphasis>interfaces</emphasis> that objects
-+ can implement. These interfaces provide methods related to
-+ GUI controls. So an object implementing those interfaces
-+ can be embedded.
-+ </para>
-+ <para>
-+ The word "component" just means "object with some fancy features" and
-+ in modern languages all objects are effectively "components."
-+ </para>
-+ <para>
-+ A third, orthogonal feature is interprocess communication or IPC.
-+ D-BUS is an IPC system. Given an object (or "component" if you must),
-+ you can expose the functionality of that object over an IPC system.
-+ Examples of IPC systems are DCOM, CORBA, SOAP, XML-RPC, and D-BUS.
-+ You can use any of these IPC systems with any object/component system,
-+ though some of them are "tuned" for specific object systems.
-+ You can think of an IPC system primarily as a wire protocol.
-+ </para>
-+ <para>
-+ If you combine an IPC system with a set of GUI control interfaces,
-+ then you can have an out-of-process or dynamically-loaded GUI control.
-+ </para>
-+ <para>
-+ Summarizing, there are three orthogonal things:
-+ <orderedlist>
-+ <listitem>
-+ <para>
-+ Object/component system
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Control embedding interfaces
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Interprocess communication system or wire protocol
-+ </para>
-+ </listitem>
-+ </orderedlist>
-+ </para>
-+ <para>
-+ Another related concept is the <firstterm>plugin</firstterm> or
-+ <firstterm>extension</firstterm>. Generic plugin systems such as the
-+ <ulink url="http://eclipse.org">Eclipse</ulink> system are not so different
-+ from component/object systems, though perhaps a "plugin" tends to be a
-+ bundle of objects with a user-visible name and can be
-+ downloaded/packaged as a unit.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry id="speed">
-+ <question>
-+ <para>
-+ How fast is the D-BUS reference implementation?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Of course it depends a bit on what you're doing.
-+ <ulink url="http://lists.freedesktop.org/pipermail/dbus/2004-November/001779.html">
-+ This mail</ulink> contains some benchmarking. At the time of that
-+ benchmark, D-BUS one-to-one communication was about 2.5x slower than
-+ simply pushing the data raw over a socket. After the recent rewrite of
-+ the marshaling code, D-BUS is slower than that because a lot of
-+ optimization work was lost. But it can probably be sped up again.
-+ </para>
-+ <para>
-+ D-BUS communication with the intermediate bus daemon should be
-+ (and as last profiled, was) about twice as slow as one-to-one
-+ mode, because a round trip involves four socket reads/writes rather
-+ than two socket reads/writes.
-+ </para>
-+ <para>
-+ The overhead comes from a couple of places; part of it is simply
-+ "abstraction penalty" (there are layers of code to support
-+ multiple main loops, multiple transport types, security, etc.).
-+ Probably the largest part comes from data validation
-+ (because the reference implementation does not trust incoming data).
-+ It would be simple to add a "no validation" mode, but probably
-+ not a good idea all things considered.
-+ </para>
-+ <para>
-+ Raw bandwidth isn't the only concern; D-BUS is designed to
-+ enable asynchronous communication and avoid round trips.
-+ This is frequently a more important performance issue
-+ than throughput.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+ <qandaentry id="size">
-+ <question>
-+ <para>
-+ How large is the D-BUS reference implementation?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ A production build (with assertions, unit tests, and verbose logging
-+ disabled) is on the order of a 150K shared library.
-+ </para>
-+ <para>
-+ A much, much smaller implementation would be possible by omitting out
-+ of memory handling, hardcoding a main loop (or always using blocking
-+ I/O), skipping validation, and otherwise simplifying things.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry id="other-ipc">
-+ <question>
-+ <para>
-+ How does D-BUS differ from other interprocess communication
-+ or networking protocols?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ The best place to start is to read the D-BUS <ulink url="dbus-tutorial.html">tutorial</ulink>, so
-+ you have a concrete idea what D-BUS actually is. If you
-+ understand other protocols on a wire format level, you
-+ may also want to read the D-BUS <ulink url="dbus-specification.html">specification</ulink> to see what
-+ D-BUS looks like on a low level.
-+ </para>
-+ <para>
-+ As the <ulink url="dbus-tutorial.html">tutorial</ulink> and <ulink url="dbus-specification.html">specification</ulink> both explain, D-BUS is tuned
-+ for some specific use cases. Thus, it probably isn't tuned
-+ for what you want to do, unless you are doing the things
-+ D-BUS was designed for. Don't make the mistake of thinking
-+ that any system labeled "IPC" is the same thing.
-+ </para>
-+ <para>
-+ The D-BUS authors would not recommend using D-BUS
-+ for applications where it doesn't make sense.
-+ The following questions compare D-BUS to some other
-+ protocols primarily to help you understand D-BUS
-+ and decide whether it's appropriate; D-BUS is neither intended
-+ nor claimed to be the right choice for every application.
-+ </para>
-+ <para>
-+ It should be possible to bridge D-BUS to other IPC systems,
-+ just as D-BUS can be bridged to object systems.
-+ </para>
-+ <para>
-+ Note: the D-BUS mailing list subscribers are <emphasis>very much not
-+ interested</emphasis> in debating which IPC system is the One True
-+ System. So if you want to discuss that, please use another forum.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+ <qandaentry id="corba">
-+ <question>
-+ <para>
-+ How does D-BUS differ from CORBA?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Start by reading <xref linkend="other-ipc"/>.
-+ </para>
-+ <para>
-+ <ulink url="http://www.omg.org">CORBA</ulink> is designed to support
-+ object-oriented IPC between objects, automatically marshalling
-+ parameters as necessary. CORBA is strongly supported by the <ulink
-+ url="http://www.omg.org">Open Management Group (OMG)</ulink>, which
-+ produces various standards and supporting documents for CORBA and has
-+ the backing of many large organizations. There are many CORBA ORBs
-+ available, both proprietary ORBs and free / open source software ORBs
-+ (the latter include <ulink
-+ url="http://orbit-resource.sourceforge.net/">ORBit</ulink>, <ulink
-+ url="http://www.mico.org/">MICO</ulink>, and <ulink
-+ url="http://www.theaceorb.com/">The ACE Orb (TAO)</ulink>). Many
-+ organizations continue to use CORBA ORBs for various kinds of IPC.
-+ </para>
-+ <para>
-+ Both GNOME and KDE have used CORBA and then moved away from it. KDE
-+ had more success with a system called DCOP, and GNOME layered a system
-+ called Bonobo on top of CORBA. Without custom extensions, CORBA does
-+ not support many of the things one wants to do in a desktop
-+ environment with the GNOME/KDE architecture.
-+ </para>
-+ <para>
-+ CORBA on the other hand has a number of features of interest for
-+ enterprise and web application development, though XML systems such as
-+ SOAP are the latest fad.
-+ </para>
-+ <para>
-+ Like D-BUS, CORBA uses a fast binary protocol (IIOP). Both systems
-+ work in terms of objects and methods, and have concepts such as
-+ "oneway" calls. Only D-BUS has direct support for "signals" as in
-+ GLib/Qt (or Java listeners, or C# delegates).
-+ </para>
-+ <para>
-+ D-BUS hardcodes and specifies a lot of things that CORBA leaves open-ended,
-+ because CORBA is more generic and D-BUS has two specific use-cases in mind.
-+ This makes D-BUS a bit simpler.
-+ </para>
-+ <para>
-+ However, unlike CORBA D-BUS does <emphasis>not</emphasis> specify the
-+ API for the language bindings. Instead, "native" bindings adapted
-+ specifically to the conventions of a framework such as QObject,
-+ GObject, C#, Java, Python, etc. are encouraged. The libdbus reference
-+ implementation is designed to be a backend for bindings of this
-+ nature, rather than to be used directly. The rationale is that an IPC
-+ system API should not "leak" all over a program; it should come into
-+ play only just before data goes over the wire. As an aside, OMG is
-+ apparently working on a simpler C++ binding for CORBA.
-+ </para>
-+ <para>
-+ Many CORBA implementations such as ORBit are faster than the libdbus
-+ reference implementation. One reason is that D-BUS considers data
-+ from the other end of the connection to be untrusted and extensively
-+ validates it. But generally speaking other priorities were placed
-+ ahead of raw speed in the libdbus implementation. A fast D-BUS
-+ implementation along the lines of ORBit should be possible, of course.
-+ </para>
-+ <para>
-+ On a more trivial note, D-BUS involves substantially fewer acronyms
-+ than CORBA.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+ <qandaentry id="xmlrpcsoap">
-+ <question>
-+ <para>
-+ How does D-BUS differ from XML-RPC and SOAP?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Start by reading <xref linkend="other-ipc"/>.
-+ </para>
-+ <para>
-+ In <ulink url="http://www.w3.org/TR/SOAP/">SOAP</ulink> and <ulink
-+ url="http://www.xmlrpc.com">XML-RPC</ulink>, RPC calls are transformed
-+ into an XML-based format, then sent over the wire (typically using the
-+ HTTP protocol), where they are processed and returned. XML-RPC is the
-+ simple protocol (its spec is only a page or two), and SOAP is the
-+ full-featured protocol.
-+ </para>
-+ <para>
-+ XML-RPC and SOAP impose XML parsing overhead that is normally
-+ irrelevant in the context of the Internet, but significant for
-+ constant fine-grained IPC among applications in a desktop session.
-+ </para>
-+ <para>
-+ D-BUS offers persistent connections and with the bus daemon
-+ supports lifecycle tracking of other applications connected
-+ to the bus. With XML-RPC and SOAP, typically each method call
-+ exists in isolation and has its own HTTP connection.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry id="dce">
-+ <question>
-+ <para>
-+ How does D-BUS differ from DCE?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Start by reading <xref linkend="other-ipc"/>.
-+ </para>
-+ <para>
-+ <ulink url="http://www.opengroup.org/dce/">Distributed Computing
-+ Environment (DCE)</ulink> is an industry-standard vendor-neutral
-+ standard that includes an IPC mechanism. <ulink
-+ url="http://www.opengroup.org/comm/press/05-01-12.htm">The Open Group
-+ has released an implementation as open source software</ulink>. DCE
-+ is quite capable, and includes a vast amount of functionality such as
-+ a distributed time service. As the name implies, DCE is intended for
-+ use in a large, multi-computer distributed application. D-BUS would
-+ not be well-suited for this.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+ <qandaentry id="dcom">
-+ <question>
-+ <para>
-+ How does D-BUS differ from DCOM and COM?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Start by reading <xref linkend="other-ipc"/>.
-+ </para>
-+ <para>
-+ Comparing D-BUS to COM is apples and oranges;
-+ see <xref linkend="components"/>.
-+ </para>
-+ <para>
-+ DCOM (distributed COM) is a Windows IPC system designed for use with
-+ the COM object system. It's similar in some ways to DCE and CORBA.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry id="internet-communications-engine">
-+ <question>
-+ <para>
-+ How does D-BUS differ from ZeroC's Internet Communications Engine (Ice)
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Start by reading <xref linkend="other-ipc"/>.
-+ </para>
-+ <para>
-+ The <ulink url="http://www.zeroc.com/ice.html"> Internet
-+ Communications Engine (Ice)</ulink> is a powerful IPC mechanism more
-+ on the level of SOAP or CORBA than D-BUS. Ice has a "dual-license"
-+ business around it; i.e. you can use it under the GPL, or pay for a
-+ proprietary license.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ <qandaentry id="inter-client-exchange">
-+ <question>
-+ <para>
-+ How does D-BUS differ from Inter-Client Exchange (ICE)?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ <ulink url="http://www.x.org/X11R6.8.1/docs/ICE/ice.pdf">ICE</ulink>
-+ was developed for the X Session Management protocol (XSMP), as part of
-+ the X Window System (X11R6.1). The idea was to allow desktop sessions
-+ to contain nongraphical clients in addition to X clients.
-+ </para>
-+ <para>
-+ ICE is a binary protocol designed for desktop use, and KDE's DCOP
-+ builds on ICE. ICE is substantially simpler than D-BUS (in contrast
-+ to most of the other IPC systems mentioned here, which are more
-+ complex). ICE doesn't really define a mapping to objects and methods
-+ (DCOP adds that layer). The reference implementation of ICE (libICE)
-+ is often considered to be horrible (and horribly insecure).
-+ </para>
-+ <para>
-+ DCOP and XSMP are the only two widely-used applications of ICE,
-+ and both could in principle be replaced by D-BUS. (Though whether
-+ GNOME and KDE will bother is an open question.)
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+
-+ <qandaentry id="dcop">
-+ <question>
-+ <para>
-+ How does D-BUS differ from DCOP?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Start by reading <xref linkend="other-ipc"/>.
-+ </para>
-+ <para>
-+ D-BUS is intentionally pretty similar to <ulink
-+ url="http://developer.kde.org/documentation/library/kdeqt/dcop.html">DCOP</ulink>,
-+ and can be thought of as a "DCOP the next generation" suitable for
-+ sharing between the various open source desktop projects.
-+ </para>
-+ <para>
-+ D-BUS is a bit more complex than DCOP, though the Qt binding for D-BUS
-+ should not be more complex for programmers. The additional complexity
-+ of D-BUS arises from its separation of object references vs. bus names
-+ vs. interfaces as distinct concepts, and its support for one-to-one
-+ connections in addition to connections over the bus. The libdbus
-+ reference implementation has a lot of API to support multiple bindings
-+ and main loops, and performs data validation and out-of-memory handling
-+ in order to support secure applications such as the systemwide bus.
-+ </para>
-+ <para>
-+ D-BUS is probably somewhat slower than DCOP due to data validation
-+ and more "layers" in the reference implementation. A comparison
-+ hasn't been posted to the list though.
-+ </para>
-+ <para>
-+ At this time, KDE has not committed to using D-BUS, but there have
-+ been discussions of KDE bridging D-BUS and DCOP, or even changing
-+ DCOP's implementation to use D-BUS internally (so that GNOME and KDE
-+ would end up using exactly the same bus). See the KDE mailing list
-+ archives for some of these discussions.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+ <qandaentry id="yet-more-ipc">
-+ <question>
-+ <para>
-+ How does D-BUS differ from [yet more IPC mechanisms]?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Start by reading <xref linkend="other-ipc"/>.
-+ </para>
-+ <para>
-+ There are countless uses of network sockets in the world. <ulink
-+ url="http://www.mbus.org/">MBUS</ulink>, Sun ONC/RPC, Jabber/XMPP,
-+ SIP, are some we can think of quickly.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+ <qandaentry id="which-ipc">
-+ <question>
-+ <para>
-+ Which IPC mechanism should I use?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ Start by reading <xref linkend="other-ipc"/>.
-+ </para>
-+ <para>
-+ If you're writing an Internet or Intranet application, XML-RPC or SOAP
-+ work for many people. These are standard, available for most
-+ languages, simple to debug and easy to use.
-+ </para>
-+ <para>
-+ If you're writing a desktop application for UNIX,
-+ then D-BUS is of course our recommendation for
-+ talking to other parts of the desktop session.
-+ (With the caveat that you should use a stable release
-+ of D-BUS; until we reach 1.0, there isn't a stable release.)
-+ </para>
-+ <para>
-+ If you're doing something complicated such as clustering,
-+ distributed swarms, peer-to-peer, or whatever then
-+ the authors of this FAQ don't have expertise in these
-+ areas and you should ask someone else or try a search engine.
-+ </para>
-+ <para>
-+ Note: the D-BUS mailing list is probably not the place to
-+ discuss which system is appropriate for your application,
-+ though you are welcome to ask specific questions about
-+ D-BUS <emphasis>after reading this FAQ, the tutorial, and
-+ searching the list archives</emphasis>. The best way
-+ to search the list archives is probably to use
-+ an Internet engine such as Google. On Google,
-+ include "site:freedesktop.org" in your search.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+
-+ <qandaentry>
-+ <question>
-+ <para>
-+ How can I submit a bug or patch?
-+ </para>
-+ </question>
-+ <answer>
-+ <para>
-+ The D-BUS <ulink url="http://dbus.freedesktop.org">web site</ulink>
-+ has a link to the bug tracker, which is the best place to store
-+ patches. You can also post them to the list, especially if you want
-+ to discuss the patch or get feedback.
-+ </para>
-+ </answer>
-+ </qandaentry>
-+
-+ </qandaset>
-+
-+</article>
-diff -Naur dbus-0.61.orig/doc/dbus-specification.html dbus-0.61/doc/dbus-specification.html
---- dbus-0.61.orig/doc/dbus-specification.html 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dbus-specification.html 2006-02-24 16:50:20.000000000 +0100
-@@ -0,0 +1,1887 @@
-+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>D-BUS Specification</title><meta name="generator" content="DocBook XSL Stylesheets V1.69.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="index"></a>D-BUS Specification</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">Havoc</span> <span class="surname">Pennington</span></h3><div class="affiliation"><span class="orgname">Red Hat, Inc.<br></span><div class="address"><p><br>
-+ <code class="email"><<a href="mailto:hp at pobox.com">hp at pobox.com</a>></code><br>
-+ </p></div></div></div><div class="author"><h3 class="author"><span class="firstname">Anders</span> <span class="surname">Carlsson</span></h3><div class="affiliation"><span class="orgname">CodeFactory AB<br></span><div class="address"><p><br>
-+ <code class="email"><<a href="mailto:andersca at codefactory.se">andersca at codefactory.se</a>></code><br>
-+ </p></div></div></div><div class="author"><h3 class="author"><span class="firstname">Alexander</span> <span class="surname">Larsson</span></h3><div class="affiliation"><span class="orgname">Red Hat, Inc.<br></span><div class="address"><p><br>
-+ <code class="email"><<a href="mailto:alexl at redhat.com">alexl at redhat.com</a>></code><br>
-+ </p></div></div></div></div></div><div><p class="releaseinfo">Version 0.11</p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#introduction">Introduction</a></span></dt><dt><span class="sect1"><a href="#message-protocol">Message Protocol</a></span></dt><dd><dl><dt><span class="sect2"><a href="#message-protocol-signatures">Type Signatures</a></span></dt><dt><span class="sect2"><a href="#message-protocol-marshaling">Marshaling (Wire Format)</a></span></dt><dt><span class="sect2"><a href="#message-protocol-messages">Message Format</a></span></dt><dt><span class="sect2"><a href="#message-protocol-names">Valid Names</a></span></dt><dt><span class="sect2"><a href="#message-protocol-types">Message Types</a></span></dt><dt><span class="sect2"><a href="#message-protocol-handling-invalid">Invalid Protocol and Spec Extensions</a></span></dt></dl></dd><dt><span class="sect1"><a href="#auth-protocol">Authentication Protocol</a></span></dt><dd><dl><dt><span class="sect2"><a href="#auth-protocol-overview">Protocol Overview</a></span></dt><dt><span class="sect2"><a href="#auth-nul-byte">Special credentials-passing nul byte</a></span></dt><dt><span class="sect2"><a href="#auth-command-auth">AUTH command</a></span></dt><dt><span class="sect2"><a href="#auth-command-cancel">CANCEL Command</a></span></dt><dt><span class="sect2"><a href="#auth-command-data">DATA Command</a></span></dt><dt><span class="sect2"><a href="#auth-command-begin">BEGIN Command</a></span></dt><dt><span class="sect2"><a href="#auth-command-rejected">REJECTED Command</a></span></dt><dt><span class="sect2"><a href="#auth-command-ok">OK Command</a></span></dt><dt><span class="sect2"><a href="#auth-command-error">ERROR Command</a></span></dt><dt><span class="sect2"><a href="#auth-examples">Authentication examples</a></span></dt><dt><span class="sect2"><a href="#auth-states">Authentication state diagrams</a></span></dt><dt><span class="sect2"><a href="#auth-mechanisms">Authentication mechanisms</a></span></dt></dl></dd><dt><span class="sect1"><a href="#addresses">Server Addresses</a></span></dt><dt><span class="sect1"><a href="#transports">Transports</a></span></dt><dd><dl><dt><span class="sect2"><a href="#transports-unix-domain-sockets">Unix Domain Sockets</a></span></dt></dl></dd><dt><span class="sect1"><a href="#naming-conventions">Naming Conventions</a></span></dt><dt><span class="sect1"><a href="#standard-interfaces">Standard Interfaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="#standard-interfaces-peer"><code class="literal">org.freedesktop.DBus.Peer</code></a></span></dt><dt><span class="sect2"><a href="#standard-interfaces-introspectable"><code class="literal">org.freedesktop.DBus.Introspectable</code></a></span></dt><dt><span class="sect2"><a href="#standard-interfaces-properties"><code class="literal">org.freedesktop.DBus.Properties</code></a></span></dt></dl></dd><dt><span class="sect1"><a href="#introspection-format">Introspection Data Format</a></span></dt><dt><span class="sect1"><a href="#message-bus">Message Bus Specification</a></span></dt><dd><dl><dt><span class="sect2"><a href="#message-bus-overview">Message Bus Overview</a></span></dt><dt><span class="sect2"><a href="#message-bus-names">Message Bus Names</a></span></dt><dt><span class="sect2"><a href="#message-bus-routing">Message Bus Message Routing</a></span></dt><dt><span class="sect2"><a href="#message-bus-starting-services">Message Bus Starting Services</a></span></dt><dt><span class="sect2"><a href="#message-bus-types">Well-known Message Bus Instances</a></span></dt><dt><span class="sect2"><a href="#message-bus-messages">Message Bus Messages</a></span></dt></dl></dd><dt><span class="glossary"><a href="#id2607701">Glossary</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="introduction"></a>Introduction</h2></div></div></div><p>
-+ D-BUS is a system for low-latency, low-overhead, easy to use
-+ interprocess communication (IPC). In more detail:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ D-BUS is <span class="emphasis"><em>low-latency</em></span> because it is designed
-+ to avoid round trips and allow asynchronous operation, much like
-+ the X protocol.
-+ </p></li><li><p>
-+ D-BUS is <span class="emphasis"><em>low-overhead</em></span> because it uses a
-+ binary protocol, and does not have to convert to and from a text
-+ format such as XML. Because D-BUS is intended for potentially
-+ high-resolution same-machine IPC, not primarily for Internet IPC,
-+ this is an interesting optimization.
-+ </p></li><li><p>
-+ D-BUS is <span class="emphasis"><em>easy to use</em></span> because it works in terms
-+ of <em class="firstterm">messages</em> rather than byte streams, and
-+ automatically handles a lot of the hard IPC issues. Also, the D-BUS
-+ library is designed to be wrapped in a way that lets developers use
-+ their framework's existing object/type system, rather than learning
-+ a new one specifically for IPC.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ The base D-BUS protocol is a one-to-one (peer-to-peer or client-server)
-+ protocol, specified in <a href="#message-protocol" title="Message Protocol">the section called “Message Protocol”</a>. That is, it is
-+ a system for one application to talk to a single other
-+ application. However, the primary intended application of the protocol is the
-+ D-BUS <em class="firstterm">message bus</em>, specified in <a href="#message-bus" title="Message Bus Specification">the section called “Message Bus Specification”</a>. The message bus is a special application that
-+ accepts connections from multiple other applications, and forwards
-+ messages among them.
-+ </p><p>
-+ Uses of D-BUS include notification of system changes (notification of when
-+ a camera is plugged in to a computer, or a new version of some software
-+ has been installed), or desktop interoperability, for example a file
-+ monitoring service or a configuration service.
-+ </p><p>
-+ D-BUS is designed for two specific use cases:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ A "system bus" for notifications from the system to user sessions,
-+ and to allow the system to request input from user sessions.
-+ </p></li><li><p>
-+ A "session bus" used to implement desktop environments such as
-+ GNOME and KDE.
-+ </p></li></ul></div><p>
-+ D-BUS is not intended to be a generic IPC system for any possible
-+ application, and intentionally omits many features found in other
-+ IPC systems for this reason. D-BUS may turn out to be useful
-+ in unanticipated applications, but future versions of this
-+ spec and the reference implementation probably will not
-+ incorporate features that interfere with the core use cases.
-+ </p><p>
-+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
-+ document are to be interpreted as described in RFC 2119. However, the
-+ document could use a serious audit to be sure it makes sense to do
-+ so. Also, they are not capitalized.
-+ </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="message-protocol"></a>Message Protocol</h2></div></div></div><p>
-+ A <em class="firstterm">message</em> consists of a
-+ <em class="firstterm">header</em> and a <em class="firstterm">body</em>. If you
-+ think of a message as a package, the header is the address, and the body
-+ contains the package contents. The message delivery system uses the header
-+ information to figure out where to send the message and how to interpret
-+ it; the recipient inteprets the body of the message.
-+ </p><p>
-+ The body of the message is made up of zero or more
-+ <em class="firstterm">arguments</em>, which are typed values, such as an
-+ integer or a byte array.
-+ </p><p>
-+ Both header and body use the same type system and format for
-+ serializing data. Each type of value has a wire format.
-+ Converting a value from some other representation into the wire
-+ format is called <em class="firstterm">marshaling</em> and converting
-+ it back from the wire format is <em class="firstterm">unmarshaling</em>.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-protocol-signatures"></a>Type Signatures</h3></div></div></div><p>
-+ The D-BUS protocol does not include type tags in the marshaled data; a
-+ block of marshaled values must have a known <em class="firstterm">type
-+ signature</em>. The type signature is made up of <em class="firstterm">type
-+ codes</em>. A type code is an ASCII character representing the
-+ type of a value. Because ASCII characters are used, the type signature
-+ will always form a valid ASCII string. A simple string compare
-+ determines whether two type signatures are equivalent.
-+ </p><p>
-+ As a simple example, the type code for 32-bit integer (<code class="literal">INT32</code>) is
-+ the ASCII character 'i'. So the signature for a block of values
-+ containing a single <code class="literal">INT32</code> would be:
-+ </p><pre class="programlisting">
-+ "i"
-+ </pre><p>
-+ A block of values containing two <code class="literal">INT32</code> would have this signature:
-+ </p><pre class="programlisting">
-+ "ii"
-+ </pre><p>
-+ </p><p>
-+ All <em class="firstterm">basic</em> types work like
-+ <code class="literal">INT32</code> in this example. To marshal and unmarshal
-+ basic types, you simply read one value from the data
-+ block corresponding to each type code in the signature.
-+ In addition to basic types, there are four <em class="firstterm">container</em>
-+ types: <code class="literal">STRUCT</code>, <code class="literal">ARRAY</code>, <code class="literal">VARIANT</code>,
-+ and <code class="literal">DICT_ENTRY</code>.
-+ </p><p>
-+ <code class="literal">STRUCT</code> has a type code, ASCII character 'r', but this type
-+ code does not appear in signatures. Instead, ASCII characters
-+ '(' and ')' are used to mark the beginning and end of the struct.
-+ So for example, a struct containing two integers would have this
-+ signature:
-+ </p><pre class="programlisting">
-+ "(ii)"
-+ </pre><p>
-+ Structs can be nested, so for example a struct containing
-+ an integer and another struct:
-+ </p><pre class="programlisting">
-+ "(i(ii))"
-+ </pre><p>
-+ The value block storing that struct would contain three integers; the
-+ type signature allows you to distinguish "(i(ii))" from "((ii)i)" or
-+ "(iii)" or "iii".
-+ </p><p>
-+ The <code class="literal">STRUCT</code> type code 'r' is not currently used in the D-BUS protocol,
-+ but is useful in code that implements the protocol. This type code
-+ is specified to allow such code to interoperate in non-protocol contexts.
-+ </p><p>
-+ <code class="literal">ARRAY</code> has ASCII character 'a' as type code. The array type code must be
-+ followed by a <em class="firstterm">single complete type</em>. The single
-+ complete type following the array is the type of each array element. So
-+ the simple example is:
-+ </p><pre class="programlisting">
-+ "ai"
-+ </pre><p>
-+ which is an array of 32-bit integers. But an array can be of any type,
-+ such as this array-of-struct-with-two-int32-fields:
-+ </p><pre class="programlisting">
-+ "a(ii)"
-+ </pre><p>
-+ Or this array of array of integer:
-+ </p><pre class="programlisting">
-+ "aai"
-+ </pre><p>
-+ </p><p>
-+ The phrase <em class="firstterm">single complete type</em> deserves some
-+ definition. A single complete type is a basic type code, a variant type code,
-+ an array with its element type, or a struct with its fields.
-+ So the following signatures are not single complete types:
-+ </p><pre class="programlisting">
-+ "aa"
-+ </pre><p>
-+ </p><pre class="programlisting">
-+ "(ii"
-+ </pre><p>
-+ </p><pre class="programlisting">
-+ "ii)"
-+ </pre><p>
-+ And the following signatures contain multiple complete types:
-+ </p><pre class="programlisting">
-+ "ii"
-+ </pre><p>
-+ </p><pre class="programlisting">
-+ "aiai"
-+ </pre><p>
-+ </p><pre class="programlisting">
-+ "(ii)(ii)"
-+ </pre><p>
-+ Note however that a single complete type may <span class="emphasis"><em>contain</em></span>
-+ multiple other single complete types.
-+ </p><p>
-+ <code class="literal">VARIANT</code> has ASCII character 'v' as its type code. A marshaled value of
-+ type <code class="literal">VARIANT</code> will have the signature of a single complete type as part
-+ of the <span class="emphasis"><em>value</em></span>. This signature will be followed by a
-+ marshaled value of that type.
-+ </p><p>
-+ A <code class="literal">DICT_ENTRY</code> works exactly like a struct, but rather
-+ than parentheses it uses curly braces, and it has more restrictions.
-+ The restrictions are: it occurs only as an array element type; it has
-+ exactly two single complete types inside the curly braces; the first
-+ single complete type (the "key") must be a basic type rather than a
-+ container type. Implementations must not accept dict entries outside of
-+ arrays, must not accept dict entries with zero, one, or more than two
-+ fields, and must not accept dict entries with non-basic-typed keys. A
-+ dict entry is always a key-value pair.
-+ </p><p>
-+ The first field in the <code class="literal">DICT_ENTRY</code> is always the key.
-+ A message is considered corrupt if the same key occurs twice in the same
-+ array of <code class="literal">DICT_ENTRY</code>. However, for performance reasons
-+ implementations are not required to reject dicts with duplicate keys.
-+ </p><p>
-+ In most languages, an array of dict entry would be represented as a
-+ map, hash table, or dict object.
-+ </p><p>
-+ The following table summarizes the D-BUS types.
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Conventional Name</th><th>Code</th><th>Description</th></tr></thead><tbody><tr><td><code class="literal">INVALID</code></td><td>0 (ASCII NUL)</td><td>Not a valid type code, used to terminate signatures</td></tr><tr><td><code class="literal">BYTE</code></td><td>121 (ASCII 'y')</td><td>8-bit unsigned integer</td></tr><tr><td><code class="literal">BOOLEAN</code></td><td>98 (ASCII 'b')</td><td>Boolean value, 0 is <code class="literal">FALSE</code> and 1 is <code class="literal">TRUE</code>. Everything else is invalid.</td></tr><tr><td><code class="literal">INT16</code></td><td>110 (ASCII 'n')</td><td>16-bit signed integer</td></tr><tr><td><code class="literal">UINT16</code></td><td>113 (ASCII 'q')</td><td>16-bit unsigned integer</td></tr><tr><td><code class="literal">INT32</code></td><td>105 (ASCII 'i')</td><td>32-bit signed integer</td></tr><tr><td><code class="literal">UINT32</code></td><td>117 (ASCII 'u')</td><td>32-bit unsigned integer</td></tr><tr><td><code class="literal">INT64</code></td><td>120 (ASCII 'x')</td><td>64-bit signed integer</td></tr><tr><td><code class="literal">UINT64</code></td><td>116 (ASCII 't')</td><td>64-bit unsigned integer</td></tr><tr><td><code class="literal">DOUBLE</code></td><td>100 (ASCII 'd')</td><td>IEEE 754 double</td></tr><tr><td><code class="literal">STRING</code></td><td>115 (ASCII 's')</td><td>UTF-8 string (<span class="emphasis"><em>must</em></span> be valid UTF-8). Must be nul terminated.</td></tr><tr><td><code class="literal">OBJECT_PATH</code></td><td>111 (ASCII 'o')</td><td>Name of an object instance</td></tr><tr><td><code class="literal">SIGNATURE</code></td><td>103 (ASCII 'g')</td><td>A type signature</td></tr><tr><td><code class="literal">ARRAY</code></td><td>97 (ASCII 'a')</td><td>Array</td></tr><tr><td><code class="literal">STRUCT</code></td><td>114 (ASCII 'r'), 40 (ASCII '('), 41 (ASCII ')')</td><td>Struct</td></tr><tr><td><code class="literal">VARIANT</code></td><td>118 (ASCII 'v') </td><td>Variant type (the type of the value is part of the value itself)</td></tr><tr><td><code class="literal">DICT_ENTRY</code></td><td>101 (ASCII 'e'), 123 (ASCII '{'), 125 (ASCII '}') </td><td>Entry in a dict or map (array of key-value pairs)</td></tr></tbody></table></div><p>
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-protocol-marshaling"></a>Marshaling (Wire Format)</h3></div></div></div><p>
-+ Given a type signature, a block of bytes can be converted into typed
-+ values. This section describes the format of the block of bytes. Byte
-+ order and alignment issues are handled uniformly for all D-BUS types.
-+ </p><p>
-+ A block of bytes has an associated byte order. The byte order
-+ has to be discovered in some way; for D-BUS messages, the
-+ byte order is part of the message header as described in
-+ <a href="#message-protocol-messages" title="Message Format">the section called “Message Format”</a>. For now, assume
-+ that the byte order is known to be either little endian or big
-+ endian.
-+ </p><p>
-+ Each value in a block of bytes is aligned "naturally," for example
-+ 4-byte values are aligned to a 4-byte boundary, and 8-byte values to an
-+ 8-byte boundary. To properly align a value, <em class="firstterm">alignment
-+ padding</em> may be necessary. The alignment padding must always
-+ be the minimum required padding to properly align the following value;
-+ and it must always be made up of nul bytes. The alignment padding must
-+ not be left uninitialized (it can't contain garbage), and more padding
-+ than required must not be used.
-+ </p><p>
-+ Given all this, the types are marshaled on the wire as follows:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Conventional Name</th><th>Encoding</th><th>Alignment</th></tr></thead><tbody><tr><td><code class="literal">INVALID</code></td><td>Not applicable; cannot be marshaled.</td><td>N/A</td></tr><tr><td><code class="literal">BYTE</code></td><td>A single 8-bit byte.</td><td>1</td></tr><tr><td><code class="literal">BOOLEAN</code></td><td>As for <code class="literal">UINT32</code>, but only 0 and 1 are valid values.</td><td>4</td></tr><tr><td><code class="literal">INT16</code></td><td>16-bit signed integer in the message's byte order.</td><td>2</td></tr><tr><td><code class="literal">UINT16</code></td><td>16-bit unsigned integer in the message's byte order.</td><td>2</td></tr><tr><td><code class="literal">INT32</code></td><td>32-bit signed integer in the message's byte order.</td><td>4</td></tr><tr><td><code class="literal">UINT32</code></td><td>32-bit unsigned integer in the message's byte order.</td><td>4</td></tr><tr><td><code class="literal">INT64</code></td><td>64-bit signed integer in the message's byte order.</td><td>8</td></tr><tr><td><code class="literal">UINT64</code></td><td>64-bit unsigned integer in the message's byte order.</td><td>8</td></tr><tr><td><code class="literal">DOUBLE</code></td><td>64-bit IEEE 754 double in the message's byte order.</td><td>8</td></tr><tr><td><code class="literal">STRING</code></td><td>A <code class="literal">UINT32</code> indicating the string's
-+ length in bytes excluding its terminating nul, followed by
-+ string data of the given length, followed by a terminating nul
-+ byte.
-+ </td><td>
-+ 4 (for the length)
-+ </td></tr><tr><td><code class="literal">OBJECT_PATH</code></td><td>Exactly the same as <code class="literal">STRING</code> except the
-+ content must be a valid object path (see below).
-+ </td><td>
-+ 4 (for the length)
-+ </td></tr><tr><td><code class="literal">SIGNATURE</code></td><td>The same as <code class="literal">STRING</code> except the length is a single
-+ byte (thus signatures have a maximum length of 255)
-+ and the content must be a valid signature (see below).
-+ </td><td>
-+ 1
-+ </td></tr><tr><td><code class="literal">ARRAY</code></td><td>
-+ A <code class="literal">UINT32</code> giving the length of the array data in bytes, followed by
-+ alignment padding to the alignment boundary of the array element type,
-+ followed by each array element. The array length is from the
-+ end of the alignment padding to the end of the last element,
-+ i.e. it does not include the padding after the length,
-+ or any padding after the last element.
-+ Arrays have a maximum length defined to be 2 to the 26th power or
-+ 67108864. Implementations must not send or accept arrays exceeding this
-+ length.
-+ </td><td>
-+ 4 (for the length)
-+ </td></tr><tr><td><code class="literal">STRUCT</code></td><td>
-+ A struct must start on an 8-byte boundary regardless of the
-+ type of the struct fields. The struct value consists of each
-+ field marshaled in sequence starting from that 8-byte
-+ alignment boundary.
-+ </td><td>
-+ 8
-+ </td></tr><tr><td><code class="literal">VARIANT</code></td><td>
-+ A variant type has a marshaled <code class="literal">SIGNATURE</code>
-+ followed by a marshaled value with the type
-+ given in the signature.
-+ Unlike a message signature, the variant signature
-+ can contain only a single complete type.
-+ So "i" is OK, "ii" is not.
-+ </td><td>
-+ 1 (alignment of the signature)
-+ </td></tr><tr><td><code class="literal">DICT_ENTRY</code></td><td>
-+ Identical to STRUCT.
-+ </td><td>
-+ 8
-+ </td></tr></tbody></table></div><p>
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-marshaling-object-path"></a>Valid Object Paths</h4></div></div></div><p>
-+ An object path is a name used to refer to an object instance.
-+ Conceptually, each participant in a D-BUS message exchange may have
-+ any number of object instances (think of C++ or Java objects) and each
-+ such instance will have a path. Like a filesystem, the object
-+ instances in an application form a hierarchical tree.
-+ </p><p>
-+ The following rules define a valid object path. Implementations must
-+ not send or accept messages with invalid object paths.
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ The path may be of any length.
-+ </p></li><li><p>
-+ The path must begin with an ASCII '/' (integer 47) character,
-+ and must consist of elements separated by slash characters.
-+ </p></li><li><p>
-+ Each element must only contain the ASCII characters
-+ "[A-Z][a-z][0-9]_"
-+ </p></li><li><p>
-+ No element may be the empty string.
-+ </p></li><li><p>
-+ Multiple '/' characters cannot occur in sequence.
-+ </p></li><li><p>
-+ A trailing '/' character is not allowed unless the
-+ path is the root path (a single '/' character).
-+ </p></li></ul></div><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-marshaling-signature"></a>Valid Signatures</h4></div></div></div><p>
-+ An implementation must not send or accept invalid signatures.
-+ Valid signatures will conform to the following rules:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ The signature ends with a nul byte.
-+ </p></li><li><p>
-+ The signature is a list of single complete types.
-+ Arrays must have element types, and structs must
-+ have both open and close parentheses.
-+ </p></li><li><p>
-+ Only type codes and open and close parentheses are
-+ allowed in the signature. The <code class="literal">STRUCT</code> type code
-+ is not allowed in signatures, because parentheses
-+ are used instead.
-+ </p></li><li><p>
-+ The maximum depth of container type nesting is 32 array type
-+ codes and 32 open parentheses. This implies that the maximum
-+ total depth of recursion is 64, for an "array of array of array
-+ of ... struct of struct of struct of ..." where there are 32
-+ array and 32 struct.
-+ </p></li><li><p>
-+ The maximum length of a signature is 255.
-+ </p></li><li><p>
-+ Signatures must be nul-terminated.
-+ </p></li></ul></div><p>
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-protocol-messages"></a>Message Format</h3></div></div></div><p>
-+ A message consists of a header and a body. The header is a block of
-+ values with a fixed signature and meaning. The body is a separate block
-+ of values, with a signature specified in the header.
-+ </p><p>
-+ The length of the header must be a multiple of 8, allowing the body to
-+ begin on an 8-byte boundary when storing the entire message in a single
-+ buffer. If the header does not naturally end on an 8-byte boundary
-+ up to 7 bytes of nul-initialized alignment padding must be added.
-+ </p><p>
-+ The message body need not end on an 8-byte boundary.
-+ </p><p>
-+ The maximum length of a message, including header, header alignment padding,
-+ and body is 2 to the 27th power or 134217728. Implementations must not
-+ send or accept messages exceeding this size.
-+ </p><p>
-+ The signature of the header is:
-+ </p><pre class="programlisting">
-+ "yyyyuua(yv)"
-+ </pre><p>
-+ Written out more readably, this is:
-+ </p><pre class="programlisting">
-+ BYTE, BYTE, BYTE, BYTE, UINT32, UINT32, ARRAY of STRUCT of (BYTE,VARIANT)
-+ </pre><p>
-+ </p><p>
-+ These values have the following meanings:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>1st <code class="literal">BYTE</code></td><td>Endianness flag; ASCII 'l' for little-endian
-+ or ASCII 'B' for big-endian. Both header and body are
-+ in this endianness.</td></tr><tr><td>2nd <code class="literal">BYTE</code></td><td><em class="firstterm">Message type</em>. Unknown types must be ignored.
-+ Currently-defined types are described below.
-+ </td></tr><tr><td>3rd <code class="literal">BYTE</code></td><td>Bitwise OR of flags. Unknown flags
-+ must be ignored. Currently-defined flags are described below.
-+ </td></tr><tr><td>4th <code class="literal">BYTE</code></td><td>Major protocol version of the sending application. If
-+ the major protocol version of the receiving application does not
-+ match, the applications will not be able to communicate and the
-+ D-BUS connection must be disconnected. The major protocol
-+ version for this version of the specification is 0.
-+ FIXME this field is stupid and pointless to put in
-+ every message.
-+ </td></tr><tr><td>1st <code class="literal">UINT32</code></td><td>Length in bytes of the message body, starting
-+ from the end of the header. The header ends after
-+ its alignment padding to an 8-boundary.
-+ </td></tr><tr><td>2nd <code class="literal">UINT32</code></td><td>The serial of this message, used as a cookie
-+ by the sender to identify the reply corresponding
-+ to this request.
-+ </td></tr><tr><td><code class="literal">ARRAY</code> of <code class="literal">STRUCT</code> of (<code class="literal">BYTE</code>,<code class="literal">VARIANT</code>)</td><td>An array of zero or more <em class="firstterm">header
-+ fields</em> where the byte is the field code, and the
-+ variant is the field value. The message type determines
-+ which fields are required.
-+ </td></tr></tbody></table></div><p>
-+ </p><p>
-+ <em class="firstterm">Message types</em> that can appear in the second byte
-+ of the header are:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Conventional name</th><th>Decimal value</th><th>Description</th></tr></thead><tbody><tr><td><code class="literal">INVALID</code></td><td>0</td><td>This is an invalid type.</td></tr><tr><td><code class="literal">METHOD_CALL</code></td><td>1</td><td>Method call.</td></tr><tr><td><code class="literal">METHOD_RETURN</code></td><td>2</td><td>Method reply with returned data.</td></tr><tr><td><code class="literal">ERROR</code></td><td>3</td><td>Error reply. If the first argument exists and is a
-+ string, it is an error message.</td></tr><tr><td><code class="literal">SIGNAL</code></td><td>4</td><td>Signal emission.</td></tr></tbody></table></div><p>
-+ </p><p>
-+ Flags that can appear in the third byte of the header:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Conventional name</th><th>Hex value</th><th>Description</th></tr></thead><tbody><tr><td><code class="literal">NO_REPLY_EXPECTED</code></td><td>0x1</td><td>This message does not expect method return replies or
-+ error replies; the reply can be omitted as an
-+ optimization. However, it is compliant with this specification
-+ to return the reply despite this flag and the only harm
-+ from doing so is extra network traffic.
-+ </td></tr><tr><td><code class="literal">NO_AUTO_START</code></td><td>0x2</td><td>The bus must not launch an owner
-+ for the destination name in response to this message.
-+ </td></tr></tbody></table></div><p>
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-header-fields"></a>Header Fields</h4></div></div></div><p>
-+ The array at the end of the header contains <em class="firstterm">header
-+ fields</em>, where each field is a 1-byte field code followed
-+ by a field value. A header must contain the required header fields for
-+ its message type, and zero or more of any optional header
-+ fields. Future versions of this protocol specification may add new
-+ fields. Implementations must ignore fields they do not
-+ understand. Implementations must not invent their own header fields;
-+ only changes to this specification may introduce new header fields.
-+ </p><p>
-+ Again, if an implementation sees a header field code that it does not
-+ expect, it must ignore that field, as it will be part of a new
-+ (but compatible) version of this specification. This also applies
-+ to known header fields appearing in unexpected messages, for
-+ example: if a signal has a reply serial it must be ignored
-+ even though it has no meaning as of this version of the spec.
-+ </p><p>
-+ However, implementations must not send or accept known header fields
-+ with the wrong type stored in the field value. So for example a
-+ message with an <code class="literal">INTERFACE</code> field of type
-+ <code class="literal">UINT32</code> would be considered corrupt.
-+ </p><p>
-+ Here are the currently-defined header fields:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col><col><col></colgroup><thead><tr><th>Conventional Name</th><th>Decimal Code</th><th>Type</th><th>Required In</th><th>Description</th></tr></thead><tbody><tr><td><code class="literal">INVALID</code></td><td>0</td><td>N/A</td><td>not allowed</td><td>Not a valid field name (error if it appears in a message)</td></tr><tr><td><code class="literal">PATH</code></td><td>1</td><td><code class="literal">OBJECT_PATH</code></td><td><code class="literal">METHOD_CALL</code>, <code class="literal">SIGNAL</code></td><td>The object to send a call to,
-+ or the object a signal is emitted from.
-+ </td></tr><tr><td><code class="literal">INTERFACE</code></td><td>2</td><td><code class="literal">STRING</code></td><td><code class="literal">SIGNAL</code></td><td>
-+ The interface to invoke a method call on, or
-+ that a signal is emitted from. Optional for
-+ method calls, required for signals.
-+ </td></tr><tr><td><code class="literal">MEMBER</code></td><td>3</td><td><code class="literal">STRING</code></td><td><code class="literal">METHOD_CALL</code>, <code class="literal">SIGNAL</code></td><td>The member, either the method name or signal name.</td></tr><tr><td><code class="literal">ERROR_NAME</code></td><td>4</td><td><code class="literal">STRING</code></td><td><code class="literal">ERROR</code></td><td>The name of the error that occurred, for errors</td></tr><tr><td><code class="literal">REPLY_SERIAL</code></td><td>5</td><td><code class="literal">UINT32</code></td><td><code class="literal">ERROR</code>, <code class="literal">METHOD_RETURN</code></td><td>The serial number of the message this message is a reply
-+ to. (The serial number is the second <code class="literal">UINT32</code> in the header.)</td></tr><tr><td><code class="literal">DESTINATION</code></td><td>6</td><td><code class="literal">STRING</code></td><td>optional</td><td>The name of the connection this message is intended for.
-+ Only used in combination with the message bus, see
-+ <a href="#message-bus" title="Message Bus Specification">the section called “Message Bus Specification”</a>.</td></tr><tr><td><code class="literal">SENDER</code></td><td>7</td><td><code class="literal">STRING</code></td><td>optional</td><td>Unique name of the sending connection.
-+ The message bus fills in this field so it is reliable; the field is
-+ only meaningful in combination with the message bus.</td></tr><tr><td><code class="literal">SIGNATURE</code></td><td>8</td><td><code class="literal">SIGNATURE</code></td><td>optional</td><td>The signature of the message body.
-+ If omitted, it is assumed to be the
-+ empty signature "" (i.e. the body must be 0-length).</td></tr></tbody></table></div><p>
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-protocol-names"></a>Valid Names</h3></div></div></div><p>
-+ The various names in D-BUS messages have some restrictions.
-+ </p><p>
-+ There is a <em class="firstterm">maximum name length</em>
-+ of 255 which applies to bus names, interfaces, and members.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-names-interface"></a>Interface names</h4></div></div></div><p>
-+ Interfaces have names with type <code class="literal">STRING</code>, meaning that
-+ they must be valid UTF-8. However, there are also some
-+ additional restrictions that apply to interface names
-+ specifically:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>Interface names are composed of 1 or more elements separated by
-+ a period ('.') character. All elements must contain at least
-+ one character.
-+ </p></li><li><p>Each element must only contain the ASCII characters
-+ "[A-Z][a-z][0-9]_" and must not begin with a digit.
-+ </p></li><li><p>Interface names must contain at least one '.' (period)
-+ character (and thus at least two elements).
-+ </p></li><li><p>Interface names must not begin with a '.' (period) character.</p></li><li><p>Interface names must not exceed the maximum name length.</p></li></ul></div><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-names-bus"></a>Bus names</h4></div></div></div><p>
-+ Connections have one or more bus names associated with them.
-+ A connection has exactly one bus name that is a unique connection
-+ name. The unique connection name remains with the connection for
-+ its entire lifetime.
-+ A bus name is of type <code class="literal">STRING</code>,
-+ meaning that it must be valid UTF-8. However, there are also
-+ some additional restrictions that apply to bus names
-+ specifically:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>Bus names that start with a colon (':')
-+ character are unique connection names.
-+ </p></li><li><p>Bus names are composed of 1 or more elements separated by
-+ a period ('.') character. All elements must contain at least
-+ one character.
-+ </p></li><li><p>Each element must only contain the ASCII characters
-+ "[A-Z][a-z][0-9]_-". Only elements that are part of a unique
-+ connection name may begin with a digit, elements in
-+ other bus names must not begin with a digit.
-+ </p></li><li><p>Bus names must contain at least one '.' (period)
-+ character (and thus at least two elements).
-+ </p></li><li><p>Bus names must not begin with a '.' (period) character.</p></li><li><p>Bus names must not exceed the maximum name length.</p></li></ul></div><p>
-+ </p><p>
-+ Note that the hyphen ('-') character is allowed in bus names but
-+ not in interface names.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-names-member"></a>Member names</h4></div></div></div><p>
-+ Member (i.e. method or signal) names:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>Must only contain the ASCII characters
-+ "[A-Z][a-z][0-9]_" and may not begin with a
-+ digit.</p></li><li><p>Must not contain the '.' (period) character.</p></li><li><p>Must not exceed the maximum name length.</p></li><li><p>Must be at least 1 byte in length.</p></li></ul></div><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-names-error"></a>Error names</h4></div></div></div><p>
-+ Error names have the same restrictions as interface names.
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-protocol-types"></a>Message Types</h3></div></div></div><p>
-+ Each of the message types (<code class="literal">METHOD_CALL</code>, <code class="literal">METHOD_RETURN</code>, <code class="literal">ERROR</code>, and
-+ <code class="literal">SIGNAL</code>) has its own expected usage conventions and header fields.
-+ This section describes these conventions.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-types-method"></a>Method Calls</h4></div></div></div><p>
-+ Some messages invoke an operation on a remote object. These are
-+ called method call messages and have the type tag <code class="literal">METHOD_CALL</code>. Such
-+ messages map naturally to methods on objects in a typical program.
-+ </p><p>
-+ A method call message is required to have a <code class="literal">MEMBER</code> header field
-+ indicating the name of the method. Optionally, the message has an
-+ <code class="literal">INTERFACE</code> field giving the interface the method is a part of. In the
-+ absence of an <code class="literal">INTERFACE</code> field, if two interfaces on the same object have
-+ a method with the same name, it is undefined which of the two methods
-+ will be invoked. Implementations may also choose to return an error in
-+ this ambiguous case. However, if a method name is unique
-+ implementations must not require an interface field.
-+ </p><p>
-+ Method call messages also include a <code class="literal">PATH</code> field
-+ indicating the object to invoke the method on. If the call is passing
-+ through a message bus, the message will also have a
-+ <code class="literal">DESTINATION</code> field giving the name of the connection
-+ to receive the message.
-+ </p><p>
-+ When an application handles a method call message, it is required to
-+ return a reply. The reply is identified by a <code class="literal">REPLY_SERIAL</code> header field
-+ indicating the serial number of the <code class="literal">METHOD_CALL</code> being replied to. The
-+ reply can have one of two types; either <code class="literal">METHOD_RETURN</code> or <code class="literal">ERROR</code>.
-+ </p><p>
-+ If the reply has type <code class="literal">METHOD_RETURN</code>, the arguments to the reply message
-+ are the return value(s) or "out parameters" of the method call.
-+ If the reply has type <code class="literal">ERROR</code>, then an "exception" has been thrown,
-+ and the call fails; no return value will be provided. It makes
-+ no sense to send multiple replies to the same method call.
-+ </p><p>
-+ Even if a method call has no return values, a <code class="literal">METHOD_RETURN</code>
-+ reply is required, so the caller will know the method
-+ was successfully processed.
-+ </p><p>
-+ The <code class="literal">METHOD_RETURN</code> or <code class="literal">ERROR</code> reply message must have the <code class="literal">REPLY_SERIAL</code>
-+ header field.
-+ </p><p>
-+ If a <code class="literal">METHOD_CALL</code> message has the flag <code class="literal">NO_REPLY_EXPECTED</code>,
-+ then as an optimization the application receiving the method
-+ call may choose to omit the reply message (regardless of
-+ whether the reply would have been <code class="literal">METHOD_RETURN</code> or <code class="literal">ERROR</code>).
-+ However, it is also acceptable to ignore the <code class="literal">NO_REPLY_EXPECTED</code>
-+ flag and reply anyway.
-+ </p><p>
-+ Unless a message has the flag <code class="literal">NO_AUTO_START</code>, if the
-+ destination name does not exist then a program to own the destination
-+ name will be started before the message is delivered. The message
-+ will be held until the new program is successfully started or has
-+ failed to start; in case of failure, an error will be returned. This
-+ flag is only relevant in the context of a message bus, it is ignored
-+ during one-to-one communication with no intermediate bus.
-+ </p><div class="sect4" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="message-protocol-types-method-apis"></a>Mapping method calls to native APIs</h5></div></div></div><p>
-+ APIs for D-BUS may map method calls to a method call in a specific
-+ programming language, such as C++, or may map a method call written
-+ in an IDL to a D-BUS message.
-+ </p><p>
-+ In APIs of this nature, arguments to a method are often termed "in"
-+ (which implies sent in the <code class="literal">METHOD_CALL</code>), or "out" (which implies
-+ returned in the <code class="literal">METHOD_RETURN</code>). Some APIs such as CORBA also have
-+ "inout" arguments, which are both sent and received, i.e. the caller
-+ passes in a value which is modified. Mapped to D-BUS, an "inout"
-+ argument is equivalent to an "in" argument, followed by an "out"
-+ argument. You can't pass things "by reference" over the wire, so
-+ "inout" is purely an illusion of the in-process API.
-+ </p><p>
-+ Given a method with zero or one return values, followed by zero or more
-+ arguments, where each argument may be "in", "out", or "inout", the
-+ caller constructs a message by appending each "in" or "inout" argument,
-+ in order. "out" arguments are not represented in the caller's message.
-+ </p><p>
-+ The recipient constructs a reply by appending first the return value
-+ if any, then each "out" or "inout" argument, in order.
-+ "in" arguments are not represented in the reply message.
-+ </p><p>
-+ Error replies are normally mapped to exceptions in languages that have
-+ exceptions.
-+ </p><p>
-+ In converting from native APIs to D-BUS, it is perhaps nice to
-+ map D-BUS naming conventions ("FooBar") to native conventions
-+ such as "fooBar" or "foo_bar" automatically. This is OK
-+ as long as you can say that the native API is one that
-+ was specifically written for D-BUS. It makes the most sense
-+ when writing object implementations that will be exported
-+ over the bus. Object proxies used to invoke remote D-BUS
-+ objects probably need the ability to call any D-BUS method,
-+ and thus a magic name mapping like this could be a problem.
-+ </p><p>
-+ This specification doesn't require anything of native API bindings;
-+ the preceding is only a suggested convention for consistency
-+ among bindings.
-+ </p></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-types-signal"></a>Signal Emission</h4></div></div></div><p>
-+ Unlike method calls, signal emissions have no replies.
-+ A signal emission is simply a single message of type <code class="literal">SIGNAL</code>.
-+ It must have three header fields: <code class="literal">PATH</code> giving the object
-+ the signal was emitted from, plus <code class="literal">INTERFACE</code> and <code class="literal">MEMBER</code> giving
-+ the fully-qualified name of the signal.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-types-errors"></a>Errors</h4></div></div></div><p>
-+ Messages of type <code class="literal">ERROR</code> are most commonly replies
-+ to a <code class="literal">METHOD_CALL</code>, but may be returned in reply
-+ to any kind of message. The message bus for example
-+ will return an <code class="literal">ERROR</code> in reply to a signal emission if
-+ the bus does not have enough memory to send the signal.
-+ </p><p>
-+ An <code class="literal">ERROR</code> may have any arguments, but if the first
-+ argument is a <code class="literal">STRING</code>, it must be an error message.
-+ The error message may be logged or shown to the user
-+ in some way.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-protocol-types-notation"></a>Notation in this document</h4></div></div></div><p>
-+ This document uses a simple pseudo-IDL to describe particular method
-+ calls and signals. Here is an example of a method call:
-+ </p><pre class="programlisting">
-+ org.freedesktop.DBus.StartServiceByName (in STRING name, in UINT32 flags,
-+ out UINT32 resultcode)
-+ </pre><p>
-+ This means <code class="literal">INTERFACE</code> = org.freedesktop.DBus, <code class="literal">MEMBER</code> = StartServiceByName,
-+ <code class="literal">METHOD_CALL</code> arguments are <code class="literal">STRING</code> and <code class="literal">UINT32</code>, <code class="literal">METHOD_RETURN</code> argument
-+ is <code class="literal">UINT32</code>. Remember that the <code class="literal">MEMBER</code> field can't contain any '.' (period)
-+ characters so it's known that the last part of the name in
-+ the "IDL" is the member name.
-+ </p><p>
-+ In C++ that might end up looking like this:
-+ </p><pre class="programlisting">
-+ unsigned int org::freedesktop::DBus::StartServiceByName (const char *name,
-+ unsigned int flags);
-+ </pre><p>
-+ or equally valid, the return value could be done as an argument:
-+ </p><pre class="programlisting">
-+ void org::freedesktop::DBus::StartServiceByName (const char *name,
-+ unsigned int flags,
-+ unsigned int *resultcode);
-+ </pre><p>
-+ It's really up to the API designer how they want to make
-+ this look. You could design an API where the namespace wasn't used
-+ in C++, using STL or Qt, using varargs, or whatever you wanted.
-+ </p><p>
-+ Signals are written as follows:
-+ </p><pre class="programlisting">
-+ org.freedesktop.DBus.NameLost (STRING name)
-+ </pre><p>
-+ Signals don't specify "in" vs. "out" because only
-+ a single direction is possible.
-+ </p><p>
-+ It isn't especially encouraged to use this lame pseudo-IDL in actual
-+ API implementations; you might use the native notation for the
-+ language you're using, or you might use COM or CORBA IDL, for example.
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-protocol-handling-invalid"></a>Invalid Protocol and Spec Extensions</h3></div></div></div><p>
-+ For security reasons, the D-BUS protocol should be strictly parsed and
-+ validated, with the exception of defined extension points. Any invalid
-+ protocol or spec violations should result in immediately dropping the
-+ connection without notice to the other end. Exceptions should be
-+ carefully considered, e.g. an exception may be warranted for a
-+ well-understood idiosyncracy of a widely-deployed implementation. In
-+ cases where the other end of a connection is 100% trusted and known to
-+ be friendly, skipping validation for performance reasons could also make
-+ sense in certain cases.
-+ </p><p>
-+ Generally speaking violations of the "must" requirements in this spec
-+ should be considered possible attempts to exploit security, and violations
-+ of the "should" suggestions should be considered legitimate (though perhaps
-+ they should generate an error in some cases).
-+ </p><p>
-+ The following extension points are built in to D-BUS on purpose and must
-+ not be treated as invalid protocol. The extension points are intended
-+ for use by future versions of this spec, they are not intended for third
-+ parties. At the moment, the only way a third party could extend D-BUS
-+ without breaking interoperability would be to introduce a way to negotiate new
-+ feature support as part of the auth protocol, using EXTENSION_-prefixed
-+ commands. There is not yet a standard way to negotiate features.
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ In the authentication protocol (see <a href="#auth-protocol" title="Authentication Protocol">the section called “Authentication Protocol”</a>) unknown
-+ commands result in an ERROR rather than a disconnect. This enables
-+ future extensions to the protocol. Commands starting with EXTENSION_ are
-+ reserved for third parties.
-+ </p></li><li><p>
-+ The authentication protocol supports pluggable auth mechanisms.
-+ </p></li><li><p>
-+ The address format (see <a href="#addresses" title="Server Addresses">the section called “Server Addresses”</a>) supports new
-+ kinds of transport.
-+ </p></li><li><p>
-+ Messages with an unknown type (something other than
-+ <code class="literal">METHOD_CALL</code>, <code class="literal">METHOD_RETURN</code>,
-+ <code class="literal">ERROR</code>, <code class="literal">SIGNAL</code>) are ignored.
-+ Unknown-type messages must still be well-formed in the same way
-+ as the known messages, however. They still have the normal
-+ header and body.
-+ </p></li><li><p>
-+ Header fields with an unknown or unexpected field code must be ignored,
-+ though again they must still be well-formed.
-+ </p></li><li><p>
-+ New standard interfaces (with new methods and signals) can of course be added.
-+ </p></li></ul></div><p>
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="auth-protocol"></a>Authentication Protocol</h2></div></div></div><p>
-+ Before the flow of messages begins, two applications must
-+ authenticate. A simple plain-text protocol is used for
-+ authentication; this protocol is a SASL profile, and maps fairly
-+ directly from the SASL specification. The message encoding is
-+ NOT used here, only plain text messages.
-+ </p><p>
-+ In examples, "C:" and "S:" indicate lines sent by the client and
-+ server respectively.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-protocol-overview"></a>Protocol Overview</h3></div></div></div><p>
-+ The protocol is a line-based protocol, where each line ends with
-+ \r\n. Each line begins with an all-caps ASCII command name containing
-+ only the character range [A-Z_], a space, then any arguments for the
-+ command, then the \r\n ending the line. The protocol is
-+ case-sensitive. All bytes must be in the ASCII character set.
-+
-+ Commands from the client to the server are as follows:
-+
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>AUTH [mechanism] [initial-response]</p></li><li><p>CANCEL</p></li><li><p>BEGIN</p></li><li><p>DATA <data in hex encoding></p></li><li><p>ERROR [human-readable error explanation]</p></li></ul></div><p>
-+
-+ From server to client are as follows:
-+
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>REJECTED <space-separated list of mechanism names></p></li><li><p>OK <GUID in hex></p></li><li><p>DATA <data in hex encoding></p></li><li><p>ERROR</p></li></ul></div><p>
-+ </p><p>
-+ Unofficial extensions to the command set must begin with the letters
-+ "EXTENSION_", to avoid conflicts with future official commands.
-+ For example, "EXTENSION_COM_MYDOMAIN_DO_STUFF".
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-nul-byte"></a>Special credentials-passing nul byte</h3></div></div></div><p>
-+ Immediately after connecting to the server, the client must send a
-+ single nul byte. This byte may be accompanied by credentials
-+ information on some operating systems that use sendmsg() with
-+ SCM_CREDS or SCM_CREDENTIALS to pass credentials over UNIX domain
-+ sockets. However, the nul byte must be sent even on other kinds of
-+ socket, and even on operating systems that do not require a byte to be
-+ sent in order to transmit credentials. The text protocol described in
-+ this document begins after the single nul byte. If the first byte
-+ received from the client is not a nul byte, the server may disconnect
-+ that client.
-+ </p><p>
-+ A nul byte in any context other than the initial byte is an error;
-+ the protocol is ASCII-only.
-+ </p><p>
-+ The credentials sent along with the nul byte may be used with the
-+ SASL mechanism EXTERNAL.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-command-auth"></a>AUTH command</h3></div></div></div><p>
-+ If an AUTH command has no arguments, it is a request to list
-+ available mechanisms. The server must respond with a REJECTED
-+ command listing the mechanisms it understands, or with an error.
-+ </p><p>
-+ If an AUTH command specifies a mechanism, and the server supports
-+ said mechanism, the server should begin exchanging SASL
-+ challenge-response data with the client using DATA commands.
-+ </p><p>
-+ If the server does not support the mechanism given in the AUTH
-+ command, it must send either a REJECTED command listing the mechanisms
-+ it does support, or an error.
-+ </p><p>
-+ If the [initial-response] argument is provided, it is intended for use
-+ with mechanisms that have no initial challenge (or an empty initial
-+ challenge), as if it were the argument to an initial DATA command. If
-+ the selected mechanism has an initial challenge and [initial-response]
-+ was provided, the server should reject authentication by sending
-+ REJECTED.
-+ </p><p>
-+ If authentication succeeds after exchanging DATA commands,
-+ an OK command must be sent to the client.
-+ </p><p>
-+ The first octet received by the client after the \r\n of the OK
-+ command must be the first octet of the authenticated/encrypted
-+ stream of D-BUS messages.
-+ </p><p>
-+ The first octet received by the server after the \r\n of the BEGIN
-+ command from the client must be the first octet of the
-+ authenticated/encrypted stream of D-BUS messages.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-command-cancel"></a>CANCEL Command</h3></div></div></div><p>
-+ At any time up to sending the BEGIN command, the client may send a
-+ CANCEL command. On receiving the CANCEL command, the server must
-+ send a REJECTED command and abort the current authentication
-+ exchange.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-command-data"></a>DATA Command</h3></div></div></div><p>
-+ The DATA command may come from either client or server, and simply
-+ contains a hex-encoded block of data to be interpreted
-+ according to the SASL mechanism in use.
-+ </p><p>
-+ Some SASL mechanisms support sending an "empty string";
-+ FIXME we need some way to do this.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-command-begin"></a>BEGIN Command</h3></div></div></div><p>
-+ The BEGIN command acknowledges that the client has received an
-+ OK command from the server, and that the stream of messages
-+ is about to begin.
-+ </p><p>
-+ The first octet received by the server after the \r\n of the BEGIN
-+ command from the client must be the first octet of the
-+ authenticated/encrypted stream of D-BUS messages.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-command-rejected"></a>REJECTED Command</h3></div></div></div><p>
-+ The REJECTED command indicates that the current authentication
-+ exchange has failed, and further exchange of DATA is inappropriate.
-+ The client would normally try another mechanism, or try providing
-+ different responses to challenges.
-+ </p><p>
-+ Optionally, the REJECTED command has a space-separated list of
-+ available auth mechanisms as arguments. If a server ever provides
-+ a list of supported mechanisms, it must provide the same list
-+ each time it sends a REJECTED message. Clients are free to
-+ ignore all lists received after the first.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-command-ok"></a>OK Command</h3></div></div></div><p>
-+ The OK command indicates that the client has been authenticated,
-+ and that further communication will be a stream of D-BUS messages
-+ (optionally encrypted, as negotiated) rather than this protocol.
-+ </p><p>
-+ The first octet received by the client after the \r\n of the OK
-+ command must be the first octet of the authenticated/encrypted
-+ stream of D-BUS messages.
-+ </p><p>
-+ The client must respond to the OK command by sending a BEGIN
-+ command, followed by its stream of messages, or by disconnecting.
-+ The server must not accept additional commands using this protocol
-+ after the OK command has been sent.
-+ </p><p>
-+ The OK command has one argument, which is the GUID of the server.
-+ See <a href="#addresses" title="Server Addresses">the section called “Server Addresses”</a> for more on server GUIDs.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-command-error"></a>ERROR Command</h3></div></div></div><p>
-+ The ERROR command indicates that either server or client did not
-+ know a command, does not accept the given command in the current
-+ context, or did not understand the arguments to the command. This
-+ allows the protocol to be extended; a client or server can send a
-+ command present or permitted only in new protocol versions, and if
-+ an ERROR is received instead of an appropriate response, fall back
-+ to using some other technique.
-+ </p><p>
-+ If an ERROR is sent, the server or client that sent the
-+ error must continue as if the command causing the ERROR had never been
-+ received. However, the the server or client receiving the error
-+ should try something other than whatever caused the error;
-+ if only canceling/rejecting the authentication.
-+ </p><p>
-+ If the D-BUS protocol changes incompatibly at some future time,
-+ applications implementing the new protocol would probably be able to
-+ check for support of the new protocol by sending a new command and
-+ receiving an ERROR from applications that don't understand it. Thus the
-+ ERROR feature of the auth protocol is an escape hatch that lets us
-+ negotiate extensions or changes to the D-BUS protocol in the future.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-examples"></a>Authentication examples</h3></div></div></div><p>
-+ </p><div class="figure"><a name="id2603769"></a><p class="title"><b>Figure 1. Example of successful magic cookie authentication</b></p><pre class="programlisting">
-+ (MAGIC_COOKIE is a made up mechanism)
-+
-+ C: AUTH MAGIC_COOKIE 3138363935333137393635383634
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </pre></div><p>
-+ </p><div class="figure"><a name="id2603787"></a><p class="title"><b>Figure 2. Example of finding out mechanisms then picking one</b></p><pre class="programlisting">
-+ C: AUTH
-+ S: REJECTED KERBEROS_V4 SKEY
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </pre></div><p>
-+ </p><div class="figure"><a name="id2603806"></a><p class="title"><b>Figure 3. Example of client sends unknown command then falls back to regular auth</b></p><pre class="programlisting">
-+ C: FOOBAR
-+ S: ERROR
-+ C: AUTH MAGIC_COOKIE 3736343435313230333039
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </pre></div><p>
-+ </p><div class="figure"><a name="id2603825"></a><p class="title"><b>Figure 4. Example of server doesn't support initial auth mechanism</b></p><pre class="programlisting">
-+ C: AUTH MAGIC_COOKIE 3736343435313230333039
-+ S: REJECTED KERBEROS_V4 SKEY
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </pre></div><p>
-+ </p><div class="figure"><a name="id2603845"></a><p class="title"><b>Figure 5. Example of wrong password or the like followed by successful retry</b></p><pre class="programlisting">
-+ C: AUTH MAGIC_COOKIE 3736343435313230333039
-+ S: REJECTED KERBEROS_V4 SKEY
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: REJECTED
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </pre></div><p>
-+ </p><div class="figure"><a name="id2603868"></a><p class="title"><b>Figure 6. Example of skey cancelled and restarted</b></p><pre class="programlisting">
-+ C: AUTH MAGIC_COOKIE 3736343435313230333039
-+ S: REJECTED KERBEROS_V4 SKEY
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: CANCEL
-+ S: REJECTED
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </pre></div><p>
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-states"></a>Authentication state diagrams</h3></div></div></div><p>
-+ This section documents the auth protocol in terms of
-+ a state machine for the client and the server. This is
-+ probably the most robust way to implement the protocol.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="auth-states-client"></a>Client states</h4></div></div></div><p>
-+ To more precisely describe the interaction between the
-+ protocol state machine and the authentication mechanisms the
-+ following notation is used: MECH(CHALL) means that the
-+ server challenge CHALL was fed to the mechanism MECH, which
-+ returns one of
-+
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ CONTINUE(RESP) means continue the auth conversation
-+ and send RESP as the response to the server;
-+ </p></li><li><p>
-+ OK(RESP) means that after sending RESP to the server
-+ the client side of the auth conversation is finished
-+ and the server should return "OK";
-+ </p></li><li><p>
-+ ERROR means that CHALL was invalid and could not be
-+ processed.
-+ </p></li></ul></div><p>
-+
-+ Both RESP and CHALL may be empty.
-+ </p><p>
-+ The Client starts by getting an initial response from the
-+ default mechanism and sends AUTH MECH RESP, or AUTH MECH if
-+ the mechanism did not provide an initial response. If the
-+ mechanism returns CONTINUE, the client starts in state
-+ <span class="emphasis"><em>WaitingForData</em></span>, if the mechanism
-+ returns OK the client starts in state
-+ <span class="emphasis"><em>WaitingForOK</em></span>.
-+ </p><p>
-+ The client should keep track of available mechanisms and
-+ which it mechanisms it has already attempted. This list is
-+ used to decide which AUTH command to send. When the list is
-+ exhausted, the client should give up and close the
-+ connection.
-+ </p><p><b><span class="emphasis"><em>WaitingForData</em></span>. </b>
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Receive DATA CHALL
-+ </p><table class="simplelist" border="0" summary="Simple list"><tr><td>
-+ MECH(CHALL) returns CONTINUE(RESP) → send
-+ DATA RESP, goto
-+ <span class="emphasis"><em>WaitingForData</em></span>
-+ </td></tr><tr><td>
-+ MECH(CHALL) returns OK(RESP) → send DATA
-+ RESP, goto <span class="emphasis"><em>WaitingForOK</em></span>
-+ </td></tr><tr><td>
-+ MECH(CHALL) returns ERROR → send ERROR
-+ [msg], goto <span class="emphasis"><em>WaitingForData</em></span>
-+ </td></tr></table><p>
-+ </p></li><li><p>
-+ Receive REJECTED [mechs] →
-+ send AUTH [next mech], goto
-+ WaitingForData or <span class="emphasis"><em>WaitingForOK</em></span>
-+ </p></li><li><p>
-+ Receive ERROR → send
-+ CANCEL, goto
-+ <span class="emphasis"><em>WaitingForReject</em></span>
-+ </p></li><li><p>
-+ Receive OK → send
-+ BEGIN, terminate auth
-+ conversation, authenticated
-+ </p></li><li><p>
-+ Receive anything else → send
-+ ERROR, goto
-+ <span class="emphasis"><em>WaitingForData</em></span>
-+ </p></li></ul></div><p>
-+ </p><p><b><span class="emphasis"><em>WaitingForOK</em></span>. </b>
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Receive OK → send BEGIN, terminate auth
-+ conversation, <span class="emphasis"><em>authenticated</em></span>
-+ </p></li><li><p>
-+ Receive REJECT [mechs] → send AUTH [next mech],
-+ goto <span class="emphasis"><em>WaitingForData</em></span> or
-+ <span class="emphasis"><em>WaitingForOK</em></span>
-+ </p></li><li><p>
-+ Receive DATA → send CANCEL, goto
-+ <span class="emphasis"><em>WaitingForReject</em></span>
-+ </p></li><li><p>
-+ Receive ERROR → send CANCEL, goto
-+ <span class="emphasis"><em>WaitingForReject</em></span>
-+ </p></li><li><p>
-+ Receive anything else → send ERROR, goto
-+ <span class="emphasis"><em>WaitingForOK</em></span>
-+ </p></li></ul></div><p>
-+ </p><p><b><span class="emphasis"><em>WaitingForReject</em></span>. </b>
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Receive REJECT [mechs] → send AUTH [next mech],
-+ goto <span class="emphasis"><em>WaitingForData</em></span> or
-+ <span class="emphasis"><em>WaitingForOK</em></span>
-+ </p></li><li><p>
-+ Receive anything else → terminate auth
-+ conversation, disconnect
-+ </p></li></ul></div><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="auth-states-server"></a>Server states</h4></div></div></div><p>
-+ For the server MECH(RESP) means that the client response
-+ RESP was fed to the the mechanism MECH, which returns one of
-+
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ CONTINUE(CHALL) means continue the auth conversation and
-+ send CHALL as the challenge to the client;
-+ </p></li><li><p>
-+ OK means that the client has been successfully
-+ authenticated;
-+ </p></li><li><p>
-+ REJECT means that the client failed to authenticate or
-+ there was an error in RESP.
-+ </p></li></ul></div><p>
-+
-+ The server starts out in state
-+ <span class="emphasis"><em>WaitingForAuth</em></span>. If the client is
-+ rejected too many times the server must disconnect the
-+ client.
-+ </p><p><b><span class="emphasis"><em>WaitingForAuth</em></span>. </b>
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Receive AUTH → send REJECTED [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </p></li><li><p>
-+ Receive AUTH MECH RESP
-+
-+ </p><table class="simplelist" border="0" summary="Simple list"><tr><td>
-+ MECH not valid mechanism → send REJECTED
-+ [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </td></tr><tr><td>
-+ MECH(RESP) returns CONTINUE(CHALL) → send
-+ DATA CHALL, goto
-+ <span class="emphasis"><em>WaitingForData</em></span>
-+ </td></tr><tr><td>
-+ MECH(RESP) returns OK → send OK, goto
-+ <span class="emphasis"><em>WaitingForBegin</em></span>
-+ </td></tr><tr><td>
-+ MECH(RESP) returns REJECT → send REJECTED
-+ [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </td></tr></table><p>
-+ </p></li><li><p>
-+ Receive BEGIN → terminate
-+ auth conversation, disconnect
-+ </p></li><li><p>
-+ Receive ERROR → send REJECTED [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </p></li><li><p>
-+ Receive anything else → send
-+ ERROR, goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </p></li></ul></div><p>
-+ </p><p><b><span class="emphasis"><em>WaitingForData</em></span>. </b>
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Receive DATA RESP
-+ </p><table class="simplelist" border="0" summary="Simple list"><tr><td>
-+ MECH(RESP) returns CONTINUE(CHALL) → send
-+ DATA CHALL, goto
-+ <span class="emphasis"><em>WaitingForData</em></span>
-+ </td></tr><tr><td>
-+ MECH(RESP) returns OK → send OK, goto
-+ <span class="emphasis"><em>WaitingForBegin</em></span>
-+ </td></tr><tr><td>
-+ MECH(RESP) returns REJECT → send REJECTED
-+ [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </td></tr></table><p>
-+ </p></li><li><p>
-+ Receive BEGIN → terminate auth conversation,
-+ disconnect
-+ </p></li><li><p>
-+ Receive CANCEL → send REJECTED [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </p></li><li><p>
-+ Receive ERROR → send REJECTED [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </p></li><li><p>
-+ Receive anything else → send ERROR, goto
-+ <span class="emphasis"><em>WaitingForData</em></span>
-+ </p></li></ul></div><p>
-+ </p><p><b><span class="emphasis"><em>WaitingForBegin</em></span>. </b>
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Receive BEGIN → terminate auth conversation,
-+ client authenticated
-+ </p></li><li><p>
-+ Receive CANCEL → send REJECTED [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </p></li><li><p>
-+ Receive ERROR → send REJECTED [mechs], goto
-+ <span class="emphasis"><em>WaitingForAuth</em></span>
-+ </p></li><li><p>
-+ Receive anything else → send ERROR, goto
-+ <span class="emphasis"><em>WaitingForBegin</em></span>
-+ </p></li></ul></div><p>
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="auth-mechanisms"></a>Authentication mechanisms</h3></div></div></div><p>
-+ This section describes some new authentication mechanisms.
-+ D-BUS also allows any standard SASL mechanism of course.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="auth-mechanisms-sha"></a>DBUS_COOKIE_SHA1</h4></div></div></div><p>
-+ The DBUS_COOKIE_SHA1 mechanism is designed to establish that a client
-+ has the ability to read a private file owned by the user being
-+ authenticated. If the client can prove that it has access to a secret
-+ cookie stored in this file, then the client is authenticated.
-+ Thus the security of DBUS_COOKIE_SHA1 depends on a secure home
-+ directory.
-+ </p><p>
-+ Authentication proceeds as follows:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ The client sends the username it would like to authenticate
-+ as.
-+ </p></li><li><p>
-+ The server sends the name of its "cookie context" (see below); a
-+ space character; the integer ID of the secret cookie the client
-+ must demonstrate knowledge of; a space character; then a
-+ hex-encoded randomly-generated challenge string.
-+ </p></li><li><p>
-+ The client locates the cookie, and generates its own hex-encoded
-+ randomly-generated challenge string. The client then
-+ concatentates the server's hex-encoded challenge, a ":"
-+ character, its own hex-encoded challenge, another ":" character,
-+ and the hex-encoded cookie. It computes the SHA-1 hash of this
-+ composite string. It sends back to the server the client's
-+ hex-encoded challenge string, a space character, and the SHA-1
-+ hash.
-+ </p></li><li><p>
-+ The server generates the same concatenated string used by the
-+ client and computes its SHA-1 hash. It compares the hash with
-+ the hash received from the client; if the two hashes match, the
-+ client is authenticated.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ Each server has a "cookie context," which is a name that identifies a
-+ set of cookies that apply to that server. A sample context might be
-+ "org_freedesktop_session_bus". Context names must be valid ASCII,
-+ nonzero length, and may not contain the characters slash ("/"),
-+ backslash ("\"), space (" "), newline ("\n"), carriage return ("\r"),
-+ tab ("\t"), or period ("."). There is a default context,
-+ "org_freedesktop_general" that's used by servers that do not specify
-+ otherwise.
-+ </p><p>
-+ Cookies are stored in a user's home directory, in the directory
-+ <code class="filename">~/.dbus-keyrings/</code>. This directory must
-+ not be readable or writable by other users. If it is,
-+ clients and servers must ignore it. The directory
-+ contains cookie files named after the cookie context.
-+ </p><p>
-+ A cookie file contains one cookie per line. Each line
-+ has three space-separated fields:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ The cookie ID number, which must be a non-negative integer and
-+ may not be used twice in the same file.
-+ </p></li><li><p>
-+ The cookie's creation time, in UNIX seconds-since-the-epoch
-+ format.
-+ </p></li><li><p>
-+ The cookie itself, a hex-encoded random block of bytes. The cookie
-+ may be of any length, though obviously security increases
-+ as the length increases.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ Only server processes modify the cookie file.
-+ They must do so with this procedure:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Create a lockfile name by appending ".lock" to the name of the
-+ cookie file. The server should attempt to create this file
-+ using <code class="literal">O_CREAT | O_EXCL</code>. If file creation
-+ fails, the lock fails. Servers should retry for a reasonable
-+ period of time, then they may choose to delete an existing lock
-+ to keep users from having to manually delete a stale
-+ lock. <sup>[<a name="id2604701" href="#ftn.id2604701">1</a>]</sup>
-+ </p></li><li><p>
-+ Once the lockfile has been created, the server loads the cookie
-+ file. It should then delete any cookies that are old (the
-+ timeout can be fairly short), or more than a reasonable
-+ time in the future (so that cookies never accidentally
-+ become permanent, if the clock was set far into the future
-+ at some point). If no recent keys remain, the
-+ server may generate a new key.
-+ </p></li><li><p>
-+ The pruned and possibly added-to cookie file
-+ must be resaved atomically (using a temporary
-+ file which is rename()'d).
-+ </p></li><li><p>
-+ The lock must be dropped by deleting the lockfile.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ Clients need not lock the file in order to load it,
-+ because servers are required to save the file atomically.
-+ </p></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="addresses"></a>Server Addresses</h2></div></div></div><p>
-+ Server addresses consist of a transport name followed by a colon, and
-+ then an optional, comma-separated list of keys and values in the form key=value.
-+ Each value is escaped.
-+ </p><p>
-+ For example:
-+ </p><pre class="programlisting">unix:path=/tmp/dbus-test</pre><p>
-+ Which is the address to a unix socket with the path /tmp/dbus-test.
-+ </p><p>
-+ Value escaping is similar to URI escaping but simpler.
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ The set of optionally-escaped bytes is:
-+ <code class="literal">[0-9A-Za-z_-/.\]</code>. To escape, each
-+ <span class="emphasis"><em>byte</em></span> (note, not character) which is not in the
-+ set of optionally-escaped bytes must be replaced with an ASCII
-+ percent (<code class="literal">%</code>) and the value of the byte in hex.
-+ The hex value must always be two digits, even if the first digit is
-+ zero. The optionally-escaped bytes may be escaped if desired.
-+ </p></li><li><p>
-+ To unescape, append each byte in the value; if a byte is an ASCII
-+ percent (<code class="literal">%</code>) character then append the following
-+ hex value instead. It is an error if a <code class="literal">%</code> byte
-+ does not have two hex digits following. It is an error if a
-+ non-optionally-escaped byte is seen unescaped.
-+ </p></li></ul></div><p>
-+ The set of optionally-escaped bytes is intended to preserve address
-+ readability and convenience.
-+ </p><p>
-+ A server may specify a key-value pair with the key <code class="literal">guid</code>
-+ and the value a hex-encoded 16-byte sequence. This globally unique ID must
-+ be created by filling the first 4 bytes with a 32-bit UNIX time since the
-+ epoch, and the remaining 12 bytes with random bytes. If present, the GUID
-+ may be used to distinguish one server from another. A server should use a
-+ different GUID for each address it listens on. For example, if a message
-+ bus daemon offers both UNIX domain socket and TCP connections, but treats
-+ clients the same regardless of how they connect, those two connections are
-+ equivalent post-connection but should have distinct GUIDs to distinguish
-+ the kinds of connection.
-+ </p><p>
-+ The intent of the GUID feature is to allow a client to avoid opening
-+ multiple identical connections to the same server, by allowing the client
-+ to check whether an address corresponds to an already-existing connection.
-+ Comparing two addresses is insufficient, because addresses can be recycled
-+ by distinct servers.
-+ </p><p>
-+ [FIXME clarify if attempting to connect to each is a requirement
-+ or just a suggestion]
-+ When connecting to a server, multiple server addresses can be
-+ separated by a semi-colon. The library will then try to connect
-+ to the first address and if that fails, it'll try to connect to
-+ the next one specified, and so forth. For example
-+ </p><pre class="programlisting">unix:path=/tmp/dbus-test;unix:path=/tmp/dbus-test2</pre><p>
-+ </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="transports"></a>Transports</h2></div></div></div><p>
-+ [FIXME we need to specify in detail each transport and its possible arguments]
-+
-+ Current transports include: unix domain sockets (including
-+ abstract namespace on linux), TCP/IP, and a debug/testing transport using
-+ in-process pipes. Future possible transports include one that
-+ tunnels over X11 protocol.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="transports-unix-domain-sockets"></a>Unix Domain Sockets</h3></div></div></div><p>
-+ Unix domain sockets can be either paths in the file system or on Linux
-+ kernels, they can be abstract which are similar to paths but i
-+ do not show up in the file system.
-+ </p><p>
-+ When a socket is opened by the D-Bus library it truncates the path
-+ name right befor the first trailing Nul byte. This is true for both
-+ normal paths and abstract paths. Note that this is a departure from
-+ previous versions of D-Bus that would create sockets with a fixed
-+ length path name. Names which were shorter than the fixed length
-+ would be padded by Nul bytes.
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="naming-conventions"></a>Naming Conventions</h2></div></div></div><p>
-+ D-BUS namespaces are all lowercase and correspond to reversed domain
-+ names, as with Java. e.g. "org.freedesktop"
-+ </p><p>
-+ Interface, signal, method, and property names are "WindowsStyleCaps", note
-+ that the first letter is capitalized, unlike Java.
-+ </p><p>
-+ Object paths are normally all lowercase with underscores used rather than
-+ hyphens.
-+ </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="standard-interfaces"></a>Standard Interfaces</h2></div></div></div><p>
-+ See <a href="#message-protocol-types-notation" title="Notation in this document">the section called “Notation in this document”</a> for details on
-+ the notation used in this section. There are some standard interfaces
-+ that may be useful across various D-BUS applications.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="standard-interfaces-peer"></a><code class="literal">org.freedesktop.DBus.Peer</code></h3></div></div></div><p>
-+ The <code class="literal">org.freedesktop.DBus.Peer</code> interface
-+ has one method:
-+ </p><pre class="programlisting">
-+ org.freedesktop.DBus.Peer.Ping ()
-+ </pre><p>
-+ </p><p>
-+ On receipt of the <code class="literal">METHOD_CALL</code> message
-+ <code class="literal">org.freedesktop.DBus.Peer.Ping</code>, an application should do
-+ nothing other than reply with a <code class="literal">METHOD_RETURN</code> as
-+ usual. It does not matter which object path a ping is sent to. The
-+ reference implementation should simply handle this method on behalf of
-+ all objects, though it doesn't yet. (The point is, you're really pinging
-+ the peer process, not a specific object.)
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="standard-interfaces-introspectable"></a><code class="literal">org.freedesktop.DBus.Introspectable</code></h3></div></div></div><p>
-+ This interface has one method:
-+ </p><pre class="programlisting">
-+ org.freedesktop.DBus.Introspectable.Introspect (out STRING xml_data)
-+ </pre><p>
-+ </p><p>
-+ Objects instances may implement
-+ <code class="literal">Introspect</code> which returns an XML description of
-+ the object, including its interfaces (with signals and methods), objects
-+ below it in the object path tree, and its properties.
-+ </p><p>
-+ <a href="#introspection-format" title="Introspection Data Format">the section called “Introspection Data Format”</a> describes the format of this XML string.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="standard-interfaces-properties"></a><code class="literal">org.freedesktop.DBus.Properties</code></h3></div></div></div><p>
-+ Many native APIs will have a concept of object <em class="firstterm">properties</em>
-+ or <em class="firstterm">attributes</em>. These can be exposed via the
-+ <code class="literal">org.freedesktop.DBus.Properties</code> interface.
-+ </p><p>
-+ </p><pre class="programlisting">
-+ org.freedesktop.DBus.Properties.Get (in STRING interface_name,
-+ in STRING property_name,
-+ out VARIANT value);
-+ org.freedesktop.DBus.Properties.Set (in STRING interface_name,
-+ in STRING property_name,
-+ in VARIANT value);
-+ </pre><p>
-+ </p><p>
-+ The available properties and whether they are writable can be determined
-+ by calling <code class="literal">org.freedesktop.DBus.Introspectable.Introspect</code>,
-+ see <a href="#standard-interfaces-introspectable" title="org.freedesktop.DBus.Introspectable">the section called “<code class="literal">org.freedesktop.DBus.Introspectable</code>”</a>.
-+ </p><p>
-+ An empty string may be provided for the interface name; in this case,
-+ if there are multiple properties on an object with the same name,
-+ the results are undefined (picking one by according to an arbitrary
-+ deterministic rule, or returning an error, are the reasonable
-+ possibilities).
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="introspection-format"></a>Introspection Data Format</h2></div></div></div><p>
-+ As described in <a href="#standard-interfaces-introspectable" title="org.freedesktop.DBus.Introspectable">the section called “<code class="literal">org.freedesktop.DBus.Introspectable</code>”</a>,
-+ objects may be introspected at runtime, returning an XML string
-+ that describes the object. The same XML format may be used in
-+ other contexts as well, for example as an "IDL" for generating
-+ static language bindings.
-+ </p><p>
-+ Here is an example of introspection data:
-+ </p><pre class="programlisting">
-+ <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
-+ <node name="/org/freedesktop/sample_object">
-+ <interface name="org.freedesktop.SampleInterface">
-+ <method name="Frobate">
-+ <arg name="foo" type="i" direction="in"/>
-+ <arg name="bar" type="s" direction="out"/>
-+ <arg name="baz" type="a{us}" direction="out"/>
-+ <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
-+ </method>
-+ <method name="Bazify">
-+ <arg name="bar" type="(iiu)" direction="in"/>
-+ <arg name="bar" type="v" direction="out"/>
-+ </method>
-+ <method name="Mogrify">
-+ <arg name="bar" type="(iiav)" direction="in"/>
-+ </method>
-+ <signal name="Changed">
-+ <arg name="new_value" type="b"/>
-+ </signal>
-+ <property name="Bar" type="y" access="readwrite"/>
-+ </interface>
-+ <node name="child_of_sample_object"/>
-+ <node name="another_child_of_sample_object"/>
-+ </node>
-+ </pre><p>
-+ </p><p>
-+ A more formal DTD and spec needs writing, but here are some quick notes.
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Only the root <node> element can omit the node name, as it's
-+ known to be the object that was introspected. If the root
-+ <node> does have a name attribute, it must be an absolute
-+ object path. If child <node> have object paths, they must be
-+ relative.
-+ </p></li><li><p>
-+ If a child <node> has any sub-elements, then they
-+ must represent a complete introspection of the child.
-+ If a child <node> is empty, then it may or may
-+ not have sub-elements; the child must be introspected
-+ in order to find out. The intent is that if an object
-+ knows that its children are "fast" to introspect
-+ it can go ahead and return their information, but
-+ otherwise it can omit it.
-+ </p></li><li><p>
-+ The direction element on <arg> may be omitted,
-+ in which case it defaults to "in" for method calls
-+ and "out" for signals. Signals only allow "out"
-+ so while direction may be specified, it's pointless.
-+ </p></li><li><p>
-+ The possible directions are "in" and "out",
-+ unlike CORBA there is no "inout"
-+ </p></li><li><p>
-+ The possible property access flags are
-+ "readwrite", "read", and "write"
-+ </p></li><li><p>
-+ Multiple interfaces can of course be listed for
-+ one <node>.
-+ </p></li><li><p>
-+ The "name" attribute on arguments is optional.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ Method, interface, property, and signal elements may have
-+ "annotations", which are generic key/value pairs of metadata.
-+ They are similar conceptually to Java's annotations and C# attributes.
-+ Well-known annotations:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Name</th><th>Values (separated by ,)</th><th>Description</th></tr></thead><tbody><tr><td>org.freedesktop.DBus.Deprecated</td><td>true,false</td><td>Whether or not the entity is deprecated; defaults to false</td></tr><tr><td>org.freedesktop.DBus.GLib.CSymbol</td><td>(string)</td><td>The C symbol; may be used for methods and interfaces</td></tr><tr><td>org.freedesktop.DBus.Method.NoReply</td><td>true,false</td><td>If set, don't expect a reply to the method call; defaults to false.</td></tr></tbody></table></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="message-bus"></a>Message Bus Specification</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-bus-overview"></a>Message Bus Overview</h3></div></div></div><p>
-+ The message bus accepts connections from one or more applications.
-+ Once connected, applications can exchange messages with other
-+ applications that are also connected to the bus.
-+ </p><p>
-+ In order to route messages among connections, the message bus keeps a
-+ mapping from names to connections. Each connection has one
-+ unique-for-the-lifetime-of-the-bus name automatically assigned.
-+ Applications may request additional names for a connection. Additional
-+ names are usually "well-known names" such as
-+ "org.freedesktop.TextEditor". When a name is bound to a connection,
-+ that connection is said to <em class="firstterm">own</em> the name.
-+ </p><p>
-+ The bus itself owns a special name, <code class="literal">org.freedesktop.DBus</code>.
-+ This name routes messages to the bus, allowing applications to make
-+ administrative requests. For example, applications can ask the bus
-+ to assign a name to a connection.
-+ </p><p>
-+ Each name may have <em class="firstterm">queued owners</em>. When an
-+ application requests a name for a connection and the name is already in
-+ use, the bus will optionally add the connection to a queue waiting for
-+ the name. If the current owner of the name disconnects or releases
-+ the name, the next connection in the queue will become the new owner.
-+ </p><p>
-+ This feature causes the right thing to happen if you start two text
-+ editors for example; the first one may request "org.freedesktop.TextEditor",
-+ and the second will be queued as a possible owner of that name. When
-+ the first exits, the second will take over.
-+ </p><p>
-+ Messages may have a <code class="literal">DESTINATION</code> field (see <a href="#message-protocol-header-fields" title="Header Fields">the section called “Header Fields”</a>). If the
-+ <code class="literal">DESTINATION</code> field is present, it specifies a message
-+ recipient by name. Method calls and replies normally specify this field.
-+ </p><p>
-+ Signals normally do not specify a destination; they are sent to all
-+ applications with <em class="firstterm">message matching rules</em> that
-+ match the message.
-+ </p><p>
-+ When the message bus receives a method call, if the
-+ <code class="literal">DESTINATION</code> field is absent, the call is taken to be
-+ a standard one-to-one message and interpreted by the message bus
-+ itself. For example, sending an
-+ <code class="literal">org.freedesktop.DBus.Peer.Ping</code> message with no
-+ <code class="literal">DESTINATION</code> will cause the message bus itself to
-+ reply to the ping immediately; the message bus will not make this
-+ message visible to other applications.
-+ </p><p>
-+ Continuing the <code class="literal">org.freedesktop.DBus.Peer.Ping</code> example, if
-+ the ping message were sent with a <code class="literal">DESTINATION</code> name of
-+ <code class="literal">com.yoyodyne.Screensaver</code>, then the ping would be
-+ forwarded, and the Yoyodyne Corporation screensaver application would be
-+ expected to reply to the ping.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-bus-names"></a>Message Bus Names</h3></div></div></div><p>
-+ Each connection has at least one name, assigned at connection time and
-+ returned in response to the
-+ <code class="literal">org.freedesktop.DBus.Hello</code> method call. This
-+ automatically-assigned name is called the connection's <em class="firstterm">unique
-+ name</em>. Unique names are never reused for two different
-+ connections to the same bus.
-+ </p><p>
-+ Ownership of a unique name is a prerequisite for interaction with
-+ the message bus. It logically follows that the unique name is always
-+ the first name that an application comes to own, and the last
-+ one that it loses ownership of.
-+ </p><p>
-+ Unique connection names must begin with the character ':' (ASCII colon
-+ character); bus names that are not unique names must not begin
-+ with this character. (The bus must reject any attempt by an application
-+ to manually request a name beginning with ':'.) This restriction
-+ categorically prevents "spoofing"; messages sent to a unique name
-+ will always go to the expected connection.
-+ </p><p>
-+ When a connection is closed, all the names that it owns are deleted (or
-+ transferred to the next connection in the queue if any).
-+ </p><p>
-+ A connection can request additional names to be associated with it using
-+ the <code class="literal">org.freedesktop.DBus.RequestName</code> message. <a href="#message-protocol-names-bus" title="Bus names">the section called “Bus names”</a> describes the format of a valid
-+ name. These names can be released again using the
-+ <code class="literal">org.freedesktop.DBus.ReleaseName</code> message.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-request-name"></a><code class="literal">org.freedesktop.DBus.RequestName</code></h4></div></div></div><p>
-+ As a method:
-+ </p><pre class="programlisting">
-+ UINT32 RequestName (in STRING name, in UINT32 flags)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name to request</td></tr><tr><td>1</td><td>UINT32</td><td>Flags</td></tr></tbody></table></div><p>
-+ Reply arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>UINT32</td><td>Return value</td></tr></tbody></table></div><p>
-+ </p><p>
-+ This method call should be sent to
-+ <code class="literal">org.freedesktop.DBus</code> and asks the message bus to
-+ assign the given name to the method caller. Each name maintains a
-+ queue of possible owners, where the head of the queue is the primary
-+ or current owner of the name. Each potential owner in the queue
-+ maintains the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and
-+ DBUS_NAME_FLAG_DO_NOT_QUEUE settings from its latest RequestName
-+ call. When RequestName is invoked the following occurs:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ If the method caller is currently the primary owner of the name,
-+ the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and DBUS_NAME_FLAG_DO_NOT_QUEUE
-+ values are updated with the values from the new RequestName call,
-+ and nothing further happens.
-+ </p></li><li><p>
-+ If the current primary owner (head of the queue) has
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT set, and the RequestName
-+ invocation has the DBUS_NAME_FLAG_REPLACE_EXISTING flag, then
-+ the caller of RequestName replaces the current primary owner at
-+ the head of the queue and the current primary owner moves to the
-+ second position in the queue. If the caller of RequestName was
-+ in the queue previously its flags are updated with the values from
-+ the new RequestName in addition to moving it to the head of the queue.
-+ </p></li><li><p>
-+ If replacement is not possible, and the method caller is
-+ currently in the queue but not the primary owner, its flags are
-+ updated with the values from the new RequestName call.
-+ </p></li><li><p>
-+ If replacement is not possible, and the method caller is
-+ currently not in the queue, the method caller is appended to the
-+ queue.
-+ </p></li><li><p>
-+ If any connection in the queue has DBUS_NAME_FLAG_DO_NOT_QUEUE
-+ set and is not the primary owner, it is removed from the
-+ queue. This can apply to the previous primary owner (if it
-+ was replaced) or the method caller (if it updated the
-+ DBUS_NAME_FLAG_DO_NOT_QUEUE flag while still stuck in the
-+ queue, or if it was just added to the queue with that flag set).
-+ </p></li></ul></div><p>
-+ </p><p>
-+ Note that DBUS_NAME_FLAG_REPLACE_EXISTING results in "jumping the
-+ queue," even if another application already in the queue had specified
-+ DBUS_NAME_FLAG_REPLACE_EXISTING. This comes up if a primary owner
-+ that does not allow replacement goes away, and the next primary owner
-+ does allow replacement. In this case, queued items that specified
-+ DBUS_NAME_FLAG_REPLACE_EXISTING <span class="emphasis"><em>do not</em></span>
-+ automatically replace the new primary owner. In other words,
-+ DBUS_NAME_FLAG_REPLACE_EXISTING is not saved, it is only used at the
-+ time RequestName is called. This is deliberate to avoid an infinite loop
-+ anytime two applications are both DBUS_NAME_FLAG_ALLOW_REPLACEMENT
-+ and DBUS_NAME_FLAG_REPLACE_EXISTING.
-+ </p><p>
-+ The flags argument contains any of the following values logically ORed
-+ together:
-+
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Conventional Name</th><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>DBUS_NAME_FLAG_ALLOW_REPLACEMENT</td><td>0x1</td><td>
-+
-+ If an application A specifies this flag and succeeds in
-+ becoming the owner of the name, and another application B
-+ later calls RequestName with the
-+ DBUS_NAME_FLAG_REPLACE_EXISTING flag, then application A
-+ will lose ownership and receive a
-+ <code class="literal">org.freedesktop.DBus.NameLost</code> signal, and
-+ application B will become the new owner. If DBUS_NAME_FLAG_ALLOW_REPLACEMENT
-+ is not specified by application A, or DBUS_NAME_FLAG_REPLACE_EXISTING
-+ is not specified by application B, then application B will not replace
-+ application A as the owner.
-+
-+ </td></tr><tr><td>DBUS_NAME_FLAG_REPLACE_EXISTING</td><td>0x2</td><td>
-+
-+ Try to replace the current owner if there is one. If this
-+ flag is not set the application will only become the owner of
-+ the name if there is no current owner. If this flag is set,
-+ the application will replace the current owner if
-+ the current owner specified DBUS_NAME_FLAG_ALLOW_REPLACEMENT.
-+
-+ </td></tr><tr><td>DBUS_NAME_FLAG_DO_NOT_QUEUE</td><td>0x4</td><td>
-+
-+ Without this flag, if an application requests a name that is
-+ already owned, the application will be placed in a queue to
-+ own the name when the current owner gives it up. If this
-+ flag is given, the application will not be placed in the
-+ queue, the request for the name will simply fail. This flag
-+ also affects behavior when an application is replaced as
-+ name owner; by default the application moves back into the
-+ waiting queue, unless this flag was provided when the application
-+ became the name owner.
-+
-+ </td></tr></tbody></table></div><p>
-+
-+ The return code can be one of the following values:
-+
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Conventional Name</th><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER</td><td>1</td><td>The caller is now the primary owner of
-+ the name, replacing any previous owner. Either the name had no
-+ owner before, or the caller specified
-+ DBUS_NAME_FLAG_REPLACE_EXISTING and the current owner specified
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT.</td></tr><tr><td>DBUS_REQUEST_NAME_REPLY_IN_QUEUE</td><td>2</td><td>The name already had an owner,
-+ DBUS_NAME_FLAG_DO_NOT_QUEUE was not specified, and either
-+ the current owner did not specify
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT or the requesting
-+ application did not specify DBUS_NAME_FLAG_REPLACE_EXISTING.
-+ </td></tr><tr><td>DBUS_REQUEST_NAME_REPLY_EXISTS</td><td>3</td><td>The name already has an owner,
-+ DBUS_NAME_FLAG_DO_NOT_QUEUE was specified, and either
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT was not specified by the
-+ current owner, or DBUS_NAME_FLAG_REPLACE_EXISTING was not
-+ specified by the requesting application.</td></tr><tr><td>DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER</td><td>4</td><td>The application trying to request ownership of a name is already the owner of it.</td></tr></tbody></table></div><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-release-name"></a><code class="literal">org.freedesktop.DBus.ReleaseName</code></h4></div></div></div><p>
-+ As a method:
-+ </p><pre class="programlisting">
-+ UINT32 ReleaseName (in STRING name)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name to release</td></tr></tbody></table></div><p>
-+ Reply arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>UINT32</td><td>Return value</td></tr></tbody></table></div><p>
-+ </p><p>
-+ This method call should be sent to
-+ <code class="literal">org.freedesktop.DBus</code> and asks the message bus to
-+ release the method caller's claim to the given name. If the caller is
-+ the primary owner, a new primary owner will be selected from the
-+ queue if any other owners are waiting. If the caller is waiting in
-+ the queue for the name, the caller will removed from the queue and
-+ will not be made an owner of the name if it later becomes available.
-+ If there are no other owners in the queue for the name, it will be
-+ removed from the bus entirely.
-+
-+ The return code can be one of the following values:
-+
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Conventional Name</th><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>DBUS_RELEASE_NAME_REPLY_RELEASED</td><td>1</td><td>The caller has released his claim on
-+ the given name. Either the caller was the primary owner of
-+ the name, and the name is now unused or taken by somebody
-+ waiting in the queue for the name, or the caller was waiting
-+ in the queue for the name and has now been removed from the
-+ queue.</td></tr><tr><td>DBUS_RELEASE_NAME_REPLY_NON_EXISTENT</td><td>2</td><td>The given name does not exist on this bus.</td></tr><tr><td>DBUS_RELEASE_NAME_REPLY_NOT_OWNER</td><td>3</td><td>The caller was not the primary owner of this name,
-+ and was also not waiting in the queue to own this name.</td></tr></tbody></table></div><p>
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-bus-routing"></a>Message Bus Message Routing</h3></div></div></div><p>
-+ FIXME
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-bus-starting-services"></a>Message Bus Starting Services</h3></div></div></div><p>
-+ The message bus can start applications on behalf of other applications.
-+ In CORBA terms, this would be called <em class="firstterm">activation</em>.
-+ An application that can be started in this way is called a
-+ <em class="firstterm">service</em>.
-+ </p><p>
-+ With D-BUS, starting a service is normally done by name. That is,
-+ applications ask the message bus to start some program that will own a
-+ well-known name, such as <code class="literal">org.freedesktop.TextEditor</code>.
-+ This implies a contract documented along with the name
-+ <code class="literal">org.freedesktop.TextEditor</code> for which objects
-+ the owner of that name will provide, and what interfaces those
-+ objects will have.
-+ </p><p>
-+ To find an executable corresponding to a particular name, the bus daemon
-+ looks for <em class="firstterm">service description files</em>. Service
-+ description files define a mapping from names to executables. Different
-+ kinds of message bus will look for these files in different places, see
-+ <a href="#message-bus-types" title="Well-known Message Bus Instances">the section called “Well-known Message Bus Instances”</a>.
-+ </p><p>
-+ [FIXME the file format should be much better specified than "similar to
-+ .desktop entries" esp. since desktop entries are already
-+ badly-specified. ;-)] Service description files have the ".service" file
-+ extension. The message bus will only load service description files
-+ ending with .service; all other files will be ignored. The file format
-+ is similar to that of <a href="http://www.freedesktop.org/standards/desktop-entry-spec/desktop-entry-spec.html" target="_top">desktop
-+ entries</a>. All service description files must be in UTF-8
-+ encoding. To ensure that there will be no name collisions, service files
-+ must be namespaced using the same mechanism as messages and service
-+ names.
-+
-+ </p><div class="figure"><a name="id2606426"></a><p class="title"><b>Figure 7. Example service description file</b></p><pre class="programlisting">
-+ # Sample service description file
-+ [D-BUS Service]
-+ Names=org.freedesktop.ConfigurationDatabase;org.gnome.GConf;
-+ Exec=/usr/libexec/gconfd-2
-+ </pre></div><p>
-+ </p><p>
-+ When an application asks to start a service by name, the bus daemon tries to
-+ find a service that will own that name. It then tries to spawn the
-+ executable associated with it. If this fails, it will report an
-+ error. [FIXME what happens if two .service files offer the same service;
-+ what kind of error is reported, should we have a way for the client to
-+ choose one?]
-+ </p><p>
-+ The executable launched will have the environment variable
-+ <code class="literal">DBUS_STARTER_ADDRESS</code> set to the address of the
-+ message bus so it can connect and request the appropriate names.
-+ </p><p>
-+ The executable being launched may want to know whether the message bus
-+ starting it is one of the well-known message buses (see <a href="#message-bus-types" title="Well-known Message Bus Instances">the section called “Well-known Message Bus Instances”</a>). To facilitate this, the bus must also set
-+ the <code class="literal">DBUS_STARTER_BUS_TYPE</code> environment variable if it is one
-+ of the well-known buses. The currently-defined values for this variable
-+ are <code class="literal">system</code> for the systemwide message bus,
-+ and <code class="literal">session</code> for the per-login-session message
-+ bus. The new executable must still connect to the address given
-+ in <code class="literal">DBUS_STARTER_ADDRESS</code>, but may assume that the
-+ resulting connection is to the well-known bus.
-+ </p><p>
-+ [FIXME there should be a timeout somewhere, either specified
-+ in the .service file, by the client, or just a global value
-+ and if the client being activated fails to connect within that
-+ timeout, an error should be sent back.]
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-bus-starting-services-scope"></a>Message Bus Service Scope</h4></div></div></div><p>
-+ The "scope" of a service is its "per-", such as per-session,
-+ per-machine, per-home-directory, or per-display. The reference
-+ implementation doesn't yet support starting services in a different
-+ scope from the message bus itself. So e.g. if you start a service
-+ on the session bus its scope is per-session.
-+ </p><p>
-+ We could add an optional scope to a bus name. For example, for
-+ per-(display,session pair), we could have a unique ID for each display
-+ generated automatically at login and set on screen 0 by executing a
-+ special "set display ID" binary. The ID would be stored in a
-+ <code class="literal">_DBUS_DISPLAY_ID</code> property and would be a string of
-+ random bytes. This ID would then be used to scope names.
-+ Starting/locating a service could be done by ID-name pair rather than
-+ only by name.
-+ </p><p>
-+ Contrast this with a per-display scope. To achieve that, we would
-+ want a single bus spanning all sessions using a given display.
-+ So we might set a <code class="literal">_DBUS_DISPLAY_BUS_ADDRESS</code>
-+ property on screen 0 of the display, pointing to this bus.
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-bus-types"></a>Well-known Message Bus Instances</h3></div></div></div><p>
-+ Two standard message bus instances are defined here, along with how
-+ to locate them and where their service files live.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-bus-types-login"></a>Login session message bus</h4></div></div></div><p>
-+ Each time a user logs in, a <em class="firstterm">login session message
-+ bus</em> may be started. All applications in the user's login
-+ session may interact with one another using this message bus.
-+ </p><p>
-+ The address of the login session message bus is given
-+ in the <code class="literal">DBUS_SESSION_BUS_ADDRESS</code> environment
-+ variable. If that variable is not set, applications may
-+ also try to read the address from the X Window System root
-+ window property <code class="literal">_DBUS_SESSION_BUS_ADDRESS</code>.
-+ The root window property must have type <code class="literal">STRING</code>.
-+ The environment variable should have precedence over the
-+ root window property.
-+ </p><p>
-+ [FIXME specify location of .service files, probably using
-+ DESKTOP_DIRS etc. from basedir specification, though login session
-+ bus is not really desktop-specific]
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="message-bus-types-system"></a>System message bus</h4></div></div></div><p>
-+ A computer may have a <em class="firstterm">system message bus</em>,
-+ accessible to all applications on the system. This message bus may be
-+ used to broadcast system events, such as adding new hardware devices,
-+ changes in the printer queue, and so forth.
-+ </p><p>
-+ The address of the system message bus is given
-+ in the <code class="literal">DBUS_SYSTEM_BUS_ADDRESS</code> environment
-+ variable. If that variable is not set, applications should try
-+ to connect to the well-known address
-+ <code class="literal">unix:path=/var/run/dbus/system_bus_socket</code>.
-+ <sup>[<a name="id2606684" href="#ftn.id2606684">2</a>]</sup>
-+ </p><p>
-+ [FIXME specify location of system bus .service files]
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-bus-messages"></a>Message Bus Messages</h3></div></div></div><p>
-+ The special message bus name <code class="literal">org.freedesktop.DBus</code>
-+ responds to a number of additional messages.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-hello"></a><code class="literal">org.freedesktop.DBus.Hello</code></h4></div></div></div><p>
-+ As a method:
-+ </p><pre class="programlisting">
-+ STRING Hello ()
-+ </pre><p>
-+ Reply arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Unique name assigned to the connection</td></tr></tbody></table></div><p>
-+ </p><p>
-+ Before an application is able to send messages to other applications
-+ it must send the <code class="literal">org.freedesktop.DBus.Hello</code> message
-+ to the message bus to obtain a unique name. If an application without
-+ a unique name tries to send a message to another application, or a
-+ message to the message bus itself that isn't the
-+ <code class="literal">org.freedesktop.DBus.Hello</code> message, it will be
-+ disconnected from the bus.
-+ </p><p>
-+ There is no corresponding "disconnect" request; if a client wishes to
-+ disconnect from the bus, it simply closes the socket (or other
-+ communication channel).
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-list-names"></a><code class="literal">org.freedesktop.DBus.ListNames</code></h4></div></div></div><p>
-+ As a method:
-+ </p><pre class="programlisting">
-+ ARRAY of STRING ListNames ()
-+ </pre><p>
-+ Reply arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>ARRAY of STRING</td><td>Array of strings where each string is a bus name</td></tr></tbody></table></div><p>
-+ </p><p>
-+ Returns a list of all currently-owned names on the bus.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-name-exists"></a><code class="literal">org.freedesktop.DBus.NameHasOwner</code></h4></div></div></div><p>
-+ As a method:
-+ </p><pre class="programlisting">
-+ BOOLEAN NameHasOwner (in STRING name)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name to check</td></tr></tbody></table></div><p>
-+ Reply arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>BOOLEAN</td><td>Return value, true if the name exists</td></tr></tbody></table></div><p>
-+ </p><p>
-+ Checks if the specified name exists (currently has an owner).
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-name-owner-changed"></a><code class="literal">org.freedesktop.DBus.NameOwnerChanged</code></h4></div></div></div><p>
-+ This is a signal:
-+ </p><pre class="programlisting">
-+ NameOwnerChanged (STRING name, STRING old_owner, STRING new_owner)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name with a new owner</td></tr><tr><td>1</td><td>STRING</td><td>Old owner or empty string if none</td></tr><tr><td>2</td><td>STRING</td><td>New owner or empty string if none</td></tr></tbody></table></div><p>
-+ </p><p>
-+ This signal indicates that the owner of a name has changed.
-+ It's also the signal to use to detect the appearance of
-+ new names on the bus.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-name-lost"></a><code class="literal">org.freedesktop.DBus.NameLost</code></h4></div></div></div><p>
-+ This is a signal:
-+ </p><pre class="programlisting">
-+ NameLost (STRING name)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name which was lost</td></tr></tbody></table></div><p>
-+ </p><p>
-+ This signal is sent to a specific application when it loses
-+ ownership of a name.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-name-acquired"></a><code class="literal">org.freedesktop.DBus.NameAcquired</code></h4></div></div></div><p>
-+ This is a signal:
-+ </p><pre class="programlisting">
-+ NameAcquired (STRING name)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name which was acquired</td></tr></tbody></table></div><p>
-+ </p><p>
-+ This signal is sent to a specific application when it gains
-+ ownership of a name.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-start-service-by-name"></a><code class="literal">org.freedesktop.DBus.StartServiceByName</code></h4></div></div></div><p>
-+ As a method:
-+ </p><pre class="programlisting">
-+ UINT32 StartServiceByName (in STRING name, in UINT32 flags)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name of the service to start</td></tr><tr><td>1</td><td>UINT32</td><td>Flags (currently not used)</td></tr></tbody></table></div><p>
-+ Reply arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>UINT32</td><td>Return value</td></tr></tbody></table></div><p>
-+ Tries to launch the executable associated with a name. For more information, see <a href="#message-bus-starting-services" title="Message Bus Starting Services">the section called “Message Bus Starting Services”</a>.
-+
-+ </p><p>
-+ The return value can be one of the following values:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Identifier</th><th>Value</th><th>Description</th></tr></thead><tbody><tr><td>DBUS_START_REPLY_SUCCESS</td><td>1</td><td>The service was successfully started.</td></tr><tr><td>DBUS_START_REPLY_ALREADY_RUNNING</td><td>2</td><td>A connection already owns the given name.</td></tr></tbody></table></div><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-get-name-owner"></a><code class="literal">org.freedesktop.DBus.GetNameOwner</code></h4></div></div></div><p>
-+ As a method:
-+ </p><pre class="programlisting">
-+ STRING GetNameOwner (in STRING name)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name to get the owner of</td></tr></tbody></table></div><p>
-+ Reply arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Return value, a unique connection name</td></tr></tbody></table></div><p>
-+ Returns the unique connection name of the primary owner of the name
-+ given. If the requested name doesn't have an owner, returns a
-+ <code class="literal">org.freedesktop.DBus.Error.NameHasNoOwner</code> error.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="bus-messages-get-connection-unix-user"></a><code class="literal">org.freedesktop.DBus.GetConnectionUnixUser</code></h4></div></div></div><p>
-+ As a method:
-+ </p><pre class="programlisting">
-+ UINT32 GetConnectionUnixUser (in STRING connection_name)
-+ </pre><p>
-+ Message arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>STRING</td><td>Name of the connection to query</td></tr></tbody></table></div><p>
-+ Reply arguments:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>Argument</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>0</td><td>UINT32</td><td>unix user id</td></tr></tbody></table></div><p>
-+ Returns the unix uid of the process connected to the server. If unable to
-+ determine it, a <code class="literal">org.freedesktop.DBus.Error.Failed</code>
-+ error is returned.
-+ </p></div></div></div><div class="glossary"><div class="titlepage"><div><div><h2 class="title"><a name="id2607701"></a>Glossary</h2></div></div></div><p>
-+ This glossary defines some of the terms used in this specification.
-+ </p><dl><dt><a name="term-bus-name"></a>Bus Name</dt><dd><p>
-+ The message bus maintains an association between names and
-+ connections. (Normally, there's one connection per application.) A
-+ bus name is simply an identifier used to locate connections. For
-+ example, the hypothetical <code class="literal">com.yoyodyne.Screensaver</code>
-+ name might be used to send a message to a screensaver from Yoyodyne
-+ Corporation. An application is said to <em class="firstterm">own</em> a
-+ name if the message bus has associated the application's connection
-+ with the name. Names may also have <em class="firstterm">queued
-+ owners</em> (see <a href="#term-queued-owner">Queued Name Owner</a>).
-+ The bus assigns a unique name to each connection,
-+ see <a href="#term-unique-name">Unique Connection Name</a>. Other names
-+ can be thought of as "well-known names" and are
-+ used to find applications that offer specific functionality.
-+ </p></dd><dt><a name="term-message"></a>Message</dt><dd><p>
-+ A message is the atomic unit of communication via the D-BUS
-+ protocol. It consists of a <em class="firstterm">header</em> and a
-+ <em class="firstterm">body</em>; the body is made up of
-+ <em class="firstterm">arguments</em>.
-+ </p></dd><dt><a name="term-message-bus"></a>Message Bus</dt><dd><p>
-+ The message bus is a special application that forwards
-+ or routes messages between a group of applications
-+ connected to the message bus. It also manages
-+ <em class="firstterm">names</em> used for routing
-+ messages.
-+ </p></dd><dt><a name="term-name"></a>Name</dt><dd><p>
-+ See <a href="#term-bus-name">Bus Name</a>. "Name" may
-+ also be used to refer to some of the other names
-+ in D-BUS, such as interface names.
-+ </p></dd><dt><a name="namespace"></a>Namespace</dt><dd><p>
-+ Used to prevent collisions when defining new interfaces or bus
-+ names. The convention used is the same one Java uses for defining
-+ classes: a reversed domain name.
-+ </p></dd><dt><a name="term-object"></a>Object</dt><dd><p>
-+ Each application contains <em class="firstterm">objects</em>, which have
-+ <em class="firstterm">interfaces</em> and
-+ <em class="firstterm">methods</em>. Objects are referred to by a name,
-+ called a <em class="firstterm">path</em>.
-+ </p></dd><dt><a name="one-to-one"></a>One-to-One</dt><dd><p>
-+ An application talking directly to another application, without going
-+ through a message bus. One-to-one connections may be "peer to peer" or
-+ "client to server." The D-BUS protocol has no concept of client
-+ vs. server after a connection has authenticated; the flow of messages
-+ is symmetrical (full duplex).
-+ </p></dd><dt><a name="term-path"></a>Path</dt><dd><p>
-+ Object references (object names) in D-BUS are organized into a
-+ filesystem-style hierarchy, so each object is named by a path. As in
-+ LDAP, there's no difference between "files" and "directories"; a path
-+ can refer to an object, while still having child objects below it.
-+ </p></dd><dt><a name="term-queued-owner"></a>Queued Name Owner</dt><dd><p>
-+ Each bus name has a primary owner; messages sent to the name go to the
-+ primary owner. However, certain names also maintain a queue of
-+ secondary owners "waiting in the wings." If the primary owner releases
-+ the name, then the first secondary owner in the queue automatically
-+ becomes the new owner of the name.
-+ </p></dd><dt><a name="term-service"></a>Service</dt><dd><p>
-+ A service is an executable that can be launched by the bus daemon.
-+ Services normally guarantee some particular features, for example they
-+ may guarantee that they will request a specific name such as
-+ "org.freedesktop.Screensaver", have a singleton object
-+ "/org/freedesktop/Application", and that object will implement the
-+ interface "org.freedesktop.ScreensaverControl".
-+ </p></dd><dt><a name="term-service-description-files"></a>Service Description Files</dt><dd><p>
-+ ".service files" tell the bus about service applications that can be
-+ launched (see <a href="#term-service">Service</a>). Most importantly they
-+ provide a mapping from bus names to services that will request those
-+ names when they start up.
-+ </p></dd><dt><a name="term-unique-name"></a>Unique Connection Name</dt><dd><p>
-+ The special name automatically assigned to each connection by the
-+ message bus. This name will never change owner, and will be unique
-+ (never reused during the lifetime of the message bus).
-+ It will begin with a ':' character.
-+ </p></dd></dl></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2604701" href="#id2604701">1</a>] </sup>Lockfiles are used instead of real file
-+ locking <code class="literal">fcntl()</code> because real locking
-+ implementations are still flaky on network
-+ filesystems.</p></div><div class="footnote"><p><sup>[<a name="ftn.id2606684" href="#id2606684">2</a>] </sup>
-+ The D-BUS reference implementation actually honors the
-+ <code class="literal">$(localstatedir)</code> configure option
-+ for this address, on both client and server side.
-+ </p></div></div></div></body></html>
-diff -Naur dbus-0.61.orig/doc/dbus-specification.xml dbus-0.61/doc/dbus-specification.xml
---- dbus-0.61.orig/doc/dbus-specification.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dbus-specification.xml 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,3693 @@
-+<?xml version="1.0" standalone="no"?>
-+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
-+[
-+]>
-+
-+<article id="index">
-+ <articleinfo>
-+ <title>D-BUS Specification</title>
-+ <releaseinfo>Version 0.11</releaseinfo>
-+ <date>6 February 2005</date>
-+ <authorgroup>
-+ <author>
-+ <firstname>Havoc</firstname>
-+ <surname>Pennington</surname>
-+ <affiliation>
-+ <orgname>Red Hat, Inc.</orgname>
-+ <address>
-+ <email>hp at pobox.com</email>
-+ </address>
-+ </affiliation>
-+ </author>
-+ <author>
-+ <firstname>Anders</firstname>
-+ <surname>Carlsson</surname>
-+ <affiliation>
-+ <orgname>CodeFactory AB</orgname>
-+ <address>
-+ <email>andersca at codefactory.se</email>
-+ </address>
-+ </affiliation>
-+ </author>
-+ <author>
-+ <firstname>Alexander</firstname>
-+ <surname>Larsson</surname>
-+ <affiliation>
-+ <orgname>Red Hat, Inc.</orgname>
-+ <address>
-+ <email>alexl at redhat.com</email>
-+ </address>
-+ </affiliation>
-+ </author>
-+ </authorgroup>
-+ </articleinfo>
-+
-+ <sect1 id="introduction">
-+ <title>Introduction</title>
-+ <para>
-+ D-BUS is a system for low-latency, low-overhead, easy to use
-+ interprocess communication (IPC). In more detail:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ D-BUS is <emphasis>low-latency</emphasis> because it is designed
-+ to avoid round trips and allow asynchronous operation, much like
-+ the X protocol.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ D-BUS is <emphasis>low-overhead</emphasis> because it uses a
-+ binary protocol, and does not have to convert to and from a text
-+ format such as XML. Because D-BUS is intended for potentially
-+ high-resolution same-machine IPC, not primarily for Internet IPC,
-+ this is an interesting optimization.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ D-BUS is <emphasis>easy to use</emphasis> because it works in terms
-+ of <firstterm>messages</firstterm> rather than byte streams, and
-+ automatically handles a lot of the hard IPC issues. Also, the D-BUS
-+ library is designed to be wrapped in a way that lets developers use
-+ their framework's existing object/type system, rather than learning
-+ a new one specifically for IPC.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+
-+ <para>
-+ The base D-BUS protocol is a one-to-one (peer-to-peer or client-server)
-+ protocol, specified in <xref linkend="message-protocol"/>. That is, it is
-+ a system for one application to talk to a single other
-+ application. However, the primary intended application of the protocol is the
-+ D-BUS <firstterm>message bus</firstterm>, specified in <xref
-+ linkend="message-bus"/>. The message bus is a special application that
-+ accepts connections from multiple other applications, and forwards
-+ messages among them.
-+ </para>
-+
-+ <para>
-+ Uses of D-BUS include notification of system changes (notification of when
-+ a camera is plugged in to a computer, or a new version of some software
-+ has been installed), or desktop interoperability, for example a file
-+ monitoring service or a configuration service.
-+ </para>
-+
-+ <para>
-+ D-BUS is designed for two specific use cases:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ A "system bus" for notifications from the system to user sessions,
-+ and to allow the system to request input from user sessions.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ A "session bus" used to implement desktop environments such as
-+ GNOME and KDE.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ D-BUS is not intended to be a generic IPC system for any possible
-+ application, and intentionally omits many features found in other
-+ IPC systems for this reason. D-BUS may turn out to be useful
-+ in unanticipated applications, but future versions of this
-+ spec and the reference implementation probably will not
-+ incorporate features that interfere with the core use cases.
-+ </para>
-+
-+ <para>
-+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
-+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
-+ document are to be interpreted as described in RFC 2119. However, the
-+ document could use a serious audit to be sure it makes sense to do
-+ so. Also, they are not capitalized.
-+ </para>
-+
-+ </sect1>
-+
-+ <sect1 id="message-protocol">
-+ <title>Message Protocol</title>
-+
-+ <para>
-+ A <firstterm>message</firstterm> consists of a
-+ <firstterm>header</firstterm> and a <firstterm>body</firstterm>. If you
-+ think of a message as a package, the header is the address, and the body
-+ contains the package contents. The message delivery system uses the header
-+ information to figure out where to send the message and how to interpret
-+ it; the recipient inteprets the body of the message.
-+ </para>
-+
-+ <para>
-+ The body of the message is made up of zero or more
-+ <firstterm>arguments</firstterm>, which are typed values, such as an
-+ integer or a byte array.
-+ </para>
-+
-+ <para>
-+ Both header and body use the same type system and format for
-+ serializing data. Each type of value has a wire format.
-+ Converting a value from some other representation into the wire
-+ format is called <firstterm>marshaling</firstterm> and converting
-+ it back from the wire format is <firstterm>unmarshaling</firstterm>.
-+ </para>
-+
-+ <sect2 id="message-protocol-signatures">
-+ <title>Type Signatures</title>
-+
-+ <para>
-+ The D-BUS protocol does not include type tags in the marshaled data; a
-+ block of marshaled values must have a known <firstterm>type
-+ signature</firstterm>. The type signature is made up of <firstterm>type
-+ codes</firstterm>. A type code is an ASCII character representing the
-+ type of a value. Because ASCII characters are used, the type signature
-+ will always form a valid ASCII string. A simple string compare
-+ determines whether two type signatures are equivalent.
-+ </para>
-+
-+ <para>
-+ As a simple example, the type code for 32-bit integer (<literal>INT32</literal>) is
-+ the ASCII character 'i'. So the signature for a block of values
-+ containing a single <literal>INT32</literal> would be:
-+ <programlisting>
-+ "i"
-+ </programlisting>
-+ A block of values containing two <literal>INT32</literal> would have this signature:
-+ <programlisting>
-+ "ii"
-+ </programlisting>
-+ </para>
-+
-+ <para>
-+ All <firstterm>basic</firstterm> types work like
-+ <literal>INT32</literal> in this example. To marshal and unmarshal
-+ basic types, you simply read one value from the data
-+ block corresponding to each type code in the signature.
-+ In addition to basic types, there are four <firstterm>container</firstterm>
-+ types: <literal>STRUCT</literal>, <literal>ARRAY</literal>, <literal>VARIANT</literal>,
-+ and <literal>DICT_ENTRY</literal>.
-+ </para>
-+
-+ <para>
-+ <literal>STRUCT</literal> has a type code, ASCII character 'r', but this type
-+ code does not appear in signatures. Instead, ASCII characters
-+ '(' and ')' are used to mark the beginning and end of the struct.
-+ So for example, a struct containing two integers would have this
-+ signature:
-+ <programlisting>
-+ "(ii)"
-+ </programlisting>
-+ Structs can be nested, so for example a struct containing
-+ an integer and another struct:
-+ <programlisting>
-+ "(i(ii))"
-+ </programlisting>
-+ The value block storing that struct would contain three integers; the
-+ type signature allows you to distinguish "(i(ii))" from "((ii)i)" or
-+ "(iii)" or "iii".
-+ </para>
-+
-+ <para>
-+ The <literal>STRUCT</literal> type code 'r' is not currently used in the D-BUS protocol,
-+ but is useful in code that implements the protocol. This type code
-+ is specified to allow such code to interoperate in non-protocol contexts.
-+ </para>
-+
-+ <para>
-+ <literal>ARRAY</literal> has ASCII character 'a' as type code. The array type code must be
-+ followed by a <firstterm>single complete type</firstterm>. The single
-+ complete type following the array is the type of each array element. So
-+ the simple example is:
-+ <programlisting>
-+ "ai"
-+ </programlisting>
-+ which is an array of 32-bit integers. But an array can be of any type,
-+ such as this array-of-struct-with-two-int32-fields:
-+ <programlisting>
-+ "a(ii)"
-+ </programlisting>
-+ Or this array of array of integer:
-+ <programlisting>
-+ "aai"
-+ </programlisting>
-+ </para>
-+
-+ <para>
-+ The phrase <firstterm>single complete type</firstterm> deserves some
-+ definition. A single complete type is a basic type code, a variant type code,
-+ an array with its element type, or a struct with its fields.
-+ So the following signatures are not single complete types:
-+ <programlisting>
-+ "aa"
-+ </programlisting>
-+ <programlisting>
-+ "(ii"
-+ </programlisting>
-+ <programlisting>
-+ "ii)"
-+ </programlisting>
-+ And the following signatures contain multiple complete types:
-+ <programlisting>
-+ "ii"
-+ </programlisting>
-+ <programlisting>
-+ "aiai"
-+ </programlisting>
-+ <programlisting>
-+ "(ii)(ii)"
-+ </programlisting>
-+ Note however that a single complete type may <emphasis>contain</emphasis>
-+ multiple other single complete types.
-+ </para>
-+
-+ <para>
-+ <literal>VARIANT</literal> has ASCII character 'v' as its type code. A marshaled value of
-+ type <literal>VARIANT</literal> will have the signature of a single complete type as part
-+ of the <emphasis>value</emphasis>. This signature will be followed by a
-+ marshaled value of that type.
-+ </para>
-+
-+ <para>
-+ A <literal>DICT_ENTRY</literal> works exactly like a struct, but rather
-+ than parentheses it uses curly braces, and it has more restrictions.
-+ The restrictions are: it occurs only as an array element type; it has
-+ exactly two single complete types inside the curly braces; the first
-+ single complete type (the "key") must be a basic type rather than a
-+ container type. Implementations must not accept dict entries outside of
-+ arrays, must not accept dict entries with zero, one, or more than two
-+ fields, and must not accept dict entries with non-basic-typed keys. A
-+ dict entry is always a key-value pair.
-+ </para>
-+
-+ <para>
-+ The first field in the <literal>DICT_ENTRY</literal> is always the key.
-+ A message is considered corrupt if the same key occurs twice in the same
-+ array of <literal>DICT_ENTRY</literal>. However, for performance reasons
-+ implementations are not required to reject dicts with duplicate keys.
-+ </para>
-+
-+ <para>
-+ In most languages, an array of dict entry would be represented as a
-+ map, hash table, or dict object.
-+ </para>
-+
-+ <para>
-+ The following table summarizes the D-BUS types.
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Conventional Name</entry>
-+ <entry>Code</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>INVALID</literal></entry>
-+ <entry>0 (ASCII NUL)</entry>
-+ <entry>Not a valid type code, used to terminate signatures</entry>
-+ </row><row>
-+ <entry><literal>BYTE</literal></entry>
-+ <entry>121 (ASCII 'y')</entry>
-+ <entry>8-bit unsigned integer</entry>
-+ </row><row>
-+ <entry><literal>BOOLEAN</literal></entry>
-+ <entry>98 (ASCII 'b')</entry>
-+ <entry>Boolean value, 0 is <literal>FALSE</literal> and 1 is <literal>TRUE</literal>. Everything else is invalid.</entry>
-+ </row><row>
-+ <entry><literal>INT16</literal></entry>
-+ <entry>110 (ASCII 'n')</entry>
-+ <entry>16-bit signed integer</entry>
-+ </row><row>
-+ <entry><literal>UINT16</literal></entry>
-+ <entry>113 (ASCII 'q')</entry>
-+ <entry>16-bit unsigned integer</entry>
-+ </row><row>
-+ <entry><literal>INT32</literal></entry>
-+ <entry>105 (ASCII 'i')</entry>
-+ <entry>32-bit signed integer</entry>
-+ </row><row>
-+ <entry><literal>UINT32</literal></entry>
-+ <entry>117 (ASCII 'u')</entry>
-+ <entry>32-bit unsigned integer</entry>
-+ </row><row>
-+ <entry><literal>INT64</literal></entry>
-+ <entry>120 (ASCII 'x')</entry>
-+ <entry>64-bit signed integer</entry>
-+ </row><row>
-+ <entry><literal>UINT64</literal></entry>
-+ <entry>116 (ASCII 't')</entry>
-+ <entry>64-bit unsigned integer</entry>
-+ </row><row>
-+ <entry><literal>DOUBLE</literal></entry>
-+ <entry>100 (ASCII 'd')</entry>
-+ <entry>IEEE 754 double</entry>
-+ </row><row>
-+ <entry><literal>STRING</literal></entry>
-+ <entry>115 (ASCII 's')</entry>
-+ <entry>UTF-8 string (<emphasis>must</emphasis> be valid UTF-8). Must be nul terminated.</entry>
-+ </row><row>
-+ <entry><literal>OBJECT_PATH</literal></entry>
-+ <entry>111 (ASCII 'o')</entry>
-+ <entry>Name of an object instance</entry>
-+ </row><row>
-+ <entry><literal>SIGNATURE</literal></entry>
-+ <entry>103 (ASCII 'g')</entry>
-+ <entry>A type signature</entry>
-+ </row><row>
-+ <entry><literal>ARRAY</literal></entry>
-+ <entry>97 (ASCII 'a')</entry>
-+ <entry>Array</entry>
-+ </row><row>
-+ <entry><literal>STRUCT</literal></entry>
-+ <entry>114 (ASCII 'r'), 40 (ASCII '('), 41 (ASCII ')')</entry>
-+ <entry>Struct</entry>
-+ </row><row>
-+ <entry><literal>VARIANT</literal></entry>
-+ <entry>118 (ASCII 'v') </entry>
-+ <entry>Variant type (the type of the value is part of the value itself)</entry>
-+ </row><row>
-+ <entry><literal>DICT_ENTRY</literal></entry>
-+ <entry>101 (ASCII 'e'), 123 (ASCII '{'), 125 (ASCII '}') </entry>
-+ <entry>Entry in a dict or map (array of key-value pairs)</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+
-+ </sect2>
-+
-+ <sect2 id="message-protocol-marshaling">
-+ <title>Marshaling (Wire Format)</title>
-+
-+ <para>
-+ Given a type signature, a block of bytes can be converted into typed
-+ values. This section describes the format of the block of bytes. Byte
-+ order and alignment issues are handled uniformly for all D-BUS types.
-+ </para>
-+
-+ <para>
-+ A block of bytes has an associated byte order. The byte order
-+ has to be discovered in some way; for D-BUS messages, the
-+ byte order is part of the message header as described in
-+ <xref linkend="message-protocol-messages"/>. For now, assume
-+ that the byte order is known to be either little endian or big
-+ endian.
-+ </para>
-+
-+ <para>
-+ Each value in a block of bytes is aligned "naturally," for example
-+ 4-byte values are aligned to a 4-byte boundary, and 8-byte values to an
-+ 8-byte boundary. To properly align a value, <firstterm>alignment
-+ padding</firstterm> may be necessary. The alignment padding must always
-+ be the minimum required padding to properly align the following value;
-+ and it must always be made up of nul bytes. The alignment padding must
-+ not be left uninitialized (it can't contain garbage), and more padding
-+ than required must not be used.
-+ </para>
-+
-+ <para>
-+ Given all this, the types are marshaled on the wire as follows:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Conventional Name</entry>
-+ <entry>Encoding</entry>
-+ <entry>Alignment</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>INVALID</literal></entry>
-+ <entry>Not applicable; cannot be marshaled.</entry>
-+ <entry>N/A</entry>
-+ </row><row>
-+ <entry><literal>BYTE</literal></entry>
-+ <entry>A single 8-bit byte.</entry>
-+ <entry>1</entry>
-+ </row><row>
-+ <entry><literal>BOOLEAN</literal></entry>
-+ <entry>As for <literal>UINT32</literal>, but only 0 and 1 are valid values.</entry>
-+ <entry>4</entry>
-+ </row><row>
-+ <entry><literal>INT16</literal></entry>
-+ <entry>16-bit signed integer in the message's byte order.</entry>
-+ <entry>2</entry>
-+ </row><row>
-+ <entry><literal>UINT16</literal></entry>
-+ <entry>16-bit unsigned integer in the message's byte order.</entry>
-+ <entry>2</entry>
-+ </row><row>
-+ <entry><literal>INT32</literal></entry>
-+ <entry>32-bit signed integer in the message's byte order.</entry>
-+ <entry>4</entry>
-+ </row><row>
-+ <entry><literal>UINT32</literal></entry>
-+ <entry>32-bit unsigned integer in the message's byte order.</entry>
-+ <entry>4</entry>
-+ </row><row>
-+ <entry><literal>INT64</literal></entry>
-+ <entry>64-bit signed integer in the message's byte order.</entry>
-+ <entry>8</entry>
-+ </row><row>
-+ <entry><literal>UINT64</literal></entry>
-+ <entry>64-bit unsigned integer in the message's byte order.</entry>
-+ <entry>8</entry>
-+ </row><row>
-+ <entry><literal>DOUBLE</literal></entry>
-+ <entry>64-bit IEEE 754 double in the message's byte order.</entry>
-+ <entry>8</entry>
-+ </row><row>
-+ <entry><literal>STRING</literal></entry>
-+ <entry>A <literal>UINT32</literal> indicating the string's
-+ length in bytes excluding its terminating nul, followed by
-+ string data of the given length, followed by a terminating nul
-+ byte.
-+ </entry>
-+ <entry>
-+ 4 (for the length)
-+ </entry>
-+ </row><row>
-+ <entry><literal>OBJECT_PATH</literal></entry>
-+ <entry>Exactly the same as <literal>STRING</literal> except the
-+ content must be a valid object path (see below).
-+ </entry>
-+ <entry>
-+ 4 (for the length)
-+ </entry>
-+ </row><row>
-+ <entry><literal>SIGNATURE</literal></entry>
-+ <entry>The same as <literal>STRING</literal> except the length is a single
-+ byte (thus signatures have a maximum length of 255)
-+ and the content must be a valid signature (see below).
-+ </entry>
-+ <entry>
-+ 1
-+ </entry>
-+ </row><row>
-+ <entry><literal>ARRAY</literal></entry>
-+ <entry>
-+ A <literal>UINT32</literal> giving the length of the array data in bytes, followed by
-+ alignment padding to the alignment boundary of the array element type,
-+ followed by each array element. The array length is from the
-+ end of the alignment padding to the end of the last element,
-+ i.e. it does not include the padding after the length,
-+ or any padding after the last element.
-+ Arrays have a maximum length defined to be 2 to the 26th power or
-+ 67108864. Implementations must not send or accept arrays exceeding this
-+ length.
-+ </entry>
-+ <entry>
-+ 4 (for the length)
-+ </entry>
-+ </row><row>
-+ <entry><literal>STRUCT</literal></entry>
-+ <entry>
-+ A struct must start on an 8-byte boundary regardless of the
-+ type of the struct fields. The struct value consists of each
-+ field marshaled in sequence starting from that 8-byte
-+ alignment boundary.
-+ </entry>
-+ <entry>
-+ 8
-+ </entry>
-+ </row><row>
-+ <entry><literal>VARIANT</literal></entry>
-+ <entry>
-+ A variant type has a marshaled <literal>SIGNATURE</literal>
-+ followed by a marshaled value with the type
-+ given in the signature.
-+ Unlike a message signature, the variant signature
-+ can contain only a single complete type.
-+ So "i" is OK, "ii" is not.
-+ </entry>
-+ <entry>
-+ 1 (alignment of the signature)
-+ </entry>
-+ </row><row>
-+ <entry><literal>DICT_ENTRY</literal></entry>
-+ <entry>
-+ Identical to STRUCT.
-+ </entry>
-+ <entry>
-+ 8
-+ </entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+
-+ <sect3 id="message-protocol-marshaling-object-path">
-+ <title>Valid Object Paths</title>
-+
-+ <para>
-+ An object path is a name used to refer to an object instance.
-+ Conceptually, each participant in a D-BUS message exchange may have
-+ any number of object instances (think of C++ or Java objects) and each
-+ such instance will have a path. Like a filesystem, the object
-+ instances in an application form a hierarchical tree.
-+ </para>
-+
-+ <para>
-+ The following rules define a valid object path. Implementations must
-+ not send or accept messages with invalid object paths.
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ The path may be of any length.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The path must begin with an ASCII '/' (integer 47) character,
-+ and must consist of elements separated by slash characters.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Each element must only contain the ASCII characters
-+ "[A-Z][a-z][0-9]_"
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ No element may be the empty string.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Multiple '/' characters cannot occur in sequence.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ A trailing '/' character is not allowed unless the
-+ path is the root path (a single '/' character).
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+
-+ </sect3>
-+
-+
-+ <sect3 id="message-protocol-marshaling-signature">
-+ <title>Valid Signatures</title>
-+ <para>
-+ An implementation must not send or accept invalid signatures.
-+ Valid signatures will conform to the following rules:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ The signature ends with a nul byte.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The signature is a list of single complete types.
-+ Arrays must have element types, and structs must
-+ have both open and close parentheses.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Only type codes and open and close parentheses are
-+ allowed in the signature. The <literal>STRUCT</literal> type code
-+ is not allowed in signatures, because parentheses
-+ are used instead.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The maximum depth of container type nesting is 32 array type
-+ codes and 32 open parentheses. This implies that the maximum
-+ total depth of recursion is 64, for an "array of array of array
-+ of ... struct of struct of struct of ..." where there are 32
-+ array and 32 struct.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The maximum length of a signature is 255.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Signatures must be nul-terminated.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </sect3>
-+
-+ </sect2>
-+
-+ <sect2 id="message-protocol-messages">
-+ <title>Message Format</title>
-+
-+ <para>
-+ A message consists of a header and a body. The header is a block of
-+ values with a fixed signature and meaning. The body is a separate block
-+ of values, with a signature specified in the header.
-+ </para>
-+
-+ <para>
-+ The length of the header must be a multiple of 8, allowing the body to
-+ begin on an 8-byte boundary when storing the entire message in a single
-+ buffer. If the header does not naturally end on an 8-byte boundary
-+ up to 7 bytes of nul-initialized alignment padding must be added.
-+ </para>
-+
-+ <para>
-+ The message body need not end on an 8-byte boundary.
-+ </para>
-+
-+ <para>
-+ The maximum length of a message, including header, header alignment padding,
-+ and body is 2 to the 27th power or 134217728. Implementations must not
-+ send or accept messages exceeding this size.
-+ </para>
-+
-+ <para>
-+ The signature of the header is:
-+ <programlisting>
-+ "yyyyuua(yv)"
-+ </programlisting>
-+ Written out more readably, this is:
-+ <programlisting>
-+ BYTE, BYTE, BYTE, BYTE, UINT32, UINT32, ARRAY of STRUCT of (BYTE,VARIANT)
-+ </programlisting>
-+ </para>
-+
-+ <para>
-+ These values have the following meanings:
-+ <informaltable>
-+ <tgroup cols="2">
-+ <thead>
-+ <row>
-+ <entry>Value</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>1st <literal>BYTE</literal></entry>
-+ <entry>Endianness flag; ASCII 'l' for little-endian
-+ or ASCII 'B' for big-endian. Both header and body are
-+ in this endianness.</entry>
-+ </row>
-+ <row>
-+ <entry>2nd <literal>BYTE</literal></entry>
-+ <entry><firstterm>Message type</firstterm>. Unknown types must be ignored.
-+ Currently-defined types are described below.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry>3rd <literal>BYTE</literal></entry>
-+ <entry>Bitwise OR of flags. Unknown flags
-+ must be ignored. Currently-defined flags are described below.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry>4th <literal>BYTE</literal></entry>
-+ <entry>Major protocol version of the sending application. If
-+ the major protocol version of the receiving application does not
-+ match, the applications will not be able to communicate and the
-+ D-BUS connection must be disconnected. The major protocol
-+ version for this version of the specification is 0.
-+ FIXME this field is stupid and pointless to put in
-+ every message.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry>1st <literal>UINT32</literal></entry>
-+ <entry>Length in bytes of the message body, starting
-+ from the end of the header. The header ends after
-+ its alignment padding to an 8-boundary.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry>2nd <literal>UINT32</literal></entry>
-+ <entry>The serial of this message, used as a cookie
-+ by the sender to identify the reply corresponding
-+ to this request.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry><literal>ARRAY</literal> of <literal>STRUCT</literal> of (<literal>BYTE</literal>,<literal>VARIANT</literal>)</entry>
-+ <entry>An array of zero or more <firstterm>header
-+ fields</firstterm> where the byte is the field code, and the
-+ variant is the field value. The message type determines
-+ which fields are required.
-+ </entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ <firstterm>Message types</firstterm> that can appear in the second byte
-+ of the header are:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Conventional name</entry>
-+ <entry>Decimal value</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>INVALID</literal></entry>
-+ <entry>0</entry>
-+ <entry>This is an invalid type.</entry>
-+ </row>
-+ <row>
-+ <entry><literal>METHOD_CALL</literal></entry>
-+ <entry>1</entry>
-+ <entry>Method call.</entry>
-+ </row>
-+ <row>
-+ <entry><literal>METHOD_RETURN</literal></entry>
-+ <entry>2</entry>
-+ <entry>Method reply with returned data.</entry>
-+ </row>
-+ <row>
-+ <entry><literal>ERROR</literal></entry>
-+ <entry>3</entry>
-+ <entry>Error reply. If the first argument exists and is a
-+ string, it is an error message.</entry>
-+ </row>
-+ <row>
-+ <entry><literal>SIGNAL</literal></entry>
-+ <entry>4</entry>
-+ <entry>Signal emission.</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ Flags that can appear in the third byte of the header:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Conventional name</entry>
-+ <entry>Hex value</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>NO_REPLY_EXPECTED</literal></entry>
-+ <entry>0x1</entry>
-+ <entry>This message does not expect method return replies or
-+ error replies; the reply can be omitted as an
-+ optimization. However, it is compliant with this specification
-+ to return the reply despite this flag and the only harm
-+ from doing so is extra network traffic.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry><literal>NO_AUTO_START</literal></entry>
-+ <entry>0x2</entry>
-+ <entry>The bus must not launch an owner
-+ for the destination name in response to this message.
-+ </entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+
-+ <sect3 id="message-protocol-header-fields">
-+ <title>Header Fields</title>
-+
-+ <para>
-+ The array at the end of the header contains <firstterm>header
-+ fields</firstterm>, where each field is a 1-byte field code followed
-+ by a field value. A header must contain the required header fields for
-+ its message type, and zero or more of any optional header
-+ fields. Future versions of this protocol specification may add new
-+ fields. Implementations must ignore fields they do not
-+ understand. Implementations must not invent their own header fields;
-+ only changes to this specification may introduce new header fields.
-+ </para>
-+
-+ <para>
-+ Again, if an implementation sees a header field code that it does not
-+ expect, it must ignore that field, as it will be part of a new
-+ (but compatible) version of this specification. This also applies
-+ to known header fields appearing in unexpected messages, for
-+ example: if a signal has a reply serial it must be ignored
-+ even though it has no meaning as of this version of the spec.
-+ </para>
-+
-+ <para>
-+ However, implementations must not send or accept known header fields
-+ with the wrong type stored in the field value. So for example a
-+ message with an <literal>INTERFACE</literal> field of type
-+ <literal>UINT32</literal> would be considered corrupt.
-+ </para>
-+
-+ <para>
-+ Here are the currently-defined header fields:
-+ <informaltable>
-+ <tgroup cols="5">
-+ <thead>
-+ <row>
-+ <entry>Conventional Name</entry>
-+ <entry>Decimal Code</entry>
-+ <entry>Type</entry>
-+ <entry>Required In</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>INVALID</literal></entry>
-+ <entry>0</entry>
-+ <entry>N/A</entry>
-+ <entry>not allowed</entry>
-+ <entry>Not a valid field name (error if it appears in a message)</entry>
-+ </row>
-+ <row>
-+ <entry><literal>PATH</literal></entry>
-+ <entry>1</entry>
-+ <entry><literal>OBJECT_PATH</literal></entry>
-+ <entry><literal>METHOD_CALL</literal>, <literal>SIGNAL</literal></entry>
-+ <entry>The object to send a call to,
-+ or the object a signal is emitted from.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry><literal>INTERFACE</literal></entry>
-+ <entry>2</entry>
-+ <entry><literal>STRING</literal></entry>
-+ <entry><literal>SIGNAL</literal></entry>
-+ <entry>
-+ The interface to invoke a method call on, or
-+ that a signal is emitted from. Optional for
-+ method calls, required for signals.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry><literal>MEMBER</literal></entry>
-+ <entry>3</entry>
-+ <entry><literal>STRING</literal></entry>
-+ <entry><literal>METHOD_CALL</literal>, <literal>SIGNAL</literal></entry>
-+ <entry>The member, either the method name or signal name.</entry>
-+ </row>
-+ <row>
-+ <entry><literal>ERROR_NAME</literal></entry>
-+ <entry>4</entry>
-+ <entry><literal>STRING</literal></entry>
-+ <entry><literal>ERROR</literal></entry>
-+ <entry>The name of the error that occurred, for errors</entry>
-+ </row>
-+ <row>
-+ <entry><literal>REPLY_SERIAL</literal></entry>
-+ <entry>5</entry>
-+ <entry><literal>UINT32</literal></entry>
-+ <entry><literal>ERROR</literal>, <literal>METHOD_RETURN</literal></entry>
-+ <entry>The serial number of the message this message is a reply
-+ to. (The serial number is the second <literal>UINT32</literal> in the header.)</entry>
-+ </row>
-+ <row>
-+ <entry><literal>DESTINATION</literal></entry>
-+ <entry>6</entry>
-+ <entry><literal>STRING</literal></entry>
-+ <entry>optional</entry>
-+ <entry>The name of the connection this message is intended for.
-+ Only used in combination with the message bus, see
-+ <xref linkend="message-bus"/>.</entry>
-+ </row>
-+ <row>
-+ <entry><literal>SENDER</literal></entry>
-+ <entry>7</entry>
-+ <entry><literal>STRING</literal></entry>
-+ <entry>optional</entry>
-+ <entry>Unique name of the sending connection.
-+ The message bus fills in this field so it is reliable; the field is
-+ only meaningful in combination with the message bus.</entry>
-+ </row>
-+ <row>
-+ <entry><literal>SIGNATURE</literal></entry>
-+ <entry>8</entry>
-+ <entry><literal>SIGNATURE</literal></entry>
-+ <entry>optional</entry>
-+ <entry>The signature of the message body.
-+ If omitted, it is assumed to be the
-+ empty signature "" (i.e. the body must be 0-length).</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ </sect3>
-+ </sect2>
-+
-+ <sect2 id="message-protocol-names">
-+ <title>Valid Names</title>
-+ <para>
-+ The various names in D-BUS messages have some restrictions.
-+ </para>
-+ <para>
-+ There is a <firstterm>maximum name length</firstterm>
-+ of 255 which applies to bus names, interfaces, and members.
-+ </para>
-+ <sect3 id="message-protocol-names-interface">
-+ <title>Interface names</title>
-+ <para>
-+ Interfaces have names with type <literal>STRING</literal>, meaning that
-+ they must be valid UTF-8. However, there are also some
-+ additional restrictions that apply to interface names
-+ specifically:
-+ <itemizedlist>
-+ <listitem><para>Interface names are composed of 1 or more elements separated by
-+ a period ('.') character. All elements must contain at least
-+ one character.
-+ </para>
-+ </listitem>
-+ <listitem><para>Each element must only contain the ASCII characters
-+ "[A-Z][a-z][0-9]_" and must not begin with a digit.
-+ </para>
-+ </listitem>
-+
-+ <listitem><para>Interface names must contain at least one '.' (period)
-+ character (and thus at least two elements).
-+ </para></listitem>
-+
-+ <listitem><para>Interface names must not begin with a '.' (period) character.</para></listitem>
-+ <listitem><para>Interface names must not exceed the maximum name length.</para></listitem>
-+ </itemizedlist>
-+ </para>
-+ </sect3>
-+ <sect3 id="message-protocol-names-bus">
-+ <title>Bus names</title>
-+ <para>
-+ Connections have one or more bus names associated with them.
-+ A connection has exactly one bus name that is a unique connection
-+ name. The unique connection name remains with the connection for
-+ its entire lifetime.
-+ A bus name is of type <literal>STRING</literal>,
-+ meaning that it must be valid UTF-8. However, there are also
-+ some additional restrictions that apply to bus names
-+ specifically:
-+ <itemizedlist>
-+ <listitem><para>Bus names that start with a colon (':')
-+ character are unique connection names.
-+ </para>
-+ </listitem>
-+ <listitem><para>Bus names are composed of 1 or more elements separated by
-+ a period ('.') character. All elements must contain at least
-+ one character.
-+ </para>
-+ </listitem>
-+ <listitem><para>Each element must only contain the ASCII characters
-+ "[A-Z][a-z][0-9]_-". Only elements that are part of a unique
-+ connection name may begin with a digit, elements in
-+ other bus names must not begin with a digit.
-+ </para>
-+ </listitem>
-+
-+ <listitem><para>Bus names must contain at least one '.' (period)
-+ character (and thus at least two elements).
-+ </para></listitem>
-+
-+ <listitem><para>Bus names must not begin with a '.' (period) character.</para></listitem>
-+ <listitem><para>Bus names must not exceed the maximum name length.</para></listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ Note that the hyphen ('-') character is allowed in bus names but
-+ not in interface names.
-+ </para>
-+ </sect3>
-+ <sect3 id="message-protocol-names-member">
-+ <title>Member names</title>
-+ <para>
-+ Member (i.e. method or signal) names:
-+ <itemizedlist>
-+ <listitem><para>Must only contain the ASCII characters
-+ "[A-Z][a-z][0-9]_" and may not begin with a
-+ digit.</para></listitem>
-+ <listitem><para>Must not contain the '.' (period) character.</para></listitem>
-+ <listitem><para>Must not exceed the maximum name length.</para></listitem>
-+ <listitem><para>Must be at least 1 byte in length.</para></listitem>
-+ </itemizedlist>
-+ </para>
-+ </sect3>
-+ <sect3 id="message-protocol-names-error">
-+ <title>Error names</title>
-+ <para>
-+ Error names have the same restrictions as interface names.
-+ </para>
-+ </sect3>
-+ </sect2>
-+
-+ <sect2 id="message-protocol-types">
-+ <title>Message Types</title>
-+ <para>
-+ Each of the message types (<literal>METHOD_CALL</literal>, <literal>METHOD_RETURN</literal>, <literal>ERROR</literal>, and
-+ <literal>SIGNAL</literal>) has its own expected usage conventions and header fields.
-+ This section describes these conventions.
-+ </para>
-+ <sect3 id="message-protocol-types-method">
-+ <title>Method Calls</title>
-+ <para>
-+ Some messages invoke an operation on a remote object. These are
-+ called method call messages and have the type tag <literal>METHOD_CALL</literal>. Such
-+ messages map naturally to methods on objects in a typical program.
-+ </para>
-+ <para>
-+ A method call message is required to have a <literal>MEMBER</literal> header field
-+ indicating the name of the method. Optionally, the message has an
-+ <literal>INTERFACE</literal> field giving the interface the method is a part of. In the
-+ absence of an <literal>INTERFACE</literal> field, if two interfaces on the same object have
-+ a method with the same name, it is undefined which of the two methods
-+ will be invoked. Implementations may also choose to return an error in
-+ this ambiguous case. However, if a method name is unique
-+ implementations must not require an interface field.
-+ </para>
-+ <para>
-+ Method call messages also include a <literal>PATH</literal> field
-+ indicating the object to invoke the method on. If the call is passing
-+ through a message bus, the message will also have a
-+ <literal>DESTINATION</literal> field giving the name of the connection
-+ to receive the message.
-+ </para>
-+ <para>
-+ When an application handles a method call message, it is required to
-+ return a reply. The reply is identified by a <literal>REPLY_SERIAL</literal> header field
-+ indicating the serial number of the <literal>METHOD_CALL</literal> being replied to. The
-+ reply can have one of two types; either <literal>METHOD_RETURN</literal> or <literal>ERROR</literal>.
-+ </para>
-+ <para>
-+ If the reply has type <literal>METHOD_RETURN</literal>, the arguments to the reply message
-+ are the return value(s) or "out parameters" of the method call.
-+ If the reply has type <literal>ERROR</literal>, then an "exception" has been thrown,
-+ and the call fails; no return value will be provided. It makes
-+ no sense to send multiple replies to the same method call.
-+ </para>
-+ <para>
-+ Even if a method call has no return values, a <literal>METHOD_RETURN</literal>
-+ reply is required, so the caller will know the method
-+ was successfully processed.
-+ </para>
-+ <para>
-+ The <literal>METHOD_RETURN</literal> or <literal>ERROR</literal> reply message must have the <literal>REPLY_SERIAL</literal>
-+ header field.
-+ </para>
-+ <para>
-+ If a <literal>METHOD_CALL</literal> message has the flag <literal>NO_REPLY_EXPECTED</literal>,
-+ then as an optimization the application receiving the method
-+ call may choose to omit the reply message (regardless of
-+ whether the reply would have been <literal>METHOD_RETURN</literal> or <literal>ERROR</literal>).
-+ However, it is also acceptable to ignore the <literal>NO_REPLY_EXPECTED</literal>
-+ flag and reply anyway.
-+ </para>
-+ <para>
-+ Unless a message has the flag <literal>NO_AUTO_START</literal>, if the
-+ destination name does not exist then a program to own the destination
-+ name will be started before the message is delivered. The message
-+ will be held until the new program is successfully started or has
-+ failed to start; in case of failure, an error will be returned. This
-+ flag is only relevant in the context of a message bus, it is ignored
-+ during one-to-one communication with no intermediate bus.
-+ </para>
-+ <sect4 id="message-protocol-types-method-apis">
-+ <title>Mapping method calls to native APIs</title>
-+ <para>
-+ APIs for D-BUS may map method calls to a method call in a specific
-+ programming language, such as C++, or may map a method call written
-+ in an IDL to a D-BUS message.
-+ </para>
-+ <para>
-+ In APIs of this nature, arguments to a method are often termed "in"
-+ (which implies sent in the <literal>METHOD_CALL</literal>), or "out" (which implies
-+ returned in the <literal>METHOD_RETURN</literal>). Some APIs such as CORBA also have
-+ "inout" arguments, which are both sent and received, i.e. the caller
-+ passes in a value which is modified. Mapped to D-BUS, an "inout"
-+ argument is equivalent to an "in" argument, followed by an "out"
-+ argument. You can't pass things "by reference" over the wire, so
-+ "inout" is purely an illusion of the in-process API.
-+ </para>
-+ <para>
-+ Given a method with zero or one return values, followed by zero or more
-+ arguments, where each argument may be "in", "out", or "inout", the
-+ caller constructs a message by appending each "in" or "inout" argument,
-+ in order. "out" arguments are not represented in the caller's message.
-+ </para>
-+ <para>
-+ The recipient constructs a reply by appending first the return value
-+ if any, then each "out" or "inout" argument, in order.
-+ "in" arguments are not represented in the reply message.
-+ </para>
-+ <para>
-+ Error replies are normally mapped to exceptions in languages that have
-+ exceptions.
-+ </para>
-+ <para>
-+ In converting from native APIs to D-BUS, it is perhaps nice to
-+ map D-BUS naming conventions ("FooBar") to native conventions
-+ such as "fooBar" or "foo_bar" automatically. This is OK
-+ as long as you can say that the native API is one that
-+ was specifically written for D-BUS. It makes the most sense
-+ when writing object implementations that will be exported
-+ over the bus. Object proxies used to invoke remote D-BUS
-+ objects probably need the ability to call any D-BUS method,
-+ and thus a magic name mapping like this could be a problem.
-+ </para>
-+ <para>
-+ This specification doesn't require anything of native API bindings;
-+ the preceding is only a suggested convention for consistency
-+ among bindings.
-+ </para>
-+ </sect4>
-+ </sect3>
-+
-+ <sect3 id="message-protocol-types-signal">
-+ <title>Signal Emission</title>
-+ <para>
-+ Unlike method calls, signal emissions have no replies.
-+ A signal emission is simply a single message of type <literal>SIGNAL</literal>.
-+ It must have three header fields: <literal>PATH</literal> giving the object
-+ the signal was emitted from, plus <literal>INTERFACE</literal> and <literal>MEMBER</literal> giving
-+ the fully-qualified name of the signal.
-+ </para>
-+ </sect3>
-+
-+ <sect3 id="message-protocol-types-errors">
-+ <title>Errors</title>
-+ <para>
-+ Messages of type <literal>ERROR</literal> are most commonly replies
-+ to a <literal>METHOD_CALL</literal>, but may be returned in reply
-+ to any kind of message. The message bus for example
-+ will return an <literal>ERROR</literal> in reply to a signal emission if
-+ the bus does not have enough memory to send the signal.
-+ </para>
-+ <para>
-+ An <literal>ERROR</literal> may have any arguments, but if the first
-+ argument is a <literal>STRING</literal>, it must be an error message.
-+ The error message may be logged or shown to the user
-+ in some way.
-+ </para>
-+ </sect3>
-+
-+ <sect3 id="message-protocol-types-notation">
-+ <title>Notation in this document</title>
-+ <para>
-+ This document uses a simple pseudo-IDL to describe particular method
-+ calls and signals. Here is an example of a method call:
-+ <programlisting>
-+ org.freedesktop.DBus.StartServiceByName (in STRING name, in UINT32 flags,
-+ out UINT32 resultcode)
-+ </programlisting>
-+ This means <literal>INTERFACE</literal> = org.freedesktop.DBus, <literal>MEMBER</literal> = StartServiceByName,
-+ <literal>METHOD_CALL</literal> arguments are <literal>STRING</literal> and <literal>UINT32</literal>, <literal>METHOD_RETURN</literal> argument
-+ is <literal>UINT32</literal>. Remember that the <literal>MEMBER</literal> field can't contain any '.' (period)
-+ characters so it's known that the last part of the name in
-+ the "IDL" is the member name.
-+ </para>
-+ <para>
-+ In C++ that might end up looking like this:
-+ <programlisting>
-+ unsigned int org::freedesktop::DBus::StartServiceByName (const char *name,
-+ unsigned int flags);
-+ </programlisting>
-+ or equally valid, the return value could be done as an argument:
-+ <programlisting>
-+ void org::freedesktop::DBus::StartServiceByName (const char *name,
-+ unsigned int flags,
-+ unsigned int *resultcode);
-+ </programlisting>
-+ It's really up to the API designer how they want to make
-+ this look. You could design an API where the namespace wasn't used
-+ in C++, using STL or Qt, using varargs, or whatever you wanted.
-+ </para>
-+ <para>
-+ Signals are written as follows:
-+ <programlisting>
-+ org.freedesktop.DBus.NameLost (STRING name)
-+ </programlisting>
-+ Signals don't specify "in" vs. "out" because only
-+ a single direction is possible.
-+ </para>
-+ <para>
-+ It isn't especially encouraged to use this lame pseudo-IDL in actual
-+ API implementations; you might use the native notation for the
-+ language you're using, or you might use COM or CORBA IDL, for example.
-+ </para>
-+ </sect3>
-+ </sect2>
-+
-+ <sect2 id="message-protocol-handling-invalid">
-+ <title>Invalid Protocol and Spec Extensions</title>
-+
-+ <para>
-+ For security reasons, the D-BUS protocol should be strictly parsed and
-+ validated, with the exception of defined extension points. Any invalid
-+ protocol or spec violations should result in immediately dropping the
-+ connection without notice to the other end. Exceptions should be
-+ carefully considered, e.g. an exception may be warranted for a
-+ well-understood idiosyncracy of a widely-deployed implementation. In
-+ cases where the other end of a connection is 100% trusted and known to
-+ be friendly, skipping validation for performance reasons could also make
-+ sense in certain cases.
-+ </para>
-+
-+ <para>
-+ Generally speaking violations of the "must" requirements in this spec
-+ should be considered possible attempts to exploit security, and violations
-+ of the "should" suggestions should be considered legitimate (though perhaps
-+ they should generate an error in some cases).
-+ </para>
-+
-+ <para>
-+ The following extension points are built in to D-BUS on purpose and must
-+ not be treated as invalid protocol. The extension points are intended
-+ for use by future versions of this spec, they are not intended for third
-+ parties. At the moment, the only way a third party could extend D-BUS
-+ without breaking interoperability would be to introduce a way to negotiate new
-+ feature support as part of the auth protocol, using EXTENSION_-prefixed
-+ commands. There is not yet a standard way to negotiate features.
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ In the authentication protocol (see <xref linkend="auth-protocol"/>) unknown
-+ commands result in an ERROR rather than a disconnect. This enables
-+ future extensions to the protocol. Commands starting with EXTENSION_ are
-+ reserved for third parties.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The authentication protocol supports pluggable auth mechanisms.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The address format (see <xref linkend="addresses"/>) supports new
-+ kinds of transport.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Messages with an unknown type (something other than
-+ <literal>METHOD_CALL</literal>, <literal>METHOD_RETURN</literal>,
-+ <literal>ERROR</literal>, <literal>SIGNAL</literal>) are ignored.
-+ Unknown-type messages must still be well-formed in the same way
-+ as the known messages, however. They still have the normal
-+ header and body.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Header fields with an unknown or unexpected field code must be ignored,
-+ though again they must still be well-formed.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ New standard interfaces (with new methods and signals) can of course be added.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+
-+ </sect2>
-+
-+ </sect1>
-+
-+ <sect1 id="auth-protocol">
-+ <title>Authentication Protocol</title>
-+ <para>
-+ Before the flow of messages begins, two applications must
-+ authenticate. A simple plain-text protocol is used for
-+ authentication; this protocol is a SASL profile, and maps fairly
-+ directly from the SASL specification. The message encoding is
-+ NOT used here, only plain text messages.
-+ </para>
-+ <para>
-+ In examples, "C:" and "S:" indicate lines sent by the client and
-+ server respectively.
-+ </para>
-+ <sect2 id="auth-protocol-overview">
-+ <title>Protocol Overview</title>
-+ <para>
-+ The protocol is a line-based protocol, where each line ends with
-+ \r\n. Each line begins with an all-caps ASCII command name containing
-+ only the character range [A-Z_], a space, then any arguments for the
-+ command, then the \r\n ending the line. The protocol is
-+ case-sensitive. All bytes must be in the ASCII character set.
-+
-+ Commands from the client to the server are as follows:
-+
-+ <itemizedlist>
-+ <listitem><para>AUTH [mechanism] [initial-response]</para></listitem>
-+ <listitem><para>CANCEL</para></listitem>
-+ <listitem><para>BEGIN</para></listitem>
-+ <listitem><para>DATA <data in hex encoding></para></listitem>
-+ <listitem><para>ERROR [human-readable error explanation]</para></listitem>
-+ </itemizedlist>
-+
-+ From server to client are as follows:
-+
-+ <itemizedlist>
-+ <listitem><para>REJECTED <space-separated list of mechanism names></para></listitem>
-+ <listitem><para>OK <GUID in hex></para></listitem>
-+ <listitem><para>DATA <data in hex encoding></para></listitem>
-+ <listitem><para>ERROR</para></listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ Unofficial extensions to the command set must begin with the letters
-+ "EXTENSION_", to avoid conflicts with future official commands.
-+ For example, "EXTENSION_COM_MYDOMAIN_DO_STUFF".
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-nul-byte">
-+ <title>Special credentials-passing nul byte</title>
-+ <para>
-+ Immediately after connecting to the server, the client must send a
-+ single nul byte. This byte may be accompanied by credentials
-+ information on some operating systems that use sendmsg() with
-+ SCM_CREDS or SCM_CREDENTIALS to pass credentials over UNIX domain
-+ sockets. However, the nul byte must be sent even on other kinds of
-+ socket, and even on operating systems that do not require a byte to be
-+ sent in order to transmit credentials. The text protocol described in
-+ this document begins after the single nul byte. If the first byte
-+ received from the client is not a nul byte, the server may disconnect
-+ that client.
-+ </para>
-+ <para>
-+ A nul byte in any context other than the initial byte is an error;
-+ the protocol is ASCII-only.
-+ </para>
-+ <para>
-+ The credentials sent along with the nul byte may be used with the
-+ SASL mechanism EXTERNAL.
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-command-auth">
-+ <title>AUTH command</title>
-+ <para>
-+ If an AUTH command has no arguments, it is a request to list
-+ available mechanisms. The server must respond with a REJECTED
-+ command listing the mechanisms it understands, or with an error.
-+ </para>
-+ <para>
-+ If an AUTH command specifies a mechanism, and the server supports
-+ said mechanism, the server should begin exchanging SASL
-+ challenge-response data with the client using DATA commands.
-+ </para>
-+ <para>
-+ If the server does not support the mechanism given in the AUTH
-+ command, it must send either a REJECTED command listing the mechanisms
-+ it does support, or an error.
-+ </para>
-+ <para>
-+ If the [initial-response] argument is provided, it is intended for use
-+ with mechanisms that have no initial challenge (or an empty initial
-+ challenge), as if it were the argument to an initial DATA command. If
-+ the selected mechanism has an initial challenge and [initial-response]
-+ was provided, the server should reject authentication by sending
-+ REJECTED.
-+ </para>
-+ <para>
-+ If authentication succeeds after exchanging DATA commands,
-+ an OK command must be sent to the client.
-+ </para>
-+ <para>
-+ The first octet received by the client after the \r\n of the OK
-+ command must be the first octet of the authenticated/encrypted
-+ stream of D-BUS messages.
-+ </para>
-+ <para>
-+ The first octet received by the server after the \r\n of the BEGIN
-+ command from the client must be the first octet of the
-+ authenticated/encrypted stream of D-BUS messages.
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-command-cancel">
-+ <title>CANCEL Command</title>
-+ <para>
-+ At any time up to sending the BEGIN command, the client may send a
-+ CANCEL command. On receiving the CANCEL command, the server must
-+ send a REJECTED command and abort the current authentication
-+ exchange.
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-command-data">
-+ <title>DATA Command</title>
-+ <para>
-+ The DATA command may come from either client or server, and simply
-+ contains a hex-encoded block of data to be interpreted
-+ according to the SASL mechanism in use.
-+ </para>
-+ <para>
-+ Some SASL mechanisms support sending an "empty string";
-+ FIXME we need some way to do this.
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-command-begin">
-+ <title>BEGIN Command</title>
-+ <para>
-+ The BEGIN command acknowledges that the client has received an
-+ OK command from the server, and that the stream of messages
-+ is about to begin.
-+ </para>
-+ <para>
-+ The first octet received by the server after the \r\n of the BEGIN
-+ command from the client must be the first octet of the
-+ authenticated/encrypted stream of D-BUS messages.
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-command-rejected">
-+ <title>REJECTED Command</title>
-+ <para>
-+ The REJECTED command indicates that the current authentication
-+ exchange has failed, and further exchange of DATA is inappropriate.
-+ The client would normally try another mechanism, or try providing
-+ different responses to challenges.
-+ </para><para>
-+ Optionally, the REJECTED command has a space-separated list of
-+ available auth mechanisms as arguments. If a server ever provides
-+ a list of supported mechanisms, it must provide the same list
-+ each time it sends a REJECTED message. Clients are free to
-+ ignore all lists received after the first.
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-command-ok">
-+ <title>OK Command</title>
-+ <para>
-+ The OK command indicates that the client has been authenticated,
-+ and that further communication will be a stream of D-BUS messages
-+ (optionally encrypted, as negotiated) rather than this protocol.
-+ </para>
-+ <para>
-+ The first octet received by the client after the \r\n of the OK
-+ command must be the first octet of the authenticated/encrypted
-+ stream of D-BUS messages.
-+ </para>
-+ <para>
-+ The client must respond to the OK command by sending a BEGIN
-+ command, followed by its stream of messages, or by disconnecting.
-+ The server must not accept additional commands using this protocol
-+ after the OK command has been sent.
-+ </para>
-+ <para>
-+ The OK command has one argument, which is the GUID of the server.
-+ See <xref linkend="addresses"/> for more on server GUIDs.
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-command-error">
-+ <title>ERROR Command</title>
-+ <para>
-+ The ERROR command indicates that either server or client did not
-+ know a command, does not accept the given command in the current
-+ context, or did not understand the arguments to the command. This
-+ allows the protocol to be extended; a client or server can send a
-+ command present or permitted only in new protocol versions, and if
-+ an ERROR is received instead of an appropriate response, fall back
-+ to using some other technique.
-+ </para>
-+ <para>
-+ If an ERROR is sent, the server or client that sent the
-+ error must continue as if the command causing the ERROR had never been
-+ received. However, the the server or client receiving the error
-+ should try something other than whatever caused the error;
-+ if only canceling/rejecting the authentication.
-+ </para>
-+ <para>
-+ If the D-BUS protocol changes incompatibly at some future time,
-+ applications implementing the new protocol would probably be able to
-+ check for support of the new protocol by sending a new command and
-+ receiving an ERROR from applications that don't understand it. Thus the
-+ ERROR feature of the auth protocol is an escape hatch that lets us
-+ negotiate extensions or changes to the D-BUS protocol in the future.
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-examples">
-+ <title>Authentication examples</title>
-+
-+ <para>
-+ <figure>
-+ <title>Example of successful magic cookie authentication</title>
-+ <programlisting>
-+ (MAGIC_COOKIE is a made up mechanism)
-+
-+ C: AUTH MAGIC_COOKIE 3138363935333137393635383634
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </programlisting>
-+ </figure>
-+ <figure>
-+ <title>Example of finding out mechanisms then picking one</title>
-+ <programlisting>
-+ C: AUTH
-+ S: REJECTED KERBEROS_V4 SKEY
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </programlisting>
-+ </figure>
-+ <figure>
-+ <title>Example of client sends unknown command then falls back to regular auth</title>
-+ <programlisting>
-+ C: FOOBAR
-+ S: ERROR
-+ C: AUTH MAGIC_COOKIE 3736343435313230333039
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </programlisting>
-+ </figure>
-+ <figure>
-+ <title>Example of server doesn't support initial auth mechanism</title>
-+ <programlisting>
-+ C: AUTH MAGIC_COOKIE 3736343435313230333039
-+ S: REJECTED KERBEROS_V4 SKEY
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </programlisting>
-+ </figure>
-+ <figure>
-+ <title>Example of wrong password or the like followed by successful retry</title>
-+ <programlisting>
-+ C: AUTH MAGIC_COOKIE 3736343435313230333039
-+ S: REJECTED KERBEROS_V4 SKEY
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: REJECTED
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </programlisting>
-+ </figure>
-+ <figure>
-+ <title>Example of skey cancelled and restarted</title>
-+ <programlisting>
-+ C: AUTH MAGIC_COOKIE 3736343435313230333039
-+ S: REJECTED KERBEROS_V4 SKEY
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: CANCEL
-+ S: REJECTED
-+ C: AUTH SKEY 7ab83f32ee
-+ S: DATA 8799cabb2ea93e
-+ C: DATA 8ac876e8f68ee9809bfa876e6f9876g8fa8e76e98f
-+ S: OK 1234deadbeef
-+ C: BEGIN
-+ </programlisting>
-+ </figure>
-+ </para>
-+ </sect2>
-+ <sect2 id="auth-states">
-+ <title>Authentication state diagrams</title>
-+
-+ <para>
-+ This section documents the auth protocol in terms of
-+ a state machine for the client and the server. This is
-+ probably the most robust way to implement the protocol.
-+ </para>
-+
-+ <sect3 id="auth-states-client">
-+ <title>Client states</title>
-+
-+ <para>
-+ To more precisely describe the interaction between the
-+ protocol state machine and the authentication mechanisms the
-+ following notation is used: MECH(CHALL) means that the
-+ server challenge CHALL was fed to the mechanism MECH, which
-+ returns one of
-+
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ CONTINUE(RESP) means continue the auth conversation
-+ and send RESP as the response to the server;
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ OK(RESP) means that after sending RESP to the server
-+ the client side of the auth conversation is finished
-+ and the server should return "OK";
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ ERROR means that CHALL was invalid and could not be
-+ processed.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+
-+ Both RESP and CHALL may be empty.
-+ </para>
-+
-+ <para>
-+ The Client starts by getting an initial response from the
-+ default mechanism and sends AUTH MECH RESP, or AUTH MECH if
-+ the mechanism did not provide an initial response. If the
-+ mechanism returns CONTINUE, the client starts in state
-+ <emphasis>WaitingForData</emphasis>, if the mechanism
-+ returns OK the client starts in state
-+ <emphasis>WaitingForOK</emphasis>.
-+ </para>
-+
-+ <para>
-+ The client should keep track of available mechanisms and
-+ which it mechanisms it has already attempted. This list is
-+ used to decide which AUTH command to send. When the list is
-+ exhausted, the client should give up and close the
-+ connection.
-+ </para>
-+
-+ <formalpara>
-+ <title><emphasis>WaitingForData</emphasis></title>
-+ <para>
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Receive DATA CHALL
-+ <simplelist>
-+ <member>
-+ MECH(CHALL) returns CONTINUE(RESP) → send
-+ DATA RESP, goto
-+ <emphasis>WaitingForData</emphasis>
-+ </member>
-+
-+ <member>
-+ MECH(CHALL) returns OK(RESP) → send DATA
-+ RESP, goto <emphasis>WaitingForOK</emphasis>
-+ </member>
-+
-+ <member>
-+ MECH(CHALL) returns ERROR → send ERROR
-+ [msg], goto <emphasis>WaitingForData</emphasis>
-+ </member>
-+ </simplelist>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive REJECTED [mechs] →
-+ send AUTH [next mech], goto
-+ WaitingForData or <emphasis>WaitingForOK</emphasis>
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Receive ERROR → send
-+ CANCEL, goto
-+ <emphasis>WaitingForReject</emphasis>
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Receive OK → send
-+ BEGIN, terminate auth
-+ conversation, authenticated
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Receive anything else → send
-+ ERROR, goto
-+ <emphasis>WaitingForData</emphasis>
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </formalpara>
-+
-+ <formalpara>
-+ <title><emphasis>WaitingForOK</emphasis></title>
-+ <para>
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Receive OK → send BEGIN, terminate auth
-+ conversation, <emphasis>authenticated</emphasis>
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Receive REJECT [mechs] → send AUTH [next mech],
-+ goto <emphasis>WaitingForData</emphasis> or
-+ <emphasis>WaitingForOK</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive DATA → send CANCEL, goto
-+ <emphasis>WaitingForReject</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive ERROR → send CANCEL, goto
-+ <emphasis>WaitingForReject</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive anything else → send ERROR, goto
-+ <emphasis>WaitingForOK</emphasis>
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </formalpara>
-+
-+ <formalpara>
-+ <title><emphasis>WaitingForReject</emphasis></title>
-+ <para>
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Receive REJECT [mechs] → send AUTH [next mech],
-+ goto <emphasis>WaitingForData</emphasis> or
-+ <emphasis>WaitingForOK</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive anything else → terminate auth
-+ conversation, disconnect
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </formalpara>
-+
-+ </sect3>
-+
-+ <sect3 id="auth-states-server">
-+ <title>Server states</title>
-+
-+ <para>
-+ For the server MECH(RESP) means that the client response
-+ RESP was fed to the the mechanism MECH, which returns one of
-+
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ CONTINUE(CHALL) means continue the auth conversation and
-+ send CHALL as the challenge to the client;
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ OK means that the client has been successfully
-+ authenticated;
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ REJECT means that the client failed to authenticate or
-+ there was an error in RESP.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+
-+ The server starts out in state
-+ <emphasis>WaitingForAuth</emphasis>. If the client is
-+ rejected too many times the server must disconnect the
-+ client.
-+ </para>
-+
-+ <formalpara>
-+ <title><emphasis>WaitingForAuth</emphasis></title>
-+ <para>
-+ <itemizedlist>
-+
-+ <listitem>
-+ <para>
-+ Receive AUTH → send REJECTED [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive AUTH MECH RESP
-+
-+ <simplelist>
-+ <member>
-+ MECH not valid mechanism → send REJECTED
-+ [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </member>
-+
-+ <member>
-+ MECH(RESP) returns CONTINUE(CHALL) → send
-+ DATA CHALL, goto
-+ <emphasis>WaitingForData</emphasis>
-+ </member>
-+
-+ <member>
-+ MECH(RESP) returns OK → send OK, goto
-+ <emphasis>WaitingForBegin</emphasis>
-+ </member>
-+
-+ <member>
-+ MECH(RESP) returns REJECT → send REJECTED
-+ [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </member>
-+ </simplelist>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive BEGIN → terminate
-+ auth conversation, disconnect
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive ERROR → send REJECTED [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive anything else → send
-+ ERROR, goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </formalpara>
-+
-+
-+ <formalpara>
-+ <title><emphasis>WaitingForData</emphasis></title>
-+ <para>
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Receive DATA RESP
-+ <simplelist>
-+ <member>
-+ MECH(RESP) returns CONTINUE(CHALL) → send
-+ DATA CHALL, goto
-+ <emphasis>WaitingForData</emphasis>
-+ </member>
-+
-+ <member>
-+ MECH(RESP) returns OK → send OK, goto
-+ <emphasis>WaitingForBegin</emphasis>
-+ </member>
-+
-+ <member>
-+ MECH(RESP) returns REJECT → send REJECTED
-+ [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </member>
-+ </simplelist>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive BEGIN → terminate auth conversation,
-+ disconnect
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive CANCEL → send REJECTED [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive ERROR → send REJECTED [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive anything else → send ERROR, goto
-+ <emphasis>WaitingForData</emphasis>
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </formalpara>
-+
-+ <formalpara>
-+ <title><emphasis>WaitingForBegin</emphasis></title>
-+ <para>
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Receive BEGIN → terminate auth conversation,
-+ client authenticated
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive CANCEL → send REJECTED [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive ERROR → send REJECTED [mechs], goto
-+ <emphasis>WaitingForAuth</emphasis>
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ Receive anything else → send ERROR, goto
-+ <emphasis>WaitingForBegin</emphasis>
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </formalpara>
-+
-+ </sect3>
-+
-+ </sect2>
-+ <sect2 id="auth-mechanisms">
-+ <title>Authentication mechanisms</title>
-+ <para>
-+ This section describes some new authentication mechanisms.
-+ D-BUS also allows any standard SASL mechanism of course.
-+ </para>
-+ <sect3 id="auth-mechanisms-sha">
-+ <title>DBUS_COOKIE_SHA1</title>
-+ <para>
-+ The DBUS_COOKIE_SHA1 mechanism is designed to establish that a client
-+ has the ability to read a private file owned by the user being
-+ authenticated. If the client can prove that it has access to a secret
-+ cookie stored in this file, then the client is authenticated.
-+ Thus the security of DBUS_COOKIE_SHA1 depends on a secure home
-+ directory.
-+ </para>
-+ <para>
-+ Authentication proceeds as follows:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ The client sends the username it would like to authenticate
-+ as.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The server sends the name of its "cookie context" (see below); a
-+ space character; the integer ID of the secret cookie the client
-+ must demonstrate knowledge of; a space character; then a
-+ hex-encoded randomly-generated challenge string.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The client locates the cookie, and generates its own hex-encoded
-+ randomly-generated challenge string. The client then
-+ concatentates the server's hex-encoded challenge, a ":"
-+ character, its own hex-encoded challenge, another ":" character,
-+ and the hex-encoded cookie. It computes the SHA-1 hash of this
-+ composite string. It sends back to the server the client's
-+ hex-encoded challenge string, a space character, and the SHA-1
-+ hash.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The server generates the same concatenated string used by the
-+ client and computes its SHA-1 hash. It compares the hash with
-+ the hash received from the client; if the two hashes match, the
-+ client is authenticated.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ Each server has a "cookie context," which is a name that identifies a
-+ set of cookies that apply to that server. A sample context might be
-+ "org_freedesktop_session_bus". Context names must be valid ASCII,
-+ nonzero length, and may not contain the characters slash ("/"),
-+ backslash ("\"), space (" "), newline ("\n"), carriage return ("\r"),
-+ tab ("\t"), or period ("."). There is a default context,
-+ "org_freedesktop_general" that's used by servers that do not specify
-+ otherwise.
-+ </para>
-+ <para>
-+ Cookies are stored in a user's home directory, in the directory
-+ <filename>~/.dbus-keyrings/</filename>. This directory must
-+ not be readable or writable by other users. If it is,
-+ clients and servers must ignore it. The directory
-+ contains cookie files named after the cookie context.
-+ </para>
-+ <para>
-+ A cookie file contains one cookie per line. Each line
-+ has three space-separated fields:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ The cookie ID number, which must be a non-negative integer and
-+ may not be used twice in the same file.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The cookie's creation time, in UNIX seconds-since-the-epoch
-+ format.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The cookie itself, a hex-encoded random block of bytes. The cookie
-+ may be of any length, though obviously security increases
-+ as the length increases.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ Only server processes modify the cookie file.
-+ They must do so with this procedure:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Create a lockfile name by appending ".lock" to the name of the
-+ cookie file. The server should attempt to create this file
-+ using <literal>O_CREAT | O_EXCL</literal>. If file creation
-+ fails, the lock fails. Servers should retry for a reasonable
-+ period of time, then they may choose to delete an existing lock
-+ to keep users from having to manually delete a stale
-+ lock. <footnote><para>Lockfiles are used instead of real file
-+ locking <literal>fcntl()</literal> because real locking
-+ implementations are still flaky on network
-+ filesystems.</para></footnote>
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Once the lockfile has been created, the server loads the cookie
-+ file. It should then delete any cookies that are old (the
-+ timeout can be fairly short), or more than a reasonable
-+ time in the future (so that cookies never accidentally
-+ become permanent, if the clock was set far into the future
-+ at some point). If no recent keys remain, the
-+ server may generate a new key.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The pruned and possibly added-to cookie file
-+ must be resaved atomically (using a temporary
-+ file which is rename()'d).
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The lock must be dropped by deleting the lockfile.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ Clients need not lock the file in order to load it,
-+ because servers are required to save the file atomically.
-+ </para>
-+ </sect3>
-+ </sect2>
-+ </sect1>
-+ <sect1 id="addresses">
-+ <title>Server Addresses</title>
-+ <para>
-+ Server addresses consist of a transport name followed by a colon, and
-+ then an optional, comma-separated list of keys and values in the form key=value.
-+ Each value is escaped.
-+ </para>
-+ <para>
-+ For example:
-+ <programlisting>unix:path=/tmp/dbus-test</programlisting>
-+ Which is the address to a unix socket with the path /tmp/dbus-test.
-+ </para>
-+ <para>
-+ Value escaping is similar to URI escaping but simpler.
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ The set of optionally-escaped bytes is:
-+ <literal>[0-9A-Za-z_-/.\]</literal>. To escape, each
-+ <emphasis>byte</emphasis> (note, not character) which is not in the
-+ set of optionally-escaped bytes must be replaced with an ASCII
-+ percent (<literal>%</literal>) and the value of the byte in hex.
-+ The hex value must always be two digits, even if the first digit is
-+ zero. The optionally-escaped bytes may be escaped if desired.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ To unescape, append each byte in the value; if a byte is an ASCII
-+ percent (<literal>%</literal>) character then append the following
-+ hex value instead. It is an error if a <literal>%</literal> byte
-+ does not have two hex digits following. It is an error if a
-+ non-optionally-escaped byte is seen unescaped.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ The set of optionally-escaped bytes is intended to preserve address
-+ readability and convenience.
-+ </para>
-+
-+ <para>
-+ A server may specify a key-value pair with the key <literal>guid</literal>
-+ and the value a hex-encoded 16-byte sequence. This globally unique ID must
-+ be created by filling the first 4 bytes with a 32-bit UNIX time since the
-+ epoch, and the remaining 12 bytes with random bytes. If present, the GUID
-+ may be used to distinguish one server from another. A server should use a
-+ different GUID for each address it listens on. For example, if a message
-+ bus daemon offers both UNIX domain socket and TCP connections, but treats
-+ clients the same regardless of how they connect, those two connections are
-+ equivalent post-connection but should have distinct GUIDs to distinguish
-+ the kinds of connection.
-+ </para>
-+
-+ <para>
-+ The intent of the GUID feature is to allow a client to avoid opening
-+ multiple identical connections to the same server, by allowing the client
-+ to check whether an address corresponds to an already-existing connection.
-+ Comparing two addresses is insufficient, because addresses can be recycled
-+ by distinct servers.
-+ </para>
-+
-+ <para>
-+ [FIXME clarify if attempting to connect to each is a requirement
-+ or just a suggestion]
-+ When connecting to a server, multiple server addresses can be
-+ separated by a semi-colon. The library will then try to connect
-+ to the first address and if that fails, it'll try to connect to
-+ the next one specified, and so forth. For example
-+ <programlisting>unix:path=/tmp/dbus-test;unix:path=/tmp/dbus-test2</programlisting>
-+ </para>
-+
-+ </sect1>
-+
-+ <sect1 id="transports">
-+ <title>Transports</title>
-+ <para>
-+ [FIXME we need to specify in detail each transport and its possible arguments]
-+
-+ Current transports include: unix domain sockets (including
-+ abstract namespace on linux), TCP/IP, and a debug/testing transport using
-+ in-process pipes. Future possible transports include one that
-+ tunnels over X11 protocol.
-+ </para>
-+
-+ <sect2 id="transports-unix-domain-sockets">
-+ <title>Unix Domain Sockets</title>
-+ <para>
-+ Unix domain sockets can be either paths in the file system or on Linux
-+ kernels, they can be abstract which are similar to paths but i
-+ do not show up in the file system.
-+ </para>
-+
-+ <para>
-+ When a socket is opened by the D-Bus library it truncates the path
-+ name right befor the first trailing Nul byte. This is true for both
-+ normal paths and abstract paths. Note that this is a departure from
-+ previous versions of D-Bus that would create sockets with a fixed
-+ length path name. Names which were shorter than the fixed length
-+ would be padded by Nul bytes.
-+ </para>
-+ </sect2>
-+ </sect1>
-+
-+ <sect1 id="naming-conventions">
-+ <title>Naming Conventions</title>
-+
-+ <para>
-+ D-BUS namespaces are all lowercase and correspond to reversed domain
-+ names, as with Java. e.g. "org.freedesktop"
-+ </para>
-+ <para>
-+ Interface, signal, method, and property names are "WindowsStyleCaps", note
-+ that the first letter is capitalized, unlike Java.
-+ </para>
-+ <para>
-+ Object paths are normally all lowercase with underscores used rather than
-+ hyphens.
-+ </para>
-+ </sect1>
-+
-+ <sect1 id="standard-interfaces">
-+ <title>Standard Interfaces</title>
-+ <para>
-+ See <xref linkend="message-protocol-types-notation"/> for details on
-+ the notation used in this section. There are some standard interfaces
-+ that may be useful across various D-BUS applications.
-+ </para>
-+ <sect2 id="standard-interfaces-peer">
-+ <title><literal>org.freedesktop.DBus.Peer</literal></title>
-+ <para>
-+ The <literal>org.freedesktop.DBus.Peer</literal> interface
-+ has one method:
-+ <programlisting>
-+ org.freedesktop.DBus.Peer.Ping ()
-+ </programlisting>
-+ </para>
-+ <para>
-+ On receipt of the <literal>METHOD_CALL</literal> message
-+ <literal>org.freedesktop.DBus.Peer.Ping</literal>, an application should do
-+ nothing other than reply with a <literal>METHOD_RETURN</literal> as
-+ usual. It does not matter which object path a ping is sent to. The
-+ reference implementation should simply handle this method on behalf of
-+ all objects, though it doesn't yet. (The point is, you're really pinging
-+ the peer process, not a specific object.)
-+ </para>
-+ </sect2>
-+
-+ <sect2 id="standard-interfaces-introspectable">
-+ <title><literal>org.freedesktop.DBus.Introspectable</literal></title>
-+ <para>
-+ This interface has one method:
-+ <programlisting>
-+ org.freedesktop.DBus.Introspectable.Introspect (out STRING xml_data)
-+ </programlisting>
-+ </para>
-+ <para>
-+ Objects instances may implement
-+ <literal>Introspect</literal> which returns an XML description of
-+ the object, including its interfaces (with signals and methods), objects
-+ below it in the object path tree, and its properties.
-+ </para>
-+ <para>
-+ <xref linkend="introspection-format"/> describes the format of this XML string.
-+ </para>
-+ </sect2>
-+ <sect2 id="standard-interfaces-properties">
-+ <title><literal>org.freedesktop.DBus.Properties</literal></title>
-+ <para>
-+ Many native APIs will have a concept of object <firstterm>properties</firstterm>
-+ or <firstterm>attributes</firstterm>. These can be exposed via the
-+ <literal>org.freedesktop.DBus.Properties</literal> interface.
-+ </para>
-+ <para>
-+ <programlisting>
-+ org.freedesktop.DBus.Properties.Get (in STRING interface_name,
-+ in STRING property_name,
-+ out VARIANT value);
-+ org.freedesktop.DBus.Properties.Set (in STRING interface_name,
-+ in STRING property_name,
-+ in VARIANT value);
-+ </programlisting>
-+ </para>
-+ <para>
-+ The available properties and whether they are writable can be determined
-+ by calling <literal>org.freedesktop.DBus.Introspectable.Introspect</literal>,
-+ see <xref linkend="standard-interfaces-introspectable"/>.
-+ </para>
-+ <para>
-+ An empty string may be provided for the interface name; in this case,
-+ if there are multiple properties on an object with the same name,
-+ the results are undefined (picking one by according to an arbitrary
-+ deterministic rule, or returning an error, are the reasonable
-+ possibilities).
-+ </para>
-+ </sect2>
-+ </sect1>
-+
-+ <sect1 id="introspection-format">
-+ <title>Introspection Data Format</title>
-+ <para>
-+ As described in <xref linkend="standard-interfaces-introspectable"/>,
-+ objects may be introspected at runtime, returning an XML string
-+ that describes the object. The same XML format may be used in
-+ other contexts as well, for example as an "IDL" for generating
-+ static language bindings.
-+ </para>
-+ <para>
-+ Here is an example of introspection data:
-+ <programlisting>
-+ <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
-+ <node name="/org/freedesktop/sample_object">
-+ <interface name="org.freedesktop.SampleInterface">
-+ <method name="Frobate">
-+ <arg name="foo" type="i" direction="in"/>
-+ <arg name="bar" type="s" direction="out"/>
-+ <arg name="baz" type="a{us}" direction="out"/>
-+ <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
-+ </method>
-+ <method name="Bazify">
-+ <arg name="bar" type="(iiu)" direction="in"/>
-+ <arg name="bar" type="v" direction="out"/>
-+ </method>
-+ <method name="Mogrify">
-+ <arg name="bar" type="(iiav)" direction="in"/>
-+ </method>
-+ <signal name="Changed">
-+ <arg name="new_value" type="b"/>
-+ </signal>
-+ <property name="Bar" type="y" access="readwrite"/>
-+ </interface>
-+ <node name="child_of_sample_object"/>
-+ <node name="another_child_of_sample_object"/>
-+ </node>
-+ </programlisting>
-+ </para>
-+ <para>
-+ A more formal DTD and spec needs writing, but here are some quick notes.
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Only the root <node> element can omit the node name, as it's
-+ known to be the object that was introspected. If the root
-+ <node> does have a name attribute, it must be an absolute
-+ object path. If child <node> have object paths, they must be
-+ relative.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ If a child <node> has any sub-elements, then they
-+ must represent a complete introspection of the child.
-+ If a child <node> is empty, then it may or may
-+ not have sub-elements; the child must be introspected
-+ in order to find out. The intent is that if an object
-+ knows that its children are "fast" to introspect
-+ it can go ahead and return their information, but
-+ otherwise it can omit it.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The direction element on <arg> may be omitted,
-+ in which case it defaults to "in" for method calls
-+ and "out" for signals. Signals only allow "out"
-+ so while direction may be specified, it's pointless.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The possible directions are "in" and "out",
-+ unlike CORBA there is no "inout"
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The possible property access flags are
-+ "readwrite", "read", and "write"
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Multiple interfaces can of course be listed for
-+ one <node>.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The "name" attribute on arguments is optional.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ Method, interface, property, and signal elements may have
-+ "annotations", which are generic key/value pairs of metadata.
-+ They are similar conceptually to Java's annotations and C# attributes.
-+ Well-known annotations:
-+ </para>
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Name</entry>
-+ <entry>Values (separated by ,)</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>org.freedesktop.DBus.Deprecated</entry>
-+ <entry>true,false</entry>
-+ <entry>Whether or not the entity is deprecated; defaults to false</entry>
-+ </row>
-+ <row>
-+ <entry>org.freedesktop.DBus.GLib.CSymbol</entry>
-+ <entry>(string)</entry>
-+ <entry>The C symbol; may be used for methods and interfaces</entry>
-+ </row>
-+ <row>
-+ <entry>org.freedesktop.DBus.Method.NoReply</entry>
-+ <entry>true,false</entry>
-+ <entry>If set, don't expect a reply to the method call; defaults to false.</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </sect1>
-+ <sect1 id="message-bus">
-+ <title>Message Bus Specification</title>
-+ <sect2 id="message-bus-overview">
-+ <title>Message Bus Overview</title>
-+ <para>
-+ The message bus accepts connections from one or more applications.
-+ Once connected, applications can exchange messages with other
-+ applications that are also connected to the bus.
-+ </para>
-+ <para>
-+ In order to route messages among connections, the message bus keeps a
-+ mapping from names to connections. Each connection has one
-+ unique-for-the-lifetime-of-the-bus name automatically assigned.
-+ Applications may request additional names for a connection. Additional
-+ names are usually "well-known names" such as
-+ "org.freedesktop.TextEditor". When a name is bound to a connection,
-+ that connection is said to <firstterm>own</firstterm> the name.
-+ </para>
-+ <para>
-+ The bus itself owns a special name, <literal>org.freedesktop.DBus</literal>.
-+ This name routes messages to the bus, allowing applications to make
-+ administrative requests. For example, applications can ask the bus
-+ to assign a name to a connection.
-+ </para>
-+ <para>
-+ Each name may have <firstterm>queued owners</firstterm>. When an
-+ application requests a name for a connection and the name is already in
-+ use, the bus will optionally add the connection to a queue waiting for
-+ the name. If the current owner of the name disconnects or releases
-+ the name, the next connection in the queue will become the new owner.
-+ </para>
-+
-+ <para>
-+ This feature causes the right thing to happen if you start two text
-+ editors for example; the first one may request "org.freedesktop.TextEditor",
-+ and the second will be queued as a possible owner of that name. When
-+ the first exits, the second will take over.
-+ </para>
-+
-+ <para>
-+ Messages may have a <literal>DESTINATION</literal> field (see <xref
-+ linkend="message-protocol-header-fields"/>). If the
-+ <literal>DESTINATION</literal> field is present, it specifies a message
-+ recipient by name. Method calls and replies normally specify this field.
-+ </para>
-+
-+ <para>
-+ Signals normally do not specify a destination; they are sent to all
-+ applications with <firstterm>message matching rules</firstterm> that
-+ match the message.
-+ </para>
-+
-+ <para>
-+ When the message bus receives a method call, if the
-+ <literal>DESTINATION</literal> field is absent, the call is taken to be
-+ a standard one-to-one message and interpreted by the message bus
-+ itself. For example, sending an
-+ <literal>org.freedesktop.DBus.Peer.Ping</literal> message with no
-+ <literal>DESTINATION</literal> will cause the message bus itself to
-+ reply to the ping immediately; the message bus will not make this
-+ message visible to other applications.
-+ </para>
-+
-+ <para>
-+ Continuing the <literal>org.freedesktop.DBus.Peer.Ping</literal> example, if
-+ the ping message were sent with a <literal>DESTINATION</literal> name of
-+ <literal>com.yoyodyne.Screensaver</literal>, then the ping would be
-+ forwarded, and the Yoyodyne Corporation screensaver application would be
-+ expected to reply to the ping.
-+ </para>
-+ </sect2>
-+
-+ <sect2 id="message-bus-names">
-+ <title>Message Bus Names</title>
-+ <para>
-+ Each connection has at least one name, assigned at connection time and
-+ returned in response to the
-+ <literal>org.freedesktop.DBus.Hello</literal> method call. This
-+ automatically-assigned name is called the connection's <firstterm>unique
-+ name</firstterm>. Unique names are never reused for two different
-+ connections to the same bus.
-+ </para>
-+ <para>
-+ Ownership of a unique name is a prerequisite for interaction with
-+ the message bus. It logically follows that the unique name is always
-+ the first name that an application comes to own, and the last
-+ one that it loses ownership of.
-+ </para>
-+ <para>
-+ Unique connection names must begin with the character ':' (ASCII colon
-+ character); bus names that are not unique names must not begin
-+ with this character. (The bus must reject any attempt by an application
-+ to manually request a name beginning with ':'.) This restriction
-+ categorically prevents "spoofing"; messages sent to a unique name
-+ will always go to the expected connection.
-+ </para>
-+ <para>
-+ When a connection is closed, all the names that it owns are deleted (or
-+ transferred to the next connection in the queue if any).
-+ </para>
-+ <para>
-+ A connection can request additional names to be associated with it using
-+ the <literal>org.freedesktop.DBus.RequestName</literal> message. <xref
-+ linkend="message-protocol-names-bus"/> describes the format of a valid
-+ name. These names can be released again using the
-+ <literal>org.freedesktop.DBus.ReleaseName</literal> message.
-+ </para>
-+
-+ <sect3 id="bus-messages-request-name">
-+ <title><literal>org.freedesktop.DBus.RequestName</literal></title>
-+ <para>
-+ As a method:
-+ <programlisting>
-+ UINT32 RequestName (in STRING name, in UINT32 flags)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name to request</entry>
-+ </row>
-+ <row>
-+ <entry>1</entry>
-+ <entry>UINT32</entry>
-+ <entry>Flags</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Reply arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>UINT32</entry>
-+ <entry>Return value</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ This method call should be sent to
-+ <literal>org.freedesktop.DBus</literal> and asks the message bus to
-+ assign the given name to the method caller. Each name maintains a
-+ queue of possible owners, where the head of the queue is the primary
-+ or current owner of the name. Each potential owner in the queue
-+ maintains the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and
-+ DBUS_NAME_FLAG_DO_NOT_QUEUE settings from its latest RequestName
-+ call. When RequestName is invoked the following occurs:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ If the method caller is currently the primary owner of the name,
-+ the DBUS_NAME_FLAG_ALLOW_REPLACEMENT and DBUS_NAME_FLAG_DO_NOT_QUEUE
-+ values are updated with the values from the new RequestName call,
-+ and nothing further happens.
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ If the current primary owner (head of the queue) has
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT set, and the RequestName
-+ invocation has the DBUS_NAME_FLAG_REPLACE_EXISTING flag, then
-+ the caller of RequestName replaces the current primary owner at
-+ the head of the queue and the current primary owner moves to the
-+ second position in the queue. If the caller of RequestName was
-+ in the queue previously its flags are updated with the values from
-+ the new RequestName in addition to moving it to the head of the queue.
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ If replacement is not possible, and the method caller is
-+ currently in the queue but not the primary owner, its flags are
-+ updated with the values from the new RequestName call.
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ If replacement is not possible, and the method caller is
-+ currently not in the queue, the method caller is appended to the
-+ queue.
-+ </para>
-+ </listitem>
-+
-+ <listitem>
-+ <para>
-+ If any connection in the queue has DBUS_NAME_FLAG_DO_NOT_QUEUE
-+ set and is not the primary owner, it is removed from the
-+ queue. This can apply to the previous primary owner (if it
-+ was replaced) or the method caller (if it updated the
-+ DBUS_NAME_FLAG_DO_NOT_QUEUE flag while still stuck in the
-+ queue, or if it was just added to the queue with that flag set).
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ Note that DBUS_NAME_FLAG_REPLACE_EXISTING results in "jumping the
-+ queue," even if another application already in the queue had specified
-+ DBUS_NAME_FLAG_REPLACE_EXISTING. This comes up if a primary owner
-+ that does not allow replacement goes away, and the next primary owner
-+ does allow replacement. In this case, queued items that specified
-+ DBUS_NAME_FLAG_REPLACE_EXISTING <emphasis>do not</emphasis>
-+ automatically replace the new primary owner. In other words,
-+ DBUS_NAME_FLAG_REPLACE_EXISTING is not saved, it is only used at the
-+ time RequestName is called. This is deliberate to avoid an infinite loop
-+ anytime two applications are both DBUS_NAME_FLAG_ALLOW_REPLACEMENT
-+ and DBUS_NAME_FLAG_REPLACE_EXISTING.
-+ </para>
-+ <para>
-+ The flags argument contains any of the following values logically ORed
-+ together:
-+
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Conventional Name</entry>
-+ <entry>Value</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>DBUS_NAME_FLAG_ALLOW_REPLACEMENT</entry>
-+ <entry>0x1</entry>
-+ <entry>
-+
-+ If an application A specifies this flag and succeeds in
-+ becoming the owner of the name, and another application B
-+ later calls RequestName with the
-+ DBUS_NAME_FLAG_REPLACE_EXISTING flag, then application A
-+ will lose ownership and receive a
-+ <literal>org.freedesktop.DBus.NameLost</literal> signal, and
-+ application B will become the new owner. If DBUS_NAME_FLAG_ALLOW_REPLACEMENT
-+ is not specified by application A, or DBUS_NAME_FLAG_REPLACE_EXISTING
-+ is not specified by application B, then application B will not replace
-+ application A as the owner.
-+
-+ </entry>
-+ </row>
-+ <row>
-+ <entry>DBUS_NAME_FLAG_REPLACE_EXISTING</entry>
-+ <entry>0x2</entry>
-+ <entry>
-+
-+ Try to replace the current owner if there is one. If this
-+ flag is not set the application will only become the owner of
-+ the name if there is no current owner. If this flag is set,
-+ the application will replace the current owner if
-+ the current owner specified DBUS_NAME_FLAG_ALLOW_REPLACEMENT.
-+
-+ </entry>
-+ </row>
-+ <row>
-+ <entry>DBUS_NAME_FLAG_DO_NOT_QUEUE</entry>
-+ <entry>0x4</entry>
-+ <entry>
-+
-+ Without this flag, if an application requests a name that is
-+ already owned, the application will be placed in a queue to
-+ own the name when the current owner gives it up. If this
-+ flag is given, the application will not be placed in the
-+ queue, the request for the name will simply fail. This flag
-+ also affects behavior when an application is replaced as
-+ name owner; by default the application moves back into the
-+ waiting queue, unless this flag was provided when the application
-+ became the name owner.
-+
-+ </entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+
-+ The return code can be one of the following values:
-+
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Conventional Name</entry>
-+ <entry>Value</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER</entry>
-+ <entry>1</entry> <entry>The caller is now the primary owner of
-+ the name, replacing any previous owner. Either the name had no
-+ owner before, or the caller specified
-+ DBUS_NAME_FLAG_REPLACE_EXISTING and the current owner specified
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT.</entry>
-+ </row>
-+ <row>
-+ <entry>DBUS_REQUEST_NAME_REPLY_IN_QUEUE</entry>
-+ <entry>2</entry>
-+
-+ <entry>The name already had an owner,
-+ DBUS_NAME_FLAG_DO_NOT_QUEUE was not specified, and either
-+ the current owner did not specify
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT or the requesting
-+ application did not specify DBUS_NAME_FLAG_REPLACE_EXISTING.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry>DBUS_REQUEST_NAME_REPLY_EXISTS</entry> <entry>3</entry>
-+ <entry>The name already has an owner,
-+ DBUS_NAME_FLAG_DO_NOT_QUEUE was specified, and either
-+ DBUS_NAME_FLAG_ALLOW_REPLACEMENT was not specified by the
-+ current owner, or DBUS_NAME_FLAG_REPLACE_EXISTING was not
-+ specified by the requesting application.</entry>
-+ </row>
-+ <row>
-+ <entry>DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER</entry>
-+ <entry>4</entry>
-+ <entry>The application trying to request ownership of a name is already the owner of it.</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ </sect3>
-+
-+ <sect3 id="bus-messages-release-name">
-+ <title><literal>org.freedesktop.DBus.ReleaseName</literal></title>
-+ <para>
-+ As a method:
-+ <programlisting>
-+ UINT32 ReleaseName (in STRING name)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name to release</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Reply arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>UINT32</entry>
-+ <entry>Return value</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ This method call should be sent to
-+ <literal>org.freedesktop.DBus</literal> and asks the message bus to
-+ release the method caller's claim to the given name. If the caller is
-+ the primary owner, a new primary owner will be selected from the
-+ queue if any other owners are waiting. If the caller is waiting in
-+ the queue for the name, the caller will removed from the queue and
-+ will not be made an owner of the name if it later becomes available.
-+ If there are no other owners in the queue for the name, it will be
-+ removed from the bus entirely.
-+
-+ The return code can be one of the following values:
-+
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Conventional Name</entry>
-+ <entry>Value</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>DBUS_RELEASE_NAME_REPLY_RELEASED</entry>
-+ <entry>1</entry> <entry>The caller has released his claim on
-+ the given name. Either the caller was the primary owner of
-+ the name, and the name is now unused or taken by somebody
-+ waiting in the queue for the name, or the caller was waiting
-+ in the queue for the name and has now been removed from the
-+ queue.</entry>
-+ </row>
-+ <row>
-+ <entry>DBUS_RELEASE_NAME_REPLY_NON_EXISTENT</entry>
-+ <entry>2</entry>
-+ <entry>The given name does not exist on this bus.</entry>
-+ </row>
-+ <row>
-+ <entry>DBUS_RELEASE_NAME_REPLY_NOT_OWNER</entry>
-+ <entry>3</entry>
-+ <entry>The caller was not the primary owner of this name,
-+ and was also not waiting in the queue to own this name.</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ </sect3>
-+ </sect2>
-+
-+ <sect2 id="message-bus-routing">
-+ <title>Message Bus Message Routing</title>
-+ <para>
-+ FIXME
-+ </para>
-+ </sect2>
-+ <sect2 id="message-bus-starting-services">
-+ <title>Message Bus Starting Services</title>
-+ <para>
-+ The message bus can start applications on behalf of other applications.
-+ In CORBA terms, this would be called <firstterm>activation</firstterm>.
-+ An application that can be started in this way is called a
-+ <firstterm>service</firstterm>.
-+ </para>
-+ <para>
-+ With D-BUS, starting a service is normally done by name. That is,
-+ applications ask the message bus to start some program that will own a
-+ well-known name, such as <literal>org.freedesktop.TextEditor</literal>.
-+ This implies a contract documented along with the name
-+ <literal>org.freedesktop.TextEditor</literal> for which objects
-+ the owner of that name will provide, and what interfaces those
-+ objects will have.
-+ </para>
-+ <para>
-+ To find an executable corresponding to a particular name, the bus daemon
-+ looks for <firstterm>service description files</firstterm>. Service
-+ description files define a mapping from names to executables. Different
-+ kinds of message bus will look for these files in different places, see
-+ <xref linkend="message-bus-types"/>.
-+ </para>
-+ <para>
-+ [FIXME the file format should be much better specified than "similar to
-+ .desktop entries" esp. since desktop entries are already
-+ badly-specified. ;-)] Service description files have the ".service" file
-+ extension. The message bus will only load service description files
-+ ending with .service; all other files will be ignored. The file format
-+ is similar to that of <ulink
-+ url="http://www.freedesktop.org/standards/desktop-entry-spec/desktop-entry-spec.html">desktop
-+ entries</ulink>. All service description files must be in UTF-8
-+ encoding. To ensure that there will be no name collisions, service files
-+ must be namespaced using the same mechanism as messages and service
-+ names.
-+
-+ <figure>
-+ <title>Example service description file</title>
-+ <programlisting>
-+ # Sample service description file
-+ [D-BUS Service]
-+ Names=org.freedesktop.ConfigurationDatabase;org.gnome.GConf;
-+ Exec=/usr/libexec/gconfd-2
-+ </programlisting>
-+ </figure>
-+ </para>
-+ <para>
-+ When an application asks to start a service by name, the bus daemon tries to
-+ find a service that will own that name. It then tries to spawn the
-+ executable associated with it. If this fails, it will report an
-+ error. [FIXME what happens if two .service files offer the same service;
-+ what kind of error is reported, should we have a way for the client to
-+ choose one?]
-+ </para>
-+ <para>
-+ The executable launched will have the environment variable
-+ <literal>DBUS_STARTER_ADDRESS</literal> set to the address of the
-+ message bus so it can connect and request the appropriate names.
-+ </para>
-+ <para>
-+ The executable being launched may want to know whether the message bus
-+ starting it is one of the well-known message buses (see <xref
-+ linkend="message-bus-types"/>). To facilitate this, the bus must also set
-+ the <literal>DBUS_STARTER_BUS_TYPE</literal> environment variable if it is one
-+ of the well-known buses. The currently-defined values for this variable
-+ are <literal>system</literal> for the systemwide message bus,
-+ and <literal>session</literal> for the per-login-session message
-+ bus. The new executable must still connect to the address given
-+ in <literal>DBUS_STARTER_ADDRESS</literal>, but may assume that the
-+ resulting connection is to the well-known bus.
-+ </para>
-+ <para>
-+ [FIXME there should be a timeout somewhere, either specified
-+ in the .service file, by the client, or just a global value
-+ and if the client being activated fails to connect within that
-+ timeout, an error should be sent back.]
-+ </para>
-+
-+ <sect3 id="message-bus-starting-services-scope">
-+ <title>Message Bus Service Scope</title>
-+ <para>
-+ The "scope" of a service is its "per-", such as per-session,
-+ per-machine, per-home-directory, or per-display. The reference
-+ implementation doesn't yet support starting services in a different
-+ scope from the message bus itself. So e.g. if you start a service
-+ on the session bus its scope is per-session.
-+ </para>
-+ <para>
-+ We could add an optional scope to a bus name. For example, for
-+ per-(display,session pair), we could have a unique ID for each display
-+ generated automatically at login and set on screen 0 by executing a
-+ special "set display ID" binary. The ID would be stored in a
-+ <literal>_DBUS_DISPLAY_ID</literal> property and would be a string of
-+ random bytes. This ID would then be used to scope names.
-+ Starting/locating a service could be done by ID-name pair rather than
-+ only by name.
-+ </para>
-+ <para>
-+ Contrast this with a per-display scope. To achieve that, we would
-+ want a single bus spanning all sessions using a given display.
-+ So we might set a <literal>_DBUS_DISPLAY_BUS_ADDRESS</literal>
-+ property on screen 0 of the display, pointing to this bus.
-+ </para>
-+ </sect3>
-+ </sect2>
-+
-+ <sect2 id="message-bus-types">
-+ <title>Well-known Message Bus Instances</title>
-+ <para>
-+ Two standard message bus instances are defined here, along with how
-+ to locate them and where their service files live.
-+ </para>
-+ <sect3 id="message-bus-types-login">
-+ <title>Login session message bus</title>
-+ <para>
-+ Each time a user logs in, a <firstterm>login session message
-+ bus</firstterm> may be started. All applications in the user's login
-+ session may interact with one another using this message bus.
-+ </para>
-+ <para>
-+ The address of the login session message bus is given
-+ in the <literal>DBUS_SESSION_BUS_ADDRESS</literal> environment
-+ variable. If that variable is not set, applications may
-+ also try to read the address from the X Window System root
-+ window property <literal>_DBUS_SESSION_BUS_ADDRESS</literal>.
-+ The root window property must have type <literal>STRING</literal>.
-+ The environment variable should have precedence over the
-+ root window property.
-+ </para>
-+ <para>
-+ [FIXME specify location of .service files, probably using
-+ DESKTOP_DIRS etc. from basedir specification, though login session
-+ bus is not really desktop-specific]
-+ </para>
-+ </sect3>
-+ <sect3 id="message-bus-types-system">
-+ <title>System message bus</title>
-+ <para>
-+ A computer may have a <firstterm>system message bus</firstterm>,
-+ accessible to all applications on the system. This message bus may be
-+ used to broadcast system events, such as adding new hardware devices,
-+ changes in the printer queue, and so forth.
-+ </para>
-+ <para>
-+ The address of the system message bus is given
-+ in the <literal>DBUS_SYSTEM_BUS_ADDRESS</literal> environment
-+ variable. If that variable is not set, applications should try
-+ to connect to the well-known address
-+ <literal>unix:path=/var/run/dbus/system_bus_socket</literal>.
-+ <footnote>
-+ <para>
-+ The D-BUS reference implementation actually honors the
-+ <literal>$(localstatedir)</literal> configure option
-+ for this address, on both client and server side.
-+ </para>
-+ </footnote>
-+ </para>
-+ <para>
-+ [FIXME specify location of system bus .service files]
-+ </para>
-+ </sect3>
-+ </sect2>
-+
-+ <sect2 id="message-bus-messages">
-+ <title>Message Bus Messages</title>
-+ <para>
-+ The special message bus name <literal>org.freedesktop.DBus</literal>
-+ responds to a number of additional messages.
-+ </para>
-+
-+ <sect3 id="bus-messages-hello">
-+ <title><literal>org.freedesktop.DBus.Hello</literal></title>
-+ <para>
-+ As a method:
-+ <programlisting>
-+ STRING Hello ()
-+ </programlisting>
-+ Reply arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Unique name assigned to the connection</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ Before an application is able to send messages to other applications
-+ it must send the <literal>org.freedesktop.DBus.Hello</literal> message
-+ to the message bus to obtain a unique name. If an application without
-+ a unique name tries to send a message to another application, or a
-+ message to the message bus itself that isn't the
-+ <literal>org.freedesktop.DBus.Hello</literal> message, it will be
-+ disconnected from the bus.
-+ </para>
-+ <para>
-+ There is no corresponding "disconnect" request; if a client wishes to
-+ disconnect from the bus, it simply closes the socket (or other
-+ communication channel).
-+ </para>
-+ </sect3>
-+ <sect3 id="bus-messages-list-names">
-+ <title><literal>org.freedesktop.DBus.ListNames</literal></title>
-+ <para>
-+ As a method:
-+ <programlisting>
-+ ARRAY of STRING ListNames ()
-+ </programlisting>
-+ Reply arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>ARRAY of STRING</entry>
-+ <entry>Array of strings where each string is a bus name</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ Returns a list of all currently-owned names on the bus.
-+ </para>
-+ </sect3>
-+ <sect3 id="bus-messages-name-exists">
-+ <title><literal>org.freedesktop.DBus.NameHasOwner</literal></title>
-+ <para>
-+ As a method:
-+ <programlisting>
-+ BOOLEAN NameHasOwner (in STRING name)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name to check</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Reply arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>BOOLEAN</entry>
-+ <entry>Return value, true if the name exists</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ Checks if the specified name exists (currently has an owner).
-+ </para>
-+ </sect3>
-+
-+ <sect3 id="bus-messages-name-owner-changed">
-+ <title><literal>org.freedesktop.DBus.NameOwnerChanged</literal></title>
-+ <para>
-+ This is a signal:
-+ <programlisting>
-+ NameOwnerChanged (STRING name, STRING old_owner, STRING new_owner)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name with a new owner</entry>
-+ </row>
-+ <row>
-+ <entry>1</entry>
-+ <entry>STRING</entry>
-+ <entry>Old owner or empty string if none</entry>
-+ </row>
-+ <row>
-+ <entry>2</entry>
-+ <entry>STRING</entry>
-+ <entry>New owner or empty string if none</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ This signal indicates that the owner of a name has changed.
-+ It's also the signal to use to detect the appearance of
-+ new names on the bus.
-+ </para>
-+ </sect3>
-+ <sect3 id="bus-messages-name-lost">
-+ <title><literal>org.freedesktop.DBus.NameLost</literal></title>
-+ <para>
-+ This is a signal:
-+ <programlisting>
-+ NameLost (STRING name)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name which was lost</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ This signal is sent to a specific application when it loses
-+ ownership of a name.
-+ </para>
-+ </sect3>
-+
-+ <sect3 id="bus-messages-name-acquired">
-+ <title><literal>org.freedesktop.DBus.NameAcquired</literal></title>
-+ <para>
-+ This is a signal:
-+ <programlisting>
-+ NameAcquired (STRING name)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name which was acquired</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ This signal is sent to a specific application when it gains
-+ ownership of a name.
-+ </para>
-+ </sect3>
-+
-+ <sect3 id="bus-messages-start-service-by-name">
-+ <title><literal>org.freedesktop.DBus.StartServiceByName</literal></title>
-+ <para>
-+ As a method:
-+ <programlisting>
-+ UINT32 StartServiceByName (in STRING name, in UINT32 flags)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name of the service to start</entry>
-+ </row>
-+ <row>
-+ <entry>1</entry>
-+ <entry>UINT32</entry>
-+ <entry>Flags (currently not used)</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Reply arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>UINT32</entry>
-+ <entry>Return value</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Tries to launch the executable associated with a name. For more information, see <xref linkend="message-bus-starting-services"/>.
-+
-+ </para>
-+ <para>
-+ The return value can be one of the following values:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Identifier</entry>
-+ <entry>Value</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>DBUS_START_REPLY_SUCCESS</entry>
-+ <entry>1</entry>
-+ <entry>The service was successfully started.</entry>
-+ </row>
-+ <row>
-+ <entry>DBUS_START_REPLY_ALREADY_RUNNING</entry>
-+ <entry>2</entry>
-+ <entry>A connection already owns the given name.</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+
-+ </sect3>
-+
-+ <sect3 id="bus-messages-get-name-owner">
-+ <title><literal>org.freedesktop.DBus.GetNameOwner</literal></title>
-+ <para>
-+ As a method:
-+ <programlisting>
-+ STRING GetNameOwner (in STRING name)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name to get the owner of</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Reply arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Return value, a unique connection name</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Returns the unique connection name of the primary owner of the name
-+ given. If the requested name doesn't have an owner, returns a
-+ <literal>org.freedesktop.DBus.Error.NameHasNoOwner</literal> error.
-+ </para>
-+ </sect3>
-+
-+ <sect3 id="bus-messages-get-connection-unix-user">
-+ <title><literal>org.freedesktop.DBus.GetConnectionUnixUser</literal></title>
-+ <para>
-+ As a method:
-+ <programlisting>
-+ UINT32 GetConnectionUnixUser (in STRING connection_name)
-+ </programlisting>
-+ Message arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>STRING</entry>
-+ <entry>Name of the connection to query</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Reply arguments:
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>Argument</entry>
-+ <entry>Type</entry>
-+ <entry>Description</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry>0</entry>
-+ <entry>UINT32</entry>
-+ <entry>unix user id</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ Returns the unix uid of the process connected to the server. If unable to
-+ determine it, a <literal>org.freedesktop.DBus.Error.Failed</literal>
-+ error is returned.
-+ </para>
-+ </sect3>
-+
-+ </sect2>
-+
-+ </sect1>
-+<!--
-+ <appendix id="implementation-notes">
-+ <title>Implementation notes</title>
-+ <sect1 id="implementation-notes-subsection">
-+ <title></title>
-+ <para>
-+ </para>
-+ </sect1>
-+ </appendix>
-+-->
-+
-+ <glossary><title>Glossary</title>
-+ <para>
-+ This glossary defines some of the terms used in this specification.
-+ </para>
-+
-+ <glossentry id="term-bus-name"><glossterm>Bus Name</glossterm>
-+ <glossdef>
-+ <para>
-+ The message bus maintains an association between names and
-+ connections. (Normally, there's one connection per application.) A
-+ bus name is simply an identifier used to locate connections. For
-+ example, the hypothetical <literal>com.yoyodyne.Screensaver</literal>
-+ name might be used to send a message to a screensaver from Yoyodyne
-+ Corporation. An application is said to <firstterm>own</firstterm> a
-+ name if the message bus has associated the application's connection
-+ with the name. Names may also have <firstterm>queued
-+ owners</firstterm> (see <xref linkend="term-queued-owner"/>).
-+ The bus assigns a unique name to each connection,
-+ see <xref linkend="term-unique-name"/>. Other names
-+ can be thought of as "well-known names" and are
-+ used to find applications that offer specific functionality.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-message"><glossterm>Message</glossterm>
-+ <glossdef>
-+ <para>
-+ A message is the atomic unit of communication via the D-BUS
-+ protocol. It consists of a <firstterm>header</firstterm> and a
-+ <firstterm>body</firstterm>; the body is made up of
-+ <firstterm>arguments</firstterm>.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-message-bus"><glossterm>Message Bus</glossterm>
-+ <glossdef>
-+ <para>
-+ The message bus is a special application that forwards
-+ or routes messages between a group of applications
-+ connected to the message bus. It also manages
-+ <firstterm>names</firstterm> used for routing
-+ messages.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-name"><glossterm>Name</glossterm>
-+ <glossdef>
-+ <para>
-+ See <xref linkend="term-bus-name"/>. "Name" may
-+ also be used to refer to some of the other names
-+ in D-BUS, such as interface names.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="namespace"><glossterm>Namespace</glossterm>
-+ <glossdef>
-+ <para>
-+ Used to prevent collisions when defining new interfaces or bus
-+ names. The convention used is the same one Java uses for defining
-+ classes: a reversed domain name.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-object"><glossterm>Object</glossterm>
-+ <glossdef>
-+ <para>
-+ Each application contains <firstterm>objects</firstterm>, which have
-+ <firstterm>interfaces</firstterm> and
-+ <firstterm>methods</firstterm>. Objects are referred to by a name,
-+ called a <firstterm>path</firstterm>.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="one-to-one"><glossterm>One-to-One</glossterm>
-+ <glossdef>
-+ <para>
-+ An application talking directly to another application, without going
-+ through a message bus. One-to-one connections may be "peer to peer" or
-+ "client to server." The D-BUS protocol has no concept of client
-+ vs. server after a connection has authenticated; the flow of messages
-+ is symmetrical (full duplex).
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-path"><glossterm>Path</glossterm>
-+ <glossdef>
-+ <para>
-+ Object references (object names) in D-BUS are organized into a
-+ filesystem-style hierarchy, so each object is named by a path. As in
-+ LDAP, there's no difference between "files" and "directories"; a path
-+ can refer to an object, while still having child objects below it.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-queued-owner"><glossterm>Queued Name Owner</glossterm>
-+ <glossdef>
-+ <para>
-+ Each bus name has a primary owner; messages sent to the name go to the
-+ primary owner. However, certain names also maintain a queue of
-+ secondary owners "waiting in the wings." If the primary owner releases
-+ the name, then the first secondary owner in the queue automatically
-+ becomes the new owner of the name.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-service"><glossterm>Service</glossterm>
-+ <glossdef>
-+ <para>
-+ A service is an executable that can be launched by the bus daemon.
-+ Services normally guarantee some particular features, for example they
-+ may guarantee that they will request a specific name such as
-+ "org.freedesktop.Screensaver", have a singleton object
-+ "/org/freedesktop/Application", and that object will implement the
-+ interface "org.freedesktop.ScreensaverControl".
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-service-description-files"><glossterm>Service Description Files</glossterm>
-+ <glossdef>
-+ <para>
-+ ".service files" tell the bus about service applications that can be
-+ launched (see <xref linkend="term-service"/>). Most importantly they
-+ provide a mapping from bus names to services that will request those
-+ names when they start up.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ <glossentry id="term-unique-name"><glossterm>Unique Connection Name</glossterm>
-+ <glossdef>
-+ <para>
-+ The special name automatically assigned to each connection by the
-+ message bus. This name will never change owner, and will be unique
-+ (never reused during the lifetime of the message bus).
-+ It will begin with a ':' character.
-+ </para>
-+ </glossdef>
-+ </glossentry>
-+
-+ </glossary>
-+</article>
-+
-diff -Naur dbus-0.61.orig/doc/dbus-test-plan.html dbus-0.61/doc/dbus-test-plan.html
---- dbus-0.61.orig/doc/dbus-test-plan.html 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dbus-test-plan.html 2006-02-24 16:50:23.000000000 +0100
-@@ -0,0 +1,141 @@
-+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>D-BUS Test Plan</title><meta name="generator" content="DocBook XSL Stylesheets V1.69.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="index"></a>D-BUS Test Plan</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">Anders</span> <span class="surname">Carlsson</span></h3><div class="affiliation"><span class="orgname">CodeFactory AB<br></span><div class="address"><p><code class="email"><<a href="mailto:andersca at codefactory.se">andersca at codefactory.se</a>></code></p></div></div></div></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#introduction">Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#importance-of-testing">The importance of testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="#client-library">Testing the D-BUS client library</a></span></dt><dd><dl><dt><span class="sect2"><a href="#data-structures">Data Structures</a></span></dt><dt><span class="sect2"><a href="#message-loader">Message loader</a></span></dt><dt><span class="sect2"><a href="#authentication">Authentication</a></span></dt></dl></dd><dt><span class="sect1"><a href="#daemon">Testing the D-BUS bus daemon</a></span></dt><dd><dl><dt><span class="sect2"><a href="#debug-transport">The debug transport</a></span></dt><dt><span class="sect2"><a href="#bus-test">The bus-test program</a></span></dt></dl></dd><dt><span class="sect1"><a href="#other-tests">Other tests</a></span></dt><dd><dl><dt><span class="sect2"><a href="#oom-robustness">Out-Of-Memory robustness</a></span></dt><dt><span class="sect2"><a href="#leaks-and-other-stuff">Memory leaks and code robustness</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="introduction"></a>Introduction</h2></div></div></div><p>
-+ This document tries to explain the details of the test plan for D-BUS
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="importance-of-testing"></a>The importance of testing</h3></div></div></div><p>
-+ As with any big library or program, testing is important. It
-+ can help find bugs and regressions and make the code better
-+ overall.
-+ </p><p>
-+ D-BUS is a large and complex piece of software (about 25,000
-+ lines of code for the client library, and 2,500 lines of code
-+ for the bus daemon) and it's therefore important to try to make sure
-+ that all parts of the software is functioning correctly.
-+ </p><p>
-+ D-BUS can be built with support for testing by passing
-+ <code class="literal">--enable-tests</code>. to the configure script. It
-+ is recommended that production systems build without testing
-+ since that reduces the D-BUS client library size.
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="client-library"></a>Testing the D-BUS client library</h2></div></div></div><p>
-+ The tests for the client library consist of the dbus-test
-+ program which is a unit test for all aspects of the client
-+ library. Whenever a bug in the client library is found and
-+ fixed, a test is added to make sure that the bug won't occur again.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="data-structures"></a>Data Structures</h3></div></div></div><p>
-+ The D-BUS client library consists of some data structures that
-+ are used internally; a linked list class, a hashtable class and
-+ a string class. All aspects of those are tested by dbus-test.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="message-loader"></a>Message loader</h3></div></div></div><p>
-+ The message loader is the part of D-BUS that takes messages in
-+ raw character form and parses them, turning them into DBusMessages.
-+ </p><p>
-+ This is one of the parts of D-BUS that
-+ <span class="emphasis"><em>must</em></span> be absolutely bug-free and
-+ robust. The message loader should be able to handle invalid
-+ and incomplete messages without crashing. Not doing so is a
-+ serious issue and can easily result in D-BUS being exploitable
-+ to DoS attacks.
-+ </p><p>
-+ To solve these problems, there is a testing feature called the
-+ Message Builder. The message builder can take a serialized
-+ message in string-form and convert it into a raw character
-+ string which can then be loaded by the message loader.
-+ </p><div class="figure"><a name="id2929145"></a><p class="title"><b>Figure 1. Example of a message in string form</b></p><pre class="programlisting">
-+ # Standard org.freedesktop.DBus.Hello message
-+
-+ VALID_HEADER
-+ FIELD_NAME name
-+ TYPE STRING
-+ STRING 'org.freedesktop.DBus.Hello'
-+ FIELD_NAME srvc
-+ TYPE STRING
-+ STRING 'org.freedesktop.DBus'
-+ ALIGN 8
-+ END_LENGTH Header
-+ START_LENGTH Body
-+ END_LENGTH Body
-+ </pre></div><p>
-+ The file format of messages in string form is documented in
-+ the D-BUS Reference Manual.
-+ </p><p>
-+ The message test part of dbus-test is using the message
-+ builder to build different kinds of messages, both valid,
-+ invalid, and invalid ones, to make sure that the loader won't
-+ crash or leak memory of any of those, and that the loader
-+ knows if a message is valid or not.
-+ </p><p>
-+ There is also a test program called
-+ <code class="literal">break-loader</code> that loads a message in
-+ string-form into raw character form using the message
-+ builder. It then randomly changes the message, it can for
-+ example replace single bytes of data or modify the length of
-+ the message. This is to simulate network errors. The
-+ break-loader program saves all the messages leading to errors
-+ so it can easily be run for a long period of time.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="authentication"></a>Authentication</h3></div></div></div><p>
-+ For testing authentication, there is a testing feature that
-+ can read authentication sequences from a file and play them
-+ back to a dummy server and client to make sure that
-+ authentication is working according to the specification.
-+ </p><div class="figure"><a name="id2929214"></a><p class="title"><b>Figure 2. Example of an authentication script</b></p><pre class="programlisting">
-+ ## this tests a successful auth of type EXTERNAL
-+
-+ SERVER
-+ SEND 'AUTH EXTERNAL USERNAME_HEX'
-+ EXPECT_COMMAND OK
-+ EXPECT_STATE WAITING_FOR_INPUT
-+ SEND 'BEGIN'
-+ EXPECT_STATE AUTHENTICATED
-+ </pre></div></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="daemon"></a>Testing the D-BUS bus daemon</h2></div></div></div><p>
-+ Since the D-BUS bus daemon is using the D-BUS client library it
-+ will benefit from all tests done on the client library, but
-+ there is still the issue of testing client-server communication.
-+ This is more complicated since it it may require another process
-+ running.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="debug-transport"></a>The debug transport</h3></div></div></div><p>
-+ In D-BUS, a <span class="emphasis"><em>transport</em></span> is a class that
-+ handles sending and receiving raw data over a certain
-+ medium. The transport that is used most in D-BUS is the UNIX
-+ transport with sends and recevies data over a UNIX socket. A
-+ transport that tunnels data through X11 client messages is
-+ also under development.
-+ </p><p>
-+ The D-BUS debug transport is a specialized transport that
-+ works in-process. This means that a client and server that
-+ exists in the same process can talk to eachother without using
-+ a socket.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="bus-test"></a>The bus-test program</h3></div></div></div><p>
-+ The bus-test program is a program that is used to test various
-+ parts of the D-BUS bus daemon; robustness and that it conforms
-+ to the specifications.
-+ </p><p>
-+ The test program has the necessary code from the bus daemon
-+ linked in, and it uses the debug transport for
-+ communication. This means that the bus daemon code can be
-+ tested without the real bus actually running, which makes
-+ testing easier.
-+ </p><p>
-+ The bus-test program should test all major features of the
-+ bus, such as service registration, notification when things
-+ occurs and message matching.
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="other-tests"></a>Other tests</h2></div></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="oom-robustness"></a>Out-Of-Memory robustness</h3></div></div></div><p>
-+ Since D-BUS should be able to be used in embedded devices, and
-+ also as a system service, it should be able to cope with
-+ low-memory situations without exiting or crashing.
-+ </p><p>
-+ In practice, this means that both the client and server code
-+ must be able to handle dbus_malloc returning NULL.
-+ </p><p>
-+ To test this, two environment variables
-+ exist. <code class="literal">DBUS_MALLOC_FAIL_NTH</code> will make every
-+ nth call to dbus_malloc return NULL, and
-+ <code class="literal">DBUS_MALLOC_FAIL_GREATER_THAN</code> will make any
-+ dbus_malloc call with a request for more than the specified
-+ number of bytes fail.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="leaks-and-other-stuff"></a>Memory leaks and code robustness</h3></div></div></div><p>
-+ Naturally there are some things that tests can't be written
-+ for, for example things like memory leaks and out-of-bounds
-+ memory reading or writing.
-+ </p><p>
-+ Luckily there exists good tools for catching such errors. One
-+ free good tool is <a href="http://devel-home.kde.org/~sewardj/" target="_top">Valgrind</a>, which runs the program in a
-+ virtual CPU which makes catching errors easy. All test programs can be run under Valgrind,
-+ </p></div></div></div></body></html>
-diff -Naur dbus-0.61.orig/doc/dbus-test-plan.xml dbus-0.61/doc/dbus-test-plan.xml
---- dbus-0.61.orig/doc/dbus-test-plan.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dbus-test-plan.xml 2004-05-18 00:19:04.000000000 +0200
-@@ -0,0 +1,232 @@
-+<?xml version="1.0" standalone="no"?>
-+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
-+[
-+]>
-+
-+<article id="index">
-+ <articleinfo>
-+ <title>D-BUS Test Plan</title>
-+ <date>14 February 2003</date>
-+ <authorgroup>
-+ <author>
-+ <firstname>Anders</firstname>
-+ <surname>Carlsson</surname>
-+ <affiliation>
-+ <orgname>CodeFactory AB</orgname>
-+ <address><email>andersca at codefactory.se</email></address>
-+ </affiliation>
-+ </author>
-+ </authorgroup>
-+ </articleinfo>
-+ <sect1 id="introduction">
-+ <title>Introduction</title>
-+ <para>
-+ This document tries to explain the details of the test plan for D-BUS
-+ </para>
-+ <sect2 id="importance-of-testing">
-+ <title>The importance of testing</title>
-+ <para>
-+ As with any big library or program, testing is important. It
-+ can help find bugs and regressions and make the code better
-+ overall.
-+ </para>
-+ <para>
-+ D-BUS is a large and complex piece of software (about 25,000
-+ lines of code for the client library, and 2,500 lines of code
-+ for the bus daemon) and it's therefore important to try to make sure
-+ that all parts of the software is functioning correctly.
-+ </para>
-+ <para>
-+ D-BUS can be built with support for testing by passing
-+ <literal>--enable-tests</literal>. to the configure script. It
-+ is recommended that production systems build without testing
-+ since that reduces the D-BUS client library size.
-+ </para>
-+ </sect2>
-+ </sect1>
-+ <sect1 id="client-library">
-+ <title>Testing the D-BUS client library</title>
-+ <para>
-+ The tests for the client library consist of the dbus-test
-+ program which is a unit test for all aspects of the client
-+ library. Whenever a bug in the client library is found and
-+ fixed, a test is added to make sure that the bug won't occur again.
-+ </para>
-+ <sect2 id="data-structures">
-+ <title>Data Structures</title>
-+ <para>
-+ The D-BUS client library consists of some data structures that
-+ are used internally; a linked list class, a hashtable class and
-+ a string class. All aspects of those are tested by dbus-test.
-+ </para>
-+ </sect2>
-+ <sect2 id="message-loader">
-+ <title>Message loader</title>
-+ <para>
-+ The message loader is the part of D-BUS that takes messages in
-+ raw character form and parses them, turning them into DBusMessages.
-+ </para>
-+ <para>
-+ This is one of the parts of D-BUS that
-+ <emphasis>must</emphasis> be absolutely bug-free and
-+ robust. The message loader should be able to handle invalid
-+ and incomplete messages without crashing. Not doing so is a
-+ serious issue and can easily result in D-BUS being exploitable
-+ to DoS attacks.
-+ </para>
-+ <para>
-+ To solve these problems, there is a testing feature called the
-+ Message Builder. The message builder can take a serialized
-+ message in string-form and convert it into a raw character
-+ string which can then be loaded by the message loader.
-+ </para>
-+ <figure>
-+ <title>Example of a message in string form</title>
-+ <programlisting>
-+ # Standard org.freedesktop.DBus.Hello message
-+
-+ VALID_HEADER
-+ FIELD_NAME name
-+ TYPE STRING
-+ STRING 'org.freedesktop.DBus.Hello'
-+ FIELD_NAME srvc
-+ TYPE STRING
-+ STRING 'org.freedesktop.DBus'
-+ ALIGN 8
-+ END_LENGTH Header
-+ START_LENGTH Body
-+ END_LENGTH Body
-+ </programlisting>
-+ </figure>
-+ <para>
-+ The file format of messages in string form is documented in
-+ the D-BUS Reference Manual.
-+ </para>
-+ <para>
-+ The message test part of dbus-test is using the message
-+ builder to build different kinds of messages, both valid,
-+ invalid, and invalid ones, to make sure that the loader won't
-+ crash or leak memory of any of those, and that the loader
-+ knows if a message is valid or not.
-+ </para>
-+ <para>
-+ There is also a test program called
-+ <literal>break-loader</literal> that loads a message in
-+ string-form into raw character form using the message
-+ builder. It then randomly changes the message, it can for
-+ example replace single bytes of data or modify the length of
-+ the message. This is to simulate network errors. The
-+ break-loader program saves all the messages leading to errors
-+ so it can easily be run for a long period of time.
-+ </para>
-+ </sect2>
-+ <sect2 id="authentication">
-+ <title>Authentication</title>
-+ <para>
-+ For testing authentication, there is a testing feature that
-+ can read authentication sequences from a file and play them
-+ back to a dummy server and client to make sure that
-+ authentication is working according to the specification.
-+ </para>
-+ <figure>
-+ <title>Example of an authentication script</title>
-+ <programlisting>
-+ ## this tests a successful auth of type EXTERNAL
-+
-+ SERVER
-+ SEND 'AUTH EXTERNAL USERNAME_HEX'
-+ EXPECT_COMMAND OK
-+ EXPECT_STATE WAITING_FOR_INPUT
-+ SEND 'BEGIN'
-+ EXPECT_STATE AUTHENTICATED
-+ </programlisting>
-+ </figure>
-+ </sect2>
-+ </sect1>
-+ <sect1 id="daemon">
-+ <title>Testing the D-BUS bus daemon</title>
-+ <para>
-+ Since the D-BUS bus daemon is using the D-BUS client library it
-+ will benefit from all tests done on the client library, but
-+ there is still the issue of testing client-server communication.
-+ This is more complicated since it it may require another process
-+ running.
-+ </para>
-+ <sect2 id="debug-transport">
-+ <title>The debug transport</title>
-+ <para>
-+ In D-BUS, a <emphasis>transport</emphasis> is a class that
-+ handles sending and receiving raw data over a certain
-+ medium. The transport that is used most in D-BUS is the UNIX
-+ transport with sends and recevies data over a UNIX socket. A
-+ transport that tunnels data through X11 client messages is
-+ also under development.
-+ </para>
-+ <para>
-+ The D-BUS debug transport is a specialized transport that
-+ works in-process. This means that a client and server that
-+ exists in the same process can talk to eachother without using
-+ a socket.
-+ </para>
-+ </sect2>
-+ <sect2 id="bus-test">
-+ <title>The bus-test program</title>
-+ <para>
-+ The bus-test program is a program that is used to test various
-+ parts of the D-BUS bus daemon; robustness and that it conforms
-+ to the specifications.
-+ </para>
-+ <para>
-+ The test program has the necessary code from the bus daemon
-+ linked in, and it uses the debug transport for
-+ communication. This means that the bus daemon code can be
-+ tested without the real bus actually running, which makes
-+ testing easier.
-+ </para>
-+ <para>
-+ The bus-test program should test all major features of the
-+ bus, such as service registration, notification when things
-+ occurs and message matching.
-+ </para>
-+ </sect2>
-+ </sect1>
-+ <sect1 id="other-tests">
-+ <title>Other tests</title>
-+
-+ <sect2 id="oom-robustness">
-+ <title>Out-Of-Memory robustness</title>
-+ <para>
-+ Since D-BUS should be able to be used in embedded devices, and
-+ also as a system service, it should be able to cope with
-+ low-memory situations without exiting or crashing.
-+ </para>
-+ <para>
-+ In practice, this means that both the client and server code
-+ must be able to handle dbus_malloc returning NULL.
-+ </para>
-+ <para>
-+ To test this, two environment variables
-+ exist. <literal>DBUS_MALLOC_FAIL_NTH</literal> will make every
-+ nth call to dbus_malloc return NULL, and
-+ <literal>DBUS_MALLOC_FAIL_GREATER_THAN</literal> will make any
-+ dbus_malloc call with a request for more than the specified
-+ number of bytes fail.
-+ </para>
-+ </sect2>
-+
-+ <sect2 id="leaks-and-other-stuff">
-+ <title>Memory leaks and code robustness</title>
-+ <para>
-+ Naturally there are some things that tests can't be written
-+ for, for example things like memory leaks and out-of-bounds
-+ memory reading or writing.
-+ </para>
-+ <para>
-+ Luckily there exists good tools for catching such errors. One
-+ free good tool is <ulink url="http://devel-home.kde.org/~sewardj/">Valgrind</ulink>, which runs the program in a
-+ virtual CPU which makes catching errors easy. All test programs can be run under Valgrind,
-+ </para>
-+ </sect2>
-+ </sect1>
-+</article>
-diff -Naur dbus-0.61.orig/doc/dbus-tutorial.html dbus-0.61/doc/dbus-tutorial.html
---- dbus-0.61.orig/doc/dbus-tutorial.html 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dbus-tutorial.html 2006-02-24 16:50:26.000000000 +0100
-@@ -0,0 +1,1213 @@
-+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>D-BUS Tutorial</title><meta name="generator" content="DocBook XSL Stylesheets V1.69.1"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="index"></a>D-BUS Tutorial</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">Havoc</span> <span class="surname">Pennington</span></h3><div class="affiliation"><span class="orgname">Red Hat, Inc.<br></span><div class="address"><p><code class="email"><<a href="mailto:hp at pobox.com">hp at pobox.com</a>></code></p></div></div></div><div class="author"><h3 class="author"><span class="firstname">David</span> <span class="surname">Wheeler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="surname">Palmieri</span></h3><div class="affiliation"><span class="orgname">Red Hat, Inc.<br></span><div class="address"><p><code class="email"><<a href="mailto:johnp at redhat.com">johnp at redhat.com</a>></code></p></div></div></div><div class="author"><h3 class="author"><span class="firstname">Colin</span> <span class="surname">Walters</span></h3><div class="affiliation"><span class="orgname">Red Hat, Inc.<br></span><div class="address"><p><code class="email"><<a href="mailto:walters at redhat.com">walters at redhat.com</a>></code></p></div></div></div></div></div><div><p class="releaseinfo">Version 0.4.1</p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#whatis">What is D-BUS?</a></span></dt><dd><dl><dt><span class="sect2"><a href="#uses">D-BUS applications</a></span></dt></dl></dd><dt><span class="sect1"><a href="#concepts">Concepts</a></span></dt><dd><dl><dt><span class="sect2"><a href="#objects">Objects and Object Paths</a></span></dt><dt><span class="sect2"><a href="#interfaces">Interfaces</a></span></dt><dt><span class="sect2"><a href="#messages">Message Types</a></span></dt><dt><span class="sect2"><a href="#bus-names">Bus Names</a></span></dt><dt><span class="sect2"><a href="#addresses">Addresses</a></span></dt><dt><span class="sect2"><a href="#bigpicture">Big Conceptual Picture</a></span></dt></dl></dd><dt><span class="sect1"><a href="#glib-client">GLib API: Using Remote Objects</a></span></dt><dd><dl><dt><span class="sect2"><a href="#glib-typemappings">D-BUS - GLib type mappings</a></span></dt><dt><span class="sect2"><a href="#sample-program-1">A sample program</a></span></dt><dt><span class="sect2"><a href="#glib-program-setup">Program initalization</a></span></dt><dt><span class="sect2"><a href="#glib-method-invocation">Understanding method invocation</a></span></dt><dt><span class="sect2"><a href="#glib-signal-connection">Connecting to object signals</a></span></dt><dt><span class="sect2"><a href="#glib-error-handling">Error handling and remote exceptions</a></span></dt><dt><span class="sect2"><a href="#glib-more-examples">More examples of method invocation</a></span></dt><dt><span class="sect2"><a href="#glib-generated-bindings">Generated Bindings</a></span></dt></dl></dd><dt><span class="sect1"><a href="#glib-server">GLib API: Implementing Objects</a></span></dt><dd><dl><dt><span class="sect2"><a href="#glib-annotations">Server-side Annotations</a></span></dt></dl></dd><dt><span class="sect1"><a href="#python-client">Python API: Using Remote Objects</a></span></dt><dd><dl><dt><span class="sect2"><a href="#python-typemappings">D-BUS - Python type mappings</a></span></dt><dt><span class="sect2"><a href="#python-invoking-methods">Invoking Methods</a></span></dt><dt><span class="sect2"><a href="#python-listening-for-signals">Listening for Signals</a></span></dt></dl></dd><dt><span class="sect1"><a href="#python-server">Python API: Implementing Objects</a></span></dt><dd><dl><dt><span class="sect2"><a href="#python-inheriting-from-dbus-object">Inheriting From dbus.service.Object</a></span></dt><dt><span class="sect2"><a href="#python-exporting-methods">Exporting Methods Over The Bus</a></span></dt><dt><span class="sect2"><a href="#python-emitting-signals">Emitting Signals</a></span></dt><dt><span class="sect2"><a href="#python-inheriting-and-overriding">Inheriting from HelloWorldObject</a></span></dt><dt><span class="sect2"><a href="#python-conclusion">Conclusion</a></span></dt></dl></dd><dt><span class="sect1"><a href="#qt-client">Qt API: Using Remote Objects</a></span></dt><dt><span class="sect1"><a href="#qt-server">Qt API: Implementing Objects</a></span></dt></dl></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="whatis"></a>What is D-BUS?</h2></div></div></div><p>
-+ D-BUS is a system for <em class="firstterm">interprocess communication</em>
-+ (IPC). Architecturally, it has several layers:
-+
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ A library, <em class="firstterm">libdbus</em>, that allows two
-+ applications to connect to each other and exchange messages.
-+ </p></li><li><p>
-+ A <em class="firstterm">message bus daemon</em> executable, built on
-+ libdbus, that multiple applications can connect to. The daemon can
-+ route messages from one application to zero or more other
-+ applications.
-+ </p></li><li><p>
-+ <em class="firstterm">Wrapper libraries</em> based on particular
-+ application frameworks. For example, libdbus-glib and
-+ libdbus-qt. There are also bindings to languages such as
-+ Python. These wrapper libraries are the API most people should use,
-+ as they simplify the details of D-BUS programming. libdbus is
-+ intended to be a low-level backend for the higher level bindings.
-+ Much of the libdbus API is only useful for binding implementation.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ If you just want to use D-BUS and don't care how it works, jump directly
-+ to <a href="#concepts" title="Concepts">the section called “Concepts”</a>.
-+ Otherwise, read on.
-+ </p><p>
-+ libdbus only supports one-to-one connections, just like a raw network
-+ socket. However, rather than sending byte streams over the connection, you
-+ send <em class="firstterm">messages</em>. Messages have a header identifying
-+ the kind of message, and a body containing a data payload. libdbus also
-+ abstracts the exact transport used (sockets vs. whatever else), and
-+ handles details such as authentication.
-+ </p><p>
-+ The message bus daemon forms the hub of a wheel. Each spoke of the wheel
-+ is a one-to-one connection to an application using libdbus. An
-+ application sends a message to the bus daemon over its spoke, and the bus
-+ daemon forwards the message to other connected applications as
-+ appropriate. Think of the daemon as a router.
-+ </p><p>
-+ The bus daemon has multiple instances on a typical computer. The
-+ first instance is a machine-global singleton, that is, a system daemon
-+ similar to sendmail or Apache. This instance has heavy security
-+ restrictions on what messages it will accept, and is used for systemwide
-+ communication. The other instances are created one per user login session.
-+ These instances allow applications in the user's session to communicate
-+ with one another.
-+ </p><p>
-+ The systemwide and per-user daemons are separate. Normal within-session
-+ IPC does not involve the systemwide message bus process and vice versa.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="uses"></a>D-BUS applications</h3></div></div></div><p>
-+ There are many, many technologies in the world that have "Inter-process
-+ communication" or "networking" in their stated purpose: <a href="http://www.omg.org" target="_top">CORBA</a>, <a href="http://www.opengroup.org/dce/" target="_top">DCE</a>, <a href="http://www.microsoft.com/com/" target="_top">DCOM</a>, <a href="http://developer.kde.org/documentation/library/kdeqt/dcop.html" target="_top">DCOP</a>, <a href="http://www.xmlrpc.com" target="_top">XML-RPC</a>, <a href="http://www.w3.org/TR/SOAP/" target="_top">SOAP</a>, <a href="http://www.mbus.org/" target="_top">MBUS</a>, <a href="http://www.zeroc.com/ice.html" target="_top">Internet Communications Engine (ICE)</a>,
-+ and probably hundreds more.
-+ Each of these is tailored for particular kinds of application.
-+ D-BUS is designed for two specific cases:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Communication between desktop applications in the same desktop
-+ session; to allow integration of the desktop session as a whole,
-+ and address issues of process lifecycle (when do desktop components
-+ start and stop running).
-+ </p></li><li><p>
-+ Communication between the desktop session and the operating system,
-+ where the operating system would typically include the kernel
-+ and any system daemons or processes.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ For the within-desktop-session use case, the GNOME and KDE desktops
-+ have significant previous experience with different IPC solutions
-+ such as CORBA and DCOP. D-BUS is built on that experience and
-+ carefully tailored to meet the needs of these desktop projects
-+ in particular. D-BUS may or may not be appropriate for other
-+ applications; the FAQ has some comparisons to other IPC systems.
-+ </p><p>
-+ The problem solved by the systemwide or communication-with-the-OS case
-+ is explained well by the following text from the Linux Hotplug project:
-+ </p><div class="blockquote"><blockquote class="blockquote"><p>
-+ A gap in current Linux support is that policies with any sort of
-+ dynamic "interact with user" component aren't currently
-+ supported. For example, that's often needed the first time a network
-+ adapter or printer is connected, and to determine appropriate places
-+ to mount disk drives. It would seem that such actions could be
-+ supported for any case where a responsible human can be identified:
-+ single user workstations, or any system which is remotely
-+ administered.
-+ </p><p>
-+ This is a classic "remote sysadmin" problem, where in this case
-+ hotplugging needs to deliver an event from one security domain
-+ (operating system kernel, in this case) to another (desktop for
-+ logged-in user, or remote sysadmin). Any effective response must go
-+ the other way: the remote domain taking some action that lets the
-+ kernel expose the desired device capabilities. (The action can often
-+ be taken asynchronously, for example letting new hardware be idle
-+ until a meeting finishes.) At this writing, Linux doesn't have
-+ widely adopted solutions to such problems. However, the new D-Bus
-+ work may begin to solve that problem.
-+ </p></blockquote></div><p>
-+ </p><p>
-+ D-BUS may happen to be useful for purposes other than the one it was
-+ designed for. Its general properties that distinguish it from
-+ other forms of IPC are:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Binary protocol designed to be used asynchronously
-+ (similar in spirit to the X Window System protocol).
-+ </p></li><li><p>
-+ Stateful, reliable connections held open over time.
-+ </p></li><li><p>
-+ The message bus is a daemon, not a "swarm" or
-+ distributed architecture.
-+ </p></li><li><p>
-+ Many implementation and deployment issues are specified rather
-+ than left ambiguous.
-+ </p></li><li><p>
-+ Semantics are similar to the existing DCOP system, allowing
-+ KDE to adopt it more easily.
-+ </p></li><li><p>
-+ Security features to support the systemwide mode of the
-+ message bus.
-+ </p></li></ul></div><p>
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="concepts"></a>Concepts</h2></div></div></div><p>
-+ Some basic concepts apply no matter what application framework you're
-+ using to write a D-BUS application. The exact code you write will be
-+ different for GLib vs. Qt vs. Python applications, however.
-+ </p><p>
-+ Here is a diagram (<a href="diagram.png" target="_top">png</a> <a href="diagram.svg" target="_top">svg</a>) that may help you visualize the concepts
-+ that follow.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="objects"></a>Objects and Object Paths</h3></div></div></div><p>
-+ Each application using D-BUS contains <em class="firstterm">objects</em>,
-+ which generally map to GObject, QObject, C++ objects, or Python objects
-+ (but need not). An object is an <span class="emphasis"><em>instance</em></span> rather
-+ than a type. When messages are received over a D-BUS connection, they
-+ are sent to a specific object, not to the application as a whole.
-+ </p><p>
-+ To allow messages to specify their destination object, there has to be a
-+ way to refer to an object. In your favorite programming language, this
-+ is normally called a <em class="firstterm">pointer</em> or
-+ <em class="firstterm">reference</em>. However, these references are
-+ implemented as memory addresses relative to the address space of your
-+ application, and thus can't be passed from one application to another.
-+ </p><p>
-+ To solve this, D-BUS introduces a name for each object. The name
-+ looks like a filesystem path, for example an object could be
-+ named <code class="literal">/org/kde/kspread/sheets/3/cells/4/5</code>.
-+ Human-readable paths are nice, but you are free to create an
-+ object named <code class="literal">/com/mycompany/c5yo817y0c1y1c5b</code>
-+ if it makes sense for your application.
-+ </p><p>
-+ Namespacing object paths is smart, by starting them with the components
-+ of a domain name you own (e.g. <code class="literal">/org/kde</code>). This
-+ keeps different code modules in the same process from stepping
-+ on one another's toes.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="interfaces"></a>Interfaces</h3></div></div></div><p>
-+ Each object supports one or more <em class="firstterm">interfaces</em>.
-+ Think of an interface as a named group of methods and signals,
-+ just as it is in GLib or Qt or Java. Interfaces define the
-+ <span class="emphasis"><em>type</em></span> of an object instance.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="messages"></a>Message Types</h3></div></div></div><p>
-+ Messages are not all the same; in particular, D-BUS has
-+ 4 built-in message types:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ Method call messages ask to invoke a method
-+ on an object.
-+ </p></li><li><p>
-+ Method return messages return the results
-+ of invoking a method.
-+ </p></li><li><p>
-+ Error messages return an exception caused by
-+ invoking a method.
-+ </p></li><li><p>
-+ Signal messages are notifications that a given signal
-+ has been emitted (that an event has occurred).
-+ You could also think of these as "event" messages.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ A method call maps very simply to messages, then: you send a method call
-+ message, and receive either a method return message or an error message
-+ in reply.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="bus-names"></a>Bus Names</h3></div></div></div><p>
-+ Object paths, interfaces, and messages exist on the level of
-+ libdbus and the D-BUS protocol; they are used even in the
-+ 1-to-1 case with no message bus involved.
-+ </p><p>
-+ Bus names, on the other hand, are a property of the message bus daemon.
-+ The bus maintains a mapping from names to message bus connections.
-+ These names are used to specify the origin and destination
-+ of messages passing through the message bus. When a name is mapped
-+ to a particular application's connection, that application is said to
-+ <em class="firstterm">own</em> that name.
-+ </p><p>
-+ On connecting to the bus daemon, each application immediately owns a
-+ special name called the <em class="firstterm">unique connection name</em>.
-+ A unique name begins with a ':' (colon) character; no other names are
-+ allowed to begin with that character. Unique names are special because
-+ they are created dynamically, and are never re-used during the lifetime
-+ of the same bus daemon. You know that a given unique name will have the
-+ same owner at all times. An example of a unique name might be
-+ <code class="literal">:34-907</code>. The numbers after the colon have
-+ no meaning other than their uniqueness.
-+ </p><p>
-+ Applications may ask to own additional <em class="firstterm">well-known
-+ names</em>. For example, you could write a specification to
-+ define a name called <code class="literal">com.mycompany.TextEditor</code>.
-+ Your definition could specify that to own this name, an application
-+ should have an object at the path
-+ <code class="literal">/com/mycompany/TextFileManager</code> supporting the
-+ interface <code class="literal">org.freedesktop.FileHandler</code>.
-+ </p><p>
-+ Applications could then send messages to this bus name,
-+ object, and interface to execute method calls.
-+ </p><p>
-+ You could think of the unique names as IP addresses, and the
-+ well-known names as domain names. So
-+ <code class="literal">com.mycompany.TextEditor</code> might map to something like
-+ <code class="literal">:34-907</code> just as <code class="literal">mycompany.com</code> maps
-+ to something like <code class="literal">192.168.0.5</code>.
-+ </p><p>
-+ Names have a second important use, other than routing messages. They
-+ are used to track lifecycle. When an application exits (or crashes), its
-+ connection to the message bus will be closed by the operating system
-+ kernel. The message bus then sends out notification messages telling
-+ remaining applications that the application's names have lost their
-+ owner. By tracking these notifications, your application can reliably
-+ monitor the lifetime of other applications.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="addresses"></a>Addresses</h3></div></div></div><p>
-+ Applications using D-BUS are either servers or clients. A server
-+ listens for incoming connections; a client connects to a server. Once
-+ the connection is established, it is a symmetric flow of messages; the
-+ client-server distinction only matters when setting up the
-+ connection.
-+ </p><p>
-+ A D-BUS <em class="firstterm">address</em> specifies where a server will
-+ listen, and where a client will connect. For example, the address
-+ <code class="literal">unix:path=/tmp/abcdef</code> specifies that the server will
-+ listen on a UNIX domain socket at the path
-+ <code class="literal">/tmp/abcdef</code> and the client will connect to that
-+ socket. An address can also specify TCP/IP sockets, or any other
-+ transport defined in future iterations of the D-BUS specification.
-+ </p><p>
-+ When using D-BUS with a message bus, the bus daemon is a server
-+ and all other applications are clients of the bus daemon.
-+ libdbus automatically discovers the address of the per-session bus
-+ daemon by reading an environment variable. It discovers the
-+ systemwide bus daemon by checking a well-known UNIX domain socket path
-+ (though you can override this address with an environment variable).
-+ </p><p>
-+ If you're using D-BUS without a bus daemon, it's up to you to
-+ define which application will be the server and which will be
-+ the client, and specify a mechanism for them to agree on
-+ the server's address.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="bigpicture"></a>Big Conceptual Picture</h3></div></div></div><p>
-+ Pulling all these concepts together, to specify a particular
-+ method call on a particular object instance, a number of
-+ nested components have to be named:
-+ </p><pre class="programlisting">
-+ Address -> [Bus Name] -> Path -> Interface -> Method
-+ </pre><p>
-+ The bus name is in brackets to indicate that it's optional -- you only
-+ provide a name to route the method call to the right application
-+ when using the bus daemon. If you have a direct connection to another
-+ application, bus names aren't used; there's no bus daemon.
-+ </p><p>
-+ The interface is also optional, primarily for historical
-+ reasons; DCOP does not require specifying the interface,
-+ instead simply forbidding duplicate method names
-+ on the same object instance. D-BUS will thus let you
-+ omit the interface, but if your method name is ambiguous
-+ it is undefined which method will be invoked.
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="glib-client"></a>GLib API: Using Remote Objects</h2></div></div></div><p>
-+ The GLib binding is defined in the header file
-+ <code class="literal"><dbus/dbus-glib.h></code>.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="glib-typemappings"></a>D-BUS - GLib type mappings</h3></div></div></div><p>
-+ The heart of the GLib bindings for D-BUS is the mapping it
-+ provides between D-BUS "type signatures" and GLib types
-+ (<code class="literal">GType</code>). The D-BUS type system is composed of
-+ a number of "basic" types, along with several "container" types.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-basic-typemappings"></a>Basic type mappings</h4></div></div></div><p>
-+ Below is a list of the basic types, along with their associated
-+ mapping to a <code class="literal">GType</code>.
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>D-BUS basic type</th><th>GType</th><th>Free function</th><th>Notes</th></tr></thead><tbody><tr><td><code class="literal">BYTE</code></td><td><code class="literal">G_TYPE_UCHAR</code></td><td> </td><td> </td></tr><tr><td><code class="literal">BOOLEAN</code></td><td><code class="literal">G_TYPE_BOOLEAN</code></td><td> </td><td> </td></tr><tr><td><code class="literal">INT16</code></td><td><code class="literal">G_TYPE_INT</code></td><td> </td><td>Will be changed to a <code class="literal">G_TYPE_INT16</code> once GLib has it</td></tr><tr><td><code class="literal">UINT16</code></td><td><code class="literal">G_TYPE_UINT</code></td><td> </td><td>Will be changed to a <code class="literal">G_TYPE_UINT16</code> once GLib has it</td></tr><tr><td><code class="literal">INT32</code></td><td><code class="literal">G_TYPE_INT</code></td><td> </td><td>Will be changed to a <code class="literal">G_TYPE_INT32</code> once GLib has it</td></tr><tr><td><code class="literal">UINT32</code></td><td><code class="literal">G_TYPE_UINT</code></td><td> </td><td>Will be changed to a <code class="literal">G_TYPE_UINT32</code> once GLib has it</td></tr><tr><td><code class="literal">INT64</code></td><td><code class="literal">G_TYPE_GINT64</code></td><td> </td><td> </td></tr><tr><td><code class="literal">UINT64</code></td><td><code class="literal">G_TYPE_GUINT64</code></td><td> </td><td> </td></tr><tr><td><code class="literal">DOUBLE</code></td><td><code class="literal">G_TYPE_DOUBLE</code></td><td> </td><td> </td></tr><tr><td><code class="literal">STRING</code></td><td><code class="literal">G_TYPE_STRING</code></td><td><code class="literal">g_free</code></td><td> </td></tr><tr><td><code class="literal">OBJECT_PATH</code></td><td><code class="literal">DBUS_TYPE_G_PROXY</code></td><td><code class="literal">g_object_unref</code></td><td>The returned proxy does not have an interface set; use <code class="literal">dbus_g_proxy_set_interface</code> to invoke methods</td></tr></tbody></table></div><p>
-+ As you can see, the basic mapping is fairly straightforward.
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-container-typemappings"></a>Container type mappings</h4></div></div></div><p>
-+ The D-BUS type system also has a number of "container"
-+ types, such as <code class="literal">DBUS_TYPE_ARRAY</code> and
-+ <code class="literal">DBUS_TYPE_STRUCT</code>. The D-BUS type system
-+ is fully recursive, so one can for example have an array of
-+ array of strings (i.e. type signature
-+ <code class="literal">aas</code>).
-+ </p><p>
-+ However, not all of these types are in common use; for
-+ example, at the time of this writing the author knows of no
-+ one using <code class="literal">DBUS_TYPE_STRUCT</code>, or a
-+ <code class="literal">DBUS_TYPE_ARRAY</code> containing any non-basic
-+ type. The approach the GLib bindings take is pragmatic; try
-+ to map the most common types in the most obvious way, and
-+ let using less common and more complex types be less
-+ "natural".
-+ </p><p>
-+ First, D-BUS type signatures which have an "obvious"
-+ corresponding built-in GLib type are mapped using that type:
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col><col><col><col></colgroup><thead><tr><th>D-BUS type signature</th><th>Description</th><th>GType</th><th>C typedef</th><th>Free function</th><th>Notes</th></tr></thead><tbody><tr><td><code class="literal">as</code></td><td>Array of strings</td><td><code class="literal">G_TYPE_STRV</code></td><td><code class="literal">char **</code></td><td><code class="literal">g_strfreev</code></td><td> </td></tr><tr><td><code class="literal">v</code></td><td>Generic value container</td><td><code class="literal">G_TYPE_VALUE</code></td><td><code class="literal">GValue *</code></td><td><code class="literal">g_value_unset</code></td><td>The calling conventions for values expect that method callers have allocated return values; see below.</td></tr></tbody></table></div><p>
-+ </p><p>
-+ The next most common recursive type signatures are arrays of
-+ basic values. The most obvious mapping for arrays of basic
-+ types is a <code class="literal">GArray</code>. Now, GLib does not
-+ provide a builtin <code class="literal">GType</code> for
-+ <code class="literal">GArray</code>. However, we actually need more than
-+ that - we need a "parameterized" type which includes the
-+ contained type. Why we need this we will see below.
-+ </p><p>
-+ The approach taken is to create these types in the D-BUS GLib
-+ bindings; however, there is nothing D-BUS specific about them.
-+ In the future, we hope to include such "fundamental" types in GLib
-+ itself.
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col><col><col><col></colgroup><thead><tr><th>D-BUS type signature</th><th>Description</th><th>GType</th><th>C typedef</th><th>Free function</th><th>Notes</th></tr></thead><tbody><tr><td><code class="literal">ay</code></td><td>Array of bytes</td><td><code class="literal">DBUS_TYPE_G_BYTE_ARRAY</code></td><td><code class="literal">GArray *</code></td><td>g_array_free</td><td> </td></tr><tr><td><code class="literal">au</code></td><td>Array of uint</td><td><code class="literal">DBUS_TYPE_G_UINT_ARRAY</code></td><td><code class="literal">GArray *</code></td><td>g_array_free</td><td> </td></tr><tr><td><code class="literal">ai</code></td><td>Array of int</td><td><code class="literal">DBUS_TYPE_G_INT_ARRAY</code></td><td><code class="literal">GArray *</code></td><td>g_array_free</td><td> </td></tr><tr><td><code class="literal">ax</code></td><td>Array of int64</td><td><code class="literal">DBUS_TYPE_G_INT64_ARRAY</code></td><td><code class="literal">GArray *</code></td><td>g_array_free</td><td> </td></tr><tr><td><code class="literal">at</code></td><td>Array of uint64</td><td><code class="literal">DBUS_TYPE_G_UINT64_ARRAY</code></td><td><code class="literal">GArray *</code></td><td>g_array_free</td><td> </td></tr><tr><td><code class="literal">ad</code></td><td>Array of double</td><td><code class="literal">DBUS_TYPE_G_DOUBLE_ARRAY</code></td><td><code class="literal">GArray *</code></td><td>g_array_free</td><td> </td></tr><tr><td><code class="literal">ab</code></td><td>Array of boolean</td><td><code class="literal">DBUS_TYPE_G_BOOLEAN_ARRAY</code></td><td><code class="literal">GArray *</code></td><td>g_array_free</td><td> </td></tr></tbody></table></div><p>
-+ </p><p>
-+ D-BUS also includes a special type DBUS_TYPE_DICT_ENTRY which
-+ is only valid in arrays. It's intended to be mapped to a "dictionary"
-+ type by bindings. The obvious GLib mapping here is GHashTable. Again,
-+ however, there is no builtin <code class="literal">GType</code> for a GHashTable.
-+ Moreover, just like for arrays, we need a parameterized type so that
-+ the bindings can communiate which types are contained in the hash table.
-+ </p><p>
-+ At present, only strings are supported. Work is in progress to
-+ include more types.
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col><col><col><col></colgroup><thead><tr><th>D-BUS type signature</th><th>Description</th><th>GType</th><th>C typedef</th><th>Free function</th><th>Notes</th></tr></thead><tbody><tr><td><code class="literal">a{ss}</code></td><td>Dictionary mapping strings to strings</td><td><code class="literal">DBUS_TYPE_G_STRING_STRING_HASHTABLE</code></td><td><code class="literal">GHashTable *</code></td><td>g_hash_table_destroy</td><td> </td></tr></tbody></table></div><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-generic-typemappings"></a>Arbitrarily recursive type mappings</h4></div></div></div><p>
-+ Finally, it is possible users will want to write or invoke D-BUS
-+ methods which have arbitrarily complex type signatures not
-+ directly supported by these bindings. For this case, we have a
-+ <code class="literal">DBusGValue</code> which acts as a kind of special
-+ variant value which may be iterated over manually. The
-+ <code class="literal">GType</code> associated is
-+ <code class="literal">DBUS_TYPE_G_VALUE</code>.
-+ </p><p>
-+ TODO insert usage of <code class="literal">DBUS_TYPE_G_VALUE</code> here.
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="sample-program-1"></a>A sample program</h3></div></div></div><p>Here is a D-BUS program using the GLib bindings.
-+</p><pre class="programlisting">
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *connection;
-+ GError *error;
-+ DBusGProxy *proxy;
-+ char **name_list;
-+ char **name_list_ptr;
-+
-+ g_type_init ();
-+
-+ error = NULL;
-+ connection = dbus_g_bus_get (DBUS_BUS_SESSION,
-+ &error);
-+ if (connection == NULL)
-+ {
-+ g_printerr ("Failed to open connection to bus: %s\n",
-+ error->message);
-+ g_error_free (error);
-+ exit (1);
-+ }
-+
-+ /* Create a proxy object for the "bus driver" (name "org.freedesktop.DBus") */
-+
-+ proxy = dbus_g_proxy_new_for_name (connection,
-+ DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS);
-+
-+ /* Call ListNames method, wait for reply */
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "ListNames", &error, G_TYPE_INVALID,
-+ G_TYPE_STRV, &name_list, G_TYPE_INVALID))
-+ {
-+ /* Just do demonstrate remote exceptions versus regular GError */
-+ if (error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
-+ g_printerr ("Caught remote method exception %s: %s",
-+ dbus_g_error_get_name (error),
-+ error->message);
-+ else
-+ g_printerr ("Error: %s\n", error->message);
-+ g_error_free (error);
-+ exit (1);
-+ }
-+
-+ /* Print the results */
-+
-+ g_print ("Names on the message bus:\n");
-+
-+ for (name_list_ptr = name_list; *name_list_ptr; name_list_ptr++)
-+ {
-+ g_print (" %s\n", *name_list_ptr);
-+ }
-+ g_strfreev (name_list);
-+
-+ g_object_unref (proxy);
-+
-+ return 0;
-+}
-+</pre><p>
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="glib-program-setup"></a>Program initalization</h3></div></div></div><p>
-+ A connection to the bus is acquired using
-+ <code class="literal">dbus_g_bus_get</code>. Next, a proxy
-+ is created for the object "/org/freedesktop/DBus" with
-+ interface <code class="literal">org.freedesktop.DBus</code>
-+ on the service <code class="literal">org.freedesktop.DBus</code>.
-+ This is a proxy for the message bus itself.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="glib-method-invocation"></a>Understanding method invocation</h3></div></div></div><p>
-+ You have a number of choices for method invocation. First, as
-+ used above, <code class="literal">dbus_g_proxy_call</code> sends a
-+ method call to the remote object, and blocks until a reply is
-+ recieved. The outgoing arguments are specified in the varargs
-+ array, terminated with <code class="literal">G_TYPE_INVALID</code>.
-+ Next, pointers to return values are specified, followed again
-+ by <code class="literal">G_TYPE_INVALID</code>.
-+ </p><p>
-+ To invoke a method asynchronously, use
-+ <code class="literal">dbus_g_proxy_begin_call</code>. This returns a
-+ <code class="literal">DBusGPendingCall</code> object; you may then set a
-+ notification function using
-+ <code class="literal">dbus_g_pending_call_set_notify</code>.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="glib-signal-connection"></a>Connecting to object signals</h3></div></div></div><p>
-+ You may connect to signals using
-+ <code class="literal">dbus_g_proxy_add_signal</code> and
-+ <code class="literal">dbus_g_proxy_connect_signal</code>. You must
-+ invoke <code class="literal">dbus_g_proxy_add_signal</code> to specify
-+ the signature of your signal handlers; you may then invoke
-+ <code class="literal">dbus_g_proxy_connect_signal</code> multiple times.
-+ </p><p>
-+ Note that it will often be the case that there is no builtin
-+ marshaller for the type signature of a remote signal. In that
-+ case, you must generate a marshaller yourself by using
-+ <span class="application">glib-genmarshal</span>, and then register
-+ it using <code class="literal">dbus_g_object_register_marshaller</code>.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="glib-error-handling"></a>Error handling and remote exceptions</h3></div></div></div><p>
-+ All of the GLib binding methods such as
-+ <code class="literal">dbus_g_proxy_end_call</code> return a
-+ <code class="literal">GError</code>. This <code class="literal">GError</code> can
-+ represent two different things:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ An internal D-BUS error, such as an out-of-memory
-+ condition, an I/O error, or a network timeout. Errors
-+ generated by the D-BUS library itself have the domain
-+ <code class="literal">DBUS_GERROR</code>, and a corresponding code
-+ such as <code class="literal">DBUS_GERROR_NO_MEMORY</code>. It will
-+ not be typical for applications to handle these errors
-+ specifically.
-+ </p></li><li><p>
-+ A remote D-BUS exception, thrown by the peer, bus, or
-+ service. D-BUS remote exceptions have both a textual
-+ "name" and a "message". The GLib bindings store this
-+ information in the <code class="literal">GError</code>, but some
-+ special rules apply.
-+ </p><p>
-+ The set error will have the domain
-+ <code class="literal">DBUS_GERROR</code> as above, and will also
-+ have the code
-+ <code class="literal">DBUS_GERROR_REMOTE_EXCEPTION</code>. In order
-+ to access the remote exception name, you must use a
-+ special accessor, such as
-+ <code class="literal">dbus_g_error_has_name</code> or
-+ <code class="literal">dbus_g_error_get_name</code>. The remote
-+ exception detailed message is accessible via the regular
-+ GError <code class="literal">message</code> member.
-+ </p></li></ul></div><p>
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="glib-more-examples"></a>More examples of method invocation</h3></div></div></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-sending-stuff"></a>Sending an integer and string, receiving an array of bytes</h4></div></div></div><p>
-+</p><pre class="programlisting">
-+ GArray *arr;
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "Foobar", &error,
-+ G_TYPE_INT, 42, G_TYPE_STRING, "hello",
-+ G_TYPE_INVALID,
-+ DBUS_TYPE_G_UCHAR_ARRAY, &arr, G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ g_assert (arr != NULL);
-+ printf ("got back %u values", arr->len);
-+</pre><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-sending-hash"></a>Sending a GHashTable</h4></div></div></div><p>
-+</p><pre class="programlisting">
-+ GHashTable *hash = g_hash_table_new (g_str_hash, g_str_equal);
-+ guint32 ret;
-+
-+ g_hash_table_insert (hash, "foo", "bar");
-+ g_hash_table_insert (hash, "baz", "whee");
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "HashSize", &error,
-+ DBUS_TYPE_G_STRING_STRING_HASH, hash, G_TYPE_INVALID,
-+ G_TYPE_UINT, &ret, G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ g_assert (ret == 2);
-+ g_hash_table_destroy (hash);
-+</pre><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-receiving-bool-int"></a>Receiving a boolean and a string</h4></div></div></div><p>
-+</p><pre class="programlisting">
-+ gboolean boolret;
-+ char *strret;
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "GetStuff", &error,
-+ G_TYPE_INVALID,
-+ G_TYPE_BOOLEAN, &boolret,
-+ G_TYPE_STRING, &strret,
-+ G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ printf ("%s %s", boolret ? "TRUE" : "FALSE", strret);
-+ g_free (strret);
-+</pre><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-sending-str-arrays"></a>Sending two arrays of strings</h4></div></div></div><p>
-+</p><pre class="programlisting">
-+ /* NULL terminate */
-+ char *strs_static[] = {"foo", "bar", "baz", NULL};
-+ /* Take pointer to array; cannot pass array directly */
-+ char **strs_static_p = strs_static;
-+ char **strs_dynamic;
-+
-+ strs_dynamic = g_new (char *, 4);
-+ strs_dynamic[0] = g_strdup ("hello");
-+ strs_dynamic[1] = g_strdup ("world");
-+ strs_dynamic[2] = g_strdup ("!");
-+ /* NULL terminate */
-+ strs_dynamic[3] = NULL;
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "TwoStrArrays", &error,
-+ G_TYPE_STRV, strs_static_p,
-+ G_TYPE_STRV, strs_dynamic,
-+ G_TYPE_INVALID,
-+ G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ g_strfreev (strs_dynamic);
-+</pre><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-getting-str-array"></a>Sending a boolean, receiving an array of strings</h4></div></div></div><p>
-+</p><pre class="programlisting">
-+ char **strs;
-+ char **strs_p;
-+ gboolean blah;
-+
-+ error = NULL;
-+ blah = TRUE;
-+ if (!dbus_g_proxy_call (proxy, "GetStrs", &error,
-+ G_TYPE_BOOLEAN, blah,
-+ G_TYPE_INVALID,
-+ G_TYPE_STRV, &strs,
-+ G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ for (strs_p = strs; *strs_p; strs_p++)
-+ printf ("got string: \"%s\"", *strs_p);
-+ g_strfreev (strs);
-+</pre><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-sending-variant"></a>Sending a variant</h4></div></div></div><p>
-+</p><pre class="programlisting">
-+ GValue val = {0, };
-+
-+ g_value_init (&val, G_TYPE_STRING);
-+ g_value_set_string (&val, "hello world");
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "SendVariant", &error,
-+ G_TYPE_VALUE, &val, G_TYPE_INVALID,
-+ G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ g_assert (ret == 2);
-+ g_value_unset (&val);
-+</pre><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="glib-receiving-variant"></a>Receiving a variant</h4></div></div></div><p>
-+</p><pre class="programlisting">
-+ GValue val = {0, };
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "GetVariant", &error, G_TYPE_INVALID,
-+ G_TYPE_VALUE, &val, G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ if (G_VALUE_TYPE (&val) == G_TYPE_STRING)
-+ printf ("%s\n", g_value_get_string (&val));
-+ else if (G_VALUE_TYPE (&val) == G_TYPE_INT)
-+ printf ("%d\n", g_value_get_int (&val));
-+ else
-+ ...
-+ g_value_unset (&val);
-+</pre><p>
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="glib-generated-bindings"></a>Generated Bindings</h3></div></div></div><p>
-+ By using the Introspection XML files, convenient client-side bindings
-+ can be automatically created to ease the use of a remote DBus object.
-+ </p><p>
-+ Here is a sample XML file which describes an object that exposes
-+ one method, named <code class="literal">ManyArgs</code>.
-+ </p><pre class="programlisting">
-+<?xml version="1.0" encoding="UTF-8" ?>
-+<node name="/com/example/MyObject">
-+ <interface name="com.example.MyObject">
-+ <method name="ManyArgs">
-+ <arg type="u" name="x" direction="in" />
-+ <arg type="s" name="str" direction="in" />
-+ <arg type="d" name="trouble" direction="in" />
-+ <arg type="d" name="d_ret" direction="out" />
-+ <arg type="s" name="str_ret" direction="out" />
-+ </method>
-+ </interface>
-+</node>
-+</pre><p>
-+ </p><p>
-+ Run <code class="literal">dbus-binding-tool --mode=glib-client
-+ <em class="replaceable"><code>FILENAME</code></em> >
-+ <em class="replaceable"><code>HEADER_NAME</code></em></code> to generate the header
-+ file. For example: <span><strong class="command">dbus-binding-tool --mode=glib-client
-+ my-object.xml > my-object-bindings.h</strong></span>. This will generate
-+ inline functions with the following prototypes:
-+ </p><pre class="programlisting">
-+/* This is a blocking call */
-+gboolean
-+com_example_MyObject_many_args (DBusGProxy *proxy, const guint IN_x,
-+ const char * IN_str, const gdouble IN_trouble,
-+ gdouble* OUT_d_ret, char ** OUT_str_ret,
-+ GError **error);
-+
-+/* This is a non-blocking call */
-+DBusGProxyCall*
-+com_example_MyObject_many_args_async (DBusGProxy *proxy, const guint IN_x,
-+ const char * IN_str, const gdouble IN_trouble,
-+ com_example_MyObject_many_args_reply callback,
-+ gpointer userdata);
-+
-+/* This is the typedef for the non-blocking callback */
-+typedef void
-+(*com_example_MyObject_many_args_reply)
-+(DBusGProxy *proxy, gdouble OUT_d_ret, char * OUT_str_ret,
-+ GError *error, gpointer userdata);
-+</pre><p>
-+ The first argument in all functions is a <code class="literal">DBusGProxy
-+ *</code>, which you should create with the usual
-+ <code class="literal">dbus_g_proxy_new_*</code> functions. Following that are the
-+ "in" arguments, and then either the "out" arguments and a
-+ <code class="literal">GError *</code> for the synchronous (blocking) function, or
-+ callback and user data arguments for the asynchronous (non-blocking)
-+ function. The callback in the asynchronous function passes the
-+ <code class="literal">DBusGProxy *</code>, the returned "out" arguments, an
-+ <code class="literal">GError *</code> which is set if there was an error otherwise
-+ <code class="literal">NULL</code>, and the user data.
-+ </p><p>
-+ As with the server-side bindings support (see <a href="#glib-server" title="GLib API: Implementing Objects">the section called “GLib API: Implementing Objects”</a>), the exact behaviour of the client-side
-+ bindings can be manipulated using "annotations". Currently the only
-+ annotation used by the client bindings is
-+ <code class="literal">org.freedesktop.DBus.GLib.NoReply</code>, which sets the
-+ flag indicating that the client isn't expecting a reply to the method
-+ call, so a reply shouldn't be sent. This is often used to speed up
-+ rapid method calls where there are no "out" arguments, and not knowing
-+ if the method succeeded is an acceptable compromise to half the traffic
-+ on the bus.
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="glib-server"></a>GLib API: Implementing Objects</h2></div></div></div><p>
-+ At the moment, to expose a GObject via D-BUS, you must
-+ write XML by hand which describes the methods exported
-+ by the object. In the future, this manual step will
-+ be obviated by the upcoming GLib introspection support.
-+ </p><p>
-+ Here is a sample XML file which describes an object that exposes
-+ one method, named <code class="literal">ManyArgs</code>.
-+</p><pre class="programlisting">
-+<?xml version="1.0" encoding="UTF-8" ?>
-+
-+<node name="/com/example/MyObject">
-+
-+ <interface name="com.example.MyObject">
-+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="my_object"/>
-+ <method name="ManyArgs">
-+ <!-- This is optional, and in this case is redunundant -->
-+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="my_object_many_args"/>
-+ <arg type="u" name="x" direction="in" />
-+ <arg type="s" name="str" direction="in" />
-+ <arg type="d" name="trouble" direction="in" />
-+ <arg type="d" name="d_ret" direction="out" />
-+ <arg type="s" name="str_ret" direction="out" />
-+ </method>
-+ </interface>
-+</node>
-+</pre><p>
-+ </p><p>
-+ This XML is in the same format as the D-BUS introspection XML
-+ format. Except we must include an "annotation" which give the C
-+ symbols corresponding to the object implementation prefix
-+ (<code class="literal">my_object</code>). In addition, if particular
-+ methods symbol names deviate from C convention
-+ (i.e. <code class="literal">ManyArgs</code> ->
-+ <code class="literal">many_args</code>), you may specify an annotation
-+ giving the C symbol.
-+ </p><p>
-+ Once you have written this XML, run <code class="literal">dbus-binding-tool --mode=glib-server <em class="replaceable"><code>FILENAME</code></em> > <em class="replaceable"><code>HEADER_NAME</code></em>.</code> to
-+ generate a header file. For example: <span><strong class="command">dbus-binding-tool --mode=glib-server my-object.xml > my-object-glue.h</strong></span>.
-+ </p><p>
-+ Next, include the generated header in your program, and invoke
-+ <code class="literal">dbus_g_object_class_install_info</code> in the class
-+ initializer, passing the object class and "object info" included in the
-+ header. For example:
-+ </p><pre class="programlisting">
-+ dbus_g_object_type_install_info (COM_FOO_TYPE_MY_OBJECT, &com_foo_my_object_info);
-+ </pre><p>
-+ This should be done exactly once per object class.
-+ </p><p>
-+ To actually implement the method, just define a C function named e.g.
-+ <code class="literal">my_object_many_args</code> in the same file as the info
-+ header is included. At the moment, it is required that this function
-+ conform to the following rules:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ The function must return a value of type <code class="literal">gboolean</code>;
-+ <code class="literal">TRUE</code> on success, and <code class="literal">FALSE</code>
-+ otherwise.
-+ </p></li><li><p>
-+ The first parameter is a pointer to an instance of the object.
-+ </p></li><li><p>
-+ Following the object instance pointer are the method
-+ input values.
-+ </p></li><li><p>
-+ Following the input values are pointers to return values.
-+ </p></li><li><p>
-+ The final parameter must be a <code class="literal">GError **</code>.
-+ If the function returns <code class="literal">FALSE</code> for an
-+ error, the error parameter must be initalized with
-+ <code class="literal">g_set_error</code>.
-+ </p></li></ul></div><p>
-+ </p><p>
-+ Finally, you can export an object using <code class="literal">dbus_g_connection_register_g_object</code>. For example:
-+ </p><pre class="programlisting">
-+ dbus_g_connection_register_g_object (connection,
-+ "/com/foo/MyObject",
-+ obj);
-+ </pre><p>
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="glib-annotations"></a>Server-side Annotations</h3></div></div></div><p>
-+ There are several annotations that are used when generating the
-+ server-side bindings. The most common annotation is
-+ <code class="literal">org.freedesktop.DBus.GLib.CSymbol</code> but there are other
-+ annotations which are often useful.
-+ </p><div class="variablelist"><dl><dt><span class="term"><code class="literal">org.freedesktop.DBus.GLib.CSymbol</code></span></dt><dd><p>
-+ This annotation is used to specify the C symbol names for
-+ the various types (interface, method, etc), if it differs from the
-+ name DBus generates.
-+ </p></dd><dt><span class="term"><code class="literal">org.freedesktop.DBus.GLib.Async</code></span></dt><dd><p>
-+ This annotation marks the method implementation as an
-+ asynchronous function, which doesn't return a response straight
-+ away but will send the response at some later point to complete
-+ the call. This is used to implement non-blocking services where
-+ method calls can take time.
-+ </p><p>
-+ When a method is asynchronous, the function prototype is
-+ different. It is required that the function conform to the
-+ following rules:
-+ </p><div class="itemizedlist"><ul type="disc"><li><p>
-+ The function must return a value of type <code class="literal">gboolean</code>;
-+ <code class="literal">TRUE</code> on success, and <code class="literal">FALSE</code>
-+ otherwise. TODO: the return value is currently ignored.
-+ </p></li><li><p>
-+ The first parameter is a pointer to an instance of the object.
-+ </p></li><li><p>
-+ Following the object instance pointer are the method
-+ input values.
-+ </p></li><li><p>
-+ The final parameter must be a
-+ <code class="literal">DBusGMethodInvocation *</code>. This is used
-+ when sending the response message back to the client, by
-+ calling <code class="literal">dbus_g_method_return</code> or
-+ <code class="literal">dbus_g_method_return_error</code>.
-+ </p></li></ul></div><p>
-+ </p></dd><dt><span class="term"><code class="literal">org.freedesktop.DBus.GLib.Const</code></span></dt><dd><p>This attribute can only be applied to "out"
-+ <code class="literal"><arg></code> nodes, and specifies that the
-+ parameter isn't being copied when returned. For example, this
-+ turns a 's' argument from a <code class="literal">char **</code> to a
-+ <code class="literal">const char **</code>, and results in the argument not
-+ being freed by DBus after the message is sent.
-+ </p></dd><dt><span class="term"><code class="literal">org.freedesktop.DBus.GLib.ReturnVal</code></span></dt><dd><p>
-+ This attribute can only be applied to "out"
-+ <code class="literal"><arg></code> nodes, and alters the expected
-+ function signature. It currently can be set to two values:
-+ <code class="literal">""</code> or <code class="literal">"error"</code>. The
-+ argument marked with this attribute is not returned via a
-+ pointer argument, but by the function's return value. If the
-+ attribute's value is the empty string, the <code class="literal">GError
-+ *</code> argument is also omitted so there is no standard way
-+ to return an error value. This is very useful for interfacing
-+ with existing code, as it is possible to match existing APIs.
-+ If the attribute's value is <code class="literal">"error"</code>, then the
-+ final argument is a <code class="literal">GError *</code> as usual.
-+ </p><p>
-+ Some examples to demonstrate the usage. This introspection XML:
-+ </p><pre class="programlisting">
-+<method name="Increment">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out" />
-+</method>
-+ </pre><p>
-+ Expects the following function declaration:
-+ </p><pre class="programlisting">
-+gboolean
-+my_object_increment (MyObject *obj, gint32 x, gint32 *ret, GError **error);
-+ </pre><p>
-+ </p><p>
-+ This introspection XML:
-+ </p><pre class="programlisting">
-+<method name="IncrementRetval">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out" >
-+ <annotation name="org.freedesktop.DBus.GLib.ReturnVal" value=""/>
-+ </arg>
-+</method>
-+ </pre><p>
-+ Expects the following function declaration:
-+ </p><pre class="programlisting">
-+gint32
-+my_object_increment_retval (MyObject *obj, gint32 x)
-+ </pre><p>
-+ </p><p>
-+ This introspection XML:
-+ </p><pre class="programlisting">
-+<method name="IncrementRetvalError">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out" >
-+ <annotation name="org.freedesktop.DBus.GLib.ReturnVal" value="error"/>
-+ </arg>
-+</method>
-+ </pre><p>
-+ Expects the following function declaration:
-+ </p><pre class="programlisting">
-+gint32
-+my_object_increment_retval_error (MyObject *obj, gint32 x, GError **error)
-+ </pre><p>
-+ </p></dd></dl></div><p>
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="python-client"></a>Python API: Using Remote Objects</h2></div></div></div><p>
-+ The Python bindings provide a simple to use interface for talking over D-BUS.
-+ Where possible much of the inner-workings of D-BUS are hidden behind what looks
-+ like normal Python objects.
-+ </p><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="python-typemappings"></a>D-BUS - Python type mappings</h3></div></div></div><p>
-+ While python itself is a largely untyped language D-BUS provides a simple type system
-+ for talking with other languages which may be strongly typed. Python for the most part
-+ tries automatically map python objects to types on the bus. It is none the less good to
-+ know what the type mappings are so one can better utilize services over the bus.
-+ </p><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="python-basic-typemappings"></a>Basic type mappings</h4></div></div></div><p>
-+ Below is a list of the basic types, along with their associated
-+ mapping to a Python object.
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>D-BUS basic type</th><th>Python wrapper</th><th>Notes</th></tr></thead><tbody><tr><td><code class="literal">BYTE</code></td><td><code class="literal">dbus.Byte</code></td><td> </td></tr><tr><td><code class="literal">BOOLEAN</code></td><td><code class="literal">dbus.Boolean</code></td><td>Any variable assigned a True or False boolean value will automatically be converted into a BOOLEAN over the bus</td></tr><tr><td><code class="literal">INT16</code></td><td><code class="literal">dbus.Int16</code></td><td> </td></tr><tr><td><code class="literal">UINT16</code></td><td><code class="literal">dbus.UInt16</code></td><td> </td></tr><tr><td><code class="literal">INT32</code></td><td><code class="literal">dbus.Int32</code></td><td>This is the default mapping for Python integers</td></tr><tr><td><code class="literal">UINT32</code></td><td><code class="literal">dbus.UInt32</code></td><td> </td></tr><tr><td><code class="literal">INT64</code></td><td><code class="literal">dbus.Int64</code></td><td> </td></tr><tr><td><code class="literal">UINT64</code></td><td><code class="literal">dbus.UInt64</code></td><td> </td></tr><tr><td><code class="literal">DOUBLE</code></td><td><code class="literal">dbus.Double</code></td><td>Any variable assigned a floating point number will automatically be converted into a DOUBLE over the bus</td></tr><tr><td><code class="literal">STRING</code></td><td><code class="literal">dbus.String</code></td><td>Any variable assigned a quoted string will automatically be converted into a STRING over the bus</td></tr><tr><td><code class="literal">OBJECT_PATH</code></td><td><code class="literal">dbus.ObjectPath</code></td><td> </td></tr></tbody></table></div><p>
-+ </p></div><div class="sect3" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="python-container-typemappings"></a>Container type mappings</h4></div></div></div><p>
-+ The D-BUS type system also has a number of "container"
-+ types, such as <code class="literal">DBUS_TYPE_ARRAY</code> and
-+ <code class="literal">DBUS_TYPE_STRUCT</code>. The D-BUS type system
-+ is fully recursive, so one can for example have an array of
-+ array of strings (i.e. type signature
-+ <code class="literal">aas</code>).
-+ </p><p>
-+ D-BUS container types have native corresponding built-in Python types
-+ so it is easy to use them.
-+ </p><div class="informaltable"><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>D-BUS type</th><th>Python type</th><th>Python wrapper</th><th>Notes</th></tr></thead><tbody><tr><td><code class="literal">ARRAY</code></td><td><code class="literal">Python lists</code></td><td><code class="literal">dbus.Array</code></td><td>Python lists, denoted by square brackets [], are converted into arrays and visa versa.
-+ The one restriction is that when sending a Python list each element of the list must be of the same
-+ type. This is because D-BUS arrays can contain only one element type. Use Python tuples for mixed types.
-+
-+ When using the wrapper you may also specify a type or signature of the elements contained in the Array.
-+ This is manditory when passing an empty Array to a method on the bus because Python can not guess at the
-+ contents of an empty array. For example if a method is expecting an Array of int32's and you need to pass
-+ it an empty Array you would do it as such:
-+
-+ <pre class="programlisting">emptyint32array = dbus.Array([], type=dbus.Int32)</pre>
-+
-+ or
-+
-+ <pre class="programlisting">emptyint32array = dbus.Array([], signature="i")</pre>
-+
-+ Note that dbus.Array derives from list so it acts just like a python list.
-+ </td></tr><tr><td><code class="literal">STRUCT</code></td><td><code class="literal">Python tuple</code></td><td><code class="literal">dbus.Struct</code></td><td>Python tuples, denoted by parentheses (,), are converted into structs and visa versa.
-+ Tuples can have mixed types.</td></tr><tr><td><code class="literal">DICTIONARY</code></td><td><code class="literal">Python dictionary</code></td><td><code class="literal">dbus.Dictionary</code></td><td>D-BUS doesn't have an explicit dictionary type. Instead it uses LISTS of DICT_ENTRIES to
-+ represent a dictionary. A DICT_ENTRY is simply a two element struct containing a key/value pair.
-+ Python dictionaries are automatically converted to a LIST of DICT_ENTRIES and visa versa.
-+
-+ Since dictonaries are described as lists of dict_entries we also need the signature in order
-+ to pass empty dictionaries. The wrapper provides a way of specifying this through the key_type/value_type
-+ type parameters or the signature parameters. To send an empty Dictionary where the key is a string
-+ and the value is a string you would do it as such:
-+
-+ <pre class="programlisting">emptystringstringdict = dbus.Dictionary({}, key_type=dbus.String, value_type=dbus.Value)</pre>
-+
-+ or
-+
-+ <pre class="programlisting">emptystringstringdict = dbus.Dictionary({}, signature="ss")</pre>
-+
-+ Note that dbus.Dictionary derives from dict so it acts just like a python dictionary.
-+ </td></tr><tr><td><code class="literal">VARIANT</code></td><td><code class="literal">any type</code></td><td><code class="literal">dbus.Variant</code></td><td>A variant is a container for any type. Python exports its methods to accept only variants
-+ since we are an untyped language and can demarshal into any Python type.
-+
-+ To send a variant you must first wrap it in a<code class="literal">dbus.Variant</code>. If no type or signiture is
-+ given to the variant the marshaler will get the type from the contents.</td></tr></tbody></table></div><p>
-+ </p></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="python-invoking-methods"></a>Invoking Methods</h3></div></div></div><p>Here is a D-BUS program using the Python bindings to get a listing of all names on the session bus.
-+</p><pre class="programlisting">
-+import dbus
-+
-+bus = dbus.SessionBus()
-+proxy_obj = bus.bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-+dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.DBus')
-+
-+print dbus_iface.ListNames()
-+</pre><p>
-+ </p><p>
-+ Notice I get an interface on the proxy object and use that to make the call. While the specifications
-+ state that you do not need to specify an interface if the call is unambiguous (i.e. only one method implements
-+ that name) due to a bug on the bus that drops messages which don't have an interface field you need to specify
-+ interfaces at this time. In any event it is always good practice to specify the interface of the method you
-+ wish to call to avoid any side effects should a method of the same name be implemented on another interface.
-+ </p><p>
-+ You can specify the interface for a single call using the dbus_interface keyword.
-+</p><pre class="programlisting">
-+proxy_obj.ListNames(dbus_interface = 'org.freedesktop.DBus')
-+</pre><p>
-+ </p><p>
-+ This is all fine and good if all you want to do is call methods on the bus and then exit. In order to
-+ do more complex things such as use a GUI or make asynchronous calls you will need a mainloop. You would use
-+ asynchronous calls because in GUI applications it is very bad to block for any long period of time. This cause
-+ the GUI to seem to freeze. Since replies to D-BUS messages can take an indeterminate amount of time using async
-+ calls allows you to return control to the GUI while you wait for the reply. This is exceedingly easy to do in
-+ Python. Here is an example using the GLib/GTK+ mainloop.
-+</p><pre class="programlisting">
-+import gobject
-+import dbus
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+def print_list_names_reply(list):
-+ print str(list)
-+
-+def print_error(e):
-+ print str(e)
-+
-+bus = dbus.SessionBus()
-+proxy_obj = bus.bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-+dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.DBus')
-+
-+dbus_iface.ListNames(reply_handler=print_list_names_reply, error_handler=print_error)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</pre><p>
-+ </p><p>
-+ In the above listing you will notice the reply_handler and error_handler keywords. These tell the method that
-+ it should be called async and to call print_list_names_reply or print_error depending if you get a reply or an error.
-+ The signature for replys depends on the number of arguments being sent back. Error handlers always take one parameter
-+ which is the error object returned.
-+ </p><p>
-+ You will also notice that I check the version of the dbus bindings before importing dbus.glib. In older versions
-+ glib was the only available mainloop. As of version 0.41.0 we split out the glib dependency to allow for other mainloops
-+ to be implemented. Notice also the python binding version does not match up with the D-BUS version. Once we reach 1.0
-+ this should change with Python changes simply tracking the D-BUS changes.
-+ While the glib mainloop is the only mainloop currently implemented, integrating other mainloops should
-+ be very easy to do. There are plans for creating a a generic mainloop to be the default for non gui programs.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="python-listening-for-signals"></a>Listening for Signals</h3></div></div></div><p>
-+ Signals are emitted by objects on the bus to notify listening programs that an event has occurred. There are a couple of ways
-+ to register a signal handler on the bus. One way is to attach to an already created proxy using the connect_to_signal method
-+ which takes a signal name and handler as arguments. Let us look at an example of connecting to the HAL service to receive
-+ signals when devices are added and removed and when devices register a capability. This example assumes you have HAL already running.
-+</p><pre class="programlisting">
-+import gobject
-+import dbus
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+def device_added_callback(udi):
-+ print 'Device with udi %s was added' % (udi)
-+
-+def device_removed_callback(udi):
-+ print 'Device with udi %s was added' % (udi)
-+
-+def device_capability_callback(udi, capability):
-+ print 'Device with udi %s added capability %s' % (udi, capability)
-+
-+bus = dbus.SystemBus()
-+hal_manager_obj = bus.get_object('org.freedesktop.Hal',
-+ '/org/freedesktop/Hal/Manager')
-+hal_manager = dbus.Interface(hal_manager_obj,
-+ 'org.freedesktop.Hal.Manager')
-+
-+hal_manager.connect_to_signal('DeviceAdded', device_added_callback)
-+hal_manager.connect_to_signal('DeviceRemoved', device_removed_callback)
-+hal_manager.connect_to_signal('NewCapability', device_capability_callback)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</pre><p>
-+ </p><p>
-+ The drawback of using this method is that the service that you are connecting to has to be around when you register
-+ your signal handler. While HAL is guaranteed to be around on systems that use it this is not always the case for every
-+ service on the bus. Say our program started up before HAL, we could connect to the signal by adding a signal receiver
-+ directly to the bus.
-+</p><pre class="programlisting">
-+bus.add_signal_receiver(device_added_callback,
-+ 'DeviceAdded',
-+ 'org.freedesktop.Hal.Manager',
-+ 'org.freedesktop.Hal',
-+ '/org/freedesktop/Hal/Manager')
-+
-+bus.add_signal_receiver(device_removed_callback,
-+ 'DeviceRemoved',
-+ 'org.freedesktop.Hal.Manager',
-+ 'org.freedesktop.Hal',
-+ '/org/freedesktop/Hal/Manager')
-+
-+bus.add_signal_receiver(device_capability_callback,
-+ 'DeviceAdded',
-+ 'org.freedesktop.Hal.Manager',
-+ 'org.freedesktop.Hal',
-+ '/org/freedesktop/Hal/Manager')
-+</pre><p>
-+ </p><p>
-+ All this can be done without creating the proxy object if one wanted to but in most cases you would want to have
-+ a reference to the object so once a signal was received operations could be executed on the object.
-+ </p><div class="sidebar"><p class="title"><b>Signal matching on arguments</b></p><p>
-+ Starting with D-Bus 0.36 and the (0, 43, 0) version of the python
-+ bindings you can now add a match on arguments being sent in a signal.
-+ This is useful for instance for only getting NameOwnerChanged
-+ signals for your service. Lets say we create a name on the bus called
-+ 'org.foo.MyName' we could also add a match to just get
-+ NameOwnerChanges for that name as such:
-+</p><pre class="programlisting">
-+bus.add_signal_receiver(myname_changed,
-+ 'NameOwnerChanged',
-+ 'org.freedesktop.DBus',
-+ 'org.freedesktop.DBus',
-+ '/org/freedesktop/DBus',
-+ arg0='org.foo.MyName')
-+</pre><p>
-+
-+ It is as simple as that. To match the second arg you would use arg1=,
-+ the third arg2=, etc.
-+ </p></div><div class="sidebar"><p class="title"><b>Cost of Creating a Proxy Object</b></p><p>
-+ Note that creating proxy objects can have an associated processing cost. When introspection is implemented
-+ a proxy may wait for introspection data before processing any requests. It is generally good practice to
-+ create proxies once and reuse the proxy when calling into the object. Constantly creating the same proxy
-+ over and over again can become a bottleneck for your program.
-+ </p></div><p>
-+ TODO: example of getting information about devices from HAL
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="python-server"></a>Python API: Implementing Objects</h2></div></div></div><p>
-+ Implementing object on the bus is just as easy as invoking methods or listening for signals on the bus.
-+ </p><div class="sidebar"><p class="title"><b>Version Alert</b></p><p>
-+ The Python D-BUS bindings require version 2.4 or greater of Python when creating D-BUS objects.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="python-inheriting-from-dbus-object"></a>Inheriting From dbus.service.Object</h3></div></div></div><p>
-+ In order to export a Python object over the bus one must first get a bus name and then create
-+ a Python object that inherits from dbus.service.Object. The following is the start of an example
-+ HelloWorld object that we want to export over the session bus.
-+</p><pre class="programlisting">
-+import gobject
-+import dbus
-+import dbus.service
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+class HelloWorldObject(dbus.service.Object):
-+ def __init__(self, bus_name, object_path='/org/freedesktop/HelloWorldObject'):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+session_bus = dbus.SessionBus()
-+bus_name = dbus.service.BusName('org.freedesktop.HelloWorld', bus=session_bus)
-+object = HelloWorldObject(bus_name)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</pre><p>
-+ </p><p>
-+ Here we got the session bus, then created a BusName object which requests a name on the bus.
-+ We pass that bus name to the HelloWorldObject object which inherits from dbus.service.Object.
-+ We now have an object on the bus but it is pretty useless.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="python-exporting-methods"></a>Exporting Methods Over The Bus</h3></div></div></div><p>
-+ Let's make this object do something and export a method over the bus.
-+</p><pre class="programlisting">
-+import gobject
-+import dbus
-+import dbus.service
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+class HelloWorldObject(dbus.service.Object):
-+ def __init__(self, bus_name, object_path='/org/freedesktop/HelloWorldObject'):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def hello(self):
-+ return 'Hello from the HelloWorldObject'
-+
-+session_bus = dbus.SessionBus()
-+bus_name = dbus.service.BusName('org.freedesktop.HelloWorld', bus=session_bus)
-+object = HelloWorldObject(bus_name)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</pre><p>
-+ </p><div class="sidebar"><p class="title"><b>Python Decorators</b></p><p>
-+ Notice the @ symbol on the line before the hello method. This is a new directive introduced in
-+ Python 2.4. It is called a decorator and it "decorates" methods. All you have to know is that
-+ it provides metadata that can then be used to alter the behavior of the method being decorated.
-+ In this case we are telling the bindings that the hello method should be exported as a D-BUS method
-+ over the bus.
-+ </p></div><p>
-+ As you can see we exported the hello method as part of the org.freedesktop.HelloWorldIFace interface.
-+ It takes no arguments and returns a string to the calling program. Let's create a proxy and invoke this
-+ method.
-+</p><pre class="programlisting">
-+import dbus
-+
-+bus = dbus.SessionBus()
-+proxy_obj = bus.bus.get_object('org.freedesktop.HelloWorld', '/org/freedesktop/HelloWorldObject')
-+iface = dbus.Interface(proxy_obj, 'org.freedesktop.HelloWorldIFace')
-+
-+print iface.hello()
-+</pre><p>
-+ </p><p>
-+ When invoking methods exported over the bus the bindings automatically know how many parameters
-+ the method exports. You can even make a method that exports an arbitrary number of parameters.
-+ Also, whatever you return will automatically be transfered as a reply over the bus. Some examples.
-+</p><pre class="programlisting">
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def one_arg(self, first_arg):
-+ return 'I got arg %s' % first_arg
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def two_args(self, first_arg, second_arg):
-+ return ('I got 2 args', first_arg, second_arg)
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def return_list(self):
-+ return [1, 2, 3, 4, 5, 6]
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def return_dict(self):
-+ return {one: '1ne', two: '2wo', three: '3ree'}
-+</pre><p>
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="python-emitting-signals"></a>Emitting Signals</h3></div></div></div><p>
-+ Setting up signals to emit is just as easy as exporting methods. It uses the same syntax as methods.
-+</p><pre class="programlisting">
-+import gobject
-+import dbus
-+import dbus.service
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+class HelloWorldObject(dbus.service.Object):
-+ def __init__(self, bus_name, object_path='/org/freedesktop/HelloWorldObject'):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def hello(self):
-+ return 'Hello from the HelloWorldObject'
-+
-+ @dbus.service.signal('org.freedesktop.HelloWorldIFace')
-+ def hello_signal(self, message):
-+ pass
-+
-+session_bus = dbus.SessionBus()
-+bus_name = dbus.service.BusName('org.freedesktop.HelloWorld', bus=session_bus)
-+object = HelloWorldObject(bus_name)
-+
-+object.hello_signal('I sent a hello signal')
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</pre><p>
-+ </p><p>
-+ Adding a @dbus.service.signal decorator to a method turns it into a signal emitter. You can put code
-+ in this method to do things like keep track of how many times you call the emitter or to print out debug
-+ messages but for the most part a pass noop will do. Whenever you call the emitter a signal will be emitted
-+ with the parameters you passed in as arguments. In the above example we send the message 'I sent a hello signal'
-+ with the signal.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="python-inheriting-and-overriding"></a>Inheriting from HelloWorldObject</h3></div></div></div><p>
-+ One of the cool things you can do in Python is inherit from another D-BUS object. We use this trick in
-+ the bindings to provide a default implementation for the org.freedesktop.DBus.Introspectable interface.
-+ Let's inherit from the HelloWorldObject example above and overide the hello method to say goodbye.
-+</p><pre class="programlisting">
-+class HelloWorldGoodbyeObject(HelloWorldObject):
-+ def __init__(self, bus_name, object_path='/org/freedesktop/HelloWorldGoodbyeObject'):
-+ HelloWorldObject.__init__(self, bus_name, object_path)
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldGoodbyeIFace')
-+ def hello(self):
-+ return 'Goodbye'
-+
-+goodbye_object = HelloWorldGoodbyeObject(bus_name)
-+</pre><p>
-+ </p><p>
-+ Let's now call both methods with a little help from interfaces.
-+</p><pre class="programlisting">
-+import dbus
-+
-+bus = dbus.SessionBus()
-+proxy_obj = bus.bus.get_object('org.freedesktop.HelloWorld', '/org/freedesktop/HelloWorldGoodbyeObject')
-+
-+print proxy_obj.hello(dbus_interface='org.freedesktop.HelloWorldIFace')
-+print proxy_obj.hello(dbus_interface='org.freedesktop.HelloWorldGoodbyeIFace')
-+</pre><p>
-+ </p><p>
-+ This should print out 'Hello from the HelloWorldObject' followed by a 'Goodbye'.
-+ </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="python-conclusion"></a>Conclusion</h3></div></div></div><p>
-+ As you can see, using D-BUS from Python is an extremely easy proposition. Hopefully
-+ the tutorial has been helpful in getting you started. If you need anymore help please
-+ feel free to post on the <a href="http://lists.freedesktop.org/mailman/listinfo/dbus/" target="_top">mailing list</a>.
-+ The Python bindings are still in a state of flux and there may be API changes in the future.
-+ This tutorial will be updated if such changes occur.
-+ </p></div></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="qt-client"></a>Qt API: Using Remote Objects</h2></div></div></div><p>
-+
-+ The Qt bindings are not yet documented.
-+
-+ </p></div><div class="sect1" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="qt-server"></a>Qt API: Implementing Objects</h2></div></div></div><p>
-+ The Qt bindings are not yet documented.
-+ </p></div></div></body></html>
-diff -Naur dbus-0.61.orig/doc/dbus-tutorial.xml dbus-0.61/doc/dbus-tutorial.xml
---- dbus-0.61.orig/doc/dbus-tutorial.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dbus-tutorial.xml 2005-12-19 19:11:05.000000000 +0100
-@@ -0,0 +1,1961 @@
-+<?xml version="1.0" standalone="no"?>
-+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"
-+[
-+]>
-+
-+<article id="index">
-+ <articleinfo>
-+ <title>D-BUS Tutorial</title>
-+ <releaseinfo>Version 0.4.1</releaseinfo>
-+ <date>15 July 2005</date>
-+ <authorgroup>
-+ <author>
-+ <firstname>Havoc</firstname>
-+ <surname>Pennington</surname>
-+ <affiliation>
-+ <orgname>Red Hat, Inc.</orgname>
-+ <address><email>hp at pobox.com</email></address>
-+ </affiliation>
-+ </author>
-+ <author>
-+ <firstname>David</firstname>
-+ <surname>Wheeler</surname>
-+ </author>
-+ <author>
-+ <firstname>John</firstname>
-+ <surname>Palmieri</surname>
-+ <affiliation>
-+ <orgname>Red Hat, Inc.</orgname>
-+ <address><email>johnp at redhat.com</email></address>
-+ </affiliation>
-+ </author>
-+ <author>
-+ <firstname>Colin</firstname>
-+ <surname>Walters</surname>
-+ <affiliation>
-+ <orgname>Red Hat, Inc.</orgname>
-+ <address><email>walters at redhat.com</email></address>
-+ </affiliation>
-+ </author>
-+ </authorgroup>
-+ </articleinfo>
-+
-+ <sect1 id="whatis">
-+ <title>What is D-BUS?</title>
-+ <para>
-+ D-BUS is a system for <firstterm>interprocess communication</firstterm>
-+ (IPC). Architecturally, it has several layers:
-+
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ A library, <firstterm>libdbus</firstterm>, that allows two
-+ applications to connect to each other and exchange messages.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ A <firstterm>message bus daemon</firstterm> executable, built on
-+ libdbus, that multiple applications can connect to. The daemon can
-+ route messages from one application to zero or more other
-+ applications.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ <firstterm>Wrapper libraries</firstterm> based on particular
-+ application frameworks. For example, libdbus-glib and
-+ libdbus-qt. There are also bindings to languages such as
-+ Python. These wrapper libraries are the API most people should use,
-+ as they simplify the details of D-BUS programming. libdbus is
-+ intended to be a low-level backend for the higher level bindings.
-+ Much of the libdbus API is only useful for binding implementation.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+
-+ <para>
-+ If you just want to use D-BUS and don't care how it works, jump directly
-+ to <xref linkend="concepts"/>.
-+ Otherwise, read on.
-+ </para>
-+
-+ <para>
-+ libdbus only supports one-to-one connections, just like a raw network
-+ socket. However, rather than sending byte streams over the connection, you
-+ send <firstterm>messages</firstterm>. Messages have a header identifying
-+ the kind of message, and a body containing a data payload. libdbus also
-+ abstracts the exact transport used (sockets vs. whatever else), and
-+ handles details such as authentication.
-+ </para>
-+
-+ <para>
-+ The message bus daemon forms the hub of a wheel. Each spoke of the wheel
-+ is a one-to-one connection to an application using libdbus. An
-+ application sends a message to the bus daemon over its spoke, and the bus
-+ daemon forwards the message to other connected applications as
-+ appropriate. Think of the daemon as a router.
-+ </para>
-+
-+ <para>
-+ The bus daemon has multiple instances on a typical computer. The
-+ first instance is a machine-global singleton, that is, a system daemon
-+ similar to sendmail or Apache. This instance has heavy security
-+ restrictions on what messages it will accept, and is used for systemwide
-+ communication. The other instances are created one per user login session.
-+ These instances allow applications in the user's session to communicate
-+ with one another.
-+ </para>
-+
-+ <para>
-+ The systemwide and per-user daemons are separate. Normal within-session
-+ IPC does not involve the systemwide message bus process and vice versa.
-+ </para>
-+
-+ <sect2 id="uses">
-+ <title>D-BUS applications</title>
-+ <para>
-+ There are many, many technologies in the world that have "Inter-process
-+ communication" or "networking" in their stated purpose: <ulink
-+ url="http://www.omg.org">CORBA</ulink>, <ulink
-+ url="http://www.opengroup.org/dce/">DCE</ulink>, <ulink
-+ url="http://www.microsoft.com/com/">DCOM</ulink>, <ulink
-+ url="http://developer.kde.org/documentation/library/kdeqt/dcop.html">DCOP</ulink>, <ulink
-+ url="http://www.xmlrpc.com">XML-RPC</ulink>, <ulink
-+ url="http://www.w3.org/TR/SOAP/">SOAP</ulink>, <ulink
-+ url="http://www.mbus.org/">MBUS</ulink>, <ulink
-+ url="http://www.zeroc.com/ice.html">Internet Communications Engine (ICE)</ulink>,
-+ and probably hundreds more.
-+ Each of these is tailored for particular kinds of application.
-+ D-BUS is designed for two specific cases:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Communication between desktop applications in the same desktop
-+ session; to allow integration of the desktop session as a whole,
-+ and address issues of process lifecycle (when do desktop components
-+ start and stop running).
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Communication between the desktop session and the operating system,
-+ where the operating system would typically include the kernel
-+ and any system daemons or processes.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ For the within-desktop-session use case, the GNOME and KDE desktops
-+ have significant previous experience with different IPC solutions
-+ such as CORBA and DCOP. D-BUS is built on that experience and
-+ carefully tailored to meet the needs of these desktop projects
-+ in particular. D-BUS may or may not be appropriate for other
-+ applications; the FAQ has some comparisons to other IPC systems.
-+ </para>
-+ <para>
-+ The problem solved by the systemwide or communication-with-the-OS case
-+ is explained well by the following text from the Linux Hotplug project:
-+ <blockquote>
-+ <para>
-+ A gap in current Linux support is that policies with any sort of
-+ dynamic "interact with user" component aren't currently
-+ supported. For example, that's often needed the first time a network
-+ adapter or printer is connected, and to determine appropriate places
-+ to mount disk drives. It would seem that such actions could be
-+ supported for any case where a responsible human can be identified:
-+ single user workstations, or any system which is remotely
-+ administered.
-+ </para>
-+
-+ <para>
-+ This is a classic "remote sysadmin" problem, where in this case
-+ hotplugging needs to deliver an event from one security domain
-+ (operating system kernel, in this case) to another (desktop for
-+ logged-in user, or remote sysadmin). Any effective response must go
-+ the other way: the remote domain taking some action that lets the
-+ kernel expose the desired device capabilities. (The action can often
-+ be taken asynchronously, for example letting new hardware be idle
-+ until a meeting finishes.) At this writing, Linux doesn't have
-+ widely adopted solutions to such problems. However, the new D-Bus
-+ work may begin to solve that problem.
-+ </para>
-+ </blockquote>
-+ </para>
-+ <para>
-+ D-BUS may happen to be useful for purposes other than the one it was
-+ designed for. Its general properties that distinguish it from
-+ other forms of IPC are:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Binary protocol designed to be used asynchronously
-+ (similar in spirit to the X Window System protocol).
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Stateful, reliable connections held open over time.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The message bus is a daemon, not a "swarm" or
-+ distributed architecture.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Many implementation and deployment issues are specified rather
-+ than left ambiguous.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Semantics are similar to the existing DCOP system, allowing
-+ KDE to adopt it more easily.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Security features to support the systemwide mode of the
-+ message bus.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </sect2>
-+ </sect1>
-+ <sect1 id="concepts">
-+ <title>Concepts</title>
-+ <para>
-+ Some basic concepts apply no matter what application framework you're
-+ using to write a D-BUS application. The exact code you write will be
-+ different for GLib vs. Qt vs. Python applications, however.
-+ </para>
-+
-+ <para>
-+ Here is a diagram (<ulink url="diagram.png">png</ulink> <ulink
-+ url="diagram.svg">svg</ulink>) that may help you visualize the concepts
-+ that follow.
-+ </para>
-+
-+ <sect2 id="objects">
-+ <title>Objects and Object Paths</title>
-+ <para>
-+ Each application using D-BUS contains <firstterm>objects</firstterm>,
-+ which generally map to GObject, QObject, C++ objects, or Python objects
-+ (but need not). An object is an <emphasis>instance</emphasis> rather
-+ than a type. When messages are received over a D-BUS connection, they
-+ are sent to a specific object, not to the application as a whole.
-+ </para>
-+ <para>
-+ To allow messages to specify their destination object, there has to be a
-+ way to refer to an object. In your favorite programming language, this
-+ is normally called a <firstterm>pointer</firstterm> or
-+ <firstterm>reference</firstterm>. However, these references are
-+ implemented as memory addresses relative to the address space of your
-+ application, and thus can't be passed from one application to another.
-+ </para>
-+ <para>
-+ To solve this, D-BUS introduces a name for each object. The name
-+ looks like a filesystem path, for example an object could be
-+ named <literal>/org/kde/kspread/sheets/3/cells/4/5</literal>.
-+ Human-readable paths are nice, but you are free to create an
-+ object named <literal>/com/mycompany/c5yo817y0c1y1c5b</literal>
-+ if it makes sense for your application.
-+ </para>
-+ <para>
-+ Namespacing object paths is smart, by starting them with the components
-+ of a domain name you own (e.g. <literal>/org/kde</literal>). This
-+ keeps different code modules in the same process from stepping
-+ on one another's toes.
-+ </para>
-+ </sect2>
-+
-+ <sect2 id="interfaces">
-+ <title>Interfaces</title>
-+ <para>
-+ Each object supports one or more <firstterm>interfaces</firstterm>.
-+ Think of an interface as a named group of methods and signals,
-+ just as it is in GLib or Qt or Java. Interfaces define the
-+ <emphasis>type</emphasis> of an object instance.
-+ </para>
-+ </sect2>
-+
-+ <sect2 id="messages">
-+ <title>Message Types</title>
-+ <para>
-+ Messages are not all the same; in particular, D-BUS has
-+ 4 built-in message types:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ Method call messages ask to invoke a method
-+ on an object.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Method return messages return the results
-+ of invoking a method.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Error messages return an exception caused by
-+ invoking a method.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Signal messages are notifications that a given signal
-+ has been emitted (that an event has occurred).
-+ You could also think of these as "event" messages.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ A method call maps very simply to messages, then: you send a method call
-+ message, and receive either a method return message or an error message
-+ in reply.
-+ </para>
-+ </sect2>
-+
-+ <sect2 id="bus-names">
-+ <title>Bus Names</title>
-+
-+ <para>
-+ Object paths, interfaces, and messages exist on the level of
-+ libdbus and the D-BUS protocol; they are used even in the
-+ 1-to-1 case with no message bus involved.
-+ </para>
-+
-+ <para>
-+ Bus names, on the other hand, are a property of the message bus daemon.
-+ The bus maintains a mapping from names to message bus connections.
-+ These names are used to specify the origin and destination
-+ of messages passing through the message bus. When a name is mapped
-+ to a particular application's connection, that application is said to
-+ <firstterm>own</firstterm> that name.
-+ </para>
-+
-+ <para>
-+ On connecting to the bus daemon, each application immediately owns a
-+ special name called the <firstterm>unique connection name</firstterm>.
-+ A unique name begins with a ':' (colon) character; no other names are
-+ allowed to begin with that character. Unique names are special because
-+ they are created dynamically, and are never re-used during the lifetime
-+ of the same bus daemon. You know that a given unique name will have the
-+ same owner at all times. An example of a unique name might be
-+ <literal>:34-907</literal>. The numbers after the colon have
-+ no meaning other than their uniqueness.
-+ </para>
-+
-+ <para>
-+ Applications may ask to own additional <firstterm>well-known
-+ names</firstterm>. For example, you could write a specification to
-+ define a name called <literal>com.mycompany.TextEditor</literal>.
-+ Your definition could specify that to own this name, an application
-+ should have an object at the path
-+ <literal>/com/mycompany/TextFileManager</literal> supporting the
-+ interface <literal>org.freedesktop.FileHandler</literal>.
-+ </para>
-+
-+ <para>
-+ Applications could then send messages to this bus name,
-+ object, and interface to execute method calls.
-+ </para>
-+
-+ <para>
-+ You could think of the unique names as IP addresses, and the
-+ well-known names as domain names. So
-+ <literal>com.mycompany.TextEditor</literal> might map to something like
-+ <literal>:34-907</literal> just as <literal>mycompany.com</literal> maps
-+ to something like <literal>192.168.0.5</literal>.
-+ </para>
-+
-+ <para>
-+ Names have a second important use, other than routing messages. They
-+ are used to track lifecycle. When an application exits (or crashes), its
-+ connection to the message bus will be closed by the operating system
-+ kernel. The message bus then sends out notification messages telling
-+ remaining applications that the application's names have lost their
-+ owner. By tracking these notifications, your application can reliably
-+ monitor the lifetime of other applications.
-+ </para>
-+
-+ </sect2>
-+
-+ <sect2 id="addresses">
-+ <title>Addresses</title>
-+
-+ <para>
-+ Applications using D-BUS are either servers or clients. A server
-+ listens for incoming connections; a client connects to a server. Once
-+ the connection is established, it is a symmetric flow of messages; the
-+ client-server distinction only matters when setting up the
-+ connection.
-+ </para>
-+
-+ <para>
-+ A D-BUS <firstterm>address</firstterm> specifies where a server will
-+ listen, and where a client will connect. For example, the address
-+ <literal>unix:path=/tmp/abcdef</literal> specifies that the server will
-+ listen on a UNIX domain socket at the path
-+ <literal>/tmp/abcdef</literal> and the client will connect to that
-+ socket. An address can also specify TCP/IP sockets, or any other
-+ transport defined in future iterations of the D-BUS specification.
-+ </para>
-+
-+ <para>
-+ When using D-BUS with a message bus, the bus daemon is a server
-+ and all other applications are clients of the bus daemon.
-+ libdbus automatically discovers the address of the per-session bus
-+ daemon by reading an environment variable. It discovers the
-+ systemwide bus daemon by checking a well-known UNIX domain socket path
-+ (though you can override this address with an environment variable).
-+ </para>
-+
-+ <para>
-+ If you're using D-BUS without a bus daemon, it's up to you to
-+ define which application will be the server and which will be
-+ the client, and specify a mechanism for them to agree on
-+ the server's address.
-+ </para>
-+
-+ </sect2>
-+
-+ <sect2 id="bigpicture">
-+ <title>Big Conceptual Picture</title>
-+
-+ <para>
-+ Pulling all these concepts together, to specify a particular
-+ method call on a particular object instance, a number of
-+ nested components have to be named:
-+ <programlisting>
-+ Address -> [Bus Name] -> Path -> Interface -> Method
-+ </programlisting>
-+ The bus name is in brackets to indicate that it's optional -- you only
-+ provide a name to route the method call to the right application
-+ when using the bus daemon. If you have a direct connection to another
-+ application, bus names aren't used; there's no bus daemon.
-+ </para>
-+
-+ <para>
-+ The interface is also optional, primarily for historical
-+ reasons; DCOP does not require specifying the interface,
-+ instead simply forbidding duplicate method names
-+ on the same object instance. D-BUS will thus let you
-+ omit the interface, but if your method name is ambiguous
-+ it is undefined which method will be invoked.
-+ </para>
-+
-+ </sect2>
-+
-+ </sect1>
-+
-+ <sect1 id="glib-client">
-+ <title>GLib API: Using Remote Objects</title>
-+
-+ <para>
-+ The GLib binding is defined in the header file
-+ <literal><dbus/dbus-glib.h></literal>.
-+ </para>
-+
-+ <sect2 id="glib-typemappings">
-+ <title>D-BUS - GLib type mappings</title>
-+ <para>
-+ The heart of the GLib bindings for D-BUS is the mapping it
-+ provides between D-BUS "type signatures" and GLib types
-+ (<literal>GType</literal>). The D-BUS type system is composed of
-+ a number of "basic" types, along with several "container" types.
-+ </para>
-+ <sect3 id="glib-basic-typemappings">
-+ <title>Basic type mappings</title>
-+ <para>
-+ Below is a list of the basic types, along with their associated
-+ mapping to a <literal>GType</literal>.
-+ <informaltable>
-+ <tgroup cols="4">
-+ <thead>
-+ <row>
-+ <entry>D-BUS basic type</entry>
-+ <entry>GType</entry>
-+ <entry>Free function</entry>
-+ <entry>Notes</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>BYTE</literal></entry>
-+ <entry><literal>G_TYPE_UCHAR</literal></entry>
-+ <entry></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>BOOLEAN</literal></entry>
-+ <entry><literal>G_TYPE_BOOLEAN</literal></entry>
-+ <entry></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>INT16</literal></entry>
-+ <entry><literal>G_TYPE_INT</literal></entry>
-+ <entry></entry>
-+ <entry>Will be changed to a <literal>G_TYPE_INT16</literal> once GLib has it</entry>
-+ </row><row>
-+ <entry><literal>UINT16</literal></entry>
-+ <entry><literal>G_TYPE_UINT</literal></entry>
-+ <entry></entry>
-+ <entry>Will be changed to a <literal>G_TYPE_UINT16</literal> once GLib has it</entry>
-+ </row><row>
-+ <entry><literal>INT32</literal></entry>
-+ <entry><literal>G_TYPE_INT</literal></entry>
-+ <entry></entry>
-+ <entry>Will be changed to a <literal>G_TYPE_INT32</literal> once GLib has it</entry>
-+ </row><row>
-+ <entry><literal>UINT32</literal></entry>
-+ <entry><literal>G_TYPE_UINT</literal></entry>
-+ <entry></entry>
-+ <entry>Will be changed to a <literal>G_TYPE_UINT32</literal> once GLib has it</entry>
-+ </row><row>
-+ <entry><literal>INT64</literal></entry>
-+ <entry><literal>G_TYPE_GINT64</literal></entry>
-+ <entry></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>UINT64</literal></entry>
-+ <entry><literal>G_TYPE_GUINT64</literal></entry>
-+ <entry></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>DOUBLE</literal></entry>
-+ <entry><literal>G_TYPE_DOUBLE</literal></entry>
-+ <entry></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>STRING</literal></entry>
-+ <entry><literal>G_TYPE_STRING</literal></entry>
-+ <entry><literal>g_free</literal></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>OBJECT_PATH</literal></entry>
-+ <entry><literal>DBUS_TYPE_G_PROXY</literal></entry>
-+ <entry><literal>g_object_unref</literal></entry>
-+ <entry>The returned proxy does not have an interface set; use <literal>dbus_g_proxy_set_interface</literal> to invoke methods</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ As you can see, the basic mapping is fairly straightforward.
-+ </para>
-+ </sect3>
-+ <sect3 id="glib-container-typemappings">
-+ <title>Container type mappings</title>
-+ <para>
-+ The D-BUS type system also has a number of "container"
-+ types, such as <literal>DBUS_TYPE_ARRAY</literal> and
-+ <literal>DBUS_TYPE_STRUCT</literal>. The D-BUS type system
-+ is fully recursive, so one can for example have an array of
-+ array of strings (i.e. type signature
-+ <literal>aas</literal>).
-+ </para>
-+ <para>
-+ However, not all of these types are in common use; for
-+ example, at the time of this writing the author knows of no
-+ one using <literal>DBUS_TYPE_STRUCT</literal>, or a
-+ <literal>DBUS_TYPE_ARRAY</literal> containing any non-basic
-+ type. The approach the GLib bindings take is pragmatic; try
-+ to map the most common types in the most obvious way, and
-+ let using less common and more complex types be less
-+ "natural".
-+ </para>
-+ <para>
-+ First, D-BUS type signatures which have an "obvious"
-+ corresponding built-in GLib type are mapped using that type:
-+ <informaltable>
-+ <tgroup cols="6">
-+ <thead>
-+ <row>
-+ <entry>D-BUS type signature</entry>
-+ <entry>Description</entry>
-+ <entry>GType</entry>
-+ <entry>C typedef</entry>
-+ <entry>Free function</entry>
-+ <entry>Notes</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>as</literal></entry>
-+ <entry>Array of strings</entry>
-+ <entry><literal>G_TYPE_STRV</literal></entry>
-+ <entry><literal>char **</literal></entry>
-+ <entry><literal>g_strfreev</literal></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>v</literal></entry>
-+ <entry>Generic value container</entry>
-+ <entry><literal>G_TYPE_VALUE</literal></entry>
-+ <entry><literal>GValue *</literal></entry>
-+ <entry><literal>g_value_unset</literal></entry>
-+ <entry>The calling conventions for values expect that method callers have allocated return values; see below.</entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ The next most common recursive type signatures are arrays of
-+ basic values. The most obvious mapping for arrays of basic
-+ types is a <literal>GArray</literal>. Now, GLib does not
-+ provide a builtin <literal>GType</literal> for
-+ <literal>GArray</literal>. However, we actually need more than
-+ that - we need a "parameterized" type which includes the
-+ contained type. Why we need this we will see below.
-+ </para>
-+ <para>
-+ The approach taken is to create these types in the D-BUS GLib
-+ bindings; however, there is nothing D-BUS specific about them.
-+ In the future, we hope to include such "fundamental" types in GLib
-+ itself.
-+ <informaltable>
-+ <tgroup cols="6">
-+ <thead>
-+ <row>
-+ <entry>D-BUS type signature</entry>
-+ <entry>Description</entry>
-+ <entry>GType</entry>
-+ <entry>C typedef</entry>
-+ <entry>Free function</entry>
-+ <entry>Notes</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>ay</literal></entry>
-+ <entry>Array of bytes</entry>
-+ <entry><literal>DBUS_TYPE_G_BYTE_ARRAY</literal></entry>
-+ <entry><literal>GArray *</literal></entry>
-+ <entry>g_array_free</entry>
-+ <entry></entry>
-+ </row>
-+ <row>
-+ <entry><literal>au</literal></entry>
-+ <entry>Array of uint</entry>
-+ <entry><literal>DBUS_TYPE_G_UINT_ARRAY</literal></entry>
-+ <entry><literal>GArray *</literal></entry>
-+ <entry>g_array_free</entry>
-+ <entry></entry>
-+ </row>
-+ <row>
-+ <entry><literal>ai</literal></entry>
-+ <entry>Array of int</entry>
-+ <entry><literal>DBUS_TYPE_G_INT_ARRAY</literal></entry>
-+ <entry><literal>GArray *</literal></entry>
-+ <entry>g_array_free</entry>
-+ <entry></entry>
-+ </row>
-+ <row>
-+ <entry><literal>ax</literal></entry>
-+ <entry>Array of int64</entry>
-+ <entry><literal>DBUS_TYPE_G_INT64_ARRAY</literal></entry>
-+ <entry><literal>GArray *</literal></entry>
-+ <entry>g_array_free</entry>
-+ <entry></entry>
-+ </row>
-+ <row>
-+ <entry><literal>at</literal></entry>
-+ <entry>Array of uint64</entry>
-+ <entry><literal>DBUS_TYPE_G_UINT64_ARRAY</literal></entry>
-+ <entry><literal>GArray *</literal></entry>
-+ <entry>g_array_free</entry>
-+ <entry></entry>
-+ </row>
-+ <row>
-+ <entry><literal>ad</literal></entry>
-+ <entry>Array of double</entry>
-+ <entry><literal>DBUS_TYPE_G_DOUBLE_ARRAY</literal></entry>
-+ <entry><literal>GArray *</literal></entry>
-+ <entry>g_array_free</entry>
-+ <entry></entry>
-+ </row>
-+ <row>
-+ <entry><literal>ab</literal></entry>
-+ <entry>Array of boolean</entry>
-+ <entry><literal>DBUS_TYPE_G_BOOLEAN_ARRAY</literal></entry>
-+ <entry><literal>GArray *</literal></entry>
-+ <entry>g_array_free</entry>
-+ <entry></entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ <para>
-+ D-BUS also includes a special type DBUS_TYPE_DICT_ENTRY which
-+ is only valid in arrays. It's intended to be mapped to a "dictionary"
-+ type by bindings. The obvious GLib mapping here is GHashTable. Again,
-+ however, there is no builtin <literal>GType</literal> for a GHashTable.
-+ Moreover, just like for arrays, we need a parameterized type so that
-+ the bindings can communiate which types are contained in the hash table.
-+ </para>
-+ <para>
-+ At present, only strings are supported. Work is in progress to
-+ include more types.
-+ <informaltable>
-+ <tgroup cols="6">
-+ <thead>
-+ <row>
-+ <entry>D-BUS type signature</entry>
-+ <entry>Description</entry>
-+ <entry>GType</entry>
-+ <entry>C typedef</entry>
-+ <entry>Free function</entry>
-+ <entry>Notes</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>a{ss}</literal></entry>
-+ <entry>Dictionary mapping strings to strings</entry>
-+ <entry><literal>DBUS_TYPE_G_STRING_STRING_HASHTABLE</literal></entry>
-+ <entry><literal>GHashTable *</literal></entry>
-+ <entry>g_hash_table_destroy</entry>
-+ <entry></entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ </sect3>
-+ <sect3 id="glib-generic-typemappings">
-+ <title>Arbitrarily recursive type mappings</title>
-+ <para>
-+ Finally, it is possible users will want to write or invoke D-BUS
-+ methods which have arbitrarily complex type signatures not
-+ directly supported by these bindings. For this case, we have a
-+ <literal>DBusGValue</literal> which acts as a kind of special
-+ variant value which may be iterated over manually. The
-+ <literal>GType</literal> associated is
-+ <literal>DBUS_TYPE_G_VALUE</literal>.
-+ </para>
-+ <para>
-+ TODO insert usage of <literal>DBUS_TYPE_G_VALUE</literal> here.
-+ </para>
-+ </sect3>
-+ </sect2>
-+ <sect2 id="sample-program-1">
-+ <title>A sample program</title>
-+ <para>Here is a D-BUS program using the GLib bindings.
-+<programlisting>
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *connection;
-+ GError *error;
-+ DBusGProxy *proxy;
-+ char **name_list;
-+ char **name_list_ptr;
-+
-+ g_type_init ();
-+
-+ error = NULL;
-+ connection = dbus_g_bus_get (DBUS_BUS_SESSION,
-+ &error);
-+ if (connection == NULL)
-+ {
-+ g_printerr ("Failed to open connection to bus: %s\n",
-+ error->message);
-+ g_error_free (error);
-+ exit (1);
-+ }
-+
-+ /* Create a proxy object for the "bus driver" (name "org.freedesktop.DBus") */
-+
-+ proxy = dbus_g_proxy_new_for_name (connection,
-+ DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS);
-+
-+ /* Call ListNames method, wait for reply */
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "ListNames", &error, G_TYPE_INVALID,
-+ G_TYPE_STRV, &name_list, G_TYPE_INVALID))
-+ {
-+ /* Just do demonstrate remote exceptions versus regular GError */
-+ if (error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
-+ g_printerr ("Caught remote method exception %s: %s",
-+ dbus_g_error_get_name (error),
-+ error->message);
-+ else
-+ g_printerr ("Error: %s\n", error->message);
-+ g_error_free (error);
-+ exit (1);
-+ }
-+
-+ /* Print the results */
-+
-+ g_print ("Names on the message bus:\n");
-+
-+ for (name_list_ptr = name_list; *name_list_ptr; name_list_ptr++)
-+ {
-+ g_print (" %s\n", *name_list_ptr);
-+ }
-+ g_strfreev (name_list);
-+
-+ g_object_unref (proxy);
-+
-+ return 0;
-+}
-+</programlisting>
-+ </para>
-+ </sect2>
-+ <sect2 id="glib-program-setup">
-+ <title>Program initalization</title>
-+ <para>
-+ A connection to the bus is acquired using
-+ <literal>dbus_g_bus_get</literal>. Next, a proxy
-+ is created for the object "/org/freedesktop/DBus" with
-+ interface <literal>org.freedesktop.DBus</literal>
-+ on the service <literal>org.freedesktop.DBus</literal>.
-+ This is a proxy for the message bus itself.
-+ </para>
-+ </sect2>
-+ <sect2 id="glib-method-invocation">
-+ <title>Understanding method invocation</title>
-+ <para>
-+ You have a number of choices for method invocation. First, as
-+ used above, <literal>dbus_g_proxy_call</literal> sends a
-+ method call to the remote object, and blocks until a reply is
-+ recieved. The outgoing arguments are specified in the varargs
-+ array, terminated with <literal>G_TYPE_INVALID</literal>.
-+ Next, pointers to return values are specified, followed again
-+ by <literal>G_TYPE_INVALID</literal>.
-+ </para>
-+ <para>
-+ To invoke a method asynchronously, use
-+ <literal>dbus_g_proxy_begin_call</literal>. This returns a
-+ <literal>DBusGPendingCall</literal> object; you may then set a
-+ notification function using
-+ <literal>dbus_g_pending_call_set_notify</literal>.
-+ </para>
-+ </sect2>
-+ <sect2 id="glib-signal-connection">
-+ <title>Connecting to object signals</title>
-+ <para>
-+ You may connect to signals using
-+ <literal>dbus_g_proxy_add_signal</literal> and
-+ <literal>dbus_g_proxy_connect_signal</literal>. You must
-+ invoke <literal>dbus_g_proxy_add_signal</literal> to specify
-+ the signature of your signal handlers; you may then invoke
-+ <literal>dbus_g_proxy_connect_signal</literal> multiple times.
-+ </para>
-+ <para>
-+ Note that it will often be the case that there is no builtin
-+ marshaller for the type signature of a remote signal. In that
-+ case, you must generate a marshaller yourself by using
-+ <application>glib-genmarshal</application>, and then register
-+ it using <literal>dbus_g_object_register_marshaller</literal>.
-+ </para>
-+ </sect2>
-+ <sect2 id="glib-error-handling">
-+ <title>Error handling and remote exceptions</title>
-+ <para>
-+ All of the GLib binding methods such as
-+ <literal>dbus_g_proxy_end_call</literal> return a
-+ <literal>GError</literal>. This <literal>GError</literal> can
-+ represent two different things:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ An internal D-BUS error, such as an out-of-memory
-+ condition, an I/O error, or a network timeout. Errors
-+ generated by the D-BUS library itself have the domain
-+ <literal>DBUS_GERROR</literal>, and a corresponding code
-+ such as <literal>DBUS_GERROR_NO_MEMORY</literal>. It will
-+ not be typical for applications to handle these errors
-+ specifically.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ A remote D-BUS exception, thrown by the peer, bus, or
-+ service. D-BUS remote exceptions have both a textual
-+ "name" and a "message". The GLib bindings store this
-+ information in the <literal>GError</literal>, but some
-+ special rules apply.
-+ </para>
-+ <para>
-+ The set error will have the domain
-+ <literal>DBUS_GERROR</literal> as above, and will also
-+ have the code
-+ <literal>DBUS_GERROR_REMOTE_EXCEPTION</literal>. In order
-+ to access the remote exception name, you must use a
-+ special accessor, such as
-+ <literal>dbus_g_error_has_name</literal> or
-+ <literal>dbus_g_error_get_name</literal>. The remote
-+ exception detailed message is accessible via the regular
-+ GError <literal>message</literal> member.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </sect2>
-+ <sect2 id="glib-more-examples">
-+ <title>More examples of method invocation</title>
-+ <sect3 id="glib-sending-stuff">
-+ <title>Sending an integer and string, receiving an array of bytes</title>
-+ <para>
-+<programlisting>
-+ GArray *arr;
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "Foobar", &error,
-+ G_TYPE_INT, 42, G_TYPE_STRING, "hello",
-+ G_TYPE_INVALID,
-+ DBUS_TYPE_G_UCHAR_ARRAY, &arr, G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ g_assert (arr != NULL);
-+ printf ("got back %u values", arr->len);
-+</programlisting>
-+ </para>
-+ </sect3>
-+ <sect3 id="glib-sending-hash">
-+ <title>Sending a GHashTable</title>
-+ <para>
-+<programlisting>
-+ GHashTable *hash = g_hash_table_new (g_str_hash, g_str_equal);
-+ guint32 ret;
-+
-+ g_hash_table_insert (hash, "foo", "bar");
-+ g_hash_table_insert (hash, "baz", "whee");
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "HashSize", &error,
-+ DBUS_TYPE_G_STRING_STRING_HASH, hash, G_TYPE_INVALID,
-+ G_TYPE_UINT, &ret, G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ g_assert (ret == 2);
-+ g_hash_table_destroy (hash);
-+</programlisting>
-+ </para>
-+ </sect3>
-+ <sect3 id="glib-receiving-bool-int">
-+ <title>Receiving a boolean and a string</title>
-+ <para>
-+<programlisting>
-+ gboolean boolret;
-+ char *strret;
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "GetStuff", &error,
-+ G_TYPE_INVALID,
-+ G_TYPE_BOOLEAN, &boolret,
-+ G_TYPE_STRING, &strret,
-+ G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ printf ("%s %s", boolret ? "TRUE" : "FALSE", strret);
-+ g_free (strret);
-+</programlisting>
-+ </para>
-+ </sect3>
-+ <sect3 id="glib-sending-str-arrays">
-+ <title>Sending two arrays of strings</title>
-+ <para>
-+<programlisting>
-+ /* NULL terminate */
-+ char *strs_static[] = {"foo", "bar", "baz", NULL};
-+ /* Take pointer to array; cannot pass array directly */
-+ char **strs_static_p = strs_static;
-+ char **strs_dynamic;
-+
-+ strs_dynamic = g_new (char *, 4);
-+ strs_dynamic[0] = g_strdup ("hello");
-+ strs_dynamic[1] = g_strdup ("world");
-+ strs_dynamic[2] = g_strdup ("!");
-+ /* NULL terminate */
-+ strs_dynamic[3] = NULL;
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "TwoStrArrays", &error,
-+ G_TYPE_STRV, strs_static_p,
-+ G_TYPE_STRV, strs_dynamic,
-+ G_TYPE_INVALID,
-+ G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ g_strfreev (strs_dynamic);
-+</programlisting>
-+ </para>
-+ </sect3>
-+ <sect3 id="glib-getting-str-array">
-+ <title>Sending a boolean, receiving an array of strings</title>
-+ <para>
-+<programlisting>
-+ char **strs;
-+ char **strs_p;
-+ gboolean blah;
-+
-+ error = NULL;
-+ blah = TRUE;
-+ if (!dbus_g_proxy_call (proxy, "GetStrs", &error,
-+ G_TYPE_BOOLEAN, blah,
-+ G_TYPE_INVALID,
-+ G_TYPE_STRV, &strs,
-+ G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ for (strs_p = strs; *strs_p; strs_p++)
-+ printf ("got string: \"%s\"", *strs_p);
-+ g_strfreev (strs);
-+</programlisting>
-+ </para>
-+ </sect3>
-+ <sect3 id="glib-sending-variant">
-+ <title>Sending a variant</title>
-+ <para>
-+<programlisting>
-+ GValue val = {0, };
-+
-+ g_value_init (&val, G_TYPE_STRING);
-+ g_value_set_string (&val, "hello world");
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "SendVariant", &error,
-+ G_TYPE_VALUE, &val, G_TYPE_INVALID,
-+ G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ g_assert (ret == 2);
-+ g_value_unset (&val);
-+</programlisting>
-+ </para>
-+ </sect3>
-+ <sect3 id="glib-receiving-variant">
-+ <title>Receiving a variant</title>
-+ <para>
-+<programlisting>
-+ GValue val = {0, };
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "GetVariant", &error, G_TYPE_INVALID,
-+ G_TYPE_VALUE, &val, G_TYPE_INVALID))
-+ {
-+ /* Handle error */
-+ }
-+ if (G_VALUE_TYPE (&val) == G_TYPE_STRING)
-+ printf ("%s\n", g_value_get_string (&val));
-+ else if (G_VALUE_TYPE (&val) == G_TYPE_INT)
-+ printf ("%d\n", g_value_get_int (&val));
-+ else
-+ ...
-+ g_value_unset (&val);
-+</programlisting>
-+ </para>
-+ </sect3>
-+ </sect2>
-+
-+ <sect2 id="glib-generated-bindings">
-+ <title>Generated Bindings</title>
-+ <para>
-+ By using the Introspection XML files, convenient client-side bindings
-+ can be automatically created to ease the use of a remote DBus object.
-+ </para>
-+ <para>
-+ Here is a sample XML file which describes an object that exposes
-+ one method, named <literal>ManyArgs</literal>.
-+ <programlisting>
-+<?xml version="1.0" encoding="UTF-8" ?>
-+<node name="/com/example/MyObject">
-+ <interface name="com.example.MyObject">
-+ <method name="ManyArgs">
-+ <arg type="u" name="x" direction="in" />
-+ <arg type="s" name="str" direction="in" />
-+ <arg type="d" name="trouble" direction="in" />
-+ <arg type="d" name="d_ret" direction="out" />
-+ <arg type="s" name="str_ret" direction="out" />
-+ </method>
-+ </interface>
-+</node>
-+</programlisting>
-+ </para>
-+ <para>
-+ Run <literal>dbus-binding-tool --mode=glib-client
-+ <replaceable>FILENAME</replaceable> >
-+ <replaceable>HEADER_NAME</replaceable></literal> to generate the header
-+ file. For example: <command>dbus-binding-tool --mode=glib-client
-+ my-object.xml > my-object-bindings.h</command>. This will generate
-+ inline functions with the following prototypes:
-+ <programlisting>
-+/* This is a blocking call */
-+gboolean
-+com_example_MyObject_many_args (DBusGProxy *proxy, const guint IN_x,
-+ const char * IN_str, const gdouble IN_trouble,
-+ gdouble* OUT_d_ret, char ** OUT_str_ret,
-+ GError **error);
-+
-+/* This is a non-blocking call */
-+DBusGProxyCall*
-+com_example_MyObject_many_args_async (DBusGProxy *proxy, const guint IN_x,
-+ const char * IN_str, const gdouble IN_trouble,
-+ com_example_MyObject_many_args_reply callback,
-+ gpointer userdata);
-+
-+/* This is the typedef for the non-blocking callback */
-+typedef void
-+(*com_example_MyObject_many_args_reply)
-+(DBusGProxy *proxy, gdouble OUT_d_ret, char * OUT_str_ret,
-+ GError *error, gpointer userdata);
-+</programlisting>
-+ The first argument in all functions is a <literal>DBusGProxy
-+ *</literal>, which you should create with the usual
-+ <literal>dbus_g_proxy_new_*</literal> functions. Following that are the
-+ "in" arguments, and then either the "out" arguments and a
-+ <literal>GError *</literal> for the synchronous (blocking) function, or
-+ callback and user data arguments for the asynchronous (non-blocking)
-+ function. The callback in the asynchronous function passes the
-+ <literal>DBusGProxy *</literal>, the returned "out" arguments, an
-+ <literal>GError *</literal> which is set if there was an error otherwise
-+ <literal>NULL</literal>, and the user data.
-+ </para>
-+ <para>
-+ As with the server-side bindings support (see <xref
-+ linkend="glib-server"/>), the exact behaviour of the client-side
-+ bindings can be manipulated using "annotations". Currently the only
-+ annotation used by the client bindings is
-+ <literal>org.freedesktop.DBus.GLib.NoReply</literal>, which sets the
-+ flag indicating that the client isn't expecting a reply to the method
-+ call, so a reply shouldn't be sent. This is often used to speed up
-+ rapid method calls where there are no "out" arguments, and not knowing
-+ if the method succeeded is an acceptable compromise to half the traffic
-+ on the bus.
-+ </para>
-+ </sect2>
-+ </sect1>
-+
-+ <sect1 id="glib-server">
-+ <title>GLib API: Implementing Objects</title>
-+ <para>
-+ At the moment, to expose a GObject via D-BUS, you must
-+ write XML by hand which describes the methods exported
-+ by the object. In the future, this manual step will
-+ be obviated by the upcoming GLib introspection support.
-+ </para>
-+ <para>
-+ Here is a sample XML file which describes an object that exposes
-+ one method, named <literal>ManyArgs</literal>.
-+<programlisting>
-+<?xml version="1.0" encoding="UTF-8" ?>
-+
-+<node name="/com/example/MyObject">
-+
-+ <interface name="com.example.MyObject">
-+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="my_object"/>
-+ <method name="ManyArgs">
-+ <!-- This is optional, and in this case is redunundant -->
-+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="my_object_many_args"/>
-+ <arg type="u" name="x" direction="in" />
-+ <arg type="s" name="str" direction="in" />
-+ <arg type="d" name="trouble" direction="in" />
-+ <arg type="d" name="d_ret" direction="out" />
-+ <arg type="s" name="str_ret" direction="out" />
-+ </method>
-+ </interface>
-+</node>
-+</programlisting>
-+ </para>
-+ <para>
-+ This XML is in the same format as the D-BUS introspection XML
-+ format. Except we must include an "annotation" which give the C
-+ symbols corresponding to the object implementation prefix
-+ (<literal>my_object</literal>). In addition, if particular
-+ methods symbol names deviate from C convention
-+ (i.e. <literal>ManyArgs</literal> ->
-+ <literal>many_args</literal>), you may specify an annotation
-+ giving the C symbol.
-+ </para>
-+ <para>
-+ Once you have written this XML, run <literal>dbus-binding-tool --mode=glib-server <replaceable>FILENAME</replaceable> > <replaceable>HEADER_NAME</replaceable>.</literal> to
-+ generate a header file. For example: <command>dbus-binding-tool --mode=glib-server my-object.xml > my-object-glue.h</command>.
-+ </para>
-+ <para>
-+ Next, include the generated header in your program, and invoke
-+ <literal>dbus_g_object_class_install_info</literal> in the class
-+ initializer, passing the object class and "object info" included in the
-+ header. For example:
-+ <programlisting>
-+ dbus_g_object_type_install_info (COM_FOO_TYPE_MY_OBJECT, &com_foo_my_object_info);
-+ </programlisting>
-+ This should be done exactly once per object class.
-+ </para>
-+ <para>
-+ To actually implement the method, just define a C function named e.g.
-+ <literal>my_object_many_args</literal> in the same file as the info
-+ header is included. At the moment, it is required that this function
-+ conform to the following rules:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ The function must return a value of type <literal>gboolean</literal>;
-+ <literal>TRUE</literal> on success, and <literal>FALSE</literal>
-+ otherwise.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The first parameter is a pointer to an instance of the object.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Following the object instance pointer are the method
-+ input values.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Following the input values are pointers to return values.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The final parameter must be a <literal>GError **</literal>.
-+ If the function returns <literal>FALSE</literal> for an
-+ error, the error parameter must be initalized with
-+ <literal>g_set_error</literal>.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ <para>
-+ Finally, you can export an object using <literal>dbus_g_connection_register_g_object</literal>. For example:
-+ <programlisting>
-+ dbus_g_connection_register_g_object (connection,
-+ "/com/foo/MyObject",
-+ obj);
-+ </programlisting>
-+ </para>
-+
-+ <sect2 id="glib-annotations">
-+ <title>Server-side Annotations</title>
-+ <para>
-+ There are several annotations that are used when generating the
-+ server-side bindings. The most common annotation is
-+ <literal>org.freedesktop.DBus.GLib.CSymbol</literal> but there are other
-+ annotations which are often useful.
-+ <variablelist>
-+ <varlistentry>
-+ <term><literal>org.freedesktop.DBus.GLib.CSymbol</literal></term>
-+ <listitem>
-+ <para>
-+ This annotation is used to specify the C symbol names for
-+ the various types (interface, method, etc), if it differs from the
-+ name DBus generates.
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term><literal>org.freedesktop.DBus.GLib.Async</literal></term>
-+ <listitem>
-+ <para>
-+ This annotation marks the method implementation as an
-+ asynchronous function, which doesn't return a response straight
-+ away but will send the response at some later point to complete
-+ the call. This is used to implement non-blocking services where
-+ method calls can take time.
-+ </para>
-+ <para>
-+ When a method is asynchronous, the function prototype is
-+ different. It is required that the function conform to the
-+ following rules:
-+ <itemizedlist>
-+ <listitem>
-+ <para>
-+ The function must return a value of type <literal>gboolean</literal>;
-+ <literal>TRUE</literal> on success, and <literal>FALSE</literal>
-+ otherwise. TODO: the return value is currently ignored.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The first parameter is a pointer to an instance of the object.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ Following the object instance pointer are the method
-+ input values.
-+ </para>
-+ </listitem>
-+ <listitem>
-+ <para>
-+ The final parameter must be a
-+ <literal>DBusGMethodInvocation *</literal>. This is used
-+ when sending the response message back to the client, by
-+ calling <literal>dbus_g_method_return</literal> or
-+ <literal>dbus_g_method_return_error</literal>.
-+ </para>
-+ </listitem>
-+ </itemizedlist>
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term><literal>org.freedesktop.DBus.GLib.Const</literal></term>
-+ <listitem>
-+ <para>This attribute can only be applied to "out"
-+ <literal><arg></literal> nodes, and specifies that the
-+ parameter isn't being copied when returned. For example, this
-+ turns a 's' argument from a <literal>char **</literal> to a
-+ <literal>const char **</literal>, and results in the argument not
-+ being freed by DBus after the message is sent.
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ <varlistentry>
-+ <term><literal>org.freedesktop.DBus.GLib.ReturnVal</literal></term>
-+ <listitem>
-+ <para>
-+ This attribute can only be applied to "out"
-+ <literal><arg></literal> nodes, and alters the expected
-+ function signature. It currently can be set to two values:
-+ <literal>""</literal> or <literal>"error"</literal>. The
-+ argument marked with this attribute is not returned via a
-+ pointer argument, but by the function's return value. If the
-+ attribute's value is the empty string, the <literal>GError
-+ *</literal> argument is also omitted so there is no standard way
-+ to return an error value. This is very useful for interfacing
-+ with existing code, as it is possible to match existing APIs.
-+ If the attribute's value is <literal>"error"</literal>, then the
-+ final argument is a <literal>GError *</literal> as usual.
-+ </para>
-+ <para>
-+ Some examples to demonstrate the usage. This introspection XML:
-+ <programlisting>
-+<method name="Increment">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out" />
-+</method>
-+ </programlisting>
-+ Expects the following function declaration:
-+ <programlisting>
-+gboolean
-+my_object_increment (MyObject *obj, gint32 x, gint32 *ret, GError **error);
-+ </programlisting>
-+ </para>
-+ <para>
-+ This introspection XML:
-+ <programlisting>
-+<method name="IncrementRetval">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out" >
-+ <annotation name="org.freedesktop.DBus.GLib.ReturnVal" value=""/>
-+ </arg>
-+</method>
-+ </programlisting>
-+ Expects the following function declaration:
-+ <programlisting>
-+gint32
-+my_object_increment_retval (MyObject *obj, gint32 x)
-+ </programlisting>
-+ </para>
-+ <para>
-+ This introspection XML:
-+ <programlisting>
-+<method name="IncrementRetvalError">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out" >
-+ <annotation name="org.freedesktop.DBus.GLib.ReturnVal" value="error"/>
-+ </arg>
-+</method>
-+ </programlisting>
-+ Expects the following function declaration:
-+ <programlisting>
-+gint32
-+my_object_increment_retval_error (MyObject *obj, gint32 x, GError **error)
-+ </programlisting>
-+ </para>
-+ </listitem>
-+ </varlistentry>
-+ </variablelist>
-+ </para>
-+ </sect2>
-+ </sect1>
-+
-+ <sect1 id="python-client">
-+ <title>Python API: Using Remote Objects</title>
-+ <para>
-+ The Python bindings provide a simple to use interface for talking over D-BUS.
-+ Where possible much of the inner-workings of D-BUS are hidden behind what looks
-+ like normal Python objects.
-+ </para>
-+ <sect2 id="python-typemappings">
-+ <title>D-BUS - Python type mappings</title>
-+ <para>
-+ While python itself is a largely untyped language D-BUS provides a simple type system
-+ for talking with other languages which may be strongly typed. Python for the most part
-+ tries automatically map python objects to types on the bus. It is none the less good to
-+ know what the type mappings are so one can better utilize services over the bus.
-+ </para>
-+ <sect3 id="python-basic-typemappings">
-+ <title>Basic type mappings</title>
-+ <para>
-+ Below is a list of the basic types, along with their associated
-+ mapping to a Python object.
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>D-BUS basic type</entry>
-+ <entry>Python wrapper</entry>
-+ <entry>Notes</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>BYTE</literal></entry>
-+ <entry><literal>dbus.Byte</literal></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>BOOLEAN</literal></entry>
-+ <entry><literal>dbus.Boolean</literal></entry>
-+ <entry>Any variable assigned a True or False boolean value will automatically be converted into a BOOLEAN over the bus</entry>
-+ </row><row>
-+ <entry><literal>INT16</literal></entry>
-+ <entry><literal>dbus.Int16</literal></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>UINT16</literal></entry>
-+ <entry><literal>dbus.UInt16</literal></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>INT32</literal></entry>
-+ <entry><literal>dbus.Int32</literal></entry>
-+ <entry>This is the default mapping for Python integers</entry>
-+ </row><row>
-+ <entry><literal>UINT32</literal></entry>
-+ <entry><literal>dbus.UInt32</literal></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>INT64</literal></entry>
-+ <entry><literal>dbus.Int64</literal></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>UINT64</literal></entry>
-+ <entry><literal>dbus.UInt64</literal></entry>
-+ <entry></entry>
-+ </row><row>
-+ <entry><literal>DOUBLE</literal></entry>
-+ <entry><literal>dbus.Double</literal></entry>
-+ <entry>Any variable assigned a floating point number will automatically be converted into a DOUBLE over the bus</entry>
-+ </row><row>
-+ <entry><literal>STRING</literal></entry>
-+ <entry><literal>dbus.String</literal></entry>
-+ <entry>Any variable assigned a quoted string will automatically be converted into a STRING over the bus</entry>
-+ </row><row>
-+ <entry><literal>OBJECT_PATH</literal></entry>
-+ <entry><literal>dbus.ObjectPath</literal></entry>
-+ <entry></entry>
-+ </row>
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ </sect3>
-+ <sect3 id="python-container-typemappings">
-+ <title>Container type mappings</title>
-+ <para>
-+ The D-BUS type system also has a number of "container"
-+ types, such as <literal>DBUS_TYPE_ARRAY</literal> and
-+ <literal>DBUS_TYPE_STRUCT</literal>. The D-BUS type system
-+ is fully recursive, so one can for example have an array of
-+ array of strings (i.e. type signature
-+ <literal>aas</literal>).
-+ </para>
-+ <para>
-+ D-BUS container types have native corresponding built-in Python types
-+ so it is easy to use them.
-+ <informaltable>
-+ <tgroup cols="3">
-+ <thead>
-+ <row>
-+ <entry>D-BUS type</entry>
-+ <entry>Python type</entry>
-+ <entry>Python wrapper</entry>
-+ <entry>Notes</entry>
-+ </row>
-+ </thead>
-+ <tbody>
-+ <row>
-+ <entry><literal>ARRAY</literal></entry>
-+ <entry><literal>Python lists</literal></entry>
-+ <entry><literal>dbus.Array</literal></entry>
-+ <entry>Python lists, denoted by square brackets [], are converted into arrays and visa versa.
-+ The one restriction is that when sending a Python list each element of the list must be of the same
-+ type. This is because D-BUS arrays can contain only one element type. Use Python tuples for mixed types.
-+
-+ When using the wrapper you may also specify a type or signature of the elements contained in the Array.
-+ This is manditory when passing an empty Array to a method on the bus because Python can not guess at the
-+ contents of an empty array. For example if a method is expecting an Array of int32's and you need to pass
-+ it an empty Array you would do it as such:
-+
-+ <programlisting>emptyint32array = dbus.Array([], type=dbus.Int32)</programlisting>
-+
-+ or
-+
-+ <programlisting>emptyint32array = dbus.Array([], signature="i")</programlisting>
-+
-+ Note that dbus.Array derives from list so it acts just like a python list.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry><literal>STRUCT</literal></entry>
-+ <entry><literal>Python tuple</literal></entry>
-+ <entry><literal>dbus.Struct</literal></entry>
-+ <entry>Python tuples, denoted by parentheses (,), are converted into structs and visa versa.
-+ Tuples can have mixed types.</entry>
-+ </row>
-+ <row>
-+ <entry><literal>DICTIONARY</literal></entry>
-+ <entry><literal>Python dictionary</literal></entry>
-+ <entry><literal>dbus.Dictionary</literal></entry>
-+ <entry>D-BUS doesn't have an explicit dictionary type. Instead it uses LISTS of DICT_ENTRIES to
-+ represent a dictionary. A DICT_ENTRY is simply a two element struct containing a key/value pair.
-+ Python dictionaries are automatically converted to a LIST of DICT_ENTRIES and visa versa.
-+
-+ Since dictonaries are described as lists of dict_entries we also need the signature in order
-+ to pass empty dictionaries. The wrapper provides a way of specifying this through the key_type/value_type
-+ type parameters or the signature parameters. To send an empty Dictionary where the key is a string
-+ and the value is a string you would do it as such:
-+
-+ <programlisting>emptystringstringdict = dbus.Dictionary({}, key_type=dbus.String, value_type=dbus.Value)</programlisting>
-+
-+ or
-+
-+ <programlisting>emptystringstringdict = dbus.Dictionary({}, signature="ss")</programlisting>
-+
-+ Note that dbus.Dictionary derives from dict so it acts just like a python dictionary.
-+ </entry>
-+ </row>
-+ <row>
-+ <entry><literal>VARIANT</literal></entry>
-+ <entry><literal>any type</literal></entry>
-+ <entry><literal>dbus.Variant</literal></entry>
-+ <entry>A variant is a container for any type. Python exports its methods to accept only variants
-+ since we are an untyped language and can demarshal into any Python type.
-+
-+ To send a variant you must first wrap it in a<literal>dbus.Variant</literal>. If no type or signiture is
-+ given to the variant the marshaler will get the type from the contents.</entry>
-+ </row>
-+
-+ </tbody>
-+ </tgroup>
-+ </informaltable>
-+ </para>
-+ </sect3>
-+ </sect2>
-+ <sect2 id="python-invoking-methods">
-+ <title>Invoking Methods</title>
-+ <para>Here is a D-BUS program using the Python bindings to get a listing of all names on the session bus.
-+<programlisting>
-+import dbus
-+
-+bus = dbus.SessionBus()
-+proxy_obj = bus.bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-+dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.DBus')
-+
-+print dbus_iface.ListNames()
-+</programlisting>
-+ </para>
-+ <para>
-+ Notice I get an interface on the proxy object and use that to make the call. While the specifications
-+ state that you do not need to specify an interface if the call is unambiguous (i.e. only one method implements
-+ that name) due to a bug on the bus that drops messages which don't have an interface field you need to specify
-+ interfaces at this time. In any event it is always good practice to specify the interface of the method you
-+ wish to call to avoid any side effects should a method of the same name be implemented on another interface.
-+ </para>
-+ <para>
-+ You can specify the interface for a single call using the dbus_interface keyword.
-+<programlisting>
-+proxy_obj.ListNames(dbus_interface = 'org.freedesktop.DBus')
-+</programlisting>
-+ </para>
-+ <para>
-+ This is all fine and good if all you want to do is call methods on the bus and then exit. In order to
-+ do more complex things such as use a GUI or make asynchronous calls you will need a mainloop. You would use
-+ asynchronous calls because in GUI applications it is very bad to block for any long period of time. This cause
-+ the GUI to seem to freeze. Since replies to D-BUS messages can take an indeterminate amount of time using async
-+ calls allows you to return control to the GUI while you wait for the reply. This is exceedingly easy to do in
-+ Python. Here is an example using the GLib/GTK+ mainloop.
-+<programlisting>
-+import gobject
-+import dbus
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+def print_list_names_reply(list):
-+ print str(list)
-+
-+def print_error(e):
-+ print str(e)
-+
-+bus = dbus.SessionBus()
-+proxy_obj = bus.bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-+dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.DBus')
-+
-+dbus_iface.ListNames(reply_handler=print_list_names_reply, error_handler=print_error)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</programlisting>
-+ </para>
-+ <para>
-+ In the above listing you will notice the reply_handler and error_handler keywords. These tell the method that
-+ it should be called async and to call print_list_names_reply or print_error depending if you get a reply or an error.
-+ The signature for replys depends on the number of arguments being sent back. Error handlers always take one parameter
-+ which is the error object returned.
-+ </para>
-+ <para>
-+ You will also notice that I check the version of the dbus bindings before importing dbus.glib. In older versions
-+ glib was the only available mainloop. As of version 0.41.0 we split out the glib dependency to allow for other mainloops
-+ to be implemented. Notice also the python binding version does not match up with the D-BUS version. Once we reach 1.0
-+ this should change with Python changes simply tracking the D-BUS changes.
-+ While the glib mainloop is the only mainloop currently implemented, integrating other mainloops should
-+ be very easy to do. There are plans for creating a a generic mainloop to be the default for non gui programs.
-+ </para>
-+ </sect2>
-+ <sect2 id="python-listening-for-signals">
-+ <title>Listening for Signals</title>
-+ <para>
-+ Signals are emitted by objects on the bus to notify listening programs that an event has occurred. There are a couple of ways
-+ to register a signal handler on the bus. One way is to attach to an already created proxy using the connect_to_signal method
-+ which takes a signal name and handler as arguments. Let us look at an example of connecting to the HAL service to receive
-+ signals when devices are added and removed and when devices register a capability. This example assumes you have HAL already running.
-+<programlisting>
-+import gobject
-+import dbus
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+def device_added_callback(udi):
-+ print 'Device with udi %s was added' % (udi)
-+
-+def device_removed_callback(udi):
-+ print 'Device with udi %s was added' % (udi)
-+
-+def device_capability_callback(udi, capability):
-+ print 'Device with udi %s added capability %s' % (udi, capability)
-+
-+bus = dbus.SystemBus()
-+hal_manager_obj = bus.get_object('org.freedesktop.Hal',
-+ '/org/freedesktop/Hal/Manager')
-+hal_manager = dbus.Interface(hal_manager_obj,
-+ 'org.freedesktop.Hal.Manager')
-+
-+hal_manager.connect_to_signal('DeviceAdded', device_added_callback)
-+hal_manager.connect_to_signal('DeviceRemoved', device_removed_callback)
-+hal_manager.connect_to_signal('NewCapability', device_capability_callback)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</programlisting>
-+ </para>
-+ <para>
-+ The drawback of using this method is that the service that you are connecting to has to be around when you register
-+ your signal handler. While HAL is guaranteed to be around on systems that use it this is not always the case for every
-+ service on the bus. Say our program started up before HAL, we could connect to the signal by adding a signal receiver
-+ directly to the bus.
-+<programlisting>
-+bus.add_signal_receiver(device_added_callback,
-+ 'DeviceAdded',
-+ 'org.freedesktop.Hal.Manager',
-+ 'org.freedesktop.Hal',
-+ '/org/freedesktop/Hal/Manager')
-+
-+bus.add_signal_receiver(device_removed_callback,
-+ 'DeviceRemoved',
-+ 'org.freedesktop.Hal.Manager',
-+ 'org.freedesktop.Hal',
-+ '/org/freedesktop/Hal/Manager')
-+
-+bus.add_signal_receiver(device_capability_callback,
-+ 'DeviceAdded',
-+ 'org.freedesktop.Hal.Manager',
-+ 'org.freedesktop.Hal',
-+ '/org/freedesktop/Hal/Manager')
-+</programlisting>
-+ </para>
-+ <para>
-+ All this can be done without creating the proxy object if one wanted to but in most cases you would want to have
-+ a reference to the object so once a signal was received operations could be executed on the object.
-+ </para>
-+ <sidebar>
-+ <title>Signal matching on arguments</title>
-+ <para>
-+ Starting with D-Bus 0.36 and the (0, 43, 0) version of the python
-+ bindings you can now add a match on arguments being sent in a signal.
-+ This is useful for instance for only getting NameOwnerChanged
-+ signals for your service. Lets say we create a name on the bus called
-+ 'org.foo.MyName' we could also add a match to just get
-+ NameOwnerChanges for that name as such:
-+<programlisting>
-+bus.add_signal_receiver(myname_changed,
-+ 'NameOwnerChanged',
-+ 'org.freedesktop.DBus',
-+ 'org.freedesktop.DBus',
-+ '/org/freedesktop/DBus',
-+ arg0='org.foo.MyName')
-+</programlisting>
-+
-+ It is as simple as that. To match the second arg you would use arg1=,
-+ the third arg2=, etc.
-+ </para>
-+ </sidebar>
-+ <sidebar>
-+ <title>Cost of Creating a Proxy Object</title>
-+ <para>
-+ Note that creating proxy objects can have an associated processing cost. When introspection is implemented
-+ a proxy may wait for introspection data before processing any requests. It is generally good practice to
-+ create proxies once and reuse the proxy when calling into the object. Constantly creating the same proxy
-+ over and over again can become a bottleneck for your program.
-+ </para>
-+ </sidebar>
-+ <para>
-+ TODO: example of getting information about devices from HAL
-+ </para>
-+ </sect2>
-+ </sect1>
-+
-+ <sect1 id="python-server">
-+ <title>Python API: Implementing Objects</title>
-+ <para>
-+ Implementing object on the bus is just as easy as invoking methods or listening for signals on the bus.
-+ </para>
-+ <sidebar>
-+ <title>Version Alert</title>
-+ <para>
-+ The Python D-BUS bindings require version 2.4 or greater of Python when creating D-BUS objects.
-+ </para>
-+ </sidebar>
-+
-+ <sect2 id="python-inheriting-from-dbus-object">
-+ <title>Inheriting From dbus.service.Object</title>
-+ <para>
-+ In order to export a Python object over the bus one must first get a bus name and then create
-+ a Python object that inherits from dbus.service.Object. The following is the start of an example
-+ HelloWorld object that we want to export over the session bus.
-+<programlisting>
-+import gobject
-+import dbus
-+import dbus.service
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+class HelloWorldObject(dbus.service.Object):
-+ def __init__(self, bus_name, object_path='/org/freedesktop/HelloWorldObject'):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+session_bus = dbus.SessionBus()
-+bus_name = dbus.service.BusName('org.freedesktop.HelloWorld', bus=session_bus)
-+object = HelloWorldObject(bus_name)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</programlisting>
-+ </para>
-+ <para>
-+ Here we got the session bus, then created a BusName object which requests a name on the bus.
-+ We pass that bus name to the HelloWorldObject object which inherits from dbus.service.Object.
-+ We now have an object on the bus but it is pretty useless.
-+ </para>
-+ </sect2>
-+ <sect2 id="python-exporting-methods">
-+ <title>Exporting Methods Over The Bus</title>
-+ <para>
-+ Let's make this object do something and export a method over the bus.
-+<programlisting>
-+import gobject
-+import dbus
-+import dbus.service
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+class HelloWorldObject(dbus.service.Object):
-+ def __init__(self, bus_name, object_path='/org/freedesktop/HelloWorldObject'):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def hello(self):
-+ return 'Hello from the HelloWorldObject'
-+
-+session_bus = dbus.SessionBus()
-+bus_name = dbus.service.BusName('org.freedesktop.HelloWorld', bus=session_bus)
-+object = HelloWorldObject(bus_name)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</programlisting>
-+ </para>
-+ <sidebar>
-+ <title>Python Decorators</title>
-+ <para>
-+ Notice the @ symbol on the line before the hello method. This is a new directive introduced in
-+ Python 2.4. It is called a decorator and it "decorates" methods. All you have to know is that
-+ it provides metadata that can then be used to alter the behavior of the method being decorated.
-+ In this case we are telling the bindings that the hello method should be exported as a D-BUS method
-+ over the bus.
-+ </para>
-+ </sidebar>
-+ <para>
-+ As you can see we exported the hello method as part of the org.freedesktop.HelloWorldIFace interface.
-+ It takes no arguments and returns a string to the calling program. Let's create a proxy and invoke this
-+ method.
-+<programlisting>
-+import dbus
-+
-+bus = dbus.SessionBus()
-+proxy_obj = bus.bus.get_object('org.freedesktop.HelloWorld', '/org/freedesktop/HelloWorldObject')
-+iface = dbus.Interface(proxy_obj, 'org.freedesktop.HelloWorldIFace')
-+
-+print iface.hello()
-+</programlisting>
-+ </para>
-+ <para>
-+ When invoking methods exported over the bus the bindings automatically know how many parameters
-+ the method exports. You can even make a method that exports an arbitrary number of parameters.
-+ Also, whatever you return will automatically be transfered as a reply over the bus. Some examples.
-+<programlisting>
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def one_arg(self, first_arg):
-+ return 'I got arg %s' % first_arg
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def two_args(self, first_arg, second_arg):
-+ return ('I got 2 args', first_arg, second_arg)
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def return_list(self):
-+ return [1, 2, 3, 4, 5, 6]
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def return_dict(self):
-+ return {one: '1ne', two: '2wo', three: '3ree'}
-+</programlisting>
-+ </para>
-+ </sect2>
-+ <sect2 id="python-emitting-signals">
-+ <title>Emitting Signals</title>
-+ <para>
-+ Setting up signals to emit is just as easy as exporting methods. It uses the same syntax as methods.
-+<programlisting>
-+import gobject
-+import dbus
-+import dbus.service
-+if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
-+ import dbus.glib
-+
-+class HelloWorldObject(dbus.service.Object):
-+ def __init__(self, bus_name, object_path='/org/freedesktop/HelloWorldObject'):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldIFace')
-+ def hello(self):
-+ return 'Hello from the HelloWorldObject'
-+
-+ @dbus.service.signal('org.freedesktop.HelloWorldIFace')
-+ def hello_signal(self, message):
-+ pass
-+
-+session_bus = dbus.SessionBus()
-+bus_name = dbus.service.BusName('org.freedesktop.HelloWorld', bus=session_bus)
-+object = HelloWorldObject(bus_name)
-+
-+object.hello_signal('I sent a hello signal')
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-+</programlisting>
-+ </para>
-+ <para>
-+ Adding a @dbus.service.signal decorator to a method turns it into a signal emitter. You can put code
-+ in this method to do things like keep track of how many times you call the emitter or to print out debug
-+ messages but for the most part a pass noop will do. Whenever you call the emitter a signal will be emitted
-+ with the parameters you passed in as arguments. In the above example we send the message 'I sent a hello signal'
-+ with the signal.
-+ </para>
-+ </sect2>
-+ <sect2 id="python-inheriting-and-overriding">
-+ <title>Inheriting from HelloWorldObject</title>
-+ <para>
-+ One of the cool things you can do in Python is inherit from another D-BUS object. We use this trick in
-+ the bindings to provide a default implementation for the org.freedesktop.DBus.Introspectable interface.
-+ Let's inherit from the HelloWorldObject example above and overide the hello method to say goodbye.
-+<programlisting>
-+class HelloWorldGoodbyeObject(HelloWorldObject):
-+ def __init__(self, bus_name, object_path='/org/freedesktop/HelloWorldGoodbyeObject'):
-+ HelloWorldObject.__init__(self, bus_name, object_path)
-+
-+ @dbus.service.method('org.freedesktop.HelloWorldGoodbyeIFace')
-+ def hello(self):
-+ return 'Goodbye'
-+
-+goodbye_object = HelloWorldGoodbyeObject(bus_name)
-+</programlisting>
-+ </para>
-+ <para>
-+ Let's now call both methods with a little help from interfaces.
-+<programlisting>
-+import dbus
-+
-+bus = dbus.SessionBus()
-+proxy_obj = bus.bus.get_object('org.freedesktop.HelloWorld', '/org/freedesktop/HelloWorldGoodbyeObject')
-+
-+print proxy_obj.hello(dbus_interface='org.freedesktop.HelloWorldIFace')
-+print proxy_obj.hello(dbus_interface='org.freedesktop.HelloWorldGoodbyeIFace')
-+</programlisting>
-+ </para>
-+ <para>
-+ This should print out 'Hello from the HelloWorldObject' followed by a 'Goodbye'.
-+ </para>
-+ </sect2>
-+ <sect2 id="python-conclusion">
-+ <title>Conclusion</title>
-+ <para>
-+ As you can see, using D-BUS from Python is an extremely easy proposition. Hopefully
-+ the tutorial has been helpful in getting you started. If you need anymore help please
-+ feel free to post on the <ulink url="http://lists.freedesktop.org/mailman/listinfo/dbus/">mailing list</ulink>.
-+ The Python bindings are still in a state of flux and there may be API changes in the future.
-+ This tutorial will be updated if such changes occur.
-+ </para>
-+ </sect2>
-+ </sect1>
-+
-+ <sect1 id="qt-client">
-+ <title>Qt API: Using Remote Objects</title>
-+ <para>
-+
-+ The Qt bindings are not yet documented.
-+
-+ </para>
-+ </sect1>
-+
-+ <sect1 id="qt-server">
-+ <title>Qt API: Implementing Objects</title>
-+ <para>
-+ The Qt bindings are not yet documented.
-+ </para>
-+ </sect1>
-+</article>
-diff -Naur dbus-0.61.orig/doc/dcop-howto.txt dbus-0.61/doc/dcop-howto.txt
---- dbus-0.61.orig/doc/dcop-howto.txt 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/dcop-howto.txt 2002-11-21 17:41:33.000000000 +0100
-@@ -0,0 +1,559 @@
-+ DCOP: Desktop COmmunications Protocol
-+
-+ Preston Brown <pbrown at kde.org>
-+ October 14, 1999
-+
-+ Revised and extended by Matthias Ettrich <ettrich at kde.org>
-+ Mar 29, 2000
-+
-+ Extended with DCOP Signals by Waldo Bastian <bastian at kde.org>
-+ Feb 19, 2001
-+
-+
-+Motivation and Background:
-+--------------------------
-+
-+The motivation behind building a protocol like DCOP is simple. For
-+the past year, we have been attempting to enable interprocess
-+communication between KDE applications. KDE already has an extremely
-+simple IPC mechanism called KWMcom, which is (was!) used for communicating
-+between the panel and the window manager for instance. It is about as
-+simple as it gets, passing messages via X Atoms. For this reason it
-+is limited in the size and complexity of the data that can be passed
-+(X atoms must be small to remain efficient) and it also makes it so
-+that X is required. CORBA was thought to be a more effective IPC/RPC
-+solution. However, after a year of attempting to make heavy use of
-+CORBA in KDE, we have realized that it is a bit slow and memory
-+intensive for simple use. It also has no authentication available.
-+
-+What we really needed was an extremely simple protocol with basic
-+authorization, along the lines of MIT-MAGIC-COOKIE, as used by X. It
-+would not be able to do NEARLY what CORBA was able to do, but for the
-+simple tasks required it would be sufficient. Some examples of such
-+tasks might be an application sending a message to the panel saying,
-+"I have started, stop displaying the 'application starting' wait
-+state," or having a new application that starts query to see if any
-+other applications of the same name are running. If they are, simply
-+call a function on the remote application to create a new window,
-+rather than starting a new process.
-+
-+Implementation:
-+---------------
-+
-+DCOP is a simple IPC/RPC mechanism built to operate over sockets.
-+Either unix domain sockets or tcp/ip sockets are supported. DCOP is
-+built on top of the Inter Client Exchange (ICE) protocol, which comes
-+standard as a part of X11R6 and later. It also depends on Qt, but
-+beyond that it does not require any other libraries. Because of this,
-+it is extremely lightweight, enabling it to be linked into all KDE
-+applications with low overhead.
-+
-+Model:
-+------
-+
-+The model is simple. Each application using DCOP is a client. They
-+communicate to each other through a DCOP server, which functions like
-+a traffic director, dispatching messages/calls to the proper
-+destinations. All clients are peers of each other.
-+
-+Two types of actions are possible with DCOP: "send and forget"
-+messages, which do not block, and "calls," which block waiting for
-+some data to be returned.
-+
-+Any data that will be sent is serialized (marshalled, for you CORBA
-+types) using the built-in QDataStream operators available in all of
-+the Qt classes. This is fast and easy. In fact it's so little work
-+that you can easily write the marshalling code by hand. In addition,
-+there's a simple IDL-like compiler available (dcopidl and dcopidl2cpp)
-+that generates stubs and skeletons for you. Using the dcopidl compiler
-+has the additional benefit of type safety.
-+
-+This HOWTO describes the manual method first and covers the dcopidl
-+compiler later.
-+
-+Establishing the Connection:
-+----------------------------
-+
-+KApplication has gained a method called "KApplication::dcopClient()"
-+which returns a pointer to a DCOPClient instance. The first time this
-+method is called, the client class will be created. DCOPClients have
-+unique identifiers attached to them which are based on what
-+KApplication::name() returns. In fact, if there is only a single
-+instance of the program running, the appId will be equal to
-+KApplication::name().
-+
-+To actually enable DCOP communication to begin, you must use
-+DCOPClient::attach(). This will attempt to attach to the DCOP server.
-+If no server is found or there is any other type of error, attach()
-+will return false. KApplication will catch a dcop signal and display an
-+appropriate error message box in that case.
-+
-+After connecting with the server via DCOPClient::attach(), you need to
-+register this appId with the server so it knows about you. Otherwise,
-+you are communicating anonymously. Use the
-+DCOPClient::registerAs(const QCString &name) to do so. In the simple
-+case:
-+
-+/*
-+ * returns the appId that is actually registered, which _may_ be
-+ * different from what you passed
-+ */
-+appId = client->registerAs(kApp->name());
-+
-+If you never retrieve the DCOPClient pointer from KApplication, the
-+object will not be created and thus there will be no memory overhead.
-+
-+You may also detach from the server by calling DCOPClient::detach().
-+If you wish to attach again you will need to re-register as well. If
-+you only wish to change the ID under which you are registered, simply
-+call DCOPClient::registerAs() with the new name.
-+
-+KUniqueApplication automatically registers itself to DCOP. If you
-+are using KUniqueApplication you should not attach or register
-+yourself, this is already done. The appId is by definition
-+equal to kapp->name(). You can retrieve the registered DCOP client
-+by calling kapp->dcopClient().
-+
-+Sending Data to a Remote Application:
-+-------------------------------------
-+
-+To actually communicate, you have one of two choices. You may either
-+call the "send" or the "call" method. Both methods require three
-+identification parameters: an application identifier, a remote object,
-+a remote function. Sending is asynchronous (i.e. it returns immediately)
-+and may or may not result in your own application being sent a message at
-+some point in the future. Then "send" requires one and "call" requires
-+two data parameters.
-+
-+The remote object must be specified as an object hierarchy. That is,
-+if the toplevel object is called "fooObject" and has the child
-+"barObject", you would reference this object as "fooObject/barObject".
-+Functions must be described by a full function signature. If the
-+remote function is called "doIt", and it takes an int, it would be
-+described as "doIt(int)". Please note that the return type is not
-+specified here, as it is not part of the function signature (or at
-+least the C++ understanding of a function signature). You will get
-+the return type of a function back as an extra parameter to
-+DCOPClient::call(). See the section on call() for more details.
-+
-+In order to actually get the data to the remote client, it must be
-+"serialized" via a QDataStream operating on a QByteArray. This is how
-+the data parameter is "built". A few examples will make clear how this
-+works.
-+
-+Say you want to call "doIt" as described above, and not block (or wait
-+for a response). You will not receive the return value of the remotely
-+called function, but you will not hang while the RPC is processed either.
-+The return value of send() indicates whether DCOP communication succeeded
-+or not.
-+
-+QByteArray data;
-+QDataStream arg(data, IO_WriteOnly);
-+arg << 5;
-+if (!client->send("someAppId", "fooObject/barObject", "doIt(int)",
-+ data))
-+ qDebug("there was some error using DCOP.");
-+
-+OK, now let's say we wanted to get the data back from the remotely
-+called function. You have to execute a call() instead of a send().
-+The returned value will then be available in the data parameter "reply".
-+The actual return value of call() is still whether or not DCOP
-+communication was successful.
-+
-+QByteArray data, replyData;
-+QCString replyType;
-+QDataStream arg(data, IO_WriteOnly);
-+arg << 5;
-+if (!client->call("someAppId", "fooObject/barObject", "doIt(int)",
-+ data, replyType, replyData))
-+ qDebug("there was some error using DCOP.");
-+else {
-+ QDataStream reply(replyData, IO_ReadOnly);
-+ if (replyType == "QString") {
-+ QString result;
-+ reply >> result;
-+ print("the result is: %s",result.latin1());
-+ } else
-+ qDebug("doIt returned an unexpected type of reply!");
-+}
-+
-+N.B.: You cannot call() a method belonging to an application which has
-+registered with an unique numeric id appended to its textual name (see
-+dcopclient.h for more info). In this case, DCOP would not know which
-+application it should connect with to call the method. This is not an issue
-+with send(), as you can broadcast to all applications that have registered
-+with appname-<numeric_id> by using a wildcard (e.g. 'konsole-*'), which
-+will send your signal to all applications called 'konsole'.
-+
-+Receiving Data via DCOP:
-+------------------------
-+
-+Currently the only real way to receive data from DCOP is to multiply
-+inherit from the normal class that you are inheriting (usually some
-+sort of QWidget subclass or QObject) as well as the DCOPObject class.
-+DCOPObject provides one very important method: DCOPObject::process().
-+This is a pure virtual method that you must implement in order to
-+process DCOP messages that you receive. It takes a function
-+signature, QByteArray of parameters, and a reference to a QByteArray
-+for the reply data that you must fill in.
-+
-+Think of DCOPObject::process() as a sort of dispatch agent. In the
-+future, there will probably be a precompiler for your sources to write
-+this method for you. However, until that point you need to examine
-+the incoming function signature and take action accordingly. Here is
-+an example implementation.
-+
-+bool BarObject::process(const QCString &fun, const QByteArray &data,
-+ QCString &replyType, QByteArray &replyData)
-+{
-+ if (fun == "doIt(int)") {
-+ QDataStream arg(data, IO_ReadOnly);
-+ int i; // parameter
-+ arg >> i;
-+ QString result = self->doIt (i);
-+ QDataStream reply(replyData, IO_WriteOnly);
-+ reply << result;
-+ replyType = "QString";
-+ return true;
-+ } else {
-+ qDebug("unknown function call to BarObject::process()");
-+ return false;
-+ }
-+}
-+
-+Receiving Calls and processing them:
-+------------------------------------
-+
-+If your applications is able to process incoming function calls
-+right away the above code is all you need. When your application
-+needs to do more complex tasks you might want to do the processing
-+out of 'process' function call and send the result back later when
-+it becomes available.
-+
-+For this you can ask your DCOPClient for a transactionId. You can
-+then return from the 'process' function and when the result is
-+available finish the transaction. In the mean time your application
-+can receive incoming DCOP function calls from other clients.
-+
-+Such code could like this:
-+
-+bool BarObject::process(const QCString &fun, const QByteArray &data,
-+ QCString &, QByteArray &)
-+{
-+ if (fun == "doIt(int)") {
-+ QDataStream arg(data, IO_ReadOnly);
-+ int i; // parameter
-+ arg >> i;
-+ QString result = self->doIt(i);
-+
-+ DCOPClientTransaction *myTransaction;
-+ myTransaction = kapp->dcopClient()->beginTransaction();
-+
-+ // start processing...
-+ // Calls slotProcessingDone when finished.
-+ startProcessing( myTransaction, i);
-+
-+ return true;
-+ } else {
-+ qDebug("unknown function call to BarObject::process()");
-+ return false;
-+ }
-+}
-+
-+slotProcessingDone(DCOPClientTransaction *myTransaction, const QString &result)
-+{
-+ QCString replyType = "QString";
-+ QByteArray replyData;
-+ QDataStream reply(replyData, IO_WriteOnly);
-+ reply << result;
-+ kapp->dcopClient()->endTransaction( myTransaction, replyType, replyData );
-+}
-+
-+DCOP Signals
-+------------
-+
-+Sometimes a component wants to send notifications via DCOP to other
-+components but does not know which components will be interested in these
-+notifications. One could use a broadcast in such a case but this is a very
-+crude method. For a more sophisticated method DCOP signals have been invented.
-+
-+DCOP signals are very similair to Qt signals, there are some differences
-+though. A DCOP signal can be connected to a DCOP function. Whenever the DCOP
-+signal gets emitted, the DCOP functions to which the signal is connected are
-+being called. DCOP signals are, just like Qt signals, one way. They do not
-+provide a return value.
-+
-+A DCOP signal originates from a DCOP Object/DCOP Client combination (sender).
-+It can be connected to a function of another DCOP Object/DCOP Client
-+combination (receiver).
-+
-+There are two major differences between connections of Qt signals and
-+connections of DCOP signals. In DCOP, unlike Qt, a signal connections can
-+have an anonymous sender and, unlike Qt, a DCOP signal connection can be
-+non-volatile.
-+
-+With DCOP one can connect a signal without specifying the sending DCOP Object
-+or DCOP Client. In that case signals from any DCOP Object and/or DCOP Client
-+will be delivered. This allows the specification of certain events without
-+tying oneself to a certain object that implementes the events.
-+
-+Another DCOP feature are so called non-volatile connections. With Qt signal
-+connections, the connection gets deleted when either sender or receiver of
-+the signal gets deleted. A volatile DCOP signal connection will behave the
-+same. However, a non-volatile DCOP signal connection will not get deleted
-+when the sending object gets deleted. Once a new object gets created with
-+the same name as the original sending object, the connection will be restored.
-+There is no difference between the two when the receiving object gets deleted,
-+in that case the signal connection will always be deleted.
-+
-+A receiver can create a non-volatile connection while the sender doesn't (yet)
-+exist. An anonymous DCOP connection should always be non-volatile.
-+
-+The following example shows how KLauncher emits a signal whenever it notices
-+that an application that was started via KLauncher terminates.
-+
-+ QByteArray params;
-+ QDataStream stream(params, IO_WriteOnly);
-+ stream << pid;
-+ kapp->dcopClient()->emitDCOPSignal("clientDied(pid_t)", params);
-+
-+The task manager of the KDE panel connects to this signal. It uses an
-+anonymous connection (it doesn't require that the signal is being emitted
-+by KLauncher) that is non-volatile:
-+
-+ connectDCOPSignal(0, 0, "clientDied(pid_t)", "clientDied(pid_t)", false);
-+
-+It connects the clientDied(pid_t) signal to its own clientDied(pid_t) DCOP
-+function. In this case the signal and the function to call have the same name.
-+This isn't needed as long as the arguments of both signal and receiving function
-+match. The receiving function may ignore one or more of the trailing arguments
-+of the signal. E.g. it is allowed to connect the clientDied(pid_t) signal to
-+a clientDied(void) DCOP function.
-+
-+Using the dcopidl compiler
-+---------------------
-+
-+dcopidl makes setting up a DCOP server easy. Instead of having to implement
-+the process() method and unmarshalling (retrieving from QByteArray) parameters
-+manually, you can let dcopidl create the necessary code on your behalf.
-+
-+This also allows you to describe the interface for your class in a
-+single, separate header file.
-+
-+Writing an IDL file is very similar to writing a normal C++ header. An
-+exception is the keyword 'ASYNC'. It indicates that a call to this
-+function shall be processed asynchronously. For the C++ compiler, it
-+expands to 'void'.
-+
-+Example:
-+
-+#ifndef MY_INTERFACE_H
-+#define MY_INTERFACE_H
-+
-+#include <dcopobject.h>
-+
-+class MyInterface : virtual public DCOPObject
-+{
-+ K_DCOP
-+
-+ k_dcop:
-+
-+ virtual ASYNC myAsynchronousMethod(QString someParameter) = 0;
-+ virtual QRect mySynchronousMethod() = 0;
-+};
-+
-+#endif
-+
-+As you can see, you're essentially declaring an abstract base class, which
-+virtually inherits from DCOPObject.
-+
-+If you're using the standard KDE build scripts, then you can simply
-+add this file (which you would call MyInterface.h) to your sources
-+directory. Then you edit your Makefile.am, adding 'MyInterface.skel'
-+to your SOURCES list and MyInterface.h to include_HEADERS.
-+
-+The build scripts will use dcopidl to parse MyInterface.h, converting
-+it to an XML description in MyInterface.kidl. Next, a file called
-+MyInterface_skel.cpp will automatically be created, compiled and
-+linked with your binary.
-+
-+The next thing you have to do is to choose which of your classes will
-+implement the interface described in MyInterface.h. Alter the inheritance
-+of this class such that it virtually inherits from MyInterface. Then
-+add declarations to your class interface similar to those on MyInterface.h,
-+but virtual, not pure virtual.
-+
-+Example:
-+
-+class MyClass: public QObject, virtual public MyInterface
-+{
-+ Q_OBJECT
-+
-+ public:
-+ MyClass();
-+ ~MyClass();
-+
-+ ASYNC myAsynchronousMethod(QString someParameter);
-+ QRect mySynchronousMethod();
-+};
-+
-+Note: (Qt issue) Remember that if you are inheriting from QObject, you must
-+place it first in the list of inherited classes.
-+
-+In the implementation of your class' ctor, you must explicitly initialize
-+those classes from which you are inheriting from. This is, of course, good
-+practise, but it is essential here as you need to tell DCOPObject the name of
-+the interface which your are implementing.
-+
-+Example:
-+
-+MyClass::MyClass()
-+ : QObject(),
-+ DCOPObject("MyInterface")
-+{
-+ // whatever...
-+}
-+
-+Now you can simply implement the methods you have declared in your interface,
-+exactly the same as you would normally.
-+
-+Example:
-+
-+void MyClass::myAsynchronousMethod(QString someParameter)
-+{
-+ qDebug("myAsyncMethod called with param `" + someParameter + "'");
-+}
-+
-+
-+It is not necessary (though very clean) to define an interface as an
-+abstract class of its own, like we did in the example above. We could
-+just as well have defined a k_dcop section directly within MyClass:
-+
-+class MyClass: public QObject, virtual public DCOPObject
-+{
-+ Q_OBJECT
-+ K_DCOP
-+
-+ public:
-+ MyClass();
-+ ~MyClass();
-+
-+ k_dcop:
-+ ASYNC myAsynchronousMethod(QString someParameter);
-+ QRect mySynchronousMethod();
-+};
-+
-+In addition to skeletons, dcopidl2cpp also generate stubs. Those make
-+it easy to call a DCOP interface without doing the marshalling
-+manually. To use a stub, add MyInterface.stub to the SOURCES list of
-+your Makefile.am. The stub class will then be called MyInterface_stub.
-+
-+Conclusion:
-+-----------
-+
-+Hopefully this document will get you well on your way into the world
-+of inter-process communication with KDE! Please direct all comments
-+and/or suggestions to Preston Brown <pbrown at kde.org> and Matthias
-+Ettrich <ettrich at kde.org>.
-+
-+
-+Inter-user communication
-+------------------------
-+
-+Sometimes it might be interesting to use DCOP between processes
-+belonging to different users, e.g. a frontend process running
-+with the user's id, and a backend process running as root.
-+
-+To do this, two steps have to be taken:
-+
-+a) both processes need to talk to the same DCOP server
-+b) the authentication must be ensured
-+
-+For the first step, you simply pass the server address (as
-+found in .DCOPserver) to the second process. For the authentication,
-+you can use the ICEAUTHORITY environment variable to tell the
-+second process where to find the authentication information.
-+(Note that this implies that the second process is able to
-+read the authentication file, so it will probably only work
-+if the second process runs as root. If it should run as another
-+user, a similar approach to what kdesu does with xauth must
-+be taken. In fact, it would be a very good idea to add DCOP
-+support to kdesu!)
-+
-+For example
-+
-+ICEAUTHORITY=~user/.ICEauthority kdesu root -c kcmroot -dcopserver `cat ~user/.DCOPserver`
-+
-+will, after kdesu got the root password, execute kcmroot as root, talking
-+to the user's dcop server.
-+
-+
-+NOTE: DCOP communication is not encrypted, so please do not
-+pass important information around this way.
-+
-+
-+Performance Tests:
-+------------------
-+A few back-of-the-napkin tests folks:
-+
-+Code:
-+
-+#include <kapplication.h>
-+
-+int main(int argc, char **argv)
-+{
-+ KApplication *app;
-+
-+ app = new KApplication(argc, argv, "testit");
-+ return app->exec();
-+}
-+
-+Compiled with:
-+
-+g++ -O2 -o testit testit.cpp -I$QTDIR/include -L$QTDIR/lib -lkdecore
-+
-+on Linux yields the following memory use statistics:
-+
-+VmSize: 8076 kB
-+VmLck: 0 kB
-+VmRSS: 4532 kB
-+VmData: 208 kB
-+VmStk: 20 kB
-+VmExe: 4 kB
-+VmLib: 6588 kB
-+
-+If I create the KApplication's DCOPClient, and call attach() and
-+registerAs(), it changes to this:
-+
-+VmSize: 8080 kB
-+VmLck: 0 kB
-+VmRSS: 4624 kB
-+VmData: 208 kB
-+VmStk: 20 kB
-+VmExe: 4 kB
-+VmLib: 6588 kB
-+
-+Basically it appears that using DCOP causes 100k more memory to be
-+resident, but no more data or stack. So this will be shared between all
-+processes, right? 100k to enable DCOP in all apps doesn't seem bad at
-+all. :)
-+
-+OK now for some timings. Just creating a KApplication and then exiting
-+(i.e. removing the call to KApplication::exec) takes this much time:
-+
-+0.28user 0.02system 0:00.32elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
-+0inputs+0outputs (1084major+62minor)pagefaults 0swaps
-+
-+I.e. about 1/3 of a second on my PII-233. Now, if we create our DCOP
-+object and attach to the server, it takes this long:
-+
-+0.27user 0.03system 0:00.34elapsed 87%CPU (0avgtext+0avgdata 0maxresident)k
-+0inputs+0outputs (1107major+65minor)pagefaults 0swaps
-+
-+I.e. about 1/3 of a second. Basically DCOPClient creation and attaching
-+gets lost in the statistical variation ("noise"). I was getting times
-+between .32 and .48 over several runs for both of the example programs, so
-+obviously system load is more relevant than the extra two calls to
-+DCOPClient::attach and DCOPClient::registerAs, as well as the actual
-+DCOPClient constructor time.
-+
-diff -Naur dbus-0.61.orig/doc/file-boilerplate.c dbus-0.61/doc/file-boilerplate.c
---- dbus-0.61.orig/doc/file-boilerplate.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/file-boilerplate.c 2004-08-10 05:07:00.000000000 +0200
-@@ -0,0 +1,27 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* FILENAME BRIEF FILE DESCRIPTION
-+ *
-+ * Copyright (C) YEAR COPYRIGHT HOLDER
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_FOO_H
-+#define DBUS_FOO_H
-+
-+#endif /* DBUS_FOO_H */
-diff -Naur dbus-0.61.orig/doc/introspect.dtd dbus-0.61/doc/introspect.dtd
---- dbus-0.61.orig/doc/introspect.dtd 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/introspect.dtd 2005-08-18 06:04:57.000000000 +0200
-@@ -0,0 +1,37 @@
-+<!-- DTD for D-BUS Introspection data -->
-+<!-- (C) 2005-02-02 David A. Wheeler; released under the D-BUS licenses,
-+ GNU GPL version 2 (or greater) and AFL 1.1 (or greater) -->
-+
-+<!-- see D-BUS specification for documentation -->
-+
-+<!ELEMENT node (node|interface)*>
-+<!ATTLIST node name CDATA #IMPLIED>
-+
-+<!ELEMENT interface (method|signal|property|annotation)*>
-+<!ATTLIST interface name CDATA #REQUIRED>
-+
-+<!ELEMENT method (arg|annotation)*>
-+<!ATTLIST method name CDATA #REQUIRED>
-+
-+<!ELEMENT signal (arg|annotation)*>
-+<!ATTLIST signal name CDATA #REQUIRED>
-+
-+<!ELEMENT arg EMPTY>
-+<!ATTLIST arg name CDATA #IMPLIED>
-+<!ATTLIST arg type CDATA #REQUIRED>
-+<!-- Method arguments SHOULD include "direction",
-+ while signal and error arguments SHOULD not (since there's no point).
-+ The DTD format can't express that subtlety. -->
-+<!ATTLIST arg direction (in|out) "in">
-+
-+<!-- AKA "attribute" -->
-+<!ELEMENT property (annotation)*>
-+<!ATTLIST property name CDATA #REQUIRED>
-+<!ATTLIST property type CDATA #REQUIRED>
-+<!ATTLIST property access (read|write|readwrite) #REQUIRED>
-+
-+<!ELEMENT annotation EMPTY> <!-- Generic metadata -->
-+<!ATTLIST annotation name CDATA #REQUIRED>
-+<!ATTLIST annotation value CDATA #REQUIRED>
-+
-+
-diff -Naur dbus-0.61.orig/doc/introspect.xsl dbus-0.61/doc/introspect.xsl
---- dbus-0.61.orig/doc/introspect.xsl 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/doc/introspect.xsl 2005-08-18 06:04:57.000000000 +0200
-@@ -0,0 +1,106 @@
-+<?xml version="1.0" encoding="ISO-8859-15"?>
-+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
-+
-+<!--
-+ Copyright (C) 2005 Lennart Poettering.
-+
-+ Licensed under the Academic Free License version 2.1
-+
-+ 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 2 of the License, or
-+ (at your option) 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, write to the Free Software
-+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+-->
-+
-+<!-- $Id: introspect.xsl,v 1.1 2005/08/18 04:04:57 johnp Exp $ -->
-+
-+<xsl:output method="xml" version="1.0" encoding="iso-8859-15" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes"/>
-+
-+<xsl:template match="/">
-+ <html>
-+ <head>
-+ <title>DBUS Introspection data</title>
-+ <style type="text/css">
-+ body { color: black; background-color: white }
-+ h1 { font-family: sans-serif }
-+ ul { list-style-type: none; margin-bottom: 10px }
-+ li { font-family: sans-serif }
-+ .keyword { font-style: italic }
-+ .type { font-weight: bold }
-+ .symbol { font-family: monospace }
-+ .interface { padding: 10px; margin: 10px }
-+ </style>
-+ </head>
-+ <body>
-+ <xsl:for-each select="node/interface">
-+ <div class="interface">
-+ <h1>
-+ <span class="keyword">interface</span><xsl:text> </xsl:text>
-+ <span class="symbol"><xsl:value-of select="@name"/></span>
-+ </h1>
-+
-+ <ul>
-+
-+ <xsl:apply-templates select="annotation"/>
-+
-+ <xsl:for-each select="method|signal|property">
-+ <li>
-+ <span class="keyword"><xsl:value-of select="name()"/></span>
-+ <xsl:text> </xsl:text>
-+ <span class="symbol"><xsl:value-of select="@name"/></span>
-+
-+ <ul>
-+ <xsl:apply-templates select="annotation"/>
-+ <xsl:for-each select="arg">
-+ <li>
-+ <span class="keyword">
-+ <xsl:choose>
-+ <xsl:when test="@direction != """>
-+ <xsl:value-of select="@direction"/>
-+ </xsl:when>
-+ <xsl:when test="name(..) = "signal"">
-+ out
-+ </xsl:when>
-+ <xsl:otherwise>
-+ in
-+ </xsl:otherwise>
-+ </xsl:choose>
-+ </span>
-+
-+ <xsl:text> </xsl:text>
-+
-+ <span class="type"><xsl:value-of select="@type"/></span><xsl:text> </xsl:text>
-+ <span class="symbol"><xsl:value-of select="@name"/></span><xsl:text> </xsl:text>
-+ </li>
-+ </xsl:for-each>
-+ </ul>
-+
-+ </li>
-+ </xsl:for-each>
-+
-+ </ul>
-+ </div>
-+ </xsl:for-each>
-+ </body>
-+ </html>
-+</xsl:template>
-+
-+
-+<xsl:template match="annotation">
-+ <li>
-+ <span class="keyword">annotation</span>
-+ <code><xsl:value-of select="@name"/></code><xsl:text> = </xsl:text>
-+ <code><xsl:value-of select="@value"/></code>
-+ </li>
-+</xsl:template>
-+
-+</xsl:stylesheet>
-diff -Naur dbus-0.61.orig/gcj/Makefile.am dbus-0.61/gcj/Makefile.am
---- dbus-0.61.orig/gcj/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/Makefile.am 2006-02-10 21:57:10.000000000 +0100
-@@ -0,0 +1,18 @@
-+SUBDIRS=org
-+
-+CLEANFILES=dbus-1.jar
-+
-+dbus-1.jar:
-+ - at rm -f dbus-1.jar
-+ find org -type d -o -type f -name '*.class' | \
-+ sed -e '/\/\./d' | \
-+ $(JAR) cfM0E@ $@
-+
-+jardir = $(datadir)/java
-+jar_DATA = dbus-1.jar
-+
-+noinst_PROGRAMS = test-message
-+
-+test_message_SOURCES = TestMessage.java
-+test_message_LDFLAGS = --main=TestMessage
-+test_message_LDADD = $(top_builddir)/gcj/org/freedesktop/dbus/libdbus-gcj-1.la
-diff -Naur dbus-0.61.orig/gcj/Makefile.in dbus-0.61/gcj/Makefile.in
---- dbus-0.61.orig/gcj/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/Makefile.in 2006-02-27 22:34:30.000000000 +0100
-@@ -0,0 +1,730 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+noinst_PROGRAMS = test-message$(EXEEXT)
-+subdir = gcj
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+PROGRAMS = $(noinst_PROGRAMS)
-+am_test_message_OBJECTS = TestMessage.$(OBJEXT)
-+test_message_OBJECTS = $(am_test_message_OBJECTS)
-+test_message_DEPENDENCIES = \
-+ $(top_builddir)/gcj/org/freedesktop/dbus/libdbus-gcj-1.la
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+GCJCOMPILE = $(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)
-+LTGCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ) \
-+ $(AM_GCJFLAGS) $(GCJFLAGS)
-+GCJLD = $(GCJ)
-+GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJLD) $(AM_GCJFLAGS) \
-+ $(GCJFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(test_message_SOURCES)
-+DIST_SOURCES = $(test_message_SOURCES)
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+am__installdirs = "$(DESTDIR)$(jardir)"
-+jarDATA_INSTALL = $(INSTALL_DATA)
-+DATA = $(jar_DATA)
-+ETAGS = etags
-+CTAGS = ctags
-+DIST_SUBDIRS = $(SUBDIRS)
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+SUBDIRS = org
-+CLEANFILES = dbus-1.jar
-+jardir = $(datadir)/java
-+jar_DATA = dbus-1.jar
-+test_message_SOURCES = TestMessage.java
-+test_message_LDFLAGS = --main=TestMessage
-+test_message_LDADD = $(top_builddir)/gcj/org/freedesktop/dbus/libdbus-gcj-1.la
-+all: all-recursive
-+
-+.SUFFIXES:
-+.SUFFIXES: .java .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcj/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu gcj/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+test-message$(EXEEXT): $(test_message_OBJECTS) $(test_message_DEPENDENCIES)
-+ @rm -f test-message$(EXEEXT)
-+ $(GCJLINK) $(test_message_LDFLAGS) $(test_message_OBJECTS) $(test_message_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/TestMessage.Po at am__quote@
-+
-+.java.o:
-+ at am__fastdepGCJ_TRUE@ if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepGCJ_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepGCJ_FALSE@ $(GCJCOMPILE) -c -o $@ $<
-+
-+.java.obj:
-+ at am__fastdepGCJ_TRUE@ if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepGCJ_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepGCJ_FALSE@ $(GCJCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-+
-+.java.lo:
-+ at am__fastdepGCJ_TRUE@ if $(LTGCJCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepGCJ_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepGCJ_FALSE@ $(LTGCJCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-jarDATA: $(jar_DATA)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(jardir)" || $(mkdir_p) "$(DESTDIR)$(jardir)"
-+ @list='$(jar_DATA)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(jarDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(jardir)/$$f'"; \
-+ $(jarDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(jardir)/$$f"; \
-+ done
-+
-+uninstall-jarDATA:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(jar_DATA)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(jardir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(jardir)/$$f"; \
-+ done
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-recursive
-+all-am: Makefile $(PROGRAMS) $(DATA)
-+installdirs: installdirs-recursive
-+installdirs-am:
-+ for dir in "$(DESTDIR)$(jardir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-recursive
-+
-+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-+ mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am: install-jarDATA
-+
-+install-exec-am:
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am uninstall-jarDATA
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
-+ clean clean-generic clean-libtool clean-noinstPROGRAMS \
-+ clean-recursive ctags ctags-recursive distclean \
-+ distclean-compile distclean-generic distclean-libtool \
-+ distclean-recursive distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-exec install-exec-am install-info \
-+ install-info-am install-jarDATA install-man install-strip \
-+ installcheck installcheck-am installdirs installdirs-am \
-+ maintainer-clean maintainer-clean-generic \
-+ maintainer-clean-recursive mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
-+ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
-+ uninstall-info-am uninstall-jarDATA
-+
-+
-+dbus-1.jar:
-+ - at rm -f dbus-1.jar
-+ find org -type d -o -type f -name '*.class' | \
-+ sed -e '/\/\./d' | \
-+ $(JAR) cfM0E@ $@
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/gcj/TestMessage.java dbus-0.61/gcj/TestMessage.java
---- dbus-0.61.orig/gcj/TestMessage.java 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/TestMessage.java 2003-06-23 19:39:48.000000000 +0200
-@@ -0,0 +1,8 @@
-+import org.freedesktop.dbus.Message;
-+
-+public class TestMessage {
-+ public static void main (String[] args) {
-+ Message msg = new Message ("test", "bla");
-+
-+ }
-+}
-diff -Naur dbus-0.61.orig/gcj/org/Makefile.am dbus-0.61/gcj/org/Makefile.am
---- dbus-0.61.orig/gcj/org/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/org/Makefile.am 2003-06-23 19:39:48.000000000 +0200
-@@ -0,0 +1 @@
-+SUBDIRS=freedesktop
-diff -Naur dbus-0.61.orig/gcj/org/Makefile.in dbus-0.61/gcj/org/Makefile.in
---- dbus-0.61.orig/gcj/org/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/org/Makefile.in 2006-02-27 22:34:31.000000000 +0100
-@@ -0,0 +1,625 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = gcj/org
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+SOURCES =
-+DIST_SOURCES =
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+ETAGS = etags
-+CTAGS = ctags
-+DIST_SUBDIRS = $(SUBDIRS)
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+SUBDIRS = freedesktop
-+all: all-recursive
-+
-+.SUFFIXES:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcj/org/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu gcj/org/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-recursive
-+all-am: Makefile
-+installdirs: installdirs-recursive
-+installdirs-am:
-+install: install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-recursive
-+
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-libtool \
-+ distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
-+ clean clean-generic clean-libtool clean-recursive ctags \
-+ ctags-recursive distclean distclean-generic distclean-libtool \
-+ distclean-recursive distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-exec install-exec-am install-info \
-+ install-info-am install-man install-strip installcheck \
-+ installcheck-am installdirs installdirs-am maintainer-clean \
-+ maintainer-clean-generic maintainer-clean-recursive \
-+ mostlyclean mostlyclean-generic mostlyclean-libtool \
-+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
-+ uninstall uninstall-am uninstall-info-am
-+
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/gcj/org/freedesktop/Makefile.am dbus-0.61/gcj/org/freedesktop/Makefile.am
---- dbus-0.61.orig/gcj/org/freedesktop/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/org/freedesktop/Makefile.am 2003-06-23 19:39:48.000000000 +0200
-@@ -0,0 +1 @@
-+SUBDIRS=dbus
-diff -Naur dbus-0.61.orig/gcj/org/freedesktop/Makefile.in dbus-0.61/gcj/org/freedesktop/Makefile.in
---- dbus-0.61.orig/gcj/org/freedesktop/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/org/freedesktop/Makefile.in 2006-02-27 22:34:31.000000000 +0100
-@@ -0,0 +1,625 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = gcj/org/freedesktop
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+SOURCES =
-+DIST_SOURCES =
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+ETAGS = etags
-+CTAGS = ctags
-+DIST_SUBDIRS = $(SUBDIRS)
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+SUBDIRS = dbus
-+all: all-recursive
-+
-+.SUFFIXES:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcj/org/freedesktop/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu gcj/org/freedesktop/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-recursive
-+all-am: Makefile
-+installdirs: installdirs-recursive
-+installdirs-am:
-+install: install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-recursive
-+
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-libtool \
-+ distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
-+ clean clean-generic clean-libtool clean-recursive ctags \
-+ ctags-recursive distclean distclean-generic distclean-libtool \
-+ distclean-recursive distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-exec install-exec-am install-info \
-+ install-info-am install-man install-strip installcheck \
-+ installcheck-am installdirs installdirs-am maintainer-clean \
-+ maintainer-clean-generic maintainer-clean-recursive \
-+ mostlyclean mostlyclean-generic mostlyclean-libtool \
-+ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
-+ uninstall uninstall-am uninstall-info-am
-+
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/gcj/org/freedesktop/dbus/Makefile.am dbus-0.61/gcj/org/freedesktop/dbus/Makefile.am
---- dbus-0.61.orig/gcj/org/freedesktop/dbus/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/org/freedesktop/dbus/Makefile.am 2005-09-07 00:38:54.000000000 +0200
-@@ -0,0 +1,57 @@
-+INCLUDES= \
-+ -I$(top_srcdir) \
-+ -I$(top_builddir)/gcj/org/freedesktop/dbus \
-+ $(DBUS_CLIENT_CFLAGS)
-+
-+
-+GCJH = gcjh
-+
-+lib_LTLIBRARIES = libdbus-gcj-1.la
-+
-+MOSTLYCLEANFILES = $(generated_headers) $(java_class_files)
-+
-+
-+java_sources = \
-+ Message.java
-+
-+native_sources = \
-+ natMessage.cc
-+
-+generated_headers = $(java_sources:.java=.h)
-+java_class_files = $(java_sources:.java=.class)
-+native_object_files = $(native_sources:.cc=.lo)
-+java_object_files = $(java_sources:.java=.lo)
-+
-+.class.h:
-+ $(GCJH) $(basename $<)
-+
-+.java.class:
-+ $(GCJ) -C $< -d ../../..
-+
-+.cc.lo:
-+ $(LIBTOOL) --mode=compile $(CXX) $(INCLUDES) $(CXXFLAGS) $(CPPFLAGS) -c -o '$@' '$<'
-+
-+.java.lo:
-+ $(LIBTOOL) --mode=compile $(GCJ) $(INCLUDES) $(GCJ_FLAGS) -c -o '$@' '$<'
-+
-+libdbus_gcj_1_la_SOURCES =
-+
-+libdbus_gcj_1_la_DEPENDENCIES = \
-+ $(generated_headers) \
-+ $(native_object_files) \
-+ $(java_object_files) \
-+ $(java_class_files)
-+
-+
-+libdbus_gcj_1_la_LDFLAGS = -no-undefined
-+
-+libdbus_gcj_1_la_LIBADD = \
-+ $(native_object_files) \
-+ $(java_object_files)
-+
-+EXTRA_libdbus_gcj_1_la_SOURCES = \
-+ $(native_sources) \
-+ $(java_sources)
-+
-+libdbus_gcj_1_la_LINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
-+
-diff -Naur dbus-0.61.orig/gcj/org/freedesktop/dbus/Makefile.in dbus-0.61/gcj/org/freedesktop/dbus/Makefile.in
---- dbus-0.61.orig/gcj/org/freedesktop/dbus/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/org/freedesktop/dbus/Makefile.in 2006-02-27 22:34:32.000000000 +0100
-@@ -0,0 +1,672 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../../../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = gcj/org/freedesktop/dbus
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+am__installdirs = "$(DESTDIR)$(libdir)"
-+libLTLIBRARIES_INSTALL = $(INSTALL)
-+LTLIBRARIES = $(lib_LTLIBRARIES)
-+am__DEPENDENCIES_1 = natMessage.lo
-+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
-+am__DEPENDENCIES_3 = Message.lo
-+am__DEPENDENCIES_4 = $(am__DEPENDENCIES_3)
-+am_libdbus_gcj_1_la_OBJECTS =
-+libdbus_gcj_1_la_OBJECTS = $(am_libdbus_gcj_1_la_OBJECTS)
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CXXFLAGS) $(CXXFLAGS)
-+CXXLD = $(CXX)
-+CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+GCJCOMPILE = $(GCJ) $(AM_GCJFLAGS) $(GCJFLAGS)
-+LTGCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ) \
-+ $(AM_GCJFLAGS) $(GCJFLAGS)
-+GCJLD = $(GCJ)
-+GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJLD) $(AM_GCJFLAGS) \
-+ $(GCJFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(libdbus_gcj_1_la_SOURCES) \
-+ $(EXTRA_libdbus_gcj_1_la_SOURCES)
-+DIST_SOURCES = $(libdbus_gcj_1_la_SOURCES) \
-+ $(EXTRA_libdbus_gcj_1_la_SOURCES)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+INCLUDES = \
-+ -I$(top_srcdir) \
-+ -I$(top_builddir)/gcj/org/freedesktop/dbus \
-+ $(DBUS_CLIENT_CFLAGS)
-+
-+GCJH = gcjh
-+lib_LTLIBRARIES = libdbus-gcj-1.la
-+MOSTLYCLEANFILES = $(generated_headers) $(java_class_files)
-+java_sources = \
-+ Message.java
-+
-+native_sources = \
-+ natMessage.cc
-+
-+generated_headers = $(java_sources:.java=.h)
-+java_class_files = $(java_sources:.java=.class)
-+native_object_files = $(native_sources:.cc=.lo)
-+java_object_files = $(java_sources:.java=.lo)
-+libdbus_gcj_1_la_SOURCES =
-+libdbus_gcj_1_la_DEPENDENCIES = \
-+ $(generated_headers) \
-+ $(native_object_files) \
-+ $(java_object_files) \
-+ $(java_class_files)
-+
-+libdbus_gcj_1_la_LDFLAGS = -no-undefined
-+libdbus_gcj_1_la_LIBADD = \
-+ $(native_object_files) \
-+ $(java_object_files)
-+
-+EXTRA_libdbus_gcj_1_la_SOURCES = \
-+ $(native_sources) \
-+ $(java_sources)
-+
-+libdbus_gcj_1_la_LINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
-+all: all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .cc .class .h .java .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gcj/org/freedesktop/dbus/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu gcj/org/freedesktop/dbus/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ if test -f $$p; then \
-+ f=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-+ else :; fi; \
-+ done
-+
-+uninstall-libLTLIBRARIES:
-+ @$(NORMAL_UNINSTALL)
-+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ p=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
-+ done
-+
-+clean-libLTLIBRARIES:
-+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-+ test "$$dir" != "$$p" || dir=.; \
-+ echo "rm -f \"$${dir}/so_locations\""; \
-+ rm -f "$${dir}/so_locations"; \
-+ done
-+libdbus-gcj-1.la: $(libdbus_gcj_1_la_OBJECTS) $(libdbus_gcj_1_la_DEPENDENCIES)
-+ $(libdbus_gcj_1_la_LINK) -rpath $(libdir) $(libdbus_gcj_1_la_LDFLAGS) $(libdbus_gcj_1_la_OBJECTS) $(libdbus_gcj_1_la_LIBADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/Message.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/natMessage.Plo at am__quote@
-+
-+.cc.o:
-+ at am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
-+
-+.cc.obj:
-+ at am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-+
-+.java.o:
-+ at am__fastdepGCJ_TRUE@ if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepGCJ_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepGCJ_FALSE@ $(GCJCOMPILE) -c -o $@ $<
-+
-+.java.obj:
-+ at am__fastdepGCJ_TRUE@ if $(GCJCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepGCJ_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepGCJ_FALSE@ DEPDIR=$(DEPDIR) $(GCJDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepGCJ_FALSE@ $(GCJCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-am
-+all-am: Makefile $(LTLIBRARIES)
-+installdirs:
-+ for dir in "$(DESTDIR)$(libdir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-+ mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am: install-libLTLIBRARIES
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
-+
-+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-+ clean-libLTLIBRARIES clean-libtool ctags distclean \
-+ distclean-compile distclean-generic distclean-libtool \
-+ distclean-tags distdir dvi dvi-am html html-am info info-am \
-+ install install-am install-data install-data-am install-exec \
-+ install-exec-am install-info install-info-am \
-+ install-libLTLIBRARIES install-man install-strip installcheck \
-+ installcheck-am installdirs maintainer-clean \
-+ maintainer-clean-generic mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-+ tags uninstall uninstall-am uninstall-info-am \
-+ uninstall-libLTLIBRARIES
-+
-+
-+.class.h:
-+ $(GCJH) $(basename $<)
-+
-+.java.class:
-+ $(GCJ) -C $< -d ../../..
-+
-+.cc.lo:
-+ $(LIBTOOL) --mode=compile $(CXX) $(INCLUDES) $(CXXFLAGS) $(CPPFLAGS) -c -o '$@' '$<'
-+
-+.java.lo:
-+ $(LIBTOOL) --mode=compile $(GCJ) $(INCLUDES) $(GCJ_FLAGS) -c -o '$@' '$<'
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/gcj/org/freedesktop/dbus/Message.java dbus-0.61/gcj/org/freedesktop/dbus/Message.java
---- dbus-0.61.orig/gcj/org/freedesktop/dbus/Message.java 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/org/freedesktop/dbus/Message.java 2003-06-23 19:39:48.000000000 +0200
-@@ -0,0 +1,13 @@
-+package org.freedesktop.dbus;
-+
-+import gnu.gcj.RawData;
-+
-+public class Message {
-+ private RawData message;
-+
-+ public Message (String name, String destService) {
-+ this.message = dbus_message_new (name, destService);
-+ }
-+
-+ private static native RawData dbus_message_new (String name, String destService);
-+}
-diff -Naur dbus-0.61.orig/gcj/org/freedesktop/dbus/natMessage.cc dbus-0.61/gcj/org/freedesktop/dbus/natMessage.cc
---- dbus-0.61.orig/gcj/org/freedesktop/dbus/natMessage.cc 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/gcj/org/freedesktop/dbus/natMessage.cc 2003-06-23 19:39:48.000000000 +0200
-@@ -0,0 +1,20 @@
-+// This file was created by `gcjh -stubs'. -*- c++ -*-
-+//
-+// This file is intended to give you a head start on implementing native
-+// methods using CNI.
-+// Be aware: running `gcjh -stubs ' once more for this class may
-+// overwrite any edits you have made to this file.
-+
-+#include <Message.h>
-+#include <gcj/cni.h>
-+#include <java/lang/UnsupportedOperationException.h>
-+
-+#include <dbus/dbus.h>
-+
-+::gnu::gcj::RawData *
-+org::freedesktop::dbus::Message::dbus_message_new (::java::lang::String *, ::java::lang::String *)
-+{
-+ throw new ::java::lang::UnsupportedOperationException (JvNewStringLatin1 ("org::freedesktop::dbus::Message::dbus_message_new (::java::lang::String *, ::java::lang::String *) not implemented"));
-+}
-+
-+
-diff -Naur dbus-0.61.orig/glib/Makefile.am dbus-0.61/glib/Makefile.am
---- dbus-0.61.orig/glib/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/Makefile.am 2005-10-29 19:02:58.000000000 +0200
-@@ -0,0 +1,105 @@
-+SUBDIRS = . examples
-+
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GLIB_TOOL_CFLAGS) -DDBUS_COMPILATION=1 -DDBUS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\"
-+
-+lib_LTLIBRARIES=libdbus-glib-1.la
-+
-+dbus-glib-error-switch.h: $(top_srcdir)/dbus/dbus-protocol.h make-dbus-glib-error-switch.sh
-+ $(LIBTOOL) --mode=execute $(srcdir)/make-dbus-glib-error-switch.sh $(top_srcdir)/dbus/dbus-protocol.h $@
-+
-+BUILT_SOURCES = dbus-glib-error-switch.h
-+
-+CLEANFILES = $(BUILT_SOURCES)
-+
-+DBUS_GLIB_INTERNALS = \
-+ dbus-gtype-specialized.c \
-+ dbus-gutils.c \
-+ dbus-gutils.h \
-+ dbus-gsignature.c \
-+ dbus-gsignature.h \
-+ dbus-gvalue.h \
-+ dbus-gvalue-utils.c \
-+ dbus-gvalue-utils.h
-+
-+libdbus_glib_1_la_SOURCES = \
-+ dbus-glib-error-switch.h \
-+ dbus-glib.c \
-+ dbus-gmain.c \
-+ dbus-gmarshal.c \
-+ dbus-gmarshal.h \
-+ dbus-gobject.c \
-+ dbus-gobject.h \
-+ dbus-gproxy.c \
-+ dbus-gtest.c \
-+ dbus-gtest.h \
-+ dbus-gvalue.c \
-+ dbus-gvalue.h \
-+ dbus-gthread.c \
-+ $(DBUS_GLIB_INTERNALS)
-+
-+libdbus_glib_HEADERS = \
-+ dbus-gtype-specialized.h
-+
-+libdbus_glibdir = $(includedir)/dbus-1.0/dbus
-+
-+libdbus_glib_1_la_LIBADD= $(top_builddir)/dbus/libdbus-1.la $(DBUS_GLIB_LIBS)
-+## don't export symbols that start with "_" (we use this
-+## convention for internal symbols)
-+libdbus_glib_1_la_LDFLAGS= -export-symbols-regex "^[^_].*" -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -no-undefined
-+
-+# convenience lib used here and by dbus-viewer
-+noinst_LTLIBRARIES=libdbus-gtool.la
-+
-+libdbus_gtool_la_SOURCES = $(DBUS_GLIB_INTERNALS) \
-+ dbus-gidl.c \
-+ dbus-gidl.h \
-+ dbus-gloader-expat.c \
-+ dbus-gparser.c \
-+ dbus-gparser.h
-+
-+libdbus_gtool_la_LIBADD = libdbus-glib-1.la
-+
-+bin_PROGRAMS=dbus-binding-tool
-+
-+dbus_binding_tool_SOURCES = \
-+ dbus-binding-tool-glib.h \
-+ dbus-binding-tool-glib.c \
-+ dbus-glib-tool.h \
-+ dbus-glib-tool.c
-+
-+dbus_binding_tool_LDADD= libdbus-gtool.la $(DBUS_GLIB_LIBS) -lexpat
-+
-+## we just rebuilt these manually and check them into cvs; easier than
-+## convincing automake/make to do this properly
-+regenerate-built-sources:
-+ @GLIB_GENMARSHAL@ --prefix=_dbus_g_marshal dbus-gmarshal.list --header > dbus-gmarshal.h && \
-+ echo '#include "dbus-gmarshal.h"' > dbus-gmarshal.c && \
-+ @GLIB_GENMARSHAL@ --prefix=_dbus_g_marshal dbus-gmarshal.list --body >> dbus-gmarshal.c
-+
-+EXTRA_DIST=dbus-gmarshal.list make-dbus-glib-error-switch.sh
-+
-+if DBUS_BUILD_TESTS
-+
-+## we use noinst_PROGRAMS not check_PROGRAMS for TESTS so that we
-+## build even when not doing "make check"
-+noinst_PROGRAMS= $(TESTS)
-+
-+## note that TESTS has special meaning (stuff to use in make check)
-+## so if adding tests not to be run in make check, don't add them to
-+## TESTS
-+TESTS_ENVIRONMENT=DBUS_TEST_DATA=$(top_builddir)/test/data DBUS_TEST_HOMEDIR=$(top_builddir)/dbus
-+TESTS=dbus-glib-test
-+
-+## FIXME we aren't running dbus-glib-tool --self-test
-+
-+dbus_glib_test_SOURCES= \
-+ dbus-gtest-main.c
-+
-+dbus_glib_test_LDADD= $(top_builddir)/glib/libdbus-glib-1.la
-+
-+else
-+### not building tests
-+TESTS=
-+
-+endif
-+
-diff -Naur dbus-0.61.orig/glib/Makefile.in dbus-0.61/glib/Makefile.in
---- dbus-0.61.orig/glib/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/Makefile.in 2006-02-27 22:34:33.000000000 +0100
-@@ -0,0 +1,996 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+bin_PROGRAMS = dbus-binding-tool$(EXEEXT)
-+ at DBUS_BUILD_TESTS_TRUE@noinst_PROGRAMS = $(am__EXEEXT_1)
-+subdir = glib
-+DIST_COMMON = $(libdbus_glib_HEADERS) $(srcdir)/Makefile.am \
-+ $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
-+ "$(DESTDIR)$(libdbus_glibdir)"
-+libLTLIBRARIES_INSTALL = $(INSTALL)
-+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
-+am__DEPENDENCIES_1 =
-+libdbus_glib_1_la_DEPENDENCIES = $(top_builddir)/dbus/libdbus-1.la \
-+ $(am__DEPENDENCIES_1)
-+am__objects_1 = dbus-gtype-specialized.lo dbus-gutils.lo \
-+ dbus-gsignature.lo dbus-gvalue-utils.lo
-+am_libdbus_glib_1_la_OBJECTS = dbus-glib.lo dbus-gmain.lo \
-+ dbus-gmarshal.lo dbus-gobject.lo dbus-gproxy.lo dbus-gtest.lo \
-+ dbus-gvalue.lo dbus-gthread.lo $(am__objects_1)
-+libdbus_glib_1_la_OBJECTS = $(am_libdbus_glib_1_la_OBJECTS)
-+libdbus_gtool_la_DEPENDENCIES = libdbus-glib-1.la
-+am_libdbus_gtool_la_OBJECTS = $(am__objects_1) dbus-gidl.lo \
-+ dbus-gloader-expat.lo dbus-gparser.lo
-+libdbus_gtool_la_OBJECTS = $(am_libdbus_gtool_la_OBJECTS)
-+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-+ at DBUS_BUILD_TESTS_TRUE@am__EXEEXT_1 = dbus-glib-test$(EXEEXT)
-+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
-+am_dbus_binding_tool_OBJECTS = dbus-binding-tool-glib.$(OBJEXT) \
-+ dbus-glib-tool.$(OBJEXT)
-+dbus_binding_tool_OBJECTS = $(am_dbus_binding_tool_OBJECTS)
-+dbus_binding_tool_DEPENDENCIES = libdbus-gtool.la \
-+ $(am__DEPENDENCIES_1)
-+am__dbus_glib_test_SOURCES_DIST = dbus-gtest-main.c
-+ at DBUS_BUILD_TESTS_TRUE@am_dbus_glib_test_OBJECTS = \
-+ at DBUS_BUILD_TESTS_TRUE@ dbus-gtest-main.$(OBJEXT)
-+dbus_glib_test_OBJECTS = $(am_dbus_glib_test_OBJECTS)
-+ at DBUS_BUILD_TESTS_TRUE@dbus_glib_test_DEPENDENCIES = \
-+ at DBUS_BUILD_TESTS_TRUE@ $(top_builddir)/glib/libdbus-glib-1.la
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(libdbus_glib_1_la_SOURCES) $(libdbus_gtool_la_SOURCES) \
-+ $(dbus_binding_tool_SOURCES) $(dbus_glib_test_SOURCES)
-+DIST_SOURCES = $(libdbus_glib_1_la_SOURCES) \
-+ $(libdbus_gtool_la_SOURCES) $(dbus_binding_tool_SOURCES) \
-+ $(am__dbus_glib_test_SOURCES_DIST)
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+libdbus_glibHEADERS_INSTALL = $(INSTALL_HEADER)
-+HEADERS = $(libdbus_glib_HEADERS)
-+ETAGS = etags
-+CTAGS = ctags
-+DIST_SUBDIRS = $(SUBDIRS)
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+SUBDIRS = . examples
-+INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GLIB_TOOL_CFLAGS) -DDBUS_COMPILATION=1 -DDBUS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\"
-+lib_LTLIBRARIES = libdbus-glib-1.la
-+BUILT_SOURCES = dbus-glib-error-switch.h
-+CLEANFILES = $(BUILT_SOURCES)
-+DBUS_GLIB_INTERNALS = \
-+ dbus-gtype-specialized.c \
-+ dbus-gutils.c \
-+ dbus-gutils.h \
-+ dbus-gsignature.c \
-+ dbus-gsignature.h \
-+ dbus-gvalue.h \
-+ dbus-gvalue-utils.c \
-+ dbus-gvalue-utils.h
-+
-+libdbus_glib_1_la_SOURCES = \
-+ dbus-glib-error-switch.h \
-+ dbus-glib.c \
-+ dbus-gmain.c \
-+ dbus-gmarshal.c \
-+ dbus-gmarshal.h \
-+ dbus-gobject.c \
-+ dbus-gobject.h \
-+ dbus-gproxy.c \
-+ dbus-gtest.c \
-+ dbus-gtest.h \
-+ dbus-gvalue.c \
-+ dbus-gvalue.h \
-+ dbus-gthread.c \
-+ $(DBUS_GLIB_INTERNALS)
-+
-+libdbus_glib_HEADERS = \
-+ dbus-gtype-specialized.h
-+
-+libdbus_glibdir = $(includedir)/dbus-1.0/dbus
-+libdbus_glib_1_la_LIBADD = $(top_builddir)/dbus/libdbus-1.la $(DBUS_GLIB_LIBS)
-+libdbus_glib_1_la_LDFLAGS = -export-symbols-regex "^[^_].*" -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -no-undefined
-+
-+# convenience lib used here and by dbus-viewer
-+noinst_LTLIBRARIES = libdbus-gtool.la
-+libdbus_gtool_la_SOURCES = $(DBUS_GLIB_INTERNALS) \
-+ dbus-gidl.c \
-+ dbus-gidl.h \
-+ dbus-gloader-expat.c \
-+ dbus-gparser.c \
-+ dbus-gparser.h
-+
-+libdbus_gtool_la_LIBADD = libdbus-glib-1.la
-+dbus_binding_tool_SOURCES = \
-+ dbus-binding-tool-glib.h \
-+ dbus-binding-tool-glib.c \
-+ dbus-glib-tool.h \
-+ dbus-glib-tool.c
-+
-+dbus_binding_tool_LDADD = libdbus-gtool.la $(DBUS_GLIB_LIBS) -lexpat
-+EXTRA_DIST = dbus-gmarshal.list make-dbus-glib-error-switch.sh
-+ at DBUS_BUILD_TESTS_TRUE@TESTS_ENVIRONMENT = DBUS_TEST_DATA=$(top_builddir)/test/data DBUS_TEST_HOMEDIR=$(top_builddir)/dbus
-+
-+### not building tests
-+ at DBUS_BUILD_TESTS_FALSE@TESTS =
-+ at DBUS_BUILD_TESTS_TRUE@TESTS = dbus-glib-test
-+ at DBUS_BUILD_TESTS_TRUE@dbus_glib_test_SOURCES = \
-+ at DBUS_BUILD_TESTS_TRUE@ dbus-gtest-main.c
-+
-+ at DBUS_BUILD_TESTS_TRUE@dbus_glib_test_LDADD = $(top_builddir)/glib/libdbus-glib-1.la
-+all: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu glib/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu glib/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ if test -f $$p; then \
-+ f=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-+ else :; fi; \
-+ done
-+
-+uninstall-libLTLIBRARIES:
-+ @$(NORMAL_UNINSTALL)
-+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ p=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
-+ done
-+
-+clean-libLTLIBRARIES:
-+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-+ test "$$dir" != "$$p" || dir=.; \
-+ echo "rm -f \"$${dir}/so_locations\""; \
-+ rm -f "$${dir}/so_locations"; \
-+ done
-+
-+clean-noinstLTLIBRARIES:
-+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-+ test "$$dir" != "$$p" || dir=.; \
-+ echo "rm -f \"$${dir}/so_locations\""; \
-+ rm -f "$${dir}/so_locations"; \
-+ done
-+libdbus-glib-1.la: $(libdbus_glib_1_la_OBJECTS) $(libdbus_glib_1_la_DEPENDENCIES)
-+ $(LINK) -rpath $(libdir) $(libdbus_glib_1_la_LDFLAGS) $(libdbus_glib_1_la_OBJECTS) $(libdbus_glib_1_la_LIBADD) $(LIBS)
-+libdbus-gtool.la: $(libdbus_gtool_la_OBJECTS) $(libdbus_gtool_la_DEPENDENCIES)
-+ $(LINK) $(libdbus_gtool_la_LDFLAGS) $(libdbus_gtool_la_OBJECTS) $(libdbus_gtool_la_LIBADD) $(LIBS)
-+install-binPROGRAMS: $(bin_PROGRAMS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ if test -f $$p \
-+ || test -f $$p1 \
-+ ; then \
-+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
-+ else :; fi; \
-+ done
-+
-+uninstall-binPROGRAMS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
-+ done
-+
-+clean-binPROGRAMS:
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+dbus-binding-tool$(EXEEXT): $(dbus_binding_tool_OBJECTS) $(dbus_binding_tool_DEPENDENCIES)
-+ @rm -f dbus-binding-tool$(EXEEXT)
-+ $(LINK) $(dbus_binding_tool_LDFLAGS) $(dbus_binding_tool_OBJECTS) $(dbus_binding_tool_LDADD) $(LIBS)
-+dbus-glib-test$(EXEEXT): $(dbus_glib_test_OBJECTS) $(dbus_glib_test_DEPENDENCIES)
-+ @rm -f dbus-glib-test$(EXEEXT)
-+ $(LINK) $(dbus_glib_test_LDFLAGS) $(dbus_glib_test_OBJECTS) $(dbus_glib_test_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-binding-tool-glib.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gidl.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-glib-tool.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-glib.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gloader-expat.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gmain.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gmarshal.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gobject.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gparser.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gproxy.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gsignature.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gtest-main.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gtest.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gthread.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gtype-specialized.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gutils.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gvalue-utils.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-gvalue.Plo at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-libdbus_glibHEADERS: $(libdbus_glib_HEADERS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(libdbus_glibdir)" || $(mkdir_p) "$(DESTDIR)$(libdbus_glibdir)"
-+ @list='$(libdbus_glib_HEADERS)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(libdbus_glibHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libdbus_glibdir)/$$f'"; \
-+ $(libdbus_glibHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libdbus_glibdir)/$$f"; \
-+ done
-+
-+uninstall-libdbus_glibHEADERS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(libdbus_glib_HEADERS)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(libdbus_glibdir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(libdbus_glibdir)/$$f"; \
-+ done
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+check-TESTS: $(TESTS)
-+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-+ srcdir=$(srcdir); export srcdir; \
-+ list='$(TESTS)'; \
-+ if test -n "$$list"; then \
-+ for tst in $$list; do \
-+ if test -f ./$$tst; then dir=./; \
-+ elif test -f $$tst; then dir=; \
-+ else dir="$(srcdir)/"; fi; \
-+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xpass=`expr $$xpass + 1`; \
-+ failed=`expr $$failed + 1`; \
-+ echo "XPASS: $$tst"; \
-+ ;; \
-+ *) \
-+ echo "PASS: $$tst"; \
-+ ;; \
-+ esac; \
-+ elif test $$? -ne 77; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xfail=`expr $$xfail + 1`; \
-+ echo "XFAIL: $$tst"; \
-+ ;; \
-+ *) \
-+ failed=`expr $$failed + 1`; \
-+ echo "FAIL: $$tst"; \
-+ ;; \
-+ esac; \
-+ else \
-+ skip=`expr $$skip + 1`; \
-+ echo "SKIP: $$tst"; \
-+ fi; \
-+ done; \
-+ if test "$$failed" -eq 0; then \
-+ if test "$$xfail" -eq 0; then \
-+ banner="All $$all tests passed"; \
-+ else \
-+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-+ fi; \
-+ else \
-+ if test "$$xpass" -eq 0; then \
-+ banner="$$failed of $$all tests failed"; \
-+ else \
-+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-+ fi; \
-+ fi; \
-+ dashes="$$banner"; \
-+ skipped=""; \
-+ if test "$$skip" -ne 0; then \
-+ skipped="($$skip tests were not run)"; \
-+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$skipped"; \
-+ fi; \
-+ report=""; \
-+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-+ report="Please report to $(PACKAGE_BUGREPORT)"; \
-+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$report"; \
-+ fi; \
-+ dashes=`echo "$$dashes" | sed s/./=/g`; \
-+ echo "$$dashes"; \
-+ echo "$$banner"; \
-+ test -z "$$skipped" || echo "$$skipped"; \
-+ test -z "$$report" || echo "$$report"; \
-+ echo "$$dashes"; \
-+ test "$$failed" -eq 0; \
-+ else :; fi
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-+check: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
-+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
-+install-binPROGRAMS: install-libLTLIBRARIES
-+
-+installdirs: installdirs-recursive
-+installdirs-am:
-+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdbus_glibdir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-+clean: clean-recursive
-+
-+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
-+ clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \
-+ mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am: install-libdbus_glibHEADERS
-+
-+install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-binPROGRAMS uninstall-info-am \
-+ uninstall-libLTLIBRARIES uninstall-libdbus_glibHEADERS
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-TESTS \
-+ check-am clean clean-binPROGRAMS clean-generic \
-+ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \
-+ clean-noinstPROGRAMS clean-recursive ctags ctags-recursive \
-+ distclean distclean-compile distclean-generic \
-+ distclean-libtool distclean-recursive distclean-tags distdir \
-+ dvi dvi-am html html-am info info-am install install-am \
-+ install-binPROGRAMS install-data install-data-am install-exec \
-+ install-exec-am install-info install-info-am \
-+ install-libLTLIBRARIES install-libdbus_glibHEADERS install-man \
-+ install-strip installcheck installcheck-am installdirs \
-+ installdirs-am maintainer-clean maintainer-clean-generic \
-+ maintainer-clean-recursive mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
-+ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
-+ uninstall-binPROGRAMS uninstall-info-am \
-+ uninstall-libLTLIBRARIES uninstall-libdbus_glibHEADERS
-+
-+
-+dbus-glib-error-switch.h: $(top_srcdir)/dbus/dbus-protocol.h make-dbus-glib-error-switch.sh
-+ $(LIBTOOL) --mode=execute $(srcdir)/make-dbus-glib-error-switch.sh $(top_srcdir)/dbus/dbus-protocol.h $@
-+
-+regenerate-built-sources:
-+ @GLIB_GENMARSHAL@ --prefix=_dbus_g_marshal dbus-gmarshal.list --header > dbus-gmarshal.h && \
-+ echo '#include "dbus-gmarshal.h"' > dbus-gmarshal.c && \
-+ @GLIB_GENMARSHAL@ --prefix=_dbus_g_marshal dbus-gmarshal.list --body >> dbus-gmarshal.c
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/glib/dbus-binding-tool-glib.c dbus-0.61/glib/dbus-binding-tool-glib.c
---- dbus-0.61.orig/glib/dbus-binding-tool-glib.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-binding-tool-glib.c 2006-02-13 23:30:11.000000000 +0100
-@@ -0,0 +1,1625 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-binding-tool-glib.c: Output C glue
-+ *
-+ * Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
-+ * Copyright (C) 2005 Nokia
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "dbus/dbus-glib.h"
-+#include "dbus-gidl.h"
-+#include "dbus-gparser.h"
-+#include "dbus-gutils.h"
-+#include "dbus-gtype-specialized.h"
-+#include "dbus-gsignature.h"
-+#include "dbus-gvalue-utils.h"
-+#include "dbus-glib-tool.h"
-+#include "dbus-binding-tool-glib.h"
-+#include <glib/gi18n.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <unistd.h>
-+
-+#define MARSHAL_PREFIX "dbus_glib_marshal_"
-+
-+typedef struct
-+{
-+ gboolean ignore_unsupported;
-+ const char* prefix;
-+ GIOChannel *channel;
-+
-+ GError **error;
-+
-+ GHashTable *generated;
-+ GString *blob;
-+ GString *signal_blob;
-+ GString *property_blob;
-+ guint count;
-+} DBusBindingToolCData;
-+
-+static gboolean gather_marshallers (BaseInfo *base, DBusBindingToolCData *data, GError **error);
-+static gboolean generate_glue (BaseInfo *base, DBusBindingToolCData *data, GError **error);
-+static gboolean generate_client_glue (BaseInfo *base, DBusBindingToolCData *data, GError **error);
-+
-+static const char *
-+dbus_g_type_get_marshal_name (GType gtype)
-+{
-+ switch (G_TYPE_FUNDAMENTAL (gtype))
-+ {
-+ case G_TYPE_NONE:
-+ return "NONE";
-+ case G_TYPE_BOOLEAN:
-+ return "BOOLEAN";
-+ case G_TYPE_UCHAR:
-+ return "UCHAR";
-+ case G_TYPE_INT:
-+ return "INT";
-+ case G_TYPE_UINT:
-+ return "UINT";
-+ case G_TYPE_INT64:
-+ return "INT64";
-+ case G_TYPE_UINT64:
-+ return "UINT64";
-+ case G_TYPE_DOUBLE:
-+ return "DOUBLE";
-+ case G_TYPE_STRING:
-+ return "STRING";
-+ case G_TYPE_POINTER:
-+ return "POINTER";
-+ case G_TYPE_BOXED:
-+ return "BOXED";
-+ case G_TYPE_OBJECT:
-+ return "OBJECT";
-+ default:
-+ return NULL;
-+ }
-+}
-+
-+/* This entire function is kind of...ugh. */
-+static const char *
-+dbus_g_type_get_c_name (GType gtype)
-+{
-+ GType subtype;
-+ if (dbus_g_type_is_struct (gtype))
-+ {
-+ return "GValueArray";
-+ }
-+ if (dbus_g_type_is_collection (gtype))
-+ {
-+ subtype = dbus_g_type_get_collection_specialization(gtype);
-+ if (_dbus_g_type_is_fixed (subtype))
-+ return "GArray";
-+ else
-+ return "GPtrArray";
-+ }
-+
-+ if (dbus_g_type_is_map (gtype))
-+ return "GHashTable";
-+
-+ if (g_type_is_a (gtype, G_TYPE_STRING))
-+ return "char *";
-+
-+ /* This one is even more hacky...we get an extra *
-+ * because G_TYPE_STRV is a G_TYPE_BOXED
-+ */
-+ if (g_type_is_a (gtype, G_TYPE_STRV))
-+ return "char *";
-+
-+ if (g_type_is_a (gtype, DBUS_TYPE_G_OBJECT_PATH))
-+ return "char";
-+
-+ return g_type_name (gtype);
-+}
-+
-+static gboolean
-+compute_gsignature (MethodInfo *method, GType *rettype, GArray **params, GError **error)
-+{
-+ GSList *elt;
-+ GType retval_type;
-+ GArray *ret;
-+ gboolean is_async;
-+ const char *arg_type;
-+ gboolean retval_signals_error;
-+
-+ is_async = method_info_get_annotation (method, DBUS_GLIB_ANNOTATION_ASYNC) != NULL;
-+ retval_signals_error = FALSE;
-+
-+ ret = g_array_new (TRUE, TRUE, sizeof (GType));
-+
-+ if (is_async)
-+ retval_type = G_TYPE_NONE;
-+ else
-+ {
-+ gboolean found_retval;
-+
-+ /* Look for return value */
-+ found_retval = FALSE;
-+ for (elt = method_info_get_args (method); elt; elt = elt->next)
-+ {
-+ ArgInfo *arg = elt->data;
-+ const char *returnval_annotation;
-+
-+ returnval_annotation = arg_info_get_annotation (arg, DBUS_GLIB_ANNOTATION_RETURNVAL);
-+ if (returnval_annotation != NULL)
-+ {
-+ arg_type = arg_info_get_type (arg);
-+ retval_type = _dbus_gtype_from_signature (arg_type, FALSE);
-+ if (retval_type == G_TYPE_INVALID)
-+ goto invalid_type;
-+ found_retval = TRUE;
-+ if (!strcmp (returnval_annotation, "error"))
-+ retval_signals_error = TRUE;
-+ break;
-+ }
-+ }
-+ if (!found_retval)
-+ {
-+ retval_type = G_TYPE_BOOLEAN;
-+ retval_signals_error = TRUE;
-+ }
-+ }
-+
-+ *rettype = retval_type;
-+
-+ /* Handle all input arguments */
-+ for (elt = method_info_get_args (method); elt; elt = elt->next)
-+ {
-+ ArgInfo *arg = elt->data;
-+ if (arg_info_get_direction (arg) == ARG_IN)
-+ {
-+ GType gtype;
-+
-+ arg_type = arg_info_get_type (arg);
-+ gtype = _dbus_gtype_from_signature (arg_type, FALSE);
-+ if (gtype == G_TYPE_INVALID)
-+ goto invalid_type;
-+
-+ g_array_append_val (ret, gtype);
-+ }
-+ }
-+
-+ if (!is_async)
-+ {
-+ /* Append pointer for each out arg storage */
-+ for (elt = method_info_get_args (method); elt; elt = elt->next)
-+ {
-+ ArgInfo *arg = elt->data;
-+
-+ /* Skip return value */
-+ if (arg_info_get_annotation (arg, DBUS_GLIB_ANNOTATION_RETURNVAL) != NULL)
-+ continue;
-+
-+ if (arg_info_get_direction (arg) == ARG_OUT)
-+ {
-+ GType gtype;
-+ arg_type = arg_info_get_type (arg);
-+ gtype = _dbus_gtype_from_signature (arg_type, FALSE);
-+ if (gtype == G_TYPE_INVALID)
-+ goto invalid_type;
-+ /* We actually just need a pointer for the return value
-+ storage */
-+ gtype = G_TYPE_POINTER;
-+ g_array_append_val (ret, gtype);
-+ }
-+ }
-+
-+ if (retval_signals_error)
-+ {
-+ /* Final GError parameter */
-+ GType gtype = G_TYPE_POINTER;
-+ g_array_append_val (ret, gtype);
-+ }
-+ }
-+ else
-+ {
-+ /* Context pointer */
-+ GType gtype = G_TYPE_POINTER;
-+ g_array_append_val (ret, gtype);
-+ }
-+
-+ *params = ret;
-+ return TRUE;
-+
-+ invalid_type:
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_UNSUPPORTED_CONVERSION,
-+ _("Unsupported conversion from D-BUS type %s to glib-genmarshal type"),
-+ arg_type);
-+ return FALSE;
-+}
-+
-+
-+static char *
-+compute_marshaller (MethodInfo *method, GError **error)
-+{
-+ GArray *signature;
-+ GType rettype;
-+ const char *marshal_name;
-+ GString *ret;
-+ guint i;
-+
-+ if (!compute_gsignature (method, &rettype, &signature, error))
-+ return NULL;
-+
-+ ret = g_string_new ("");
-+ marshal_name = dbus_g_type_get_marshal_name (rettype);
-+ g_assert (marshal_name != NULL);
-+ g_string_append (ret, marshal_name);
-+ g_string_append_c (ret, ':');
-+ for (i = 0; i < signature->len; i++)
-+ {
-+ marshal_name = dbus_g_type_get_marshal_name (g_array_index (signature, GType, i));
-+ g_assert (marshal_name != NULL);
-+ g_string_append (ret, marshal_name);
-+ if (i < signature->len - 1)
-+ g_string_append_c (ret, ',');
-+ }
-+ if (signature->len == 0)
-+ {
-+ marshal_name = dbus_g_type_get_marshal_name (G_TYPE_NONE);
-+ g_assert (marshal_name != NULL);
-+ g_string_append (ret, marshal_name);
-+ }
-+ g_array_free (signature, TRUE);
-+ return g_string_free (ret, FALSE);
-+}
-+
-+static char *
-+compute_marshaller_name (MethodInfo *method, const char *prefix, GError **error)
-+{
-+ GString *ret;
-+ GArray *signature;
-+ GType rettype;
-+ const char *marshal_name;
-+ guint i;
-+
-+ if (!compute_gsignature (method, &rettype, &signature, error))
-+ return NULL;
-+
-+ ret = g_string_new (MARSHAL_PREFIX);
-+ g_string_append (ret, prefix);
-+ g_string_append_c (ret, '_');
-+
-+ marshal_name = dbus_g_type_get_marshal_name (rettype);
-+ g_assert (marshal_name != NULL);
-+ g_string_append (ret, marshal_name);
-+ g_string_append (ret, "__");
-+ for (i = 0; i < signature->len; i++)
-+ {
-+ marshal_name = dbus_g_type_get_marshal_name (g_array_index (signature, GType, i));
-+ g_assert (marshal_name != NULL);
-+ g_string_append (ret, marshal_name);
-+ if (i < signature->len - 1)
-+ g_string_append_c (ret, '_');
-+ }
-+ if (signature->len == 0)
-+ {
-+ marshal_name = dbus_g_type_get_marshal_name (G_TYPE_NONE);
-+ g_assert (marshal_name != NULL);
-+ g_string_append (ret, marshal_name);
-+ }
-+ g_array_free (signature, TRUE);
-+ return g_string_free (ret, FALSE);
-+}
-+
-+static gboolean
-+gather_marshallers_list (GSList *list, DBusBindingToolCData *data, GError **error)
-+{
-+ GSList *tmp;
-+
-+ tmp = list;
-+ while (tmp != NULL)
-+ {
-+ if (!gather_marshallers (tmp->data, data, error))
-+ return FALSE;
-+ tmp = tmp->next;
-+ }
-+ return TRUE;
-+}
-+
-+static gboolean
-+gather_marshallers (BaseInfo *base, DBusBindingToolCData *data, GError **error)
-+{
-+ if (base_info_get_type (base) == INFO_TYPE_NODE)
-+ {
-+ if (!gather_marshallers_list (node_info_get_nodes ((NodeInfo *) base),
-+ data, error))
-+ return FALSE;
-+ if (!gather_marshallers_list (node_info_get_interfaces ((NodeInfo *) base),
-+ data, error))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ InterfaceInfo *interface;
-+ GSList *methods;
-+ GSList *tmp;
-+ const char *interface_c_name;
-+
-+ interface = (InterfaceInfo *) base;
-+ interface_c_name = interface_info_get_annotation (interface, DBUS_GLIB_ANNOTATION_C_SYMBOL);
-+ if (interface_c_name == NULL)
-+ {
-+ if (!data->prefix)
-+ return TRUE;
-+ }
-+
-+ methods = interface_info_get_methods (interface);
-+
-+ /* Generate the necessary marshallers for the methods. */
-+
-+ for (tmp = methods; tmp != NULL; tmp = g_slist_next (tmp))
-+ {
-+ MethodInfo *method;
-+ char *marshaller_name;
-+
-+ method = (MethodInfo *) tmp->data;
-+
-+ marshaller_name = compute_marshaller (method, error);
-+ if (!marshaller_name)
-+ return FALSE;
-+
-+ if (g_hash_table_lookup (data->generated, marshaller_name))
-+ {
-+ g_free (marshaller_name);
-+ continue;
-+ }
-+
-+ g_hash_table_insert (data->generated, marshaller_name, NULL);
-+ }
-+
-+ }
-+ return TRUE;
-+}
-+
-+static gboolean
-+generate_glue_list (GSList *list, DBusBindingToolCData *data, GError **error)
-+{
-+ GSList *tmp;
-+
-+ tmp = list;
-+ while (tmp != NULL)
-+ {
-+ if (!generate_glue (tmp->data, data, error))
-+ return FALSE;
-+ tmp = tmp->next;
-+ }
-+ return TRUE;
-+}
-+
-+#define WRITE_OR_LOSE(x) do { gsize bytes_written; if (!g_io_channel_write_chars (channel, x, -1, &bytes_written, error)) goto io_lose; } while (0)
-+
-+static gboolean
-+write_printf_to_iochannel (const char *fmt, GIOChannel *channel, GError **error, ...)
-+{
-+ char *str;
-+ va_list args;
-+ GIOStatus status;
-+ gsize written;
-+ gboolean ret;
-+
-+ va_start (args, error);
-+
-+ str = g_strdup_vprintf (fmt, args);
-+ if ((status = g_io_channel_write_chars (channel, str, -1, &written, error)) == G_IO_STATUS_NORMAL)
-+ ret = TRUE;
-+ else
-+ ret = FALSE;
-+
-+ g_free (str);
-+
-+ va_end (args);
-+
-+ return ret;
-+}
-+
-+static gboolean
-+write_quoted_string (GIOChannel *channel, GString *string, GError **error)
-+{
-+ guint i;
-+
-+ WRITE_OR_LOSE ("\"");
-+ for (i = 0; i < string->len; i++)
-+ {
-+ if (string->str[i] != '\0')
-+ {
-+ if (!g_io_channel_write_chars (channel, string->str + i, 1, NULL, error))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (!g_io_channel_write_chars (channel, "\\0", -1, NULL, error))
-+ return FALSE;
-+ }
-+ }
-+ WRITE_OR_LOSE ("\\0\"");
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+}
-+
-+static gboolean
-+generate_glue (BaseInfo *base, DBusBindingToolCData *data, GError **error)
-+{
-+ if (base_info_get_type (base) == INFO_TYPE_NODE)
-+ {
-+ GString *object_introspection_data_blob;
-+ GIOChannel *channel;
-+
-+ channel = data->channel;
-+
-+ object_introspection_data_blob = g_string_new_len ("", 0);
-+
-+ data->blob = object_introspection_data_blob;
-+ data->count = 0;
-+
-+ data->signal_blob = g_string_new_len ("", 0);
-+ data->property_blob = g_string_new_len ("", 0);
-+
-+ if (!write_printf_to_iochannel ("static const DBusGMethodInfo dbus_glib_%s_methods[] = {\n", channel, error, data->prefix))
-+ goto io_lose;
-+
-+ if (!generate_glue_list (node_info_get_nodes ((NodeInfo *) base),
-+ data, error))
-+ return FALSE;
-+ if (!generate_glue_list (node_info_get_interfaces ((NodeInfo *) base),
-+ data, error))
-+ return FALSE;
-+
-+ WRITE_OR_LOSE ("};\n\n");
-+
-+ /* Information about the object. */
-+
-+ if (!write_printf_to_iochannel ("const DBusGObjectInfo dbus_glib_%s_object_info = {\n",
-+ channel, error, data->prefix))
-+ goto io_lose;
-+ WRITE_OR_LOSE (" 0,\n");
-+ if (!write_printf_to_iochannel (" dbus_glib_%s_methods,\n", channel, error, data->prefix))
-+ goto io_lose;
-+ if (!write_printf_to_iochannel (" %d,\n", channel, error, data->count))
-+ goto io_lose;
-+
-+ if (!write_quoted_string (channel, object_introspection_data_blob, error))
-+ goto io_lose;
-+ WRITE_OR_LOSE (",\n");
-+ if (!write_quoted_string (channel, data->signal_blob, error))
-+ goto io_lose;
-+ WRITE_OR_LOSE (",\n");
-+ if (!write_quoted_string (channel, data->property_blob, error))
-+ goto io_lose;
-+ WRITE_OR_LOSE ("\n};\n\n");
-+
-+ g_string_free (object_introspection_data_blob, TRUE);
-+ g_string_free (data->signal_blob, TRUE);
-+ g_string_free (data->property_blob, TRUE);
-+ }
-+ else
-+ {
-+ GIOChannel *channel;
-+ InterfaceInfo *interface;
-+ GSList *methods;
-+ GSList *signals;
-+ GSList *properties;
-+ GSList *tmp;
-+ const char *interface_c_name;
-+ GString *object_introspection_data_blob;
-+
-+ channel = data->channel;
-+ object_introspection_data_blob = data->blob;
-+
-+ interface = (InterfaceInfo *) base;
-+ interface_c_name = interface_info_get_annotation (interface, DBUS_GLIB_ANNOTATION_C_SYMBOL);
-+ if (interface_c_name == NULL)
-+ {
-+ if (data->prefix == NULL)
-+ return TRUE;
-+ interface_c_name = data->prefix;
-+ }
-+
-+ methods = interface_info_get_methods (interface);
-+
-+ /* Table of marshalled methods. */
-+
-+ for (tmp = methods; tmp != NULL; tmp = g_slist_next (tmp))
-+ {
-+ MethodInfo *method;
-+ char *marshaller_name;
-+ char *method_c_name;
-+ gboolean async = FALSE;
-+ GSList *args;
-+ gboolean found_retval = FALSE;
-+
-+ method = (MethodInfo *) tmp->data;
-+ method_c_name = g_strdup (method_info_get_annotation (method, DBUS_GLIB_ANNOTATION_C_SYMBOL));
-+ if (method_c_name == NULL)
-+ {
-+ char *method_name_uscored;
-+ method_name_uscored = _dbus_gutils_wincaps_to_uscore (method_info_get_name (method));
-+ method_c_name = g_strdup_printf ("%s_%s",
-+ interface_c_name,
-+ method_name_uscored);
-+ g_free (method_name_uscored);
-+ }
-+
-+ if (!write_printf_to_iochannel (" { (GCallback) %s, ", channel, error,
-+ method_c_name))
-+ goto io_lose;
-+
-+ marshaller_name = compute_marshaller_name (method, data->prefix, error);
-+ if (!marshaller_name)
-+ goto io_lose;
-+
-+ if (!write_printf_to_iochannel ("%s, %d },\n", channel, error,
-+ marshaller_name,
-+ object_introspection_data_blob->len))
-+ {
-+ g_free (marshaller_name);
-+ goto io_lose;
-+ }
-+
-+ if (method_info_get_annotation (method, DBUS_GLIB_ANNOTATION_ASYNC) != NULL)
-+ async = TRUE;
-+
-+ /* Object method data blob format:
-+ * <iface>\0<name>\0(<argname>\0<argdirection>\0<argtype>\0)*\0
-+ */
-+
-+ g_string_append (object_introspection_data_blob, interface_info_get_name (interface));
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+
-+ g_string_append (object_introspection_data_blob, method_info_get_name (method));
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+
-+ g_string_append_c (object_introspection_data_blob, async ? 'A' : 'S');
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+ char direction;
-+ const char *returnval_annotation;
-+
-+ arg = args->data;
-+
-+ g_string_append (object_introspection_data_blob, arg_info_get_name (arg));
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+
-+ switch (arg_info_get_direction (arg))
-+ {
-+ case ARG_IN:
-+ direction = 'I';
-+ break;
-+ case ARG_OUT:
-+ direction = 'O';
-+ break;
-+ case ARG_INVALID:
-+ default:
-+ g_assert_not_reached ();
-+ direction = 0; /* silence gcc */
-+ break;
-+ }
-+ g_string_append_c (object_introspection_data_blob, direction);
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+
-+ if (arg_info_get_annotation (arg, DBUS_GLIB_ANNOTATION_CONST) != NULL)
-+ {
-+ if (arg_info_get_direction (arg) == ARG_IN)
-+ {
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_INVALID_ANNOTATION,
-+ "Input argument \"%s\" cannot have const annotation in method \"%s\" of interface \"%s\"\n",
-+ arg_info_get_name (arg),
-+ method_info_get_name (method),
-+ interface_info_get_name (interface));
-+ return FALSE;
-+ }
-+ g_string_append_c (object_introspection_data_blob, 'C');
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+ }
-+ else if (arg_info_get_direction (arg) == ARG_OUT)
-+ {
-+ g_string_append_c (object_introspection_data_blob, 'F');
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+ }
-+
-+ returnval_annotation = arg_info_get_annotation (arg, DBUS_GLIB_ANNOTATION_RETURNVAL);
-+ if (returnval_annotation != NULL)
-+ {
-+ GType gtype;
-+
-+ if (found_retval)
-+ {
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_INVALID_ANNOTATION,
-+ "Multiple arguments with return value annotation in method \"%s\" of interface \"%s\"\n",
-+ method_info_get_name (method),
-+ interface_info_get_name (interface));
-+ return FALSE;
-+ }
-+ found_retval = TRUE;
-+ if (arg_info_get_direction (arg) == ARG_IN)
-+ {
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_INVALID_ANNOTATION,
-+ "Input argument \"%s\" cannot have return value annotation in method \"%s\" of interface \"%s\"\n",
-+ arg_info_get_name (arg),
-+ method_info_get_name (method),
-+ interface_info_get_name (interface));
-+ return FALSE;
-+ }
-+ if (!strcmp ("", returnval_annotation))
-+ g_string_append_c (object_introspection_data_blob, 'R');
-+ else if (!strcmp ("error", returnval_annotation))
-+ {
-+ gtype = _dbus_gtype_from_signature (arg_info_get_type (arg), TRUE);
-+ if (!_dbus_gtype_can_signal_error (gtype))
-+ {
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_INVALID_ANNOTATION,
-+ "Output argument \"%s\" cannot signal error with type \"%s\" in method \"%s\" of interface \"%s\"\n",
-+ arg_info_get_name (arg),
-+ g_type_name (gtype),
-+ method_info_get_name (method),
-+ interface_info_get_name (interface));
-+ return FALSE;
-+ }
-+ g_string_append_c (object_introspection_data_blob, 'E');
-+ }
-+ else
-+ {
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_INVALID_ANNOTATION,
-+ "Invalid ReturnVal annotation for argument \"%s\" in method \"%s\" of interface \"%s\"\n",
-+ arg_info_get_name (arg),
-+ method_info_get_name (method),
-+ interface_info_get_name (interface));
-+ return FALSE;
-+ }
-+
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+ }
-+ else if (arg_info_get_direction (arg) == ARG_OUT)
-+ {
-+ g_string_append_c (object_introspection_data_blob, 'N');
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+ }
-+
-+ g_string_append (object_introspection_data_blob, arg_info_get_type (arg));
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+ }
-+
-+ g_string_append_c (object_introspection_data_blob, '\0');
-+
-+ data->count++;
-+ }
-+
-+ signals = interface_info_get_signals (interface);
-+
-+ for (tmp = signals; tmp != NULL; tmp = g_slist_next (tmp))
-+ {
-+ SignalInfo *sig;
-+
-+ sig = tmp->data;
-+
-+ g_string_append (data->signal_blob, interface_info_get_name (interface));
-+ g_string_append_c (data->signal_blob, '\0');
-+ g_string_append (data->signal_blob, signal_info_get_name (sig));
-+ g_string_append_c (data->signal_blob, '\0');
-+ }
-+
-+ properties = interface_info_get_properties (interface);
-+
-+ for (tmp = properties; tmp != NULL; tmp = g_slist_next (tmp))
-+ {
-+ PropertyInfo *prop;
-+
-+ prop = tmp->data;
-+
-+ g_string_append (data->property_blob, interface_info_get_name (interface));
-+ g_string_append_c (data->property_blob, '\0');
-+ g_string_append (data->property_blob, property_info_get_name (prop));
-+ g_string_append_c (data->property_blob, '\0');
-+ }
-+ }
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+}
-+
-+static void
-+write_marshaller (gpointer key, gpointer value, gpointer user_data)
-+{
-+ DBusBindingToolCData *data;
-+ const char *marshaller;
-+ gsize bytes_written;
-+
-+ data = user_data;
-+ marshaller = key;
-+
-+ if (data->error && *data->error)
-+ return;
-+
-+ if (g_io_channel_write_chars (data->channel, marshaller, -1, &bytes_written, data->error) == G_IO_STATUS_NORMAL)
-+ g_io_channel_write_chars (data->channel, "\n", -1, &bytes_written, data->error);
-+}
-+
-+gboolean
-+dbus_binding_tool_output_glib_server (BaseInfo *info, GIOChannel *channel, const char *prefix, GError **error)
-+{
-+ gboolean ret;
-+ GPtrArray *argv;
-+ gint child_stdout;
-+ GIOChannel *genmarshal_stdout;
-+ GPid child_pid;
-+ DBusBindingToolCData data;
-+ char *tempfile_name;
-+ gint tempfile_fd;
-+ GIOStatus iostatus;
-+ char buf[4096];
-+ gsize bytes_read, bytes_written;
-+
-+ memset (&data, 0, sizeof (data));
-+
-+ dbus_g_type_specialized_init ();
-+ _dbus_g_type_specialized_builtins_init ();
-+
-+ data.prefix = prefix;
-+ data.generated = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL);
-+ data.error = error;
-+ genmarshal_stdout = NULL;
-+ tempfile_name = NULL;
-+
-+ if (!gather_marshallers (info, &data, error))
-+ goto io_lose;
-+
-+ tempfile_fd = g_file_open_tmp ("dbus-binding-tool-c-marshallers.XXXXXX",
-+ &tempfile_name, error);
-+ if (tempfile_fd < 0)
-+ goto io_lose;
-+
-+ data.channel = g_io_channel_unix_new (tempfile_fd);
-+ if (!g_io_channel_set_encoding (data.channel, NULL, error))
-+ goto io_lose;
-+ g_hash_table_foreach (data.generated, write_marshaller, &data);
-+ if (error && *error != NULL)
-+ {
-+ ret = FALSE;
-+ g_io_channel_close (data.channel);
-+ g_io_channel_unref (data.channel);
-+ goto io_lose;
-+ }
-+
-+ g_io_channel_close (data.channel);
-+ g_io_channel_unref (data.channel);
-+
-+ /* Now spawn glib-genmarshal to insert all our required marshallers */
-+ argv = g_ptr_array_new ();
-+ g_ptr_array_add (argv, "glib-genmarshal");
-+ g_ptr_array_add (argv, "--header");
-+ g_ptr_array_add (argv, "--body");
-+ g_ptr_array_add (argv, g_strdup_printf ("--prefix=%s%s", MARSHAL_PREFIX, prefix));
-+ g_ptr_array_add (argv, tempfile_name);
-+ g_ptr_array_add (argv, NULL);
-+ if (!g_spawn_async_with_pipes (NULL, (char**)argv->pdata, NULL,
-+ G_SPAWN_SEARCH_PATH,
-+ NULL, NULL,
-+ &child_pid,
-+ NULL,
-+ &child_stdout, NULL, error))
-+ {
-+ g_ptr_array_free (argv, TRUE);
-+ goto io_lose;
-+ }
-+ g_ptr_array_free (argv, TRUE);
-+
-+ genmarshal_stdout = g_io_channel_unix_new (child_stdout);
-+ if (!g_io_channel_set_encoding (genmarshal_stdout, NULL, error))
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE ("/* Generated by dbus-binding-tool; do not edit! */\n\n");
-+
-+ while ((iostatus = g_io_channel_read_chars (genmarshal_stdout, buf, sizeof (buf),
-+ &bytes_read, error)) == G_IO_STATUS_NORMAL)
-+ if (g_io_channel_write_chars (channel, buf, bytes_read, &bytes_written, error) != G_IO_STATUS_NORMAL)
-+ goto io_lose;
-+ if (iostatus != G_IO_STATUS_EOF)
-+ goto io_lose;
-+
-+ g_io_channel_close (genmarshal_stdout);
-+
-+ WRITE_OR_LOSE ("#include <dbus/dbus-glib.h>\n");
-+
-+ data.channel = channel;
-+ g_io_channel_ref (data.channel);
-+ if (!generate_glue (info, &data, error))
-+ goto io_lose;
-+
-+ ret = TRUE;
-+ cleanup:
-+ if (tempfile_name)
-+ unlink (tempfile_name);
-+ g_free (tempfile_name);
-+ if (genmarshal_stdout)
-+ g_io_channel_unref (genmarshal_stdout);
-+ if (data.channel)
-+ g_io_channel_unref (data.channel);
-+ g_hash_table_destroy (data.generated);
-+
-+ return ret;
-+ io_lose:
-+ ret = FALSE;
-+ goto cleanup;
-+}
-+
-+static char *
-+iface_to_c_prefix (const char *iface)
-+{
-+ char **components;
-+ char **component;
-+ GString *ret;
-+ gboolean first;
-+
-+ components = g_strsplit (iface, ".", 0);
-+
-+ first = TRUE;
-+ ret = g_string_new ("");
-+ for (component = components; *component; component++)
-+ {
-+ if (!first)
-+ g_string_append_c (ret, '_');
-+ else
-+ first = FALSE;
-+ g_string_append (ret, *component);
-+ }
-+ g_strfreev (components);
-+ return g_string_free (ret, FALSE);
-+}
-+
-+static char *
-+compute_client_method_name (const char *iface_prefix, MethodInfo *method)
-+{
-+ char *method_name_uscored, *ret;
-+
-+ method_name_uscored = _dbus_gutils_wincaps_to_uscore (method_info_get_name (method));
-+ ret = g_strdup_printf ("%s_%s", iface_prefix, method_name_uscored);
-+ g_free (method_name_uscored);
-+
-+ return ret;
-+}
-+
-+static gboolean
-+write_formal_parameters (InterfaceInfo *iface, MethodInfo *method, GIOChannel *channel, GError **error)
-+{
-+ GSList *args;
-+
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+ const char *type_str;
-+ const char *type_suffix;
-+ GType gtype;
-+ int direction;
-+
-+ arg = args->data;
-+
-+ WRITE_OR_LOSE (", ");
-+
-+ direction = arg_info_get_direction (arg);
-+
-+ gtype = _dbus_gtype_from_signature (arg_info_get_type (arg), TRUE);
-+ if (gtype == G_TYPE_INVALID)
-+ {
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_UNSUPPORTED_CONVERSION,
-+ _("Unsupported conversion from D-BUS type signature \"%s\" to glib C type in method \"%s\" of interface \"%s\""),
-+ arg_info_get_type (arg),
-+ method_info_get_name (method),
-+ interface_info_get_name (iface));
-+ return FALSE;
-+ }
-+ type_str = dbus_g_type_get_c_name (gtype);
-+ g_assert (type_str);
-+ /* Variants are special...*/
-+ if (gtype == G_TYPE_VALUE)
-+ {
-+ if (direction == ARG_IN)
-+ type_suffix = "*";
-+ else
-+ type_suffix = "";
-+ }
-+ else if ((g_type_is_a (gtype, G_TYPE_BOXED)
-+ || g_type_is_a (gtype, G_TYPE_OBJECT)
-+ || g_type_is_a (gtype, G_TYPE_POINTER)))
-+ type_suffix = "*";
-+ else
-+ type_suffix = "";
-+
-+
-+ switch (direction)
-+ {
-+ case ARG_IN:
-+ if (!write_printf_to_iochannel ("const %s%s IN_%s", channel, error,
-+ type_str,
-+ type_suffix,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ break;
-+ case ARG_OUT:
-+ if (!write_printf_to_iochannel ("%s%s* OUT_%s", channel, error,
-+ type_str,
-+ type_suffix,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ break;
-+ case ARG_INVALID:
-+ break;
-+ }
-+ }
-+
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+}
-+
-+#define MAP_FUNDAMENTAL(NAME) \
-+ case G_TYPE_ ## NAME: \
-+ return g_strdup ("G_TYPE_" #NAME);
-+#define MAP_KNOWN(NAME) \
-+ if (gtype == NAME) \
-+ return g_strdup (#NAME)
-+static char *
-+dbus_g_type_get_lookup_function (GType gtype)
-+{
-+ char *type_lookup;
-+ switch (gtype)
-+ {
-+ MAP_FUNDAMENTAL(CHAR);
-+ MAP_FUNDAMENTAL(UCHAR);
-+ MAP_FUNDAMENTAL(BOOLEAN);
-+ MAP_FUNDAMENTAL(LONG);
-+ MAP_FUNDAMENTAL(ULONG);
-+ MAP_FUNDAMENTAL(INT);
-+ MAP_FUNDAMENTAL(UINT);
-+ MAP_FUNDAMENTAL(INT64);
-+ MAP_FUNDAMENTAL(UINT64);
-+ MAP_FUNDAMENTAL(FLOAT);
-+ MAP_FUNDAMENTAL(DOUBLE);
-+ MAP_FUNDAMENTAL(STRING);
-+ }
-+ if (dbus_g_type_is_collection (gtype))
-+ {
-+ GType elt_gtype;
-+ char *sublookup;
-+
-+ elt_gtype = dbus_g_type_get_collection_specialization (gtype);
-+ sublookup = dbus_g_type_get_lookup_function (elt_gtype);
-+ g_assert (sublookup);
-+
-+ if (_dbus_g_type_is_fixed (elt_gtype))
-+ {
-+ type_lookup = g_strdup_printf ("dbus_g_type_get_collection "
-+ "(\"GArray\", %s)", sublookup);
-+ }
-+ else
-+ {
-+ type_lookup = g_strdup_printf ("dbus_g_type_get_collection "
-+ "(\"GPtrArray\", %s)", sublookup);
-+ }
-+
-+ g_free (sublookup);
-+
-+ return type_lookup;
-+ }
-+ else if (dbus_g_type_is_map (gtype))
-+ {
-+ GType key_gtype;
-+ char *key_lookup;
-+ GType value_gtype;
-+ char *value_lookup;
-+
-+ key_gtype = dbus_g_type_get_map_key_specialization (gtype);
-+ value_gtype = dbus_g_type_get_map_value_specialization (gtype);
-+ key_lookup = dbus_g_type_get_lookup_function (key_gtype);
-+ g_assert (key_lookup);
-+ value_lookup = dbus_g_type_get_lookup_function (value_gtype);
-+ g_assert (value_lookup);
-+ type_lookup = g_strdup_printf ("dbus_g_type_get_map (\"GHashTable\", %s, %s)",
-+ key_lookup, value_lookup);
-+ g_free (key_lookup);
-+ g_free (value_lookup);
-+ return type_lookup;
-+ }
-+ else if (dbus_g_type_is_struct (gtype))
-+ {
-+ GType value_gtype;
-+ GString *string;
-+ char *value_lookup = NULL;
-+ guint size, i;
-+
-+ string = g_string_new ("dbus_g_type_get_struct (\"GValueArray\"");
-+
-+ size = dbus_g_type_get_struct_size (gtype);
-+ for (i=0; i < size; i++)
-+ {
-+ value_gtype = dbus_g_type_get_struct_member_type(gtype, i);
-+ value_lookup = dbus_g_type_get_lookup_function (value_gtype);
-+ g_assert (value_lookup);
-+ g_string_append_printf (string, ", %s", value_lookup);
-+ g_free (value_lookup);
-+ }
-+ g_string_append (string, ", G_TYPE_INVALID)");
-+ return g_string_free (string, FALSE);
-+ }
-+
-+ MAP_KNOWN(G_TYPE_VALUE);
-+ MAP_KNOWN(G_TYPE_STRV);
-+ MAP_KNOWN(G_TYPE_VALUE_ARRAY);
-+ MAP_KNOWN(DBUS_TYPE_G_PROXY);
-+ MAP_KNOWN(DBUS_TYPE_G_OBJECT_PATH);
-+ return NULL;
-+}
-+#undef MAP_FUNDAMENTAL
-+#undef MAP_KNOWN
-+
-+static gboolean
-+write_args_for_direction (InterfaceInfo *iface, MethodInfo *method, GIOChannel *channel, int direction, GError **error)
-+{
-+ GSList *args;
-+
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+ GType gtype;
-+ char *type_lookup;
-+
-+ arg = args->data;
-+
-+ if (direction != arg_info_get_direction (arg))
-+ continue;
-+
-+ gtype = _dbus_gtype_from_signature (arg_info_get_type (arg), TRUE);
-+ g_assert (gtype != G_TYPE_INVALID);
-+ type_lookup = dbus_g_type_get_lookup_function (gtype);
-+ g_assert (type_lookup != NULL);
-+
-+ switch (direction)
-+ {
-+
-+ case ARG_IN:
-+ if (!write_printf_to_iochannel ("%s, IN_%s, ", channel, error,
-+ type_lookup,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ break;
-+ case ARG_OUT:
-+ if (!write_printf_to_iochannel ("%s, OUT_%s, ", channel, error,
-+ type_lookup,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ break;
-+ case ARG_INVALID:
-+ break;
-+ }
-+ g_free (type_lookup);
-+ }
-+
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+}
-+
-+static gboolean
-+check_supported_parameters (MethodInfo *method)
-+{
-+ GSList *args;
-+
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+ GType gtype;
-+
-+ arg = args->data;
-+ gtype = _dbus_gtype_from_signature (arg_info_get_type (arg), TRUE);
-+ if (gtype == G_TYPE_INVALID)
-+ return FALSE;
-+ }
-+ return TRUE;
-+}
-+
-+static gboolean
-+write_untyped_out_args (InterfaceInfo *iface, MethodInfo *method, GIOChannel *channel, GError **error)
-+{
-+ GSList *args;
-+
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+
-+ arg = args->data;
-+ if (arg_info_get_direction (arg) != ARG_OUT)
-+ continue;
-+
-+ if (!write_printf_to_iochannel ("OUT_%s, ", channel, error,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ }
-+
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+}
-+
-+static gboolean
-+write_formal_declarations_for_direction (InterfaceInfo *iface, MethodInfo *method, GIOChannel *channel, const int direction, GError **error)
-+ {
-+ GSList *args;
-+
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+ GType gtype;
-+ const char *type_str, *type_suffix;
-+ int dir;
-+
-+ arg = args->data;
-+
-+ dir = arg_info_get_direction (arg);
-+
-+ gtype = _dbus_gtype_from_signature (arg_info_get_type (arg), TRUE);
-+ type_str = dbus_g_type_get_c_name (gtype);
-+
-+ if (!type_str)
-+ {
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_UNSUPPORTED_CONVERSION,
-+ _("Unsupported conversion from D-BUS type signature \"%s\" to glib C type in method \"%s\" of interface \"%s\""),
-+ arg_info_get_type (arg),
-+ method_info_get_name (method),
-+ interface_info_get_name (iface));
-+ return FALSE;
-+ }
-+
-+ /* Variants are special...*/
-+ if (gtype == G_TYPE_VALUE)
-+ {
-+ if (direction == ARG_IN)
-+ type_suffix = "*";
-+ else
-+ type_suffix = "";
-+ }
-+ else if ((g_type_is_a (gtype, G_TYPE_BOXED)
-+ || g_type_is_a (gtype, G_TYPE_OBJECT)
-+ || g_type_is_a (gtype, G_TYPE_POINTER)))
-+ type_suffix = "*";
-+ else
-+ type_suffix = "";
-+
-+ if (direction != dir)
-+ continue;
-+
-+ switch (dir)
-+ {
-+ case ARG_IN:
-+ if (!write_printf_to_iochannel (" %s%s IN_%s;\n", channel, error,
-+ type_str, type_suffix,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ break;
-+ case ARG_OUT:
-+ if (!write_printf_to_iochannel (" %s%s OUT_%s;\n", channel, error,
-+ type_str, type_suffix,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ break;
-+ case ARG_INVALID:
-+ break;
-+ }
-+ }
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+ }
-+
-+static gboolean
-+write_formal_parameters_for_direction (InterfaceInfo *iface, MethodInfo *method, int dir, GIOChannel *channel, GError **error)
-+{
-+ GSList *args;
-+
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+ const char *type_str;
-+ const char *type_suffix;
-+ GType gtype;
-+ int direction;
-+
-+ arg = args->data;
-+
-+ direction = arg_info_get_direction (arg);
-+ if (dir != direction) continue;
-+
-+ WRITE_OR_LOSE (", ");
-+
-+ gtype = _dbus_gtype_from_signature (arg_info_get_type (arg), TRUE);
-+ type_str = dbus_g_type_get_c_name (gtype);
-+ /* Variants are special...*/
-+ if (gtype == G_TYPE_VALUE)
-+ {
-+ if (direction == ARG_IN)
-+ type_suffix = "*";
-+ else
-+ type_suffix = "";
-+ }
-+ else if ((g_type_is_a (gtype, G_TYPE_BOXED)
-+ || g_type_is_a (gtype, G_TYPE_OBJECT)
-+ || g_type_is_a (gtype, G_TYPE_POINTER)))
-+ type_suffix = "*";
-+ else
-+ type_suffix = "";
-+
-+ if (!type_str)
-+ {
-+ g_set_error (error,
-+ DBUS_BINDING_TOOL_ERROR,
-+ DBUS_BINDING_TOOL_ERROR_UNSUPPORTED_CONVERSION,
-+ _("Unsupported conversion from D-BUS type signature \"%s\" to glib C type in method \"%s\" of interface \"%s\""),
-+ arg_info_get_type (arg),
-+ method_info_get_name (method),
-+ interface_info_get_name (iface));
-+ return FALSE;
-+ }
-+
-+ switch (direction)
-+ {
-+ case ARG_IN:
-+ if (!write_printf_to_iochannel ("const %s%s IN_%s", channel, error,
-+ type_str,
-+ type_suffix,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ break;
-+ case ARG_OUT:
-+ if (!write_printf_to_iochannel ("%s%s* OUT_%s", channel, error,
-+ type_str,
-+ type_suffix,
-+ arg_info_get_name (arg)))
-+ goto io_lose;
-+ break;
-+ case ARG_INVALID:
-+ break;
-+ }
-+ }
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+}
-+
-+static gboolean
-+write_typed_args_for_direction (InterfaceInfo *iface, MethodInfo *method, GIOChannel *channel, const int direction, GError **error)
-+ {
-+ GSList *args;
-+
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+ int dir;
-+ GType gtype;
-+ const char *type_lookup;
-+
-+ arg = args->data;
-+
-+ dir = arg_info_get_direction (arg);
-+
-+ if (dir != direction)
-+ continue;
-+
-+ gtype = _dbus_gtype_from_signature (arg_info_get_type (arg), TRUE);
-+ type_lookup = dbus_g_type_get_lookup_function (gtype);
-+
-+ if (!write_printf_to_iochannel ("%s, &%s_%s, ", channel, error, type_lookup, direction == ARG_IN ? "IN" : "OUT", arg_info_get_name (arg)))
-+ goto io_lose;
-+ }
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+}
-+
-+static gboolean
-+write_async_method_client (GIOChannel *channel, InterfaceInfo *interface, MethodInfo *method, GError **error)
-+{
-+ char *method_name, *iface_prefix;
-+ const char *interface_c_name;
-+
-+ iface_prefix = iface_to_c_prefix (interface_info_get_name (interface));
-+ interface_c_name = interface_info_get_annotation (interface, DBUS_GLIB_ANNOTATION_CLIENT_C_SYMBOL);
-+ if (interface_c_name == NULL)
-+ {
-+ interface_c_name = (const char *) iface_prefix;
-+ }
-+
-+ method_name = g_strdup (method_info_get_annotation (method, DBUS_GLIB_ANNOTATION_CLIENT_C_SYMBOL));
-+ if (method_name == NULL)
-+ {
-+ method_name = compute_client_method_name (interface_c_name, method);
-+ }
-+ g_free(iface_prefix);
-+
-+ /* Write the typedef for the client callback */
-+ if (!write_printf_to_iochannel ("typedef void (*%s_reply) (DBusGProxy *proxy, ", channel, error, method_name))
-+ goto io_lose;
-+ {
-+ GSList *args;
-+ for (args = method_info_get_args (method); args; args = args->next)
-+ {
-+ ArgInfo *arg;
-+ const char *type_suffix, *type_str;
-+ GType gtype;
-+
-+ arg = args->data;
-+
-+ if (arg_info_get_direction (arg) != ARG_OUT)
-+ continue;
-+ gtype = _dbus_gtype_from_signature (arg_info_get_type (arg), TRUE);
-+ if (gtype != G_TYPE_VALUE && (g_type_is_a (gtype, G_TYPE_BOXED)
-+ || g_type_is_a (gtype, G_TYPE_OBJECT)
-+ || g_type_is_a (gtype, G_TYPE_POINTER)))
-+ type_suffix = "*";
-+ else
-+ type_suffix = "";
-+ type_str = dbus_g_type_get_c_name (_dbus_gtype_from_signature (arg_info_get_type (arg), TRUE));
-+ if (!write_printf_to_iochannel ("%s %sOUT_%s, ", channel, error, type_str, type_suffix, arg_info_get_name (arg)))
-+ goto io_lose;
-+ }
-+ }
-+ WRITE_OR_LOSE ("GError *error, gpointer userdata);\n\n");
-+
-+
-+ /* Write the callback when the call returns */
-+ WRITE_OR_LOSE ("static void\n");
-+ if (!write_printf_to_iochannel ("%s_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)\n", channel, error, method_name))
-+ goto io_lose;
-+ WRITE_OR_LOSE ("{\n");
-+ WRITE_OR_LOSE (" DBusGAsyncData *data = user_data;\n GError *error = NULL;\n");
-+ if (!write_formal_declarations_for_direction (interface, method, channel, ARG_OUT, error))
-+ goto io_lose;
-+ /* TODO: handle return boolean of end_call */
-+ WRITE_OR_LOSE (" dbus_g_proxy_end_call (proxy, call, &error, ");
-+ if (!write_typed_args_for_direction (interface, method, channel, ARG_OUT, error))
-+ goto io_lose;
-+ WRITE_OR_LOSE("G_TYPE_INVALID);\n");
-+ if (!write_printf_to_iochannel (" (*(%s_reply)data->cb) (proxy, ", channel, error, method_name))
-+ goto io_lose;
-+ if (!write_untyped_out_args (interface, method, channel, error))
-+ goto io_lose;
-+ WRITE_OR_LOSE ("error, data->userdata);\n");
-+ WRITE_OR_LOSE (" return;\n}\n\n");
-+
-+
-+ /* Write the main wrapper function */
-+ WRITE_OR_LOSE ("static\n#ifdef G_HAVE_INLINE\ninline\n#endif\nDBusGProxyCall*\n");
-+ if (!write_printf_to_iochannel ("%s_async (DBusGProxy *proxy", channel, error,
-+ method_name))
-+ goto io_lose;
-+ if (!write_formal_parameters_for_direction (interface, method, ARG_IN, channel, error))
-+ goto io_lose;
-+
-+ if (!write_printf_to_iochannel (", %s_reply callback, gpointer userdata)\n\n", channel, error, method_name))
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE ("{\n");
-+ WRITE_OR_LOSE (" DBusGAsyncData *stuff;\n stuff = g_new (DBusGAsyncData, 1);\n stuff->cb = G_CALLBACK (callback);\n stuff->userdata = userdata;\n");
-+ if (!write_printf_to_iochannel (" return dbus_g_proxy_begin_call (proxy, \"%s\", %s_async_callback, stuff, g_free, ", channel, error, method_info_get_name (method), method_name))
-+ goto io_lose;
-+ if (!write_args_for_direction (interface, method, channel, ARG_IN, error))
-+ goto io_lose;
-+ WRITE_OR_LOSE ("G_TYPE_INVALID);\n}\n");
-+
-+ g_free (method_name);
-+ return TRUE;
-+ io_lose:
-+ g_free (method_name);
-+ return FALSE;
-+ }
-+
-+static gboolean
-+generate_client_glue_list (GSList *list, DBusBindingToolCData *data, GError **error)
-+{
-+ GSList *tmp;
-+
-+ tmp = list;
-+ while (tmp != NULL)
-+ {
-+ if (!generate_client_glue (tmp->data, data, error))
-+ return FALSE;
-+ tmp = tmp->next;
-+ }
-+ return TRUE;
-+}
-+
-+static gboolean
-+generate_client_glue (BaseInfo *base, DBusBindingToolCData *data, GError **error)
-+{
-+ if (base_info_get_type (base) == INFO_TYPE_NODE)
-+ {
-+ if (!generate_client_glue_list (node_info_get_nodes ((NodeInfo *) base),
-+ data, error))
-+ return FALSE;
-+ if (!generate_client_glue_list (node_info_get_interfaces ((NodeInfo *) base),
-+ data, error))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ GIOChannel *channel;
-+ InterfaceInfo *interface;
-+ GSList *methods;
-+ GSList *tmp;
-+ char *iface_prefix;
-+ const char *interface_c_name;
-+
-+ channel = data->channel;
-+
-+ interface = (InterfaceInfo *) base;
-+
-+ methods = interface_info_get_methods (interface);
-+
-+ iface_prefix = iface_to_c_prefix (interface_info_get_name (interface));
-+ interface_c_name = interface_info_get_annotation (interface, DBUS_GLIB_ANNOTATION_CLIENT_C_SYMBOL);
-+ if (interface_c_name == NULL)
-+ {
-+ interface_c_name = (const char *) iface_prefix;
-+ }
-+
-+ if (!write_printf_to_iochannel ("#ifndef DBUS_GLIB_CLIENT_WRAPPERS_%s\n"
-+ "#define DBUS_GLIB_CLIENT_WRAPPERS_%s\n\n",
-+ channel, error,
-+ iface_prefix, iface_prefix))
-+ {
-+ g_free (iface_prefix);
-+ goto io_lose;
-+ }
-+
-+ for (tmp = methods; tmp != NULL; tmp = g_slist_next (tmp))
-+ {
-+ MethodInfo *method;
-+ char *method_c_name;
-+ gboolean is_noreply;
-+
-+ method = (MethodInfo *) tmp->data;
-+ method_c_name = g_strdup (method_info_get_annotation (method, DBUS_GLIB_ANNOTATION_CLIENT_C_SYMBOL));
-+ if (method_c_name == NULL)
-+ {
-+ method_c_name = compute_client_method_name (interface_c_name, method);
-+ }
-+
-+ is_noreply = method_info_get_annotation (method, DBUS_GLIB_ANNOTATION_NOREPLY) != NULL;
-+
-+ if (data->ignore_unsupported && !check_supported_parameters (method))
-+ {
-+ g_warning ("Ignoring unsupported signature in method \"%s\" of interface \"%s\"\n",
-+ method_info_get_name (method),
-+ interface_info_get_name (interface));
-+ continue;
-+ }
-+
-+
-+ WRITE_OR_LOSE ("static\n#ifdef G_HAVE_INLINE\ninline\n#endif\ngboolean\n");
-+ if (!write_printf_to_iochannel ("%s (DBusGProxy *proxy", channel, error,
-+ method_c_name))
-+ goto io_lose;
-+ g_free (method_c_name);
-+
-+ if (!write_formal_parameters (interface, method, channel, error))
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE (", GError **error)\n\n");
-+
-+ WRITE_OR_LOSE ("{\n");
-+
-+ if (is_noreply) {
-+ if (!write_printf_to_iochannel (" dbus_g_proxy_call_no_reply (proxy, \"%s\", ", channel, error,
-+ method_info_get_name (method)))
-+ goto io_lose;
-+
-+ if (!write_args_for_direction (interface, method, channel, ARG_IN, error))
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE ("G_TYPE_INVALID, ");
-+
-+ if (!write_args_for_direction (interface, method, channel, ARG_OUT, error))
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE ("G_TYPE_INVALID);\n");
-+
-+ WRITE_OR_LOSE (" return TRUE;\n}\n\n");
-+ } else {
-+ if (!write_printf_to_iochannel (" return dbus_g_proxy_call (proxy, \"%s\", ", channel, error,
-+ method_info_get_name (method)))
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE ("error, ");
-+
-+ if (!write_args_for_direction (interface, method, channel, ARG_IN, error))
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE ("G_TYPE_INVALID, ");
-+
-+ if (!write_args_for_direction (interface, method, channel, ARG_OUT, error))
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE ("G_TYPE_INVALID);\n}\n\n");
-+ }
-+
-+ write_async_method_client (channel, interface, method, error);
-+ }
-+
-+ if (!write_printf_to_iochannel ("#endif /* defined DBUS_GLIB_CLIENT_WRAPPERS_%s */\n\n", channel, error, iface_prefix))
-+ {
-+ g_free (iface_prefix);
-+ goto io_lose;
-+ }
-+
-+ g_free (iface_prefix);
-+ }
-+ return TRUE;
-+ io_lose:
-+ return FALSE;
-+}
-+
-+
-+gboolean
-+dbus_binding_tool_output_glib_client (BaseInfo *info, GIOChannel *channel, gboolean ignore_unsupported, GError **error)
-+{
-+ DBusBindingToolCData data;
-+ gboolean ret;
-+
-+ memset (&data, 0, sizeof (data));
-+
-+ data.channel = channel;
-+ data.ignore_unsupported = ignore_unsupported;
-+
-+ dbus_g_type_specialized_init ();
-+ _dbus_g_type_specialized_builtins_init ();
-+
-+ WRITE_OR_LOSE ("/* Generated by dbus-binding-tool; do not edit! */\n\n");
-+ WRITE_OR_LOSE ("#include <glib/gtypes.h>\n");
-+ WRITE_OR_LOSE ("#include <glib/gerror.h>\n");
-+ WRITE_OR_LOSE ("#include <dbus/dbus-glib.h>\n\n");
-+ WRITE_OR_LOSE ("G_BEGIN_DECLS\n\n");
-+
-+ ret = generate_client_glue (info, &data, error);
-+ if (!ret)
-+ goto io_lose;
-+
-+ WRITE_OR_LOSE ("G_END_DECLS\n");
-+
-+ return ret;
-+ io_lose:
-+ return FALSE;
-+}
-diff -Naur dbus-0.61.orig/glib/dbus-binding-tool-glib.h dbus-0.61/glib/dbus-binding-tool-glib.h
---- dbus-0.61.orig/glib/dbus-binding-tool-glib.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-binding-tool-glib.h 2006-01-27 17:40:54.000000000 +0100
-@@ -0,0 +1,40 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-binding-tool-output-glib.h prototypes for glib output
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it bwill 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_BINDING_TOOL_OUTPUT_GLIB_H
-+#define DBUS_BINDING_TOOL_OUTPUT_GLIB_H
-+
-+G_BEGIN_DECLS
-+
-+#define DBUS_GLIB_ANNOTATION_C_SYMBOL "org.freedesktop.DBus.GLib.CSymbol"
-+#define DBUS_GLIB_ANNOTATION_CLIENT_C_SYMBOL "org.freedesktop.DBus.GLib.ClientCSymbol"
-+#define DBUS_GLIB_ANNOTATION_ASYNC "org.freedesktop.DBus.GLib.Async"
-+#define DBUS_GLIB_ANNOTATION_CONST "org.freedesktop.DBus.GLib.Const"
-+#define DBUS_GLIB_ANNOTATION_RETURNVAL "org.freedesktop.DBus.GLib.ReturnVal"
-+#define DBUS_GLIB_ANNOTATION_NOREPLY "org.freedesktop.DBus.Method.NoReply"
-+
-+gboolean dbus_binding_tool_output_glib_client (BaseInfo *info, GIOChannel *channel, gboolean ignore_unsupported, GError **error);
-+gboolean dbus_binding_tool_output_glib_server (BaseInfo *info, GIOChannel *channel, const char *prefix, GError **error);
-+
-+G_END_DECLS
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/dbus-gidl.c dbus-0.61/glib/dbus-gidl.c
---- dbus-0.61.orig/glib/dbus-gidl.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gidl.c 2005-08-01 18:12:53.000000000 +0200
-@@ -0,0 +1,788 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gidl.c data structure describing an interface, to be generated from IDL
-+ * or something
-+ *
-+ * Copyright (C) 2003, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-gidl.h"
-+
-+#ifndef DOXYGEN_SHOULD_SKIP_THIS
-+
-+struct BaseInfo
-+{
-+ unsigned int refcount : 28;
-+ unsigned int type : 4;
-+ char *name;
-+};
-+
-+struct NodeInfo
-+{
-+ BaseInfo base;
-+ GSList *interfaces;
-+ GSList *nodes;
-+};
-+
-+struct InterfaceInfo
-+{
-+ BaseInfo base;
-+ GHashTable *annotations;
-+ /* Since we have BaseInfo now these could be one list */
-+ GSList *methods;
-+ GSList *signals;
-+ GSList *properties;
-+};
-+
-+struct MethodInfo
-+{
-+ BaseInfo base;
-+ GHashTable *annotations;
-+ GSList *args;
-+};
-+
-+struct SignalInfo
-+{
-+ BaseInfo base;
-+ GSList *args;
-+};
-+
-+struct PropertyInfo
-+{
-+ BaseInfo base;
-+ char *type;
-+ PropertyAccessFlags access;
-+};
-+
-+struct ArgInfo
-+{
-+ BaseInfo base;
-+ char *type;
-+ ArgDirection direction;
-+ GHashTable *annotations;
-+};
-+
-+static void
-+get_hash_key (gpointer key, gpointer value, gpointer data)
-+{
-+ GSList **list = data;
-+ *list = g_slist_prepend (*list, key);
-+}
-+
-+static GSList *
-+get_hash_keys (GHashTable *table)
-+{
-+ GSList *ret = NULL;
-+
-+ g_hash_table_foreach (table, get_hash_key, &ret);
-+
-+ return ret;
-+}
-+
-+BaseInfo *
-+base_info_ref (BaseInfo *info)
-+{
-+ g_return_val_if_fail (info != NULL, NULL);
-+ g_return_val_if_fail (info->refcount > 0, NULL);
-+
-+ info->refcount += 1;
-+
-+ return info;
-+}
-+
-+static void
-+base_info_free (void *ptr)
-+{
-+ BaseInfo *info;
-+
-+ info = ptr;
-+
-+ g_free (info->name);
-+ g_free (info);
-+}
-+
-+void
-+base_info_unref (BaseInfo *info)
-+{
-+ g_return_if_fail (info != NULL);
-+ g_return_if_fail (info->refcount > 0);
-+
-+ /* This is sort of bizarre, BaseInfo was tacked on later */
-+
-+ switch (info->type)
-+ {
-+ case INFO_TYPE_NODE:
-+ node_info_unref ((NodeInfo*) info);
-+ break;
-+ case INFO_TYPE_INTERFACE:
-+ interface_info_unref ((InterfaceInfo*) info);
-+ break;
-+ case INFO_TYPE_SIGNAL:
-+ signal_info_unref ((SignalInfo*) info);
-+ break;
-+ case INFO_TYPE_METHOD:
-+ method_info_unref ((MethodInfo*) info);
-+ break;
-+ case INFO_TYPE_PROPERTY:
-+ property_info_unref ((PropertyInfo*) info);
-+ break;
-+ case INFO_TYPE_ARG:
-+ arg_info_unref ((ArgInfo*) info);
-+ break;
-+ }
-+}
-+
-+InfoType
-+base_info_get_type (BaseInfo *info)
-+{
-+ return info->type;
-+}
-+
-+const char*
-+base_info_get_name (BaseInfo *info)
-+{
-+ return info->name;
-+}
-+
-+void
-+base_info_set_name (BaseInfo *info,
-+ const char *name)
-+{
-+ char *old;
-+
-+ old = info->name;
-+ info->name = g_strdup (name);
-+ g_free (old);
-+}
-+
-+GType
-+base_info_get_gtype (void)
-+{
-+ static GType our_type = 0;
-+
-+ if (our_type == 0)
-+ our_type = g_boxed_type_register_static ("BaseInfo",
-+ (GBoxedCopyFunc) base_info_ref,
-+ (GBoxedFreeFunc) base_info_unref);
-+
-+ return our_type;
-+}
-+
-+static void
-+free_interface_list (GSList **interfaces_p)
-+{
-+ GSList *tmp;
-+ tmp = *interfaces_p;
-+ while (tmp != NULL)
-+ {
-+ interface_info_unref (tmp->data);
-+ tmp = tmp->next;
-+ }
-+ g_slist_free (*interfaces_p);
-+ *interfaces_p = NULL;
-+}
-+
-+static void
-+free_node_list (GSList **nodes_p)
-+{
-+ GSList *tmp;
-+ tmp = *nodes_p;
-+ while (tmp != NULL)
-+ {
-+ node_info_unref (tmp->data);
-+ tmp = tmp->next;
-+ }
-+ g_slist_free (*nodes_p);
-+ *nodes_p = NULL;
-+}
-+
-+static void
-+free_method_list (GSList **methods_p)
-+{
-+ GSList *tmp;
-+ tmp = *methods_p;
-+ while (tmp != NULL)
-+ {
-+ method_info_unref (tmp->data);
-+ tmp = tmp->next;
-+ }
-+ g_slist_free (*methods_p);
-+ *methods_p = NULL;
-+}
-+
-+static void
-+free_signal_list (GSList **signals_p)
-+{
-+ GSList *tmp;
-+ tmp = *signals_p;
-+ while (tmp != NULL)
-+ {
-+ signal_info_unref (tmp->data);
-+ tmp = tmp->next;
-+ }
-+ g_slist_free (*signals_p);
-+ *signals_p = NULL;
-+}
-+
-+static void
-+free_property_list (GSList **props_p)
-+{
-+ GSList *tmp;
-+ tmp = *props_p;
-+ while (tmp != NULL)
-+ {
-+ property_info_unref (tmp->data);
-+ tmp = tmp->next;
-+ }
-+ g_slist_free (*props_p);
-+ *props_p = NULL;
-+}
-+
-+NodeInfo*
-+node_info_new (const char *name)
-+{
-+ NodeInfo *info;
-+
-+ /* name can be NULL */
-+
-+ info = g_new0 (NodeInfo, 1);
-+ info->base.refcount = 1;
-+ info->base.name = g_strdup (name);
-+ info->base.type = INFO_TYPE_NODE;
-+
-+ return info;
-+}
-+
-+NodeInfo *
-+node_info_ref (NodeInfo *info)
-+{
-+ info->base.refcount += 1;
-+
-+ return info;
-+}
-+
-+void
-+node_info_unref (NodeInfo *info)
-+{
-+ info->base.refcount -= 1;
-+ if (info->base.refcount == 0)
-+ {
-+ free_interface_list (&info->interfaces);
-+ free_node_list (&info->nodes);
-+ base_info_free (info);
-+ }
-+}
-+
-+const char*
-+node_info_get_name (NodeInfo *info)
-+{
-+ return info->base.name;
-+}
-+
-+GSList*
-+node_info_get_interfaces (NodeInfo *info)
-+{
-+ return info->interfaces;
-+}
-+
-+void
-+node_info_add_interface (NodeInfo *info,
-+ InterfaceInfo *interface)
-+{
-+ interface_info_ref (interface);
-+ info->interfaces = g_slist_append (info->interfaces, interface);
-+}
-+
-+GSList*
-+node_info_get_nodes (NodeInfo *info)
-+{
-+ return info->nodes;
-+}
-+
-+void
-+node_info_add_node (NodeInfo *info,
-+ NodeInfo *node)
-+{
-+ node_info_ref (node);
-+ info->nodes = g_slist_append (info->nodes, node);
-+}
-+
-+void
-+node_info_replace_node (NodeInfo *info,
-+ NodeInfo *old_child,
-+ NodeInfo *new_child)
-+{
-+ GSList *link;
-+
-+ node_info_ref (new_child); /* before unref old_child in case they are the same */
-+ link = g_slist_find (info->nodes, old_child);
-+ g_assert (link != NULL);
-+ node_info_unref (old_child);
-+ link->data = new_child;
-+}
-+
-+InterfaceInfo*
-+interface_info_new (const char *name)
-+{
-+ InterfaceInfo *info;
-+
-+ info = g_new0 (InterfaceInfo, 1);
-+ info->base.refcount = 1;
-+ info->base.name = g_strdup (name);
-+ info->base.type = INFO_TYPE_INTERFACE;
-+ info->annotations = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ (GDestroyNotify) g_free,
-+ (GDestroyNotify) g_free);
-+
-+ return info;
-+}
-+
-+InterfaceInfo *
-+interface_info_ref (InterfaceInfo *info)
-+{
-+ info->base.refcount += 1;
-+
-+ return info;
-+}
-+
-+void
-+interface_info_unref (InterfaceInfo *info)
-+{
-+ info->base.refcount -= 1;
-+ if (info->base.refcount == 0)
-+ {
-+ g_hash_table_destroy (info->annotations);
-+ free_method_list (&info->methods);
-+ free_signal_list (&info->signals);
-+ free_property_list (&info->properties);
-+ base_info_free (info);
-+ }
-+}
-+
-+const char*
-+interface_info_get_name (InterfaceInfo *info)
-+{
-+ return info->base.name;
-+}
-+
-+GSList *
-+interface_info_get_annotations (InterfaceInfo *info)
-+{
-+ return get_hash_keys (info->annotations);
-+}
-+
-+const char*
-+interface_info_get_annotation (InterfaceInfo *info,
-+ const char *name)
-+{
-+ return g_hash_table_lookup (info->annotations, name);
-+}
-+
-+GSList*
-+interface_info_get_methods (InterfaceInfo *info)
-+{
-+ return info->methods;
-+}
-+
-+GSList*
-+interface_info_get_signals (InterfaceInfo *info)
-+{
-+ return info->signals;
-+}
-+
-+GSList*
-+interface_info_get_properties (InterfaceInfo *info)
-+{
-+ return info->properties;
-+}
-+
-+void
-+interface_info_add_annotation (InterfaceInfo *info,
-+ const char *name,
-+ const char *value)
-+{
-+ g_hash_table_insert (info->annotations,
-+ g_strdup (name),
-+ g_strdup (value));
-+}
-+
-+void
-+interface_info_add_method (InterfaceInfo *info,
-+ MethodInfo *method)
-+{
-+ method_info_ref (method);
-+ info->methods = g_slist_append (info->methods, method);
-+}
-+
-+void
-+interface_info_add_signal (InterfaceInfo *info,
-+ SignalInfo *signal)
-+{
-+ signal_info_ref (signal);
-+ info->signals = g_slist_append (info->signals, signal);
-+}
-+
-+void
-+interface_info_add_property (InterfaceInfo *info,
-+ PropertyInfo *property)
-+{
-+ property_info_ref (property);
-+ info->properties = g_slist_append (info->properties, property);
-+}
-+
-+static void
-+free_arg_list (GSList **args_p)
-+{
-+ GSList *tmp;
-+ tmp = *args_p;
-+ while (tmp != NULL)
-+ {
-+ ArgInfo *ai = tmp->data;
-+ g_assert (ai->base.type == INFO_TYPE_ARG);
-+ arg_info_unref (tmp->data);
-+ tmp = tmp->next;
-+ }
-+ g_slist_free (*args_p);
-+ *args_p = NULL;
-+}
-+
-+MethodInfo*
-+method_info_new (const char *name)
-+{
-+ MethodInfo *info;
-+
-+ info = g_new0 (MethodInfo, 1);
-+ info->base.refcount = 1;
-+ info->base.name = g_strdup (name);
-+ info->base.type = INFO_TYPE_METHOD;
-+ info->annotations = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ (GDestroyNotify) g_free,
-+ (GDestroyNotify) g_free);
-+
-+ return info;
-+}
-+
-+MethodInfo *
-+method_info_ref (MethodInfo *info)
-+{
-+ info->base.refcount += 1;
-+
-+ return info;
-+}
-+
-+void
-+method_info_unref (MethodInfo *info)
-+{
-+ info->base.refcount -= 1;
-+ if (info->base.refcount == 0)
-+ {
-+ g_hash_table_destroy (info->annotations);
-+ free_arg_list (&info->args);
-+ base_info_free (info);
-+ }
-+}
-+
-+const char*
-+method_info_get_name (MethodInfo *info)
-+{
-+ return info->base.name;
-+}
-+
-+GSList *
-+method_info_get_annotations (MethodInfo *info)
-+{
-+ return get_hash_keys (info->annotations);
-+}
-+
-+const char*
-+method_info_get_annotation (MethodInfo *info,
-+ const char *name)
-+{
-+ return g_hash_table_lookup (info->annotations, name);
-+}
-+
-+GSList*
-+method_info_get_args (MethodInfo *info)
-+{
-+ return info->args;
-+}
-+
-+int
-+method_info_get_n_args (MethodInfo *info)
-+{
-+ return g_slist_length (info->args);
-+}
-+
-+static int
-+args_sort_by_direction (const void *a,
-+ const void *b)
-+{
-+ const ArgInfo *arg_a = a;
-+ const ArgInfo *arg_b = b;
-+
-+ if (arg_a->direction == arg_b->direction)
-+ return 0;
-+ else if (arg_a->direction == ARG_IN)
-+ return -1; /* in is less than out */
-+ else
-+ return 1;
-+}
-+
-+void
-+method_info_add_annotation (MethodInfo *info,
-+ const char *name,
-+ const char *value)
-+{
-+ g_hash_table_insert (info->annotations,
-+ g_strdup (name),
-+ g_strdup (value));
-+}
-+
-+void
-+method_info_add_arg (MethodInfo *info,
-+ ArgInfo *arg)
-+{
-+ arg_info_ref (arg);
-+ info->args = g_slist_append (info->args, arg);
-+
-+ /* Keep "in" args sorted before "out" and otherwise maintain
-+ * stable order (g_slist_sort is stable, at least in sufficiently
-+ * new glib)
-+ */
-+ info->args = g_slist_sort (info->args, args_sort_by_direction);
-+}
-+
-+SignalInfo*
-+signal_info_new (const char *name)
-+{
-+ SignalInfo *info;
-+
-+ info = g_new0 (SignalInfo, 1);
-+ info->base.refcount = 1;
-+ info->base.name = g_strdup (name);
-+ info->base.type = INFO_TYPE_SIGNAL;
-+
-+ return info;
-+}
-+
-+SignalInfo *
-+signal_info_ref (SignalInfo *info)
-+{
-+ info->base.refcount += 1;
-+
-+ return info;
-+}
-+
-+void
-+signal_info_unref (SignalInfo *info)
-+{
-+ info->base.refcount -= 1;
-+ if (info->base.refcount == 0)
-+ {
-+ free_arg_list (&info->args);
-+ base_info_free (info);
-+ }
-+}
-+
-+const char*
-+signal_info_get_name (SignalInfo *info)
-+{
-+ return info->base.name;
-+}
-+
-+GSList*
-+signal_info_get_args (SignalInfo *info)
-+{
-+ return info->args;
-+}
-+
-+int
-+signal_info_get_n_args (SignalInfo *info)
-+{
-+ return g_slist_length (info->args);
-+}
-+
-+void
-+signal_info_add_arg (SignalInfo *info,
-+ ArgInfo *arg)
-+{
-+ g_assert (arg->direction == ARG_OUT);
-+
-+ arg_info_ref (arg);
-+ info->args = g_slist_append (info->args, arg);
-+
-+ /* signal args don't need sorting since only "out" is allowed */
-+}
-+
-+PropertyInfo*
-+property_info_new (const char *name,
-+ const char *type,
-+ PropertyAccessFlags access)
-+{
-+ PropertyInfo *info;
-+
-+ info = g_new0 (PropertyInfo, 1);
-+ info->base.refcount = 1;
-+ info->base.name = g_strdup (name);
-+ info->base.type = INFO_TYPE_PROPERTY;
-+
-+ info->type = g_strdup (type);
-+ info->access = access;
-+
-+ return info;
-+}
-+
-+PropertyInfo*
-+property_info_ref (PropertyInfo *info)
-+{
-+ info->base.refcount += 1;
-+
-+ return info;
-+}
-+
-+void
-+property_info_unref (PropertyInfo *info)
-+{
-+ info->base.refcount -= 1;
-+ if (info->base.refcount == 0)
-+ {
-+ g_free (info->type);
-+ base_info_free (info);
-+ }
-+}
-+
-+const char*
-+property_info_get_name (PropertyInfo *info)
-+{
-+ return info->base.name;
-+}
-+
-+const char *
-+property_info_get_type (PropertyInfo *info)
-+{
-+ return info->type;
-+}
-+
-+PropertyAccessFlags
-+property_info_get_access (PropertyInfo *info)
-+{
-+ return info->access;
-+}
-+
-+ArgInfo*
-+arg_info_new (const char *name,
-+ ArgDirection direction,
-+ const char *type)
-+{
-+ ArgInfo *info;
-+
-+ info = g_new0 (ArgInfo, 1);
-+ info->base.refcount = 1;
-+ info->base.type = INFO_TYPE_ARG;
-+
-+ /* name can be NULL */
-+ info->base.name = g_strdup (name);
-+ info->direction = direction;
-+ info->type = g_strdup (type);
-+ info->annotations = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ (GDestroyNotify) g_free,
-+ (GDestroyNotify) g_free);
-+
-+ return info;
-+}
-+
-+ArgInfo *
-+arg_info_ref (ArgInfo *info)
-+{
-+ info->base.refcount += 1;
-+
-+ return info;
-+}
-+
-+void
-+arg_info_unref (ArgInfo *info)
-+{
-+ info->base.refcount -= 1;
-+ if (info->base.refcount == 0)
-+ {
-+ g_hash_table_destroy (info->annotations);
-+ g_free (info->type);
-+ base_info_free (info);
-+ }
-+}
-+
-+const char*
-+arg_info_get_name (ArgInfo *info)
-+{
-+ return info->base.name;
-+}
-+
-+const char *
-+arg_info_get_type (ArgInfo *info)
-+{
-+ return info->type;
-+}
-+
-+ArgDirection
-+arg_info_get_direction (ArgInfo *info)
-+{
-+ return info->direction;
-+}
-+
-+GSList*
-+arg_info_get_annotations (ArgInfo *info)
-+{
-+ return get_hash_keys (info->annotations);
-+}
-+
-+const char*
-+arg_info_get_annotation (ArgInfo *info,
-+ const char *annotation)
-+{
-+ return g_hash_table_lookup (info->annotations, annotation);
-+}
-+
-+void
-+arg_info_add_annotation (ArgInfo *info,
-+ const char *name,
-+ const char *value)
-+{
-+ g_hash_table_insert (info->annotations,
-+ g_strdup (name),
-+ g_strdup (value));
-+}
-+
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+/**
-+ * @ingroup DBusGIDL
-+ * Unit test for GLib IDL internals
-+ * @returns #TRUE on success.
-+ */
-+gboolean
-+_dbus_gidl_test (void)
-+{
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-diff -Naur dbus-0.61.orig/glib/dbus-gidl.h dbus-0.61/glib/dbus-gidl.h
---- dbus-0.61.orig/glib/dbus-gidl.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gidl.h 2005-07-09 19:52:52.000000000 +0200
-@@ -0,0 +1,158 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gidl.h data structure describing an interface, to be generated from IDL
-+ * or something
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_GLIB_IDL_H
-+#define DBUS_GLIB_IDL_H
-+
-+#ifndef DOXYGEN_SHOULD_SKIP_THIS
-+
-+#include <dbus/dbus.h>
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+typedef struct BaseInfo BaseInfo;
-+typedef struct NodeInfo NodeInfo;
-+typedef struct InterfaceInfo InterfaceInfo;
-+typedef struct MethodInfo MethodInfo;
-+typedef struct SignalInfo SignalInfo;
-+typedef struct PropertyInfo PropertyInfo;
-+typedef struct ArgInfo ArgInfo;
-+
-+typedef enum
-+{
-+ ARG_INVALID = -1,
-+ ARG_IN,
-+ ARG_OUT
-+} ArgDirection;
-+
-+typedef enum
-+{
-+ PROPERTY_READ = 1 << 0,
-+ PROPERTY_WRITE = 1 << 1
-+} PropertyAccessFlags;
-+
-+typedef enum
-+{
-+ INFO_TYPE_NODE,
-+ INFO_TYPE_INTERFACE,
-+ INFO_TYPE_METHOD,
-+ INFO_TYPE_SIGNAL,
-+ INFO_TYPE_ARG,
-+ INFO_TYPE_PROPERTY
-+
-+} InfoType;
-+
-+BaseInfo* base_info_ref (BaseInfo *info);
-+void base_info_unref (BaseInfo *info);
-+InfoType base_info_get_type (BaseInfo *info);
-+const char* base_info_get_name (BaseInfo *info);
-+void base_info_set_name (BaseInfo *info,
-+ const char *name);
-+GType base_info_get_gtype (void);
-+#define BASE_INFO_TYPE (base_info_get_gtype ())
-+
-+
-+NodeInfo* node_info_new (const char *name);
-+NodeInfo* node_info_ref (NodeInfo *info);
-+void node_info_unref (NodeInfo *info);
-+const char* node_info_get_name (NodeInfo *info);
-+GSList* node_info_get_interfaces (NodeInfo *info);
-+GSList* node_info_get_nodes (NodeInfo *info);
-+void node_info_add_interface (NodeInfo *info,
-+ InterfaceInfo *interface);
-+void node_info_add_node (NodeInfo *info,
-+ NodeInfo *child);
-+void node_info_replace_node (NodeInfo *info,
-+ NodeInfo *old_child,
-+ NodeInfo *new_child);
-+InterfaceInfo* interface_info_new (const char *name);
-+InterfaceInfo* interface_info_ref (InterfaceInfo *info);
-+void interface_info_unref (InterfaceInfo *info);
-+const char* interface_info_get_name (InterfaceInfo *info);
-+GSList* interface_info_get_annotations(InterfaceInfo *info);
-+const char* interface_info_get_annotation (InterfaceInfo*info,
-+ const char *annotation);
-+GSList* interface_info_get_methods (InterfaceInfo *info);
-+GSList* interface_info_get_signals (InterfaceInfo *info);
-+GSList* interface_info_get_properties (InterfaceInfo *info);
-+void interface_info_add_annotation (InterfaceInfo *info,
-+ const char *name,
-+ const char *value);
-+void interface_info_add_method (InterfaceInfo *info,
-+ MethodInfo *method);
-+void interface_info_add_signal (InterfaceInfo *info,
-+ SignalInfo *signal);
-+void interface_info_add_property (InterfaceInfo *info,
-+ PropertyInfo *property);
-+MethodInfo* method_info_new (const char *name);
-+MethodInfo* method_info_ref (MethodInfo *info);
-+void method_info_unref (MethodInfo *info);
-+const char* method_info_get_name (MethodInfo *info);
-+GSList* method_info_get_annotations (MethodInfo *info);
-+const char* method_info_get_annotation (MethodInfo *info,
-+ const char *annotation);
-+void method_info_add_annotation (MethodInfo *info,
-+ const char *name,
-+ const char *value);
-+GSList* method_info_get_args (MethodInfo *info);
-+void method_info_add_arg (MethodInfo *info,
-+ ArgInfo *arg);
-+int method_info_get_n_args (MethodInfo *info);
-+SignalInfo* signal_info_new (const char *name);
-+SignalInfo* signal_info_ref (SignalInfo *info);
-+void signal_info_unref (SignalInfo *info);
-+const char* signal_info_get_name (SignalInfo *info);
-+GSList* signal_info_get_args (SignalInfo *info);
-+void signal_info_add_arg (SignalInfo *info,
-+ ArgInfo *arg);
-+int signal_info_get_n_args (SignalInfo *info);
-+PropertyInfo* property_info_new (const char *name,
-+ const char *type,
-+ PropertyAccessFlags access);
-+PropertyInfo* property_info_ref (PropertyInfo *info);
-+void property_info_unref (PropertyInfo *info);
-+const char* property_info_get_name (PropertyInfo *info);
-+const char* property_info_get_type (PropertyInfo *info);
-+PropertyAccessFlags property_info_get_access (PropertyInfo *info);
-+ArgInfo* arg_info_new (const char *name,
-+ ArgDirection direction,
-+ const char *type);
-+ArgInfo* arg_info_ref (ArgInfo *info);
-+void arg_info_unref (ArgInfo *info);
-+const char* arg_info_get_name (ArgInfo *info);
-+const char* arg_info_get_type (ArgInfo *info);
-+ArgDirection arg_info_get_direction (ArgInfo *info);
-+GSList* arg_info_get_annotations (ArgInfo *info);
-+const char* arg_info_get_annotation (ArgInfo *info,
-+ const char *annotation);
-+void arg_info_add_annotation (ArgInfo *info,
-+ const char *name,
-+ const char *value);
-+
-+
-+G_END_DECLS
-+
-+#endif /* DBUS_GLIB_IDL_H */
-+
-+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-diff -Naur dbus-0.61.orig/glib/dbus-glib-error-switch.h dbus-0.61/glib/dbus-glib-error-switch.h
---- dbus-0.61.orig/glib/dbus-glib-error-switch.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-glib-error-switch.h 2006-02-24 16:50:26.000000000 +0100
-@@ -0,0 +1,67 @@
-+static gint
-+dbus_error_to_gerror_code (const char *derr)
-+{
-+ if (0) ;
-+ else if (!strcmp (derr, DBUS_ERROR_FAILED ))
-+ return DBUS_GERROR_FAILED ;
-+ else if (!strcmp (derr, DBUS_ERROR_NO_MEMORY ))
-+ return DBUS_GERROR_NO_MEMORY ;
-+ else if (!strcmp (derr, DBUS_ERROR_SERVICE_UNKNOWN ))
-+ return DBUS_GERROR_SERVICE_UNKNOWN ;
-+ else if (!strcmp (derr, DBUS_ERROR_NAME_HAS_NO_OWNER ))
-+ return DBUS_GERROR_NAME_HAS_NO_OWNER ;
-+ else if (!strcmp (derr, DBUS_ERROR_NO_REPLY ))
-+ return DBUS_GERROR_NO_REPLY ;
-+ else if (!strcmp (derr, DBUS_ERROR_IO_ERROR ))
-+ return DBUS_GERROR_IO_ERROR ;
-+ else if (!strcmp (derr, DBUS_ERROR_BAD_ADDRESS ))
-+ return DBUS_GERROR_BAD_ADDRESS ;
-+ else if (!strcmp (derr, DBUS_ERROR_NOT_SUPPORTED ))
-+ return DBUS_GERROR_NOT_SUPPORTED ;
-+ else if (!strcmp (derr, DBUS_ERROR_LIMITS_EXCEEDED ))
-+ return DBUS_GERROR_LIMITS_EXCEEDED ;
-+ else if (!strcmp (derr, DBUS_ERROR_ACCESS_DENIED ))
-+ return DBUS_GERROR_ACCESS_DENIED ;
-+ else if (!strcmp (derr, DBUS_ERROR_AUTH_FAILED ))
-+ return DBUS_GERROR_AUTH_FAILED ;
-+ else if (!strcmp (derr, DBUS_ERROR_NO_SERVER ))
-+ return DBUS_GERROR_NO_SERVER ;
-+ else if (!strcmp (derr, DBUS_ERROR_TIMEOUT ))
-+ return DBUS_GERROR_TIMEOUT ;
-+ else if (!strcmp (derr, DBUS_ERROR_NO_NETWORK ))
-+ return DBUS_GERROR_NO_NETWORK ;
-+ else if (!strcmp (derr, DBUS_ERROR_ADDRESS_IN_USE ))
-+ return DBUS_GERROR_ADDRESS_IN_USE ;
-+ else if (!strcmp (derr, DBUS_ERROR_DISCONNECTED ))
-+ return DBUS_GERROR_DISCONNECTED ;
-+ else if (!strcmp (derr, DBUS_ERROR_INVALID_ARGS ))
-+ return DBUS_GERROR_INVALID_ARGS ;
-+ else if (!strcmp (derr, DBUS_ERROR_FILE_NOT_FOUND ))
-+ return DBUS_GERROR_FILE_NOT_FOUND ;
-+ else if (!strcmp (derr, DBUS_ERROR_UNKNOWN_METHOD ))
-+ return DBUS_GERROR_UNKNOWN_METHOD ;
-+ else if (!strcmp (derr, DBUS_ERROR_TIMED_OUT ))
-+ return DBUS_GERROR_TIMED_OUT ;
-+ else if (!strcmp (derr, DBUS_ERROR_MATCH_RULE_NOT_FOUND ))
-+ return DBUS_GERROR_MATCH_RULE_NOT_FOUND ;
-+ else if (!strcmp (derr, DBUS_ERROR_MATCH_RULE_INVALID ))
-+ return DBUS_GERROR_MATCH_RULE_INVALID ;
-+ else if (!strcmp (derr, DBUS_ERROR_SPAWN_EXEC_FAILED ))
-+ return DBUS_GERROR_SPAWN_EXEC_FAILED ;
-+ else if (!strcmp (derr, DBUS_ERROR_SPAWN_FORK_FAILED ))
-+ return DBUS_GERROR_SPAWN_FORK_FAILED ;
-+ else if (!strcmp (derr, DBUS_ERROR_SPAWN_CHILD_EXITED ))
-+ return DBUS_GERROR_SPAWN_CHILD_EXITED ;
-+ else if (!strcmp (derr, DBUS_ERROR_SPAWN_CHILD_SIGNALED ))
-+ return DBUS_GERROR_SPAWN_CHILD_SIGNALED ;
-+ else if (!strcmp (derr, DBUS_ERROR_SPAWN_FAILED ))
-+ return DBUS_GERROR_SPAWN_FAILED ;
-+ else if (!strcmp (derr, DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN ))
-+ return DBUS_GERROR_UNIX_PROCESS_ID_UNKNOWN ;
-+ else if (!strcmp (derr, DBUS_ERROR_INVALID_SIGNATURE ))
-+ return DBUS_GERROR_INVALID_SIGNATURE ;
-+ else if (!strcmp (derr, DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN ))
-+ return DBUS_GERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN ;
-+ else
-+ return DBUS_GERROR_REMOTE_EXCEPTION;
-+}
-diff -Naur dbus-0.61.orig/glib/dbus-glib-tool.c dbus-0.61/glib/dbus-glib-tool.c
---- dbus-0.61.orig/glib/dbus-glib-tool.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-glib-tool.c 2005-11-30 20:32:26.000000000 +0100
-@@ -0,0 +1,489 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-glib-tool.c Tool used by apps using glib bindings
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "dbus-gidl.h"
-+#include "dbus-gparser.h"
-+#include "dbus-gutils.h"
-+#include "dbus-glib-tool.h"
-+#include "dbus-binding-tool-glib.h"
-+#include <locale.h>
-+#include <libintl.h>
-+#define _(x) dgettext (GETTEXT_PACKAGE, x)
-+#define N_(x) x
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <sys/stat.h>
-+#include <string.h>
-+#include <time.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+static void run_all_tests (const char *test_data_dir);
-+#endif
-+
-+typedef enum {
-+ DBUS_BINDING_OUTPUT_NONE,
-+ DBUS_BINDING_OUTPUT_PRETTY,
-+ DBUS_BINDING_OUTPUT_GLIB_SERVER,
-+ DBUS_BINDING_OUTPUT_GLIB_CLIENT
-+} DBusBindingOutputMode;
-+
-+static void
-+indent (int depth)
-+{
-+ depth *= 2; /* 2-space indent */
-+
-+ while (depth > 0)
-+ {
-+ putc (' ', stdout);
-+ --depth;
-+ }
-+}
-+
-+static void pretty_print (BaseInfo *base,
-+ int depth);
-+
-+static void
-+pretty_print_list (GSList *list,
-+ int depth)
-+{
-+ GSList *tmp;
-+
-+ tmp = list;
-+ while (tmp != NULL)
-+ {
-+ pretty_print (tmp->data, depth);
-+ tmp = tmp->next;
-+ }
-+}
-+
-+static void
-+pretty_print (BaseInfo *base,
-+ int depth)
-+{
-+ InfoType t;
-+ const char *name;
-+
-+ t = base_info_get_type (base);
-+ name = base_info_get_name (base);
-+
-+ indent (depth);
-+
-+ switch (t)
-+ {
-+ case INFO_TYPE_NODE:
-+ {
-+ NodeInfo *n = (NodeInfo*) base;
-+
-+ if (name == NULL)
-+ printf (_("<anonymous node> {\n"));
-+ else
-+ printf (_("node \"%s\" {\n"), name);
-+
-+ pretty_print_list (node_info_get_interfaces (n), depth + 1);
-+ pretty_print_list (node_info_get_nodes (n), depth + 1);
-+
-+ indent (depth);
-+ printf ("}\n");
-+ }
-+ break;
-+ case INFO_TYPE_INTERFACE:
-+ {
-+ InterfaceInfo *i = (InterfaceInfo*) base;
-+ GSList *annotations, *elt;
-+
-+ g_assert (name != NULL);
-+
-+ printf (_("interface \"%s\" {\n"), name);
-+
-+ annotations = interface_info_get_annotations (i);
-+ for (elt = annotations; elt; elt = elt->next)
-+ {
-+ const char *name = elt->data;
-+ const char *value = interface_info_get_annotation (i, name);
-+
-+ printf (_(" (binding \"%s\": \"%s\") "),
-+ name, value);
-+ }
-+ g_slist_free (annotations);
-+
-+ pretty_print_list (interface_info_get_methods (i), depth + 1);
-+ pretty_print_list (interface_info_get_signals (i), depth + 1);
-+ pretty_print_list (interface_info_get_properties (i), depth + 1);
-+
-+ indent (depth);
-+ printf ("}\n");
-+ }
-+ break;
-+ case INFO_TYPE_METHOD:
-+ {
-+ MethodInfo *m = (MethodInfo*) base;
-+ GSList *annotations, *elt;
-+
-+ g_assert (name != NULL);
-+
-+ annotations = method_info_get_annotations (m);
-+ printf (_("method \"%s\""), name);
-+ for (elt = annotations; elt; elt = elt->next)
-+ {
-+ const char *name = elt->data;
-+ const char *value = method_info_get_annotation (m, name);
-+
-+ printf (_(" (annotation \"%s\": \"%s\") "),
-+ name, value);
-+ }
-+ g_slist_free (annotations);
-+
-+ pretty_print_list (method_info_get_args (m), depth + 1);
-+
-+ indent (depth);
-+ printf (")\n");
-+ }
-+ break;
-+ case INFO_TYPE_SIGNAL:
-+ {
-+ SignalInfo *s = (SignalInfo*) base;
-+
-+ g_assert (name != NULL);
-+
-+ printf (_("signal \"%s\" (\n"), name);
-+
-+ pretty_print_list (signal_info_get_args (s), depth + 1);
-+
-+ indent (depth);
-+ printf (")\n");
-+ }
-+ break;
-+ case INFO_TYPE_PROPERTY:
-+ {
-+ PropertyInfo *a = (PropertyInfo*) base;
-+ const char *pt = property_info_get_type (a);
-+ PropertyAccessFlags acc = property_info_get_access (a);
-+
-+ printf ("%s%s %s",
-+ acc & PROPERTY_READ ? "read" : "",
-+ acc & PROPERTY_WRITE ? "write" : "",
-+ pt);
-+ if (name)
-+ printf (" %s\n", name);
-+ else
-+ printf ("\n");
-+ }
-+ break;
-+ case INFO_TYPE_ARG:
-+ {
-+ ArgInfo *a = (ArgInfo*) base;
-+ const char *at = arg_info_get_type (a);
-+ ArgDirection d = arg_info_get_direction (a);
-+
-+ printf ("%s %s",
-+ d == ARG_IN ? "in" : "out",
-+ at);
-+ if (name)
-+ printf (" %s\n", name);
-+ else
-+ printf ("\n");
-+ }
-+ break;
-+ }
-+}
-+
-+GQuark
-+dbus_binding_tool_error_quark (void)
-+{
-+ static GQuark quark = 0;
-+ if (!quark)
-+ quark = g_quark_from_static_string ("dbus_binding_tool_error");
-+
-+ return quark;
-+}
-+
-+static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-+static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
-+
-+static void
-+lose (const char *str, ...)
-+{
-+ va_list args;
-+
-+ va_start (args, str);
-+
-+ vfprintf (stderr, str, args);
-+ fputc ('\n', stderr);
-+
-+ va_end (args);
-+
-+ exit (1);
-+}
-+
-+static void
-+lose_gerror (const char *prefix, GError *error)
-+{
-+ lose ("%s: %s", prefix, error->message);
-+}
-+
-+static void
-+usage (int ecode)
-+{
-+ fprintf (stderr, "dbus-binding-tool [--version] [--help] [--pretty-print]\n");
-+ exit (ecode);
-+}
-+
-+static void
-+version (void)
-+{
-+ printf ("D-BUS Binding Tool %s\n"
-+ "Copyright (C) 2003-2005 Red Hat, Inc.\n"
-+ "This is free software; see the source for copying conditions.\n"
-+ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
-+ VERSION);
-+ exit (0);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ const char *output_file;
-+ const char *prefix;
-+ char *output_file_tmp;
-+ int i;
-+ GSList *files;
-+ DBusBindingOutputMode outputmode;
-+ gboolean end_of_args;
-+ GSList *tmp;
-+ GIOChannel *channel;
-+ GError *error;
-+ time_t newest_src;
-+ struct stat srcbuf;
-+ struct stat targetbuf;
-+ gboolean force;
-+ gboolean ignore_unsupported;
-+
-+ setlocale (LC_ALL, "");
-+ bindtextdomain (GETTEXT_PACKAGE, DBUS_LOCALEDIR);
-+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-+ textdomain (GETTEXT_PACKAGE);
-+
-+ g_type_init ();
-+
-+ outputmode = DBUS_BINDING_OUTPUT_NONE;
-+ end_of_args = FALSE;
-+ files = NULL;
-+ output_file = NULL;
-+ prefix = "";
-+ ignore_unsupported = FALSE;
-+ force = FALSE;
-+ i = 1;
-+ while (i < argc)
-+ {
-+ const char *arg = argv[i];
-+
-+ if (!end_of_args)
-+ {
-+ if (strcmp (arg, "--help") == 0 ||
-+ strcmp (arg, "-h") == 0 ||
-+ strcmp (arg, "-?") == 0)
-+ usage (0);
-+ else if (strcmp (arg, "--version") == 0)
-+ version ();
-+ else if (strcmp (arg, "--force") == 0)
-+ force = TRUE;
-+#ifdef DBUS_BUILD_TESTS
-+ else if (strcmp (arg, "--self-test") == 0)
-+ run_all_tests (NULL);
-+#endif /* DBUS_BUILD_TESTS */
-+ else if (strncmp (arg, "--mode=", 7) == 0)
-+ {
-+ const char *mode = arg + 7;
-+ if (!strcmp (mode, "pretty"))
-+ outputmode = DBUS_BINDING_OUTPUT_PRETTY;
-+ else if (!strcmp (mode, "glib-server"))
-+ outputmode = DBUS_BINDING_OUTPUT_GLIB_SERVER;
-+ else if (!strcmp (mode, "glib-client"))
-+ outputmode = DBUS_BINDING_OUTPUT_GLIB_CLIENT;
-+ else
-+ usage (1);
-+ }
-+ else if (strcmp (arg, "--ignore-unsupported") == 0)
-+ ignore_unsupported = TRUE;
-+ else if (strncmp (arg, "--output=", 9) == 0)
-+ {
-+ output_file = arg + 9;
-+ }
-+ else if (strncmp (arg, "--prefix=", 9) == 0)
-+ {
-+ prefix = arg + 9;
-+ }
-+ else if (arg[0] == '-' &&
-+ arg[1] == '-' &&
-+ arg[2] == '\0')
-+ end_of_args = TRUE;
-+ else if (arg[0] == '-')
-+ {
-+ usage (1);
-+ }
-+ else
-+ {
-+ files = g_slist_prepend (files, (char*) arg);
-+ }
-+ }
-+ else
-+ files = g_slist_prepend (files, (char*) arg);
-+
-+ ++i;
-+ }
-+
-+ error = NULL;
-+
-+ files = g_slist_reverse (files);
-+
-+ if (output_file && !force)
-+ {
-+ newest_src = 0;
-+ for (tmp = files; tmp != NULL; tmp = tmp->next)
-+ {
-+ const char *filename;
-+
-+ filename = tmp->data;
-+ if (stat (filename, &srcbuf) < 0)
-+ lose ("Couldn't stat %s: %s", filename, g_strerror (errno));
-+
-+ if (srcbuf.st_mtime > newest_src)
-+ newest_src = srcbuf.st_mtime;
-+ }
-+
-+ if (stat (output_file, &targetbuf) > 0
-+ && targetbuf.st_mtime >= newest_src)
-+ exit (0);
-+ }
-+
-+ if (output_file)
-+ {
-+ output_file_tmp = g_strconcat (output_file, ".tmp", NULL);
-+
-+ if (!(channel = g_io_channel_new_file (output_file_tmp, "w", &error)))
-+ lose_gerror (_("Couldn't open temporary file"), error);
-+ }
-+ else
-+ {
-+ channel = g_io_channel_unix_new (fileno (stdout));
-+ output_file_tmp = NULL; /* silence gcc */
-+ }
-+ if (!g_io_channel_set_encoding (channel, NULL, &error))
-+ lose_gerror (_("Couldn't set channel encoding to NULL"), error);
-+
-+
-+ for (tmp = files; tmp != NULL; tmp = tmp->next)
-+ {
-+ NodeInfo *node;
-+ GError *error;
-+ const char *filename;
-+
-+ filename = tmp->data;
-+
-+ error = NULL;
-+ node = description_load_from_file (filename,
-+ &error);
-+ if (node == NULL)
-+ {
-+ lose_gerror (_("Unable to load \"%s\""), error);
-+ }
-+ else
-+ {
-+ switch (outputmode)
-+ {
-+ case DBUS_BINDING_OUTPUT_PRETTY:
-+ pretty_print ((BaseInfo*) node, 0);
-+ break;
-+ case DBUS_BINDING_OUTPUT_GLIB_SERVER:
-+ if (!dbus_binding_tool_output_glib_server ((BaseInfo *) node, channel, prefix, &error))
-+ lose_gerror (_("Compilation failed"), error);
-+ break;
-+ case DBUS_BINDING_OUTPUT_GLIB_CLIENT:
-+ if (!dbus_binding_tool_output_glib_client ((BaseInfo *) node, channel, ignore_unsupported, &error))
-+ lose_gerror (_("Compilation failed"), error);
-+ break;
-+ case DBUS_BINDING_OUTPUT_NONE:
-+ break;
-+ }
-+ }
-+
-+ if (node)
-+ node_info_unref (node);
-+ }
-+
-+ if (g_io_channel_shutdown (channel, TRUE, &error) != G_IO_STATUS_NORMAL)
-+ lose_gerror (_("Failed to shutdown IO channel"), error);
-+ g_io_channel_unref (channel);
-+
-+ if (output_file)
-+ {
-+ if (rename (output_file_tmp, output_file) < 0)
-+ lose ("Failed to rename %s to %s: %s", output_file_tmp, output_file,
-+ g_strerror (errno));
-+ g_free (output_file_tmp);
-+ }
-+
-+ return 0;
-+}
-+
-+
-+#ifdef DBUS_BUILD_TESTS
-+static void
-+test_die (const char *failure)
-+{
-+ lose ("Unit test failed: %s", failure);
-+}
-+
-+/**
-+ * @ingroup DBusGTool
-+ * Unit test for GLib utility tool
-+ * @returns #TRUE on success.
-+ */
-+static gboolean
-+_dbus_gtool_test (const char *test_data_dir)
-+{
-+
-+ return TRUE;
-+}
-+
-+static void
-+run_all_tests (const char *test_data_dir)
-+{
-+ if (test_data_dir == NULL)
-+ test_data_dir = g_getenv ("DBUS_TEST_DATA");
-+
-+ if (test_data_dir != NULL)
-+ printf ("Test data in %s\n", test_data_dir);
-+ else
-+ printf ("No test data!\n");
-+
-+ printf ("%s: running binding tests\n", "dbus-binding-tool");
-+ if (!_dbus_gtool_test (test_data_dir))
-+ test_die ("gtool");
-+
-+ printf ("%s: completed successfully\n", "dbus-binding-tool");
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/glib/dbus-glib-tool.h dbus-0.61/glib/dbus-glib-tool.h
---- dbus-0.61.orig/glib/dbus-glib-tool.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-glib-tool.h 2005-07-09 20:54:45.000000000 +0200
-@@ -0,0 +1,38 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-glib-tool.h: Definitions used internally by binding tool
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_BINDING_TOOL_H
-+#define DBUS_BINDING_TOOL_H
-+
-+#include <glib/gquark.h>
-+
-+typedef enum
-+{
-+ DBUS_BINDING_TOOL_ERROR_UNSUPPORTED_CONVERSION,
-+ DBUS_BINDING_TOOL_ERROR_INVALID_ANNOTATION
-+} DBusBindingToolError;
-+
-+#define DBUS_BINDING_TOOL_ERROR dbus_binding_tool_error_quark ()
-+
-+GQuark dbus_binding_tool_error_quark (void);
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/dbus-glib.c dbus-0.61/glib/dbus-glib.c
---- dbus-0.61.orig/glib/dbus-glib.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-glib.c 2005-07-31 04:09:15.000000000 +0200
-@@ -0,0 +1,304 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-glib.c General GLib binding stuff
-+ *
-+ * Copyright (C) 2004 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include <dbus/dbus-glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include "dbus-gtest.h"
-+#include "dbus-gutils.h"
-+#include "dbus-gobject.h"
-+#include <string.h>
-+
-+#include <libintl.h>
-+#define _(x) dgettext (GETTEXT_PACKAGE, x)
-+#define N_(x) x
-+
-+/**
-+ * @addtogroup DBusGLib
-+ * @{
-+ */
-+
-+/**
-+ * Blocks until outgoing calls and signal emissions have been sent.
-+ *
-+ * @param connection the connection to flush
-+ */
-+void
-+dbus_g_connection_flush (DBusGConnection *connection)
-+{
-+ dbus_connection_flush (DBUS_CONNECTION_FROM_G_CONNECTION (connection));
-+}
-+
-+/**
-+ * Increment refcount on a #DBusGConnection
-+ *
-+ * @param gconnection the connection to ref
-+ * @returns the connection that was ref'd
-+ */
-+DBusGConnection*
-+dbus_g_connection_ref (DBusGConnection *gconnection)
-+{
-+ DBusConnection *c;
-+
-+ c = DBUS_CONNECTION_FROM_G_CONNECTION (gconnection);
-+ dbus_connection_ref (c);
-+ return gconnection;
-+}
-+
-+
-+/**
-+ * Decrement refcount on a #DBusGConnection
-+ *
-+ * @param gconnection the connection to unref
-+ */
-+void
-+dbus_g_connection_unref (DBusGConnection *gconnection)
-+{
-+ DBusConnection *c;
-+
-+ c = DBUS_CONNECTION_FROM_G_CONNECTION (gconnection);
-+ dbus_connection_unref (c);
-+}
-+
-+
-+/**
-+ * Increment refcount on a #DBusGMessage
-+ *
-+ * @param gmessage the message to ref
-+ * @returns the message that was ref'd
-+ */
-+DBusGMessage*
-+dbus_g_message_ref (DBusGMessage *gmessage)
-+{
-+ DBusMessage *c;
-+
-+ c = DBUS_MESSAGE_FROM_G_MESSAGE (gmessage);
-+ dbus_message_ref (c);
-+ return gmessage;
-+}
-+
-+/**
-+ * Decrement refcount on a #DBusGMessage
-+ *
-+ * @param gmessage the message to unref
-+ */
-+void
-+dbus_g_message_unref (DBusGMessage *gmessage)
-+{
-+ DBusMessage *c;
-+
-+ c = DBUS_MESSAGE_FROM_G_MESSAGE (gmessage);
-+ dbus_message_unref (c);
-+}
-+
-+/**
-+ * The implementation of DBUS_GERROR error domain. See documentation
-+ * for GError in GLib reference manual.
-+ *
-+ * @returns the error domain quark for use with GError
-+ */
-+GQuark
-+dbus_g_error_quark (void)
-+{
-+ static GQuark quark = 0;
-+ if (quark == 0)
-+ quark = g_quark_from_static_string ("g-exec-error-quark");
-+ return quark;
-+}
-+
-+/**
-+ * Determine whether D-BUS error name for a remote exception matches
-+ * the given name. This function is intended to be invoked on a
-+ * GError returned from an invocation of a remote method, e.g. via
-+ * dbus_g_proxy_end_call. It will silently return FALSE for errors
-+ * which are not remote D-BUS exceptions (i.e. with a domain other
-+ * than DBUS_GERROR or a code other than
-+ * DBUS_GERROR_REMOTE_EXCEPTION).
-+ *
-+ * @param error the GError given from the remote method
-+ * @param name the D-BUS error name
-+ * @param msg the D-BUS error detailed message
-+ * @returns TRUE iff the remote error has the given name
-+ */
-+gboolean
-+dbus_g_error_has_name (GError *error, const char *name)
-+{
-+ g_return_val_if_fail (error != NULL, FALSE);
-+
-+ if (error->domain != DBUS_GERROR
-+ || error->code != DBUS_GERROR_REMOTE_EXCEPTION)
-+ return FALSE;
-+
-+ return !strcmp (dbus_g_error_get_name (error), name);
-+}
-+
-+/**
-+ * Return the D-BUS name for a remote exception.
-+ * This function may only be invoked on a GError returned from an
-+ * invocation of a remote method, e.g. via dbus_g_proxy_end_call.
-+ * Moreover, you must ensure that the error's domain is DBUS_GERROR,
-+ * and the code is DBUS_GERROR_REMOTE_EXCEPTION.
-+ *
-+ * @param error the GError given from the remote method
-+ * @param name the D-BUS error name
-+ * @param msg the D-BUS error detailed message
-+ * @returns the D-BUS error name
-+ */
-+const char *
-+dbus_g_error_get_name (GError *error)
-+{
-+ g_return_val_if_fail (error != NULL, NULL);
-+ g_return_val_if_fail (error->domain == DBUS_GERROR, NULL);
-+ g_return_val_if_fail (error->code == DBUS_GERROR_REMOTE_EXCEPTION, NULL);
-+
-+ return error->message + strlen (error->message) + 1;
-+}
-+
-+/**
-+ * Get the GLib type ID for a DBusConnection boxed type.
-+ *
-+ * @returns GLib type
-+ */
-+GType
-+dbus_connection_get_g_type (void)
-+{
-+ static GType our_type = 0;
-+
-+ if (our_type == 0)
-+ our_type = g_boxed_type_register_static ("DBusConnection",
-+ (GBoxedCopyFunc) dbus_connection_ref,
-+ (GBoxedFreeFunc) dbus_connection_unref);
-+
-+ return our_type;
-+}
-+
-+/**
-+ * Get the GLib type ID for a DBusMessage boxed type.
-+ *
-+ * @returns GLib type
-+ */
-+GType
-+dbus_message_get_g_type (void)
-+{
-+ static GType our_type = 0;
-+
-+ if (our_type == 0)
-+ our_type = g_boxed_type_register_static ("DBusMessage",
-+ (GBoxedCopyFunc) dbus_message_ref,
-+ (GBoxedFreeFunc) dbus_message_unref);
-+
-+ return our_type;
-+}
-+
-+/**
-+ * Get the GLib type ID for a DBusGConnection boxed type.
-+ *
-+ * @returns GLib type
-+ */
-+GType
-+dbus_g_connection_get_g_type (void)
-+{
-+ static GType our_type = 0;
-+
-+ if (our_type == 0)
-+ our_type = g_boxed_type_register_static ("DBusGConnection",
-+ (GBoxedCopyFunc) dbus_g_connection_ref,
-+ (GBoxedFreeFunc) dbus_g_connection_unref);
-+
-+ return our_type;
-+}
-+
-+/**
-+ * Get the GLib type ID for a DBusGMessage boxed type.
-+ *
-+ * @returns GLib type
-+ */
-+GType
-+dbus_g_message_get_g_type (void)
-+{
-+ static GType our_type = 0;
-+
-+ if (our_type == 0)
-+ our_type = g_boxed_type_register_static ("DBusGMessage",
-+ (GBoxedCopyFunc) dbus_g_message_ref,
-+ (GBoxedFreeFunc) dbus_g_message_unref);
-+
-+ return our_type;
-+}
-+
-+/**
-+ * Get the DBusConnection corresponding to this DBusGConnection.
-+ * The return value does not have its refcount incremented.
-+ *
-+ * @returns DBusConnection
-+ */
-+DBusConnection*
-+dbus_g_connection_get_connection (DBusGConnection *gconnection)
-+{
-+ return DBUS_CONNECTION_FROM_G_CONNECTION (gconnection);
-+}
-+
-+/**
-+ * Get the DBusMessage corresponding to this DBusGMessage.
-+ * The return value does not have its refcount incremented.
-+ *
-+ * @returns DBusMessage
-+ */
-+DBusMessage*
-+dbus_g_message_get_message (DBusGMessage *gmessage)
-+{
-+ return DBUS_MESSAGE_FROM_G_MESSAGE (gmessage);
-+}
-+
-+/** @} */ /* end of public API */
-+
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+/**
-+ * @ingroup DBusGLibInternals
-+ * Unit test for general glib stuff
-+ * @returns #TRUE on success.
-+ */
-+gboolean
-+_dbus_glib_test (const char *test_data_dir)
-+{
-+ DBusError err;
-+ GError *gerror = NULL;
-+
-+ dbus_error_init (&err);
-+ dbus_set_error_const (&err, DBUS_ERROR_NO_MEMORY, "Out of memory!");
-+
-+ dbus_set_g_error (&gerror, &err);
-+ g_assert (gerror != NULL);
-+ g_assert (gerror->domain == DBUS_GERROR);
-+ g_assert (gerror->code == DBUS_GERROR_NO_MEMORY);
-+ g_assert (!strcmp (gerror->message, "Out of memory!"));
-+
-+ dbus_error_init (&err);
-+ g_clear_error (&gerror);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/glib/dbus-gloader-expat.c dbus-0.61/glib/dbus-gloader-expat.c
---- dbus-0.61.orig/glib/dbus-gloader-expat.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gloader-expat.c 2005-01-30 06:18:44.000000000 +0100
-@@ -0,0 +1,266 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gloader-expat.c expat XML loader
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-gparser.h"
-+#include <expat.h>
-+#include <string.h>
-+
-+static void*
-+expat_g_malloc (size_t sz)
-+{
-+ return g_malloc (sz);
-+}
-+
-+static void*
-+expat_g_realloc (void *mem, size_t sz)
-+{
-+ return g_realloc (mem, sz);
-+}
-+
-+static XML_Memory_Handling_Suite memsuite =
-+{
-+ expat_g_malloc,
-+ expat_g_realloc,
-+ g_free
-+};
-+
-+/**
-+ * Context for Expat parser for introspection data.
-+ */
-+typedef struct
-+{
-+ Parser *parser; /**< The parser for the introspection data */
-+ const char *filename; /**< The filename being loaded */
-+ GString *content; /**< The content of the current element */
-+ GError **error; /**< Error return location */
-+ gboolean failed; /**< True if parse has failed */
-+} ExpatParseContext;
-+
-+static dbus_bool_t
-+process_content (ExpatParseContext *context)
-+{
-+ if (context->failed)
-+ return FALSE;
-+
-+ if (context->content->len > 0)
-+ {
-+ if (!parser_content (context->parser,
-+ context->content->str,
-+ context->content->len,
-+ context->error))
-+ {
-+ context->failed = TRUE;
-+ return FALSE;
-+ }
-+ g_string_set_size (context->content, 0);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void
-+expat_StartElementHandler (void *userData,
-+ const XML_Char *name,
-+ const XML_Char **atts)
-+{
-+ ExpatParseContext *context = userData;
-+ int i;
-+ char **names;
-+ char **values;
-+
-+ /* Expat seems to suck and can't abort the parse if we
-+ * throw an error. Expat 2.0 is supposed to fix this.
-+ */
-+ if (context->failed)
-+ return;
-+
-+ if (!process_content (context))
-+ return;
-+
-+ /* "atts" is key, value, key, value, NULL */
-+ for (i = 0; atts[i] != NULL; ++i)
-+ ; /* nothing */
-+
-+ g_assert (i % 2 == 0);
-+ names = g_new0 (char *, i / 2 + 1);
-+ values = g_new0 (char *, i / 2 + 1);
-+
-+ i = 0;
-+ while (atts[i] != NULL)
-+ {
-+ g_assert (i % 2 == 0);
-+ names [i / 2] = (char*) atts[i];
-+ values[i / 2] = (char*) atts[i+1];
-+
-+ i += 2;
-+ }
-+
-+ if (!parser_start_element (context->parser,
-+ name,
-+ (const char **) names,
-+ (const char **) values,
-+ context->error))
-+ {
-+ g_free (names);
-+ g_free (values);
-+ context->failed = TRUE;
-+ return;
-+ }
-+
-+ g_free (names);
-+ g_free (values);
-+}
-+
-+static void
-+expat_EndElementHandler (void *userData,
-+ const XML_Char *name)
-+{
-+ ExpatParseContext *context = userData;
-+
-+ if (!process_content (context))
-+ return;
-+
-+ if (!parser_end_element (context->parser,
-+ name,
-+ context->error))
-+ {
-+ context->failed = TRUE;
-+ return;
-+ }
-+}
-+
-+/* s is not 0 terminated. */
-+static void
-+expat_CharacterDataHandler (void *userData,
-+ const XML_Char *s,
-+ int len)
-+{
-+ ExpatParseContext *context = userData;
-+
-+ if (context->failed)
-+ return;
-+
-+ g_string_append_len (context->content,
-+ s, len);
-+}
-+
-+NodeInfo*
-+description_load_from_file (const char *filename,
-+ GError **error)
-+{
-+ char *contents;
-+ gsize len;
-+ NodeInfo *nodes;
-+
-+ contents = NULL;
-+ if (!g_file_get_contents (filename, &contents, &len, error))
-+ return NULL;
-+
-+ nodes = description_load_from_string (contents, len, error);
-+ g_free (contents);
-+
-+ return nodes;
-+}
-+
-+NodeInfo*
-+description_load_from_string (const char *str,
-+ int len,
-+ GError **error)
-+{
-+ XML_Parser expat;
-+ ExpatParseContext context;
-+ NodeInfo *nodes;
-+
-+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-+
-+ if (len < 0)
-+ len = strlen (str);
-+
-+ expat = NULL;
-+ context.parser = NULL;
-+ context.error = error;
-+ context.failed = FALSE;
-+
-+ expat = XML_ParserCreate_MM ("UTF-8", &memsuite, NULL);
-+ if (expat == NULL)
-+ g_error ("No memory to create XML parser\n");
-+
-+ context.parser = parser_new ();
-+ context.content = g_string_new (NULL);
-+
-+ XML_SetUserData (expat, &context);
-+ XML_SetElementHandler (expat,
-+ expat_StartElementHandler,
-+ expat_EndElementHandler);
-+ XML_SetCharacterDataHandler (expat,
-+ expat_CharacterDataHandler);
-+
-+ if (!XML_Parse (expat, str, len, TRUE))
-+ {
-+ if (context.error != NULL &&
-+ *context.error == NULL)
-+ {
-+ enum XML_Error e;
-+
-+ e = XML_GetErrorCode (expat);
-+ if (e == XML_ERROR_NO_MEMORY)
-+ g_error ("Not enough memory to parse XML document");
-+ else
-+ g_set_error (error,
-+ G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ "Error in D-BUS description XML, line %d, column %d: %s\n",
-+ XML_GetCurrentLineNumber (expat),
-+ XML_GetCurrentColumnNumber (expat),
-+ XML_ErrorString (e));
-+ }
-+
-+ goto failed;
-+ }
-+
-+ if (context.failed)
-+ goto failed;
-+
-+ if (!parser_finished (context.parser, error))
-+ goto failed;
-+
-+ XML_ParserFree (expat);
-+ g_string_free (context.content, TRUE);
-+
-+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-+ nodes = parser_get_nodes (context.parser);
-+ node_info_ref (nodes);
-+ parser_unref (context.parser);
-+ return nodes;
-+
-+ failed:
-+ g_return_val_if_fail (error == NULL || *error != NULL, NULL);
-+
-+ g_string_free (context.content, TRUE);
-+ if (expat)
-+ XML_ParserFree (expat);
-+ if (context.parser)
-+ parser_unref (context.parser);
-+ return NULL;
-+}
-+
-diff -Naur dbus-0.61.orig/glib/dbus-gmain.c dbus-0.61/glib/dbus-gmain.c
---- dbus-0.61.orig/glib/dbus-gmain.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gmain.c 2006-02-16 00:45:49.000000000 +0100
-@@ -0,0 +1,814 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gmain.c GLib main loop integration
-+ *
-+ * Copyright (C) 2002, 2003 CodeFactory AB
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include <dbus/dbus-glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include "dbus-gtest.h"
-+#include "dbus-gutils.h"
-+#include "dbus-gvalue.h"
-+#include "dbus-gobject.h"
-+#include "dbus-gvalue-utils.h"
-+#include "dbus-gsignature.h"
-+#include <string.h>
-+
-+#include <libintl.h>
-+#define _(x) dgettext (GETTEXT_PACKAGE, x)
-+#define N_(x) x
-+
-+/**
-+ * @defgroup DBusGLib GLib bindings
-+ * @brief API for using D-BUS with GLib
-+ *
-+ * libdbus proper is a low-level API, these GLib bindings wrap libdbus
-+ * with a much higher-level approach. The higher level approach is
-+ * possible because GLib defines a main loop, an object/type system,
-+ * and an out-of-memory handling policy (it exits the program).
-+ * See http://www.gtk.org for GLib information.
-+ *
-+ * To manipulate remote objects, use #DBusGProxy.
-+ */
-+
-+/**
-+ * @defgroup DBusGLibInternals GLib bindings implementation details
-+ * @ingroup DBusInternals
-+ * @brief Implementation details of GLib bindings
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * A GSource subclass for dispatching DBusConnection messages.
-+ * We need this on top of the IO handlers, because sometimes
-+ * there are messages to dispatch queued up but no IO pending.
-+ */
-+typedef struct
-+{
-+ GSource source; /**< the parent GSource */
-+ DBusConnection *connection; /**< the connection to dispatch */
-+} DBusGMessageQueue;
-+
-+static gboolean message_queue_prepare (GSource *source,
-+ gint *timeout);
-+static gboolean message_queue_check (GSource *source);
-+static gboolean message_queue_dispatch (GSource *source,
-+ GSourceFunc callback,
-+ gpointer user_data);
-+
-+static const GSourceFuncs message_queue_funcs = {
-+ message_queue_prepare,
-+ message_queue_check,
-+ message_queue_dispatch,
-+ NULL
-+};
-+
-+static gboolean
-+message_queue_prepare (GSource *source,
-+ gint *timeout)
-+{
-+ DBusConnection *connection = ((DBusGMessageQueue *)source)->connection;
-+
-+ *timeout = -1;
-+
-+ return (dbus_connection_get_dispatch_status (connection) == DBUS_DISPATCH_DATA_REMAINS);
-+}
-+
-+static gboolean
-+message_queue_check (GSource *source)
-+{
-+ return FALSE;
-+}
-+
-+static gboolean
-+message_queue_dispatch (GSource *source,
-+ GSourceFunc callback,
-+ gpointer user_data)
-+{
-+ DBusConnection *connection = ((DBusGMessageQueue *)source)->connection;
-+
-+ dbus_connection_ref (connection);
-+
-+ /* Only dispatch once - we don't want to starve other GSource */
-+ dbus_connection_dispatch (connection);
-+
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+}
-+
-+typedef struct
-+{
-+ GMainContext *context; /**< the main context */
-+ GSList *ios; /**< all IOHandler */
-+ GSList *timeouts; /**< all TimeoutHandler */
-+ DBusConnection *connection; /**< NULL if this is really for a server not a connection */
-+ GSource *message_queue_source; /**< DBusGMessageQueue */
-+} ConnectionSetup;
-+
-+
-+typedef struct
-+{
-+ ConnectionSetup *cs;
-+ GSource *source;
-+ DBusWatch *watch;
-+} IOHandler;
-+
-+typedef struct
-+{
-+ ConnectionSetup *cs;
-+ GSource *source;
-+ DBusTimeout *timeout;
-+} TimeoutHandler;
-+
-+static dbus_int32_t connection_slot = -1;
-+static dbus_int32_t server_slot = -1;
-+
-+static ConnectionSetup*
-+connection_setup_new (GMainContext *context,
-+ DBusConnection *connection)
-+{
-+ ConnectionSetup *cs;
-+
-+ cs = g_new0 (ConnectionSetup, 1);
-+
-+ g_assert (context != NULL);
-+
-+ cs->context = context;
-+ g_main_context_ref (cs->context);
-+
-+ if (connection)
-+ {
-+ cs->connection = connection;
-+
-+ cs->message_queue_source = g_source_new (&message_queue_funcs,
-+ sizeof (DBusGMessageQueue));
-+ ((DBusGMessageQueue*)cs->message_queue_source)->connection = connection;
-+ g_source_attach (cs->message_queue_source, cs->context);
-+ }
-+
-+ return cs;
-+}
-+
-+static void
-+io_handler_source_finalized (gpointer data)
-+{
-+ IOHandler *handler;
-+
-+ handler = data;
-+
-+ if (handler->watch)
-+ dbus_watch_set_data (handler->watch, NULL, NULL);
-+
-+ g_free (handler);
-+}
-+
-+static void
-+io_handler_destroy_source (void *data)
-+{
-+ IOHandler *handler;
-+
-+ handler = data;
-+
-+ if (handler->source)
-+ {
-+ GSource *source = handler->source;
-+ handler->source = NULL;
-+ handler->cs->ios = g_slist_remove (handler->cs->ios, handler);
-+ g_source_destroy (source);
-+ g_source_unref (source);
-+ }
-+}
-+
-+static void
-+io_handler_watch_freed (void *data)
-+{
-+ IOHandler *handler;
-+
-+ handler = data;
-+
-+ handler->watch = NULL;
-+
-+ io_handler_destroy_source (handler);
-+}
-+
-+static gboolean
-+io_handler_dispatch (GIOChannel *source,
-+ GIOCondition condition,
-+ gpointer data)
-+{
-+ IOHandler *handler;
-+ guint dbus_condition = 0;
-+ DBusConnection *connection;
-+
-+ handler = data;
-+
-+ connection = handler->cs->connection;
-+
-+ if (connection)
-+ dbus_connection_ref (connection);
-+
-+ if (condition & G_IO_IN)
-+ dbus_condition |= DBUS_WATCH_READABLE;
-+ if (condition & G_IO_OUT)
-+ dbus_condition |= DBUS_WATCH_WRITABLE;
-+ if (condition & G_IO_ERR)
-+ dbus_condition |= DBUS_WATCH_ERROR;
-+ if (condition & G_IO_HUP)
-+ dbus_condition |= DBUS_WATCH_HANGUP;
-+
-+ /* Note that we don't touch the handler after this, because
-+ * dbus may have disabled the watch and thus killed the
-+ * handler.
-+ */
-+ dbus_watch_handle (handler->watch, dbus_condition);
-+ handler = NULL;
-+
-+ if (connection)
-+ dbus_connection_unref (connection);
-+
-+ return TRUE;
-+}
-+
-+static void
-+connection_setup_add_watch (ConnectionSetup *cs,
-+ DBusWatch *watch)
-+{
-+ guint flags;
-+ GIOCondition condition;
-+ GIOChannel *channel;
-+ IOHandler *handler;
-+
-+ if (!dbus_watch_get_enabled (watch))
-+ return;
-+
-+ g_assert (dbus_watch_get_data (watch) == NULL);
-+
-+ flags = dbus_watch_get_flags (watch);
-+
-+ condition = G_IO_ERR | G_IO_HUP;
-+ if (flags & DBUS_WATCH_READABLE)
-+ condition |= G_IO_IN;
-+ if (flags & DBUS_WATCH_WRITABLE)
-+ condition |= G_IO_OUT;
-+
-+ handler = g_new0 (IOHandler, 1);
-+ handler->cs = cs;
-+ handler->watch = watch;
-+
-+ channel = g_io_channel_unix_new (dbus_watch_get_fd (watch));
-+
-+ handler->source = g_io_create_watch (channel, condition);
-+ g_source_set_callback (handler->source, (GSourceFunc) io_handler_dispatch, handler,
-+ io_handler_source_finalized);
-+ g_source_attach (handler->source, cs->context);
-+
-+ cs->ios = g_slist_prepend (cs->ios, handler);
-+
-+ dbus_watch_set_data (watch, handler, io_handler_watch_freed);
-+ g_io_channel_unref (channel);
-+}
-+
-+static void
-+connection_setup_remove_watch (ConnectionSetup *cs,
-+ DBusWatch *watch)
-+{
-+ IOHandler *handler;
-+
-+ handler = dbus_watch_get_data (watch);
-+
-+ if (handler == NULL)
-+ return;
-+
-+ io_handler_destroy_source (handler);
-+}
-+
-+static void
-+timeout_handler_source_finalized (gpointer data)
-+{
-+ TimeoutHandler *handler;
-+
-+ handler = data;
-+
-+ if (handler->timeout)
-+ dbus_timeout_set_data (handler->timeout, NULL, NULL);
-+
-+ g_free (handler);
-+}
-+
-+static void
-+timeout_handler_destroy_source (void *data)
-+{
-+ TimeoutHandler *handler;
-+
-+ handler = data;
-+
-+ if (handler->source)
-+ {
-+ GSource *source = handler->source;
-+ handler->source = NULL;
-+ handler->cs->timeouts = g_slist_remove (handler->cs->timeouts, handler);
-+ g_source_destroy (source);
-+ g_source_unref (source);
-+ }
-+}
-+
-+static void
-+timeout_handler_timeout_freed (void *data)
-+{
-+ TimeoutHandler *handler;
-+
-+ handler = data;
-+
-+ handler->timeout = NULL;
-+
-+ timeout_handler_destroy_source (handler);
-+}
-+
-+static gboolean
-+timeout_handler_dispatch (gpointer data)
-+{
-+ TimeoutHandler *handler;
-+
-+ handler = data;
-+
-+ dbus_timeout_handle (handler->timeout);
-+
-+ return TRUE;
-+}
-+
-+static void
-+connection_setup_add_timeout (ConnectionSetup *cs,
-+ DBusTimeout *timeout)
-+{
-+ TimeoutHandler *handler;
-+
-+ if (!dbus_timeout_get_enabled (timeout))
-+ return;
-+
-+ g_assert (dbus_timeout_get_data (timeout) == NULL);
-+
-+ handler = g_new0 (TimeoutHandler, 1);
-+ handler->cs = cs;
-+ handler->timeout = timeout;
-+
-+ handler->source = g_timeout_source_new (dbus_timeout_get_interval (timeout));
-+ g_source_set_callback (handler->source, timeout_handler_dispatch, handler,
-+ timeout_handler_source_finalized);
-+ g_source_attach (handler->source, handler->cs->context);
-+
-+ cs->timeouts = g_slist_prepend (cs->timeouts, handler);
-+
-+ dbus_timeout_set_data (timeout, handler, timeout_handler_timeout_freed);
-+}
-+
-+static void
-+connection_setup_remove_timeout (ConnectionSetup *cs,
-+ DBusTimeout *timeout)
-+{
-+ TimeoutHandler *handler;
-+
-+ handler = dbus_timeout_get_data (timeout);
-+
-+ if (handler == NULL)
-+ return;
-+
-+ timeout_handler_destroy_source (handler);
-+}
-+
-+static void
-+connection_setup_free (ConnectionSetup *cs)
-+{
-+ while (cs->ios)
-+ io_handler_destroy_source (cs->ios->data);
-+
-+ while (cs->timeouts)
-+ timeout_handler_destroy_source (cs->timeouts->data);
-+
-+ if (cs->message_queue_source)
-+ {
-+ GSource *source;
-+
-+ source = cs->message_queue_source;
-+ cs->message_queue_source = NULL;
-+
-+ g_source_destroy (source);
-+ g_source_unref (source);
-+ }
-+
-+ g_main_context_unref (cs->context);
-+ g_free (cs);
-+}
-+
-+static dbus_bool_t
-+add_watch (DBusWatch *watch,
-+ gpointer data)
-+{
-+ ConnectionSetup *cs;
-+
-+ cs = data;
-+
-+ connection_setup_add_watch (cs, watch);
-+
-+ return TRUE;
-+}
-+
-+static void
-+remove_watch (DBusWatch *watch,
-+ gpointer data)
-+{
-+ ConnectionSetup *cs;
-+
-+ cs = data;
-+
-+ connection_setup_remove_watch (cs, watch);
-+}
-+
-+static void
-+watch_toggled (DBusWatch *watch,
-+ void *data)
-+{
-+ /* Because we just exit on OOM, enable/disable is
-+ * no different from add/remove
-+ */
-+ if (dbus_watch_get_enabled (watch))
-+ add_watch (watch, data);
-+ else
-+ remove_watch (watch, data);
-+}
-+
-+static dbus_bool_t
-+add_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ ConnectionSetup *cs;
-+
-+ cs = data;
-+
-+ if (!dbus_timeout_get_enabled (timeout))
-+ return TRUE;
-+
-+ connection_setup_add_timeout (cs, timeout);
-+
-+ return TRUE;
-+}
-+
-+static void
-+remove_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ ConnectionSetup *cs;
-+
-+ cs = data;
-+
-+ connection_setup_remove_timeout (cs, timeout);
-+}
-+
-+static void
-+timeout_toggled (DBusTimeout *timeout,
-+ void *data)
-+{
-+ /* Because we just exit on OOM, enable/disable is
-+ * no different from add/remove
-+ */
-+ if (dbus_timeout_get_enabled (timeout))
-+ add_timeout (timeout, data);
-+ else
-+ remove_timeout (timeout, data);
-+}
-+
-+static void
-+wakeup_main (void *data)
-+{
-+ ConnectionSetup *cs = data;
-+
-+ g_main_context_wakeup (cs->context);
-+}
-+
-+
-+/* Move to a new context */
-+static ConnectionSetup*
-+connection_setup_new_from_old (GMainContext *context,
-+ ConnectionSetup *old)
-+{
-+ GSList *tmp;
-+ ConnectionSetup *cs;
-+
-+ g_assert (old->context != context);
-+
-+ cs = connection_setup_new (context, old->connection);
-+
-+ tmp = old->ios;
-+ while (tmp != NULL)
-+ {
-+ IOHandler *handler = tmp->data;
-+
-+ connection_setup_add_watch (cs, handler->watch);
-+
-+ tmp = tmp->next;
-+ }
-+
-+ tmp = old->timeouts;
-+ while (tmp != NULL)
-+ {
-+ TimeoutHandler *handler = tmp->data;
-+
-+ connection_setup_add_timeout (cs, handler->timeout);
-+
-+ tmp = tmp->next;
-+ }
-+
-+ return cs;
-+}
-+
-+/** @} */ /* End of GLib bindings internals */
-+
-+/** @addtogroup DBusGLib
-+ * @{
-+ */
-+
-+/**
-+ * Sets the watch and timeout functions of a #DBusConnection
-+ * to integrate the connection with the GLib main loop.
-+ * Pass in #NULL for the #GMainContext unless you're
-+ * doing something specialized.
-+ *
-+ * If called twice for the same context, does nothing the second
-+ * time. If called once with context A and once with context B,
-+ * context B replaces context A as the context monitoring the
-+ * connection.
-+ *
-+ * @param connection the connection
-+ * @param context the #GMainContext or #NULL for default context
-+ */
-+void
-+dbus_connection_setup_with_g_main (DBusConnection *connection,
-+ GMainContext *context)
-+{
-+ ConnectionSetup *old_setup;
-+ ConnectionSetup *cs;
-+
-+ /* FIXME we never free the slot, so its refcount just keeps growing,
-+ * which is kind of broken.
-+ */
-+ dbus_connection_allocate_data_slot (&connection_slot);
-+ if (connection_slot < 0)
-+ goto nomem;
-+
-+ if (context == NULL)
-+ context = g_main_context_default ();
-+
-+ cs = NULL;
-+
-+ old_setup = dbus_connection_get_data (connection, connection_slot);
-+ if (old_setup != NULL)
-+ {
-+ if (old_setup->context == context)
-+ return; /* nothing to do */
-+
-+ cs = connection_setup_new_from_old (context, old_setup);
-+
-+ /* Nuke the old setup */
-+ dbus_connection_set_data (connection, connection_slot, NULL, NULL);
-+ old_setup = NULL;
-+ }
-+
-+ if (cs == NULL)
-+ cs = connection_setup_new (context, connection);
-+
-+ if (!dbus_connection_set_data (connection, connection_slot, cs,
-+ (DBusFreeFunction)connection_setup_free))
-+ goto nomem;
-+
-+ if (!dbus_connection_set_watch_functions (connection,
-+ add_watch,
-+ remove_watch,
-+ watch_toggled,
-+ cs, NULL))
-+ goto nomem;
-+
-+ if (!dbus_connection_set_timeout_functions (connection,
-+ add_timeout,
-+ remove_timeout,
-+ timeout_toggled,
-+ cs, NULL))
-+ goto nomem;
-+
-+ dbus_connection_set_wakeup_main_function (connection,
-+ wakeup_main,
-+ cs, NULL);
-+
-+ return;
-+
-+ nomem:
-+ g_error ("Not enough memory to set up DBusConnection for use with GLib");
-+}
-+
-+/**
-+ * Sets the watch and timeout functions of a #DBusServer
-+ * to integrate the server with the GLib main loop.
-+ * In most cases the context argument should be #NULL.
-+ *
-+ * If called twice for the same context, does nothing the second
-+ * time. If called once with context A and once with context B,
-+ * context B replaces context A as the context monitoring the
-+ * connection.
-+ *
-+ * @param server the server
-+ * @param context the #GMainContext or #NULL for default
-+ */
-+void
-+dbus_server_setup_with_g_main (DBusServer *server,
-+ GMainContext *context)
-+{
-+ ConnectionSetup *old_setup;
-+ ConnectionSetup *cs;
-+
-+ /* FIXME we never free the slot, so its refcount just keeps growing,
-+ * which is kind of broken.
-+ */
-+ dbus_server_allocate_data_slot (&server_slot);
-+ if (server_slot < 0)
-+ goto nomem;
-+
-+ if (context == NULL)
-+ context = g_main_context_default ();
-+
-+ cs = NULL;
-+
-+ old_setup = dbus_server_get_data (server, server_slot);
-+ if (old_setup != NULL)
-+ {
-+ if (old_setup->context == context)
-+ return; /* nothing to do */
-+
-+ cs = connection_setup_new_from_old (context, old_setup);
-+
-+ /* Nuke the old setup */
-+ dbus_server_set_data (server, server_slot, NULL, NULL);
-+ old_setup = NULL;
-+ }
-+
-+ if (cs == NULL)
-+ cs = connection_setup_new (context, NULL);
-+
-+ if (!dbus_server_set_data (server, server_slot, cs,
-+ (DBusFreeFunction)connection_setup_free))
-+ goto nomem;
-+
-+ if (!dbus_server_set_watch_functions (server,
-+ add_watch,
-+ remove_watch,
-+ watch_toggled,
-+ cs, NULL))
-+ goto nomem;
-+
-+ if (!dbus_server_set_timeout_functions (server,
-+ add_timeout,
-+ remove_timeout,
-+ timeout_toggled,
-+ cs, NULL))
-+ goto nomem;
-+
-+ return;
-+
-+ nomem:
-+ g_error ("Not enough memory to set up DBusServer for use with GLib");
-+}
-+
-+/**
-+ * Returns a connection to the given address.
-+ *
-+ * (Internally, calls dbus_connection_open() then calls
-+ * dbus_connection_setup_with_g_main() on the result.)
-+ *
-+ * @param address address of the connection to open
-+ * @param error address where an error can be returned.
-+ * @returns a DBusConnection
-+ */
-+DBusGConnection*
-+dbus_g_connection_open (const gchar *address,
-+ GError **error)
-+{
-+ DBusConnection *connection;
-+ DBusError derror;
-+
-+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-+
-+ _dbus_g_value_types_init ();
-+
-+ dbus_error_init (&derror);
-+
-+ connection = dbus_connection_open (address, &derror);
-+ if (connection == NULL)
-+ {
-+ dbus_set_g_error (error, &derror);
-+ dbus_error_free (&derror);
-+ return NULL;
-+ }
-+
-+ /* does nothing if it's already been done */
-+ dbus_connection_setup_with_g_main (connection, NULL);
-+
-+ return DBUS_G_CONNECTION_FROM_CONNECTION (connection);
-+}
-+
-+/**
-+ * Returns a connection to the given bus. The connection is a global variable
-+ * shared with other callers of this function.
-+ *
-+ * (Internally, calls dbus_bus_get() then calls
-+ * dbus_connection_setup_with_g_main() on the result.)
-+ *
-+ * @param type bus type
-+ * @param error address where an error can be returned.
-+ * @returns a DBusConnection
-+ */
-+DBusGConnection*
-+dbus_g_bus_get (DBusBusType type,
-+ GError **error)
-+{
-+ DBusConnection *connection;
-+ DBusError derror;
-+
-+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-+
-+ _dbus_g_value_types_init ();
-+
-+ dbus_error_init (&derror);
-+
-+ connection = dbus_bus_get (type, &derror);
-+ if (connection == NULL)
-+ {
-+ dbus_set_g_error (error, &derror);
-+ dbus_error_free (&derror);
-+ return NULL;
-+ }
-+
-+ /* does nothing if it's already been done */
-+ dbus_connection_setup_with_g_main (connection, NULL);
-+
-+ return DBUS_G_CONNECTION_FROM_CONNECTION (connection);
-+}
-+
-+/** @} */ /* end of public API */
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+/**
-+ * @ingroup DBusGLibInternals
-+ * Unit test for GLib main loop integration
-+ * @returns #TRUE on success.
-+ */
-+gboolean
-+_dbus_gmain_test (const char *test_data_dir)
-+{
-+ GType type;
-+ GType rectype;
-+
-+ g_type_init ();
-+ _dbus_g_value_types_init ();
-+
-+ rectype = dbus_g_type_get_collection ("GArray", G_TYPE_UINT);
-+ g_assert (rectype != G_TYPE_INVALID);
-+ g_assert (!strcmp (g_type_name (rectype), "GArray_guint_"));
-+
-+ type = _dbus_gtype_from_signature ("au", TRUE);
-+ g_assert (type == rectype);
-+
-+ rectype = dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING);
-+ g_assert (rectype != G_TYPE_INVALID);
-+ g_assert (!strcmp (g_type_name (rectype), "GHashTable_gchararray+gchararray_"));
-+
-+ type = _dbus_gtype_from_signature ("a{ss}", TRUE);
-+ g_assert (type == rectype);
-+
-+ type = _dbus_gtype_from_signature ("o", FALSE);
-+ g_assert (type == DBUS_TYPE_G_OBJECT_PATH);
-+ type = _dbus_gtype_from_signature ("o", TRUE);
-+ g_assert (type == DBUS_TYPE_G_OBJECT_PATH);
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/glib/dbus-gmarshal.c dbus-0.61/glib/dbus-gmarshal.c
---- dbus-0.61.orig/glib/dbus-gmarshal.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gmarshal.c 2005-01-31 03:55:12.000000000 +0100
-@@ -0,0 +1,89 @@
-+#include "dbus-gmarshal.h"
-+
-+#include <glib-object.h>
-+
-+
-+#ifdef G_ENABLE_DEBUG
-+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-+#define g_marshal_value_peek_char(v) g_value_get_char (v)
-+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-+#define g_marshal_value_peek_int(v) g_value_get_int (v)
-+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-+#define g_marshal_value_peek_long(v) g_value_get_long (v)
-+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-+#define g_marshal_value_peek_float(v) g_value_get_float (v)
-+#define g_marshal_value_peek_double(v) g_value_get_double (v)
-+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-+#define g_marshal_value_peek_param(v) g_value_get_param (v)
-+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-+#define g_marshal_value_peek_object(v) g_value_get_object (v)
-+#else /* !G_ENABLE_DEBUG */
-+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
-+ * Do not access GValues directly in your code. Instead, use the
-+ * g_value_get_*() functions
-+ */
-+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-+#endif /* !G_ENABLE_DEBUG */
-+
-+
-+/* NONE:STRING,STRING,STRING (dbus-gmarshal.list:1) */
-+void
-+_dbus_g_marshal_VOID__STRING_STRING_STRING (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ typedef void (*GMarshalFunc_VOID__STRING_STRING_STRING) (gpointer data1,
-+ gpointer arg_1,
-+ gpointer arg_2,
-+ gpointer arg_3,
-+ gpointer data2);
-+ register GMarshalFunc_VOID__STRING_STRING_STRING callback;
-+ register GCClosure *cc = (GCClosure*) closure;
-+ register gpointer data1, data2;
-+
-+ g_return_if_fail (n_param_values == 4);
-+
-+ if (G_CCLOSURE_SWAP_DATA (closure))
-+ {
-+ data1 = closure->data;
-+ data2 = g_value_peek_pointer (param_values + 0);
-+ }
-+ else
-+ {
-+ data1 = g_value_peek_pointer (param_values + 0);
-+ data2 = closure->data;
-+ }
-+ callback = (GMarshalFunc_VOID__STRING_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
-+
-+ callback (data1,
-+ g_marshal_value_peek_string (param_values + 1),
-+ g_marshal_value_peek_string (param_values + 2),
-+ g_marshal_value_peek_string (param_values + 3),
-+ data2);
-+}
-+
-diff -Naur dbus-0.61.orig/glib/dbus-gmarshal.h dbus-0.61/glib/dbus-gmarshal.h
---- dbus-0.61.orig/glib/dbus-gmarshal.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gmarshal.h 2005-01-31 03:55:12.000000000 +0100
-@@ -0,0 +1,21 @@
-+
-+#ifndef ___dbus_g_marshal_MARSHAL_H__
-+#define ___dbus_g_marshal_MARSHAL_H__
-+
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+/* NONE:STRING,STRING,STRING (dbus-gmarshal.list:1) */
-+extern void _dbus_g_marshal_VOID__STRING_STRING_STRING (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+#define _dbus_g_marshal_NONE__STRING_STRING_STRING _dbus_g_marshal_VOID__STRING_STRING_STRING
-+
-+G_END_DECLS
-+
-+#endif /* ___dbus_g_marshal_MARSHAL_H__ */
-+
-diff -Naur dbus-0.61.orig/glib/dbus-gmarshal.list dbus-0.61/glib/dbus-gmarshal.list
---- dbus-0.61.orig/glib/dbus-gmarshal.list 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gmarshal.list 2005-01-31 03:55:12.000000000 +0100
-@@ -0,0 +1 @@
-+NONE:STRING,STRING,STRING
-diff -Naur dbus-0.61.orig/glib/dbus-gobject.c dbus-0.61/glib/dbus-gobject.c
---- dbus-0.61.orig/glib/dbus-gobject.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gobject.c 2005-11-27 17:55:09.000000000 +0100
-@@ -0,0 +1,2216 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gobject.c Exporting a GObject remotely
-+ *
-+ * Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
-+ * Copyright (C) 2005 Nokia
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include <gobject/gvaluecollector.h>
-+#include <dbus/dbus-glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include "dbus-gtest.h"
-+#include "dbus-gutils.h"
-+#include "dbus-gobject.h"
-+#include "dbus-gsignature.h"
-+#include "dbus-gvalue.h"
-+#include "dbus-gmarshal.h"
-+#include "dbus-gvalue-utils.h"
-+#include <string.h>
-+
-+/**
-+ * @addtogroup DBusGLibInternals
-+ * @{
-+ */
-+
-+typedef struct
-+{
-+ char *default_iface;
-+ GType code_enum;
-+} DBusGErrorInfo;
-+
-+static GStaticRWLock globals_lock = G_STATIC_RW_LOCK_INIT;
-+static GHashTable *marshal_table = NULL;
-+static GData *error_metadata = NULL;
-+
-+static char*
-+uscore_to_wincaps (const char *uscore)
-+{
-+ const char *p;
-+ GString *str;
-+ gboolean last_was_uscore;
-+
-+ last_was_uscore = TRUE;
-+
-+ str = g_string_new (NULL);
-+ p = uscore;
-+ while (*p)
-+ {
-+ if (*p == '-' || *p == '_')
-+ {
-+ last_was_uscore = TRUE;
-+ }
-+ else
-+ {
-+ if (last_was_uscore)
-+ {
-+ g_string_append_c (str, g_ascii_toupper (*p));
-+ last_was_uscore = FALSE;
-+ }
-+ else
-+ g_string_append_c (str, *p);
-+ }
-+ ++p;
-+ }
-+
-+ return g_string_free (str, FALSE);
-+}
-+
-+static const char *
-+string_table_next (const char *table)
-+{
-+ return (table + (strlen (table) + 1));
-+}
-+
-+static const char *
-+string_table_lookup (const char *table, int index)
-+{
-+ const char *ret;
-+
-+ ret = table;
-+
-+ while (index--)
-+ ret = string_table_next (ret);
-+
-+ return ret;
-+}
-+
-+static const char *
-+get_method_data (const DBusGObjectInfo *object,
-+ const DBusGMethodInfo *method)
-+{
-+ return object->data + method->data_offset;
-+}
-+
-+static char *
-+object_error_domain_prefix_from_object_info (const DBusGObjectInfo *info)
-+{
-+ /* FIXME */
-+ return NULL;
-+}
-+
-+static char *
-+object_error_code_from_object_info (const DBusGObjectInfo *info, GQuark domain, gint code)
-+{
-+ /* FIXME */
-+ return NULL;
-+}
-+
-+static const char *
-+method_interface_from_object_info (const DBusGObjectInfo *object,
-+ const DBusGMethodInfo *method)
-+{
-+ return string_table_lookup (get_method_data (object, method), 0);
-+}
-+
-+static const char *
-+method_name_from_object_info (const DBusGObjectInfo *object,
-+ const DBusGMethodInfo *method)
-+{
-+ return string_table_lookup (get_method_data (object, method), 1);
-+}
-+
-+static const char *
-+method_arg_info_from_object_info (const DBusGObjectInfo *object,
-+ const DBusGMethodInfo *method)
-+{
-+ return string_table_lookup (get_method_data (object, method), 3);/*RB was 2*/
-+}
-+
-+typedef enum
-+{
-+ RETVAL_NONE,
-+ RETVAL_NOERROR,
-+ RETVAL_ERROR
-+} RetvalType;
-+
-+static const char *
-+arg_iterate (const char *data,
-+ const char **name,
-+ gboolean *in,
-+ gboolean *constval,
-+ RetvalType *retval,
-+ const char **type)
-+{
-+ gboolean inarg;
-+
-+ if (name)
-+ *name = data;
-+
-+ data = string_table_next (data);
-+ switch (*data)
-+ {
-+ case 'I':
-+ inarg = TRUE;
-+ break;
-+ case 'O':
-+ inarg = FALSE;
-+ break;
-+ default:
-+ g_warning ("invalid arg direction '%c'", *data);
-+ inarg = FALSE;
-+ break;
-+ }
-+ if (in)
-+ *in = inarg;
-+
-+ if (!inarg)
-+ {
-+ data = string_table_next (data);
-+ switch (*data)
-+ {
-+ case 'F':
-+ if (constval)
-+ *constval = FALSE;
-+ break;
-+ case 'C':
-+ if (constval)
-+ *constval = TRUE;
-+ break;
-+ default:
-+ g_warning ("invalid arg const value '%c'", *data);
-+ break;
-+ }
-+ data = string_table_next (data);
-+ switch (*data)
-+ {
-+ case 'N':
-+ if (retval)
-+ *retval = RETVAL_NONE;
-+ break;
-+ case 'E':
-+ if (retval)
-+ *retval = RETVAL_ERROR;
-+ break;
-+ case 'R':
-+ if (retval)
-+ *retval = RETVAL_NOERROR;
-+ break;
-+ default:
-+ g_warning ("invalid arg ret value '%c'", *data);
-+ break;
-+ }
-+ }
-+ else
-+ {
-+ if (constval)
-+ *constval = FALSE;
-+ if (retval)
-+ *retval = FALSE;
-+ }
-+
-+ data = string_table_next (data);
-+ if (type)
-+ *type = data;
-+
-+ return string_table_next (data);
-+}
-+
-+static char *
-+method_dir_signature_from_object_info (const DBusGObjectInfo *object,
-+ const DBusGMethodInfo *method,
-+ gboolean in)
-+{
-+ const char *arg;
-+ GString *ret;
-+
-+ arg = method_arg_info_from_object_info (object, method);
-+
-+ ret = g_string_new (NULL);
-+
-+ while (*arg)
-+ {
-+ const char *name;
-+ gboolean arg_in;
-+ const char *type;
-+
-+ arg = arg_iterate (arg, &name, &arg_in, NULL, NULL, &type);
-+
-+ if (arg_in == in)
-+ g_string_append (ret, type);
-+ }
-+
-+ return g_string_free (ret, FALSE);
-+}
-+
-+static char *
-+method_input_signature_from_object_info (const DBusGObjectInfo *object,
-+ const DBusGMethodInfo *method)
-+{
-+ return method_dir_signature_from_object_info (object, method, TRUE);
-+}
-+
-+static char *
-+method_output_signature_from_object_info (const DBusGObjectInfo *object,
-+ const DBusGMethodInfo *method)
-+{
-+ return method_dir_signature_from_object_info (object, method, FALSE);
-+}
-+
-+static const char *
-+propsig_iterate (const char *data, const char **iface, const char **name)
-+{
-+ *iface = data;
-+
-+ data = string_table_next (data);
-+ *name = data;
-+
-+ return string_table_next (data);
-+}
-+
-+static GQuark
-+dbus_g_object_type_dbus_metadata_quark (void)
-+{
-+ static GQuark quark;
-+
-+ if (!quark)
-+ quark = g_quark_from_static_string ("DBusGObjectTypeDBusMetadataQuark");
-+ return quark;
-+}
-+
-+static const DBusGObjectInfo *
-+lookup_object_info (GObject *object)
-+{
-+ const DBusGObjectInfo *ret;
-+ GType classtype;
-+
-+ ret = NULL;
-+
-+ for (classtype = G_TYPE_FROM_INSTANCE (object); classtype != 0; classtype = g_type_parent (classtype))
-+ {
-+ const DBusGObjectInfo *info;
-+
-+ info = g_type_get_qdata (classtype, dbus_g_object_type_dbus_metadata_quark ());
-+
-+ if (info != NULL && info->format_version >= 0)
-+ {
-+ ret = info;
-+ break;
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+static void
-+gobject_unregister_function (DBusConnection *connection,
-+ void *user_data)
-+{
-+ GObject *object;
-+
-+ object = G_OBJECT (user_data);
-+
-+ /* FIXME */
-+
-+}
-+
-+typedef struct
-+{
-+ GString *xml;
-+ GType gtype;
-+ const DBusGObjectInfo *object_info;
-+} DBusGLibWriteIterfaceData;
-+
-+typedef struct
-+{
-+ GSList *methods;
-+ GSList *signals;
-+ GSList *properties;
-+} DBusGLibWriteInterfaceValues;
-+
-+static void
-+write_interface (gpointer key, gpointer val, gpointer user_data)
-+{
-+ const char *name;
-+ GSList *methods;
-+ GSList *signals;
-+ GSList *properties;
-+ GString *xml;
-+ const DBusGObjectInfo *object_info;
-+ DBusGLibWriteIterfaceData *data;
-+ DBusGLibWriteInterfaceValues *values;
-+
-+ name = key;
-+
-+ values = val;
-+ methods = values->methods;
-+ signals = values->signals;
-+ properties = values->properties;
-+
-+ data = user_data;
-+ xml = data->xml;
-+ object_info = data->object_info;
-+
-+ g_string_append_printf (xml, " <interface name=\"%s\">\n", name);
-+
-+ /* FIXME: recurse to parent types ? */
-+ for (; methods; methods = methods->next)
-+ {
-+ DBusGMethodInfo *method;
-+ const char *args;
-+ method = methods->data;
-+
-+ g_string_append_printf (xml, " <method name=\"%s\">\n",
-+ method_name_from_object_info (object_info, method));
-+
-+ args = method_arg_info_from_object_info (object_info, method);
-+
-+ while (*args)
-+ {
-+ const char *name;
-+ gboolean arg_in;
-+ const char *type;
-+
-+ args = arg_iterate (args, &name, &arg_in, NULL, NULL, &type);
-+
-+ /* FIXME - handle container types */
-+ g_string_append_printf (xml, " <arg name=\"%s\" type=\"%s\" direction=\"%s\"/>\n",
-+ name, type, arg_in ? "in" : "out");
-+
-+ }
-+ g_string_append (xml, " </method>\n");
-+
-+ }
-+ g_slist_free (values->methods);
-+
-+ for (; signals; signals = signals->next)
-+ {
-+ guint id;
-+ guint arg;
-+ const char *signame;
-+ GSignalQuery query;
-+ char *s;
-+
-+ signame = signals->data;
-+
-+ s = _dbus_gutils_wincaps_to_uscore (signame);
-+
-+ id = g_signal_lookup (s, data->gtype);
-+ g_assert (id != 0);
-+
-+ g_signal_query (id, &query);
-+ g_assert (query.return_type == G_TYPE_NONE);
-+
-+ g_string_append_printf (xml, " <signal name=\"%s\">\n", signame);
-+
-+ for (arg = 0; arg < query.n_params; arg++)
-+ {
-+ char *dbus_type = _dbus_gtype_to_signature (query.param_types[arg]);
-+
-+ g_assert (dbus_type != NULL);
-+
-+ g_string_append (xml, " <arg type=\"");
-+ g_string_append (xml, dbus_type);
-+ g_string_append (xml, "\"/>\n");
-+ g_free (dbus_type);
-+ }
-+
-+ g_string_append (xml, " </signal>\n");
-+ g_free (s);
-+ }
-+ g_slist_free (values->signals);
-+
-+ for (; properties; properties = properties->next)
-+ {
-+ const char *propname;
-+ GParamSpec *spec;
-+ char *dbus_type;
-+ gboolean can_set;
-+ gboolean can_get;
-+ char *s;
-+
-+ propname = properties->data;
-+ spec = NULL;
-+
-+ s = _dbus_gutils_wincaps_to_uscore (spec->name);
-+
-+ spec = g_object_class_find_property (g_type_class_peek (data->gtype), s);
-+ g_assert (spec != NULL);
-+ g_free (s);
-+
-+ dbus_type = _dbus_gtype_to_signature (G_PARAM_SPEC_VALUE_TYPE (spec));
-+ g_assert (dbus_type != NULL);
-+
-+ can_set = ((spec->flags & G_PARAM_WRITABLE) != 0 &&
-+ (spec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
-+
-+ can_get = (spec->flags & G_PARAM_READABLE) != 0;
-+
-+ if (can_set || can_get)
-+ {
-+ g_string_append_printf (xml, " <property name=\"%s\" ", propname);
-+ g_string_append (xml, "type=\"");
-+ g_string_append (xml, dbus_type);
-+ g_string_append (xml, "\" access=\"");
-+
-+ if (can_set && can_get)
-+ g_string_append (xml, "readwrite");
-+ else if (can_get)
-+ g_string_append (xml, "read");
-+ else
-+ {
-+ g_assert (can_set);
-+ g_string_append (xml, "write");
-+ }
-+
-+ g_string_append (xml, "\"/>\n");
-+ }
-+
-+ g_free (dbus_type);
-+ g_free (s);
-+
-+ g_string_append (xml, " </property>\n");
-+ }
-+ g_slist_free (values->properties);
-+
-+ g_free (values);
-+ g_string_append (xml, " </interface>\n");
-+}
-+
-+static DBusGLibWriteInterfaceValues *
-+lookup_values (GHashTable *interfaces, const char *method_interface)
-+{
-+ DBusGLibWriteInterfaceValues *values;
-+ if ((values = g_hash_table_lookup (interfaces, (gpointer) method_interface)) == NULL)
-+ {
-+ values = g_new0 (DBusGLibWriteInterfaceValues, 1);
-+ g_hash_table_insert (interfaces, (gpointer) method_interface, values);
-+ }
-+ return values;
-+}
-+
-+static void
-+introspect_interfaces (GObject *object, GString *xml)
-+{
-+ const DBusGObjectInfo *info;
-+ DBusGLibWriteIterfaceData data;
-+ int i;
-+ GHashTable *interfaces;
-+ DBusGLibWriteInterfaceValues *values;
-+ const char *propsig;
-+
-+ info = lookup_object_info (object);
-+
-+ g_assert (info != NULL);
-+
-+ /* Gather a list of all interfaces, indexed into their methods */
-+ interfaces = g_hash_table_new (g_str_hash, g_str_equal);
-+ for (i = 0; i < info->n_method_infos; i++)
-+ {
-+ const char *method_name;
-+ const char *method_interface;
-+ const char *method_args;
-+ const DBusGMethodInfo *method;
-+
-+ method = &(info->method_infos[i]);
-+
-+ method_interface = method_interface_from_object_info (info, method);
-+ method_name = method_name_from_object_info (info, method);
-+ method_args = method_arg_info_from_object_info (info, method);
-+
-+ values = lookup_values (interfaces, method_interface);
-+ values->methods = g_slist_prepend (values->methods, (gpointer) method);
-+ }
-+
-+ propsig = info->exported_signals;
-+ while (*propsig)
-+ {
-+ const char *iface;
-+ const char *signame;
-+
-+ propsig = propsig_iterate (propsig, &iface, &signame);
-+
-+ values = lookup_values (interfaces, iface);
-+ values->signals = g_slist_prepend (values->signals, (gpointer) signame);
-+ }
-+
-+ propsig = info->exported_properties;
-+ while (*propsig)
-+ {
-+ const char *iface;
-+ const char *propname;
-+
-+ propsig = propsig_iterate (propsig, &iface, &propname);
-+
-+ values = lookup_values (interfaces, iface);
-+ values->properties = g_slist_prepend (values->properties, (gpointer) propname);
-+ }
-+
-+ memset (&data, 0, sizeof (data));
-+ data.xml = xml;
-+ data.gtype = G_TYPE_FROM_INSTANCE (object);
-+ data.object_info = info;
-+ g_hash_table_foreach (interfaces, write_interface, &data);
-+
-+ g_hash_table_destroy (interfaces);
-+}
-+
-+static DBusHandlerResult
-+handle_introspect (DBusConnection *connection,
-+ DBusMessage *message,
-+ GObject *object)
-+{
-+ GString *xml;
-+ unsigned int i;
-+ DBusMessage *ret;
-+ char **children;
-+
-+ if (!dbus_connection_list_registered (connection,
-+ dbus_message_get_path (message),
-+ &children))
-+ g_error ("Out of memory");
-+
-+ xml = g_string_new (NULL);
-+
-+ g_string_append (xml, DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE);
-+
-+ g_string_append (xml, "<node>\n");
-+
-+ /* We are introspectable, though I guess that was pretty obvious */
-+ g_string_append_printf (xml, " <interface name=\"%s\">\n", DBUS_INTERFACE_INTROSPECTABLE);
-+ g_string_append (xml, " <method name=\"Introspect\">\n");
-+ g_string_append_printf (xml, " <arg name=\"data\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING);
-+ g_string_append (xml, " </method>\n");
-+ g_string_append (xml, " </interface>\n");
-+
-+ /* We support get/set properties */
-+ g_string_append_printf (xml, " <interface name=\"%s\">\n", DBUS_INTERFACE_PROPERTIES);
-+ g_string_append (xml, " <method name=\"Get\">\n");
-+ g_string_append_printf (xml, " <arg name=\"interface\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING);
-+ g_string_append_printf (xml, " <arg name=\"propname\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING);
-+ g_string_append_printf (xml, " <arg name=\"value\" direction=\"out\" type=\"%s\"/>\n", DBUS_TYPE_VARIANT_AS_STRING);
-+ g_string_append (xml, " </method>\n");
-+ g_string_append (xml, " <method name=\"Set\">\n");
-+ g_string_append_printf (xml, " <arg name=\"interface\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING);
-+ g_string_append_printf (xml, " <arg name=\"propname\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_STRING_AS_STRING);
-+ g_string_append_printf (xml, " <arg name=\"value\" direction=\"in\" type=\"%s\"/>\n", DBUS_TYPE_VARIANT_AS_STRING);
-+ g_string_append (xml, " </method>\n");
-+ g_string_append (xml, " </interface>\n");
-+
-+ introspect_interfaces (object, xml);
-+
-+ /* Append child nodes */
-+ for (i = 0; children[i]; i++)
-+ g_string_append_printf (xml, " <node name=\"%s\"/>\n",
-+ children[i]);
-+
-+ /* Close the XML, and send it to the requesting app */
-+ g_string_append (xml, "</node>\n");
-+
-+ ret = dbus_message_new_method_return (message);
-+ if (ret == NULL)
-+ g_error ("Out of memory");
-+
-+ dbus_message_append_args (ret,
-+ DBUS_TYPE_STRING, &xml->str,
-+ DBUS_TYPE_INVALID);
-+
-+ dbus_connection_send (connection, ret, NULL);
-+ dbus_message_unref (ret);
-+
-+ g_string_free (xml, TRUE);
-+
-+ dbus_free_string_array (children);
-+
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+}
-+
-+static DBusMessage*
-+set_object_property (DBusConnection *connection,
-+ DBusMessage *message,
-+ DBusMessageIter *iter,
-+ GObject *object,
-+ GParamSpec *pspec)
-+{
-+ GValue value = { 0, };
-+ DBusMessage *ret;
-+ DBusMessageIter sub;
-+ DBusGValueMarshalCtx context;
-+
-+ dbus_message_iter_recurse (iter, &sub);
-+
-+ context.gconnection = DBUS_G_CONNECTION_FROM_CONNECTION (connection);
-+ context.proxy = NULL;
-+
-+ g_value_init (&value, pspec->value_type);
-+ if (_dbus_gvalue_demarshal (&context, &sub, &value, NULL))
-+ {
-+ g_object_set_property (object,
-+ pspec->name,
-+ &value);
-+
-+ g_value_unset (&value);
-+
-+ ret = dbus_message_new_method_return (message);
-+ if (ret == NULL)
-+ g_error ("out of memory");
-+ }
-+ else
-+ {
-+ ret = dbus_message_new_error (message,
-+ DBUS_ERROR_INVALID_ARGS,
-+ "Argument's D-BUS type can't be converted to a GType");
-+ if (ret == NULL)
-+ g_error ("out of memory");
-+ }
-+
-+ return ret;
-+}
-+
-+static DBusMessage*
-+get_object_property (DBusConnection *connection,
-+ DBusMessage *message,
-+ GObject *object,
-+ GParamSpec *pspec)
-+{
-+ GType value_gtype;
-+ GValue value = {0, };
-+ gchar *variant_sig;
-+ DBusMessage *ret;
-+ DBusMessageIter iter, subiter;
-+
-+ ret = dbus_message_new_method_return (message);
-+ if (ret == NULL)
-+ g_error ("out of memory");
-+
-+
-+ g_value_init (&value, pspec->value_type);
-+ g_object_get_property (object, pspec->name, &value);
-+
-+ variant_sig = _dbus_gvalue_to_signature (&value);
-+ if (variant_sig == NULL)
-+ {
-+ value_gtype = G_VALUE_TYPE (&value);
-+ g_warning ("Cannot marshal type \"%s\" in variant", g_type_name (value_gtype));
-+ g_value_unset (&value);
-+ return ret;
-+ }
-+
-+ dbus_message_iter_init_append (ret, &iter);
-+ if (!dbus_message_iter_open_container (&iter,
-+ DBUS_TYPE_VARIANT,
-+ variant_sig,
-+ &subiter))
-+ {
-+ g_free (variant_sig);
-+ g_value_unset (&value);
-+ return ret;
-+ }
-+
-+ if (!_dbus_gvalue_marshal (&subiter, &value))
-+ {
-+ dbus_message_unref (ret);
-+ ret = dbus_message_new_error (message,
-+ DBUS_ERROR_UNKNOWN_METHOD,
-+ "Can't convert GType of object property to a D-BUS type");
-+ }
-+
-+ dbus_message_iter_close_container (&iter, &subiter);
-+
-+ g_value_unset (&value);
-+ g_free (variant_sig);
-+
-+ return ret;
-+}
-+
-+static gboolean
-+lookup_object_and_method (GObject *object,
-+ DBusMessage *message,
-+ const DBusGObjectInfo **object_ret,
-+ const DBusGMethodInfo **method_ret)
-+{
-+ const char *interface;
-+ const char *member;
-+ const char *signature;
-+ gboolean ret;
-+ const DBusGObjectInfo *info;
-+ int i;
-+
-+ interface = dbus_message_get_interface (message);
-+ member = dbus_message_get_member (message);
-+ signature = dbus_message_get_signature (message);
-+ ret = FALSE;
-+
-+ info = lookup_object_info (object);
-+ *object_ret = info;
-+
-+ for (i = 0; i < info->n_method_infos; i++)
-+ {
-+ const char *expected_member;
-+ const char *expected_interface;
-+ char *expected_signature;
-+ const DBusGMethodInfo *method;
-+
-+ method = &(info->method_infos[i]);
-+
-+ /* Check method interface/name and input signature */
-+ expected_interface = method_interface_from_object_info (*object_ret, method);
-+ expected_member = method_name_from_object_info (*object_ret, method);
-+ expected_signature = method_input_signature_from_object_info (*object_ret, method);
-+
-+ if ((interface == NULL
-+ || strcmp (expected_interface, interface) == 0)
-+ && strcmp (expected_member, member) == 0
-+ && strcmp (expected_signature, signature) == 0)
-+ {
-+ g_free (expected_signature);
-+ *method_ret = method;
-+ return TRUE;
-+ }
-+ g_free (expected_signature);
-+ }
-+
-+ return ret;
-+}
-+
-+static char *
-+gerror_domaincode_to_dbus_error_name (const DBusGObjectInfo *object_info,
-+ const char *msg_interface,
-+ GQuark domain, gint code)
-+{
-+ const char *domain_str;
-+ const char *code_str;
-+ GString *dbus_error_name;
-+
-+ domain_str = object_error_domain_prefix_from_object_info (object_info);
-+ code_str = object_error_code_from_object_info (object_info, domain, code);
-+
-+ if (!domain_str || !code_str)
-+ {
-+ DBusGErrorInfo *info;
-+
-+ g_static_rw_lock_reader_lock (&globals_lock);
-+
-+ if (error_metadata != NULL)
-+ info = g_datalist_id_get_data (&error_metadata, domain);
-+ else
-+ info = NULL;
-+
-+ g_static_rw_lock_reader_unlock (&globals_lock);
-+
-+ if (info)
-+ {
-+ GEnumValue *value;
-+ GEnumClass *klass;
-+
-+ klass = g_type_class_ref (info->code_enum);
-+ value = g_enum_get_value (klass, code);
-+ g_type_class_unref (klass);
-+
-+ domain_str = info->default_iface;
-+ code_str = value->value_nick;
-+ }
-+ }
-+
-+ if (!domain_str)
-+ domain_str = msg_interface;
-+
-+ if (!domain_str || !code_str)
-+ {
-+ /* If we can't map it sensibly, make up an error name */
-+ char *domain_from_quark;
-+
-+ dbus_error_name = g_string_new ("org.freedesktop.DBus.GLib.UnmappedError.");
-+
-+ domain_from_quark = uscore_to_wincaps (g_quark_to_string (domain));
-+ g_string_append (dbus_error_name, domain_from_quark);
-+ g_free (domain_from_quark);
-+
-+ g_string_append_printf (dbus_error_name, ".Code%d", code);
-+ }
-+ else
-+ {
-+ dbus_error_name = g_string_new (domain_str);
-+ g_string_append_c (dbus_error_name, '.');
-+ g_string_append (dbus_error_name, code_str);
-+ }
-+
-+ return g_string_free (dbus_error_name, FALSE);
-+}
-+
-+static DBusMessage *
-+gerror_to_dbus_error_message (const DBusGObjectInfo *object_info,
-+ DBusMessage *message,
-+ GError *error)
-+{
-+ DBusMessage *reply;
-+
-+ if (!error)
-+ {
-+ char *error_msg;
-+
-+ error_msg = g_strdup_printf ("Method invoked for %s returned FALSE but did not set error", dbus_message_get_member (message));
-+ reply = dbus_message_new_error (message, "org.freedesktop.DBus.GLib.ErrorError", error_msg);
-+ g_free (error_msg);
-+ }
-+ else
-+ {
-+ if (error->domain == DBUS_GERROR)
-+ reply = dbus_message_new_error (message,
-+ dbus_g_error_get_name (error),
-+ error->message);
-+ else
-+ {
-+ char *error_name;
-+ error_name = gerror_domaincode_to_dbus_error_name (object_info,
-+ dbus_message_get_interface (message),
-+ error->domain, error->code);
-+ reply = dbus_message_new_error (message, error_name, error->message);
-+ g_free (error_name);
-+ }
-+ }
-+ return reply;
-+}
-+
-+/**
-+ * The context of an asynchronous method call. See dbus_g_method_return() and
-+ * dbus_g_method_return_error().
-+ */
-+struct _DBusGMethodInvocation {
-+ DBusGConnection *connection; /**< The connection */
-+ DBusGMessage *message; /**< The message which generated the method call */
-+ const DBusGObjectInfo *object; /**< The object the method was called on */
-+ const DBusGMethodInfo *method; /**< The method called */
-+};
-+
-+static DBusHandlerResult
-+invoke_object_method (GObject *object,
-+ const DBusGObjectInfo *object_info,
-+ const DBusGMethodInfo *method,
-+ DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ gboolean had_error, call_only;
-+ GError *gerror;
-+ GValueArray *value_array;
-+ GValue return_value = {0,};
-+ GClosure closure;
-+ char *in_signature;
-+ GArray *out_param_values = NULL;
-+ GValueArray *out_param_gvalues = NULL;
-+ int out_param_count;
-+ int out_param_pos, out_param_gvalue_pos;
-+ DBusHandlerResult result;
-+ DBusMessage *reply;
-+ gboolean have_retval;
-+ gboolean retval_signals_error;
-+ gboolean retval_is_synthetic;
-+ gboolean retval_is_constant;
-+ const char *arg_metadata;
-+
-+ gerror = NULL;
-+
-+ /* Determine whether or not this method should be invoked in a new
-+ thread
-+ */
-+ if (strcmp (string_table_lookup (get_method_data (object_info, method), 2), "A") == 0)
-+ call_only = TRUE;
-+ else
-+ call_only = FALSE;
-+
-+ have_retval = FALSE;
-+ retval_signals_error = FALSE;
-+ retval_is_synthetic = FALSE;
-+ retval_is_constant = FALSE;
-+
-+ /* This is evil. We do this to work around the fact that
-+ * the generated glib marshallers check a flag in the closure object
-+ * which we don't care about. We don't need/want to create
-+ * a new closure for each invocation.
-+ */
-+ memset (&closure, 0, sizeof (closure));
-+
-+ in_signature = method_input_signature_from_object_info (object_info, method);
-+
-+ /* Convert method IN parameters to GValueArray */
-+ {
-+ GArray *types_array;
-+ guint n_params;
-+ const GType *types;
-+ DBusGValueMarshalCtx context;
-+ GError *error = NULL;
-+
-+ context.gconnection = DBUS_G_CONNECTION_FROM_CONNECTION (connection);
-+ context.proxy = NULL;
-+
-+ types_array = _dbus_gtypes_from_arg_signature (in_signature, FALSE);
-+ n_params = types_array->len;
-+ types = (const GType*) types_array->data;
-+
-+ value_array = _dbus_gvalue_demarshal_message (&context, message, n_params, types, &error);
-+ if (value_array == NULL)
-+ {
-+ g_free (in_signature);
-+ g_array_free (types_array, TRUE);
-+ reply = dbus_message_new_error (message, "org.freedesktop.DBus.GLib.ErrorError", error->message);
-+ dbus_connection_send (connection, reply, NULL);
-+ dbus_message_unref (reply);
-+ g_error_free (error);
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+ g_array_free (types_array, TRUE);
-+ }
-+
-+ /* Prepend object as first argument */
-+ g_value_array_prepend (value_array, NULL);
-+ g_value_init (g_value_array_get_nth (value_array, 0), G_TYPE_OBJECT);
-+ g_value_set_object (g_value_array_get_nth (value_array, 0), object);
-+
-+ if (call_only)
-+ {
-+ GValue context_value = {0,};
-+ DBusGMethodInvocation *context;
-+ context = g_new (DBusGMethodInvocation, 1);
-+ context->connection = dbus_g_connection_ref (DBUS_G_CONNECTION_FROM_CONNECTION (connection));
-+ context->message = dbus_g_message_ref (DBUS_G_MESSAGE_FROM_MESSAGE (message));
-+ context->object = object_info;
-+ context->method = method;
-+ g_value_init (&context_value, G_TYPE_POINTER);
-+ g_value_set_pointer (&context_value, context);
-+ g_value_array_append (value_array, &context_value);
-+ }
-+ else
-+ {
-+ RetvalType retval;
-+ gboolean arg_in;
-+ gboolean arg_const;
-+ const char *argsig;
-+
-+ arg_metadata = method_arg_info_from_object_info (object_info, method);
-+
-+ /* Count number of output parameters, and look for a return value */
-+ out_param_count = 0;
-+ while (*arg_metadata)
-+ {
-+ arg_metadata = arg_iterate (arg_metadata, NULL, &arg_in, &arg_const, &retval, &argsig);
-+ if (arg_in)
-+ continue;
-+ if (retval != RETVAL_NONE)
-+ {
-+ DBusSignatureIter tmp_sigiter;
-+ /* This is the function return value */
-+ g_assert (!have_retval);
-+ have_retval = TRUE;
-+ retval_is_synthetic = FALSE;
-+
-+ switch (retval)
-+ {
-+ case RETVAL_NONE:
-+ g_assert_not_reached ();
-+ break;
-+ case RETVAL_NOERROR:
-+ retval_signals_error = FALSE;
-+ break;
-+ case RETVAL_ERROR:
-+ retval_signals_error = TRUE;
-+ break;
-+ }
-+
-+ retval_is_constant = arg_const;
-+
-+ /* Initialize our return GValue with the specified type */
-+ dbus_signature_iter_init (&tmp_sigiter, argsig);
-+ g_value_init (&return_value, _dbus_gtype_from_signature_iter (&tmp_sigiter, FALSE));
-+ }
-+ else
-+ {
-+ /* It's a regular output value */
-+ out_param_count++;
-+ }
-+ }
-+
-+ /* For compatibility, if we haven't found a return value, we assume
-+ * the function returns a gboolean for signalling an error
-+ * (and therefore also takes a GError). We also note that it
-+ * is a "synthetic" return value; i.e. we aren't going to be
-+ * sending it over the bus, it's just to signal an error.
-+ */
-+ if (!have_retval)
-+ {
-+ have_retval = TRUE;
-+ retval_is_synthetic = TRUE;
-+ retval_signals_error = TRUE;
-+ g_value_init (&return_value, G_TYPE_BOOLEAN);
-+ }
-+
-+ /* Create an array to store the actual values of OUT parameters
-+ * (other than the real function return, if any). Then, create
-+ * a GValue boxed POINTER to each of those values, and append to
-+ * the invocation, so the method can return the OUT parameters.
-+ */
-+ out_param_values = g_array_sized_new (FALSE, TRUE, sizeof (GTypeCValue), out_param_count);
-+
-+ /* We have a special array of GValues for toplevel GValue return
-+ * types.
-+ */
-+ out_param_gvalues = g_value_array_new (out_param_count);
-+ out_param_pos = 0;
-+ out_param_gvalue_pos = 0;
-+
-+ /* Reset argument metadata pointer */
-+ arg_metadata = method_arg_info_from_object_info (object_info, method);
-+
-+ /* Iterate over output arguments again, this time allocating space for
-+ * them as appopriate.
-+ */
-+ while (*arg_metadata)
-+ {
-+ GValue value = {0, };
-+ GTypeCValue storage;
-+ DBusSignatureIter tmp_sigiter;
-+ GType current_gtype;
-+
-+ arg_metadata = arg_iterate (arg_metadata, NULL, &arg_in, NULL, &retval, &argsig);
-+ /* Skip over input arguments and the return value, if any */
-+ if (arg_in || retval != RETVAL_NONE)
-+ continue;
-+
-+ dbus_signature_iter_init (&tmp_sigiter, argsig);
-+ current_gtype = _dbus_gtype_from_signature_iter (&tmp_sigiter, FALSE);
-+
-+ g_value_init (&value, G_TYPE_POINTER);
-+
-+ /* We special case variants to make method invocation a bit nicer */
-+ if (current_gtype != G_TYPE_VALUE)
-+ {
-+ memset (&storage, 0, sizeof (storage));
-+ g_array_append_val (out_param_values, storage);
-+ g_value_set_pointer (&value, &(g_array_index (out_param_values, GTypeCValue, out_param_pos)));
-+ out_param_pos++;
-+ }
-+ else
-+ {
-+ g_value_array_append (out_param_gvalues, NULL);
-+ g_value_set_pointer (&value, out_param_gvalues->values + out_param_gvalue_pos);
-+ out_param_gvalue_pos++;
-+ }
-+ g_value_array_append (value_array, &value);
-+ }
-+ }
-+
-+ /* Append GError as final argument if necessary */
-+ if (retval_signals_error)
-+ {
-+ g_assert (have_retval);
-+ g_value_array_append (value_array, NULL);
-+ g_value_init (g_value_array_get_nth (value_array, value_array->n_values - 1), G_TYPE_POINTER);
-+ g_value_set_pointer (g_value_array_get_nth (value_array, value_array->n_values - 1), &gerror);
-+ }
-+
-+ /* Actually invoke method */
-+ method->marshaller (&closure, have_retval ? &return_value : NULL,
-+ value_array->n_values,
-+ value_array->values,
-+ NULL, method->function);
-+ if (call_only)
-+ {
-+ result = DBUS_HANDLER_RESULT_HANDLED;
-+ goto done;
-+ }
-+ if (retval_signals_error)
-+ had_error = _dbus_gvalue_signals_error (&return_value);
-+ else
-+ had_error = FALSE;
-+
-+ if (!had_error)
-+ {
-+ DBusMessageIter iter;
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ goto nomem;
-+
-+ /* Append output arguments to reply */
-+ dbus_message_iter_init_append (reply, &iter);
-+
-+ /* First, append the return value, unless it's synthetic */
-+ if (have_retval && !retval_is_synthetic)
-+ {
-+ if (!_dbus_gvalue_marshal (&iter, &return_value))
-+ goto nomem;
-+ if (!retval_is_constant)
-+ g_value_unset (&return_value);
-+ }
-+
-+ /* Grab the argument metadata and iterate over it */
-+ arg_metadata = method_arg_info_from_object_info (object_info, method);
-+
-+ /* Now append any remaining return values */
-+ out_param_pos = 0;
-+ out_param_gvalue_pos = 0;
-+ while (*arg_metadata)
-+ {
-+ GValue gvalue = {0, };
-+ const char *arg_name;
-+ gboolean arg_in;
-+ gboolean constval;
-+ RetvalType retval;
-+ const char *arg_signature;
-+ DBusSignatureIter argsigiter;
-+
-+ do
-+ {
-+ /* Iterate over only output values; skip over input
-+ arguments and the return value */
-+ arg_metadata = arg_iterate (arg_metadata, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ }
-+ while ((arg_in || retval != RETVAL_NONE) && *arg_metadata);
-+
-+ /* If the last argument we saw was input or the return
-+ * value, we must be done iterating over output arguments.
-+ */
-+ if (arg_in || retval != RETVAL_NONE)
-+ break;
-+
-+ dbus_signature_iter_init (&argsigiter, arg_signature);
-+
-+ g_value_init (&gvalue, _dbus_gtype_from_signature_iter (&argsigiter, FALSE));
-+ if (G_VALUE_TYPE (&gvalue) != G_TYPE_VALUE)
-+ {
-+ if (!_dbus_gvalue_take (&gvalue,
-+ &(g_array_index (out_param_values, GTypeCValue, out_param_pos))))
-+ g_assert_not_reached ();
-+ out_param_pos++;
-+ }
-+ else
-+ {
-+ g_value_set_static_boxed (&gvalue, out_param_gvalues->values + out_param_gvalue_pos);
-+ out_param_gvalue_pos++;
-+ }
-+
-+ if (!_dbus_gvalue_marshal (&iter, &gvalue))
-+ goto nomem;
-+ /* Here we actually free the allocated value; we
-+ * took ownership of it with _dbus_gvalue_take, unless
-+ * an annotation has specified this value as constant.
-+ */
-+ if (!constval)
-+ g_value_unset (&gvalue);
-+ }
-+ }
-+ else
-+ reply = gerror_to_dbus_error_message (object_info, message, gerror);
-+
-+ if (reply)
-+ {
-+ dbus_connection_send (connection, reply, NULL);
-+ dbus_message_unref (reply);
-+ }
-+
-+ result = DBUS_HANDLER_RESULT_HANDLED;
-+ done:
-+ g_free (in_signature);
-+ if (!call_only)
-+ {
-+ g_array_free (out_param_values, TRUE);
-+ g_value_array_free (out_param_gvalues);
-+ }
-+ g_value_array_free (value_array);
-+ return result;
-+ nomem:
-+ result = DBUS_HANDLER_RESULT_NEED_MEMORY;
-+ goto done;
-+}
-+
-+static DBusHandlerResult
-+gobject_message_function (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ GParamSpec *pspec;
-+ GObject *object;
-+ gboolean setter;
-+ gboolean getter;
-+ char *s;
-+ const char *wincaps_propname;
-+ /* const char *wincaps_propiface; */
-+ DBusMessageIter iter;
-+ const DBusGMethodInfo *method;
-+ const DBusGObjectInfo *object_info;
-+
-+ object = G_OBJECT (user_data);
-+
-+ if (dbus_message_is_method_call (message,
-+ DBUS_INTERFACE_INTROSPECTABLE,
-+ "Introspect"))
-+ return handle_introspect (connection, message, object);
-+
-+ /* Try the metainfo, which lets us invoke methods */
-+ if (lookup_object_and_method (object, message, &object_info, &method))
-+ return invoke_object_method (object, object_info, method, connection, message);
-+
-+ /* If no metainfo, we can still do properties and signals
-+ * via standard GLib introspection
-+ */
-+ getter = FALSE;
-+ setter = FALSE;
-+ if (dbus_message_is_method_call (message,
-+ DBUS_INTERFACE_PROPERTIES,
-+ "Get"))
-+ getter = TRUE;
-+ else if (dbus_message_is_method_call (message,
-+ DBUS_INTERFACE_PROPERTIES,
-+ "Set"))
-+ setter = TRUE;
-+
-+ if (!(setter || getter))
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+
-+ dbus_message_iter_init (message, &iter);
-+
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING)
-+ {
-+ g_warning ("Property get or set does not have an interface string as first arg\n");
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+ /* We never use the interface name; if we did, we'd need to
-+ * remember that it can be empty string for "pick one for me"
-+ */
-+ /* dbus_message_iter_get_basic (&iter, &wincaps_propiface); */
-+ dbus_message_iter_next (&iter);
-+
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING)
-+ {
-+ g_warning ("Property get or set does not have a property name string as second arg\n");
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+ dbus_message_iter_get_basic (&iter, &wincaps_propname);
-+ dbus_message_iter_next (&iter);
-+
-+ s = _dbus_gutils_wincaps_to_uscore (wincaps_propname);
-+
-+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (object),
-+ s);
-+
-+ g_free (s);
-+
-+ if (pspec != NULL)
-+ {
-+ DBusMessage *ret;
-+
-+ if (setter)
-+ {
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_VARIANT)
-+ {
-+ g_warning ("Property set does not have a variant value as third arg\n");
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+
-+ ret = set_object_property (connection, message, &iter,
-+ object, pspec);
-+ dbus_message_iter_next (&iter);
-+ }
-+ else if (getter)
-+ {
-+ ret = get_object_property (connection, message,
-+ object, pspec);
-+ }
-+ else
-+ {
-+ g_assert_not_reached ();
-+ ret = NULL;
-+ }
-+
-+ g_assert (ret != NULL);
-+
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INVALID)
-+ g_warning ("Property get or set had too many arguments\n");
-+
-+ dbus_connection_send (connection, ret, NULL);
-+ dbus_message_unref (ret);
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static const DBusObjectPathVTable gobject_dbus_vtable = {
-+ gobject_unregister_function,
-+ gobject_message_function,
-+ NULL
-+};
-+
-+typedef struct {
-+ GClosure closure;
-+ DBusGConnection *connection;
-+ GObject *object;
-+ const char *signame;
-+ const char *sigiface;
-+} DBusGSignalClosure;
-+
-+static GClosure *
-+dbus_g_signal_closure_new (DBusGConnection *connection,
-+ GObject *object,
-+ const char *signame,
-+ const char *sigiface)
-+{
-+ DBusGSignalClosure *closure;
-+
-+ closure = (DBusGSignalClosure*) g_closure_new_simple (sizeof (DBusGSignalClosure), NULL);
-+
-+ closure->connection = dbus_g_connection_ref (connection);
-+ closure->object = object;
-+ closure->signame = signame;
-+ closure->sigiface = sigiface;
-+ return (GClosure*) closure;
-+}
-+
-+static void
-+dbus_g_signal_closure_finalize (gpointer data,
-+ GClosure *closure)
-+{
-+ DBusGSignalClosure *sigclosure = (DBusGSignalClosure *) closure;
-+
-+ dbus_g_connection_unref (sigclosure->connection);
-+}
-+
-+static void
-+signal_emitter_marshaller (GClosure *closure,
-+ GValue *retval,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ DBusGSignalClosure *sigclosure;
-+ DBusMessage *signal;
-+ DBusMessageIter iter;
-+ guint i;
-+ const char *path;
-+
-+ sigclosure = (DBusGSignalClosure *) closure;
-+
-+ g_assert (retval == NULL);
-+
-+ path = _dbus_gobject_get_path (sigclosure->object);
-+
-+ g_assert (path != NULL);
-+
-+ signal = dbus_message_new_signal (path,
-+ sigclosure->sigiface,
-+ sigclosure->signame);
-+ if (!signal)
-+ {
-+ g_error ("out of memory");
-+ return;
-+ }
-+
-+ dbus_message_iter_init_append (signal, &iter);
-+
-+ /* First argument is the object itself, and we can't marshall that */
-+ for (i = 1; i < n_param_values; i++)
-+ {
-+ if (!_dbus_gvalue_marshal (&iter,
-+ (GValue *) (&(param_values[i]))))
-+ {
-+ g_warning ("failed to marshal parameter %d for signal %s",
-+ i, sigclosure->signame);
-+ goto out;
-+ }
-+ }
-+ dbus_connection_send (DBUS_CONNECTION_FROM_G_CONNECTION (sigclosure->connection),
-+ signal, NULL);
-+ out:
-+ dbus_message_unref (signal);
-+}
-+
-+static void
-+export_signals (DBusGConnection *connection, const DBusGObjectInfo *info, GObject *object)
-+{
-+ GType gtype;
-+ const char *sigdata;
-+ const char *iface;
-+ const char *signame;
-+
-+ gtype = G_TYPE_FROM_INSTANCE (object);
-+
-+ sigdata = info->exported_signals;
-+
-+ while (*sigdata != '\0')
-+ {
-+ guint id;
-+ GSignalQuery query;
-+ GClosure *closure;
-+ char *s;
-+
-+ sigdata = propsig_iterate (sigdata, &iface, &signame);
-+
-+ s = _dbus_gutils_wincaps_to_uscore (signame);
-+
-+ id = g_signal_lookup (s, gtype);
-+ if (id == 0)
-+ {
-+ g_warning ("signal \"%s\" (from \"%s\") exported but not found in object class \"%s\"",
-+ s, signame, g_type_name (gtype));
-+ g_free (s);
-+ continue;
-+ }
-+
-+ g_signal_query (id, &query);
-+
-+ if (query.return_type != G_TYPE_NONE)
-+ {
-+ g_warning ("Not exporting signal \"%s\" for object class \"%s\" as it has a return type \"%s\"",
-+ s, g_type_name (gtype), g_type_name (query.return_type));
-+ g_free (s);
-+ continue; /* FIXME: these could be listed as methods ? */
-+ }
-+
-+ closure = dbus_g_signal_closure_new (connection, object, signame, (char*) iface);
-+ g_closure_set_marshal (closure, signal_emitter_marshaller);
-+
-+ g_signal_connect_closure_by_id (object,
-+ id,
-+ 0,
-+ closure,
-+ FALSE);
-+
-+ g_closure_add_finalize_notifier (closure, NULL,
-+ dbus_g_signal_closure_finalize);
-+ g_free (s);
-+ }
-+}
-+
-+#include "dbus-glib-error-switch.h"
-+
-+void
-+dbus_set_g_error (GError **gerror,
-+ DBusError *error)
-+{
-+ int code;
-+
-+ code = dbus_error_to_gerror_code (error->name);
-+ if (code != DBUS_GERROR_REMOTE_EXCEPTION)
-+ g_set_error (gerror, DBUS_GERROR,
-+ code,
-+ "%s",
-+ error->message);
-+ else
-+ g_set_error (gerror, DBUS_GERROR,
-+ code,
-+ "%s%c%s",
-+ error->message ? error->message : "",
-+ '\0',
-+ error->name);
-+}
-+
-+static void
-+dbus_g_error_info_free (gpointer p)
-+{
-+ DBusGErrorInfo *info;
-+
-+ info = p;
-+
-+ g_free (info->default_iface);
-+ g_free (info);
-+}
-+
-+/** @} */ /* end of internals */
-+
-+/**
-+ * @addtogroup DBusGLib
-+ * @{
-+ */
-+
-+/**
-+ * Install introspection information about the given object GType
-+ * sufficient to allow methods on the object to be invoked by name.
-+ * The introspection information is normally generated by
-+ * dbus-glib-tool, then this function is called in the
-+ * class_init() for the object class.
-+ *
-+ * Once introspection information has been installed, instances of the
-+ * object registered with dbus_g_connection_register_g_object() can have
-+ * their methods invoked remotely.
-+ *
-+ * @param object_type GType for the object
-+ * @param info introspection data generated by dbus-glib-tool
-+ */
-+void
-+dbus_g_object_type_install_info (GType object_type,
-+ const DBusGObjectInfo *info)
-+{
-+ g_return_if_fail (G_TYPE_IS_CLASSED (object_type));
-+
-+ _dbus_g_value_types_init ();
-+
-+ g_type_set_qdata (object_type,
-+ dbus_g_object_type_dbus_metadata_quark (),
-+ (gpointer) info);
-+}
-+
-+/**
-+ * Register a GError domain and set of codes with D-BUS. You must
-+ * have created a GEnum for the error codes. This function will not
-+ * be needed with an introspection-capable GLib.
-+ *
-+ * @param domain the GError domain
-+ * @param default_iface the D-BUS interface used for error values by default, or #NULL
-+ * @param code_enum a GType for a GEnum of the error codes
-+ */
-+void
-+dbus_g_error_domain_register (GQuark domain,
-+ const char *default_iface,
-+ GType code_enum)
-+{
-+ DBusGErrorInfo *info;
-+
-+ g_return_if_fail (g_quark_to_string (domain) != NULL);
-+ g_return_if_fail (code_enum != G_TYPE_INVALID);
-+ g_return_if_fail (G_TYPE_FUNDAMENTAL (code_enum) == G_TYPE_ENUM);
-+
-+ g_static_rw_lock_writer_lock (&globals_lock);
-+
-+ if (error_metadata == NULL)
-+ g_datalist_init (&error_metadata);
-+
-+ info = g_datalist_id_get_data (&error_metadata, domain);
-+
-+ if (info != NULL)
-+ {
-+ g_warning ("Metadata for error domain \"%s\" already registered\n",
-+ g_quark_to_string (domain));
-+ }
-+ else
-+ {
-+ info = g_new0 (DBusGErrorInfo, 1);
-+ info->default_iface = g_strdup (default_iface);
-+ info->code_enum = code_enum;
-+
-+ g_datalist_id_set_data_full (&error_metadata,
-+ domain,
-+ info,
-+ dbus_g_error_info_free);
-+ }
-+
-+ g_static_rw_lock_writer_unlock (&globals_lock);
-+}
-+
-+static void
-+unregister_gobject (DBusGConnection *connection, GObject *dead)
-+{
-+ char *path;
-+ path = g_object_steal_data (dead, "dbus_glib_object_path");
-+ dbus_connection_unregister_object_path (DBUS_CONNECTION_FROM_G_CONNECTION (connection), path);
-+ g_free (path);
-+}
-+
-+/**
-+ * Registers a GObject at the given path. Properties, methods, and signals
-+ * of the object can then be accessed remotely. Methods are only available
-+ * if method introspection data has been added to the object's class
-+ * with g_object_class_install_info().
-+ *
-+ * The registration will be cancelled if either the DBusConnection or
-+ * the GObject gets finalized.
-+ *
-+ * @param connection the D-BUS connection
-+ * @param at_path the path where the object will live (the object's name)
-+ * @param object the object
-+ */
-+void
-+dbus_g_connection_register_g_object (DBusGConnection *connection,
-+ const char *at_path,
-+ GObject *object)
-+{
-+ const DBusGObjectInfo *info;
-+ g_return_if_fail (connection != NULL);
-+ g_return_if_fail (at_path != NULL);
-+ g_return_if_fail (G_IS_OBJECT (object));
-+
-+ info = lookup_object_info (object);
-+ if (info == NULL)
-+ {
-+ g_warning ("No introspection data registered for object class \"%s\"",
-+ g_type_name (G_TYPE_FROM_INSTANCE (object)));
-+ return;
-+ }
-+
-+ if (!dbus_connection_register_object_path (DBUS_CONNECTION_FROM_G_CONNECTION (connection),
-+ at_path,
-+ &gobject_dbus_vtable,
-+ object))
-+ {
-+ g_error ("Failed to register GObject with DBusConnection");
-+ return;
-+ }
-+
-+ export_signals (connection, info, object);
-+
-+ g_object_set_data (object, "dbus_glib_object_path", g_strdup (at_path));
-+ g_object_weak_ref (object, (GWeakNotify)unregister_gobject, connection);
-+}
-+
-+GObject *
-+dbus_g_connection_lookup_g_object (DBusGConnection *connection,
-+ const char *at_path)
-+{
-+ gpointer ret;
-+ if (!dbus_connection_get_object_path_data (DBUS_CONNECTION_FROM_G_CONNECTION (connection), at_path, &ret))
-+ return NULL;
-+ return ret;
-+}
-+
-+typedef struct {
-+ GType rettype;
-+ guint n_params;
-+ GType *params;
-+} DBusGFuncSignature;
-+
-+static guint
-+funcsig_hash (gconstpointer key)
-+{
-+ const DBusGFuncSignature *sig = key;
-+ GType *types;
-+ guint ret;
-+ guint i;
-+
-+ ret = sig->rettype;
-+ types = sig->params;
-+
-+ for (i = 0; i < sig->n_params; i++)
-+ {
-+ ret += (int) (*types);
-+ types++;
-+ }
-+
-+ return ret;
-+}
-+
-+static gboolean
-+funcsig_equal (gconstpointer aval,
-+ gconstpointer bval)
-+{
-+ const DBusGFuncSignature *a = aval;
-+ const DBusGFuncSignature *b = bval;
-+ const GType *atypes;
-+ const GType *btypes;
-+ guint i;
-+
-+ if (a->rettype != b->rettype
-+ || a->n_params != b->n_params)
-+ return FALSE;
-+
-+ atypes = a->params;
-+ btypes = b->params;
-+
-+ for (i = 0; i < a->n_params; i++)
-+ {
-+ if (*btypes != *atypes)
-+ return FALSE;
-+ atypes++;
-+ btypes++;
-+ }
-+
-+ return TRUE;
-+}
-+
-+GClosureMarshal
-+_dbus_gobject_lookup_marshaller (GType rettype,
-+ guint n_params,
-+ const GType *param_types)
-+{
-+ GClosureMarshal ret;
-+ DBusGFuncSignature sig;
-+ GType *params;
-+ guint i;
-+
-+ /* Convert to fundamental types */
-+ rettype = G_TYPE_FUNDAMENTAL (rettype);
-+ params = g_new (GType, n_params);
-+ for (i = 0; i < n_params; i++)
-+ params[i] = G_TYPE_FUNDAMENTAL (param_types[i]);
-+
-+ sig.rettype = rettype;
-+ sig.n_params = n_params;
-+ sig.params = params;
-+
-+ g_static_rw_lock_reader_lock (&globals_lock);
-+
-+ if (marshal_table)
-+ ret = g_hash_table_lookup (marshal_table, &sig);
-+ else
-+ ret = NULL;
-+
-+ g_static_rw_lock_reader_unlock (&globals_lock);
-+
-+ if (ret == NULL)
-+ {
-+ if (rettype == G_TYPE_NONE)
-+ {
-+ if (n_params == 0)
-+ ret = g_cclosure_marshal_VOID__VOID;
-+ else if (n_params == 1)
-+ {
-+ switch (params[0])
-+ {
-+ case G_TYPE_BOOLEAN:
-+ ret = g_cclosure_marshal_VOID__BOOLEAN;
-+ break;
-+ case G_TYPE_UCHAR:
-+ ret = g_cclosure_marshal_VOID__UCHAR;
-+ break;
-+ case G_TYPE_INT:
-+ ret = g_cclosure_marshal_VOID__INT;
-+ break;
-+ case G_TYPE_UINT:
-+ ret = g_cclosure_marshal_VOID__UINT;
-+ break;
-+ case G_TYPE_DOUBLE:
-+ ret = g_cclosure_marshal_VOID__DOUBLE;
-+ break;
-+ case G_TYPE_STRING:
-+ ret = g_cclosure_marshal_VOID__STRING;
-+ break;
-+ case G_TYPE_BOXED:
-+ ret = g_cclosure_marshal_VOID__BOXED;
-+ break;
-+ }
-+ }
-+ else if (n_params == 3
-+ && params[0] == G_TYPE_STRING
-+ && params[1] == G_TYPE_STRING
-+ && params[2] == G_TYPE_STRING)
-+ {
-+ ret = _dbus_g_marshal_NONE__STRING_STRING_STRING;
-+ }
-+ }
-+ }
-+
-+ g_free (params);
-+ return ret;
-+}
-+
-+/**
-+ * Register a GClosureMarshal to be used for signal invocations,
-+ * giving its return type and a list of parameter types,
-+ * followed by G_TYPE_INVALID.
-+
-+ * This function will not be needed once GLib includes libffi.
-+ *
-+ * @param marshaller a GClosureMarshal to be used for invocation
-+ * @param rettype a GType for the return type of the function
-+ * @param ... The parameter GTypes, followed by G_TYPE_INVALID
-+ */
-+void
-+dbus_g_object_register_marshaller (GClosureMarshal marshaller,
-+ GType rettype,
-+ ...)
-+{
-+ va_list args;
-+ GArray *types;
-+ GType gtype;
-+
-+ va_start (args, rettype);
-+
-+ types = g_array_new (TRUE, TRUE, sizeof (GType));
-+
-+ while ((gtype = va_arg (args, GType)) != G_TYPE_INVALID)
-+ g_array_append_val (types, gtype);
-+
-+ dbus_g_object_register_marshaller_array (marshaller, rettype,
-+ types->len, (GType*) types->data);
-+
-+ g_array_free (types, TRUE);
-+ va_end (args);
-+}
-+
-+/**
-+ * Register a GClosureMarshal to be used for signal invocations.
-+ * See also #dbus_g_object_register_marshaller
-+ *
-+ * @param marshaller a GClosureMarshal to be used for invocation
-+ * @param rettype a GType for the return type of the function
-+ * @param n_types number of function parameters
-+ * @param types a C array of GTypes values
-+ */
-+void
-+dbus_g_object_register_marshaller_array (GClosureMarshal marshaller,
-+ GType rettype,
-+ guint n_types,
-+ const GType* types)
-+{
-+ DBusGFuncSignature *sig;
-+ guint i;
-+
-+ g_static_rw_lock_writer_lock (&globals_lock);
-+
-+ if (marshal_table == NULL)
-+ marshal_table = g_hash_table_new_full (funcsig_hash,
-+ funcsig_equal,
-+ g_free,
-+ NULL);
-+ sig = g_new0 (DBusGFuncSignature, 1);
-+ sig->rettype = G_TYPE_FUNDAMENTAL (rettype);
-+ sig->n_params = n_types;
-+ sig->params = g_new (GType, n_types);
-+ for (i = 0; i < n_types; i++)
-+ sig->params[i] = G_TYPE_FUNDAMENTAL (types[i]);
-+
-+ g_hash_table_insert (marshal_table, sig, marshaller);
-+
-+ g_static_rw_lock_writer_unlock (&globals_lock);
-+}
-+
-+/**
-+ * Get the sender of a message so we can send a
-+ * "reply" later (i.e. send a message directly
-+ * to a service which invoked the method at a
-+ * later time).
-+ *
-+ * @param context the method context
-+ *
-+ * @return the unique name of teh sender
-+ */
-+gchar *
-+dbus_g_method_get_sender (DBusGMethodInvocation *context)
-+{
-+ const gchar *sender;
-+
-+ sender = dbus_message_get_sender (dbus_g_message_get_message (context->message));
-+
-+ if (sender == NULL)
-+ return NULL;
-+
-+ return strdup (sender);
-+}
-+
-+/**
-+ * Get the reply message to append reply values
-+ * Used as a sidedoor when you can't generate dbus values
-+ * of the correct type due to glib binding limitations
-+ *
-+ * @param context the method context
-+ */
-+DBusMessage *
-+dbus_g_method_get_reply (DBusGMethodInvocation *context)
-+{
-+ return dbus_message_new_method_return (dbus_g_message_get_message (context->message));
-+}
-+
-+/**
-+ * Send a manually created reply message
-+ * Used as a sidedoor when you can't generate dbus values
-+ * of the correct type due to glib binding limitations
-+ *
-+ * @param context the method context
-+ * @param reply the reply message, will be unreffed
-+ */
-+void
-+dbus_g_method_send_reply (DBusGMethodInvocation *context, DBusMessage *reply)
-+{
-+ dbus_connection_send (dbus_g_connection_get_connection (context->connection), reply, NULL);
-+ dbus_message_unref (reply);
-+
-+ dbus_g_connection_unref (context->connection);
-+ dbus_g_message_unref (context->message);
-+ g_free (context);
-+}
-+
-+
-+/**
-+ * Send a return message for a given method invocation, with arguments.
-+ * This function also frees the sending context.
-+ *
-+ * @param context the method context
-+ */
-+void
-+dbus_g_method_return (DBusGMethodInvocation *context, ...)
-+{
-+ DBusMessage *reply;
-+ DBusMessageIter iter;
-+ va_list args;
-+ char *out_sig;
-+ GArray *argsig;
-+ guint i;
-+
-+ reply = dbus_message_new_method_return (dbus_g_message_get_message (context->message));
-+ out_sig = method_output_signature_from_object_info (context->object, context->method);
-+ argsig = _dbus_gtypes_from_arg_signature (out_sig, FALSE);
-+
-+ dbus_message_iter_init_append (reply, &iter);
-+
-+ va_start (args, context);
-+ for (i = 0; i < argsig->len; i++)
-+ {
-+ GValue value = {0,};
-+ char *error;
-+ g_value_init (&value, g_array_index (argsig, GType, i));
-+ error = NULL;
-+ G_VALUE_COLLECT (&value, args, G_VALUE_NOCOPY_CONTENTS, &error);
-+ if (error)
-+ {
-+ g_warning(error);
-+ g_free (error);
-+ }
-+ _dbus_gvalue_marshal (&iter, &value);
-+ }
-+ va_end (args);
-+
-+ dbus_connection_send (dbus_g_connection_get_connection (context->connection), reply, NULL);
-+ dbus_message_unref (reply);
-+
-+ dbus_g_connection_unref (context->connection);
-+ dbus_g_message_unref (context->message);
-+ g_free (context);
-+ g_free (out_sig);
-+}
-+
-+/**
-+ * Send a error message for a given method invocation.
-+ * This function also frees the sending context.
-+ *
-+ * @param context the method context
-+ * @param error the error to send.
-+ */
-+void
-+dbus_g_method_return_error (DBusGMethodInvocation *context, GError *error)
-+{
-+ DBusMessage *reply;
-+ reply = gerror_to_dbus_error_message (context->object, dbus_g_message_get_message (context->message), error);
-+ dbus_connection_send (dbus_g_connection_get_connection (context->connection), reply, NULL);
-+ dbus_message_unref (reply);
-+ g_free (context);
-+}
-+
-+/** @} */ /* end of public API */
-+
-+const char * _dbus_gobject_get_path (GObject *obj)
-+{
-+ return g_object_get_data (obj, "dbus_glib_object_path");
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+#include <stdlib.h>
-+
-+static void
-+_dummy_function (void)
-+{
-+}
-+
-+/* Data structures copied from one generated by current dbus-binding-tool;
-+ * we need to support this layout forever
-+ */
-+static const DBusGMethodInfo dbus_glib_internal_test_methods[] = {
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 0 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 49 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 117 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 191 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 270 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 320 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 391 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 495 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 623 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 693 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 765 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 838 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 911 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 988 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1064 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1140 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1204 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1278 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1347 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1408 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1460 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1533 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1588 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1647 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1730 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1784 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1833 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1895 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1947 },
-+ { (GCallback) _dummy_function, g_cclosure_marshal_VOID__VOID, 1999 },
-+};
-+
-+const DBusGObjectInfo dbus_glib_internal_test_object_info = {
-+ 0,
-+ dbus_glib_internal_test_methods,
-+ 30,
-+"org.freedesktop.DBus.Tests.MyObject\0DoNothing\0S\0\0org.freedesktop.DBus.Tests.MyObject\0Increment\0S\0x\0I\0u\0arg1\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0IncrementRetval\0S\0x\0I\0u\0arg1\0O\0F\0R\0u\0\0org.freedesktop.DBus.Tests.MyObject\0IncrementRetvalError\0S\0x\0I\0u\0arg1\0O\0F\0E\0u\0\0org.freedesktop.DBus.Tests.MyObject\0ThrowError\0S\0\0org.freedesktop.DBus.Tests.MyObject\0Uppercase\0S\0arg0\0I\0s\0arg1\0O\0F\0N\0s\0\0org.freedesktop.DBus.Tests.MyObject\0ManyArgs\0S\0x\0I\0u\0str\0I\0s\0trouble\0I\0d\0d_ret\0O\0F\0N\0d\0str_ret\0O\0F\0N\0s\0\0org.freedesktop.DBus.Tests.MyObject\0ManyReturn\0S\0arg0\0O\0F\0N\0u\0arg1\0O\0F\0N\0s\0arg2\0O\0F\0N\0i\0arg3\0O\0F\0N\0u\0arg4\0O\0F\0N\0u\0arg5\0O\0C\0N\0s\0\0org.freedesktop.DBus.Tests.MyObject\0Stringify\0S\0val\0I\0v\0arg1\0O\0F\0N\0s\0\0org.freedesktop.DBus.Tests.MyObject\0Unstringify\0S\0val\0I\0s\0arg1\0O\0F\0N\0v\0\0org.freedesktop.DBus.Tests.MyObject\0Recursive1\0S\0arg0\0I\0au\0arg1\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0Recursive2\0S\0arg0\0I\0u\0arg1\0O\0F\0N\0au\0\0org.freedesktop.DBus.Tests.MyObject\0ManyUppercase\0S\0arg0\0I\0as\0arg1\0O\0F\0N\0as\0\0org.freedesktop.DBus.Tests.MyObject\0StrHashLen\0S\0arg0\0I\0a{ss}\0arg1\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0SendCar\0S\0arg0\0I\0(suv)\0arg1\0O\0F\0N\0(uo)\0\0org.freedesktop.DBus.Tests.MyObject\0GetHash\0S\0arg0\0O\0F\0N\0a{ss}\0\0org.freedesktop.DBus.Tests.MyObject\0RecArrays\0S\0val\0I\0aas\0arg1\0O\0F\0N\0aau\0\0org.freedesktop.DBus.Tests.MyObject\0Objpath\0S\0arg0\0I\0o\0arg1\0O\0C\0N\0o\0\0org.freedesktop.DBus.Tests.MyObject\0GetObjs\0S\0arg0\0O\0F\0N\0ao\0\0org.freedesktop.DBus.Tests.MyObject\0IncrementVal\0S\0\0org.freedesktop.DBus.Tests.MyObject\0AsyncIncrement\0A\0x\0I\0u\0arg1\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0AsyncThrowError\0A\0\0org.freedesktop.DBus.Tests.MyObject\0GetVal\0S\0arg0\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.MyObject\0ManyStringify\0S\0arg0\0I\0a{sv}\0arg1\0O\0F\0N\0a{sv}\0\0org.freedesktop.DBus.Tests.MyObject\0EmitFrobnicate\0S\0\0org.freedesktop.DBus.Tests.MyObject\0Terminate\0S\0\0org.freedesktop.DBus.Tests.FooObject\0GetValue\0S\0arg0\0O\0F\0N\0u\0\0org.freedesktop.DBus.Tests.FooObject\0EmitSignals\0S\0\0org.freedesktop.DBus.Tests.FooObject\0EmitSignal2\0S\0\0org.freedesktop.DBus.Tests.FooObject\0Terminate\0S\0\0\0",
-+"org.freedesktop.DBus.Tests.MyObject\0Frobnicate\0org.freedesktop.DBus.Tests.FooObject\0Sig0\0org.freedesktop.DBus.Tests.FooObject\0Sig1\0org.freedesktop.DBus.Tests.FooObject\0Sig2\0\0",
-+"\0"
-+};
-+
-+
-+/**
-+ * @ingroup DBusGLibInternals
-+ * Unit test for GLib GObject integration ("skeletons")
-+ * @returns #TRUE on success.
-+ */
-+gboolean
-+_dbus_gobject_test (const char *test_data_dir)
-+{
-+ int i;
-+ const char *arg;
-+ const char *arg_name;
-+ gboolean arg_in;
-+ gboolean constval;
-+ RetvalType retval;
-+ const char *arg_signature;
-+ const char *sigdata;
-+ const char *iface;
-+ const char *signame;
-+
-+ static struct { const char *wincaps; const char *uscore; } name_pairs[] = {
-+ { "SetFoo", "set_foo" },
-+ { "Foo", "foo" },
-+ { "GetFooBar", "get_foo_bar" },
-+ { "Hello", "hello" }
-+
-+ /* Impossible-to-handle cases */
-+ /* { "FrobateUIHandler", "frobate_ui_handler" } */
-+ };
-+
-+ /* Test lookup in our hardcoded object info; if these tests fail
-+ * then it likely means you changed the generated object info in an
-+ * incompatible way and broke the lookup functions. In that case
-+ * you need to bump the version and use a new structure instead. */
-+ /* DoNothing */
-+ arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info,
-+ &(dbus_glib_internal_test_methods[0]));
-+ g_assert (*arg == '\0');
-+
-+ /* Increment */
-+ arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info,
-+ &(dbus_glib_internal_test_methods[1]));
-+ g_assert (*arg != '\0');
-+ arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ g_assert (!strcmp (arg_name, "x"));
-+ g_assert (arg_in == TRUE);
-+ g_assert (!strcmp (arg_signature, "u"));
-+ g_assert (*arg != '\0');
-+ arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ g_assert (arg_in == FALSE);
-+ g_assert (retval == RETVAL_NONE);
-+ g_assert (!strcmp (arg_signature, "u"));
-+ g_assert (*arg == '\0');
-+
-+ /* IncrementRetval */
-+ arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info,
-+ &(dbus_glib_internal_test_methods[2]));
-+ g_assert (*arg != '\0');
-+ arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ g_assert (!strcmp (arg_name, "x"));
-+ g_assert (arg_in == TRUE);
-+ g_assert (!strcmp (arg_signature, "u"));
-+ g_assert (*arg != '\0');
-+ arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ g_assert (retval == RETVAL_NOERROR);
-+ g_assert (arg_in == FALSE);
-+ g_assert (!strcmp (arg_signature, "u"));
-+ g_assert (*arg == '\0');
-+
-+ /* IncrementRetvalError */
-+ arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info,
-+ &(dbus_glib_internal_test_methods[3]));
-+ g_assert (*arg != '\0');
-+ arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ g_assert (!strcmp (arg_name, "x"));
-+ g_assert (arg_in == TRUE);
-+ g_assert (!strcmp (arg_signature, "u"));
-+ g_assert (*arg != '\0');
-+ arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ g_assert (retval == RETVAL_ERROR);
-+ g_assert (arg_in == FALSE);
-+ g_assert (!strcmp (arg_signature, "u"));
-+ g_assert (*arg == '\0');
-+
-+ /* Stringify */
-+ arg = method_arg_info_from_object_info (&dbus_glib_internal_test_object_info,
-+ &(dbus_glib_internal_test_methods[8]));
-+ g_assert (*arg != '\0');
-+ arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ g_assert (!strcmp (arg_name, "val"));
-+ g_assert (arg_in == TRUE);
-+ g_assert (!strcmp (arg_signature, "v"));
-+ g_assert (*arg != '\0');
-+ arg = arg_iterate (arg, &arg_name, &arg_in, &constval, &retval, &arg_signature);
-+ g_assert (retval == RETVAL_NONE);
-+ g_assert (arg_in == FALSE);
-+ g_assert (!strcmp (arg_signature, "s"));
-+ g_assert (*arg == '\0');
-+
-+ sigdata = dbus_glib_internal_test_object_info.exported_signals;
-+ g_assert (*sigdata != '\0');
-+ sigdata = propsig_iterate (sigdata, &iface, &signame);
-+ g_assert (!strcmp (iface, "org.freedesktop.DBus.Tests.MyObject"));
-+ g_assert (!strcmp (signame, "Frobnicate"));
-+ g_assert (*sigdata != '\0');
-+ sigdata = propsig_iterate (sigdata, &iface, &signame);
-+ g_assert (!strcmp (iface, "org.freedesktop.DBus.Tests.FooObject"));
-+ g_assert (!strcmp (signame, "Sig0"));
-+ g_assert (*sigdata != '\0');
-+ sigdata = propsig_iterate (sigdata, &iface, &signame);
-+ g_assert (!strcmp (iface, "org.freedesktop.DBus.Tests.FooObject"));
-+ g_assert (!strcmp (signame, "Sig1"));
-+ g_assert (*sigdata != '\0');
-+ sigdata = propsig_iterate (sigdata, &iface, &signame);
-+ g_assert (!strcmp (iface, "org.freedesktop.DBus.Tests.FooObject"));
-+ g_assert (!strcmp (signame, "Sig2"));
-+ g_assert (*sigdata == '\0');
-+
-+
-+ i = 0;
-+ while (i < (int) G_N_ELEMENTS (name_pairs))
-+ {
-+ char *uscore;
-+ char *wincaps;
-+
-+ uscore = _dbus_gutils_wincaps_to_uscore (name_pairs[i].wincaps);
-+ wincaps = uscore_to_wincaps (name_pairs[i].uscore);
-+
-+ if (strcmp (uscore, name_pairs[i].uscore) != 0)
-+ {
-+ g_printerr ("\"%s\" should have been converted to \"%s\" not \"%s\"\n",
-+ name_pairs[i].wincaps, name_pairs[i].uscore,
-+ uscore);
-+ exit (1);
-+ }
-+
-+ if (strcmp (wincaps, name_pairs[i].wincaps) != 0)
-+ {
-+ g_printerr ("\"%s\" should have been converted to \"%s\" not \"%s\"\n",
-+ name_pairs[i].uscore, name_pairs[i].wincaps,
-+ wincaps);
-+ exit (1);
-+ }
-+
-+ g_free (uscore);
-+ g_free (wincaps);
-+
-+ ++i;
-+ }
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/glib/dbus-gobject.h dbus-0.61/glib/dbus-gobject.h
---- dbus-0.61.orig/glib/dbus-gobject.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gobject.h 2005-06-13 05:01:24.000000000 +0200
-@@ -0,0 +1,43 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gobject.h: common functions used to map between D-BUS and GObject
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_GLIB_OBJECT_H
-+#define DBUS_GLIB_OBJECT_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-signature.h>
-+#include <glib.h>
-+#include "dbus/dbus-glib.h"
-+
-+G_BEGIN_DECLS
-+
-+const char * _dbus_gobject_get_path (GObject *obj);
-+
-+GClosureMarshal _dbus_gobject_lookup_marshaller (GType rettype,
-+ guint n_params,
-+ const GType *param_types);
-+
-+
-+
-+G_END_DECLS
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/dbus-gparser.c dbus-0.61/glib/dbus-gparser.c
---- dbus-0.61.orig/glib/dbus-gparser.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gparser.c 2005-11-30 20:32:26.000000000 +0100
-@@ -0,0 +1,881 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gparser.c parse DBus description files
-+ *
-+ * Copyright (C) 2003, 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-gparser.h"
-+#include "dbus/dbus-glib-lowlevel.h"
-+#include "dbus-gidl.h"
-+#include "dbus-gobject.h"
-+#include "dbus/dbus-signature.h"
-+#include <string.h>
-+
-+#include <libintl.h>
-+#define _(x) gettext ((x))
-+#define N_(x) x
-+
-+#ifndef DOXYGEN_SHOULD_SKIP_THIS
-+
-+#define ELEMENT_IS(name) (strcmp (element_name, (name)) == 0)
-+
-+typedef struct
-+{
-+ const char *name;
-+ const char **retloc;
-+} LocateAttr;
-+
-+static gboolean
-+locate_attributes (const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error,
-+ const char *first_attribute_name,
-+ const char **first_attribute_retloc,
-+ ...)
-+{
-+ va_list args;
-+ const char *name;
-+ const char **retloc;
-+ int n_attrs;
-+#define MAX_ATTRS 24
-+ LocateAttr attrs[MAX_ATTRS];
-+ gboolean retval;
-+ int i;
-+
-+ g_return_val_if_fail (first_attribute_name != NULL, FALSE);
-+ g_return_val_if_fail (first_attribute_retloc != NULL, FALSE);
-+
-+ retval = TRUE;
-+
-+ n_attrs = 1;
-+ attrs[0].name = first_attribute_name;
-+ attrs[0].retloc = first_attribute_retloc;
-+ *first_attribute_retloc = NULL;
-+
-+ va_start (args, first_attribute_retloc);
-+
-+ name = va_arg (args, const char*);
-+ retloc = va_arg (args, const char**);
-+
-+ while (name != NULL)
-+ {
-+ g_return_val_if_fail (retloc != NULL, FALSE);
-+
-+ g_assert (n_attrs < MAX_ATTRS);
-+
-+ attrs[n_attrs].name = name;
-+ attrs[n_attrs].retloc = retloc;
-+ n_attrs += 1;
-+ *retloc = NULL;
-+
-+ name = va_arg (args, const char*);
-+ retloc = va_arg (args, const char**);
-+ }
-+
-+ va_end (args);
-+
-+ if (!retval)
-+ return retval;
-+
-+ i = 0;
-+ while (attribute_names[i])
-+ {
-+ int j;
-+ gboolean found;
-+
-+ found = FALSE;
-+ j = 0;
-+ while (j < n_attrs)
-+ {
-+ if (strcmp (attrs[j].name, attribute_names[i]) == 0)
-+ {
-+ retloc = attrs[j].retloc;
-+
-+ if (*retloc != NULL)
-+ {
-+ g_set_error (error,
-+ G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Attribute \"%s\" repeated twice on the same <%s> element"),
-+ attrs[j].name, element_name);
-+ retval = FALSE;
-+ goto out;
-+ }
-+
-+ *retloc = attribute_values[i];
-+ found = TRUE;
-+ }
-+
-+ ++j;
-+ }
-+
-+ if (!found)
-+ {
-+ g_set_error (error,
-+ G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Attribute \"%s\" is invalid on <%s> element in this context"),
-+ attribute_names[i], element_name);
-+ retval = FALSE;
-+ goto out;
-+ }
-+
-+ ++i;
-+ }
-+
-+ out:
-+ return retval;
-+}
-+
-+#if 0
-+static gboolean
-+check_no_attributes (const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ if (attribute_names[0] != NULL)
-+ {
-+ g_set_error (error,
-+ G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Attribute \"%s\" is invalid on <%s> element in this context"),
-+ attribute_names[0], element_name);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+#endif
-+
-+struct Parser
-+{
-+ int refcount;
-+
-+ NodeInfo *result; /* Filled in when we pop the last node */
-+ GSList *node_stack;
-+ InterfaceInfo *interface;
-+ MethodInfo *method;
-+ SignalInfo *signal;
-+ PropertyInfo *property;
-+ ArgInfo *arg;
-+ gboolean in_annotation;
-+};
-+
-+Parser*
-+parser_new (void)
-+{
-+ Parser *parser;
-+
-+ parser = g_new0 (Parser, 1);
-+
-+ parser->refcount = 1;
-+
-+ return parser;
-+}
-+
-+Parser *
-+parser_ref (Parser *parser)
-+{
-+ parser->refcount += 1;
-+
-+ return parser;
-+}
-+
-+void
-+parser_unref (Parser *parser)
-+{
-+ parser->refcount -= 1;
-+ if (parser->refcount == 0)
-+ {
-+ if (parser->result)
-+ node_info_unref (parser->result);
-+
-+ g_free (parser);
-+ }
-+}
-+
-+gboolean
-+parser_check_doctype (Parser *parser,
-+ const char *doctype,
-+ GError **error)
-+{
-+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-+
-+ if (strcmp (doctype, "node") != 0)
-+ {
-+ g_set_error (error,
-+ G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ "D-BUS description file has the wrong document type %s, use node or interface",
-+ doctype);
-+ return FALSE;
-+ }
-+ else
-+ return TRUE;
-+}
-+
-+static gboolean
-+parse_node (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ const char *name;
-+ NodeInfo *node;
-+
-+ if (parser->interface ||
-+ parser->method ||
-+ parser->signal ||
-+ parser->property ||
-+ parser->arg ||
-+ parser->in_annotation)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Can't put <%s> element here"),
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ name = NULL;
-+ if (!locate_attributes (element_name, attribute_names,
-+ attribute_values, error,
-+ "name", &name,
-+ NULL))
-+ return FALSE;
-+
-+ /* Only the root node can have no name */
-+ if (parser->node_stack != NULL && name == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "name", element_name);
-+ return FALSE;
-+ }
-+
-+ /* Root element name must be absolute */
-+ if (parser->node_stack == NULL && name && *name != '/')
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute on <%s> element must be an absolute object path, \"%s\" not OK"),
-+ "name", element_name, name);
-+ return FALSE;
-+ }
-+
-+ /* Other element names must not be absolute */
-+ if (parser->node_stack != NULL && name && *name == '/')
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute on <%s> element must not be an absolute object path, \"%s\" starts with /"),
-+ "name", element_name, name);
-+ return FALSE;
-+ }
-+
-+ node = node_info_new (name);
-+
-+ if (parser->node_stack != NULL)
-+ {
-+ node_info_add_node (parser->node_stack->data,
-+ node);
-+ }
-+
-+ parser->node_stack = g_slist_prepend (parser->node_stack,
-+ node);
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+parse_interface (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ const char *name;
-+ InterfaceInfo *iface;
-+ NodeInfo *top;
-+
-+ if (parser->interface ||
-+ parser->method ||
-+ parser->signal ||
-+ parser->property ||
-+ parser->arg ||
-+ parser->in_annotation ||
-+ (parser->node_stack == NULL))
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Can't put <%s> element here"),
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ name = NULL;
-+ if (!locate_attributes (element_name, attribute_names,
-+ attribute_values, error,
-+ "name", &name,
-+ NULL))
-+ return FALSE;
-+
-+ if (name == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "name", element_name);
-+ return FALSE;
-+ }
-+
-+ top = parser->node_stack->data;
-+
-+ iface = interface_info_new (name);
-+ node_info_add_interface (top, iface);
-+ interface_info_unref (iface);
-+
-+ parser->interface = iface;
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+parse_method (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ const char *name;
-+ MethodInfo *method;
-+
-+ if (parser->interface == NULL ||
-+ parser->node_stack == NULL ||
-+ parser->method ||
-+ parser->signal ||
-+ parser->property ||
-+ parser->in_annotation ||
-+ parser->arg)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Can't put <%s> element here"),
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ name = NULL;
-+ if (!locate_attributes (element_name, attribute_names,
-+ attribute_values, error,
-+ "name", &name,
-+ NULL))
-+ return FALSE;
-+
-+ if (name == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "name", element_name);
-+ return FALSE;
-+ }
-+
-+ method = method_info_new (name);
-+ interface_info_add_method (parser->interface, method);
-+ method_info_unref (method);
-+
-+ parser->method = method;
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+parse_signal (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ const char *name;
-+ SignalInfo *signal;
-+
-+ if (parser->interface == NULL ||
-+ parser->node_stack == NULL ||
-+ parser->signal ||
-+ parser->method ||
-+ parser->property ||
-+ parser->in_annotation ||
-+ parser->arg)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Can't put <%s> element here"),
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ name = NULL;
-+ if (!locate_attributes (element_name, attribute_names,
-+ attribute_values, error,
-+ "name", &name,
-+ NULL))
-+ return FALSE;
-+
-+ if (name == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "name", element_name);
-+ return FALSE;
-+ }
-+
-+ signal = signal_info_new (name);
-+ interface_info_add_signal (parser->interface, signal);
-+ signal_info_unref (signal);
-+
-+ parser->signal = signal;
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+validate_signature (const char *str,
-+ const char *element_name,
-+ GError **error)
-+{
-+ DBusError derror;
-+
-+ dbus_error_init (&derror);
-+
-+ if (!dbus_signature_validate (str, &derror))
-+ {
-+ dbus_set_g_error (error, &derror);
-+ return FALSE;
-+ }
-+ return TRUE;
-+}
-+
-+static gboolean
-+parse_property (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ const char *name;
-+ const char *access;
-+ const char *type;
-+ PropertyInfo *property;
-+ PropertyAccessFlags access_flags;
-+
-+ if (parser->interface == NULL ||
-+ parser->node_stack == NULL ||
-+ parser->signal ||
-+ parser->method ||
-+ parser->property ||
-+ parser->in_annotation ||
-+ parser->arg)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Can't put <%s> element here"),
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ name = NULL;
-+ if (!locate_attributes (element_name, attribute_names,
-+ attribute_values, error,
-+ "name", &name,
-+ "access", &access,
-+ "type", &type,
-+ NULL))
-+ return FALSE;
-+
-+ if (name == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "name", element_name);
-+ return FALSE;
-+ }
-+
-+ if (access == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "access", element_name);
-+ return FALSE;
-+ }
-+
-+ if (type == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "type", element_name);
-+ return FALSE;
-+ }
-+
-+ if (!validate_signature (type, element_name, error))
-+ return FALSE;
-+
-+ access_flags = 0;
-+ if (strcmp (access, "readwrite") == 0)
-+ access_flags = PROPERTY_READ | PROPERTY_WRITE;
-+ else if (strcmp (access, "read") == 0)
-+ access_flags = PROPERTY_READ;
-+ else if (strcmp (access, "write") == 0)
-+ access_flags = PROPERTY_WRITE;
-+ else
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("access=\"%s\" must have value readwrite, read, or write on %s\n"),
-+ access, element_name);
-+ return FALSE;
-+ }
-+
-+ property = property_info_new (name, type, access_flags);
-+ interface_info_add_property (parser->interface, property);
-+ property_info_unref (property);
-+
-+ parser->property = property;
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+parse_arg (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ const char *name;
-+ const char *type;
-+ const char *direction;
-+ ArgDirection dir;
-+ ArgInfo *arg;
-+ char *generated_name;
-+
-+ if (!(parser->method || parser->signal) ||
-+ parser->node_stack == NULL ||
-+ parser->property ||
-+ parser->in_annotation ||
-+ parser->arg)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Can't put <%s> element here"),
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ name = NULL;
-+ if (!locate_attributes (element_name, attribute_names,
-+ attribute_values, error,
-+ "name", &name,
-+ "type", &type,
-+ "direction", &direction,
-+ NULL))
-+ return FALSE;
-+
-+ /* name can be null for args */
-+
-+ if (type == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "type", element_name);
-+ return FALSE;
-+ }
-+
-+ if (direction == NULL)
-+ {
-+ /* methods default to in, signal to out */
-+ if (parser->method)
-+ direction = "in";
-+ else if (parser->signal)
-+ direction = "out";
-+ else
-+ g_assert_not_reached ();
-+ }
-+
-+ dir = ARG_INVALID;
-+
-+ if (strcmp (direction, "in") == 0)
-+ dir = ARG_IN;
-+ else if (strcmp (direction, "out") == 0)
-+ dir = ARG_OUT;
-+
-+ if (dir == ARG_INVALID ||
-+ (parser->signal && dir == ARG_IN))
-+ {
-+ if (parser->signal)
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Signals must have direction=\"out\" (just omit the direction attribute)"));
-+ else
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute on <%s> has value \"in\" or \"out\""),
-+ "direction", element_name);
-+ return FALSE;
-+ }
-+
-+ if (!validate_signature (type, element_name, error))
-+ return FALSE;
-+
-+ generated_name = NULL;
-+ if (name == NULL)
-+ generated_name = g_strdup_printf ("arg%d",
-+ parser->method ?
-+ method_info_get_n_args (parser->method) :
-+ signal_info_get_n_args (parser->signal));
-+
-+ arg = arg_info_new (name ? name : generated_name, dir, type);
-+ if (parser->method)
-+ method_info_add_arg (parser->method, arg);
-+ else if (parser->signal)
-+ signal_info_add_arg (parser->signal, arg);
-+ else
-+ g_assert_not_reached ();
-+
-+ g_free (generated_name);
-+
-+ arg_info_unref (arg);
-+
-+ parser->arg = arg;
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+parse_annotation (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ const char *name;
-+ const char *value;
-+
-+ if (!(parser->method || parser->interface || parser->arg) ||
-+ parser->node_stack == NULL ||
-+ parser->signal ||
-+ parser->property ||
-+ parser->in_annotation)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Can't put <%s> element here"),
-+ element_name);
-+ return FALSE;
-+ }
-+
-+ name = NULL;
-+ if (!locate_attributes (element_name, attribute_names,
-+ attribute_values, error,
-+ "name", &name,
-+ "value", &value,
-+ NULL))
-+ return FALSE;
-+
-+ if (name == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "name", element_name);
-+ return FALSE;
-+ }
-+ if (value == NULL)
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("\"%s\" attribute required on <%s> element "),
-+ "value", element_name);
-+ return FALSE;
-+ }
-+
-+ if (parser->arg)
-+ arg_info_add_annotation (parser->arg, name, value);
-+ else if (parser->method)
-+ method_info_add_annotation (parser->method, name, value);
-+ else if (parser->interface)
-+ interface_info_add_annotation (parser->interface, name, value);
-+ else
-+ g_assert_not_reached ();
-+
-+ parser->in_annotation = TRUE;
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+parser_start_element (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error)
-+{
-+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-+
-+ if (ELEMENT_IS ("node"))
-+ {
-+ if (!parse_node (parser, element_name, attribute_names,
-+ attribute_values, error))
-+ return FALSE;
-+ }
-+ else if (ELEMENT_IS ("interface"))
-+ {
-+ if (!parse_interface (parser, element_name, attribute_names,
-+ attribute_values, error))
-+ return FALSE;
-+ }
-+ else if (ELEMENT_IS ("method"))
-+ {
-+ if (!parse_method (parser, element_name, attribute_names,
-+ attribute_values, error))
-+ return FALSE;
-+ }
-+ else if (ELEMENT_IS ("signal"))
-+ {
-+ if (!parse_signal (parser, element_name, attribute_names,
-+ attribute_values, error))
-+ return FALSE;
-+ }
-+ else if (ELEMENT_IS ("property"))
-+ {
-+ if (!parse_property (parser, element_name, attribute_names,
-+ attribute_values, error))
-+ return FALSE;
-+ }
-+ else if (ELEMENT_IS ("arg"))
-+ {
-+ if (!parse_arg (parser, element_name, attribute_names,
-+ attribute_values, error))
-+ return FALSE;
-+ }
-+ else if (ELEMENT_IS ("annotation"))
-+ {
-+ if (!parse_annotation (parser, element_name, attribute_names,
-+ attribute_values, error))
-+ return FALSE;
-+ }
-+ else
-+ {
-+ g_set_error (error, G_MARKUP_ERROR,
-+ G_MARKUP_ERROR_PARSE,
-+ _("Element <%s> not recognized"),
-+ element_name);
-+ }
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+parser_end_element (Parser *parser,
-+ const char *element_name,
-+ GError **error)
-+{
-+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-+
-+ if (ELEMENT_IS ("interface"))
-+ {
-+ parser->interface = NULL;
-+ }
-+ else if (ELEMENT_IS ("method"))
-+ {
-+ parser->method = NULL;
-+ }
-+ else if (ELEMENT_IS ("signal"))
-+ {
-+ parser->signal = NULL;
-+ }
-+ else if (ELEMENT_IS ("property"))
-+ {
-+ parser->property = NULL;
-+ }
-+ else if (ELEMENT_IS ("arg"))
-+ {
-+ parser->arg = NULL;
-+ }
-+ else if (ELEMENT_IS ("annotation"))
-+ {
-+ parser->in_annotation = FALSE;
-+ }
-+ else if (ELEMENT_IS ("node"))
-+ {
-+ NodeInfo *top;
-+
-+ g_assert (parser->node_stack != NULL);
-+ top = parser->node_stack->data;
-+
-+ parser->node_stack = g_slist_remove (parser->node_stack,
-+ top);
-+
-+ if (parser->node_stack == NULL)
-+ parser->result = top; /* We are done, store the result */
-+ }
-+ else
-+ g_assert_not_reached (); /* should have had an error on start_element */
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+parser_content (Parser *parser,
-+ const char *content,
-+ int len,
-+ GError **error)
-+{
-+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-+
-+ /* FIXME check that it's all whitespace */
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+parser_finished (Parser *parser,
-+ GError **error)
-+{
-+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-+
-+ return TRUE;
-+}
-+
-+NodeInfo*
-+parser_get_nodes (Parser *parser)
-+{
-+ return parser->result;
-+}
-+
-+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-diff -Naur dbus-0.61.orig/glib/dbus-gparser.h dbus-0.61/glib/dbus-gparser.h
---- dbus-0.61.orig/glib/dbus-gparser.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gparser.h 2004-08-10 05:07:01.000000000 +0200
-@@ -0,0 +1,65 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gparser.h parse DBus description files
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_GLIB_PARSER_H
-+#define DBUS_GLIB_PARSER_H
-+
-+#include <dbus/dbus.h>
-+#include <glib.h>
-+#include "dbus-gidl.h"
-+
-+G_BEGIN_DECLS
-+
-+typedef struct Parser Parser;
-+
-+Parser* parser_new (void);
-+Parser* parser_ref (Parser *parser);
-+void parser_unref (Parser *parser);
-+gboolean parser_check_doctype (Parser *parser,
-+ const char *doctype,
-+ GError **error);
-+gboolean parser_start_element (Parser *parser,
-+ const char *element_name,
-+ const char **attribute_names,
-+ const char **attribute_values,
-+ GError **error);
-+gboolean parser_end_element (Parser *parser,
-+ const char *element_name,
-+ GError **error);
-+gboolean parser_content (Parser *parser,
-+ const char *content,
-+ int len,
-+ GError **error);
-+gboolean parser_finished (Parser *parser,
-+ GError **error);
-+
-+NodeInfo* description_load_from_file (const char *filename,
-+ GError **error);
-+NodeInfo* description_load_from_string (const char *str,
-+ int len,
-+ GError **error);
-+
-+NodeInfo* parser_get_nodes (Parser *parser);
-+
-+G_END_DECLS
-+
-+#endif /* DBUS_GLIB_GPARSER_H */
-diff -Naur dbus-0.61.orig/glib/dbus-gproxy.c dbus-0.61/glib/dbus-gproxy.c
---- dbus-0.61.orig/glib/dbus-gproxy.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gproxy.c 2006-01-27 16:06:55.000000000 +0100
-@@ -0,0 +1,2731 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gproxy.c Proxy for remote objects
-+ *
-+ * Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
-+ * Copyright (C) 2005 Nokia
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <dbus/dbus-glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include <dbus/dbus-signature.h>
-+#include "dbus-gutils.h"
-+#include "dbus-gsignature.h"
-+#include "dbus-gvalue.h"
-+#include "dbus-gvalue-utils.h"
-+#include "dbus-gobject.h"
-+#include <string.h>
-+#include <glib/gi18n.h>
-+#include <gobject/gvaluecollector.h>
-+
-+#define DBUS_G_PROXY_CALL_TO_ID(x) (GPOINTER_TO_UINT(x))
-+#define DBUS_G_PROXY_ID_TO_CALL(x) (GUINT_TO_POINTER(x))
-+#define DBUS_G_PROXY_GET_PRIVATE(o) \
-+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUS_TYPE_G_PROXY, DBusGProxyPrivate))
-+
-+
-+/**
-+ * @addtogroup DBusGLibInternals
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * DBusGProxyManager typedef
-+ */
-+
-+typedef struct _DBusGProxyManager DBusGProxyManager;
-+
-+typedef struct _DBusGProxyPrivate DBusGProxyPrivate;
-+
-+/**
-+ * Internals of DBusGProxy
-+ */
-+struct _DBusGProxyPrivate
-+{
-+ DBusGProxyManager *manager; /**< Proxy manager */
-+ char *name; /**< Name messages go to or NULL */
-+ char *path; /**< Path messages go to or NULL */
-+ char *interface; /**< Interface messages go to or NULL */
-+
-+ DBusGProxyCall *name_call; /**< Pending call id to retrieve name owner */
-+ guint for_owner : 1; /**< Whether or not this proxy is for a name owner */
-+ guint associated : 1; /**< Whether or not this proxy is associated (for name proxies) */
-+
-+ /* FIXME: make threadsafe? */
-+ guint call_id_counter; /**< Integer counter for pending calls */
-+
-+ GData *signal_signatures; /**< D-BUS signatures for each signal */
-+
-+ GHashTable *pending_calls; /**< Calls made on this proxy which have not yet returned */
-+};
-+
-+static void dbus_g_proxy_init (DBusGProxy *proxy);
-+static void dbus_g_proxy_class_init (DBusGProxyClass *klass);
-+static GObject *dbus_g_proxy_constructor (GType type,
-+ guint n_construct_properties,
-+ GObjectConstructParam *construct_properties);
-+static void dbus_g_proxy_set_property (GObject *object,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *pspec);
-+static void dbus_g_proxy_get_property (GObject *object,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *pspec);
-+
-+static void dbus_g_proxy_finalize (GObject *object);
-+static void dbus_g_proxy_dispose (GObject *object);
-+static void dbus_g_proxy_destroy (DBusGProxy *proxy);
-+static void dbus_g_proxy_emit_remote_signal (DBusGProxy *proxy,
-+ DBusMessage *message);
-+
-+static DBusGProxyCall *manager_begin_bus_call (DBusGProxyManager *manager,
-+ const char *method,
-+ DBusGProxyCallNotify notify,
-+ gpointer data,
-+ GDestroyNotify destroy,
-+ GType first_arg_type,
-+ ...);
-+static guint dbus_g_proxy_begin_call_internal (DBusGProxy *proxy,
-+ const char *method,
-+ DBusGProxyCallNotify notify,
-+ gpointer data,
-+ GDestroyNotify destroy,
-+ GValueArray *args);
-+static gboolean dbus_g_proxy_end_call_internal (DBusGProxy *proxy,
-+ guint call_id,
-+ GError **error,
-+ GType first_arg_type,
-+ va_list args);
-+
-+/**
-+ * A list of proxies with a given name+path+interface, used to
-+ * route incoming signals.
-+ */
-+typedef struct
-+{
-+ GSList *proxies; /**< The list of proxies */
-+
-+ char name[4]; /**< name (empty string for none), nul byte,
-+ * path, nul byte,
-+ * interface, nul byte
-+ */
-+
-+} DBusGProxyList;
-+
-+/**
-+ * DBusGProxyManager's primary task is to route signals to the proxies
-+ * those signals are emitted on. In order to do this it also has to
-+ * track the owners of the names proxies are bound to.
-+ */
-+struct _DBusGProxyManager
-+{
-+ GStaticMutex lock; /**< Thread lock */
-+ int refcount; /**< Reference count */
-+ DBusConnection *connection; /**< Connection we're associated with. */
-+
-+ DBusGProxy *bus_proxy; /**< Special internal proxy used to talk to the bus */
-+
-+ GHashTable *proxy_lists; /**< Hash used to route incoming signals
-+ * and iterate over proxies
-+ */
-+ GHashTable *owner_names; /**< Hash to keep track of mapping from
-+ * base name -> [name,name,...] for proxies which
-+ * are for names.
-+ */
-+ GSList *unassociated_proxies; /**< List of name proxies for which
-+ * there was no result for
-+ * GetNameOwner
-+ */
-+};
-+
-+static DBusGProxyManager *dbus_g_proxy_manager_ref (DBusGProxyManager *manager);
-+static DBusHandlerResult dbus_g_proxy_manager_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data);
-+
-+
-+/** Lock the DBusGProxyManager */
-+#define LOCK_MANAGER(mgr) (g_static_mutex_lock (&(mgr)->lock))
-+/** Unlock the DBusGProxyManager */
-+#define UNLOCK_MANAGER(mgr) (g_static_mutex_unlock (&(mgr)->lock))
-+
-+static int g_proxy_manager_slot = -1;
-+
-+/* Lock controlling get/set manager as data on each connection */
-+static GStaticMutex connection_g_proxy_lock = G_STATIC_MUTEX_INIT;
-+
-+static DBusGProxyManager*
-+dbus_g_proxy_manager_get (DBusConnection *connection)
-+{
-+ DBusGProxyManager *manager;
-+
-+ dbus_connection_allocate_data_slot (&g_proxy_manager_slot);
-+ if (g_proxy_manager_slot < 0)
-+ g_error ("out of memory");
-+
-+ g_static_mutex_lock (&connection_g_proxy_lock);
-+
-+ manager = dbus_connection_get_data (connection, g_proxy_manager_slot);
-+ if (manager != NULL)
-+ {
-+ dbus_connection_free_data_slot (&g_proxy_manager_slot);
-+ dbus_g_proxy_manager_ref (manager);
-+ g_static_mutex_unlock (&connection_g_proxy_lock);
-+ return manager;
-+ }
-+
-+ manager = g_new0 (DBusGProxyManager, 1);
-+
-+ manager->refcount = 1;
-+ manager->connection = connection;
-+
-+ g_static_mutex_init (&manager->lock);
-+
-+ /* Proxy managers keep the connection alive, which means that
-+ * DBusGProxy indirectly does. To free a connection you have to free
-+ * all the proxies referring to it.
-+ */
-+ dbus_connection_ref (manager->connection);
-+
-+ dbus_connection_set_data (connection, g_proxy_manager_slot,
-+ manager, NULL);
-+
-+ dbus_connection_add_filter (connection, dbus_g_proxy_manager_filter,
-+ manager, NULL);
-+
-+ g_static_mutex_unlock (&connection_g_proxy_lock);
-+
-+ return manager;
-+}
-+
-+static DBusGProxyManager *
-+dbus_g_proxy_manager_ref (DBusGProxyManager *manager)
-+{
-+ g_assert (manager != NULL);
-+ g_assert (manager->refcount > 0);
-+
-+ LOCK_MANAGER (manager);
-+
-+ manager->refcount += 1;
-+
-+ UNLOCK_MANAGER (manager);
-+
-+ return manager;
-+}
-+
-+static void
-+dbus_g_proxy_manager_unref (DBusGProxyManager *manager)
-+{
-+ g_assert (manager != NULL);
-+ g_assert (manager->refcount > 0);
-+
-+ LOCK_MANAGER (manager);
-+ manager->refcount -= 1;
-+ if (manager->refcount == 0)
-+ {
-+ UNLOCK_MANAGER (manager);
-+
-+ if (manager->bus_proxy)
-+ g_object_unref (manager->bus_proxy);
-+
-+ if (manager->proxy_lists)
-+ {
-+ /* can't have any proxies left since they hold
-+ * a reference to the proxy manager.
-+ */
-+ g_assert (g_hash_table_size (manager->proxy_lists) == 0);
-+
-+ g_hash_table_destroy (manager->proxy_lists);
-+ manager->proxy_lists = NULL;
-+
-+ }
-+
-+ if (manager->owner_names)
-+ {
-+ /* Since we destroyed all proxies, none can be tracking
-+ * name owners
-+ */
-+ g_assert (g_hash_table_size (manager->owner_names) == 0);
-+
-+ g_hash_table_destroy (manager->owner_names);
-+ manager->owner_names = NULL;
-+ }
-+
-+ g_assert (manager->unassociated_proxies == NULL);
-+
-+ g_static_mutex_free (&manager->lock);
-+
-+ g_static_mutex_lock (&connection_g_proxy_lock);
-+
-+ dbus_connection_remove_filter (manager->connection, dbus_g_proxy_manager_filter,
-+ manager);
-+
-+ dbus_connection_set_data (manager->connection,
-+ g_proxy_manager_slot,
-+ NULL, NULL);
-+
-+ g_static_mutex_unlock (&connection_g_proxy_lock);
-+
-+ dbus_connection_unref (manager->connection);
-+ g_free (manager);
-+
-+ dbus_connection_free_data_slot (&g_proxy_manager_slot);
-+ }
-+ else
-+ {
-+ UNLOCK_MANAGER (manager);
-+ }
-+}
-+
-+static guint
-+tristring_hash (gconstpointer key)
-+{
-+ const char *p = key;
-+ guint h = *p;
-+
-+ if (h)
-+ {
-+ for (p += 1; *p != '\0'; p++)
-+ h = (h << 5) - h + *p;
-+ }
-+
-+ /* skip nul and do the next substring */
-+ for (p += 1; *p != '\0'; p++)
-+ h = (h << 5) - h + *p;
-+
-+ /* skip nul again and another substring */
-+ for (p += 1; *p != '\0'; p++)
-+ h = (h << 5) - h + *p;
-+
-+ return h;
-+}
-+
-+static gboolean
-+strequal_len (const char *a,
-+ const char *b,
-+ size_t *lenp)
-+{
-+ size_t a_len;
-+ size_t b_len;
-+
-+ a_len = strlen (a);
-+ b_len = strlen (b);
-+
-+ if (a_len != b_len)
-+ return FALSE;
-+
-+ if (memcmp (a, b, a_len) != 0)
-+ return FALSE;
-+
-+ *lenp = a_len;
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+tristring_equal (gconstpointer a,
-+ gconstpointer b)
-+{
-+ const char *ap = a;
-+ const char *bp = b;
-+ size_t len;
-+
-+ if (!strequal_len (ap, bp, &len))
-+ return FALSE;
-+
-+ ap += len + 1;
-+ bp += len + 1;
-+
-+ if (!strequal_len (ap, bp, &len))
-+ return FALSE;
-+
-+ ap += len + 1;
-+ bp += len + 1;
-+
-+ if (strcmp (ap, bp) != 0)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+static char*
-+tristring_alloc_from_strings (size_t padding_before,
-+ const char *name,
-+ const char *path,
-+ const char *interface)
-+{
-+ size_t name_len, iface_len, path_len, len;
-+ char *tri;
-+
-+ if (name)
-+ name_len = strlen (name);
-+ else
-+ name_len = 0;
-+
-+ path_len = strlen (path);
-+
-+ iface_len = strlen (interface);
-+
-+ tri = g_malloc (padding_before + name_len + path_len + iface_len + 3);
-+
-+ len = padding_before;
-+
-+ if (name)
-+ memcpy (&tri[len], name, name_len);
-+
-+ len += name_len;
-+ tri[len] = '\0';
-+ len += 1;
-+
-+ g_assert (len == (padding_before + name_len + 1));
-+
-+ memcpy (&tri[len], path, path_len);
-+ len += path_len;
-+ tri[len] = '\0';
-+ len += 1;
-+
-+ g_assert (len == (padding_before + name_len + path_len + 2));
-+
-+ memcpy (&tri[len], interface, iface_len);
-+ len += iface_len;
-+ tri[len] = '\0';
-+ len += 1;
-+
-+ g_assert (len == (padding_before + name_len + path_len + iface_len + 3));
-+
-+ return tri;
-+}
-+
-+static char*
-+tristring_from_proxy (DBusGProxy *proxy)
-+{
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ return tristring_alloc_from_strings (0,
-+ priv->name,
-+ priv->path,
-+ priv->interface);
-+}
-+
-+static char*
-+tristring_from_message (DBusMessage *message)
-+{
-+ const char *path;
-+ const char *interface;
-+
-+ path = dbus_message_get_path (message);
-+ interface = dbus_message_get_interface (message);
-+
-+ g_assert (path);
-+ g_assert (interface);
-+
-+ return tristring_alloc_from_strings (0,
-+ dbus_message_get_sender (message),
-+ path, interface);
-+}
-+
-+static DBusGProxyList*
-+g_proxy_list_new (DBusGProxy *first_proxy)
-+{
-+ DBusGProxyList *list;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(first_proxy);
-+
-+ list = (void*) tristring_alloc_from_strings (G_STRUCT_OFFSET (DBusGProxyList, name),
-+ priv->name,
-+ priv->path,
-+ priv->interface);
-+ list->proxies = NULL;
-+
-+ return list;
-+}
-+
-+static void
-+g_proxy_list_free (DBusGProxyList *list)
-+{
-+ /* we don't hold a reference to the proxies in the list,
-+ * as they ref the GProxyManager
-+ */
-+ g_slist_free (list->proxies);
-+
-+ g_free (list);
-+}
-+
-+static char*
-+g_proxy_get_match_rule (DBusGProxy *proxy)
-+{
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+ /* FIXME Escaping is required here */
-+
-+ if (priv->name)
-+ return g_strdup_printf ("type='signal',sender='%s',path='%s',interface='%s'",
-+ priv->name, priv->path, priv->interface);
-+ else
-+ return g_strdup_printf ("type='signal',path='%s',interface='%s'",
-+ priv->path, priv->interface);
-+}
-+
-+typedef struct
-+{
-+ char *name;
-+ guint refcount;
-+} DBusGProxyNameOwnerInfo;
-+
-+static gint
-+find_name_in_info (gconstpointer a, gconstpointer b)
-+{
-+ const DBusGProxyNameOwnerInfo *info = a;
-+ const char *name = b;
-+
-+ return strcmp (info->name, name);
-+}
-+
-+typedef struct
-+{
-+ const char *name;
-+ const char *owner;
-+ DBusGProxyNameOwnerInfo *info;
-+} DBusGProxyNameOwnerForeachData;
-+
-+static void
-+name_owner_foreach (gpointer key, gpointer val, gpointer data)
-+{
-+ const char *owner;
-+ DBusGProxyNameOwnerForeachData *foreach_data;
-+ GSList *names;
-+ GSList *link;
-+
-+ owner = key;
-+ names = val;
-+ foreach_data = data;
-+
-+ if (foreach_data->owner != NULL)
-+ return;
-+
-+ g_assert (foreach_data->info == NULL);
-+
-+ link = g_slist_find_custom (names, foreach_data->name, find_name_in_info);
-+ if (link)
-+ {
-+ foreach_data->owner = owner;
-+ foreach_data->info = link->data;
-+ }
-+}
-+
-+static gboolean
-+dbus_g_proxy_manager_lookup_name_owner (DBusGProxyManager *manager,
-+ const char *name,
-+ DBusGProxyNameOwnerInfo **info,
-+ const char **owner)
-+{
-+ DBusGProxyNameOwnerForeachData foreach_data;
-+
-+ foreach_data.name = name;
-+ foreach_data.owner = NULL;
-+ foreach_data.info = NULL;
-+
-+ g_hash_table_foreach (manager->owner_names, name_owner_foreach, &foreach_data);
-+
-+ *info = foreach_data.info;
-+ *owner = foreach_data.owner;
-+ return *info != NULL;
-+}
-+
-+static void
-+insert_nameinfo (DBusGProxyManager *manager,
-+ const char *owner,
-+ DBusGProxyNameOwnerInfo *info)
-+{
-+ GSList *names;
-+ gboolean insert;
-+
-+ names = g_hash_table_lookup (manager->owner_names, owner);
-+
-+ /* Only need to g_hash_table_insert the first time */
-+ insert = (names == NULL);
-+
-+ names = g_slist_append (names, info);
-+
-+ if (insert)
-+ g_hash_table_insert (manager->owner_names, g_strdup (owner), names);
-+}
-+
-+static void
-+dbus_g_proxy_manager_monitor_name_owner (DBusGProxyManager *manager,
-+ const char *owner,
-+ const char *name)
-+{
-+ GSList *names;
-+ GSList *link;
-+ DBusGProxyNameOwnerInfo *nameinfo;
-+
-+ names = g_hash_table_lookup (manager->owner_names, owner);
-+ link = g_slist_find_custom (names, name, find_name_in_info);
-+
-+ if (!link)
-+ {
-+ nameinfo = g_new0 (DBusGProxyNameOwnerInfo, 1);
-+ nameinfo->name = g_strdup (name);
-+ nameinfo->refcount = 1;
-+
-+ insert_nameinfo (manager, owner, nameinfo);
-+ }
-+ else
-+ {
-+ nameinfo = link->data;
-+ nameinfo->refcount++;
-+ }
-+}
-+
-+static void
-+dbus_g_proxy_manager_unmonitor_name_owner (DBusGProxyManager *manager,
-+ const char *name)
-+{
-+ DBusGProxyNameOwnerInfo *info;
-+ const char *owner;
-+ gboolean ret;
-+
-+ ret = dbus_g_proxy_manager_lookup_name_owner (manager, name, &info, &owner);
-+ g_assert (ret);
-+ g_assert (info != NULL);
-+ g_assert (owner != NULL);
-+
-+ info->refcount--;
-+ if (info->refcount == 0)
-+ {
-+ GSList *names;
-+ GSList *link;
-+
-+ names = g_hash_table_lookup (manager->owner_names, owner);
-+ link = g_slist_find_custom (names, name, find_name_in_info);
-+ names = g_slist_delete_link (names, link);
-+ if (names != NULL)
-+ g_hash_table_insert (manager->owner_names, g_strdup (owner), names);
-+ else
-+ g_hash_table_remove (manager->owner_names, owner);
-+
-+ g_free (info->name);
-+ g_free (info);
-+ }
-+}
-+
-+typedef struct
-+{
-+ const char *name;
-+ GSList *destroyed;
-+} DBusGProxyUnassociateData;
-+
-+static void
-+unassociate_proxies (gpointer key, gpointer val, gpointer user_data)
-+{
-+ DBusGProxyList *list;
-+ const char *name;
-+ GSList *tmp;
-+ DBusGProxyUnassociateData *data;
-+
-+ list = val;
-+ data = user_data;
-+ name = data->name;
-+
-+ for (tmp = list->proxies; tmp; tmp = tmp->next)
-+ {
-+ DBusGProxy *proxy = DBUS_G_PROXY (tmp->data);
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+ DBusGProxyManager *manager;
-+
-+ manager = priv->manager;
-+
-+ if (!strcmp (priv->name, name))
-+ {
-+ if (!priv->for_owner)
-+ {
-+ g_assert (priv->associated);
-+ g_assert (priv->name_call == NULL);
-+
-+ priv->associated = FALSE;
-+ manager->unassociated_proxies = g_slist_prepend (manager->unassociated_proxies, proxy);
-+ }
-+ else
-+ {
-+ data->destroyed = g_slist_prepend (data->destroyed, proxy);
-+ }
-+ }
-+ }
-+}
-+
-+static void
-+dbus_g_proxy_manager_replace_name_owner (DBusGProxyManager *manager,
-+ const char *name,
-+ const char *prev_owner,
-+ const char *new_owner)
-+{
-+ GSList *names;
-+
-+ if (prev_owner[0] == '\0')
-+ {
-+ GSList *tmp;
-+ GSList *removed;
-+
-+ /* We have a new service, look at unassociated proxies */
-+
-+ removed = NULL;
-+
-+ for (tmp = manager->unassociated_proxies; tmp ; tmp = tmp->next)
-+ {
-+ DBusGProxy *proxy = tmp->data;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ if (!strcmp (priv->name, name))
-+ {
-+ removed = g_slist_prepend (removed, tmp);
-+
-+ dbus_g_proxy_manager_monitor_name_owner (manager, new_owner, name);
-+ priv->associated = TRUE;
-+ }
-+ }
-+
-+ for (tmp = removed; tmp; tmp = tmp->next)
-+ manager->unassociated_proxies = g_slist_delete_link (manager->unassociated_proxies, tmp->data);
-+ g_slist_free (removed);
-+ }
-+ else
-+ {
-+ DBusGProxyNameOwnerInfo *info;
-+ GSList *link;
-+
-+ /* Name owner changed or deleted */
-+
-+ names = g_hash_table_lookup (manager->owner_names, prev_owner);
-+
-+ link = g_slist_find_custom (names, name, find_name_in_info);
-+
-+ info = NULL;
-+ if (link != NULL)
-+ {
-+ info = link->data;
-+
-+ names = g_slist_delete_link (names, link);
-+
-+ if (names == NULL)
-+ g_hash_table_remove (manager->owner_names, prev_owner);
-+ }
-+
-+ if (new_owner[0] == '\0')
-+ {
-+ DBusGProxyUnassociateData data;
-+ GSList *tmp;
-+
-+ data.name = name;
-+ data.destroyed = NULL;
-+
-+ /* A service went away, we need to unassociate proxies */
-+ g_hash_table_foreach (manager->proxy_lists,
-+ unassociate_proxies, &data);
-+
-+ UNLOCK_MANAGER (manager);
-+
-+ for (tmp = data.destroyed; tmp; tmp = tmp->next)
-+ dbus_g_proxy_destroy (tmp->data);
-+ g_slist_free (data.destroyed);
-+
-+ LOCK_MANAGER (manager);
-+ }
-+ else
-+ {
-+ insert_nameinfo (manager, new_owner, info);
-+ }
-+ }
-+}
-+
-+static void
-+got_name_owner_cb (DBusGProxy *bus_proxy,
-+ DBusGProxyCall *call,
-+ void *user_data)
-+{
-+ DBusGProxy *proxy = user_data;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+ GError *error;
-+ char *owner;
-+
-+ error = NULL;
-+ owner = NULL;
-+
-+ LOCK_MANAGER (priv->manager);
-+
-+ if (!dbus_g_proxy_end_call (bus_proxy, call, &error,
-+ G_TYPE_STRING, &owner,
-+ G_TYPE_INVALID))
-+ {
-+ if (error->domain == DBUS_GERROR && error->code == DBUS_GERROR_NAME_HAS_NO_OWNER)
-+ {
-+ priv->manager->unassociated_proxies = g_slist_prepend (priv->manager->unassociated_proxies, proxy);
-+ }
-+ else
-+ g_warning ("Couldn't get name owner (%s): %s",
-+ dbus_g_error_get_name (error),
-+ error->message);
-+
-+ g_clear_error (&error);
-+ goto out;
-+ }
-+ else
-+ {
-+ dbus_g_proxy_manager_monitor_name_owner (priv->manager, owner, priv->name);
-+ priv->associated = TRUE;
-+ }
-+
-+ out:
-+ priv->name_call = NULL;
-+ UNLOCK_MANAGER (priv->manager);
-+ g_free (owner);
-+}
-+
-+static char *
-+get_name_owner (DBusConnection *connection,
-+ const char *name,
-+ GError **error)
-+{
-+ DBusError derror;
-+ DBusMessage *request, *reply;
-+ char *base_name;
-+
-+ dbus_error_init (&derror);
-+
-+ base_name = NULL;
-+ reply = NULL;
-+
-+ request = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "GetNameOwner");
-+ if (request == NULL)
-+ g_error ("Out of memory");
-+
-+ if (!dbus_message_append_args (request,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ g_error ("Out of memory");
-+
-+ reply =
-+ dbus_connection_send_with_reply_and_block (connection,
-+ request,
-+ 2000, &derror);
-+ if (reply == NULL)
-+ goto error;
-+
-+ if (dbus_set_error_from_message (&derror, reply))
-+ goto error;
-+
-+ if (!dbus_message_get_args (reply, &derror,
-+ DBUS_TYPE_STRING, &base_name,
-+ DBUS_TYPE_INVALID))
-+ goto error;
-+
-+ base_name = g_strdup (base_name);
-+ goto out;
-+
-+ error:
-+ g_assert (dbus_error_is_set (&derror));
-+ dbus_set_g_error (error, &derror);
-+ dbus_error_free (&derror);
-+
-+ out:
-+ if (request)
-+ dbus_message_unref (request);
-+ if (reply)
-+ dbus_message_unref (reply);
-+
-+ return base_name;
-+}
-+
-+
-+static void
-+dbus_g_proxy_manager_register (DBusGProxyManager *manager,
-+ DBusGProxy *proxy)
-+{
-+ DBusGProxyList *list;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ LOCK_MANAGER (manager);
-+
-+ if (manager->proxy_lists == NULL)
-+ {
-+ g_assert (manager->owner_names == NULL);
-+
-+ list = NULL;
-+ manager->proxy_lists = g_hash_table_new_full (tristring_hash,
-+ tristring_equal,
-+ NULL,
-+ (GFreeFunc) g_proxy_list_free);
-+ manager->owner_names = g_hash_table_new_full (g_str_hash,
-+ g_str_equal,
-+ g_free,
-+ NULL);
-+ /* FIXME - for now we listen for all NameOwnerChanged; once
-+ * Anders' detail patch lands we should add individual rules
-+ */
-+ dbus_bus_add_match (manager->connection,
-+ "type='signal',sender='" DBUS_SERVICE_DBUS
-+ "',path='" DBUS_PATH_DBUS
-+ "',interface='" DBUS_INTERFACE_DBUS
-+ "',member='NameOwnerChanged'",
-+ NULL);
-+ }
-+ else
-+ {
-+ char *tri;
-+
-+ tri = tristring_from_proxy (proxy);
-+
-+ list = g_hash_table_lookup (manager->proxy_lists, tri);
-+
-+ g_free (tri);
-+ }
-+
-+ if (list == NULL)
-+ {
-+ list = g_proxy_list_new (proxy);
-+
-+ g_hash_table_replace (manager->proxy_lists,
-+ list->name, list);
-+ }
-+
-+ if (list->proxies == NULL)
-+ {
-+ /* We have to add the match rule to the server,
-+ * but FIXME only if the server is a message bus,
-+ * not if it's a peer.
-+ */
-+ char *rule;
-+
-+ rule = g_proxy_get_match_rule (proxy);
-+
-+ /* We don't check for errors; it's not like anyone would handle them,
-+ * and we don't want a round trip here.
-+ */
-+ dbus_bus_add_match (manager->connection,
-+ rule, NULL);
-+
-+ g_free (rule);
-+ }
-+
-+ g_assert (g_slist_find (list->proxies, proxy) == NULL);
-+
-+ list->proxies = g_slist_prepend (list->proxies, proxy);
-+
-+ if (!priv->for_owner)
-+ {
-+ const char *owner;
-+ DBusGProxyNameOwnerInfo *info;
-+
-+ if (!dbus_g_proxy_manager_lookup_name_owner (manager, priv->name, &info, &owner))
-+ {
-+ priv->name_call = manager_begin_bus_call (manager, "GetNameOwner",
-+ got_name_owner_cb,
-+ proxy, NULL,
-+ G_TYPE_STRING,
-+ priv->name,
-+ G_TYPE_INVALID);
-+
-+ priv->associated = FALSE;
-+ }
-+ else
-+ {
-+ info->refcount++;
-+ priv->associated = TRUE;
-+ }
-+ }
-+
-+ UNLOCK_MANAGER (manager);
-+}
-+
-+static void
-+dbus_g_proxy_manager_unregister (DBusGProxyManager *manager,
-+ DBusGProxy *proxy)
-+{
-+ DBusGProxyList *list;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+ char *tri;
-+
-+ LOCK_MANAGER (manager);
-+
-+#ifndef G_DISABLE_CHECKS
-+ if (manager->proxy_lists == NULL)
-+ {
-+ g_warning ("Trying to unregister a proxy but there aren't any registered");
-+ return;
-+ }
-+#endif
-+
-+ tri = tristring_from_proxy (proxy);
-+
-+ list = g_hash_table_lookup (manager->proxy_lists, tri);
-+
-+#ifndef G_DISABLE_CHECKS
-+ if (list == NULL)
-+ {
-+ g_warning ("Trying to unregister a proxy but it isn't registered");
-+ return;
-+ }
-+#endif
-+
-+ g_assert (g_slist_find (list->proxies, proxy) != NULL);
-+
-+ list->proxies = g_slist_remove (list->proxies, proxy);
-+
-+ g_assert (g_slist_find (list->proxies, proxy) == NULL);
-+
-+ if (!priv->for_owner)
-+ {
-+ if (!priv->associated)
-+ {
-+ GSList *link;
-+
-+ if (priv->name_call != 0)
-+ {
-+ dbus_g_proxy_cancel_call (manager->bus_proxy, priv->name_call);
-+ priv->name_call = 0;
-+ }
-+ else
-+ {
-+ link = g_slist_find (manager->unassociated_proxies, proxy);
-+ g_assert (link != NULL);
-+
-+ manager->unassociated_proxies = g_slist_delete_link (manager->unassociated_proxies, link);
-+ }
-+ }
-+ else
-+ {
-+ g_assert (priv->name_call == 0);
-+
-+ dbus_g_proxy_manager_unmonitor_name_owner (manager, priv->name);
-+ }
-+ }
-+
-+ if (list->proxies == NULL)
-+ {
-+ char *rule;
-+ g_hash_table_remove (manager->proxy_lists,
-+ tri);
-+ list = NULL;
-+
-+ rule = g_proxy_get_match_rule (proxy);
-+ dbus_bus_remove_match (manager->connection,
-+ rule, NULL);
-+ g_free (rule);
-+ }
-+
-+ if (g_hash_table_size (manager->proxy_lists) == 0)
-+ {
-+ g_hash_table_destroy (manager->proxy_lists);
-+ manager->proxy_lists = NULL;
-+ }
-+
-+ g_free (tri);
-+
-+ UNLOCK_MANAGER (manager);
-+}
-+
-+static void
-+list_proxies_foreach (gpointer key,
-+ gpointer value,
-+ gpointer user_data)
-+{
-+ DBusGProxyList *list;
-+ GSList **ret;
-+ GSList *tmp;
-+
-+ list = value;
-+ ret = user_data;
-+
-+ tmp = list->proxies;
-+ while (tmp != NULL)
-+ {
-+ DBusGProxy *proxy = DBUS_G_PROXY (tmp->data);
-+
-+ g_object_ref (proxy);
-+ *ret = g_slist_prepend (*ret, proxy);
-+
-+ tmp = tmp->next;
-+ }
-+}
-+
-+static GSList*
-+dbus_g_proxy_manager_list_all (DBusGProxyManager *manager)
-+{
-+ GSList *ret;
-+
-+ ret = NULL;
-+
-+ if (manager->proxy_lists)
-+ {
-+ g_hash_table_foreach (manager->proxy_lists,
-+ list_proxies_foreach,
-+ &ret);
-+ }
-+
-+ return ret;
-+}
-+
-+static DBusHandlerResult
-+dbus_g_proxy_manager_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ DBusGProxyManager *manager;
-+
-+ if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_SIGNAL)
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+
-+ manager = user_data;
-+
-+ dbus_g_proxy_manager_ref (manager);
-+
-+ LOCK_MANAGER (manager);
-+
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ {
-+ /* Destroy all the proxies, quite possibly resulting in unreferencing
-+ * the proxy manager and the connection as well.
-+ */
-+ GSList *all;
-+ GSList *tmp;
-+
-+ all = dbus_g_proxy_manager_list_all (manager);
-+
-+ tmp = all;
-+ while (tmp != NULL)
-+ {
-+ DBusGProxy *proxy;
-+
-+ proxy = DBUS_G_PROXY (tmp->data);
-+
-+ UNLOCK_MANAGER (manager);
-+ dbus_g_proxy_destroy (proxy);
-+ g_object_unref (G_OBJECT (proxy));
-+ LOCK_MANAGER (manager);
-+
-+ tmp = tmp->next;
-+ }
-+
-+ g_slist_free (all);
-+
-+#ifndef G_DISABLE_CHECKS
-+ if (manager->proxy_lists != NULL)
-+ g_warning ("Disconnection emitted \"destroy\" on all DBusGProxy, but somehow new proxies were created in response to one of those destroy signals. This will cause a memory leak.");
-+#endif
-+ }
-+ else
-+ {
-+ char *tri;
-+ GSList *full_list;
-+ GSList *owned_names;
-+ GSList *tmp;
-+ const char *sender;
-+
-+ /* First we handle NameOwnerChanged internally */
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_DBUS,
-+ "NameOwnerChanged"))
-+ {
-+ const char *name;
-+ const char *prev_owner;
-+ const char *new_owner;
-+ DBusError derr;
-+
-+ dbus_error_init (&derr);
-+ if (!dbus_message_get_args (message,
-+ &derr,
-+ DBUS_TYPE_STRING,
-+ &name,
-+ DBUS_TYPE_STRING,
-+ &prev_owner,
-+ DBUS_TYPE_STRING,
-+ &new_owner,
-+ DBUS_TYPE_INVALID))
-+ {
-+ /* Ignore this error */
-+ dbus_error_free (&derr);
-+ }
-+ else if (manager->owner_names != NULL)
-+ {
-+ dbus_g_proxy_manager_replace_name_owner (manager, name, prev_owner, new_owner);
-+ }
-+ }
-+
-+ sender = dbus_message_get_sender (message);
-+
-+ /* dbus spec requires these, libdbus validates */
-+ g_assert (sender != NULL);
-+ g_assert (dbus_message_get_path (message) != NULL);
-+ g_assert (dbus_message_get_interface (message) != NULL);
-+ g_assert (dbus_message_get_member (message) != NULL);
-+
-+ tri = tristring_from_message (message);
-+
-+ if (manager->proxy_lists)
-+ {
-+ DBusGProxyList *owner_list;
-+ owner_list = g_hash_table_lookup (manager->proxy_lists, tri);
-+ if (owner_list)
-+ full_list = g_slist_copy (owner_list->proxies);
-+ else
-+ full_list = NULL;
-+ }
-+ else
-+ full_list = NULL;
-+
-+ g_free (tri);
-+
-+ if (manager->owner_names)
-+ {
-+ owned_names = g_hash_table_lookup (manager->owner_names, sender);
-+ for (tmp = owned_names; tmp; tmp = tmp->next)
-+ {
-+ DBusGProxyList *owner_list;
-+ DBusGProxyNameOwnerInfo *nameinfo;
-+
-+ nameinfo = tmp->data;
-+ g_assert (nameinfo->refcount > 0);
-+ tri = tristring_alloc_from_strings (0, nameinfo->name,
-+ dbus_message_get_path (message),
-+ dbus_message_get_interface (message));
-+
-+ owner_list = g_hash_table_lookup (manager->proxy_lists, tri);
-+ if (owner_list != NULL)
-+ full_list = g_slist_concat (full_list, g_slist_copy (owner_list->proxies));
-+ g_free (tri);
-+ }
-+ }
-+
-+#if 0
-+ g_print ("proxy got %s,%s,%s = list %p\n",
-+ tri,
-+ tri + strlen (tri) + 1,
-+ tri + strlen (tri) + 1 + strlen (tri + strlen (tri) + 1) + 1,
-+ list);
-+#endif
-+
-+ /* Emit the signal */
-+
-+ g_slist_foreach (full_list, (GFunc) g_object_ref, NULL);
-+
-+ for (tmp = full_list; tmp; tmp = tmp->next)
-+ {
-+ DBusGProxy *proxy;
-+
-+ proxy = DBUS_G_PROXY (tmp->data);
-+
-+ UNLOCK_MANAGER (manager);
-+ dbus_g_proxy_emit_remote_signal (proxy, message);
-+ g_object_unref (G_OBJECT (proxy));
-+ LOCK_MANAGER (manager);
-+ }
-+ g_slist_free (full_list);
-+ }
-+
-+ UNLOCK_MANAGER (manager);
-+ dbus_g_proxy_manager_unref (manager);
-+
-+ /* "Handling" signals doesn't make sense, they are for everyone
-+ * who cares
-+ */
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+
-+
-+/* ---------- DBusGProxy -------------- */
-+#define DBUS_G_PROXY_DESTROYED(proxy) (DBUS_G_PROXY_GET_PRIVATE(proxy)->manager == NULL)
-+
-+static void
-+marshal_dbus_message_to_g_marshaller (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+enum
-+{
-+ PROP_0,
-+ PROP_NAME,
-+ PROP_PATH,
-+ PROP_INTERFACE,
-+ PROP_CONNECTION
-+};
-+
-+enum
-+{
-+ DESTROY,
-+ RECEIVED,
-+ LAST_SIGNAL
-+};
-+
-+static void *parent_class;
-+static guint signals[LAST_SIGNAL] = { 0 };
-+
-+static void
-+dbus_g_proxy_init (DBusGProxy *proxy)
-+{
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ g_datalist_init (&priv->signal_signatures);
-+ priv->pending_calls = g_hash_table_new_full (NULL, NULL, NULL,
-+ (GDestroyNotify) dbus_pending_call_unref);
-+ priv->name_call = 0;
-+ priv->associated = FALSE;
-+}
-+
-+static GObject *
-+dbus_g_proxy_constructor (GType type,
-+ guint n_construct_properties,
-+ GObjectConstructParam *construct_properties)
-+{
-+ DBusGProxy *proxy;
-+ DBusGProxyClass *klass;
-+ GObjectClass *parent_class;
-+
-+ klass = DBUS_G_PROXY_CLASS (g_type_class_peek (DBUS_TYPE_G_PROXY));
-+
-+ parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
-+
-+ proxy = DBUS_G_PROXY (parent_class->constructor (type, n_construct_properties,
-+ construct_properties));
-+
-+ return G_OBJECT (proxy);
-+}
-+
-+static void
-+dbus_g_proxy_class_init (DBusGProxyClass *klass)
-+{
-+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
-+
-+ parent_class = g_type_class_peek_parent (klass);
-+
-+ g_type_class_add_private (klass, sizeof (DBusGProxyPrivate));
-+
-+ object_class->set_property = dbus_g_proxy_set_property;
-+ object_class->get_property = dbus_g_proxy_get_property;
-+
-+ g_object_class_install_property (object_class,
-+ PROP_NAME,
-+ g_param_spec_string ("name",
-+ "name",
-+ "name",
-+ NULL,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+
-+ g_object_class_install_property (object_class,
-+ PROP_PATH,
-+ g_param_spec_string ("path",
-+ "path",
-+ "path",
-+ NULL,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+
-+ g_object_class_install_property (object_class,
-+ PROP_INTERFACE,
-+ g_param_spec_string ("interface",
-+ "interface",
-+ "interface",
-+ NULL,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+
-+ g_object_class_install_property (object_class,
-+ PROP_CONNECTION,
-+ g_param_spec_boxed ("connection",
-+ "connection",
-+ "connection",
-+ DBUS_TYPE_G_CONNECTION,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+
-+ object_class->finalize = dbus_g_proxy_finalize;
-+ object_class->dispose = dbus_g_proxy_dispose;
-+ object_class->constructor = dbus_g_proxy_constructor;
-+
-+ signals[DESTROY] =
-+ g_signal_new ("destroy",
-+ G_OBJECT_CLASS_TYPE (object_class),
-+ G_SIGNAL_RUN_CLEANUP | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
-+ 0,
-+ NULL, NULL,
-+ g_cclosure_marshal_VOID__VOID,
-+ G_TYPE_NONE, 0);
-+
-+ signals[RECEIVED] =
-+ g_signal_new ("received",
-+ G_OBJECT_CLASS_TYPE (object_class),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ marshal_dbus_message_to_g_marshaller,
-+ G_TYPE_NONE, 2, DBUS_TYPE_MESSAGE, G_TYPE_POINTER);
-+}
-+
-+static void
-+cancel_pending_call (gpointer key, gpointer val, gpointer data)
-+{
-+ DBusGProxyCall *call = key;
-+ DBusGProxy *proxy = data;
-+
-+ dbus_g_proxy_cancel_call (proxy, call);
-+}
-+
-+static void
-+dbus_g_proxy_dispose (GObject *object)
-+{
-+ DBusGProxy *proxy = DBUS_G_PROXY (object);
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ if (priv->pending_calls == NULL)
-+ {
-+ return;
-+ }
-+
-+ /* Cancel outgoing pending calls */
-+ g_hash_table_foreach (priv->pending_calls, cancel_pending_call, proxy);
-+ g_hash_table_destroy (priv->pending_calls);
-+ priv->pending_calls = NULL;
-+
-+ if (priv->manager && proxy != priv->manager->bus_proxy)
-+ {
-+ dbus_g_proxy_manager_unregister (priv->manager, proxy);
-+ dbus_g_proxy_manager_unref (priv->manager);
-+ }
-+ priv->manager = NULL;
-+
-+ g_datalist_clear (&priv->signal_signatures);
-+
-+ g_signal_emit (object, signals[DESTROY], 0);
-+
-+ G_OBJECT_CLASS (parent_class)->dispose (object);
-+}
-+
-+static void
-+dbus_g_proxy_finalize (GObject *object)
-+{
-+ DBusGProxy *proxy = DBUS_G_PROXY (object);
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ g_return_if_fail (DBUS_G_PROXY_DESTROYED (proxy));
-+
-+ g_free (priv->name);
-+ g_free (priv->path);
-+ g_free (priv->interface);
-+
-+ G_OBJECT_CLASS (parent_class)->finalize (object);
-+}
-+
-+static void
-+dbus_g_proxy_destroy (DBusGProxy *proxy)
-+{
-+ /* FIXME do we need the GTK_IN_DESTRUCTION style flag
-+ * from GtkObject?
-+ */
-+ g_object_run_dispose (G_OBJECT (proxy));
-+}
-+
-+static void
-+dbus_g_proxy_set_property (GObject *object,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *pspec)
-+{
-+ DBusGProxy *proxy = DBUS_G_PROXY (object);
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+ DBusGConnection *connection;
-+
-+ switch (prop_id)
-+ {
-+ case PROP_NAME:
-+ priv->name = g_strdup (g_value_get_string (value));
-+ priv->for_owner = (priv->name[0] == ':');
-+ break;
-+ case PROP_PATH:
-+ priv->path = g_strdup (g_value_get_string (value));
-+ break;
-+ case PROP_INTERFACE:
-+ priv->interface = g_strdup (g_value_get_string (value));
-+ break;
-+ case PROP_CONNECTION:
-+ connection = g_value_get_boxed(value);
-+ if(connection != NULL)
-+ {
-+ priv->manager = dbus_g_proxy_manager_get (DBUS_CONNECTION_FROM_G_CONNECTION (connection));
-+ dbus_g_proxy_manager_register (priv->manager, proxy);
-+ }
-+ break;
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+dbus_g_proxy_get_property (GObject *object,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *pspec)
-+{
-+ DBusGProxy *proxy = DBUS_G_PROXY (object);
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_NAME:
-+ g_value_set_string (value, priv->name);
-+ break;
-+ case PROP_PATH:
-+ g_value_set_string (value, priv->path);
-+ break;
-+ case PROP_INTERFACE:
-+ g_value_set_string (value, priv->interface);
-+ break;
-+ case PROP_CONNECTION:
-+ g_value_set_boxed (value, DBUS_G_CONNECTION_FROM_CONNECTION(priv->manager->connection));
-+ break;
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+/* this is to avoid people using g_signal_connect() directly,
-+ * to avoid confusion with local signal names, and because
-+ * of the horribly broken current setup (signals are added
-+ * globally to all proxies)
-+ */
-+static char*
-+create_signal_name (const char *interface,
-+ const char *signal)
-+{
-+ GString *str;
-+ char *p;
-+
-+ str = g_string_new (interface);
-+
-+ g_string_append (str, "-");
-+
-+ g_string_append (str, signal);
-+
-+ /* GLib will silently barf on '.' in signal names */
-+ p = str->str;
-+ while (*p)
-+ {
-+ if (*p == '.')
-+ *p = '-';
-+ ++p;
-+ }
-+
-+ return g_string_free (str, FALSE);
-+}
-+
-+static void
-+marshal_dbus_message_to_g_marshaller (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ /* Incoming here we have three params, the instance (Proxy), the
-+ * DBusMessage, the signature. We want to convert that to an
-+ * expanded GValue array, then call an appropriate normal GLib
-+ * marshaller.
-+ */
-+#define MAX_SIGNATURE_ARGS 20
-+ GValueArray *value_array;
-+ GSignalCMarshaller c_marshaller;
-+ DBusGProxy *proxy;
-+ DBusMessage *message;
-+ GArray *gsignature;
-+ const GType *types;
-+ DBusGProxyPrivate *priv;
-+
-+ g_assert (n_param_values == 3);
-+
-+ proxy = g_value_get_object (¶m_values[0]);
-+ message = g_value_get_boxed (¶m_values[1]);
-+ gsignature = g_value_get_pointer (¶m_values[2]);
-+
-+ g_return_if_fail (DBUS_IS_G_PROXY (proxy));
-+ g_return_if_fail (message != NULL);
-+ g_return_if_fail (gsignature != NULL);
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ c_marshaller = _dbus_gobject_lookup_marshaller (G_TYPE_NONE, gsignature->len,
-+ (GType*) gsignature->data);
-+
-+ g_return_if_fail (c_marshaller != NULL);
-+
-+ {
-+ DBusGValueMarshalCtx context;
-+ context.gconnection = DBUS_G_CONNECTION_FROM_CONNECTION (priv->manager->connection);
-+ context.proxy = proxy;
-+
-+ types = (const GType*) gsignature->data;
-+ value_array = _dbus_gvalue_demarshal_message (&context, message,
-+ gsignature->len, types, NULL);
-+ }
-+
-+ if (value_array == NULL)
-+ return;
-+
-+ g_value_array_prepend (value_array, NULL);
-+ g_value_init (g_value_array_get_nth (value_array, 0), G_TYPE_FROM_INSTANCE (proxy));
-+ g_value_set_instance (g_value_array_get_nth (value_array, 0), proxy);
-+
-+ (* c_marshaller) (closure, return_value, value_array->n_values,
-+ value_array->values, invocation_hint, marshal_data);
-+
-+ g_value_array_free (value_array);
-+}
-+
-+static void
-+dbus_g_proxy_emit_remote_signal (DBusGProxy *proxy,
-+ DBusMessage *message)
-+{
-+ const char *interface;
-+ const char *signal;
-+ char *name;
-+ GQuark q;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ g_return_if_fail (!DBUS_G_PROXY_DESTROYED (proxy));
-+
-+ interface = dbus_message_get_interface (message);
-+ signal = dbus_message_get_member (message);
-+
-+ g_assert (interface != NULL);
-+ g_assert (signal != NULL);
-+
-+ name = create_signal_name (interface, signal);
-+
-+ /* If the quark isn't preexisting, there's no way there
-+ * are any handlers connected. We don't want to create
-+ * extra quarks for every possible signal.
-+ */
-+ q = g_quark_try_string (name);
-+
-+ if (q != 0)
-+ {
-+ GArray *gsignature;
-+ GArray *msg_gsignature;
-+ guint i;
-+
-+ gsignature = g_datalist_id_get_data (&priv->signal_signatures, q);
-+ if (gsignature == NULL)
-+ goto out;
-+
-+ msg_gsignature = _dbus_gtypes_from_arg_signature (dbus_message_get_signature (message),
-+ TRUE);
-+ for (i = 0; i < gsignature->len; i++)
-+ {
-+ if (msg_gsignature->len == i
-+ || g_array_index (gsignature, GType, i) != g_array_index (msg_gsignature, GType, i))
-+ goto mismatch;
-+ }
-+ if (msg_gsignature->len != i)
-+ goto mismatch;
-+
-+ g_signal_emit (proxy,
-+ signals[RECEIVED],
-+ q,
-+ message,
-+ msg_gsignature);
-+ }
-+
-+ out:
-+ g_free (name);
-+ return;
-+ mismatch:
-+#if 0
-+ /* Don't spew on remote errors */
-+ g_warning ("Unexpected message signature '%s' for signal '%s'\n",
-+ dbus_message_get_signature (message),
-+ name);
-+#endif
-+ goto out;
-+}
-+
-+typedef struct
-+{
-+ DBusGProxy *proxy;
-+ guint call_id;
-+ DBusGProxyCallNotify func;
-+ void *data;
-+ GDestroyNotify free_data_func;
-+} GPendingNotifyClosure;
-+
-+static void
-+d_pending_call_notify (DBusPendingCall *dcall,
-+ void *data)
-+{
-+ GPendingNotifyClosure *closure = data;
-+
-+ (* closure->func) (closure->proxy, DBUS_G_PROXY_ID_TO_CALL (closure->call_id), closure->data);
-+}
-+
-+static void
-+d_pending_call_free (void *data)
-+{
-+ GPendingNotifyClosure *closure = data;
-+
-+ if (closure->free_data_func)
-+ (* closure->free_data_func) (closure->data);
-+
-+ g_free (closure);
-+}
-+
-+#define DBUS_G_VALUE_ARRAY_COLLECT_ALL(VALARRAY, FIRST_ARG_TYPE, ARGS) \
-+do { \
-+ GType valtype; \
-+ int i = 0; \
-+ VALARRAY = g_value_array_new (6); \
-+ valtype = FIRST_ARG_TYPE; \
-+ while (valtype != G_TYPE_INVALID) \
-+ { \
-+ const char *collect_err; \
-+ GValue *val; \
-+ g_value_array_append (VALARRAY, NULL); \
-+ val = g_value_array_get_nth (VALARRAY, i); \
-+ g_value_init (val, valtype); \
-+ collect_err = NULL; \
-+ G_VALUE_COLLECT (val, ARGS, G_VALUE_NOCOPY_CONTENTS, &collect_err); \
-+ valtype = va_arg (ARGS, GType); \
-+ i++; \
-+ } \
-+} while (0)
-+
-+DBusGProxyCall *
-+manager_begin_bus_call (DBusGProxyManager *manager,
-+ const char *method,
-+ DBusGProxyCallNotify notify,
-+ gpointer user_data,
-+ GDestroyNotify destroy,
-+ GType first_arg_type,
-+ ...)
-+{
-+ DBusGProxyCall *call;
-+ DBusGProxyPrivate *priv;
-+ va_list args;
-+ GValueArray *arg_values;
-+
-+ va_start (args, first_arg_type);
-+
-+ if (!manager->bus_proxy)
-+ {
-+ manager->bus_proxy = g_object_new (DBUS_TYPE_G_PROXY,
-+ "name", DBUS_SERVICE_DBUS,
-+ "path", DBUS_PATH_DBUS,
-+ "interface", DBUS_INTERFACE_DBUS,
-+ "connection", NULL,
-+ NULL);
-+ priv = DBUS_G_PROXY_GET_PRIVATE(manager->bus_proxy);
-+ priv->manager = manager;
-+ }
-+
-+ DBUS_G_VALUE_ARRAY_COLLECT_ALL (arg_values, first_arg_type, args);
-+
-+ call = DBUS_G_PROXY_ID_TO_CALL (dbus_g_proxy_begin_call_internal (manager->bus_proxy, method, notify, user_data, destroy, arg_values));
-+
-+ g_value_array_free (arg_values);
-+
-+ va_end (args);
-+
-+ return call;
-+}
-+
-+/** @} End of DBusGLibInternals */
-+
-+/** @addtogroup DBusGLib
-+ * @{
-+ */
-+
-+/**
-+ * Standard GObject get_type() function for DBusGProxy.
-+ *
-+ * @returns type ID for DBusGProxy class
-+ */
-+GType
-+dbus_g_proxy_get_type (void)
-+{
-+ static GType object_type = 0;
-+
-+ if (!object_type)
-+ {
-+ static const GTypeInfo object_info =
-+ {
-+ sizeof (DBusGProxyClass),
-+ (GBaseInitFunc) NULL,
-+ (GBaseFinalizeFunc) NULL,
-+ (GClassInitFunc) dbus_g_proxy_class_init,
-+ NULL, /* class_finalize */
-+ NULL, /* class_data */
-+ sizeof (DBusGProxy),
-+ 0, /* n_preallocs */
-+ (GInstanceInitFunc) dbus_g_proxy_init,
-+ };
-+
-+ object_type = g_type_register_static (G_TYPE_OBJECT,
-+ "DBusGProxy",
-+ &object_info, 0);
-+ }
-+
-+ return object_type;
-+}
-+
-+static DBusGProxy*
-+dbus_g_proxy_new (DBusGConnection *connection,
-+ const char *name,
-+ const char *path_name,
-+ const char *interface_name)
-+{
-+ DBusGProxy *proxy;
-+
-+ g_assert (connection != NULL);
-+
-+ proxy = g_object_new (DBUS_TYPE_G_PROXY,
-+ "name", name,
-+ "path", path_name,
-+ "interface", interface_name,
-+ "connection", connection, NULL);
-+
-+ return proxy;
-+}
-+
-+/**
-+ * Creates a new proxy for a remote interface exported by a connection
-+ * on a message bus. Method calls and signal connections over this
-+ * proxy will go to the name owner; the name's owner is expected to
-+ * support the given interface name. THE NAME OWNER MAY CHANGE OVER
-+ * TIME, for example between two different method calls, unless the
-+ * name is a unique name. If you need a fixed owner, you need to
-+ * request the current owner and bind a proxy to its unique name
-+ * rather than to the generic name; see
-+ * dbus_g_proxy_new_for_name_owner().
-+ *
-+ * A name-associated proxy only makes sense with a message bus, not
-+ * for app-to-app direct dbus connections.
-+ *
-+ * This proxy will only emit the "destroy" signal if the
-+ * #DBusConnection is disconnected, the proxy has no remaining
-+ * references, or the name is a unique name and its owner
-+ * disappears. If a well-known name changes owner, the proxy will
-+ * still be alive.
-+ *
-+ * @param connection the connection to the remote bus
-+ * @param name any name on the message bus
-+ * @param path_name name of the object instance to call methods on
-+ * @param interface_name name of the interface to call methods on
-+ * @returns new proxy object
-+ */
-+DBusGProxy*
-+dbus_g_proxy_new_for_name (DBusGConnection *connection,
-+ const char *name,
-+ const char *path_name,
-+ const char *interface_name)
-+{
-+ g_return_val_if_fail (connection != NULL, NULL);
-+ g_return_val_if_fail (name != NULL, NULL);
-+ g_return_val_if_fail (path_name != NULL, NULL);
-+ g_return_val_if_fail (interface_name != NULL, NULL);
-+
-+ return dbus_g_proxy_new (connection, name,
-+ path_name, interface_name);
-+}
-+
-+/**
-+ * Similar to dbus_g_proxy_new_for_name(), but makes a round-trip
-+ * request to the message bus to get the current name owner, then
-+ * binds the proxy to the unique name of the current owner, rather
-+ * than to the well-known name. As a result, the name owner will
-+ * not change over time, and the proxy will emit the "destroy" signal
-+ * when the owner disappears from the message bus.
-+ *
-+ * An example of the difference between dbus_g_proxy_new_for_name()
-+ * and dbus_g_proxy_new_for_name_owner(): if you provide the well-known name
-+ * "org.freedesktop.Database" dbus_g_proxy_new_for_name() remains bound
-+ * to that name as it changes owner. dbus_g_proxy_new_for_name_owner()
-+ * will fail if the name has no owner. If the name has an owner,
-+ * dbus_g_proxy_new_for_name_owner() will bind to the unique name
-+ * of that owner rather than the generic name.
-+ *
-+ * @param connection the connection to the remote bus
-+ * @param name any name on the message bus
-+ * @param path_name name of the object inside the service to call methods on
-+ * @param interface_name name of the interface to call methods on
-+ * @param error return location for an error
-+ * @returns new proxy object, or #NULL on error
-+ */
-+DBusGProxy*
-+dbus_g_proxy_new_for_name_owner (DBusGConnection *connection,
-+ const char *name,
-+ const char *path_name,
-+ const char *interface_name,
-+ GError **error)
-+{
-+ DBusGProxy *proxy;
-+ char *unique_name;
-+
-+ g_return_val_if_fail (connection != NULL, NULL);
-+ g_return_val_if_fail (name != NULL, NULL);
-+ g_return_val_if_fail (path_name != NULL, NULL);
-+ g_return_val_if_fail (interface_name != NULL, NULL);
-+
-+ if (!(unique_name = get_name_owner (DBUS_CONNECTION_FROM_G_CONNECTION (connection), name, error)))
-+ return NULL;
-+
-+ proxy = dbus_g_proxy_new (connection, unique_name,
-+ path_name, interface_name);
-+ g_free (unique_name);
-+ return proxy;
-+}
-+
-+/**
-+ * Creates a proxy using an existing proxy as a template, substituting
-+ * the specified interface and path. Either or both may be NULL.
-+ *
-+ * @param proxy the proxy to use as a template
-+ * @param path of the object inside the peer to call methods on
-+ * @param interface name of the interface to call methods on
-+ * @returns new proxy object
-+ *
-+ */
-+DBusGProxy*
-+dbus_g_proxy_new_from_proxy (DBusGProxy *proxy,
-+ const char *interface,
-+ const char *path)
-+{
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_val_if_fail (proxy != NULL, NULL);
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ if (interface == NULL)
-+ interface = priv->interface;
-+ if (path == NULL)
-+ path = priv->path;
-+
-+ return dbus_g_proxy_new (DBUS_G_CONNECTION_FROM_CONNECTION (priv->manager->connection),
-+ priv->name,
-+ path, interface);
-+}
-+
-+/**
-+ * Creates a proxy for an object in peer application (one
-+ * we're directly connected to). That is, this function is
-+ * intended for use when there's no message bus involved,
-+ * we're doing a simple 1-to-1 communication between two
-+ * applications.
-+ *
-+ *
-+ * @param connection the connection to the peer
-+ * @param path_name name of the object inside the peer to call methods on
-+ * @param interface_name name of the interface to call methods on
-+ * @returns new proxy object
-+ *
-+ */
-+DBusGProxy*
-+dbus_g_proxy_new_for_peer (DBusGConnection *connection,
-+ const char *path_name,
-+ const char *interface_name)
-+{
-+ DBusGProxy *proxy;
-+
-+ g_return_val_if_fail (connection != NULL, NULL);
-+ g_return_val_if_fail (path_name != NULL, NULL);
-+ g_return_val_if_fail (interface_name != NULL, NULL);
-+
-+ proxy = dbus_g_proxy_new (connection, NULL,
-+ path_name, interface_name);
-+
-+ return proxy;
-+}
-+
-+/**
-+ * Gets the bus name a proxy is bound to (may be #NULL in some cases).
-+ * If you created the proxy with dbus_g_proxy_new_for_name(), then
-+ * the name you passed to that will be returned.
-+ * If you created it with dbus_g_proxy_new_for_name_owner(), then the
-+ * unique connection name will be returned. If you created it
-+ * with dbus_g_proxy_new_for_peer() then #NULL will be returned.
-+ *
-+ * @param proxy the proxy
-+ * @returns the bus name the proxy sends messages to
-+ */
-+const char*
-+dbus_g_proxy_get_bus_name (DBusGProxy *proxy)
-+{
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), NULL);
-+ g_return_val_if_fail (!DBUS_G_PROXY_DESTROYED (proxy), NULL);
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ return priv->name;
-+}
-+
-+/**
-+ * Gets the object interface proxy is bound to (may be #NULL in some cases).
-+ *
-+ * @param proxy the proxy
-+ * @returns an object interface
-+ */
-+const char*
-+dbus_g_proxy_get_interface (DBusGProxy *proxy)
-+{
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), NULL);
-+ g_return_val_if_fail (!DBUS_G_PROXY_DESTROYED (proxy), NULL);
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ return priv->interface;
-+}
-+
-+/**
-+ * Sets the object interface proxy is bound to
-+ *
-+ * @param proxy the proxy
-+ * @param interface_name an object interface
-+ */
-+void
-+dbus_g_proxy_set_interface (DBusGProxy *proxy,
-+ const char *interface_name)
-+{
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+ /* FIXME - need to unregister when we switch interface for now
-+ * later should support idea of unset interface
-+ */
-+ dbus_g_proxy_manager_unregister (priv->manager, proxy);
-+ g_free (priv->interface);
-+ priv->interface = g_strdup (interface_name);
-+ dbus_g_proxy_manager_register (priv->manager, proxy);
-+}
-+
-+/**
-+ * Gets the path this proxy is bound to
-+ *
-+ * @param proxy the proxy
-+ * @returns an object path
-+ */
-+const char*
-+dbus_g_proxy_get_path (DBusGProxy *proxy)
-+{
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), NULL);
-+ g_return_val_if_fail (!DBUS_G_PROXY_DESTROYED (proxy), NULL);
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ return priv->path;
-+}
-+
-+static DBusMessage *
-+dbus_g_proxy_marshal_args_to_message (DBusGProxy *proxy,
-+ const char *method,
-+ GValueArray *args)
-+{
-+ DBusMessage *message;
-+ DBusMessageIter msgiter;
-+ guint i;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ message = dbus_message_new_method_call (priv->name,
-+ priv->path,
-+ priv->interface,
-+ method);
-+ if (message == NULL)
-+ goto oom;
-+
-+ dbus_message_iter_init_append (message, &msgiter);
-+ for (i = 0; i < args->n_values; i++)
-+ {
-+ GValue *gvalue;
-+
-+ gvalue = g_value_array_get_nth (args, i);
-+
-+ if (!_dbus_gvalue_marshal (&msgiter, gvalue))
-+ g_assert_not_reached ();
-+ }
-+ return message;
-+ oom:
-+ return NULL;
-+}
-+
-+static guint
-+dbus_g_proxy_begin_call_internal (DBusGProxy *proxy,
-+ const char *method,
-+ DBusGProxyCallNotify notify,
-+ gpointer user_data,
-+ GDestroyNotify destroy,
-+ GValueArray *args)
-+{
-+ DBusMessage *message;
-+ DBusPendingCall *pending;
-+ GPendingNotifyClosure *closure;
-+ guint call_id;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ pending = NULL;
-+
-+ message = dbus_g_proxy_marshal_args_to_message (proxy, method, args);
-+ if (!message)
-+ goto oom;
-+
-+ if (!dbus_connection_send_with_reply (priv->manager->connection,
-+ message,
-+ &pending,
-+ -1))
-+ goto oom;
-+ dbus_message_unref (message);
-+ g_assert (pending != NULL);
-+
-+ call_id = ++priv->call_id_counter;
-+
-+ if (notify != NULL)
-+ {
-+ closure = g_new (GPendingNotifyClosure, 1);
-+ closure->proxy = proxy; /* No need to ref as the lifecycle is tied to proxy */
-+ closure->call_id = call_id;
-+ closure->func = notify;
-+ closure->data = user_data;
-+ closure->free_data_func = destroy;
-+ dbus_pending_call_set_notify (pending, d_pending_call_notify,
-+ closure,
-+ d_pending_call_free);
-+ }
-+
-+ g_hash_table_insert (priv->pending_calls, GUINT_TO_POINTER (call_id), pending);
-+
-+ return call_id;
-+ oom:
-+ g_error ("Out of memory");
-+ return 0;
-+}
-+
-+static gboolean
-+dbus_g_proxy_end_call_internal (DBusGProxy *proxy,
-+ guint call_id,
-+ GError **error,
-+ GType first_arg_type,
-+ va_list args)
-+{
-+ DBusMessage *reply;
-+ DBusMessageIter msgiter;
-+ DBusError derror;
-+ va_list args_unwind;
-+ guint over;
-+ int n_retvals_processed;
-+ gboolean ret;
-+ GType valtype;
-+ DBusPendingCall *pending;
-+ DBusGProxyPrivate *priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ reply = NULL;
-+ ret = FALSE;
-+ n_retvals_processed = 0;
-+ over = 0;
-+
-+ pending = g_hash_table_lookup (priv->pending_calls, GUINT_TO_POINTER (call_id));
-+
-+ dbus_pending_call_block (pending);
-+ reply = dbus_pending_call_steal_reply (pending);
-+
-+ g_assert (reply != NULL);
-+
-+ dbus_error_init (&derror);
-+
-+ switch (dbus_message_get_type (reply))
-+ {
-+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
-+
-+ dbus_message_iter_init (reply, &msgiter);
-+ valtype = first_arg_type;
-+ while (valtype != G_TYPE_INVALID)
-+ {
-+ int arg_type;
-+ gpointer return_storage;
-+ GValue gvalue = { 0, };
-+ DBusGValueMarshalCtx context;
-+
-+ context.gconnection = DBUS_G_CONNECTION_FROM_CONNECTION (priv->manager->connection);
-+ context.proxy = proxy;
-+
-+ arg_type = dbus_message_iter_get_arg_type (&msgiter);
-+ if (arg_type == DBUS_TYPE_INVALID)
-+ {
-+ g_set_error (error, DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Too few arguments in reply"));
-+ goto out;
-+ }
-+
-+ return_storage = va_arg (args, gpointer);
-+ if (return_storage == NULL)
-+ goto next;
-+
-+ /* We handle variants specially; the caller is expected
-+ * to have already allocated storage for them.
-+ */
-+ if (arg_type == DBUS_TYPE_VARIANT
-+ && g_type_is_a (valtype, G_TYPE_VALUE))
-+ {
-+ if (!_dbus_gvalue_demarshal_variant (&context, &msgiter, (GValue*) return_storage, NULL))
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Couldn't convert argument, expected \"%s\""),
-+ g_type_name (valtype));
-+ goto out;
-+ }
-+ }
-+ else
-+ {
-+ g_value_init (&gvalue, valtype);
-+
-+ if (!_dbus_gvalue_demarshal (&context, &msgiter, &gvalue, error))
-+ goto out;
-+
-+ /* Anything that can be demarshaled must be storable */
-+ if (!_dbus_gvalue_store (&gvalue, (gpointer*) return_storage))
-+ g_assert_not_reached ();
-+ /* Ownership of the value passes to the client, don't unset */
-+ }
-+
-+ next:
-+ n_retvals_processed++;
-+ dbus_message_iter_next (&msgiter);
-+ valtype = va_arg (args, GType);
-+ }
-+
-+ while (dbus_message_iter_get_arg_type (&msgiter) != DBUS_TYPE_INVALID)
-+ {
-+ over++;
-+ dbus_message_iter_next (&msgiter);
-+ }
-+
-+ if (over > 0)
-+ {
-+ g_set_error (error, DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Too many arguments in reply; expected %d, got %d"),
-+ n_retvals_processed, over);
-+ goto out;
-+ }
-+ break;
-+ case DBUS_MESSAGE_TYPE_ERROR:
-+ dbus_set_error_from_message (&derror, reply);
-+ dbus_set_g_error (error, &derror);
-+ dbus_error_free (&derror);
-+ goto out;
-+ break;
-+ default:
-+ dbus_set_error (&derror, DBUS_ERROR_FAILED,
-+ "Reply was neither a method return nor an exception");
-+ dbus_set_g_error (error, &derror);
-+ dbus_error_free (&derror);
-+ goto out;
-+ break;
-+ }
-+
-+ ret = TRUE;
-+ out:
-+ va_end (args);
-+
-+ if (ret == FALSE)
-+ {
-+ int i;
-+ for (i = 0; i < n_retvals_processed; i++)
-+ {
-+ gpointer retval;
-+
-+ retval = va_arg (args_unwind, gpointer);
-+
-+ g_free (retval);
-+ }
-+ }
-+ va_end (args_unwind);
-+
-+ g_hash_table_remove (priv->pending_calls, GUINT_TO_POINTER (call_id));
-+
-+ if (reply)
-+ dbus_message_unref (reply);
-+ return ret;
-+}
-+
-+/**
-+ * Asynchronously invokes a method on a remote interface. The method
-+ * call will not be sent over the wire until the application returns
-+ * to the main loop, or blocks in dbus_connection_flush() to write out
-+ * pending data. The call will be completed after a timeout, or when
-+ * a reply is received. When the call returns, the callback specified
-+ * will be invoked; you can then collect the results of the call
-+ * (which may be an error, or a reply), use dbus_g_proxy_end_call().
-+ *
-+ * @todo this particular function shouldn't die on out of memory,
-+ * since you should be able to do a call with large arguments.
-+ *
-+ * @param proxy a proxy for a remote interface
-+ * @param method the name of the method to invoke
-+ * @param notify callback to be invoked when method returns
-+ * @param user_data user data passed to callback
-+ * @param destroy function called to destroy user_data
-+ * @param first_arg_type type of the first argument
-+ *
-+ * @returns call identifier
-+ * */
-+DBusGProxyCall *
-+dbus_g_proxy_begin_call (DBusGProxy *proxy,
-+ const char *method,
-+ DBusGProxyCallNotify notify,
-+ gpointer user_data,
-+ GDestroyNotify destroy,
-+ GType first_arg_type,
-+ ...)
-+{
-+ guint call_id;
-+ va_list args;
-+ GValueArray *arg_values;
-+
-+ g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), FALSE);
-+ g_return_val_if_fail (!DBUS_G_PROXY_DESTROYED (proxy), FALSE);
-+
-+ va_start (args, first_arg_type);
-+
-+ DBUS_G_VALUE_ARRAY_COLLECT_ALL (arg_values, first_arg_type, args);
-+
-+ call_id = dbus_g_proxy_begin_call_internal (proxy, method, notify, user_data, destroy, arg_values);
-+
-+ g_value_array_free (arg_values);
-+
-+ va_end (args);
-+
-+ return DBUS_G_PROXY_ID_TO_CALL (call_id);
-+}
-+
-+/**
-+ * Collects the results of a method call. The method call was normally
-+ * initiated with dbus_g_proxy_end_call(). You may use this function
-+ * outside of the callback given to dbus_g_proxy_begin_call; in that
-+ * case this function will block if the results haven't yet been
-+ * received.
-+ *
-+ * If the call results in an error, the error is set as normal for
-+ * GError and the function returns #FALSE.
-+ *
-+ * Otherwise, the "out" parameters and return value of the
-+ * method are stored in the provided varargs list.
-+ * The list should be terminated with G_TYPE_INVALID.
-+ *
-+ * @param proxy a proxy for a remote interface
-+ * @param call the pending call ID from dbus_g_proxy_begin_call()
-+ * @param error return location for an error
-+ * @param first_arg_type type of first "out" argument
-+ * @returns #FALSE if an error is set
-+ */
-+gboolean
-+dbus_g_proxy_end_call (DBusGProxy *proxy,
-+ DBusGProxyCall *call,
-+ GError **error,
-+ GType first_arg_type,
-+ ...)
-+{
-+ gboolean ret;
-+ va_list args;
-+
-+ va_start (args, first_arg_type);
-+
-+ ret = dbus_g_proxy_end_call_internal (proxy, GPOINTER_TO_UINT (call), error, first_arg_type, args);
-+
-+ va_end (args);
-+
-+ return ret;
-+}
-+
-+/**
-+ * Function for synchronously invoking a method and receiving reply
-+ * values. This function is equivalent to dbus_g_proxy_begin_call
-+ * followed by dbus_g_proxy_end_call. All of the input arguments are
-+ * specified first, followed by G_TYPE_INVALID, followed by all of the
-+ * output values, followed by a second G_TYPE_INVALID. Note that
-+ * this means you must always specify G_TYPE_INVALID twice.
-+ *
-+ * @param proxy a proxy for a remote interface
-+ * @param method method to invoke
-+ * @param error return location for an error
-+ * @param first_arg_type type of first "in" argument
-+ * @returns #FALSE if an error is set, TRUE otherwise
-+ */
-+gboolean
-+dbus_g_proxy_call (DBusGProxy *proxy,
-+ const char *method,
-+ GError **error,
-+ GType first_arg_type,
-+ ...)
-+{
-+ gboolean ret;
-+ guint call_id;
-+ va_list args;
-+ GValueArray *in_args;
-+
-+ g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), FALSE);
-+ g_return_val_if_fail (!DBUS_G_PROXY_DESTROYED (proxy), FALSE);
-+
-+ va_start (args, first_arg_type);
-+
-+ DBUS_G_VALUE_ARRAY_COLLECT_ALL (in_args, first_arg_type, args);
-+
-+ call_id = dbus_g_proxy_begin_call_internal (proxy, method, NULL, NULL, NULL, in_args);
-+
-+ g_value_array_free (in_args);
-+
-+ first_arg_type = va_arg (args, GType);
-+ ret = dbus_g_proxy_end_call_internal (proxy, call_id, error, first_arg_type, args);
-+
-+ va_end (args);
-+
-+ return ret;
-+}
-+
-+/**
-+ * Sends a method call message as with dbus_g_proxy_begin_call(), but
-+ * does not ask for a reply or allow you to receive one.
-+ *
-+ * @todo this particular function shouldn't die on out of memory,
-+ * since you should be able to do a call with large arguments.
-+ *
-+ * @param proxy a proxy for a remote interface
-+ * @param method the name of the method to invoke
-+ * @param first_arg_type type of the first argument
-+ */
-+void
-+dbus_g_proxy_call_no_reply (DBusGProxy *proxy,
-+ const char *method,
-+ GType first_arg_type,
-+ ...)
-+{
-+ DBusMessage *message;
-+ va_list args;
-+ GValueArray *in_args;
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_if_fail (DBUS_IS_G_PROXY (proxy));
-+ g_return_if_fail (!DBUS_G_PROXY_DESTROYED (proxy));
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ va_start (args, first_arg_type);
-+ DBUS_G_VALUE_ARRAY_COLLECT_ALL (in_args, first_arg_type, args);
-+
-+ message = dbus_g_proxy_marshal_args_to_message (proxy, method, in_args);
-+
-+ g_value_array_free (in_args);
-+ va_end (args);
-+
-+ if (!message)
-+ goto oom;
-+
-+ dbus_message_set_no_reply (message, TRUE);
-+
-+ if (!dbus_connection_send (priv->manager->connection,
-+ message,
-+ NULL))
-+ goto oom;
-+ dbus_message_unref (message);
-+ return;
-+
-+ oom:
-+ g_error ("Out of memory");
-+}
-+
-+/**
-+ * Cancels a pending method call. The method call was normally
-+ * initiated with dbus_g_proxy_begin_call(). This function
-+ * may not be used on pending calls that have already been
-+ * ended with dbus_g_proxy_end_call.
-+ *
-+ * @param proxy a proxy for a remote interface
-+ * @param call the pending call ID from dbus_g_proxy_begin_call()
-+ */
-+void
-+dbus_g_proxy_cancel_call (DBusGProxy *proxy,
-+ DBusGProxyCall *call)
-+{
-+ guint call_id;
-+ DBusPendingCall *pending;
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_if_fail (DBUS_IS_G_PROXY (proxy));
-+ g_return_if_fail (!DBUS_G_PROXY_DESTROYED (proxy));
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ call_id = DBUS_G_PROXY_CALL_TO_ID (call);
-+
-+ pending = g_hash_table_lookup (priv->pending_calls, GUINT_TO_POINTER (call_id));
-+ g_return_if_fail (pending != NULL);
-+
-+ dbus_pending_call_cancel (pending);
-+
-+ g_hash_table_remove (priv->pending_calls, GUINT_TO_POINTER (call_id));
-+}
-+
-+/**
-+ * Sends a message to the interface we're proxying for. Does not
-+ * block or wait for a reply. The message is only actually written out
-+ * when you return to the main loop or block in
-+ * dbus_connection_flush().
-+ *
-+ * The message is modified to be addressed to the target interface.
-+ * That is, a destination name field or whatever is needed will be
-+ * added to the message. The basic point of this function is to add
-+ * the necessary header fields, otherwise it's equivalent to
-+ * dbus_connection_send().
-+ *
-+ * This function adds a reference to the message, so the caller
-+ * still owns its original reference.
-+ *
-+ * @param proxy a proxy for a remote interface
-+ * @param message the message to address and send
-+ * @param client_serial return location for message's serial, or #NULL */
-+void
-+dbus_g_proxy_send (DBusGProxy *proxy,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_if_fail (DBUS_IS_G_PROXY (proxy));
-+ g_return_if_fail (!DBUS_G_PROXY_DESTROYED (proxy));
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ if (priv->name)
-+ {
-+ if (!dbus_message_set_destination (message, priv->name))
-+ g_error ("Out of memory");
-+ }
-+ if (priv->path)
-+ {
-+ if (!dbus_message_set_path (message, priv->path))
-+ g_error ("Out of memory");
-+ }
-+ if (priv->interface)
-+ {
-+ if (!dbus_message_set_interface (message, priv->interface))
-+ g_error ("Out of memory");
-+ }
-+
-+ if (!dbus_connection_send (priv->manager->connection, message, client_serial))
-+ g_error ("Out of memory\n");
-+}
-+
-+static void
-+array_free_all (gpointer array)
-+{
-+ g_array_free (array, TRUE);
-+}
-+
-+/**
-+ * Specifies the argument signature of a signal;.only necessary
-+ * if the remote object does not support introspection. The arguments
-+ * specified are the GLib types expected.
-+ *
-+ * @param proxy the proxy for a remote interface
-+ * @param signal_name the name of the signal
-+ * @param first_type the first argument type, or G_TYPE_INVALID if none
-+ */
-+void
-+dbus_g_proxy_add_signal (DBusGProxy *proxy,
-+ const char *signal_name,
-+ GType first_type,
-+ ...)
-+{
-+ GQuark q;
-+ char *name;
-+ GArray *gtypesig;
-+ GType gtype;
-+ va_list args;
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_if_fail (DBUS_IS_G_PROXY (proxy));
-+ g_return_if_fail (!DBUS_G_PROXY_DESTROYED (proxy));
-+ g_return_if_fail (signal_name != NULL);
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+
-+ name = create_signal_name (priv->interface, signal_name);
-+
-+ q = g_quark_from_string (name);
-+
-+ g_return_if_fail (g_datalist_id_get_data (&priv->signal_signatures, q) == NULL);
-+
-+ gtypesig = g_array_new (FALSE, TRUE, sizeof (GType));
-+
-+ va_start (args, first_type);
-+ gtype = first_type;
-+ while (gtype != G_TYPE_INVALID)
-+ {
-+ g_array_append_val (gtypesig, gtype);
-+ gtype = va_arg (args, GType);
-+ }
-+ va_end (args);
-+
-+#ifndef G_DISABLE_CHECKS
-+ if (_dbus_gobject_lookup_marshaller (G_TYPE_NONE, gtypesig->len, (const GType*) gtypesig->data) == NULL)
-+ g_warning ("No marshaller for signature of signal '%s'", signal_name);
-+#endif
-+
-+
-+ g_datalist_id_set_data_full (&priv->signal_signatures,
-+ q, gtypesig,
-+ array_free_all);
-+
-+ g_free (name);
-+}
-+
-+/**
-+ * Connect a signal handler to a proxy for a remote interface. When
-+ * the remote interface emits the specified signal, the proxy will
-+ * emit a corresponding GLib signal.
-+ *
-+ * @param proxy a proxy for a remote interface
-+ * @param signal_name the DBus signal name to listen for
-+ * @param handler the handler to connect
-+ * @param data data to pass to handler
-+ * @param free_data_func callback function to destroy data
-+ */
-+void
-+dbus_g_proxy_connect_signal (DBusGProxy *proxy,
-+ const char *signal_name,
-+ GCallback handler,
-+ void *data,
-+ GClosureNotify free_data_func)
-+{
-+ char *name;
-+ GClosure *closure;
-+ GQuark q;
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_if_fail (DBUS_IS_G_PROXY (proxy));
-+ g_return_if_fail (!DBUS_G_PROXY_DESTROYED (proxy));
-+ g_return_if_fail (signal_name != NULL);
-+ g_return_if_fail (handler != NULL);
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+ name = create_signal_name (priv->interface, signal_name);
-+
-+ q = g_quark_try_string (name);
-+
-+#ifndef G_DISABLE_CHECKS
-+ if (q == 0 || g_datalist_id_get_data (&priv->signal_signatures, q) == NULL)
-+ {
-+ g_warning ("Must add the signal '%s' with dbus_g_proxy_add_signal() prior to connecting to it\n", name);
-+ g_free (name);
-+ return;
-+ }
-+#endif
-+
-+ closure = g_cclosure_new (G_CALLBACK (handler), data, free_data_func);
-+
-+ g_signal_connect_closure_by_id (G_OBJECT (proxy),
-+ signals[RECEIVED],
-+ q,
-+ closure, FALSE);
-+
-+ g_free (name);
-+}
-+
-+/**
-+ * Disconnect all signal handlers from a proxy that match the given
-+ * criteria.
-+ *
-+ * @param proxy a proxy for a remote interface
-+ * @param signal_name the DBus signal name to disconnect
-+ * @param handler the handler to disconnect
-+ * @param data the data that was registered with handler
-+ */
-+void
-+dbus_g_proxy_disconnect_signal (DBusGProxy *proxy,
-+ const char *signal_name,
-+ GCallback handler,
-+ void *data)
-+{
-+ char *name;
-+ GQuark q;
-+ DBusGProxyPrivate *priv;
-+
-+ g_return_if_fail (DBUS_IS_G_PROXY (proxy));
-+ g_return_if_fail (!DBUS_G_PROXY_DESTROYED (proxy));
-+ g_return_if_fail (signal_name != NULL);
-+ g_return_if_fail (handler != NULL);
-+
-+ priv = DBUS_G_PROXY_GET_PRIVATE(proxy);
-+ name = create_signal_name (priv->interface, signal_name);
-+
-+ q = g_quark_try_string (name);
-+
-+ if (q != 0)
-+ {
-+ g_signal_handlers_disconnect_matched (G_OBJECT (proxy),
-+ G_SIGNAL_MATCH_DETAIL |
-+ G_SIGNAL_MATCH_FUNC |
-+ G_SIGNAL_MATCH_DATA,
-+ signals[RECEIVED],
-+ q,
-+ NULL,
-+ G_CALLBACK (handler), data);
-+ }
-+ else
-+ {
-+ g_warning ("Attempt to disconnect from signal '%s' which is not registered\n",
-+ name);
-+ }
-+
-+ g_free (name);
-+}
-+
-+/** @} End of DBusGLib public */
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+/**
-+ * @ingroup DBusGLibInternals
-+ * Unit test for GLib proxy functions
-+ * @returns #TRUE on success.
-+ */
-+gboolean
-+_dbus_g_proxy_test (void)
-+{
-+
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/glib/dbus-gsignature.c dbus-0.61/glib/dbus-gsignature.c
---- dbus-0.61.orig/glib/dbus-gsignature.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gsignature.c 2006-02-13 23:30:11.000000000 +0100
-@@ -0,0 +1,210 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gsignature.c Mapping from dbus type signatures to GType
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "config.h"
-+#include "dbus-gtest.h"
-+#include "dbus-gsignature.h"
-+#include "dbus-gvalue-utils.h"
-+#include <string.h>
-+#include <glib.h>
-+
-+#define MAP_BASIC(d_t, g_t) \
-+ case DBUS_TYPE_##d_t: \
-+ return G_TYPE_##g_t;
-+static GType
-+typecode_to_gtype (int type)
-+{
-+ switch (type)
-+ {
-+ MAP_BASIC (BOOLEAN, BOOLEAN);
-+ MAP_BASIC (BYTE, UCHAR);
-+ MAP_BASIC (INT16, INT);
-+ MAP_BASIC (INT32, INT);
-+ MAP_BASIC (UINT16, UINT);
-+ MAP_BASIC (UINT32, UINT);
-+ MAP_BASIC (INT64, INT64);
-+ MAP_BASIC (UINT64, UINT64);
-+ MAP_BASIC (DOUBLE, DOUBLE);
-+ MAP_BASIC (STRING, STRING);
-+ default:
-+ return G_TYPE_INVALID;
-+ }
-+}
-+#undef MAP_BASIC
-+
-+static gboolean
-+dbus_typecode_maps_to_basic (int typecode)
-+{
-+ return typecode_to_gtype (typecode) != G_TYPE_INVALID;
-+}
-+
-+GType
-+_dbus_gtype_from_basic_typecode (int typecode)
-+{
-+ g_assert (dbus_type_is_basic (typecode));
-+ g_assert (dbus_typecode_maps_to_basic (typecode));
-+ return typecode_to_gtype (typecode);
-+}
-+
-+static GType
-+signature_iter_to_g_type_dict (const DBusSignatureIter *subiter, gboolean is_client)
-+{
-+ DBusSignatureIter iter;
-+ GType key_gtype;
-+ GType value_gtype;
-+
-+ g_assert (dbus_signature_iter_get_current_type (subiter) == DBUS_TYPE_DICT_ENTRY);
-+
-+ dbus_signature_iter_recurse (subiter, &iter);
-+
-+ key_gtype = _dbus_gtype_from_signature_iter (&iter, is_client);
-+ if (key_gtype == G_TYPE_INVALID)
-+ return G_TYPE_INVALID;
-+
-+ dbus_signature_iter_next (&iter);
-+ value_gtype = _dbus_gtype_from_signature_iter (&iter, is_client);
-+ if (value_gtype == G_TYPE_INVALID)
-+ return G_TYPE_INVALID;
-+
-+ if (!_dbus_gtype_is_valid_hash_key (key_gtype)
-+ || !_dbus_gtype_is_valid_hash_value (value_gtype))
-+ /* Later we need to return DBUS_TYPE_G_VALUE */
-+ return G_TYPE_INVALID;
-+
-+ return dbus_g_type_get_map ("GHashTable", key_gtype, value_gtype);
-+}
-+
-+static GType
-+signature_iter_to_g_type_array (DBusSignatureIter *iter, gboolean is_client)
-+{
-+ GType elt_gtype;
-+
-+ elt_gtype = _dbus_gtype_from_signature_iter (iter, is_client);
-+ if (elt_gtype == G_TYPE_INVALID)
-+ return G_TYPE_INVALID;
-+
-+ if (elt_gtype == G_TYPE_OBJECT)
-+ return DBUS_TYPE_G_OBJECT_ARRAY;
-+ if (elt_gtype == G_TYPE_STRING)
-+ return G_TYPE_STRV;
-+ if (_dbus_g_type_is_fixed (elt_gtype))
-+ return dbus_g_type_get_collection ("GArray", elt_gtype);
-+ else if (g_type_is_a (elt_gtype, G_TYPE_OBJECT)
-+ || g_type_is_a (elt_gtype, G_TYPE_BOXED))
-+ return dbus_g_type_get_collection ("GPtrArray", elt_gtype);
-+
-+ /* Later we need to return DBUS_TYPE_G_VALUE */
-+ return G_TYPE_INVALID;
-+}
-+
-+static GType
-+signature_iter_to_g_type_struct (DBusSignatureIter *iter, gboolean is_client)
-+{
-+ GArray *types;
-+ GType ret;
-+ types = g_array_new (FALSE, FALSE, sizeof (GType));
-+ do
-+ {
-+ GType curtype;
-+ curtype = _dbus_gtype_from_signature_iter (iter, is_client);
-+ g_array_append_val (types, curtype);
-+ }
-+ while (dbus_signature_iter_next (iter));
-+
-+ ret = dbus_g_type_get_structv ("GValueArray", types->len, (GType*) types->data);
-+ g_array_free (types, TRUE);
-+ return ret;
-+}
-+
-+GType
-+_dbus_gtype_from_signature_iter (DBusSignatureIter *iter, gboolean is_client)
-+{
-+ int current_type;
-+
-+ current_type = dbus_signature_iter_get_current_type (iter);
-+ /* TODO: handle type 0? */
-+ if (dbus_typecode_maps_to_basic (current_type))
-+ return _dbus_gtype_from_basic_typecode (current_type);
-+ else if (current_type == DBUS_TYPE_OBJECT_PATH)
-+ return DBUS_TYPE_G_OBJECT_PATH;
-+ else
-+ {
-+ DBusSignatureIter subiter;
-+
-+ g_assert (dbus_type_is_container (current_type));
-+
-+ if (current_type == DBUS_TYPE_VARIANT)
-+ return G_TYPE_VALUE;
-+
-+ dbus_signature_iter_recurse (iter, &subiter);
-+
-+ if (current_type == DBUS_TYPE_ARRAY)
-+ {
-+ int elt_type = dbus_signature_iter_get_current_type (&subiter);
-+ if (elt_type == DBUS_TYPE_DICT_ENTRY)
-+ return signature_iter_to_g_type_dict (&subiter, is_client);
-+ else
-+ return signature_iter_to_g_type_array (&subiter, is_client);
-+ }
-+ else if (current_type == DBUS_TYPE_STRUCT)
-+ {
-+ return signature_iter_to_g_type_struct (&subiter, is_client);
-+ }
-+ else
-+ {
-+ g_assert_not_reached ();
-+ return G_TYPE_INVALID;
-+ }
-+ }
-+}
-+
-+GType
-+_dbus_gtype_from_signature (const char *signature, gboolean is_client)
-+{
-+ DBusSignatureIter iter;
-+
-+ dbus_signature_iter_init (&iter, signature);
-+
-+ return _dbus_gtype_from_signature_iter (&iter, is_client);
-+}
-+
-+GArray *
-+_dbus_gtypes_from_arg_signature (const char *argsig, gboolean is_client)
-+{
-+ GArray *ret;
-+ int current_type;
-+ DBusSignatureIter sigiter;
-+
-+ ret = g_array_new (FALSE, FALSE, sizeof (GType));
-+
-+ dbus_signature_iter_init (&sigiter, argsig);
-+ while ((current_type = dbus_signature_iter_get_current_type (&sigiter)) != DBUS_TYPE_INVALID)
-+ {
-+ GType curtype;
-+
-+ curtype = _dbus_gtype_from_signature_iter (&sigiter, is_client);
-+ g_array_append_val (ret, curtype);
-+ dbus_signature_iter_next (&sigiter);
-+ }
-+ return ret;
-+}
-diff -Naur dbus-0.61.orig/glib/dbus-gsignature.h dbus-0.61/glib/dbus-gsignature.h
---- dbus-0.61.orig/glib/dbus-gsignature.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gsignature.h 2005-08-04 17:49:30.000000000 +0200
-@@ -0,0 +1,19 @@
-+#ifndef DBUS_GOBJECT_SIGNATURE_H
-+#define DBUS_GOBJECT_SIGNATURE_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-signature.h>
-+#include <glib.h>
-+
-+GType _dbus_gtype_from_basic_typecode (int typecode);
-+
-+GType _dbus_gtype_from_signature (const char *signature,
-+ gboolean is_client);
-+
-+GType _dbus_gtype_from_signature_iter (DBusSignatureIter *sigiter,
-+ gboolean is_client);
-+
-+GArray * _dbus_gtypes_from_arg_signature (const char *signature,
-+ gboolean is_client);
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/dbus-gtest-main.c dbus-0.61/glib/dbus-gtest-main.c
---- dbus-0.61.orig/glib/dbus-gtest-main.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gtest-main.c 2004-08-10 05:07:01.000000000 +0200
-@@ -0,0 +1,51 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gtest-main.c Program to run all libdbus-glib tests
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <config.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+#include "dbus-gtest.h"
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <locale.h>
-+
-+int
-+main (int argc,
-+ char **argv)
-+{
-+ const char *test_data_dir;
-+
-+ setlocale(LC_ALL, "");
-+
-+
-+ if (argc > 1)
-+ test_data_dir = argv[1];
-+ else
-+ test_data_dir = NULL;
-+
-+ dbus_glib_internal_do_not_use_run_tests (test_data_dir);
-+
-+ return 0;
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/dbus-gtest.c dbus-0.61/glib/dbus-gtest.c
---- dbus-0.61.orig/glib/dbus-gtest.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gtest.c 2005-07-09 03:46:51.000000000 +0200
-@@ -0,0 +1,92 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-test.c Program to run all tests
-+ *
-+ * Copyright (C) 2002, 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "dbus-gtest.h"
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <glib.h>
-+
-+#ifdef DBUS_BUILD_TESTS
-+static void
-+die (const char *failure)
-+{
-+ fprintf (stderr, "Unit test failed: %s\n", failure);
-+ exit (1);
-+}
-+#endif /* DBUS_BUILD_TESTS */
-+
-+/**
-+ * An exported symbol to be run in order to execute
-+ * unit tests. Should not be used by
-+ * any app other than our test app, this symbol
-+ * won't exist in some builds of the library.
-+ * (with --enable-tests=no)
-+ *
-+ * @param test_data_dir the directory with test data (test/data normally)
-+ */
-+void
-+dbus_glib_internal_do_not_use_run_tests (const char *test_data_dir)
-+{
-+#ifdef DBUS_BUILD_TESTS
-+ if (test_data_dir == NULL)
-+ test_data_dir = g_getenv ("DBUS_TEST_DATA");
-+
-+ if (test_data_dir != NULL)
-+ printf ("Test data in %s\n", test_data_dir);
-+ else
-+ printf ("No test data!\n");
-+
-+ g_type_init ();
-+
-+ printf ("%s: running GValue util tests\n", "dbus-glib-test");
-+ if (!_dbus_gvalue_utils_test (test_data_dir))
-+ die ("gvalue utils");
-+
-+ printf ("%s: running GValue tests\n", "dbus-glib-test");
-+ if (!_dbus_gvalue_test (test_data_dir))
-+ die ("gvalue utils");
-+
-+ printf ("%s: running glib tests\n", "dbus-glib-test");
-+ if (!_dbus_glib_test (test_data_dir))
-+ die ("glib");
-+
-+ printf ("%s: running utils tests\n", "dbus-glib-test");
-+ if (!_dbus_gutils_test (test_data_dir))
-+ die ("gutils");
-+
-+ printf ("%s: running mainloop integration tests\n", "dbus-glib-test");
-+ if (!_dbus_gmain_test (test_data_dir))
-+ die ("gmain");
-+
-+ printf ("%s: running GObject tests\n", "dbus-glib-test");
-+ if (!_dbus_gobject_test (test_data_dir))
-+ die ("gobject");
-+
-+ printf ("%s: completed successfully\n", "dbus-glib-test");
-+#else
-+ printf ("Not compiled with unit tests, not running any\n");
-+#endif
-+}
-+
-+
-diff -Naur dbus-0.61.orig/glib/dbus-gtest.h dbus-0.61/glib/dbus-gtest.h
---- dbus-0.61.orig/glib/dbus-gtest.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gtest.h 2005-07-09 03:46:51.000000000 +0200
-@@ -0,0 +1,38 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gtest.h Declarations of test functions.
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_GLIB_TEST_H
-+#define DBUS_GLIB_TEST_H
-+
-+#include <dbus/dbus-glib.h>
-+
-+gboolean _dbus_gmain_test (const char *test_data_dir);
-+gboolean _dbus_gobject_test (const char *test_data_dir);
-+gboolean _dbus_gutils_test (const char *test_data_dir);
-+gboolean _dbus_glib_test (const char *test_data_dir);
-+gboolean _dbus_gvalue_test (const char *test_data_dir);
-+gboolean _dbus_gvalue_utils_test (const char *test_data_dir);
-+
-+void dbus_glib_internal_do_not_use_run_tests (const char *test_data_dir);
-+
-+#endif /* DBUS_GLIB_TEST_H */
-diff -Naur dbus-0.61.orig/glib/dbus-gthread.c dbus-0.61/glib/dbus-gthread.c
---- dbus-0.61.orig/glib/dbus-gthread.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gthread.c 2005-02-11 00:47:54.000000000 +0100
-@@ -0,0 +1,179 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gthread.c GThread integration
-+ *
-+ * Copyright (C) 2002 CodeFactory AB
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+/* #define G_DEBUG_LOCKS 1 */
-+
-+#include <glib.h>
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+
-+/** @addtogroup DBusGLibInternals
-+ * @{
-+ */
-+
-+static DBusMutex * dbus_gmutex_new (void);
-+static void dbus_gmutex_free (DBusMutex *mutex);
-+static dbus_bool_t dbus_gmutex_lock (DBusMutex *mutex);
-+static dbus_bool_t dbus_gmutex_unlock (DBusMutex *mutex);
-+
-+
-+static DBusCondVar* dbus_gcondvar_new (void);
-+static void dbus_gcondvar_free (DBusCondVar *cond);
-+static void dbus_gcondvar_wait (DBusCondVar *cond,
-+ DBusMutex *mutex);
-+static dbus_bool_t dbus_gcondvar_wait_timeout (DBusCondVar *cond,
-+ DBusMutex *mutex,
-+ int timeout_msec);
-+static void dbus_gcondvar_wake_one (DBusCondVar *cond);
-+static void dbus_gcondvar_wake_all (DBusCondVar *cond);
-+
-+
-+static const DBusThreadFunctions functions =
-+{
-+ DBUS_THREAD_FUNCTIONS_MUTEX_NEW_MASK |
-+ DBUS_THREAD_FUNCTIONS_MUTEX_FREE_MASK |
-+ DBUS_THREAD_FUNCTIONS_MUTEX_LOCK_MASK |
-+ DBUS_THREAD_FUNCTIONS_MUTEX_UNLOCK_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_NEW_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_FREE_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_TIMEOUT_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ONE_MASK|
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ALL_MASK,
-+ dbus_gmutex_new,
-+ dbus_gmutex_free,
-+ dbus_gmutex_lock,
-+ dbus_gmutex_unlock,
-+ dbus_gcondvar_new,
-+ dbus_gcondvar_free,
-+ dbus_gcondvar_wait,
-+ dbus_gcondvar_wait_timeout,
-+ dbus_gcondvar_wake_one,
-+ dbus_gcondvar_wake_all
-+};
-+
-+static DBusMutex *
-+dbus_gmutex_new (void)
-+{
-+ GMutex *mutex;
-+
-+ mutex = g_mutex_new ();
-+
-+ return (DBusMutex *)mutex;
-+}
-+
-+static void
-+dbus_gmutex_free (DBusMutex *mutex)
-+{
-+ g_mutex_free ((GMutex *)mutex);
-+}
-+
-+static dbus_bool_t
-+dbus_gmutex_lock (DBusMutex *mutex)
-+{
-+ g_mutex_lock ((GMutex *)mutex);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+dbus_gmutex_unlock (DBusMutex *mutex)
-+{
-+ g_mutex_unlock ((GMutex *)mutex);
-+
-+ return TRUE;
-+}
-+
-+static DBusCondVar*
-+dbus_gcondvar_new (void)
-+{
-+ return (DBusCondVar*)g_cond_new ();
-+}
-+
-+static void
-+dbus_gcondvar_free (DBusCondVar *cond)
-+{
-+ g_cond_free ((GCond *)cond);
-+}
-+
-+static void
-+dbus_gcondvar_wait (DBusCondVar *cond,
-+ DBusMutex *mutex)
-+{
-+ g_cond_wait ((GCond *)cond, (GMutex *)mutex);
-+}
-+
-+static dbus_bool_t
-+dbus_gcondvar_wait_timeout (DBusCondVar *cond,
-+ DBusMutex *mutex,
-+ int timeout_msec)
-+{
-+ GTimeVal now;
-+
-+ g_get_current_time (&now);
-+
-+ now.tv_sec += timeout_msec / 1000;
-+ now.tv_usec += (timeout_msec % 1000) * 1000;
-+ if (now.tv_usec > G_USEC_PER_SEC)
-+ {
-+ now.tv_sec += 1;
-+ now.tv_usec -= G_USEC_PER_SEC;
-+ }
-+
-+ return g_cond_timed_wait ((GCond *)cond, (GMutex *)mutex, &now);
-+}
-+
-+static void
-+dbus_gcondvar_wake_one (DBusCondVar *cond)
-+{
-+ g_cond_signal ((GCond *)cond);
-+}
-+
-+static void
-+dbus_gcondvar_wake_all (DBusCondVar *cond)
-+{
-+ g_cond_broadcast ((GCond *)cond);
-+}
-+
-+/** @} End of internals */
-+
-+/** @addtogroup DBusGLib
-+ * @{
-+ */
-+/**
-+ * Initializes the D-BUS thread system to use
-+ * GLib threads. This function may only be called
-+ * once and must be called prior to calling any
-+ * other function in the D-BUS API.
-+ */
-+void
-+dbus_g_thread_init (void)
-+{
-+ if (!g_thread_supported ())
-+ g_error ("g_thread_init() must be called before dbus_threads_init()");
-+
-+ dbus_threads_init (&functions);
-+}
-+
-+/** @} end of public API */
-diff -Naur dbus-0.61.orig/glib/dbus-gtype-specialized.c dbus-0.61/glib/dbus-gtype-specialized.c
---- dbus-0.61.orig/glib/dbus-gtype-specialized.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gtype-specialized.c 2006-02-13 23:30:11.000000000 +0100
-@@ -0,0 +1,773 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gtype-specialized.c: Non-DBus-specific functions for specialized GTypes
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "dbus-gtype-specialized.h"
-+#include <glib.h>
-+#include <string.h>
-+#include <gobject/gvaluecollector.h>
-+
-+typedef enum {
-+ DBUS_G_SPECTYPE_COLLECTION,
-+ DBUS_G_SPECTYPE_MAP,
-+ DBUS_G_SPECTYPE_STRUCT
-+} DBusGTypeSpecializedType;
-+
-+typedef struct {
-+ DBusGTypeSpecializedType type;
-+ const DBusGTypeSpecializedVtable *vtable;
-+} DBusGTypeSpecializedContainer;
-+
-+typedef struct {
-+ guint num_types;
-+ GType *types;
-+ const DBusGTypeSpecializedContainer *klass;
-+} DBusGTypeSpecializedData;
-+
-+static GHashTable /* char * -> data* */ *specialized_containers;
-+
-+static GQuark
-+specialized_type_data_quark ()
-+{
-+ static GQuark quark;
-+ if (!quark)
-+ quark = g_quark_from_static_string ("DBusGTypeSpecializedData");
-+
-+ return quark;
-+}
-+
-+void
-+dbus_g_type_specialized_init (void)
-+{
-+ specialized_containers = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-+}
-+
-+static gboolean
-+specialized_types_is_initialized (void)
-+{
-+ return specialized_containers != NULL;
-+}
-+
-+static DBusGTypeSpecializedData *
-+lookup_specialization_data (GType type)
-+{
-+ return g_type_get_qdata (type, specialized_type_data_quark ());
-+}
-+
-+
-+/* Copied from gboxed.c */
-+static void
-+proxy_value_init (GValue *value)
-+{
-+ value->data[0].v_pointer = NULL;
-+}
-+
-+/* Adapted from gboxed.c */
-+static void
-+proxy_value_free (GValue *value)
-+{
-+ if (value->data[0].v_pointer && !(value->data[1].v_uint & G_VALUE_NOCOPY_CONTENTS))
-+ {
-+ DBusGTypeSpecializedData *data;
-+ GType type;
-+
-+ type = G_VALUE_TYPE (value);
-+ data = lookup_specialization_data (type);
-+ g_assert (data != NULL);
-+
-+ if (data->klass->vtable->free_func)
-+ {
-+ data->klass->vtable->free_func (type, value->data[0].v_pointer);
-+ }
-+ else
-+ {
-+ g_assert (data->klass->vtable->simple_free_func != NULL);
-+ data->klass->vtable->simple_free_func (value->data[0].v_pointer);
-+ }
-+ }
-+}
-+
-+/* Adapted from gboxed.c */
-+static void
-+proxy_value_copy (const GValue *src_value,
-+ GValue *dest_value)
-+{
-+ if (src_value->data[0].v_pointer)
-+ {
-+ DBusGTypeSpecializedData *data;
-+ GType type;
-+ type = G_VALUE_TYPE (src_value);
-+ data = lookup_specialization_data (type);
-+ g_assert (data != NULL);
-+ dest_value->data[0].v_pointer = data->klass->vtable->copy_func (type, src_value->data[0].v_pointer);
-+ }
-+ else
-+ dest_value->data[0].v_pointer = src_value->data[0].v_pointer;
-+}
-+
-+/* Copied from gboxed.c */
-+static gpointer
-+proxy_value_peek_pointer (const GValue *value)
-+{
-+ return value->data[0].v_pointer;
-+}
-+
-+/* Adapted from gboxed.c */
-+static gchar*
-+proxy_collect_value (GValue *value,
-+ guint n_collect_values,
-+ GTypeCValue *collect_values,
-+ guint collect_flags)
-+{
-+ DBusGTypeSpecializedData *data;
-+ GType type;
-+
-+ type = G_VALUE_TYPE (value);
-+ data = lookup_specialization_data (type);
-+
-+ if (!collect_values[0].v_pointer)
-+ value->data[0].v_pointer = NULL;
-+ else
-+ {
-+ if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
-+ {
-+ value->data[0].v_pointer = collect_values[0].v_pointer;
-+ value->data[1].v_uint = G_VALUE_NOCOPY_CONTENTS;
-+ }
-+ else
-+ {
-+ value->data[0].v_pointer = data->klass->vtable->copy_func (type, collect_values[0].v_pointer);
-+ }
-+ }
-+
-+ return NULL;
-+}
-+
-+/* Adapted from gboxed.c */
-+static gchar*
-+proxy_lcopy_value (const GValue *value,
-+ guint n_collect_values,
-+ GTypeCValue *collect_values,
-+ guint collect_flags)
-+{
-+ gpointer *boxed_p = collect_values[0].v_pointer;
-+
-+ if (!boxed_p)
-+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
-+
-+ if (!value->data[0].v_pointer)
-+ *boxed_p = NULL;
-+ else if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
-+ *boxed_p = value->data[0].v_pointer;
-+ else
-+ {
-+ DBusGTypeSpecializedData *data;
-+ GType type;
-+
-+ type = G_VALUE_TYPE (value);
-+ data = lookup_specialization_data (type);
-+
-+ *boxed_p = data->klass->vtable->copy_func (type, value->data[0].v_pointer);
-+ }
-+
-+ return NULL;
-+}
-+
-+static char *
-+build_specialization_name (const char *prefix, guint num_types, GType *types)
-+{
-+ GString *fullname;
-+ guint i;
-+
-+ fullname = g_string_new (prefix);
-+
-+ g_string_append_c (fullname, '_');
-+ for (i=0; i < num_types; i++)
-+ {
-+ if (i!=0)
-+ g_string_append_c (fullname, '+');
-+ g_string_append (fullname, g_type_name (types[i]));
-+ }
-+ g_string_append_c (fullname, '_');
-+ return g_string_free (fullname, FALSE);
-+}
-+
-+static void
-+register_container (const char *name,
-+ DBusGTypeSpecializedType type,
-+ const DBusGTypeSpecializedVtable *vtable)
-+{
-+ DBusGTypeSpecializedContainer *klass;
-+
-+ klass = g_new0 (DBusGTypeSpecializedContainer, 1);
-+ klass->type = type;
-+ klass->vtable = vtable;
-+
-+ g_hash_table_insert (specialized_containers, g_strdup (name), klass);
-+}
-+
-+void
-+dbus_g_type_register_collection (const char *name,
-+ const DBusGTypeSpecializedCollectionVtable *vtable,
-+ guint flags)
-+{
-+ g_return_if_fail (specialized_types_is_initialized ());
-+ register_container (name, DBUS_G_SPECTYPE_COLLECTION, (const DBusGTypeSpecializedVtable*) vtable);
-+}
-+
-+void
-+dbus_g_type_register_map (const char *name,
-+ const DBusGTypeSpecializedMapVtable *vtable,
-+ guint flags)
-+{
-+ g_return_if_fail (specialized_types_is_initialized ());
-+ register_container (name, DBUS_G_SPECTYPE_MAP, (const DBusGTypeSpecializedVtable*) vtable);
-+}
-+
-+void
-+dbus_g_type_register_struct (const char *name,
-+ const DBusGTypeSpecializedStructVtable *vtable,
-+ guint flags)
-+{
-+ g_return_if_fail (specialized_types_is_initialized ());
-+ register_container (name, DBUS_G_SPECTYPE_STRUCT, (const DBusGTypeSpecializedVtable*) vtable);
-+}
-+
-+
-+const DBusGTypeSpecializedMapVtable* dbus_g_type_map_peek_vtable (GType map_type)
-+{
-+ DBusGTypeSpecializedData *data;
-+ g_return_val_if_fail (dbus_g_type_is_map(map_type), NULL);
-+
-+ data = lookup_specialization_data (map_type);
-+ g_assert (data != NULL);
-+
-+ return (DBusGTypeSpecializedMapVtable *)(data->klass->vtable);
-+}
-+
-+const DBusGTypeSpecializedCollectionVtable* dbus_g_type_collection_peek_vtable (GType collection_type)
-+{
-+ DBusGTypeSpecializedData *data;
-+ g_return_val_if_fail (dbus_g_type_is_collection(collection_type), NULL);
-+
-+ data = lookup_specialization_data (collection_type);
-+ g_assert (data != NULL);
-+
-+ return (DBusGTypeSpecializedCollectionVtable *)(data->klass->vtable);
-+}
-+
-+const DBusGTypeSpecializedStructVtable* dbus_g_type_struct_peek_vtable (GType struct_type)
-+{
-+ DBusGTypeSpecializedData *data;
-+ g_return_val_if_fail (dbus_g_type_is_struct (struct_type), NULL);
-+
-+ data = lookup_specialization_data (struct_type);
-+ g_assert (data != NULL);
-+
-+ return (DBusGTypeSpecializedStructVtable *)(data->klass->vtable);
-+}
-+
-+static GType
-+register_specialized_instance (const DBusGTypeSpecializedContainer *klass,
-+ char *name,
-+ guint num_types,
-+ GType *types)
-+{
-+ GType ret;
-+
-+ static const GTypeValueTable vtable =
-+ {
-+ proxy_value_init,
-+ proxy_value_free,
-+ proxy_value_copy,
-+ proxy_value_peek_pointer,
-+ "p",
-+ proxy_collect_value,
-+ "p",
-+ proxy_lcopy_value,
-+ };
-+ static const GTypeInfo derived_info =
-+ {
-+ 0, /* class_size */
-+ NULL, /* base_init */
-+ NULL, /* base_finalize */
-+ NULL, /* class_init */
-+ NULL, /* class_finalize */
-+ NULL, /* class_data */
-+ 0, /* instance_size */
-+ 0, /* n_preallocs */
-+ NULL, /* instance_init */
-+ &vtable, /* value_table */
-+ };
-+
-+ ret = g_type_register_static (G_TYPE_BOXED, name, &derived_info, 0);
-+ /* install proxy functions upon successfull registration */
-+ if (ret != G_TYPE_INVALID)
-+ {
-+ DBusGTypeSpecializedData *data;
-+ data = g_new0 (DBusGTypeSpecializedData, 1);
-+ data->num_types = num_types;
-+ data->types = g_memdup (types, sizeof (GType) * num_types);
-+ data->klass = klass;
-+ g_type_set_qdata (ret, specialized_type_data_quark (), data);
-+ }
-+
-+ return ret;
-+}
-+
-+static GType
-+lookup_or_register_specialized (const char *container,
-+ guint num_types,
-+ GType *types)
-+{
-+ GType ret;
-+ char *name;
-+ const DBusGTypeSpecializedContainer *klass;
-+
-+ g_return_val_if_fail (specialized_types_is_initialized (), G_TYPE_INVALID);
-+
-+ klass = g_hash_table_lookup (specialized_containers, container);
-+ g_return_val_if_fail (klass != NULL, G_TYPE_INVALID);
-+
-+ name = build_specialization_name (container, num_types, types);
-+ ret = g_type_from_name (name);
-+ if (ret == G_TYPE_INVALID)
-+ {
-+ /* Take ownership of name */
-+ ret = register_specialized_instance (klass, name,
-+ num_types,
-+ types);
-+ }
-+ else
-+ g_free (name);
-+ return ret;
-+}
-+
-+GType
-+dbus_g_type_get_collection (const char *container,
-+ GType specialization)
-+{
-+ return lookup_or_register_specialized (container, 1, &specialization);
-+}
-+
-+GType
-+dbus_g_type_get_map (const char *container,
-+ GType key_specialization,
-+ GType value_specialization)
-+{
-+ GType types[2] = {key_specialization, value_specialization};
-+ return lookup_or_register_specialized (container, 2, types);
-+}
-+
-+GType
-+dbus_g_type_get_structv (const char *container,
-+ guint num_items,
-+ GType *types)
-+{
-+ return lookup_or_register_specialized (container, num_items, types);
-+}
-+
-+GType
-+dbus_g_type_get_struct (const char *container,
-+ GType first_type,
-+ ...)
-+{
-+ GArray *types;
-+ GType curtype;
-+ va_list args;
-+ va_start (args, first_type);
-+
-+ types = g_array_new (FALSE, FALSE, sizeof (GType));
-+ curtype = first_type;
-+ while (curtype != G_TYPE_INVALID)
-+ {
-+ g_array_append_val (types, curtype);
-+ curtype = va_arg (args, GType);
-+ }
-+ va_end (args);
-+ return lookup_or_register_specialized (container, types->len, (GType*)types->data);
-+
-+}
-+
-+
-+
-+gboolean
-+dbus_g_type_is_collection (GType gtype)
-+{
-+ DBusGTypeSpecializedData *data;
-+ data = lookup_specialization_data (gtype);
-+ if (data == NULL)
-+ return FALSE;
-+ return data->klass->type == DBUS_G_SPECTYPE_COLLECTION;
-+}
-+
-+gboolean
-+dbus_g_type_is_map (GType gtype)
-+{
-+ DBusGTypeSpecializedData *data;
-+ data = lookup_specialization_data (gtype);
-+ if (data == NULL)
-+ return FALSE;
-+ return data->klass->type == DBUS_G_SPECTYPE_MAP;
-+}
-+
-+gboolean
-+dbus_g_type_is_struct (GType gtype)
-+{
-+ DBusGTypeSpecializedData *data;
-+ data = lookup_specialization_data (gtype);
-+ if (data == NULL)
-+ return FALSE;
-+ return data->klass->type == DBUS_G_SPECTYPE_STRUCT;
-+}
-+
-+
-+static GType
-+get_specialization_index (GType gtype, guint i)
-+{
-+ DBusGTypeSpecializedData *data;
-+
-+ data = lookup_specialization_data (gtype);
-+ if (i < data->num_types)
-+ return data->types[i];
-+ else
-+ return G_TYPE_INVALID;
-+}
-+
-+GType
-+dbus_g_type_get_collection_specialization (GType gtype)
-+{
-+ g_return_val_if_fail (dbus_g_type_is_collection (gtype), G_TYPE_INVALID);
-+ return get_specialization_index (gtype, 0);
-+}
-+
-+GType
-+dbus_g_type_get_map_key_specialization (GType gtype)
-+{
-+ g_return_val_if_fail (dbus_g_type_is_map (gtype), G_TYPE_INVALID);
-+ return get_specialization_index (gtype, 0);
-+}
-+
-+GType
-+dbus_g_type_get_map_value_specialization (GType gtype)
-+{
-+ g_return_val_if_fail (dbus_g_type_is_map (gtype), G_TYPE_INVALID);
-+ return get_specialization_index (gtype, 1);
-+}
-+
-+GType
-+dbus_g_type_get_struct_member_type (GType gtype, guint index)
-+{
-+ g_return_val_if_fail (dbus_g_type_is_struct (gtype), G_TYPE_INVALID);
-+ return get_specialization_index (gtype, index);
-+}
-+
-+guint
-+dbus_g_type_get_struct_size (GType gtype)
-+{
-+ DBusGTypeSpecializedData *data;
-+ g_return_val_if_fail (dbus_g_type_is_struct (gtype), G_TYPE_INVALID);
-+
-+ data = lookup_specialization_data (gtype);
-+ return data->num_types;
-+}
-+
-+
-+
-+gpointer
-+dbus_g_type_specialized_construct (GType type)
-+{
-+ DBusGTypeSpecializedData *data;
-+ g_return_val_if_fail (specialized_types_is_initialized (), FALSE);
-+
-+ data = lookup_specialization_data (type);
-+ g_return_val_if_fail (data != NULL, FALSE);
-+
-+ return data->klass->vtable->constructor (type);
-+}
-+
-+gboolean
-+dbus_g_type_collection_get_fixed (GValue *value,
-+ gpointer *data_ret,
-+ guint *len_ret)
-+{
-+ DBusGTypeSpecializedData *data;
-+ GType gtype;
-+
-+ g_return_val_if_fail (specialized_types_is_initialized (), FALSE);
-+ g_return_val_if_fail (G_VALUE_HOLDS_BOXED (value), FALSE);
-+
-+ gtype = G_VALUE_TYPE (value);
-+ data = lookup_specialization_data (gtype);
-+ g_return_val_if_fail (data != NULL, FALSE);
-+
-+ return ((DBusGTypeSpecializedCollectionVtable *) (data->klass->vtable))->fixed_accessor (gtype,
-+ g_value_get_boxed (value),
-+ data_ret, len_ret);
-+}
-+
-+void
-+dbus_g_type_collection_value_iterate (const GValue *value,
-+ DBusGTypeSpecializedCollectionIterator iterator,
-+ gpointer user_data)
-+{
-+ DBusGTypeSpecializedData *data;
-+ GType gtype;
-+
-+ g_return_if_fail (specialized_types_is_initialized ());
-+ g_return_if_fail (G_VALUE_HOLDS_BOXED (value));
-+
-+ gtype = G_VALUE_TYPE (value);
-+ data = lookup_specialization_data (gtype);
-+ g_return_if_fail (data != NULL);
-+
-+ ((DBusGTypeSpecializedCollectionVtable *) data->klass->vtable)->iterator (gtype,
-+ g_value_get_boxed (value),
-+ iterator, user_data);
-+}
-+
-+typedef struct {
-+ GValue *val;
-+ GType specialization_type;
-+ DBusGTypeSpecializedData *specdata;
-+} DBusGTypeSpecializedAppendContextReal;
-+
-+void
-+dbus_g_type_specialized_init_append (GValue *value, DBusGTypeSpecializedAppendContext *ctx)
-+{
-+ DBusGTypeSpecializedAppendContextReal *realctx = (DBusGTypeSpecializedAppendContextReal *) ctx;
-+ GType gtype;
-+ DBusGTypeSpecializedData *specdata;
-+
-+ g_return_if_fail (specialized_types_is_initialized ());
-+ g_return_if_fail (G_VALUE_HOLDS_BOXED (value));
-+ gtype = G_VALUE_TYPE (value);
-+ specdata = lookup_specialization_data (gtype);
-+ g_return_if_fail (specdata != NULL);
-+ g_return_if_fail (specdata->num_types != 0);
-+
-+ realctx->val = value;
-+ realctx->specialization_type = specdata->types[0];
-+ realctx->specdata = specdata;
-+}
-+
-+void
-+dbus_g_type_specialized_collection_append (DBusGTypeSpecializedAppendContext *ctx,
-+ GValue *elt)
-+{
-+ DBusGTypeSpecializedAppendContextReal *realctx = (DBusGTypeSpecializedAppendContextReal *) ctx;
-+ ((DBusGTypeSpecializedCollectionVtable *) realctx->specdata->klass->vtable)->append_func (ctx, elt);
-+}
-+
-+void
-+dbus_g_type_specialized_collection_end_append (DBusGTypeSpecializedAppendContext *ctx)
-+{
-+ DBusGTypeSpecializedAppendContextReal *realctx = (DBusGTypeSpecializedAppendContextReal *) ctx;
-+ if (((DBusGTypeSpecializedCollectionVtable *) realctx->specdata->klass->vtable)->end_append_func != NULL)
-+ ((DBusGTypeSpecializedCollectionVtable *) realctx->specdata->klass->vtable)->end_append_func (ctx);
-+}
-+
-+void
-+dbus_g_type_specialized_map_append (DBusGTypeSpecializedAppendContext *ctx,
-+ GValue *key,
-+ GValue *val)
-+{
-+ DBusGTypeSpecializedAppendContextReal *realctx = (DBusGTypeSpecializedAppendContextReal *) ctx;
-+ ((DBusGTypeSpecializedMapVtable *) realctx->specdata->klass->vtable)->append_func (ctx, key, val);
-+}
-+
-+void
-+dbus_g_type_map_value_iterate (const GValue *value,
-+ DBusGTypeSpecializedMapIterator iterator,
-+ gpointer user_data)
-+{
-+ DBusGTypeSpecializedData *data;
-+ GType gtype;
-+
-+ g_return_if_fail (specialized_types_is_initialized ());
-+ g_return_if_fail (G_VALUE_HOLDS_BOXED (value));
-+
-+ gtype = G_VALUE_TYPE (value);
-+ data = lookup_specialization_data (gtype);
-+ g_return_if_fail (data != NULL);
-+
-+ ((DBusGTypeSpecializedMapVtable *) data->klass->vtable)->iterator (gtype,
-+ g_value_get_boxed (value),
-+ iterator, user_data);
-+}
-+
-+gboolean
-+dbus_g_type_struct_get_member (const GValue *value,
-+ guint index,
-+ GValue *dest)
-+{
-+ DBusGTypeSpecializedData *data;
-+ GType gtype;
-+
-+ g_return_val_if_fail (specialized_types_is_initialized (), FALSE);
-+ g_return_val_if_fail (G_VALUE_HOLDS_BOXED (value), FALSE);
-+
-+ gtype = G_VALUE_TYPE (value);
-+ data = lookup_specialization_data (gtype);
-+ g_return_val_if_fail (data != NULL, FALSE);
-+
-+ return ((DBusGTypeSpecializedStructVtable *) (data->klass->vtable))->get_member(gtype,
-+ g_value_get_boxed (value),
-+ index, dest);
-+}
-+
-+gboolean
-+dbus_g_type_struct_set_member (GValue *value,
-+ guint index,
-+ const GValue *src)
-+{
-+ DBusGTypeSpecializedData *data;
-+ GType gtype;
-+
-+ g_return_val_if_fail (specialized_types_is_initialized (), FALSE);
-+ g_return_val_if_fail (G_VALUE_HOLDS_BOXED (value), FALSE);
-+
-+ gtype = G_VALUE_TYPE (value);
-+ data = lookup_specialization_data (gtype);
-+ g_return_val_if_fail (data != NULL, FALSE);
-+
-+ return ((DBusGTypeSpecializedStructVtable *) (data->klass->vtable))->set_member(gtype,
-+ g_value_get_boxed (value),
-+ index, src);
-+}
-+
-+/**
-+ * dbus_g_type_struct_get:
-+ * @value: a GValue containing a DBusGTypeStruct type
-+ * @member: struct member to get
-+ * @...: location in which to return the value of this member,
-+ * followed optionally by more member/return locations pairs, followed by
-+ * by G_MAXUINT
-+ *
-+ * Collects the selected values of this struct into the return locations
-+ * provided.
-+ *
-+ * Returns: FALSE on failure
-+ */
-+
-+gboolean
-+dbus_g_type_struct_get (const GValue *value,
-+ guint first_member,
-+ ...)
-+{
-+ va_list var_args;
-+ GType type;
-+ guint size,i;
-+ gchar *error;
-+ GValue val = {0,};
-+
-+ g_return_val_if_fail (dbus_g_type_is_struct (G_VALUE_TYPE (value)), FALSE);
-+
-+ va_start (var_args, first_member);
-+ size = dbus_g_type_get_struct_size (G_VALUE_TYPE (value));
-+ i = first_member;
-+ while (i != G_MAXUINT)
-+ {
-+ if (i >= size)
-+ goto error;
-+
-+ type = dbus_g_type_get_struct_member_type (G_VALUE_TYPE (value),i);
-+
-+ g_value_init (&val, type);
-+ dbus_g_type_struct_get_member (value, i, &val);
-+
-+ G_VALUE_LCOPY (&val, var_args, 0, &error);
-+ if (error)
-+ {
-+ g_warning ("%s, %s", G_STRFUNC, error);
-+ g_free (error);
-+ g_value_unset (&val);
-+ goto error;
-+ }
-+ g_value_unset (&val);
-+ i = va_arg (var_args, guint);
-+ }
-+ va_end (var_args);
-+ return TRUE;
-+error:
-+ va_end (var_args);
-+ return FALSE;
-+}
-+
-+/**
-+ * dbus_g_type_struct_set:
-+ * @value: a GValue containing a DBusGTypeStruct type
-+ * @member: struct member to set
-+ * @...: value for the first member, followed optionally by
-+ * more member/value pairs, followed by G_MAXUINT
-+ *
-+ * Sets the selected members of the struct in @value.
-+ *
-+ * Returns: FALSE on failure
-+ */
-+
-+gboolean
-+dbus_g_type_struct_set (GValue *value,
-+ guint first_member,
-+ ...)
-+{
-+ va_list var_args;
-+ GType type;
-+ guint size,i;
-+ gchar *error;
-+ GValue val = {0,};
-+
-+ g_return_val_if_fail (dbus_g_type_is_struct (G_VALUE_TYPE (value)), FALSE);
-+
-+ va_start (var_args, first_member);
-+ size = dbus_g_type_get_struct_size (G_VALUE_TYPE (value));
-+ i = first_member;
-+ while (i != G_MAXUINT)
-+ {
-+ if (i >= size)
-+ goto error;
-+
-+ type = dbus_g_type_get_struct_member_type (G_VALUE_TYPE (value),i);
-+
-+ g_value_init (&val, type);
-+
-+ G_VALUE_COLLECT (&val, var_args, 0, &error);
-+ if (error)
-+ {
-+ g_warning ("%s, %s", G_STRFUNC, error);
-+ g_free (error);
-+ g_value_unset (&val);
-+ goto error;
-+ }
-+
-+ dbus_g_type_struct_set_member (value, i, &val);
-+
-+ g_value_unset (&val);
-+ i = va_arg (var_args, guint);
-+ }
-+ va_end (var_args);
-+ return TRUE;
-+error:
-+ va_end (var_args);
-+ return FALSE;
-+}
-+
-diff -Naur dbus-0.61.orig/glib/dbus-gtype-specialized.h dbus-0.61/glib/dbus-gtype-specialized.h
---- dbus-0.61.orig/glib/dbus-gtype-specialized.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gtype-specialized.h 2006-02-13 23:30:11.000000000 +0100
-@@ -0,0 +1,176 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gtype-specialized.h: Non-DBus-specific functions for specialized GTypes
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_GOBJECT_TYPE_SPECIALIZED_H
-+#define DBUS_GOBJECT_TYPE_SPECIALIZED_H
-+
-+#include <glib.h>
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+GType dbus_g_type_get_collection (const char *container,
-+ GType specialization);
-+GType dbus_g_type_get_map (const char *container,
-+ GType key_specialization,
-+ GType value_specialization);
-+GType dbus_g_type_get_structv (const char *container,
-+ guint num_items,
-+ GType *types);
-+GType dbus_g_type_get_struct (const char *container,
-+ GType first_type,
-+ ...);
-+gboolean dbus_g_type_is_collection (GType gtype);
-+gboolean dbus_g_type_is_map (GType gtype);
-+gboolean dbus_g_type_is_struct (GType gtype);
-+GType dbus_g_type_get_collection_specialization (GType gtype);
-+GType dbus_g_type_get_map_key_specialization (GType gtype);
-+GType dbus_g_type_get_map_value_specialization (GType gtype);
-+GType dbus_g_type_get_struct_member_type (GType gtype,
-+ guint index);
-+guint dbus_g_type_get_struct_size (GType gtype);
-+
-+typedef void (*DBusGTypeSpecializedCollectionIterator) (const GValue *val,
-+ gpointer user_data);
-+typedef void (*DBusGTypeSpecializedMapIterator) (const GValue *key_val,
-+ const GValue *value_val,
-+ gpointer user_data);
-+
-+gpointer dbus_g_type_specialized_construct (GType type);
-+
-+typedef struct {
-+ /* public */
-+ GValue *val;
-+ GType specialization_type;
-+ /* padding */
-+ gpointer b;
-+ guint c;
-+ gpointer d;
-+} DBusGTypeSpecializedAppendContext;
-+
-+void dbus_g_type_specialized_init_append (GValue *val, DBusGTypeSpecializedAppendContext *ctx);
-+
-+void dbus_g_type_specialized_collection_append (DBusGTypeSpecializedAppendContext *ctx, GValue *elt);
-+
-+void dbus_g_type_specialized_collection_end_append (DBusGTypeSpecializedAppendContext *ctx);
-+
-+void dbus_g_type_specialized_map_append (DBusGTypeSpecializedAppendContext *ctx,
-+ GValue *key,
-+ GValue *val);
-+
-+
-+gboolean dbus_g_type_collection_get_fixed (GValue *value,
-+ gpointer *data,
-+ guint *len);
-+
-+void dbus_g_type_collection_value_iterate (const GValue *value,
-+ DBusGTypeSpecializedCollectionIterator iterator,
-+ gpointer user_data);
-+
-+void dbus_g_type_map_value_iterate (const GValue *value,
-+ DBusGTypeSpecializedMapIterator iterator,
-+ gpointer user_data);
-+
-+gboolean dbus_g_type_struct_get_member (const GValue *value,
-+ guint index,
-+ GValue *dest);
-+gboolean dbus_g_type_struct_set_member (GValue *value,
-+ guint index,
-+ const GValue *src);
-+
-+gboolean dbus_g_type_struct_get (const GValue *value,
-+ guint member,
-+ ...);
-+
-+gboolean dbus_g_type_struct_set (GValue *value,
-+ guint member,
-+ ...);
-+
-+typedef gpointer (*DBusGTypeSpecializedConstructor) (GType type);
-+typedef void (*DBusGTypeSpecializedFreeFunc) (GType type, gpointer val);
-+typedef gpointer (*DBusGTypeSpecializedCopyFunc) (GType type, gpointer src);
-+
-+typedef struct {
-+ DBusGTypeSpecializedConstructor constructor;
-+ DBusGTypeSpecializedFreeFunc free_func;
-+ DBusGTypeSpecializedCopyFunc copy_func;
-+ GDestroyNotify simple_free_func; /* for type-independent freeing if possible */
-+ gpointer padding2;
-+ gpointer padding3;
-+} DBusGTypeSpecializedVtable;
-+
-+typedef gboolean (*DBusGTypeSpecializedCollectionFixedAccessorFunc) (GType type, gpointer instance, gpointer *values, guint *len);
-+typedef void (*DBusGTypeSpecializedCollectionIteratorFunc) (GType type, gpointer instance, DBusGTypeSpecializedCollectionIterator iterator, gpointer user_data);
-+typedef void (*DBusGTypeSpecializedCollectionAppendFunc) (DBusGTypeSpecializedAppendContext *ctx, GValue *val);
-+typedef void (*DBusGTypeSpecializedCollectionEndAppendFunc) (DBusGTypeSpecializedAppendContext *ctx);
-+
-+typedef struct {
-+ DBusGTypeSpecializedVtable base_vtable;
-+ DBusGTypeSpecializedCollectionFixedAccessorFunc fixed_accessor;
-+ DBusGTypeSpecializedCollectionIteratorFunc iterator;
-+ DBusGTypeSpecializedCollectionAppendFunc append_func;
-+ DBusGTypeSpecializedCollectionEndAppendFunc end_append_func;
-+} DBusGTypeSpecializedCollectionVtable;
-+
-+typedef void (*DBusGTypeSpecializedMapIteratorFunc) (GType type, gpointer instance, DBusGTypeSpecializedMapIterator iterator, gpointer user_data);
-+typedef void (*DBusGTypeSpecializedMapAppendFunc) (DBusGTypeSpecializedAppendContext *ctx, GValue *key, GValue *val);
-+
-+typedef struct {
-+ DBusGTypeSpecializedVtable base_vtable;
-+ DBusGTypeSpecializedMapIteratorFunc iterator;
-+ DBusGTypeSpecializedMapAppendFunc append_func;
-+} DBusGTypeSpecializedMapVtable;
-+
-+typedef gboolean (*DBusGTypeSpecializedStructGetMember) (GType type, gpointer instance, guint member, GValue *ret_value);
-+typedef gboolean (*DBusGTypeSpecializedStructSetMember) (GType type, gpointer instance, guint member, const GValue *new_value);
-+
-+typedef struct {
-+ DBusGTypeSpecializedVtable base_vtable;
-+ DBusGTypeSpecializedStructGetMember get_member;
-+ DBusGTypeSpecializedStructSetMember set_member;
-+} DBusGTypeSpecializedStructVtable;
-+
-+void dbus_g_type_specialized_init (void);
-+
-+void dbus_g_type_register_collection (const char *name,
-+ const DBusGTypeSpecializedCollectionVtable *vtable,
-+ guint flags);
-+
-+void dbus_g_type_register_map (const char *name,
-+ const DBusGTypeSpecializedMapVtable *vtable,
-+ guint flags);
-+const DBusGTypeSpecializedMapVtable* dbus_g_type_map_peek_vtable (GType map_type);
-+const DBusGTypeSpecializedCollectionVtable* dbus_g_type_collection_peek_vtable (GType collection_type);
-+
-+void dbus_g_type_register_struct (const char *name,
-+ const DBusGTypeSpecializedStructVtable *vtable,
-+ guint flags);
-+
-+const DBusGTypeSpecializedMapVtable* dbus_g_type_map_peek_vtable (GType map_type);
-+const DBusGTypeSpecializedCollectionVtable* dbus_g_type_collection_peek_vtable (GType collection_type);
-+
-+const DBusGTypeSpecializedStructVtable* dbus_g_type_struct_peek_vtable (GType struct_type);
-+
-+G_END_DECLS
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/dbus-gutils.c dbus-0.61/glib/dbus-gutils.c
---- dbus-0.61.orig/glib/dbus-gutils.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gutils.c 2005-02-27 18:38:12.000000000 +0100
-@@ -0,0 +1,130 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gutils.c Utils shared between convenience lib and installed lib
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "dbus-gutils.h"
-+#include "dbus-gtest.h"
-+#include <string.h>
-+
-+#ifndef DOXYGEN_SHOULD_SKIP_THIS
-+
-+char**
-+_dbus_gutils_split_path (const char *path)
-+{
-+ int len;
-+ char **split;
-+ int n_components;
-+ int i, j, comp;
-+
-+ len = strlen (path);
-+
-+ n_components = 0;
-+ if (path[1] != '\0') /* if not "/" */
-+ {
-+ i = 0;
-+ while (i < len)
-+ {
-+ if (path[i] == '/')
-+ n_components += 1;
-+ ++i;
-+ }
-+ }
-+
-+ split = g_new0 (char*, n_components + 1);
-+
-+ comp = 0;
-+ if (n_components == 0)
-+ i = 1;
-+ else
-+ i = 0;
-+ while (comp < n_components)
-+ {
-+ if (path[i] == '/')
-+ ++i;
-+ j = i;
-+
-+ while (j < len && path[j] != '/')
-+ ++j;
-+
-+ /* Now [i, j) is the path component */
-+ g_assert (i < j);
-+ g_assert (path[i] != '/');
-+ g_assert (j == len || path[j] == '/');
-+
-+ split[comp] = g_strndup (&path[i], j - i + 1);
-+
-+ split[comp][j-i] = '\0';
-+
-+ ++comp;
-+ i = j;
-+ }
-+ g_assert (i == len);
-+
-+ return split;
-+}
-+
-+char*
-+_dbus_gutils_wincaps_to_uscore (const char *caps)
-+{
-+ const char *p;
-+ GString *str;
-+
-+ str = g_string_new (NULL);
-+ p = caps;
-+ while (*p)
-+ {
-+ if (g_ascii_isupper (*p))
-+ {
-+ if (str->len > 0 &&
-+ (str->len < 2 || str->str[str->len-2] != '_'))
-+ g_string_append_c (str, '_');
-+ g_string_append_c (str, g_ascii_tolower (*p));
-+ }
-+ else
-+ {
-+ g_string_append_c (str, *p);
-+ }
-+ ++p;
-+ }
-+
-+ return g_string_free (str, FALSE);
-+}
-+
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+/**
-+ * @ingroup DBusGLibInternals
-+ * Unit test for GLib utils internals
-+ * @returns #TRUE on success.
-+ */
-+gboolean
-+_dbus_gutils_test (const char *test_data_dir)
-+{
-+
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-+
-+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-diff -Naur dbus-0.61.orig/glib/dbus-gutils.h dbus-0.61/glib/dbus-gutils.h
---- dbus-0.61.orig/glib/dbus-gutils.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gutils.h 2005-02-27 18:38:12.000000000 +0100
-@@ -0,0 +1,57 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gutils.h Utils shared between convenience lib and installed lib
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_GLIB_UTILS_H
-+#define DBUS_GLIB_UTILS_H
-+
-+#ifndef DOXYGEN_SHOULD_SKIP_THIS
-+
-+#include <dbus/dbus.h>
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+char **_dbus_gutils_split_path (const char *path);
-+
-+char *_dbus_gutils_wincaps_to_uscore (const char *uscore);
-+
-+/* These munge the pointer to enforce that a plain cast won't work,
-+ * accessor functions must be used; i.e. to ensure the ABI
-+ * reflects our encapsulation.
-+ */
-+#define _DBUS_POINTER_SHIFT(p) ((void*) (((char*)p) + sizeof (void*)))
-+#define _DBUS_POINTER_UNSHIFT(p) ((void*) (((char*)p) - sizeof (void*)))
-+
-+#define DBUS_CONNECTION_FROM_G_CONNECTION(x) ((DBusConnection*) _DBUS_POINTER_UNSHIFT(x))
-+#define DBUS_MESSAGE_FROM_G_MESSAGE(x) ((DBusMessage*) _DBUS_POINTER_UNSHIFT(x))
-+#define DBUS_PENDING_CALL_FROM_G_PENDING_CALL(x) ((DBusPendingCall*) _DBUS_POINTER_UNSHIFT(x))
-+
-+#define DBUS_G_CONNECTION_FROM_CONNECTION(x) ((DBusGConnection*) _DBUS_POINTER_SHIFT(x))
-+#define DBUS_G_MESSAGE_FROM_MESSAGE(x) ((DBusGMessage*) _DBUS_POINTER_SHIFT(x))
-+#define DBUS_G_PENDING_CALL_FROM_PENDING_CALL(x) ((DBusGPendingCall*) _DBUS_POINTER_SHIFT(x))
-+
-+G_END_DECLS
-+
-+#endif /* DBUS_GLIB_UTILS_H */
-+
-+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
-diff -Naur dbus-0.61.orig/glib/dbus-gvalue-utils.c dbus-0.61/glib/dbus-gvalue-utils.c
---- dbus-0.61.orig/glib/dbus-gvalue-utils.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gvalue-utils.c 2006-02-13 23:30:11.000000000 +0100
-@@ -0,0 +1,1352 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gvalue-utils.c: Non-DBus-specific functions related to GType/GValue
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include "dbus/dbus-glib.h"
-+#include "dbus-gvalue-utils.h"
-+#include "dbus-gtest.h"
-+#include <glib.h>
-+#include <string.h>
-+#include <gobject/gvaluecollector.h>
-+
-+
-+static guint
-+fixed_type_get_size (GType type)
-+{
-+ switch (type)
-+ {
-+ case G_TYPE_CHAR:
-+ case G_TYPE_UCHAR:
-+ return sizeof (gchar);
-+ case G_TYPE_BOOLEAN:
-+ return sizeof (gboolean);
-+ case G_TYPE_LONG:
-+ case G_TYPE_ULONG:
-+ return sizeof (glong);
-+ case G_TYPE_INT:
-+ case G_TYPE_UINT:
-+ return sizeof (gint);
-+ case G_TYPE_INT64:
-+ case G_TYPE_UINT64:
-+ return sizeof (gint64);
-+ case G_TYPE_FLOAT:
-+ return sizeof (gfloat);
-+ case G_TYPE_DOUBLE:
-+ return sizeof (gdouble);
-+ default:
-+ return 0;
-+ }
-+}
-+
-+gboolean
-+_dbus_g_type_is_fixed (GType type)
-+{
-+ return fixed_type_get_size (type) > 0;
-+}
-+
-+guint
-+_dbus_g_type_fixed_get_size (GType type)
-+{
-+ g_assert (_dbus_g_type_is_fixed (type));
-+ return fixed_type_get_size (type);
-+}
-+
-+gboolean
-+_dbus_gvalue_store (GValue *value,
-+ gpointer storage)
-+{
-+ /* FIXME - can we use the GValue lcopy_value method
-+ * to do this in a cleaner way?
-+ */
-+ switch (g_type_fundamental (G_VALUE_TYPE (value)))
-+ {
-+ case G_TYPE_CHAR:
-+ *((gchar *) storage) = g_value_get_char (value);
-+ return TRUE;
-+ case G_TYPE_UCHAR:
-+ *((guchar *) storage) = g_value_get_uchar (value);
-+ return TRUE;
-+ case G_TYPE_BOOLEAN:
-+ *((gboolean *) storage) = g_value_get_boolean (value);
-+ return TRUE;
-+ case G_TYPE_LONG:
-+ *((glong *) storage) = g_value_get_long (value);
-+ return TRUE;
-+ case G_TYPE_ULONG:
-+ *((gulong *) storage) = g_value_get_ulong (value);
-+ return TRUE;
-+ case G_TYPE_INT:
-+ *((gint *) storage) = g_value_get_int (value);
-+ return TRUE;
-+ case G_TYPE_UINT:
-+ *((guint *) storage) = g_value_get_uint (value);
-+ return TRUE;
-+ case G_TYPE_INT64:
-+ *((gint64 *) storage) = g_value_get_int64 (value);
-+ return TRUE;
-+ case G_TYPE_UINT64:
-+ *((guint64 *) storage) = g_value_get_uint64 (value);
-+ return TRUE;
-+ case G_TYPE_DOUBLE:
-+ *((gdouble *) storage) = g_value_get_double (value);
-+ return TRUE;
-+ case G_TYPE_STRING:
-+ *((gchar **) storage) = (char*) g_value_get_string (value);
-+ return TRUE;
-+ case G_TYPE_POINTER:
-+ *((gpointer *) storage) = g_value_get_pointer (value);
-+ return TRUE;
-+ case G_TYPE_OBJECT:
-+ *((gpointer *) storage) = g_value_get_object (value);
-+ return TRUE;
-+ case G_TYPE_BOXED:
-+ *((gpointer *) storage) = g_value_get_boxed (value);
-+ return TRUE;
-+ default:
-+ return FALSE;
-+ }
-+}
-+
-+gboolean
-+_dbus_gvalue_set_from_pointer (GValue *value,
-+ gconstpointer storage)
-+{
-+ /* FIXME - is there a better way to do this? */
-+ switch (g_type_fundamental (G_VALUE_TYPE (value)))
-+ {
-+ case G_TYPE_CHAR:
-+ g_value_set_char (value, *((gchar *) storage));
-+ return TRUE;
-+ case G_TYPE_UCHAR:
-+ g_value_set_uchar (value, *((guchar *) storage));
-+ return TRUE;
-+ case G_TYPE_BOOLEAN:
-+ g_value_set_boolean (value, *((gboolean *) storage));
-+ return TRUE;
-+ case G_TYPE_LONG:
-+ g_value_set_long (value, *((glong *) storage));
-+ return TRUE;
-+ case G_TYPE_ULONG:
-+ g_value_set_ulong (value, *((gulong *) storage));
-+ return TRUE;
-+ case G_TYPE_INT:
-+ g_value_set_int (value, *((gint *) storage));
-+ return TRUE;
-+ case G_TYPE_UINT:
-+ g_value_set_uint (value, *((guint *) storage));
-+ return TRUE;
-+ case G_TYPE_INT64:
-+ g_value_set_int64 (value, *((gint64 *) storage));
-+ return TRUE;
-+ case G_TYPE_UINT64:
-+ g_value_set_uint64 (value, *((guint64 *) storage));
-+ return TRUE;
-+ case G_TYPE_DOUBLE:
-+ g_value_set_double (value, *((gdouble *) storage));
-+ return TRUE;
-+ case G_TYPE_STRING:
-+ g_value_set_string (value, *((gchar **) storage));
-+ return TRUE;
-+ case G_TYPE_POINTER:
-+ g_value_set_pointer (value, *((gpointer *) storage));
-+ return TRUE;
-+ case G_TYPE_OBJECT:
-+ g_value_set_object (value, *((gpointer *) storage));
-+ return TRUE;
-+ case G_TYPE_BOXED:
-+ g_value_set_boxed (value, *((gpointer *) storage));
-+ return TRUE;
-+ default:
-+ return FALSE;
-+ }
-+}
-+
-+gboolean
-+_dbus_gvalue_take (GValue *value,
-+ GTypeCValue *cvalue)
-+{
-+ GType g_type;
-+ GTypeValueTable *value_table;
-+ char *error_msg;
-+
-+ g_type = G_VALUE_TYPE (value);
-+ value_table = g_type_value_table_peek (g_type);
-+
-+ error_msg = value_table->collect_value (value, 1, cvalue, G_VALUE_NOCOPY_CONTENTS);
-+ if (error_msg)
-+ {
-+ g_warning ("%s: %s", G_STRLOC, error_msg);
-+ g_free (error_msg);
-+ return FALSE;
-+ }
-+ /* Clear the NOCOPY_CONTENTS flag; we want to take ownership
-+ * of the value.
-+ */
-+ value->data[1].v_uint &= ~(G_VALUE_NOCOPY_CONTENTS);
-+ return TRUE;
-+}
-+
-+gboolean
-+_dbus_gtype_can_signal_error (GType gtype)
-+{
-+ switch (gtype)
-+ {
-+ case G_TYPE_BOOLEAN:
-+ case G_TYPE_INT:
-+ case G_TYPE_UINT:
-+ case G_TYPE_STRING:
-+ case G_TYPE_BOXED:
-+ case G_TYPE_OBJECT:
-+ return TRUE;
-+ default:
-+ return FALSE;
-+ }
-+}
-+
-+gboolean
-+_dbus_gvalue_signals_error (const GValue *value)
-+{
-+ /* Hardcoded rules for return value semantics for certain
-+ * types. Perhaps in the future we'd want an annotation
-+ * specifying which return values are errors, but in
-+ * reality people will probably just use boolean and
-+ * boxed, and there the semantics are pretty standard.
-+ */
-+ switch (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (value)))
-+ {
-+ case G_TYPE_BOOLEAN:
-+ return (g_value_get_boolean (value) == FALSE);
-+ break;
-+ case G_TYPE_INT:
-+ return (g_value_get_int (value) < 0);
-+ break;
-+ case G_TYPE_UINT:
-+ return (g_value_get_uint (value) == 0);
-+ break;
-+ case G_TYPE_STRING:
-+ return (g_value_get_string (value) == NULL);
-+ break;
-+ case G_TYPE_BOXED:
-+ return (g_value_get_boxed (value) == NULL);
-+ break;
-+ case G_TYPE_OBJECT:
-+ return (g_value_get_boxed (value) == NULL);
-+ break;
-+ default:
-+ g_assert_not_reached ();
-+ }
-+}
-+
-+
-+static gboolean
-+hash_func_from_gtype (GType gtype, GHashFunc *func)
-+{
-+ switch (gtype)
-+ {
-+ case G_TYPE_CHAR:
-+ case G_TYPE_UCHAR:
-+ case G_TYPE_BOOLEAN:
-+ case G_TYPE_INT:
-+ case G_TYPE_UINT:
-+ *func = NULL;
-+ return TRUE;
-+ case G_TYPE_STRING:
-+ *func = g_str_hash;
-+ return TRUE;
-+ default:
-+ return FALSE;
-+ }
-+}
-+
-+static void
-+unset_and_free_g_value (gpointer val)
-+{
-+ GValue *value = val;
-+
-+ g_value_unset (value);
-+ g_free (value);
-+}
-+
-+static gboolean
-+hash_free_from_gtype (GType gtype, GDestroyNotify *func)
-+{
-+ switch (gtype)
-+ {
-+ case G_TYPE_CHAR:
-+ case G_TYPE_UCHAR:
-+ case G_TYPE_BOOLEAN:
-+ case G_TYPE_INT:
-+ case G_TYPE_UINT:
-+ *func = NULL;
-+ return TRUE;
-+ case G_TYPE_DOUBLE:
-+ case G_TYPE_STRING:
-+ *func = g_free;
-+ return TRUE;
-+ default:
-+ if (gtype == G_TYPE_VALUE)
-+ {
-+ *func = unset_and_free_g_value;
-+ return TRUE;
-+ }
-+ else if (gtype == G_TYPE_VALUE_ARRAY)
-+ {
-+ *func = (GDestroyNotify) g_value_array_free;
-+ return TRUE;
-+ }
-+ else if (dbus_g_type_is_collection (gtype))
-+ {
-+ const DBusGTypeSpecializedCollectionVtable* vtable;
-+ vtable = dbus_g_type_collection_peek_vtable (gtype);
-+ if (vtable->base_vtable.simple_free_func)
-+ {
-+ *func = vtable->base_vtable.simple_free_func;
-+ return TRUE;
-+ }
-+ }
-+ else if (dbus_g_type_is_map (gtype))
-+ {
-+ const DBusGTypeSpecializedMapVtable* vtable;
-+ vtable = dbus_g_type_map_peek_vtable (gtype);
-+ if (vtable->base_vtable.simple_free_func)
-+ {
-+ *func = vtable->base_vtable.simple_free_func;
-+ return TRUE;
-+ }
-+ }
-+ else if (dbus_g_type_is_struct (gtype))
-+ {
-+ const DBusGTypeSpecializedStructVtable *vtable;
-+ vtable = dbus_g_type_struct_peek_vtable (gtype);
-+ if (vtable->base_vtable.simple_free_func)
-+ {
-+ *func = vtable->base_vtable.simple_free_func;
-+ return TRUE;
-+ }
-+ }
-+ return FALSE;
-+ }
-+}
-+
-+gboolean
-+_dbus_gtype_is_valid_hash_key (GType type)
-+{
-+ GHashFunc func;
-+ return hash_func_from_gtype (type, &func);
-+}
-+
-+gboolean
-+_dbus_gtype_is_valid_hash_value (GType type)
-+{
-+ GDestroyNotify func;
-+ return hash_free_from_gtype (type, &func);
-+}
-+
-+GHashFunc
-+_dbus_g_hash_func_from_gtype (GType gtype)
-+{
-+ GHashFunc func;
-+ gboolean ret;
-+ ret = hash_func_from_gtype (gtype, &func);
-+ g_assert (ret != FALSE);
-+ return func;
-+}
-+
-+GEqualFunc
-+_dbus_g_hash_equal_from_gtype (GType gtype)
-+{
-+ g_assert (_dbus_gtype_is_valid_hash_key (gtype));
-+
-+ switch (gtype)
-+ {
-+ case G_TYPE_CHAR:
-+ case G_TYPE_UCHAR:
-+ case G_TYPE_BOOLEAN:
-+ case G_TYPE_INT:
-+ case G_TYPE_UINT:
-+ return NULL;
-+ case G_TYPE_STRING:
-+ return g_str_equal;
-+ default:
-+ g_assert_not_reached ();
-+ return NULL;
-+ }
-+}
-+
-+GDestroyNotify
-+_dbus_g_hash_free_from_gtype (GType gtype)
-+{
-+ GDestroyNotify func;
-+ gboolean ret;
-+ ret = hash_free_from_gtype (gtype, &func);
-+ g_assert (ret != FALSE);
-+ return func;
-+}
-+
-+static void
-+gvalue_from_hash_value (GValue *value, gpointer instance)
-+{
-+ switch (g_type_fundamental (G_VALUE_TYPE (value)))
-+ {
-+ case G_TYPE_CHAR:
-+ g_value_set_char (value, (gchar) GPOINTER_TO_INT (instance));
-+ break;
-+ case G_TYPE_UCHAR:
-+ g_value_set_uchar (value, (guchar) GPOINTER_TO_UINT (instance));
-+ break;
-+ case G_TYPE_BOOLEAN:
-+ g_value_set_boolean (value, (gboolean) GPOINTER_TO_UINT (instance));
-+ break;
-+ case G_TYPE_INT:
-+ g_value_set_int (value, GPOINTER_TO_INT (instance));
-+ break;
-+ case G_TYPE_UINT:
-+ g_value_set_uint (value, GPOINTER_TO_UINT (instance));
-+ break;
-+ case G_TYPE_DOUBLE:
-+ g_value_set_double (value, *(gdouble *) instance);
-+ break;
-+ case G_TYPE_STRING:
-+ g_value_set_static_string (value, instance);
-+ break;
-+ case G_TYPE_POINTER:
-+ g_value_set_pointer (value, instance);
-+ break;
-+ case G_TYPE_BOXED:
-+ g_value_set_static_boxed (value, instance);
-+ break;
-+ case G_TYPE_OBJECT:
-+ g_value_set_object (value, instance);
-+ g_object_unref (g_value_get_object (value));
-+ break;
-+ default:
-+ g_assert_not_reached ();
-+ break;
-+ }
-+}
-+
-+static gpointer
-+hash_value_from_gvalue (GValue *value)
-+{
-+ switch (g_type_fundamental (G_VALUE_TYPE (value)))
-+ {
-+ case G_TYPE_CHAR:
-+ return GINT_TO_POINTER ((int) g_value_get_char (value));
-+ break;
-+ case G_TYPE_UCHAR:
-+ return GUINT_TO_POINTER ((guint) g_value_get_uchar (value));
-+ break;
-+ case G_TYPE_BOOLEAN:
-+ return GUINT_TO_POINTER ((guint) g_value_get_boolean (value));
-+ break;
-+ case G_TYPE_INT:
-+ return GINT_TO_POINTER (g_value_get_int (value));
-+ break;
-+ case G_TYPE_UINT:
-+ return GUINT_TO_POINTER (g_value_get_uint (value));
-+ break;
-+ case G_TYPE_DOUBLE:
-+ {
-+ gdouble *p = (gdouble *) g_malloc0 (sizeof (gdouble));
-+ *p = g_value_get_double (value);
-+ return (gpointer) p;
-+ }
-+ break;
-+ case G_TYPE_STRING:
-+ return (gpointer) g_value_get_string (value);
-+ break;
-+ case G_TYPE_POINTER:
-+ return g_value_get_pointer (value);
-+ break;
-+ case G_TYPE_BOXED:
-+ return g_value_get_boxed (value);
-+ break;
-+ case G_TYPE_OBJECT:
-+ return g_value_get_object (value);
-+ break;
-+ default:
-+ g_assert_not_reached ();
-+ return NULL;
-+ }
-+}
-+
-+struct DBusGHashTableValueForeachData
-+{
-+ DBusGTypeSpecializedMapIterator func;
-+ GType key_type;
-+ GType value_type;
-+ gpointer data;
-+};
-+
-+static void
-+hashtable_foreach_with_values (gpointer key, gpointer value, gpointer user_data)
-+{
-+ GValue key_val = {0, };
-+ GValue value_val = {0, };
-+ struct DBusGHashTableValueForeachData *data = user_data;
-+
-+ g_value_init (&key_val, data->key_type);
-+ g_value_init (&value_val, data->value_type);
-+ gvalue_from_hash_value (&key_val, key);
-+ gvalue_from_hash_value (&value_val, value);
-+
-+ data->func (&key_val, &value_val, data->data);
-+}
-+
-+
-+static void
-+hashtable_iterator (GType hash_type,
-+ gpointer instance,
-+ DBusGTypeSpecializedMapIterator iterator,
-+ gpointer user_data)
-+{
-+ struct DBusGHashTableValueForeachData data;
-+ GType key_gtype;
-+ GType value_gtype;
-+
-+ key_gtype = dbus_g_type_get_map_key_specialization (hash_type);
-+ value_gtype = dbus_g_type_get_map_value_specialization (hash_type);
-+
-+ data.func = iterator;
-+ data.key_type = key_gtype;
-+ data.value_type = value_gtype;
-+ data.data = user_data;
-+
-+ g_hash_table_foreach (instance, hashtable_foreach_with_values, &data);
-+}
-+
-+void
-+_dbus_g_hash_table_insert_steal_values (GHashTable *table,
-+ GValue *key_val,
-+ GValue *value_val)
-+{
-+ gpointer key, val;
-+
-+ key = hash_value_from_gvalue (key_val);
-+ val = hash_value_from_gvalue (value_val);
-+
-+ g_hash_table_insert (table, key, val);
-+}
-+
-+static void
-+hashtable_append (DBusGTypeSpecializedAppendContext *ctx,
-+ GValue *key,
-+ GValue *val)
-+{
-+ GHashTable *table;
-+
-+ table = g_value_get_boxed (ctx->val);
-+ _dbus_g_hash_table_insert_steal_values (table, key, val);
-+}
-+
-+static gpointer
-+hashtable_constructor (GType type)
-+{
-+ GHashTable *ret;
-+ GType key_gtype;
-+ GType value_gtype;
-+
-+ key_gtype = dbus_g_type_get_map_key_specialization (type);
-+ value_gtype = dbus_g_type_get_map_value_specialization (type);
-+
-+ ret = g_hash_table_new_full (_dbus_g_hash_func_from_gtype (key_gtype),
-+ _dbus_g_hash_equal_from_gtype (key_gtype),
-+ _dbus_g_hash_free_from_gtype (key_gtype),
-+ _dbus_g_hash_free_from_gtype (value_gtype));
-+ return ret;
-+}
-+
-+static void
-+hashtable_insert_values (GHashTable *table,
-+ const GValue *key_val,
-+ const GValue *value_val)
-+{
-+ GValue key_copy = {0, };
-+ GValue value_copy = {0, };
-+
-+ g_value_init (&key_copy, G_VALUE_TYPE (key_val));
-+ g_value_copy (key_val, &key_copy);
-+ g_value_init (&value_copy, G_VALUE_TYPE (value_val));
-+ g_value_copy (value_val, &value_copy);
-+
-+ _dbus_g_hash_table_insert_steal_values (table, &key_copy, &value_copy);
-+}
-+
-+static void
-+hashtable_foreach_copy (const GValue *key, const GValue *val, gpointer data)
-+{
-+ hashtable_insert_values ((GHashTable *) data, key, val);
-+}
-+
-+static gpointer
-+hashtable_copy (GType type, gpointer src)
-+{
-+ GHashTable *ghash;
-+ GHashTable *ret;
-+ GValue hashval = {0,};
-+
-+ ghash = src;
-+
-+ ret = hashtable_constructor (type);
-+
-+ g_value_init (&hashval, type);
-+ g_value_set_static_boxed (&hashval, ghash);
-+ dbus_g_type_map_value_iterate (&hashval, hashtable_foreach_copy, ret);
-+ return ret;
-+}
-+
-+static void
-+hashtable_simple_free (gpointer val)
-+{
-+ g_hash_table_destroy (val);
-+}
-+
-+static gpointer
-+valuearray_constructor (GType type)
-+{
-+ GValueArray *ret;
-+ guint size = dbus_g_type_get_struct_size (type);
-+ guint i;
-+ ret = g_value_array_new (size);
-+ for (i=0; i < size; i++)
-+ {
-+ GValue val = {0,};
-+ g_value_init (&val, dbus_g_type_get_struct_member_type (type, i));
-+ g_value_array_append(ret, &val);
-+ }
-+ return (gpointer)ret;
-+}
-+
-+static gpointer
-+valuearray_copy (GType type, gpointer src)
-+{
-+ return g_value_array_copy ((GValueArray*) src);
-+}
-+
-+static void
-+valuearray_simple_free (gpointer val)
-+{
-+ g_value_array_free (val);
-+}
-+
-+static gboolean
-+valuearray_get_member (GType type, gpointer instance,
-+ guint member, GValue *ret)
-+{
-+ GValueArray *va = (GValueArray*) instance;
-+ const GValue *val;
-+ if (member < dbus_g_type_get_struct_size (type))
-+ {
-+ val = g_value_array_get_nth (va, member);
-+ g_value_copy (val, ret);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+static gboolean
-+valuearray_set_member (GType type, gpointer instance,
-+ guint member, const GValue *member_type)
-+{
-+ GValueArray *va = (GValueArray*) instance;
-+ GValue *vp;
-+ if (member < dbus_g_type_get_struct_size (type))
-+ {
-+ vp = g_value_array_get_nth (va, member);
-+ g_value_copy (member_type, vp);
-+ return TRUE;
-+ }
-+ else
-+ return FALSE;
-+}
-+
-+
-+static gpointer
-+array_constructor (GType type)
-+{
-+ GArray *array;
-+ guint elt_size;
-+ GType elt_type;
-+ gboolean zero_terminated;
-+ gboolean clear;
-+
-+ elt_type = dbus_g_type_get_collection_specialization (type);
-+ g_assert (elt_type != G_TYPE_INVALID);
-+
-+ elt_size = _dbus_g_type_fixed_get_size (elt_type);
-+
-+ /* These are "safe" defaults */
-+ zero_terminated = TRUE; /* ((struct _DBusGRealArray*) garray)->zero_terminated; */
-+ clear = TRUE; /* ((struct _DBusGRealArray*) garray)->clear; */
-+
-+ array = g_array_new (zero_terminated, clear, elt_size);
-+ return array;
-+}
-+
-+static gpointer
-+array_copy (GType type, gpointer src)
-+{
-+ GArray *garray;
-+ GArray *new;
-+
-+ garray = src;
-+
-+ new = array_constructor (type);
-+ g_array_append_vals (new, garray->data, garray->len);
-+
-+ return new;
-+}
-+
-+static void
-+array_simple_free (gpointer val)
-+{
-+ GArray *array;
-+ array = val;
-+ g_array_free (array, TRUE);
-+}
-+
-+static gboolean
-+array_fixed_accessor (GType type, gpointer instance, gpointer *values, guint *len)
-+{
-+ GType elt_type;
-+ GArray *array = instance;
-+
-+ elt_type = dbus_g_type_get_collection_specialization (type);
-+ if (!_dbus_g_type_is_fixed (elt_type))
-+ return FALSE;
-+
-+ *values = array->data;
-+ *len = array->len;
-+ return TRUE;
-+}
-+
-+static gpointer
-+ptrarray_constructor (GType type)
-+{
-+ /* Later we should determine a destructor, need g_ptr_array_destroy */
-+ return g_ptr_array_new ();
-+}
-+
-+static void
-+gvalue_from_ptrarray_value (GValue *value, gpointer instance)
-+{
-+ switch (g_type_fundamental (G_VALUE_TYPE (value)))
-+ {
-+ case G_TYPE_STRING:
-+ g_value_set_string (value, instance);
-+ break;
-+ case G_TYPE_POINTER:
-+ g_value_set_pointer (value, instance);
-+ break;
-+ case G_TYPE_BOXED:
-+ g_value_set_static_boxed (value, instance);
-+ break;
-+ case G_TYPE_OBJECT:
-+ g_value_set_object (value, instance);
-+ g_object_unref (g_value_get_object (value));
-+ break;
-+ default:
-+ g_assert_not_reached ();
-+ break;
-+ }
-+}
-+
-+static gpointer
-+ptrarray_value_from_gvalue (const GValue *value)
-+{
-+ switch (g_type_fundamental (G_VALUE_TYPE (value)))
-+ {
-+ case G_TYPE_STRING:
-+ return (gpointer) g_value_get_string (value);
-+ break;
-+ case G_TYPE_POINTER:
-+ return g_value_get_pointer (value);
-+ break;
-+ case G_TYPE_BOXED:
-+ return g_value_get_boxed (value);
-+ break;
-+ case G_TYPE_OBJECT:
-+ return g_value_get_object (value);
-+ break;
-+ default:
-+ g_assert_not_reached ();
-+ return NULL;
-+ }
-+}
-+
-+static void
-+ptrarray_iterator (GType hash_type,
-+ gpointer instance,
-+ DBusGTypeSpecializedCollectionIterator iterator,
-+ gpointer user_data)
-+{
-+ GPtrArray *ptrarray;
-+ GType elt_gtype;
-+ guint i;
-+
-+ ptrarray = instance;
-+
-+ elt_gtype = dbus_g_type_get_collection_specialization (hash_type);
-+
-+ for (i = 0; i < ptrarray->len; i++)
-+ {
-+ GValue val = {0, };
-+ g_value_init (&val, elt_gtype);
-+ gvalue_from_ptrarray_value (&val, g_ptr_array_index (ptrarray, i));
-+ iterator (&val, user_data);
-+ }
-+}
-+
-+static void
-+ptrarray_copy_elt (const GValue *val, gpointer user_data)
-+{
-+ GPtrArray *dest = user_data;
-+ GValue val_copy = {0, };
-+
-+ g_value_init (&val_copy, G_VALUE_TYPE (val));
-+ g_value_copy (val, &val_copy);
-+
-+ g_ptr_array_add (dest, ptrarray_value_from_gvalue (&val_copy));
-+}
-+
-+static gpointer
-+ptrarray_copy (GType type, gpointer src)
-+{
-+ GPtrArray *new;
-+ GValue array_val = {0, };
-+
-+ g_value_init (&array_val, type);
-+ g_value_set_static_boxed (&array_val, src);
-+
-+ new = ptrarray_constructor (type);
-+ dbus_g_type_collection_value_iterate (&array_val, ptrarray_copy_elt, new);
-+
-+ return new;
-+}
-+
-+static void
-+ptrarray_append (DBusGTypeSpecializedAppendContext *ctx, GValue *value)
-+{
-+ GPtrArray *array;
-+
-+ array = g_value_get_boxed (ctx->val);
-+
-+ g_ptr_array_add (array, ptrarray_value_from_gvalue (value));
-+}
-+
-+static void
-+ptrarray_free (GType type, gpointer val)
-+{
-+ /* XXX: this function appears to leak the contents of the array */
-+ GPtrArray *array;
-+ array = val;
-+ g_ptr_array_free (array, TRUE);
-+}
-+
-+static gpointer
-+slist_constructor (GType type)
-+{
-+ return NULL;
-+}
-+
-+static void
-+slist_iterator (GType list_type,
-+ gpointer instance,
-+ DBusGTypeSpecializedCollectionIterator iterator,
-+ gpointer user_data)
-+{
-+ GSList *slist;
-+ GType elt_gtype;
-+
-+ slist = instance;
-+
-+ elt_gtype = dbus_g_type_get_collection_specialization (list_type);
-+
-+ while (slist != NULL)
-+ {
-+ GValue val = {0, };
-+ g_value_init (&val, elt_gtype);
-+ gvalue_from_ptrarray_value (&val, slist->data);
-+ iterator (&val, user_data);
-+ }
-+}
-+
-+static void
-+slist_copy_elt (const GValue *val, gpointer user_data)
-+{
-+ GSList *dest = user_data;
-+ GValue val_copy = {0, };
-+
-+ g_value_init (&val_copy, G_VALUE_TYPE (val));
-+ g_value_copy (val, &val_copy);
-+
-+ g_slist_append (dest, ptrarray_value_from_gvalue (&val_copy));
-+}
-+
-+static gpointer
-+slist_copy (GType type, gpointer src)
-+{
-+ GSList *new;
-+ GValue slist_val = {0, };
-+
-+ g_value_init (&slist_val, type);
-+ g_value_set_static_boxed (&slist_val, src);
-+
-+ new = slist_constructor (type);
-+ dbus_g_type_collection_value_iterate (&slist_val, slist_copy_elt, new);
-+
-+ return new;
-+}
-+
-+static void
-+slist_append (DBusGTypeSpecializedAppendContext *ctx, GValue *value)
-+{
-+ GSList *list;
-+
-+ list = g_value_get_boxed (ctx->val);
-+ list = g_slist_prepend (list, ptrarray_value_from_gvalue (value));
-+ g_value_set_static_boxed (ctx->val, list);
-+}
-+
-+static void
-+slist_end_append (DBusGTypeSpecializedAppendContext *ctx)
-+{
-+ GSList *list;
-+
-+ list = g_value_get_boxed (ctx->val);
-+ list = g_slist_reverse (list);
-+
-+ g_value_set_static_boxed (ctx->val, list);
-+}
-+
-+static void
-+slist_free (GType type, gpointer val)
-+{
-+ /* XXX: this function appears to leak the contents of the list */
-+ GSList *list;
-+ list = val;
-+ g_slist_free (list);
-+}
-+
-+void
-+_dbus_g_type_specialized_builtins_init (void)
-+{
-+ /* types with a simple_free function can be freed at run-time without
-+ * the destroy function needing to know the type, so they can be
-+ * stored in hash tables */
-+
-+ static const DBusGTypeSpecializedCollectionVtable array_vtable = {
-+ {
-+ array_constructor,
-+ NULL,
-+ array_copy,
-+ array_simple_free,
-+ NULL,
-+ NULL,
-+ },
-+ array_fixed_accessor,
-+ NULL,
-+ NULL,
-+ NULL
-+ };
-+
-+
-+ static const DBusGTypeSpecializedCollectionVtable ptrarray_vtable = {
-+ {
-+ ptrarray_constructor,
-+ ptrarray_free,
-+ ptrarray_copy,
-+ NULL,
-+ NULL,
-+ NULL,
-+ },
-+ NULL,
-+ ptrarray_iterator,
-+ ptrarray_append,
-+ NULL,
-+ };
-+
-+
-+ static const DBusGTypeSpecializedCollectionVtable slist_vtable = {
-+ {
-+ slist_constructor,
-+ slist_free,
-+ slist_copy,
-+ NULL,
-+ NULL,
-+ NULL,
-+ },
-+ NULL,
-+ slist_iterator,
-+ slist_append,
-+ slist_end_append,
-+ };
-+
-+ static const DBusGTypeSpecializedMapVtable hashtable_vtable = {
-+ {
-+ hashtable_constructor,
-+ NULL,
-+ hashtable_copy,
-+ hashtable_simple_free,
-+ NULL,
-+ NULL
-+ },
-+ hashtable_iterator,
-+ hashtable_append
-+ };
-+
-+ static const DBusGTypeSpecializedStructVtable valuearray_vtable = {
-+ {
-+ valuearray_constructor,
-+ NULL,
-+ valuearray_copy,
-+ valuearray_simple_free,
-+ NULL,
-+ NULL
-+ },
-+ valuearray_get_member,
-+ valuearray_set_member
-+ };
-+
-+ dbus_g_type_register_collection ("GSList", &slist_vtable, 0);
-+ dbus_g_type_register_collection ("GArray", &array_vtable, 0);
-+ dbus_g_type_register_collection ("GPtrArray", &ptrarray_vtable, 0);
-+ dbus_g_type_register_map ("GHashTable", &hashtable_vtable, 0);
-+ dbus_g_type_register_struct ("GValueArray", &valuearray_vtable, 0);
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+typedef struct
-+{
-+ gboolean seen_foo;
-+ gboolean seen_baz;
-+} TestSpecializedHashData;
-+
-+static void
-+test_specialized_hash (const GValue *key, const GValue *val, gpointer user_data)
-+{
-+ TestSpecializedHashData *data = user_data;
-+
-+ g_assert (G_VALUE_HOLDS_STRING (key));
-+ g_assert (G_VALUE_HOLDS_STRING (val));
-+
-+ if (!strcmp (g_value_get_string (key), "foo"))
-+ {
-+ data->seen_foo = TRUE;
-+ g_assert (!strcmp (g_value_get_string (val), "bar"));
-+ }
-+ else if (!strcmp (g_value_get_string (key), "baz"))
-+ {
-+ data->seen_baz = TRUE;
-+ g_assert (!strcmp (g_value_get_string (val), "moo"));
-+ }
-+ else
-+ {
-+ g_assert_not_reached ();
-+ }
-+}
-+
-+static void
-+test_specialized_hash_2 (const GValue *key, const GValue *val, gpointer user_data)
-+{
-+ TestSpecializedHashData *data = user_data;
-+ const GValue *realval;
-+
-+ g_assert (G_VALUE_HOLDS_STRING (key));
-+ g_assert (G_VALUE_TYPE (val) == G_TYPE_VALUE);
-+
-+ realval = g_value_get_boxed (val);
-+
-+ if (!strcmp (g_value_get_string (key), "foo"))
-+ {
-+ data->seen_foo = TRUE;
-+ g_assert (G_VALUE_HOLDS_UINT (realval));
-+ g_assert (g_value_get_uint (realval) == 20);
-+ }
-+ else if (!strcmp (g_value_get_string (key), "baz"))
-+ {
-+ data->seen_baz = TRUE;
-+ g_assert (G_VALUE_HOLDS_STRING (realval));
-+ g_assert (!strcmp ("bar", g_value_get_string (realval)));
-+ }
-+ else
-+ {
-+ g_assert_not_reached ();
-+ }
-+}
-+
-+gboolean
-+_dbus_gvalue_utils_test (const char *datadir)
-+{
-+ GType type;
-+
-+ dbus_g_type_specialized_init ();
-+ _dbus_g_type_specialized_builtins_init ();
-+
-+ type = dbus_g_type_get_collection ("GArray", G_TYPE_UINT);
-+ g_assert (dbus_g_type_is_collection (type));
-+ g_assert (dbus_g_type_get_collection_specialization (type) == G_TYPE_UINT);
-+ {
-+ GArray *instance;
-+
-+ instance = dbus_g_type_specialized_construct (type);
-+
-+ g_assert (instance->len == 0);
-+
-+ g_array_free (instance, TRUE);
-+ }
-+
-+ type = dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_STRING);
-+ g_assert (dbus_g_type_is_map (type));
-+ g_assert (dbus_g_type_get_map_key_specialization (type) == G_TYPE_STRING);
-+ g_assert (dbus_g_type_get_map_value_specialization (type) == G_TYPE_STRING);
-+ {
-+ GHashTable *instance;
-+ GValue val = { 0, };
-+ TestSpecializedHashData hashdata;
-+
-+ instance = dbus_g_type_specialized_construct (type);
-+
-+ g_assert (g_hash_table_size (instance) == 0);
-+ g_hash_table_insert (instance, g_strdup ("foo"), g_strdup ("bar"));
-+ g_hash_table_insert (instance, g_strdup ("baz"), g_strdup ("moo"));
-+ g_assert (g_hash_table_size (instance) == 2);
-+
-+ g_value_init (&val, type);
-+ g_value_set_boxed_take_ownership (&val, instance);
-+ hashdata.seen_foo = FALSE;
-+ hashdata.seen_baz = FALSE;
-+ dbus_g_type_map_value_iterate (&val,
-+ test_specialized_hash,
-+ &hashdata);
-+
-+ g_assert (hashdata.seen_foo);
-+ g_assert (hashdata.seen_baz);
-+
-+ g_value_unset (&val);
-+ }
-+
-+ type = dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE);
-+ g_assert (dbus_g_type_is_map (type));
-+ g_assert (dbus_g_type_get_map_key_specialization (type) == G_TYPE_STRING);
-+ g_assert (dbus_g_type_get_map_value_specialization (type) == G_TYPE_VALUE);
-+ {
-+ GHashTable *instance;
-+ GValue val = { 0, };
-+ TestSpecializedHashData hashdata;
-+ DBusGTypeSpecializedAppendContext ctx;
-+ GValue *eltval;
-+
-+ instance = dbus_g_type_specialized_construct (type);
-+ g_value_init (&val, type);
-+ g_value_set_boxed_take_ownership (&val, instance);
-+
-+ dbus_g_type_specialized_init_append (&val, &ctx);
-+
-+ {
-+ GValue keyval = { 0, };
-+ GValue valval = { 0, };
-+ g_value_init (&keyval, G_TYPE_STRING);
-+ g_value_set_string (&keyval, "foo");
-+
-+ g_value_init (&valval, G_TYPE_VALUE);
-+ eltval = g_new0 (GValue, 1);
-+ g_value_init (eltval, G_TYPE_UINT);
-+ g_value_set_uint (eltval, 20);
-+ g_value_set_boxed_take_ownership (&valval, eltval);
-+ dbus_g_type_specialized_map_append (&ctx, &keyval, &valval);
-+ }
-+
-+ {
-+ GValue keyval = { 0, };
-+ GValue valval = { 0, };
-+ g_value_init (&keyval, G_TYPE_STRING);
-+ g_value_set_string (&keyval, "baz");
-+ g_value_init (&valval, G_TYPE_VALUE);
-+ eltval = g_new0 (GValue, 1);
-+ g_value_init (eltval, G_TYPE_STRING);
-+ g_value_set_string (eltval, "bar");
-+ g_value_set_boxed_take_ownership (&valval, eltval);
-+ dbus_g_type_specialized_map_append (&ctx, &keyval, &valval);
-+ }
-+
-+ hashdata.seen_foo = FALSE;
-+ hashdata.seen_baz = FALSE;
-+ dbus_g_type_map_value_iterate (&val,
-+ test_specialized_hash_2,
-+ &hashdata);
-+
-+ g_assert (hashdata.seen_foo);
-+ g_assert (hashdata.seen_baz);
-+
-+ g_value_unset (&val);
-+ }
-+
-+ type = dbus_g_type_get_collection ("GPtrArray", G_TYPE_STRING);
-+ g_assert (dbus_g_type_is_collection (type));
-+ g_assert (dbus_g_type_get_collection_specialization (type) == G_TYPE_STRING);
-+ {
-+ GPtrArray *instance;
-+ DBusGTypeSpecializedAppendContext ctx;
-+ GValue val = {0, };
-+ GValue eltval = {0, };
-+
-+ instance = dbus_g_type_specialized_construct (type);
-+
-+ g_assert (instance->len == 0);
-+
-+ g_value_init (&val, type);
-+ g_value_set_boxed_take_ownership (&val, instance);
-+
-+ dbus_g_type_specialized_init_append (&val, &ctx);
-+
-+ g_value_init (&eltval, G_TYPE_STRING);
-+ g_value_set_static_string (&eltval, "foo");
-+ dbus_g_type_specialized_collection_append (&ctx, &eltval);
-+
-+ g_value_reset (&eltval);
-+ g_value_set_static_string (&eltval, "bar");
-+ dbus_g_type_specialized_collection_append (&ctx, &eltval);
-+
-+ g_value_reset (&eltval);
-+ g_value_set_static_string (&eltval, "baz");
-+ dbus_g_type_specialized_collection_append (&ctx, &eltval);
-+
-+ dbus_g_type_specialized_collection_end_append (&ctx);
-+
-+ g_assert (instance->len == 3);
-+
-+ g_assert (!strcmp ("foo", g_ptr_array_index (instance, 0)));
-+ g_assert (!strcmp ("bar", g_ptr_array_index (instance, 1)));
-+ g_assert (!strcmp ("baz", g_ptr_array_index (instance, 2)));
-+
-+ g_value_unset (&val);
-+ }
-+
-+ type = dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_UINT, DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
-+ g_assert (dbus_g_type_is_struct (type));
-+ g_assert (dbus_g_type_get_struct_size (type) == 3);
-+ g_assert (dbus_g_type_get_struct_member_type (type, 0) == G_TYPE_STRING);
-+ g_assert (dbus_g_type_get_struct_member_type (type, 1) == G_TYPE_UINT);
-+ g_assert (dbus_g_type_get_struct_member_type (type, 2) == DBUS_TYPE_G_OBJECT_PATH);
-+ {
-+ GValueArray *instance;
-+ GValue val = {0, };
-+ GValue memval = {0, };
-+
-+ instance = dbus_g_type_specialized_construct (type);
-+
-+ g_assert (instance->n_values == 3);
-+
-+ g_value_init (&val, type);
-+ g_value_set_boxed_take_ownership (&val, instance);
-+
-+ g_value_init (&memval, G_TYPE_STRING);
-+ g_value_set_static_string (&memval, "foo");
-+ dbus_g_type_struct_set_member (&val, 0, &memval);
-+ g_value_unset (&memval);
-+
-+ g_value_init (&memval, G_TYPE_UINT);
-+ g_value_set_uint (&memval, 42);
-+ dbus_g_type_struct_set_member (&val, 1, &memval);
-+ g_value_unset (&memval);
-+
-+ g_value_init (&memval, DBUS_TYPE_G_OBJECT_PATH);
-+ g_value_set_static_boxed (&memval, "/bar/moo/foo/baz");
-+ dbus_g_type_struct_set_member (&val, 2, &memval);
-+ g_value_unset (&memval);
-+
-+ g_assert (instance->n_values == 3);
-+
-+ g_value_init (&memval, G_TYPE_STRING);
-+ dbus_g_type_struct_get_member (&val, 0, &memval);
-+ g_assert (0 == strcmp (g_value_get_string (&memval), "foo"));
-+ g_value_unset (&memval);
-+
-+ g_value_init (&memval, G_TYPE_UINT);
-+ dbus_g_type_struct_get_member (&val, 1, &memval);
-+ g_assert (g_value_get_uint (&memval) == 42);
-+ g_value_unset (&memval);
-+
-+ g_value_init (&memval, DBUS_TYPE_G_OBJECT_PATH);
-+ dbus_g_type_struct_get_member (&val, 2, &memval);
-+ g_assert (0 == strcmp ((gchar*) g_value_get_boxed (&memval),
-+ "/bar/moo/foo/baz"));
-+ g_value_unset (&memval);
-+
-+ g_value_unset (&val);
-+ }
-+
-+ type = dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_UINT, DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
-+ g_assert (dbus_g_type_is_struct (type));
-+ g_assert (dbus_g_type_get_struct_size (type) == 3);
-+ g_assert (dbus_g_type_get_struct_member_type (type, 0) == G_TYPE_STRING);
-+ g_assert (dbus_g_type_get_struct_member_type (type, 1) == G_TYPE_UINT);
-+ g_assert (dbus_g_type_get_struct_member_type (type, 2) == DBUS_TYPE_G_OBJECT_PATH);
-+ {
-+ GValueArray *instance;
-+ GValue val = {0, };
-+
-+ instance = dbus_g_type_specialized_construct (type);
-+
-+ g_assert (instance->n_values == 3);
-+
-+ g_value_init (&val, type);
-+ g_value_set_boxed_take_ownership (&val, instance);
-+
-+ dbus_g_type_struct_set (&val,
-+ 0,"foo",
-+ 1, 42,
-+ 2, "/bar/moo/foo/baz",
-+ G_MAXUINT);
-+
-+ g_assert (instance->n_values == 3);
-+
-+ {
-+ gchar *string;
-+ guint intval;
-+ gchar *path;
-+
-+ dbus_g_type_struct_get (&val,
-+ 0, &string,
-+ 1, &intval,
-+ 2, &path,
-+ G_MAXUINT);
-+
-+ g_assert (0 == strcmp (string, "foo"));
-+ g_assert (intval == 42);
-+ g_assert (0 == strcmp (path, "/bar/moo/foo/baz"));
-+ }
-+
-+ g_value_unset (&val);
-+ }
-+
-+
-+ return TRUE;
-+}
-+
-+
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/glib/dbus-gvalue-utils.h dbus-0.61/glib/dbus-gvalue-utils.h
---- dbus-0.61.orig/glib/dbus-gvalue-utils.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gvalue-utils.h 2006-02-13 23:30:11.000000000 +0100
-@@ -0,0 +1,73 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gvalue-utils.h: Non-DBus-specific functions related to GType/GValue
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef DBUS_GOBJECT_VALUE_UTILS_H
-+#define DBUS_GOBJECT_VALUE_UTILS_H
-+
-+#include <glib.h>
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+void _dbus_g_type_specialized_builtins_init (void);
-+
-+gboolean _dbus_g_type_is_fixed (GType gtype);
-+guint _dbus_g_type_fixed_get_size (GType gtype);
-+
-+gboolean _dbus_gvalue_set_from_pointer (GValue *value,
-+ gconstpointer storage);
-+
-+typedef void (*DBusGHashValueForeachFunc) (GValue * key, GValue *val, gpointer data);
-+
-+void _dbus_g_hash_table_value_foreach (GHashTable *table,
-+ GType hash_type,
-+ DBusGHashValueForeachFunc func,
-+ gpointer data);
-+
-+void _dbus_g_hash_table_insert_values (GHashTable *table,
-+ GValue *key_val,
-+ GValue *value_val);
-+void _dbus_g_hash_table_insert_steal_values (GHashTable *table,
-+ GValue *key_val,
-+ GValue *value_val);
-+
-+gboolean _dbus_gtype_is_valid_hash_key (GType type);
-+gboolean _dbus_gtype_is_valid_hash_value (GType type);
-+
-+GHashFunc _dbus_g_hash_func_from_gtype (GType gtype);
-+GEqualFunc _dbus_g_hash_equal_from_gtype (GType gtype);
-+GDestroyNotify _dbus_g_hash_free_from_gtype (GType gtype);
-+
-+gboolean _dbus_gvalue_store (GValue *value,
-+ gpointer storage);
-+
-+gboolean _dbus_gvalue_take (GValue *value,
-+ GTypeCValue *cvalue);
-+
-+gboolean _dbus_gtype_can_signal_error (GType gtype);
-+gboolean _dbus_gvalue_signals_error (const GValue *value);
-+
-+
-+G_END_DECLS
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/dbus-gvalue.c dbus-0.61/glib/dbus-gvalue.c
---- dbus-0.61.orig/glib/dbus-gvalue.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gvalue.c 2006-02-16 01:43:41.000000000 +0100
-@@ -0,0 +1,1851 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-gvalue.c GValue to-from DBusMessageIter
-+ *
-+ * Copyright (C) 2004 Ximian, Inc.
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include "config.h"
-+#include "dbus-gtest.h"
-+#include "dbus-gvalue.h"
-+#include "dbus-gsignature.h"
-+#include "dbus-gobject.h"
-+#include "dbus-gvalue-utils.h"
-+#include "dbus/dbus-glib.h"
-+#include <string.h>
-+#include <glib.h>
-+#include <glib/gi18n.h>
-+#include "dbus/dbus-signature.h"
-+
-+static gboolean demarshal_static_variant (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+
-+
-+static gboolean marshal_basic (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_basic (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean marshal_strv (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_strv (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean marshal_valuearray (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_valuearray (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean marshal_variant (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_variant (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean marshal_proxy (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_proxy (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean marshal_object_path (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_object_path (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean marshal_object (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_object (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean marshal_map (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_map (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+
-+static gboolean marshal_collection (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean marshal_collection_ptrarray (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean marshal_collection_array (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_collection (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean demarshal_collection_ptrarray (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean demarshal_collection_array (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+static gboolean marshal_struct (DBusMessageIter *iter,
-+ const GValue *value);
-+static gboolean demarshal_struct (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+
-+
-+typedef gboolean (*DBusGValueMarshalFunc) (DBusMessageIter *iter,
-+ const GValue *value);
-+typedef gboolean (*DBusGValueDemarshalFunc) (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+
-+typedef struct {
-+ DBusGValueMarshalFunc marshaller;
-+ DBusGValueDemarshalFunc demarshaller;
-+} DBusGTypeMarshalVtable;
-+
-+typedef struct {
-+ const char *sig;
-+ const DBusGTypeMarshalVtable *vtable;
-+} DBusGTypeMarshalData;
-+
-+static GQuark
-+dbus_g_type_metadata_data_quark ()
-+{
-+ static GQuark quark;
-+ if (!quark)
-+ quark = g_quark_from_static_string ("DBusGTypeMetaData");
-+
-+ return quark;
-+}
-+
-+static void
-+set_type_metadata (GType type, const DBusGTypeMarshalData *data)
-+{
-+ g_type_set_qdata (type, dbus_g_type_metadata_data_quark (), (gpointer) data);
-+}
-+
-+static void
-+register_basic (int typecode, const DBusGTypeMarshalData *typedata)
-+{
-+ set_type_metadata (_dbus_gtype_from_basic_typecode (typecode), typedata);
-+}
-+
-+void
-+_dbus_g_value_types_init (void)
-+{
-+ static gboolean types_initialized;
-+
-+ static const DBusGTypeMarshalVtable basic_vtable = {
-+ marshal_basic,
-+ demarshal_basic
-+ };
-+
-+ if (types_initialized)
-+ return;
-+
-+ dbus_g_type_specialized_init ();
-+ _dbus_g_type_specialized_builtins_init ();
-+
-+ /* Register basic types */
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_BOOLEAN_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_BOOLEAN, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_BYTE_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_BYTE, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_INT16_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_INT16, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_UINT16_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_UINT16, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_UINT32_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_UINT32, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_INT32_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_INT32, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_UINT64_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_UINT64, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_INT64_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_INT64, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_DOUBLE_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_DOUBLE, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_STRING_AS_STRING,
-+ &basic_vtable,
-+ };
-+ register_basic (DBUS_TYPE_STRING, &typedata);
-+ }
-+ /* fundamental GTypes that don't map 1:1 with D-BUS types */
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_BYTE_AS_STRING,
-+ &basic_vtable,
-+ };
-+ set_type_metadata (G_TYPE_CHAR, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_INT32_AS_STRING,
-+ &basic_vtable,
-+ };
-+ set_type_metadata (G_TYPE_LONG, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_UINT32_AS_STRING,
-+ &basic_vtable,
-+ };
-+ set_type_metadata (G_TYPE_ULONG, &typedata);
-+ }
-+ {
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_DOUBLE_AS_STRING,
-+ &basic_vtable,
-+ };
-+ set_type_metadata (G_TYPE_FLOAT, &typedata);
-+ }
-+
-+ /* Register complex types with builtin GType mappings */
-+ {
-+ static const DBusGTypeMarshalVtable vtable = {
-+ marshal_variant,
-+ demarshal_variant
-+ };
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_VARIANT_AS_STRING,
-+ &vtable
-+ };
-+ set_type_metadata (G_TYPE_VALUE, &typedata);
-+ };
-+ {
-+ static const DBusGTypeMarshalVtable vtable = {
-+ marshal_strv,
-+ demarshal_strv
-+ };
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING,
-+ &vtable
-+ };
-+ set_type_metadata (G_TYPE_STRV, &typedata);
-+ };
-+
-+
-+ /* Register some types specific to the D-BUS GLib bindings */
-+ {
-+ static const DBusGTypeMarshalVtable vtable = {
-+ marshal_proxy,
-+ demarshal_proxy
-+ };
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_OBJECT_PATH_AS_STRING,
-+ &vtable
-+ };
-+ set_type_metadata (DBUS_TYPE_G_PROXY, &typedata);
-+ }
-+
-+ {
-+ static const DBusGTypeMarshalVtable vtable = {
-+ marshal_object_path,
-+ demarshal_object_path
-+ };
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_OBJECT_PATH_AS_STRING,
-+ &vtable
-+ };
-+ set_type_metadata (DBUS_TYPE_G_OBJECT_PATH, &typedata);
-+ }
-+
-+ {
-+ static const DBusGTypeMarshalVtable vtable = {
-+ marshal_object,
-+ demarshal_object
-+ };
-+ static const DBusGTypeMarshalData typedata = {
-+ DBUS_TYPE_OBJECT_PATH_AS_STRING,
-+ &vtable
-+ };
-+ set_type_metadata (G_TYPE_OBJECT, &typedata);
-+ }
-+
-+ types_initialized = TRUE;
-+}
-+
-+/**
-+ * Get the GLib type ID for a DBusGObjectPath boxed type.
-+ *
-+ * @returns GLib type
-+ */
-+GType
-+dbus_g_object_path_get_g_type (void)
-+{
-+ static GType type_id = 0;
-+
-+ if (!type_id)
-+ type_id = g_boxed_type_register_static ("DBusGObjectPath",
-+ (GBoxedCopyFunc) g_strdup,
-+ (GBoxedFreeFunc) g_free);
-+ return type_id;
-+}
-+
-+
-+char *
-+_dbus_gtype_to_signature (GType gtype)
-+{
-+ char *ret;
-+ DBusGTypeMarshalData *typedata;
-+
-+ if (dbus_g_type_is_collection (gtype))
-+ {
-+ GType elt_gtype;
-+ char *subsig;
-+
-+ elt_gtype = dbus_g_type_get_collection_specialization (gtype);
-+ subsig = _dbus_gtype_to_signature (elt_gtype);
-+ ret = g_strconcat (DBUS_TYPE_ARRAY_AS_STRING, subsig, NULL);
-+ g_free (subsig);
-+ }
-+ else if (dbus_g_type_is_map (gtype))
-+ {
-+ GType key_gtype;
-+ GType val_gtype;
-+ char *key_subsig;
-+ char *val_subsig;
-+
-+ key_gtype = dbus_g_type_get_map_key_specialization (gtype);
-+ val_gtype = dbus_g_type_get_map_value_specialization (gtype);
-+ key_subsig = _dbus_gtype_to_signature (key_gtype);
-+ val_subsig = _dbus_gtype_to_signature (val_gtype);
-+ ret = g_strconcat (DBUS_TYPE_ARRAY_AS_STRING DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING, key_subsig, val_subsig, DBUS_DICT_ENTRY_END_CHAR_AS_STRING, NULL);
-+ g_free (key_subsig);
-+ g_free (val_subsig);
-+ }
-+ else if (dbus_g_type_is_struct (gtype))
-+ {
-+ guint i, size;
-+ GString *sig;
-+ size = dbus_g_type_get_struct_size (gtype);
-+ sig = g_string_sized_new (size+2); /*some sensible starting size*/
-+ g_string_assign (sig, DBUS_STRUCT_BEGIN_CHAR_AS_STRING);
-+ for (i=0; i < size; i++)
-+ {
-+ g_string_append (sig, _dbus_gtype_to_signature (
-+ dbus_g_type_get_struct_member_type (gtype, i)));
-+ }
-+ g_string_append (sig, DBUS_STRUCT_END_CHAR_AS_STRING);
-+ ret = g_string_free (sig, FALSE);
-+ }
-+ else
-+ {
-+ typedata = g_type_get_qdata (gtype, dbus_g_type_metadata_data_quark ());
-+ if (typedata == NULL)
-+ return NULL;
-+ ret = g_strdup (typedata->sig);
-+ }
-+ return ret;
-+}
-+
-+char *
-+_dbus_gvalue_to_signature (const GValue *val)
-+{
-+ GType gtype;
-+
-+ gtype = G_VALUE_TYPE (val);
-+ if (g_type_is_a (gtype, G_TYPE_VALUE_ARRAY))
-+ {
-+ GString *str;
-+ guint i;
-+ GValueArray *array;
-+
-+ array = g_value_get_boxed (val);
-+
-+ str = g_string_new (DBUS_STRUCT_BEGIN_CHAR_AS_STRING);
-+ for (i = 0; i < array->n_values; i++)
-+ {
-+ char *sig;
-+ sig = _dbus_gvalue_to_signature (g_value_array_get_nth (array, i));
-+ g_string_append (str, sig);
-+ g_free (sig);
-+ }
-+ g_string_append (str, DBUS_STRUCT_END_CHAR_AS_STRING);
-+
-+ return g_string_free (str, FALSE);
-+ }
-+ else
-+ return _dbus_gtype_to_signature (gtype);
-+}
-+
-+static gboolean
-+demarshal_basic (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ int current_type;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ g_assert (dbus_type_is_basic (current_type));
-+
-+ switch (current_type)
-+ {
-+ case DBUS_TYPE_BOOLEAN:
-+ {
-+ dbus_bool_t bool;
-+ dbus_message_iter_get_basic (iter, &bool);
-+ g_value_set_boolean (value, bool);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_BYTE:
-+ {
-+ unsigned char byte;
-+ dbus_message_iter_get_basic (iter, &byte);
-+ g_value_set_uchar (value, byte);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_INT32:
-+ {
-+ dbus_int32_t intval;
-+ dbus_message_iter_get_basic (iter, &intval);
-+ g_value_set_int (value, intval);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_UINT32:
-+ {
-+ dbus_uint32_t intval;
-+ dbus_message_iter_get_basic (iter, &intval);
-+ g_value_set_uint (value, intval);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_INT64:
-+ {
-+ dbus_int64_t intval;
-+ dbus_message_iter_get_basic (iter, &intval);
-+ g_value_set_int64 (value, intval);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_UINT64:
-+ {
-+ dbus_uint64_t intval;
-+ dbus_message_iter_get_basic (iter, &intval);
-+ g_value_set_uint64 (value, intval);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_DOUBLE:
-+ {
-+ double dval;
-+ dbus_message_iter_get_basic (iter, &dval);
-+ g_value_set_double (value, dval);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_INT16:
-+ {
-+ dbus_int16_t v;
-+ dbus_message_iter_get_basic (iter, &v);
-+ g_value_set_int (value, v);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_UINT16:
-+ {
-+ dbus_uint16_t v;
-+ dbus_message_iter_get_basic (iter, &v);
-+ g_value_set_uint (value, v);
-+ return TRUE;
-+ }
-+ case DBUS_TYPE_STRING:
-+ {
-+ const char *s;
-+ dbus_message_iter_get_basic (iter, &s);
-+ g_value_set_string (value, s);
-+ return TRUE;
-+ }
-+ default:
-+ g_assert_not_reached ();
-+ return FALSE;
-+ }
-+}
-+
-+static gboolean
-+demarshal_static_variant (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ char *sig;
-+ int current_type;
-+ DBusMessageIter subiter;
-+ GType variant_type;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ dbus_message_iter_recurse (iter, &subiter);
-+ sig = dbus_message_iter_get_signature (&subiter);
-+
-+ variant_type = _dbus_gtype_from_signature (sig, context->proxy != NULL);
-+ if (variant_type != G_TYPE_INVALID)
-+ {
-+ g_value_init (value, variant_type);
-+
-+ if (!_dbus_gvalue_demarshal (context, &subiter, value, error))
-+ {
-+ dbus_free (sig);
-+ return FALSE;
-+ }
-+ }
-+ dbus_free (sig);
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_variant (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+
-+{
-+ GValue *variant_val;
-+ variant_val = g_new0 (GValue, 1);
-+
-+ if (!demarshal_static_variant (context, iter, variant_val, error))
-+ return FALSE;
-+
-+ g_value_set_boxed_take_ownership (value, variant_val);
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_proxy (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ DBusGProxy *new_proxy;
-+ const char *objpath;
-+ int current_type;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ if (current_type != DBUS_TYPE_OBJECT_PATH)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS object path, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ g_assert (context->proxy != NULL);
-+
-+ dbus_message_iter_get_basic (iter, &objpath);
-+
-+ new_proxy = dbus_g_proxy_new_from_proxy (context->proxy, NULL, objpath);
-+ g_value_set_object_take_ownership (value, new_proxy);
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_object_path (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ const char *objpath;
-+ int current_type;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ if (current_type != DBUS_TYPE_OBJECT_PATH)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS object path, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ dbus_message_iter_get_basic (iter, &objpath);
-+
-+ g_value_set_boxed_take_ownership (value, g_strdup (objpath));
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_object (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ const char *objpath;
-+ int current_type;
-+ GObject *obj;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ if (current_type != DBUS_TYPE_OBJECT_PATH)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS object path, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+ g_assert (context->proxy == NULL);
-+
-+ dbus_message_iter_get_basic (iter, &objpath);
-+
-+ obj = dbus_g_connection_lookup_g_object (context->gconnection, objpath);
-+ if (obj == NULL)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Unregistered object at path '%s'"),
-+ objpath);
-+ return FALSE;
-+ }
-+ g_value_set_object (value, obj);
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_strv (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ DBusMessageIter subiter;
-+ int current_type;
-+ char **ret;
-+ int len;
-+ int i;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ if (current_type != DBUS_TYPE_ARRAY)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS array, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ current_type = dbus_message_iter_get_arg_type (&subiter);
-+ if (current_type != DBUS_TYPE_INVALID
-+ && current_type != DBUS_TYPE_STRING)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS string, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ len = dbus_message_iter_get_array_len (&subiter);
-+ g_assert (len >= 0);
-+ ret = g_malloc (sizeof (char *) * (len + 1));
-+
-+ i = 0;
-+ while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID)
-+ {
-+ g_assert (i < len);
-+ g_assert (current_type == DBUS_TYPE_STRING);
-+
-+ dbus_message_iter_get_basic (&subiter, &(ret[i]));
-+ ret[i] = g_strdup (ret[i]);
-+
-+ dbus_message_iter_next (&subiter);
-+ i++;
-+ }
-+ ret[i] = NULL;
-+ g_value_set_boxed_take_ownership (value, ret);
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_valuearray (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ int current_type;
-+ GValueArray *ret;
-+ DBusMessageIter subiter;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ if (current_type != DBUS_TYPE_STRUCT)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS struct, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ ret = g_value_array_new (12);
-+
-+ while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID)
-+ {
-+ GValue *val;
-+ GType elt_type;
-+ char *current_sig;
-+
-+ g_value_array_append (ret, NULL);
-+ val = g_value_array_get_nth (ret, ret->n_values - 1);
-+
-+ current_sig = dbus_message_iter_get_signature (&subiter);
-+ elt_type = _dbus_gtype_from_signature (current_sig, TRUE);
-+
-+ dbus_free (current_sig);
-+ if (elt_type == G_TYPE_INVALID)
-+ {
-+ g_value_array_free (ret);
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Couldn't demarshal argument with signature \"%s\""), current_sig);
-+ return FALSE;
-+ }
-+
-+ g_value_init (val, elt_type);
-+
-+ if (!_dbus_gvalue_demarshal (context, &subiter, val, error))
-+ {
-+ g_value_array_free (ret);
-+ return FALSE;
-+ }
-+
-+ dbus_message_iter_next (&subiter);
-+ }
-+
-+ g_value_set_boxed_take_ownership (value, ret);
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_map (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ GType gtype;
-+ DBusMessageIter subiter;
-+ int current_type;
-+ gpointer ret;
-+ GType key_gtype;
-+ GType value_gtype;
-+ DBusGTypeSpecializedAppendContext appendctx;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ if (current_type != DBUS_TYPE_ARRAY)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS array, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ gtype = G_VALUE_TYPE (value);
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ current_type = dbus_message_iter_get_arg_type (&subiter);
-+ if (current_type != DBUS_TYPE_INVALID
-+ && current_type != DBUS_TYPE_DICT_ENTRY)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS dict entry, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ key_gtype = dbus_g_type_get_map_key_specialization (gtype);
-+ value_gtype = dbus_g_type_get_map_value_specialization (gtype);
-+
-+ ret = dbus_g_type_specialized_construct (gtype);
-+ g_value_set_boxed_take_ownership (value, ret);
-+
-+ dbus_g_type_specialized_init_append (value, &appendctx);
-+
-+ while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID)
-+ {
-+ DBusMessageIter entry_iter;
-+ GValue key_value = {0,};
-+ GValue value_value = {0,};
-+
-+ current_type = dbus_message_iter_get_arg_type (&subiter);
-+ g_assert (current_type == DBUS_TYPE_DICT_ENTRY);
-+
-+ dbus_message_iter_recurse (&subiter, &entry_iter);
-+
-+ g_value_init (&key_value, key_gtype);
-+ if (!_dbus_gvalue_demarshal (context,
-+ &entry_iter,
-+ &key_value,
-+ error))
-+ return FALSE;
-+
-+ dbus_message_iter_next (&entry_iter);
-+
-+ g_value_init (&value_value, value_gtype);
-+ if (!_dbus_gvalue_demarshal (context,
-+ &entry_iter,
-+ &value_value,
-+ error))
-+ return FALSE;
-+
-+ dbus_g_type_specialized_map_append (&appendctx, &key_value, &value_value);
-+ /* Ownership of values passes to map, don't unset */
-+
-+ dbus_message_iter_next (&subiter);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_struct (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ int current_type;
-+ DBusMessageIter subiter;
-+ guint i, size;
-+ GValue val = {0,};
-+ GType elt_type;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+ if (current_type != DBUS_TYPE_STRUCT)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS struct, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ g_value_set_boxed_take_ownership (value,
-+ dbus_g_type_specialized_construct (G_VALUE_TYPE (value)));
-+
-+ size = dbus_g_type_get_struct_size (G_VALUE_TYPE (value));
-+
-+ for (i=0; i < size; i++)
-+ {
-+
-+ elt_type = dbus_g_type_get_struct_member_type (G_VALUE_TYPE(value), i);
-+ if (elt_type == G_TYPE_INVALID)
-+ {
-+ g_value_unset (value);
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Couldn't demarshal argument, "
-+ "struct type %s has no member %d"),
-+ g_type_name (G_VALUE_TYPE(value)), i);
-+ return FALSE;
-+ }
-+
-+ g_value_init (&val, elt_type);
-+
-+ if (!_dbus_gvalue_demarshal (context, &subiter, &val, error))
-+ {
-+ g_value_unset (&val);
-+ g_value_unset (value);
-+ return FALSE;
-+ }
-+ if (!dbus_g_type_struct_set_member (value, i, &val))
-+ {
-+ g_value_unset (&val);
-+ g_value_unset (value);
-+ return FALSE;
-+ }
-+
-+ dbus_message_iter_next (&subiter);
-+ g_value_unset (&val);
-+ }
-+
-+ g_assert (dbus_message_iter_get_arg_type (&subiter) == DBUS_TYPE_INVALID);
-+
-+ return TRUE;
-+}
-+
-+
-+static DBusGValueDemarshalFunc
-+get_type_demarshaller (GType type)
-+{
-+ DBusGTypeMarshalData *typedata;
-+
-+ typedata = g_type_get_qdata (type, dbus_g_type_metadata_data_quark ());
-+ if (typedata == NULL)
-+ {
-+ if (g_type_is_a (type, G_TYPE_VALUE_ARRAY))
-+ return demarshal_valuearray;
-+ if (dbus_g_type_is_collection (type))
-+ return demarshal_collection;
-+ if (dbus_g_type_is_map (type))
-+ return demarshal_map;
-+ if (dbus_g_type_is_struct (type))
-+ return demarshal_struct;
-+
-+ g_warning ("No demarshaller registered for type \"%s\"", g_type_name (type));
-+ return NULL;
-+ }
-+ g_assert (typedata->vtable);
-+ return typedata->vtable->demarshaller;
-+}
-+
-+static gboolean
-+demarshal_collection (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ GType coltype;
-+ GType subtype;
-+
-+ coltype = G_VALUE_TYPE (value);
-+ subtype = dbus_g_type_get_collection_specialization (coltype);
-+
-+ if (_dbus_g_type_is_fixed (subtype))
-+ return demarshal_collection_array (context, iter, value, error);
-+ else
-+ return demarshal_collection_ptrarray (context, iter, value, error);
-+}
-+
-+static gboolean
-+demarshal_collection_ptrarray (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ GType coltype;
-+ GType subtype;
-+ gpointer instance;
-+ DBusGTypeSpecializedAppendContext ctx;
-+ DBusGValueDemarshalFunc demarshaller;
-+ DBusMessageIter subiter;
-+ int current_type;
-+
-+ current_type = dbus_message_iter_get_arg_type (iter);
-+
-+ if (current_type != DBUS_TYPE_ARRAY)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Expected D-BUS array, got type code \'%c\'"), (guchar) current_type);
-+ return FALSE;
-+ }
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ coltype = G_VALUE_TYPE (value);
-+ subtype = dbus_g_type_get_collection_specialization (coltype);
-+
-+ demarshaller = get_type_demarshaller (subtype);
-+
-+ if (!demarshaller)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("No demarshaller registered for type \"%s\" of collection \"%s\""),
-+ g_type_name (coltype),
-+ g_type_name (subtype));
-+ return FALSE;
-+ }
-+
-+ instance = dbus_g_type_specialized_construct (coltype);
-+ g_value_set_boxed_take_ownership (value, instance);
-+
-+ dbus_g_type_specialized_init_append (value, &ctx);
-+
-+ while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID)
-+ {
-+ GValue eltval = {0, };
-+
-+ g_value_init (&eltval, subtype);
-+
-+ if (!demarshaller (context, &subiter, &eltval, error))
-+ {
-+ dbus_g_type_specialized_collection_end_append (&ctx);
-+ g_value_unset (value);
-+ return FALSE;
-+ }
-+ dbus_g_type_specialized_collection_append (&ctx, &eltval);
-+
-+ dbus_message_iter_next (&subiter);
-+ }
-+ dbus_g_type_specialized_collection_end_append (&ctx);
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+demarshal_collection_array (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ DBusMessageIter subiter;
-+ GArray *ret;
-+ GType elt_gtype;
-+ int elt_size;
-+ void *msgarray;
-+ int msgarray_len;
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ elt_gtype = dbus_g_type_get_collection_specialization (G_VALUE_TYPE (value));
-+ g_assert (elt_gtype != G_TYPE_INVALID);
-+ g_assert (_dbus_g_type_is_fixed (elt_gtype));
-+
-+ elt_size = _dbus_g_type_fixed_get_size (elt_gtype);
-+
-+ ret = g_array_new (FALSE, TRUE, elt_size);
-+
-+ msgarray = NULL;
-+ dbus_message_iter_get_fixed_array (&subiter,
-+ &msgarray,
-+ &msgarray_len);
-+ g_assert (msgarray != NULL || msgarray_len == 0);
-+
-+ if (msgarray_len)
-+ g_array_append_vals (ret, msgarray, (guint) msgarray_len);
-+
-+ g_value_set_boxed_take_ownership (value, ret);
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+_dbus_gvalue_demarshal (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ GType gtype;
-+ DBusGValueDemarshalFunc demarshaller;
-+
-+ gtype = G_VALUE_TYPE (value);
-+
-+ demarshaller = get_type_demarshaller (gtype);
-+
-+ if (demarshaller == NULL)
-+ {
-+ g_set_error (error,
-+ DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("No demarshaller registered for type \"%s\""),
-+ g_type_name (gtype));
-+ return FALSE;
-+ }
-+
-+ return demarshaller (context, iter, value, error);
-+}
-+
-+gboolean
-+_dbus_gvalue_demarshal_variant (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error)
-+{
-+ return demarshal_static_variant (context, iter, value, error);
-+}
-+
-+GValueArray *
-+_dbus_gvalue_demarshal_message (DBusGValueMarshalCtx *context,
-+ DBusMessage *message,
-+ guint n_types,
-+ const GType *types,
-+ GError **error)
-+{
-+ GValueArray *ret;
-+ DBusMessageIter iter;
-+ int current_type;
-+ guint index;
-+
-+ ret = g_value_array_new (6); /* 6 is a typical maximum for arguments */
-+
-+ dbus_message_iter_init (message, &iter);
-+ index = 0;
-+ while ((current_type = dbus_message_iter_get_arg_type (&iter)) != DBUS_TYPE_INVALID)
-+ {
-+ GValue *value;
-+ GType gtype;
-+
-+ if (index >= n_types)
-+ {
-+ g_set_error (error, DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Too many arguments in message"));
-+ goto lose;
-+ }
-+
-+ g_value_array_append (ret, NULL);
-+ value = g_value_array_get_nth (ret, index);
-+
-+ gtype = types[index];
-+ g_value_init (value, gtype);
-+
-+ if (!_dbus_gvalue_demarshal (context, &iter, value, error))
-+ goto lose;
-+ dbus_message_iter_next (&iter);
-+ index++;
-+ }
-+ if (index < n_types)
-+ {
-+ g_set_error (error, DBUS_GERROR,
-+ DBUS_GERROR_INVALID_ARGS,
-+ _("Too few arguments in message"));
-+ goto lose;
-+ }
-+
-+ return ret;
-+ lose:
-+ g_value_array_free (ret);
-+ return NULL;
-+}
-+
-+static gboolean
-+marshal_basic (DBusMessageIter *iter, const GValue *value)
-+{
-+ GType value_type;
-+
-+ value_type = G_VALUE_TYPE (value);
-+
-+ switch (value_type)
-+ {
-+ case G_TYPE_CHAR:
-+ {
-+ char b = g_value_get_char (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_BYTE,
-+ &b))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_UCHAR:
-+ {
-+ unsigned char b = g_value_get_uchar (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_BYTE,
-+ &b))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_BOOLEAN:
-+ {
-+ dbus_bool_t b = g_value_get_boolean (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_BOOLEAN,
-+ &b))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_INT:
-+ {
-+ dbus_int32_t v = g_value_get_int (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_INT32,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_UINT:
-+ {
-+ dbus_uint32_t v = g_value_get_uint (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_UINT32,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_LONG:
-+ {
-+ dbus_int32_t v = g_value_get_long (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_INT32,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_ULONG:
-+ {
-+ dbus_uint32_t v = g_value_get_ulong (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_UINT32,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_INT64:
-+ {
-+ gint64 v = g_value_get_int64 (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_INT64,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_UINT64:
-+ {
-+ guint64 v = g_value_get_uint64 (value);
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_UINT64,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_FLOAT:
-+ {
-+ double v = g_value_get_float (value);
-+
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_DOUBLE,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_DOUBLE:
-+ {
-+ double v = g_value_get_double (value);
-+
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_DOUBLE,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+ case G_TYPE_STRING:
-+ /* FIXME, the GValue string may not be valid UTF-8 */
-+ {
-+ const char *v = g_value_get_string (value);
-+ if (!v)
-+ v = "";
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_STRING,
-+ &v))
-+ goto nomem;
-+ }
-+ return TRUE;
-+
-+ default:
-+ {
-+ g_assert_not_reached ();
-+ return FALSE;
-+ }
-+ }
-+
-+ nomem:
-+ g_error ("no memory");
-+ return FALSE;
-+}
-+
-+static gboolean
-+marshal_strv (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ DBusMessageIter subiter;
-+ char **array;
-+ char **elt;
-+ gboolean ret = FALSE;
-+
-+ g_assert (G_VALUE_TYPE (value) == g_strv_get_type ());
-+
-+ array = g_value_get_boxed (value);
-+
-+ if (!dbus_message_iter_open_container (iter,
-+ DBUS_TYPE_ARRAY,
-+ "s",
-+ &subiter))
-+ goto out;
-+
-+ for (elt = array; *elt; elt++)
-+ {
-+ if (!dbus_message_iter_append_basic (&subiter,
-+ DBUS_TYPE_STRING,
-+ elt))
-+ goto out;
-+ }
-+
-+ if (!dbus_message_iter_close_container (iter, &subiter))
-+ goto out;
-+ ret = TRUE;
-+ out:
-+ return ret;
-+}
-+
-+static gboolean
-+marshal_valuearray (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ GValueArray *array;
-+ guint i;
-+ DBusMessageIter subiter;
-+
-+ g_assert (G_VALUE_TYPE (value) == G_TYPE_VALUE_ARRAY);
-+
-+ array = g_value_get_boxed (value);
-+
-+ if (!dbus_message_iter_open_container (iter,
-+ DBUS_TYPE_STRUCT,
-+ NULL,
-+ &subiter))
-+ goto oom;
-+
-+ for (i = 0; i < array->n_values; i++)
-+ {
-+ if (!_dbus_gvalue_marshal (&subiter, g_value_array_get_nth (array, i)))
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_iter_close_container (iter, &subiter))
-+ goto oom;
-+
-+ return TRUE;
-+ oom:
-+ g_error ("out of memory");
-+ return FALSE;
-+}
-+
-+static gboolean
-+marshal_proxy (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ const char *path;
-+ DBusGProxy *proxy;
-+
-+ g_assert (G_VALUE_TYPE (value) == dbus_g_proxy_get_type ());
-+
-+ proxy = g_value_get_object (value);
-+ path = dbus_g_proxy_get_path (proxy);
-+
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_OBJECT_PATH,
-+ &path))
-+ return FALSE;
-+ return TRUE;
-+}
-+
-+static gboolean
-+marshal_object_path (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ const char *path;
-+
-+ g_assert (G_VALUE_TYPE (value) == DBUS_TYPE_G_OBJECT_PATH);
-+
-+ path = (const char*) g_value_get_boxed (value);
-+
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_OBJECT_PATH,
-+ &path))
-+ return FALSE;
-+ return TRUE;
-+}
-+
-+static gboolean
-+marshal_object (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ const char *path;
-+ GObject *obj;
-+
-+ obj = g_value_get_object (value);
-+ path = _dbus_gobject_get_path (obj);
-+
-+ if (path == NULL)
-+ /* FIXME should throw error */
-+ return FALSE;
-+
-+ if (!dbus_message_iter_append_basic (iter,
-+ DBUS_TYPE_OBJECT_PATH,
-+ &path))
-+ return FALSE;
-+ return TRUE;
-+}
-+
-+struct DBusGLibHashMarshalData
-+{
-+ const char *entry_sig;
-+ DBusMessageIter *iter;
-+ gboolean err;
-+};
-+
-+static void
-+marshal_map_entry (const GValue *key,
-+ const GValue *value,
-+ gpointer data)
-+{
-+ struct DBusGLibHashMarshalData *hashdata = data;
-+ DBusMessageIter subiter;
-+
-+ if (hashdata->err)
-+ return;
-+
-+ if (!dbus_message_iter_open_container (hashdata->iter,
-+ DBUS_TYPE_DICT_ENTRY,
-+ NULL,
-+ &subiter))
-+ goto lose;
-+
-+ if (!_dbus_gvalue_marshal (&subiter, key))
-+ goto lose;
-+
-+ if (!_dbus_gvalue_marshal (&subiter, value))
-+ goto lose;
-+
-+ if (!dbus_message_iter_close_container (hashdata->iter, &subiter))
-+ goto lose;
-+
-+ return;
-+ lose:
-+ hashdata->err = TRUE;
-+}
-+
-+static gboolean
-+marshal_map (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ GType gtype;
-+ DBusMessageIter arr_iter;
-+ gboolean ret;
-+ struct DBusGLibHashMarshalData hashdata;
-+ char *key_sig;
-+ char *value_sig;
-+ GType key_type;
-+ GType value_type;
-+ char *entry_sig;
-+ char *array_sig;
-+
-+ gtype = G_VALUE_TYPE (value);
-+
-+ ret = FALSE;
-+
-+ key_type = dbus_g_type_get_map_key_specialization (gtype);
-+ g_assert (_dbus_gtype_is_valid_hash_key (key_type));
-+ value_type = dbus_g_type_get_map_value_specialization (gtype);
-+ g_assert (_dbus_gtype_is_valid_hash_value (value_type));
-+
-+ key_sig = _dbus_gtype_to_signature (key_type);
-+ if (!key_sig)
-+ {
-+ g_warning ("Cannot marshal type \"%s\" in map\n", g_type_name (key_type));
-+ return FALSE;
-+ }
-+ value_sig = _dbus_gtype_to_signature (value_type);
-+ if (!value_sig)
-+ {
-+ g_free (key_sig);
-+ g_warning ("Cannot marshal type \"%s\" in map\n", g_type_name (value_type));
-+ return FALSE;
-+ }
-+ entry_sig = g_strdup_printf ("%s%s", key_sig, value_sig);
-+ g_free (key_sig);
-+ g_free (value_sig);
-+ array_sig = g_strdup_printf ("%c%s%c",
-+ DBUS_DICT_ENTRY_BEGIN_CHAR,
-+ entry_sig,
-+ DBUS_DICT_ENTRY_END_CHAR);
-+ if (!dbus_message_iter_open_container (iter,
-+ DBUS_TYPE_ARRAY,
-+ array_sig,
-+ &arr_iter))
-+ goto lose;
-+
-+ hashdata.iter = &arr_iter;
-+ hashdata.err = FALSE;
-+ hashdata.entry_sig = entry_sig;
-+
-+ dbus_g_type_map_value_iterate (value,
-+ marshal_map_entry,
-+ &hashdata);
-+
-+ if (!dbus_message_iter_close_container (iter, &arr_iter))
-+ goto lose;
-+
-+ out:
-+ g_free (entry_sig);
-+ g_free (array_sig);
-+ return !hashdata.err;
-+ lose:
-+ hashdata.err = TRUE;
-+ goto out;
-+}
-+
-+static gboolean
-+marshal_struct (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ GType gtype;
-+ DBusMessageIter subiter;
-+ gboolean ret;
-+ guint size, i;
-+ GValue val = {0,};
-+
-+ gtype = G_VALUE_TYPE (value);
-+
-+ ret = FALSE;
-+
-+ size = dbus_g_type_get_struct_size (gtype);
-+
-+ if (!dbus_message_iter_open_container (iter,
-+ DBUS_TYPE_STRUCT,
-+ NULL,
-+ &subiter))
-+ goto oom;
-+
-+ for (i = 0; i < size; i++)
-+ {
-+ g_value_init (&val, dbus_g_type_get_struct_member_type
-+ (G_VALUE_TYPE(value), i));
-+ if (!dbus_g_type_struct_get_member (value, i, &val))
-+ return FALSE;
-+ if (!_dbus_gvalue_marshal (&subiter, &val))
-+ return FALSE;
-+ g_value_unset(&val);
-+ }
-+
-+ if (!dbus_message_iter_close_container (iter, &subiter))
-+ goto oom;
-+
-+ return TRUE;
-+ oom:
-+ g_error ("out of memory");
-+ return FALSE;
-+}
-+
-+static gboolean
-+marshal_variant (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ GType value_gtype;
-+ DBusMessageIter subiter;
-+ char *variant_sig;
-+ GValue *real_value;
-+ gboolean ret = FALSE;
-+
-+ real_value = g_value_get_boxed (value);
-+ value_gtype = G_VALUE_TYPE (real_value);
-+
-+ variant_sig = _dbus_gvalue_to_signature (real_value);
-+ if (variant_sig == NULL)
-+ {
-+ g_warning ("Cannot marshal type \"%s\" in variant", g_type_name (value_gtype));
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_iter_open_container (iter,
-+ DBUS_TYPE_VARIANT,
-+ variant_sig,
-+ &subiter))
-+ goto out;
-+
-+ if (!_dbus_gvalue_marshal (&subiter, real_value))
-+ goto out;
-+
-+ if (!dbus_message_iter_close_container (iter, &subiter))
-+ goto out;
-+
-+ ret = TRUE;
-+ out:
-+ g_free (variant_sig);
-+ return ret;
-+}
-+
-+static DBusGValueMarshalFunc
-+get_type_marshaller (GType type)
-+{
-+ DBusGTypeMarshalData *typedata;
-+
-+ typedata = g_type_get_qdata (type, dbus_g_type_metadata_data_quark ());
-+ if (typedata == NULL)
-+ {
-+ if (g_type_is_a (type, G_TYPE_VALUE_ARRAY))
-+ return marshal_valuearray;
-+ if (dbus_g_type_is_collection (type))
-+ return marshal_collection;
-+ if (dbus_g_type_is_map (type))
-+ return marshal_map;
-+ if (dbus_g_type_is_struct (type))
-+ return marshal_struct;
-+
-+ g_warning ("No marshaller registered for type \"%s\"", g_type_name (type));
-+ return NULL;
-+ }
-+ g_assert (typedata->vtable);
-+ return typedata->vtable->marshaller;
-+}
-+
-+typedef struct
-+{
-+ DBusMessageIter *iter;
-+ DBusGValueMarshalFunc marshaller;
-+ gboolean err;
-+} DBusGValueCollectionMarshalData;
-+
-+static void
-+collection_marshal_iterator (const GValue *eltval,
-+ gpointer user_data)
-+{
-+ DBusGValueCollectionMarshalData *data = user_data;
-+
-+ if (data->err)
-+ return;
-+
-+ if (!data->marshaller (data->iter, eltval))
-+ data->err = TRUE;
-+}
-+
-+static gboolean
-+marshal_collection (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ GType coltype;
-+ GType subtype;
-+
-+ coltype = G_VALUE_TYPE (value);
-+ subtype = dbus_g_type_get_collection_specialization (coltype);
-+
-+ if (_dbus_g_type_is_fixed (subtype))
-+ return marshal_collection_array (iter, value);
-+ else
-+ return marshal_collection_ptrarray (iter, value);
-+}
-+
-+static gboolean
-+marshal_collection_ptrarray (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ GType coltype;
-+ GType elt_gtype;
-+ DBusGValueCollectionMarshalData data;
-+ DBusMessageIter subiter;
-+ char *elt_sig;
-+
-+ coltype = G_VALUE_TYPE (value);
-+ elt_gtype = dbus_g_type_get_collection_specialization (coltype);
-+ data.marshaller = get_type_marshaller (elt_gtype);
-+ if (!data.marshaller)
-+ return FALSE;
-+
-+ elt_sig = _dbus_gtype_to_signature (elt_gtype);
-+ if (!elt_sig)
-+ {
-+ g_warning ("Cannot marshal type \"%s\" in collection\n", g_type_name (elt_gtype));
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_iter_open_container (iter,
-+ DBUS_TYPE_ARRAY,
-+ elt_sig,
-+ &subiter))
-+ goto oom;
-+ g_free (elt_sig);
-+
-+ data.iter = &subiter;
-+ data.err = FALSE;
-+
-+ dbus_g_type_collection_value_iterate (value,
-+ collection_marshal_iterator,
-+ &data);
-+
-+ if (!dbus_message_iter_close_container (iter, &subiter))
-+ goto oom;
-+
-+ return !data.err;
-+ oom:
-+ g_error ("out of memory");
-+ return FALSE;
-+}
-+
-+
-+static gboolean
-+marshal_collection_array (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ GType elt_gtype;
-+ DBusMessageIter subiter;
-+ GArray *array;
-+ guint elt_size;
-+ char *subsignature_str;
-+
-+ elt_gtype = dbus_g_type_get_collection_specialization (G_VALUE_TYPE (value));
-+ g_assert (_dbus_g_type_is_fixed (elt_gtype));
-+ subsignature_str = _dbus_gtype_to_signature (elt_gtype);
-+ if (!subsignature_str)
-+ {
-+ g_warning ("Cannot marshal type \"%s\" in collection\n", g_type_name (elt_gtype));
-+ return FALSE;
-+ }
-+
-+ elt_size = _dbus_g_type_fixed_get_size (elt_gtype);
-+
-+ array = g_value_get_boxed (value);
-+
-+ if (!dbus_message_iter_open_container (iter,
-+ DBUS_TYPE_ARRAY,
-+ subsignature_str,
-+ &subiter))
-+ goto oom;
-+
-+ /* TODO - This assumes that basic values are the same size
-+ * is this always true? If it is we can probably avoid
-+ * a lot of the overhead in _marshal_basic_instance...
-+ */
-+ if (!dbus_message_iter_append_fixed_array (&subiter,
-+ subsignature_str[0],
-+ &(array->data),
-+ array->len))
-+ goto oom;
-+
-+ if (!dbus_message_iter_close_container (iter, &subiter))
-+ goto oom;
-+ g_free (subsignature_str);
-+ return TRUE;
-+ oom:
-+ g_error ("out of memory");
-+ return FALSE;
-+}
-+
-+gboolean
-+_dbus_gvalue_marshal (DBusMessageIter *iter,
-+ const GValue *value)
-+{
-+ GType gtype;
-+ DBusGValueMarshalFunc marshaller;
-+
-+ gtype = G_VALUE_TYPE (value);
-+
-+ marshaller = get_type_marshaller (gtype);
-+ if (marshaller == NULL)
-+ return FALSE;
-+ return marshaller (iter, value);
-+}
-+
-+#ifdef DBUS_BUILD_TESTS
-+
-+static void
-+assert_type_maps_to (GType gtype, const char *expected_sig)
-+{
-+ char *sig;
-+ sig = _dbus_gtype_to_signature (gtype);
-+ g_assert (sig != NULL);
-+ g_assert (!strcmp (expected_sig, sig));
-+ g_free (sig);
-+}
-+
-+static void
-+assert_signature_maps_to (const char *sig, GType expected_gtype)
-+{
-+ g_assert (_dbus_gtype_from_signature (sig, TRUE) == expected_gtype);
-+}
-+
-+static void
-+assert_bidirectional_mapping (GType gtype, const char *expected_sig)
-+{
-+ assert_type_maps_to (gtype, expected_sig);
-+ assert_signature_maps_to (expected_sig, gtype);
-+}
-+
-+/**
-+ * @ingroup DBusGLibInternals
-+ * Unit test for general glib stuff
-+ * @returns #TRUE on success.
-+ */
-+gboolean
-+_dbus_gvalue_test (const char *test_data_dir)
-+{
-+ _dbus_g_value_types_init ();
-+
-+ assert_bidirectional_mapping (G_TYPE_STRING, DBUS_TYPE_STRING_AS_STRING);
-+ assert_bidirectional_mapping (G_TYPE_UCHAR, DBUS_TYPE_BYTE_AS_STRING);
-+ assert_bidirectional_mapping (G_TYPE_UINT, DBUS_TYPE_UINT32_AS_STRING);
-+
-+ assert_bidirectional_mapping (dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
-+ DBUS_TYPE_ARRAY_AS_STRING DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING);
-+ assert_bidirectional_mapping (dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH),
-+ DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_OBJECT_PATH_AS_STRING);
-+ assert_bidirectional_mapping (dbus_g_type_get_collection ("GArray", G_TYPE_INT),
-+ DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_INT32_AS_STRING);
-+
-+ assert_bidirectional_mapping (dbus_g_type_get_struct ("GValueArray", G_TYPE_INT, G_TYPE_STRING, DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID),
-+ DBUS_STRUCT_BEGIN_CHAR_AS_STRING DBUS_TYPE_INT32_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_OBJECT_PATH_AS_STRING DBUS_STRUCT_END_CHAR_AS_STRING );
-+ return TRUE;
-+}
-+
-+#endif /* DBUS_BUILD_TESTS */
-diff -Naur dbus-0.61.orig/glib/dbus-gvalue.h dbus-0.61/glib/dbus-gvalue.h
---- dbus-0.61.orig/glib/dbus-gvalue.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/dbus-gvalue.h 2005-11-27 17:55:09.000000000 +0100
-@@ -0,0 +1,43 @@
-+#ifndef DBUS_GOBJECT_VALUE_H
-+#define DBUS_GOBJECT_VALUE_H
-+
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-signature.h>
-+#include <glib.h>
-+#include <glib-object.h>
-+#include "dbus/dbus-glib.h"
-+
-+G_BEGIN_DECLS
-+
-+typedef struct {
-+ DBusGConnection *gconnection;
-+ DBusGProxy *proxy;
-+} DBusGValueMarshalCtx;
-+
-+void _dbus_g_value_types_init (void);
-+
-+char * _dbus_gtype_to_signature (GType type);
-+char * _dbus_gvalue_to_signature (const GValue *val);
-+
-+gboolean _dbus_gvalue_demarshal (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+
-+gboolean _dbus_gvalue_demarshal_variant (DBusGValueMarshalCtx *context,
-+ DBusMessageIter *iter,
-+ GValue *value,
-+ GError **error);
-+
-+GValueArray * _dbus_gvalue_demarshal_message (DBusGValueMarshalCtx *context,
-+ DBusMessage *message,
-+ guint n_params,
-+ const GType *types,
-+ GError **error);
-+
-+gboolean _dbus_gvalue_marshal (DBusMessageIter *iter,
-+ const GValue *value);
-+
-+G_END_DECLS
-+
-+#endif /* DBUS_GOBJECT_VALUE_H */
-diff -Naur dbus-0.61.orig/glib/examples/Makefile.am dbus-0.61/glib/examples/Makefile.am
---- dbus-0.61.orig/glib/examples/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/Makefile.am 2005-10-29 19:02:58.000000000 +0200
-@@ -0,0 +1,38 @@
-+SUBDIRS = . statemachine
-+
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) -DDBUS_COMPILATION
-+
-+## Makefile.am bits for sample client/server pair
-+
-+noinst_PROGRAMS= example-client example-service
-+
-+example_client_SOURCES= example-client.c
-+example_client_LDADD= $(top_builddir)/glib/libdbus-glib-1.la
-+
-+example_service_SOURCES= example-service.c
-+example_service_LDADD= $(top_builddir)/glib/libdbus-glib-1.la
-+
-+BUILT_SOURCES = example-service-glue.h
-+
-+example-service-glue.h: example-service.xml
-+ $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=some_object --mode=glib-server --output=example-service-glue.h $(srcdir)/example-service.xml
-+
-+
-+## Makefile.am bits for another client/server pair
-+
-+noinst_PROGRAMS += example-signal-recipient example-signal-emitter
-+
-+example_signal_recipient_SOURCES= example-signal-recipient.c
-+example_signal_recipient_LDADD= $(top_builddir)/glib/libdbus-glib-1.la
-+
-+example_signal_emitter_SOURCES= example-signal-emitter.c
-+example_signal_emitter_LDADD= $(top_builddir)/glib/libdbus-glib-1.la
-+
-+BUILT_SOURCES += example-signal-emitter-glue.h
-+
-+example-signal-emitter-glue.h: example-signal-emitter.xml
-+ $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=test_object --mode=glib-server --output=example-signal-emitter-glue.h $(srcdir)/example-signal-emitter.xml
-+
-+CLEANFILES = $(BUILT_SOURCES)
-+
-+EXTRA_DIST = example-service.xml example-signal-emitter.xml
-diff -Naur dbus-0.61.orig/glib/examples/Makefile.in dbus-0.61/glib/examples/Makefile.in
---- dbus-0.61.orig/glib/examples/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/Makefile.in 2006-02-27 22:34:33.000000000 +0100
-@@ -0,0 +1,741 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+noinst_PROGRAMS = example-client$(EXEEXT) example-service$(EXEEXT) \
-+ example-signal-recipient$(EXEEXT) \
-+ example-signal-emitter$(EXEEXT)
-+subdir = glib/examples
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+PROGRAMS = $(noinst_PROGRAMS)
-+am_example_client_OBJECTS = example-client.$(OBJEXT)
-+example_client_OBJECTS = $(am_example_client_OBJECTS)
-+example_client_DEPENDENCIES = $(top_builddir)/glib/libdbus-glib-1.la
-+am_example_service_OBJECTS = example-service.$(OBJEXT)
-+example_service_OBJECTS = $(am_example_service_OBJECTS)
-+example_service_DEPENDENCIES = $(top_builddir)/glib/libdbus-glib-1.la
-+am_example_signal_emitter_OBJECTS = example-signal-emitter.$(OBJEXT)
-+example_signal_emitter_OBJECTS = $(am_example_signal_emitter_OBJECTS)
-+example_signal_emitter_DEPENDENCIES = \
-+ $(top_builddir)/glib/libdbus-glib-1.la
-+am_example_signal_recipient_OBJECTS = \
-+ example-signal-recipient.$(OBJEXT)
-+example_signal_recipient_OBJECTS = \
-+ $(am_example_signal_recipient_OBJECTS)
-+example_signal_recipient_DEPENDENCIES = \
-+ $(top_builddir)/glib/libdbus-glib-1.la
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(example_client_SOURCES) $(example_service_SOURCES) \
-+ $(example_signal_emitter_SOURCES) \
-+ $(example_signal_recipient_SOURCES)
-+DIST_SOURCES = $(example_client_SOURCES) $(example_service_SOURCES) \
-+ $(example_signal_emitter_SOURCES) \
-+ $(example_signal_recipient_SOURCES)
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+ETAGS = etags
-+CTAGS = ctags
-+DIST_SUBDIRS = $(SUBDIRS)
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+SUBDIRS = . statemachine
-+INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) -DDBUS_COMPILATION
-+example_client_SOURCES = example-client.c
-+example_client_LDADD = $(top_builddir)/glib/libdbus-glib-1.la
-+example_service_SOURCES = example-service.c
-+example_service_LDADD = $(top_builddir)/glib/libdbus-glib-1.la
-+BUILT_SOURCES = example-service-glue.h example-signal-emitter-glue.h
-+example_signal_recipient_SOURCES = example-signal-recipient.c
-+example_signal_recipient_LDADD = $(top_builddir)/glib/libdbus-glib-1.la
-+example_signal_emitter_SOURCES = example-signal-emitter.c
-+example_signal_emitter_LDADD = $(top_builddir)/glib/libdbus-glib-1.la
-+CLEANFILES = $(BUILT_SOURCES)
-+EXTRA_DIST = example-service.xml example-signal-emitter.xml
-+all: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu glib/examples/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu glib/examples/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+example-client$(EXEEXT): $(example_client_OBJECTS) $(example_client_DEPENDENCIES)
-+ @rm -f example-client$(EXEEXT)
-+ $(LINK) $(example_client_LDFLAGS) $(example_client_OBJECTS) $(example_client_LDADD) $(LIBS)
-+example-service$(EXEEXT): $(example_service_OBJECTS) $(example_service_DEPENDENCIES)
-+ @rm -f example-service$(EXEEXT)
-+ $(LINK) $(example_service_LDFLAGS) $(example_service_OBJECTS) $(example_service_LDADD) $(LIBS)
-+example-signal-emitter$(EXEEXT): $(example_signal_emitter_OBJECTS) $(example_signal_emitter_DEPENDENCIES)
-+ @rm -f example-signal-emitter$(EXEEXT)
-+ $(LINK) $(example_signal_emitter_LDFLAGS) $(example_signal_emitter_OBJECTS) $(example_signal_emitter_LDADD) $(LIBS)
-+example-signal-recipient$(EXEEXT): $(example_signal_recipient_OBJECTS) $(example_signal_recipient_DEPENDENCIES)
-+ @rm -f example-signal-recipient$(EXEEXT)
-+ $(LINK) $(example_signal_recipient_LDFLAGS) $(example_signal_recipient_OBJECTS) $(example_signal_recipient_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/example-client.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/example-service.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/example-signal-emitter.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/example-signal-recipient.Po at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
-+all-am: Makefile $(PROGRAMS)
-+installdirs: installdirs-recursive
-+installdirs-am:
-+install: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-+clean: clean-recursive
-+
-+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-+ mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
-+ clean clean-generic clean-libtool clean-noinstPROGRAMS \
-+ clean-recursive ctags ctags-recursive distclean \
-+ distclean-compile distclean-generic distclean-libtool \
-+ distclean-recursive distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-exec install-exec-am install-info \
-+ install-info-am install-man install-strip installcheck \
-+ installcheck-am installdirs installdirs-am maintainer-clean \
-+ maintainer-clean-generic maintainer-clean-recursive \
-+ mostlyclean mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
-+ tags tags-recursive uninstall uninstall-am uninstall-info-am
-+
-+
-+example-service-glue.h: example-service.xml
-+ $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=some_object --mode=glib-server --output=example-service-glue.h $(srcdir)/example-service.xml
-+
-+example-signal-emitter-glue.h: example-signal-emitter.xml
-+ $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=test_object --mode=glib-server --output=example-signal-emitter-glue.h $(srcdir)/example-signal-emitter.xml
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/glib/examples/example-client.c dbus-0.61/glib/examples/example-client.c
---- dbus-0.61.orig/glib/examples/example-client.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/example-client.c 2005-07-11 18:12:49.000000000 +0200
-@@ -0,0 +1,121 @@
-+#include <dbus/dbus-glib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-+static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
-+
-+static void
-+lose (const char *str, ...)
-+{
-+ va_list args;
-+
-+ va_start (args, str);
-+
-+ vfprintf (stderr, str, args);
-+ fputc ('\n', stderr);
-+
-+ va_end (args);
-+
-+ exit (1);
-+}
-+
-+static void
-+lose_gerror (const char *prefix, GError *error)
-+{
-+ lose ("%s: %s", prefix, error->message);
-+}
-+
-+static void
-+print_hash_value (gpointer key, gpointer val, gpointer data)
-+{
-+ printf ("%s -> %s\n", (char *) key, (char *) val);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *bus;
-+ DBusGProxy *remote_object;
-+ DBusGProxy *remote_object_introspectable;
-+ GError *error = NULL;
-+ char **reply_list;
-+ char **reply_ptr;
-+ GValueArray *hello_reply_struct;
-+ GHashTable *hello_reply_dict;
-+ char *introspect_data;
-+ guint i;
-+
-+ g_type_init ();
-+
-+ {
-+ GLogLevelFlags fatal_mask;
-+
-+ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
-+ fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
-+ g_log_set_always_fatal (fatal_mask);
-+ }
-+
-+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-+ if (!bus)
-+ lose_gerror ("Couldn't connect to session bus", error);
-+
-+ remote_object = dbus_g_proxy_new_for_name (bus,
-+ "org.designfu.SampleService",
-+ "/SomeObject",
-+ "org.designfu.SampleInterface");
-+
-+ if (!dbus_g_proxy_call (remote_object, "HelloWorld", &error,
-+ G_TYPE_STRING, "Hello from example-client.c!", G_TYPE_INVALID,
-+ G_TYPE_STRV, &reply_list, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete HelloWorld", error);
-+
-+
-+ if (!dbus_g_proxy_call (remote_object, "GetTuple", &error,
-+ G_TYPE_INVALID,
-+ G_TYPE_VALUE_ARRAY, &hello_reply_struct, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete GetTuple", error);
-+
-+ if (!dbus_g_proxy_call (remote_object, "GetDict", &error,
-+ G_TYPE_INVALID,
-+ DBUS_TYPE_G_STRING_STRING_HASHTABLE, &hello_reply_dict, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete GetDict", error);
-+
-+ printf ("reply_list: ");
-+ for (reply_ptr = reply_list; *reply_ptr; reply_ptr++)
-+ printf ("\"%s\" ", *reply_ptr);
-+ printf ("\n");
-+ g_strfreev (reply_list);
-+
-+ for (i = 0; i < hello_reply_struct->n_values; i++)
-+ {
-+ GValue strval = { 0, };
-+
-+ g_value_init (&strval, G_TYPE_STRING);
-+ if (!g_value_transform (g_value_array_get_nth (hello_reply_struct, i), &strval))
-+ g_value_set_static_string (&strval, "(couldn't transform to string)");
-+ g_print ("%s: %s\n", g_type_name (G_VALUE_TYPE (g_value_array_get_nth (hello_reply_struct, i))),
-+ g_value_get_string (&strval));
-+ }
-+ g_value_array_free (hello_reply_struct);
-+ printf ("\n");
-+
-+ g_hash_table_foreach (hello_reply_dict, print_hash_value, NULL);
-+ g_hash_table_destroy (hello_reply_dict);
-+
-+ remote_object_introspectable = dbus_g_proxy_new_for_name (bus,
-+ "org.designfu.SampleService",
-+ "/SomeObject",
-+ "org.freedesktop.DBus.Introspectable");
-+ if (!dbus_g_proxy_call (remote_object_introspectable, "Introspect", &error,
-+ G_TYPE_INVALID,
-+ G_TYPE_STRING, &introspect_data, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Introspect", error);
-+ printf ("%s", introspect_data);
-+ g_free (introspect_data);
-+
-+ g_object_unref (G_OBJECT (remote_object_introspectable));
-+ g_object_unref (G_OBJECT (remote_object));
-+
-+ exit(0);
-+}
-diff -Naur dbus-0.61.orig/glib/examples/example-service.c dbus-0.61/glib/examples/example-service.c
---- dbus-0.61.orig/glib/examples/example-service.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/example-service.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,153 @@
-+#include <dbus/dbus-glib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-+static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
-+
-+static void
-+lose (const char *str, ...)
-+{
-+ va_list args;
-+
-+ va_start (args, str);
-+
-+ vfprintf (stderr, str, args);
-+ fputc ('\n', stderr);
-+
-+ va_end (args);
-+
-+ exit (1);
-+}
-+
-+static void
-+lose_gerror (const char *prefix, GError *error)
-+{
-+ lose ("%s: %s", prefix, error->message);
-+}
-+
-+typedef struct SomeObject SomeObject;
-+typedef struct SomeObjectClass SomeObjectClass;
-+
-+GType some_object_get_type (void);
-+
-+struct SomeObject
-+{
-+ GObject parent;
-+};
-+
-+struct SomeObjectClass
-+{
-+ GObjectClass parent;
-+};
-+
-+#define SOME_TYPE_OBJECT (some_object_get_type ())
-+#define SOME_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SOME_TYPE_OBJECT, SomeObject))
-+#define SOME_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOME_TYPE_OBJECT, SomeObjectClass))
-+#define SOME_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SOME_TYPE_OBJECT))
-+#define SOME_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SOME_TYPE_OBJECT))
-+#define SOME_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SOME_TYPE_OBJECT, SomeObjectClass))
-+
-+G_DEFINE_TYPE(SomeObject, some_object, G_TYPE_OBJECT)
-+
-+gboolean some_object_hello_world (SomeObject *obj, const char *hello_message, char ***ret, GError **error);
-+gboolean some_object_get_tuple (SomeObject *obj, GValueArray **ret, GError **error);
-+gboolean some_object_get_dict (SomeObject *obj, GHashTable **ret, GError **error);
-+
-+#include "example-service-glue.h"
-+
-+static void
-+some_object_init (SomeObject *obj)
-+{
-+}
-+
-+static void
-+some_object_class_init (SomeObjectClass *klass)
-+{
-+}
-+
-+gboolean
-+some_object_hello_world (SomeObject *obj, const char *hello_message, char ***ret, GError **error)
-+{
-+ printf ("%s\n", hello_message);
-+ *ret = g_new (char *, 3);
-+ (*ret)[0] = g_strdup ("Hello");
-+ (*ret)[1] = g_strdup (" from example-service.c");
-+ (*ret)[2] = NULL;
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+some_object_get_tuple (SomeObject *obj, GValueArray **ret, GError **error)
-+{
-+ *ret = g_value_array_new (6);
-+ g_value_array_prepend (*ret, NULL);
-+ g_value_init (g_value_array_get_nth (*ret, 0), G_TYPE_STRING);
-+ g_value_set_string (g_value_array_get_nth (*ret, 0), "hello");
-+ g_value_array_prepend (*ret, NULL);
-+ g_value_init (g_value_array_get_nth (*ret, 0), G_TYPE_UINT);
-+ g_value_set_uint (g_value_array_get_nth (*ret, 0), 42);
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+some_object_get_dict (SomeObject *obj, GHashTable **ret, GError **error)
-+{
-+ *ret = g_hash_table_new (g_str_hash, g_str_equal);
-+ g_hash_table_insert (*ret, "first", "Hello Dict");
-+ g_hash_table_insert (*ret, "second", " from example-service.c");
-+ return TRUE;
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *bus;
-+ DBusGProxy *bus_proxy;
-+ GError *error = NULL;
-+ SomeObject *obj;
-+ GMainLoop *mainloop;
-+ guint request_name_result;
-+
-+ g_type_init ();
-+
-+ {
-+ GLogLevelFlags fatal_mask;
-+
-+ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
-+ fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
-+ g_log_set_always_fatal (fatal_mask);
-+ }
-+
-+ dbus_g_object_type_install_info (SOME_TYPE_OBJECT, &dbus_glib_some_object_object_info);
-+
-+ mainloop = g_main_loop_new (NULL, FALSE);
-+
-+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-+ if (!bus)
-+ lose_gerror ("Couldn't connect to session bus", error);
-+
-+ bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus",
-+ "/org/freedesktop/DBus",
-+ "org.freedesktop.DBus");
-+
-+ if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,
-+ G_TYPE_STRING, "org.designfu.SampleService",
-+ G_TYPE_UINT, 0,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &request_name_result,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to acquire org.designfu.SampleService", error);
-+
-+ obj = g_object_new (SOME_TYPE_OBJECT, NULL);
-+
-+ dbus_g_connection_register_g_object (bus, "/SomeObject", G_OBJECT (obj));
-+
-+ printf ("service running\n");
-+
-+ g_main_loop_run (mainloop);
-+
-+ exit (0);
-+}
-diff -Naur dbus-0.61.orig/glib/examples/example-service.xml dbus-0.61/glib/examples/example-service.xml
---- dbus-0.61.orig/glib/examples/example-service.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/example-service.xml 2005-06-21 03:18:25.000000000 +0200
-@@ -0,0 +1,19 @@
-+<?xml version="1.0" encoding="UTF-8" ?>
-+
-+<node name="/">
-+ <interface name="org.designfu.SampleInterface">
-+ <method name="HelloWorld">
-+ <arg type="s"/>
-+ <arg type="as" direction="out"/>
-+ </method>
-+
-+ <method name="GetTuple">
-+ <arg type="(ss)" direction="out" />
-+ </method>
-+
-+ <method name="GetDict">
-+ <arg type="a{ss}" direction="out"/>
-+ </method>
-+
-+ </interface>
-+</node>
-diff -Naur dbus-0.61.orig/glib/examples/example-signal-emitter.c dbus-0.61/glib/examples/example-signal-emitter.c
---- dbus-0.61.orig/glib/examples/example-signal-emitter.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/example-signal-emitter.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,132 @@
-+#include <dbus/dbus-glib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-+static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
-+
-+static void
-+lose (const char *str, ...)
-+{
-+ va_list args;
-+
-+ va_start (args, str);
-+
-+ vfprintf (stderr, str, args);
-+ fputc ('\n', stderr);
-+
-+ va_end (args);
-+
-+ exit (1);
-+}
-+
-+static void
-+lose_gerror (const char *prefix, GError *error)
-+{
-+ lose ("%s: %s", prefix, error->message);
-+}
-+
-+typedef struct TestObject TestObject;
-+typedef struct TestObjectClass TestObjectClass;
-+
-+GType test_object_get_type (void);
-+
-+struct TestObject
-+{
-+ GObject parent;
-+};
-+
-+struct TestObjectClass
-+{
-+ GObjectClass parent;
-+};
-+
-+enum
-+{
-+ HELLO_SIGNAL,
-+ LAST_SIGNAL
-+};
-+
-+static guint signals[LAST_SIGNAL] = { 0 };
-+
-+#define TEST_TYPE_OBJECT (test_object_get_type ())
-+#define TEST_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), TEST_TYPE_OBJECT, TestObject))
-+#define TEST_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass))
-+#define TEST_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), TEST_TYPE_OBJECT))
-+#define TEST_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT))
-+#define TEST_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass))
-+
-+G_DEFINE_TYPE(TestObject, test_object, G_TYPE_OBJECT)
-+
-+gboolean test_object_emit_hello_signal (TestObject *obj, GError **error);
-+
-+#include "example-signal-emitter-glue.h"
-+
-+static void
-+test_object_init (TestObject *obj)
-+{
-+}
-+
-+static void
-+test_object_class_init (TestObjectClass *klass)
-+{
-+ signals[HELLO_SIGNAL] =
-+ g_signal_new ("hello_signal",
-+ G_OBJECT_CLASS_TYPE (klass),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ g_cclosure_marshal_VOID__STRING,
-+ G_TYPE_NONE, 1, G_TYPE_STRING);
-+}
-+
-+gboolean
-+test_object_emit_hello_signal (TestObject *obj, GError **error)
-+{
-+ g_signal_emit (obj, signals[HELLO_SIGNAL], 0, "Hello");
-+ return TRUE;
-+}
-+
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *bus;
-+ DBusGProxy *bus_proxy;
-+ GError *error = NULL;
-+ TestObject *obj;
-+ GMainLoop *mainloop;
-+ guint request_name_result;
-+
-+ g_type_init ();
-+
-+ dbus_g_object_type_install_info (TEST_TYPE_OBJECT, &dbus_glib_test_object_object_info);
-+
-+ mainloop = g_main_loop_new (NULL, FALSE);
-+
-+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-+ if (!bus)
-+ lose_gerror ("Couldn't connect to session bus", error);
-+
-+ bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus",
-+ "/org/freedesktop/DBus",
-+ "org.freedesktop.DBus");
-+
-+ if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,
-+ G_TYPE_STRING, "org.designfu.TestService",
-+ G_TYPE_UINT, 0,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &request_name_result,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to acquire org.designfu.TestService", error);
-+
-+ obj = g_object_new (TEST_TYPE_OBJECT, NULL);
-+
-+ dbus_g_connection_register_g_object (bus, "/org/designfu/TestService/object", G_OBJECT (obj));
-+
-+ printf ("test service running\n");
-+
-+ g_main_loop_run (mainloop);
-+
-+ exit (0);
-+}
-diff -Naur dbus-0.61.orig/glib/examples/example-signal-emitter.xml dbus-0.61/glib/examples/example-signal-emitter.xml
---- dbus-0.61.orig/glib/examples/example-signal-emitter.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/example-signal-emitter.xml 2005-06-21 03:18:25.000000000 +0200
-@@ -0,0 +1,13 @@
-+<?xml version="1.0" encoding="UTF-8" ?>
-+
-+<node name="/">
-+ <interface name="org.designfu.TestService">
-+
-+ <method name="emitHelloSignal">
-+ </method>
-+
-+ <!-- Mark the signal as exported -->
-+ <signal name="HelloSignal"/>
-+
-+ </interface>
-+</node>
-diff -Naur dbus-0.61.orig/glib/examples/example-signal-recipient.c dbus-0.61/glib/examples/example-signal-recipient.c
---- dbus-0.61.orig/glib/examples/example-signal-recipient.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/example-signal-recipient.c 2005-06-29 18:58:59.000000000 +0200
-@@ -0,0 +1,102 @@
-+#include <dbus/dbus-glib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-+static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
-+
-+static void
-+lose (const char *str, ...)
-+{
-+ va_list args;
-+
-+ va_start (args, str);
-+
-+ vfprintf (stderr, str, args);
-+ fputc ('\n', stderr);
-+
-+ va_end (args);
-+
-+ exit (1);
-+}
-+
-+static void
-+lose_gerror (const char *prefix, GError *error)
-+{
-+ lose ("%s: %s", prefix, error->message);
-+}
-+
-+static gboolean
-+emit_signal (gpointer arg)
-+{
-+ DBusGProxy *proxy = arg;
-+
-+ dbus_g_proxy_call_no_reply (proxy, "emitHelloSignal", G_TYPE_INVALID);
-+ return TRUE;
-+}
-+
-+static void
-+hello_signal_handler (DBusGProxy *proxy, const char *hello_string, gpointer user_data)
-+{
-+ printf ("Received signal and it says: %s\n", hello_string);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *bus;
-+ DBusGProxy *remote_object;
-+ GError *error = NULL;
-+ GMainLoop *mainloop;
-+
-+ g_type_init ();
-+
-+ mainloop = g_main_loop_new (NULL, FALSE);
-+
-+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-+ if (!bus)
-+ lose_gerror ("Couldn't connect to session bus", error);
-+
-+ /* We use _for_name_owner in order to track this particular service
-+ * instance, which lets us receive signals.
-+ */
-+ remote_object = dbus_g_proxy_new_for_name (bus,
-+ "org.designfu.TestService",
-+ "/org/designfu/TestService/object",
-+ "org.designfu.TestService");
-+ if (!remote_object)
-+ lose_gerror ("Failed to get name owner", error);
-+
-+ /* IMPORTANT:
-+ *
-+ * Note because this signal's signature is VOID__STRING, we do not
-+ * need to register a marshaller, since there is a builtin one.
-+ * However for other signatures, you must generate a marshaller,
-+ * then call dbus_g_object_register_marshaller. It would look like
-+ * this:
-+ *
-+ * dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
-+ *
-+ */
-+
-+ /* Tell DBus what the type signature of the signal callback is; this
-+ * allows us to sanity-check incoming messages before invoking the
-+ * callback. You need to do this once for each proxy you create,
-+ * not every time you want to connect to the signal.
-+ */
-+ dbus_g_proxy_add_signal (remote_object, "HelloSignal", G_TYPE_STRING, G_TYPE_INVALID);
-+
-+ /* Actually connect to the signal. Note you can call
-+ * dbus_g_proxy_connect_signal multiple times for one invocation of
-+ * dbus_g_proxy_add_signal.
-+ */
-+ dbus_g_proxy_connect_signal (remote_object, "HelloSignal", G_CALLBACK (hello_signal_handler),
-+ NULL, NULL);
-+
-+
-+ g_timeout_add (2000, emit_signal, remote_object);
-+
-+ g_main_loop_run (mainloop);
-+
-+ exit (0);
-+}
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/Makefile.am dbus-0.61/glib/examples/statemachine/Makefile.am
---- dbus-0.61.orig/glib/examples/statemachine/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/Makefile.am 2005-10-29 19:02:58.000000000 +0200
-@@ -0,0 +1,35 @@
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GTK_THREADS_CFLAGS) -DDBUS_COMPILATION
-+
-+## Makefile.am bits for sample client/server pair
-+
-+noinst_PROGRAMS= statemachine-server
-+
-+if HAVE_GTK
-+noinst_PROGRAMS += statemachine-client
-+endif
-+
-+EXTRA_DIST = statemachine.h statemachine-server.h sm-marshal.list statemachine-server.xml statemachine.xml
-+
-+statemachine_server_SOURCES= statemachine-server.c sm-marshal.c statemachine.c
-+statemachine_server_LDADD= $(top_builddir)/glib/libdbus-glib-1.la
-+
-+statemachine_client_SOURCES= statemachine-client.c sm-marshal.c statemachine.h
-+statemachine_client_LDADD= $(top_builddir)/glib/libdbus-glib-1.la $(DBUS_GTK_THREADS_LIBS)
-+
-+BUILT_SOURCES = statemachine-server-glue.h statemachine-glue.h
-+
-+statemachine-server-glue.h: statemachine-server.xml
-+ $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=sm_server --mode=glib-server --output=$@ $<
-+
-+statemachine-glue.h: statemachine.xml
-+ $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=sm_object --mode=glib-server --output=$@ $<
-+
-+sm-marshal.c: Makefile sm-marshal.list
-+ @GLIB_GENMARSHAL@ --prefix=sm_marshal $(srcdir)/sm-marshal.list --header --body > $@.tmp && mv $@.tmp $@
-+
-+sm-marshal.h: Makefile sm-marshal.list
-+ @GLIB_GENMARSHAL@ --prefix=sm_marshal $(srcdir)/sm-marshal.list --header > $@.tmp && mv $@.tmp $@
-+
-+BUILT_SOURCES += sm-marshal.c sm-marshal.h
-+
-+CLEANFILES = $(BUILT_SOURCES)
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/Makefile.in dbus-0.61/glib/examples/statemachine/Makefile.in
---- dbus-0.61.orig/glib/examples/statemachine/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/Makefile.in 2006-02-27 22:34:34.000000000 +0100
-@@ -0,0 +1,619 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+noinst_PROGRAMS = statemachine-server$(EXEEXT) $(am__EXEEXT_1)
-+ at HAVE_GTK_TRUE@am__append_1 = statemachine-client
-+subdir = glib/examples/statemachine
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+ at HAVE_GTK_TRUE@am__EXEEXT_1 = statemachine-client$(EXEEXT)
-+PROGRAMS = $(noinst_PROGRAMS)
-+am_statemachine_client_OBJECTS = statemachine-client.$(OBJEXT) \
-+ sm-marshal.$(OBJEXT)
-+statemachine_client_OBJECTS = $(am_statemachine_client_OBJECTS)
-+am__DEPENDENCIES_1 =
-+statemachine_client_DEPENDENCIES = \
-+ $(top_builddir)/glib/libdbus-glib-1.la $(am__DEPENDENCIES_1)
-+am_statemachine_server_OBJECTS = statemachine-server.$(OBJEXT) \
-+ sm-marshal.$(OBJEXT) statemachine.$(OBJEXT)
-+statemachine_server_OBJECTS = $(am_statemachine_server_OBJECTS)
-+statemachine_server_DEPENDENCIES = \
-+ $(top_builddir)/glib/libdbus-glib-1.la
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(statemachine_client_SOURCES) \
-+ $(statemachine_server_SOURCES)
-+DIST_SOURCES = $(statemachine_client_SOURCES) \
-+ $(statemachine_server_SOURCES)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GTK_THREADS_CFLAGS) -DDBUS_COMPILATION
-+EXTRA_DIST = statemachine.h statemachine-server.h sm-marshal.list statemachine-server.xml statemachine.xml
-+statemachine_server_SOURCES = statemachine-server.c sm-marshal.c statemachine.c
-+statemachine_server_LDADD = $(top_builddir)/glib/libdbus-glib-1.la
-+statemachine_client_SOURCES = statemachine-client.c sm-marshal.c statemachine.h
-+statemachine_client_LDADD = $(top_builddir)/glib/libdbus-glib-1.la $(DBUS_GTK_THREADS_LIBS)
-+BUILT_SOURCES = statemachine-server-glue.h statemachine-glue.h \
-+ sm-marshal.c sm-marshal.h
-+CLEANFILES = $(BUILT_SOURCES)
-+all: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu glib/examples/statemachine/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu glib/examples/statemachine/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+statemachine-client$(EXEEXT): $(statemachine_client_OBJECTS) $(statemachine_client_DEPENDENCIES)
-+ @rm -f statemachine-client$(EXEEXT)
-+ $(LINK) $(statemachine_client_LDFLAGS) $(statemachine_client_OBJECTS) $(statemachine_client_LDADD) $(LIBS)
-+statemachine-server$(EXEEXT): $(statemachine_server_OBJECTS) $(statemachine_server_DEPENDENCIES)
-+ @rm -f statemachine-server$(EXEEXT)
-+ $(LINK) $(statemachine_server_LDFLAGS) $(statemachine_server_OBJECTS) $(statemachine_server_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sm-marshal.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/statemachine-client.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/statemachine-server.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/statemachine.Po at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) check-am
-+all-am: Makefile $(PROGRAMS)
-+installdirs:
-+install: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-+ mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-+ clean-libtool clean-noinstPROGRAMS ctags distclean \
-+ distclean-compile distclean-generic distclean-libtool \
-+ distclean-tags distdir dvi dvi-am html html-am info info-am \
-+ install install-am install-data install-data-am install-exec \
-+ install-exec-am install-info install-info-am install-man \
-+ install-strip installcheck installcheck-am installdirs \
-+ maintainer-clean maintainer-clean-generic mostlyclean \
-+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-+ pdf pdf-am ps ps-am tags uninstall uninstall-am \
-+ uninstall-info-am
-+
-+
-+statemachine-server-glue.h: statemachine-server.xml
-+ $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=sm_server --mode=glib-server --output=$@ $<
-+
-+statemachine-glue.h: statemachine.xml
-+ $(LIBTOOL) --mode=execute $(top_builddir)/glib/dbus-binding-tool --prefix=sm_object --mode=glib-server --output=$@ $<
-+
-+sm-marshal.c: Makefile sm-marshal.list
-+ @GLIB_GENMARSHAL@ --prefix=sm_marshal $(srcdir)/sm-marshal.list --header --body > $@.tmp && mv $@.tmp $@
-+
-+sm-marshal.h: Makefile sm-marshal.list
-+ @GLIB_GENMARSHAL@ --prefix=sm_marshal $(srcdir)/sm-marshal.list --header > $@.tmp && mv $@.tmp $@
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/sm-marshal.c dbus-0.61/glib/examples/statemachine/sm-marshal.c
---- dbus-0.61.orig/glib/examples/statemachine/sm-marshal.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/sm-marshal.c 2006-02-24 17:38:05.000000000 +0100
-@@ -0,0 +1,100 @@
-+
-+#ifndef __sm_marshal_MARSHAL_H__
-+#define __sm_marshal_MARSHAL_H__
-+
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+#ifdef G_ENABLE_DEBUG
-+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-+#define g_marshal_value_peek_char(v) g_value_get_char (v)
-+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-+#define g_marshal_value_peek_int(v) g_value_get_int (v)
-+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-+#define g_marshal_value_peek_long(v) g_value_get_long (v)
-+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-+#define g_marshal_value_peek_float(v) g_value_get_float (v)
-+#define g_marshal_value_peek_double(v) g_value_get_double (v)
-+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-+#define g_marshal_value_peek_param(v) g_value_get_param (v)
-+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-+#define g_marshal_value_peek_object(v) g_value_get_object (v)
-+#else /* !G_ENABLE_DEBUG */
-+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
-+ * Do not access GValues directly in your code. Instead, use the
-+ * g_value_get_*() functions
-+ */
-+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-+#endif /* !G_ENABLE_DEBUG */
-+
-+
-+/* VOID:STRING,BOXED (./sm-marshal.list:1) */
-+extern void sm_marshal_VOID__STRING_BOXED (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+void
-+sm_marshal_VOID__STRING_BOXED (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ typedef void (*GMarshalFunc_VOID__STRING_BOXED) (gpointer data1,
-+ gpointer arg_1,
-+ gpointer arg_2,
-+ gpointer data2);
-+ register GMarshalFunc_VOID__STRING_BOXED callback;
-+ register GCClosure *cc = (GCClosure*) closure;
-+ register gpointer data1, data2;
-+
-+ g_return_if_fail (n_param_values == 3);
-+
-+ if (G_CCLOSURE_SWAP_DATA (closure))
-+ {
-+ data1 = closure->data;
-+ data2 = g_value_peek_pointer (param_values + 0);
-+ }
-+ else
-+ {
-+ data1 = g_value_peek_pointer (param_values + 0);
-+ data2 = closure->data;
-+ }
-+ callback = (GMarshalFunc_VOID__STRING_BOXED) (marshal_data ? marshal_data : cc->callback);
-+
-+ callback (data1,
-+ g_marshal_value_peek_string (param_values + 1),
-+ g_marshal_value_peek_boxed (param_values + 2),
-+ data2);
-+}
-+
-+G_END_DECLS
-+
-+#endif /* __sm_marshal_MARSHAL_H__ */
-+
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/sm-marshal.list dbus-0.61/glib/examples/statemachine/sm-marshal.list
---- dbus-0.61.orig/glib/examples/statemachine/sm-marshal.list 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/sm-marshal.list 2005-07-08 18:25:32.000000000 +0200
-@@ -0,0 +1 @@
-+VOID:STRING,BOXED
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/statemachine-client.c dbus-0.61/glib/examples/statemachine/statemachine-client.c
---- dbus-0.61.orig/glib/examples/statemachine/statemachine-client.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/statemachine-client.c 2005-07-09 03:46:51.000000000 +0200
-@@ -0,0 +1,662 @@
-+#include <dbus/dbus-glib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <gtk/gtk.h>
-+#include <glib/gi18n.h>
-+#include "sm-marshal.h"
-+
-+static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-+static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
-+
-+static void
-+lose (const char *str, ...)
-+{
-+ va_list args;
-+ GtkWidget *dialog;
-+ char *text;
-+
-+ va_start (args, str);
-+
-+ text = g_strdup_vprintf (str, args);
-+
-+ va_end (args);
-+
-+ dialog = gtk_message_dialog_new (NULL,
-+ GTK_DIALOG_DESTROY_WITH_PARENT,
-+ GTK_MESSAGE_ERROR,
-+ GTK_BUTTONS_CLOSE,
-+ "%s",
-+ text);
-+ gtk_dialog_run (GTK_DIALOG (dialog));
-+
-+ g_free (text);
-+
-+ exit (1);
-+}
-+
-+static void
-+lose_gerror (const char *prefix, GError *error)
-+{
-+ GtkWidget *dialog;
-+
-+ dialog = gtk_message_dialog_new (NULL,
-+ GTK_DIALOG_DESTROY_WITH_PARENT,
-+ GTK_MESSAGE_ERROR,
-+ GTK_BUTTONS_CLOSE,
-+ "%s",
-+ prefix);
-+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
-+ "%s",
-+ error->message);
-+
-+ gtk_dialog_run (GTK_DIALOG (dialog));
-+
-+ exit (1);
-+}
-+
-+typedef struct
-+{
-+ char *name;
-+ char *state;
-+ gdouble progress;
-+ DBusGProxy *proxy;
-+ DBusGProxyCall *get_progress_call;
-+} MachineInfo;
-+
-+typedef struct
-+{
-+ GtkWindow *window;
-+ GtkWidget *view;
-+ GtkTreeModel *store;
-+
-+ DBusGConnection *bus;
-+ DBusGProxy *server_proxy;
-+
-+ GSList *pending_creation_calls;
-+ DBusGProxyCall *get_machines_call;
-+} ClientState;
-+
-+static gboolean
-+proxy_to_iter (GtkTreeModel *model, DBusGProxy *proxy, GtkTreeIter *iter)
-+{
-+ if (!gtk_tree_model_get_iter_first (model, iter))
-+ return FALSE;
-+ do {
-+ MachineInfo *info;
-+ gtk_tree_model_get (model, iter, 0, &info, -1);
-+ if (info->proxy == proxy)
-+ return TRUE;
-+ } while (gtk_tree_model_iter_next (model, iter));
-+ return FALSE;
-+}
-+
-+static void
-+signal_row_change (ClientState *state, GtkTreeIter *iter)
-+{
-+ GtkTreePath *path;
-+ path = gtk_tree_model_get_path (state->store, iter);
-+ gtk_tree_model_row_changed (state->store, path, iter);
-+ gtk_tree_path_free (path);
-+}
-+
-+static void
-+get_machine_info_cb (DBusGProxy *proxy,
-+ DBusGProxyCall *call,
-+ gpointer data)
-+{
-+ GtkTreeIter iter;
-+ ClientState *state = data;
-+ GError *error = NULL;
-+ char *name, *statename;
-+ MachineInfo *info;
-+
-+ if (!dbus_g_proxy_end_call (proxy, call, &error,
-+ G_TYPE_STRING, &name,
-+ G_TYPE_STRING, &statename,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Couldn't complete GetInfo", error);
-+
-+ if (!proxy_to_iter (state->store, proxy, &iter))
-+ g_assert_not_reached ();
-+
-+ gtk_tree_model_get (state->store, &iter, 0, &info, -1);
-+ g_free (info->name);
-+ info->name = name;
-+ g_free (info->state);
-+ info->state = statename;
-+ signal_row_change (state, &iter);
-+}
-+
-+static void
-+set_proxy_acquisition_progress (ClientState *state,
-+ DBusGProxy *proxy,
-+ double progress)
-+{
-+ MachineInfo *info;
-+ GtkTreeIter iter;
-+
-+ if (!proxy_to_iter (state->store, proxy, &iter))
-+ g_assert_not_reached ();
-+ gtk_tree_model_get (state->store, &iter, 0, &info, -1);
-+
-+ /* Ignore machines in unknown state */
-+ if (!info->state)
-+ return;
-+
-+ if (strcmp (info->state, "Acquired"))
-+ lose ("Got AcquisitionProgress signal in bad state %s",
-+ info->state);
-+
-+ g_print ("Got acquisition progress change for %p (%s) to %f\n", proxy, info->name ? info->name : "(unknown)", progress);
-+
-+ info->progress = progress;
-+
-+ signal_row_change (state, &iter);
-+}
-+
-+static void
-+proxy_acquisition_changed_cb (DBusGProxy *proxy,
-+ double progress,
-+ gpointer user_data)
-+{
-+ set_proxy_acquisition_progress (user_data, proxy, progress);
-+}
-+
-+static void
-+get_acquiring_progress_cb (DBusGProxy *proxy,
-+ DBusGProxyCall *call,
-+ gpointer user_data)
-+{
-+ GError *error = NULL;
-+ MachineInfo *info;
-+ GtkTreeIter iter;
-+ ClientState *state = user_data;
-+ gdouble progress;
-+
-+ if (!proxy_to_iter (state->store, proxy, &iter))
-+ g_assert_not_reached ();
-+ gtk_tree_model_get (state->store, &iter, 0, &info, -1);
-+
-+ g_assert (info->get_progress_call == call);
-+
-+ if (!dbus_g_proxy_end_call (proxy, call, &error,
-+ G_TYPE_DOUBLE, &progress, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete GetAcquiringProgress call", error);
-+ info->get_progress_call = NULL;
-+
-+ set_proxy_acquisition_progress (state, proxy, progress);
-+}
-+
-+static void
-+proxy_state_changed_cb (DBusGProxy *proxy,
-+ const char *statename,
-+ gpointer user_data)
-+{
-+ MachineInfo *info;
-+ GtkTreeIter iter;
-+ ClientState *state = user_data;
-+
-+ if (!proxy_to_iter (state->store, proxy, &iter))
-+ g_assert_not_reached ();
-+ gtk_tree_model_get (state->store, &iter, 0, &info, -1);
-+
-+ g_print ("Got state change for %p (%s) to %s\n", proxy, info->name ? info->name : "(unknown)", statename);
-+
-+ g_free (info->state);
-+ info->state = g_strdup (statename);
-+
-+ if (!strcmp (info->state, "Acquired"))
-+ {
-+ g_print ("Starting GetAcquiringProgress call for %p\n", info->proxy);
-+ if (info->get_progress_call != NULL)
-+ {
-+ dbus_g_proxy_cancel_call (info->proxy, info->get_progress_call);
-+ info->get_progress_call = NULL;
-+ }
-+ info->get_progress_call =
-+ dbus_g_proxy_begin_call (info->proxy, "GetAcquiringProgress",
-+ get_acquiring_progress_cb,
-+ state, NULL,
-+ G_TYPE_INVALID);
-+ }
-+ else
-+ info->progress = 0.0;
-+
-+ signal_row_change (state, &iter);
-+}
-+
-+static void
-+add_machine (ClientState *state,
-+ const char *name,
-+ const char *mstate,
-+ const char *path)
-+{
-+ MachineInfo *info;
-+ GtkTreeIter iter;
-+
-+ info = g_new0 (MachineInfo, 1);
-+ info->name = g_strdup (name);
-+ info->state = g_strdup (mstate);
-+ info->progress = 0.0;
-+
-+ info->proxy = dbus_g_proxy_new_for_name (state->bus,
-+ "com.example.StateServer",
-+ path,
-+ "com.example.StateMachine");
-+
-+ if (!info->state)
-+ {
-+ g_print ("Starting GetInfo call for %p\n", info->proxy);
-+ dbus_g_proxy_begin_call (info->proxy, "GetInfo",
-+ get_machine_info_cb,
-+ state, NULL,
-+ G_TYPE_INVALID);
-+ }
-+
-+ /* Watch for state changes */
-+ dbus_g_proxy_add_signal (info->proxy, "StateChanged",
-+ G_TYPE_STRING, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (info->proxy,
-+ "StateChanged",
-+ G_CALLBACK (proxy_state_changed_cb),
-+ state,
-+ NULL);
-+
-+ dbus_g_proxy_add_signal (info->proxy, "AcquisitionProgress",
-+ G_TYPE_DOUBLE, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (info->proxy,
-+ "AcquisitionProgress",
-+ G_CALLBACK (proxy_acquisition_changed_cb),
-+ state,
-+ NULL);
-+
-+ gtk_list_store_prepend (GTK_LIST_STORE (state->store), &iter);
-+ gtk_list_store_set (GTK_LIST_STORE (state->store), &iter, 0, info, -1);
-+
-+}
-+
-+static void
-+machine_created_cb (DBusGProxy *proxy,
-+ const char *name,
-+ const char *path,
-+ gpointer data)
-+{
-+ ClientState *state = data;
-+
-+ add_machine (state, name, NULL, path);
-+}
-+
-+static void
-+server_destroyed_cb (DBusGProxy *proxy, gpointer data)
-+{
-+ g_print ("Server terminated!\n");
-+ GtkWidget *dialog;
-+
-+ dialog = gtk_message_dialog_new (NULL,
-+ GTK_DIALOG_DESTROY_WITH_PARENT,
-+ GTK_MESSAGE_INFO,
-+ GTK_BUTTONS_CLOSE,
-+ "State Machine server has exited");
-+
-+ gtk_dialog_run (GTK_DIALOG (dialog));
-+
-+ exit (1);
-+}
-+
-+static void
-+window_destroyed_cb (GtkWidget *window, gpointer data)
-+{
-+ gtk_main_quit ();
-+}
-+
-+static void
-+create_machine_completed_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer data)
-+{
-+ GError *error = NULL;
-+ ClientState *state = data;
-+
-+ if (!dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID))
-+ {
-+ /* Ignore NameInUse errors */
-+ if (dbus_g_error_has_name (error, "com.example.StateServer.NameInUse"))
-+ ;
-+ else
-+ lose_gerror ("Failed to create new state machine", error);
-+ }
-+ g_print ("machine created successfully\n");
-+ state->pending_creation_calls = g_slist_remove (state->pending_creation_calls, call);
-+}
-+
-+static void
-+send_create_machine (ClientState *state)
-+{
-+ DBusGProxyCall *call;
-+ char *name;
-+ gint n_children;
-+
-+ n_children = gtk_tree_model_iter_n_children (state->store, NULL);
-+ name = g_strdup_printf ("machine%d", n_children);
-+
-+ g_print ("Invoking CreateMachine(%s)\n", name);
-+ call = dbus_g_proxy_begin_call (state->server_proxy, "CreateMachine",
-+ create_machine_completed_cb,
-+ state, NULL,
-+ G_TYPE_STRING, name, G_TYPE_INVALID);
-+ g_free (name);
-+ state->pending_creation_calls = g_slist_prepend (state->pending_creation_calls, call);
-+}
-+
-+static void
-+do_a_state_change (ClientState *state)
-+{
-+ gint index;
-+ GtkTreeIter iter;
-+ gint n_children;
-+ MachineInfo *info;
-+
-+ n_children = gtk_tree_model_iter_n_children (state->store, NULL);
-+ if (n_children == 0)
-+ {
-+ g_print ("No machines yet, not doing a state switch\n");
-+ return;
-+ }
-+
-+ index = g_random_int_range (0, n_children);
-+ gtk_tree_model_iter_nth_child (state->store, &iter, NULL, index);
-+ gtk_tree_model_get (state->store, &iter, 0, &info, -1);
-+
-+ if (!info->state)
-+ {
-+ g_print ("Machine not yet in known state, skipping state switch\n");
-+ return;
-+ }
-+
-+ if (!strcmp (info->state, "Shutdown"))
-+ {
-+ g_print ("Sending Start request to machine %s\n", info->name);
-+ dbus_g_proxy_call_no_reply (info->proxy, "Start", G_TYPE_INVALID);
-+ }
-+ else if (!strcmp (info->state, "Loading"))
-+ {
-+
-+ g_print ("Sending Reacquire request to machine %s\n", info->name);
-+ dbus_g_proxy_call_no_reply (info->proxy, "Reacquire", G_TYPE_INVALID);
-+ }
-+ else
-+ {
-+ g_print ("Sending Shutdown request to machine %s\n", info->name);
-+ dbus_g_proxy_call_no_reply (info->proxy, "Shutdown", G_TYPE_INVALID);
-+ }
-+}
-+
-+static gboolean
-+do_something_random_2 (gpointer data)
-+{
-+ ClientState *state = data;
-+ do_a_state_change (state);
-+ g_timeout_add (g_random_int_range (2000, 5000), do_something_random_2, state);
-+ return FALSE;
-+}
-+
-+static gboolean
-+do_something_random (gpointer data)
-+{
-+ ClientState *state = data;
-+ gint n_children;
-+
-+ switch (g_random_int_range (0, 3))
-+ {
-+ case 0:
-+ send_create_machine (state);
-+ break;
-+ case 1:
-+ case 2:
-+ do_a_state_change (state);
-+ break;
-+ default:
-+ g_assert_not_reached ();
-+ }
-+
-+ n_children = gtk_tree_model_iter_n_children (state->store, NULL);
-+ if (n_children >= 5)
-+ {
-+ g_print ("MAX children reached, switching to state changes only\n");
-+ g_timeout_add (g_random_int_range (500, 3000), do_something_random_2, state);
-+ }
-+ else
-+ g_timeout_add (g_random_int_range (500, 3000), do_something_random, state);
-+ return FALSE;
-+}
-+
-+static void
-+set_cell_name (GtkTreeViewColumn *tree_column,
-+ GtkCellRenderer *cell,
-+ GtkTreeModel *tree_model,
-+ GtkTreeIter *iter,
-+ gpointer data)
-+{
-+ MachineInfo *info;
-+
-+ gtk_tree_model_get (tree_model, iter, 0, &info, -1);
-+
-+ g_object_set (cell, "text", info->name ? info->name : "", NULL);
-+}
-+
-+static gint
-+sort_by_name (GtkTreeModel *model,
-+ GtkTreeIter *a,
-+ GtkTreeIter *b,
-+ gpointer user_data)
-+{
-+ MachineInfo *info_a, *info_b;
-+
-+ gtk_tree_model_get (model, a, 0, &info_a, -1);
-+ gtk_tree_model_get (model, b, 0, &info_b, -1);
-+
-+ return strcmp (info_a->name ? info_a->name : "",
-+ info_b ? info_b->name : "");
-+}
-+
-+static void
-+set_cell_state (GtkTreeViewColumn *tree_column,
-+ GtkCellRenderer *cell,
-+ GtkTreeModel *tree_model,
-+ GtkTreeIter *iter,
-+ gpointer data)
-+{
-+ MachineInfo *info;
-+
-+ gtk_tree_model_get (tree_model, iter, 0, &info, -1);
-+
-+ g_object_set (cell, "text", info->state ? info->state : "", NULL);
-+}
-+
-+static gint
-+sort_by_state (GtkTreeModel *model,
-+ GtkTreeIter *a,
-+ GtkTreeIter *b,
-+ gpointer user_data)
-+{
-+ MachineInfo *info_a, *info_b;
-+
-+ gtk_tree_model_get (model, a, 0, &info_a, -1);
-+ gtk_tree_model_get (model, b, 0, &info_b, -1);
-+
-+ return strcmp (info_a->state ? info_a->state : "",
-+ info_b ? info_b->state : "");
-+}
-+
-+static void
-+set_cell_progress (GtkTreeViewColumn *tree_column,
-+ GtkCellRenderer *cell,
-+ GtkTreeModel *tree_model,
-+ GtkTreeIter *iter,
-+ gpointer data)
-+{
-+ MachineInfo *info;
-+
-+ gtk_tree_model_get (tree_model, iter, 0, &info, -1);
-+
-+ g_object_set (cell, "value", (int) (info->progress * 100), NULL);
-+}
-+
-+static gint
-+sort_by_progress (GtkTreeModel *model,
-+ GtkTreeIter *a,
-+ GtkTreeIter *b,
-+ gpointer user_data)
-+{
-+ MachineInfo *info_a, *info_b;
-+
-+ gtk_tree_model_get (model, a, 0, &info_a, -1);
-+ gtk_tree_model_get (model, b, 0, &info_b, -1);
-+
-+ return info_a->progress > info_b->progress ? 1 : -1;
-+}
-+
-+static void
-+get_machines_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer data)
-+{
-+ GError *error = NULL;
-+ ClientState *state = data;
-+ GPtrArray *objs;
-+ guint i;
-+ GtkWidget *scrolledwin;
-+ GtkTreeViewColumn *col;
-+ GtkCellRenderer *rend;
-+
-+ g_assert (call == state->get_machines_call);
-+
-+ if (!dbus_g_proxy_end_call (proxy, call, &error,
-+ dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH),
-+ &objs,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to get current machine list", error);
-+
-+ gtk_container_remove (GTK_CONTAINER (state->window),
-+ gtk_bin_get_child (GTK_BIN (state->window)));
-+
-+ scrolledwin = gtk_scrolled_window_new (NULL, NULL);
-+ gtk_widget_show (scrolledwin);
-+
-+ state->store = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_POINTER));
-+ state->view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (state->store));
-+ gtk_widget_show (state->view);
-+ gtk_container_add (GTK_CONTAINER (scrolledwin), state->view);
-+ gtk_container_add (GTK_CONTAINER (state->window), scrolledwin);
-+
-+ rend = gtk_cell_renderer_text_new ();
-+ col = gtk_tree_view_column_new_with_attributes (_("Name"),
-+ rend,
-+ NULL);
-+ gtk_tree_view_column_set_cell_data_func (col, rend, set_cell_name, NULL, NULL);
-+ gtk_tree_view_column_set_resizable (col, TRUE);
-+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (state->store),
-+ 0, sort_by_name, NULL, NULL);
-+ gtk_tree_view_column_set_sort_column_id (col, 0);
-+ gtk_tree_view_append_column (GTK_TREE_VIEW (state->view), col);
-+
-+ rend = gtk_cell_renderer_text_new ();
-+ col = gtk_tree_view_column_new_with_attributes (_("State"),
-+ rend,
-+ NULL);
-+ gtk_tree_view_column_set_cell_data_func (col, rend, set_cell_state, NULL, NULL);
-+ gtk_tree_view_column_set_resizable (col, TRUE);
-+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (state->store),
-+ 0, sort_by_state, NULL, NULL);
-+ gtk_tree_view_column_set_sort_column_id (col, 0);
-+ gtk_tree_view_append_column (GTK_TREE_VIEW (state->view), col);
-+
-+ rend = gtk_cell_renderer_progress_new ();
-+ col = gtk_tree_view_column_new_with_attributes (_("Progress"),
-+ rend,
-+ NULL);
-+ gtk_tree_view_column_set_cell_data_func (col, rend, set_cell_progress, NULL, NULL);
-+ gtk_tree_view_column_set_resizable (col, TRUE);
-+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (state->store),
-+ 0, sort_by_progress, NULL, NULL);
-+ gtk_tree_view_column_set_sort_column_id (col, 0);
-+ gtk_tree_view_append_column (GTK_TREE_VIEW (state->view), col);
-+
-+ for (i = 0; i < objs->len; i++)
-+ {
-+ add_machine (state, NULL, NULL, g_ptr_array_index (objs, i));
-+ g_free (g_ptr_array_index (objs, i));
-+ }
-+ g_ptr_array_free (objs, TRUE);
-+
-+ g_idle_add (do_something_random, state);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *bus;
-+ DBusGProxy *server;
-+ GError *error = NULL;
-+ ClientState state;
-+ GtkWidget *label;
-+
-+ gtk_init (&argc, &argv);
-+
-+ g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL);
-+
-+ state.window = GTK_WINDOW (gtk_window_new (GTK_WINDOW_TOPLEVEL));
-+ gtk_window_set_resizable (GTK_WINDOW (state.window), TRUE);
-+ g_signal_connect (G_OBJECT (state.window), "destroy",
-+ G_CALLBACK (window_destroyed_cb),
-+ &state);
-+ gtk_window_set_title (GTK_WINDOW (state.window), _("D-BUS State Machine Demo"));
-+ gtk_window_set_default_size (GTK_WINDOW (state.window), 320, 240);
-+
-+ label = gtk_label_new ("");
-+ gtk_label_set_markup (GTK_LABEL (label), "<b>Loading...</b>");
-+ gtk_widget_show (label);
-+
-+ gtk_container_add (GTK_CONTAINER (state.window), label);
-+
-+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-+ if (!bus)
-+ lose_gerror ("Couldn't connect to session bus", error);
-+
-+ state.bus = bus;
-+
-+ server = dbus_g_proxy_new_for_name_owner (bus,
-+ "com.example.StateServer",
-+ "/com/example/StateServer",
-+ "com.example.StateMachineServer",
-+ &error);
-+ if (!server)
-+ lose_gerror ("Couldn't find \"com.example.StateServer\"", error);
-+
-+ state.server_proxy = server;
-+
-+ g_signal_connect (server, "destroy",
-+ G_CALLBACK (server_destroyed_cb),
-+ &state);
-+
-+ dbus_g_object_register_marshaller (sm_marshal_VOID__STRING_BOXED,
-+ G_TYPE_NONE, G_TYPE_STRING,
-+ DBUS_TYPE_G_OBJECT_PATH);
-+
-+ dbus_g_proxy_add_signal (server, "MachineCreated", G_TYPE_STRING, DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (server, "MachineCreated",
-+ G_CALLBACK (machine_created_cb),
-+ &state, NULL);
-+
-+ state.get_machines_call = dbus_g_proxy_begin_call (server, "GetMachines",
-+ get_machines_cb, &state, NULL,
-+ G_TYPE_INVALID);
-+
-+ gtk_widget_show (GTK_WIDGET (state.window));
-+
-+ gtk_main ();
-+
-+ g_object_unref (G_OBJECT (server));
-+
-+ exit(0);
-+}
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/statemachine-server.c dbus-0.61/glib/examples/statemachine/statemachine-server.c
---- dbus-0.61.orig/glib/examples/statemachine/statemachine-server.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/statemachine-server.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,229 @@
-+#include <dbus/dbus-glib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+#include "statemachine.h"
-+#include "sm-marshal.h"
-+#include "statemachine-server.h"
-+
-+enum
-+{
-+ PROP_O,
-+ PROP_BUS
-+};
-+
-+enum
-+{
-+ MACHINE_CREATED,
-+ LAST_SIGNAL
-+};
-+
-+static guint sm_server_signals[LAST_SIGNAL] = { 0 };
-+
-+static void sm_server_set_property (GObject *object,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *pspec);
-+static void sm_server_get_property (GObject *object,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *pspec);
-+
-+G_DEFINE_TYPE(SMServer, sm_server, G_TYPE_OBJECT)
-+
-+#include "statemachine-server-glue.h"
-+#include "statemachine-glue.h"
-+
-+static void
-+sm_server_init (SMServer *obj)
-+{
-+ obj->machines = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
-+}
-+
-+static void
-+sm_server_class_init (SMServerClass *klass)
-+{
-+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
-+
-+ object_class->set_property = sm_server_set_property;
-+ object_class->get_property = sm_server_get_property;
-+
-+ g_object_class_install_property (object_class,
-+ PROP_BUS,
-+ g_param_spec_boxed ("bus",
-+ "bus",
-+ "bus",
-+ DBUS_TYPE_G_CONNECTION,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+
-+ sm_server_signals[MACHINE_CREATED] =
-+ g_signal_new ("machine-created",
-+ G_OBJECT_CLASS_TYPE (klass),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ sm_marshal_VOID__STRING_BOXED,
-+ G_TYPE_NONE, 2, G_TYPE_STRING, DBUS_TYPE_G_OBJECT_PATH);
-+}
-+
-+static void
-+sm_server_set_property (GObject *object,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *pspec)
-+{
-+ SMServer *server = SM_SERVER (object);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_BUS:
-+ server->bus = g_value_get_boxed (value);
-+ break;
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+sm_server_get_property (GObject *object,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *pspec)
-+{
-+ SMServer *server = SM_SERVER (object);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_BUS:
-+ g_value_set_boxed (value, server->bus);
-+ break;
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+machine_state_changed_cb (SMObject *obj, const char *state, gpointer data)
-+{
-+ char *name;
-+
-+ g_object_get (obj, "name", &name, NULL);
-+ g_print ("Machine %s switching to state %s\n", name, state);
-+ g_free (name);
-+}
-+
-+static void
-+machine_acquisition_changed_cb (SMObject *obj, gdouble progress, gpointer data)
-+{
-+ char *name;
-+
-+ g_object_get (obj, "name", &name, NULL);
-+ g_print ("Machine %s got progress %f\n", name, progress);
-+ g_free (name);
-+}
-+
-+gboolean
-+sm_server_create_machine (SMServer *server, const char *name, GError **error)
-+{
-+ SMObject *machine;
-+ char *path;
-+
-+ machine = g_hash_table_lookup (server->machines, name);
-+ if (machine != NULL)
-+ {
-+ g_set_error (error,
-+ SM_ERROR,
-+ SM_ERROR_NAME_IN_USE,
-+ "Statemachine name \"%s\" is already in use",
-+ name);
-+ return FALSE;
-+ }
-+
-+ machine = g_object_new (SM_TYPE_OBJECT, "name", name, NULL);
-+
-+ path = g_strdup_printf ("/com/example/StateMachines/%s", name);
-+ dbus_g_connection_register_g_object (server->bus, path, G_OBJECT (machine));
-+
-+ g_hash_table_insert (server->machines, g_strdup (name), machine);
-+
-+ g_print ("Created state machine with name %s at %s\n", name, path);
-+
-+ g_signal_connect_object (machine, "state-changed",
-+ G_CALLBACK (machine_state_changed_cb),
-+ NULL, 0);
-+ g_signal_connect_object (machine, "acquisition-progress",
-+ G_CALLBACK (machine_acquisition_changed_cb),
-+ NULL, 0);
-+
-+ g_signal_emit (server, sm_server_signals[MACHINE_CREATED], 0, name, path);
-+
-+ return TRUE;
-+}
-+
-+static void
-+add_machine_to_ptr_array (gpointer key, gpointer val, gpointer data)
-+{
-+ const char *name = key;
-+ /* SMObject *sm = val; */
-+ GPtrArray *ptrarray = data;
-+
-+ g_ptr_array_add (ptrarray, g_strdup_printf ("/com/example/StateMachines/%s",
-+ name));
-+}
-+
-+gboolean
-+sm_server_get_machines (SMServer *server, GPtrArray **machines, GError **error)
-+{
-+ *machines = g_ptr_array_new ();
-+
-+ g_hash_table_foreach (server->machines, add_machine_to_ptr_array, *machines);
-+
-+ return TRUE;
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *bus;
-+ DBusGProxy *bus_proxy;
-+ GError *error = NULL;
-+ SMServer *server;
-+ GMainLoop *mainloop;
-+ guint request_name_result;
-+
-+ g_type_init ();
-+
-+ dbus_g_object_type_install_info (SM_TYPE_SERVER, &dbus_glib_sm_server_object_info);
-+ dbus_g_object_type_install_info (SM_TYPE_OBJECT, &dbus_glib_sm_object_object_info);
-+ dbus_g_error_domain_register (SM_ERROR, NULL, SM_TYPE_ERROR);
-+
-+ mainloop = g_main_loop_new (NULL, FALSE);
-+
-+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-+ if (!bus)
-+ g_critical ("Couldn't connect to session bus: %s\n", error->message);
-+
-+ bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus",
-+ "/org/freedesktop/DBus",
-+ "org.freedesktop.DBus");
-+
-+ if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,
-+ G_TYPE_STRING, "com.example.StateServer",
-+ G_TYPE_UINT, 0,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &request_name_result,
-+ G_TYPE_INVALID))
-+ g_critical ("Couldn't acquire com.example.StateServer: %s\n", error->message);
-+
-+ server = g_object_new (SM_TYPE_SERVER, "bus", bus, NULL);
-+
-+ dbus_g_connection_register_g_object (bus, "/com/example/StateServer", G_OBJECT (server));
-+
-+ g_print ("StateMachine server initialized\n");
-+
-+ g_main_loop_run (mainloop);
-+
-+ exit (0);
-+}
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/statemachine-server.h dbus-0.61/glib/examples/statemachine/statemachine-server.h
---- dbus-0.61.orig/glib/examples/statemachine/statemachine-server.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/statemachine-server.h 2005-07-08 18:25:32.000000000 +0200
-@@ -0,0 +1,37 @@
-+#ifndef _SM_SERVER_H
-+#define _SM_SERVER_H
-+
-+#include "statemachine.h"
-+#include <dbus/dbus-glib.h>
-+
-+typedef struct SMServer SMServer;
-+typedef struct SMServerClass SMServerClass;
-+
-+struct SMServer
-+{
-+ GObject parent;
-+
-+ /* Private */
-+ DBusGConnection *bus;
-+ GHashTable *machines;
-+};
-+
-+struct SMServerClass
-+{
-+ GObjectClass parent;
-+};
-+
-+#define SM_TYPE_SERVER (sm_server_get_type ())
-+#define SM_SERVER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SM_TYPE_SERVER, SMServer))
-+#define SM_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SM_TYPE_SERVER, SMServerClass))
-+#define SM_IS_SERVER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SM_TYPE_SERVER))
-+#define SM_IS_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SM_TYPE_SERVER))
-+#define SM_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SM_TYPE_SERVER, SMServerClass))
-+
-+GType sm_server_get_type (void);
-+
-+gboolean sm_server_create_machine (SMServer *server, const char *name, GError **error);
-+
-+gboolean sm_server_get_machines (SMServer *server, GPtrArray **machines, GError **error);
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/statemachine-server.xml dbus-0.61/glib/examples/statemachine/statemachine-server.xml
---- dbus-0.61.orig/glib/examples/statemachine/statemachine-server.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/statemachine-server.xml 2005-07-08 18:25:32.000000000 +0200
-@@ -0,0 +1,14 @@
-+<?xml version="1.0" encoding="UTF-8" ?>
-+
-+<node name="/">
-+ <interface name="com.example.StateMachineServer">
-+ <method name="CreateMachine">
-+ <arg type="s" name="name" direction="in"/>
-+ </method>
-+
-+ <method name="GetMachines">
-+ <arg type="ao" direction="out"/>
-+ </method>
-+ <signal name="MachineCreated"/>
-+ </interface>
-+</node>
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/statemachine.c dbus-0.61/glib/examples/statemachine/statemachine.c
---- dbus-0.61.orig/glib/examples/statemachine/statemachine.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/statemachine.c 2005-07-09 03:46:51.000000000 +0200
-@@ -0,0 +1,353 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include "statemachine.h"
-+
-+static void clear_pending_tasks (SMObject *object);
-+static void state_change (SMObject *object, SMObjectState new_state);
-+static void sm_object_set_property (GObject *object,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *pspec);
-+static void sm_object_get_property (GObject *object,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *pspec);
-+enum
-+{
-+ PROP_0,
-+ PROP_NAME,
-+};
-+
-+enum
-+{
-+ STATE_CHANGED,
-+ ACQUISITION_FAILED,
-+ ACQUISITION_PROGRESS,
-+ LAST_SIGNAL
-+};
-+
-+static guint sm_object_signals[LAST_SIGNAL] = { 0 };
-+
-+G_DEFINE_TYPE(SMObject, sm_object, G_TYPE_OBJECT)
-+
-+static void
-+sm_object_init (SMObject *obj)
-+{
-+ obj->state = SM_OBJECT_STATE_SHUTDOWN;
-+}
-+
-+static void
-+sm_object_class_init (SMObjectClass *klass)
-+{
-+ GObjectClass *object_class;
-+
-+ object_class = G_OBJECT_CLASS (klass);
-+
-+ object_class->set_property = sm_object_set_property;
-+ object_class->get_property = sm_object_get_property;
-+
-+ g_object_class_install_property (object_class,
-+ PROP_NAME,
-+ g_param_spec_string ("name",
-+ "name",
-+ "name",
-+ NULL,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+ sm_object_signals[STATE_CHANGED] =
-+ g_signal_new ("state-changed",
-+ G_OBJECT_CLASS_TYPE (klass),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ g_cclosure_marshal_VOID__STRING,
-+ G_TYPE_NONE, 1, G_TYPE_STRING);
-+ sm_object_signals[ACQUISITION_PROGRESS] =
-+ g_signal_new ("acquisition-progress",
-+ G_OBJECT_CLASS_TYPE (klass),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ g_cclosure_marshal_VOID__DOUBLE,
-+ G_TYPE_NONE, 1, G_TYPE_DOUBLE);
-+ sm_object_signals[ACQUISITION_FAILED] =
-+ g_signal_new ("acquisition-failed",
-+ G_OBJECT_CLASS_TYPE (klass),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ g_cclosure_marshal_VOID__VOID,
-+ G_TYPE_NONE, 0);
-+}
-+
-+/* This should really be standard. */
-+#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-+
-+GQuark
-+sm_error_quark (void)
-+{
-+ static GQuark ret = 0;
-+ if (!ret)
-+ ret = g_quark_from_static_string ("SMObjectErrorQuark");
-+ return ret;
-+}
-+
-+GType
-+sm_object_state_get_type (void)
-+{
-+ static GType etype = 0;
-+
-+ if (etype == 0)
-+ {
-+ static const GEnumValue values[] =
-+ {
-+
-+ ENUM_ENTRY (SM_OBJECT_STATE_SHUTDOWN, "Shutdown"),
-+ ENUM_ENTRY (SM_OBJECT_STATE_INITIALIZED, "Loading"),
-+ ENUM_ENTRY (SM_OBJECT_STATE_ACQUIRED, "Acquired"),
-+ ENUM_ENTRY (SM_OBJECT_STATE_OPERATING, "Operating"),
-+ { 0, 0, 0 }
-+ };
-+
-+ etype = g_enum_register_static ("SMObjectState", values);
-+ }
-+
-+ return etype;
-+}
-+
-+GType
-+sm_error_get_type (void)
-+{
-+ static GType etype = 0;
-+
-+ if (etype == 0)
-+ {
-+ static const GEnumValue values[] =
-+ {
-+
-+ ENUM_ENTRY (SM_ERROR_INVALID_STATE, "InvalidState"),
-+ ENUM_ENTRY (SM_ERROR_NAME_IN_USE, "NameInUse"),
-+ { 0, 0, 0 }
-+ };
-+
-+ g_assert (SM_NUM_ERRORS == G_N_ELEMENTS (values) - 1);
-+
-+ etype = g_enum_register_static ("SMError", values);
-+ }
-+
-+ return etype;
-+}
-+
-+static void
-+sm_object_set_property (GObject *object,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *pspec)
-+{
-+ SMObject *sm = SM_OBJECT (object);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_NAME:
-+ sm->name = g_strdup (g_value_get_string (value));
-+ break;
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+sm_object_get_property (GObject *object,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *pspec)
-+{
-+ SMObject *sm= SM_OBJECT (object);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_NAME:
-+ g_value_set_string (value, sm->name);
-+ break;
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static const char *
-+state_to_string (SMObjectState state)
-+{
-+ GEnumValue *value;
-+ GEnumClass *prop_class;
-+ const char *ret;
-+
-+ prop_class = g_type_class_ref (SM_TYPE_OBJECT_STATE);
-+ value = g_enum_get_value (prop_class, state);
-+ ret = value->value_nick;
-+
-+ g_type_class_unref (prop_class);
-+ return ret;
-+}
-+
-+static void
-+queue_task (SMObject *object, guint delay, GSourceFunc func)
-+{
-+ guint id;
-+ id = g_timeout_add (delay, func, object);
-+ object->pending_tasks = g_slist_prepend (object->pending_tasks, GUINT_TO_POINTER (id));
-+}
-+
-+static gboolean
-+idle_state_change (gpointer data)
-+{
-+ SMObject *object = data;
-+
-+ g_print ("doing idle state change for %s to %s\n",
-+ object->name, state_to_string (object->requested_state));
-+ state_change (object, object->requested_state);
-+ return FALSE;
-+}
-+
-+static gboolean
-+idle_further_acquire (gpointer data)
-+{
-+ SMObject *object = data;
-+
-+ g_print ("doing idle acquisition for machine %s\n", object->name);
-+ object->acquisition_progress += g_random_double_range (0.20, 0.7);
-+ if (object->acquisition_progress > 1.0)
-+ {
-+ object->acquisition_progress = 1.0;
-+ return FALSE;
-+ }
-+ else
-+ {
-+ g_signal_emit (object, sm_object_signals[ACQUISITION_PROGRESS], 0, object->acquisition_progress);
-+ return TRUE;
-+ }
-+}
-+
-+static void
-+clear_pending_tasks (SMObject *object)
-+{
-+ GSList *tmp;
-+ for (tmp = object->pending_tasks; tmp; tmp = tmp->next)
-+ g_source_remove (GPOINTER_TO_UINT (tmp->data));
-+ g_slist_free (object->pending_tasks);
-+ object->pending_tasks = NULL;
-+}
-+
-+static void
-+state_change (SMObject *object, SMObjectState new_state)
-+{
-+ g_signal_emit (object, sm_object_signals[STATE_CHANGED], 0,
-+ state_to_string (new_state));
-+
-+ clear_pending_tasks (object);
-+
-+ if (new_state == SM_OBJECT_STATE_ACQUIRED)
-+ {
-+ object->acquisition_progress = 0.0;
-+ queue_task (object, 1000, idle_further_acquire);
-+ }
-+ else if (new_state == SM_OBJECT_STATE_INITIALIZED)
-+ {
-+ if (g_random_int_range (0, 2) == 0)
-+ {
-+ object->requested_state = SM_OBJECT_STATE_ACQUIRED;
-+ queue_task (object, 3000, idle_state_change);
-+ }
-+ }
-+
-+ object->state = new_state;
-+}
-+
-+gboolean
-+sm_object_get_info (SMObject *object, char **name, char **state, GError **error)
-+{
-+ *name= g_strdup (object->name);
-+ *state = g_strdup (state_to_string (object->state));
-+ return TRUE;
-+}
-+
-+gboolean
-+sm_object_start (SMObject *object, GError **error)
-+{
-+ if (object->state != SM_OBJECT_STATE_SHUTDOWN)
-+ {
-+ g_set_error (error,
-+ SM_ERROR,
-+ SM_ERROR_INVALID_STATE,
-+ "%s",
-+ "Can't start from non-shutdown state");
-+ return FALSE;
-+ }
-+ state_change (object, SM_OBJECT_STATE_INITIALIZED);
-+ return TRUE;
-+}
-+
-+gboolean
-+sm_object_shutdown (SMObject *object, GError **error)
-+{
-+ if (object->state == SM_OBJECT_STATE_SHUTDOWN)
-+ {
-+ g_set_error (error,
-+ SM_ERROR,
-+ SM_ERROR_INVALID_STATE,
-+ "%s",
-+ "Can't shutdown from shutdown state");
-+ return FALSE;
-+ }
-+ state_change (object, SM_OBJECT_STATE_SHUTDOWN);
-+ return TRUE;
-+}
-+
-+gboolean
-+sm_object_reinitialize (SMObject *object, GError **error)
-+{
-+ if (object->state != SM_OBJECT_STATE_ACQUIRED
-+ && object->state != SM_OBJECT_STATE_OPERATING)
-+ {
-+ g_set_error (error,
-+ SM_ERROR,
-+ SM_ERROR_INVALID_STATE,
-+ "Can't reinitialize from state %d",
-+ object->state);
-+ return FALSE;
-+ }
-+ state_change (object, SM_OBJECT_STATE_INITIALIZED);
-+ return TRUE;
-+}
-+
-+gboolean
-+sm_object_reacquire (SMObject *object, GError **error)
-+{
-+ if (object->state == SM_OBJECT_STATE_ACQUIRED)
-+ {
-+ g_set_error (error,
-+ SM_ERROR,
-+ SM_ERROR_INVALID_STATE,
-+ "Can't reacquire from state %d",
-+ object->state);
-+ return FALSE;
-+ }
-+ state_change (object, SM_OBJECT_STATE_ACQUIRED);
-+ return TRUE;
-+}
-+
-+gboolean
-+sm_object_get_acquiring_progress (SMObject *object, gdouble *out, GError **error)
-+{
-+ if (object->state != SM_OBJECT_STATE_ACQUIRED)
-+ {
-+ g_set_error (error,
-+ SM_ERROR,
-+ SM_ERROR_INVALID_STATE,
-+ "Can't get progress from state %d",
-+ object->state);
-+ return FALSE;
-+ }
-+ *out = object->acquisition_progress;
-+ return TRUE;
-+}
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/statemachine.h dbus-0.61/glib/examples/statemachine/statemachine.h
---- dbus-0.61.orig/glib/examples/statemachine/statemachine.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/statemachine.h 2005-07-08 18:25:32.000000000 +0200
-@@ -0,0 +1,77 @@
-+#ifndef _SM_OBJECT_H
-+#define _SM_OBJECT_H
-+
-+#include <glib.h>
-+#include <glib-object.h>
-+
-+GQuark sm_error_quark (void);
-+
-+#define SM_ERROR (sm_error_quark ())
-+
-+typedef enum
-+{
-+ SM_ERROR_INVALID_STATE = 0,
-+ SM_ERROR_NAME_IN_USE,
-+ SM_NUM_ERRORS
-+} SMError;
-+
-+GType sm_error_get_type (void);
-+#define SM_TYPE_ERROR (sm_error_get_type ())
-+
-+typedef enum
-+{
-+ SM_OBJECT_STATE_SHUTDOWN = 0,
-+ SM_OBJECT_STATE_INITIALIZED,
-+ SM_OBJECT_STATE_ACQUIRED,
-+ SM_OBJECT_STATE_OPERATING,
-+ SM_OBJECT_NUM_STATES
-+} SMObjectState;
-+
-+GType sm_object_state_get_type (void);
-+
-+#define SM_TYPE_OBJECT_STATE (sm_object_state_get_type ())
-+
-+typedef struct SMObject SMObject;
-+typedef struct SMObjectClass SMObjectClass;
-+
-+struct SMObject
-+{
-+ GObject parent;
-+
-+ /* Private */
-+ char *name;
-+ SMObjectState state;
-+ double acquisition_progress;
-+
-+ GSList /* guint */ *pending_tasks;
-+
-+ SMObjectState requested_state;
-+};
-+
-+struct SMObjectClass
-+{
-+ GObjectClass parent;
-+};
-+
-+#define SM_TYPE_OBJECT (sm_object_get_type ())
-+#define SM_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), SM_TYPE_OBJECT, SMObject))
-+#define SM_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SM_TYPE_OBJECT, SMObjectClass))
-+#define SM_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), SM_TYPE_OBJECT))
-+#define SM_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SM_TYPE_OBJECT))
-+#define SM_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SM_TYPE_OBJECT, SMObjectClass))
-+
-+GType sm_object_get_type (void);
-+
-+gboolean sm_object_get_info (SMObject *object, char **name, char **state, GError **error);
-+
-+gboolean sm_object_start (SMObject *object, GError **error);
-+
-+gboolean sm_object_shutdown (SMObject *object, GError **error);
-+
-+gboolean sm_object_reinitialize (SMObject *object, GError **error);
-+
-+gboolean sm_object_reacquire (SMObject *object, GError **error);
-+
-+gboolean sm_object_get_acquiring_progress (SMObject *object, gdouble *out, GError **error);
-+
-+#endif
-diff -Naur dbus-0.61.orig/glib/examples/statemachine/statemachine.xml dbus-0.61/glib/examples/statemachine/statemachine.xml
---- dbus-0.61.orig/glib/examples/statemachine/statemachine.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/examples/statemachine/statemachine.xml 2005-07-08 18:25:32.000000000 +0200
-@@ -0,0 +1,33 @@
-+<?xml version="1.0" encoding="UTF-8" ?>
-+
-+<node name="/">
-+ <interface name="com.example.StateMachine">
-+
-+ <method name="GetInfo">
-+ <arg type="s" name="name" direction="out"/>
-+ <arg type="s" name="state" direction="out"/>
-+ </method>
-+
-+ <method name="Start">
-+ </method>
-+
-+ <method name="Shutdown">
-+ </method>
-+
-+ <method name="Reinitialize">
-+ </method>
-+
-+ <method name="Reacquire">
-+ </method>
-+
-+ <method name="GetAcquiringProgress">
-+ <arg type="d" direction="out"/>
-+ </method>
-+
-+ <!-- Mark the signals as exported -->
-+ <signal name="StateChanged"/>
-+ <signal name="AcquisitionFailed"/>
-+ <signal name="AcquisitionProgress"/>
-+
-+ </interface>
-+</node>
-diff -Naur dbus-0.61.orig/glib/make-dbus-glib-error-switch.sh dbus-0.61/glib/make-dbus-glib-error-switch.sh
---- dbus-0.61.orig/glib/make-dbus-glib-error-switch.sh 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/glib/make-dbus-glib-error-switch.sh 2005-06-26 19:02:09.000000000 +0200
-@@ -0,0 +1,29 @@
-+#!/bin/sh
-+
-+SRC=$1
-+DEST=$2
-+
-+die()
-+{
-+ echo $1 1>&2
-+ /bin/rm $DEST.tmp
-+ exit 1
-+}
-+
-+echo 'static gint' > $DEST.tmp
-+echo 'dbus_error_to_gerror_code (const char *derr)' >> $DEST.tmp
-+echo '{' >> $DEST.tmp
-+echo ' if (0) ; ' >> $DEST.tmp
-+
-+cat $SRC | grep '#define DBUS_ERROR' | sed -e 's/#define //g' | \
-+ sed -e 's/".*//g' | \
-+ (while read line; do \
-+ echo ' else if (!strcmp (derr, ' "$line" ' )) '; \
-+ echo ' return ' `echo $line | sed -e 's/DBUS_ERROR/DBUS_GERROR/g'` ';'; \
-+ done; \
-+ ) >> $DEST.tmp
-+echo ' else' >> $DEST.tmp
-+echo ' return DBUS_GERROR_REMOTE_EXCEPTION;' >> $DEST.tmp
-+echo '}' >> $DEST.tmp
-+
-+mv $DEST.tmp $DEST || die "could not move $DEST.tmp to $DEST"
-diff -Naur dbus-0.61.orig/install-sh dbus-0.61/install-sh
---- dbus-0.61.orig/install-sh 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/install-sh 2005-12-19 16:38:26.000000000 +0100
-@@ -0,0 +1,323 @@
-+#!/bin/sh
-+# install - install a program, script, or datafile
-+
-+scriptversion=2005-05-14.22
-+
-+# This originates from X11R5 (mit/util/scripts/install.sh), which was
-+# later released in X11R6 (xc/config/util/install.sh) with the
-+# following copyright and license.
-+#
-+# Copyright (C) 1994 X Consortium
-+#
-+# Permission is hereby granted, free of charge, to any person obtaining a copy
-+# of this software and associated documentation files (the "Software"), to
-+# deal in the Software without restriction, including without limitation the
-+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-+# sell copies of the Software, and to permit persons to whom the Software is
-+# furnished to do so, subject to the following conditions:
-+#
-+# The above copyright notice and this permission notice shall be included in
-+# all copies or substantial portions of the Software.
-+#
-+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+#
-+# Except as contained in this notice, the name of the X Consortium shall not
-+# be used in advertising or otherwise to promote the sale, use or other deal-
-+# ings in this Software without prior written authorization from the X Consor-
-+# tium.
-+#
-+#
-+# FSF changes to this file are in the public domain.
-+#
-+# Calling this script install-sh is preferred over install.sh, to prevent
-+# `make' implicit rules from creating a file called install from it
-+# when there is no Makefile.
-+#
-+# This script is compatible with the BSD install script, but was written
-+# from scratch. It can only install one file at a time, a restriction
-+# shared with many OS's install programs.
-+
-+# set DOITPROG to echo to test this script
-+
-+# Don't use :- since 4.3BSD and earlier shells don't like it.
-+doit="${DOITPROG-}"
-+
-+# put in absolute paths if you don't have them in your path; or use env. vars.
-+
-+mvprog="${MVPROG-mv}"
-+cpprog="${CPPROG-cp}"
-+chmodprog="${CHMODPROG-chmod}"
-+chownprog="${CHOWNPROG-chown}"
-+chgrpprog="${CHGRPPROG-chgrp}"
-+stripprog="${STRIPPROG-strip}"
-+rmprog="${RMPROG-rm}"
-+mkdirprog="${MKDIRPROG-mkdir}"
-+
-+chmodcmd="$chmodprog 0755"
-+chowncmd=
-+chgrpcmd=
-+stripcmd=
-+rmcmd="$rmprog -f"
-+mvcmd="$mvprog"
-+src=
-+dst=
-+dir_arg=
-+dstarg=
-+no_target_directory=
-+
-+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-+ or: $0 [OPTION]... SRCFILES... DIRECTORY
-+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-+ or: $0 [OPTION]... -d DIRECTORIES...
-+
-+In the 1st form, copy SRCFILE to DSTFILE.
-+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-+In the 4th, create DIRECTORIES.
-+
-+Options:
-+-c (ignored)
-+-d create directories instead of installing files.
-+-g GROUP $chgrpprog installed files to GROUP.
-+-m MODE $chmodprog installed files to MODE.
-+-o USER $chownprog installed files to USER.
-+-s $stripprog installed files.
-+-t DIRECTORY install into DIRECTORY.
-+-T report an error if DSTFILE is a directory.
-+--help display this help and exit.
-+--version display version info and exit.
-+
-+Environment variables override the default commands:
-+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-+"
-+
-+while test -n "$1"; do
-+ case $1 in
-+ -c) shift
-+ continue;;
-+
-+ -d) dir_arg=true
-+ shift
-+ continue;;
-+
-+ -g) chgrpcmd="$chgrpprog $2"
-+ shift
-+ shift
-+ continue;;
-+
-+ --help) echo "$usage"; exit $?;;
-+
-+ -m) chmodcmd="$chmodprog $2"
-+ shift
-+ shift
-+ continue;;
-+
-+ -o) chowncmd="$chownprog $2"
-+ shift
-+ shift
-+ continue;;
-+
-+ -s) stripcmd=$stripprog
-+ shift
-+ continue;;
-+
-+ -t) dstarg=$2
-+ shift
-+ shift
-+ continue;;
-+
-+ -T) no_target_directory=true
-+ shift
-+ continue;;
-+
-+ --version) echo "$0 $scriptversion"; exit $?;;
-+
-+ *) # When -d is used, all remaining arguments are directories to create.
-+ # When -t is used, the destination is already specified.
-+ test -n "$dir_arg$dstarg" && break
-+ # Otherwise, the last argument is the destination. Remove it from $@.
-+ for arg
-+ do
-+ if test -n "$dstarg"; then
-+ # $@ is not empty: it contains at least $arg.
-+ set fnord "$@" "$dstarg"
-+ shift # fnord
-+ fi
-+ shift # arg
-+ dstarg=$arg
-+ done
-+ break;;
-+ esac
-+done
-+
-+if test -z "$1"; then
-+ if test -z "$dir_arg"; then
-+ echo "$0: no input file specified." >&2
-+ exit 1
-+ fi
-+ # It's OK to call `install-sh -d' without argument.
-+ # This can happen when creating conditional directories.
-+ exit 0
-+fi
-+
-+for src
-+do
-+ # Protect names starting with `-'.
-+ case $src in
-+ -*) src=./$src ;;
-+ esac
-+
-+ if test -n "$dir_arg"; then
-+ dst=$src
-+ src=
-+
-+ if test -d "$dst"; then
-+ mkdircmd=:
-+ chmodcmd=
-+ else
-+ mkdircmd=$mkdirprog
-+ fi
-+ else
-+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-+ # might cause directories to be created, which would be especially bad
-+ # if $src (and thus $dsttmp) contains '*'.
-+ if test ! -f "$src" && test ! -d "$src"; then
-+ echo "$0: $src does not exist." >&2
-+ exit 1
-+ fi
-+
-+ if test -z "$dstarg"; then
-+ echo "$0: no destination specified." >&2
-+ exit 1
-+ fi
-+
-+ dst=$dstarg
-+ # Protect names starting with `-'.
-+ case $dst in
-+ -*) dst=./$dst ;;
-+ esac
-+
-+ # If destination is a directory, append the input filename; won't work
-+ # if double slashes aren't ignored.
-+ if test -d "$dst"; then
-+ if test -n "$no_target_directory"; then
-+ echo "$0: $dstarg: Is a directory" >&2
-+ exit 1
-+ fi
-+ dst=$dst/`basename "$src"`
-+ fi
-+ fi
-+
-+ # This sed command emulates the dirname command.
-+ dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-+
-+ # Make sure that the destination directory exists.
-+
-+ # Skip lots of stat calls in the usual case.
-+ if test ! -d "$dstdir"; then
-+ defaultIFS='
-+ '
-+ IFS="${IFS-$defaultIFS}"
-+
-+ oIFS=$IFS
-+ # Some sh's can't handle IFS=/ for some reason.
-+ IFS='%'
-+ set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-+ shift
-+ IFS=$oIFS
-+
-+ pathcomp=
-+
-+ while test $# -ne 0 ; do
-+ pathcomp=$pathcomp$1
-+ shift
-+ if test ! -d "$pathcomp"; then
-+ $mkdirprog "$pathcomp"
-+ # mkdir can fail with a `File exist' error in case several
-+ # install-sh are creating the directory concurrently. This
-+ # is OK.
-+ test -d "$pathcomp" || exit
-+ fi
-+ pathcomp=$pathcomp/
-+ done
-+ fi
-+
-+ if test -n "$dir_arg"; then
-+ $doit $mkdircmd "$dst" \
-+ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-+ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-+
-+ else
-+ dstfile=`basename "$dst"`
-+
-+ # Make a couple of temp file names in the proper directory.
-+ dsttmp=$dstdir/_inst.$$_
-+ rmtmp=$dstdir/_rm.$$_
-+
-+ # Trap to clean up those temp files at exit.
-+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-+ trap '(exit $?); exit' 1 2 13 15
-+
-+ # Copy the file name to the temp name.
-+ $doit $cpprog "$src" "$dsttmp" &&
-+
-+ # and set any options; do chmod last to preserve setuid bits.
-+ #
-+ # If any of these fail, we abort the whole thing. If we want to
-+ # ignore errors from any of these, just make sure not to ignore
-+ # errors from the above "$doit $cpprog $src $dsttmp" command.
-+ #
-+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
-+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
-+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-+
-+ # Now rename the file to the real destination.
-+ { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
-+ || {
-+ # The rename failed, perhaps because mv can't rename something else
-+ # to itself, or perhaps because mv is so ancient that it does not
-+ # support -f.
-+
-+ # Now remove or move aside any old file at destination location.
-+ # We try this two ways since rm can't unlink itself on some
-+ # systems and the destination file might be busy for other
-+ # reasons. In this case, the final cleanup might fail but the new
-+ # file should still install successfully.
-+ {
-+ if test -f "$dstdir/$dstfile"; then
-+ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-+ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
-+ || {
-+ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-+ (exit 1); exit 1
-+ }
-+ else
-+ :
-+ fi
-+ } &&
-+
-+ # Now rename the file to the real destination.
-+ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-+ }
-+ }
-+ fi || { (exit 1); exit 1; }
-+done
-+
-+# The final little trick to "correctly" pass the exit status to the exit trap.
-+{
-+ (exit 0); exit 0
-+}
-+
-+# Local variables:
-+# eval: (add-hook 'write-file-hooks 'time-stamp)
-+# time-stamp-start: "scriptversion="
-+# time-stamp-format: "%:y-%02m-%02d.%02H"
-+# time-stamp-end: "$"
-+# End:
+ dbus-threads.h \
+ dbus-types.h \
+ $(GLIB_INCLUDES) \
+@@ -448,7 +449,6 @@
+ dbus-sha.c \
+ dbus-sha.h \
+ dbus-signature.c \
+- dbus-signature.h \
+ dbus-timeout.c \
+ dbus-timeout.h \
+ dbus-threads-internal.h \
diff -Naur dbus-0.61.orig/ltmain.sh dbus-0.61/ltmain.sh
---- dbus-0.61.orig/ltmain.sh 1970-01-01 01:00:00.000000000 +0100
+--- dbus-0.61.orig/ltmain.sh 2006-02-27 22:56:46.000000000 +0100
+++ dbus-0.61/ltmain.sh 2006-01-09 16:21:15.000000000 +0100
-@@ -0,0 +1,6871 @@
-+# ltmain.sh - Provide generalized library-building support services.
-+# NOTE: Changing this file will not affect anything until you rerun configure.
-+#
-+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
-+# Free Software Foundation, Inc.
-+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-+#
-+# 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 2 of the License, or
-+# (at your option) 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, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+#
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+basename="s,^.*/,,g"
-+
-+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
-+# is ksh but when the shell is invoked as "sh" and the current value of
-+# the _XPG environment variable is not equal to 1 (one), the special
-+# positional parameter $0, within a function call, is the name of the
-+# function.
-+progpath="$0"
-+
-+# The name of this program:
-+progname=`echo "$progpath" | $SED $basename`
-+modename="$progname"
-+
-+# Global variables:
-+EXIT_SUCCESS=0
-+EXIT_FAILURE=1
-+
-+PROGRAM=ltmain.sh
-+PACKAGE=libtool
+@@ -43,7 +43,7 @@
+
+ PROGRAM=ltmain.sh
+ PACKAGE=libtool
+-VERSION=1.5.22
+VERSION="1.5.22 Debian 1.5.22-2"
-+TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
-+
-+# See if we are running on zsh, and set the options which allow our
-+# commands through without removal of \ escapes.
-+if test -n "${ZSH_VERSION+set}" ; then
-+ setopt NO_GLOB_SUBST
-+fi
-+
-+# Check that we have a working $echo.
-+if test "X$1" = X--no-reexec; then
-+ # Discard the --no-reexec flag, and continue.
-+ shift
-+elif test "X$1" = X--fallback-echo; then
-+ # Avoid inline document here, it may be left over
-+ :
-+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-+ # Yippee, $echo works!
-+ :
-+else
-+ # Restart under the correct shell, and then maybe $echo will work.
-+ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-+fi
-+
-+if test "X$1" = X--fallback-echo; then
-+ # used as fallback echo
-+ shift
-+ cat <<EOF
-+$*
-+EOF
-+ exit $EXIT_SUCCESS
-+fi
-+
-+default_mode=
-+help="Try \`$progname --help' for more information."
-+magic="%%%MAGIC variable%%%"
-+mkdir="mkdir"
-+mv="mv -f"
-+rm="rm -f"
-+
-+# Sed substitution that helps us do robust quoting. It backslashifies
-+# metacharacters that are still active within double-quoted strings.
-+Xsed="${SED}"' -e 1s/^X//'
-+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-+# test EBCDIC or ASCII
-+case `echo X|tr X '\101'` in
-+ A) # ASCII based system
-+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
-+ SP2NL='tr \040 \012'
-+ NL2SP='tr \015\012 \040\040'
-+ ;;
-+ *) # EBCDIC based system
-+ SP2NL='tr \100 \n'
-+ NL2SP='tr \r\n \100\100'
-+ ;;
-+esac
-+
-+# NLS nuisances.
-+# Only set LANG and LC_ALL to C if already set.
-+# These must not be set unconditionally because not all systems understand
-+# e.g. LANG=C (notably SCO).
-+# We save the old values to restore during execute mode.
-+if test "${LC_ALL+set}" = set; then
-+ save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
-+fi
-+if test "${LANG+set}" = set; then
-+ save_LANG="$LANG"; LANG=C; export LANG
-+fi
-+
-+# Make sure IFS has a sensible default
-+lt_nl='
-+'
-+IFS=" $lt_nl"
-+
-+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-+ $echo "$modename: not configured to build any kind of library" 1>&2
-+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
-+ exit $EXIT_FAILURE
-+fi
-+
-+# Global variables.
-+mode=$default_mode
-+nonopt=
-+prev=
-+prevopt=
-+run=
-+show="$echo"
-+show_help=
-+execute_dlfiles=
-+duplicate_deps=no
-+preserve_args=
-+lo2o="s/\\.lo\$/.${objext}/"
-+o2lo="s/\\.${objext}\$/.lo/"
-+
-+#####################################
-+# Shell function definitions:
-+# This seems to be the best place for them
-+
-+# func_mktempdir [string]
-+# Make a temporary directory that won't clash with other running
-+# libtool processes, and avoids race conditions if possible. If
-+# given, STRING is the basename for that directory.
-+func_mktempdir ()
-+{
-+ my_template="${TMPDIR-/tmp}/${1-$progname}"
-+
-+ if test "$run" = ":"; then
-+ # Return a directory name, but don't create it in dry-run mode
-+ my_tmpdir="${my_template}-$$"
-+ else
-+
-+ # If mktemp works, use that first and foremost
-+ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
-+
-+ if test ! -d "$my_tmpdir"; then
-+ # Failing that, at least try and use $RANDOM to avoid a race
-+ my_tmpdir="${my_template}-${RANDOM-0}$$"
-+
-+ save_mktempdir_umask=`umask`
-+ umask 0077
-+ $mkdir "$my_tmpdir"
-+ umask $save_mktempdir_umask
-+ fi
-+
-+ # If we're not in dry-run mode, bomb out on failure
-+ test -d "$my_tmpdir" || {
-+ $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
-+ exit $EXIT_FAILURE
-+ }
-+ fi
-+
-+ $echo "X$my_tmpdir" | $Xsed
-+}
-+
-+
-+# func_win32_libid arg
-+# return the library type of file 'arg'
-+#
-+# Need a lot of goo to handle *both* DLLs and import libs
-+# Has to be a shell function in order to 'eat' the argument
-+# that is supplied when $file_magic_command is called.
-+func_win32_libid ()
-+{
-+ win32_libid_type="unknown"
-+ win32_fileres=`file -L $1 2>/dev/null`
-+ case $win32_fileres in
-+ *ar\ archive\ import\ library*) # definitely import
-+ win32_libid_type="x86 archive import"
-+ ;;
-+ *ar\ archive*) # could be an import, or static
-+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
-+ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-+ win32_nmres=`eval $NM -f posix -A $1 | \
-+ $SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'`
-+ case $win32_nmres in
-+ import*) win32_libid_type="x86 archive import";;
-+ *) win32_libid_type="x86 archive static";;
-+ esac
-+ fi
-+ ;;
-+ *DLL*)
-+ win32_libid_type="x86 DLL"
-+ ;;
-+ *executable*) # but shell scripts are "executable" too...
-+ case $win32_fileres in
-+ *MS\ Windows\ PE\ Intel*)
-+ win32_libid_type="x86 DLL"
-+ ;;
-+ esac
-+ ;;
-+ esac
-+ $echo $win32_libid_type
-+}
-+
-+
-+# func_infer_tag arg
-+# Infer tagged configuration to use if any are available and
-+# if one wasn't chosen via the "--tag" command line option.
-+# Only attempt this if the compiler in the base compile
-+# command doesn't match the default compiler.
-+# arg is usually of the form 'gcc ...'
-+func_infer_tag ()
-+{
-+ if test -n "$available_tags" && test -z "$tagname"; then
-+ CC_quoted=
-+ for arg in $CC; do
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ CC_quoted="$CC_quoted $arg"
-+ done
-+ case $@ in
-+ # Blanks in the command may have been stripped by the calling shell,
-+ # but not from the CC environment variable when configure was run.
-+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
-+ # Blanks at the start of $base_compile will cause this to fail
-+ # if we don't check for them as well.
-+ *)
-+ for z in $available_tags; do
-+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
-+ # Evaluate the configuration.
-+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
-+ CC_quoted=
-+ for arg in $CC; do
-+ # Double-quote args containing other shell metacharacters.
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ CC_quoted="$CC_quoted $arg"
-+ done
-+ case "$@ " in
-+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
-+ # The compiler in the base compile command matches
-+ # the one in the tagged configuration.
-+ # Assume this is the tagged configuration we want.
-+ tagname=$z
-+ break
-+ ;;
-+ esac
-+ fi
-+ done
-+ # If $tagname still isn't set, then no tagged configuration
-+ # was found and let the user know that the "--tag" command
-+ # line option must be used.
-+ if test -z "$tagname"; then
-+ $echo "$modename: unable to infer tagged configuration"
-+ $echo "$modename: specify a tag with \`--tag'" 1>&2
-+ exit $EXIT_FAILURE
-+# else
-+# $echo "$modename: using $tagname tagged configuration"
-+ fi
-+ ;;
-+ esac
-+ fi
-+}
-+
-+
-+# func_extract_an_archive dir oldlib
-+func_extract_an_archive ()
-+{
-+ f_ex_an_ar_dir="$1"; shift
-+ f_ex_an_ar_oldlib="$1"
-+
-+ $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
-+ $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
-+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
-+ :
-+ else
-+ $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+}
-+
-+# func_extract_archives gentop oldlib ...
-+func_extract_archives ()
-+{
-+ my_gentop="$1"; shift
-+ my_oldlibs=${1+"$@"}
-+ my_oldobjs=""
-+ my_xlib=""
-+ my_xabs=""
-+ my_xdir=""
-+ my_status=""
-+
-+ $show "${rm}r $my_gentop"
-+ $run ${rm}r "$my_gentop"
-+ $show "$mkdir $my_gentop"
-+ $run $mkdir "$my_gentop"
-+ my_status=$?
-+ if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
-+ exit $my_status
-+ fi
-+
-+ for my_xlib in $my_oldlibs; do
-+ # Extract the objects.
-+ case $my_xlib in
-+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
-+ *) my_xabs=`pwd`"/$my_xlib" ;;
-+ esac
-+ my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
-+ my_xdir="$my_gentop/$my_xlib"
-+
-+ $show "${rm}r $my_xdir"
-+ $run ${rm}r "$my_xdir"
-+ $show "$mkdir $my_xdir"
-+ $run $mkdir "$my_xdir"
-+ exit_status=$?
-+ if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
-+ exit $exit_status
-+ fi
-+ case $host in
-+ *-darwin*)
-+ $show "Extracting $my_xabs"
-+ # Do not bother doing anything if just a dry run
-+ if test -z "$run"; then
-+ darwin_orig_dir=`pwd`
-+ cd $my_xdir || exit $?
-+ darwin_archive=$my_xabs
-+ darwin_curdir=`pwd`
-+ darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
-+ darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
-+ if test -n "$darwin_arches"; then
-+ darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
-+ darwin_arch=
-+ $show "$darwin_base_archive has multiple architectures $darwin_arches"
-+ for darwin_arch in $darwin_arches ; do
-+ mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-+ lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
-+ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
-+ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
-+ cd "$darwin_curdir"
-+ $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
-+ done # $darwin_arches
-+ ## Okay now we have a bunch of thin objects, gotta fatten them up :)
-+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
-+ darwin_file=
-+ darwin_files=
-+ for darwin_file in $darwin_filelist; do
-+ darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
-+ lipo -create -output "$darwin_file" $darwin_files
-+ done # $darwin_filelist
-+ ${rm}r unfat-$$
-+ cd "$darwin_orig_dir"
-+ else
-+ cd "$darwin_orig_dir"
-+ func_extract_an_archive "$my_xdir" "$my_xabs"
-+ fi # $darwin_arches
-+ fi # $run
-+ ;;
-+ *)
-+ func_extract_an_archive "$my_xdir" "$my_xabs"
-+ ;;
-+ esac
-+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
-+ done
-+ func_extract_archives_result="$my_oldobjs"
-+}
-+# End of Shell function definitions
-+#####################################
-+
-+# Darwin sucks
-+eval std_shrext=\"$shrext_cmds\"
-+
-+disable_libs=no
-+
-+# Parse our command line options once, thoroughly.
-+while test "$#" -gt 0
-+do
-+ arg="$1"
-+ shift
-+
-+ case $arg in
-+ -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
-+ *) optarg= ;;
-+ esac
-+
-+ # If the previous option needs an argument, assign it.
-+ if test -n "$prev"; then
-+ case $prev in
-+ execute_dlfiles)
-+ execute_dlfiles="$execute_dlfiles $arg"
-+ ;;
-+ tag)
-+ tagname="$arg"
-+ preserve_args="${preserve_args}=$arg"
-+
-+ # Check whether tagname contains only valid characters
-+ case $tagname in
-+ *[!-_A-Za-z0-9,/]*)
-+ $echo "$progname: invalid tag name: $tagname" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+
-+ case $tagname in
-+ CC)
-+ # Don't test for the "default" C tag, as we know, it's there, but
-+ # not specially marked.
-+ ;;
-+ *)
-+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
-+ taglist="$taglist $tagname"
-+ # Evaluate the configuration.
-+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
-+ else
-+ $echo "$progname: ignoring unknown tag $tagname" 1>&2
-+ fi
-+ ;;
-+ esac
-+ ;;
-+ *)
-+ eval "$prev=\$arg"
-+ ;;
-+ esac
-+
-+ prev=
-+ prevopt=
-+ continue
-+ fi
-+
-+ # Have we seen a non-optional argument yet?
-+ case $arg in
-+ --help)
-+ show_help=yes
-+ ;;
-+
-+ --version)
-+ $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-+ $echo
-+ $echo "Copyright (C) 2005 Free Software Foundation, Inc."
-+ $echo "This is free software; see the source for copying conditions. There is NO"
-+ $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-+ exit $?
-+ ;;
-+
-+ --config)
-+ ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
-+ # Now print the configurations for the tags.
-+ for tagname in $taglist; do
-+ ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
-+ done
-+ exit $?
-+ ;;
-+
-+ --debug)
-+ $echo "$progname: enabling shell trace mode"
-+ set -x
-+ preserve_args="$preserve_args $arg"
-+ ;;
-+
-+ --dry-run | -n)
-+ run=:
-+ ;;
-+
-+ --features)
-+ $echo "host: $host"
-+ if test "$build_libtool_libs" = yes; then
-+ $echo "enable shared libraries"
-+ else
-+ $echo "disable shared libraries"
-+ fi
-+ if test "$build_old_libs" = yes; then
-+ $echo "enable static libraries"
-+ else
-+ $echo "disable static libraries"
-+ fi
-+ exit $?
-+ ;;
-+
-+ --finish) mode="finish" ;;
-+
-+ --mode) prevopt="--mode" prev=mode ;;
-+ --mode=*) mode="$optarg" ;;
-+
-+ --preserve-dup-deps) duplicate_deps="yes" ;;
-+
-+ --quiet | --silent)
-+ show=:
-+ preserve_args="$preserve_args $arg"
-+ ;;
-+
-+ --tag)
-+ prevopt="--tag"
-+ prev=tag
-+ preserve_args="$preserve_args --tag"
-+ ;;
-+ --tag=*)
-+ set tag "$optarg" ${1+"$@"}
-+ shift
-+ prev=tag
-+ preserve_args="$preserve_args --tag"
-+ ;;
-+
-+ -dlopen)
-+ prevopt="-dlopen"
-+ prev=execute_dlfiles
-+ ;;
-+
-+ -*)
-+ $echo "$modename: unrecognized option \`$arg'" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+
-+ *)
-+ nonopt="$arg"
-+ break
-+ ;;
-+ esac
-+done
-+
-+if test -n "$prevopt"; then
-+ $echo "$modename: option \`$prevopt' requires an argument" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+fi
-+
-+case $disable_libs in
-+no)
-+ ;;
-+shared)
-+ build_libtool_libs=no
-+ build_old_libs=yes
-+ ;;
-+static)
-+ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
-+ ;;
-+esac
-+
-+# If this variable is set in any of the actions, the command in it
-+# will be execed at the end. This prevents here-documents from being
-+# left over by shells.
-+exec_cmd=
-+
-+if test -z "$show_help"; then
-+
-+ # Infer the operation mode.
-+ if test -z "$mode"; then
-+ $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
-+ $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
-+ case $nonopt in
-+ *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
-+ mode=link
-+ for arg
-+ do
-+ case $arg in
-+ -c)
-+ mode=compile
-+ break
-+ ;;
-+ esac
-+ done
-+ ;;
-+ *db | *dbx | *strace | *truss)
-+ mode=execute
-+ ;;
-+ *install*|cp|mv)
-+ mode=install
-+ ;;
-+ *rm)
-+ mode=uninstall
-+ ;;
-+ *)
-+ # If we have no mode, but dlfiles were specified, then do execute mode.
-+ test -n "$execute_dlfiles" && mode=execute
-+
-+ # Just use the default operation mode.
-+ if test -z "$mode"; then
-+ if test -n "$nonopt"; then
-+ $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
-+ else
-+ $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
-+ fi
-+ fi
-+ ;;
-+ esac
-+ fi
-+
-+ # Only execute mode is allowed to have -dlopen flags.
-+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
-+ $echo "$modename: unrecognized option \`-dlopen'" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Change the help message to a mode-specific one.
-+ generic_help="$help"
-+ help="Try \`$modename --help --mode=$mode' for more information."
-+
-+ # These modes are in order of execution frequency so that they run quickly.
-+ case $mode in
-+ # libtool compile mode
-+ compile)
-+ modename="$modename: compile"
-+ # Get the compilation command and the source file.
-+ base_compile=
-+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
-+ suppress_opt=yes
-+ suppress_output=
-+ arg_mode=normal
-+ libobj=
-+ later=
-+
-+ for arg
-+ do
-+ case $arg_mode in
-+ arg )
-+ # do not "continue". Instead, add this to base_compile
-+ lastarg="$arg"
-+ arg_mode=normal
-+ ;;
-+
-+ target )
-+ libobj="$arg"
-+ arg_mode=normal
-+ continue
-+ ;;
-+
-+ normal )
-+ # Accept any command-line options.
-+ case $arg in
-+ -o)
-+ if test -n "$libobj" ; then
-+ $echo "$modename: you cannot specify \`-o' more than once" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ arg_mode=target
-+ continue
-+ ;;
-+
-+ -static | -prefer-pic | -prefer-non-pic)
-+ later="$later $arg"
-+ continue
-+ ;;
-+
-+ -no-suppress)
-+ suppress_opt=no
-+ continue
-+ ;;
-+
-+ -Xcompiler)
-+ arg_mode=arg # the next one goes into the "base_compile" arg list
-+ continue # The current "srcfile" will either be retained or
-+ ;; # replaced later. I would guess that would be a bug.
-+
-+ -Wc,*)
-+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
-+ lastarg=
-+ save_ifs="$IFS"; IFS=','
-+ for arg in $args; do
-+ IFS="$save_ifs"
-+
-+ # Double-quote args containing other shell metacharacters.
-+ # Many Bourne shells cannot handle close brackets correctly
-+ # in scan sets, so we specify it separately.
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ lastarg="$lastarg $arg"
-+ done
-+ IFS="$save_ifs"
-+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-+
-+ # Add the arguments to base_compile.
-+ base_compile="$base_compile $lastarg"
-+ continue
-+ ;;
-+
-+ * )
-+ # Accept the current argument as the source file.
-+ # The previous "srcfile" becomes the current argument.
-+ #
-+ lastarg="$srcfile"
-+ srcfile="$arg"
-+ ;;
-+ esac # case $arg
-+ ;;
-+ esac # case $arg_mode
-+
-+ # Aesthetically quote the previous argument.
-+ lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-+
-+ case $lastarg in
-+ # Double-quote args containing other shell metacharacters.
-+ # Many Bourne shells cannot handle close brackets correctly
-+ # in scan sets, and some SunOS ksh mistreat backslash-escaping
-+ # in scan sets (worked around with variable expansion),
-+ # and furthermore cannot handle '|' '&' '(' ')' in scan sets
-+ # at all, so we specify them separately.
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ lastarg="\"$lastarg\""
-+ ;;
-+ esac
-+
-+ base_compile="$base_compile $lastarg"
-+ done # for arg
-+
-+ case $arg_mode in
-+ arg)
-+ $echo "$modename: you must specify an argument for -Xcompile"
-+ exit $EXIT_FAILURE
-+ ;;
-+ target)
-+ $echo "$modename: you must specify a target with \`-o'" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ *)
-+ # Get the name of the library object.
-+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-+ ;;
-+ esac
-+
-+ # Recognize several different file suffixes.
-+ # If the user specifies -o file.o, it is replaced with file.lo
-+ xform='[cCFSifmso]'
-+ case $libobj in
-+ *.ada) xform=ada ;;
-+ *.adb) xform=adb ;;
-+ *.ads) xform=ads ;;
-+ *.asm) xform=asm ;;
-+ *.c++) xform=c++ ;;
-+ *.cc) xform=cc ;;
-+ *.ii) xform=ii ;;
-+ *.class) xform=class ;;
-+ *.cpp) xform=cpp ;;
-+ *.cxx) xform=cxx ;;
-+ *.f90) xform=f90 ;;
-+ *.for) xform=for ;;
-+ *.java) xform=java ;;
-+ esac
-+
-+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-+
-+ case $libobj in
-+ *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-+ *)
-+ $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+
-+ func_infer_tag $base_compile
-+
-+ for arg in $later; do
-+ case $arg in
-+ -static)
-+ build_old_libs=yes
-+ continue
-+ ;;
-+
-+ -prefer-pic)
-+ pic_mode=yes
-+ continue
-+ ;;
-+
-+ -prefer-non-pic)
-+ pic_mode=no
-+ continue
-+ ;;
-+ esac
-+ done
-+
-+ qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
-+ case $qlibobj in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ qlibobj="\"$qlibobj\"" ;;
-+ esac
-+ test "X$libobj" != "X$qlibobj" \
-+ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \
-+ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
-+ objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-+ if test "X$xdir" = "X$obj"; then
-+ xdir=
-+ else
-+ xdir=$xdir/
-+ fi
-+ lobj=${xdir}$objdir/$objname
-+
-+ if test -z "$base_compile"; then
-+ $echo "$modename: you must specify a compilation command" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Delete any leftover library objects.
-+ if test "$build_old_libs" = yes; then
-+ removelist="$obj $lobj $libobj ${libobj}T"
-+ else
-+ removelist="$lobj $libobj ${libobj}T"
-+ fi
-+
-+ $run $rm $removelist
-+ trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-+
-+ # On Cygwin there's no "real" PIC flag so we must build both object types
-+ case $host_os in
-+ cygwin* | mingw* | pw32* | os2*)
-+ pic_mode=default
-+ ;;
-+ esac
-+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
-+ # non-PIC code in shared libraries is not supported
-+ pic_mode=default
-+ fi
-+
-+ # Calculate the filename of the output object if compiler does
-+ # not support -o with -c
-+ if test "$compiler_c_o" = no; then
-+ output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
-+ lockfile="$output_obj.lock"
-+ removelist="$removelist $output_obj $lockfile"
-+ trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-+ else
-+ output_obj=
-+ need_locks=no
-+ lockfile=
-+ fi
-+
-+ # Lock this critical section if it is needed
-+ # We use this script file to make the link, it avoids creating a new file
-+ if test "$need_locks" = yes; then
-+ until $run ln "$progpath" "$lockfile" 2>/dev/null; do
-+ $show "Waiting for $lockfile to be removed"
-+ sleep 2
-+ done
-+ elif test "$need_locks" = warn; then
-+ if test -f "$lockfile"; then
-+ $echo "\
-+*** ERROR, $lockfile exists and contains:
-+`cat $lockfile 2>/dev/null`
-+
-+This indicates that another process is trying to use the same
-+temporary object file, and libtool could not work around it because
-+your compiler does not support \`-c' and \`-o' together. If you
-+repeat this compilation, it may succeed, by chance, but you had better
-+avoid parallel builds (make -j) in this platform, or get a better
-+compiler."
-+
-+ $run $rm $removelist
-+ exit $EXIT_FAILURE
-+ fi
-+ $echo "$srcfile" > "$lockfile"
-+ fi
-+
-+ if test -n "$fix_srcfile_path"; then
-+ eval srcfile=\"$fix_srcfile_path\"
-+ fi
-+ qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
-+ case $qsrcfile in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ qsrcfile="\"$qsrcfile\"" ;;
-+ esac
-+
-+ $run $rm "$libobj" "${libobj}T"
-+
-+ # Create a libtool object file (analogous to a ".la" file),
-+ # but don't create it if we're doing a dry run.
-+ test -z "$run" && cat > ${libobj}T <<EOF
-+# $libobj - a libtool object file
-+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-+#
-+# Please DO NOT delete this file!
-+# It is necessary for linking the library.
-+
-+# Name of the PIC object.
-+EOF
-+
-+ # Only build a PIC object if we are building libtool libraries.
-+ if test "$build_libtool_libs" = yes; then
-+ # Without this assignment, base_compile gets emptied.
-+ fbsd_hideous_sh_bug=$base_compile
-+
-+ if test "$pic_mode" != no; then
-+ command="$base_compile $qsrcfile $pic_flag"
-+ else
-+ # Don't build PIC code
-+ command="$base_compile $qsrcfile"
-+ fi
-+
-+ if test ! -d "${xdir}$objdir"; then
-+ $show "$mkdir ${xdir}$objdir"
-+ $run $mkdir ${xdir}$objdir
-+ exit_status=$?
-+ if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
-+ exit $exit_status
-+ fi
-+ fi
-+
-+ if test -z "$output_obj"; then
-+ # Place PIC objects in $objdir
-+ command="$command -o $lobj"
-+ fi
-+
-+ $run $rm "$lobj" "$output_obj"
-+
-+ $show "$command"
-+ if $run eval "$command"; then :
-+ else
-+ test -n "$output_obj" && $run $rm $removelist
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ if test "$need_locks" = warn &&
-+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-+ $echo "\
-+*** ERROR, $lockfile contains:
-+`cat $lockfile 2>/dev/null`
-+
-+but it should contain:
-+$srcfile
-+
-+This indicates that another process is trying to use the same
-+temporary object file, and libtool could not work around it because
-+your compiler does not support \`-c' and \`-o' together. If you
-+repeat this compilation, it may succeed, by chance, but you had better
-+avoid parallel builds (make -j) in this platform, or get a better
-+compiler."
-+
-+ $run $rm $removelist
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Just move the object if needed, then go on to compile the next one
-+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
-+ $show "$mv $output_obj $lobj"
-+ if $run $mv $output_obj $lobj; then :
-+ else
-+ error=$?
-+ $run $rm $removelist
-+ exit $error
-+ fi
-+ fi
-+
-+ # Append the name of the PIC object to the libtool object file.
-+ test -z "$run" && cat >> ${libobj}T <<EOF
-+pic_object='$objdir/$objname'
-+
-+EOF
-+
-+ # Allow error messages only from the first compilation.
-+ if test "$suppress_opt" = yes; then
-+ suppress_output=' >/dev/null 2>&1'
-+ fi
-+ else
-+ # No PIC object so indicate it doesn't exist in the libtool
-+ # object file.
-+ test -z "$run" && cat >> ${libobj}T <<EOF
-+pic_object=none
-+
-+EOF
-+ fi
-+
-+ # Only build a position-dependent object if we build old libraries.
-+ if test "$build_old_libs" = yes; then
-+ if test "$pic_mode" != yes; then
-+ # Don't build PIC code
-+ command="$base_compile $qsrcfile"
-+ else
-+ command="$base_compile $qsrcfile $pic_flag"
-+ fi
-+ if test "$compiler_c_o" = yes; then
-+ command="$command -o $obj"
-+ fi
-+
-+ # Suppress compiler output if we already did a PIC compilation.
-+ command="$command$suppress_output"
-+ $run $rm "$obj" "$output_obj"
-+ $show "$command"
-+ if $run eval "$command"; then :
-+ else
-+ $run $rm $removelist
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ if test "$need_locks" = warn &&
-+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
-+ $echo "\
-+*** ERROR, $lockfile contains:
-+`cat $lockfile 2>/dev/null`
-+
-+but it should contain:
-+$srcfile
-+
-+This indicates that another process is trying to use the same
-+temporary object file, and libtool could not work around it because
-+your compiler does not support \`-c' and \`-o' together. If you
-+repeat this compilation, it may succeed, by chance, but you had better
-+avoid parallel builds (make -j) in this platform, or get a better
-+compiler."
-+
-+ $run $rm $removelist
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Just move the object if needed
-+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
-+ $show "$mv $output_obj $obj"
-+ if $run $mv $output_obj $obj; then :
-+ else
-+ error=$?
-+ $run $rm $removelist
-+ exit $error
-+ fi
-+ fi
-+
-+ # Append the name of the non-PIC object the libtool object file.
-+ # Only append if the libtool object file exists.
-+ test -z "$run" && cat >> ${libobj}T <<EOF
-+# Name of the non-PIC object.
-+non_pic_object='$objname'
-+
-+EOF
-+ else
-+ # Append the name of the non-PIC object the libtool object file.
-+ # Only append if the libtool object file exists.
-+ test -z "$run" && cat >> ${libobj}T <<EOF
-+# Name of the non-PIC object.
-+non_pic_object=none
-+
-+EOF
-+ fi
-+
-+ $run $mv "${libobj}T" "${libobj}"
-+
-+ # Unlock the critical section if it was locked
-+ if test "$need_locks" != no; then
-+ $run $rm "$lockfile"
-+ fi
-+
-+ exit $EXIT_SUCCESS
-+ ;;
-+
-+ # libtool link mode
-+ link | relink)
-+ modename="$modename: link"
-+ case $host in
-+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-+ # It is impossible to link a dll without this setting, and
-+ # we shouldn't force the makefile maintainer to figure out
-+ # which system we are compiling for in order to pass an extra
-+ # flag for every libtool invocation.
-+ # allow_undefined=no
-+
-+ # FIXME: Unfortunately, there are problems with the above when trying
-+ # to make a dll which has undefined symbols, in which case not
-+ # even a static library is built. For now, we need to specify
-+ # -no-undefined on the libtool link line when we can be certain
-+ # that all symbols are satisfied, otherwise we get a static library.
-+ allow_undefined=yes
-+ ;;
-+ *)
-+ allow_undefined=yes
-+ ;;
-+ esac
-+ libtool_args="$nonopt"
-+ base_compile="$nonopt $@"
-+ compile_command="$nonopt"
-+ finalize_command="$nonopt"
-+
-+ compile_rpath=
-+ finalize_rpath=
-+ compile_shlibpath=
-+ finalize_shlibpath=
-+ convenience=
-+ old_convenience=
-+ deplibs=
-+ old_deplibs=
-+ compiler_flags=
-+ linker_flags=
-+ dllsearchpath=
-+ lib_search_path=`pwd`
-+ inst_prefix_dir=
-+
-+ avoid_version=no
-+ dlfiles=
-+ dlprefiles=
-+ dlself=no
-+ export_dynamic=no
-+ export_symbols=
-+ export_symbols_regex=
-+ generated=
-+ libobjs=
-+ ltlibs=
-+ module=no
-+ no_install=no
-+ objs=
-+ non_pic_objects=
-+ notinst_path= # paths that contain not-installed libtool libraries
-+ precious_files_regex=
-+ prefer_static_libs=no
-+ preload=no
-+ prev=
-+ prevarg=
-+ release=
-+ rpath=
-+ xrpath=
-+ perm_rpath=
-+ temp_rpath=
-+ thread_safe=no
-+ vinfo=
-+ vinfo_number=no
-+
-+ func_infer_tag $base_compile
-+
-+ # We need to know -static, to get the right output filenames.
-+ for arg
-+ do
-+ case $arg in
-+ -all-static | -static)
-+ if test "X$arg" = "X-all-static"; then
-+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
-+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
-+ fi
-+ if test -n "$link_static_flag"; then
-+ dlopen_self=$dlopen_self_static
-+ fi
-+ prefer_static_libs=yes
-+ else
-+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
-+ dlopen_self=$dlopen_self_static
-+ fi
-+ prefer_static_libs=built
-+ fi
-+ build_libtool_libs=no
-+ build_old_libs=yes
-+ break
-+ ;;
-+ esac
-+ done
-+
-+ # See if our shared archives depend on static archives.
-+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
-+
-+ # Go through the arguments, transforming them on the way.
-+ while test "$#" -gt 0; do
-+ arg="$1"
-+ shift
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
-+ ;;
-+ *) qarg=$arg ;;
-+ esac
-+ libtool_args="$libtool_args $qarg"
-+
-+ # If the previous option needs an argument, assign it.
-+ if test -n "$prev"; then
-+ case $prev in
-+ output)
-+ compile_command="$compile_command @OUTPUT@"
-+ finalize_command="$finalize_command @OUTPUT@"
-+ ;;
-+ esac
-+
-+ case $prev in
-+ dlfiles|dlprefiles)
-+ if test "$preload" = no; then
-+ # Add the symbol object into the linking commands.
-+ compile_command="$compile_command @SYMFILE@"
-+ finalize_command="$finalize_command @SYMFILE@"
-+ preload=yes
-+ fi
-+ case $arg in
-+ *.la | *.lo) ;; # We handle these cases below.
-+ force)
-+ if test "$dlself" = no; then
-+ dlself=needless
-+ export_dynamic=yes
-+ fi
-+ prev=
-+ continue
-+ ;;
-+ self)
-+ if test "$prev" = dlprefiles; then
-+ dlself=yes
-+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
-+ dlself=yes
-+ else
-+ dlself=needless
-+ export_dynamic=yes
-+ fi
-+ prev=
-+ continue
-+ ;;
-+ *)
-+ if test "$prev" = dlfiles; then
-+ dlfiles="$dlfiles $arg"
-+ else
-+ dlprefiles="$dlprefiles $arg"
-+ fi
-+ prev=
-+ continue
-+ ;;
-+ esac
-+ ;;
-+ expsyms)
-+ export_symbols="$arg"
-+ if test ! -f "$arg"; then
-+ $echo "$modename: symbol file \`$arg' does not exist"
-+ exit $EXIT_FAILURE
-+ fi
-+ prev=
-+ continue
-+ ;;
-+ expsyms_regex)
-+ export_symbols_regex="$arg"
-+ prev=
-+ continue
-+ ;;
-+ inst_prefix)
-+ inst_prefix_dir="$arg"
-+ prev=
-+ continue
-+ ;;
-+ precious_regex)
-+ precious_files_regex="$arg"
-+ prev=
-+ continue
-+ ;;
-+ release)
-+ release="-$arg"
-+ prev=
-+ continue
-+ ;;
-+ objectlist)
-+ if test -f "$arg"; then
-+ save_arg=$arg
-+ moreargs=
-+ for fil in `cat $save_arg`
-+ do
-+# moreargs="$moreargs $fil"
-+ arg=$fil
-+ # A libtool-controlled object.
-+
-+ # Check to see that this really is a libtool object.
-+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-+ pic_object=
-+ non_pic_object=
-+
-+ # Read the .lo file
-+ # If there is no directory component, then add one.
-+ case $arg in
-+ */* | *\\*) . $arg ;;
-+ *) . ./$arg ;;
-+ esac
-+
-+ if test -z "$pic_object" || \
-+ test -z "$non_pic_object" ||
-+ test "$pic_object" = none && \
-+ test "$non_pic_object" = none; then
-+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Extract subdirectory from the argument.
-+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-+ if test "X$xdir" = "X$arg"; then
-+ xdir=
-+ else
-+ xdir="$xdir/"
-+ fi
-+
-+ if test "$pic_object" != none; then
-+ # Prepend the subdirectory the object is found in.
-+ pic_object="$xdir$pic_object"
-+
-+ if test "$prev" = dlfiles; then
-+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-+ dlfiles="$dlfiles $pic_object"
-+ prev=
-+ continue
-+ else
-+ # If libtool objects are unsupported, then we need to preload.
-+ prev=dlprefiles
-+ fi
-+ fi
-+
-+ # CHECK ME: I think I busted this. -Ossama
-+ if test "$prev" = dlprefiles; then
-+ # Preload the old-style object.
-+ dlprefiles="$dlprefiles $pic_object"
-+ prev=
-+ fi
-+
-+ # A PIC object.
-+ libobjs="$libobjs $pic_object"
-+ arg="$pic_object"
-+ fi
-+
-+ # Non-PIC object.
-+ if test "$non_pic_object" != none; then
-+ # Prepend the subdirectory the object is found in.
-+ non_pic_object="$xdir$non_pic_object"
-+
-+ # A standard non-PIC object
-+ non_pic_objects="$non_pic_objects $non_pic_object"
-+ if test -z "$pic_object" || test "$pic_object" = none ; then
-+ arg="$non_pic_object"
-+ fi
-+ else
-+ # If the PIC object exists, use it instead.
-+ # $xdir was prepended to $pic_object above.
-+ non_pic_object="$pic_object"
-+ non_pic_objects="$non_pic_objects $non_pic_object"
-+ fi
-+ else
-+ # Only an error if not doing a dry-run.
-+ if test -z "$run"; then
-+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-+ exit $EXIT_FAILURE
-+ else
-+ # Dry-run case.
-+
-+ # Extract subdirectory from the argument.
-+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-+ if test "X$xdir" = "X$arg"; then
-+ xdir=
-+ else
-+ xdir="$xdir/"
-+ fi
-+
-+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-+ libobjs="$libobjs $pic_object"
-+ non_pic_objects="$non_pic_objects $non_pic_object"
-+ fi
-+ fi
-+ done
-+ else
-+ $echo "$modename: link input file \`$save_arg' does not exist"
-+ exit $EXIT_FAILURE
-+ fi
-+ arg=$save_arg
-+ prev=
-+ continue
-+ ;;
-+ rpath | xrpath)
-+ # We need an absolute path.
-+ case $arg in
-+ [\\/]* | [A-Za-z]:[\\/]*) ;;
-+ *)
-+ $echo "$modename: only absolute run-paths are allowed" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+ if test "$prev" = rpath; then
-+ case "$rpath " in
-+ *" $arg "*) ;;
-+ *) rpath="$rpath $arg" ;;
-+ esac
-+ else
-+ case "$xrpath " in
-+ *" $arg "*) ;;
-+ *) xrpath="$xrpath $arg" ;;
-+ esac
-+ fi
-+ prev=
-+ continue
-+ ;;
-+ xcompiler)
-+ compiler_flags="$compiler_flags $qarg"
-+ prev=
-+ compile_command="$compile_command $qarg"
-+ finalize_command="$finalize_command $qarg"
-+ continue
-+ ;;
-+ xlinker)
-+ linker_flags="$linker_flags $qarg"
-+ compiler_flags="$compiler_flags $wl$qarg"
-+ prev=
-+ compile_command="$compile_command $wl$qarg"
-+ finalize_command="$finalize_command $wl$qarg"
-+ continue
-+ ;;
-+ xcclinker)
-+ linker_flags="$linker_flags $qarg"
-+ compiler_flags="$compiler_flags $qarg"
-+ prev=
-+ compile_command="$compile_command $qarg"
-+ finalize_command="$finalize_command $qarg"
-+ continue
-+ ;;
-+ shrext)
-+ shrext_cmds="$arg"
-+ prev=
-+ continue
-+ ;;
-+ darwin_framework|darwin_framework_skip)
-+ test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg"
-+ compile_command="$compile_command $arg"
-+ finalize_command="$finalize_command $arg"
-+ prev=
-+ continue
-+ ;;
-+ *)
-+ eval "$prev=\"\$arg\""
-+ prev=
-+ continue
-+ ;;
-+ esac
-+ fi # test -n "$prev"
-+
-+ prevarg="$arg"
-+
-+ case $arg in
-+ -all-static)
-+ if test -n "$link_static_flag"; then
-+ compile_command="$compile_command $link_static_flag"
-+ finalize_command="$finalize_command $link_static_flag"
-+ fi
-+ continue
-+ ;;
-+
-+ -allow-undefined)
-+ # FIXME: remove this flag sometime in the future.
-+ $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
-+ continue
-+ ;;
-+
-+ -avoid-version)
-+ avoid_version=yes
-+ continue
-+ ;;
-+
-+ -dlopen)
-+ prev=dlfiles
-+ continue
-+ ;;
-+
-+ -dlpreopen)
-+ prev=dlprefiles
-+ continue
-+ ;;
-+
-+ -export-dynamic)
-+ export_dynamic=yes
-+ continue
-+ ;;
-+
-+ -export-symbols | -export-symbols-regex)
-+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-+ $echo "$modename: more than one -exported-symbols argument is not allowed"
-+ exit $EXIT_FAILURE
-+ fi
-+ if test "X$arg" = "X-export-symbols"; then
-+ prev=expsyms
-+ else
-+ prev=expsyms_regex
-+ fi
-+ continue
-+ ;;
-+
-+ -framework|-arch|-isysroot)
-+ case " $CC " in
-+ *" ${arg} ${1} "* | *" ${arg} ${1} "*)
-+ prev=darwin_framework_skip ;;
-+ *) compiler_flags="$compiler_flags $arg"
-+ prev=darwin_framework ;;
-+ esac
-+ compile_command="$compile_command $arg"
-+ finalize_command="$finalize_command $arg"
-+ continue
-+ ;;
-+
-+ -inst-prefix-dir)
-+ prev=inst_prefix
-+ continue
-+ ;;
-+
-+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
-+ # so, if we see these flags be careful not to treat them like -L
-+ -L[A-Z][A-Z]*:*)
-+ case $with_gcc/$host in
-+ no/*-*-irix* | /*-*-irix*)
-+ compile_command="$compile_command $arg"
-+ finalize_command="$finalize_command $arg"
-+ ;;
-+ esac
-+ continue
-+ ;;
-+
-+ -L*)
-+ dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
-+ # We need an absolute path.
-+ case $dir in
-+ [\\/]* | [A-Za-z]:[\\/]*) ;;
-+ *)
-+ absdir=`cd "$dir" && pwd`
-+ if test -z "$absdir"; then
-+ $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
-+ absdir="$dir"
-+ notinst_path="$notinst_path $dir"
-+ fi
-+ dir="$absdir"
-+ ;;
-+ esac
-+ case "$deplibs " in
-+ *" -L$dir "*) ;;
-+ *)
-+ deplibs="$deplibs -L$dir"
-+ lib_search_path="$lib_search_path $dir"
-+ ;;
-+ esac
-+ case $host in
-+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-+ testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
-+ case :$dllsearchpath: in
-+ *":$dir:"*) ;;
-+ *) dllsearchpath="$dllsearchpath:$dir";;
-+ esac
-+ case :$dllsearchpath: in
-+ *":$testbindir:"*) ;;
-+ *) dllsearchpath="$dllsearchpath:$testbindir";;
-+ esac
-+ ;;
-+ esac
-+ continue
-+ ;;
-+
-+ -l*)
-+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
-+ case $host in
-+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
-+ # These systems don't actually have a C or math library (as such)
-+ continue
-+ ;;
-+ *-*-os2*)
-+ # These systems don't actually have a C library (as such)
-+ test "X$arg" = "X-lc" && continue
-+ ;;
-+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-+ # Do not include libc due to us having libc/libc_r.
-+ test "X$arg" = "X-lc" && continue
-+ ;;
-+ *-*-rhapsody* | *-*-darwin1.[012])
-+ # Rhapsody C and math libraries are in the System framework
-+ deplibs="$deplibs -framework System"
-+ continue
-+ ;;
-+ *-*-sco3.2v5* | *-*-sco5v6*)
-+ # Causes problems with __ctype
-+ test "X$arg" = "X-lc" && continue
-+ ;;
-+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
-+ # Compiler inserts libc in the correct place for threads to work
-+ test "X$arg" = "X-lc" && continue
-+ ;;
-+ esac
-+ elif test "X$arg" = "X-lc_r"; then
-+ case $host in
-+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-+ # Do not include libc_r directly, use -pthread flag.
-+ continue
-+ ;;
-+ esac
-+ fi
-+ deplibs="$deplibs $arg"
-+ continue
-+ ;;
-+
-+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
-+ # classes, name mangling, and exception handling.
-+ -model)
-+ compile_command="$compile_command $arg"
-+ compiler_flags="$compiler_flags $arg"
-+ finalize_command="$finalize_command $arg"
-+ prev=xcompiler
-+ continue
-+ ;;
-+
-+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
-+ compiler_flags="$compiler_flags $arg"
-+ compile_command="$compile_command $arg"
-+ finalize_command="$finalize_command $arg"
-+ continue
-+ ;;
-+
-+ -module)
-+ module=yes
-+ continue
-+ ;;
-+
-+ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-+ # -r[0-9][0-9]* specifies the processor on the SGI compiler
-+ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-+ # +DA*, +DD* enable 64-bit mode on the HP compiler
-+ # -q* pass through compiler args for the IBM compiler
-+ # -m* pass through architecture-specific compiler args for GCC
-+ # -m*, -t[45]*, -txscale* pass through architecture-specific
-+ # compiler args for GCC
-+ # -pg pass through profiling flag for GCC
-+ # @file GCC response files
-+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
-+ -t[45]*|-txscale*|@*)
-+
-+ # Unknown arguments in both finalize_command and compile_command need
-+ # to be aesthetically quoted because they are evaled later.
-+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ compile_command="$compile_command $arg"
-+ finalize_command="$finalize_command $arg"
-+ compiler_flags="$compiler_flags $arg"
-+ continue
-+ ;;
-+
-+ -shrext)
-+ prev=shrext
-+ continue
-+ ;;
-+
-+ -no-fast-install)
-+ fast_install=no
-+ continue
-+ ;;
-+
-+ -no-install)
-+ case $host in
-+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-+ # The PATH hackery in wrapper scripts is required on Windows
-+ # in order for the loader to find any dlls it needs.
-+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
-+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
-+ fast_install=no
-+ ;;
-+ *) no_install=yes ;;
-+ esac
-+ continue
-+ ;;
-+
-+ -no-undefined)
-+ allow_undefined=no
-+ continue
-+ ;;
-+
-+ -objectlist)
-+ prev=objectlist
-+ continue
-+ ;;
-+
-+ -o) prev=output ;;
-+
-+ -precious-files-regex)
-+ prev=precious_regex
-+ continue
-+ ;;
-+
-+ -release)
-+ prev=release
-+ continue
-+ ;;
-+
-+ -rpath)
-+ prev=rpath
-+ continue
-+ ;;
-+
-+ -R)
-+ prev=xrpath
-+ continue
-+ ;;
-+
-+ -R*)
-+ dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
-+ # We need an absolute path.
-+ case $dir in
-+ [\\/]* | [A-Za-z]:[\\/]*) ;;
-+ *)
-+ $echo "$modename: only absolute run-paths are allowed" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+ case "$xrpath " in
-+ *" $dir "*) ;;
-+ *) xrpath="$xrpath $dir" ;;
-+ esac
-+ continue
-+ ;;
-+
-+ -static)
-+ # The effects of -static are defined in a previous loop.
-+ # We used to do the same as -all-static on platforms that
-+ # didn't have a PIC flag, but the assumption that the effects
-+ # would be equivalent was wrong. It would break on at least
-+ # Digital Unix and AIX.
-+ continue
-+ ;;
-+
-+ -thread-safe)
-+ thread_safe=yes
-+ continue
-+ ;;
-+
-+ -version-info)
-+ prev=vinfo
-+ continue
-+ ;;
-+ -version-number)
-+ prev=vinfo
-+ vinfo_number=yes
-+ continue
-+ ;;
-+
-+ -Wc,*)
-+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
-+ arg=
-+ save_ifs="$IFS"; IFS=','
-+ for flag in $args; do
-+ IFS="$save_ifs"
-+ case $flag in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ flag="\"$flag\""
-+ ;;
-+ esac
-+ arg="$arg $wl$flag"
-+ compiler_flags="$compiler_flags $flag"
-+ done
-+ IFS="$save_ifs"
-+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-+ ;;
-+
-+ -Wl,*)
-+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
-+ arg=
-+ save_ifs="$IFS"; IFS=','
-+ for flag in $args; do
-+ IFS="$save_ifs"
-+ case $flag in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ flag="\"$flag\""
-+ ;;
-+ esac
-+ arg="$arg $wl$flag"
-+ compiler_flags="$compiler_flags $wl$flag"
-+ linker_flags="$linker_flags $flag"
-+ done
-+ IFS="$save_ifs"
-+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-+ ;;
-+
-+ -Xcompiler)
-+ prev=xcompiler
-+ continue
-+ ;;
-+
-+ -Xlinker)
-+ prev=xlinker
-+ continue
-+ ;;
-+
-+ -XCClinker)
-+ prev=xcclinker
-+ continue
-+ ;;
-+
-+ # Some other compiler flag.
-+ -* | +*)
-+ # Unknown arguments in both finalize_command and compile_command need
-+ # to be aesthetically quoted because they are evaled later.
-+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ ;;
-+
-+ *.$objext)
-+ # A standard object.
-+ objs="$objs $arg"
-+ ;;
-+
-+ *.lo)
-+ # A libtool-controlled object.
-+
-+ # Check to see that this really is a libtool object.
-+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-+ pic_object=
-+ non_pic_object=
-+
-+ # Read the .lo file
-+ # If there is no directory component, then add one.
-+ case $arg in
-+ */* | *\\*) . $arg ;;
-+ *) . ./$arg ;;
-+ esac
-+
-+ if test -z "$pic_object" || \
-+ test -z "$non_pic_object" ||
-+ test "$pic_object" = none && \
-+ test "$non_pic_object" = none; then
-+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Extract subdirectory from the argument.
-+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-+ if test "X$xdir" = "X$arg"; then
-+ xdir=
-+ else
-+ xdir="$xdir/"
-+ fi
-+
-+ if test "$pic_object" != none; then
-+ # Prepend the subdirectory the object is found in.
-+ pic_object="$xdir$pic_object"
-+
-+ if test "$prev" = dlfiles; then
-+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-+ dlfiles="$dlfiles $pic_object"
-+ prev=
-+ continue
-+ else
-+ # If libtool objects are unsupported, then we need to preload.
-+ prev=dlprefiles
-+ fi
-+ fi
-+
-+ # CHECK ME: I think I busted this. -Ossama
-+ if test "$prev" = dlprefiles; then
-+ # Preload the old-style object.
-+ dlprefiles="$dlprefiles $pic_object"
-+ prev=
-+ fi
-+
-+ # A PIC object.
-+ libobjs="$libobjs $pic_object"
-+ arg="$pic_object"
-+ fi
-+
-+ # Non-PIC object.
-+ if test "$non_pic_object" != none; then
-+ # Prepend the subdirectory the object is found in.
-+ non_pic_object="$xdir$non_pic_object"
-+
-+ # A standard non-PIC object
-+ non_pic_objects="$non_pic_objects $non_pic_object"
-+ if test -z "$pic_object" || test "$pic_object" = none ; then
-+ arg="$non_pic_object"
-+ fi
-+ else
-+ # If the PIC object exists, use it instead.
-+ # $xdir was prepended to $pic_object above.
-+ non_pic_object="$pic_object"
-+ non_pic_objects="$non_pic_objects $non_pic_object"
-+ fi
-+ else
-+ # Only an error if not doing a dry-run.
-+ if test -z "$run"; then
-+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-+ exit $EXIT_FAILURE
-+ else
-+ # Dry-run case.
-+
-+ # Extract subdirectory from the argument.
-+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-+ if test "X$xdir" = "X$arg"; then
-+ xdir=
-+ else
-+ xdir="$xdir/"
-+ fi
-+
-+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-+ libobjs="$libobjs $pic_object"
-+ non_pic_objects="$non_pic_objects $non_pic_object"
-+ fi
-+ fi
-+ ;;
-+
-+ *.$libext)
-+ # An archive.
-+ deplibs="$deplibs $arg"
-+ old_deplibs="$old_deplibs $arg"
-+ continue
-+ ;;
-+
-+ *.la)
-+ # A libtool-controlled library.
-+
-+ if test "$prev" = dlfiles; then
-+ # This library was specified with -dlopen.
-+ dlfiles="$dlfiles $arg"
-+ prev=
-+ elif test "$prev" = dlprefiles; then
-+ # The library was specified with -dlpreopen.
-+ dlprefiles="$dlprefiles $arg"
-+ prev=
-+ else
-+ deplibs="$deplibs $arg"
-+ fi
-+ continue
-+ ;;
-+
-+ # Some other compiler argument.
-+ *)
-+ # Unknown arguments in both finalize_command and compile_command need
-+ # to be aesthetically quoted because they are evaled later.
-+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ ;;
-+ esac # arg
-+
-+ # Now actually substitute the argument into the commands.
-+ if test -n "$arg"; then
-+ compile_command="$compile_command $arg"
-+ finalize_command="$finalize_command $arg"
-+ fi
-+ done # argument parsing loop
-+
-+ if test -n "$prev"; then
-+ $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-+ eval arg=\"$export_dynamic_flag_spec\"
-+ compile_command="$compile_command $arg"
-+ finalize_command="$finalize_command $arg"
-+ fi
-+
-+ oldlibs=
-+ # calculate the name of the file, without its directory
-+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-+ libobjs_save="$libobjs"
-+
-+ if test -n "$shlibpath_var"; then
-+ # get the directories listed in $shlibpath_var
-+ eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-+ else
-+ shlib_search_path=
-+ fi
-+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
-+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-+
-+ output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-+ if test "X$output_objdir" = "X$output"; then
-+ output_objdir="$objdir"
-+ else
-+ output_objdir="$output_objdir/$objdir"
-+ fi
-+ # Create the object directory.
-+ if test ! -d "$output_objdir"; then
-+ $show "$mkdir $output_objdir"
-+ $run $mkdir $output_objdir
-+ exit_status=$?
-+ if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
-+ exit $exit_status
-+ fi
-+ fi
-+
-+ # Determine the type of output
-+ case $output in
-+ "")
-+ $echo "$modename: you must specify an output file" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ *.$libext) linkmode=oldlib ;;
-+ *.lo | *.$objext) linkmode=obj ;;
-+ *.la) linkmode=lib ;;
-+ *) linkmode=prog ;; # Anything else should be a program.
-+ esac
-+
-+ case $host in
-+ *cygwin* | *mingw* | *pw32*)
-+ # don't eliminate duplications in $postdeps and $predeps
-+ duplicate_compiler_generated_deps=yes
-+ ;;
-+ *)
-+ duplicate_compiler_generated_deps=$duplicate_deps
-+ ;;
-+ esac
-+ specialdeplibs=
-+
-+ libs=
-+ # Find all interdependent deplibs by searching for libraries
-+ # that are linked more than once (e.g. -la -lb -la)
-+ for deplib in $deplibs; do
-+ if test "X$duplicate_deps" = "Xyes" ; then
-+ case "$libs " in
-+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+ esac
-+ fi
-+ libs="$libs $deplib"
-+ done
-+
-+ if test "$linkmode" = lib; then
-+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
-+
-+ # Compute libraries that are listed more than once in $predeps
-+ # $postdeps and mark them as special (i.e., whose duplicates are
-+ # not to be eliminated).
-+ pre_post_deps=
-+ if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
-+ for pre_post_dep in $predeps $postdeps; do
-+ case "$pre_post_deps " in
-+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
-+ esac
-+ pre_post_deps="$pre_post_deps $pre_post_dep"
-+ done
-+ fi
-+ pre_post_deps=
-+ fi
-+
-+ deplibs=
-+ newdependency_libs=
-+ newlib_search_path=
-+ need_relink=no # whether we're linking any uninstalled libtool libraries
-+ notinst_deplibs= # not-installed libtool libraries
-+ case $linkmode in
-+ lib)
-+ passes="conv link"
-+ for file in $dlfiles $dlprefiles; do
-+ case $file in
-+ *.la) ;;
-+ *)
-+ $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+ done
-+ ;;
-+ prog)
-+ compile_deplibs=
-+ finalize_deplibs=
-+ alldeplibs=no
-+ newdlfiles=
-+ newdlprefiles=
-+ passes="conv scan dlopen dlpreopen link"
-+ ;;
-+ *) passes="conv"
-+ ;;
-+ esac
-+ for pass in $passes; do
-+ if test "$linkmode,$pass" = "lib,link" ||
-+ test "$linkmode,$pass" = "prog,scan"; then
-+ libs="$deplibs"
-+ deplibs=
-+ fi
-+ if test "$linkmode" = prog; then
-+ case $pass in
-+ dlopen) libs="$dlfiles" ;;
-+ dlpreopen) libs="$dlprefiles" ;;
+ TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
+
+ # See if we are running on zsh, and set the options which allow our
+@@ -2082,7 +2082,10 @@
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+- link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ link)
+ libs="$deplibs %DEPLIBS%"
+ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+ ;;
-+ esac
-+ fi
-+ if test "$pass" = dlopen; then
-+ # Collect dlpreopened libraries
-+ save_deplibs="$deplibs"
-+ deplibs=
-+ fi
-+ for deplib in $libs; do
-+ lib=
-+ found=no
-+ case $deplib in
-+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
-+ if test "$linkmode,$pass" = "prog,link"; then
-+ compile_deplibs="$deplib $compile_deplibs"
-+ finalize_deplibs="$deplib $finalize_deplibs"
-+ else
-+ compiler_flags="$compiler_flags $deplib"
-+ fi
-+ continue
-+ ;;
-+ -l*)
-+ if test "$linkmode" != lib && test "$linkmode" != prog; then
-+ $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
-+ continue
-+ fi
-+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
-+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
-+ for search_ext in .la $std_shrext .so .a; do
-+ # Search the libtool library
-+ lib="$searchdir/lib${name}${search_ext}"
-+ if test -f "$lib"; then
-+ if test "$search_ext" = ".la"; then
-+ found=yes
-+ else
-+ found=no
-+ fi
-+ break 2
-+ fi
-+ done
-+ done
-+ if test "$found" != yes; then
-+ # deplib doesn't seem to be a libtool library
-+ if test "$linkmode,$pass" = "prog,link"; then
-+ compile_deplibs="$deplib $compile_deplibs"
-+ finalize_deplibs="$deplib $finalize_deplibs"
-+ else
-+ deplibs="$deplib $deplibs"
-+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-+ fi
-+ continue
-+ else # deplib is a libtool library
-+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
-+ # We need to do some special things here, and not later.
-+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+ case " $predeps $postdeps " in
-+ *" $deplib "*)
-+ if (${SED} -e '2q' $lib |
-+ grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-+ library_names=
-+ old_library=
-+ case $lib in
-+ */* | *\\*) . $lib ;;
-+ *) . ./$lib ;;
-+ esac
-+ for l in $old_library $library_names; do
-+ ll="$l"
-+ done
-+ if test "X$ll" = "X$old_library" ; then # only static version available
-+ found=no
-+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-+ test "X$ladir" = "X$lib" && ladir="."
-+ lib=$ladir/$old_library
-+ if test "$linkmode,$pass" = "prog,link"; then
-+ compile_deplibs="$deplib $compile_deplibs"
-+ finalize_deplibs="$deplib $finalize_deplibs"
-+ else
-+ deplibs="$deplib $deplibs"
-+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-+ fi
-+ continue
-+ fi
-+ fi
-+ ;;
-+ *) ;;
-+ esac
-+ fi
-+ fi
-+ ;; # -l
-+ -L*)
-+ case $linkmode in
-+ lib)
-+ deplibs="$deplib $deplibs"
-+ test "$pass" = conv && continue
-+ newdependency_libs="$deplib $newdependency_libs"
-+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-+ ;;
-+ prog)
-+ if test "$pass" = conv; then
-+ deplibs="$deplib $deplibs"
-+ continue
-+ fi
-+ if test "$pass" = scan; then
-+ deplibs="$deplib $deplibs"
-+ else
-+ compile_deplibs="$deplib $compile_deplibs"
-+ finalize_deplibs="$deplib $finalize_deplibs"
-+ fi
-+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-+ ;;
+ esac
+ fi
+ if test "$pass" = dlopen; then
+@@ -3201,6 +3204,11 @@
+ age="$number_minor"
+ revision="$number_minor"
+ ;;
+ *)
-+ $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
-+ ;;
-+ esac # linkmode
-+ continue
-+ ;; # -L
-+ -R*)
-+ if test "$pass" = link; then
-+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
-+ # Make sure the xrpath contains only unique directories.
-+ case "$xrpath " in
-+ *" $dir "*) ;;
-+ *) xrpath="$xrpath $dir" ;;
-+ esac
-+ fi
-+ deplibs="$deplib $deplibs"
-+ continue
-+ ;;
-+ *.la) lib="$deplib" ;;
-+ *.$libext)
-+ if test "$pass" = conv; then
-+ deplibs="$deplib $deplibs"
-+ continue
-+ fi
-+ case $linkmode in
-+ lib)
-+ valid_a_lib=no
-+ case $deplibs_check_method in
-+ match_pattern*)
-+ set dummy $deplibs_check_method
-+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-+ if eval $echo \"$deplib\" 2>/dev/null \
-+ | $SED 10q \
-+ | $EGREP "$match_pattern_regex" > /dev/null; then
-+ valid_a_lib=yes
-+ fi
-+ ;;
-+ pass_all)
-+ valid_a_lib=yes
-+ ;;
-+ esac
-+ if test "$valid_a_lib" != yes; then
-+ $echo
-+ $echo "*** Warning: Trying to link with static lib archive $deplib."
-+ $echo "*** I have the capability to make that library automatically link in when"
-+ $echo "*** you link to this library. But I can only do this if you have a"
-+ $echo "*** shared version of the library, which you do not appear to have"
-+ $echo "*** because the file extensions .$libext of this argument makes me believe"
-+ $echo "*** that it is just a static archive that I should not used here."
-+ else
-+ $echo
-+ $echo "*** Warning: Linking the shared library $output against the"
-+ $echo "*** static library $deplib is not portable!"
-+ deplibs="$deplib $deplibs"
-+ fi
-+ continue
-+ ;;
-+ prog)
-+ if test "$pass" != link; then
-+ deplibs="$deplib $deplibs"
-+ else
-+ compile_deplibs="$deplib $compile_deplibs"
-+ finalize_deplibs="$deplib $finalize_deplibs"
-+ fi
-+ continue
-+ ;;
-+ esac # linkmode
-+ ;; # *.$libext
-+ *.lo | *.$objext)
-+ if test "$pass" = conv; then
-+ deplibs="$deplib $deplibs"
-+ elif test "$linkmode" = prog; then
-+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-+ # If there is no dlopen support or we're linking statically,
-+ # we need to preload.
-+ newdlprefiles="$newdlprefiles $deplib"
-+ compile_deplibs="$deplib $compile_deplibs"
-+ finalize_deplibs="$deplib $finalize_deplibs"
-+ else
-+ newdlfiles="$newdlfiles $deplib"
-+ fi
-+ fi
-+ continue
-+ ;;
-+ %DEPLIBS%)
-+ alldeplibs=yes
-+ continue
-+ ;;
-+ esac # case $deplib
-+ if test "$found" = yes || test -f "$lib"; then :
-+ else
-+ $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Check to see that this really is a libtool archive.
-+ if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-+ else
-+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-+ test "X$ladir" = "X$lib" && ladir="."
-+
-+ dlname=
-+ dlopen=
-+ dlpreopen=
-+ libdir=
-+ library_names=
-+ old_library=
-+ # If the library was installed with an old release of libtool,
-+ # it will not redefine variables installed, or shouldnotlink
-+ installed=yes
-+ shouldnotlink=no
-+ avoidtemprpath=
-+
-+
-+ # Read the .la file
-+ case $lib in
-+ */* | *\\*) . $lib ;;
-+ *) . ./$lib ;;
-+ esac
-+
-+ if test "$linkmode,$pass" = "lib,link" ||
-+ test "$linkmode,$pass" = "prog,scan" ||
-+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
-+ fi
-+
-+ if test "$pass" = conv; then
-+ # Only check for convenience libraries
-+ deplibs="$lib $deplibs"
-+ if test -z "$libdir"; then
-+ if test -z "$old_library"; then
-+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ # It is a libtool convenience library, so add in its objects.
-+ convenience="$convenience $ladir/$objdir/$old_library"
-+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
-+ tmp_libs=
-+ for deplib in $dependency_libs; do
-+ deplibs="$deplib $deplibs"
-+ if test "X$duplicate_deps" = "Xyes" ; then
-+ case "$tmp_libs " in
-+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+ esac
-+ fi
-+ tmp_libs="$tmp_libs $deplib"
-+ done
-+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
-+ $echo "$modename: \`$lib' is not a convenience library" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ continue
-+ fi # $pass = conv
-+
-+
-+ # Get the name of the library we link against.
-+ linklib=
-+ for l in $old_library $library_names; do
-+ linklib="$l"
-+ done
-+ if test -z "$linklib"; then
-+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # This library was specified with -dlopen.
-+ if test "$pass" = dlopen; then
-+ if test -z "$libdir"; then
-+ $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ if test -z "$dlname" ||
-+ test "$dlopen_support" != yes ||
-+ test "$build_libtool_libs" = no; then
-+ # If there is no dlname, no dlopen support or we're linking
-+ # statically, we need to preload. We also need to preload any
-+ # dependent libraries so libltdl's deplib preloader doesn't
-+ # bomb out in the load deplibs phase.
-+ dlprefiles="$dlprefiles $lib $dependency_libs"
-+ else
-+ newdlfiles="$newdlfiles $lib"
-+ fi
-+ continue
-+ fi # $pass = dlopen
-+
-+ # We need an absolute path.
-+ case $ladir in
-+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
-+ *)
-+ abs_ladir=`cd "$ladir" && pwd`
-+ if test -z "$abs_ladir"; then
-+ $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
-+ $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-+ abs_ladir="$ladir"
-+ fi
-+ ;;
-+ esac
-+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-+
-+ # Find the relevant object directory and library name.
-+ if test "X$installed" = Xyes; then
-+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-+ $echo "$modename: warning: library \`$lib' was moved." 1>&2
-+ dir="$ladir"
-+ absdir="$abs_ladir"
-+ libdir="$abs_ladir"
-+ else
-+ dir="$libdir"
-+ absdir="$libdir"
-+ fi
-+ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
-+ else
-+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-+ dir="$ladir"
-+ absdir="$abs_ladir"
-+ # Remove this search path later
-+ notinst_path="$notinst_path $abs_ladir"
-+ else
-+ dir="$ladir/$objdir"
-+ absdir="$abs_ladir/$objdir"
-+ # Remove this search path later
-+ notinst_path="$notinst_path $abs_ladir"
-+ fi
-+ fi # $installed = yes
-+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-+
-+ # This library was specified with -dlpreopen.
-+ if test "$pass" = dlpreopen; then
-+ if test -z "$libdir"; then
-+ $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ # Prefer using a static library (so that no silly _DYNAMIC symbols
-+ # are required to link).
-+ if test -n "$old_library"; then
-+ newdlprefiles="$newdlprefiles $dir/$old_library"
-+ # Otherwise, use the dlname, so that lt_dlopen finds it.
-+ elif test -n "$dlname"; then
-+ newdlprefiles="$newdlprefiles $dir/$dlname"
-+ else
-+ newdlprefiles="$newdlprefiles $dir/$linklib"
-+ fi
-+ fi # $pass = dlpreopen
-+
-+ if test -z "$libdir"; then
-+ # Link the convenience library
-+ if test "$linkmode" = lib; then
-+ deplibs="$dir/$old_library $deplibs"
-+ elif test "$linkmode,$pass" = "prog,link"; then
-+ compile_deplibs="$dir/$old_library $compile_deplibs"
-+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
-+ else
-+ deplibs="$lib $deplibs" # used for prog,scan pass
-+ fi
-+ continue
-+ fi
-+
-+
-+ if test "$linkmode" = prog && test "$pass" != link; then
-+ newlib_search_path="$newlib_search_path $ladir"
-+ deplibs="$lib $deplibs"
-+
-+ linkalldeplibs=no
-+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
-+ test "$build_libtool_libs" = no; then
-+ linkalldeplibs=yes
-+ fi
-+
-+ tmp_libs=
-+ for deplib in $dependency_libs; do
-+ case $deplib in
-+ -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
-+ esac
-+ # Need to link against all dependency_libs?
-+ if test "$linkalldeplibs" = yes; then
-+ deplibs="$deplib $deplibs"
-+ else
-+ # Need to hardcode shared library paths
-+ # or/and link against static libraries
-+ newdependency_libs="$deplib $newdependency_libs"
-+ fi
-+ if test "X$duplicate_deps" = "Xyes" ; then
-+ case "$tmp_libs " in
-+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+ esac
-+ fi
-+ tmp_libs="$tmp_libs $deplib"
-+ done # for deplib
-+ continue
-+ fi # $linkmode = prog...
-+
-+ if test "$linkmode,$pass" = "prog,link"; then
-+ if test -n "$library_names" &&
-+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-+ # We need to hardcode the library path
-+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
-+ # Make sure the rpath contains only unique directories.
-+ case "$temp_rpath " in
-+ *" $dir "*) ;;
-+ *" $absdir "*) ;;
-+ *) temp_rpath="$temp_rpath $absdir" ;;
-+ esac
-+ fi
-+
-+ # Hardcode the library path.
-+ # Skip directories that are in the system default run-time
-+ # search path.
-+ case " $sys_lib_dlsearch_path " in
-+ *" $absdir "*) ;;
-+ *)
-+ case "$compile_rpath " in
-+ *" $absdir "*) ;;
-+ *) compile_rpath="$compile_rpath $absdir"
-+ esac
-+ ;;
-+ esac
-+ case " $sys_lib_dlsearch_path " in
-+ *" $libdir "*) ;;
-+ *)
-+ case "$finalize_rpath " in
-+ *" $libdir "*) ;;
-+ *) finalize_rpath="$finalize_rpath $libdir"
-+ esac
-+ ;;
-+ esac
-+ fi # $linkmode,$pass = prog,link...
-+
-+ if test "$alldeplibs" = yes &&
-+ { test "$deplibs_check_method" = pass_all ||
-+ { test "$build_libtool_libs" = yes &&
-+ test -n "$library_names"; }; }; then
-+ # We only need to search for static libraries
-+ continue
-+ fi
-+ fi
-+
-+ link_static=no # Whether the deplib will be linked statically
-+ use_static_libs=$prefer_static_libs
-+ if test "$use_static_libs" = built && test "$installed" = yes ; then
-+ use_static_libs=no
-+ fi
-+ if test -n "$library_names" &&
-+ { test "$use_static_libs" = no || test -z "$old_library"; }; then
-+ if test "$installed" = no; then
-+ notinst_deplibs="$notinst_deplibs $lib"
-+ need_relink=yes
-+ fi
-+ # This is a shared library
-+
-+ # Warn about portability, can't link against -module's on
-+ # some systems (darwin)
-+ if test "$shouldnotlink" = yes && test "$pass" = link ; then
-+ $echo
-+ if test "$linkmode" = prog; then
-+ $echo "*** Warning: Linking the executable $output against the loadable module"
-+ else
-+ $echo "*** Warning: Linking the shared library $output against the loadable module"
-+ fi
-+ $echo "*** $linklib is not portable!"
-+ fi
-+ if test "$linkmode" = lib &&
-+ test "$hardcode_into_libs" = yes; then
-+ # Hardcode the library path.
-+ # Skip directories that are in the system default run-time
-+ # search path.
-+ case " $sys_lib_dlsearch_path " in
-+ *" $absdir "*) ;;
-+ *)
-+ case "$compile_rpath " in
-+ *" $absdir "*) ;;
-+ *) compile_rpath="$compile_rpath $absdir"
-+ esac
-+ ;;
-+ esac
-+ case " $sys_lib_dlsearch_path " in
-+ *" $libdir "*) ;;
-+ *)
-+ case "$finalize_rpath " in
-+ *" $libdir "*) ;;
-+ *) finalize_rpath="$finalize_rpath $libdir"
-+ esac
-+ ;;
-+ esac
-+ fi
-+
-+ if test -n "$old_archive_from_expsyms_cmds"; then
-+ # figure out the soname
-+ set dummy $library_names
-+ realname="$2"
-+ shift; shift
-+ libname=`eval \\$echo \"$libname_spec\"`
-+ # use dlname if we got it. it's perfectly good, no?
-+ if test -n "$dlname"; then
-+ soname="$dlname"
-+ elif test -n "$soname_spec"; then
-+ # bleh windows
-+ case $host in
-+ *cygwin* | mingw*)
-+ major=`expr $current - $age`
-+ versuffix="-$major"
-+ ;;
-+ esac
-+ eval soname=\"$soname_spec\"
-+ else
-+ soname="$realname"
-+ fi
-+
-+ # Make a new name for the extract_expsyms_cmds to use
-+ soroot="$soname"
-+ soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
-+ newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
-+
-+ # If the library has no export list, then create one now
-+ if test -f "$output_objdir/$soname-def"; then :
-+ else
-+ $show "extracting exported symbol list from \`$soname'"
-+ save_ifs="$IFS"; IFS='~'
-+ cmds=$extract_expsyms_cmds
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd" || exit $?
-+ done
-+ IFS="$save_ifs"
-+ fi
-+
-+ # Create $newlib
-+ if test -f "$output_objdir/$newlib"; then :; else
-+ $show "generating import library for \`$soname'"
-+ save_ifs="$IFS"; IFS='~'
-+ cmds=$old_archive_from_expsyms_cmds
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd" || exit $?
-+ done
-+ IFS="$save_ifs"
-+ fi
-+ # make sure the library variables are pointing to the new library
-+ dir=$output_objdir
-+ linklib=$newlib
-+ fi # test -n "$old_archive_from_expsyms_cmds"
-+
-+ if test "$linkmode" = prog || test "$mode" != relink; then
-+ add_shlibpath=
-+ add_dir=
-+ add=
-+ lib_linked=yes
-+ case $hardcode_action in
-+ immediate | unsupported)
-+ if test "$hardcode_direct" = no; then
-+ add="$dir/$linklib"
-+ case $host in
-+ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
-+ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
-+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
-+ *-*-unixware7*) add_dir="-L$dir" ;;
-+ *-*-darwin* )
-+ # if the lib is a module then we can not link against
-+ # it, someone is ignoring the new warnings I added
-+ if /usr/bin/file -L $add 2> /dev/null |
-+ $EGREP ": [^:]* bundle" >/dev/null ; then
-+ $echo "** Warning, lib $linklib is a module, not a shared library"
-+ if test -z "$old_library" ; then
-+ $echo
-+ $echo "** And there doesn't seem to be a static archive available"
-+ $echo "** The link will probably fail, sorry"
-+ else
-+ add="$dir/$old_library"
-+ fi
-+ fi
-+ esac
-+ elif test "$hardcode_minus_L" = no; then
-+ case $host in
-+ *-*-sunos*) add_shlibpath="$dir" ;;
-+ esac
-+ add_dir="-L$dir"
-+ add="-l$name"
-+ elif test "$hardcode_shlibpath_var" = no; then
-+ add_shlibpath="$dir"
-+ add="-l$name"
-+ else
-+ lib_linked=no
-+ fi
-+ ;;
-+ relink)
-+ if test "$hardcode_direct" = yes; then
-+ add="$dir/$linklib"
-+ elif test "$hardcode_minus_L" = yes; then
-+ add_dir="-L$dir"
-+ # Try looking first in the location we're being installed to.
-+ if test -n "$inst_prefix_dir"; then
-+ case $libdir in
-+ [\\/]*)
-+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
-+ ;;
-+ esac
-+ fi
-+ add="-l$name"
-+ elif test "$hardcode_shlibpath_var" = yes; then
-+ add_shlibpath="$dir"
-+ add="-l$name"
-+ else
-+ lib_linked=no
-+ fi
-+ ;;
-+ *) lib_linked=no ;;
-+ esac
-+
-+ if test "$lib_linked" != yes; then
-+ $echo "$modename: configuration error: unsupported hardcode properties"
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ if test -n "$add_shlibpath"; then
-+ case :$compile_shlibpath: in
-+ *":$add_shlibpath:"*) ;;
-+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
-+ esac
-+ fi
-+ if test "$linkmode" = prog; then
-+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
-+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
-+ else
-+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
-+ test -n "$add" && deplibs="$add $deplibs"
-+ if test "$hardcode_direct" != yes && \
-+ test "$hardcode_minus_L" != yes && \
-+ test "$hardcode_shlibpath_var" = yes; then
-+ case :$finalize_shlibpath: in
-+ *":$libdir:"*) ;;
-+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-+ esac
-+ fi
-+ fi
-+ fi
-+
-+ if test "$linkmode" = prog || test "$mode" = relink; then
-+ add_shlibpath=
-+ add_dir=
-+ add=
-+ # Finalize command for both is simple: just hardcode it.
-+ if test "$hardcode_direct" = yes; then
-+ add="$libdir/$linklib"
-+ elif test "$hardcode_minus_L" = yes; then
-+ add_dir="-L$libdir"
-+ add="-l$name"
-+ elif test "$hardcode_shlibpath_var" = yes; then
-+ case :$finalize_shlibpath: in
-+ *":$libdir:"*) ;;
-+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-+ esac
-+ add="-l$name"
-+ elif test "$hardcode_automatic" = yes; then
-+ if test -n "$inst_prefix_dir" &&
-+ test -f "$inst_prefix_dir$libdir/$linklib" ; then
-+ add="$inst_prefix_dir$libdir/$linklib"
-+ else
-+ add="$libdir/$linklib"
-+ fi
-+ else
-+ # We cannot seem to hardcode it, guess we'll fake it.
-+ add_dir="-L$libdir"
-+ # Try looking first in the location we're being installed to.
-+ if test -n "$inst_prefix_dir"; then
-+ case $libdir in
-+ [\\/]*)
-+ add_dir="$add_dir -L$inst_prefix_dir$libdir"
-+ ;;
-+ esac
-+ fi
-+ add="-l$name"
-+ fi
-+
-+ if test "$linkmode" = prog; then
-+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
-+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
-+ else
-+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
-+ test -n "$add" && deplibs="$add $deplibs"
-+ fi
-+ fi
-+ elif test "$linkmode" = prog; then
-+ # Here we assume that one of hardcode_direct or hardcode_minus_L
-+ # is not unsupported. This is valid on all known static and
-+ # shared platforms.
-+ if test "$hardcode_direct" != unsupported; then
-+ test -n "$old_library" && linklib="$old_library"
-+ compile_deplibs="$dir/$linklib $compile_deplibs"
-+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
-+ else
-+ compile_deplibs="-l$name -L$dir $compile_deplibs"
-+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
-+ fi
-+ elif test "$build_libtool_libs" = yes; then
-+ # Not a shared library
-+ if test "$deplibs_check_method" != pass_all; then
-+ # We're trying link a shared library against a static one
-+ # but the system doesn't support it.
-+
-+ # Just print a warning and add the library to dependency_libs so
-+ # that the program can be linked against the static library.
-+ $echo
-+ $echo "*** Warning: This system can not link to static lib archive $lib."
-+ $echo "*** I have the capability to make that library automatically link in when"
-+ $echo "*** you link to this library. But I can only do this if you have a"
-+ $echo "*** shared version of the library, which you do not appear to have."
-+ if test "$module" = yes; then
-+ $echo "*** But as you try to build a module library, libtool will still create "
-+ $echo "*** a static module, that should work as long as the dlopening application"
-+ $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
-+ if test -z "$global_symbol_pipe"; then
-+ $echo
-+ $echo "*** However, this would only work if libtool was able to extract symbol"
-+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-+ $echo "*** not find such a program. So, this module is probably useless."
-+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
-+ fi
-+ if test "$build_old_libs" = no; then
-+ build_libtool_libs=module
-+ build_old_libs=yes
-+ else
-+ build_libtool_libs=no
-+ fi
-+ fi
-+ else
-+ deplibs="$dir/$old_library $deplibs"
-+ link_static=yes
-+ fi
-+ fi # link shared/static library?
-+
-+ if test "$linkmode" = lib; then
-+ if test -n "$dependency_libs" &&
-+ { test "$hardcode_into_libs" != yes ||
-+ test "$build_old_libs" = yes ||
-+ test "$link_static" = yes; }; then
-+ # Extract -R from dependency_libs
-+ temp_deplibs=
-+ for libdir in $dependency_libs; do
-+ case $libdir in
-+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
-+ case " $xrpath " in
-+ *" $temp_xrpath "*) ;;
-+ *) xrpath="$xrpath $temp_xrpath";;
-+ esac;;
-+ *) temp_deplibs="$temp_deplibs $libdir";;
-+ esac
-+ done
-+ dependency_libs="$temp_deplibs"
-+ fi
-+
-+ newlib_search_path="$newlib_search_path $absdir"
-+ # Link against this library
-+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
-+ # ... and its dependency_libs
-+ tmp_libs=
-+ for deplib in $dependency_libs; do
-+ newdependency_libs="$deplib $newdependency_libs"
-+ if test "X$duplicate_deps" = "Xyes" ; then
-+ case "$tmp_libs " in
-+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-+ esac
-+ fi
-+ tmp_libs="$tmp_libs $deplib"
-+ done
-+
-+ if test "$link_all_deplibs" != no; then
-+ # Add the search paths of all dependency libraries
-+ for deplib in $dependency_libs; do
-+ case $deplib in
-+ -L*) path="$deplib" ;;
-+ *.la)
-+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
-+ test "X$dir" = "X$deplib" && dir="."
-+ # We need an absolute path.
-+ case $dir in
-+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-+ *)
-+ absdir=`cd "$dir" && pwd`
-+ if test -z "$absdir"; then
-+ $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-+ absdir="$dir"
-+ fi
-+ ;;
-+ esac
-+ if grep "^installed=no" $deplib > /dev/null; then
-+ path="$absdir/$objdir"
-+ else
-+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-+ if test -z "$libdir"; then
-+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ if test "$absdir" != "$libdir"; then
-+ $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
-+ fi
-+ path="$absdir"
-+ fi
-+ depdepl=
-+ case $host in
-+ *-*-darwin*)
-+ # we do not want to link against static libs,
-+ # but need to link against shared
-+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-+ if test -n "$deplibrary_names" ; then
-+ for tmp in $deplibrary_names ; do
-+ depdepl=$tmp
-+ done
-+ if test -f "$path/$depdepl" ; then
-+ depdepl="$path/$depdepl"
-+ fi
-+ # do not add paths which are already there
-+ case " $newlib_search_path " in
-+ *" $path "*) ;;
-+ *) newlib_search_path="$newlib_search_path $path";;
-+ esac
-+ fi
-+ path=""
-+ ;;
-+ *)
-+ path="-L$path"
-+ ;;
-+ esac
-+ ;;
-+ -l*)
-+ case $host in
-+ *-*-darwin*)
-+ # Again, we only want to link against shared libraries
-+ eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
-+ for tmp in $newlib_search_path ; do
-+ if test -f "$tmp/lib$tmp_libs.dylib" ; then
-+ eval depdepl="$tmp/lib$tmp_libs.dylib"
-+ break
-+ fi
-+ done
-+ path=""
-+ ;;
-+ *) continue ;;
-+ esac
-+ ;;
-+ *) continue ;;
-+ esac
-+ case " $deplibs " in
-+ *" $path "*) ;;
-+ *) deplibs="$path $deplibs" ;;
-+ esac
-+ case " $deplibs " in
-+ *" $depdepl "*) ;;
-+ *) deplibs="$depdepl $deplibs" ;;
-+ esac
-+ done
-+ fi # link_all_deplibs != no
-+ fi # linkmode = lib
-+ done # for deplib in $libs
-+ dependency_libs="$newdependency_libs"
-+ if test "$pass" = dlpreopen; then
-+ # Link the dlpreopened libraries before other libraries
-+ for deplib in $save_deplibs; do
-+ deplibs="$deplib $deplibs"
-+ done
-+ fi
-+ if test "$pass" != dlopen; then
-+ if test "$pass" != conv; then
-+ # Make sure lib_search_path contains only unique directories.
-+ lib_search_path=
-+ for dir in $newlib_search_path; do
-+ case "$lib_search_path " in
-+ *" $dir "*) ;;
-+ *) lib_search_path="$lib_search_path $dir" ;;
-+ esac
-+ done
-+ newlib_search_path=
-+ fi
-+
-+ if test "$linkmode,$pass" != "prog,link"; then
-+ vars="deplibs"
-+ else
-+ vars="compile_deplibs finalize_deplibs"
-+ fi
-+ for var in $vars dependency_libs; do
-+ # Add libraries to $var in reverse order
-+ eval tmp_libs=\"\$$var\"
-+ new_libs=
-+ for deplib in $tmp_libs; do
-+ # FIXME: Pedantically, this is the right thing to do, so
-+ # that some nasty dependency loop isn't accidentally
-+ # broken:
-+ #new_libs="$deplib $new_libs"
-+ # Pragmatically, this seems to cause very few problems in
-+ # practice:
-+ case $deplib in
-+ -L*) new_libs="$deplib $new_libs" ;;
-+ -R*) ;;
-+ *)
-+ # And here is the reason: when a library appears more
-+ # than once as an explicit dependence of a library, or
-+ # is implicitly linked in more than once by the
-+ # compiler, it is considered special, and multiple
-+ # occurrences thereof are not removed. Compare this
-+ # with having the same library being listed as a
-+ # dependency of multiple other libraries: in this case,
-+ # we know (pedantically, we assume) the library does not
-+ # need to be listed more than once, so we keep only the
-+ # last copy. This is not always right, but it is rare
-+ # enough that we require users that really mean to play
-+ # such unportable linking tricks to link the library
-+ # using -Wl,-lname, so that libtool does not consider it
-+ # for duplicate removal.
-+ case " $specialdeplibs " in
-+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
-+ *)
-+ case " $new_libs " in
-+ *" $deplib "*) ;;
-+ *) new_libs="$deplib $new_libs" ;;
-+ esac
-+ ;;
-+ esac
-+ ;;
-+ esac
-+ done
-+ tmp_libs=
-+ for deplib in $new_libs; do
-+ case $deplib in
-+ -L*)
-+ case " $tmp_libs " in
-+ *" $deplib "*) ;;
-+ *) tmp_libs="$tmp_libs $deplib" ;;
-+ esac
-+ ;;
-+ *) tmp_libs="$tmp_libs $deplib" ;;
-+ esac
-+ done
-+ eval $var=\"$tmp_libs\"
-+ done # for var
-+ fi
-+ # Last step: remove runtime libs from dependency_libs
-+ # (they stay in deplibs)
-+ tmp_libs=
-+ for i in $dependency_libs ; do
-+ case " $predeps $postdeps $compiler_lib_search_path " in
-+ *" $i "*)
-+ i=""
-+ ;;
-+ esac
-+ if test -n "$i" ; then
-+ tmp_libs="$tmp_libs $i"
-+ fi
-+ done
-+ dependency_libs=$tmp_libs
-+ done # for pass
-+ if test "$linkmode" = prog; then
-+ dlfiles="$newdlfiles"
-+ dlprefiles="$newdlprefiles"
-+ fi
-+
-+ case $linkmode in
-+ oldlib)
-+ if test -n "$deplibs"; then
-+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
-+ fi
-+
-+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-+ $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-+ fi
-+
-+ if test -n "$rpath"; then
-+ $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
-+ fi
-+
-+ if test -n "$xrpath"; then
-+ $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
-+ fi
-+
-+ if test -n "$vinfo"; then
-+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
-+ fi
-+
-+ if test -n "$release"; then
-+ $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
-+ fi
-+
-+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-+ $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
-+ fi
-+
-+ # Now set the variables for building old libraries.
-+ build_libtool_libs=no
-+ oldlibs="$output"
-+ objs="$objs$old_deplibs"
-+ ;;
-+
-+ lib)
-+ # Make sure we only generate libraries of the form `libNAME.la'.
-+ case $outputname in
-+ lib*)
-+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-+ eval shared_ext=\"$shrext_cmds\"
-+ eval libname=\"$libname_spec\"
-+ ;;
-+ *)
-+ if test "$module" = no; then
-+ $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ if test "$need_lib_prefix" != no; then
-+ # Add the "lib" prefix for modules if required
-+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-+ eval shared_ext=\"$shrext_cmds\"
-+ eval libname=\"$libname_spec\"
-+ else
-+ libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-+ fi
-+ ;;
-+ esac
-+
-+ if test -n "$objs"; then
-+ if test "$deplibs_check_method" != pass_all; then
-+ $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
-+ exit $EXIT_FAILURE
-+ else
-+ $echo
-+ $echo "*** Warning: Linking the shared library $output against the non-libtool"
-+ $echo "*** objects $objs is not portable!"
-+ libobjs="$libobjs $objs"
-+ fi
-+ fi
-+
-+ if test "$dlself" != no; then
-+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
-+ fi
-+
-+ set dummy $rpath
-+ if test "$#" -gt 2; then
-+ $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
-+ fi
-+ install_libdir="$2"
-+
-+ oldlibs=
-+ if test -z "$rpath"; then
-+ if test "$build_libtool_libs" = yes; then
-+ # Building a libtool convenience library.
-+ # Some compilers have problems with a `.al' extension so
-+ # convenience libraries should have the same extension an
-+ # archive normally would.
-+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
-+ build_libtool_libs=convenience
-+ build_old_libs=yes
-+ fi
-+
-+ if test -n "$vinfo"; then
-+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
-+ fi
-+
-+ if test -n "$release"; then
-+ $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
-+ fi
-+ else
-+
-+ # Parse the version information argument.
-+ save_ifs="$IFS"; IFS=':'
-+ set dummy $vinfo 0 0 0
-+ IFS="$save_ifs"
-+
-+ if test -n "$8"; then
-+ $echo "$modename: too many parameters to \`-version-info'" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # convert absolute version numbers to libtool ages
-+ # this retains compatibility with .la files and attempts
-+ # to make the code below a bit more comprehensible
-+
-+ case $vinfo_number in
-+ yes)
-+ number_major="$2"
-+ number_minor="$3"
-+ number_revision="$4"
-+ #
-+ # There are really only two kinds -- those that
-+ # use the current revision as the major version
-+ # and those that subtract age and use age as
-+ # a minor version. But, then there is irix
-+ # which has an extra 1 added just for fun
-+ #
-+ case $version_type in
-+ darwin|linux|osf|windows)
-+ current=`expr $number_major + $number_minor`
-+ age="$number_minor"
-+ revision="$number_revision"
-+ ;;
-+ freebsd-aout|freebsd-elf|sunos)
-+ current="$number_major"
-+ revision="$number_minor"
-+ age="0"
-+ ;;
-+ irix|nonstopux)
-+ current=`expr $number_major + $number_minor - 1`
-+ age="$number_minor"
-+ revision="$number_minor"
-+ ;;
-+ *)
+ $echo "$modename: unknown library version type \`$version_type'" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit $EXIT_FAILURE
+ ;;
-+ esac
-+ ;;
-+ no)
-+ current="$2"
-+ revision="$3"
-+ age="$4"
-+ ;;
-+ esac
-+
-+ # Check that each of the things are valid numbers.
-+ case $current in
-+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-+ *)
-+ $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
-+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+
-+ case $revision in
-+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-+ *)
-+ $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
-+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+
-+ case $age in
-+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
-+ *)
-+ $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
-+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+
-+ if test "$age" -gt "$current"; then
-+ $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
-+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Calculate the version variables.
-+ major=
-+ versuffix=
-+ verstring=
-+ case $version_type in
-+ none) ;;
-+
-+ darwin)
-+ # Like Linux, but with the current version available in
-+ # verstring for coding it into the library header
-+ major=.`expr $current - $age`
-+ versuffix="$major.$age.$revision"
-+ # Darwin ld doesn't like 0 for these options...
-+ minor_current=`expr $current + 1`
-+ verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
-+ ;;
-+
-+ freebsd-aout)
-+ major=".$current"
-+ versuffix=".$current.$revision";
-+ ;;
-+
-+ freebsd-elf)
-+ major=".$current"
-+ versuffix=".$current";
-+ ;;
-+
-+ irix | nonstopux)
-+ major=`expr $current - $age + 1`
-+
-+ case $version_type in
-+ nonstopux) verstring_prefix=nonstopux ;;
-+ *) verstring_prefix=sgi ;;
-+ esac
-+ verstring="$verstring_prefix$major.$revision"
-+
-+ # Add in all the interfaces that we are compatible with.
-+ loop=$revision
-+ while test "$loop" -ne 0; do
-+ iface=`expr $revision - $loop`
-+ loop=`expr $loop - 1`
-+ verstring="$verstring_prefix$major.$iface:$verstring"
-+ done
-+
-+ # Before this point, $major must not contain `.'.
-+ major=.$major
-+ versuffix="$major.$revision"
-+ ;;
-+
-+ linux)
-+ major=.`expr $current - $age`
-+ versuffix="$major.$age.$revision"
-+ ;;
-+
-+ osf)
-+ major=.`expr $current - $age`
-+ versuffix=".$current.$age.$revision"
-+ verstring="$current.$age.$revision"
-+
-+ # Add in all the interfaces that we are compatible with.
-+ loop=$age
-+ while test "$loop" -ne 0; do
-+ iface=`expr $current - $loop`
-+ loop=`expr $loop - 1`
-+ verstring="$verstring:${iface}.0"
-+ done
-+
-+ # Make executables depend on our current version.
-+ verstring="$verstring:${current}.0"
-+ ;;
-+
-+ sunos)
-+ major=".$current"
-+ versuffix=".$current.$revision"
-+ ;;
-+
-+ windows)
-+ # Use '-' rather than '.', since we only want one
-+ # extension on DOS 8.3 filesystems.
-+ major=`expr $current - $age`
-+ versuffix="-$major"
-+ ;;
-+
-+ *)
-+ $echo "$modename: unknown library version type \`$version_type'" 1>&2
-+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+
-+ # Clear the version info if we defaulted, and they specified a release.
-+ if test -z "$vinfo" && test -n "$release"; then
-+ major=
-+ case $version_type in
-+ darwin)
-+ # we can't check for "0.0" in archive_cmds due to quoting
-+ # problems, so we reset it completely
-+ verstring=
-+ ;;
-+ *)
-+ verstring="0.0"
-+ ;;
-+ esac
-+ if test "$need_version" = no; then
-+ versuffix=
-+ else
-+ versuffix=".0.0"
-+ fi
-+ fi
-+
-+ # Remove version info from name if versioning should be avoided
-+ if test "$avoid_version" = yes && test "$need_version" = no; then
-+ major=
-+ versuffix=
-+ verstring=""
-+ fi
-+
-+ # Check to see if the archive will have undefined symbols.
-+ if test "$allow_undefined" = yes; then
-+ if test "$allow_undefined_flag" = unsupported; then
-+ $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
-+ build_libtool_libs=no
-+ build_old_libs=yes
-+ fi
-+ else
-+ # Don't allow undefined symbols.
-+ allow_undefined_flag="$no_undefined_flag"
-+ fi
-+ fi
-+
-+ if test "$mode" != relink; then
-+ # Remove our outputs, but don't remove object files since they
-+ # may have been created when compiling PIC objects.
-+ removelist=
-+ tempremovelist=`$echo "$output_objdir/*"`
-+ for p in $tempremovelist; do
-+ case $p in
-+ *.$objext)
-+ ;;
-+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-+ if test "X$precious_files_regex" != "X"; then
-+ if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
-+ then
-+ continue
-+ fi
-+ fi
-+ removelist="$removelist $p"
-+ ;;
-+ *) ;;
-+ esac
-+ done
-+ if test -n "$removelist"; then
-+ $show "${rm}r $removelist"
-+ $run ${rm}r $removelist
-+ fi
-+ fi
-+
-+ # Now set the variables for building old libraries.
-+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
-+
-+ # Transform .lo files to .o files.
-+ oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-+ fi
-+
-+ # Eliminate all temporary directories.
-+ for path in $notinst_path; do
-+ lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
-+ deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
-+ dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
-+ done
-+
-+ if test -n "$xrpath"; then
-+ # If the user specified any rpath flags, then add them.
-+ temp_xrpath=
-+ for libdir in $xrpath; do
-+ temp_xrpath="$temp_xrpath -R$libdir"
-+ case "$finalize_rpath " in
-+ *" $libdir "*) ;;
-+ *) finalize_rpath="$finalize_rpath $libdir" ;;
-+ esac
-+ done
-+ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
-+ dependency_libs="$temp_xrpath $dependency_libs"
-+ fi
-+ fi
-+
-+ # Make sure dlfiles contains only unique files that won't be dlpreopened
-+ old_dlfiles="$dlfiles"
-+ dlfiles=
-+ for lib in $old_dlfiles; do
-+ case " $dlprefiles $dlfiles " in
-+ *" $lib "*) ;;
-+ *) dlfiles="$dlfiles $lib" ;;
-+ esac
-+ done
-+
-+ # Make sure dlprefiles contains only unique files
-+ old_dlprefiles="$dlprefiles"
-+ dlprefiles=
-+ for lib in $old_dlprefiles; do
-+ case "$dlprefiles " in
-+ *" $lib "*) ;;
-+ *) dlprefiles="$dlprefiles $lib" ;;
-+ esac
-+ done
-+
-+ if test "$build_libtool_libs" = yes; then
-+ if test -n "$rpath"; then
-+ case $host in
-+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
-+ # these systems don't actually have a c library (as such)!
-+ ;;
-+ *-*-rhapsody* | *-*-darwin1.[012])
-+ # Rhapsody C library is in the System framework
-+ deplibs="$deplibs -framework System"
-+ ;;
-+ *-*-netbsd*)
-+ # Don't link with libc until the a.out ld.so is fixed.
-+ ;;
-+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-+ # Do not include libc due to us having libc/libc_r.
-+ ;;
-+ *-*-sco3.2v5* | *-*-sco5v6*)
-+ # Causes problems with __ctype
-+ ;;
-+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
-+ # Compiler inserts libc in the correct place for threads to work
-+ ;;
-+ *)
-+ # Add libc to deplibs on all other systems if necessary.
-+ if test "$build_libtool_need_lc" = "yes"; then
-+ deplibs="$deplibs -lc"
-+ fi
-+ ;;
-+ esac
-+ fi
-+
-+ # Transform deplibs into only deplibs that can be linked in shared.
-+ name_save=$name
-+ libname_save=$libname
-+ release_save=$release
-+ versuffix_save=$versuffix
-+ major_save=$major
-+ # I'm not sure if I'm treating the release correctly. I think
-+ # release should show up in the -l (ie -lgmp5) so we don't want to
-+ # add it in twice. Is that correct?
-+ release=""
-+ versuffix=""
-+ major=""
-+ newdeplibs=
-+ droppeddeps=no
-+ case $deplibs_check_method in
-+ pass_all)
-+ # Don't check for shared/static. Everything works.
-+ # This might be a little naive. We might want to check
-+ # whether the library exists or not. But this is on
-+ # osf3 & osf4 and I'm not really sure... Just
-+ # implementing what was already the behavior.
-+ newdeplibs=$deplibs
-+ ;;
-+ test_compile)
-+ # This code stresses the "libraries are programs" paradigm to its
-+ # limits. Maybe even breaks it. We compile a program, linking it
-+ # against the deplibs as a proxy for the library. Then we can check
-+ # whether they linked in statically or dynamically with ldd.
-+ $rm conftest.c
-+ cat > conftest.c <<EOF
-+ int main() { return 0; }
-+EOF
-+ $rm conftest
-+ $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
-+ if test "$?" -eq 0 ; then
-+ ldd_output=`ldd conftest`
-+ for i in $deplibs; do
-+ name=`expr $i : '-l\(.*\)'`
-+ # If $name is empty we are operating on a -L argument.
-+ if test "$name" != "" && test "$name" -ne "0"; then
-+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+ case " $predeps $postdeps " in
-+ *" $i "*)
-+ newdeplibs="$newdeplibs $i"
-+ i=""
-+ ;;
-+ esac
-+ fi
-+ if test -n "$i" ; then
-+ libname=`eval \\$echo \"$libname_spec\"`
-+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
-+ set dummy $deplib_matches
-+ deplib_match=$2
-+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-+ newdeplibs="$newdeplibs $i"
-+ else
-+ droppeddeps=yes
-+ $echo
-+ $echo "*** Warning: dynamic linker does not accept needed library $i."
-+ $echo "*** I have the capability to make that library automatically link in when"
-+ $echo "*** you link to this library. But I can only do this if you have a"
-+ $echo "*** shared version of the library, which I believe you do not have"
-+ $echo "*** because a test_compile did reveal that the linker did not use it for"
-+ $echo "*** its dynamic dependency list that programs get resolved with at runtime."
-+ fi
-+ fi
-+ else
-+ newdeplibs="$newdeplibs $i"
-+ fi
-+ done
-+ else
-+ # Error occurred in the first compile. Let's try to salvage
-+ # the situation: Compile a separate program for each library.
-+ for i in $deplibs; do
-+ name=`expr $i : '-l\(.*\)'`
-+ # If $name is empty we are operating on a -L argument.
-+ if test "$name" != "" && test "$name" != "0"; then
-+ $rm conftest
-+ $LTCC $LTCFLAGS -o conftest conftest.c $i
-+ # Did it work?
-+ if test "$?" -eq 0 ; then
-+ ldd_output=`ldd conftest`
-+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+ case " $predeps $postdeps " in
-+ *" $i "*)
-+ newdeplibs="$newdeplibs $i"
-+ i=""
-+ ;;
-+ esac
-+ fi
-+ if test -n "$i" ; then
-+ libname=`eval \\$echo \"$libname_spec\"`
-+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
-+ set dummy $deplib_matches
-+ deplib_match=$2
-+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-+ newdeplibs="$newdeplibs $i"
-+ else
-+ droppeddeps=yes
-+ $echo
-+ $echo "*** Warning: dynamic linker does not accept needed library $i."
-+ $echo "*** I have the capability to make that library automatically link in when"
-+ $echo "*** you link to this library. But I can only do this if you have a"
-+ $echo "*** shared version of the library, which you do not appear to have"
-+ $echo "*** because a test_compile did reveal that the linker did not use this one"
-+ $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
-+ fi
-+ fi
-+ else
-+ droppeddeps=yes
-+ $echo
-+ $echo "*** Warning! Library $i is needed by this library but I was not able to"
-+ $echo "*** make it link in! You will probably need to install it or some"
-+ $echo "*** library that it depends on before this library will be fully"
-+ $echo "*** functional. Installing it before continuing would be even better."
-+ fi
-+ else
-+ newdeplibs="$newdeplibs $i"
-+ fi
-+ done
-+ fi
-+ ;;
-+ file_magic*)
-+ set dummy $deplibs_check_method
-+ file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-+ for a_deplib in $deplibs; do
-+ name=`expr $a_deplib : '-l\(.*\)'`
-+ # If $name is empty we are operating on a -L argument.
-+ if test "$name" != "" && test "$name" != "0"; then
-+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+ case " $predeps $postdeps " in
-+ *" $a_deplib "*)
-+ newdeplibs="$newdeplibs $a_deplib"
-+ a_deplib=""
-+ ;;
-+ esac
-+ fi
-+ if test -n "$a_deplib" ; then
-+ libname=`eval \\$echo \"$libname_spec\"`
-+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-+ for potent_lib in $potential_libs; do
-+ # Follow soft links.
-+ if ls -lLd "$potent_lib" 2>/dev/null \
-+ | grep " -> " >/dev/null; then
-+ continue
-+ fi
-+ # The statement above tries to avoid entering an
-+ # endless loop below, in case of cyclic links.
-+ # We might still enter an endless loop, since a link
-+ # loop can be closed while we follow links,
-+ # but so what?
-+ potlib="$potent_lib"
-+ while test -h "$potlib" 2>/dev/null; do
-+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
-+ case $potliblink in
-+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-+ *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
-+ esac
-+ done
-+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
-+ | ${SED} 10q \
-+ | $EGREP "$file_magic_regex" > /dev/null; then
-+ newdeplibs="$newdeplibs $a_deplib"
-+ a_deplib=""
-+ break 2
-+ fi
-+ done
-+ done
-+ fi
-+ if test -n "$a_deplib" ; then
-+ droppeddeps=yes
-+ $echo
-+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
-+ $echo "*** I have the capability to make that library automatically link in when"
-+ $echo "*** you link to this library. But I can only do this if you have a"
-+ $echo "*** shared version of the library, which you do not appear to have"
-+ $echo "*** because I did check the linker path looking for a file starting"
-+ if test -z "$potlib" ; then
-+ $echo "*** with $libname but no candidates were found. (...for file magic test)"
-+ else
-+ $echo "*** with $libname and none of the candidates passed a file format test"
-+ $echo "*** using a file magic. Last file checked: $potlib"
-+ fi
-+ fi
-+ else
-+ # Add a -L argument.
-+ newdeplibs="$newdeplibs $a_deplib"
-+ fi
-+ done # Gone through all deplibs.
-+ ;;
-+ match_pattern*)
-+ set dummy $deplibs_check_method
-+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-+ for a_deplib in $deplibs; do
-+ name=`expr $a_deplib : '-l\(.*\)'`
-+ # If $name is empty we are operating on a -L argument.
-+ if test -n "$name" && test "$name" != "0"; then
-+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+ case " $predeps $postdeps " in
-+ *" $a_deplib "*)
-+ newdeplibs="$newdeplibs $a_deplib"
-+ a_deplib=""
-+ ;;
-+ esac
-+ fi
-+ if test -n "$a_deplib" ; then
-+ libname=`eval \\$echo \"$libname_spec\"`
-+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-+ for potent_lib in $potential_libs; do
-+ potlib="$potent_lib" # see symlink-check above in file_magic test
-+ if eval $echo \"$potent_lib\" 2>/dev/null \
-+ | ${SED} 10q \
-+ | $EGREP "$match_pattern_regex" > /dev/null; then
-+ newdeplibs="$newdeplibs $a_deplib"
-+ a_deplib=""
-+ break 2
-+ fi
-+ done
-+ done
-+ fi
-+ if test -n "$a_deplib" ; then
-+ droppeddeps=yes
-+ $echo
-+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
-+ $echo "*** I have the capability to make that library automatically link in when"
-+ $echo "*** you link to this library. But I can only do this if you have a"
-+ $echo "*** shared version of the library, which you do not appear to have"
-+ $echo "*** because I did check the linker path looking for a file starting"
-+ if test -z "$potlib" ; then
-+ $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
-+ else
-+ $echo "*** with $libname and none of the candidates passed a file format test"
-+ $echo "*** using a regex pattern. Last file checked: $potlib"
-+ fi
-+ fi
-+ else
-+ # Add a -L argument.
-+ newdeplibs="$newdeplibs $a_deplib"
-+ fi
-+ done # Gone through all deplibs.
-+ ;;
-+ none | unknown | *)
-+ newdeplibs=""
-+ tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
-+ -e 's/ -[LR][^ ]*//g'`
-+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-+ for i in $predeps $postdeps ; do
-+ # can't use Xsed below, because $i might contain '/'
-+ tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
-+ done
-+ fi
-+ if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
-+ | grep . >/dev/null; then
-+ $echo
-+ if test "X$deplibs_check_method" = "Xnone"; then
-+ $echo "*** Warning: inter-library dependencies are not supported in this platform."
-+ else
-+ $echo "*** Warning: inter-library dependencies are not known to be supported."
-+ fi
-+ $echo "*** All declared inter-library dependencies are being dropped."
-+ droppeddeps=yes
-+ fi
-+ ;;
-+ esac
-+ versuffix=$versuffix_save
-+ major=$major_save
-+ release=$release_save
-+ libname=$libname_save
-+ name=$name_save
-+
-+ case $host in
-+ *-*-rhapsody* | *-*-darwin1.[012])
-+ # On Rhapsody replace the C library is the System framework
-+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
-+ ;;
-+ esac
-+
-+ if test "$droppeddeps" = yes; then
-+ if test "$module" = yes; then
-+ $echo
-+ $echo "*** Warning: libtool could not satisfy all declared inter-library"
-+ $echo "*** dependencies of module $libname. Therefore, libtool will create"
-+ $echo "*** a static module, that should work as long as the dlopening"
-+ $echo "*** application is linked with the -dlopen flag."
-+ if test -z "$global_symbol_pipe"; then
-+ $echo
-+ $echo "*** However, this would only work if libtool was able to extract symbol"
-+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-+ $echo "*** not find such a program. So, this module is probably useless."
-+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
-+ fi
-+ if test "$build_old_libs" = no; then
-+ oldlibs="$output_objdir/$libname.$libext"
-+ build_libtool_libs=module
-+ build_old_libs=yes
-+ else
-+ build_libtool_libs=no
-+ fi
-+ else
-+ $echo "*** The inter-library dependencies that have been dropped here will be"
-+ $echo "*** automatically added whenever a program is linked with this library"
-+ $echo "*** or is declared to -dlopen it."
-+
-+ if test "$allow_undefined" = no; then
-+ $echo
-+ $echo "*** Since this library must not contain undefined symbols,"
-+ $echo "*** because either the platform does not support them or"
-+ $echo "*** it was explicitly requested with -no-undefined,"
-+ $echo "*** libtool will only create a static version of it."
-+ if test "$build_old_libs" = no; then
-+ oldlibs="$output_objdir/$libname.$libext"
-+ build_libtool_libs=module
-+ build_old_libs=yes
-+ else
-+ build_libtool_libs=no
-+ fi
-+ fi
-+ fi
-+ fi
-+ # Done checking deplibs!
-+ deplibs=$newdeplibs
-+ fi
-+
-+
-+ # move library search paths that coincide with paths to not yet
-+ # installed libraries to the beginning of the library search list
-+ new_libs=
-+ for path in $notinst_path; do
-+ case " $new_libs " in
-+ *" -L$path/$objdir "*) ;;
-+ *)
-+ case " $deplibs " in
-+ *" -L$path/$objdir "*)
-+ new_libs="$new_libs -L$path/$objdir" ;;
-+ esac
-+ ;;
-+ esac
-+ done
-+ for deplib in $deplibs; do
-+ case $deplib in
-+ -L*)
-+ case " $new_libs " in
-+ *" $deplib "*) ;;
-+ *) new_libs="$new_libs $deplib" ;;
-+ esac
-+ ;;
-+ *) new_libs="$new_libs $deplib" ;;
-+ esac
-+ done
-+ deplibs="$new_libs"
-+
-+
-+ # All the library-specific variables (install_libdir is set above).
-+ library_names=
-+ old_library=
-+ dlname=
-+
-+ # Test again, we may have decided not to build it any more
-+ if test "$build_libtool_libs" = yes; then
-+ if test "$hardcode_into_libs" = yes; then
-+ # Hardcode the library paths
-+ hardcode_libdirs=
-+ dep_rpath=
-+ rpath="$finalize_rpath"
-+ test "$mode" != relink && rpath="$compile_rpath$rpath"
-+ for libdir in $rpath; do
-+ if test -n "$hardcode_libdir_flag_spec"; then
-+ if test -n "$hardcode_libdir_separator"; then
-+ if test -z "$hardcode_libdirs"; then
-+ hardcode_libdirs="$libdir"
-+ else
-+ # Just accumulate the unique libdirs.
-+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-+ ;;
-+ *)
-+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+ ;;
-+ esac
-+ fi
-+ else
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+ dep_rpath="$dep_rpath $flag"
-+ fi
-+ elif test -n "$runpath_var"; then
-+ case "$perm_rpath " in
-+ *" $libdir "*) ;;
-+ *) perm_rpath="$perm_rpath $libdir" ;;
-+ esac
-+ fi
-+ done
-+ # Substitute the hardcoded libdirs into the rpath.
-+ if test -n "$hardcode_libdir_separator" &&
-+ test -n "$hardcode_libdirs"; then
-+ libdir="$hardcode_libdirs"
-+ if test -n "$hardcode_libdir_flag_spec_ld"; then
-+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-+ else
-+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-+ fi
-+ fi
-+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
-+ # We should set the runpath_var.
-+ rpath=
-+ for dir in $perm_rpath; do
-+ rpath="$rpath$dir:"
-+ done
-+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
-+ fi
-+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
-+ fi
-+
-+ shlibpath="$finalize_shlibpath"
-+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
-+ if test -n "$shlibpath"; then
-+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
-+ fi
-+
-+ # Get the real and link names of the library.
-+ eval shared_ext=\"$shrext_cmds\"
-+ eval library_names=\"$library_names_spec\"
-+ set dummy $library_names
-+ realname="$2"
-+ shift; shift
-+
-+ if test -n "$soname_spec"; then
-+ eval soname=\"$soname_spec\"
-+ else
-+ soname="$realname"
-+ fi
-+ if test -z "$dlname"; then
-+ dlname=$soname
-+ fi
-+
-+ lib="$output_objdir/$realname"
-+ linknames=
-+ for link
-+ do
-+ linknames="$linknames $link"
-+ done
-+
-+ # Use standard objects if they are pic
-+ test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-+
-+ # Prepare the list of exported symbols
-+ if test -z "$export_symbols"; then
-+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-+ $show "generating symbol list for \`$libname.la'"
-+ export_symbols="$output_objdir/$libname.exp"
-+ $run $rm $export_symbols
-+ cmds=$export_symbols_cmds
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ if len=`expr "X$cmd" : ".*"` &&
-+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-+ $show "$cmd"
-+ $run eval "$cmd" || exit $?
-+ skipped_export=false
-+ else
-+ # The command line is too long to execute in one step.
-+ $show "using reloadable object file for export list..."
-+ skipped_export=:
-+ # Break out early, otherwise skipped_export may be
-+ # set to false by a later but shorter cmd.
-+ break
-+ fi
-+ done
-+ IFS="$save_ifs"
-+ if test -n "$export_symbols_regex"; then
-+ $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
-+ $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-+ $show "$mv \"${export_symbols}T\" \"$export_symbols\""
-+ $run eval '$mv "${export_symbols}T" "$export_symbols"'
-+ fi
-+ fi
-+ fi
-+
-+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
-+ $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
-+ fi
-+
-+ tmp_deplibs=
-+ for test_deplib in $deplibs; do
-+ case " $convenience " in
-+ *" $test_deplib "*) ;;
-+ *)
-+ tmp_deplibs="$tmp_deplibs $test_deplib"
-+ ;;
-+ esac
-+ done
-+ deplibs="$tmp_deplibs"
-+
-+ if test -n "$convenience"; then
-+ if test -n "$whole_archive_flag_spec"; then
-+ save_libobjs=$libobjs
-+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-+ else
-+ gentop="$output_objdir/${outputname}x"
-+ generated="$generated $gentop"
-+
-+ func_extract_archives $gentop $convenience
-+ libobjs="$libobjs $func_extract_archives_result"
-+ fi
-+ fi
-+
-+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
-+ eval flag=\"$thread_safe_flag_spec\"
-+ linker_flags="$linker_flags $flag"
-+ fi
-+
-+ # Make a backup of the uninstalled library when relinking
-+ if test "$mode" = relink; then
-+ $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
-+ fi
-+
-+ # Do each of the archive commands.
-+ if test "$module" = yes && test -n "$module_cmds" ; then
-+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-+ eval test_cmds=\"$module_expsym_cmds\"
-+ cmds=$module_expsym_cmds
-+ else
-+ eval test_cmds=\"$module_cmds\"
-+ cmds=$module_cmds
-+ fi
-+ else
-+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-+ eval test_cmds=\"$archive_expsym_cmds\"
-+ cmds=$archive_expsym_cmds
-+ else
-+ eval test_cmds=\"$archive_cmds\"
-+ cmds=$archive_cmds
-+ fi
-+ fi
-+
-+ if test "X$skipped_export" != "X:" &&
-+ len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-+ :
-+ else
-+ # The command line is too long to link in one step, link piecewise.
-+ $echo "creating reloadable object files..."
-+
-+ # Save the value of $output and $libobjs because we want to
-+ # use them later. If we have whole_archive_flag_spec, we
-+ # want to use save_libobjs as it was before
-+ # whole_archive_flag_spec was expanded, because we can't
-+ # assume the linker understands whole_archive_flag_spec.
-+ # This may have to be revisited, in case too many
-+ # convenience libraries get linked in and end up exceeding
-+ # the spec.
-+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
-+ save_libobjs=$libobjs
-+ fi
-+ save_output=$output
-+ output_la=`$echo "X$output" | $Xsed -e "$basename"`
-+
-+ # Clear the reloadable object creation command queue and
-+ # initialize k to one.
-+ test_cmds=
-+ concat_cmds=
-+ objlist=
-+ delfiles=
-+ last_robj=
-+ k=1
-+ output=$output_objdir/$output_la-${k}.$objext
-+ # Loop over the list of objects to be linked.
-+ for obj in $save_libobjs
-+ do
-+ eval test_cmds=\"$reload_cmds $objlist $last_robj\"
-+ if test "X$objlist" = X ||
-+ { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-+ test "$len" -le "$max_cmd_len"; }; then
-+ objlist="$objlist $obj"
-+ else
-+ # The command $test_cmds is almost too long, add a
-+ # command to the queue.
-+ if test "$k" -eq 1 ; then
-+ # The first file doesn't have a previous command to add.
-+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
-+ else
-+ # All subsequent reloadable object files will link in
-+ # the last one created.
-+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
-+ fi
-+ last_robj=$output_objdir/$output_la-${k}.$objext
-+ k=`expr $k + 1`
-+ output=$output_objdir/$output_la-${k}.$objext
-+ objlist=$obj
-+ len=1
-+ fi
-+ done
-+ # Handle the remaining objects by creating one last
-+ # reloadable object file. All subsequent reloadable object
-+ # files will link in the last one created.
-+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-+
-+ if ${skipped_export-false}; then
-+ $show "generating symbol list for \`$libname.la'"
-+ export_symbols="$output_objdir/$libname.exp"
-+ $run $rm $export_symbols
-+ libobjs=$output
-+ # Append the command to create the export file.
-+ eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
-+ fi
-+
-+ # Set up a command to remove the reloadable object files
-+ # after they are used.
-+ i=0
-+ while test "$i" -lt "$k"
-+ do
-+ i=`expr $i + 1`
-+ delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
-+ done
-+
-+ $echo "creating a temporary reloadable object file: $output"
-+
-+ # Loop through the commands generated above and execute them.
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $concat_cmds; do
-+ IFS="$save_ifs"
-+ $show "$cmd"
-+ $run eval "$cmd" || exit $?
-+ done
-+ IFS="$save_ifs"
-+
-+ libobjs=$output
-+ # Restore the value of output.
-+ output=$save_output
-+
-+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
-+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-+ fi
-+ # Expand the library linking commands again to reset the
-+ # value of $libobjs for piecewise linking.
-+
-+ # Do each of the archive commands.
-+ if test "$module" = yes && test -n "$module_cmds" ; then
-+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
-+ cmds=$module_expsym_cmds
-+ else
-+ cmds=$module_cmds
-+ fi
-+ else
-+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-+ cmds=$archive_expsym_cmds
-+ else
-+ cmds=$archive_cmds
-+ fi
-+ fi
-+
-+ # Append the command to remove the reloadable object files
-+ # to the just-reset $cmds.
-+ eval cmds=\"\$cmds~\$rm $delfiles\"
-+ fi
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd" || {
-+ lt_exit=$?
-+
-+ # Restore the uninstalled library and exit
-+ if test "$mode" = relink; then
-+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
-+ fi
-+
-+ exit $lt_exit
-+ }
-+ done
-+ IFS="$save_ifs"
-+
-+ # Restore the uninstalled library and exit
-+ if test "$mode" = relink; then
-+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
-+
-+ if test -n "$convenience"; then
-+ if test -z "$whole_archive_flag_spec"; then
-+ $show "${rm}r $gentop"
-+ $run ${rm}r "$gentop"
-+ fi
-+ fi
-+
-+ exit $EXIT_SUCCESS
-+ fi
-+
-+ # Create links to the real library.
-+ for linkname in $linknames; do
-+ if test "$realname" != "$linkname"; then
-+ $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
-+ $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
-+ fi
-+ done
-+
-+ # If -module or -export-dynamic was specified, set the dlname.
-+ if test "$module" = yes || test "$export_dynamic" = yes; then
-+ # On all known operating systems, these are identical.
-+ dlname="$soname"
-+ fi
-+ fi
-+ ;;
-+
-+ obj)
-+ if test -n "$deplibs"; then
-+ $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
-+ fi
-+
-+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-+ $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-+ fi
-+
-+ if test -n "$rpath"; then
-+ $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
-+ fi
-+
-+ if test -n "$xrpath"; then
-+ $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
-+ fi
-+
-+ if test -n "$vinfo"; then
-+ $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
-+ fi
-+
-+ if test -n "$release"; then
-+ $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
-+ fi
-+
-+ case $output in
-+ *.lo)
-+ if test -n "$objs$old_deplibs"; then
-+ $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ libobj="$output"
-+ obj=`$echo "X$output" | $Xsed -e "$lo2o"`
-+ ;;
-+ *)
-+ libobj=
-+ obj="$output"
-+ ;;
-+ esac
-+
-+ # Delete the old objects.
-+ $run $rm $obj $libobj
-+
-+ # Objects from convenience libraries. This assumes
-+ # single-version convenience libraries. Whenever we create
-+ # different ones for PIC/non-PIC, this we'll have to duplicate
-+ # the extraction.
-+ reload_conv_objs=
-+ gentop=
-+ # reload_cmds runs $LD directly, so let us get rid of
-+ # -Wl from whole_archive_flag_spec
-+ wl=
-+
-+ if test -n "$convenience"; then
-+ if test -n "$whole_archive_flag_spec"; then
-+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
-+ else
-+ gentop="$output_objdir/${obj}x"
-+ generated="$generated $gentop"
-+
-+ func_extract_archives $gentop $convenience
-+ reload_conv_objs="$reload_objs $func_extract_archives_result"
-+ fi
-+ fi
-+
-+ # Create the old-style object.
-+ reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-+
-+ output="$obj"
-+ cmds=$reload_cmds
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd" || exit $?
-+ done
-+ IFS="$save_ifs"
-+
-+ # Exit if we aren't doing a library object file.
-+ if test -z "$libobj"; then
-+ if test -n "$gentop"; then
-+ $show "${rm}r $gentop"
-+ $run ${rm}r $gentop
-+ fi
-+
-+ exit $EXIT_SUCCESS
-+ fi
-+
-+ if test "$build_libtool_libs" != yes; then
-+ if test -n "$gentop"; then
-+ $show "${rm}r $gentop"
-+ $run ${rm}r $gentop
-+ fi
-+
-+ # Create an invalid libtool object if no PIC, so that we don't
-+ # accidentally link it into a program.
-+ # $show "echo timestamp > $libobj"
-+ # $run eval "echo timestamp > $libobj" || exit $?
-+ exit $EXIT_SUCCESS
-+ fi
-+
-+ if test -n "$pic_flag" || test "$pic_mode" != default; then
-+ # Only do commands if we really have different PIC objects.
-+ reload_objs="$libobjs $reload_conv_objs"
-+ output="$libobj"
-+ cmds=$reload_cmds
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd" || exit $?
-+ done
-+ IFS="$save_ifs"
-+ fi
-+
-+ if test -n "$gentop"; then
-+ $show "${rm}r $gentop"
-+ $run ${rm}r $gentop
-+ fi
-+
-+ exit $EXIT_SUCCESS
-+ ;;
-+
-+ prog)
-+ case $host in
-+ *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
-+ esac
-+ if test -n "$vinfo"; then
-+ $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
-+ fi
-+
-+ if test -n "$release"; then
-+ $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
-+ fi
-+
-+ if test "$preload" = yes; then
-+ if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
-+ test "$dlopen_self_static" = unknown; then
-+ $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
-+ fi
-+ fi
-+
-+ case $host in
-+ *-*-rhapsody* | *-*-darwin1.[012])
-+ # On Rhapsody replace the C library is the System framework
-+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-+ ;;
-+ esac
-+
-+ case $host in
-+ *darwin*)
-+ # Don't allow lazy linking, it breaks C++ global constructors
-+ if test "$tagname" = CXX ; then
-+ compile_command="$compile_command ${wl}-bind_at_load"
-+ finalize_command="$finalize_command ${wl}-bind_at_load"
-+ fi
-+ ;;
-+ esac
-+
-+
-+ # move library search paths that coincide with paths to not yet
-+ # installed libraries to the beginning of the library search list
-+ new_libs=
-+ for path in $notinst_path; do
-+ case " $new_libs " in
-+ *" -L$path/$objdir "*) ;;
-+ *)
-+ case " $compile_deplibs " in
-+ *" -L$path/$objdir "*)
-+ new_libs="$new_libs -L$path/$objdir" ;;
-+ esac
-+ ;;
-+ esac
-+ done
-+ for deplib in $compile_deplibs; do
-+ case $deplib in
-+ -L*)
-+ case " $new_libs " in
-+ *" $deplib "*) ;;
-+ *) new_libs="$new_libs $deplib" ;;
-+ esac
-+ ;;
-+ *) new_libs="$new_libs $deplib" ;;
-+ esac
-+ done
-+ compile_deplibs="$new_libs"
-+
-+
-+ compile_command="$compile_command $compile_deplibs"
-+ finalize_command="$finalize_command $finalize_deplibs"
-+
-+ if test -n "$rpath$xrpath"; then
-+ # If the user specified any rpath flags, then add them.
-+ for libdir in $rpath $xrpath; do
-+ # This is the magic to use -rpath.
-+ case "$finalize_rpath " in
-+ *" $libdir "*) ;;
-+ *) finalize_rpath="$finalize_rpath $libdir" ;;
-+ esac
-+ done
-+ fi
-+
-+ # Now hardcode the library paths
-+ rpath=
-+ hardcode_libdirs=
-+ for libdir in $compile_rpath $finalize_rpath; do
-+ if test -n "$hardcode_libdir_flag_spec"; then
-+ if test -n "$hardcode_libdir_separator"; then
-+ if test -z "$hardcode_libdirs"; then
-+ hardcode_libdirs="$libdir"
-+ else
-+ # Just accumulate the unique libdirs.
-+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-+ ;;
-+ *)
-+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+ ;;
-+ esac
-+ fi
-+ else
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+ rpath="$rpath $flag"
-+ fi
-+ elif test -n "$runpath_var"; then
-+ case "$perm_rpath " in
-+ *" $libdir "*) ;;
-+ *) perm_rpath="$perm_rpath $libdir" ;;
-+ esac
-+ fi
-+ case $host in
-+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-+ testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
-+ case :$dllsearchpath: in
-+ *":$libdir:"*) ;;
-+ *) dllsearchpath="$dllsearchpath:$libdir";;
-+ esac
-+ case :$dllsearchpath: in
-+ *":$testbindir:"*) ;;
-+ *) dllsearchpath="$dllsearchpath:$testbindir";;
-+ esac
-+ ;;
-+ esac
-+ done
-+ # Substitute the hardcoded libdirs into the rpath.
-+ if test -n "$hardcode_libdir_separator" &&
-+ test -n "$hardcode_libdirs"; then
-+ libdir="$hardcode_libdirs"
-+ eval rpath=\" $hardcode_libdir_flag_spec\"
-+ fi
-+ compile_rpath="$rpath"
-+
-+ rpath=
-+ hardcode_libdirs=
-+ for libdir in $finalize_rpath; do
-+ if test -n "$hardcode_libdir_flag_spec"; then
-+ if test -n "$hardcode_libdir_separator"; then
-+ if test -z "$hardcode_libdirs"; then
-+ hardcode_libdirs="$libdir"
-+ else
-+ # Just accumulate the unique libdirs.
-+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
-+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
-+ ;;
-+ *)
-+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-+ ;;
-+ esac
-+ fi
-+ else
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+ rpath="$rpath $flag"
-+ fi
-+ elif test -n "$runpath_var"; then
-+ case "$finalize_perm_rpath " in
-+ *" $libdir "*) ;;
-+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
-+ esac
-+ fi
-+ done
-+ # Substitute the hardcoded libdirs into the rpath.
-+ if test -n "$hardcode_libdir_separator" &&
-+ test -n "$hardcode_libdirs"; then
-+ libdir="$hardcode_libdirs"
-+ eval rpath=\" $hardcode_libdir_flag_spec\"
-+ fi
-+ finalize_rpath="$rpath"
-+
-+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
-+ # Transform all the library objects into standard objects.
-+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-+ fi
-+
-+ dlsyms=
-+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
-+ dlsyms="${outputname}S.c"
-+ else
-+ $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
-+ fi
-+ fi
-+
-+ if test -n "$dlsyms"; then
-+ case $dlsyms in
-+ "") ;;
-+ *.c)
-+ # Discover the nlist of each of the dlfiles.
-+ nlist="$output_objdir/${outputname}.nm"
-+
-+ $show "$rm $nlist ${nlist}S ${nlist}T"
-+ $run $rm "$nlist" "${nlist}S" "${nlist}T"
-+
-+ # Parse the name list into a source file.
-+ $show "creating $output_objdir/$dlsyms"
-+
-+ test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-+
-+#ifdef __cplusplus
-+extern \"C\" {
-+#endif
-+
-+/* Prevent the only kind of declaration conflicts we can make. */
-+#define lt_preloaded_symbols some_other_symbol
-+
-+/* External symbol declarations for the compiler. */\
-+"
-+
-+ if test "$dlself" = yes; then
-+ $show "generating symbol list for \`$output'"
-+
-+ test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-+
-+ # Add our own program objects to the symbol list.
-+ progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-+ for arg in $progfiles; do
-+ $show "extracting global C symbols from \`$arg'"
-+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-+ done
-+
-+ if test -n "$exclude_expsyms"; then
-+ $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-+ $run eval '$mv "$nlist"T "$nlist"'
-+ fi
-+
-+ if test -n "$export_symbols_regex"; then
-+ $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-+ $run eval '$mv "$nlist"T "$nlist"'
-+ fi
-+
-+ # Prepare the list of exported symbols
-+ if test -z "$export_symbols"; then
-+ export_symbols="$output_objdir/$outputname.exp"
-+ $run $rm $export_symbols
-+ $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
-+ case $host in
-+ *cygwin* | *mingw* )
-+ $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-+ $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
-+ ;;
-+ esac
-+ else
-+ $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
-+ $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
-+ $run eval 'mv "$nlist"T "$nlist"'
-+ case $host in
-+ *cygwin* | *mingw* )
-+ $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-+ $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
-+ ;;
-+ esac
-+ fi
-+ fi
-+
-+ for arg in $dlprefiles; do
-+ $show "extracting global C symbols from \`$arg'"
-+ name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
-+ $run eval '$echo ": $name " >> "$nlist"'
-+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-+ done
-+
-+ if test -z "$run"; then
-+ # Make sure we have at least an empty file.
-+ test -f "$nlist" || : > "$nlist"
-+
-+ if test -n "$exclude_expsyms"; then
-+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
-+ $mv "$nlist"T "$nlist"
-+ fi
-+
-+ # Try sorting and uniquifying the output.
-+ if grep -v "^: " < "$nlist" |
-+ if sort -k 3 </dev/null >/dev/null 2>&1; then
-+ sort -k 3
-+ else
-+ sort +2
-+ fi |
-+ uniq > "$nlist"S; then
-+ :
-+ else
-+ grep -v "^: " < "$nlist" > "$nlist"S
-+ fi
-+
-+ if test -f "$nlist"S; then
-+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
-+ else
-+ $echo '/* NONE */' >> "$output_objdir/$dlsyms"
-+ fi
-+
-+ $echo >> "$output_objdir/$dlsyms" "\
-+
-+#undef lt_preloaded_symbols
-+
-+#if defined (__STDC__) && __STDC__
-+# define lt_ptr void *
-+#else
-+# define lt_ptr char *
-+# define const
-+#endif
-+
-+/* The mapping between symbol names and symbols. */
-+"
-+
-+ case $host in
-+ *cygwin* | *mingw* )
-+ $echo >> "$output_objdir/$dlsyms" "\
-+/* DATA imports from DLLs on WIN32 can't be const, because
-+ runtime relocations are performed -- see ld's documentation
-+ on pseudo-relocs */
-+struct {
-+"
-+ ;;
-+ * )
-+ $echo >> "$output_objdir/$dlsyms" "\
-+const struct {
-+"
-+ ;;
-+ esac
-+
-+
-+ $echo >> "$output_objdir/$dlsyms" "\
-+ const char *name;
-+ lt_ptr address;
-+}
-+lt_preloaded_symbols[] =
-+{\
-+"
-+
-+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-+
-+ $echo >> "$output_objdir/$dlsyms" "\
-+ {0, (lt_ptr) 0}
-+};
-+
-+/* This works around a problem in FreeBSD linker */
-+#ifdef FREEBSD_WORKAROUND
-+static const void *lt_preloaded_setup() {
-+ return lt_preloaded_symbols;
-+}
-+#endif
-+
-+#ifdef __cplusplus
-+}
-+#endif\
-+"
-+ fi
-+
-+ pic_flag_for_symtable=
-+ case $host in
-+ # compiling the symbol table file with pic_flag works around
-+ # a FreeBSD bug that causes programs to crash when -lm is
-+ # linked before any other PIC object. But we must not use
-+ # pic_flag when linking with -static. The problem exists in
-+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
-+ case "$compile_command " in
-+ *" -static "*) ;;
-+ *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
-+ esac;;
-+ *-*-hpux*)
-+ case "$compile_command " in
-+ *" -static "*) ;;
-+ *) pic_flag_for_symtable=" $pic_flag";;
-+ esac
-+ esac
-+
-+ # Now compile the dynamic symbol file.
-+ $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
-+ $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-+
-+ # Clean up the generated files.
-+ $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
-+ $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-+
-+ # Transform the symbol file into the correct name.
-+ case $host in
-+ *cygwin* | *mingw* )
-+ if test -f "$output_objdir/${outputname}.def" ; then
-+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
-+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
-+ else
-+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-+ fi
-+ ;;
-+ * )
-+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
-+ ;;
-+ esac
-+ ;;
-+ *)
-+ $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+ else
-+ # We keep going just in case the user didn't refer to
-+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
-+ # really was required.
-+
-+ # Nullify the symbol file.
-+ compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
-+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
-+ fi
-+
-+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-+ # Replace the output file specification.
-+ compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-+ link_command="$compile_command$compile_rpath"
-+
-+ # We have no uninstalled library dependencies, so finalize right now.
-+ $show "$link_command"
-+ $run eval "$link_command"
-+ exit_status=$?
-+
-+ # Delete the generated files.
-+ if test -n "$dlsyms"; then
-+ $show "$rm $output_objdir/${outputname}S.${objext}"
-+ $run $rm "$output_objdir/${outputname}S.${objext}"
-+ fi
-+
-+ exit $exit_status
-+ fi
-+
-+ if test -n "$shlibpath_var"; then
-+ # We should set the shlibpath_var
-+ rpath=
-+ for dir in $temp_rpath; do
-+ case $dir in
-+ [\\/]* | [A-Za-z]:[\\/]*)
-+ # Absolute path.
-+ rpath="$rpath$dir:"
-+ ;;
-+ *)
-+ # Relative path: add a thisdir entry.
-+ rpath="$rpath\$thisdir/$dir:"
-+ ;;
-+ esac
-+ done
-+ temp_rpath="$rpath"
-+ fi
-+
-+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
-+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
-+ fi
-+ if test -n "$finalize_shlibpath"; then
-+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
-+ fi
-+
-+ compile_var=
-+ finalize_var=
-+ if test -n "$runpath_var"; then
-+ if test -n "$perm_rpath"; then
-+ # We should set the runpath_var.
-+ rpath=
-+ for dir in $perm_rpath; do
-+ rpath="$rpath$dir:"
-+ done
-+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
-+ fi
-+ if test -n "$finalize_perm_rpath"; then
-+ # We should set the runpath_var.
-+ rpath=
-+ for dir in $finalize_perm_rpath; do
-+ rpath="$rpath$dir:"
-+ done
-+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
-+ fi
-+ fi
-+
-+ if test "$no_install" = yes; then
-+ # We don't need to create a wrapper script.
-+ link_command="$compile_var$compile_command$compile_rpath"
-+ # Replace the output file specification.
-+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-+ # Delete the old output file.
-+ $run $rm $output
-+ # Link the executable and exit
-+ $show "$link_command"
-+ $run eval "$link_command" || exit $?
-+ exit $EXIT_SUCCESS
-+ fi
-+
-+ if test "$hardcode_action" = relink; then
-+ # Fast installation is not supported
-+ link_command="$compile_var$compile_command$compile_rpath"
-+ relink_command="$finalize_var$finalize_command$finalize_rpath"
-+
-+ $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
-+ $echo "$modename: \`$output' will be relinked during installation" 1>&2
-+ else
-+ if test "$fast_install" != no; then
-+ link_command="$finalize_var$compile_command$finalize_rpath"
-+ if test "$fast_install" = yes; then
-+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
-+ else
-+ # fast_install is set to needless
-+ relink_command=
-+ fi
-+ else
-+ link_command="$compile_var$compile_command$compile_rpath"
-+ relink_command="$finalize_var$finalize_command$finalize_rpath"
-+ fi
-+ fi
-+
-+ # Replace the output file specification.
-+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-+
-+ # Delete the old output files.
-+ $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-+
-+ $show "$link_command"
-+ $run eval "$link_command" || exit $?
-+
-+ # Now create the wrapper script.
-+ $show "creating $output"
-+
-+ # Quote the relink command for shipping.
-+ if test -n "$relink_command"; then
-+ # Preserve any variables that may affect compiler behavior
-+ for var in $variables_saved_for_relink; do
-+ if eval test -z \"\${$var+set}\"; then
-+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-+ elif eval var_value=\$$var; test -z "$var_value"; then
-+ relink_command="$var=; export $var; $relink_command"
-+ else
-+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
-+ fi
-+ done
-+ relink_command="(cd `pwd`; $relink_command)"
-+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-+ fi
-+
-+ # Quote $echo for shipping.
-+ if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
-+ case $progpath in
-+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
-+ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
-+ esac
-+ qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
-+ else
-+ qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
-+ fi
-+
-+ # Only actually do things if our run command is non-null.
-+ if test -z "$run"; then
-+ # win32 will think the script is a binary if it has
-+ # a .exe suffix, so we strip it off here.
-+ case $output in
-+ *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
-+ esac
-+ # test for cygwin because mv fails w/o .exe extensions
-+ case $host in
-+ *cygwin*)
-+ exeext=.exe
-+ outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
-+ *) exeext= ;;
-+ esac
-+ case $host in
-+ *cygwin* | *mingw* )
-+ output_name=`basename $output`
-+ output_path=`dirname $output`
-+ cwrappersource="$output_path/$objdir/lt-$output_name.c"
-+ cwrapper="$output_path/$output_name.exe"
-+ $rm $cwrappersource $cwrapper
-+ trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
-+
-+ cat > $cwrappersource <<EOF
-+
-+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-+ Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-+
-+ The $output program cannot be directly executed until all the libtool
-+ libraries that it depends on are installed.
-+
-+ This wrapper executable should never be moved out of the build directory.
-+ If it is, it will not operate correctly.
-+
-+ Currently, it simply execs the wrapper *script* "/bin/sh $output",
-+ but could eventually absorb all of the scripts functionality and
-+ exec $objdir/$outputname directly.
-+*/
-+EOF
-+ cat >> $cwrappersource<<"EOF"
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <malloc.h>
-+#include <stdarg.h>
-+#include <assert.h>
-+#include <string.h>
-+#include <ctype.h>
-+#include <sys/stat.h>
-+
-+#if defined(PATH_MAX)
-+# define LT_PATHMAX PATH_MAX
-+#elif defined(MAXPATHLEN)
-+# define LT_PATHMAX MAXPATHLEN
-+#else
-+# define LT_PATHMAX 1024
-+#endif
-+
-+#ifndef DIR_SEPARATOR
-+# define DIR_SEPARATOR '/'
-+# define PATH_SEPARATOR ':'
-+#endif
-+
-+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-+ defined (__OS2__)
-+# define HAVE_DOS_BASED_FILE_SYSTEM
-+# ifndef DIR_SEPARATOR_2
-+# define DIR_SEPARATOR_2 '\\'
-+# endif
-+# ifndef PATH_SEPARATOR_2
-+# define PATH_SEPARATOR_2 ';'
-+# endif
-+#endif
-+
-+#ifndef DIR_SEPARATOR_2
-+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-+#else /* DIR_SEPARATOR_2 */
-+# define IS_DIR_SEPARATOR(ch) \
-+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-+#endif /* DIR_SEPARATOR_2 */
-+
-+#ifndef PATH_SEPARATOR_2
-+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
-+#else /* PATH_SEPARATOR_2 */
-+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
-+#endif /* PATH_SEPARATOR_2 */
-+
-+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
-+#define XFREE(stale) do { \
-+ if (stale) { free ((void *) stale); stale = 0; } \
-+} while (0)
-+
-+/* -DDEBUG is fairly common in CFLAGS. */
-+#undef DEBUG
-+#if defined DEBUGWRAPPER
-+# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
-+#else
-+# define DEBUG(format, ...)
-+#endif
-+
-+const char *program_name = NULL;
-+
-+void * xmalloc (size_t num);
-+char * xstrdup (const char *string);
-+const char * base_name (const char *name);
-+char * find_executable(const char *wrapper);
-+int check_executable(const char *path);
-+char * strendzap(char *str, const char *pat);
-+void lt_fatal (const char *message, ...);
-+
-+int
-+main (int argc, char *argv[])
-+{
-+ char **newargz;
-+ int i;
-+
-+ program_name = (char *) xstrdup (base_name (argv[0]));
-+ DEBUG("(main) argv[0] : %s\n",argv[0]);
-+ DEBUG("(main) program_name : %s\n",program_name);
-+ newargz = XMALLOC(char *, argc+2);
-+EOF
-+
-+ cat >> $cwrappersource <<EOF
-+ newargz[0] = (char *) xstrdup("$SHELL");
-+EOF
-+
-+ cat >> $cwrappersource <<"EOF"
-+ newargz[1] = find_executable(argv[0]);
-+ if (newargz[1] == NULL)
-+ lt_fatal("Couldn't find %s", argv[0]);
-+ DEBUG("(main) found exe at : %s\n",newargz[1]);
-+ /* we know the script has the same name, without the .exe */
-+ /* so make sure newargz[1] doesn't end in .exe */
-+ strendzap(newargz[1],".exe");
-+ for (i = 1; i < argc; i++)
-+ newargz[i+1] = xstrdup(argv[i]);
-+ newargz[argc+1] = NULL;
-+
-+ for (i=0; i<argc+1; i++)
-+ {
-+ DEBUG("(main) newargz[%d] : %s\n",i,newargz[i]);
-+ ;
-+ }
-+
-+EOF
-+
-+ case $host_os in
-+ mingw*)
-+ cat >> $cwrappersource <<EOF
-+ execv("$SHELL",(char const **)newargz);
-+EOF
-+ ;;
-+ *)
-+ cat >> $cwrappersource <<EOF
-+ execv("$SHELL",newargz);
-+EOF
-+ ;;
-+ esac
-+
-+ cat >> $cwrappersource <<"EOF"
-+ return 127;
-+}
-+
-+void *
-+xmalloc (size_t num)
-+{
-+ void * p = (void *) malloc (num);
-+ if (!p)
-+ lt_fatal ("Memory exhausted");
-+
-+ return p;
-+}
-+
-+char *
-+xstrdup (const char *string)
-+{
-+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
-+;
-+}
-+
-+const char *
-+base_name (const char *name)
-+{
-+ const char *base;
-+
-+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-+ /* Skip over the disk name in MSDOS pathnames. */
-+ if (isalpha ((unsigned char)name[0]) && name[1] == ':')
-+ name += 2;
-+#endif
-+
-+ for (base = name; *name; name++)
-+ if (IS_DIR_SEPARATOR (*name))
-+ base = name + 1;
-+ return base;
-+}
-+
-+int
-+check_executable(const char * path)
-+{
-+ struct stat st;
-+
-+ DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
-+ if ((!path) || (!*path))
-+ return 0;
-+
-+ if ((stat (path, &st) >= 0) &&
-+ (
-+ /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
-+#if defined (S_IXOTH)
-+ ((st.st_mode & S_IXOTH) == S_IXOTH) ||
-+#endif
-+#if defined (S_IXGRP)
-+ ((st.st_mode & S_IXGRP) == S_IXGRP) ||
-+#endif
-+ ((st.st_mode & S_IXUSR) == S_IXUSR))
-+ )
-+ return 1;
-+ else
-+ return 0;
-+}
-+
-+/* Searches for the full path of the wrapper. Returns
-+ newly allocated full path name if found, NULL otherwise */
-+char *
-+find_executable (const char* wrapper)
-+{
-+ int has_slash = 0;
-+ const char* p;
-+ const char* p_next;
-+ /* static buffer for getcwd */
-+ char tmp[LT_PATHMAX + 1];
-+ int tmp_len;
-+ char* concat_name;
-+
-+ DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
-+
-+ if ((wrapper == NULL) || (*wrapper == '\0'))
-+ return NULL;
-+
-+ /* Absolute path? */
-+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-+ if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
-+ {
-+ concat_name = xstrdup (wrapper);
-+ if (check_executable(concat_name))
-+ return concat_name;
-+ XFREE(concat_name);
-+ }
-+ else
-+ {
-+#endif
-+ if (IS_DIR_SEPARATOR (wrapper[0]))
-+ {
-+ concat_name = xstrdup (wrapper);
-+ if (check_executable(concat_name))
-+ return concat_name;
-+ XFREE(concat_name);
-+ }
-+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
-+ }
-+#endif
-+
-+ for (p = wrapper; *p; p++)
-+ if (*p == '/')
-+ {
-+ has_slash = 1;
-+ break;
-+ }
-+ if (!has_slash)
-+ {
-+ /* no slashes; search PATH */
-+ const char* path = getenv ("PATH");
-+ if (path != NULL)
-+ {
-+ for (p = path; *p; p = p_next)
-+ {
-+ const char* q;
-+ size_t p_len;
-+ for (q = p; *q; q++)
-+ if (IS_PATH_SEPARATOR(*q))
-+ break;
-+ p_len = q - p;
-+ p_next = (*q == '\0' ? q : q + 1);
-+ if (p_len == 0)
-+ {
-+ /* empty path: current directory */
-+ if (getcwd (tmp, LT_PATHMAX) == NULL)
-+ lt_fatal ("getcwd failed");
-+ tmp_len = strlen(tmp);
-+ concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
-+ memcpy (concat_name, tmp, tmp_len);
-+ concat_name[tmp_len] = '/';
-+ strcpy (concat_name + tmp_len + 1, wrapper);
-+ }
-+ else
-+ {
-+ concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
-+ memcpy (concat_name, p, p_len);
-+ concat_name[p_len] = '/';
-+ strcpy (concat_name + p_len + 1, wrapper);
-+ }
-+ if (check_executable(concat_name))
-+ return concat_name;
-+ XFREE(concat_name);
-+ }
-+ }
-+ /* not found in PATH; assume curdir */
-+ }
-+ /* Relative path | not found in path: prepend cwd */
-+ if (getcwd (tmp, LT_PATHMAX) == NULL)
-+ lt_fatal ("getcwd failed");
-+ tmp_len = strlen(tmp);
-+ concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
-+ memcpy (concat_name, tmp, tmp_len);
-+ concat_name[tmp_len] = '/';
-+ strcpy (concat_name + tmp_len + 1, wrapper);
-+
-+ if (check_executable(concat_name))
-+ return concat_name;
-+ XFREE(concat_name);
-+ return NULL;
-+}
-+
-+char *
-+strendzap(char *str, const char *pat)
-+{
-+ size_t len, patlen;
-+
-+ assert(str != NULL);
-+ assert(pat != NULL);
-+
-+ len = strlen(str);
-+ patlen = strlen(pat);
-+
-+ if (patlen <= len)
-+ {
-+ str += len - patlen;
-+ if (strcmp(str, pat) == 0)
-+ *str = '\0';
-+ }
-+ return str;
-+}
-+
-+static void
-+lt_error_core (int exit_status, const char * mode,
-+ const char * message, va_list ap)
-+{
-+ fprintf (stderr, "%s: %s: ", program_name, mode);
-+ vfprintf (stderr, message, ap);
-+ fprintf (stderr, ".\n");
-+
-+ if (exit_status >= 0)
-+ exit (exit_status);
-+}
-+
-+void
-+lt_fatal (const char *message, ...)
-+{
-+ va_list ap;
-+ va_start (ap, message);
-+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
-+ va_end (ap);
-+}
-+EOF
-+ # we should really use a build-platform specific compiler
-+ # here, but OTOH, the wrappers (shell script and this C one)
-+ # are only useful if you want to execute the "real" binary.
-+ # Since the "real" binary is built for $host, then this
-+ # wrapper might as well be built for $host, too.
-+ $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
-+ ;;
-+ esac
-+ $rm $output
-+ trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
-+
-+ $echo > $output "\
-+#! $SHELL
-+
-+# $output - temporary wrapper script for $objdir/$outputname
-+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-+#
-+# The $output program cannot be directly executed until all the libtool
-+# libraries that it depends on are installed.
-+#
-+# This wrapper script should never be moved out of the build directory.
-+# If it is, it will not operate correctly.
-+
-+# Sed substitution that helps us do robust quoting. It backslashifies
-+# metacharacters that are still active within double-quoted strings.
-+Xsed='${SED} -e 1s/^X//'
-+sed_quote_subst='$sed_quote_subst'
-+
-+# The HP-UX ksh and POSIX shell print the target directory to stdout
-+# if CDPATH is set.
-+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-+
-+relink_command=\"$relink_command\"
-+
-+# This environment variable determines our operation mode.
-+if test \"\$libtool_install_magic\" = \"$magic\"; then
-+ # install mode needs the following variable:
-+ notinst_deplibs='$notinst_deplibs'
-+else
-+ # When we are sourced in execute mode, \$file and \$echo are already set.
-+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
-+ echo=\"$qecho\"
-+ file=\"\$0\"
-+ # Make sure echo works.
-+ if test \"X\$1\" = X--no-reexec; then
-+ # Discard the --no-reexec flag, and continue.
-+ shift
-+ elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
-+ # Yippee, \$echo works!
-+ :
-+ else
-+ # Restart under the correct shell, and then maybe \$echo will work.
-+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-+ fi
-+ fi\
-+"
-+ $echo >> $output "\
-+
-+ # Find the directory that this script lives in.
-+ thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
-+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
-+
-+ # Follow symbolic links until we get to the real thisdir.
-+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
-+ while test -n \"\$file\"; do
-+ destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
-+
-+ # If there was a directory component, then change thisdir.
-+ if test \"x\$destdir\" != \"x\$file\"; then
-+ case \"\$destdir\" in
-+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
-+ *) thisdir=\"\$thisdir/\$destdir\" ;;
-+ esac
-+ fi
-+
-+ file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
-+ done
-+
-+ # Try to get the absolute directory name.
-+ absdir=\`cd \"\$thisdir\" && pwd\`
-+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
-+"
-+
-+ if test "$fast_install" = yes; then
-+ $echo >> $output "\
-+ program=lt-'$outputname'$exeext
-+ progdir=\"\$thisdir/$objdir\"
-+
-+ if test ! -f \"\$progdir/\$program\" || \\
-+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
-+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
-+
-+ file=\"\$\$-\$program\"
-+
-+ if test ! -d \"\$progdir\"; then
-+ $mkdir \"\$progdir\"
-+ else
-+ $rm \"\$progdir/\$file\"
-+ fi"
-+
-+ $echo >> $output "\
-+
-+ # relink executable if necessary
-+ if test -n \"\$relink_command\"; then
-+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
-+ else
-+ $echo \"\$relink_command_output\" >&2
-+ $rm \"\$progdir/\$file\"
-+ exit $EXIT_FAILURE
-+ fi
-+ fi
-+
-+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-+ { $rm \"\$progdir/\$program\";
-+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-+ $rm \"\$progdir/\$file\"
-+ fi"
-+ else
-+ $echo >> $output "\
-+ program='$outputname'
-+ progdir=\"\$thisdir/$objdir\"
-+"
-+ fi
-+
-+ $echo >> $output "\
-+
-+ if test -f \"\$progdir/\$program\"; then"
-+
-+ # Export our shlibpath_var if we have one.
-+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-+ $echo >> $output "\
-+ # Add our own library path to $shlibpath_var
-+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
-+
-+ # Some systems cannot cope with colon-terminated $shlibpath_var
-+ # The second colon is a workaround for a bug in BeOS R4 sed
-+ $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-+
-+ export $shlibpath_var
-+"
-+ fi
-+
-+ # fixup the dll searchpath if we need to.
-+ if test -n "$dllsearchpath"; then
-+ $echo >> $output "\
-+ # Add the dll search path components to the executable PATH
-+ PATH=$dllsearchpath:\$PATH
-+"
-+ fi
-+
-+ $echo >> $output "\
-+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
-+ # Run the actual program with our arguments.
-+"
-+ case $host in
-+ # Backslashes separate directories on plain windows
-+ *-*-mingw | *-*-os2*)
-+ $echo >> $output "\
-+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-+"
-+ ;;
-+
-+ *)
-+ $echo >> $output "\
-+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
-+"
-+ ;;
-+ esac
-+ $echo >> $output "\
-+ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
-+ exit $EXIT_FAILURE
-+ fi
-+ else
-+ # The program doesn't exist.
-+ \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
-+ \$echo \"This script is just a wrapper for \$program.\" 1>&2
-+ $echo \"See the $PACKAGE documentation for more information.\" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+fi\
-+"
-+ chmod +x $output
-+ fi
-+ exit $EXIT_SUCCESS
-+ ;;
-+ esac
-+
-+ # See if we need to build an old-fashioned archive.
-+ for oldlib in $oldlibs; do
-+
-+ if test "$build_libtool_libs" = convenience; then
-+ oldobjs="$libobjs_save"
-+ addlibs="$convenience"
-+ build_libtool_libs=no
-+ else
-+ if test "$build_libtool_libs" = module; then
-+ oldobjs="$libobjs_save"
-+ build_libtool_libs=no
-+ else
-+ oldobjs="$old_deplibs $non_pic_objects"
-+ fi
-+ addlibs="$old_convenience"
-+ fi
-+
-+ if test -n "$addlibs"; then
-+ gentop="$output_objdir/${outputname}x"
-+ generated="$generated $gentop"
-+
-+ func_extract_archives $gentop $addlibs
-+ oldobjs="$oldobjs $func_extract_archives_result"
-+ fi
-+
-+ # Do each command in the archive commands.
-+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
-+ cmds=$old_archive_from_new_cmds
-+ else
-+ # POSIX demands no paths to be encoded in archives. We have
-+ # to avoid creating archives with duplicate basenames if we
-+ # might have to extract them afterwards, e.g., when creating a
-+ # static archive out of a convenience library, or when linking
-+ # the entirety of a libtool archive into another (currently
-+ # not supported by libtool).
-+ if (for obj in $oldobjs
-+ do
-+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
-+ done | sort | sort -uc >/dev/null 2>&1); then
-+ :
-+ else
-+ $echo "copying selected object files to avoid basename conflicts..."
-+
-+ if test -z "$gentop"; then
-+ gentop="$output_objdir/${outputname}x"
-+ generated="$generated $gentop"
-+
-+ $show "${rm}r $gentop"
-+ $run ${rm}r "$gentop"
-+ $show "$mkdir $gentop"
-+ $run $mkdir "$gentop"
-+ exit_status=$?
-+ if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
-+ exit $exit_status
-+ fi
-+ fi
-+
-+ save_oldobjs=$oldobjs
-+ oldobjs=
-+ counter=1
-+ for obj in $save_oldobjs
-+ do
-+ objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-+ case " $oldobjs " in
-+ " ") oldobjs=$obj ;;
-+ *[\ /]"$objbase "*)
-+ while :; do
-+ # Make sure we don't pick an alternate name that also
-+ # overlaps.
-+ newobj=lt$counter-$objbase
-+ counter=`expr $counter + 1`
-+ case " $oldobjs " in
-+ *[\ /]"$newobj "*) ;;
-+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
-+ esac
-+ done
-+ $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-+ $run ln "$obj" "$gentop/$newobj" ||
-+ $run cp "$obj" "$gentop/$newobj"
-+ oldobjs="$oldobjs $gentop/$newobj"
-+ ;;
-+ *) oldobjs="$oldobjs $obj" ;;
-+ esac
-+ done
-+ fi
-+
-+ eval cmds=\"$old_archive_cmds\"
-+
-+ if len=`expr "X$cmds" : ".*"` &&
-+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-+ cmds=$old_archive_cmds
-+ else
-+ # the command line is too long to link in one step, link in parts
-+ $echo "using piecewise archive linking..."
-+ save_RANLIB=$RANLIB
-+ RANLIB=:
-+ objlist=
-+ concat_cmds=
-+ save_oldobjs=$oldobjs
-+
-+ # Is there a better way of finding the last object in the list?
-+ for obj in $save_oldobjs
-+ do
-+ last_oldobj=$obj
-+ done
-+ for obj in $save_oldobjs
-+ do
-+ oldobjs="$objlist $obj"
-+ objlist="$objlist $obj"
-+ eval test_cmds=\"$old_archive_cmds\"
-+ if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-+ test "$len" -le "$max_cmd_len"; then
-+ :
-+ else
-+ # the above command should be used before it gets too long
-+ oldobjs=$objlist
-+ if test "$obj" = "$last_oldobj" ; then
-+ RANLIB=$save_RANLIB
-+ fi
-+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
-+ objlist=
-+ fi
-+ done
-+ RANLIB=$save_RANLIB
-+ oldobjs=$objlist
-+ if test "X$oldobjs" = "X" ; then
-+ eval cmds=\"\$concat_cmds\"
-+ else
-+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
-+ fi
-+ fi
-+ fi
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ eval cmd=\"$cmd\"
-+ IFS="$save_ifs"
-+ $show "$cmd"
-+ $run eval "$cmd" || exit $?
-+ done
-+ IFS="$save_ifs"
-+ done
-+
-+ if test -n "$generated"; then
-+ $show "${rm}r$generated"
-+ $run ${rm}r$generated
-+ fi
-+
-+ # Now create the libtool archive.
-+ case $output in
-+ *.la)
-+ old_library=
-+ test "$build_old_libs" = yes && old_library="$libname.$libext"
-+ $show "creating $output"
-+
-+ # Preserve any variables that may affect compiler behavior
-+ for var in $variables_saved_for_relink; do
-+ if eval test -z \"\${$var+set}\"; then
-+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
-+ elif eval var_value=\$$var; test -z "$var_value"; then
-+ relink_command="$var=; export $var; $relink_command"
-+ else
-+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
-+ fi
-+ done
-+ # Quote the link command for shipping.
-+ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
-+ if test "$hardcode_automatic" = yes ; then
-+ relink_command=
-+ fi
-+
-+
-+ # Only create the output if not a dry run.
-+ if test -z "$run"; then
-+ for installed in no yes; do
-+ if test "$installed" = yes; then
-+ if test -z "$install_libdir"; then
-+ break
-+ fi
-+ output="$output_objdir/$outputname"i
-+ # Replace all uninstalled libtool libraries with the installed ones
-+ newdependency_libs=
-+ for deplib in $dependency_libs; do
-+ case $deplib in
-+ *.la)
-+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
-+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-+ if test -z "$libdir"; then
-+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ newdependency_libs="$newdependency_libs $libdir/$name"
-+ ;;
-+ *) newdependency_libs="$newdependency_libs $deplib" ;;
-+ esac
-+ done
-+ dependency_libs="$newdependency_libs"
-+ newdlfiles=
-+ for lib in $dlfiles; do
-+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-+ if test -z "$libdir"; then
-+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ newdlfiles="$newdlfiles $libdir/$name"
-+ done
-+ dlfiles="$newdlfiles"
-+ newdlprefiles=
-+ for lib in $dlprefiles; do
-+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-+ if test -z "$libdir"; then
-+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ newdlprefiles="$newdlprefiles $libdir/$name"
-+ done
-+ dlprefiles="$newdlprefiles"
-+ else
-+ newdlfiles=
-+ for lib in $dlfiles; do
-+ case $lib in
-+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-+ *) abs=`pwd`"/$lib" ;;
-+ esac
-+ newdlfiles="$newdlfiles $abs"
-+ done
-+ dlfiles="$newdlfiles"
-+ newdlprefiles=
-+ for lib in $dlprefiles; do
-+ case $lib in
-+ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-+ *) abs=`pwd`"/$lib" ;;
-+ esac
-+ newdlprefiles="$newdlprefiles $abs"
-+ done
-+ dlprefiles="$newdlprefiles"
-+ fi
-+ $rm $output
-+ # place dlname in correct position for cygwin
-+ tdlname=$dlname
-+ case $host,$output,$installed,$module,$dlname in
-+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
-+ esac
-+ $echo > $output "\
-+# $outputname - a libtool library file
-+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-+#
-+# Please DO NOT delete this file!
-+# It is necessary for linking the library.
-+
-+# The name that we can dlopen(3).
-+dlname='$tdlname'
-+
-+# Names of this library.
-+library_names='$library_names'
-+
-+# The name of the static archive.
-+old_library='$old_library'
-+
-+# Libraries that this one depends upon.
-+dependency_libs='$dependency_libs'
-+
-+# Version information for $libname.
-+current=$current
-+age=$age
-+revision=$revision
-+
-+# Is this an already installed library?
-+installed=$installed
-+
-+# Should we warn about portability when linking against -modules?
-+shouldnotlink=$module
-+
-+# Files to dlopen/dlpreopen
-+dlopen='$dlfiles'
-+dlpreopen='$dlprefiles'
-+
-+# Directory that this library needs to be installed in:
-+libdir='$install_libdir'"
-+ if test "$installed" = no && test "$need_relink" = yes; then
-+ $echo >> $output "\
-+relink_command=\"$relink_command\""
-+ fi
-+ done
-+ fi
-+
-+ # Do a symbolic link so that the libtool archive can be found in
-+ # LD_LIBRARY_PATH before the program is installed.
-+ $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-+ $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
-+ ;;
-+ esac
-+ exit $EXIT_SUCCESS
-+ ;;
-+
-+ # libtool install mode
-+ install)
-+ modename="$modename: install"
-+
-+ # There may be an optional sh(1) argument at the beginning of
-+ # install_prog (especially on Windows NT).
-+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
-+ # Allow the use of GNU shtool's install command.
-+ $echo "X$nonopt" | grep shtool > /dev/null; then
-+ # Aesthetically quote it.
-+ arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ install_prog="$arg "
-+ arg="$1"
-+ shift
-+ else
-+ install_prog=
-+ arg=$nonopt
-+ fi
-+
-+ # The real first argument should be the name of the installation program.
-+ # Aesthetically quote it.
-+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ install_prog="$install_prog$arg"
-+
-+ # We need to accept at least all the BSD install flags.
-+ dest=
-+ files=
-+ opts=
-+ prev=
-+ install_type=
-+ isdir=no
-+ stripme=
-+ for arg
-+ do
-+ if test -n "$dest"; then
-+ files="$files $dest"
-+ dest=$arg
-+ continue
-+ fi
-+
-+ case $arg in
-+ -d) isdir=yes ;;
-+ -f)
-+ case " $install_prog " in
-+ *[\\\ /]cp\ *) ;;
-+ *) prev=$arg ;;
-+ esac
-+ ;;
-+ -g | -m | -o) prev=$arg ;;
-+ -s)
-+ stripme=" -s"
-+ continue
-+ ;;
-+ -*)
-+ ;;
-+ *)
-+ # If the previous option needed an argument, then skip it.
-+ if test -n "$prev"; then
-+ prev=
-+ else
-+ dest=$arg
-+ continue
-+ fi
-+ ;;
-+ esac
-+
-+ # Aesthetically quote the argument.
-+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-+ case $arg in
-+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-+ arg="\"$arg\""
-+ ;;
-+ esac
-+ install_prog="$install_prog $arg"
-+ done
-+
-+ if test -z "$install_prog"; then
-+ $echo "$modename: you must specify an install program" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ if test -n "$prev"; then
-+ $echo "$modename: the \`$prev' option requires an argument" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ if test -z "$files"; then
-+ if test -z "$dest"; then
-+ $echo "$modename: no file or destination specified" 1>&2
-+ else
-+ $echo "$modename: you must specify a destination" 1>&2
-+ fi
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Strip any trailing slash from the destination.
-+ dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-+
-+ # Check to see that the destination is a directory.
-+ test -d "$dest" && isdir=yes
-+ if test "$isdir" = yes; then
-+ destdir="$dest"
-+ destname=
-+ else
-+ destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
-+ test "X$destdir" = "X$dest" && destdir=.
-+ destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-+
-+ # Not a directory, so check to see that there is only one file specified.
-+ set dummy $files
-+ if test "$#" -gt 2; then
-+ $echo "$modename: \`$dest' is not a directory" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ fi
-+ case $destdir in
-+ [\\/]* | [A-Za-z]:[\\/]*) ;;
-+ *)
-+ for file in $files; do
-+ case $file in
-+ *.lo) ;;
-+ *)
-+ $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+ done
-+ ;;
-+ esac
-+
-+ # This variable tells wrapper scripts just to set variables rather
-+ # than running their programs.
-+ libtool_install_magic="$magic"
-+
-+ staticlibs=
-+ future_libdirs=
-+ current_libdirs=
-+ for file in $files; do
-+
-+ # Do each installation.
-+ case $file in
-+ *.$libext)
-+ # Do the static libraries later.
-+ staticlibs="$staticlibs $file"
-+ ;;
-+
-+ *.la)
-+ # Check to see that this really is a libtool archive.
-+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-+ else
-+ $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ library_names=
-+ old_library=
-+ relink_command=
-+ # If there is no directory component, then add one.
-+ case $file in
-+ */* | *\\*) . $file ;;
-+ *) . ./$file ;;
-+ esac
-+
-+ # Add the libdir to current_libdirs if it is the destination.
-+ if test "X$destdir" = "X$libdir"; then
-+ case "$current_libdirs " in
-+ *" $libdir "*) ;;
-+ *) current_libdirs="$current_libdirs $libdir" ;;
-+ esac
-+ else
-+ # Note the libdir as a future libdir.
-+ case "$future_libdirs " in
-+ *" $libdir "*) ;;
-+ *) future_libdirs="$future_libdirs $libdir" ;;
-+ esac
-+ fi
-+
-+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
-+ test "X$dir" = "X$file/" && dir=
-+ dir="$dir$objdir"
-+
-+ if test -n "$relink_command"; then
-+ # Determine the prefix the user has applied to our future dir.
-+ inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
-+
-+ # Don't allow the user to place us outside of our expected
-+ # location b/c this prevents finding dependent libraries that
-+ # are installed to the same prefix.
-+ # At present, this check doesn't affect windows .dll's that
-+ # are installed into $libdir/../bin (currently, that works fine)
-+ # but it's something to keep an eye on.
-+ if test "$inst_prefix_dir" = "$destdir"; then
-+ $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ if test -n "$inst_prefix_dir"; then
-+ # Stick the inst_prefix_dir data into the link command.
-+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
-+ else
-+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
-+ fi
-+
-+ $echo "$modename: warning: relinking \`$file'" 1>&2
-+ $show "$relink_command"
-+ if $run eval "$relink_command"; then :
-+ else
-+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ fi
-+
-+ # See the names of the shared library.
-+ set dummy $library_names
-+ if test -n "$2"; then
-+ realname="$2"
-+ shift
-+ shift
-+
-+ srcname="$realname"
-+ test -n "$relink_command" && srcname="$realname"T
-+
-+ # Install the shared library and build the symlinks.
-+ $show "$install_prog $dir/$srcname $destdir/$realname"
-+ $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
-+ if test -n "$stripme" && test -n "$striplib"; then
-+ $show "$striplib $destdir/$realname"
-+ $run eval "$striplib $destdir/$realname" || exit $?
-+ fi
-+
-+ if test "$#" -gt 0; then
-+ # Delete the old symlinks, and create new ones.
-+ # Try `ln -sf' first, because the `ln' binary might depend on
-+ # the symlink we replace! Solaris /bin/ln does not understand -f,
-+ # so we also need to try rm && ln -s.
-+ for linkname
-+ do
-+ if test "$linkname" != "$realname"; then
-+ $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
-+ $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
-+ fi
-+ done
-+ fi
-+
-+ # Do each command in the postinstall commands.
-+ lib="$destdir/$realname"
-+ cmds=$postinstall_cmds
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd" || {
-+ lt_exit=$?
-+
-+ # Restore the uninstalled library and exit
-+ if test "$mode" = relink; then
-+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
-+ fi
-+
-+ exit $lt_exit
-+ }
-+ done
-+ IFS="$save_ifs"
-+ fi
-+
-+ # Install the pseudo-library for information purposes.
-+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-+ instname="$dir/$name"i
-+ $show "$install_prog $instname $destdir/$name"
-+ $run eval "$install_prog $instname $destdir/$name" || exit $?
-+
-+ # Maybe install the static library, too.
-+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
-+ ;;
-+
-+ *.lo)
-+ # Install (i.e. copy) a libtool object.
-+
-+ # Figure out destination file name, if it wasn't already specified.
-+ if test -n "$destname"; then
-+ destfile="$destdir/$destname"
-+ else
-+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-+ destfile="$destdir/$destfile"
-+ fi
-+
-+ # Deduce the name of the destination old-style object file.
-+ case $destfile in
-+ *.lo)
-+ staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
-+ ;;
-+ *.$objext)
-+ staticdest="$destfile"
-+ destfile=
-+ ;;
-+ *)
-+ $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+
-+ # Install the libtool object if requested.
-+ if test -n "$destfile"; then
-+ $show "$install_prog $file $destfile"
-+ $run eval "$install_prog $file $destfile" || exit $?
-+ fi
-+
-+ # Install the old object if enabled.
-+ if test "$build_old_libs" = yes; then
-+ # Deduce the name of the old-style object file.
-+ staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-+
-+ $show "$install_prog $staticobj $staticdest"
-+ $run eval "$install_prog \$staticobj \$staticdest" || exit $?
-+ fi
-+ exit $EXIT_SUCCESS
-+ ;;
-+
-+ *)
-+ # Figure out destination file name, if it wasn't already specified.
-+ if test -n "$destname"; then
-+ destfile="$destdir/$destname"
-+ else
-+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-+ destfile="$destdir/$destfile"
-+ fi
-+
-+ # If the file is missing, and there is a .exe on the end, strip it
-+ # because it is most likely a libtool script we actually want to
-+ # install
-+ stripped_ext=""
-+ case $file in
-+ *.exe)
-+ if test ! -f "$file"; then
-+ file=`$echo $file|${SED} 's,.exe$,,'`
-+ stripped_ext=".exe"
-+ fi
-+ ;;
-+ esac
-+
-+ # Do a test to see if this is really a libtool program.
-+ case $host in
-+ *cygwin*|*mingw*)
-+ wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
-+ ;;
-+ *)
-+ wrapper=$file
-+ ;;
-+ esac
-+ if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
-+ notinst_deplibs=
-+ relink_command=
-+
-+ # Note that it is not necessary on cygwin/mingw to append a dot to
-+ # foo even if both foo and FILE.exe exist: automatic-append-.exe
-+ # behavior happens only for exec(3), not for open(2)! Also, sourcing
-+ # `FILE.' does not work on cygwin managed mounts.
-+ #
-+ # If there is no directory component, then add one.
-+ case $wrapper in
-+ */* | *\\*) . ${wrapper} ;;
-+ *) . ./${wrapper} ;;
-+ esac
-+
-+ # Check the variables that should have been set.
-+ if test -z "$notinst_deplibs"; then
-+ $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ finalize=yes
-+ for lib in $notinst_deplibs; do
-+ # Check to see that each library is installed.
-+ libdir=
-+ if test -f "$lib"; then
-+ # If there is no directory component, then add one.
-+ case $lib in
-+ */* | *\\*) . $lib ;;
-+ *) . ./$lib ;;
-+ esac
-+ fi
-+ libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
-+ if test -n "$libdir" && test ! -f "$libfile"; then
-+ $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
-+ finalize=no
-+ fi
-+ done
-+
-+ relink_command=
-+ # Note that it is not necessary on cygwin/mingw to append a dot to
-+ # foo even if both foo and FILE.exe exist: automatic-append-.exe
-+ # behavior happens only for exec(3), not for open(2)! Also, sourcing
-+ # `FILE.' does not work on cygwin managed mounts.
-+ #
-+ # If there is no directory component, then add one.
-+ case $wrapper in
-+ */* | *\\*) . ${wrapper} ;;
-+ *) . ./${wrapper} ;;
-+ esac
-+
-+ outputname=
-+ if test "$fast_install" = no && test -n "$relink_command"; then
-+ if test "$finalize" = yes && test -z "$run"; then
-+ tmpdir=`func_mktempdir`
-+ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
-+ outputname="$tmpdir/$file"
-+ # Replace the output file specification.
-+ relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
-+
-+ $show "$relink_command"
-+ if $run eval "$relink_command"; then :
-+ else
-+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-+ ${rm}r "$tmpdir"
-+ continue
-+ fi
-+ file="$outputname"
-+ else
-+ $echo "$modename: warning: cannot relink \`$file'" 1>&2
-+ fi
-+ else
-+ # Install the binary that we compiled earlier.
-+ file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
-+ fi
-+ fi
-+
-+ # remove .exe since cygwin /usr/bin/install will append another
-+ # one anyway
-+ case $install_prog,$host in
-+ */usr/bin/install*,*cygwin*)
-+ case $file:$destfile in
-+ *.exe:*.exe)
-+ # this is ok
-+ ;;
-+ *.exe:*)
-+ destfile=$destfile.exe
-+ ;;
-+ *:*.exe)
-+ destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
-+ ;;
-+ esac
-+ ;;
-+ esac
-+ $show "$install_prog$stripme $file $destfile"
-+ $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
-+ test -n "$outputname" && ${rm}r "$tmpdir"
-+ ;;
-+ esac
-+ done
-+
-+ for file in $staticlibs; do
-+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-+
-+ # Set up the ranlib parameters.
-+ oldlib="$destdir/$name"
-+
-+ $show "$install_prog $file $oldlib"
-+ $run eval "$install_prog \$file \$oldlib" || exit $?
-+
-+ if test -n "$stripme" && test -n "$old_striplib"; then
-+ $show "$old_striplib $oldlib"
-+ $run eval "$old_striplib $oldlib" || exit $?
-+ fi
-+
-+ # Do each command in the postinstall commands.
-+ cmds=$old_postinstall_cmds
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd" || exit $?
-+ done
-+ IFS="$save_ifs"
-+ done
-+
-+ if test -n "$future_libdirs"; then
-+ $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
-+ fi
-+
-+ if test -n "$current_libdirs"; then
-+ # Maybe just do a dry run.
-+ test -n "$run" && current_libdirs=" -n$current_libdirs"
-+ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
-+ else
-+ exit $EXIT_SUCCESS
-+ fi
-+ ;;
-+
-+ # libtool finish mode
-+ finish)
-+ modename="$modename: finish"
-+ libdirs="$nonopt"
-+ admincmds=
-+
-+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-+ for dir
-+ do
-+ libdirs="$libdirs $dir"
-+ done
-+
-+ for libdir in $libdirs; do
-+ if test -n "$finish_cmds"; then
-+ # Do each command in the finish commands.
-+ cmds=$finish_cmds
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd" || admincmds="$admincmds
-+ $cmd"
-+ done
-+ IFS="$save_ifs"
-+ fi
-+ if test -n "$finish_eval"; then
-+ # Do the single finish_eval.
-+ eval cmds=\"$finish_eval\"
-+ $run eval "$cmds" || admincmds="$admincmds
-+ $cmds"
-+ fi
-+ done
-+ fi
-+
-+ # Exit here if they wanted silent mode.
-+ test "$show" = : && exit $EXIT_SUCCESS
-+
-+ $echo "X----------------------------------------------------------------------" | $Xsed
-+ $echo "Libraries have been installed in:"
-+ for libdir in $libdirs; do
-+ $echo " $libdir"
-+ done
-+ $echo
-+ $echo "If you ever happen to want to link against installed libraries"
-+ $echo "in a given directory, LIBDIR, you must either use libtool, and"
-+ $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
-+ $echo "flag during linking and do at least one of the following:"
-+ if test -n "$shlibpath_var"; then
-+ $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
-+ $echo " during execution"
-+ fi
-+ if test -n "$runpath_var"; then
-+ $echo " - add LIBDIR to the \`$runpath_var' environment variable"
-+ $echo " during linking"
-+ fi
-+ if test -n "$hardcode_libdir_flag_spec"; then
-+ libdir=LIBDIR
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+
-+ $echo " - use the \`$flag' linker flag"
-+ fi
-+ if test -n "$admincmds"; then
-+ $echo " - have your system administrator run these commands:$admincmds"
-+ fi
-+ if test -f /etc/ld.so.conf; then
-+ $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
-+ fi
-+ $echo
-+ $echo "See any operating system documentation about shared libraries for"
-+ $echo "more information, such as the ld(1) and ld.so(8) manual pages."
-+ $echo "X----------------------------------------------------------------------" | $Xsed
-+ exit $EXIT_SUCCESS
-+ ;;
-+
-+ # libtool execute mode
-+ execute)
-+ modename="$modename: execute"
-+
-+ # The first argument is the command name.
-+ cmd="$nonopt"
-+ if test -z "$cmd"; then
-+ $echo "$modename: you must specify a COMMAND" 1>&2
-+ $echo "$help"
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Handle -dlopen flags immediately.
-+ for file in $execute_dlfiles; do
-+ if test ! -f "$file"; then
-+ $echo "$modename: \`$file' is not a file" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ dir=
-+ case $file in
-+ *.la)
-+ # Check to see that this really is a libtool archive.
-+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-+ else
-+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ # Read the libtool library.
-+ dlname=
-+ library_names=
-+
-+ # If there is no directory component, then add one.
-+ case $file in
-+ */* | *\\*) . $file ;;
-+ *) . ./$file ;;
-+ esac
-+
-+ # Skip this library if it cannot be dlopened.
-+ if test -z "$dlname"; then
-+ # Warn if it was a shared library.
-+ test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
-+ continue
-+ fi
-+
-+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-+ test "X$dir" = "X$file" && dir=.
-+
-+ if test -f "$dir/$objdir/$dlname"; then
-+ dir="$dir/$objdir"
-+ else
-+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+ ;;
-+
-+ *.lo)
-+ # Just add the directory containing the .lo file.
-+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-+ test "X$dir" = "X$file" && dir=.
-+ ;;
-+
-+ *)
-+ $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
-+ continue
-+ ;;
-+ esac
-+
-+ # Get the absolute pathname.
-+ absdir=`cd "$dir" && pwd`
-+ test -n "$absdir" && dir="$absdir"
-+
-+ # Now add the directory to shlibpath_var.
-+ if eval "test -z \"\$$shlibpath_var\""; then
-+ eval "$shlibpath_var=\"\$dir\""
-+ else
-+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
-+ fi
-+ done
-+
-+ # This variable tells wrapper scripts just to set shlibpath_var
-+ # rather than running their programs.
-+ libtool_execute_magic="$magic"
-+
-+ # Check if any of the arguments is a wrapper script.
-+ args=
-+ for file
-+ do
-+ case $file in
-+ -*) ;;
-+ *)
-+ # Do a test to see if this is really a libtool program.
-+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-+ # If there is no directory component, then add one.
-+ case $file in
-+ */* | *\\*) . $file ;;
-+ *) . ./$file ;;
-+ esac
-+
-+ # Transform arg to wrapped name.
-+ file="$progdir/$program"
-+ fi
-+ ;;
-+ esac
-+ # Quote arguments (to preserve shell metacharacters).
-+ file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
-+ args="$args \"$file\""
-+ done
-+
-+ if test -z "$run"; then
-+ if test -n "$shlibpath_var"; then
-+ # Export the shlibpath_var.
-+ eval "export $shlibpath_var"
-+ fi
-+
-+ # Restore saved environment variables
-+ if test "${save_LC_ALL+set}" = set; then
-+ LC_ALL="$save_LC_ALL"; export LC_ALL
-+ fi
-+ if test "${save_LANG+set}" = set; then
-+ LANG="$save_LANG"; export LANG
-+ fi
-+
-+ # Now prepare to actually exec the command.
-+ exec_cmd="\$cmd$args"
-+ else
-+ # Display what would be done.
-+ if test -n "$shlibpath_var"; then
-+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-+ $echo "export $shlibpath_var"
-+ fi
-+ $echo "$cmd$args"
-+ exit $EXIT_SUCCESS
-+ fi
-+ ;;
-+
-+ # libtool clean and uninstall mode
-+ clean | uninstall)
-+ modename="$modename: $mode"
-+ rm="$nonopt"
-+ files=
-+ rmforce=
-+ exit_status=0
-+
-+ # This variable tells wrapper scripts just to set variables rather
-+ # than running their programs.
-+ libtool_install_magic="$magic"
-+
-+ for arg
-+ do
-+ case $arg in
-+ -f) rm="$rm $arg"; rmforce=yes ;;
-+ -*) rm="$rm $arg" ;;
-+ *) files="$files $arg" ;;
-+ esac
-+ done
-+
-+ if test -z "$rm"; then
-+ $echo "$modename: you must specify an RM program" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+
-+ rmdirs=
-+
-+ origobjdir="$objdir"
-+ for file in $files; do
-+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-+ if test "X$dir" = "X$file"; then
-+ dir=.
-+ objdir="$origobjdir"
-+ else
-+ objdir="$dir/$origobjdir"
-+ fi
-+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-+ test "$mode" = uninstall && objdir="$dir"
-+
-+ # Remember objdir for removal later, being careful to avoid duplicates
-+ if test "$mode" = clean; then
-+ case " $rmdirs " in
-+ *" $objdir "*) ;;
-+ *) rmdirs="$rmdirs $objdir" ;;
-+ esac
-+ fi
-+
-+ # Don't error if the file doesn't exist and rm -f was used.
-+ if (test -L "$file") >/dev/null 2>&1 \
-+ || (test -h "$file") >/dev/null 2>&1 \
-+ || test -f "$file"; then
-+ :
-+ elif test -d "$file"; then
-+ exit_status=1
-+ continue
-+ elif test "$rmforce" = yes; then
-+ continue
-+ fi
-+
-+ rmfiles="$file"
-+
-+ case $name in
-+ *.la)
-+ # Possibly a libtool archive, so verify it.
-+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-+ . $dir/$name
-+
-+ # Delete the libtool libraries and symlinks.
-+ for n in $library_names; do
-+ rmfiles="$rmfiles $objdir/$n"
-+ done
-+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
-+
-+ case "$mode" in
-+ clean)
-+ case " $library_names " in
-+ # " " in the beginning catches empty $dlname
-+ *" $dlname "*) ;;
-+ *) rmfiles="$rmfiles $objdir/$dlname" ;;
-+ esac
-+ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-+ ;;
-+ uninstall)
-+ if test -n "$library_names"; then
-+ # Do each command in the postuninstall commands.
-+ cmds=$postuninstall_cmds
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd"
-+ if test "$?" -ne 0 && test "$rmforce" != yes; then
-+ exit_status=1
-+ fi
-+ done
-+ IFS="$save_ifs"
-+ fi
-+
-+ if test -n "$old_library"; then
-+ # Do each command in the old_postuninstall commands.
-+ cmds=$old_postuninstall_cmds
-+ save_ifs="$IFS"; IFS='~'
-+ for cmd in $cmds; do
-+ IFS="$save_ifs"
-+ eval cmd=\"$cmd\"
-+ $show "$cmd"
-+ $run eval "$cmd"
-+ if test "$?" -ne 0 && test "$rmforce" != yes; then
-+ exit_status=1
-+ fi
-+ done
-+ IFS="$save_ifs"
-+ fi
-+ # FIXME: should reinstall the best remaining shared library.
-+ ;;
-+ esac
-+ fi
-+ ;;
-+
-+ *.lo)
-+ # Possibly a libtool object, so verify it.
-+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-+
-+ # Read the .lo file
-+ . $dir/$name
-+
-+ # Add PIC object to the list of files to remove.
-+ if test -n "$pic_object" \
-+ && test "$pic_object" != none; then
-+ rmfiles="$rmfiles $dir/$pic_object"
-+ fi
-+
-+ # Add non-PIC object to the list of files to remove.
-+ if test -n "$non_pic_object" \
-+ && test "$non_pic_object" != none; then
-+ rmfiles="$rmfiles $dir/$non_pic_object"
-+ fi
-+ fi
-+ ;;
-+
-+ *)
-+ if test "$mode" = clean ; then
-+ noexename=$name
-+ case $file in
-+ *.exe)
-+ file=`$echo $file|${SED} 's,.exe$,,'`
-+ noexename=`$echo $name|${SED} 's,.exe$,,'`
-+ # $file with .exe has already been added to rmfiles,
-+ # add $file without .exe
-+ rmfiles="$rmfiles $file"
-+ ;;
-+ esac
-+ # Do a test to see if this is a libtool program.
-+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-+ relink_command=
-+ . $dir/$noexename
-+
-+ # note $name still contains .exe if it was in $file originally
-+ # as does the version of $file that was added into $rmfiles
-+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
-+ if test "$fast_install" = yes && test -n "$relink_command"; then
-+ rmfiles="$rmfiles $objdir/lt-$name"
-+ fi
-+ if test "X$noexename" != "X$name" ; then
-+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
-+ fi
-+ fi
-+ fi
-+ ;;
-+ esac
-+ $show "$rm $rmfiles"
-+ $run $rm $rmfiles || exit_status=1
-+ done
-+ objdir="$origobjdir"
-+
-+ # Try to remove the ${objdir}s in the directories where we deleted files
-+ for dir in $rmdirs; do
-+ if test -d "$dir"; then
-+ $show "rmdir $dir"
-+ $run rmdir $dir >/dev/null 2>&1
-+ fi
-+ done
-+
-+ exit $exit_status
-+ ;;
-+
-+ "")
-+ $echo "$modename: you must specify a MODE" 1>&2
-+ $echo "$generic_help" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+ esac
-+
-+ if test -z "$exec_cmd"; then
-+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
-+ $echo "$generic_help" 1>&2
-+ exit $EXIT_FAILURE
-+ fi
-+fi # test -z "$show_help"
-+
-+if test -n "$exec_cmd"; then
-+ eval exec $exec_cmd
-+ exit $EXIT_FAILURE
-+fi
-+
-+# We need to display help for each of the modes.
-+case $mode in
-+"") $echo \
-+"Usage: $modename [OPTION]... [MODE-ARG]...
-+
-+Provide generalized library-building support services.
-+
-+ --config show all configuration variables
-+ --debug enable verbose shell tracing
-+-n, --dry-run display commands without modifying any files
-+ --features display basic configuration information and exit
-+ --finish same as \`--mode=finish'
-+ --help display this help message and exit
-+ --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
-+ --quiet same as \`--silent'
-+ --silent don't print informational messages
-+ --tag=TAG use configuration variables from tag TAG
-+ --version print version information
-+
-+MODE must be one of the following:
-+
-+ clean remove files from the build directory
-+ compile compile a source file into a libtool object
-+ execute automatically set library path, then run a program
-+ finish complete the installation of libtool libraries
-+ install install libraries or executables
-+ link create a library or an executable
-+ uninstall remove libraries from an installed directory
-+
-+MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
-+a more detailed description of MODE.
-+
-+Report bugs to <bug-libtool at gnu.org>."
-+ exit $EXIT_SUCCESS
-+ ;;
-+
-+clean)
-+ $echo \
-+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
-+
-+Remove files from the build directory.
-+
-+RM is the name of the program to use to delete files associated with each FILE
-+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-+to RM.
-+
-+If FILE is a libtool library, object or program, all the files associated
-+with it are deleted. Otherwise, only FILE itself is deleted using RM."
-+ ;;
-+
-+compile)
-+ $echo \
-+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
-+
-+Compile a source file into a libtool library object.
-+
-+This mode accepts the following additional options:
-+
-+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
-+ -prefer-pic try to building PIC objects only
-+ -prefer-non-pic try to building non-PIC objects only
-+ -static always build a \`.o' file suitable for static linking
-+
-+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
-+from the given SOURCEFILE.
-+
-+The output file name is determined by removing the directory component from
-+SOURCEFILE, then substituting the C source code suffix \`.c' with the
-+library object suffix, \`.lo'."
-+ ;;
-+
-+execute)
-+ $echo \
-+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
-+
-+Automatically set library path, then run a program.
-+
-+This mode accepts the following additional options:
-+
-+ -dlopen FILE add the directory containing FILE to the library path
-+
-+This mode sets the library path environment variable according to \`-dlopen'
-+flags.
-+
-+If any of the ARGS are libtool executable wrappers, then they are translated
-+into their corresponding uninstalled binary, and any of their required library
-+directories are added to the library path.
-+
-+Then, COMMAND is executed, with ARGS as arguments."
-+ ;;
-+
-+finish)
-+ $echo \
-+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
-+
-+Complete the installation of libtool libraries.
-+
-+Each LIBDIR is a directory that contains libtool libraries.
-+
-+The commands that this mode executes may require superuser privileges. Use
-+the \`--dry-run' option if you just want to see what would be executed."
-+ ;;
-+
-+install)
-+ $echo \
-+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
-+
-+Install executables or libraries.
-+
-+INSTALL-COMMAND is the installation command. The first component should be
-+either the \`install' or \`cp' program.
-+
-+The rest of the components are interpreted as arguments to that command (only
-+BSD-compatible install options are recognized)."
-+ ;;
-+
-+link)
-+ $echo \
-+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
-+
-+Link object files or libraries together to form another library, or to
-+create an executable program.
-+
-+LINK-COMMAND is a command using the C compiler that you would use to create
-+a program from several object files.
-+
-+The following components of LINK-COMMAND are treated specially:
-+
-+ -all-static do not do any dynamic linking at all
-+ -avoid-version do not add a version suffix if possible
-+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
-+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
-+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
-+ -export-symbols SYMFILE
-+ try to export only the symbols listed in SYMFILE
-+ -export-symbols-regex REGEX
-+ try to export only the symbols matching REGEX
-+ -LLIBDIR search LIBDIR for required installed libraries
-+ -lNAME OUTPUT-FILE requires the installed library libNAME
-+ -module build a library that can dlopened
-+ -no-fast-install disable the fast-install mode
-+ -no-install link a not-installable executable
-+ -no-undefined declare that a library does not refer to external symbols
-+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
-+ -objectlist FILE Use a list of object files found in FILE to specify objects
-+ -precious-files-regex REGEX
-+ don't remove output files matching REGEX
-+ -release RELEASE specify package release information
-+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
-+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
-+ -static do not do any dynamic linking of libtool libraries
-+ -version-info CURRENT[:REVISION[:AGE]]
-+ specify library version info [each variable defaults to 0]
-+
-+All other options (arguments beginning with \`-') are ignored.
-+
-+Every other argument is treated as a filename. Files ending in \`.la' are
-+treated as uninstalled libtool libraries, other files are standard or library
-+object files.
-+
-+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
-+only library objects (\`.lo' files) may be specified, and \`-rpath' is
-+required, except when creating a convenience library.
-+
-+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
-+using \`ar' and \`ranlib', or on Windows using \`lib'.
-+
-+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
-+is created, otherwise an executable program is created."
-+ ;;
-+
-+uninstall)
-+ $echo \
-+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
-+
-+Remove libraries from an installation directory.
-+
-+RM is the name of the program to use to delete files associated with each FILE
-+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
-+to RM.
-+
-+If FILE is a libtool library, all the files associated with it are deleted.
-+Otherwise, only FILE itself is deleted using RM."
-+ ;;
-+
-+*)
-+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
-+ $echo "$help" 1>&2
-+ exit $EXIT_FAILURE
-+ ;;
-+esac
-+
-+$echo
-+$echo "Try \`$modename --help' for more information about other modes."
-+
-+exit $?
-+
-+# The TAGs below are defined such that we never get into a situation
-+# in which we disable both kinds of libraries. Given conflicting
-+# choices, we go for a static library, that is the most portable,
-+# since we can't tell whether shared libraries were disabled because
-+# the user asked for that or because the platform doesn't support
-+# them. This is particularly important on AIX, because we don't
-+# support having both static and shared libraries enabled at the same
-+# time on that platform, so we default to a shared-only configuration.
-+# If a disable-shared tag is given, we'll fallback to a static-only
-+# configuration. But we'll never go from static-only to shared-only.
-+
-+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
-+disable_libs=shared
-+# ### END LIBTOOL TAG CONFIG: disable-shared
-+
-+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-+disable_libs=static
-+# ### END LIBTOOL TAG CONFIG: disable-static
-+
-+# Local Variables:
-+# mode:shell-script
-+# sh-indentation:2
-+# End:
-diff -Naur dbus-0.61.orig/missing dbus-0.61/missing
---- dbus-0.61.orig/missing 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/missing 2005-12-19 16:38:26.000000000 +0100
-@@ -0,0 +1,360 @@
-+#! /bin/sh
-+# Common stub for a few missing GNU programs while installing.
-+
-+scriptversion=2005-06-08.21
-+
-+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
-+# Free Software Foundation, Inc.
-+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
-+
-+# 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 2, or (at your option)
-+# 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, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+# 02110-1301, USA.
-+
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+if test $# -eq 0; then
-+ echo 1>&2 "Try \`$0 --help' for more information"
-+ exit 1
-+fi
-+
-+run=:
-+
-+# In the cases where this matters, `missing' is being run in the
-+# srcdir already.
-+if test -f configure.ac; then
-+ configure_ac=configure.ac
-+else
-+ configure_ac=configure.in
-+fi
-+
-+msg="missing on your system"
-+
-+case "$1" in
-+--run)
-+ # Try to run requested program, and just exit if it succeeds.
-+ run=
-+ shift
-+ "$@" && exit 0
-+ # Exit code 63 means version mismatch. This often happens
-+ # when the user try to use an ancient version of a tool on
-+ # a file that requires a minimum version. In this case we
-+ # we should proceed has if the program had been absent, or
-+ # if --run hadn't been passed.
-+ if test $? = 63; then
-+ run=:
-+ msg="probably too old"
-+ fi
-+ ;;
-+
-+ -h|--h|--he|--hel|--help)
-+ echo "\
-+$0 [OPTION]... PROGRAM [ARGUMENT]...
-+
-+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-+error status if there is no known handling for PROGRAM.
-+
-+Options:
-+ -h, --help display this help and exit
-+ -v, --version output version information and exit
-+ --run try to run the given command, and emulate it if it fails
-+
-+Supported PROGRAM values:
-+ aclocal touch file \`aclocal.m4'
-+ autoconf touch file \`configure'
-+ autoheader touch file \`config.h.in'
-+ automake touch all \`Makefile.in' files
-+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
-+ flex create \`lex.yy.c', if possible, from existing .c
-+ help2man touch the output file
-+ lex create \`lex.yy.c', if possible, from existing .c
-+ makeinfo touch the output file
-+ tar try tar, gnutar, gtar, then tar without non-portable flags
-+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
-+
-+Send bug reports to <bug-automake at gnu.org>."
-+ exit $?
-+ ;;
-+
-+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-+ echo "missing $scriptversion (GNU Automake)"
-+ exit $?
-+ ;;
-+
-+ -*)
-+ echo 1>&2 "$0: Unknown \`$1' option"
-+ echo 1>&2 "Try \`$0 --help' for more information"
-+ exit 1
-+ ;;
-+
-+esac
-+
-+# Now exit if we have it, but it failed. Also exit now if we
-+# don't have it and --version was passed (most likely to detect
-+# the program).
-+case "$1" in
-+ lex|yacc)
-+ # Not GNU programs, they don't have --version.
-+ ;;
-+
-+ tar)
-+ if test -n "$run"; then
-+ echo 1>&2 "ERROR: \`tar' requires --run"
-+ exit 1
-+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-+ exit 1
-+ fi
-+ ;;
-+
-+ *)
-+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-+ # We have it, but it failed.
-+ exit 1
-+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-+ # Could not run --version or --help. This is probably someone
-+ # running `$TOOL --version' or `$TOOL --help' to check whether
-+ # $TOOL exists and not knowing $TOOL uses missing.
-+ exit 1
-+ fi
-+ ;;
-+esac
-+
-+# If it does not exist, or fails to run (possibly an outdated version),
-+# try to emulate it.
-+case "$1" in
-+ aclocal*)
-+ echo 1>&2 "\
-+WARNING: \`$1' is $msg. You should only need it if
-+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
-+ to install the \`Automake' and \`Perl' packages. Grab them from
-+ any GNU archive site."
-+ touch aclocal.m4
-+ ;;
-+
-+ autoconf)
-+ echo 1>&2 "\
-+WARNING: \`$1' is $msg. You should only need it if
-+ you modified \`${configure_ac}'. You might want to install the
-+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
-+ archive site."
-+ touch configure
-+ ;;
-+
-+ autoheader)
-+ echo 1>&2 "\
-+WARNING: \`$1' is $msg. You should only need it if
-+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
-+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
-+ from any GNU archive site."
-+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-+ test -z "$files" && files="config.h"
-+ touch_files=
-+ for f in $files; do
-+ case "$f" in
-+ *:*) touch_files="$touch_files "`echo "$f" |
-+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-+ *) touch_files="$touch_files $f.in";;
-+ esac
-+ done
-+ touch $touch_files
-+ ;;
-+
-+ automake*)
-+ echo 1>&2 "\
-+WARNING: \`$1' is $msg. You should only need it if
-+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-+ You might want to install the \`Automake' and \`Perl' packages.
-+ Grab them from any GNU archive site."
-+ find . -type f -name Makefile.am -print |
-+ sed 's/\.am$/.in/' |
-+ while read f; do touch "$f"; done
-+ ;;
-+
-+ autom4te)
-+ echo 1>&2 "\
-+WARNING: \`$1' is needed, but is $msg.
-+ You might have modified some files without having the
-+ proper tools for further handling them.
-+ You can get \`$1' as part of \`Autoconf' from any GNU
-+ archive site."
-+
-+ file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
-+ test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
-+ if test -f "$file"; then
-+ touch $file
-+ else
-+ test -z "$file" || exec >$file
-+ echo "#! /bin/sh"
-+ echo "# Created by GNU Automake missing as a replacement of"
-+ echo "# $ $@"
-+ echo "exit 0"
-+ chmod +x $file
-+ exit 1
-+ fi
-+ ;;
-+
-+ bison|yacc)
-+ echo 1>&2 "\
-+WARNING: \`$1' $msg. You should only need it if
-+ you modified a \`.y' file. You may need the \`Bison' package
-+ in order for those modifications to take effect. You can get
-+ \`Bison' from any GNU archive site."
-+ rm -f y.tab.c y.tab.h
-+ if [ $# -ne 1 ]; then
-+ eval LASTARG="\${$#}"
-+ case "$LASTARG" in
-+ *.y)
-+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-+ if [ -f "$SRCFILE" ]; then
-+ cp "$SRCFILE" y.tab.c
-+ fi
-+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-+ if [ -f "$SRCFILE" ]; then
-+ cp "$SRCFILE" y.tab.h
-+ fi
-+ ;;
-+ esac
-+ fi
-+ if [ ! -f y.tab.h ]; then
-+ echo >y.tab.h
-+ fi
-+ if [ ! -f y.tab.c ]; then
-+ echo 'main() { return 0; }' >y.tab.c
-+ fi
-+ ;;
-+
-+ lex|flex)
-+ echo 1>&2 "\
-+WARNING: \`$1' is $msg. You should only need it if
-+ you modified a \`.l' file. You may need the \`Flex' package
-+ in order for those modifications to take effect. You can get
-+ \`Flex' from any GNU archive site."
-+ rm -f lex.yy.c
-+ if [ $# -ne 1 ]; then
-+ eval LASTARG="\${$#}"
-+ case "$LASTARG" in
-+ *.l)
-+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-+ if [ -f "$SRCFILE" ]; then
-+ cp "$SRCFILE" lex.yy.c
-+ fi
-+ ;;
-+ esac
-+ fi
-+ if [ ! -f lex.yy.c ]; then
-+ echo 'main() { return 0; }' >lex.yy.c
-+ fi
-+ ;;
-+
-+ help2man)
-+ echo 1>&2 "\
-+WARNING: \`$1' is $msg. You should only need it if
-+ you modified a dependency of a manual page. You may need the
-+ \`Help2man' package in order for those modifications to take
-+ effect. You can get \`Help2man' from any GNU archive site."
-+
-+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-+ if test -z "$file"; then
-+ file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
-+ fi
-+ if [ -f "$file" ]; then
-+ touch $file
-+ else
-+ test -z "$file" || exec >$file
-+ echo ".ab help2man is required to generate this page"
-+ exit 1
-+ fi
-+ ;;
-+
-+ makeinfo)
-+ echo 1>&2 "\
-+WARNING: \`$1' is $msg. You should only need it if
-+ you modified a \`.texi' or \`.texinfo' file, or any other file
-+ indirectly affecting the aspect of the manual. The spurious
-+ call might also be the consequence of using a buggy \`make' (AIX,
-+ DU, IRIX). You might want to install the \`Texinfo' package or
-+ the \`GNU make' package. Grab either from any GNU archive site."
-+ # The file to touch is that specified with -o ...
-+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-+ if test -z "$file"; then
-+ # ... or it is the one specified with @setfilename ...
-+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
-+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
-+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-+ fi
-+ # If the file does not exist, the user really needs makeinfo;
-+ # let's fail without touching anything.
-+ test -f $file || exit 1
-+ touch $file
-+ ;;
-+
-+ tar)
-+ shift
-+
-+ # We have already tried tar in the generic part.
-+ # Look for gnutar/gtar before invocation to avoid ugly error
-+ # messages.
-+ if (gnutar --version > /dev/null 2>&1); then
-+ gnutar "$@" && exit 0
-+ fi
-+ if (gtar --version > /dev/null 2>&1); then
-+ gtar "$@" && exit 0
-+ fi
-+ firstarg="$1"
-+ if shift; then
-+ case "$firstarg" in
-+ *o*)
-+ firstarg=`echo "$firstarg" | sed s/o//`
-+ tar "$firstarg" "$@" && exit 0
-+ ;;
-+ esac
-+ case "$firstarg" in
-+ *h*)
-+ firstarg=`echo "$firstarg" | sed s/h//`
-+ tar "$firstarg" "$@" && exit 0
-+ ;;
-+ esac
-+ fi
-+
-+ echo 1>&2 "\
-+WARNING: I can't seem to be able to run \`tar' with the given arguments.
-+ You may want to install GNU tar or Free paxutils, or check the
-+ command line arguments."
-+ exit 1
-+ ;;
-+
-+ *)
-+ echo 1>&2 "\
-+WARNING: \`$1' is needed, and is $msg.
-+ You might have modified some files without having the
-+ proper tools for further handling them. Check the \`README' file,
-+ it often tells you about the needed prerequisites for installing
-+ this package. You may also peek at any GNU archive site, in case
-+ some other package would contain this missing \`$1' program."
-+ exit 1
-+ ;;
-+esac
-+
-+exit 0
-+
-+# Local variables:
-+# eval: (add-hook 'write-file-hooks 'time-stamp)
-+# time-stamp-start: "scriptversion="
-+# time-stamp-format: "%:y-%02m-%02d.%02H"
-+# time-stamp-end: "$"
-+# End:
-diff -Naur dbus-0.61.orig/mono/Arguments.cs dbus-0.61/mono/Arguments.cs
---- dbus-0.61.orig/mono/Arguments.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Arguments.cs 2006-02-09 20:57:42.000000000 +0100
-@@ -0,0 +1,327 @@
-+using System;
-+using System.Collections;
-+using System.Reflection;
-+using System.Runtime.InteropServices;
-+
-+namespace DBus
-+{
-+ // Holds the arguments of a message. Provides methods for appending
-+ // arguments and to assist in matching .NET types with D-BUS types.
-+ public class Arguments : IEnumerable, IDisposable
-+ {
-+ // Must follow sizeof(DBusMessageIter)
-+ internal static readonly int DBusMessageIterSize = Marshal.SizeOf (typeof(_DBusMessageIter));
-+ private static Hashtable dbusTypes = null;
-+ private Message message;
-+ private IntPtr appenderIter;
-+ private IEnumerator enumerator = null;
-+
-+ internal Arguments (Message message)
-+ {
-+ this.appenderIter = Marshal.AllocCoTaskMem(DBusMessageIterSize);
-+ this.message = message;
-+ }
-+
-+ private void Dispose (bool disposing)
-+ {
-+ Marshal.FreeCoTaskMem(appenderIter);
-+ }
-+
-+ public void Dispose ()
-+ {
-+ Dispose (true);
-+ GC.SuppressFinalize (this);
-+ }
-+
-+ ~Arguments()
-+ {
-+ Dispose (false);
-+ }
-+
-+ // Checks the suitability of a D-BUS type for supporting a .NET
-+ // type.
-+ public static bool Suits(Type dbusType, Type type)
-+ {
-+ object [] pars = new object[1];
-+ pars[0] = type;
-+
-+ return (bool) dbusType.InvokeMember("Suits", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, pars, null);
-+ }
-+
-+ // Find a suitable match for the given .NET type or throw an
-+ // exception if one can't be found.
-+ public static Type MatchType(Type type)
-+ {
-+ foreach(Type dbusType in DBusTypes.Values) {
-+ if (Suits(dbusType, type)) {
-+ return dbusType;
-+ }
-+ }
-+
-+ throw new ApplicationException("No suitable DBUS type found for type '" + type + "'");
-+ }
-+
-+ // The D-BUS types.
-+ public static Hashtable DBusTypes {
-+ get
-+ {
-+ if (dbusTypes == null) {
-+ dbusTypes = new Hashtable();
-+
-+ foreach (Type type in Assembly.GetAssembly(typeof(DBusType.IDBusType)).GetTypes()) {
-+ if (type != typeof(DBusType.IDBusType) && typeof(DBusType.IDBusType).IsAssignableFrom(type)) {
-+ dbusTypes.Add(GetCode(type), type);
-+ }
-+ }
-+ }
-+
-+ return dbusTypes;
-+ }
-+ }
-+
-+ // Append an argument
-+ public void Append(DBusType.IDBusType dbusType)
-+ {
-+ dbusType.Append(appenderIter);
-+ }
-+
-+ // Append an argument of the specified type
-+ private void AppendType(Type type, object val)
-+ {
-+ object [] pars = new Object[2];
-+ pars[0] = val;
-+ pars[1] = message.Service;
-+ DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(MatchType(type), pars);
-+ Append(dbusType);
-+ }
-+
-+ // Append the results of a method call
-+ public void AppendResults(MethodInfo method, object retVal, object [] parameters)
-+ {
-+ InitAppending();
-+
-+ if (method.ReturnType != typeof(void)) {
-+ AppendType(method.ReturnType, retVal);
-+ }
-+
-+ for (int i = 0; i < method.GetParameters().Length; i++) {
-+ ParameterInfo par = method.GetParameters()[i];
-+ if (par.IsOut || par.ParameterType.ToString().EndsWith("&")) {
-+ // It's an OUT or INOUT parameter.
-+ AppendType(par.ParameterType.UnderlyingSystemType, parameters[i]);
-+ }
-+ }
-+ }
-+
-+ // Get the parameters
-+ public object[] GetParameters(MethodInfo method)
-+ {
-+ ParameterInfo[] pars = method.GetParameters();
-+ ArrayList paramList = new ArrayList();
-+
-+ enumerator = GetEnumerator();
-+ foreach (ParameterInfo par in pars) {
-+ if (!par.IsOut) {
-+ // It's an IN or INOUT paramter.
-+ enumerator.MoveNext();
-+ DBusType.IDBusType dbusType = (DBusType.IDBusType) enumerator.Current;
-+ paramList.Add(dbusType.Get(par.ParameterType));
-+ } else {
-+ // It's an OUT so just create a parameter for it
-+ object var = null;
-+ paramList.Add(var);
-+ }
-+ }
-+
-+ return paramList.ToArray();
-+ }
-+
-+ // Parse the IN & REF parameters to a method and return the types in a list.
-+ public static object[] ParseInParameters(MethodInfo method)
-+ {
-+ ArrayList types = new ArrayList();
-+
-+ ParameterInfo[] pars = method.GetParameters();
-+ foreach (ParameterInfo par in pars) {
-+ if (!par.IsOut) {
-+ types.Add(MatchType(par.ParameterType));
-+ }
-+ }
-+
-+ return types.ToArray();
-+ }
-+
-+ // Parse the OUT & REF parameters to a method and return the types in a list.
-+ public static object[] ParseOutParameters(MethodInfo method)
-+ {
-+ ArrayList types = new ArrayList();
-+
-+ ParameterInfo[] pars = method.GetParameters();
-+ foreach (ParameterInfo par in pars) {
-+ if (par.IsOut || par.ParameterType.ToString().EndsWith("&")) {
-+ types.Add(MatchType(par.ParameterType));
-+ }
-+ }
-+
-+ return types.ToArray();
-+ }
-+
-+ // Get the appropriate constructor for a D-BUS type
-+ public static ConstructorInfo GetDBusTypeConstructor(Type dbusType, Type type)
-+ {
-+ Type constructorType;
-+
-+ if (type.IsArray)
-+ constructorType = typeof (System.Array);
-+ else if (type.IsEnum)
-+ constructorType = Enum.GetUnderlyingType (type);
-+ else
-+ constructorType = type.UnderlyingSystemType;
-+
-+ ConstructorInfo constructor = dbusType.GetConstructor(new Type[] {constructorType, typeof(Service)});
-+ if (constructor == null)
-+ throw new ArgumentException("There is no valid constructor for '" + dbusType + "' from type '" + type + "'");
-+
-+ return constructor;
-+ }
-+
-+ // Get the type code for a given D-BUS type
-+ public static char GetCode(Type dbusType)
-+ {
-+ return (char) dbusType.InvokeMember("Code", BindingFlags.Static | BindingFlags.GetField, null, null, null);
-+ }
-+
-+ // Get the type code for a given D-BUS type as a string
-+ public static string GetCodeAsString (Type dbusType)
-+ {
-+ return GetCode (dbusType).ToString ();
-+ }
-+
-+ // Get a complete method signature
-+ public override string ToString()
-+ {
-+ IntPtr iter = Marshal.AllocCoTaskMem(DBusMessageIterSize);
-+ string key = "";
-+
-+ // Iterate through the parameters getting the type codes to a string
-+ bool notEmpty = dbus_message_iter_init(message.RawMessage, iter);
-+
-+ if (notEmpty) {
-+ do {
-+ char code = (char) dbus_message_iter_get_arg_type(iter);
-+ if (code == '\0')
-+ return key;
-+
-+ key += code;
-+ } while (dbus_message_iter_next(iter));
-+ }
-+
-+ Marshal.FreeCoTaskMem(iter);
-+
-+ return key;
-+ }
-+
-+ // Move to the next parameter
-+ public DBusType.IDBusType GetNext()
-+ {
-+ enumerator.MoveNext();
-+ return (DBusType.IDBusType) enumerator.Current;
-+ }
-+
-+ // Begin appending
-+ public void InitAppending()
-+ {
-+ dbus_message_iter_init_append(message.RawMessage, appenderIter);
-+ }
-+
-+ // Get the enumerator
-+ public IEnumerator GetEnumerator()
-+ {
-+ return new ArgumentsEnumerator(this);
-+ }
-+
-+ [StructLayout(LayoutKind.Sequential)]
-+ private class _DBusMessageIter
-+ {
-+ IntPtr dummy1;
-+ IntPtr dummy2;
-+ int dummy3;
-+ int dummy4;
-+ int dummy5;
-+ int dummy6;
-+ int dummy7;
-+ int dummy8;
-+ int dummy9;
-+ int dummy10;
-+ int dummy11;
-+ int pad1;
-+ int pad2;
-+ IntPtr pad3;
-+ }
-+
-+ private class ArgumentsEnumerator : IEnumerator
-+ {
-+ private Arguments arguments;
-+ private bool started = false;
-+ private bool notEmpty = false;
-+ private IntPtr iter = Marshal.AllocCoTaskMem(Arguments.DBusMessageIterSize);
-+
-+ public ArgumentsEnumerator(Arguments arguments)
-+ {
-+ this.arguments = arguments;
-+ Reset();
-+ }
-+
-+ ~ArgumentsEnumerator()
-+ {
-+ Marshal.FreeCoTaskMem(iter);
-+ }
-+
-+ public bool MoveNext()
-+ {
-+ if (started) {
-+ return dbus_message_iter_next(iter);
-+ } else {
-+ started = true;
-+ return notEmpty;
-+ }
-+ }
-+
-+ public void Reset()
-+ {
-+ notEmpty = dbus_message_iter_init(arguments.message.RawMessage, iter);
-+ started = false;
-+ }
-+
-+ public object Current
-+ {
-+ get
-+ {
-+ object [] pars = new Object[2];
-+ pars[0] = iter;
-+ pars[1] = arguments.message.Service;
-+
-+ Type type = (Type) DBusTypes[(char) dbus_message_iter_get_arg_type(iter)];
-+ DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(type, pars);
-+
-+ return dbusType;
-+ }
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_init_append(IntPtr rawMessage, IntPtr iter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_has_next(IntPtr iter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_next(IntPtr iter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_init(IntPtr rawMessage, IntPtr iter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static int dbus_message_iter_get_arg_type(IntPtr iter);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/AssemblyInfo.cs.in dbus-0.61/mono/AssemblyInfo.cs.in
---- dbus-0.61.orig/mono/AssemblyInfo.cs.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/AssemblyInfo.cs.in 2004-09-20 13:24:38.000000000 +0200
-@@ -0,0 +1,6 @@
-+using System.Reflection;
-+using System.Runtime.CompilerServices;
-+
-+[assembly:AssemblyVersion("@VERSION@")]
-+[assembly:AssemblyDelaySign(false)]
-+[assembly:AssemblyKeyFile("@srcdir@/dbus-sharp.snk")]
-diff -Naur dbus-0.61.orig/mono/Bus.cs dbus-0.61/mono/Bus.cs
---- dbus-0.61.orig/mono/Bus.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Bus.cs 2005-03-09 05:36:15.000000000 +0100
-@@ -0,0 +1,54 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+
-+ public class Bus
-+ {
-+ // Keep in sync with C
-+ private enum BusType
-+ {
-+ Session = 0,
-+ System = 1,
-+ Activation = 2
-+ }
-+
-+ // Don't allow instantiation
-+ private Bus () { }
-+
-+ public static Connection GetSessionBus()
-+ {
-+ return GetBus(BusType.Session);
-+ }
-+
-+ public static Connection GetSystemBus()
-+ {
-+ return GetBus(BusType.System);
-+ }
-+
-+ private static Connection GetBus(BusType busType)
-+ {
-+ Error error = new Error();
-+ error.Init();
-+
-+ IntPtr rawConnection = dbus_bus_get((int) busType, ref error);
-+
-+ if (rawConnection != IntPtr.Zero) {
-+ Connection connection = Connection.Wrap(rawConnection);
-+ connection.SetupWithMain();
-+ dbus_connection_unref(rawConnection);
-+
-+ return connection;
-+ } else {
-+ throw new DBusException(error);
-+ }
-+ }
-+
-+ [DllImport ("dbus-1")]
-+ private extern static IntPtr dbus_bus_get (int which, ref Error error);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static void dbus_connection_unref (IntPtr ptr);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/BusDriver.cs dbus-0.61/mono/BusDriver.cs
---- dbus-0.61.orig/mono/BusDriver.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/BusDriver.cs 2005-03-13 03:15:09.000000000 +0100
-@@ -0,0 +1,37 @@
-+namespace DBus
-+{
-+
-+ using System;
-+
-+ public delegate void NameOwnerChangedHandler (string name,
-+ string oldOwner,
-+ string newOwner);
-+
-+ [Interface ("org.freedesktop.DBus")]
-+ public abstract class BusDriver
-+ {
-+ [Method]
-+ public abstract string[] ListNames ();
-+
-+ [Method]
-+ public abstract string GetNameOwner (string name);
-+
-+ [Method]
-+ public abstract UInt32 GetConnectionUnixUser (string connectionName);
-+
-+
-+ [Signal]
-+ public virtual event NameOwnerChangedHandler NameOwnerChanged;
-+
-+ static public BusDriver New (Connection connection)
-+ {
-+ Service service;
-+ service = Service.Get (connection, "org.freedesktop.DBus");
-+
-+ BusDriver driver;
-+ driver = (BusDriver) service.GetObject (typeof (BusDriver), "/org/freedesktop/DBus");
-+
-+ return driver;
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/Connection.cs dbus-0.61/mono/Connection.cs
---- dbus-0.61.orig/mono/Connection.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Connection.cs 2005-03-09 05:36:15.000000000 +0100
-@@ -0,0 +1,354 @@
-+namespace DBus
-+{
-+
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+ using System.Reflection;
-+ using System.IO;
-+ using System.Collections;
-+
-+ public delegate int DBusHandleMessageFunction (IntPtr rawConnection,
-+ IntPtr rawMessage,
-+ IntPtr userData);
-+
-+ internal delegate void DBusObjectPathUnregisterFunction(IntPtr rawConnection,
-+ IntPtr userData);
-+
-+ internal delegate int DBusObjectPathMessageFunction(IntPtr rawConnection,
-+ IntPtr rawMessage,
-+ IntPtr userData);
-+
-+ [StructLayout (LayoutKind.Sequential)]
-+ internal struct DBusObjectPathVTable
-+ {
-+ public DBusObjectPathUnregisterFunction unregisterFunction;
-+ public DBusObjectPathMessageFunction messageFunction;
-+ public IntPtr padding1;
-+ public IntPtr padding2;
-+ public IntPtr padding3;
-+ public IntPtr padding4;
-+
-+ public DBusObjectPathVTable(DBusObjectPathUnregisterFunction unregisterFunction,
-+ DBusObjectPathMessageFunction messageFunction)
-+ {
-+ this.unregisterFunction = unregisterFunction;
-+ this.messageFunction = messageFunction;
-+ this.padding1 = IntPtr.Zero;
-+ this.padding2 = IntPtr.Zero;
-+ this.padding3 = IntPtr.Zero;
-+ this.padding4 = IntPtr.Zero;
-+ }
-+ }
-+
-+ public class Connection : IDisposable
-+ {
-+ /// <summary>
-+ /// A pointer to the underlying Connection structure
-+ /// </summary>
-+ private IntPtr rawConnection;
-+
-+ /// <summary>
-+ /// The current slot number
-+ /// </summary>
-+ private static int slot = -1;
-+
-+ private int timeout = -1;
-+
-+ private ArrayList filters = new ArrayList (); // of DBusHandleMessageFunction
-+ private ArrayList matches = new ArrayList (); // of string
-+ private Hashtable object_paths = new Hashtable (); // key: string value: DBusObjectPathVTable
-+
-+ internal Connection(IntPtr rawConnection)
-+ {
-+ RawConnection = rawConnection;
-+ }
-+
-+ public Connection(string address)
-+ {
-+ // the assignment bumps the refcount
-+ Error error = new Error();
-+ error.Init();
-+ RawConnection = dbus_connection_open(address, ref error);
-+ if (RawConnection != IntPtr.Zero) {
-+ dbus_connection_unref(RawConnection);
-+ } else {
-+ throw new DBusException(error);
-+ }
-+
-+ SetupWithMain();
-+ }
-+
-+ public void Dispose()
-+ {
-+ Dispose(true);
-+ GC.SuppressFinalize(this);
-+ }
-+
-+ public void Dispose (bool disposing)
-+ {
-+ if (disposing && RawConnection != IntPtr.Zero)
-+ {
-+ dbus_connection_disconnect(rawConnection);
-+
-+ RawConnection = IntPtr.Zero; // free the native object
-+ }
-+ }
-+
-+ public void Flush()
-+ {
-+ dbus_connection_flush(RawConnection);
-+ }
-+
-+ public void SetupWithMain()
-+ {
-+ dbus_connection_setup_with_g_main(RawConnection, IntPtr.Zero);
-+ }
-+
-+ ~Connection ()
-+ {
-+ Dispose (false);
-+ }
-+
-+ internal static Connection Wrap(IntPtr rawConnection)
-+ {
-+ if (slot > -1) {
-+ // Maybe we already have a Connection object associated with
-+ // this rawConnection then return it
-+ IntPtr rawThis = dbus_connection_get_data (rawConnection, slot);
-+ if (rawThis != IntPtr.Zero) {
-+ return (DBus.Connection) ((GCHandle)rawThis).Target;
-+ }
-+ }
-+
-+ // If it doesn't exist then create a new connection around it
-+ return new Connection(rawConnection);
-+ }
-+
-+ public void AddFilter (DBusHandleMessageFunction func)
-+ {
-+ if (!dbus_connection_add_filter (RawConnection,
-+ func,
-+ IntPtr.Zero,
-+ IntPtr.Zero))
-+ throw new OutOfMemoryException ();
-+
-+ this.filters.Add (func);
-+ }
-+
-+ public void RemoveFilter (DBusHandleMessageFunction func)
-+ {
-+ dbus_connection_remove_filter (RawConnection, func, IntPtr.Zero);
-+
-+ this.filters.Remove (func);
-+ }
-+
-+ public void AddMatch (string match_rule)
-+ {
-+ dbus_bus_add_match (RawConnection, match_rule, IntPtr.Zero);
-+
-+ this.matches.Add (match_rule);
-+ }
-+
-+ public void RemoveMatch (string match_rule)
-+ {
-+ dbus_bus_remove_match (RawConnection, match_rule, IntPtr.Zero);
-+
-+ this.matches.Remove (match_rule);
-+ }
-+
-+ internal void RegisterObjectPath (string path, DBusObjectPathVTable vtable)
-+ {
-+ if (!dbus_connection_register_object_path (RawConnection, path, ref vtable, IntPtr.Zero))
-+ throw new OutOfMemoryException ();
-+
-+ this.object_paths[path] = vtable;
-+ }
-+
-+ internal void UnregisterObjectPath (string path)
-+ {
-+ dbus_connection_unregister_object_path (RawConnection, path);
-+
-+ this.object_paths.Remove (path);
-+ }
-+
-+
-+ public string UniqueName
-+ {
-+ get
-+ {
-+ return Marshal.PtrToStringAnsi (dbus_bus_get_unique_name (RawConnection));
-+ }
-+ }
-+
-+ public int Timeout
-+ {
-+ get
-+ {
-+ return this.timeout;
-+ }
-+ set
-+ {
-+ this.timeout = value;
-+ }
-+ }
-+
-+ private int Slot
-+ {
-+ get
-+ {
-+ if (slot == -1)
-+ {
-+ // We need to initialize the slot
-+ if (!dbus_connection_allocate_data_slot (ref slot))
-+ throw new OutOfMemoryException ();
-+
-+ Debug.Assert (slot >= 0);
-+ }
-+
-+ return slot;
-+ }
-+ }
-+
-+ internal IntPtr RawConnection
-+ {
-+ get
-+ {
-+ return rawConnection;
-+ }
-+ set
-+ {
-+ if (value == rawConnection)
-+ return;
-+
-+ if (rawConnection != IntPtr.Zero)
-+ {
-+ // Remove our callbacks from this connection
-+ foreach (DBusHandleMessageFunction func in this.filters)
-+ dbus_connection_remove_filter (rawConnection, func, IntPtr.Zero);
-+
-+ foreach (string match_rule in this.matches)
-+ dbus_bus_remove_match (rawConnection, match_rule, IntPtr.Zero);
-+
-+ foreach (string path in this.object_paths.Keys)
-+ dbus_connection_unregister_object_path (rawConnection, path);
-+
-+ // Get the reference to this
-+ IntPtr rawThis = dbus_connection_get_data (rawConnection, Slot);
-+ Debug.Assert (rawThis != IntPtr.Zero);
-+
-+ // Blank over the reference
-+ dbus_connection_set_data (rawConnection, Slot, IntPtr.Zero, IntPtr.Zero);
-+
-+ // Free the reference
-+ ((GCHandle) rawThis).Free();
-+
-+ // Unref the connection
-+ dbus_connection_unref(rawConnection);
-+ }
-+
-+ this.rawConnection = value;
-+
-+ if (rawConnection != IntPtr.Zero)
-+ {
-+ GCHandle rawThis;
-+
-+ dbus_connection_ref (rawConnection);
-+
-+ // We store a weak reference to the C# object on the C object
-+ rawThis = GCHandle.Alloc (this, GCHandleType.WeakTrackResurrection);
-+
-+ dbus_connection_set_data(rawConnection, Slot, (IntPtr) rawThis, IntPtr.Zero);
-+
-+ // Add the callbacks to this new connection
-+ foreach (DBusHandleMessageFunction func in this.filters)
-+ dbus_connection_add_filter (rawConnection, func, IntPtr.Zero, IntPtr.Zero);
-+
-+ foreach (string match_rule in this.matches)
-+ dbus_bus_add_match (rawConnection, match_rule, IntPtr.Zero);
-+
-+ foreach (string path in this.object_paths.Keys) {
-+ DBusObjectPathVTable vtable = (DBusObjectPathVTable) this.object_paths[path];
-+ dbus_connection_register_object_path (rawConnection, path, ref vtable, IntPtr.Zero);
-+ }
-+ }
-+ else
-+ {
-+ this.filters.Clear ();
-+ this.matches.Clear ();
-+ this.object_paths.Clear ();
-+ }
-+ }
-+ }
-+
-+ [DllImport("dbus-glib-1")]
-+ private extern static void dbus_connection_setup_with_g_main(IntPtr rawConnection,
-+ IntPtr rawContext);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static IntPtr dbus_connection_open (string address, ref Error error);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static void dbus_connection_unref (IntPtr ptr);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static void dbus_connection_ref (IntPtr ptr);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static bool dbus_connection_allocate_data_slot (ref int slot);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static void dbus_connection_free_data_slot (ref int slot);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static bool dbus_connection_set_data (IntPtr ptr,
-+ int slot,
-+ IntPtr data,
-+ IntPtr free_data_func);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static void dbus_connection_flush (IntPtr ptr);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static IntPtr dbus_connection_get_data (IntPtr ptr,
-+ int slot);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static void dbus_connection_disconnect (IntPtr ptr);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static IntPtr dbus_bus_get_unique_name (IntPtr ptr);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_connection_add_filter(IntPtr rawConnection,
-+ DBusHandleMessageFunction filter,
-+ IntPtr userData,
-+ IntPtr freeData);
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_connection_remove_filter(IntPtr rawConnection,
-+ DBusHandleMessageFunction filter,
-+ IntPtr userData);
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_bus_add_match(IntPtr rawConnection,
-+ string rule,
-+ IntPtr erro);
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_bus_remove_match(IntPtr rawConnection,
-+ string rule,
-+ IntPtr erro);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static bool dbus_connection_register_object_path (IntPtr rawConnection,
-+ string path,
-+ ref DBusObjectPathVTable vTable,
-+ IntPtr userData);
-+
-+ [DllImport ("dbus-1")]
-+ private extern static void dbus_connection_unregister_object_path (IntPtr rawConnection,
-+ string path);
-+
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusException.cs dbus-0.61/mono/DBusException.cs
---- dbus-0.61.orig/mono/DBusException.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusException.cs 2004-08-29 20:14:30.000000000 +0200
-@@ -0,0 +1,12 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+
-+ public class DBusException : ApplicationException
-+ {
-+ internal DBusException (Error error) : base (error.Message) {
-+ error.Free();
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/Array.cs dbus-0.61/mono/DBusType/Array.cs
---- dbus-0.61.orig/mono/DBusType/Array.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/Array.cs 2005-09-08 20:54:42.000000000 +0200
-@@ -0,0 +1,172 @@
-+using System;
-+using System.Collections;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// Array.
-+ /// </summary>
-+ public class Array : IDBusType
-+ {
-+ public const char Code = 'a';
-+ private System.Array val;
-+ private ArrayList elements;
-+ private Type elementType;
-+ private Service service = null;
-+
-+ private Array()
-+ {
-+ }
-+
-+ public Array(System.Array val, Service service)
-+ {
-+ this.val = val;
-+ this.elementType = Arguments.MatchType(val.GetType().GetElementType());
-+ this.service = service;
-+ }
-+
-+ public Array(IntPtr iter, Service service)
-+ {
-+ this.service = service;
-+
-+ IntPtr arrayIter = Marshal.AllocCoTaskMem(Arguments.DBusMessageIterSize);
-+
-+ int elementTypeCode = dbus_message_iter_get_element_type (iter);
-+ dbus_message_iter_recurse (iter, arrayIter);
-+ this.elementType = (Type) Arguments.DBusTypes [(char) elementTypeCode];
-+
-+ elements = new ArrayList ();
-+
-+ if (dbus_message_iter_get_arg_type (arrayIter) != 0) {
-+ do {
-+ object [] pars = new Object[2];
-+ pars[0] = arrayIter;
-+ pars[1] = service;
-+ DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars);
-+ elements.Add(dbusType);
-+ } while (dbus_message_iter_next(arrayIter));
-+ }
-+
-+ Marshal.FreeCoTaskMem(arrayIter);
-+ }
-+
-+ public string GetElementCodeAsString ()
-+ {
-+ string ret = System.String.Empty;
-+ Type t = val.GetType ().GetElementType ();
-+
-+ while (true) {
-+ ret += Arguments.GetCodeAsString (Arguments.MatchType(t));
-+
-+ if (t.IsArray)
-+ t = t.GetElementType ();
-+ else
-+ break;
-+ }
-+
-+ return ret;
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ IntPtr arrayIter = Marshal.AllocCoTaskMem (Arguments.DBusMessageIterSize);
-+
-+ if (!dbus_message_iter_open_container (iter,
-+ (int) Code, GetElementCodeAsString(),
-+ arrayIter)) {
-+ throw new ApplicationException("Failed to append array argument: " + val);
-+ }
-+
-+ foreach (object element in this.val) {
-+ object [] pars = new Object[2];
-+ pars[0] = element;
-+ pars[1] = this.service;
-+ DBusType.IDBusType dbusType = (DBusType.IDBusType) Activator.CreateInstance(elementType, pars);
-+ dbusType.Append(arrayIter);
-+ }
-+
-+ if (!dbus_message_iter_close_container (iter, arrayIter)) {
-+ throw new ApplicationException ("Failed to append array argument: " + val);
-+ }
-+
-+ Marshal.FreeCoTaskMem (arrayIter);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ Type type2 = type.GetElementType ();
-+ if (type.IsArray || (type2 != null && type2.IsArray)) {
-+ return true;
-+ }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_Ref);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Castclass, type);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_Ref);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ throw new ArgumentException("Cannot call Get on an Array without specifying type.");
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ if (type.IsArray)
-+ type = type.GetElementType ();
-+
-+ if (Arguments.Suits(elementType, type.UnderlyingSystemType)) {
-+ this.val = System.Array.CreateInstance(type.UnderlyingSystemType, elements.Count);
-+ int i = 0;
-+ foreach (DBusType.IDBusType element in elements) {
-+ this.val.SetValue(element.Get(type.UnderlyingSystemType), i++);
-+ }
-+ } else {
-+ throw new ArgumentException("Cannot cast DBus.Type.Array to type '" + type.ToString() + "'");
-+ }
-+
-+ return this.val;
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_open_container (IntPtr iter,
-+ int containerType,
-+ string elementType,
-+ IntPtr subIter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_close_container (IntPtr iter,
-+ IntPtr subIter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static int dbus_message_iter_get_element_type(IntPtr iter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static int dbus_message_iter_get_arg_type(IntPtr iter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_recurse(IntPtr iter, IntPtr subIter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_next(IntPtr iter);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_has_next (IntPtr iter);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/Boolean.cs dbus-0.61/mono/DBusType/Boolean.cs
---- dbus-0.61.orig/mono/DBusType/Boolean.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/Boolean.cs 2005-01-25 20:47:13.000000000 +0100
-@@ -0,0 +1,86 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// Boolean
-+ /// </summary>
-+ public class Boolean : IDBusType
-+ {
-+ public const char Code = 'b';
-+ private System.Boolean val;
-+
-+ private Boolean()
-+ {
-+ }
-+
-+ public Boolean(System.Boolean val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public Boolean(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append BOOLEAN argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ switch (type.ToString()) {
-+ case "System.Boolean":
-+ case "System.Boolean&":
-+ return true;
-+ }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_I1);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_I1);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_I1);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ switch (type.ToString()) {
-+ case "System.Boolean":
-+ case "System.Boolean&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.Boolean to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out bool value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref bool value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/Byte.cs dbus-0.61/mono/DBusType/Byte.cs
---- dbus-0.61.orig/mono/DBusType/Byte.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/Byte.cs 2005-01-25 20:47:13.000000000 +0100
-@@ -0,0 +1,105 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// Byte
-+ /// </summary>
-+ public class Byte : IDBusType
-+ {
-+ public const char Code = 'y';
-+ private System.Byte val;
-+
-+ private Byte()
-+ {
-+ }
-+
-+ public Byte(System.Byte val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public Byte(System.Char val, Service service)
-+ {
-+ this.val = (byte) val;
-+ }
-+
-+ public Byte(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append BYTE argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ if (type.IsEnum && Enum.GetUnderlyingType (type) == typeof(System.Byte)) {
-+ return true;
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.Byte":
-+ case "System.Byte&":
-+ case "System.Char":
-+ case "System.Char&":
-+ return true;
-+ }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_U1);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_U1);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_I1);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ if (type.IsEnum) {
-+ return Enum.ToObject(type, this.val);
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.Byte":
-+ case "System.Byte&":
-+ return this.val;
-+ case "System.Char":
-+ case "System.Char&":
-+ char charVal = (char) this.val;
-+ return charVal;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.Byte to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out byte value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref byte value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/Double.cs dbus-0.61/mono/DBusType/Double.cs
---- dbus-0.61.orig/mono/DBusType/Double.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/Double.cs 2005-01-25 20:47:13.000000000 +0100
-@@ -0,0 +1,86 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// IEEE 754 double
-+ /// </summary>
-+ public class Double : IDBusType
-+ {
-+ public const char Code = 'd';
-+ private System.Double val;
-+
-+ private Double()
-+ {
-+ }
-+
-+ public Double(System.Double val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public Double(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append DOUBLE argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ switch (type.ToString()) {
-+ case "System.Double":
-+ case "System.Double&":
-+ return true;
-+ }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_R8);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_R8);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_R8);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ switch (type.ToString()) {
-+ case "System.Double":
-+ case "System.Double&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.Double to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out double value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref double value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/IDBusType.cs dbus-0.61/mono/DBusType/IDBusType.cs
---- dbus-0.61.orig/mono/DBusType/IDBusType.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/IDBusType.cs 2004-08-29 20:14:30.000000000 +0200
-@@ -0,0 +1,16 @@
-+using System;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// Base class for DBusTypes
-+ /// </summary>
-+ public interface IDBusType
-+ {
-+ object Get();
-+
-+ object Get(System.Type type);
-+
-+ void Append(IntPtr iter);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/Int16.cs dbus-0.61/mono/DBusType/Int16.cs
---- dbus-0.61.orig/mono/DBusType/Int16.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/Int16.cs 2005-09-08 20:54:42.000000000 +0200
-@@ -0,0 +1,93 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// 16-bit integer.
-+ /// </summary>
-+ public class Int16 : IDBusType
-+ {
-+ public const char Code = 'n';
-+ private System.Int16 val;
-+
-+ private Int16()
-+ {
-+ }
-+
-+ public Int16(System.Int16 val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public Int16(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append INT16 argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ if (type.IsEnum && Enum.GetUnderlyingType (type) == typeof(System.Int16)) {
-+ return true;
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.Int16":
-+ case "System.Int16&":
-+ return true; }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_I2);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_I2);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_I2);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ if (type.IsEnum) {
-+ return Enum.ToObject(type, this.val);
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.Int16":
-+ case "System.Int16&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.Int16 to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out System.Int16 value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref System.Int16 value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/Int32.cs dbus-0.61/mono/DBusType/Int32.cs
---- dbus-0.61.orig/mono/DBusType/Int32.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/Int32.cs 2005-01-25 20:47:13.000000000 +0100
-@@ -0,0 +1,93 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// 32-bit integer.
-+ /// </summary>
-+ public class Int32 : IDBusType
-+ {
-+ public const char Code = 'i';
-+ private System.Int32 val;
-+
-+ private Int32()
-+ {
-+ }
-+
-+ public Int32(System.Int32 val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public Int32(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append INT32 argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ if (type.IsEnum && Enum.GetUnderlyingType (type) == typeof(System.Int32)) {
-+ return true;
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.Int32":
-+ case "System.Int32&":
-+ return true; }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_I4);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_I4);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_I4);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ if (type.IsEnum) {
-+ return Enum.ToObject(type, this.val);
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.Int32":
-+ case "System.Int32&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.Int32 to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out System.Int32 value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref System.Int32 value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/Int64.cs dbus-0.61/mono/DBusType/Int64.cs
---- dbus-0.61.orig/mono/DBusType/Int64.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/Int64.cs 2005-01-25 20:47:13.000000000 +0100
-@@ -0,0 +1,94 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// 64-bit integer.
-+ /// </summary>
-+ public class Int64 : IDBusType
-+ {
-+ public const char Code = 'x';
-+ private System.Int64 val;
-+
-+ private Int64()
-+ {
-+ }
-+
-+ public Int64(System.Int64 val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public Int64(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append INT64 argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ if (type.IsEnum && Enum.GetUnderlyingType (type) == typeof(System.Int64)) {
-+ return true;
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.Int64":
-+ case "System.Int64&":
-+ return true;
-+ }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_I8);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_I8);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_I8);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ if (type.IsEnum) {
-+ return Enum.ToObject(type, this.val);
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.Int64":
-+ case "System.Int64&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.Int64 to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out System.Int64 value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref System.Int64 value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/ObjectPath.cs dbus-0.61/mono/DBusType/ObjectPath.cs
---- dbus-0.61.orig/mono/DBusType/ObjectPath.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/ObjectPath.cs 2005-03-08 21:45:03.000000000 +0100
-@@ -0,0 +1,107 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// An object path.
-+ /// </summary>
-+ public class ObjectPath : IDBusType
-+ {
-+ public const char Code = 'o';
-+ private string path = null;
-+ private object val = null;
-+ private Service service = null;
-+
-+ private ObjectPath()
-+ {
-+ }
-+
-+ public ObjectPath(object val, Service service)
-+ {
-+ this.val = val;
-+ this.service = service;
-+ }
-+
-+ public ObjectPath(IntPtr iter, Service service)
-+ {
-+ IntPtr raw;
-+
-+ dbus_message_iter_get_basic (iter, out raw);
-+
-+ this.path = Marshal.PtrToStringAnsi (raw);
-+ this.service = service;
-+ }
-+
-+ private string Path
-+ {
-+ get {
-+ if (this.path == null && this.val != null) {
-+ Handler handler = this.service.GetHandler(this.val);
-+ this.path = handler.Path;
-+ }
-+
-+ return this.path;
-+ }
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ IntPtr marshalVal = Marshal.StringToHGlobalAnsi (Path);
-+
-+ bool success = dbus_message_iter_append_basic (iter, (int) Code, ref marshalVal);
-+ Marshal.FreeHGlobal (marshalVal);
-+
-+ if (!success)
-+ throw new ApplicationException("Failed to append OBJECT_PATH argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ object[] attributes = type.GetCustomAttributes(typeof(InterfaceAttribute), false);
-+ if (attributes.Length == 1) {
-+ return true;
-+ } else {
-+ return false;
-+ }
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_Ref);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Castclass, type);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_Ref);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ throw new ArgumentException("Cannot call Get on an ObjectPath without specifying type.");
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ try {
-+ return this.service.GetObject(type, Path);
-+ } catch(Exception ex) {
-+ throw new ArgumentException("Cannot cast object pointed to by Object Path to type '" + type.ToString() + "': " + ex);
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out IntPtr path);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref IntPtr path);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/String.cs dbus-0.61/mono/DBusType/String.cs
---- dbus-0.61.orig/mono/DBusType/String.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/String.cs 2005-03-08 21:45:03.000000000 +0100
-@@ -0,0 +1,95 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// A string.
-+ /// </summary>
-+ public class String : IDBusType
-+ {
-+ public const char Code = 's';
-+ private string val;
-+
-+ private String()
-+ {
-+ }
-+
-+ public String(string val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public String(IntPtr iter, Service service)
-+ {
-+ IntPtr raw;
-+
-+ dbus_message_iter_get_basic (iter, out raw);
-+
-+ this.val = Marshal.PtrToStringAnsi (raw);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ IntPtr marshalVal = Marshal.StringToHGlobalAnsi (val);
-+
-+ bool success = dbus_message_iter_append_basic (iter, (int) Code, ref marshalVal);
-+ Marshal.FreeHGlobal (marshalVal);
-+
-+ if (!success)
-+ throw new ApplicationException("Failed to append STRING argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ switch (type.ToString()) {
-+ case "System.String":
-+ case "System.String&":
-+ return true;
-+ }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_Ref);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Castclass, type);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_Ref);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ switch (type.ToString())
-+ {
-+ case "System.String":
-+ case "System.String&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.String to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out IntPtr value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref IntPtr value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/UInt16.cs dbus-0.61/mono/DBusType/UInt16.cs
---- dbus-0.61.orig/mono/DBusType/UInt16.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/UInt16.cs 2005-09-08 20:54:42.000000000 +0200
-@@ -0,0 +1,93 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// 16-bit integer.
-+ /// </summary>
-+ public class UInt16 : IDBusType
-+ {
-+ public const char Code = 'q';
-+ private System.UInt16 val;
-+
-+ private UInt16()
-+ {
-+ }
-+
-+ public UInt16(System.UInt16 val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public UInt16(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append INT16 argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ if (type.IsEnum && Enum.GetUnderlyingType (type) == typeof(System.UInt16)) {
-+ return true;
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.UInt16":
-+ case "System.UInt16&":
-+ return true; }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_U2);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_U2);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_I2);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ if (type.IsEnum) {
-+ return Enum.ToObject(type, this.val);
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.UInt16":
-+ case "System.UInt16&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.UInt16 to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out System.UInt16 value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref System.UInt16 value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/UInt32.cs dbus-0.61/mono/DBusType/UInt32.cs
---- dbus-0.61.orig/mono/DBusType/UInt32.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/UInt32.cs 2005-01-25 20:47:13.000000000 +0100
-@@ -0,0 +1,95 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// 32-bit unsigned integer.
-+ /// </summary>
-+ public class UInt32 : IDBusType
-+ {
-+ public const char Code = 'u';
-+ private System.UInt32 val;
-+
-+ private UInt32()
-+ {
-+ }
-+
-+ public UInt32(System.UInt32 val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public UInt32(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append UINT32 argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ if (type.IsEnum && Enum.GetUnderlyingType (type) == typeof(System.UInt32)) {
-+ return true;
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.UInt32":
-+ case "System.UInt32&":
-+ return true;
-+ }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_U4);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_U4);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_I4);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ if (type.IsEnum) {
-+ return Enum.ToObject(type, this.val);
-+ }
-+
-+ switch (type.ToString())
-+ {
-+ case "System.UInt32":
-+ case "System.UInt32&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.UInt32 to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out System.UInt32 value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref System.UInt32 value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/DBusType/UInt64.cs dbus-0.61/mono/DBusType/UInt64.cs
---- dbus-0.61.orig/mono/DBusType/UInt64.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/DBusType/UInt64.cs 2005-01-25 20:47:13.000000000 +0100
-@@ -0,0 +1,95 @@
-+using System;
-+using System.Runtime.InteropServices;
-+using System.Reflection.Emit;
-+
-+using DBus;
-+
-+namespace DBus.DBusType
-+{
-+ /// <summary>
-+ /// 64-bit unsigned integer.
-+ /// </summary>
-+ public class UInt64 : IDBusType
-+ {
-+ public const char Code = 't';
-+ private System.UInt64 val;
-+
-+ private UInt64()
-+ {
-+ }
-+
-+ public UInt64(System.UInt64 val, Service service)
-+ {
-+ this.val = val;
-+ }
-+
-+ public UInt64(IntPtr iter, Service service)
-+ {
-+ dbus_message_iter_get_basic (iter, out this.val);
-+ }
-+
-+ public void Append(IntPtr iter)
-+ {
-+ if (!dbus_message_iter_append_basic (iter, (int) Code, ref val))
-+ throw new ApplicationException("Failed to append UINT64 argument:" + val);
-+ }
-+
-+ public static bool Suits(System.Type type)
-+ {
-+ if (type.IsEnum && Enum.GetUnderlyingType (type) == typeof(System.UInt64)) {
-+ return true;
-+ }
-+
-+ switch (type.ToString()) {
-+ case "System.UInt64":
-+ case "System.UInt64&":
-+ return true;
-+ }
-+
-+ return false;
-+ }
-+
-+ public static void EmitMarshalIn(ILGenerator generator, Type type)
-+ {
-+ if (type.IsByRef) {
-+ generator.Emit(OpCodes.Ldind_I8);
-+ }
-+ }
-+
-+ public static void EmitMarshalOut(ILGenerator generator, Type type, bool isReturn)
-+ {
-+ generator.Emit(OpCodes.Unbox, type);
-+ generator.Emit(OpCodes.Ldind_I8);
-+ if (!isReturn) {
-+ generator.Emit(OpCodes.Stind_I8);
-+ }
-+ }
-+
-+ public object Get()
-+ {
-+ return this.val;
-+ }
-+
-+ public object Get(System.Type type)
-+ {
-+ if (type.IsEnum) {
-+ return Enum.ToObject(type, this.val);
-+ }
-+
-+ switch (type.ToString())
-+ {
-+ case "System.UInt64":
-+ case "System.UInt64&":
-+ return this.val;
-+ default:
-+ throw new ArgumentException("Cannot cast DBus.Type.UInt64 to type '" + type.ToString() + "'");
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_message_iter_get_basic (IntPtr iter, out System.UInt64 value);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_iter_append_basic (IntPtr iter, int type, ref System.UInt64 value);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/Error.cs dbus-0.61/mono/Error.cs
---- dbus-0.61.orig/mono/Error.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Error.cs 2004-08-29 20:14:30.000000000 +0200
-@@ -0,0 +1,60 @@
-+namespace DBus
-+{
-+
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+
-+ // FIXME add code to verify that size of DBus.Error
-+ // matches the C code.
-+
-+ [StructLayout (LayoutKind.Sequential)]
-+ internal struct Error
-+ {
-+ internal IntPtr name;
-+ internal IntPtr message;
-+ private int dummies;
-+ private IntPtr padding1;
-+
-+ public void Init()
-+ {
-+ dbus_error_init(ref this);
-+ }
-+
-+ public void Free()
-+ {
-+ dbus_error_free(ref this);
-+ }
-+
-+ public string Message
-+ {
-+ get
-+ {
-+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(message);
-+ }
-+ }
-+
-+ public string Name
-+ {
-+ get
-+ {
-+ return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(name);
-+ }
-+ }
-+
-+ public bool IsSet
-+ {
-+ get
-+ {
-+ return (name != IntPtr.Zero);
-+ }
-+ }
-+
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_error_init")]
-+ private extern static void dbus_error_init (ref Error error);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_error_free")]
-+ private extern static void dbus_error_free (ref Error error);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/ErrorMessage.cs dbus-0.61/mono/ErrorMessage.cs
---- dbus-0.61.orig/mono/ErrorMessage.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/ErrorMessage.cs 2004-03-26 16:25:59.000000000 +0100
-@@ -0,0 +1,45 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+
-+ public class ErrorMessage : Message
-+ {
-+ public ErrorMessage() : base(MessageType.Error)
-+ {
-+ }
-+
-+ internal ErrorMessage(IntPtr rawMessage, Service service) : base(rawMessage, service)
-+ {
-+ }
-+
-+ public ErrorMessage(Service service) : base(MessageType.Error, service)
-+ {
-+ }
-+
-+ public new string Name
-+ {
-+ get {
-+ if (this.name == null) {
-+ this.name = Marshal.PtrToStringAnsi(dbus_message_get_error_name(RawMessage));
-+ }
-+
-+ return this.name;
-+ }
-+
-+ set {
-+ if (value != this.name) {
-+ dbus_message_set_error_name(RawMessage, value);
-+ this.name = value;
-+ }
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_set_error_name(IntPtr rawMessage, string name);
-+
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_get_error_name(IntPtr rawMessage);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/Handler.cs dbus-0.61/mono/Handler.cs
---- dbus-0.61.orig/mono/Handler.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Handler.cs 2005-03-09 05:36:15.000000000 +0100
-@@ -0,0 +1,172 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+ using System.Reflection;
-+ using System.Collections;
-+
-+ internal enum Result
-+ {
-+ Handled = 0,
-+ NotYetHandled = 1,
-+ NeedMemory = 2
-+ }
-+
-+ internal class Handler
-+ {
-+ private string path = null;
-+ private Introspector introspector = null;
-+ private object handledObject = null;
-+ private DBusObjectPathVTable vTable;
-+ private Connection connection;
-+ private Service service;
-+
-+ // We need to hold extra references to these callbacks so that they don't
-+ // get garbage collected before they are called back into from unmanaged
-+ // code.
-+ private DBusObjectPathUnregisterFunction unregister_func;
-+ private DBusObjectPathMessageFunction message_func;
-+
-+ public Handler(object handledObject,
-+ string path,
-+ Service service)
-+ {
-+ Service = service;
-+ Connection = service.Connection;
-+ HandledObject = handledObject;
-+ this.path = path;
-+
-+ // Create the vTable and register the path
-+ this.unregister_func = new DBusObjectPathUnregisterFunction (Unregister_Called);
-+ this.message_func = new DBusObjectPathMessageFunction (Message_Called);
-+
-+ vTable = new DBusObjectPathVTable (this.unregister_func, this.message_func);
-+ Connection.RegisterObjectPath (Path, vTable);
-+ RegisterSignalHandlers();
-+ }
-+
-+ private void RegisterSignalHandlers()
-+ {
-+ ProxyBuilder proxyBuilder = new ProxyBuilder(Service, HandledObject.GetType(), Path);
-+
-+ foreach (DictionaryEntry interfaceEntry in this.introspector.InterfaceProxies) {
-+ InterfaceProxy interfaceProxy = (InterfaceProxy) interfaceEntry.Value;
-+ foreach (DictionaryEntry signalEntry in interfaceProxy.Signals) {
-+ EventInfo eventE = (EventInfo) signalEntry.Value;
-+ Delegate del = Delegate.CreateDelegate(eventE.EventHandlerType, proxyBuilder.GetSignalProxy(), "Proxy_" + eventE.Name);
-+ eventE.AddEventHandler(HandledObject, del);
-+ }
-+ }
-+ }
-+
-+ public object HandledObject
-+ {
-+ get {
-+ return this.handledObject;
-+ }
-+
-+ set {
-+ this.handledObject = value;
-+
-+ // Register the methods
-+ this.introspector = Introspector.GetIntrospector(value.GetType());
-+ }
-+ }
-+
-+ public void Unregister_Called(IntPtr rawConnection,
-+ IntPtr userData)
-+ {
-+ if (service != null) {
-+ service.UnregisterObject(HandledObject);
-+ }
-+
-+ path = null;
-+ }
-+
-+ private int Message_Called(IntPtr rawConnection,
-+ IntPtr rawMessage,
-+ IntPtr userData)
-+ {
-+ Message message = Message.Wrap(rawMessage, Service);
-+ Result res = Result.NotYetHandled;
-+
-+ switch (message.Type) {
-+ case Message.MessageType.MethodCall:
-+ res = HandleMethod ((MethodCall) message);
-+ break;
-+
-+ case Message.MessageType.Signal:
-+ // We're not interested in signals here because we're the ones
-+ // that generate them!
-+ break;
-+ }
-+
-+ message.Dispose ();
-+
-+ return (int) res;
-+ }
-+
-+ private Result HandleMethod(MethodCall methodCall)
-+ {
-+ methodCall.Service = service;
-+
-+ InterfaceProxy interfaceProxy = this.introspector.GetInterface(methodCall.InterfaceName);
-+ if (interfaceProxy == null || !interfaceProxy.HasMethod(methodCall.Key)) {
-+ // No such interface here.
-+ return Result.NotYetHandled;
-+ }
-+
-+ MethodInfo method = interfaceProxy.GetMethod(methodCall.Key);
-+
-+ Message.Push (methodCall);
-+
-+ // Now call the method. FIXME: Error handling
-+ object [] args = methodCall.Arguments.GetParameters(method);
-+ object retVal = method.Invoke(this.handledObject, args);
-+
-+ Message.Pop ();
-+
-+ // Create the reply and send it
-+ MethodReturn methodReturn = new MethodReturn(methodCall);
-+ methodReturn.Arguments.AppendResults(method, retVal, args);
-+ methodReturn.Send();
-+
-+ return Result.Handled;
-+ }
-+
-+ internal string Path
-+ {
-+ get
-+ {
-+ return path;
-+ }
-+ }
-+
-+ internal Connection Connection
-+ {
-+ get
-+ {
-+ return connection;
-+ }
-+
-+ set
-+ {
-+ this.connection = value;
-+ }
-+ }
-+
-+ public Service Service
-+ {
-+ get
-+ {
-+ return service;
-+ }
-+
-+ set
-+ {
-+ this.service = value;
-+ }
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/InterfaceAttribute.cs dbus-0.61/mono/InterfaceAttribute.cs
---- dbus-0.61.orig/mono/InterfaceAttribute.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/InterfaceAttribute.cs 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,23 @@
-+using System;
-+
-+namespace DBus
-+{
-+ [AttributeUsage(AttributeTargets.Class, AllowMultiple=false, Inherited=true)]
-+ public class InterfaceAttribute : Attribute
-+ {
-+ private string interfaceName;
-+
-+ public InterfaceAttribute(string interfaceName)
-+ {
-+ this.interfaceName = interfaceName;
-+ }
-+
-+ public string InterfaceName
-+ {
-+ get
-+ {
-+ return this.interfaceName;
-+ }
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/InterfaceProxy.cs dbus-0.61/mono/InterfaceProxy.cs
---- dbus-0.61.orig/mono/InterfaceProxy.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/InterfaceProxy.cs 2004-03-26 16:25:59.000000000 +0100
-@@ -0,0 +1,121 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Collections;
-+ using System.Reflection;
-+
-+ internal class InterfaceProxy
-+ {
-+ private static Hashtable interfaceProxies = new Hashtable();
-+ private Hashtable methods = null;
-+ private Hashtable signals = null;
-+
-+ private string interfaceName;
-+
-+ private InterfaceProxy(Type type)
-+ {
-+ object[] attributes = type.GetCustomAttributes(typeof(InterfaceAttribute), true);
-+ InterfaceAttribute interfaceAttribute = (InterfaceAttribute) attributes[0];
-+ this.interfaceName = interfaceAttribute.InterfaceName;
-+ AddMethods(type);
-+ AddSignals(type);
-+ }
-+
-+ // Add all the events with Signal attributes
-+ private void AddSignals(Type type)
-+ {
-+ this.signals = new Hashtable();
-+ foreach (EventInfo signal in type.GetEvents(BindingFlags.Public |
-+ BindingFlags.Instance |
-+ BindingFlags.DeclaredOnly)) {
-+ object[] attributes = signal.GetCustomAttributes(typeof(SignalAttribute), false);
-+ if (attributes.GetLength(0) > 0) {
-+ MethodInfo invoke = signal.EventHandlerType.GetMethod("Invoke");
-+ signals.Add(signal.Name + " " + GetSignature(invoke), signal);
-+ }
-+ }
-+ }
-+
-+ // Add all the methods with Method attributes
-+ private void AddMethods(Type type)
-+ {
-+ this.methods = new Hashtable();
-+ foreach (MethodInfo method in type.GetMethods(BindingFlags.Public |
-+ BindingFlags.Instance |
-+ BindingFlags.DeclaredOnly)) {
-+ object[] attributes = method.GetCustomAttributes(typeof(MethodAttribute), false);
-+ if (attributes.GetLength(0) > 0) {
-+ methods.Add(method.Name + " " + GetSignature(method), method);
-+ }
-+ }
-+ }
-+
-+
-+ public static InterfaceProxy GetInterface(Type type)
-+ {
-+ if (!interfaceProxies.Contains(type)) {
-+ interfaceProxies[type] = new InterfaceProxy(type);
-+ }
-+
-+ return (InterfaceProxy) interfaceProxies[type];
-+ }
-+
-+ public bool HasMethod(string key)
-+ {
-+ return this.Methods.Contains(key);
-+ }
-+
-+ public bool HasSignal(string key)
-+ {
-+ return this.Signals.Contains(key);
-+ }
-+
-+ public EventInfo GetSignal(string key)
-+ {
-+ return (EventInfo) this.Signals[key];
-+ }
-+
-+ public MethodInfo GetMethod(string key)
-+ {
-+ return (MethodInfo) this.Methods[key];
-+ }
-+
-+ public static string GetSignature(MethodInfo method)
-+ {
-+ ParameterInfo[] pars = method.GetParameters();
-+ string key = "";
-+
-+ foreach (ParameterInfo par in pars) {
-+ if (!par.IsOut) {
-+ Type dbusType = Arguments.MatchType(par.ParameterType);
-+ key += Arguments.GetCode(dbusType);
-+ }
-+ }
-+
-+ return key;
-+ }
-+
-+ public Hashtable Methods
-+ {
-+ get {
-+ return this.methods;
-+ }
-+ }
-+
-+ public Hashtable Signals
-+ {
-+ get {
-+ return this.signals;
-+ }
-+ }
-+
-+ public string InterfaceName
-+ {
-+ get {
-+ return this.interfaceName;
-+ }
-+ }
-+ }
-+}
-+
-+
-diff -Naur dbus-0.61.orig/mono/Introspector.cs dbus-0.61/mono/Introspector.cs
---- dbus-0.61.orig/mono/Introspector.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Introspector.cs 2004-03-23 19:07:48.000000000 +0100
-@@ -0,0 +1,81 @@
-+namespace DBus
-+{
-+
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+ using System.Collections;
-+ using System.Reflection;
-+
-+ internal class Introspector
-+ {
-+ private Type type;
-+ private static Hashtable introspectors = new Hashtable();
-+ private Hashtable interfaceProxies = null;
-+
-+ public static Introspector GetIntrospector(Type type)
-+ {
-+ if (!introspectors.Contains(type)) {
-+ introspectors[type] = new Introspector(type);
-+ }
-+
-+ return (Introspector) introspectors[type];
-+ }
-+
-+ private Introspector(Type type)
-+ {
-+ interfaceProxies = new Hashtable();
-+ AddType(type);
-+ this.type = type;
-+ }
-+
-+ private void AddType(Type type)
-+ {
-+ if (type == typeof(object)) {
-+ // Base case
-+ return;
-+ }
-+
-+ object[] attributes = type.GetCustomAttributes(typeof(InterfaceAttribute), false);
-+ if (attributes.Length >= 1) {
-+ // This is a D-BUS interface so add it to the hashtable
-+ InterfaceProxy interfaceProxy = InterfaceProxy.GetInterface(type);
-+ interfaceProxies.Add(interfaceProxy.InterfaceName, interfaceProxy);
-+ }
-+
-+ AddType(type.BaseType);
-+ }
-+
-+ public InterfaceProxy GetInterface(string interfaceName) {
-+ if (interfaceProxies.Contains(interfaceName)) {
-+ return (InterfaceProxy) interfaceProxies[interfaceName];
-+ } else {
-+ return null;
-+ }
-+ }
-+
-+ public Hashtable InterfaceProxies
-+ {
-+ get {
-+ return this.interfaceProxies;
-+ }
-+ }
-+
-+ public ConstructorInfo Constructor
-+ {
-+ get {
-+ ConstructorInfo ret = this.type.GetConstructor(new Type[0]);
-+ if (ret != null) {
-+ return ret;
-+ } else {
-+ return typeof(object).GetConstructor(new Type[0]);
-+ }
-+ }
-+ }
-+
-+ public override string ToString()
-+ {
-+ return this.type.ToString();
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/Makefile.am dbus-0.61/mono/Makefile.am
---- dbus-0.61.orig/mono/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Makefile.am 2005-09-08 20:54:42.000000000 +0200
-@@ -0,0 +1,76 @@
-+SUBDIRS=. doc example
-+
-+TARGET=$(ASSEMBLY)
-+NOINST_EXES=test-dbus-sharp.exe
-+ASSEMBLY_NAME=dbus-sharp
-+GACUTIL=gacutil
-+
-+DBUS_SHARP_FILES= \
-+ $(srcdir)/Arguments.cs \
-+ $(srcdir)/Bus.cs \
-+ $(srcdir)/BusDriver.cs \
-+ $(srcdir)/Connection.cs \
-+ $(srcdir)/DBusException.cs \
-+ $(srcdir)/Error.cs \
-+ $(srcdir)/ErrorMessage.cs \
-+ $(srcdir)/Handler.cs \
-+ $(srcdir)/InterfaceAttribute.cs \
-+ $(srcdir)/InterfaceProxy.cs \
-+ $(srcdir)/Introspector.cs \
-+ $(srcdir)/Message.cs \
-+ $(srcdir)/MethodAttribute.cs \
-+ $(srcdir)/MethodCall.cs \
-+ $(srcdir)/MethodReturn.cs \
-+ $(srcdir)/ProxyBuilder.cs \
-+ $(srcdir)/Server.cs \
-+ $(srcdir)/Service.cs \
-+ $(srcdir)/Signal.cs \
-+ $(srcdir)/SignalAttribute.cs \
-+ $(srcdir)/DBusType/IDBusType.cs \
-+ $(srcdir)/DBusType/Array.cs \
-+ $(srcdir)/DBusType/Boolean.cs \
-+ $(srcdir)/DBusType/Byte.cs \
-+ $(srcdir)/DBusType/Double.cs \
-+ $(srcdir)/DBusType/Int16.cs \
-+ $(srcdir)/DBusType/Int32.cs \
-+ $(srcdir)/DBusType/Int64.cs \
-+ $(srcdir)/DBusType/ObjectPath.cs \
-+ $(srcdir)/DBusType/String.cs \
-+ $(srcdir)/DBusType/UInt16.cs \
-+ $(srcdir)/DBusType/UInt32.cs \
-+ $(srcdir)/DBusType/UInt64.cs
-+
-+TEST_DBUS_SHARP_FILES=Test.cs
-+
-+ASSEMBLY=$(ASSEMBLY_NAME).dll
-+
-+DISTCLEANFILES=AssemblyInfo.cs $(ASSEMBLY).config $(ASSEMBLY) $(ASSEMBLY).mdb
-+
-+all-am: $(TARGET)
-+
-+dbus-sharp.dll: $(DBUS_SHARP_FILES)
-+ $(CSC) --debug --unsafe --target library -o dbus-sharp.dll $(DBUS_SHARP_FILES) AssemblyInfo.cs
-+
-+test-dbus-sharp.exe: $(TEST_DBUS_SHARP_FILES)
-+ $(CSC) --debug --unsafe --target exe -L . -r dbus-sharp.dll -pkg:gtk-sharp -o test-dbus-sharp.exe $(TEST_DBUS_SHARP_FILES)
-+
-+clean:
-+ rm -f $(TARGET) $(TARGET).mdb $(NOINST_EXES) $(NOINST_EXES:%=%.mdb)
-+
-+install-data-local:
-+ @if test -n '$(TARGET)'; then \
-+ echo "$(GACUTIL) /i $(ASSEMBLY) /f /package dbus-sharp /gacdir $(DESTDIR)$(libdir)"; \
-+ $(GACUTIL) /i $(ASSEMBLY) /f /package dbus-sharp /gacdir $(libdir) /root $(DESTDIR)$(libdir) || exit 1; \
-+ fi
-+
-+uninstall-local:
-+ @if test -n '$(TARGET)'; then \
-+ echo "$(GACUTIL) /u $(ASSEMBLY_NAME) /package dbus-sharp /gacdir $(DESTDIR)$(libdir)"; \
-+ $(GACUTIL) /u $(ASSEMBLY_NAME) /package dbus-sharp /gacdir $(libdir) /root $(DESTDIR)$(libdir) || exit 1; \
-+ fi
-+
-+EXTRA_DIST= \
-+ $(DBUS_SHARP_FILES) \
-+ AssemblyInfo.cs.in \
-+ $(ASSEMBLY).config.in \
-+ dbus-sharp.snk
-diff -Naur dbus-0.61.orig/mono/Makefile.in dbus-0.61/mono/Makefile.in
---- dbus-0.61.orig/mono/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Makefile.in 2006-02-27 22:34:34.000000000 +0100
-@@ -0,0 +1,702 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = mono
-+DIST_COMMON = README $(srcdir)/AssemblyInfo.cs.in \
-+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-+ $(srcdir)/dbus-sharp.dll.config.in TODO
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES = AssemblyInfo.cs dbus-sharp.dll.config
-+SOURCES =
-+DIST_SOURCES =
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+ETAGS = etags
-+CTAGS = ctags
-+DIST_SUBDIRS = $(SUBDIRS)
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = gacutil
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+SUBDIRS = . doc example
-+TARGET = $(ASSEMBLY)
-+NOINST_EXES = test-dbus-sharp.exe
-+ASSEMBLY_NAME = dbus-sharp
-+DBUS_SHARP_FILES = \
-+ $(srcdir)/Arguments.cs \
-+ $(srcdir)/Bus.cs \
-+ $(srcdir)/BusDriver.cs \
-+ $(srcdir)/Connection.cs \
-+ $(srcdir)/DBusException.cs \
-+ $(srcdir)/Error.cs \
-+ $(srcdir)/ErrorMessage.cs \
-+ $(srcdir)/Handler.cs \
-+ $(srcdir)/InterfaceAttribute.cs \
-+ $(srcdir)/InterfaceProxy.cs \
-+ $(srcdir)/Introspector.cs \
-+ $(srcdir)/Message.cs \
-+ $(srcdir)/MethodAttribute.cs \
-+ $(srcdir)/MethodCall.cs \
-+ $(srcdir)/MethodReturn.cs \
-+ $(srcdir)/ProxyBuilder.cs \
-+ $(srcdir)/Server.cs \
-+ $(srcdir)/Service.cs \
-+ $(srcdir)/Signal.cs \
-+ $(srcdir)/SignalAttribute.cs \
-+ $(srcdir)/DBusType/IDBusType.cs \
-+ $(srcdir)/DBusType/Array.cs \
-+ $(srcdir)/DBusType/Boolean.cs \
-+ $(srcdir)/DBusType/Byte.cs \
-+ $(srcdir)/DBusType/Double.cs \
-+ $(srcdir)/DBusType/Int16.cs \
-+ $(srcdir)/DBusType/Int32.cs \
-+ $(srcdir)/DBusType/Int64.cs \
-+ $(srcdir)/DBusType/ObjectPath.cs \
-+ $(srcdir)/DBusType/String.cs \
-+ $(srcdir)/DBusType/UInt16.cs \
-+ $(srcdir)/DBusType/UInt32.cs \
-+ $(srcdir)/DBusType/UInt64.cs
-+
-+TEST_DBUS_SHARP_FILES = Test.cs
-+ASSEMBLY = $(ASSEMBLY_NAME).dll
-+DISTCLEANFILES = AssemblyInfo.cs $(ASSEMBLY).config $(ASSEMBLY) $(ASSEMBLY).mdb
-+EXTRA_DIST = \
-+ $(DBUS_SHARP_FILES) \
-+ AssemblyInfo.cs.in \
-+ $(ASSEMBLY).config.in \
-+ dbus-sharp.snk
-+
-+all: all-recursive
-+
-+.SUFFIXES:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mono/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu mono/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+AssemblyInfo.cs: $(top_builddir)/config.status $(srcdir)/AssemblyInfo.cs.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-+dbus-sharp.dll.config: $(top_builddir)/config.status $(srcdir)/dbus-sharp.dll.config.in
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ $(mkdir_p) $(distdir)/$(srcdir) $(distdir)/$(srcdir)/DBusType
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-recursive
-+all-am: Makefile
-+installdirs: installdirs-recursive
-+installdirs-am:
-+install: install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-libtool \
-+ distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am: install-data-local
-+
-+install-exec-am:
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am uninstall-local
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
-+ clean clean-generic clean-libtool clean-recursive ctags \
-+ ctags-recursive distclean distclean-generic distclean-libtool \
-+ distclean-recursive distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-data-local install-exec \
-+ install-exec-am install-info install-info-am install-man \
-+ install-strip installcheck installcheck-am installdirs \
-+ installdirs-am maintainer-clean maintainer-clean-generic \
-+ maintainer-clean-recursive mostlyclean mostlyclean-generic \
-+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
-+ tags tags-recursive uninstall uninstall-am uninstall-info-am \
-+ uninstall-local
-+
-+
-+all-am: $(TARGET)
-+
-+dbus-sharp.dll: $(DBUS_SHARP_FILES)
-+ $(CSC) --debug --unsafe --target library -o dbus-sharp.dll $(DBUS_SHARP_FILES) AssemblyInfo.cs
-+
-+test-dbus-sharp.exe: $(TEST_DBUS_SHARP_FILES)
-+ $(CSC) --debug --unsafe --target exe -L . -r dbus-sharp.dll -pkg:gtk-sharp -o test-dbus-sharp.exe $(TEST_DBUS_SHARP_FILES)
-+
-+clean:
-+ rm -f $(TARGET) $(TARGET).mdb $(NOINST_EXES) $(NOINST_EXES:%=%.mdb)
-+
-+install-data-local:
-+ @if test -n '$(TARGET)'; then \
-+ echo "$(GACUTIL) /i $(ASSEMBLY) /f /package dbus-sharp /gacdir $(DESTDIR)$(libdir)"; \
-+ $(GACUTIL) /i $(ASSEMBLY) /f /package dbus-sharp /gacdir $(libdir) /root $(DESTDIR)$(libdir) || exit 1; \
-+ fi
-+
-+uninstall-local:
-+ @if test -n '$(TARGET)'; then \
-+ echo "$(GACUTIL) /u $(ASSEMBLY_NAME) /package dbus-sharp /gacdir $(DESTDIR)$(libdir)"; \
-+ $(GACUTIL) /u $(ASSEMBLY_NAME) /package dbus-sharp /gacdir $(libdir) /root $(DESTDIR)$(libdir) || exit 1; \
-+ fi
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/mono/Message.cs dbus-0.61/mono/Message.cs
---- dbus-0.61.orig/mono/Message.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Message.cs 2005-03-09 05:36:15.000000000 +0100
-@@ -0,0 +1,437 @@
-+namespace DBus
-+{
-+
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+ using System.Collections;
-+
-+ public class Message : IDisposable
-+ {
-+ private static Stack stack = new Stack ();
-+
-+ static public Message Current {
-+ get
-+ {
-+ return stack.Count > 0 ? (Message) stack.Peek () : null;
-+ }
-+ }
-+
-+ static internal void Push (Message message)
-+ {
-+ stack.Push (message);
-+ }
-+
-+ static internal void Pop ()
-+ {
-+ stack.Pop ();
-+ }
-+
-+
-+ /// <summary>
-+ /// A pointer to the underlying Message structure
-+ /// </summary>
-+ private IntPtr rawMessage;
-+
-+ /// <summary>
-+ /// The current slot number
-+ /// </summary>
-+ private static int slot = -1;
-+
-+ // Keep in sync with C
-+ public enum MessageType
-+ {
-+ Invalid = 0,
-+ MethodCall = 1,
-+ MethodReturn = 2,
-+ Error = 3,
-+ Signal = 4
-+ }
-+
-+ private Arguments arguments = null;
-+
-+ protected Service service = null;
-+ protected string pathName = null;
-+ protected string interfaceName = null;
-+ protected string name = null;
-+ private string key= null;
-+
-+ protected Message()
-+ {
-+ // An empty constructor for the sake of sub-classes which know how to construct theirselves.
-+ }
-+
-+ protected Message(IntPtr rawMessage, Service service)
-+ {
-+ RawMessage = rawMessage;
-+ this.service = service;
-+ }
-+
-+ protected Message(MessageType messageType)
-+ {
-+ // the assignment bumps the refcount
-+ RawMessage = dbus_message_new((int) messageType);
-+
-+ if (RawMessage == IntPtr.Zero) {
-+ throw new OutOfMemoryException();
-+ }
-+
-+ dbus_message_unref(RawMessage);
-+ }
-+
-+ protected Message(MessageType messageType, Service service) : this(messageType)
-+ {
-+ this.service = service;
-+ }
-+
-+ public void Dispose()
-+ {
-+ Dispose(true);
-+ GC.SuppressFinalize(this);
-+ }
-+
-+ public void Dispose (bool disposing)
-+ {
-+ if (disposing) {
-+ if (this.arguments != null)
-+ this.arguments.Dispose ();
-+ }
-+
-+ RawMessage = IntPtr.Zero; // free the native object
-+ }
-+
-+ ~Message()
-+ {
-+ Dispose (false);
-+ }
-+
-+ public static Message Wrap(IntPtr rawMessage, Service service)
-+ {
-+ if (slot > -1) {
-+ // If we already have a Message object associated with this rawMessage then return it
-+ IntPtr rawThis = dbus_message_get_data(rawMessage, slot);
-+ if (rawThis != IntPtr.Zero)
-+ return (DBus.Message) ((GCHandle)rawThis).Target;
-+ }
-+ // If it doesn't exist then create a new Message around it
-+ Message message = null;
-+ MessageType messageType = (MessageType) dbus_message_get_type(rawMessage);
-+
-+ switch (messageType) {
-+ case MessageType.Signal:
-+ message = new Signal(rawMessage, service);
-+ break;
-+ case MessageType.MethodCall:
-+ message = new MethodCall(rawMessage, service);
-+ break;
-+ case MessageType.MethodReturn:
-+ message = new MethodReturn(rawMessage, service);
-+ break;
-+ case MessageType.Error:
-+ message = new ErrorMessage(rawMessage, service);
-+ break;
-+ default:
-+ throw new ApplicationException("Unknown message type to wrap: " + messageType);
-+ }
-+
-+ return message;
-+ }
-+
-+ internal IntPtr RawMessage
-+ {
-+ get
-+ {
-+ return rawMessage;
-+ }
-+ set
-+ {
-+ if (value == rawMessage)
-+ return;
-+
-+ if (rawMessage != IntPtr.Zero)
-+ {
-+ // Get the reference to this
-+ IntPtr rawThis = dbus_message_get_data(rawMessage, Slot);
-+ Debug.Assert (rawThis != IntPtr.Zero);
-+
-+ // Blank over the reference
-+ dbus_message_set_data(rawMessage, Slot, IntPtr.Zero, IntPtr.Zero);
-+
-+ // Free the reference
-+ ((GCHandle) rawThis).Free();
-+
-+ // Unref the connection
-+ dbus_message_unref(rawMessage);
-+ }
-+
-+ this.rawMessage = value;
-+
-+ if (rawMessage != IntPtr.Zero)
-+ {
-+ GCHandle rawThis;
-+
-+ dbus_message_ref(rawMessage);
-+
-+ // We store a weak reference to the C# object on the C object
-+ rawThis = GCHandle.Alloc(this, GCHandleType.WeakTrackResurrection);
-+
-+ dbus_message_set_data(rawMessage, Slot, (IntPtr) rawThis, IntPtr.Zero);
-+ }
-+ }
-+ }
-+
-+ public void Send(ref int serial)
-+ {
-+ if (!dbus_connection_send (Service.Connection.RawConnection, RawMessage, ref serial))
-+ throw new OutOfMemoryException ();
-+
-+ Service.Connection.Flush();
-+ }
-+
-+ public void Send()
-+ {
-+ int ignored = 0;
-+ Send(ref ignored);
-+ }
-+
-+ public void SendWithReply()
-+ {
-+ IntPtr rawPendingCall = IntPtr.Zero;
-+
-+ if (!dbus_connection_send_with_reply (Service.Connection.RawConnection, RawMessage, rawPendingCall, Service.Connection.Timeout))
-+ throw new OutOfMemoryException();
-+ }
-+
-+ public MethodReturn SendWithReplyAndBlock()
-+ {
-+ Error error = new Error();
-+ error.Init();
-+
-+ IntPtr rawMessage = dbus_connection_send_with_reply_and_block(Service.Connection.RawConnection,
-+ RawMessage,
-+ Service.Connection.Timeout,
-+ ref error);
-+
-+ if (rawMessage != IntPtr.Zero) {
-+ MethodReturn methodReturn = new MethodReturn(rawMessage, Service);
-+ // Ownership of a ref is passed onto us from
-+ // dbus_connection_send_with_reply_and_block(). It gets reffed as
-+ // a result of being passed into the MethodReturn ctor, so unref
-+ // the extra one here.
-+ dbus_message_unref (rawMessage);
-+
-+ return methodReturn;
-+ } else {
-+ throw new DBusException(error);
-+ }
-+ }
-+
-+ public MessageType Type
-+ {
-+ get
-+ {
-+ return (MessageType) dbus_message_get_type(RawMessage);
-+ }
-+ }
-+
-+ public Service Service
-+ {
-+ set
-+ {
-+ if (this.service != null && (value.Name != this.service.Name)) {
-+ if (!dbus_message_set_destination(RawMessage, value.Name)) {
-+ throw new OutOfMemoryException();
-+ }
-+ }
-+
-+ this.service = value;
-+ }
-+ get
-+ {
-+ return this.service;
-+ }
-+ }
-+
-+ protected virtual string PathName
-+ {
-+ set
-+ {
-+ if (value != this.pathName)
-+ {
-+ if (!dbus_message_set_path(RawMessage, value)) {
-+ throw new OutOfMemoryException();
-+ }
-+
-+ this.pathName = value;
-+ }
-+ }
-+ get
-+ {
-+ if (this.pathName == null) {
-+ this.pathName = Marshal.PtrToStringAnsi(dbus_message_get_path(RawMessage));
-+ }
-+
-+ return this.pathName;
-+ }
-+ }
-+
-+ protected virtual string InterfaceName
-+ {
-+ set
-+ {
-+ if (value != this.interfaceName)
-+ {
-+ dbus_message_set_interface (RawMessage, value);
-+ this.interfaceName = value;
-+ }
-+ }
-+ get
-+ {
-+ if (this.interfaceName == null) {
-+ this.interfaceName = Marshal.PtrToStringAnsi(dbus_message_get_interface(RawMessage));
-+ }
-+
-+ return this.interfaceName;
-+ }
-+ }
-+
-+ protected virtual string Name
-+ {
-+ set {
-+ if (value != this.name) {
-+ dbus_message_set_member(RawMessage, value);
-+ this.name = value;
-+ }
-+ }
-+ get {
-+ if (this.name == null) {
-+ this.name = Marshal.PtrToStringAnsi(dbus_message_get_member(RawMessage));
-+ }
-+
-+ return this.name;
-+ }
-+ }
-+
-+ public string Key
-+ {
-+ get {
-+ if (this.key == null) {
-+ this.key = Name + " " + Arguments;
-+ }
-+
-+ return this.key;
-+ }
-+ }
-+
-+ public Arguments Arguments
-+ {
-+ get
-+ {
-+ if (this.arguments == null) {
-+ this.arguments = new Arguments(this);
-+ }
-+
-+ return this.arguments;
-+ }
-+ }
-+
-+ public string Sender
-+ {
-+ get
-+ {
-+ return Marshal.PtrToStringAnsi(dbus_message_get_sender(RawMessage));
-+ }
-+ }
-+
-+ public string Destination
-+ {
-+ get
-+ {
-+ return Marshal.PtrToStringAnsi(dbus_message_get_destination(RawMessage));
-+ }
-+ }
-+
-+ protected int Slot
-+ {
-+ get
-+ {
-+ if (slot == -1)
-+ {
-+ // We need to initialize the slot
-+ if (!dbus_message_allocate_data_slot (ref slot))
-+ throw new OutOfMemoryException ();
-+
-+ Debug.Assert (slot >= 0);
-+ }
-+
-+ return slot;
-+ }
-+ }
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_message_new")]
-+ protected extern static IntPtr dbus_message_new (int messageType);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_message_unref")]
-+ protected extern static void dbus_message_unref (IntPtr ptr);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_message_ref")]
-+ protected extern static void dbus_message_ref (IntPtr ptr);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_message_allocate_data_slot")]
-+ protected extern static bool dbus_message_allocate_data_slot (ref int slot);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_message_free_data_slot")]
-+ protected extern static void dbus_message_free_data_slot (ref int slot);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_message_set_data")]
-+ protected extern static bool dbus_message_set_data (IntPtr ptr,
-+ int slot,
-+ IntPtr data,
-+ IntPtr free_data_func);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_message_get_data")]
-+ protected extern static IntPtr dbus_message_get_data (IntPtr ptr,
-+ int slot);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_connection_send")]
-+ private extern static bool dbus_connection_send (IntPtr ptr,
-+ IntPtr message,
-+ ref int client_serial);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_connection_send_with_reply")]
-+ private extern static bool dbus_connection_send_with_reply (IntPtr rawConnection, IntPtr rawMessage, IntPtr rawPendingCall, int timeout);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_connection_send_with_reply_and_block")]
-+ private extern static IntPtr dbus_connection_send_with_reply_and_block (IntPtr rawConnection, IntPtr message, int timeout, ref Error error);
-+
-+ [DllImport("dbus-1")]
-+ private extern static int dbus_message_get_type(IntPtr rawMessage);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_set_path(IntPtr rawMessage, string pathName);
-+
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_get_path(IntPtr rawMessage);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_set_interface (IntPtr rawMessage, string interfaceName);
-+
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_get_interface(IntPtr rawMessage);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_set_member(IntPtr rawMessage, string name);
-+
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_get_member(IntPtr rawMessage);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_message_set_destination(IntPtr rawMessage, string serviceName);
-+
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_get_destination(IntPtr rawMessage);
-+
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_get_sender(IntPtr rawMessage);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/MethodAttribute.cs dbus-0.61/mono/MethodAttribute.cs
---- dbus-0.61.orig/mono/MethodAttribute.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/MethodAttribute.cs 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,12 @@
-+using System;
-+
-+namespace DBus
-+{
-+ [AttributeUsage(AttributeTargets.Method, AllowMultiple=false, Inherited=true)]
-+ public class MethodAttribute : Attribute
-+ {
-+ public MethodAttribute()
-+ {
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/MethodCall.cs dbus-0.61/mono/MethodCall.cs
---- dbus-0.61.orig/mono/MethodCall.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/MethodCall.cs 2004-08-29 20:14:30.000000000 +0200
-@@ -0,0 +1,80 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+
-+ public class MethodCall : Message
-+ {
-+ public MethodCall() : base(MessageType.MethodCall)
-+ {
-+ }
-+
-+ internal MethodCall(IntPtr rawMessage, Service service) : base(rawMessage, service)
-+ {
-+ }
-+
-+ public MethodCall(Service service) : base(MessageType.MethodCall, service)
-+ {
-+ }
-+
-+ public MethodCall(Service service, string pathName, string interfaceName, string name)
-+ {
-+ this.service = service;
-+
-+ RawMessage = dbus_message_new_method_call(service.Name, pathName, interfaceName, name);
-+
-+ if (RawMessage == IntPtr.Zero) {
-+ throw new OutOfMemoryException();
-+ }
-+
-+ this.pathName = pathName;
-+ this.interfaceName = interfaceName;
-+ this.name = name;
-+
-+ dbus_message_unref(RawMessage);
-+ }
-+
-+ public new string PathName
-+ {
-+ get
-+ {
-+ return base.PathName;
-+ }
-+
-+ set
-+ {
-+ base.PathName = value;
-+ }
-+ }
-+
-+ public new string InterfaceName
-+ {
-+ get
-+ {
-+ return base.InterfaceName;
-+ }
-+
-+ set
-+ {
-+ base.InterfaceName = value;
-+ }
-+ }
-+
-+ public new string Name
-+ {
-+ get
-+ {
-+ return base.Name;
-+ }
-+
-+ set
-+ {
-+ base.Name = value;
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_new_method_call(string serviceName, string pathName, string interfaceName, string name);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/MethodReturn.cs dbus-0.61/mono/MethodReturn.cs
---- dbus-0.61.orig/mono/MethodReturn.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/MethodReturn.cs 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,57 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+
-+ public class MethodReturn : Message
-+ {
-+ private MethodReturn() : base(MessageType.MethodReturn)
-+ {
-+ }
-+
-+ internal MethodReturn(IntPtr rawMessage, Service service) : base(rawMessage, service)
-+ {
-+ }
-+
-+ public MethodReturn(MethodCall methodCall)
-+ {
-+ this.service = methodCall.Service;
-+
-+ RawMessage = dbus_message_new_method_return(methodCall.RawMessage);
-+
-+ if (RawMessage == IntPtr.Zero) {
-+ throw new OutOfMemoryException();
-+ }
-+
-+ dbus_message_unref(RawMessage);
-+ }
-+
-+ public new string PathName
-+ {
-+ get
-+ {
-+ return base.PathName;
-+ }
-+ }
-+
-+ public new string InterfaceName
-+ {
-+ get
-+ {
-+ return base.InterfaceName;
-+ }
-+ }
-+
-+ public new string Name
-+ {
-+ get
-+ {
-+ return base.Name;
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_new_method_return(IntPtr rawMessage);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/ProxyBuilder.cs dbus-0.61/mono/ProxyBuilder.cs
---- dbus-0.61.orig/mono/ProxyBuilder.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/ProxyBuilder.cs 2005-03-16 00:30:55.000000000 +0100
-@@ -0,0 +1,608 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+ using System.Collections;
-+ using System.Threading;
-+ using System.Reflection;
-+ using System.Reflection.Emit;
-+
-+ internal class ProxyBuilder
-+ {
-+ private Service service= null;
-+ private string pathName = null;
-+ private Type type = null;
-+ private Introspector introspector = null;
-+
-+ private static MethodInfo Service_NameMI = typeof(Service).GetMethod("get_Name",
-+ new Type[0]);
-+ private static MethodInfo Service_ConnectionMI = typeof(Service).GetMethod("get_Connection",
-+ new Type[0]);
-+ private static MethodInfo Service_AddSignalCalledMI = typeof(Service).GetMethod("add_SignalCalled",
-+ new Type[] {typeof(Service.SignalCalledHandler)});
-+ private static MethodInfo Service_RemoveSignalCalledMI = typeof(Service).GetMethod("remove_SignalCalled",
-+ new Type[] {typeof(Service.SignalCalledHandler)});
-+ private static MethodInfo Signal_PathNameMI = typeof(Signal).GetMethod("get_PathName",
-+ new Type[0]);
-+ private static MethodInfo Message_ArgumentsMI = typeof(Message).GetMethod("get_Arguments",
-+ new Type[0]);
-+ private static MethodInfo Message_KeyMI = typeof(Message).GetMethod("get_Key",
-+ new Type[0]);
-+ private static MethodInfo Arguments_InitAppendingMI = typeof(Arguments).GetMethod("InitAppending",
-+ new Type[0]);
-+ private static MethodInfo Arguments_AppendMI = typeof(Arguments).GetMethod("Append",
-+ new Type[] {typeof(DBusType.IDBusType)});
-+ private static MethodInfo Message_SendWithReplyAndBlockMI = typeof(Message).GetMethod("SendWithReplyAndBlock",
-+ new Type[0]);
-+ private static MethodInfo Message_SendMI = typeof(Message).GetMethod("Send",
-+ new Type[0]);
-+ private static MethodInfo Message_DisposeMI = typeof(Message).GetMethod("Dispose",
-+ new Type[0]);
-+ private static MethodInfo Arguments_GetEnumeratorMI = typeof(Arguments).GetMethod("GetEnumerator",
-+ new Type[0]);
-+ private static MethodInfo IEnumerator_MoveNextMI = typeof(System.Collections.IEnumerator).GetMethod("MoveNext",
-+ new Type[0]);
-+ private static MethodInfo IEnumerator_CurrentMI = typeof(System.Collections.IEnumerator).GetMethod("get_Current",
-+ new Type[0]);
-+ private static MethodInfo Type_GetTypeFromHandleMI = typeof(System.Type).GetMethod("GetTypeFromHandle",
-+ new Type[] {typeof(System.RuntimeTypeHandle)});
-+ private static MethodInfo IDBusType_GetMI = typeof(DBusType.IDBusType).GetMethod("Get",
-+ new Type[] {typeof(System.Type)});
-+ private static ConstructorInfo MethodCall_C = typeof(MethodCall).GetConstructor(new Type[] {typeof(Service),
-+ typeof(string),
-+ typeof(string),
-+ typeof(string)});
-+ private static ConstructorInfo Signal_C = typeof(Signal).GetConstructor(new Type[] {typeof(Service),
-+ typeof(string),
-+ typeof(string),
-+ typeof(string)});
-+ private static ConstructorInfo Service_SignalCalledHandlerC = typeof(Service.SignalCalledHandler).GetConstructor(new Type[] {typeof(object),
-+ typeof(System.IntPtr)});
-+ private static MethodInfo String_opEqualityMI = typeof(System.String).GetMethod("op_Equality",
-+ new Type[] {typeof(string),
-+ typeof(string)});
-+ private static MethodInfo MulticastDelegate_opInequalityMI = typeof(System.MulticastDelegate).GetMethod("op_Inequality",
-+ new Type[] {typeof(System.MulticastDelegate),
-+ typeof(System.MulticastDelegate)});
-+
-+
-+ public ProxyBuilder(Service service, Type type, string pathName)
-+ {
-+ this.service = service;
-+ this.pathName = pathName;
-+ this.type = type;
-+ this.introspector = Introspector.GetIntrospector(type);
-+ }
-+
-+ private MethodInfo BuildSignalCalled(ref TypeBuilder typeB, FieldInfo serviceF, FieldInfo pathF)
-+ {
-+ Type[] parTypes = {typeof(Signal)};
-+ MethodBuilder methodBuilder = typeB.DefineMethod("Service_SignalCalled",
-+ MethodAttributes.Private |
-+ MethodAttributes.HideBySig,
-+ typeof(void),
-+ parTypes);
-+
-+ ILGenerator generator = methodBuilder.GetILGenerator();
-+
-+ LocalBuilder enumeratorL = generator.DeclareLocal(typeof(System.Collections.IEnumerator));
-+ enumeratorL.SetLocalSymInfo("enumerator");
-+
-+ Label wrongPath = generator.DefineLabel();
-+ //generator.EmitWriteLine("if (signal.PathName == pathName) {");
-+ generator.Emit(OpCodes.Ldarg_1);
-+ generator.EmitCall(OpCodes.Callvirt, Signal_PathNameMI, null);
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldfld, pathF);
-+ generator.EmitCall(OpCodes.Call, String_opEqualityMI, null);
-+ generator.Emit(OpCodes.Brfalse, wrongPath);
-+
-+ int localOffset = 1;
-+
-+ foreach (DictionaryEntry interfaceEntry in this.introspector.InterfaceProxies) {
-+ InterfaceProxy interfaceProxy = (InterfaceProxy) interfaceEntry.Value;
-+ foreach (DictionaryEntry signalEntry in interfaceProxy.Signals) {
-+ EventInfo eventE = (EventInfo) signalEntry.Value;
-+ // This is really cheeky since we need to grab the event as a private field.
-+ FieldInfo eventF = this.type.GetField(eventE.Name,
-+ BindingFlags.NonPublic|
-+ BindingFlags.Instance);
-+
-+ MethodInfo eventHandler_InvokeMI = eventE.EventHandlerType.GetMethod("Invoke");
-+
-+ ParameterInfo[] pars = eventHandler_InvokeMI.GetParameters();
-+ parTypes = new Type[pars.Length];
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ parTypes[parN] = pars[parN].ParameterType;
-+ LocalBuilder parmL = generator.DeclareLocal(parTypes[parN]);
-+ parmL.SetLocalSymInfo(pars[parN].Name);
-+ }
-+
-+ Label skip = generator.DefineLabel();
-+ //generator.EmitWriteLine(" if (SelectedIndexChanged != null) {");
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldfld, eventF);
-+ generator.Emit(OpCodes.Ldnull);
-+ generator.EmitCall(OpCodes.Call, MulticastDelegate_opInequalityMI, null);
-+ generator.Emit(OpCodes.Brfalse, skip);
-+
-+ //generator.EmitWriteLine(" if (signal.Key == 'la i')");
-+ generator.Emit(OpCodes.Ldarg_1);
-+ generator.EmitCall(OpCodes.Callvirt, Message_KeyMI, null);
-+ generator.Emit(OpCodes.Ldstr, eventE.Name + " " + InterfaceProxy.GetSignature(eventHandler_InvokeMI));
-+ generator.EmitCall(OpCodes.Call, String_opEqualityMI, null);
-+ generator.Emit(OpCodes.Brfalse, skip);
-+
-+ //generator.EmitWriteLine("IEnumerator enumerator = signal.Arguments.GetEnumerator()");
-+ generator.Emit(OpCodes.Ldarg_1);
-+ generator.EmitCall(OpCodes.Callvirt, Message_ArgumentsMI, null);
-+ generator.EmitCall(OpCodes.Callvirt, Arguments_GetEnumeratorMI, null);
-+ generator.Emit(OpCodes.Stloc_0);
-+
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ ParameterInfo par = pars[parN];
-+ if (!par.IsOut) {
-+ EmitSignalIn(generator, par.ParameterType, parN + localOffset, serviceF);
-+ }
-+ }
-+
-+ //generator.EmitWriteLine(" SelectedIndexChanged(selectedIndex)");
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldfld, eventF);
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ generator.Emit(OpCodes.Ldloc_S, parN + localOffset);
-+ }
-+
-+ generator.EmitCall(OpCodes.Callvirt, eventHandler_InvokeMI, null);
-+
-+ generator.MarkLabel(skip);
-+ //generator.EmitWriteLine(" }");
-+
-+ localOffset += pars.Length;
-+ }
-+ }
-+
-+ generator.MarkLabel(wrongPath);
-+ //generator.EmitWriteLine("}");
-+
-+ //generator.EmitWriteLine("return");
-+ generator.Emit(OpCodes.Ret);
-+
-+ return methodBuilder;
-+ }
-+
-+ private void BuildSignalHandler(EventInfo eventE,
-+ InterfaceProxy interfaceProxy,
-+ ref TypeBuilder typeB,
-+ FieldInfo serviceF,
-+ FieldInfo pathF)
-+ {
-+ MethodInfo eventHandler_InvokeMI = eventE.EventHandlerType.GetMethod("Invoke");
-+ ParameterInfo[] pars = eventHandler_InvokeMI.GetParameters();
-+ Type[] parTypes = new Type[pars.Length];
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ parTypes[parN] = pars[parN].ParameterType;
-+ }
-+
-+ // Generate the code
-+ MethodBuilder methodBuilder = typeB.DefineMethod("Proxy_" + eventE.Name,
-+ MethodAttributes.Public |
-+ MethodAttributes.HideBySig |
-+ MethodAttributes.Virtual,
-+ typeof(void),
-+ parTypes);
-+ ILGenerator generator = methodBuilder.GetILGenerator();
-+
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ methodBuilder.DefineParameter(parN + 1, pars[parN].Attributes, pars[parN].Name);
-+ }
-+
-+ // Generate the locals
-+ LocalBuilder methodCallL = generator.DeclareLocal(typeof(MethodCall));
-+ methodCallL.SetLocalSymInfo("signal");
-+
-+ //generator.EmitWriteLine("Signal signal = new Signal(...)");
-+ generator.Emit(OpCodes.Ldsfld, serviceF);
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldfld, pathF);
-+ generator.Emit(OpCodes.Ldstr, interfaceProxy.InterfaceName);
-+ generator.Emit(OpCodes.Ldstr, eventE.Name);
-+ generator.Emit(OpCodes.Newobj, Signal_C);
-+ generator.Emit(OpCodes.Stloc_0);
-+
-+ //generator.EmitWriteLine("signal.Arguments.InitAppending()");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, Message_ArgumentsMI, null);
-+ generator.EmitCall(OpCodes.Callvirt, Arguments_InitAppendingMI, null);
-+
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ ParameterInfo par = pars[parN];
-+ if (!par.IsOut) {
-+ EmitIn(generator, par.ParameterType, parN, serviceF);
-+ }
-+ }
-+
-+ //generator.EmitWriteLine("signal.Send()");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, Message_SendMI, null);
-+
-+ //generator.EmitWriteLine("signal.Dispose()");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, Message_DisposeMI, null);
-+
-+ //generator.EmitWriteLine("return");
-+ generator.Emit(OpCodes.Ret);
-+ }
-+
-+ private void BuildMethod(MethodInfo method,
-+ InterfaceProxy interfaceProxy,
-+ ref TypeBuilder typeB,
-+ FieldInfo serviceF,
-+ FieldInfo pathF)
-+ {
-+ ParameterInfo[] pars = method.GetParameters();
-+ Type[] parTypes = new Type[pars.Length];
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ parTypes[parN] = pars[parN].ParameterType;
-+ }
-+
-+ // Generate the code
-+ MethodBuilder methodBuilder = typeB.DefineMethod(method.Name,
-+ MethodAttributes.Public |
-+ MethodAttributes.HideBySig |
-+ MethodAttributes.Virtual,
-+ method.ReturnType,
-+ parTypes);
-+ ILGenerator generator = methodBuilder.GetILGenerator();
-+
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ methodBuilder.DefineParameter(parN + 1, pars[parN].Attributes, pars[parN].Name);
-+ }
-+
-+ // Generate the locals
-+ LocalBuilder methodCallL = generator.DeclareLocal(typeof(MethodCall));
-+ methodCallL.SetLocalSymInfo("methodCall");
-+ LocalBuilder replyL = generator.DeclareLocal(typeof(MethodReturn));
-+ replyL.SetLocalSymInfo("reply");
-+ LocalBuilder enumeratorL = generator.DeclareLocal(typeof(System.Collections.IEnumerator));
-+ enumeratorL.SetLocalSymInfo("enumerator");
-+
-+ if (method.ReturnType != typeof(void)) {
-+ LocalBuilder retvalL = generator.DeclareLocal(method.ReturnType);
-+ retvalL.SetLocalSymInfo("retval");
-+ }
-+
-+ //generator.EmitWriteLine("MethodCall methodCall = new MethodCall(...)");
-+ generator.Emit(OpCodes.Ldsfld, serviceF);
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldfld, pathF);
-+ generator.Emit(OpCodes.Ldstr, interfaceProxy.InterfaceName);
-+ generator.Emit(OpCodes.Ldstr, method.Name);
-+ generator.Emit(OpCodes.Newobj, MethodCall_C);
-+ generator.Emit(OpCodes.Stloc_0);
-+
-+ //generator.EmitWriteLine("methodCall.Arguments.InitAppending()");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, Message_ArgumentsMI, null);
-+ generator.EmitCall(OpCodes.Callvirt, Arguments_InitAppendingMI, null);
-+
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ ParameterInfo par = pars[parN];
-+ if (!par.IsOut) {
-+ EmitIn(generator, par.ParameterType, parN, serviceF);
-+ }
-+ }
-+
-+ //generator.EmitWriteLine("MethodReturn reply = methodCall.SendWithReplyAndBlock()");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, Message_SendWithReplyAndBlockMI, null);
-+ generator.Emit(OpCodes.Stloc_1);
-+
-+ //generator.EmitWriteLine("IEnumerator enumeartor = reply.Arguments.GetEnumerator()");
-+ generator.Emit(OpCodes.Ldloc_1);
-+ generator.EmitCall(OpCodes.Callvirt, Message_ArgumentsMI, null);
-+ generator.EmitCall(OpCodes.Callvirt, Arguments_GetEnumeratorMI, null);
-+ generator.Emit(OpCodes.Stloc_2);
-+
-+ // handle the return value
-+ if (method.ReturnType != typeof(void)) {
-+ EmitOut(generator, method.ReturnType, 0);
-+ }
-+
-+ for (int parN = 0; parN < pars.Length; parN++) {
-+ ParameterInfo par = pars[parN];
-+ if (par.IsOut || par.ParameterType.ToString().EndsWith("&")) {
-+ EmitOut(generator, par.ParameterType, parN);
-+ }
-+ }
-+
-+ // Clean up after ourselves
-+ //generator.EmitWriteLine("methodCall.Dispose()");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, Message_DisposeMI, null);
-+
-+ //generator.EmitWriteLine("reply.Dispose()");
-+ generator.Emit(OpCodes.Ldloc_1);
-+ generator.EmitCall(OpCodes.Callvirt, Message_DisposeMI, null);
-+
-+ if (method.ReturnType != typeof(void)) {
-+ generator.Emit(OpCodes.Ldloc_3);
-+ }
-+
-+ generator.Emit(OpCodes.Ret);
-+
-+ // Generate the method
-+ typeB.DefineMethodOverride(methodBuilder, method);
-+ }
-+
-+ private void EmitSignalIn(ILGenerator generator, Type parType, int parN, FieldInfo serviceF)
-+ {
-+ //generator.EmitWriteLine("enumerator.MoveNext()");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, IEnumerator_MoveNextMI, null);
-+
-+ Type outParType = Arguments.MatchType(parType);
-+ //generator.EmitWriteLine("int selectedIndex = (int) ((DBusType.IDBusType) enumerator.Current).Get(typeof(int))");
-+ generator.Emit(OpCodes.Pop);
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, IEnumerator_CurrentMI, null);
-+ generator.Emit(OpCodes.Castclass, typeof(DBusType.IDBusType));
-+ generator.Emit(OpCodes.Ldtoken, parType);
-+ generator.EmitCall(OpCodes.Call, Type_GetTypeFromHandleMI, null);
-+ generator.EmitCall(OpCodes.Callvirt, IDBusType_GetMI, null);
-+ // Call the DBusType EmitMarshalOut to make it emit itself
-+ object[] pars = new object[] {generator, parType, true};
-+ outParType.InvokeMember("EmitMarshalOut", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, pars, null);
-+ generator.Emit(OpCodes.Stloc_S, parN);
-+ }
-+
-+
-+ private void EmitIn(ILGenerator generator, Type parType, int parN, FieldInfo serviceF)
-+ {
-+ Type inParType = Arguments.MatchType(parType);
-+ //generator.EmitWriteLine("methodCall.Arguments.Append(...)");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, Message_ArgumentsMI, null);
-+ generator.Emit(OpCodes.Ldarg_S, parN + 1);
-+
-+ // Call the DBusType EmitMarshalIn to make it emit itself
-+ object[] pars = new object[] {generator, parType};
-+ inParType.InvokeMember("EmitMarshalIn", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, pars, null);
-+
-+ generator.Emit(OpCodes.Ldsfld, serviceF);
-+ generator.Emit(OpCodes.Newobj, Arguments.GetDBusTypeConstructor(inParType, parType));
-+ generator.EmitCall(OpCodes.Callvirt, Arguments_AppendMI, null);
-+ }
-+
-+ private void EmitOut(ILGenerator generator, Type parType, int parN)
-+ {
-+ Type outParType = Arguments.MatchType(parType);
-+ //generator.EmitWriteLine("enumerator.MoveNext()");
-+ generator.Emit(OpCodes.Ldloc_2);
-+ generator.EmitCall(OpCodes.Callvirt, IEnumerator_MoveNextMI, null);
-+
-+ //generator.EmitWriteLine("return (" + parType + ") ((DBusType.IDBusType) enumerator.Current).Get(typeof(" + parType + "))");
-+ generator.Emit(OpCodes.Pop);
-+ if (parN > 0) {
-+ generator.Emit(OpCodes.Ldarg_S, parN + 1);
-+ }
-+
-+ generator.Emit(OpCodes.Ldloc_2);
-+ generator.EmitCall(OpCodes.Callvirt, IEnumerator_CurrentMI, null);
-+ generator.Emit(OpCodes.Castclass, typeof(DBusType.IDBusType));
-+ generator.Emit(OpCodes.Ldtoken, parType);
-+ generator.EmitCall(OpCodes.Call, Type_GetTypeFromHandleMI, null);
-+ generator.EmitCall(OpCodes.Callvirt, IDBusType_GetMI, null);
-+
-+ // Call the DBusType EmitMarshalOut to make it emit itself
-+ object[] pars = new object[] {generator, parType, parN == 0};
-+ outParType.InvokeMember("EmitMarshalOut", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod, null, null, pars, null);
-+
-+ if (parN == 0) {
-+ generator.Emit(OpCodes.Stloc_3);
-+ }
-+ }
-+
-+ public void BuildConstructor(ref TypeBuilder typeB, FieldInfo serviceF, FieldInfo pathF, MethodInfo signalCalledMI, FieldInfo deleF)
-+ {
-+ Type[] pars = {typeof(Service), typeof(string)};
-+ ConstructorBuilder constructor = typeB.DefineConstructor(MethodAttributes.RTSpecialName |
-+ MethodAttributes.Public,
-+ CallingConventions.Standard, pars);
-+
-+ ILGenerator generator = constructor.GetILGenerator();
-+
-+ LocalBuilder handlerL = generator.DeclareLocal (typeof (Service.SignalCalledHandler));
-+ handlerL.SetLocalSymInfo ("handler");
-+
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Call, this.introspector.Constructor);
-+ //generator.EmitWriteLine("service = myService");
-+ generator.Emit(OpCodes.Ldarg_1);
-+ generator.Emit(OpCodes.Stsfld, serviceF);
-+ //generator.EmitWriteLine("this.pathName = pathName");
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldarg_2);
-+ generator.Emit(OpCodes.Stfld, pathF);
-+
-+ //generator.EmitWriteLine("handler = new Service.SignalCalledHandler(Service_SignalCalled)");
-+ generator.Emit(OpCodes.Ldarg_1);
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldftn, signalCalledMI);
-+ generator.Emit(OpCodes.Newobj, Service_SignalCalledHandlerC);
-+ generator.Emit(OpCodes.Stloc_0);
-+
-+ //generator.EmitWriteLine("this.delegate_created = handler");
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.Emit(OpCodes.Stfld, deleF);
-+
-+ //generator.EmitWriteLine("myService.SignalCalled += handler");
-+ generator.Emit(OpCodes.Ldloc_0);
-+ generator.EmitCall(OpCodes.Callvirt, Service_AddSignalCalledMI, null);
-+
-+ //generator.EmitWriteLine("return");
-+ generator.Emit(OpCodes.Ret);
-+ }
-+
-+ public void BuildSignalConstructor(ref TypeBuilder typeB, FieldInfo serviceF, FieldInfo pathF)
-+ {
-+ Type[] pars = {typeof(Service), typeof(string)};
-+ ConstructorBuilder constructor = typeB.DefineConstructor(MethodAttributes.RTSpecialName |
-+ MethodAttributes.Public,
-+ CallingConventions.Standard, pars);
-+
-+ ILGenerator generator = constructor.GetILGenerator();
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Call, this.introspector.Constructor);
-+ //generator.EmitWriteLine("service = myService");
-+ generator.Emit(OpCodes.Ldarg_1);
-+ generator.Emit(OpCodes.Stsfld, serviceF);
-+ //generator.EmitWriteLine("this.pathName = pathName");
-+ generator.Emit(OpCodes.Ldarg_0);
-+ generator.Emit(OpCodes.Ldarg_2);
-+ generator.Emit(OpCodes.Stfld, pathF);
-+
-+ //generator.EmitWriteLine("return");
-+ generator.Emit(OpCodes.Ret);
-+ }
-+
-+ public void BuildFinalizer (TypeBuilder tb, FieldInfo serviceF, FieldInfo deleF)
-+ {
-+ // Note that this is a *HORRIBLE* example of how to build a finalizer
-+ // It doesn't use the try/finally to chain to Object::Finalize. However,
-+ // because that is always going to be a nop, lets just ignore that here.
-+ // If you are trying to find the right code, look at what mcs does ;-).
-+
-+ MethodBuilder mb = tb.DefineMethod("Finalize",
-+ MethodAttributes.Family |
-+ MethodAttributes.HideBySig |
-+ MethodAttributes.Virtual,
-+ typeof (void),
-+ new Type [0]);
-+ ILGenerator generator = mb.GetILGenerator();
-+
-+ //generator.EmitWriteLine("this.service.SignalCalled -= this.delegate_created");
-+ generator.Emit (OpCodes.Ldarg_0);
-+ generator.Emit (OpCodes.Ldfld, serviceF);
-+ generator.Emit (OpCodes.Ldarg_0);
-+ generator.Emit (OpCodes.Ldfld, deleF);
-+ generator.EmitCall (OpCodes.Callvirt, Service_RemoveSignalCalledMI, null);
-+ generator.Emit (OpCodes.Ret);
-+ }
-+
-+ public object GetSignalProxy()
-+ {
-+ Type proxyType = Service.ProxyAssembly.GetType(ObjectName + ".SignalProxy");
-+
-+ if (proxyType == null) {
-+ // Build the type
-+ TypeBuilder typeB = Service.Module.DefineType(ObjectName + ".SignalProxy",
-+ TypeAttributes.Public,
-+ this.type);
-+
-+ FieldBuilder serviceF = typeB.DefineField("service",
-+ typeof(Service),
-+ FieldAttributes.Private |
-+ FieldAttributes.Static);
-+ FieldBuilder pathF = typeB.DefineField("pathName",
-+ typeof(string),
-+ FieldAttributes.Private);
-+
-+ BuildSignalConstructor(ref typeB, serviceF, pathF);
-+
-+ // Build the signal handlers
-+ foreach (DictionaryEntry interfaceEntry in this.introspector.InterfaceProxies) {
-+ InterfaceProxy interfaceProxy = (InterfaceProxy) interfaceEntry.Value;
-+ foreach (DictionaryEntry signalEntry in interfaceProxy.Signals) {
-+ EventInfo eventE = (EventInfo) signalEntry.Value;
-+ BuildSignalHandler(eventE, interfaceProxy, ref typeB, serviceF, pathF);
-+ }
-+ }
-+
-+ proxyType = typeB.CreateType();
-+
-+ // Uncomment the following line to produce a DLL of the
-+ // constructed assembly which can then be examined using
-+ // monodis. Note that in order for this to work you should copy
-+ // the client assembly as a dll file so that monodis can pick it
-+ // up.
-+ //Service.ProxyAssembly.Save("proxy.dll");
-+ }
-+
-+ Type [] parTypes = new Type[] {typeof(Service), typeof(string)};
-+ object [] pars = new object[] {Service, pathName};
-+
-+ ConstructorInfo constructor = proxyType.GetConstructor(parTypes);
-+ object instance = constructor.Invoke(pars);
-+ return instance;
-+ }
-+
-+
-+ public object GetProxy()
-+ {
-+ Type proxyType = Service.ProxyAssembly.GetType(ObjectName + ".Proxy");
-+
-+ if (proxyType == null) {
-+ // Build the type
-+ TypeBuilder typeB = Service.Module.DefineType(ObjectName + ".Proxy", TypeAttributes.Public, this.type);
-+
-+ FieldBuilder serviceF = typeB.DefineField("service",
-+ typeof(Service),
-+ FieldAttributes.Private |
-+ FieldAttributes.Static);
-+ FieldBuilder pathF = typeB.DefineField("pathName",
-+ typeof(string),
-+ FieldAttributes.Private);
-+ FieldBuilder deleF = typeB.DefineField("delegate_created",
-+ typeof(Service.SignalCalledHandler),
-+ FieldAttributes.Private);
-+ BuildFinalizer (typeB, serviceF, deleF);
-+
-+ MethodInfo signalCalledMI = BuildSignalCalled(ref typeB, serviceF, pathF);
-+ BuildConstructor(ref typeB, serviceF, pathF, signalCalledMI, deleF);
-+
-+ // Build the methods
-+ foreach (DictionaryEntry interfaceEntry in this.introspector.InterfaceProxies) {
-+ InterfaceProxy interfaceProxy = (InterfaceProxy) interfaceEntry.Value;
-+ foreach (DictionaryEntry methodEntry in interfaceProxy.Methods) {
-+ MethodInfo method = (MethodInfo) methodEntry.Value;
-+ BuildMethod(method, interfaceProxy, ref typeB, serviceF, pathF);
-+ }
-+ }
-+
-+ proxyType = typeB.CreateType();
-+
-+ // Uncomment the following line to produce a DLL of the
-+ // constructed assembly which can then be examined using
-+ // monodis. Note that in order for this to work you should copy
-+ // the client assembly as a dll file so that monodis can pick it
-+ // up.
-+ //Service.ProxyAssembly.Save(Service.Name + ".proxy.dll");
-+ }
-+
-+ Type [] parTypes = new Type[] {typeof(Service), typeof(string)};
-+ object [] pars = new object[] {Service, pathName};
-+
-+ ConstructorInfo constructor = proxyType.GetConstructor(parTypes);
-+ object instance = constructor.Invoke(pars);
-+ return instance;
-+ }
-+
-+ private Service Service
-+ {
-+ get {
-+ return this.service;
-+ }
-+ }
-+
-+ private string ObjectName
-+ {
-+ get {
-+ return this.introspector.ToString();
-+ }
-+ }
-+ }
-+}
-+
-diff -Naur dbus-0.61.orig/mono/README dbus-0.61/mono/README
---- dbus-0.61.orig/mono/README 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/README 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,118 @@
-+D-BUS Mono Bindings
-+===
-+
-+These bindings are a 'thick' wrapper around the D-BUS API. For now
-+they rely on the main loop provided by the GLib bindings but this
-+dependancy will be removed in the near future.
-+
-+The wrapper serves two main functions: firstly, it has the know-how to
-+introspect live objects passed to it by a server and service requests
-+to those objects via the D-BUS. Secondly, it can create a proxy for
-+clients who can pretend they are making calls to the regular
-+objects. This latter piece of magic is implemented using
-+Reflection.Emit to create an assembly on-the-fly containing
-+sub-classes of the classes the client thinks it's really using. These
-+sub-classes simply marshal each method's parameters off to the D-BUS,
-+demarshal the results and return them to the client as if nothing
-+happened.
-+
-+Usage
-+===
-+
-+A server do should something like this:
-+
-+ namespace Foo
-+ {
-+ using System;
-+ using DBus;
-+ using Gtk;
-+
-+ public class MyServer
-+ {
-+ public static int Main(string [] args)
-+ {
-+ Application.Init();
-+
-+1 Connection connection = Bus.GetSessionBus();
-+2 Service service = new Service(connection, "org.foo");
-+3 MyObject myObject = new MyObject();
-+4 service.RegisterObject(myObject, "/org/foo/MyObject");
-+
-+ Application.Run();
-+
-+ return 0;
-+ }
-+ }
-+ }
-+
-+In line 1 we get a connection to the session bus. Then, in line 2 we
-+create a service which will listen for requests to org.foo to
-+service. In line 3 we create a MyObject object and register it with an
-+object path in line 4. It's almost that simple. All that's missing is
-+to mark MyObject in such a way that dbus-sharp knows how to export
-+it. This is done using the attributes, Interface and Method,
-+as in the following example:
-+
-+ namespace Foo
-+ {
-+ using System;
-+ using DBus;
-+
-+ [Interface("org.foo.MyObject")]
-+ public class MyObject
-+ {
-+ [Method]
-+ public virtual string Echo(string message)
-+ {
-+ return "Reply: " + message;
-+ }
-+ }
-+ }
-+
-+Note that the Methods should also be declared virtual in order for
-+the client to use same class declaration.
-+
-+Now for the client:
-+
-+ namespace Foo
-+ {
-+ using System;
-+ using DBus;
-+
-+ public class MyClient
-+ {
-+ public static int Main(string [] args)
-+ {
-+1 Connection connection = Bus.GetSessionBus();
-+2 Service service = Service.Get(connection, "org.foo");
-+3 MyObject myObject = (MyObject)
-+ service.GetObject(typeof(MyObject), "/org/foo/MyObject");
-+4 System.Console.WriteLine(testObject.Echo("Hello world!"));
-+
-+ return 0;
-+ }
-+ }
-+ }
-+
-+Here we start off the same by getting a connection to the session
-+bus. This time though, in line 2, we get the existing service rather
-+than creating it. In line 3, we ask the service to get the object
-+"/org/foo/MyObject" as registered by the server and that return it as
-+a MyObject. Once obtained we can use it like any normal object as in
-+line 4. This supposes, of course, that you've just written MyObject
-+and happen to have it readily available. If that were not the case,
-+for example if you wanted to call a method on one of the well-known
-+services, then you will need to write a stub class, like the MyObject
-+class above, which has the method calls you need correctly defined but
-+needn't actually have any implementation.
-+
-+
-+Working Example
-+===
-+
-+The example directory contains a working example similar to that
-+described above. It uses the session bus so first run dbus-launch and
-+then export DBUS_SESSION_BUS_ADDRESS, as displayed by dbus-launch, to
-+two terminals, one to run the server and one for the client. Then,
-+start the server in one terminal, the client in the other and cross
-+your fingers.
-diff -Naur dbus-0.61.orig/mono/Server.cs dbus-0.61/mono/Server.cs
---- dbus-0.61.orig/mono/Server.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Server.cs 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,148 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+
-+ public class Server
-+ {
-+ private IntPtr rawServer;
-+
-+ /// <summary>
-+ /// The current slot number
-+ /// </summary>
-+ private static int slot = -1;
-+
-+ private string address = null;
-+
-+ private Server(IntPtr rawServer)
-+ {
-+ RawServer = rawServer;
-+ }
-+
-+ public Server(string address)
-+ {
-+ Error error = new Error();
-+ error.Init();
-+ RawServer = dbus_server_listen(address, ref error);
-+ if (RawServer != IntPtr.Zero){
-+ dbus_server_unref(RawServer);
-+ } else {
-+ throw new DBusException(error);
-+ }
-+ }
-+
-+ ~Server()
-+ {
-+ if (RawServer != IntPtr.Zero) {
-+ dbus_server_unref(rawServer);
-+ }
-+
-+ RawServer = IntPtr.Zero;
-+ }
-+
-+ public string Address
-+ {
-+ get
-+ {
-+ if (address == null) {
-+ address = dbus_server_get_address(rawServer);
-+ }
-+
-+ return address;
-+ }
-+ }
-+
-+ private int Slot
-+ {
-+ get
-+ {
-+ if (slot == -1)
-+ {
-+ // We need to initialize the slot
-+ if (!dbus_server_allocate_data_slot (ref slot))
-+ throw new OutOfMemoryException ();
-+
-+ Debug.Assert (slot >= 0);
-+ }
-+
-+ return slot;
-+ }
-+ }
-+
-+ internal IntPtr RawServer
-+ {
-+ get
-+ {
-+ return rawServer;
-+ }
-+ set
-+ {
-+ if (value == rawServer)
-+ return;
-+
-+ if (rawServer != IntPtr.Zero)
-+ {
-+ // Get the reference to this
-+ IntPtr rawThis = dbus_server_get_data (rawServer, Slot);
-+ Debug.Assert (rawThis != IntPtr.Zero);
-+
-+ // Blank over the reference
-+ dbus_server_set_data (rawServer, Slot, IntPtr.Zero, IntPtr.Zero);
-+
-+ // Free the reference
-+ ((GCHandle) rawThis).Free();
-+
-+ // Unref the connection
-+ dbus_server_unref(rawServer);
-+ }
-+
-+ this.rawServer = value;
-+
-+ if (rawServer != IntPtr.Zero)
-+ {
-+ GCHandle rawThis;
-+
-+ dbus_server_ref (rawServer);
-+
-+ // We store a weak reference to the C# object on the C object
-+ rawThis = GCHandle.Alloc (this, GCHandleType.WeakTrackResurrection);
-+
-+ dbus_server_set_data(rawServer, Slot, (IntPtr) rawThis, IntPtr.Zero);
-+ }
-+ }
-+ }
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_listen")]
-+ private extern static IntPtr dbus_server_listen(string address, ref Error error);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_unref")]
-+ private extern static IntPtr dbus_server_unref(IntPtr rawServer);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_ref")]
-+ private extern static void dbus_server_ref(IntPtr rawServer);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_disconnect")]
-+ private extern static void dbus_server_disconnect(IntPtr rawServer);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_get_address")]
-+ private extern static string dbus_server_get_address(IntPtr rawServer);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_set_data")]
-+ private extern static bool dbus_server_set_data(IntPtr rawServer,
-+ int slot,
-+ IntPtr data,
-+ IntPtr freeDataFunc);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_get_data")]
-+ private extern static IntPtr dbus_server_get_data(IntPtr rawServer,
-+ int slot);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_allocate_data_slot")]
-+ private extern static bool dbus_server_allocate_data_slot (ref int slot);
-+
-+ [DllImport ("dbus-1", EntryPoint="dbus_server_free_data_slot")]
-+ private extern static void dbus_server_free_data_slot (ref int slot);
-+
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/Service.cs dbus-0.61/mono/Service.cs
---- dbus-0.61.orig/mono/Service.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Service.cs 2005-03-09 05:36:15.000000000 +0100
-@@ -0,0 +1,191 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+ using System.Collections;
-+ using System.Threading;
-+ using System.Reflection;
-+ using System.Reflection.Emit;
-+
-+ public class Service
-+ {
-+ private Connection connection;
-+ private string name;
-+ private bool local = false;
-+ private Hashtable registeredHandlers = new Hashtable();
-+ private DBusHandleMessageFunction filterCalled;
-+ public delegate void SignalCalledHandler(Signal signal);
-+ public event SignalCalledHandler SignalCalled;
-+ private static AssemblyBuilder proxyAssembly;
-+ private ModuleBuilder module = null;
-+
-+ // Add a match for signals. FIXME: Can we filter the service?
-+ private const string MatchRule = "type='signal'";
-+
-+ internal Service(string name, Connection connection)
-+ {
-+ this.name = name;
-+ this.connection = connection;
-+ AddFilter();
-+ }
-+
-+ public Service(Connection connection, string name)
-+ {
-+ Error error = new Error();
-+ error.Init();
-+
-+ // This isn't used for now
-+ uint flags = 0;
-+
-+ if (dbus_bus_request_name (connection.RawConnection, name, flags, ref error) == -1) {
-+ throw new DBusException(error);
-+ }
-+
-+ this.connection = connection;
-+ this.name = name;
-+ this.local = true;
-+ }
-+
-+ public static bool HasOwner(Connection connection, string name)
-+ {
-+ Error error = new Error();
-+ error.Init();
-+
-+ if (dbus_bus_name_has_owner(connection.RawConnection,
-+ name,
-+ ref error)) {
-+ return true;
-+ } else {
-+ if (error.IsSet) {
-+ throw new DBusException(error);
-+ }
-+ return false;
-+ }
-+ }
-+
-+ public static Service Get(Connection connection, string name)
-+ {
-+ if (HasOwner(connection, name)) {
-+ return new Service(name, connection);
-+ } else {
-+ throw new ApplicationException("Name '" + name + "' does not exist.");
-+ }
-+ }
-+
-+ public void UnregisterObject(object handledObject)
-+ {
-+ registeredHandlers.Remove(handledObject);
-+ }
-+
-+ public void RegisterObject(object handledObject,
-+ string pathName)
-+ {
-+ Handler handler = new Handler(handledObject, pathName, this);
-+ registeredHandlers.Add(handledObject, handler);
-+ }
-+
-+ internal Handler GetHandler(object handledObject)
-+ {
-+ if (!registeredHandlers.Contains(handledObject)) {
-+ throw new ArgumentException("No handler registered for object: " + handledObject);
-+ }
-+
-+ return (Handler) registeredHandlers[handledObject];
-+ }
-+
-+ public object GetObject(Type type, string pathName)
-+ {
-+ ProxyBuilder builder = new ProxyBuilder(this, type, pathName);
-+ object proxy = builder.GetProxy();
-+ return proxy;
-+ }
-+
-+ private void AddFilter()
-+ {
-+ // Setup the filter function
-+ this.filterCalled = new DBusHandleMessageFunction(Service_FilterCalled);
-+ Connection.AddFilter (this.filterCalled);
-+ // Add a match for signals. FIXME: Can we filter the service?
-+ Connection.AddMatch ("type='signal'");
-+ }
-+
-+ private int Service_FilterCalled(IntPtr rawConnection,
-+ IntPtr rawMessage,
-+ IntPtr userData)
-+ {
-+ Message message = Message.Wrap(rawMessage, this);
-+
-+ if (message.Type == Message.MessageType.Signal) {
-+ // We're only interested in signals
-+ Signal signal = (Signal) message;
-+ if (SignalCalled != null) {
-+ Message.Push (message);
-+ SignalCalled(signal);
-+ Message.Pop ();
-+ }
-+ }
-+
-+ message.Dispose ();
-+
-+ return (int) Result.NotYetHandled;
-+ }
-+
-+ public string Name
-+ {
-+ get
-+ {
-+ return this.name;
-+ }
-+ }
-+
-+ public Connection Connection
-+ {
-+ get
-+ {
-+ return connection;
-+ }
-+
-+ set
-+ {
-+ this.connection = value;
-+ }
-+ }
-+
-+ internal AssemblyBuilder ProxyAssembly
-+ {
-+ get {
-+ if (proxyAssembly == null){
-+ AssemblyName assemblyName = new AssemblyName();
-+ assemblyName.Name = "DBusProxy";
-+ proxyAssembly = Thread.GetDomain().DefineDynamicAssembly(assemblyName,
-+ AssemblyBuilderAccess.RunAndSave);
-+ }
-+
-+ return proxyAssembly;
-+ }
-+ }
-+
-+ internal ModuleBuilder Module
-+ {
-+ get {
-+ if (this.module == null) {
-+ this.module = ProxyAssembly.DefineDynamicModule(Name, Name + ".proxy.dll", true);
-+ }
-+
-+ return this.module;
-+ }
-+ }
-+
-+ [DllImport("dbus-1")]
-+ private extern static int dbus_bus_request_name(IntPtr rawConnection,
-+ string serviceName,
-+ uint flags, ref Error error);
-+
-+ [DllImport("dbus-1")]
-+ private extern static bool dbus_bus_name_has_owner(IntPtr rawConnection,
-+ string serviceName,
-+ ref Error error);
-+
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/Signal.cs dbus-0.61/mono/Signal.cs
---- dbus-0.61.orig/mono/Signal.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/Signal.cs 2004-03-26 16:25:59.000000000 +0100
-@@ -0,0 +1,79 @@
-+namespace DBus
-+{
-+ using System;
-+ using System.Runtime.InteropServices;
-+ using System.Diagnostics;
-+
-+ public class Signal : Message
-+ {
-+ public Signal() : base(MessageType.Signal)
-+ {
-+ }
-+
-+ internal Signal(IntPtr rawMessage, Service service) : base(rawMessage, service)
-+ {
-+ }
-+
-+ public Signal(Service service) : base(MessageType.Signal, service)
-+ {
-+ }
-+
-+ public Signal(Service service, string pathName, string interfaceName, string name)
-+ {
-+ this.service = service;
-+
-+ RawMessage = dbus_message_new_signal(pathName, interfaceName, name);
-+
-+ if (RawMessage == IntPtr.Zero) {
-+ throw new OutOfMemoryException();
-+ }
-+
-+ this.pathName = pathName;
-+ this.interfaceName = interfaceName;
-+ this.name = name;
-+
-+ dbus_message_unref(RawMessage);
-+ }
-+
-+ public new string PathName
-+ {
-+ get
-+ {
-+ return base.PathName;
-+ }
-+
-+ set
-+ {
-+ base.PathName = value;
-+ }
-+ }
-+
-+ public new string InterfaceName
-+ {
-+ get
-+ {
-+ return base.InterfaceName;
-+ }
-+
-+ set
-+ {
-+ base.InterfaceName = value;
-+ }
-+ }
-+
-+ public new string Name
-+ {
-+ get
-+ {
-+ return base.Name;
-+ }
-+
-+ set
-+ {
-+ base.Name = value;
-+ }
-+ }
-+ [DllImport("dbus-1")]
-+ private extern static IntPtr dbus_message_new_signal(string pathName, string interfaceName, string name);
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/SignalAttribute.cs dbus-0.61/mono/SignalAttribute.cs
---- dbus-0.61.orig/mono/SignalAttribute.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/SignalAttribute.cs 2004-03-26 16:25:59.000000000 +0100
-@@ -0,0 +1,11 @@
-+using System;
-+
-+namespace DBus
-+{
-+ [AttributeUsage(AttributeTargets.Event, AllowMultiple=false, Inherited=true)] public class SignalAttribute : Attribute
-+ {
-+ public SignalAttribute()
-+ {
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/TODO dbus-0.61/mono/TODO
---- dbus-0.61.orig/mono/TODO 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/TODO 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,8 @@
-+- Clean up memory leakages. Call _unref functions etc.
-+
-+- Convert strings to/from UTF-8
-+
-+- Implement own main loop. The current implementation depends on the
-+ GLib mainloop.
-+
-+- Get test working. Probably a threading issue.
-diff -Naur dbus-0.61.orig/mono/dbus-sharp.dll.config.in dbus-0.61/mono/dbus-sharp.dll.config.in
---- dbus-0.61.orig/mono/dbus-sharp.dll.config.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/dbus-sharp.dll.config.in 2005-03-13 02:56:29.000000000 +0100
-@@ -0,0 +1,4 @@
-+<configuration>
-+ <dllmap dll="dbus-1" target="libdbus-1 at LIB_PREFIX@. at LT_CURRENT@@LIB_SUFFIX@"/>
-+ <dllmap dll="dbus-glib-1" target="libdbus-glib-1 at LIB_PREFIX@. at LT_CURRENT@@LIB_SUFFIX@"/>
-+</configuration>
-diff -Naur dbus-0.61.orig/mono/dbus-sharp.snk dbus-0.61/mono/dbus-sharp.snk
---- dbus-0.61.orig/mono/dbus-sharp.snk 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/dbus-sharp.snk 2004-05-15 21:31:12.000000000 +0200
-@@ -0,0 +1,3 @@
-+ $ RSA2 «À7!Ü`¬ÎzªÉôümel|§|Ó ßÀÛºçÀ\ÃéW'gxn=÷î|äÊ",'tû£mº"Ú¾¤©ðwÎ*\/³#× v=ÂA`Â7-ÛÜí±ßÅò²AÁÉÏK 6ñX&ØÉCÂaEc- j ÔÞîð.Î-I¥ñ;ÉK%ZFjºä½5ÿKp.%ê `äÉoAi7^#êRiÔ/<×þÜEçI@kGëDß9o :cÁ,¡¬´]Þ#¥w»äkÊ!>¹Ùã[Ò÷X±$Î.ú¢7 y¼)M¬4¢¬G¿±ZìûêäñËz%½^ËÃ-ôÇ´ñþHH?ØÂhÙVäËK99©my¥.)µkhWSí®HòÂ_@£¬@¶KâAÓ]a°§¼K¾ÄLù«QYU8H ¡Äp®jÂl7ÖÖÜMÒ(7NeÍ®!
-+
\ÉÁòBþòÖgôRǼ"X¦~À´Øîd»á$Þæ~¼ú?xyöãm^³Óû/^h®UäQÞ£ø{a
-+jôHÎé!¬kw²7|ÞZ)åHÕ¥³ÑøÕê^N"å}<>òÙx$÷)aѯ»yª·È8|ì\2¸
wEAtççÄ\1û!JÓi¦ÀøoKVtºÃâËX«øR®Tr©Bþ¿}(]ÌÚxÚe
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/Makefile.am dbus-0.61/mono/doc/Makefile.am
---- dbus-0.61.orig/mono/doc/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/Makefile.am 2006-02-10 22:47:10.000000000 +0100
-@@ -0,0 +1,47 @@
-+if ENABLE_MONODOC
-+TARGETS = dbus-sharp-docs.zip dbus-sharp-docs.tree dbus-sharp-docs.source
-+DOCDIR = `$(MONODOC) --get-sourcesdir`
-+
-+install-data-local:
-+ install -d -m 755 $(DESTDIR)/`monodoc --get-sourcesdir`
-+ install -m 644 $(srcdir)/dbus-sharp-docs.source $(DESTDIR)/`monodoc --get-sourcesdir`
-+ install -m 644 dbus-sharp-docs.tree $(DESTDIR)/`monodoc --get-sourcesdir`
-+ install -m 644 dbus-sharp-docs.zip $(DESTDIR)/`monodoc --get-sourcesdir`
-+
-+uninstall-local:
-+ rm -f $(DESTDIR)/`monodoc --get-sourcesdir`/dbus-sharp-docs.source
-+ rm -f $(DESTDIR)/`monodoc --get-sourcesdir`/dbus-sharp-docs.tree
-+ rm -f $(DESTDIR)/`monodoc --get-sourcesdir`/dbus-sharp-docs.zip
-+else
-+TARGETS =
-+DOCDIR = $(datadir)
-+endif
-+
-+noinst_DATA = $(TARGETS)
-+
-+ASSEMBLER = $(MONODOC) --assemble
-+UPDATER = $(MONODOC) --update
-+
-+dbus-sharp-docs.zip: dbus-sharp-docs.tree
-+
-+dbus-sharp-docs.tree: $(srcdir)/en/*/*.xml $(srcdir)/en/*.xml
-+ $(ASSEMBLER) --ecma $(srcdir)/en -o dbus-sharp-docs
-+
-+update:
-+ $(UPDATER) ../dbus-sharp.dll -o ./en -f
-+
-+CLEANFILES = dbus-sharp-docs.zip dbus-sharp-docs.tree
-+
-+EXTRA_DIST = dbus-sharp-docs.source
-+if ENABLE_MONODOC
-+EXTRA_DIST += dbus-sharp-docs.tree dbus-sharp-docs.zip
-+endif
-+
-+dist-hook:
-+ mkdir -p $(distdir)/en
-+ cp $(srcdir)/en/*.xml $(distdir)/en/
-+ mkdir -p $(distdir)/en/DBus
-+ cp $(srcdir)/en/DBus/*.xml $(distdir)/en/DBus/
-+ mkdir -p $(distdir)/en/DBus.DBusType
-+ cp $(srcdir)/en/DBus.DBusType/*.xml $(distdir)/en/DBus.DBusType/
-+
-diff -Naur dbus-0.61.orig/mono/doc/Makefile.in dbus-0.61/mono/doc/Makefile.in
---- dbus-0.61.orig/mono/doc/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/Makefile.in 2006-02-27 22:34:35.000000000 +0100
-@@ -0,0 +1,513 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+ at ENABLE_MONODOC_TRUE@am__append_1 = dbus-sharp-docs.tree dbus-sharp-docs.zip
-+subdir = mono/doc
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+SOURCES =
-+DIST_SOURCES =
-+DATA = $(noinst_DATA)
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+ at ENABLE_MONODOC_FALSE@TARGETS =
-+ at ENABLE_MONODOC_TRUE@TARGETS = dbus-sharp-docs.zip dbus-sharp-docs.tree dbus-sharp-docs.source
-+ at ENABLE_MONODOC_FALSE@DOCDIR = $(datadir)
-+ at ENABLE_MONODOC_TRUE@DOCDIR = `$(MONODOC) --get-sourcesdir`
-+noinst_DATA = $(TARGETS)
-+ASSEMBLER = $(MONODOC) --assemble
-+UPDATER = $(MONODOC) --update
-+CLEANFILES = dbus-sharp-docs.zip dbus-sharp-docs.tree
-+EXTRA_DIST = dbus-sharp-docs.source $(am__append_1)
-+all: all-am
-+
-+.SUFFIXES:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mono/doc/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu mono/doc/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+tags: TAGS
-+TAGS:
-+
-+ctags: CTAGS
-+CTAGS:
-+
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
-+ dist-hook
-+check-am: all-am
-+check: check-am
-+all-am: Makefile $(DATA)
-+installdirs:
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+ at ENABLE_MONODOC_FALSE@uninstall-local:
-+ at ENABLE_MONODOC_FALSE@install-data-local:
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-libtool
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am: install-data-local
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am uninstall-local
-+
-+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-+ dist-hook distclean distclean-generic distclean-libtool \
-+ distdir dvi dvi-am html html-am info info-am install \
-+ install-am install-data install-data-am install-data-local \
-+ install-exec install-exec-am install-info install-info-am \
-+ install-man install-strip installcheck installcheck-am \
-+ installdirs maintainer-clean maintainer-clean-generic \
-+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-+ ps ps-am uninstall uninstall-am uninstall-info-am \
-+ uninstall-local
-+
-+
-+ at ENABLE_MONODOC_TRUE@install-data-local:
-+ at ENABLE_MONODOC_TRUE@ install -d -m 755 $(DESTDIR)/`monodoc --get-sourcesdir`
-+ at ENABLE_MONODOC_TRUE@ install -m 644 $(srcdir)/dbus-sharp-docs.source $(DESTDIR)/`monodoc --get-sourcesdir`
-+ at ENABLE_MONODOC_TRUE@ install -m 644 dbus-sharp-docs.tree $(DESTDIR)/`monodoc --get-sourcesdir`
-+ at ENABLE_MONODOC_TRUE@ install -m 644 dbus-sharp-docs.zip $(DESTDIR)/`monodoc --get-sourcesdir`
-+
-+ at ENABLE_MONODOC_TRUE@uninstall-local:
-+ at ENABLE_MONODOC_TRUE@ rm -f $(DESTDIR)/`monodoc --get-sourcesdir`/dbus-sharp-docs.source
-+ at ENABLE_MONODOC_TRUE@ rm -f $(DESTDIR)/`monodoc --get-sourcesdir`/dbus-sharp-docs.tree
-+ at ENABLE_MONODOC_TRUE@ rm -f $(DESTDIR)/`monodoc --get-sourcesdir`/dbus-sharp-docs.zip
-+
-+dbus-sharp-docs.zip: dbus-sharp-docs.tree
-+
-+dbus-sharp-docs.tree: $(srcdir)/en/*/*.xml $(srcdir)/en/*.xml
-+ $(ASSEMBLER) --ecma $(srcdir)/en -o dbus-sharp-docs
-+
-+update:
-+ $(UPDATER) ../dbus-sharp.dll -o ./en -f
-+
-+dist-hook:
-+ mkdir -p $(distdir)/en
-+ cp $(srcdir)/en/*.xml $(distdir)/en/
-+ mkdir -p $(distdir)/en/DBus
-+ cp $(srcdir)/en/DBus/*.xml $(distdir)/en/DBus/
-+ mkdir -p $(distdir)/en/DBus.DBusType
-+ cp $(srcdir)/en/DBus.DBusType/*.xml $(distdir)/en/DBus.DBusType/
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/mono/doc/dbus-sharp-docs.source dbus-0.61/mono/doc/dbus-sharp-docs.source
---- dbus-0.61.orig/mono/doc/dbus-sharp-docs.source 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/dbus-sharp-docs.source 2004-05-15 13:43:29.000000000 +0200
-@@ -0,0 +1,4 @@
-+<?xml version="1.0"?>
-+<monodoc>
-+ <source provider="ecma" basefile="dbus-sharp-docs" path="various" />
-+</monodoc>
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/Arguments.xml dbus-0.61/mono/doc/en/DBus/Arguments.xml
---- dbus-0.61.orig/mono/doc/en/DBus/Arguments.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/Arguments.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,253 @@
-+<Type Name="Arguments" FullName="DBus.Arguments">
-+ <TypeSignature Language="C#" Value="public class Arguments : IEnumerable" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>System.Collections.IEnumerable</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type dbusType, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="dbusType" Type="System.Type" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="dbusType">a <see cref="T:System.Type" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="MatchType">
-+ <MemberSignature Language="C#" Value="public static Type MatchType (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Type</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Type" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="ParseInParameters">
-+ <MemberSignature Language="C#" Value="public static object [] ParseInParameters (System.Reflection.MethodInfo method);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object[]</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="method" Type="System.Reflection.MethodInfo" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="method">a <see cref="T:System.Reflection.MethodInfo" /></param>
-+ <returns>a <see cref="T:System.Object[]" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="ParseOutParameters">
-+ <MemberSignature Language="C#" Value="public static object [] ParseOutParameters (System.Reflection.MethodInfo method);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object[]</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="method" Type="System.Reflection.MethodInfo" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="method">a <see cref="T:System.Reflection.MethodInfo" /></param>
-+ <returns>a <see cref="T:System.Object[]" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="GetDBusTypeConstructor">
-+ <MemberSignature Language="C#" Value="public static System.Reflection.ConstructorInfo GetDBusTypeConstructor (Type dbusType, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Reflection.ConstructorInfo</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="dbusType" Type="System.Type" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="dbusType">a <see cref="T:System.Type" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Reflection.ConstructorInfo" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="GetCode">
-+ <MemberSignature Language="C#" Value="public static char GetCode (Type dbusType);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="dbusType" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="dbusType">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Char" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Finalize">
-+ <MemberSignature Language="C#" Value="protected override void Finalize ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public void Append (DBus.DBusType.IDBusType dbusType);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="dbusType" Type="DBus.DBusType.IDBusType" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="dbusType">a <see cref="T:DBus.DBusType.IDBusType" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="AppendResults">
-+ <MemberSignature Language="C#" Value="public void AppendResults (System.Reflection.MethodInfo method, object retVal, object [] parameters);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="method" Type="System.Reflection.MethodInfo" />
-+ <Parameter Name="retVal" Type="System.Object" />
-+ <Parameter Name="parameters" Type="System.Object[]" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="method">a <see cref="T:System.Reflection.MethodInfo" /></param>
-+ <param name="retVal">a <see cref="T:System.Object" /></param>
-+ <param name="parameters">a <see cref="T:System.Object" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="GetParameters">
-+ <MemberSignature Language="C#" Value="public object [] GetParameters (System.Reflection.MethodInfo method);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object[]</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="method" Type="System.Reflection.MethodInfo" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="method">a <see cref="T:System.Reflection.MethodInfo" /></param>
-+ <returns>a <see cref="T:System.Object[]" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="ToString">
-+ <MemberSignature Language="C#" Value="public override string ToString ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="GetNext">
-+ <MemberSignature Language="C#" Value="public DBus.DBusType.IDBusType GetNext ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.DBusType.IDBusType</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.DBusType.IDBusType" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="InitAppending">
-+ <MemberSignature Language="C#" Value="public void InitAppending ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="GetEnumerator">
-+ <MemberSignature Language="C#" Value="public virtual System.Collections.IEnumerator GetEnumerator ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Collections.IEnumerator</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Collections.IEnumerator" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="DBusTypes">
-+ <MemberSignature Language="C#" Value="public static System.Collections.Hashtable DBusTypes { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Collections.Hashtable</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Collections.Hashtable" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/Bus.xml dbus-0.61/mono/doc/en/DBus/Bus.xml
---- dbus-0.61.orig/mono/doc/en/DBus/Bus.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/Bus.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,60 @@
-+<Type Name="Bus" FullName="DBus.Bus">
-+ <TypeSignature Language="C#" Value="public class Bus" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="GetSessionBus">
-+ <MemberSignature Language="C#" Value="public static DBus.Connection GetSessionBus ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Connection</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Connection" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="GetSystemBus">
-+ <MemberSignature Language="C#" Value="public static DBus.Connection GetSystemBus ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Connection</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Connection" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Bus ();" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Bus" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/Connection.xml dbus-0.61/mono/doc/en/DBus/Connection.xml
---- dbus-0.61.orig/mono/doc/en/DBus/Connection.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/Connection.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,86 @@
-+<Type Name="Connection" FullName="DBus.Connection">
-+ <TypeSignature Language="C#" Value="public class Connection" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Flush">
-+ <MemberSignature Language="C#" Value="public void Flush ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="SetupWithMain">
-+ <MemberSignature Language="C#" Value="public void SetupWithMain ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Finalize">
-+ <MemberSignature Language="C#" Value="protected override void Finalize ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Connection (string address);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="address" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="address">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:DBus.Connection" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Timeout">
-+ <MemberSignature Language="C#" Value="public int Timeout { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Int32</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Int32" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/Custom.xml dbus-0.61/mono/doc/en/DBus/Custom.xml
---- dbus-0.61.orig/mono/doc/en/DBus/Custom.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/Custom.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,65 @@
-+<Type Name="Custom" FullName="DBus.Custom">
-+ <TypeSignature Language="C#" Value="public sealed struct Custom" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.ValueType</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Name">
-+ <MemberSignature Language="C#" Value="public string Name;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Data">
-+ <MemberSignature Language="C#" Value="public byte [] Data;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Byte[]</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Custom (string name, byte [] data);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="name" Type="System.String" />
-+ <Parameter Name="data" Type="System.Byte[]" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="name">a <see cref="T:System.String" /></param>
-+ <param name="data">a <see cref="T:System.Byte" /></param>
-+ <returns>a <see cref="T:DBus.Custom" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/DBusException.xml dbus-0.61/mono/doc/en/DBus/DBusException.xml
---- dbus-0.61.orig/mono/doc/en/DBus/DBusException.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/DBusException.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,26 @@
-+<Type Name="DBusException" FullName="DBus.DBusException">
-+ <TypeSignature Language="C#" Value="public class DBusException : System.ApplicationException, ISerializable" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.ApplicationException</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>System.Runtime.Serialization.ISerializable</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members />
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/ErrorMessage.xml dbus-0.61/mono/doc/en/DBus/ErrorMessage.xml
---- dbus-0.61.orig/mono/doc/en/DBus/ErrorMessage.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/ErrorMessage.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,61 @@
-+<Type Name="ErrorMessage" FullName="DBus.ErrorMessage">
-+ <TypeSignature Language="C#" Value="public class ErrorMessage : DBus.Message" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>DBus.Message</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public ErrorMessage ();" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.ErrorMessage" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public ErrorMessage (DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.ErrorMessage" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Name">
-+ <MemberSignature Language="C#" Value="public string Name { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/InterfaceAttribute.xml dbus-0.61/mono/doc/en/DBus/InterfaceAttribute.xml
---- dbus-0.61.orig/mono/doc/en/DBus/InterfaceAttribute.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/InterfaceAttribute.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,54 @@
-+<Type Name="InterfaceAttribute" FullName="DBus.InterfaceAttribute">
-+ <TypeSignature Language="C#" Value="public class InterfaceAttribute : System.Attribute" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Attribute</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes>
-+ <Attribute>
-+ <AttributeName>System.AttributeUsageAttribute</AttributeName>
-+ </Attribute>
-+ </Attributes>
-+ <Members>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public InterfaceAttribute (string interfaceName);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="interfaceName" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="interfaceName">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:DBus.InterfaceAttribute" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="InterfaceName">
-+ <MemberSignature Language="C#" Value="public string InterfaceName { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/Message.xml dbus-0.61/mono/doc/en/DBus/Message.xml
---- dbus-0.61.orig/mono/doc/en/DBus/Message.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/Message.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,431 @@
-+<Type Name="Message" FullName="DBus.Message">
-+ <TypeSignature Language="C#" Value="public class Message" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="service">
-+ <MemberSignature Language="C#" Value="protected DBus.Service service;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Service</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="pathName">
-+ <MemberSignature Language="C#" Value="protected string pathName;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="interfaceName">
-+ <MemberSignature Language="C#" Value="protected string interfaceName;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="name">
-+ <MemberSignature Language="C#" Value="protected string name;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Wrap">
-+ <MemberSignature Language="C#" Value="public static DBus.Message Wrap (IntPtr rawMessage, DBus.Service service);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Message</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="rawMessage" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="rawMessage">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.Message" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="dbus_message_new">
-+ <MemberSignature Language="C#" Value="protected static IntPtr dbus_message_new (int messageType);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.IntPtr</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="messageType" Type="System.Int32" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="messageType">a <see cref="T:System.Int32" /></param>
-+ <returns>a <see cref="T:System.IntPtr" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="dbus_message_unref">
-+ <MemberSignature Language="C#" Value="protected static void dbus_message_unref (IntPtr ptr);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="ptr" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="ptr">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="dbus_message_ref">
-+ <MemberSignature Language="C#" Value="protected static void dbus_message_ref (IntPtr ptr);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="ptr" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="ptr">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="dbus_message_allocate_data_slot">
-+ <MemberSignature Language="C#" Value="protected static bool dbus_message_allocate_data_slot (ref int slot);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="slot" Type="System.Int32&" RefType="ref" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="slot">a <see cref="T:System.Int32" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="dbus_message_free_data_slot">
-+ <MemberSignature Language="C#" Value="protected static void dbus_message_free_data_slot (ref int slot);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="slot" Type="System.Int32&" RefType="ref" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="slot">a <see cref="T:System.Int32" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="dbus_message_set_data">
-+ <MemberSignature Language="C#" Value="protected static bool dbus_message_set_data (IntPtr ptr, int slot, IntPtr data, IntPtr free_data_func);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="ptr" Type="System.IntPtr" />
-+ <Parameter Name="slot" Type="System.Int32" />
-+ <Parameter Name="data" Type="System.IntPtr" />
-+ <Parameter Name="free_data_func" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="ptr">a <see cref="T:System.IntPtr" /></param>
-+ <param name="slot">a <see cref="T:System.Int32" /></param>
-+ <param name="data">a <see cref="T:System.IntPtr" /></param>
-+ <param name="free_data_func">a <see cref="T:System.IntPtr" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="dbus_message_get_data">
-+ <MemberSignature Language="C#" Value="protected static IntPtr dbus_message_get_data (IntPtr ptr, int slot);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.IntPtr</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="ptr" Type="System.IntPtr" />
-+ <Parameter Name="slot" Type="System.Int32" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="ptr">a <see cref="T:System.IntPtr" /></param>
-+ <param name="slot">a <see cref="T:System.Int32" /></param>
-+ <returns>a <see cref="T:System.IntPtr" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Finalize">
-+ <MemberSignature Language="C#" Value="protected override void Finalize ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Send">
-+ <MemberSignature Language="C#" Value="public void Send (ref int serial);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="serial" Type="System.Int32&" RefType="ref" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="serial">a <see cref="T:System.Int32" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Send">
-+ <MemberSignature Language="C#" Value="public void Send ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="SendWithReply">
-+ <MemberSignature Language="C#" Value="public void SendWithReply ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="SendWithReplyAndBlock">
-+ <MemberSignature Language="C#" Value="public DBus.MethodReturn SendWithReplyAndBlock ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.MethodReturn</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.MethodReturn" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="protected Message ();" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Message" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="protected Message (IntPtr rawMessage, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="rawMessage" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="rawMessage">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.Message" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="protected Message (DBus.Message+MessageType messageType);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="messageType" Type="DBus.Message+MessageType" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="messageType">a <see cref="T:System.Int32" /></param>
-+ <returns>a <see cref="T:DBus.Message" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="protected Message (DBus.Message+MessageType messageType, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="messageType" Type="DBus.Message+MessageType" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="messageType">a <see cref="T:System.Int32" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.Message" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Type">
-+ <MemberSignature Language="C#" Value="public DBus.Message+MessageType Type { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Message+MessageType</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Message+MessageType" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Service">
-+ <MemberSignature Language="C#" Value="public DBus.Service Service { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Service</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Service" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="PathName">
-+ <MemberSignature Language="C#" Value="protected virtual string PathName { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="InterfaceName">
-+ <MemberSignature Language="C#" Value="protected virtual string InterfaceName { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Name">
-+ <MemberSignature Language="C#" Value="protected virtual string Name { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Key">
-+ <MemberSignature Language="C#" Value="public string Key { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Arguments">
-+ <MemberSignature Language="C#" Value="public DBus.Arguments Arguments { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Arguments</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Arguments" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Slot">
-+ <MemberSignature Language="C#" Value="protected int Slot { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Int32</ReturnType>
-+ </ReturnValue>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Int32" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/MessageType.xml dbus-0.61/mono/doc/en/DBus/MessageType.xml
---- dbus-0.61.orig/mono/doc/en/DBus/MessageType.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/MessageType.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,111 @@
-+<Type Name="MessageType" FullName="DBus.Message+MessageType">
-+ <TypeSignature Language="C#" Value="public enum MessageType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Enum</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>System.IComparable</InterfaceName>
-+ </Interface>
-+ <Interface>
-+ <InterfaceName>System.IConvertible</InterfaceName>
-+ </Interface>
-+ <Interface>
-+ <InterfaceName>System.IFormattable</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Invalid">
-+ <MemberSignature Language="C#" Value="Invalid" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Message+MessageType</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="MethodCall">
-+ <MemberSignature Language="C#" Value="MethodCall" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Message+MessageType</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="MethodReturn">
-+ <MemberSignature Language="C#" Value="MethodReturn" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Message+MessageType</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Error">
-+ <MemberSignature Language="C#" Value="Error" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Message+MessageType</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Signal">
-+ <MemberSignature Language="C#" Value="Signal" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Message+MessageType</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="value__">
-+ <MemberSignature Language="C#" Value="value__" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Int32</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/MethodAttribute.xml dbus-0.61/mono/doc/en/DBus/MethodAttribute.xml
---- dbus-0.61.orig/mono/doc/en/DBus/MethodAttribute.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/MethodAttribute.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,38 @@
-+<Type Name="MethodAttribute" FullName="DBus.MethodAttribute">
-+ <TypeSignature Language="C#" Value="public class MethodAttribute : System.Attribute" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Attribute</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes>
-+ <Attribute>
-+ <AttributeName>System.AttributeUsageAttribute</AttributeName>
-+ </Attribute>
-+ </Attributes>
-+ <Members>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public MethodAttribute ();" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.MethodAttribute" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/MethodCall.xml dbus-0.61/mono/doc/en/DBus/MethodCall.xml
---- dbus-0.61.orig/mono/doc/en/DBus/MethodCall.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/MethodCall.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,107 @@
-+<Type Name="MethodCall" FullName="DBus.MethodCall">
-+ <TypeSignature Language="C#" Value="public class MethodCall : DBus.Message" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>DBus.Message</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public MethodCall ();" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.MethodCall" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public MethodCall (DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.MethodCall" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public MethodCall (DBus.Service service, string pathName, string interfaceName, string name);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="service" Type="DBus.Service" />
-+ <Parameter Name="pathName" Type="System.String" />
-+ <Parameter Name="interfaceName" Type="System.String" />
-+ <Parameter Name="name" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <param name="pathName">a <see cref="T:System.String" /></param>
-+ <param name="interfaceName">a <see cref="T:System.String" /></param>
-+ <param name="name">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:DBus.MethodCall" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="PathName">
-+ <MemberSignature Language="C#" Value="public string PathName { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="InterfaceName">
-+ <MemberSignature Language="C#" Value="public string InterfaceName { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Name">
-+ <MemberSignature Language="C#" Value="public string Name { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/MethodReturn.xml dbus-0.61/mono/doc/en/DBus/MethodReturn.xml
---- dbus-0.61.orig/mono/doc/en/DBus/MethodReturn.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/MethodReturn.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,76 @@
-+<Type Name="MethodReturn" FullName="DBus.MethodReturn">
-+ <TypeSignature Language="C#" Value="public class MethodReturn : DBus.Message" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>DBus.Message</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public MethodReturn (DBus.MethodCall methodCall);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="methodCall" Type="DBus.MethodCall" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="methodCall">a <see cref="T:DBus.MethodCall" /></param>
-+ <returns>a <see cref="T:DBus.MethodReturn" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="PathName">
-+ <MemberSignature Language="C#" Value="public string PathName { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="InterfaceName">
-+ <MemberSignature Language="C#" Value="public string InterfaceName { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Name">
-+ <MemberSignature Language="C#" Value="public string Name { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/Server.xml dbus-0.61/mono/doc/en/DBus/Server.xml
---- dbus-0.61.orig/mono/doc/en/DBus/Server.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/Server.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,62 @@
-+<Type Name="Server" FullName="DBus.Server">
-+ <TypeSignature Language="C#" Value="public class Server" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Finalize">
-+ <MemberSignature Language="C#" Value="protected override void Finalize ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Server (string address);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="address" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="address">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:DBus.Server" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Address">
-+ <MemberSignature Language="C#" Value="public string Address { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/Service.xml dbus-0.61/mono/doc/en/DBus/Service.xml
---- dbus-0.61.orig/mono/doc/en/DBus/Service.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/Service.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,148 @@
-+<Type Name="Service" FullName="DBus.Service">
-+ <TypeSignature Language="C#" Value="public class Service" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Exists">
-+ <MemberSignature Language="C#" Value="public static bool Exists (DBus.Connection connection, string name);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="connection" Type="DBus.Connection" />
-+ <Parameter Name="name" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="connection">a <see cref="T:DBus.Connection" /></param>
-+ <param name="name">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public static DBus.Service Get (DBus.Connection connection, string name);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Service</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="connection" Type="DBus.Connection" />
-+ <Parameter Name="name" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="connection">a <see cref="T:DBus.Connection" /></param>
-+ <param name="name">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:DBus.Service" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="RegisterObject">
-+ <MemberSignature Language="C#" Value="public void RegisterObject (object handledObject, string pathName);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="handledObject" Type="System.Object" />
-+ <Parameter Name="pathName" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="handledObject">a <see cref="T:System.Object" /></param>
-+ <param name="pathName">a <see cref="T:System.String" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="GetObject">
-+ <MemberSignature Language="C#" Value="public object GetObject (Type type, string pathName);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="pathName" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="pathName">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Service (DBus.Connection connection, string name);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="connection" Type="DBus.Connection" />
-+ <Parameter Name="name" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="connection">a <see cref="T:DBus.Connection" /></param>
-+ <param name="name">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:DBus.Service" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Name">
-+ <MemberSignature Language="C#" Value="public string Name { get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Connection">
-+ <MemberSignature Language="C#" Value="public DBus.Connection Connection { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Connection</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Connection" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="SignalCalled">
-+ <MemberSignature Language="C#" Value="public event DBus.Service+SignalCalledHandler SignalCalled;" />
-+ <MemberType>Event</MemberType>
-+ <ReturnValue>
-+ <ReturnType>DBus.Service+SignalCalledHandler</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/Signal.xml dbus-0.61/mono/doc/en/DBus/Signal.xml
---- dbus-0.61.orig/mono/doc/en/DBus/Signal.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/Signal.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,107 @@
-+<Type Name="Signal" FullName="DBus.Signal">
-+ <TypeSignature Language="C#" Value="public class Signal : DBus.Message" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>DBus.Message</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Signal ();" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.Signal" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Signal (DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.Signal" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Signal (DBus.Service service, string pathName, string interfaceName, string name);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="service" Type="DBus.Service" />
-+ <Parameter Name="pathName" Type="System.String" />
-+ <Parameter Name="interfaceName" Type="System.String" />
-+ <Parameter Name="name" Type="System.String" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <param name="pathName">a <see cref="T:System.String" /></param>
-+ <param name="interfaceName">a <see cref="T:System.String" /></param>
-+ <param name="name">a <see cref="T:System.String" /></param>
-+ <returns>a <see cref="T:DBus.Signal" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="PathName">
-+ <MemberSignature Language="C#" Value="public string PathName { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="InterfaceName">
-+ <MemberSignature Language="C#" Value="public string InterfaceName { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Name">
-+ <MemberSignature Language="C#" Value="public string Name { set; get; };" />
-+ <MemberType>Property</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.String</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/SignalAttribute.xml dbus-0.61/mono/doc/en/DBus/SignalAttribute.xml
---- dbus-0.61.orig/mono/doc/en/DBus/SignalAttribute.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/SignalAttribute.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,38 @@
-+<Type Name="SignalAttribute" FullName="DBus.SignalAttribute">
-+ <TypeSignature Language="C#" Value="public class SignalAttribute : System.Attribute" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Attribute</BaseTypeName>
-+ </Base>
-+ <Interfaces />
-+ <Attributes>
-+ <Attribute>
-+ <AttributeName>System.AttributeUsageAttribute</AttributeName>
-+ </Attribute>
-+ </Attributes>
-+ <Members>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public SignalAttribute ();" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:DBus.SignalAttribute" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus/SignalCalledHandler.xml dbus-0.61/mono/doc/en/DBus/SignalCalledHandler.xml
---- dbus-0.61.orig/mono/doc/en/DBus/SignalCalledHandler.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus/SignalCalledHandler.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,35 @@
-+<Type Name="SignalCalledHandler" FullName="DBus.Service+SignalCalledHandler">
-+ <TypeSignature Language="C#" Value="public sealed delegate void SignalCalledHandler (DBus.Signal signal);" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Delegate</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>System.ICloneable</InterfaceName>
-+ </Interface>
-+ <Interface>
-+ <InterfaceName>System.Runtime.Serialization.ISerializable</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members />
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="signal" Type="DBus.Signal" />
-+ </Parameters>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Array.xml dbus-0.61/mono/doc/en/DBus.DBusType/Array.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Array.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Array.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="Array" FullName="DBus.DBusType.Array">
-+ <TypeSignature Language="C#" Value="public class Array : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Array (Array val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Array" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Array" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Array" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Array (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Array" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Boolean.xml dbus-0.61/mono/doc/en/DBus.DBusType/Boolean.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Boolean.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Boolean.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="Boolean" FullName="DBus.DBusType.Boolean">
-+ <TypeSignature Language="C#" Value="public class Boolean : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Boolean (bool val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Boolean" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Boolean" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Boolean (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Byte.xml dbus-0.61/mono/doc/en/DBus.DBusType/Byte.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Byte.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Byte.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,184 @@
-+<Type Name="Byte" FullName="DBus.DBusType.Byte">
-+ <TypeSignature Language="C#" Value="public class Byte : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Byte (byte val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Byte" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Byte" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Byte" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Byte (char val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Char" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Char" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Byte" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Byte (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Byte" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Custom.xml dbus-0.61/mono/doc/en/DBus.DBusType/Custom.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Custom.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Custom.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="Custom" FullName="DBus.DBusType.Custom">
-+ <TypeSignature Language="C#" Value="public class Custom : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Custom (DBus.Custom val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="DBus.Custom" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:DBus.Custom" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Custom" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Custom (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Custom" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Dict.xml dbus-0.61/mono/doc/en/DBus.DBusType/Dict.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Dict.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Dict.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="Dict" FullName="DBus.DBusType.Dict">
-+ <TypeSignature Language="C#" Value="public class Dict : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Dict (System.Collections.IDictionary val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Collections.IDictionary" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Collections.IDictionary" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Dict" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Dict (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Dict" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Double.xml dbus-0.61/mono/doc/en/DBus.DBusType/Double.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Double.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Double.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="Double" FullName="DBus.DBusType.Double">
-+ <TypeSignature Language="C#" Value="public class Double : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Double (double val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Double" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Double" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Double" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Double (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Double" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/IDBusType.xml dbus-0.61/mono/doc/en/DBus.DBusType/IDBusType.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/IDBusType.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/IDBusType.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,65 @@
-+<Type Name="IDBusType" FullName="DBus.DBusType.IDBusType">
-+ <TypeSignature Language="C#" Value="public abstract interface IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base />
-+ <Interfaces />
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Int32.xml dbus-0.61/mono/doc/en/DBus.DBusType/Int32.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Int32.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Int32.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="Int32" FullName="DBus.DBusType.Int32">
-+ <TypeSignature Language="C#" Value="public class Int32 : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Int32 (int val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Int32" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Int32" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Int32" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Int32 (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Int32" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Int64.xml dbus-0.61/mono/doc/en/DBus.DBusType/Int64.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Int64.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Int64.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="Int64" FullName="DBus.DBusType.Int64">
-+ <TypeSignature Language="C#" Value="public class Int64 : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Int64 (long val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Int64" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Int64" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Int64" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Int64 (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Int64" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/Nil.xml dbus-0.61/mono/doc/en/DBus.DBusType/Nil.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/Nil.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/Nil.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="Nil" FullName="DBus.DBusType.Nil">
-+ <TypeSignature Language="C#" Value="public class Nil : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Nil (object nil, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="nil" Type="System.Object" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="nil">a <see cref="T:System.Object" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Nil" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public Nil (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.Nil" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/ObjectPath.xml dbus-0.61/mono/doc/en/DBus.DBusType/ObjectPath.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/ObjectPath.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/ObjectPath.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="ObjectPath" FullName="DBus.DBusType.ObjectPath">
-+ <TypeSignature Language="C#" Value="public class ObjectPath : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public ObjectPath (object val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.Object" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.Object" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.ObjectPath" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public ObjectPath (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.ObjectPath" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/String.xml dbus-0.61/mono/doc/en/DBus.DBusType/String.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/String.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/String.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="String" FullName="DBus.DBusType.String">
-+ <TypeSignature Language="C#" Value="public class String : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public String (string val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.String" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.String" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public String (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.String" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/UInt32.xml dbus-0.61/mono/doc/en/DBus.DBusType/UInt32.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/UInt32.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/UInt32.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="UInt32" FullName="DBus.DBusType.UInt32">
-+ <TypeSignature Language="C#" Value="public class UInt32 : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public UInt32 (uint val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.UInt32" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.UInt32" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.UInt32" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public UInt32 (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.UInt32" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType/UInt64.xml dbus-0.61/mono/doc/en/DBus.DBusType/UInt64.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType/UInt64.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType/UInt64.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,168 @@
-+<Type Name="UInt64" FullName="DBus.DBusType.UInt64">
-+ <TypeSignature Language="C#" Value="public class UInt64 : IDBusType" Maintainer="auto" />
-+ <AssemblyInfo>
-+ <AssemblyName>dbus-sharp</AssemblyName>
-+ <AssemblyPublicKey>
-+ </AssemblyPublicKey>
-+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
-+ <AssemblyCulture>neutral</AssemblyCulture>
-+ <Attributes />
-+ </AssemblyInfo>
-+ <ThreadSafetyStatement>Gtk# is thread aware, but not thread safe; See the <link location="node:gtk-sharp/programming/threads">Gtk# Thread Programming</link> for details.</ThreadSafetyStatement>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ <Base>
-+ <BaseTypeName>System.Object</BaseTypeName>
-+ </Base>
-+ <Interfaces>
-+ <Interface>
-+ <InterfaceName>DBus.DBusType.IDBusType</InterfaceName>
-+ </Interface>
-+ </Interfaces>
-+ <Attributes />
-+ <Members>
-+ <Member MemberName="Code">
-+ <MemberSignature Language="C#" Value="public static char Code;" />
-+ <MemberType>Field</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Char</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Suits">
-+ <MemberSignature Language="C#" Value="public static bool Suits (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Boolean</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Boolean" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalIn">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalIn (System.Reflection.Emit.ILGenerator generator, Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="EmitMarshalOut">
-+ <MemberSignature Language="C#" Value="public static void EmitMarshalOut (System.Reflection.Emit.ILGenerator generator, Type type, bool isReturn);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="generator" Type="System.Reflection.Emit.ILGenerator" />
-+ <Parameter Name="type" Type="System.Type" />
-+ <Parameter Name="isReturn" Type="System.Boolean" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="generator">a <see cref="T:System.Reflection.Emit.ILGenerator" /></param>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <param name="isReturn">a <see cref="T:System.Boolean" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Append">
-+ <MemberSignature Language="C#" Value="public virtual void Append (IntPtr iter);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Void</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get ();" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters />
-+ <Docs>
-+ <summary>To be added</summary>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName="Get">
-+ <MemberSignature Language="C#" Value="public virtual object Get (Type type);" />
-+ <MemberType>Method</MemberType>
-+ <ReturnValue>
-+ <ReturnType>System.Object</ReturnType>
-+ </ReturnValue>
-+ <Parameters>
-+ <Parameter Name="type" Type="System.Type" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="type">a <see cref="T:System.Type" /></param>
-+ <returns>a <see cref="T:System.Object" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public UInt64 (ulong val, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="val" Type="System.UInt64" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="val">a <see cref="T:System.UInt64" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.UInt64" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ <Member MemberName=".ctor">
-+ <MemberSignature Language="C#" Value="public UInt64 (IntPtr iter, DBus.Service service);" />
-+ <MemberType>Constructor</MemberType>
-+ <ReturnValue />
-+ <Parameters>
-+ <Parameter Name="iter" Type="System.IntPtr" />
-+ <Parameter Name="service" Type="DBus.Service" />
-+ </Parameters>
-+ <Docs>
-+ <summary>To be added</summary>
-+ <param name="iter">a <see cref="T:System.IntPtr" /></param>
-+ <param name="service">a <see cref="T:DBus.Service" /></param>
-+ <returns>a <see cref="T:DBus.DBusType.UInt64" /></returns>
-+ <remarks>To be added</remarks>
-+ </Docs>
-+ </Member>
-+ </Members>
-+</Type>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.DBusType.xml dbus-0.61/mono/doc/en/DBus.DBusType.xml
---- dbus-0.61.orig/mono/doc/en/DBus.DBusType.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.DBusType.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,10 @@
-+<Namespace Name="DBus" FullName="DBus" FullNameSP="DBus" Maintainer="Mono">
-+ <Docs>
-+ <summary>Types for the D-BUS binding for .NET.</summary>
-+ <remarks>
-+ <para>
-+ Types used by the D-BUS library.
-+ </para>
-+ </remarks>
-+ </Docs>
-+</Namespace>
-diff -Naur dbus-0.61.orig/mono/doc/en/DBus.xml dbus-0.61/mono/doc/en/DBus.xml
---- dbus-0.61.orig/mono/doc/en/DBus.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/doc/en/DBus.xml 2006-02-24 18:22:23.000000000 +0100
-@@ -0,0 +1,34 @@
-+<Namespace Name="DBus" FullName="DBus" FullNameSP="DBus" Maintainer="Mono">
-+ <Docs>
-+ <summary>D-BUS binding for .NET.</summary>
-+ <remarks>
-+ <para>
-+ D-BUS is a message bus system, a simple way for applications
-+ to talk to one another.
-+ </para>
-+ <para>
-+ The message bus daemon forms the hub of a wheel. Each spoke
-+ of the wheel is a one-to-one connection to an application
-+ using libdbus. An application sends a message to the bus
-+ daemon over its spoke, and the bus daemon forwards the
-+ message to other connected applications as appropriate. Think
-+ of the daemon as a router.
-+ </para>
-+ <para>
-+ The bus daemon has multiple instances on a typical
-+ computer. The first instance is a machine-global singleton,
-+ that is, a system daemon similar to sendmail or Apache. This
-+ instance has heavy security restrictions on what messages it
-+ will accept, and is used for systemwide communication. The
-+ other instances are created one per user login session. These
-+ instances allow applications in the user's session to
-+ communicate with one another.
-+ </para>
-+ <para>
-+ The systemwide and per-user daemons are separate. Normal
-+ within-session IPC does not involve the systemwide message
-+ bus process and vice versa.
-+ </para>
-+ </remarks>
-+ </Docs>
-+</Namespace>
-diff -Naur dbus-0.61.orig/mono/example/BusListener.cs dbus-0.61/mono/example/BusListener.cs
---- dbus-0.61.orig/mono/example/BusListener.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/example/BusListener.cs 2005-01-25 20:47:13.000000000 +0100
-@@ -0,0 +1,44 @@
-+namespace Foo
-+{
-+ using System;
-+ using DBus;
-+ using Gtk;
-+
-+ public class BusListener
-+ {
-+
-+ static void OnNameOwnerChanged (string name,
-+ string oldOwner,
-+ string newOwner)
-+ {
-+ if (oldOwner == "")
-+ Console.WriteLine ("{0} created by {1}",
-+ name, newOwner);
-+ else if (newOwner == "")
-+ Console.WriteLine ("{0} released by {1}",
-+ name, oldOwner);
-+ else
-+ Console.WriteLine ("{0} transfered from {1} to {2}",
-+ name, oldOwner, newOwner);
-+ }
-+
-+ public static int Main (string [] args)
-+ {
-+ Application.Init ();
-+
-+ Connection connection;
-+ connection = Bus.GetSessionBus ();
-+
-+ BusDriver driver = BusDriver.New (connection);
-+ driver.NameOwnerChanged += new NameOwnerChangedHandler (OnNameOwnerChanged);
-+
-+ Console.WriteLine ("Listening for name owner changes...");
-+
-+ Application.Run ();
-+
-+ return 0;
-+ }
-+ }
-+
-+
-+}
-diff -Naur dbus-0.61.orig/mono/example/EchoClient.cs dbus-0.61/mono/example/EchoClient.cs
---- dbus-0.61.orig/mono/example/EchoClient.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/example/EchoClient.cs 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,19 @@
-+namespace Foo
-+{
-+ using System;
-+ using DBus;
-+
-+ public class EchoClient
-+ {
-+ public static int Main(string [] args)
-+ {
-+ Connection connection = Bus.GetSessionBus();
-+ Service service = Service.Get(connection, "org.freedesktop.Test");
-+ Echoer echoer = (Echoer)
-+ service.GetObject(typeof(Echoer), "/org/freedesktop/Test/Echoer");
-+ System.Console.WriteLine(echoer.Echo("Hello world!"));
-+
-+ return 0;
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/example/EchoServer.cs dbus-0.61/mono/example/EchoServer.cs
---- dbus-0.61.orig/mono/example/EchoServer.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/example/EchoServer.cs 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,23 @@
-+namespace Foo
-+{
-+ using System;
-+ using DBus;
-+ using Gtk;
-+
-+ public class EchoServer
-+ {
-+ public static int Main(string [] args)
-+ {
-+ Application.Init();
-+
-+ Connection connection = Bus.GetSessionBus();
-+ Service service = new Service(connection, "org.freedesktop.Test");
-+ Echoer echoer = new Echoer();
-+ service.RegisterObject(echoer, "/org/freedesktop/Test/Echoer");
-+
-+ Application.Run();
-+
-+ return 0;
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/example/Echoer.cs dbus-0.61/mono/example/Echoer.cs
---- dbus-0.61.orig/mono/example/Echoer.cs 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/example/Echoer.cs 2004-03-23 13:10:32.000000000 +0100
-@@ -0,0 +1,16 @@
-+namespace Foo
-+{
-+ using System;
-+ using DBus;
-+
-+ [Interface("org.freedesktop.Test.Echoer")]
-+ public class Echoer
-+ {
-+ [Method]
-+ public virtual string Echo(string message)
-+ {
-+ System.Console.WriteLine("I received: " + message);
-+ return "Reply: " + message;
-+ }
-+ }
-+}
-diff -Naur dbus-0.61.orig/mono/example/Makefile.am dbus-0.61/mono/example/Makefile.am
---- dbus-0.61.orig/mono/example/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/example/Makefile.am 2005-01-12 23:52:34.000000000 +0100
-@@ -0,0 +1,22 @@
-+NOINST_EXES=echo-server.exe echo-client.exe bus-listener.exe
-+DISTCLEANFILES=$(NOINST_EXES) $(NOINST_EXES:%=%.mdb)
-+
-+all: $(NOINST_EXES)
-+
-+echo-server.exe: EchoServer.cs Echoer.cs
-+ $(CSC) --debug --target exe -L .. -r:../dbus-sharp.dll -pkg:gtk-sharp -o echo-server.exe $(srcdir)/EchoServer.cs $(srcdir)/Echoer.cs
-+
-+echo-client.exe: EchoClient.cs Echoer.cs
-+ $(CSC) --debug --target exe -L .. -r:../dbus-sharp.dll -o echo-client.exe $(srcdir)/EchoClient.cs $(srcdir)/Echoer.cs
-+
-+bus-listener.exe: BusListener.cs
-+ $(CSC) --debug --target exe -L .. -r:../dbus-sharp.dll -pkg:gtk-sharp -o bus-listener.exe $(srcdir)/BusListener.cs
-+
-+
-+clean:
-+ rm -f $(NOINST_EXES) $(NOINST_EXES:%=%.mdb)
-+
-+install: all
-+
-+EXTRA_DIST=EchoServer.cs EchoClient.cs Echoer.cs BusListener.cs
-+
-diff -Naur dbus-0.61.orig/mono/example/Makefile.in dbus-0.61/mono/example/Makefile.in
---- dbus-0.61.orig/mono/example/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/mono/example/Makefile.in 2006-02-27 22:34:35.000000000 +0100
-@@ -0,0 +1,484 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = mono/example
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+SOURCES =
-+DIST_SOURCES =
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+NOINST_EXES = echo-server.exe echo-client.exe bus-listener.exe
-+DISTCLEANFILES = $(NOINST_EXES) $(NOINST_EXES:%=%.mdb)
-+EXTRA_DIST = EchoServer.cs EchoClient.cs Echoer.cs BusListener.cs
-+all: all-am
-+
-+.SUFFIXES:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mono/example/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu mono/example/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+tags: TAGS
-+TAGS:
-+
-+ctags: CTAGS
-+CTAGS:
-+
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-am
-+all-am: Makefile
-+installdirs:
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-libtool
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-+ distclean distclean-generic distclean-libtool distdir dvi \
-+ dvi-am html html-am info info-am install install-am \
-+ install-data install-data-am install-exec install-exec-am \
-+ install-info install-info-am install-man install-strip \
-+ installcheck installcheck-am installdirs maintainer-clean \
-+ maintainer-clean-generic mostlyclean mostlyclean-generic \
-+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
-+ uninstall-info-am
-+
-+
-+all: $(NOINST_EXES)
-+
-+echo-server.exe: EchoServer.cs Echoer.cs
-+ $(CSC) --debug --target exe -L .. -r:../dbus-sharp.dll -pkg:gtk-sharp -o echo-server.exe $(srcdir)/EchoServer.cs $(srcdir)/Echoer.cs
-+
-+echo-client.exe: EchoClient.cs Echoer.cs
-+ $(CSC) --debug --target exe -L .. -r:../dbus-sharp.dll -o echo-client.exe $(srcdir)/EchoClient.cs $(srcdir)/Echoer.cs
-+
-+bus-listener.exe: BusListener.cs
-+ $(CSC) --debug --target exe -L .. -r:../dbus-sharp.dll -pkg:gtk-sharp -o bus-listener.exe $(srcdir)/BusListener.cs
-+
-+clean:
-+ rm -f $(NOINST_EXES) $(NOINST_EXES:%=%.mdb)
-+
-+install: all
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/py-compile dbus-0.61/py-compile
---- dbus-0.61.orig/py-compile 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/py-compile 2005-12-19 16:38:26.000000000 +0100
-@@ -0,0 +1,146 @@
-+#!/bin/sh
-+# py-compile - Compile a Python program
-+
-+scriptversion=2005-05-14.22
-+
-+# Copyright (C) 2000, 2001, 2003, 2004, 2005 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 2, or (at your option)
-+# 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, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+# 02110-1301, USA.
-+
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+# This file is maintained in Automake, please report
-+# bugs to <bug-automake at gnu.org> or send patches to
-+# <automake-patches at gnu.org>.
-+
-+if [ -z "$PYTHON" ]; then
-+ PYTHON=python
-+fi
-+
-+basedir=
-+destdir=
-+files=
-+while test $# -ne 0; do
-+ case "$1" in
-+ --basedir)
-+ basedir=$2
-+ if test -z "$basedir"; then
-+ echo "$0: Missing argument to --basedir." 1>&2
-+ exit 1
-+ fi
-+ shift
-+ ;;
-+ --destdir)
-+ destdir=$2
-+ if test -z "$destdir"; then
-+ echo "$0: Missing argument to --destdir." 1>&2
-+ exit 1
-+ fi
-+ shift
-+ ;;
-+ -h|--h*)
-+ cat <<\EOF
-+Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..."
-+
-+Byte compile some python scripts FILES. Use --destdir to specify any
-+leading directory path to the FILES that you don't want to include in the
-+byte compiled file. Specify --basedir for any additional path information you
-+do want to be shown in the byte compiled file.
-+
-+Example:
-+ py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py
-+
-+Report bugs to <bug-automake at gnu.org>.
-+EOF
-+ exit $?
-+ ;;
-+ -v|--v*)
-+ echo "py-compile $scriptversion"
-+ exit $?
-+ ;;
-+ *)
-+ files="$files $1"
-+ ;;
-+ esac
-+ shift
-+done
-+
-+if test -z "$files"; then
-+ echo "$0: No files given. Try \`$0 --help' for more information." 1>&2
-+ exit 1
-+fi
-+
-+# if basedir was given, then it should be prepended to filenames before
-+# byte compilation.
-+if [ -z "$basedir" ]; then
-+ pathtrans="path = file"
-+else
-+ pathtrans="path = os.path.join('$basedir', file)"
-+fi
-+
-+# if destdir was given, then it needs to be prepended to the filename to
-+# byte compile but not go into the compiled file.
-+if [ -z "$destdir" ]; then
-+ filetrans="filepath = path"
-+else
-+ filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)"
-+fi
-+
-+$PYTHON -c "
-+import sys, os, string, py_compile
-+
-+files = '''$files'''
-+
-+print 'Byte-compiling python modules...'
-+for file in string.split(files):
-+ $pathtrans
-+ $filetrans
-+ if not os.path.exists(filepath) or not (len(filepath) >= 3
-+ and filepath[-3:] == '.py'):
-+ continue
-+ print file,
-+ sys.stdout.flush()
-+ py_compile.compile(filepath, filepath + 'c', path)
-+print" || exit $?
-+
-+# this will fail for python < 1.5, but that doesn't matter ...
-+$PYTHON -O -c "
-+import sys, os, string, py_compile
-+
-+files = '''$files'''
-+print 'Byte-compiling python modules (optimized versions) ...'
-+for file in string.split(files):
-+ $pathtrans
-+ $filetrans
-+ if not os.path.exists(filepath) or not (len(filepath) >= 3
-+ and filepath[-3:] == '.py'):
-+ continue
-+ print file,
-+ sys.stdout.flush()
-+ py_compile.compile(filepath, filepath + 'o', path)
-+print" 2>/dev/null || :
-+
-+# Local Variables:
-+# mode: shell-script
-+# sh-indentation: 2
-+# eval: (add-hook 'write-file-hooks 'time-stamp)
-+# time-stamp-start: "scriptversion="
-+# time-stamp-format: "%:y-%02m-%02d.%02H"
-+# time-stamp-end: "$"
-+# End:
-diff -Naur dbus-0.61.orig/python/Makefile.am dbus-0.61/python/Makefile.am
---- dbus-0.61.orig/python/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/Makefile.am 2005-10-05 22:43:46.000000000 +0200
-@@ -0,0 +1,56 @@
-+SUBDIRS=examples
-+
-+INCLUDES=-I$(srcdir)/$(top_builddir) -I$(srcdir)/$(top_builddir)/dbus $(DBUS_CLIENT_CFLAGS) $(PYTHON_INCLUDES) -DDBUS_COMPILATION=1
-+
-+dbusmoduledir = $(pyexecdir)
-+dbusmodule_PYTHON = dbus.pth
-+
-+dbusdir = $(pyexecdir)/dbus
-+dbus_PYTHON = \
-+ __init__.py \
-+ _dbus.py \
-+ decorators.py \
-+ exceptions.py \
-+ service.py \
-+ proxies.py \
-+ _util.py \
-+ types.py \
-+ matchrules.py \
-+ glib.py \
-+ introspect_parser.py
-+
-+dbusbindingsdir = $(pyexecdir)/dbus
-+dbusbindings_LTLIBRARIES = dbus_bindings.la dbus_glib_bindings.la
-+
-+dbus_bindings_la_LDFLAGS = -module -avoid-version -fPIC -export-symbols-regex initdbus_bindings
-+dbus_bindings_la_LIBADD = $(top_builddir)/dbus/libdbus-1.la
-+nodist_dbus_bindings_la_SOURCES = dbus_bindings.c
-+
-+dbus_glib_bindings_la_LDFLAGS = -module -avoid-version -fPIC -export-symbols-regex initdbus_glib_bindings
-+dbus_glib_bindings_la_LIBADD = $(top_builddir)/dbus/libdbus-1.la $(top_builddir)/glib/libdbus-glib-1.la
-+dbus_glib_bindings_la_CFLAGS = $(DBUS_GLIB_CFLAGS) $(DBUS_GLIB_TOOL_CFLAGS)
-+nodist_dbus_glib_bindings_la_SOURCES = dbus_glib_bindings.c
-+
-+
-+EXTRA_DIST = \
-+ dbus_h_wrapper.h \
-+ dbus_bindings.pyx \
-+ dbus_glib_bindings.pyx \
-+ dbus_bindings.pxd.in \
-+ extract.py
-+
-+CLEANFILES = \
-+ dbus_bindings.pxd \
-+ dbus_bindings.c \
-+ dbus_glib_bindings.c
-+
-+
-+dbus_bindings.pxd: $(srcdir)/dbus_bindings.pxd.in $(srcdir)/extract.py
-+ -$(PYTHON) $(srcdir)/extract.py $(srcdir)/dbus_bindings.pxd.in -I$(srcdir)/$(top_builddir) -I$(srcdir) > $@.tmp && mv $@.tmp $@
-+
-+dbus_bindings.c: $(srcdir)/dbus_bindings.pyx dbus_bindings.pxd
-+ pyrexc $(srcdir)/dbus_bindings.pyx -I. -o ./dbus_bindings.c
-+
-+dbus_glib_bindings.c: $(srcdir)/dbus_glib_bindings.pyx dbus_bindings.pxd
-+ pyrexc $(srcdir)/dbus_glib_bindings.pyx -I. -o ./dbus_glib_bindings.c
-+
-diff -Naur dbus-0.61.orig/python/Makefile.in dbus-0.61/python/Makefile.in
---- dbus-0.61.orig/python/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/Makefile.in 2006-02-27 22:34:36.000000000 +0100
-@@ -0,0 +1,849 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = python
-+DIST_COMMON = $(dbus_PYTHON) $(dbusmodule_PYTHON) \
-+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+am__installdirs = "$(DESTDIR)$(dbusbindingsdir)" \
-+ "$(DESTDIR)$(dbusdir)" "$(DESTDIR)$(dbusmoduledir)"
-+dbusbindingsLTLIBRARIES_INSTALL = $(INSTALL)
-+LTLIBRARIES = $(dbusbindings_LTLIBRARIES)
-+dbus_bindings_la_DEPENDENCIES = $(top_builddir)/dbus/libdbus-1.la
-+nodist_dbus_bindings_la_OBJECTS = dbus_bindings.lo
-+dbus_bindings_la_OBJECTS = $(nodist_dbus_bindings_la_OBJECTS)
-+dbus_glib_bindings_la_DEPENDENCIES = \
-+ $(top_builddir)/dbus/libdbus-1.la \
-+ $(top_builddir)/glib/libdbus-glib-1.la
-+nodist_dbus_glib_bindings_la_OBJECTS = \
-+ dbus_glib_bindings_la-dbus_glib_bindings.lo
-+dbus_glib_bindings_la_OBJECTS = \
-+ $(nodist_dbus_glib_bindings_la_OBJECTS)
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(nodist_dbus_bindings_la_SOURCES) \
-+ $(nodist_dbus_glib_bindings_la_SOURCES)
-+DIST_SOURCES =
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+dbusPYTHON_INSTALL = $(INSTALL_DATA)
-+dbusmodulePYTHON_INSTALL = $(INSTALL_DATA)
-+py_compile = $(top_srcdir)/py-compile
-+ETAGS = etags
-+CTAGS = ctags
-+DIST_SUBDIRS = $(SUBDIRS)
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+SUBDIRS = examples
-+INCLUDES = -I$(srcdir)/$(top_builddir) -I$(srcdir)/$(top_builddir)/dbus $(DBUS_CLIENT_CFLAGS) $(PYTHON_INCLUDES) -DDBUS_COMPILATION=1
-+dbusmoduledir = $(pyexecdir)
-+dbusmodule_PYTHON = dbus.pth
-+dbusdir = $(pyexecdir)/dbus
-+dbus_PYTHON = \
-+ __init__.py \
-+ _dbus.py \
-+ decorators.py \
-+ exceptions.py \
-+ service.py \
-+ proxies.py \
-+ _util.py \
-+ types.py \
-+ matchrules.py \
-+ glib.py \
-+ introspect_parser.py
-+
-+dbusbindingsdir = $(pyexecdir)/dbus
-+dbusbindings_LTLIBRARIES = dbus_bindings.la dbus_glib_bindings.la
-+dbus_bindings_la_LDFLAGS = -module -avoid-version -fPIC -export-symbols-regex initdbus_bindings
-+dbus_bindings_la_LIBADD = $(top_builddir)/dbus/libdbus-1.la
-+nodist_dbus_bindings_la_SOURCES = dbus_bindings.c
-+dbus_glib_bindings_la_LDFLAGS = -module -avoid-version -fPIC -export-symbols-regex initdbus_glib_bindings
-+dbus_glib_bindings_la_LIBADD = $(top_builddir)/dbus/libdbus-1.la $(top_builddir)/glib/libdbus-glib-1.la
-+dbus_glib_bindings_la_CFLAGS = $(DBUS_GLIB_CFLAGS) $(DBUS_GLIB_TOOL_CFLAGS)
-+nodist_dbus_glib_bindings_la_SOURCES = dbus_glib_bindings.c
-+EXTRA_DIST = \
-+ dbus_h_wrapper.h \
-+ dbus_bindings.pyx \
-+ dbus_glib_bindings.pyx \
-+ dbus_bindings.pxd.in \
-+ extract.py
-+
-+CLEANFILES = \
-+ dbus_bindings.pxd \
-+ dbus_bindings.c \
-+ dbus_glib_bindings.c
-+
-+all: all-recursive
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu python/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu python/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+install-dbusbindingsLTLIBRARIES: $(dbusbindings_LTLIBRARIES)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(dbusbindingsdir)" || $(mkdir_p) "$(DESTDIR)$(dbusbindingsdir)"
-+ @list='$(dbusbindings_LTLIBRARIES)'; for p in $$list; do \
-+ if test -f $$p; then \
-+ f=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=install $(dbusbindingsLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(dbusbindingsdir)/$$f'"; \
-+ $(LIBTOOL) --mode=install $(dbusbindingsLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(dbusbindingsdir)/$$f"; \
-+ else :; fi; \
-+ done
-+
-+uninstall-dbusbindingsLTLIBRARIES:
-+ @$(NORMAL_UNINSTALL)
-+ @set -x; list='$(dbusbindings_LTLIBRARIES)'; for p in $$list; do \
-+ p=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(dbusbindingsdir)/$$p'"; \
-+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(dbusbindingsdir)/$$p"; \
-+ done
-+
-+clean-dbusbindingsLTLIBRARIES:
-+ -test -z "$(dbusbindings_LTLIBRARIES)" || rm -f $(dbusbindings_LTLIBRARIES)
-+ @list='$(dbusbindings_LTLIBRARIES)'; for p in $$list; do \
-+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-+ test "$$dir" != "$$p" || dir=.; \
-+ echo "rm -f \"$${dir}/so_locations\""; \
-+ rm -f "$${dir}/so_locations"; \
-+ done
-+dbus_bindings.la: $(dbus_bindings_la_OBJECTS) $(dbus_bindings_la_DEPENDENCIES)
-+ $(LINK) -rpath $(dbusbindingsdir) $(dbus_bindings_la_LDFLAGS) $(dbus_bindings_la_OBJECTS) $(dbus_bindings_la_LIBADD) $(LIBS)
-+dbus_glib_bindings.la: $(dbus_glib_bindings_la_OBJECTS) $(dbus_glib_bindings_la_DEPENDENCIES)
-+ $(LINK) -rpath $(dbusbindingsdir) $(dbus_glib_bindings_la_LDFLAGS) $(dbus_glib_bindings_la_OBJECTS) $(dbus_glib_bindings_la_LIBADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus_bindings.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus_glib_bindings_la-dbus_glib_bindings.Plo at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+dbus_glib_bindings_la-dbus_glib_bindings.lo: dbus_glib_bindings.c
-+ at am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dbus_glib_bindings_la_CFLAGS) $(CFLAGS) -MT dbus_glib_bindings_la-dbus_glib_bindings.lo -MD -MP -MF "$(DEPDIR)/dbus_glib_bindings_la-dbus_glib_bindings.Tpo" -c -o dbus_glib_bindings_la-dbus_glib_bindings.lo `test -f 'dbus_glib_bindings.c' || echo '$(srcdir)/'`dbus_glib_bindings.c; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/dbus_glib_bindings_la-dbus_glib_bindings.Tpo" "$(DEPDIR)/dbus_glib_bindings_la-dbus_glib_bindings.Plo"; else rm -f "$(DEPDIR)/dbus_glib_bindings_la-dbus_glib_bindings.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dbus_glib_bindings.c' object='dbus_glib_bindings_la-dbus_glib_bindings.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dbus_glib_bindings_la_CFLAGS) $(CFLAGS) -c -o dbus_glib_bindings_la-dbus_glib_bindings.lo `test -f 'dbus_glib_bindings.c' || echo '$(srcdir)/'`dbus_glib_bindings.c
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-dbusPYTHON: $(dbus_PYTHON)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(dbusdir)" || $(mkdir_p) "$(DESTDIR)$(dbusdir)"
-+ @list='$(dbus_PYTHON)'; dlist=''; for p in $$list; do\
-+ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
-+ if test -f $$b$$p; then \
-+ f=$(am__strip_dir) \
-+ dlist="$$dlist $$f"; \
-+ echo " $(dbusPYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(dbusdir)/$$f'"; \
-+ $(dbusPYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(dbusdir)/$$f"; \
-+ else :; fi; \
-+ done; \
-+ if test -n "$$dlist"; then \
-+ if test -z "$(DESTDIR)"; then \
-+ PYTHON=$(PYTHON) $(py_compile) --basedir "$(dbusdir)" $$dlist; \
-+ else \
-+ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(dbusdir)" $$dlist; \
-+ fi; \
-+ else :; fi
-+
-+uninstall-dbusPYTHON:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(dbus_PYTHON)'; dlist=''; for p in $$list; do\
-+ f=$(am__strip_dir) \
-+ rm -f "$(DESTDIR)$(dbusdir)/$$f"; \
-+ rm -f "$(DESTDIR)$(dbusdir)/$${f}c"; \
-+ rm -f "$(DESTDIR)$(dbusdir)/$${f}o"; \
-+ done
-+install-dbusmodulePYTHON: $(dbusmodule_PYTHON)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(dbusmoduledir)" || $(mkdir_p) "$(DESTDIR)$(dbusmoduledir)"
-+ @list='$(dbusmodule_PYTHON)'; dlist=''; for p in $$list; do\
-+ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \
-+ if test -f $$b$$p; then \
-+ f=$(am__strip_dir) \
-+ dlist="$$dlist $$f"; \
-+ echo " $(dbusmodulePYTHON_INSTALL) '$$b$$p' '$(DESTDIR)$(dbusmoduledir)/$$f'"; \
-+ $(dbusmodulePYTHON_INSTALL) "$$b$$p" "$(DESTDIR)$(dbusmoduledir)/$$f"; \
-+ else :; fi; \
-+ done; \
-+ if test -n "$$dlist"; then \
-+ if test -z "$(DESTDIR)"; then \
-+ PYTHON=$(PYTHON) $(py_compile) --basedir "$(dbusmoduledir)" $$dlist; \
-+ else \
-+ PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(dbusmoduledir)" $$dlist; \
-+ fi; \
-+ else :; fi
-+
-+uninstall-dbusmodulePYTHON:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(dbusmodule_PYTHON)'; dlist=''; for p in $$list; do\
-+ f=$(am__strip_dir) \
-+ rm -f "$(DESTDIR)$(dbusmoduledir)/$$f"; \
-+ rm -f "$(DESTDIR)$(dbusmoduledir)/$${f}c"; \
-+ rm -f "$(DESTDIR)$(dbusmoduledir)/$${f}o"; \
-+ done
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-recursive
-+all-am: Makefile $(LTLIBRARIES)
-+installdirs: installdirs-recursive
-+installdirs-am:
-+ for dir in "$(DESTDIR)$(dbusbindingsdir)" "$(DESTDIR)$(dbusdir)" "$(DESTDIR)$(dbusmoduledir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-recursive
-+
-+clean-am: clean-dbusbindingsLTLIBRARIES clean-generic clean-libtool \
-+ mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am: install-dbusPYTHON install-dbusbindingsLTLIBRARIES \
-+ install-dbusmodulePYTHON
-+
-+install-exec-am:
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-dbusPYTHON uninstall-dbusbindingsLTLIBRARIES \
-+ uninstall-dbusmodulePYTHON uninstall-info-am
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
-+ clean clean-dbusbindingsLTLIBRARIES clean-generic \
-+ clean-libtool clean-recursive ctags ctags-recursive distclean \
-+ distclean-compile distclean-generic distclean-libtool \
-+ distclean-recursive distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-dbusPYTHON \
-+ install-dbusbindingsLTLIBRARIES install-dbusmodulePYTHON \
-+ install-exec install-exec-am install-info install-info-am \
-+ install-man install-strip installcheck installcheck-am \
-+ installdirs installdirs-am maintainer-clean \
-+ maintainer-clean-generic maintainer-clean-recursive \
-+ mostlyclean mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
-+ tags tags-recursive uninstall uninstall-am \
-+ uninstall-dbusPYTHON uninstall-dbusbindingsLTLIBRARIES \
-+ uninstall-dbusmodulePYTHON uninstall-info-am
-+
-+
-+dbus_bindings.pxd: $(srcdir)/dbus_bindings.pxd.in $(srcdir)/extract.py
-+ -$(PYTHON) $(srcdir)/extract.py $(srcdir)/dbus_bindings.pxd.in -I$(srcdir)/$(top_builddir) -I$(srcdir) > $@.tmp && mv $@.tmp $@
-+
-+dbus_bindings.c: $(srcdir)/dbus_bindings.pyx dbus_bindings.pxd
-+ pyrexc $(srcdir)/dbus_bindings.pyx -I. -o ./dbus_bindings.c
-+
-+dbus_glib_bindings.c: $(srcdir)/dbus_glib_bindings.pyx dbus_bindings.pxd
-+ pyrexc $(srcdir)/dbus_glib_bindings.pyx -I. -o ./dbus_glib_bindings.c
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/python/__init__.py dbus-0.61/python/__init__.py
---- dbus-0.61.orig/python/__init__.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/__init__.py 2005-09-07 00:42:54.000000000 +0200
-@@ -0,0 +1,5 @@
-+from _dbus import *
-+from types import *
-+
-+version = (0, 51, 0)
-+_dbus_main_loop_setup_function = None
-diff -Naur dbus-0.61.orig/python/_dbus.py dbus-0.61/python/_dbus.py
---- dbus-0.61.orig/python/_dbus.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/_dbus.py 2006-02-16 00:45:50.000000000 +0100
-@@ -0,0 +1,308 @@
-+
-+"""Module for high-level communication over the FreeDesktop.org Bus (DBus)
-+
-+DBus allows you to share and access remote objects between processes
-+running on the desktop, and also to access system services (such as
-+the print spool).
-+
-+To use DBus, first get a Bus object, which provides a connection to one
-+of a few standard dbus-daemon instances that might be running. From the
-+Bus you can get a RemoteService. A service is provided by an application or
-+process connected to the Bus, and represents a set of objects. Once you
-+have a RemoteService you can get a RemoteObject that implements a specific interface
-+(an interface is just a standard group of member functions). Then you can call
-+those member functions directly.
-+
-+You can think of a complete method call as looking something like:
-+
-+Bus:SESSION -> Service:org.gnome.Evolution -> Object:/org/gnome/Evolution/Inbox -> Interface: org.gnome.Evolution.MailFolder -> Method: Forward('message1', 'seth at gnome.org')
-+
-+This communicates over the SESSION Bus to the org.gnome.Evolution process to call the
-+Forward method of the /org/gnome/Evolution/Inbox object (which provides the
-+org.gnome.Evolution.MailFolder interface) with two string arguments.
-+
-+For example, the dbus-daemon itself provides a service and some objects:
-+
-+# Get a connection to the desktop-wide SESSION bus
-+bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
-+
-+# Get the service provided by the dbus-daemon named org.freedesktop.DBus
-+dbus_service = bus.get_service('org.freedesktop.DBus')
-+
-+# Get a reference to the desktop bus' standard object, denoted
-+# by the path /org/freedesktop/DBus. The object /org/freedesktop/DBus
-+# implements the 'org.freedesktop.DBus' interface
-+dbus_object = dbus_service.get_object('/org/freedesktop/DBus',
-+ 'org.freedesktop.DBus')
-+
-+# One of the member functions in the org.freedesktop.DBus interface
-+# is ListServices(), which provides a list of all the other services
-+# registered on this bus. Call it, and print the list.
-+print(dbus_object.ListServices())
-+"""
-+
-+import dbus
-+import dbus_bindings
-+import weakref
-+
-+from proxies import *
-+from exceptions import *
-+from matchrules import *
-+
-+class Bus(object):
-+ """A connection to a DBus daemon.
-+
-+ One of three possible standard buses, the SESSION, SYSTEM,
-+ or STARTER bus
-+ """
-+ TYPE_SESSION = dbus_bindings.BUS_SESSION
-+ TYPE_SYSTEM = dbus_bindings.BUS_SYSTEM
-+ TYPE_STARTER = dbus_bindings.BUS_STARTER
-+
-+ """bus_type=[Bus.TYPE_SESSION | Bus.TYPE_SYSTEM | Bus.TYPE_STARTER]
-+ """
-+
-+ ProxyObjectClass = ProxyObject
-+
-+ START_REPLY_SUCCESS = dbus_bindings.DBUS_START_REPLY_SUCCESS
-+ START_REPLY_ALREADY_RUNNING = dbus_bindings.DBUS_START_REPLY_ALREADY_RUNNING
-+
-+ _shared_instances = weakref.WeakValueDictionary()
-+
-+ def __new__(cls, bus_type=TYPE_SESSION, use_default_mainloop=True, private=False):
-+ if (not private and bus_type in cls._shared_instances):
-+ return cls._shared_instances[bus_type]
-+
-+ # this is a bit odd, but we create instances of the subtypes
-+ # so we can return the shared instances if someone tries to
-+ # construct one of them (otherwise we'd eg try and return an
-+ # instance of Bus from __new__ in SessionBus). why are there
-+ # three ways to construct this class? we just don't know.
-+ if bus_type == cls.TYPE_SESSION:
-+ subclass = SessionBus
-+ elif bus_type == cls.TYPE_SYSTEM:
-+ subclass = SystemBus
-+ elif bus_type == cls.TYPE_STARTER:
-+ subclass = StarterBus
-+ else:
-+ raise ValueError('invalid bus_type %s' % bus_type)
-+
-+ bus = object.__new__(subclass)
-+
-+ bus._bus_type = bus_type
-+ bus._bus_names = weakref.WeakValueDictionary()
-+ bus._match_rule_tree = SignalMatchTree()
-+
-+ # FIXME: if you get a starter and a system/session bus connection
-+ # in the same process, it's the same underlying connection that
-+ # is returned by bus_get, but we initialise it twice
-+ bus._connection = dbus_bindings.bus_get(bus_type, private)
-+ bus._connection.add_filter(bus._signal_func)
-+
-+ if use_default_mainloop:
-+ func = getattr(dbus, "_dbus_mainloop_setup_function", None)
-+ if func:
-+ func(bus)
-+
-+ if not private:
-+ cls._shared_instances[bus_type] = bus
-+
-+ return bus
-+
-+ def __init__(self, *args, **keywords):
-+ # do nothing here because this can get called multiple times on the
-+ # same object if __new__ returns a shared instance
-+ pass
-+
-+ def close(self):
-+ self._connection.close()
-+
-+ def get_connection(self):
-+ return self._connection
-+
-+ def get_session(private=False):
-+ """Static method that returns the session bus"""
-+ return SessionBus(private=private)
-+
-+ get_session = staticmethod(get_session)
-+
-+ def get_system(private=False):
-+ """Static method that returns the system bus"""
-+ return SystemBus(private=private)
-+
-+ get_system = staticmethod(get_system)
-+
-+
-+ def get_starter(private=False):
-+ """Static method that returns the starter bus"""
-+ return StarterBus(private=private)
-+
-+ get_starter = staticmethod(get_starter)
-+
-+
-+ def get_object(self, named_service, object_path):
-+ """Get a proxy object to call over the bus"""
-+ return self.ProxyObjectClass(self, named_service, object_path)
-+
-+ def _create_args_dict(self, keywords):
-+ args_dict = None
-+ for (key, value) in keywords.iteritems():
-+ if key.startswith('arg'):
-+ try:
-+ snum = key[3:]
-+ num = int(snum)
-+
-+ if not args_dict:
-+ args_dict = {}
-+
-+ args_dict[num] = value
-+ except ValueError:
-+ raise TypeError("Invalid arg index %s"%snum)
-+ elif key in ("sender_keyword", "path_keyword"):
-+ pass
-+ else:
-+ raise TypeError("Unknown keyword %s"%(key))
-+
-+ return args_dict
-+
-+ def add_signal_receiver(self, handler_function,
-+ signal_name=None,
-+ dbus_interface=None,
-+ named_service=None,
-+ path=None,
-+ **keywords):
-+
-+ args_dict = self._create_args_dict(keywords)
-+
-+ if (named_service and named_service[0] != ':'):
-+ bus_object = self.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-+ named_service = bus_object.GetNameOwner(named_service, dbus_interface='org.freedesktop.DBus')
-+
-+ match_rule = SignalMatchRule(signal_name, dbus_interface, named_service, path)
-+
-+ for kw in ("sender_keyword", "path_keyword"):
-+ if kw in keywords:
-+ setattr(match_rule, kw, keywords[kw])
-+ else:
-+ setattr(match_rule, kw, None)
-+
-+ if args_dict:
-+ match_rule.add_args_match(args_dict)
-+
-+ match_rule.add_handler(handler_function)
-+
-+ self._match_rule_tree.add(match_rule)
-+
-+ dbus_bindings.bus_add_match(self._connection, repr(match_rule))
-+
-+ def remove_signal_receiver(self, handler_function,
-+ signal_name=None,
-+ dbus_interface=None,
-+ named_service=None,
-+ path=None,
-+ **keywords):
-+
-+ args_dict = self._create_args_dict(keywords)
-+
-+ if (named_service and named_service[0] != ':'):
-+ bus_object = self.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-+ named_service = bus_object.GetNameOwner(named_service, dbus_interface='org.freedesktop.DBus')
-+
-+ match_rule = SignalMatchRule(signal_name, dbus_interface, named_service, path)
-+
-+ if (args_dict):
-+ match_rule.add_args_match(args_dict)
-+
-+ if (handler_function):
-+ match_rule.add_handler(handler_function)
-+
-+ self._match_rule_tree.remove(match_rule)
-+
-+ #TODO we leak match rules in the lower level bindings. We need to ref count them
-+
-+ def get_unix_user(self, named_service):
-+ """Get the unix user for the given named_service on this Bus"""
-+ return dbus_bindings.bus_get_unix_user(self._connection, named_service)
-+
-+ def _signal_func(self, connection, message):
-+ if (message.get_type() != dbus_bindings.MESSAGE_TYPE_SIGNAL):
-+ return dbus_bindings.HANDLER_RESULT_NOT_YET_HANDLED
-+
-+ dbus_interface = message.get_interface()
-+ named_service = message.get_sender()
-+ path = message.get_path()
-+ signal_name = message.get_member()
-+
-+ match_rule = SignalMatchRule(signal_name, dbus_interface, named_service, path)
-+
-+ self._match_rule_tree.exec_matches(match_rule, message)
-+
-+ def start_service_by_name(self, named_service):
-+ return dbus_bindings.bus_start_service_by_name(self._connection, named_service)
-+
-+ def __repr__(self):
-+ if self._bus_type == self.TYPE_SESSION:
-+ name = 'SESSION'
-+ elif self._bus_type == self.TYPE_SYSTEM:
-+ name = 'SYSTEM'
-+ elif self._bus_type == self.TYPE_STARTER:
-+ name = 'STARTER'
-+ else:
-+ assert False, 'Unable to represent unknown bus type.'
-+
-+ return '<dbus.Bus on %s at %#x>' % (name, id(self))
-+ __str__ = __repr__
-+
-+class SystemBus(Bus):
-+ """The system-wide message bus
-+ """
-+ def __new__(cls, use_default_mainloop=True, private=False):
-+ return Bus.__new__(cls, Bus.TYPE_SYSTEM, use_default_mainloop, private)
-+
-+class SessionBus(Bus):
-+ """The session (current login) message bus
-+ """
-+ def __new__(cls, use_default_mainloop=True, private=False):
-+ return Bus.__new__(cls, Bus.TYPE_SESSION, use_default_mainloop, private)
-+
-+class StarterBus(Bus):
-+ """The bus that activated this process (if
-+ this process was launched by DBus activation)
-+ """
-+ def __new__(cls, use_default_mainloop=True, private=False):
-+ return Bus.__new__(cls, Bus.TYPE_STARTER, use_default_mainloop, private)
-+
-+class Interface:
-+ """An interface into a remote object
-+
-+ An Interface can be used to wrap ProxyObjects
-+ so that calls can be routed to their correct
-+ dbus interface
-+ """
-+
-+ def __init__(self, object, dbus_interface):
-+ self._obj = object
-+ self._dbus_interface = dbus_interface
-+
-+ def connect_to_signal(self, signal_name, handler_function, dbus_interface = None, **keywords):
-+ if not dbus_interface:
-+ dbus_interface = self._dbus_interface
-+
-+ self._obj.connect_to_signal(signal_name, handler_function, dbus_interface, **keywords)
-+
-+ def __getattr__(self, member, **keywords):
-+ if (keywords.has_key('dbus_interface')):
-+ _dbus_interface = keywords['dbus_interface']
-+ else:
-+ _dbus_interface = self._dbus_interface
-+
-+ if member == '__call__':
-+ return object.__call__
-+ else:
-+ ret = self._obj.__getattr__(member, dbus_interface=_dbus_interface)
-+ return ret
-+
-+ def __repr__(self):
-+ return '<Interface %r implementing %r at %#x>'%(
-+ self._obj, self._dbus_interface, id(self))
-+ __str__ = __repr__
-diff -Naur dbus-0.61.orig/python/_util.py dbus-0.61/python/_util.py
---- dbus-0.61.orig/python/_util.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/_util.py 2005-07-20 16:15:08.000000000 +0200
-@@ -0,0 +1,13 @@
-+import re
-+from exceptions import ValidationException
-+
-+def _validate_interface_or_name(value):
-+ elements = value.split('.')
-+ if len(elements) <= 1:
-+ raise ValidationException("%s must contain at least two elements seperated by a period ('.')"%(value))
-+
-+ validate = re.compile('[A-Za-z][\w_]*')
-+ for element in elements:
-+ if not validate.match(element):
-+ raise ValidationException("Element %s of %s has invalid characters"%(element ,value))
-+
-diff -Naur dbus-0.61.orig/python/dbus.pth dbus-0.61/python/dbus.pth
---- dbus-0.61.orig/python/dbus.pth 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/dbus.pth 2005-08-18 22:57:28.000000000 +0200
-@@ -0,0 +1 @@
-+dbus
-diff -Naur dbus-0.61.orig/python/dbus_bindings.pxd.in dbus-0.61/python/dbus_bindings.pxd.in
---- dbus-0.61.orig/python/dbus_bindings.pxd.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/dbus_bindings.pxd.in 2005-07-12 20:16:06.000000000 +0200
-@@ -0,0 +1,8 @@
-+#include "dbus_h_wrapper.h"
-+
-+cdef class Connection:
-+ cdef DBusConnection *conn
-+
-+ cdef __cinit__(self, address, DBusConnection *_conn)
-+ cdef _set_conn(self, DBusConnection *conn)
-+ cdef DBusConnection *_get_conn(self)
-diff -Naur dbus-0.61.orig/python/dbus_bindings.pyx dbus-0.61/python/dbus_bindings.pyx
---- dbus-0.61.orig/python/dbus_bindings.pyx 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/dbus_bindings.pyx 2006-02-16 00:45:50.000000000 +0100
-@@ -0,0 +1,1852 @@
-+# -*- Mode: Python -*-
-+
-+# jdahlin is the most coolest and awesomest person in the world
-+# and wrote all the good parts of this code. all the bad parts
-+# where python conditionals have a ( ) around them, thus violating
-+# PEP-8 were written by the lame wannabe python programmer seth
-+
-+#FIXME: find memory leaks that I am sure exist
-+
-+cdef extern from "sys/types.h":
-+ ctypedef size_t
-+ ctypedef __int64_t
-+ ctypedef __uint64_t
-+
-+cdef extern from "sys/cdefs.h":
-+ ctypedef __signed
-+
-+cdef extern from "stdlib.h":
-+ cdef void *malloc(size_t size)
-+ cdef void free(void *ptr)
-+ cdef void *calloc(size_t nmemb, size_t size)
-+
-+cdef extern from "Python.h":
-+ void Py_XINCREF (object)
-+ void Py_XDECREF (object)
-+ object PyString_FromStringAndSize(char *, int)
-+ ctypedef void *PyGILState_STATE
-+ void PyErr_Clear()
-+ PyGILState_STATE PyGILState_Ensure()
-+ void PyGILState_Release(PyGILState_STATE)
-+
-+ctypedef struct DBusError:
-+ char *name
-+ char *message
-+ unsigned int dummy1
-+ unsigned int dummy2
-+ unsigned int dummy3
-+ unsigned int dummy4
-+ unsigned int dummy5
-+ void *padding1
-+
-+ctypedef struct DBusMessageIter:
-+ void *dummy1
-+ void *dummy2
-+ dbus_uint32_t dummy3
-+ int dummy4
-+ int dummy5
-+ int dummy6
-+ int dummy7
-+ int dummy8
-+ int dummy9
-+ int dummy10
-+ int dummy11
-+ int pad1
-+ int pad2
-+ void *pad3
-+
-+ctypedef struct DBusObjectPathVTable:
-+ DBusObjectPathUnregisterFunction unregister_function
-+ DBusObjectPathMessageFunction message_function
-+ void (* dbus_internal_pad1) (void *)
-+ void (* dbus_internal_pad2) (void *)
-+ void (* dbus_internal_pad3) (void *)
-+ void (* dbus_internal_pad4) (void *)
-+
-+class DBusException(Exception):
-+ pass
-+
-+class ConnectionError(Exception):
-+ pass
-+
-+class ObjectPath(str):
-+ def __init__(self, value):
-+ str.__init__(self, value)
-+
-+class ByteArray(str):
-+ def __init__(self, value):
-+ str.__init__(self, value)
-+
-+class SignatureIter(object):
-+ def __init__(self, string):
-+ object.__init__(self)
-+ self.remaining = string
-+
-+ def next(self):
-+ if self.remaining == '':
-+ raise StopIteration
-+
-+ signature = self.remaining
-+ block_depth = 0
-+ block_type = None
-+ end = len(signature)
-+
-+ for marker in range(0, end):
-+ cur_sig = ord(signature[marker])
-+
-+ if cur_sig == TYPE_ARRAY:
-+ pass
-+ elif cur_sig == DICT_ENTRY_BEGIN or cur_sig == STRUCT_BEGIN:
-+ if block_type == None:
-+ block_type = cur_sig
-+
-+ if block_type == cur_sig:
-+ block_depth = block_depth + 1
-+
-+ elif cur_sig == DICT_ENTRY_END:
-+ if block_type == DICT_ENTRY_BEGIN:
-+ block_depth = block_depth - 1
-+
-+ if block_depth == 0:
-+ end = marker
-+ break
-+
-+ elif cur_sig == STRUCT_END:
-+ if block_type == STRUCT_BEGIN:
-+ block_depth = block_depth - 1
-+
-+ if block_depth == 0:
-+ end = marker
-+ break
-+
-+ else:
-+ if block_depth == 0:
-+ end = marker
-+ break
-+
-+ end = end + 1
-+ self.remaining = signature[end:]
-+ return Signature(signature[0:end])
-+
-+class Signature(str):
-+ """An iterable method signature. Iterating gives the signature of each
-+ argument in turn."""
-+ def __init__(self, value):
-+ return str.__init__(self, value)
-+
-+ def __iter__(self):
-+ return SignatureIter(self)
-+
-+class VariantSignature(object):
-+ """A fake method signature which when iterated, is an endless stream
-+ of variants (handy with zip()). It has no string representation."""
-+ def __iter__(self):
-+ return self
-+
-+ def next(self):
-+ return 'v'
-+
-+class Byte(int):
-+ def __init__(self, value):
-+ int.__init__(self, value)
-+
-+class Boolean(int):
-+ def __init__(self, value):
-+ int.__init__(self, value)
-+
-+class Int16(int):
-+ def __init__(self, value):
-+ int.__init__(self, value)
-+
-+class UInt16(int):
-+ def __init__(self, value):
-+ if value < 0:
-+ raise TypeError('Unsigned integers must not have a negitive value')
-+ int.__init__(self, value)
-+
-+class Int32(int):
-+ def __init__(self, value):
-+ int.__init__(self, value)
-+
-+class UInt32(long):
-+ def __init__(self, value):
-+ if value < 0:
-+ raise TypeError('Unsigned integers must not have a negitive value')
-+ long.__init__(self, value)
-+
-+class Int64(long):
-+ def __init__(self, value):
-+ long.__init__(self, value)
-+
-+class UInt64(long):
-+ def __init__(self, value):
-+ if value < 0:
-+ raise TypeError('Unsigned integers must not have a negitive value')
-+ long.__init__(self, value)
-+
-+class Double(float):
-+ def __init__(self, value):
-+ float.__init__(self, value)
-+
-+class String(unicode):
-+ def __init__(self, value):
-+ unicode.__init__(self, value)
-+
-+class Array(list):
-+ def __init__(self, value, type=None, signature=None):
-+ if signature and type:
-+ raise TypeError('Can not mix type and signature arguments in a D-BUS Array')
-+
-+ self.type = type
-+ self.signature = signature
-+ list.__init__(self, value)
-+
-+class Variant:
-+ def __init__(self, value, type=None, signature=None):
-+ self.value = value
-+ if signature and type:
-+ raise TypeError('Can not mix type and signature arguments in a D-BUS Variant')
-+
-+ self.type = type
-+ self.signature = signature
-+
-+ def __repr__(self):
-+ return repr(self.value)
-+
-+ def __str__(self):
-+ return str(self.value)
-+
-+class Struct(tuple):
-+ def __init__(self, value):
-+ tuple.__init__(self, value)
-+
-+class Dictionary(dict):
-+ def __init__(self, value, key_type=None, value_type=None, signature=None):
-+ if key_type and not value_type:
-+ raise TypeError('When specifying a key_type you must also have a value_type in a D-BUS Dictionary')
-+ elif value_type and not key_type:
-+ raise TypeError('When specifying a value_type you must also have a key_type in a D-BUS Dictionary')
-+ elif key_type and signature:
-+ raise TypeError('Can not mix type arguments with signature arguments in a D-BUS Dictionary')
-+
-+ self.key_type = key_type
-+ self.value_type = value_type
-+ self.signature = signature
-+ dict.__init__(self, value)
-+
-+#forward delcerations
-+cdef class Message
-+cdef class PendingCall
-+cdef class Watch
-+cdef class MessageIter
-+
-+cdef void _GIL_safe_cunregister_function_handler (DBusConnection *connection,
-+ void *user_data):
-+ cdef Connection conn
-+
-+ tup = <object>user_data
-+ assert (type(tup) == tuple)
-+ function = tup[1]
-+ conn = Connection()
-+ conn.__cinit__(None, connection)
-+
-+ args = (conn)
-+ function(*args)
-+ Py_XDECREF(tup)
-+
-+cdef void cunregister_function_handler (DBusConnection *connection,
-+ void *user_data):
-+ cdef PyGILState_STATE gil
-+ gil = PyGILState_Ensure()
-+ try:
-+ _GIL_safe_cunregister_function_handler (connection, user_data);
-+ finally:
-+ PyGILState_Release(gil)
-+
-+
-+
-+cdef DBusHandlerResult _GIL_safe_cmessage_function_handler (
-+ DBusConnection *connection,
-+ DBusMessage *msg,
-+ void *user_data):
-+ cdef Connection conn
-+ cdef Message message
-+
-+ tup = <object>user_data
-+ assert (type(tup) == tuple)
-+ function = tup[0]
-+ message = EmptyMessage()
-+
-+ #we don't own the message so we need to ref it
-+ dbus_message_ref(msg)
-+ message._set_msg(msg)
-+ conn = Connection()
-+ conn.__cinit__(None, connection)
-+ args = (conn,
-+ message)
-+
-+ retval = function(*args)
-+
-+ if (retval == None):
-+ retval = DBUS_HANDLER_RESULT_HANDLED
-+ return retval
-+
-+cdef DBusHandlerResult cmessage_function_handler (DBusConnection *connection,
-+ DBusMessage *msg,
-+ void *user_data):
-+ cdef PyGILState_STATE gil
-+ gil = PyGILState_Ensure()
-+ try:
-+ return _GIL_safe_cmessage_function_handler (connection, msg, user_data);
-+ finally:
-+ PyGILState_Release(gil)
-+
-+
-+cdef class Connection:
-+ def __init__(self, address=None, Connection _conn=None):
-+ cdef DBusConnection *c_conn
-+ cdef char *c_address
-+ c_conn=NULL
-+ self.conn = NULL
-+ if (_conn != None):
-+ c_conn = _conn.conn
-+
-+ if (address != None or _conn != None):
-+ self.__cinit__(c_address, c_conn)
-+
-+ # hack to be able to pass in a c pointer to the constructor
-+ # while still alowing python programs to create a Connection object
-+ cdef __cinit__(self, address, DBusConnection *_conn):
-+ cdef DBusError error
-+ dbus_error_init(&error)
-+ if _conn != NULL:
-+ self.conn = _conn
-+ dbus_connection_ref(self.conn)
-+ else:
-+ self.conn = dbus_connection_open(address,
-+ &error)
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free (&error)
-+ raise DBusException, errormsg
-+
-+ def __dealloc__(self):
-+ if self.conn != NULL:
-+ dbus_connection_unref(self.conn)
-+
-+ cdef _set_conn(self, DBusConnection *conn):
-+ self.conn = conn
-+
-+ cdef DBusConnection *_get_conn(self):
-+ return self.conn
-+
-+ def get_unique_name(self):
-+ return bus_get_unique_name(self)
-+
-+ def close(self):
-+ dbus_connection_close(self.conn)
-+
-+ def get_is_connected(self):
-+ return dbus_connection_get_is_connected(self.conn)
-+
-+ def get_is_authenticated(self):
-+ return dbus_connection_get_is_authenticated(self.conn)
-+
-+ def flush(self):
-+ dbus_connection_flush(self.conn)
-+
-+ def borrow_message(self):
-+ cdef Message m
-+ m = EmptyMessage()
-+ m._set_msg(dbus_connection_borrow_message(self.conn))
-+ return m
-+
-+ def return_message(self, Message message):
-+ cdef DBusMessage *msg
-+ msg = message._get_msg()
-+ dbus_connection_return_message(self.conn, msg)
-+
-+ def steal_borrowed_message(self, Message message):
-+ cdef DBusMessage *msg
-+ msg = message._get_msg()
-+ dbus_connection_steal_borrowed_message(self.conn,
-+ msg)
-+
-+ def pop_message(self):
-+ cdef DBusMessage *msg
-+ cdef Message m
-+
-+ msg = dbus_connection_pop_message(self.conn)
-+ if msg != NULL:
-+ m = EmptyMessage()
-+ m._set_msg(msg)
-+ else:
-+ m = None
-+ return m
-+
-+ def get_dispatch_status(self):
-+ return dbus_connection_get_dispatch_status(self.conn)
-+
-+ def dispatch(self):
-+ return dbus_connection_dispatch(self.conn)
-+
-+ def send(self, Message message):
-+ #cdef dbus_uint32_t client_serial
-+ #if type(message) != Message:
-+ # raise TypeError
-+ cdef DBusMessage *msg
-+ msg = message._get_msg()
-+ retval = dbus_connection_send(self.conn,
-+ msg,
-+ NULL)
-+ return retval
-+
-+ def send_with_reply_handlers(self, Message message, timeout_milliseconds, reply_handler, error_handler):
-+ retval = False
-+ try:
-+ (retval, pending_call) = self.send_with_reply(message, timeout_milliseconds)
-+ if pending_call:
-+ pending_call.set_notify(reply_handler, error_handler)
-+ except Exception, e:
-+ error_handler(e)
-+
-+ return (retval, pending_call)
-+
-+ def send_with_reply(self, Message message, timeout_milliseconds):
-+ cdef dbus_bool_t retval
-+ cdef DBusPendingCall *cpending_call
-+ cdef DBusMessage *msg
-+ cdef PendingCall pending_call
-+
-+ cpending_call = NULL
-+
-+ msg = message._get_msg()
-+
-+ retval = dbus_connection_send_with_reply(self.conn,
-+ msg,
-+ &cpending_call,
-+ timeout_milliseconds)
-+
-+ if (cpending_call != NULL):
-+ pending_call = PendingCall()
-+ pending_call.__cinit__(cpending_call)
-+ else:
-+ pending_call = None
-+
-+ return (retval, pending_call)
-+
-+ def send_with_reply_and_block(self, Message message,
-+ timeout_milliseconds=-1):
-+ cdef DBusMessage * retval
-+ cdef DBusError error
-+ cdef DBusMessage *msg
-+ cdef Message m
-+
-+ dbus_error_init(&error)
-+
-+ msg = message._get_msg()
-+
-+ retval = dbus_connection_send_with_reply_and_block(
-+ self.conn,
-+ msg,
-+ timeout_milliseconds,
-+ &error)
-+
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free (&error)
-+ raise DBusException, errormsg
-+
-+ assert(retval != NULL)
-+
-+ m = EmptyMessage()
-+ m._set_msg(retval)
-+
-+ return m
-+
-+ def set_watch_functions(self, add_function, remove_function, data):
-+ pass
-+
-+ def set_timeout_functions(self, add_function, remove_function, data):
-+ pass
-+
-+ def set_wakeup_main_function(self, wakeup_main_function, data):
-+ pass
-+
-+ # FIXME: set_dispatch_status_function, get_unix_user, set_unix_user_function
-+
-+ def add_filter(self, filter_function):
-+ user_data = (filter_function,)
-+ Py_XINCREF(user_data)
-+
-+ return dbus_connection_add_filter(self.conn,
-+ cmessage_function_handler,
-+ <void*>user_data,
-+ NULL)
-+
-+
-+ #FIXME: remove_filter
-+ # this is pretty tricky, we want to only remove the filter
-+ # if we truly have no more calls to our message_function_handler...ugh
-+
-+ def set_data(self, slot, data):
-+ pass
-+
-+ def get_data(self, slot):
-+ pass
-+
-+ def set_max_message_size(self, size):
-+ dbus_connection_set_max_message_size(self.conn, size)
-+
-+ def get_max_message_size(self):
-+ return dbus_connection_get_max_message_size(self.conn)
-+
-+ def set_max_received_size(self, size):
-+ dbus_connection_set_max_received_size(self.conn, size)
-+
-+ def get_max_received_size(self):
-+ return dbus_connection_get_max_received_size(self.conn)
-+
-+ def get_outgoing_size(self):
-+ return dbus_connection_get_outgoing_size(self.conn)
-+
-+ # preallocate_send, free_preallocated_send, send_preallocated
-+
-+ def register_object_path(self, path, unregister_cb, message_cb):
-+ cdef DBusObjectPathVTable cvtable
-+
-+ cvtable.unregister_function = cunregister_function_handler
-+ cvtable.message_function = cmessage_function_handler
-+
-+ user_data = (message_cb, unregister_cb)
-+ Py_XINCREF(user_data)
-+
-+ return dbus_connection_register_object_path(self.conn, path, &cvtable,
-+ <void*>user_data)
-+
-+ def register_fallback(self, path, unregister_cb, message_cb):
-+ cdef DBusObjectPathVTable cvtable
-+
-+ cvtable.unregister_function = cunregister_function_handler
-+ cvtable.message_function = cmessage_function_handler
-+
-+ user_data = (message_cb, unregister_cb)
-+ Py_XINCREF(user_data)
-+
-+ return dbus_connection_register_fallback(self.conn, path, &cvtable,
-+ <void*>user_data)
-+
-+ #FIXME: unregister_object_path , see problems with remove_filter
-+
-+ def list_registered (self, parent_path):
-+ cdef char **cchild_entries
-+ cdef dbus_bool_t retval
-+
-+ retval = dbus_connection_list_registered(self.conn, parent_path, &cchild_entries)
-+
-+ if (not retval):
-+ #FIXME: raise out of memory exception?
-+ return None
-+
-+ i = 0
-+ child_entries = []
-+
-+ while (cchild_entries[i] != NULL):
-+ child_entries.append(cchild_entries[i])
-+ i = i + 1
-+
-+ dbus_free_string_array(cchild_entries)
-+
-+ return child_entries
-+
-+cdef void _GIL_safe_pending_call_notification (DBusPendingCall *pending_call,
-+ void *user_data):
-+ cdef DBusMessage *dbus_message
-+ cdef Message message
-+
-+ (reply_handler, error_handler) = <object>user_data
-+
-+ dbus_message = dbus_pending_call_steal_reply(pending_call)
-+ message = EmptyMessage()
-+ message._set_msg(dbus_message)
-+
-+ type = message.get_type()
-+
-+ if type == MESSAGE_TYPE_METHOD_RETURN:
-+ args = message.get_args_list()
-+ reply_handler(*args)
-+ elif type == MESSAGE_TYPE_ERROR:
-+ args = message.get_args_list()
-+ if len(args) > 0:
-+ error_handler(DBusException(args[0]))
-+ else:
-+ error_handler(DBusException(""))
-+ else:
-+ error_handler(DBusException('Unexpected Message Type: ' + message.type_to_name(type)))
-+
-+ dbus_pending_call_unref(pending_call)
-+ Py_XDECREF(<object>user_data)
-+
-+cdef void _pending_call_notification(DBusPendingCall *pending_call,
-+ void *user_data):
-+ cdef PyGILState_STATE gil
-+ gil = PyGILState_Ensure()
-+ try:
-+ _GIL_safe_pending_call_notification (pending_call, user_data);
-+ finally:
-+ PyGILState_Release(gil)
-+
-+cdef void _pending_call_free_user_data(void *data):
-+ call_tuple = <object>data
-+ Py_XDECREF(call_tuple)
-+
-+cdef class PendingCall:
-+ cdef DBusPendingCall *pending_call
-+
-+ def __init__(self, PendingCall _pending_call=None):
-+ self.pending_call = NULL
-+ if (_pending_call != None):
-+ self.__cinit__(_pending_call.pending_call)
-+
-+ cdef void __cinit__(self, DBusPendingCall *_pending_call):
-+ self.pending_call = _pending_call
-+ dbus_pending_call_ref(self.pending_call)
-+
-+ def __dealloc__(self):
-+ if self.pending_call != NULL:
-+ dbus_pending_call_unref(self.pending_call)
-+
-+ cdef DBusPendingCall *_get_pending_call(self):
-+ return self.pending_call
-+
-+ def cancel(self):
-+ dbus_pending_call_cancel(self.pending_call)
-+
-+ def get_completed(self):
-+ return dbus_pending_call_get_completed(self.pending_call)
-+
-+ def get_reply(self):
-+ cdef Message message
-+ message = EmptyMessage()
-+ message._set_msg(dbus_pending_call_steal_reply(self.pending_call))
-+ return message
-+
-+ def block(self):
-+ dbus_pending_call_block(self.pending_call)
-+
-+ def set_notify(self, reply_handler, error_handler):
-+ user_data = (reply_handler, error_handler)
-+ Py_XINCREF(user_data)
-+ dbus_pending_call_ref(self.pending_call)
-+ dbus_pending_call_set_notify(self.pending_call, _pending_call_notification,
-+ <void *>user_data, _pending_call_free_user_data)
-+
-+
-+cdef class Watch:
-+ cdef DBusWatch* watch
-+
-+ def __init__(self):
-+ pass
-+
-+ cdef __cinit__(self, DBusWatch *cwatch):
-+ self.watch = cwatch
-+
-+ def get_fd(self):
-+ return dbus_watch_get_fd(self.watch)
-+
-+ # FIXME: not picked up correctly by extract.py
-+ #def get_flags(self):
-+ # return dbus_watch_get_flags(self.watch)
-+
-+ def handle(self, flags):
-+ return dbus_watch_handle(self.watch, flags)
-+
-+ def get_enabled(self):
-+ return dbus_watch_get_enabled(self.watch)
-+
-+cdef class MessageIter:
-+ cdef DBusMessageIter *iter
-+ cdef DBusMessageIter real_iter
-+ cdef dbus_uint32_t level
-+
-+ def __init__(self, level=0):
-+ self.iter = &self.real_iter
-+ self.level = level
-+ if(self.level > 32):
-+ raise TypeError, 'Type recurion is too deep'
-+
-+ cdef __cinit__(self, DBusMessageIter *iter):
-+ self.real_iter = iter[0]
-+
-+ cdef DBusMessageIter *_get_iter(self):
-+ return self.iter
-+
-+ def has_next(self):
-+ return dbus_message_iter_has_next(self.iter)
-+
-+ def next(self):
-+ return dbus_message_iter_next(self.iter)
-+
-+ def get(self, arg_type=None):
-+ if(arg_type == None):
-+ arg_type = self.get_arg_type()
-+
-+ if arg_type == TYPE_INVALID:
-+ raise TypeError, 'Invalid arg type in MessageIter'
-+ elif arg_type == TYPE_STRING:
-+ retval = self.get_string()
-+ elif arg_type == TYPE_INT16:
-+ retval = self.get_int16()
-+ elif arg_type == TYPE_UINT16:
-+ retval = self.get_uint16()
-+ elif arg_type == TYPE_INT32:
-+ retval = self.get_int32()
-+ elif arg_type == TYPE_UINT32:
-+ retval = self.get_uint32()
-+ elif arg_type == TYPE_INT64:
-+ retval = self.get_int64()
-+ elif arg_type == TYPE_UINT64:
-+ retval = self.get_uint64()
-+ elif arg_type == TYPE_DOUBLE:
-+ retval = self.get_double()
-+ elif arg_type == TYPE_BYTE:
-+ retval = self.get_byte()
-+ elif arg_type == TYPE_BOOLEAN:
-+ retval = self.get_boolean()
-+ elif arg_type == TYPE_SIGNATURE:
-+ retval = self.get_signature()
-+ elif arg_type == TYPE_ARRAY:
-+ array_type = self.get_element_type()
-+ if array_type == TYPE_DICT_ENTRY:
-+ retval = self.get_dict()
-+ else:
-+ retval = self.get_array(array_type)
-+ elif arg_type == TYPE_OBJECT_PATH:
-+ retval = self.get_object_path()
-+ elif arg_type == TYPE_STRUCT:
-+ retval = self.get_struct()
-+ elif arg_type == TYPE_VARIANT:
-+ retval = self.get_variant()
-+ elif arg_type == TYPE_DICT_ENTRY:
-+ raise TypeError, 'Dictionary Entries can only appear as part of an array container'
-+ else:
-+ raise TypeError, 'Unknown arg type %d in MessageIter' % (arg_type)
-+
-+ return retval
-+
-+ def get_arg_type(self):
-+ return dbus_message_iter_get_arg_type(self.iter)
-+
-+ def get_element_type(self):
-+ return dbus_message_iter_get_element_type(self.iter)
-+
-+ def get_byte(self):
-+ cdef unsigned char c_val
-+ dbus_message_iter_get_basic(self.iter, <unsigned char *>&c_val)
-+ return c_val
-+
-+ def get_boolean(self):
-+ cdef dbus_bool_t c_val
-+ dbus_message_iter_get_basic(self.iter, <dbus_bool_t *>&c_val)
-+
-+ if c_val:
-+ return True
-+ else:
-+ return False
-+
-+ def get_signature(self):
-+ signature_string = self.get_string()
-+ return Signature(signature_string)
-+
-+ def get_int16(self):
-+ cdef dbus_int16_t c_val
-+ dbus_message_iter_get_basic(self.iter, <dbus_int16_t *>&c_val)
-+
-+ return c_val
-+
-+ def get_uint16(self):
-+ cdef dbus_uint16_t c_val
-+ dbus_message_iter_get_basic(self.iter, <dbus_uint16_t *>&c_val)
-+ return c_val
-+
-+ def get_int32(self):
-+ cdef dbus_int32_t c_val
-+ dbus_message_iter_get_basic(self.iter, <dbus_int32_t *>&c_val)
-+ return c_val
-+
-+ def get_uint32(self):
-+ cdef dbus_uint32_t c_val
-+ dbus_message_iter_get_basic(self.iter, <dbus_uint32_t *>&c_val)
-+ return c_val
-+
-+ def get_int64(self):
-+ cdef dbus_int64_t c_val
-+ dbus_message_iter_get_basic(self.iter, <dbus_int64_t *>&c_val)
-+ return c_val
-+
-+ def get_uint64(self):
-+ cdef dbus_uint64_t c_val
-+ dbus_message_iter_get_basic(self.iter, <dbus_uint64_t *>&c_val)
-+ return c_val
-+
-+ def get_double(self):
-+ cdef double c_val
-+ dbus_message_iter_get_basic(self.iter, <double *>&c_val)
-+ return c_val
-+
-+ def get_string(self):
-+ cdef char *c_str
-+ dbus_message_iter_get_basic(self.iter, <char **>&c_str)
-+ ret = c_str.decode('utf8')
-+
-+ return ret
-+
-+ def get_object_path(self):
-+ object_path_string = self.get_string()
-+ return ObjectPath(object_path_string)
-+
-+ def get_dict(self):
-+ cdef DBusMessageIter c_dict_iter
-+ cdef MessageIter dict_iter
-+ level = self.level + 1
-+
-+ dbus_message_iter_recurse(self.iter, <DBusMessageIter *>&c_dict_iter)
-+ dict_iter = MessageIter(level)
-+ dict_iter.__cinit__(&c_dict_iter)
-+
-+ python_dict = {}
-+ cur_arg_type = dict_iter.get_arg_type()
-+ while cur_arg_type == TYPE_DICT_ENTRY:
-+ if cur_arg_type != TYPE_DICT_ENTRY:
-+ raise TypeError, "Dictionary elements must be of type TYPE_DICT_ENTRY '%s != %s'" % (TYPE_DICT_ENTRY, cur_arg_type)
-+
-+ dict_entry = dict_iter.get_struct()
-+ if len(dict_entry) != 2:
-+ raise TypeError, "Dictionary entries must be structs of two elements. This entry had %i elements.'" % (len(dict_entry))
-+
-+ python_dict[dict_entry[0]] = dict_entry[1]
-+
-+ dict_iter.next()
-+ cur_arg_type = dict_iter.get_arg_type()
-+
-+ return python_dict
-+
-+ def get_array(self, type):
-+ cdef DBusMessageIter c_array_iter
-+ cdef MessageIter array_iter
-+ level = self.level + 1
-+
-+ dbus_message_iter_recurse(self.iter, <DBusMessageIter *>&c_array_iter)
-+ array_iter = MessageIter(level)
-+ array_iter.__cinit__(&c_array_iter)
-+
-+ python_list = []
-+ cur_arg_type = array_iter.get_arg_type()
-+ while cur_arg_type != TYPE_INVALID:
-+ if cur_arg_type != type:
-+ raise TypeError, "Array elements must be of the same type '%s != %s'" % (type, cur_arg_type)
-+
-+ value = array_iter.get(type)
-+ python_list.append(value)
-+
-+ array_iter.next()
-+ cur_arg_type = array_iter.get_arg_type()
-+
-+ return python_list
-+
-+ def get_variant(self):
-+ cdef DBusMessageIter c_var_iter
-+ cdef MessageIter var_iter
-+ level = self.level + 1
-+
-+ dbus_message_iter_recurse(self.iter, <DBusMessageIter *>&c_var_iter)
-+ var_iter = MessageIter(level)
-+ var_iter.__cinit__(&c_var_iter)
-+
-+ return var_iter.get()
-+
-+ def get_struct(self):
-+ cdef DBusMessageIter c_struct_iter
-+ cdef MessageIter struct_iter
-+ level = self.level + 1
-+
-+ dbus_message_iter_recurse(self.iter, <DBusMessageIter *>&c_struct_iter)
-+ struct_iter = MessageIter(level)
-+ struct_iter.__cinit__(&c_struct_iter)
-+
-+ python_list = []
-+ while struct_iter.get_arg_type() != TYPE_INVALID:
-+ value = struct_iter.get()
-+ python_list.append(value)
-+
-+ struct_iter.next()
-+
-+ return tuple(python_list)
-+
-+ def python_value_to_dbus_sig(self, value, level = 0):
-+
-+ if(level > 32):
-+ raise TypeError, 'Type recurion is too deep'
-+
-+ level = level + 1
-+
-+ ptype = type(value)
-+ ret = ""
-+ if ptype == bool:
-+ ret = TYPE_BOOLEAN
-+ ret = str(chr(ret))
-+ elif ptype == int:
-+ ret = TYPE_INT32
-+ ret = str(chr(ret))
-+ elif ptype == long:
-+ ret = TYPE_INT64
-+ ret = str(chr(ret))
-+ elif (ptype == str or ptype == unicode):
-+ ret = TYPE_STRING
-+ ret = str(chr(ret))
-+ elif ptype == float:
-+ ret = TYPE_DOUBLE
-+ ret = str(chr(ret))
-+ elif ptype == dict:
-+ dict_list = value.items()
-+ key, value = dict_list[0]
-+
-+ ret = str(chr(TYPE_ARRAY)) + str(chr(DICT_ENTRY_BEGIN))
-+ ret = ret + self.python_value_to_dbus_sig(key, level)
-+ ret = ret + self.python_value_to_dbus_sig(value, level)
-+ ret = ret + str(chr(DICT_ENTRY_END))
-+
-+ elif ptype == tuple:
-+ ret = str(chr(STRUCT_BEGIN))
-+ for item in value:
-+ ret = ret + self.python_value_to_dbus_sig(item, level)
-+ ret = ret + str(chr(STRUCT_END))
-+ elif ptype == list:
-+ ret = str(chr(TYPE_ARRAY))
-+ ret = ret + self.python_value_to_dbus_sig(value[0], level)
-+ elif isinstance(value, ObjectPath) or value == ObjectPath:
-+
-+ ret = TYPE_OBJECT_PATH
-+ ret = str(chr(ret))
-+ elif isinstance(value, ByteArray) or value == ByteArray:
-+ ret = str(chr(TYPE_ARRAY)) + str(chr(TYPE_BYTE))
-+ elif isinstance(value, Signature) or value == Signature:
-+ ret = TYPE_SIGNATURE
-+ ret = str(chr(ret))
-+ elif isinstance(value, Byte) or value == Byte:
-+ ret = TYPE_BYTE
-+ ret = str(chr(ret))
-+ elif isinstance(value, Boolean) or value == Boolean:
-+ ret = TYPE_BOOLEAN
-+ ret = str(chr(ret))
-+ elif isinstance(value, Int16) or value == Int16:
-+ ret = TYPE_INT16
-+ ret = str(chr(ret))
-+ elif isinstance(value, UInt16) or value == UInt16:
-+ ret = TYPE_UINT16
-+ ret = str(chr(ret))
-+ elif isinstance(value, Int32) or value == Int32:
-+ ret = TYPE_INT32
-+ ret = str(chr(ret))
-+ elif isinstance(value, UInt32) or value == UInt32:
-+ ret = TYPE_UINT32
-+ ret = str(chr(ret))
-+ elif isinstance(value, Int64) or value == Int64:
-+ ret = TYPE_INT64
-+ ret = str(chr(ret))
-+ elif isinstance(value, UInt64) or value == UInt64:
-+ ret = TYPE_UINT64
-+ ret = str(chr(ret))
-+ elif isinstance(value, Double) or value == Double:
-+ ret = TYPE_DOUBLE
-+ ret = str(chr(ret))
-+ elif isinstance(value, String) or value == String:
-+ ret = TYPE_STRING
-+ ret = str(chr(ret))
-+ elif isinstance(value, Array):
-+ ret = str(chr(TYPE_ARRAY))
-+ if value.type == None:
-+ if value.signature:
-+ ret = ret + value.signature
-+ else:
-+ ret = ret + self.python_value_to_dbus_sig(value[0], level)
-+ else:
-+ ret = ret + self.python_value_to_dbus_sig(value.type, level)
-+
-+ elif isinstance(value, Struct) or value == Struct:
-+ ret = str(chr(STRUCT_BEGIN))
-+ for item in value:
-+ ret = ret + self.python_value_to_dbus_sig(item, level)
-+ ret = ret + str(chr(STRUCT_END))
-+ elif isinstance(value, Dictionary):
-+ ret = str(chr(TYPE_ARRAY)) + str(chr(DICT_ENTRY_BEGIN))
-+
-+ if value.key_type and value.value_type:
-+ ret = ret + self.python_value_to_dbus_sig(value.key_type, level)
-+ ret = ret + self.python_value_to_dbus_sig(value.value_type, level)
-+ elif value.signature:
-+ ret = ret + value.signature
-+ else:
-+ dict_list = value.items()
-+
-+ key, val = dict_list[0]
-+ ret = ret + self.python_value_to_dbus_sig(key, level)
-+ ret = ret + self.python_value_to_dbus_sig(val, level)
-+
-+ ret = ret + str(chr(DICT_ENTRY_END))
-+ elif isinstance(value, Variant) or value == Variant:
-+ ret = ret + str(chr(TYPE_VARIANT))
-+ else:
-+ raise TypeError, "Argument of unknown type '%s'" % (ptype)
-+
-+ return ret
-+
-+ def append_strict(self, value, sig):
-+
-+ if sig == TYPE_INVALID or sig == None:
-+ raise TypeError, 'Invalid arg type sent to append_strict'
-+
-+ sig_type = ord(sig[0])
-+
-+ if sig_type == TYPE_STRING:
-+ retval = self.append_string(value)
-+ elif sig_type == TYPE_INT16:
-+ retval = self.append_int16(value)
-+ elif sig_type == TYPE_UINT16:
-+ retval = self.append_uint16(value)
-+ elif sig_type == TYPE_INT32:
-+ retval = self.append_int32(value)
-+ elif sig_type == TYPE_UINT32:
-+ retval = self.append_uint32(value)
-+ elif sig_type == TYPE_INT64:
-+ retval = self.append_int64(value)
-+ elif sig_type == TYPE_UINT64:
-+ retval = self.append_uint64(value)
-+ elif sig_type == TYPE_DOUBLE:
-+ retval = self.append_double(value)
-+ elif sig_type == TYPE_BYTE:
-+ retval = self.append_byte(value)
-+ elif sig_type == TYPE_BOOLEAN:
-+ retval = self.append_boolean(value)
-+ elif sig_type == TYPE_SIGNATURE:
-+ retval = self.append_signature(value)
-+ elif sig_type == TYPE_ARRAY:
-+ if len(sig) < 2:
-+ raise TypeError, "Invalid array signature in append_strict. Arrays must be followed by a type."
-+
-+ array_type = ord(sig[1])
-+ if array_type == DICT_ENTRY_BEGIN:
-+ if ord(sig[-1]) != DICT_ENTRY_END:
-+ raise TypeError, "Invalid dict entry in append_strict. No termination in signature %s."%(sig)
-+
-+ tmp_sig = sig[2:-1]
-+ retval = self.append_dict(Dictionary(value, signature=tmp_sig))
-+ else:
-+ tmp_sig = sig[1:]
-+ retval = self.append_array(Array(value, signature=tmp_sig))
-+ elif sig_type == TYPE_OBJECT_PATH:
-+ retval = self.append_object_path(value)
-+ elif sig_type == STRUCT_BEGIN:
-+ if ord(sig[-1]) != STRUCT_END:
-+ raise TypeError, "Invalid struct entry in append_strict. No termination in signature %s." % (sig)
-+
-+ tmp_sig = sig[1:-1]
-+ retval = self.append_struct(value, signature = tmp_sig)
-+ elif sig_type == TYPE_VARIANT:
-+ if isinstance(value, Variant):
-+ retval = self.append_variant(value)
-+ else:
-+ retval = self.append_variant(Variant(value))
-+ elif sig_type == DICT_ENTRY_BEGIN:
-+ raise TypeError, "Signiture is invalid in append_strict. A dict entry must be part of an array."
-+ else:
-+ raise TypeError, "Argument of unknown type '%s' in append_strict" % (sig)
-+
-+ return retval
-+
-+ def append(self, value):
-+ value_type = type(value)
-+ if value_type == bool:
-+ retval = self.append_boolean(value)
-+ elif value_type == int:
-+ retval = self.append_int32(value)
-+ elif value_type == long:
-+ retval = self.append_int64(value)
-+ elif (value_type == str or value_type == unicode):
-+ retval = self.append_string(value)
-+ elif value_type == float:
-+ retval = self.append_double(value)
-+ elif value_type == dict:
-+ retval = self.append_dict(value)
-+ elif value_type == tuple:
-+ retval = self.append_struct(value)
-+ elif value_type == list:
-+ retval = self.append_array(value)
-+ #elif value_type == None.__class__:
-+ # retval = self.append_nil()
-+ elif isinstance(value, ObjectPath):
-+ retval = self.append_object_path(value)
-+ elif isinstance(value, ByteArray):
-+ retval = self.append_array(value)
-+ elif isinstance(value, Signature):
-+ retval = self.append_signature(value)
-+ elif isinstance(value, Byte):
-+ retval = self.append_byte(value)
-+ elif isinstance(value, Boolean):
-+ retval = self.append_boolean(value)
-+ elif isinstance(value, Int16):
-+ retval = self.append_int16(value)
-+ elif isinstance(value, UInt16):
-+ retval = self.append_uint16(value)
-+ elif isinstance(value, Int32):
-+ retval = self.append_int32(value)
-+ elif isinstance(value, UInt32):
-+ retval = self.append_uint32(value)
-+ elif isinstance(value, Int64):
-+ retval = self.append_int64(value)
-+ elif isinstance(value, UInt64):
-+ retval = self.append_uint64(value)
-+ elif isinstance(value, Double):
-+ retval = self.append_double(value)
-+ elif isinstance(value, String):
-+ retval = self.append_string(value)
-+ elif isinstance(value, Array):
-+ retval = self.append_array(value)
-+ elif isinstance(value, Struct):
-+ retval = self.append_struct(value)
-+ elif isinstance(value, Dictionary):
-+ retval = self.append_dict(value)
-+ elif isinstance(value, Variant):
-+ retval = self.append_variant(value)
-+ else:
-+ raise TypeError, "Argument of unknown type '%s'" % (value_type)
-+
-+ return retval
-+
-+ def append_boolean(self, value):
-+ cdef dbus_bool_t c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_BOOLEAN, <dbus_bool_t *>&c_value)
-+
-+ def append_byte(self, value):
-+ cdef char b
-+ if type(value) == str and len(value) == 1:
-+ b = ord(value)
-+ elif type(value) == Byte:
-+ b = value
-+ else:
-+ raise TypeError
-+
-+ return dbus_message_iter_append_basic(self.iter, TYPE_BYTE, <char *>&b)
-+
-+ def append_int16(self, value):
-+ cdef dbus_int16_t c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_INT16, <dbus_int16_t *>&c_value)
-+
-+ def append_uint16(self, value):
-+ cdef dbus_uint16_t c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_UINT16, <dbus_uint16_t *>&c_value)
-+
-+ def append_int32(self, value):
-+ cdef dbus_int32_t c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_INT32, <dbus_int32_t *>&c_value)
-+
-+ def append_uint32(self, value):
-+ cdef dbus_uint32_t c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_UINT32, <dbus_uint32_t *>&c_value)
-+
-+ def append_int64(self, value):
-+ cdef dbus_int64_t c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_INT64, <dbus_int64_t *>&c_value)
-+
-+ def append_uint64(self, value):
-+ cdef dbus_uint64_t c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_UINT64, <dbus_uint64_t *>&c_value)
-+
-+ def append_double(self, value):
-+ cdef double c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_DOUBLE, <double *>&c_value)
-+
-+ def append_string(self, value):
-+ cdef char *c_value
-+ tmp = value.encode('utf8')
-+ c_value = tmp
-+ return dbus_message_iter_append_basic(self.iter, TYPE_STRING, <char **>&c_value)
-+
-+ def append_object_path(self, value):
-+ cdef char *c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_OBJECT_PATH, <char **>&c_value)
-+
-+ def append_signature(self, value):
-+ cdef char *c_value
-+ c_value = value
-+ return dbus_message_iter_append_basic(self.iter, TYPE_SIGNATURE, <char **>&c_value)
-+
-+
-+ def append_dict(self, python_dict):
-+ cdef DBusMessageIter c_dict_iter, c_dict_entry_iter
-+ cdef MessageIter dict_iter, dict_entry_iter
-+
-+ level = self.level + 1
-+
-+ key = None
-+ value = None
-+
-+ sig = str(chr(DICT_ENTRY_BEGIN))
-+
-+ if isinstance(python_dict, Dictionary):
-+ key = python_dict.key_type
-+ value = python_dict.value_type
-+ signature = python_dict.signature
-+
-+ dict_list = python_dict.items()
-+
-+ if signature:
-+ sig = sig + signature
-+ else:
-+ if not (key and value):
-+ key, value = dict_list[0]
-+
-+ sig = sig + self.python_value_to_dbus_sig(key)
-+ sig = sig + self.python_value_to_dbus_sig(value)
-+
-+ sig = sig + str(chr(DICT_ENTRY_END))
-+
-+ dbus_message_iter_open_container(self.iter, TYPE_ARRAY, sig, <DBusMessageIter *>&c_dict_iter)
-+ dict_iter = MessageIter(level)
-+ dict_iter.__cinit__(&c_dict_iter)
-+
-+ for key, value in dict_list:
-+ dbus_message_iter_open_container(dict_iter.iter, TYPE_DICT_ENTRY, sig, <DBusMessageIter *>&c_dict_entry_iter)
-+ dict_entry_iter = MessageIter(level)
-+ dict_entry_iter.__cinit__(&c_dict_entry_iter)
-+
-+ if signature:
-+ signature_iter = iter(Signature(signature))
-+ tmp_sig = signature_iter.next()
-+ if not dict_entry_iter.append_strict(key, tmp_sig):
-+ dbus_message_iter_close_container(dict_iter.iter, dict_entry_iter.iter)
-+ dbus_message_iter_close_container(self.iter, dict_iter.iter)
-+ return False
-+
-+ tmp_sig = signature_iter.next()
-+ if not dict_entry_iter.append_strict(value, tmp_sig):
-+ dbus_message_iter_close_container(dict_iter.iter, dict_entry_iter.iter)
-+ dbus_message_iter_close_container(self.iter, dict_iter.iter)
-+ return False
-+
-+ else:
-+ if not dict_entry_iter.append(key):
-+ dbus_message_iter_close_container(dict_iter.iter, dict_entry_iter.iter)
-+ dbus_message_iter_close_container(self.iter, dict_iter.iter)
-+ return False
-+
-+ if not dict_entry_iter.append(value):
-+ dbus_message_iter_close_container(dict_iter.iter, dict_entry_iter.iter)
-+ dbus_message_iter_close_container(self.iter, dict_iter.iter)
-+ return False
-+
-+ dbus_message_iter_close_container(dict_iter.iter, dict_entry_iter.iter)
-+
-+ dbus_message_iter_close_container(self.iter, dict_iter.iter)
-+
-+ return True
-+
-+ def append_struct(self, python_struct, signature = None):
-+ cdef DBusMessageIter c_struct_iter
-+ cdef MessageIter struct_iter
-+
-+ level = self.level + 1
-+ dbus_message_iter_open_container(self.iter, TYPE_STRUCT, NULL, <DBusMessageIter *>&c_struct_iter)
-+ struct_iter = MessageIter(level)
-+ struct_iter.__cinit__(&c_struct_iter)
-+
-+ signature_iter = iter(Signature(signature))
-+ for item in python_struct:
-+ if signature:
-+ sig = signature_iter.next()
-+
-+ if sig == '':
-+ dbus_message_iter_close_container(self.iter, struct_iter.iter)
-+ return False
-+
-+ if not struct_iter.append_strict(item, sig):
-+ dbus_message_iter_close_container(self.iter, struct_iter.iter)
-+ return False
-+ else:
-+ if not struct_iter.append(item):
-+ dbus_message_iter_close_container(self.iter, struct_iter.iter)
-+ return False
-+
-+ dbus_message_iter_close_container(self.iter, struct_iter.iter)
-+
-+ return True
-+
-+ def append_array(self, python_list):
-+ cdef DBusMessageIter c_array_iter
-+ cdef MessageIter array_iter
-+
-+ level = self.level + 1
-+
-+ sig = None
-+ if isinstance(python_list, Array):
-+ if python_list.type:
-+ sig = self.python_value_to_dbus_sig(python_list.type)
-+ elif python_list.signature:
-+ sig = python_list.signature
-+ else:
-+ sig = self.python_value_to_dbus_sig(python_list[0])
-+ else:
-+ sig = self.python_value_to_dbus_sig(python_list[0])
-+
-+ dbus_message_iter_open_container(self.iter, TYPE_ARRAY, sig, <DBusMessageIter *>&c_array_iter)
-+ array_iter = MessageIter(level)
-+ array_iter.__cinit__(&c_array_iter)
-+
-+ length = len(python_list)
-+ for item in python_list:
-+ if not array_iter.append_strict(item, sig):
-+ dbus_message_iter_close_container(self.iter, array_iter.iter)
-+ return False
-+
-+ dbus_message_iter_close_container(self.iter, array_iter.iter)
-+
-+ return True
-+
-+ def append_variant(self, value):
-+ cdef DBusMessageIter c_variant_iter
-+ cdef MessageIter variant_iter
-+
-+ level = self.level + 1
-+
-+ if value.signature:
-+ sig = value.signature
-+ elif value.type:
-+ sig = self.python_value_to_dbus_sig(value.type)
-+ else:
-+ sig = self.python_value_to_dbus_sig(value.value)
-+
-+ dbus_message_iter_open_container(self.iter, TYPE_VARIANT, sig, <DBusMessageIter *>&c_variant_iter)
-+
-+ variant_iter = MessageIter(level)
-+ variant_iter.__cinit__(&c_variant_iter)
-+
-+ if not variant_iter.append(value.value):
-+ dbus_message_iter_close_container(self.iter, variant_iter.iter)
-+ return False
-+
-+ dbus_message_iter_close_container(self.iter, variant_iter.iter)
-+ return True
-+
-+ def __str__(self):
-+ cdef DBusMessageIter c_array_iter
-+ cdef MessageIter array_iter
-+
-+ value_at_iter = True
-+ retval = ""
-+ while (value_at_iter):
-+ type = self.get_arg_type()
-+ if type == TYPE_INVALID:
-+ break
-+ elif type == TYPE_STRING:
-+ str = iter.get_string()
-+ arg = 'string:%s\n' % (str)
-+ elif type == TYPE_OBJECT_PATH:
-+ path = iter.get_object_path()
-+ arg = 'object_path:%s\n' % (path)
-+ elif type == TYPE_INT16:
-+ num = iter.get_int16()
-+ arg = 'int16:%d\n' % (num)
-+ elif type == TYPE_UINT16:
-+ num = iter.get_uint16()
-+ arg = 'uint16:%u\n' % (num)
-+ elif type == TYPE_INT32:
-+ num = iter.get_int32()
-+ arg = 'int32:%d\n' % (num)
-+ elif type == TYPE_UINT32:
-+ num = iter.get_uint32()
-+ arg = 'uint32:%u\n' % (num)
-+ elif type == TYPE_INT64:
-+ num = iter.get_int64()
-+ arg = 'int64:%d\n' % (num)
-+ elif type == TYPE_UINT64:
-+ num = iter.get_uint64()
-+ arg = 'uint64:%u\n' % (num)
-+ elif type == TYPE_DOUBLE:
-+ num = iter.get_double()
-+ arg = 'double:%f\n' % (num)
-+ elif type == TYPE_BYTE:
-+ num = iter.get_byte()
-+ arg = 'byte:%x(%s)\n' % (num, str(chr(num)))
-+ elif type == TYPE_BOOLEAN:
-+ bool = iter.get_boolean()
-+ if (bool):
-+ str = "true"
-+ else:
-+ str = "false"
-+ arg = 'boolean:%s\n' % (str)
-+ elif type == TYPE_ARRAY:
-+ dbus_message_iter_recurse(self.iter, <DBusMessageIter *>&c_array_iter)
-+ array_iter = MessageIter(self.level + 1)
-+ array_iter.__cinit__(&c_array_iter)
-+ if array_iter.has_next():
-+ arg = 'array [' + str(array_iter) + ']'
-+ else:
-+ arg = 'array []'
-+ else:
-+ arg = '(unknown arg type %d)\n' % type
-+
-+ retval = retval + arg
-+ value_at_iter = self.next()
-+
-+ return retval
-+
-+
-+(MESSAGE_TYPE_INVALID, MESSAGE_TYPE_METHOD_CALL, MESSAGE_TYPE_METHOD_RETURN, MESSAGE_TYPE_ERROR, MESSAGE_TYPE_SIGNAL) = range(5)
-+(TYPE_INVALID, TYPE_BYTE, TYPE_BOOLEAN, TYPE_INT16, TYPE_UINT16, TYPE_INT32, TYPE_UINT32, TYPE_INT64, TYPE_UINT64, TYPE_DOUBLE, TYPE_STRING, TYPE_OBJECT_PATH, TYPE_SIGNATURE, TYPE_ARRAY, TYPE_STRUCT, STRUCT_BEGIN, STRUCT_END, TYPE_VARIANT, TYPE_DICT_ENTRY, DICT_ENTRY_BEGIN, DICT_ENTRY_END) = (0, ord('y'), ord('b'), ord('n'), ord('q'), ord('i'), ord('u'), ord('x'), ord('t'), ord('d'), ord('s'), ord('o'), ord('g'), ord('a'), ord('r'), ord('('), ord(')'), ord('v'), ord('e'), ord('{'), ord('}'))
-+(HANDLER_RESULT_HANDLED, HANDLER_RESULT_NOT_YET_HANDLED, HANDLER_RESULT_NEED_MEMORY) = range(3)
-+
-+cdef class Message:
-+ cdef DBusMessage *msg
-+
-+ def __init__(self, message_type=MESSAGE_TYPE_INVALID,
-+ service=None, path=None, dbus_interface=None, method=None,
-+ Message method_call=None,
-+ name=None,
-+ Message reply_to=None, error_name=None, error_message=None,
-+ _create=1):
-+
-+ self.msg = NULL
-+
-+ cdef char *cservice
-+ cdef char *ciface
-+ cdef DBusMessage *cmsg
-+
-+ ciface = NULL
-+ if (dbus_interface != None):
-+ ciface = dbus_interface
-+
-+ cservice = NULL
-+ if (service != None):
-+ cservice = service
-+
-+ if _create:
-+ if message_type == MESSAGE_TYPE_METHOD_CALL:
-+ self.msg = dbus_message_new_method_call(cservice, path, ciface, method)
-+ elif message_type == MESSAGE_TYPE_METHOD_RETURN:
-+ cmsg = method_call._get_msg()
-+ self.msg = dbus_message_new_method_return(cmsg)
-+ elif message_type == MESSAGE_TYPE_SIGNAL:
-+ self.msg = dbus_message_new_signal(path, ciface, name)
-+ elif message_type == MESSAGE_TYPE_ERROR:
-+ cmsg = reply_to._get_msg()
-+ self.msg = dbus_message_new_error(cmsg, error_name, error_message)
-+
-+
-+ def __dealloc__(self):
-+ if self.msg != NULL:
-+ dbus_message_unref(self.msg)
-+
-+ def type_to_name(self, type):
-+ if type == MESSAGE_TYPE_SIGNAL:
-+ return "signal"
-+ elif type == MESSAGE_TYPE_METHOD_CALL:
-+ return "method call"
-+ elif type == MESSAGE_TYPE_METHOD_RETURN:
-+ return "method return"
-+ elif type == MESSAGE_TYPE_ERROR:
-+ return "error"
-+ else:
-+ return "(unknown message type)"
-+
-+ def __str__(self):
-+ message_type = self.get_type()
-+ sender = self.get_sender()
-+
-+ if sender == None:
-+ sender = "(no sender)"
-+
-+ if (message_type == MESSAGE_TYPE_METHOD_CALL) or (message_type == MESSAGE_TYPE_SIGNAL):
-+ retval = '%s interface=%s; member=%s; sender=%s' % (self.type_to_name(message_type),
-+ self.get_interface(),
-+ self.get_member(),
-+ sender)
-+ elif message_type == MESSAGE_TYPE_METHOD_RETURN:
-+ retval = '%s sender=%s' % (self.type_to_name(message_type),
-+ sender)
-+ elif message_type == MESSAGE_TYPE_ERROR:
-+ retval = '%s name=%s; sender=%s' % (self.type_to_name(message_type),
-+ self.get_error_name(),
-+ sender)
-+ else:
-+ retval = "Message of unknown type %d" % (message_type)
-+
-+
-+ # FIXME: should really use self.convert_to_tuple() here
-+
-+ iter = self.get_iter()
-+
-+ retval = retval + "\n" + str(iter)
-+
-+ return retval
-+
-+ cdef _set_msg(self, DBusMessage *msg):
-+ self.msg = msg
-+
-+ cdef DBusMessage *_get_msg(self):
-+ return self.msg
-+
-+ def get_iter(self, append=False):
-+ cdef DBusMessageIter iter
-+ cdef MessageIter message_iter
-+ cdef DBusMessage *msg
-+
-+ msg = self._get_msg()
-+
-+ if append:
-+ dbus_message_iter_init_append(msg, &iter)
-+ else:
-+ dbus_message_iter_init(msg, &iter)
-+
-+ message_iter = MessageIter(0)
-+ message_iter.__cinit__(&iter)
-+
-+ return message_iter
-+
-+ def get_args_list(self):
-+ retval = [ ]
-+
-+ iter = self.get_iter()
-+ try:
-+ retval.append(iter.get())
-+ except TypeError, e:
-+ return [ ]
-+
-+ value_at_iter = iter.next()
-+ while (value_at_iter):
-+ retval.append(iter.get())
-+ value_at_iter = iter.next()
-+
-+ return retval
-+
-+ # FIXME: implement dbus_message_copy?
-+
-+ def get_type(self):
-+ return dbus_message_get_type(self.msg)
-+
-+ def set_path(self, object_path):
-+ return dbus_message_set_path(self.msg, object_path)
-+
-+ def get_path(self):
-+ return dbus_message_get_path(self.msg)
-+
-+ def set_interface(self, interface):
-+ return dbus_message_set_interface(self.msg, interface)
-+
-+ def get_interface(self):
-+ return dbus_message_get_interface(self.msg)
-+
-+ def set_member(self, member):
-+ return dbus_message_set_member(self.msg, member)
-+
-+ def get_member(self):
-+ return dbus_message_get_member(self.msg)
-+
-+ def set_error_name(self, name):
-+ return dbus_message_set_error_name(self.msg, name)
-+
-+ def get_error_name(self):
-+ return dbus_message_get_error_name(self.msg)
-+
-+ def set_destination(self, destination):
-+ return dbus_message_set_destination(self.msg, destination)
-+
-+ def get_destination(self):
-+ return dbus_message_get_destination(self.msg)
-+
-+ def set_sender(self, sender):
-+ return dbus_message_set_sender(self.msg, sender)
-+
-+ def get_sender(self):
-+ cdef char *sender
-+ sender = dbus_message_get_sender(self.msg)
-+ if (sender == NULL):
-+ return None
-+ else:
-+ return sender
-+
-+ def set_no_reply(self, no_reply):
-+ dbus_message_set_no_reply(self.msg, no_reply)
-+
-+ def get_no_reply(self):
-+ return dbus_message_get_no_reply(self.msg)
-+
-+ def is_method_call(self, interface, method):
-+ return dbus_message_is_method_call(self.msg, interface, method)
-+
-+ def is_signal(self, interface, signal_name):
-+ return dbus_message_is_signal(self.msg, interface, signal_name)
-+
-+ def is_error(self, error_name):
-+ return dbus_message_is_error(self.msg, error_name)
-+
-+ def has_destination(self, service):
-+ return dbus_message_has_destination(self.msg, service)
-+
-+ def has_sender(self, service):
-+ return dbus_message_has_sender(self.msg, service)
-+
-+ def get_serial(self):
-+ return dbus_message_get_serial(self.msg)
-+
-+ def set_reply_serial(self, reply_serial):
-+ return dbus_message_set_reply_serial(self.msg, reply_serial)
-+
-+ def get_reply_serial(self):
-+ return dbus_message_get_reply_serial(self.msg)
-+
-+ #FIXME: dbus_message_get_path_decomposed
-+
-+ # FIXME: all the different dbus_message_*args* methods
-+
-+class Signal(Message):
-+ def __init__(self, spath, sinterface, sname):
-+ Message.__init__(self, MESSAGE_TYPE_SIGNAL, path=spath, dbus_interface=sinterface, name=sname)
-+
-+class EmptyMessage(Message):
-+ def __init__(self):
-+ Message.__init__(self, _create=False)
-+
-+class MethodCall(Message):
-+ def __init__(self, mpath, minterface, mmethod):
-+ Message.__init__(self, MESSAGE_TYPE_METHOD_CALL, path=mpath, dbus_interface=minterface, method=mmethod)
-+
-+class MethodReturn(Message):
-+ def __init__(self, method_call):
-+ Message.__init__(self, MESSAGE_TYPE_METHOD_RETURN, method_call=method_call)
-+
-+class Error(Message):
-+ def __init__(self, reply_to, error_name, error_message):
-+ Message.__init__(self, MESSAGE_TYPE_ERROR, reply_to=reply_to, error_name=error_name, error_message=error_message)
-+
-+cdef class Server:
-+ cdef DBusServer *server
-+ def __init__(self, address):
-+ cdef DBusError error
-+ dbus_error_init(&error)
-+ self.server = dbus_server_listen(address,
-+ &error)
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free (&error)
-+ raise DBusException, errormsg
-+
-+ def disconnect(self):
-+ dbus_server_disconnect(self.server)
-+
-+ def get_is_connected(self):
-+ return dbus_server_get_is_connected(self.server)
-+
-+# def set_new_connection_function(self, function, data):
-+# dbus_server_set_new_connection_function(self.conn, function,
-+# data, NULL)
-+
-+# def set_watch_functions(self, add_function, remove_function, data):
-+# dbus_server_set_watch_functions(self.server,
-+# add_function, remove_function,
-+# data, NULL)
-+
-+# def set_timeout_functions(self, add_function, remove_function, data):
-+# dbus_server_set_timeout_functions(self.server,
-+# add_function, remove_function,
-+# data, NULL)
-+
-+# def handle_watch(self, watch, condition):
-+# dbus_server_handle_watch(self.conn, watch, condition)
-+
-+BUS_SESSION = DBUS_BUS_SESSION
-+BUS_SYSTEM = DBUS_BUS_SYSTEM
-+BUS_STARTER = DBUS_BUS_STARTER
-+
-+def bus_get (bus_type, private=False):
-+ cdef DBusError error
-+ cdef Connection conn
-+ cdef DBusConnection *connection
-+
-+ dbus_error_init(&error)
-+ if private:
-+ connection = dbus_bus_get_private(bus_type,
-+ &error)
-+ else:
-+ connection = dbus_bus_get(bus_type,
-+ &error)
-+
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-+ conn = Connection()
-+ conn.__cinit__(None, connection)
-+ return conn
-+
-+def bus_get_unique_name(Connection connection):
-+ cdef DBusConnection *conn
-+ conn = connection._get_conn()
-+ return dbus_bus_get_unique_name(conn)
-+
-+def bus_get_unix_user(Connection connection, service_name):
-+ cdef DBusError error
-+ dbus_error_init(&error)
-+ cdef int retval
-+ cdef DBusConnection *conn
-+
-+ conn = connection._get_conn()
-+ retval = dbus_bus_get_unix_user(conn, service_name, &error)
-+
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-+ return retval
-+
-+# these are defines, not enums, so they aren't auto generated
-+DBUS_START_REPLY_SUCCESS = 0
-+DBUS_START_REPLY_ALREADY_RUNNING = 1
-+
-+def bus_start_service_by_name(Connection connection, service_name, flags=0):
-+ cdef DBusError error
-+ dbus_error_init(&error)
-+ cdef dbus_bool_t retval
-+ cdef dbus_uint32_t results
-+ cdef DBusConnection *conn
-+
-+ conn = connection._get_conn()
-+
-+ retval = dbus_bus_start_service_by_name(conn, service_name, flags, &results, &error)
-+
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-+ return (retval, results)
-+
-+def bus_register(Connection connection):
-+ cdef DBusError error
-+ dbus_error_init(&error)
-+ cdef dbus_bool_t retval
-+ cdef DBusConnection *conn
-+
-+ conn = connection._get_conn()
-+ retval = dbus_bus_register(conn,
-+ &error)
-+ if dbus_error_is_set(&error):
-+ msg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-+ return retval
-+
-+NAME_FLAG_ALLOW_REPLACEMENT = 0x1
-+NAME_FLAG_REPLACE_EXISTING = 0x2
-+NAME_FLAG_DO_NOT_QUEUE = 0x4
-+
-+REQUEST_NAME_REPLY_PRIMARY_OWNER = 1
-+REQUEST_NAME_REPLY_IN_QUEUE = 2
-+REQUEST_NAME_REPLY_EXISTS = 3
-+REQUEST_NAME_REPLY_ALREADY_OWNER = 4
-+
-+def bus_request_name(Connection connection, service_name, flags=0):
-+ cdef DBusError error
-+ dbus_error_init(&error)
-+ cdef int retval
-+ cdef DBusConnection *conn
-+
-+ conn = connection._get_conn()
-+ retval = dbus_bus_request_name(conn,
-+ service_name,
-+ flags,
-+ &error)
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-+ return retval
-+
-+RELEASE_NAME_REPLY_RELEASED = 1
-+RELEASE_NAME_REPLY_NON_EXISTENT = 2
-+RELEASE_NAME_REPLY_NOT_OWNER = 3
-+
-+def bus_release_name(Connection connection, service_name):
-+ cdef DBusError error
-+ dbus_error_init(&error)
-+ cdef int retval
-+ cdef DBusConnection *conn
-+
-+ conn = connection._get_conn()
-+ retval = dbus_bus_release_name(conn,
-+ service_name,
-+ &error)
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-+ return retval
-+
-+def bus_name_has_owner(Connection connection, service_name):
-+ cdef DBusError error
-+ dbus_error_init(&error)
-+ cdef dbus_bool_t retval
-+ cdef DBusConnection *conn
-+
-+ conn = connection._get_conn()
-+ retval = dbus_bus_name_has_owner(conn,
-+ service_name,
-+ &error)
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-+ return retval
-+
-+def bus_add_match(Connection connection, rule):
-+ cdef DBusError error
-+ cdef DBusConnection *conn
-+
-+ dbus_error_init(&error)
-+
-+ conn = connection._get_conn()
-+ dbus_bus_add_match (conn, rule, &error)
-+
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-+def bus_remove_match(Connection connection, rule):
-+ cdef DBusError error
-+ cdef DBusConnection *conn
-+
-+ dbus_error_init(&error)
-+
-+ conn = connection._get_conn()
-+ dbus_bus_remove_match (conn, rule, &error)
-+
-+ if dbus_error_is_set(&error):
-+ errormsg = error.message
-+ dbus_error_free(&error)
-+ raise DBusException, errormsg
-+
-diff -Naur dbus-0.61.orig/python/dbus_glib_bindings.pyx dbus-0.61/python/dbus_glib_bindings.pyx
---- dbus-0.61.orig/python/dbus_glib_bindings.pyx 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/dbus_glib_bindings.pyx 2005-09-01 03:22:06.000000000 +0200
-@@ -0,0 +1,17 @@
-+cimport dbus_bindings
-+import dbus_bindings
-+
-+cdef extern from "dbus-glib.h":
-+ ctypedef struct GMainContext
-+ cdef void dbus_g_thread_init ()
-+
-+cdef extern from "dbus-glib-lowlevel.h":
-+ cdef void dbus_connection_setup_with_g_main (dbus_bindings.DBusConnection *connection,
-+ GMainContext *context)
-+def setup_with_g_main(conn):
-+ cdef dbus_bindings.Connection connection
-+ connection = conn
-+ dbus_connection_setup_with_g_main(connection._get_conn(), NULL)
-+
-+def gthreads_init ():
-+ dbus_g_thread_init ()
-diff -Naur dbus-0.61.orig/python/dbus_h_wrapper.h dbus-0.61/python/dbus_h_wrapper.h
---- dbus-0.61.orig/python/dbus_h_wrapper.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/dbus_h_wrapper.h 2003-09-30 04:40:49.000000000 +0200
-@@ -0,0 +1,3 @@
-+#define DBUS_API_SUBJECT_TO_CHANGE 1
-+#include <dbus/dbus.h>
-+
-diff -Naur dbus-0.61.orig/python/decorators.py dbus-0.61/python/decorators.py
---- dbus-0.61.orig/python/decorators.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/decorators.py 2005-11-14 03:53:29.000000000 +0100
-@@ -0,0 +1,83 @@
-+import _util
-+import inspect
-+import dbus_bindings
-+
-+def method(dbus_interface, in_signature=None, out_signature=None, async_callbacks=None, sender_keyword=None):
-+ _util._validate_interface_or_name(dbus_interface)
-+
-+ def decorator(func):
-+ args = inspect.getargspec(func)[0]
-+ args.pop(0)
-+
-+ if async_callbacks:
-+ if type(async_callbacks) != tuple:
-+ raise TypeError('async_callbacks must be a tuple of (keyword for return callback, keyword for error callback)')
-+ if len(async_callbacks) != 2:
-+ raise ValueError('async_callbacks must be a tuple of (keyword for return callback, keyword for error callback)')
-+ args.remove(async_callbacks[0])
-+ args.remove(async_callbacks[1])
-+
-+ if sender_keyword:
-+ args.remove(sender_keyword)
-+
-+ if in_signature:
-+ in_sig = tuple(dbus_bindings.Signature(in_signature))
-+
-+ if len(in_sig) > len(args):
-+ raise ValueError, 'input signature is longer than the number of arguments taken'
-+ elif len(in_sig) < len(args):
-+ raise ValueError, 'input signature is shorter than the number of arguments taken'
-+
-+ func._dbus_is_method = True
-+ func._dbus_async_callbacks = async_callbacks
-+ func._dbus_interface = dbus_interface
-+ func._dbus_in_signature = in_signature
-+ func._dbus_out_signature = out_signature
-+ func._dbus_sender_keyword = sender_keyword
-+ func._dbus_args = args
-+ return func
-+
-+ return decorator
-+
-+def signal(dbus_interface, signature=None):
-+ _util._validate_interface_or_name(dbus_interface)
-+ def decorator(func):
-+ def emit_signal(self, *args, **keywords):
-+ func(self, *args, **keywords)
-+ message = dbus_bindings.Signal(self._object_path, dbus_interface, func.__name__)
-+ iter = message.get_iter(True)
-+
-+ if emit_signal._dbus_signature:
-+ signature = tuple(dbus_bindings.Signature(emit_signal._dbus_signature))
-+ for (arg, sig) in zip(args, signature):
-+ iter.append_strict(arg, sig)
-+ else:
-+ for arg in args:
-+ iter.append(arg)
-+
-+ self._connection.send(message)
-+
-+ args = inspect.getargspec(func)[0]
-+ args.pop(0)
-+
-+ if signature:
-+ sig = tuple(dbus_bindings.Signature(signature))
-+
-+ if len(sig) > len(args):
-+ raise ValueError, 'signal signature is longer than the number of arguments provided'
-+ elif len(sig) < len(args):
-+ raise ValueError, 'signal signature is shorter than the number of arguments provided'
-+
-+ emit_signal.__name__ = func.__name__
-+ emit_signal.__doc__ = func.__doc__
-+ emit_signal._dbus_is_signal = True
-+ emit_signal._dbus_interface = dbus_interface
-+ emit_signal._dbus_signature = signature
-+ emit_signal._dbus_args = args
-+ return emit_signal
-+
-+ return decorator
-+
-+def explicitly_pass_message(func):
-+ func._dbus_pass_message = True
-+ return func
-diff -Naur dbus-0.61.orig/python/examples/Makefile.am dbus-0.61/python/examples/Makefile.am
---- dbus-0.61.orig/python/examples/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/Makefile.am 2004-07-11 05:09:03.000000000 +0200
-@@ -0,0 +1,13 @@
-+NULL=
-+
-+EXTRA_DIST = \
-+ example-service.py \
-+ example-client.py \
-+ example-signal-emitter.py \
-+ example-signal-recipient.py \
-+ gconf-proxy-client.py \
-+ gconf-proxy-service.py \
-+ gconf-proxy-service2.py \
-+ list-system-services.py \
-+ $(NULL)
-+
-diff -Naur dbus-0.61.orig/python/examples/Makefile.in dbus-0.61/python/examples/Makefile.in
---- dbus-0.61.orig/python/examples/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/Makefile.in 2006-02-27 22:34:36.000000000 +0100
-@@ -0,0 +1,479 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = python/examples
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+SOURCES =
-+DIST_SOURCES =
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+NULL =
-+EXTRA_DIST = \
-+ example-service.py \
-+ example-client.py \
-+ example-signal-emitter.py \
-+ example-signal-recipient.py \
-+ gconf-proxy-client.py \
-+ gconf-proxy-service.py \
-+ gconf-proxy-service2.py \
-+ list-system-services.py \
-+ $(NULL)
-+
-+all: all-am
-+
-+.SUFFIXES:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu python/examples/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu python/examples/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+tags: TAGS
-+TAGS:
-+
-+ctags: CTAGS
-+CTAGS:
-+
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-am
-+all-am: Makefile
-+installdirs:
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-libtool
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-+ distclean distclean-generic distclean-libtool distdir dvi \
-+ dvi-am html html-am info info-am install install-am \
-+ install-data install-data-am install-exec install-exec-am \
-+ install-info install-info-am install-man install-strip \
-+ installcheck installcheck-am installdirs maintainer-clean \
-+ maintainer-clean-generic mostlyclean mostlyclean-generic \
-+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
-+ uninstall-info-am
-+
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/python/examples/example-client.py dbus-0.61/python/examples/example-client.py
---- dbus-0.61.orig/python/examples/example-client.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/example-client.py 2005-08-17 00:54:04.000000000 +0200
-@@ -0,0 +1,22 @@
-+#!/usr/bin/env python
-+
-+import dbus
-+
-+bus = dbus.SessionBus()
-+remote_object = bus.get_object("org.designfu.SampleService", "/SomeObject")
-+iface = dbus.Interface(remote_object, "org.designfu.SampleInterface")
-+
-+hello_reply_list = remote_object.HelloWorld("Hello from example-client.py!", dbus_interface = "org.designfu.SampleInterface")
-+
-+hello_reply_tuple = iface.GetTuple()
-+
-+hello_reply_dict = iface.GetDict()
-+
-+print (hello_reply_list)
-+
-+print str(hello_reply_tuple)
-+
-+print str(hello_reply_dict)
-+
-+print remote_object.Introspect(dbus_interface="org.freedesktop.DBus.Introspectable")
-+
-diff -Naur dbus-0.61.orig/python/examples/example-service.py dbus-0.61/python/examples/example-service.py
---- dbus-0.61.orig/python/examples/example-service.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/example-service.py 2005-10-30 00:04:01.000000000 +0200
-@@ -0,0 +1,30 @@
-+#!/usr/bin/env python
-+
-+import dbus
-+import dbus.service
-+import dbus.glib
-+import gobject
-+
-+class SomeObject(dbus.service.Object):
-+ def __init__(self, bus_name, object_path="/SomeObject"):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+ @dbus.service.method("org.designfu.SampleInterface")
-+ def HelloWorld(self, hello_message):
-+ print (str(hello_message))
-+ return ["Hello", " from example-service.py"]
-+
-+ @dbus.service.method("org.designfu.SampleInterface")
-+ def GetTuple(self):
-+ return ("Hello Tuple", " from example-service.py")
-+
-+ @dbus.service.method("org.designfu.SampleInterface")
-+ def GetDict(self):
-+ return {"first": "Hello Dict", "second": " from example-service.py"}
-+
-+session_bus = dbus.SessionBus()
-+name = dbus.service.BusName("org.designfu.SampleService", bus=session_bus)
-+object = SomeObject(name)
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-diff -Naur dbus-0.61.orig/python/examples/example-signal-emitter.py dbus-0.61/python/examples/example-signal-emitter.py
---- dbus-0.61.orig/python/examples/example-signal-emitter.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/example-signal-emitter.py 2005-07-17 23:02:56.000000000 +0200
-@@ -0,0 +1,29 @@
-+#!/usr/bin/env python
-+
-+import dbus
-+import dbus.service
-+import dbus.glib
-+import gobject
-+
-+class TestObject(dbus.service.Object):
-+ def __init__(self, bus_name, object_path='/org/designfu/TestService/object'):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+ @dbus.service.signal('org.designfu.TestService')
-+ def HelloSignal(self, message):
-+ # The signal is emitted when this method exits
-+ # You can have code here if you wish
-+ pass
-+
-+ @dbus.service.method('org.designfu.TestService')
-+ def emitHelloSignal(self):
-+ #you emit signals by calling the signal's skeleton method
-+ self.HelloSignal('Hello')
-+ return 'Signal emitted'
-+
-+session_bus = dbus.SessionBus()
-+name = dbus.service.BusName('org.designfu.TestService', bus=session_bus)
-+object = TestObject(name)
-+
-+loop = gobject.MainLoop()
-+loop.run()
-diff -Naur dbus-0.61.orig/python/examples/example-signal-recipient.py dbus-0.61/python/examples/example-signal-recipient.py
---- dbus-0.61.orig/python/examples/example-signal-recipient.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/example-signal-recipient.py 2005-08-18 06:04:57.000000000 +0200
-@@ -0,0 +1,54 @@
-+#!/usr/bin/env python
-+
-+import dbus
-+import dbus.decorators
-+import dbus.glib
-+import gobject
-+
-+def handle_reply(msg):
-+ print msg
-+
-+def handle_error(e):
-+ print str(e)
-+
-+def emit_signal():
-+ #call the emitHelloSignal method
-+ object.emitHelloSignal(dbus_interface="org.designfu.TestService")
-+ #reply_handler = handle_reply, error_handler = handle_error)
-+ return True
-+
-+bus = dbus.SessionBus()
-+object = bus.get_object("org.designfu.TestService","/org/designfu/TestService/object")
-+
-+def hello_signal_handler(hello_string):
-+ print ("Received signal and it says: " + hello_string)
-+
-+ at dbus.decorators.explicitly_pass_message
-+def catchall_signal_handler(*args, **keywords):
-+ #The dbus.handler directive passes in the special __dbus_message__ variable
-+ dbus_message = keywords["dbus_message"]
-+ print "Caught signal " + dbus_message.get_member()
-+ for arg in args:
-+ print " " + str(arg)
-+
-+def catchall_hello_signals_handler(hello_string):
-+ print ("Received a hello signal and it says ") + hello_string
-+
-+ at dbus.decorators.explicitly_pass_message
-+def catchall_testservice_interface_handler(hello_string, dbus_message):
-+ print "org.designfu.TestService interface says " + hello_string + " when it sent signal " + dbus_message.get_member()
-+
-+object.connect_to_signal("HelloSignal", hello_signal_handler, dbus_interface="org.designfu.TestService", arg0="Hello")
-+
-+#lets make a catchall
-+bus.add_signal_receiver(catchall_signal_handler)
-+bus.add_signal_receiver(catchall_hello_signals_handler, dbus_interface = "org.designfu.TestService", signal_name = "HelloSignal")
-+bus.add_signal_receiver(catchall_testservice_interface_handler, dbus_interface = "org.designfu.TestService")
-+
-+
-+gobject.timeout_add(2000, emit_signal)
-+
-+# Tell the remote object to emit the signal
-+
-+loop = gobject.MainLoop()
-+loop.run()
-diff -Naur dbus-0.61.orig/python/examples/gconf-proxy-client.py dbus-0.61/python/examples/gconf-proxy-client.py
---- dbus-0.61.orig/python/examples/gconf-proxy-client.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/gconf-proxy-client.py 2005-05-01 21:34:58.000000000 +0200
-@@ -0,0 +1,13 @@
-+#!/usr/bin/env python
-+
-+import dbus
-+
-+gconf_key = "/desktop/gnome/file_views/icon_theme"
-+
-+bus = dbus.SessionBus()
-+gconf_service = bus.get_service("org.gnome.GConf")
-+gconf_key_object = gconf_service.get_object("/org/gnome/GConf" + gconf_key, "org.gnome.GConf")
-+
-+value = gconf_key_object.getString()
-+
-+print ("Value of GConf key %s is %s" % (gconf_key, value))
-diff -Naur dbus-0.61.orig/python/examples/gconf-proxy-service.py dbus-0.61/python/examples/gconf-proxy-service.py
---- dbus-0.61.orig/python/examples/gconf-proxy-service.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/gconf-proxy-service.py 2005-10-30 00:04:01.000000000 +0200
-@@ -0,0 +1,43 @@
-+#!/usr/bin/env python
-+#FIXME: Doesn't work with the new bindings
-+import dbus
-+
-+import gobject
-+import gconf
-+
-+class GConfService(dbus.Service):
-+
-+ def __init__(self):
-+ dbus.Service.__init__(self, "org.gnome.GConf", dbus.SessionBus())
-+
-+ gconf_object_tree = self.GConfObjectTree(self)
-+
-+ class GConfObjectTree(dbus.ObjectTree):
-+ def __init__(self, service):
-+ dbus.ObjectTree.__init__(self, "/org/gnome/GConf", service, dbus_methods=[ self.getString, self.setString, self.getInt, self.setInt ])
-+
-+ self.client = gconf.client_get_default()
-+
-+ def getString(self, message, object_path):
-+ print ("getString called on GConf key %s" % (object_path))
-+ return self.client.get_string(object_path)
-+
-+ def setString(self, message, object_path, new_value):
-+ print ("setString called on GConf key %s" % (object_path))
-+ self.client.set_string(object_path, new_value)
-+
-+ def getInt(self, message, object_path):
-+ print ("getInt called on GConf key %s" % (object_path))
-+ return self.client.get_int(object_path)
-+
-+ def setInt(self, message, object_path, new_value):
-+ print ("setInt called on GConf key %s" % (object_path))
-+ self.client.set_int(object_path, new_value)
-+
-+gconf_service = GConfService()
-+
-+print ("GConf Proxy service started.")
-+print ("Run 'gconf-proxy-client.py' to fetch a GConf key through the proxy...")
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-diff -Naur dbus-0.61.orig/python/examples/gconf-proxy-service2.py dbus-0.61/python/examples/gconf-proxy-service2.py
---- dbus-0.61.orig/python/examples/gconf-proxy-service2.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/gconf-proxy-service2.py 2005-10-30 00:04:01.000000000 +0200
-@@ -0,0 +1,39 @@
-+#!/usr/bin/env python
-+#FIXME: doesn't work with the new bindings
-+import dbus
-+
-+import gobject
-+import gconf
-+
-+class GConfService(dbus.Service):
-+
-+ def __init__(self):
-+ dbus.Service.__init__(self, "org.gnome.GConf", dbus.SessionBus())
-+
-+ gconf_object_tree = self.GConfObjectTree(self)
-+
-+ class GConfObjectTree(dbus.ObjectTree):
-+ def __init__(self, service):
-+ dbus.ObjectTree.__init__(self, "/org/gnome/GConf", service)
-+
-+ self.client = gconf.client_get_default()
-+
-+ def object_method_called(self, message, object_path, method_name, argument_list):
-+ print ("Method %s called on GConf key %s" % (method_name, object_path))
-+
-+ if "getString" == method_name:
-+ return self.client.get_string(object_path)
-+ elif "setString" == method_name:
-+ self.client.set_int(object_path, argument_list[0])
-+ elif "getInt" == method_name:
-+ return self.client.get_int(object_path)
-+ elif "setInt" == method_name:
-+ self.client.set_int(object_path, argument_list[0])
-+
-+gconf_service = GConfService()
-+
-+print ("GConf Proxy service started.")
-+print ("Run 'gconf-proxy-client.py' to fetch a GConf key through the proxy...")
-+
-+mainloop = gobject.MainLoop()
-+mainloop.run()
-diff -Naur dbus-0.61.orig/python/examples/list-system-services.py dbus-0.61/python/examples/list-system-services.py
---- dbus-0.61.orig/python/examples/list-system-services.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/examples/list-system-services.py 2005-08-17 00:54:04.000000000 +0200
-@@ -0,0 +1,22 @@
-+#!/usr/bin/env python
-+
-+"""Lists services on the system bus
-+"""
-+
-+import dbus
-+
-+# Get a connection to the SYSTEM bus
-+bus = dbus.SystemBus()
-+
-+# Get a reference to the desktop bus' standard object, denoted
-+# by the path /org/freedesktop/DBus.
-+dbus_object = bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
-+
-+# The object /org/freedesktop/DBus
-+# implements the 'org.freedesktop.DBus' interface
-+dbus_iface = dbus.Interface(dbus_object, 'org.freedesktop.DBus')
-+
-+# One of the member functions in the org.freedesktop.DBus interface
-+# is ListServices(), which provides a list of all the other services
-+# registered on this bus. Call it, and print the list.
-+print dbus_object.ListNames()
-diff -Naur dbus-0.61.orig/python/exceptions.py dbus-0.61/python/exceptions.py
---- dbus-0.61.orig/python/exceptions.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/exceptions.py 2005-11-15 18:19:19.000000000 +0100
-@@ -0,0 +1,29 @@
-+import dbus_bindings
-+
-+DBusException = dbus_bindings.DBusException
-+ConnectionError = dbus_bindings.ConnectionError
-+
-+class MissingErrorHandlerException(DBusException):
-+ def __init__(self):
-+ DBusException.__init__(self, "error_handler not defined: if you define a reply_handler you must also define an error_handler")
-+
-+class MissingReplyHandlerException(DBusException):
-+ def __init__(self):
-+ DBusException.__init__(self, "reply_handler not defined: if you define an error_handler you must also define a reply_handler")
-+
-+class ValidationException(DBusException):
-+ def __init__(self, msg=''):
-+ DBusException.__init__(self, "Error validating string: %s"%msg)
-+
-+class IntrospectionParserException(DBusException):
-+ def __init__(self, msg=''):
-+ DBusException.__init__(self, "Error parsing introspect data: %s"%msg)
-+
-+class UnknownMethodException(DBusException):
-+ def __init__(self, method):
-+ DBusException.__init__(self, "Unknown method: %s"%method)
-+
-+class NameExistsException(DBusException):
-+ def __init__(self, name):
-+ DBusException.__init__(self, "Bus name already exists: %s"%name)
-+
-diff -Naur dbus-0.61.orig/python/extract.py dbus-0.61/python/extract.py
---- dbus-0.61.orig/python/extract.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/extract.py 2005-07-20 16:15:08.000000000 +0200
-@@ -0,0 +1,234 @@
-+import commands
-+import re
-+import string
-+import sys
-+
-+def clean_func(buf):
-+ buf = strip_comments(buf)
-+ pat = re.compile(r"""\\\n""", re.MULTILINE)
-+ buf = pat.sub('',buf)
-+ pat = re.compile(r"""^[#].*?$""", re.MULTILINE)
-+ buf = pat.sub('',buf)
-+ pat = re.compile(r"""^(typedef|struct|enum)(\s|.|\n)*?;\s*""", re.MULTILINE)
-+ buf = pat.sub('',buf)
-+ pat = re.compile(r"""\s+""", re.MULTILINE)
-+ buf = pat.sub(' ',buf)
-+ pat = re.compile(r""";\s*""", re.MULTILINE)
-+ buf = pat.sub('\n',buf)
-+ buf = buf.lstrip()
-+ #pat=re.compile(r'\s+([*|&]+)\s*(\w+)')
-+ pat = re.compile(r' \s+ ([*|&]+) \s* (\w+)',re.VERBOSE)
-+ buf = pat.sub(r'\1 \2', buf)
-+ pat = re.compile(r'\s+ (\w+) \[ \s* \]',re.VERBOSE)
-+ buf = pat.sub(r'[] \1', buf)
-+# buf = string.replace(buf, 'G_CONST_RETURN ', 'const-')
-+ buf = string.replace(buf, 'const ', '')
-+ return buf
-+
-+def strip_comments(buf):
-+ parts = []
-+ lastpos = 0
-+ while 1:
-+ pos = string.find(buf, '/*', lastpos)
-+ if pos >= 0:
-+ parts.append(buf[lastpos:pos])
-+ pos = string.find(buf, '*/', pos)
-+ if pos >= 0:
-+ lastpos = pos + 2
-+ else:
-+ break
-+ else:
-+ parts.append(buf[lastpos:])
-+ break
-+ return string.join(parts, '')
-+
-+def find_enums(buf):
-+ enums = []
-+ buf = strip_comments(buf)
-+ buf = re.sub('\n', ' ', buf)
-+
-+ enum_pat = re.compile(r'enum\s*{([^}]*)}\s*([A-Z][A-Za-z]*)(\s|;)')
-+ splitter = re.compile(r'\s*,\s', re.MULTILINE)
-+ pos = 0
-+ while pos < len(buf):
-+ m = enum_pat.search(buf, pos)
-+ if not m: break
-+
-+ name = m.group(2)
-+ vals = m.group(1)
-+ isflags = string.find(vals, '<<') >= 0
-+ entries = []
-+ for val in splitter.split(vals):
-+ if not string.strip(val): continue
-+ entries.append(string.split(val)[0])
-+ enums.append((name, isflags, entries))
-+
-+ pos = m.end()
-+ return enums
-+
-+#typedef unsigned int dbus_bool_t;
-+#typedef struct {
-+#
-+# }
-+#typedef struct FooStruct FooStruct;
-+# typedef void (* DBusAddWatchFunction) (DBusWatch *watch,
-+# void *data);
-+
-+def find_typedefs(buf):
-+ typedefs = []
-+ buf = re.sub('\n', ' ', strip_comments(buf))
-+ typedef_pat = re.compile(
-+ r"""typedef\s*(?P<type>\w*)
-+ \s*
-+ ([(]\s*\*\s*(?P<callback>[\w* ]*)[)]|{([^}]*)}|)
-+ \s*
-+ (?P<args1>[(](?P<args2>[\s\w*,_]*)[)]|[\w ]*)""",
-+ re.MULTILINE | re.VERBOSE)
-+ pat = re.compile(r"""\s+""", re.MULTILINE)
-+ pos = 0
-+ while pos < len(buf):
-+ m = typedef_pat.search(buf, pos)
-+ if not m:
-+ break
-+ if m.group('type') == 'enum':
-+ pos = m.end()
-+ continue
-+ if m.group('args2') != None:
-+ args = pat.sub(' ', m.group('args2'))
-+
-+ current = '%s (* %s) (%s)' % (m.group('type'),
-+ m.group('callback'),
-+ args)
-+ else:
-+ current = '%s %s' % (m.group('type'), m.group('args1'))
-+ typedefs.append(current)
-+ pos = m.end()
-+ return typedefs
-+
-+proto_pat = re.compile(r"""
-+(?P<ret>(-|\w|\&|\*|\s)+\s*) # return type
-+\s+ # skip whitespace
-+(?P<func>\w+)\s*[(] # match the function name until the opening (
-+(?P<args>.*?)[)] # group the function arguments
-+""", re.IGNORECASE|re.VERBOSE)
-+arg_split_pat = re.compile("\s*,\s*")
-+
-+
-+def find_functions(buf):
-+ functions = []
-+ buf = clean_func(buf)
-+ buf = string.split(buf,'\n')
-+ for p in buf:
-+ if len(p) == 0:
-+ continue
-+ m = proto_pat.match(p)
-+ if m == None:
-+ continue
-+
-+ func = m.group('func')
-+ ret = m.group('ret')
-+ args = m.group('args')
-+ args = arg_split_pat.split(args)
-+# for i in range(len(args)):
-+# spaces = string.count(args[i], ' ')
-+# if spaces > 1:
-+# args[i] = string.replace(args[i], ' ', '-', spaces - 1)
-+
-+ functions.append((func, ret, args))
-+ return functions
-+
-+class Writer:
-+ def __init__(self, filename, enums, typedefs, functions):
-+ if not (enums or typedefs or functions):
-+ return
-+ print 'cdef extern from "%s":' % filename
-+
-+ self.output_enums(enums)
-+ self.output_typedefs(typedefs)
-+ self.output_functions(functions)
-+
-+ print ' pass'
-+ print
-+
-+ def output_enums(self, enums):
-+ for enum in enums:
-+ print ' ctypedef enum %s:' % enum[0]
-+ if enum[1] == 0:
-+ for item in enum[2]:
-+ print ' %s' % item
-+ else:
-+ i = 0
-+ for item in enum[2]:
-+ print ' %s' % item
-+# print ' %s = 1 << %d' % (item, i)
-+ i += 1
-+ print
-+ def output_typedefs(self, typedefs):
-+ for typedef in typedefs:
-+ if typedef.find('va_list') != -1:
-+ continue
-+
-+ parts = typedef.split()
-+ if parts[0] == 'struct':
-+ if parts[-2] == parts[-1]:
-+ parts = parts[:-1]
-+ print ' ctypedef %s' % ' '.join(parts)
-+ else:
-+ print ' ctypedef %s' % typedef
-+
-+ def output_functions(self, functions):
-+ for func, ret, args in functions:
-+ if func[0] == '_':
-+ continue
-+
-+ str = ', '.join(args)
-+ if str.find('...') != -1:
-+ continue
-+ if str.find('va_list') != -1:
-+ continue
-+ if str.strip() == 'void':
-+ continue
-+ print ' %-20s %s (%s)' % (ret, func, str)
-+
-+def do_buffer(name, buffer):
-+ functions = find_functions(buffer)
-+ typedefs = find_typedefs(buffer)
-+ enums = find_enums(buffer)
-+
-+ Writer(name, enums, typedefs, functions)
-+
-+def do_header(filename, name=None):
-+ if name == None:
-+ name = filename
-+
-+ buffer = ""
-+ for line in open(filename).readlines():
-+ if line[0] == '#':
-+ continue
-+ buffer += line
-+
-+ print '# -- %s -- ' % filename
-+ do_buffer(name, buffer)
-+
-+filename = sys.argv[1]
-+
-+if filename.endswith('.h'):
-+ do_header(filename)
-+ raise SystemExit
-+
-+cppflags = ""
-+
-+for flag in sys.argv[2:]:
-+ cppflags = cppflags + " " + flag
-+
-+fd = open(filename)
-+
-+for line in fd.readlines():
-+ if line.startswith('#include'):
-+ filename = line.split(' ')[1][1:-2]
-+ command = "echo '%s'|cpp %s" % (line, cppflags)
-+ sys.stderr.write('running %s' % (command))
-+ output = commands.getoutput(command)
-+ do_buffer(filename, output)
-+ else:
-+ print line[:-1]
-diff -Naur dbus-0.61.orig/python/glib.py dbus-0.61/python/glib.py
---- dbus-0.61.orig/python/glib.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/glib.py 2005-09-01 03:22:06.000000000 +0200
-@@ -0,0 +1,17 @@
-+import dbus
-+import dbus_glib_bindings
-+
-+def _setup_with_g_main(conn):
-+ dbus_glib_bindings.setup_with_g_main(conn._connection)
-+
-+_dbus_gthreads_initialized = False
-+def threads_init():
-+ global _dbus_gthreads_initialized
-+ if not _dbus_gthreads_initialized:
-+ dbus_glib_bindings.gthreads_init()
-+ _dbus_gthreads_initialized = True
-+
-+def init_threads():
-+ threads_init()
-+
-+setattr(dbus, "_dbus_mainloop_setup_function", _setup_with_g_main)
-diff -Naur dbus-0.61.orig/python/introspect_parser.py dbus-0.61/python/introspect_parser.py
---- dbus-0.61.orig/python/introspect_parser.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/introspect_parser.py 2005-11-07 16:31:30.000000000 +0100
-@@ -0,0 +1,51 @@
-+import libxml2
-+import cStringIO
-+import exceptions
-+
-+def process_introspection_data(data):
-+ method_map = {}
-+
-+ XMLREADER_START_ELEMENT_NODE_TYPE = 1
-+ XMLREADER_END_ELEMENT_NODE_TYPE = 15
-+
-+ stream = cStringIO.StringIO(data.encode('utf-8'))
-+ input_source = libxml2.inputBuffer(stream)
-+ reader = input_source.newTextReader("urn:introspect")
-+
-+ ret = reader.Read()
-+ current_iface = None
-+ current_method = None
-+ current_sigstr = ''
-+
-+ while ret == 1:
-+ name = reader.LocalName()
-+ if reader.NodeType() == XMLREADER_START_ELEMENT_NODE_TYPE:
-+ if (not current_iface and not current_method and name == 'interface'):
-+ current_iface = reader.GetAttribute('name')
-+ elif (current_iface and not current_method and name == 'method'):
-+ current_method = reader.GetAttribute('name')
-+ if reader.IsEmptyElement():
-+ method_map[current_iface + '.' + current_method] = ''
-+ current_method = None
-+ current_sigstr = ''
-+
-+ elif (current_iface and current_method and name == 'arg'):
-+ direction = reader.GetAttribute('direction')
-+
-+ if not direction or direction == 'in':
-+ current_sigstr = current_sigstr + reader.GetAttribute('type')
-+
-+ elif reader.NodeType() == XMLREADER_END_ELEMENT_NODE_TYPE:
-+ if (current_iface and not current_method and name == 'interface'):
-+ current_iface = None
-+ if (current_iface and current_method and name == 'method'):
-+ method_map[current_iface + '.' + current_method] = current_sigstr
-+ current_method = None
-+ current_sigstr = ''
-+
-+ ret = reader.Read()
-+
-+ if ret != 0:
-+ raise exceptions.IntrospectionParserException(data)
-+
-+ return method_map
-diff -Naur dbus-0.61.orig/python/matchrules.py dbus-0.61/python/matchrules.py
---- dbus-0.61.orig/python/matchrules.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/matchrules.py 2006-02-16 00:45:50.000000000 +0100
-@@ -0,0 +1,232 @@
-+from exceptions import DBusException
-+
-+class SignalMatchNode:
-+ def __init__(self):
-+ self.wildcard = None
-+ self.finite = {}
-+ self.rules = []
-+
-+ def add(self, key, leaf=None):
-+ node = None
-+
-+ if key:
-+ if self.finite.has_key(key):
-+ node = self.finite[key]
-+ else:
-+ node = SignalMatchNode()
-+ self.finite[key] = node
-+ else:
-+ if self.wildcard:
-+ node = self.wildcard
-+ else:
-+ node = SignalMatchNode()
-+ self.wildcard = node
-+
-+ node.rules.append(leaf)
-+ return node
-+
-+ def get_matches(self, key):
-+ result = []
-+ if self.wildcard:
-+ result.append(self.wildcard)
-+
-+ if self.finite.has_key(key):
-+ result.append(self.finite[key])
-+
-+ return result
-+
-+ def get_match(self, key):
-+ if key:
-+ if self.finite.has_key(key):
-+ return self.finite[key]
-+ else:
-+ return None
-+
-+ return self.wildcard
-+
-+ def has_children(self):
-+ if self.wildcard or len(self.finite.iterkeys()) > 0:
-+ return True
-+ return False
-+
-+ def remove_child(self, child, key=None):
-+ if self.wildcard == child:
-+ self.wildcard = None
-+ elif self.finite.has_key(key):
-+ del self.finite[key]
-+
-+class SignalMatchTree:
-+ """This class creates an ordered tree of SignalMatchRules
-+ to speed searchs. Left branches are wildcard elements
-+ and all other branches are concreet elements.
-+ """
-+ def __init__(self):
-+ self._tree = SignalMatchNode()
-+
-+ def add(self, rule):
-+ interface = self._tree.add(rule.sender)
-+ signal = interface.add(rule.dbus_interface)
-+ path = signal.add(rule.signal_name)
-+ path.add(rule.path, leaf=rule)
-+
-+ def exec_matches(self, match_rule, message):
-+ args = message.get_args_list()
-+
-+ sender_matches = self._tree.get_matches(match_rule.sender)
-+ for sender_node in sender_matches:
-+ interface_matches = sender_node.get_matches(match_rule.dbus_interface)
-+ for interface_node in interface_matches:
-+ signal_matches = interface_node.get_matches(match_rule.signal_name)
-+ for signal_node in signal_matches:
-+ path_matches = signal_node.get_matches(match_rule.path)
-+ for path_node in path_matches:
-+ if(path_node.rules):
-+ for rule in path_node.rules:
-+ if (rule.match_args_from_list(args)):
-+ rule.execute(message, args)
-+
-+ def remove(self, rule):
-+ try:
-+ sender = self._tree.get_match(rule.sender)
-+ interface = sender.get_match(rule.dbus_interface)
-+ signal = interface.get_match(rule.signal_name)
-+ path = signal.get_match(rule.path)
-+
-+ rule_matches = []
-+ for _rule in path.rules:
-+ if _rule.is_match(rule):
-+ rule_matches.append(_rule)
-+
-+ for _rule in rule_matches:
-+ path.rules.remove(_rule)
-+
-+ #clean up tree
-+ if len(path.rules) == 0:
-+ signal.remove_child(path, key = rule.path)
-+ if not signal.has_children():
-+ interface.remove_child(signal, key = rule.signal_name)
-+ if not interface.has_children():
-+ sender.remove_child(interface, key = rule.dbus_interface)
-+ if not sender.has_children():
-+ self._tree.remove_child(sender, key = rule.sender)
-+
-+ except:
-+ raise DBusException ("Trying to remove unkown rule: %s"%str(rule))
-+
-+class SignalMatchRule:
-+ """This class represents a dbus rule used to filter signals.
-+ When a rule matches a filter, the signal is propagated to the handler_funtions
-+ """
-+ def __init__(self, signal_name, dbus_interface, sender, path):
-+ self.handler_functions = []
-+
-+ self.signal_name = signal_name
-+ self.dbus_interface = dbus_interface
-+ self.sender = sender
-+ self.path = path
-+ self.args = None
-+
-+ def add_args_match(self, args):
-+ self.args = args
-+
-+ def execute(self, message, args=None):
-+ keywords = {}
-+
-+ if self.sender_keyword is not None:
-+ keywords[self.sender_keyword] = message.get_sender()
-+ if self.path_keyword is not None:
-+ keywords[self.path_keyword] = message.get_path()
-+
-+ # optimization just in case we already extracted the args
-+ if not args:
-+ args = message.get_args_list()
-+
-+ for handler in self.handler_functions:
-+ if getattr(handler, "_dbus_pass_message", False):
-+ keywords["dbus_message"] = message
-+
-+ if len(keywords) == 0:
-+ handler(*args)
-+ else:
-+ handler(*args, **keywords)
-+
-+ def add_handler(self, handler):
-+ self.handler_functions.append(handler)
-+
-+ #matches only those arguments listed by self
-+ def match_args_from_list(self, args_list):
-+ if not self.args:
-+ return True
-+
-+ last_index = len(args_list) - 1
-+ for (index, value) in self.args.iteritems():
-+ if index > last_index:
-+ return False
-+
-+ if not (args_list[index] == value):
-+ return False
-+
-+ return True
-+
-+ #does exact matching
-+ def match_args_from_rule(self, rule):
-+ if self.args == rule.args:
-+ return True
-+
-+ if self.args == None or rule.args == None:
-+ return False
-+
-+ my_args_list = self.args.items()
-+ match_args_list = rule.args.iterms()
-+
-+ if len(my_args_list) != len(match_args_list):
-+ return False
-+
-+ for (key, value) in my_args_list:
-+ if rule.args.get(key) != value:
-+ return False
-+
-+ return True
-+
-+ def is_match(self, rule):
-+ if (self.signal_name == rule.signal_name and
-+ self.dbus_interface == rule.dbus_interface and
-+ self.sender == rule.sender and
-+ self.path == rule.path and
-+ self.match_args_from_rule(rule)):
-+ if rule.handler_functions == []:
-+ return True
-+
-+ _funcs_copy_a = self.handler_functions[0:]
-+ _funcs_copy_b = rule.handler_functions[0:]
-+ _funcs_copy_a.sort()
-+ _funcs_copy_b.sort()
-+
-+ return _funcs_copy_a == _funcs_copy_b
-+
-+ return False
-+
-+ def __repr__(self):
-+ """Returns a custom representation of this DBusMatchRule that can
-+ be used with dbus_bindings
-+ """
-+ repr = "type='signal'"
-+ if (self.dbus_interface):
-+ repr = repr + ",interface='%s'" % (self.dbus_interface)
-+
-+ if (self.sender):
-+ repr = repr + ",sender='%s'" % (self.sender)
-+
-+ if (self.path):
-+ repr = repr + ",path='%s'" % (self.path)
-+
-+ if (self.signal_name):
-+ repr = repr + ",member='%s'" % (self.signal_name)
-+
-+ if (self.args):
-+ my_args_list = self.args.items()
-+ my_args_list.sort()
-+ for (index, value) in my_args_list:
-+ repr = repr + ",arg%i='%s'" % (index, value)
-+
-+ return repr
-diff -Naur dbus-0.61.orig/python/proxies.py dbus-0.61/python/proxies.py
---- dbus-0.61.orig/python/proxies.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/proxies.py 2006-02-24 18:20:24.000000000 +0100
-@@ -0,0 +1,222 @@
-+import dbus_bindings
-+import introspect_parser
-+import sys
-+from exceptions import MissingReplyHandlerException, MissingErrorHandlerException, IntrospectionParserException
-+
-+class DeferedMethod:
-+ """A DeferedMethod
-+
-+ This is returned instead of ProxyMethod when we are defering DBus calls
-+ while waiting for introspection data to be returned
-+ """
-+ def __init__(self, proxy_method):
-+ self._proxy_method = proxy_method
-+ self._method_name = proxy_method._method_name
-+
-+ def __call__(self, *args, **keywords):
-+ reply_handler = None
-+ if keywords.has_key('reply_handler'):
-+ reply_handler = keywords['reply_handler']
-+
-+ #block for now even on async
-+ # FIXME: put ret in async queue in future if we have a reply handler
-+
-+ self._proxy_method._proxy._pending_introspect.block()
-+ ret = self._proxy_method (*args, **keywords)
-+
-+ return ret
-+
-+class ProxyMethod:
-+ """A proxy Method.
-+
-+ Typically a member of a ProxyObject. Calls to the
-+ method produce messages that travel over the Bus and are routed
-+ to a specific named Service.
-+ """
-+ def __init__(self, proxy, connection, named_service, object_path, method_name, iface):
-+ self._proxy = proxy
-+ self._connection = connection
-+ self._named_service = named_service
-+ self._object_path = object_path
-+ self._method_name = method_name
-+ self._dbus_interface = iface
-+
-+ def __call__(self, *args, **keywords):
-+ timeout = -1
-+ if keywords.has_key('timeout'):
-+ timeout = keywords['timeout']
-+
-+ reply_handler = None
-+ if keywords.has_key('reply_handler'):
-+ reply_handler = keywords['reply_handler']
-+
-+ error_handler = None
-+ if keywords.has_key('error_handler'):
-+ error_handler = keywords['error_handler']
-+
-+ ignore_reply = False
-+ if keywords.has_key('ignore_reply'):
-+ ignore_reply = keywords['ignore_reply']
-+
-+
-+ if not(reply_handler and error_handler):
-+ if reply_handler:
-+ raise MissingErrorHandlerException()
-+ elif error_handler:
-+ raise MissingReplyHandlerException()
-+
-+ dbus_interface = self._dbus_interface
-+ if keywords.has_key('dbus_interface'):
-+ dbus_interface = keywords['dbus_interface']
-+
-+ tmp_iface = ''
-+ if dbus_interface:
-+ tmp_iface = dbus_interface + '.'
-+
-+ key = tmp_iface + self._method_name
-+
-+ introspect_sig = None
-+ if self._proxy._introspect_method_map.has_key (key):
-+ introspect_sig = self._proxy._introspect_method_map[key]
-+
-+ message = dbus_bindings.MethodCall(self._object_path, dbus_interface, self._method_name)
-+ message.set_destination(self._named_service)
-+
-+ # Add the arguments to the function
-+ iter = message.get_iter(True)
-+
-+ if introspect_sig:
-+ for (arg, sig) in zip(args, dbus_bindings.Signature(introspect_sig)):
-+ iter.append_strict(arg, sig)
-+ else:
-+ for arg in args:
-+ iter.append(arg)
-+
-+ if ignore_reply:
-+ result = self._connection.send(message)
-+ args_tuple = (result,)
-+ elif reply_handler:
-+ result = self._connection.send_with_reply_handlers(message, timeout, reply_handler, error_handler)
-+ args_tuple = result
-+ else:
-+ reply_message = self._connection.send_with_reply_and_block(message, timeout)
-+ args_tuple = reply_message.get_args_list()
-+
-+ if len(args_tuple) == 0:
-+ return
-+ elif len(args_tuple) == 1:
-+ return args_tuple[0]
-+ else:
-+ return args_tuple
-+
-+
-+class ProxyObject:
-+ """A proxy to the remote Object.
-+
-+ A ProxyObject is provided by the Bus. ProxyObjects
-+ have member functions, and can be called like normal Python objects.
-+ """
-+ ProxyMethodClass = ProxyMethod
-+ DeferedMethodClass = DeferedMethod
-+
-+ INTROSPECT_STATE_DONT_INTROSPECT = 0
-+ INTROSPECT_STATE_INTROSPECT_IN_PROGRESS = 1
-+ INTROSPECT_STATE_INTROSPECT_DONE = 2
-+
-+ def __init__(self, bus, named_service, object_path, introspect=True):
-+ self._bus = bus
-+ self._named_service = named_service
-+ self._object_path = object_path
-+
-+ #PendingCall object for Introspect call
-+ self._pending_introspect = None
-+ #queue of async calls waiting on the Introspect to return
-+ self._pending_introspect_queue = []
-+ #dictionary mapping method names to their input signatures
-+ self._introspect_method_map = {}
-+
-+ if not introspect:
-+ self._introspect_state = self.INTROSPECT_STATE_DONT_INTROSPECT
-+ else:
-+ self._introspect_state = self.INTROSPECT_STATE_INTROSPECT_IN_PROGRESS
-+
-+ (result, self._pending_introspect) = self._Introspect()
-+
-+
-+ def connect_to_signal(self, signal_name, handler_function, dbus_interface=None, **keywords):
-+ self._bus.add_signal_receiver(handler_function,
-+ signal_name=signal_name,
-+ dbus_interface=dbus_interface,
-+ named_service=self._named_service,
-+ path=self._object_path,
-+ **keywords)
-+
-+ def _Introspect(self):
-+ message = dbus_bindings.MethodCall(self._object_path, 'org.freedesktop.DBus.Introspectable', 'Introspect')
-+ message.set_destination(self._named_service)
-+
-+ result = self._bus.get_connection().send_with_reply_handlers(message, -1,
-+ self._introspect_reply_handler,
-+ self._introspect_error_handler)
-+ return result
-+
-+ def _introspect_execute_queue(self):
-+ for call in self._pending_introspect_queue:
-+ (member, iface, args, keywords) = call
-+
-+ introspect_sig = None
-+
-+ tmp_iface = ''
-+ if iface:
-+ tmp_iface = iface + '.'
-+
-+ key = tmp_iface + '.' + member
-+ if self._introspect_method_map.has_key (key):
-+ introspect_sig = self._introspect_method_map[key]
-+
-+
-+ call_object = self.ProxyMethodClass(self._bus.get_connection(),
-+ self._named_service,
-+ self._object_path,
-+ iface,
-+ member,
-+ introspect_sig)
-+
-+ call_object(args, keywords)
-+
-+ def _introspect_reply_handler(self, data):
-+ try:
-+ self._introspect_method_map = introspect_parser.process_introspection_data(data)
-+ except IntrospectionParserException, e:
-+ self._introspect_error_handler(e)
-+ return
-+
-+ self._introspect_state = self.INTROSPECT_STATE_INTROSPECT_DONE
-+ #self._introspect_execute_queue()
-+
-+ def _introspect_error_handler(self, error):
-+ self._introspect_state = self.INTROSPECT_STATE_DONT_INTROSPECT
-+ self._introspect_execute_queue()
-+ sys.stderr.write("Introspect error: " + str(error) + "\n")
-+
-+ def __getattr__(self, member, dbus_interface=None):
-+ if member == '__call__':
-+ return object.__call__
-+ elif member.startswith('__') and member.endswith('__'):
-+ raise AttributeError(member)
-+ else:
-+ ret = self.ProxyMethodClass(self, self._bus.get_connection(),
-+ self._named_service,
-+ self._object_path, member,
-+ dbus_interface)
-+
-+ if self._introspect_state == self.INTROSPECT_STATE_INTROSPECT_IN_PROGRESS:
-+ ret = self.DeferedMethodClass(ret)
-+
-+ return ret
-+
-+ def __repr__(self):
-+ return '<ProxyObject wrapping %s %s %s at %#x>'%(
-+ self._bus, self._named_service, self._object_path , id(self))
-+ __str__ = __repr__
-+
-diff -Naur dbus-0.61.orig/python/service.py dbus-0.61/python/service.py
---- dbus-0.61.orig/python/service.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/service.py 2005-12-06 13:38:07.000000000 +0100
-@@ -0,0 +1,370 @@
-+import dbus_bindings
-+import _dbus
-+import operator
-+import traceback
-+
-+from exceptions import NameExistsException
-+from exceptions import UnknownMethodException
-+from decorators import method
-+from decorators import signal
-+
-+class BusName(object):
-+ """A base class for exporting your own Named Services across the Bus
-+ """
-+ def __new__(cls, name, bus=None):
-+ # get default bus
-+ if bus == None:
-+ bus = _dbus.Bus()
-+
-+ # see if this name is already defined, return it if so
-+ if name in bus._bus_names:
-+ return bus._bus_names[name]
-+
-+ # otherwise register the name
-+ retval = dbus_bindings.bus_request_name(bus.get_connection(), name)
-+
-+ # TODO: more intelligent tracking of bus name states?
-+ if retval == dbus_bindings.REQUEST_NAME_REPLY_PRIMARY_OWNER:
-+ pass
-+ elif retval == dbus_bindings.REQUEST_NAME_REPLY_IN_QUEUE:
-+ # queueing can happen by default, maybe we should
-+ # track this better or let the user know if they're
-+ # queued or not?
-+ pass
-+ elif retval == dbus_bindings.REQUEST_NAME_REPLY_EXISTS:
-+ raise NameExistsException(name)
-+ elif retval == dbus_bindings.REQUEST_NAME_REPLY_ALREADY_OWNER:
-+ # if this is a shared bus which is being used by someone
-+ # else in this process, this can happen legitimately
-+ pass
-+ else:
-+ raise RuntimeError('requesting bus name %s returned unexpected value %s' % (name, retval))
-+
-+ # and create the object
-+ bus_name = object.__new__(cls)
-+ bus_name._bus = bus
-+ bus_name._name = name
-+
-+ # cache instance
-+ bus._bus_names[name] = bus_name
-+
-+ return bus_name
-+
-+ # do nothing because this is called whether or not the bus name
-+ # object was retrieved from the cache or created new
-+ def __init__(self, *args, **keywords):
-+ pass
-+
-+ # we can delete the low-level name here because these objects
-+ # are guaranteed to exist only once for each bus name
-+ def __del__(self):
-+ dbus_bindings.bus_release_name(self._bus.get_connection(), self._name)
-+ pass
-+
-+ def get_bus(self):
-+ """Get the Bus this Service is on"""
-+ return self._bus
-+
-+ def get_name(self):
-+ """Get the name of this service"""
-+ return self._name
-+
-+ def __repr__(self):
-+ return '<dbus.service.BusName %s on %r at %#x>' % (self._name, self._bus, id(self))
-+ __str__ = __repr__
-+
-+
-+def _method_lookup(self, method_name, dbus_interface):
-+ """Walks the Python MRO of the given class to find the method to invoke.
-+
-+ Returns two methods, the one to call, and the one it inherits from which
-+ defines its D-Bus interface name, signature, and attributes.
-+ """
-+ parent_method = None
-+ candidate_class = None
-+ successful = False
-+
-+ # split up the cases when we do and don't have an interface because the
-+ # latter is much simpler
-+ if dbus_interface:
-+ # search through the class hierarchy in python MRO order
-+ for cls in self.__class__.__mro__:
-+ # if we haven't got a candidate class yet, and we find a class with a
-+ # suitably named member, save this as a candidate class
-+ if (not candidate_class and method_name in cls.__dict__):
-+ if ("_dbus_is_method" in cls.__dict__[method_name].__dict__
-+ and "_dbus_interface" in cls.__dict__[method_name].__dict__):
-+ # however if it is annotated for a different interface
-+ # than we are looking for, it cannot be a candidate
-+ if cls.__dict__[method_name]._dbus_interface == dbus_interface:
-+ candidate_class = cls
-+ parent_method = cls.__dict__[method_name]
-+ successful = True
-+ break
-+ else:
-+ pass
-+ else:
-+ candidate_class = cls
-+
-+ # if we have a candidate class, carry on checking this and all
-+ # superclasses for a method annoated as a dbus method
-+ # on the correct interface
-+ if (candidate_class and method_name in cls.__dict__
-+ and "_dbus_is_method" in cls.__dict__[method_name].__dict__
-+ and "_dbus_interface" in cls.__dict__[method_name].__dict__
-+ and cls.__dict__[method_name]._dbus_interface == dbus_interface):
-+ # the candidate class has a dbus method on the correct interface,
-+ # or overrides a method that is, success!
-+ parent_method = cls.__dict__[method_name]
-+ successful = True
-+ break
-+
-+ else:
-+ # simpler version of above
-+ for cls in self.__class__.__mro__:
-+ if (not candidate_class and method_name in cls.__dict__):
-+ candidate_class = cls
-+
-+ if (candidate_class and method_name in cls.__dict__
-+ and "_dbus_is_method" in cls.__dict__[method_name].__dict__):
-+ parent_method = cls.__dict__[method_name]
-+ successful = True
-+ break
-+
-+ if successful:
-+ return (candidate_class.__dict__[method_name], parent_method)
-+ else:
-+ if dbus_interface:
-+ raise UnknownMethodException('%s is not a valid method of interface %s' % (method_name, dbus_interface))
-+ else:
-+ raise UnknownMethodException('%s is not a valid method' % method_name)
-+
-+
-+def _method_reply_return(connection, message, method_name, signature, *retval):
-+ reply = dbus_bindings.MethodReturn(message)
-+ iter = reply.get_iter(append=True)
-+
-+ # do strict adding if an output signature was provided
-+ if signature:
-+ if len(signature) > len(retval):
-+ raise TypeError('output signature %s is longer than the number of values returned by %s' %
-+ (signature, method_name))
-+ elif len(retval) > len(signature):
-+ raise TypeError('output signature %s is shorter than the number of values returned by %s' %
-+ (signature, method_name))
-+ else:
-+ for (value, sig) in zip(retval, signature):
-+ iter.append_strict(value, sig)
-+
-+ # no signature, try and guess the return type by inspection
-+ else:
-+ for value in retval:
-+ iter.append(value)
-+
-+ connection.send(reply)
-+
-+
-+def _method_reply_error(connection, message, exception):
-+ if '_dbus_error_name' in exception.__dict__:
-+ name = exception._dbus_error_name
-+ elif exception.__module__ == '__main__':
-+ name = 'org.freedesktop.DBus.Python.%s' % exception.__class__.__name__
-+ else:
-+ name = 'org.freedesktop.DBus.Python.%s.%s' % (exception.__module__, exception.__class__.__name__)
-+
-+ contents = traceback.format_exc()
-+ reply = dbus_bindings.Error(message, name, contents)
-+
-+ connection.send(reply)
-+
-+
-+class InterfaceType(type):
-+ def __init__(cls, name, bases, dct):
-+ # these attributes are shared between all instances of the Interface
-+ # object, so this has to be a dictionary that maps class names to
-+ # the per-class introspection/interface data
-+ class_table = getattr(cls, '_dbus_class_table', {})
-+ cls._dbus_class_table = class_table
-+ interface_table = class_table[cls.__module__ + '.' + name] = {}
-+
-+ # merge all the name -> method tables for all the interfaces
-+ # implemented by our base classes into our own
-+ for b in bases:
-+ base_name = b.__module__ + '.' + b.__name__
-+ if getattr(b, '_dbus_class_table', False):
-+ for (interface, method_table) in class_table[base_name].iteritems():
-+ our_method_table = interface_table.setdefault(interface, {})
-+ our_method_table.update(method_table)
-+
-+ # add in all the name -> method entries for our own methods/signals
-+ for func in dct.values():
-+ if getattr(func, '_dbus_interface', False):
-+ method_table = interface_table.setdefault(func._dbus_interface, {})
-+ method_table[func.__name__] = func
-+
-+ super(InterfaceType, cls).__init__(name, bases, dct)
-+
-+ # methods are different to signals, so we have two functions... :)
-+ def _reflect_on_method(cls, func):
-+ args = func._dbus_args
-+
-+ if func._dbus_in_signature:
-+ # convert signature into a tuple so length refers to number of
-+ # types, not number of characters. the length is checked by
-+ # the decorator to make sure it matches the length of args.
-+ in_sig = tuple(dbus_bindings.Signature(func._dbus_in_signature))
-+ else:
-+ # magic iterator which returns as many v's as we need
-+ in_sig = dbus_bindings.VariantSignature()
-+
-+ if func._dbus_out_signature:
-+ out_sig = dbus_bindings.Signature(func._dbus_out_signature)
-+ else:
-+ # its tempting to default to dbus_bindings.Signature('v'), but
-+ # for methods that return nothing, providing incorrect
-+ # introspection data is worse than providing none at all
-+ out_sig = []
-+
-+ reflection_data = ' <method name="%s">\n' % (func.__name__)
-+ for pair in zip(in_sig, args):
-+ reflection_data += ' <arg direction="in" type="%s" name="%s" />\n' % pair
-+ for type in out_sig:
-+ reflection_data += ' <arg direction="out" type="%s" />\n' % type
-+ reflection_data += ' </method>\n'
-+
-+ return reflection_data
-+
-+ def _reflect_on_signal(cls, func):
-+ args = func._dbus_args
-+
-+ if func._dbus_signature:
-+ # convert signature into a tuple so length refers to number of
-+ # types, not number of characters
-+ sig = tuple(dbus_bindings.Signature(func._dbus_signature))
-+ else:
-+ # magic iterator which returns as many v's as we need
-+ sig = dbus_bindings.VariantSignature()
-+
-+ reflection_data = ' <signal name="%s">\n' % (func.__name__)
-+ for pair in zip(sig, args):
-+ reflection_data = reflection_data + ' <arg type="%s" name="%s" />\n' % pair
-+ reflection_data = reflection_data + ' </signal>\n'
-+
-+ return reflection_data
-+
-+class Interface(object):
-+ __metaclass__ = InterfaceType
-+
-+class Object(Interface):
-+ """A base class for exporting your own Objects across the Bus.
-+
-+ Just inherit from Object and provide a list of methods to share
-+ across the Bus
-+ """
-+ def __init__(self, bus_name, object_path):
-+ self._object_path = object_path
-+ self._name = bus_name
-+ self._bus = bus_name.get_bus()
-+
-+ self._connection = self._bus.get_connection()
-+
-+ self._connection.register_object_path(object_path, self._unregister_cb, self._message_cb)
-+
-+ def _unregister_cb(self, connection):
-+ print ("Unregister")
-+
-+ def _message_cb(self, connection, message):
-+ try:
-+ # lookup candidate method and parent method
-+ method_name = message.get_member()
-+ interface_name = message.get_interface()
-+ (candidate_method, parent_method) = _method_lookup(self, method_name, interface_name)
-+
-+ # set up method call parameters
-+ args = message.get_args_list()
-+ keywords = {}
-+
-+ # iterate signature into list of complete types
-+ if parent_method._dbus_out_signature:
-+ signature = tuple(dbus_bindings.Signature(parent_method._dbus_out_signature))
-+ else:
-+ signature = None
-+
-+ # set up async callback functions
-+ if parent_method._dbus_async_callbacks:
-+ (return_callback, error_callback) = parent_method._dbus_async_callbacks
-+ keywords[return_callback] = lambda *retval: _method_reply_return(connection, message, method_name, signature, *retval)
-+ keywords[error_callback] = lambda exception: _method_reply_error(connection, message, exception)
-+
-+ # include the sender if desired
-+ if parent_method._dbus_sender_keyword:
-+ keywords[parent_method._dbus_sender_keyword] = message.get_sender()
-+
-+ # call method
-+ retval = candidate_method(self, *args, **keywords)
-+
-+ # we're done - the method has got callback functions to reply with
-+ if parent_method._dbus_async_callbacks:
-+ return
-+
-+ # otherwise we send the return values in a reply. if we have a
-+ # signature, use it to turn the return value into a tuple as
-+ # appropriate
-+ if parent_method._dbus_out_signature:
-+ # if we have zero or one return values we want make a tuple
-+ # for the _method_reply_return function, otherwise we need
-+ # to check we're passing it a sequence
-+ if len(signature) == 0:
-+ if retval == None:
-+ retval = ()
-+ else:
-+ raise TypeError('%s has an empty output signature but did not return None' %
-+ method_name)
-+ elif len(signature) == 1:
-+ retval = (retval,)
-+ else:
-+ if operator.isSequenceType(retval):
-+ # multi-value signature, multi-value return... proceed unchanged
-+ pass
-+ else:
-+ raise TypeError('%s has multiple output values in signature %s but did not return a sequence' %
-+ (method_name, signature))
-+
-+ # no signature, so just turn the return into a tuple and send it as normal
-+ else:
-+ signature = None
-+ if retval == None:
-+ retval = ()
-+ else:
-+ retval = (retval,)
-+
-+ _method_reply_return(connection, message, method_name, signature, *retval)
-+ except Exception, exception:
-+ # send error reply
-+ _method_reply_error(connection, message, exception)
-+
-+ @method('org.freedesktop.DBus.Introspectable', in_signature='', out_signature='s')
-+ def Introspect(self):
-+ reflection_data = '<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">\n'
-+ reflection_data += '<node name="%s">\n' % (self._object_path)
-+
-+ interfaces = self._dbus_class_table[self.__class__.__module__ + '.' + self.__class__.__name__]
-+ for (name, funcs) in interfaces.iteritems():
-+ reflection_data += ' <interface name="%s">\n' % (name)
-+
-+ for func in funcs.values():
-+ if getattr(func, '_dbus_is_method', False):
-+ reflection_data += self.__class__._reflect_on_method(func)
-+ elif getattr(func, '_dbus_is_signal', False):
-+ reflection_data += self.__class__._reflect_on_signal(func)
-+
-+ reflection_data += ' </interface>\n'
-+
-+ reflection_data += '</node>\n'
-+
-+ return reflection_data
-+
-+ def __repr__(self):
-+ return '<dbus.service.Object %s on %r at %#x>' % (self._object_path, self._name, id(self))
-+ __str__ = __repr__
-+
-diff -Naur dbus-0.61.orig/python/types.py dbus-0.61/python/types.py
---- dbus-0.61.orig/python/types.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/python/types.py 2005-08-17 00:54:04.000000000 +0200
-@@ -0,0 +1,19 @@
-+import dbus_bindings
-+
-+ObjectPath = dbus_bindings.ObjectPath
-+ByteArray = dbus_bindings.ByteArray
-+Signature = dbus_bindings.Signature
-+Byte = dbus_bindings.Byte
-+Boolean = dbus_bindings.Boolean
-+Int16 = dbus_bindings.Int16
-+UInt16 = dbus_bindings.UInt16
-+Int32 = dbus_bindings.Int32
-+UInt32 = dbus_bindings.UInt32
-+Int64 = dbus_bindings.Int64
-+UInt64 = dbus_bindings.UInt64
-+Double = dbus_bindings.Double
-+String = dbus_bindings.String
-+Array = dbus_bindings.Array
-+Struct = dbus_bindings.Struct
-+Dictionary = dbus_bindings.Dictionary
-+Variant = dbus_bindings.Variant
-diff -Naur dbus-0.61.orig/qt/Makefile.am dbus-0.61/qt/Makefile.am
---- dbus-0.61.orig/qt/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/Makefile.am 2006-02-27 22:33:30.000000000 +0100
-@@ -0,0 +1,72 @@
-+if HAVE_QT
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_QT_CFLAGS) -DDBUS_COMPILATION
-+
-+dbusincludedir=$(includedir)/dbus-1.0/dbus
-+
-+lib_LTLIBRARIES=libdbus-qt4-1.la
-+
-+dbusinclude_HEADERS= \
-+ qdbusmacros.h \
-+ qdbuserror.h \
-+ qdbusmessage.h \
-+ qdbusserver.h \
-+ qdbusconnection.h \
-+ qdbusvariant.h \
-+ qdbusobject.h \
-+ qdbusinterface.h \
-+ qdbustype.h \
-+ qdbusstandardinterfaces.h \
-+ qdbusutil.h \
-+ qdbusintrospection.h \
-+ qdbusabstractadaptor.h
-+
-+libdbus_qt4_1_la_SOURCES = \
-+ $(top_srcdir)/qt/qdbusconnection.cpp \
-+ $(top_srcdir)/qt/qdbuserror.cpp \
-+ $(top_srcdir)/qt/qdbusintegrator.cpp \
-+ $(top_srcdir)/qt/qdbusmarshall.cpp \
-+ $(top_srcdir)/qt/qdbusmessage.cpp \
-+ $(top_srcdir)/qt/qdbusserver.cpp \
-+ $(top_srcdir)/qt/qdbustype.cpp \
-+ $(top_srcdir)/qt/qdbusobject.cpp \
-+ $(top_srcdir)/qt/qdbusinterface.cpp \
-+ $(top_srcdir)/qt/qdbusstandardinterfaces.cpp \
-+ $(top_srcdir)/qt/qdbusxmlparser.cpp \
-+ $(top_srcdir)/qt/qdbusutil.cpp \
-+ $(top_srcdir)/qt/qdbusintrospection.cpp \
-+ $(top_srcdir)/qt/qdbusabstractadaptor.cpp \
-+ $(top_srcdir)/qt/qdbusthread.cpp \
-+ \
-+ $(top_srcdir)/dbus/qdbus.h \
-+ $(top_srcdir)/qt/qdbusabstractadaptor.h \
-+ $(top_srcdir)/qt/qdbusconnection.h \
-+ $(top_srcdir)/qt/qdbusconnection_p.h \
-+ $(top_srcdir)/qt/qdbuserror.h \
-+ $(top_srcdir)/qt/qdbusinterface.h \
-+ $(top_srcdir)/qt/qdbusinterface_p.h \
-+ $(top_srcdir)/qt/qdbusintrospection.h \
-+ $(top_srcdir)/qt/qdbusmacros.h \
-+ $(top_srcdir)/qt/qdbusmarshall.h \
-+ $(top_srcdir)/qt/qdbusmessage.h \
-+ $(top_srcdir)/qt/qdbusmessage_p.h \
-+ $(top_srcdir)/qt/qdbusobject.h \
-+ $(top_srcdir)/qt/qdbusobject_p.h \
-+ $(top_srcdir)/qt/qdbusserver.h \
-+ $(top_srcdir)/qt/qdbusstandardinterfaces.h \
-+ $(top_srcdir)/qt/qdbustype.h \
-+ $(top_srcdir)/qt/qdbusvariant.h \
-+ $(top_srcdir)/qt/qdbusxmlparser_p.h
-+
-+
-+qdbusabstractadaptor.lo: qdbusabstractadaptor.moc
-+qdbusserver.lo: qdbusserver.moc
-+qdbusconnection.lo: qdbusconnection_p.moc
-+
-+CLEANFILES=qdbusabstractadaptor.moc qdbusserver.moc qdbusconnection.moc
-+
-+libdbus_qt4_1_la_LIBADD= $(DBUS_QT_LIBS) $(top_builddir)/dbus/libdbus-1.la
-+libdbus_qt4_1_la_LDFLAGS= -version-info 1:0 -no-undefined
-+
-+%.moc: %.h
-+ $(QT_MOC) $< > $@
-+endif
+ esac
+ ;;
+ no)
diff -Naur dbus-0.61.orig/qt/Makefile.in dbus-0.61/qt/Makefile.in
---- dbus-0.61.orig/qt/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/Makefile.in 2006-02-27 22:34:37.000000000 +0100
-@@ -0,0 +1,868 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = qt
-+DIST_COMMON = README $(am__dbusinclude_HEADERS_DIST) \
-+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(dbusincludedir)"
-+libLTLIBRARIES_INSTALL = $(INSTALL)
-+LTLIBRARIES = $(lib_LTLIBRARIES)
-+am__DEPENDENCIES_1 =
-+ at HAVE_QT_TRUE@libdbus_qt4_1_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-+ at HAVE_QT_TRUE@ $(top_builddir)/dbus/libdbus-1.la
-+am__libdbus_qt4_1_la_SOURCES_DIST = \
-+ $(top_srcdir)/qt/qdbusconnection.cpp \
-+ $(top_srcdir)/qt/qdbuserror.cpp \
-+ $(top_srcdir)/qt/qdbusintegrator.cpp \
-+ $(top_srcdir)/qt/qdbusmarshall.cpp \
-+ $(top_srcdir)/qt/qdbusmessage.cpp \
-+ $(top_srcdir)/qt/qdbusserver.cpp \
-+ $(top_srcdir)/qt/qdbustype.cpp \
-+ $(top_srcdir)/qt/qdbusobject.cpp \
-+ $(top_srcdir)/qt/qdbusinterface.cpp \
-+ $(top_srcdir)/qt/qdbusstandardinterfaces.cpp \
-+ $(top_srcdir)/qt/qdbusxmlparser.cpp \
-+ $(top_srcdir)/qt/qdbusutil.cpp \
-+ $(top_srcdir)/qt/qdbusintrospection.cpp \
-+ $(top_srcdir)/qt/qdbusabstractadaptor.cpp \
-+ $(top_srcdir)/qt/qdbusthread.cpp $(top_srcdir)/dbus/qdbus.h \
-+ $(top_srcdir)/qt/qdbusabstractadaptor.h \
-+ $(top_srcdir)/qt/qdbusconnection.h \
-+ $(top_srcdir)/qt/qdbusconnection_p.h \
-+ $(top_srcdir)/qt/qdbuserror.h \
-+ $(top_srcdir)/qt/qdbusinterface.h \
-+ $(top_srcdir)/qt/qdbusinterface_p.h \
-+ $(top_srcdir)/qt/qdbusintrospection.h \
-+ $(top_srcdir)/qt/qdbusmacros.h \
-+ $(top_srcdir)/qt/qdbusmarshall.h \
-+ $(top_srcdir)/qt/qdbusmessage.h \
-+ $(top_srcdir)/qt/qdbusmessage_p.h \
-+ $(top_srcdir)/qt/qdbusobject.h \
-+ $(top_srcdir)/qt/qdbusobject_p.h \
-+ $(top_srcdir)/qt/qdbusserver.h \
-+ $(top_srcdir)/qt/qdbusstandardinterfaces.h \
-+ $(top_srcdir)/qt/qdbustype.h $(top_srcdir)/qt/qdbusvariant.h \
-+ $(top_srcdir)/qt/qdbusxmlparser_p.h
-+ at HAVE_QT_TRUE@am_libdbus_qt4_1_la_OBJECTS = qdbusconnection.lo \
-+ at HAVE_QT_TRUE@ qdbuserror.lo qdbusintegrator.lo \
-+ at HAVE_QT_TRUE@ qdbusmarshall.lo qdbusmessage.lo qdbusserver.lo \
-+ at HAVE_QT_TRUE@ qdbustype.lo qdbusobject.lo qdbusinterface.lo \
-+ at HAVE_QT_TRUE@ qdbusstandardinterfaces.lo qdbusxmlparser.lo \
-+ at HAVE_QT_TRUE@ qdbusutil.lo qdbusintrospection.lo \
-+ at HAVE_QT_TRUE@ qdbusabstractadaptor.lo qdbusthread.lo
-+libdbus_qt4_1_la_OBJECTS = $(am_libdbus_qt4_1_la_OBJECTS)
-+ at HAVE_QT_TRUE@am_libdbus_qt4_1_la_rpath = -rpath $(libdir)
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CXXFLAGS) $(CXXFLAGS)
-+CXXLD = $(CXX)
-+CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(libdbus_qt4_1_la_SOURCES)
-+DIST_SOURCES = $(am__libdbus_qt4_1_la_SOURCES_DIST)
-+am__dbusinclude_HEADERS_DIST = qdbusmacros.h qdbuserror.h \
-+ qdbusmessage.h qdbusserver.h qdbusconnection.h qdbusvariant.h \
-+ qdbusobject.h qdbusinterface.h qdbustype.h \
-+ qdbusstandardinterfaces.h qdbusutil.h qdbusintrospection.h \
-+ qdbusabstractadaptor.h
-+dbusincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-+HEADERS = $(dbusinclude_HEADERS)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+ at HAVE_QT_TRUE@INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_QT_CFLAGS) -DDBUS_COMPILATION
-+ at HAVE_QT_TRUE@dbusincludedir = $(includedir)/dbus-1.0/dbus
-+ at HAVE_QT_TRUE@lib_LTLIBRARIES = libdbus-qt4-1.la
-+ at HAVE_QT_TRUE@dbusinclude_HEADERS = \
-+ at HAVE_QT_TRUE@ qdbusmacros.h \
-+ at HAVE_QT_TRUE@ qdbuserror.h \
-+ at HAVE_QT_TRUE@ qdbusmessage.h \
-+ at HAVE_QT_TRUE@ qdbusserver.h \
-+ at HAVE_QT_TRUE@ qdbusconnection.h \
-+ at HAVE_QT_TRUE@ qdbusvariant.h \
-+ at HAVE_QT_TRUE@ qdbusobject.h \
-+ at HAVE_QT_TRUE@ qdbusinterface.h \
-+ at HAVE_QT_TRUE@ qdbustype.h \
+--- dbus-0.61.orig/qt/Makefile.in 2006-02-27 22:56:46.000000000 +0100
++++ dbus-0.61/qt/Makefile.in 2006-02-27 22:57:32.000000000 +0100
+@@ -61,39 +61,18 @@
+ am__DEPENDENCIES_1 =
+ @HAVE_QT_TRUE at libdbus_qt4_1_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ @HAVE_QT_TRUE@ $(top_builddir)/dbus/libdbus-1.la
+-am__libdbus_qt4_1_la_SOURCES_DIST = \
+- $(top_srcdir)/qt/qdbusconnection.cpp \
+- $(top_srcdir)/qt/qdbuserror.cpp \
+- $(top_srcdir)/qt/qdbusintegrator.cpp \
+- $(top_srcdir)/qt/qdbusmarshall.cpp \
+- $(top_srcdir)/qt/qdbusmessage.cpp \
+- $(top_srcdir)/qt/qdbusserver.cpp \
+- $(top_srcdir)/qt/qdbustype.cpp \
+- $(top_srcdir)/qt/qdbusobject.cpp \
+- $(top_srcdir)/qt/qdbusinterface.cpp \
+- $(top_srcdir)/qt/qdbusstandardinterfaces.cpp \
+- $(top_srcdir)/qt/qdbusxmlparser.cpp \
+- $(top_srcdir)/qt/qdbusutil.cpp \
+- $(top_srcdir)/qt/qdbusintrospection.cpp \
+- $(top_srcdir)/qt/qdbusabstractadaptor.cpp \
+- $(top_srcdir)/qt/qdbusthread.cpp $(top_srcdir)/dbus/qdbus.h \
+- $(top_srcdir)/qt/qdbusabstractadaptor.h \
+- $(top_srcdir)/qt/qdbusconnection.h \
+- $(top_srcdir)/qt/qdbusconnection_p.h \
+- $(top_srcdir)/qt/qdbuserror.h \
+- $(top_srcdir)/qt/qdbusinterface.h \
+- $(top_srcdir)/qt/qdbusinterface_p.h \
+- $(top_srcdir)/qt/qdbusintrospection.h \
+- $(top_srcdir)/qt/qdbusmacros.h \
+- $(top_srcdir)/qt/qdbusmarshall.h \
+- $(top_srcdir)/qt/qdbusmessage.h \
+- $(top_srcdir)/qt/qdbusmessage_p.h \
+- $(top_srcdir)/qt/qdbusobject.h \
+- $(top_srcdir)/qt/qdbusobject_p.h \
+- $(top_srcdir)/qt/qdbusserver.h \
+- $(top_srcdir)/qt/qdbusstandardinterfaces.h \
+- $(top_srcdir)/qt/qdbustype.h $(top_srcdir)/qt/qdbusvariant.h \
+- $(top_srcdir)/qt/qdbusxmlparser_p.h
++am__libdbus_qt4_1_la_SOURCES_DIST = qdbusconnection.cpp qdbuserror.cpp \
++ qdbusintegrator.cpp qdbusmarshall.cpp qdbusmessage.cpp \
++ qdbusserver.cpp qdbustype.cpp qdbusobject.cpp \
++ qdbusinterface.cpp qdbusstandardinterfaces.cpp \
++ qdbusxmlparser.cpp qdbusutil.cpp qdbusintrospection.cpp \
++ qdbusabstractadaptor.cpp qdbusthread.cpp qdbus.h \
++ qdbusabstractadaptor.h qdbusconnection.h qdbusconnection_p.h \
++ qdbuserror.h qdbusinterface.h qdbusinterface_p.h \
++ qdbusintrospection.h qdbusmacros.h qdbusmarshall.h \
++ qdbusmessage.h qdbusmessage_p.h qdbusobject.h qdbusobject_p.h \
++ qdbusserver.h qdbusstandardinterfaces.h qdbustype.h \
++ qdbusvariant.h qdbusxmlparser_p.h
+ @HAVE_QT_TRUE at am_libdbus_qt4_1_la_OBJECTS = qdbusconnection.lo \
+ @HAVE_QT_TRUE@ qdbuserror.lo qdbusintegrator.lo \
+ @HAVE_QT_TRUE@ qdbusmarshall.lo qdbusmessage.lo qdbusserver.lo \
+@@ -406,41 +385,41 @@
+ @HAVE_QT_TRUE@ qdbusabstractadaptor.h
+
+ @HAVE_QT_TRUE at libdbus_qt4_1_la_SOURCES = \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusconnection.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbuserror.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusintegrator.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmarshall.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmessage.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusserver.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbustype.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusobject.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusinterface.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusstandardinterfaces.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusxmlparser.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusutil.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusintrospection.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusabstractadaptor.cpp \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusthread.cpp \
++ at HAVE_QT_TRUE@ qdbusconnection.cpp \
++ at HAVE_QT_TRUE@ qdbuserror.cpp \
++ at HAVE_QT_TRUE@ qdbusintegrator.cpp \
++ at HAVE_QT_TRUE@ qdbusmarshall.cpp \
++ at HAVE_QT_TRUE@ qdbusmessage.cpp \
++ at HAVE_QT_TRUE@ qdbusserver.cpp \
++ at HAVE_QT_TRUE@ qdbustype.cpp \
++ at HAVE_QT_TRUE@ qdbusobject.cpp \
++ at HAVE_QT_TRUE@ qdbusinterface.cpp \
++ at HAVE_QT_TRUE@ qdbusstandardinterfaces.cpp \
++ at HAVE_QT_TRUE@ qdbusxmlparser.cpp \
++ at HAVE_QT_TRUE@ qdbusutil.cpp \
++ at HAVE_QT_TRUE@ qdbusintrospection.cpp \
++ at HAVE_QT_TRUE@ qdbusabstractadaptor.cpp \
++ at HAVE_QT_TRUE@ qdbusthread.cpp \
+ @HAVE_QT_TRUE@ \
+- at HAVE_QT_TRUE@ $(top_srcdir)/dbus/qdbus.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusabstractadaptor.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusconnection.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusconnection_p.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbuserror.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusinterface.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusinterface_p.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusintrospection.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmacros.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmarshall.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmessage.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmessage_p.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusobject.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusobject_p.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusserver.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusstandardinterfaces.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbustype.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusvariant.h \
+- at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusxmlparser_p.h
++ at HAVE_QT_TRUE@ qdbus.h \
++ at HAVE_QT_TRUE@ qdbusabstractadaptor.h \
++ at HAVE_QT_TRUE@ qdbusconnection.h \
++ at HAVE_QT_TRUE@ qdbusconnection_p.h \
++ at HAVE_QT_TRUE@ qdbuserror.h \
++ at HAVE_QT_TRUE@ qdbusinterface.h \
++ at HAVE_QT_TRUE@ qdbusinterface_p.h \
++ at HAVE_QT_TRUE@ qdbusintrospection.h \
++ at HAVE_QT_TRUE@ qdbusmacros.h \
++ at HAVE_QT_TRUE@ qdbusmarshall.h \
++ at HAVE_QT_TRUE@ qdbusmessage.h \
++ at HAVE_QT_TRUE@ qdbusmessage_p.h \
++ at HAVE_QT_TRUE@ qdbusobject.h \
++ at HAVE_QT_TRUE@ qdbusobject_p.h \
++ at HAVE_QT_TRUE@ qdbusserver.h \
+ at HAVE_QT_TRUE@ qdbusstandardinterfaces.h \
-+ at HAVE_QT_TRUE@ qdbusutil.h \
-+ at HAVE_QT_TRUE@ qdbusintrospection.h \
-+ at HAVE_QT_TRUE@ qdbusabstractadaptor.h
-+
-+ at HAVE_QT_TRUE@libdbus_qt4_1_la_SOURCES = \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusconnection.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbuserror.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusintegrator.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmarshall.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmessage.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusserver.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbustype.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusobject.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusinterface.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusstandardinterfaces.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusxmlparser.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusutil.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusintrospection.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusabstractadaptor.cpp \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusthread.cpp \
-+ at HAVE_QT_TRUE@ \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/dbus/qdbus.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusabstractadaptor.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusconnection.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusconnection_p.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbuserror.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusinterface.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusinterface_p.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusintrospection.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmacros.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmarshall.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmessage.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusmessage_p.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusobject.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusobject_p.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusserver.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusstandardinterfaces.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbustype.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusvariant.h \
-+ at HAVE_QT_TRUE@ $(top_srcdir)/qt/qdbusxmlparser_p.h
-+
-+ at HAVE_QT_TRUE@CLEANFILES = qdbusabstractadaptor.moc qdbusserver.moc qdbusconnection.moc
-+ at HAVE_QT_TRUE@libdbus_qt4_1_la_LIBADD = $(DBUS_QT_LIBS) $(top_builddir)/dbus/libdbus-1.la
-+ at HAVE_QT_TRUE@libdbus_qt4_1_la_LDFLAGS = -version-info 1:0 -no-undefined
-+all: all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .cpp .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu qt/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu qt/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ if test -f $$p; then \
-+ f=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-+ else :; fi; \
-+ done
-+
-+uninstall-libLTLIBRARIES:
-+ @$(NORMAL_UNINSTALL)
-+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ p=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
-+ done
-+
-+clean-libLTLIBRARIES:
-+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-+ test "$$dir" != "$$p" || dir=.; \
-+ echo "rm -f \"$${dir}/so_locations\""; \
-+ rm -f "$${dir}/so_locations"; \
-+ done
-+libdbus-qt4-1.la: $(libdbus_qt4_1_la_OBJECTS) $(libdbus_qt4_1_la_DEPENDENCIES)
-+ $(CXXLINK) $(am_libdbus_qt4_1_la_rpath) $(libdbus_qt4_1_la_LDFLAGS) $(libdbus_qt4_1_la_OBJECTS) $(libdbus_qt4_1_la_LIBADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusabstractadaptor.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusconnection.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbuserror.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusintegrator.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusinterface.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusintrospection.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusmarshall.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusmessage.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusobject.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusserver.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusstandardinterfaces.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusthread.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbustype.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusutil.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/qdbusxmlparser.Plo at am__quote@
-+
-+.cpp.o:
-+ at am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
-+
-+.cpp.obj:
-+ at am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-+
-+.cpp.lo:
-+ at am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-+
-+ at HAVE_QT_FALSE@qdbusconnection.lo: $(top_srcdir)/qt/qdbusconnection.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusconnection.lo -MD -MP -MF "$(DEPDIR)/qdbusconnection.Tpo" -c -o qdbusconnection.lo `test -f '$(top_srcdir)/qt/qdbusconnection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusconnection.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusconnection.Tpo" "$(DEPDIR)/qdbusconnection.Plo"; else rm -f "$(DEPDIR)/qdbusconnection.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusconnection.cpp' object='qdbusconnection.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusconnection.lo `test -f '$(top_srcdir)/qt/qdbusconnection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusconnection.cpp
-+
-+qdbuserror.lo: $(top_srcdir)/qt/qdbuserror.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbuserror.lo -MD -MP -MF "$(DEPDIR)/qdbuserror.Tpo" -c -o qdbuserror.lo `test -f '$(top_srcdir)/qt/qdbuserror.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbuserror.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbuserror.Tpo" "$(DEPDIR)/qdbuserror.Plo"; else rm -f "$(DEPDIR)/qdbuserror.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbuserror.cpp' object='qdbuserror.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbuserror.lo `test -f '$(top_srcdir)/qt/qdbuserror.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbuserror.cpp
-+
-+qdbusintegrator.lo: $(top_srcdir)/qt/qdbusintegrator.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusintegrator.lo -MD -MP -MF "$(DEPDIR)/qdbusintegrator.Tpo" -c -o qdbusintegrator.lo `test -f '$(top_srcdir)/qt/qdbusintegrator.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintegrator.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusintegrator.Tpo" "$(DEPDIR)/qdbusintegrator.Plo"; else rm -f "$(DEPDIR)/qdbusintegrator.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusintegrator.cpp' object='qdbusintegrator.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusintegrator.lo `test -f '$(top_srcdir)/qt/qdbusintegrator.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintegrator.cpp
-+
-+qdbusmarshall.lo: $(top_srcdir)/qt/qdbusmarshall.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusmarshall.lo -MD -MP -MF "$(DEPDIR)/qdbusmarshall.Tpo" -c -o qdbusmarshall.lo `test -f '$(top_srcdir)/qt/qdbusmarshall.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmarshall.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusmarshall.Tpo" "$(DEPDIR)/qdbusmarshall.Plo"; else rm -f "$(DEPDIR)/qdbusmarshall.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusmarshall.cpp' object='qdbusmarshall.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusmarshall.lo `test -f '$(top_srcdir)/qt/qdbusmarshall.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmarshall.cpp
-+
-+qdbusmessage.lo: $(top_srcdir)/qt/qdbusmessage.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusmessage.lo -MD -MP -MF "$(DEPDIR)/qdbusmessage.Tpo" -c -o qdbusmessage.lo `test -f '$(top_srcdir)/qt/qdbusmessage.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmessage.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusmessage.Tpo" "$(DEPDIR)/qdbusmessage.Plo"; else rm -f "$(DEPDIR)/qdbusmessage.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusmessage.cpp' object='qdbusmessage.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusmessage.lo `test -f '$(top_srcdir)/qt/qdbusmessage.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmessage.cpp
-+
-+ at HAVE_QT_FALSE@qdbusserver.lo: $(top_srcdir)/qt/qdbusserver.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusserver.lo -MD -MP -MF "$(DEPDIR)/qdbusserver.Tpo" -c -o qdbusserver.lo `test -f '$(top_srcdir)/qt/qdbusserver.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusserver.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusserver.Tpo" "$(DEPDIR)/qdbusserver.Plo"; else rm -f "$(DEPDIR)/qdbusserver.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusserver.cpp' object='qdbusserver.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusserver.lo `test -f '$(top_srcdir)/qt/qdbusserver.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusserver.cpp
-+
-+qdbustype.lo: $(top_srcdir)/qt/qdbustype.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbustype.lo -MD -MP -MF "$(DEPDIR)/qdbustype.Tpo" -c -o qdbustype.lo `test -f '$(top_srcdir)/qt/qdbustype.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbustype.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbustype.Tpo" "$(DEPDIR)/qdbustype.Plo"; else rm -f "$(DEPDIR)/qdbustype.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbustype.cpp' object='qdbustype.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbustype.lo `test -f '$(top_srcdir)/qt/qdbustype.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbustype.cpp
-+
-+qdbusobject.lo: $(top_srcdir)/qt/qdbusobject.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusobject.lo -MD -MP -MF "$(DEPDIR)/qdbusobject.Tpo" -c -o qdbusobject.lo `test -f '$(top_srcdir)/qt/qdbusobject.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusobject.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusobject.Tpo" "$(DEPDIR)/qdbusobject.Plo"; else rm -f "$(DEPDIR)/qdbusobject.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusobject.cpp' object='qdbusobject.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusobject.lo `test -f '$(top_srcdir)/qt/qdbusobject.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusobject.cpp
-+
-+qdbusinterface.lo: $(top_srcdir)/qt/qdbusinterface.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusinterface.lo -MD -MP -MF "$(DEPDIR)/qdbusinterface.Tpo" -c -o qdbusinterface.lo `test -f '$(top_srcdir)/qt/qdbusinterface.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusinterface.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusinterface.Tpo" "$(DEPDIR)/qdbusinterface.Plo"; else rm -f "$(DEPDIR)/qdbusinterface.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusinterface.cpp' object='qdbusinterface.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusinterface.lo `test -f '$(top_srcdir)/qt/qdbusinterface.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusinterface.cpp
-+
-+qdbusstandardinterfaces.lo: $(top_srcdir)/qt/qdbusstandardinterfaces.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusstandardinterfaces.lo -MD -MP -MF "$(DEPDIR)/qdbusstandardinterfaces.Tpo" -c -o qdbusstandardinterfaces.lo `test -f '$(top_srcdir)/qt/qdbusstandardinterfaces.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusstandardinterfaces.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusstandardinterfaces.Tpo" "$(DEPDIR)/qdbusstandardinterfaces.Plo"; else rm -f "$(DEPDIR)/qdbusstandardinterfaces.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusstandardinterfaces.cpp' object='qdbusstandardinterfaces.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusstandardinterfaces.lo `test -f '$(top_srcdir)/qt/qdbusstandardinterfaces.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusstandardinterfaces.cpp
-+
-+qdbusxmlparser.lo: $(top_srcdir)/qt/qdbusxmlparser.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusxmlparser.lo -MD -MP -MF "$(DEPDIR)/qdbusxmlparser.Tpo" -c -o qdbusxmlparser.lo `test -f '$(top_srcdir)/qt/qdbusxmlparser.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusxmlparser.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusxmlparser.Tpo" "$(DEPDIR)/qdbusxmlparser.Plo"; else rm -f "$(DEPDIR)/qdbusxmlparser.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusxmlparser.cpp' object='qdbusxmlparser.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusxmlparser.lo `test -f '$(top_srcdir)/qt/qdbusxmlparser.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusxmlparser.cpp
-+
-+qdbusutil.lo: $(top_srcdir)/qt/qdbusutil.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusutil.lo -MD -MP -MF "$(DEPDIR)/qdbusutil.Tpo" -c -o qdbusutil.lo `test -f '$(top_srcdir)/qt/qdbusutil.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusutil.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusutil.Tpo" "$(DEPDIR)/qdbusutil.Plo"; else rm -f "$(DEPDIR)/qdbusutil.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusutil.cpp' object='qdbusutil.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusutil.lo `test -f '$(top_srcdir)/qt/qdbusutil.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusutil.cpp
-+
-+qdbusintrospection.lo: $(top_srcdir)/qt/qdbusintrospection.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusintrospection.lo -MD -MP -MF "$(DEPDIR)/qdbusintrospection.Tpo" -c -o qdbusintrospection.lo `test -f '$(top_srcdir)/qt/qdbusintrospection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintrospection.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusintrospection.Tpo" "$(DEPDIR)/qdbusintrospection.Plo"; else rm -f "$(DEPDIR)/qdbusintrospection.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusintrospection.cpp' object='qdbusintrospection.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusintrospection.lo `test -f '$(top_srcdir)/qt/qdbusintrospection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintrospection.cpp
-+
-+ at HAVE_QT_FALSE@qdbusabstractadaptor.lo: $(top_srcdir)/qt/qdbusabstractadaptor.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusabstractadaptor.lo -MD -MP -MF "$(DEPDIR)/qdbusabstractadaptor.Tpo" -c -o qdbusabstractadaptor.lo `test -f '$(top_srcdir)/qt/qdbusabstractadaptor.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusabstractadaptor.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusabstractadaptor.Tpo" "$(DEPDIR)/qdbusabstractadaptor.Plo"; else rm -f "$(DEPDIR)/qdbusabstractadaptor.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusabstractadaptor.cpp' object='qdbusabstractadaptor.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusabstractadaptor.lo `test -f '$(top_srcdir)/qt/qdbusabstractadaptor.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusabstractadaptor.cpp
-+
-+qdbusthread.lo: $(top_srcdir)/qt/qdbusthread.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusthread.lo -MD -MP -MF "$(DEPDIR)/qdbusthread.Tpo" -c -o qdbusthread.lo `test -f '$(top_srcdir)/qt/qdbusthread.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusthread.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusthread.Tpo" "$(DEPDIR)/qdbusthread.Plo"; else rm -f "$(DEPDIR)/qdbusthread.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusthread.cpp' object='qdbusthread.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusthread.lo `test -f '$(top_srcdir)/qt/qdbusthread.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusthread.cpp
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-dbusincludeHEADERS: $(dbusinclude_HEADERS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(dbusincludedir)" || $(mkdir_p) "$(DESTDIR)$(dbusincludedir)"
-+ @list='$(dbusinclude_HEADERS)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(dbusincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(dbusincludedir)/$$f'"; \
-+ $(dbusincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(dbusincludedir)/$$f"; \
-+ done
-+
-+uninstall-dbusincludeHEADERS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(dbusinclude_HEADERS)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(dbusincludedir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(dbusincludedir)/$$f"; \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-am
-+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
-+installdirs:
-+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(dbusincludedir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-+ mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am: install-dbusincludeHEADERS
-+
-+install-exec-am: install-libLTLIBRARIES
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-dbusincludeHEADERS uninstall-info-am \
-+ uninstall-libLTLIBRARIES
-+
-+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-+ clean-libLTLIBRARIES clean-libtool ctags distclean \
-+ distclean-compile distclean-generic distclean-libtool \
-+ distclean-tags distdir dvi dvi-am html html-am info info-am \
-+ install install-am install-data install-data-am \
-+ install-dbusincludeHEADERS install-exec install-exec-am \
-+ install-info install-info-am install-libLTLIBRARIES \
-+ install-man install-strip installcheck installcheck-am \
-+ installdirs maintainer-clean maintainer-clean-generic \
-+ mostlyclean mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-+ uninstall-am uninstall-dbusincludeHEADERS uninstall-info-am \
-+ uninstall-libLTLIBRARIES
-+
-+
++ at HAVE_QT_TRUE@ qdbustype.h \
++ at HAVE_QT_TRUE@ qdbusvariant.h \
++ at HAVE_QT_TRUE@ qdbusxmlparser_p.h
+
+ @HAVE_QT_TRUE at CLEANFILES = qdbusabstractadaptor.moc qdbusserver.moc qdbusconnection.moc
+ @HAVE_QT_TRUE at libdbus_qt4_1_la_LIBADD = $(DBUS_QT_LIBS) $(top_builddir)/dbus/libdbus-1.la
+@@ -551,111 +530,6 @@
+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
+
+-qdbusconnection.lo: $(top_srcdir)/qt/qdbusconnection.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusconnection.lo -MD -MP -MF "$(DEPDIR)/qdbusconnection.Tpo" -c -o qdbusconnection.lo `test -f '$(top_srcdir)/qt/qdbusconnection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusconnection.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusconnection.Tpo" "$(DEPDIR)/qdbusconnection.Plo"; else rm -f "$(DEPDIR)/qdbusconnection.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusconnection.cpp' object='qdbusconnection.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusconnection.lo `test -f '$(top_srcdir)/qt/qdbusconnection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusconnection.cpp
+-
+-qdbuserror.lo: $(top_srcdir)/qt/qdbuserror.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbuserror.lo -MD -MP -MF "$(DEPDIR)/qdbuserror.Tpo" -c -o qdbuserror.lo `test -f '$(top_srcdir)/qt/qdbuserror.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbuserror.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbuserror.Tpo" "$(DEPDIR)/qdbuserror.Plo"; else rm -f "$(DEPDIR)/qdbuserror.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbuserror.cpp' object='qdbuserror.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbuserror.lo `test -f '$(top_srcdir)/qt/qdbuserror.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbuserror.cpp
+-
+-qdbusintegrator.lo: $(top_srcdir)/qt/qdbusintegrator.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusintegrator.lo -MD -MP -MF "$(DEPDIR)/qdbusintegrator.Tpo" -c -o qdbusintegrator.lo `test -f '$(top_srcdir)/qt/qdbusintegrator.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintegrator.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusintegrator.Tpo" "$(DEPDIR)/qdbusintegrator.Plo"; else rm -f "$(DEPDIR)/qdbusintegrator.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusintegrator.cpp' object='qdbusintegrator.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusintegrator.lo `test -f '$(top_srcdir)/qt/qdbusintegrator.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintegrator.cpp
+-
+-qdbusmarshall.lo: $(top_srcdir)/qt/qdbusmarshall.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusmarshall.lo -MD -MP -MF "$(DEPDIR)/qdbusmarshall.Tpo" -c -o qdbusmarshall.lo `test -f '$(top_srcdir)/qt/qdbusmarshall.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmarshall.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusmarshall.Tpo" "$(DEPDIR)/qdbusmarshall.Plo"; else rm -f "$(DEPDIR)/qdbusmarshall.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusmarshall.cpp' object='qdbusmarshall.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusmarshall.lo `test -f '$(top_srcdir)/qt/qdbusmarshall.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmarshall.cpp
+-
+-qdbusmessage.lo: $(top_srcdir)/qt/qdbusmessage.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusmessage.lo -MD -MP -MF "$(DEPDIR)/qdbusmessage.Tpo" -c -o qdbusmessage.lo `test -f '$(top_srcdir)/qt/qdbusmessage.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmessage.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusmessage.Tpo" "$(DEPDIR)/qdbusmessage.Plo"; else rm -f "$(DEPDIR)/qdbusmessage.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusmessage.cpp' object='qdbusmessage.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusmessage.lo `test -f '$(top_srcdir)/qt/qdbusmessage.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusmessage.cpp
+-
+-qdbusserver.lo: $(top_srcdir)/qt/qdbusserver.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusserver.lo -MD -MP -MF "$(DEPDIR)/qdbusserver.Tpo" -c -o qdbusserver.lo `test -f '$(top_srcdir)/qt/qdbusserver.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusserver.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusserver.Tpo" "$(DEPDIR)/qdbusserver.Plo"; else rm -f "$(DEPDIR)/qdbusserver.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusserver.cpp' object='qdbusserver.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusserver.lo `test -f '$(top_srcdir)/qt/qdbusserver.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusserver.cpp
+-
+-qdbustype.lo: $(top_srcdir)/qt/qdbustype.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbustype.lo -MD -MP -MF "$(DEPDIR)/qdbustype.Tpo" -c -o qdbustype.lo `test -f '$(top_srcdir)/qt/qdbustype.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbustype.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbustype.Tpo" "$(DEPDIR)/qdbustype.Plo"; else rm -f "$(DEPDIR)/qdbustype.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbustype.cpp' object='qdbustype.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbustype.lo `test -f '$(top_srcdir)/qt/qdbustype.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbustype.cpp
+-
+-qdbusobject.lo: $(top_srcdir)/qt/qdbusobject.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusobject.lo -MD -MP -MF "$(DEPDIR)/qdbusobject.Tpo" -c -o qdbusobject.lo `test -f '$(top_srcdir)/qt/qdbusobject.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusobject.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusobject.Tpo" "$(DEPDIR)/qdbusobject.Plo"; else rm -f "$(DEPDIR)/qdbusobject.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusobject.cpp' object='qdbusobject.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusobject.lo `test -f '$(top_srcdir)/qt/qdbusobject.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusobject.cpp
+-
+-qdbusinterface.lo: $(top_srcdir)/qt/qdbusinterface.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusinterface.lo -MD -MP -MF "$(DEPDIR)/qdbusinterface.Tpo" -c -o qdbusinterface.lo `test -f '$(top_srcdir)/qt/qdbusinterface.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusinterface.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusinterface.Tpo" "$(DEPDIR)/qdbusinterface.Plo"; else rm -f "$(DEPDIR)/qdbusinterface.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusinterface.cpp' object='qdbusinterface.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusinterface.lo `test -f '$(top_srcdir)/qt/qdbusinterface.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusinterface.cpp
+-
+-qdbusstandardinterfaces.lo: $(top_srcdir)/qt/qdbusstandardinterfaces.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusstandardinterfaces.lo -MD -MP -MF "$(DEPDIR)/qdbusstandardinterfaces.Tpo" -c -o qdbusstandardinterfaces.lo `test -f '$(top_srcdir)/qt/qdbusstandardinterfaces.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusstandardinterfaces.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusstandardinterfaces.Tpo" "$(DEPDIR)/qdbusstandardinterfaces.Plo"; else rm -f "$(DEPDIR)/qdbusstandardinterfaces.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusstandardinterfaces.cpp' object='qdbusstandardinterfaces.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusstandardinterfaces.lo `test -f '$(top_srcdir)/qt/qdbusstandardinterfaces.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusstandardinterfaces.cpp
+-
+-qdbusxmlparser.lo: $(top_srcdir)/qt/qdbusxmlparser.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusxmlparser.lo -MD -MP -MF "$(DEPDIR)/qdbusxmlparser.Tpo" -c -o qdbusxmlparser.lo `test -f '$(top_srcdir)/qt/qdbusxmlparser.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusxmlparser.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusxmlparser.Tpo" "$(DEPDIR)/qdbusxmlparser.Plo"; else rm -f "$(DEPDIR)/qdbusxmlparser.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusxmlparser.cpp' object='qdbusxmlparser.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusxmlparser.lo `test -f '$(top_srcdir)/qt/qdbusxmlparser.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusxmlparser.cpp
+-
+-qdbusutil.lo: $(top_srcdir)/qt/qdbusutil.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusutil.lo -MD -MP -MF "$(DEPDIR)/qdbusutil.Tpo" -c -o qdbusutil.lo `test -f '$(top_srcdir)/qt/qdbusutil.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusutil.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusutil.Tpo" "$(DEPDIR)/qdbusutil.Plo"; else rm -f "$(DEPDIR)/qdbusutil.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusutil.cpp' object='qdbusutil.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusutil.lo `test -f '$(top_srcdir)/qt/qdbusutil.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusutil.cpp
+-
+-qdbusintrospection.lo: $(top_srcdir)/qt/qdbusintrospection.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusintrospection.lo -MD -MP -MF "$(DEPDIR)/qdbusintrospection.Tpo" -c -o qdbusintrospection.lo `test -f '$(top_srcdir)/qt/qdbusintrospection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintrospection.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusintrospection.Tpo" "$(DEPDIR)/qdbusintrospection.Plo"; else rm -f "$(DEPDIR)/qdbusintrospection.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusintrospection.cpp' object='qdbusintrospection.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusintrospection.lo `test -f '$(top_srcdir)/qt/qdbusintrospection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusintrospection.cpp
+-
+-qdbusabstractadaptor.lo: $(top_srcdir)/qt/qdbusabstractadaptor.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusabstractadaptor.lo -MD -MP -MF "$(DEPDIR)/qdbusabstractadaptor.Tpo" -c -o qdbusabstractadaptor.lo `test -f '$(top_srcdir)/qt/qdbusabstractadaptor.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusabstractadaptor.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusabstractadaptor.Tpo" "$(DEPDIR)/qdbusabstractadaptor.Plo"; else rm -f "$(DEPDIR)/qdbusabstractadaptor.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusabstractadaptor.cpp' object='qdbusabstractadaptor.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusabstractadaptor.lo `test -f '$(top_srcdir)/qt/qdbusabstractadaptor.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusabstractadaptor.cpp
+-
+-qdbusthread.lo: $(top_srcdir)/qt/qdbusthread.cpp
+- at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT qdbusthread.lo -MD -MP -MF "$(DEPDIR)/qdbusthread.Tpo" -c -o qdbusthread.lo `test -f '$(top_srcdir)/qt/qdbusthread.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusthread.cpp; \
+- at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/qdbusthread.Tpo" "$(DEPDIR)/qdbusthread.Plo"; else rm -f "$(DEPDIR)/qdbusthread.Tpo"; exit 1; fi
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt/qdbusthread.cpp' object='qdbusthread.lo' libtool=yes @AMDEPBACKSLASH@
+- at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+- at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o qdbusthread.lo `test -f '$(top_srcdir)/qt/qdbusthread.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt/qdbusthread.cpp
+-
+ mostlyclean-libtool:
+ -rm -f *.lo
+
+@@ -857,9 +731,9 @@
+ uninstall-libLTLIBRARIES
+
+
+- at HAVE_QT_TRUE@$(top_srcdir)/qt/qdbusabstractadaptor.lo: qdbusabstractadaptor.moc
+- at HAVE_QT_TRUE@$(top_srcdir)/qt/qdbusserver.lo: qdbusserver.moc
+- at HAVE_QT_TRUE@$(top_srcdir)/qt/qdbusconnection.lo: qdbusconnection_p.moc
+ at HAVE_QT_TRUE@qdbusabstractadaptor.lo: qdbusabstractadaptor.moc
+ at HAVE_QT_TRUE@qdbusserver.lo: qdbusserver.moc
+ at HAVE_QT_TRUE@qdbusconnection.lo: qdbusconnection_p.moc
-+
-+ at HAVE_QT_TRUE@%.moc: %.h
-+ at HAVE_QT_TRUE@ $(QT_MOC) $< > $@
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/qt/README dbus-0.61/qt/README
---- dbus-0.61.orig/qt/README 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/README 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,10 @@
-+These are the Qt4 D-Bus bindings.
-+
-+They are being maintained by Trolltech AS. As we are currently
-+considering placing this code in a future version of Qt, we would like
-+to ask any contributors to contact us before submitting code to this
-+repository.
-+
-+
-+For more information, please contact
-+ Thiago Macieira <thiago.macieira at trolltech.com>
-diff -Naur dbus-0.61.orig/qt/qdbusabstractadaptor.cpp dbus-0.61/qt/qdbusabstractadaptor.cpp
---- dbus-0.61.orig/qt/qdbusabstractadaptor.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusabstractadaptor.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,64 @@
-+/* -*- mode: C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusabstractadaptor.h"
-+
-+#include <QtCore/qmetaobject.h>
-+#include <QtCore/qtimer.h>
-+
-+QDBusAbstractAdaptor::QDBusAbstractAdaptor(QObject* parent)
-+ : QObject(parent)
-+{
-+ QTimer::singleShot(0, this, SLOT(polish()));
-+}
-+
-+QDBusAbstractAdaptor::~QDBusAbstractAdaptor()
-+{
-+}
-+
-+void QDBusAbstractAdaptor::setAutoRelaySignals(bool enable)
-+{
-+ const QMetaObject *us = metaObject();
-+ for (int idx = staticMetaObject.methodCount(); idx < us->methodCount(); ++idx) {
-+ QMetaMethod mm = us->method(idx);
-+
-+ if (mm.methodType() != QMetaMethod::Signal)
-+ continue;
-+
-+ // try to connect/disconnect to a signal on the parent that has the same method signature
-+ QByteArray sig = mm.signature();
-+ sig.prepend(QSIGNAL_CODE + '0');
-+ if (enable)
-+ connect(parent(), sig, sig);
-+ else
-+ parent()->disconnect(sig, this, sig);
-+ }
-+}
-+
-+void QDBusAbstractAdaptor::polish()
-+{
-+ // future work:
-+ // connect every signal in this adaptor to a slot that will relay them into D-Bus
-+}
-+
-+#include "qdbusabstractadaptor.moc"
-diff -Naur dbus-0.61.orig/qt/qdbusabstractadaptor.h dbus-0.61/qt/qdbusabstractadaptor.h
---- dbus-0.61.orig/qt/qdbusabstractadaptor.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusabstractadaptor.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,44 @@
-+/* -*- mode: C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSABSTRACTADAPTOR_H
-+#define QDBUSABSTRACTADAPTOR_H
-+
-+#include <QtCore/qobject.h>
-+#include "qdbusmacros.h"
-+
-+class QDBUS_EXPORT QDBusAbstractAdaptor: public QObject
-+{
-+ Q_OBJECT
-+public:
-+ QDBusAbstractAdaptor(QObject* parent);
-+ ~QDBusAbstractAdaptor();
-+
-+protected:
-+ void setAutoRelaySignals(bool enable);
-+
-+private slots:
-+ void polish();
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusconnection.cpp dbus-0.61/qt/qdbusconnection.cpp
---- dbus-0.61.orig/qt/qdbusconnection.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusconnection.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,420 @@
-+/* qdbusconnection.cpp
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include <qdebug.h>
-+#include <qcoreapplication.h>
-+
-+#include "qdbusconnection.h"
-+#include "qdbuserror.h"
-+#include "qdbusmessage.h"
-+#include "qdbusconnection_p.h"
-+#include "qdbusinterface_p.h"
-+#include "qdbusobject_p.h"
-+#include "qdbusutil.h"
-+
-+QT_STATIC_CONST_IMPL char *QDBusConnection::default_connection_name = "qt_dbus_default_connection";
-+
-+class QDBusConnectionManager
-+{
-+public:
-+ QDBusConnectionManager(): default_connection(0) {}
-+ ~QDBusConnectionManager();
-+ void bindToApplication();
-+ QDBusConnectionPrivate *connection(const QString &name) const;
-+ void removeConnection(const QString &name);
-+ void setConnection(const QString &name, QDBusConnectionPrivate *c);
-+
-+private:
-+ QDBusConnectionPrivate *default_connection;
-+ QHash<QString, QDBusConnectionPrivate *> connectionHash;
-+};
-+
-+Q_GLOBAL_STATIC(QDBusConnectionManager, manager);
-+
-+QDBusConnectionPrivate *QDBusConnectionManager::connection(const QString &name) const
-+{
-+ return name == QLatin1String(QDBusConnection::default_connection_name) ?
-+ default_connection : connectionHash.value(name, 0);
-+}
-+
-+void QDBusConnectionManager::removeConnection(const QString &name)
-+{
-+ QDBusConnectionPrivate *d = 0;
-+ if (name == QLatin1String(QDBusConnection::default_connection_name)) {
-+ d = default_connection;
-+ default_connection = 0;
-+ } else {
-+ d = connectionHash.take(name);
-+ }
-+ if (!d->ref.deref())
-+ delete d;
-+}
-+
-+QDBusConnectionManager::~QDBusConnectionManager()
-+{
-+ if (default_connection) {
-+ delete default_connection;
-+ default_connection = 0;
-+ }
-+ for (QHash<QString, QDBusConnectionPrivate *>::const_iterator it = connectionHash.constBegin();
-+ it != connectionHash.constEnd(); ++it) {
-+ delete it.value();
-+ }
-+ connectionHash.clear();
-+}
-+
-+void QDBusConnectionManager::bindToApplication()
-+{
-+ if (default_connection) {
-+ default_connection->bindToApplication();
-+ }
-+ for (QHash<QString, QDBusConnectionPrivate *>::const_iterator it = connectionHash.constBegin();
-+ it != connectionHash.constEnd(); ++it) {
-+ (*it)->bindToApplication();
-+ }
-+}
-+
-+void qDBusBindToApplication()
-+{
-+ manager()->bindToApplication();
-+}
-+
-+void QDBusConnectionManager::setConnection(const QString &name, QDBusConnectionPrivate *c)
-+{
-+ if (name == QLatin1String(QDBusConnection::default_connection_name))
-+ default_connection = c;
-+ else
-+ connectionHash[name] = c;
-+}
-+
-+
-+QDBusConnection::QDBusConnection(const QString &name)
-+{
-+ d = manager()->connection(name);
-+ if (d)
-+ d->ref.ref();
-+}
-+
-+QDBusConnection::QDBusConnection(const QDBusConnection &other)
-+{
-+ d = other.d;
-+ if (d)
-+ d->ref.ref();
-+}
-+
-+QDBusConnection::~QDBusConnection()
-+{
-+ if (d && !d->ref.deref())
-+ delete d;
-+}
-+
-+QDBusConnection &QDBusConnection::operator=(const QDBusConnection &other)
-+{
-+ if (other.d)
-+ other.d->ref.ref();
-+ QDBusConnectionPrivate *old = static_cast<QDBusConnectionPrivate *>(
-+ q_atomic_set_ptr(&d, other.d));
-+ if (old && !old->ref.deref())
-+ delete old;
-+
-+ return *this;
-+}
-+
-+QDBusConnection QDBusConnection::addConnection(BusType type, const QString &name)
-+{
-+// Q_ASSERT_X(QCoreApplication::instance(), "QDBusConnection::addConnection",
-+// "Cannot create connection without a Q[Core]Application instance");
-+
-+ QDBusConnectionPrivate *d = manager()->connection(name);
-+ if (d)
-+ return QDBusConnection(name);
-+
-+ d = new QDBusConnectionPrivate;
-+ DBusConnection *c = 0;
-+ switch (type) {
-+ case SystemBus:
-+ c = dbus_bus_get(DBUS_BUS_SYSTEM, &d->error);
-+ break;
-+ case SessionBus:
-+ c = dbus_bus_get(DBUS_BUS_SESSION, &d->error);
-+ break;
-+ case ActivationBus:
-+ c = dbus_bus_get(DBUS_BUS_STARTER, &d->error);
-+ break;
-+ }
-+ d->setConnection(c); //setConnection does the error handling for us
-+
-+ manager()->setConnection(name, d);
-+
-+ return QDBusConnection(name);
-+}
-+
-+QDBusConnection QDBusConnection::addConnection(const QString &address,
-+ const QString &name)
-+{
-+// Q_ASSERT_X(QCoreApplication::instance(), "QDBusConnection::addConnection",
-+// "Cannot create connection without a Q[Core]Application instance");
-+
-+ QDBusConnectionPrivate *d = manager()->connection(name);
-+ if (d)
-+ return QDBusConnection(name);
-+
-+ d = new QDBusConnectionPrivate;
-+ // setConnection does the error handling for us
-+ d->setConnection(dbus_connection_open(address.toUtf8().constData(), &d->error));
-+
-+ manager()->setConnection(name, d);
-+
-+ return QDBusConnection(name);
-+}
-+
-+void QDBusConnection::closeConnection(const QString &name)
-+{
-+ manager()->removeConnection(name);
-+}
-+
-+void QDBusConnectionPrivate::timerEvent(QTimerEvent *e)
-+{
-+ DBusTimeout *timeout = timeouts.value(e->timerId(), 0);
-+ dbus_timeout_handle(timeout);
-+}
-+
-+bool QDBusConnection::send(const QDBusMessage &message) const
-+{
-+ if (!d || !d->connection)
-+ return false;
-+ return d->send(message);
-+}
-+
-+int QDBusConnection::sendWithReplyAsync(const QDBusMessage &message, QObject *receiver,
-+ const char *method) const
-+{
-+ if (!d || !d->connection)
-+ return 0;
-+
-+ return d->sendWithReplyAsync(message, receiver, method);
-+}
-+
-+QDBusMessage QDBusConnection::sendWithReply(const QDBusMessage &message) const
-+{
-+ if (!d || !d->connection)
-+ return QDBusMessage::fromDBusMessage(0);
-+
-+ if (!QCoreApplication::instance()) {
-+ DBusMessage *msg = message.toDBusMessage();
-+ if (!msg)
-+ return QDBusMessage::fromDBusMessage(0);
-+
-+ DBusMessage *reply = dbus_connection_send_with_reply_and_block(d->connection, msg,
-+ -1, &d->error);
-+ d->handleError();
-+ dbus_message_unref(msg);
-+
-+ if (lastError().isValid())
-+ return QDBusMessage::fromError(lastError());
-+
-+ return QDBusMessage::fromDBusMessage(reply);
-+ } else {
-+ QDBusReplyWaiter waiter;
-+ if (d->sendWithReplyAsync(message, &waiter, SLOT(reply(const QDBusMessage&))) > 0) {
-+ // enter the event loop and wait for a reply
-+ waiter.exec(QEventLoop::ExcludeUserInputEvents | QEventLoop::WaitForMoreEvents);
-+
-+ d->lastError = waiter.replyMsg; // set or clear error
-+ return waiter.replyMsg;
-+ }
-+
-+ return QDBusMessage::fromDBusMessage(0);
-+ }
-+}
-+
-+bool QDBusConnection::connect(const QString &service, const QString &path, const QString& interface,
-+ const QString &name, QObject *receiver, const char *slot)
-+{
-+ return connect(service, path, interface, name, QString(), receiver, slot);
-+}
-+
-+bool QDBusConnection::connect(const QString &service, const QString &path, const QString& interface,
-+ const QString &name, const QString &signature,
-+ QObject *receiver, const char *slot)
-+{
-+ if (!receiver || !slot || !d || !d->connection)
-+ return false;
-+
-+ QString source = getNameOwner(service);
-+ if (source.isEmpty())
-+ return false;
-+ source += path;
-+
-+ // check the slot
-+ QDBusConnectionPrivate::SignalHook hook;
-+ if ((hook.midx = QDBusConnectionPrivate::findSlot(receiver, slot + 1, hook.params)) == -1)
-+ return false;
-+
-+ hook.interface = interface;
-+ hook.name = name;
-+ hook.signature = signature;
-+ hook.obj = QPointer<QObject>(receiver);
-+
-+ d->signalHooks.insertMulti(source, hook);
-+ d->connect(receiver, SIGNAL(destroyed(QObject*)), SLOT(objectDestroyed(QObject*)));
-+
-+ return true;
-+}
-+
-+bool QDBusConnection::registerObject(const QString &path, QObject *object, RegisterOptions options)
-+{
-+ return registerObject(path, QString(), object, options);
-+}
-+
-+bool QDBusConnection::registerObject(const QString &path, const QString &interface,
-+ QObject *object, RegisterOptions options)
-+{
-+ if (!d || !d->connection || !object || !options || !QDBusUtil::isValidObjectPath(path))
-+ return false;
-+
-+ QString iface = interface;
-+ if (options & ExportForAnyInterface)
-+ iface.clear();
-+
-+ QDBusConnectionPrivate::ObjectDataHash& hook = d->objectHooks[path];
-+
-+ // if we're replacing and matching any interface, then we're replacing every interface
-+ // this catches ExportAdaptors | Reexport too
-+ if (( options & ( ExportForAnyInterface | Reexport )) == ( ExportForAnyInterface | Reexport ))
-+ hook.clear();
-+
-+ // we're not matching any interface, but if we're not replacing, make sure it doesn't exist yet
-+ else if (( options & Reexport ) == 0 && hook.find(iface) != hook.end())
-+ return false;
-+
-+ QDBusConnectionPrivate::ObjectData& data = hook[iface];
-+
-+ data.flags = options;
-+ data.obj = object;
-+
-+ d->connect(object, SIGNAL(destroyed(QObject*)), SLOT(objectDestroyed(QObject*)));
-+ qDebug("REGISTERED FOR %s", path.toLocal8Bit().constData());
-+
-+ return true; // todo - check for slots etc.
-+}
-+
-+void QDBusConnection::unregisterObject(const QString &path)
-+{
-+ if (!d || !d->connection)
-+ return;
-+
-+ d->objectHooks.remove(path);
-+}
-+
-+QDBusInterface QDBusConnection::findInterface(const QString& service, const QString& path,
-+ const QString& interface)
-+{
-+ // create one
-+ QDBusInterfacePrivate *priv = new QDBusInterfacePrivate;
-+ priv->conn = *this;
-+
-+ if (!QDBusUtil::isValidObjectPath(path) || !QDBusUtil::isValidInterfaceName(interface))
-+ return QDBusInterface(priv);
-+
-+ // check if it's there first
-+ QString owner = getNameOwner(service);
-+ if (owner.isEmpty())
-+ return QDBusInterface(priv);
-+
-+ // getNameOwner returns empty if d is 0
-+ Q_ASSERT(d);
-+ priv->service = owner;
-+ priv->path = path;
-+ priv->data = d->findInterface(interface).constData();
-+
-+ return QDBusInterface(priv); // will increment priv's refcount
-+}
-+
-+QDBusObject QDBusConnection::findObject(const QString& service, const QString& path)
-+{
-+ QDBusObjectPrivate* priv = 0;
-+ if (d && QDBusUtil::isValidObjectPath(path)) {
-+ QString owner = getNameOwner(service);
-+
-+ if (!owner.isEmpty())
-+ priv = new QDBusObjectPrivate(d, owner, path);
-+ }
-+ return QDBusObject(priv, *this);
-+}
-+
-+bool QDBusConnection::isConnected( ) const
-+{
-+ return d && d->connection && dbus_connection_get_is_connected(d->connection);
-+}
-+
-+QDBusError QDBusConnection::lastError() const
-+{
-+ return d ? d->lastError : QDBusError();
-+}
-+
-+QString QDBusConnection::baseService() const
-+{
-+ return d && d->connection ?
-+ QString::fromUtf8(dbus_bus_get_unique_name(d->connection))
-+ : QString();
-+}
-+
-+bool QDBusConnection::requestName(const QString &name, NameRequestMode mode)
-+{
-+ static const int DBusModes[] = { DBUS_NAME_FLAG_ALLOW_REPLACEMENT, 0,
-+ DBUS_NAME_FLAG_REPLACE_EXISTING | DBUS_NAME_FLAG_ALLOW_REPLACEMENT};
-+
-+ int retval = dbus_bus_request_name(d->connection, name.toUtf8(), DBusModes[mode], &d->error);
-+ d->handleError();
-+ return retval == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER ||
-+ retval == DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER;
-+}
-+
-+bool QDBusConnection::releaseName(const QString &name)
-+{
-+ int retval = dbus_bus_release_name(d->connection, name.toUtf8(), &d->error);
-+ d->handleError();
-+ if (lastError().isValid())
-+ return false;
-+ return retval == DBUS_RELEASE_NAME_REPLY_RELEASED;
-+}
-+
-+QString QDBusConnection::getNameOwner(const QString& name)
-+{
-+ if (QDBusUtil::isValidUniqueConnectionName(name))
-+ return name;
-+ if (!d || !QDBusUtil::isValidBusName(name))
-+ return QString();
-+
-+ QDBusMessage msg = QDBusMessage::methodCall(DBUS_SERVICE_DBUS, DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS, "GetNameOwner");
-+ msg << name;
-+ QDBusMessage reply = sendWithReply(msg);
-+ if (!lastError().isValid() && reply.type() == QDBusMessage::ReplyMessage)
-+ return reply.first().toString();
-+ return QString();
-+}
-+
-+#include "qdbusconnection_p.moc"
-diff -Naur dbus-0.61.orig/qt/qdbusconnection.h dbus-0.61/qt/qdbusconnection.h
---- dbus-0.61.orig/qt/qdbusconnection.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusconnection.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,117 @@
-+/* qdbusconnection.h QDBusConnection object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSCONNECTION_H
-+#define QDBUSCONNECTION_H
-+
-+#include "qdbusmacros.h"
-+#include <QtCore/qstring.h>
-+
-+class QDBusConnectionPrivate;
-+class QDBusXmlParser;
-+class QDBusObject;
-+class QDBusInterface;
-+class QDBusError;
-+class QDBusMessage;
-+class QByteArray;
-+class QObject;
-+
-+class QDBUS_EXPORT QDBusConnection
-+{
-+public:
-+ enum BusType { SessionBus, SystemBus, ActivationBus };
-+
-+ QDBusConnection(const QString &name = QLatin1String(default_connection_name));
-+ QDBusConnection(const QDBusConnection &other);
-+ ~QDBusConnection();
-+
-+ QDBusConnection &operator=(const QDBusConnection &other);
-+
-+ bool isConnected() const;
-+ QDBusError lastError() const;
-+
-+ enum NameRequestMode { NoReplace = 0, ProhibitReplace = 1, ReplaceExisting = 2 };
-+ bool requestName(const QString &name, NameRequestMode mode = NoReplace);
-+ bool releaseName(const QString& name);
-+ QString getNameOwner(const QString& name);
-+
-+
-+ QString baseService() const;
-+
-+ bool send(const QDBusMessage &message) const;
-+ QDBusMessage sendWithReply(const QDBusMessage &message) const;
-+ int sendWithReplyAsync(const QDBusMessage &message, QObject *receiver,
-+ const char *slot) const;
-+
-+ bool connect(const QString &service, const QString &path, const QString &interface,
-+ const QString &name, QObject *receiver, const char *slot);
-+ bool connect(const QString &service, const QString &path, const QString &interface,
-+ const QString &name, const QString& signature,
-+ QObject *receiver, const char *slot);
-+
-+ enum RegisterOption {
-+ ExportForAnyInterface = 0x01,
-+ ExportAdaptors = 0x03,
-+
-+ ExportOwnSlots = 0x10,
-+ ExportOwnSignals = 0x20,
-+ ExportOwnProperties = 0x40,
-+ ExportOwnContents = 0xf0,
-+
-+ ExportNonScriptableSlots = 0x100,
-+ ExportNonScriptableSignals = 0x200,
-+ ExportNonScriptableProperties = 0x400,
-+ ExportNonScriptables = 0xf00,
-+
-+ ExportChildObjects = 0x1000,
-+
-+ Reexport = 0x100000,
-+ };
-+ Q_DECLARE_FLAGS(RegisterOptions, RegisterOption);
-+
-+ bool registerObject(const QString &path, const QString &interface, QObject *object,
-+ RegisterOptions options = ExportOwnContents);
-+ bool registerObject(const QString &path, QObject *object,
-+ RegisterOptions options = ExportAdaptors);
-+ void unregisterObject(const QString &path);
-+
-+ QDBusObject findObject(const QString& service, const QString& path);
-+ QDBusInterface findInterface(const QString& service, const QString& path, const QString& interface);
-+
-+
-+ static QDBusConnection addConnection(BusType type,
-+ const QString &name = QLatin1String(default_connection_name));
-+ static QDBusConnection addConnection(const QString &address,
-+ const QString &name = QLatin1String(default_connection_name));
-+ static void closeConnection(const QString &name = QLatin1String(default_connection_name));
-+
-+ QT_STATIC_CONST char *default_connection_name;
-+
-+private:
-+ friend class QDBusObject;
-+ QDBusConnectionPrivate *d;
-+};
-+
-+Q_DECLARE_OPERATORS_FOR_FLAGS(QDBusConnection::RegisterOptions)
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusconnection_p.h dbus-0.61/qt/qdbusconnection_p.h
---- dbus-0.61.orig/qt/qdbusconnection_p.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusconnection_p.h 2006-02-20 14:23:11.000000000 +0100
-@@ -0,0 +1,187 @@
-+/* qdbusconnection_p.h QDBusConnection private object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+//
-+// W A R N I N G
-+// -------------
-+//
-+// This file is not part of the public API. This header file may
-+// change from version to version without notice, or even be
-+// removed.
-+//
-+// We mean it.
-+//
-+//
-+
-+#ifndef QDBUSCONNECTION_P_H
-+#define QDBUSCONNECTION_P_H
-+
-+#include "qdbuserror.h"
-+
-+#include <QtCore/qatomic.h>
-+#include <QtCore/qmutex.h>
-+#include <QtCore/qhash.h>
-+#include <QtCore/qobject.h>
-+#include <QtCore/qpointer.h>
-+#include <QtCore/qvarlengtharray.h>
-+#include <QtCore/qeventloop.h>
-+#include <QtCore/qmutex.h>
-+
-+#include <dbus/dbus.h>
-+
-+#include "qdbusmessage.h"
-+#include "qdbusintrospection.h"
-+
-+class QDBusMessage;
-+class QSocketNotifier;
-+class QTimerEvent;
-+class QDBusObjectPrivate;
-+class CallDeliveryEvent;
-+
-+typedef struct DBusConnection;
-+typedef struct DBusServer;
-+
-+class QDBusConnectionPrivate: public QObject
-+{
-+ Q_OBJECT
-+public:
-+ // structs and enums
-+ enum ConnectionMode { InvalidMode, ServerMode, ClientMode };
-+
-+ struct Watcher
-+ {
-+ Watcher(): watch(0), read(0), write(0) {}
-+ DBusWatch *watch;
-+ QSocketNotifier *read;
-+ QSocketNotifier *write;
-+ };
-+
-+ struct SignalHook
-+ {
-+ QString interface, name, signature;
-+ QPointer<QObject> obj;
-+ int midx;
-+ QList<int> params;
-+ };
-+
-+ struct ObjectData
-+ {
-+ QPointer<QObject> obj;
-+ int flags;
-+ };
-+
-+public:
-+ // typedefs
-+ typedef QMultiHash<int, Watcher> WatcherHash;
-+ typedef QHash<int, DBusTimeout *> TimeoutHash;
-+ typedef QMultiHash<QString, SignalHook> SignalHookHash;
-+ typedef QHash<QString, ObjectData> ObjectDataHash;
-+ typedef QHash<QString, ObjectDataHash> ObjectHookHash;
-+ typedef QHash<QString, QSharedDataPointer<QDBusIntrospection::Interface> > KnownInterfacesHash;
-+ typedef QHash<QString, QDBusIntrospection::Object* > KnownObjectsHash;
-+
-+public:
-+ // public methods
-+ QDBusConnectionPrivate(QObject *parent = 0);
-+ ~QDBusConnectionPrivate();
-+
-+ void bindToApplication();
-+
-+ void setConnection(DBusConnection *connection);
-+ void setServer(DBusServer *server);
-+ void closeConnection();
-+ void timerEvent(QTimerEvent *e);
-+
-+ bool handleSignal(const QString &path, const QDBusMessage &msg);
-+ bool send(const QDBusMessage &message) const;
-+ int sendWithReplyAsync(const QDBusMessage &message, QObject *receiver,
-+ const char *method) const;
-+
-+ bool handleSignal(const QDBusMessage &msg);
-+ bool handleObjectCall(const QDBusMessage &message);
-+ bool handleError();
-+
-+ void disposeOfLocked(QDBusIntrospection::Object* obj);
-+ void disposeOf(QDBusObjectPrivate* obj);
-+ QSharedDataPointer<QDBusIntrospection::Interface> findInterface(const QString& name);
-+ QDBusIntrospection::Object* findObject(const QString& service,
-+ const QString& path);
-+
-+ bool activateReply(QObject *object, int idx, const QList<int>& metaTypes,
-+ const QDBusMessage &msg);
-+ bool activateSignal(const SignalHook& hook, const QDBusMessage &msg);
-+ bool activateCall(QObject* object, int flags, const QDBusMessage &msg);
-+ bool activateAdaptor(QObject *object, int flags, const QDBusMessage &msg);
-+ bool activateObject(const ObjectData& data, const QDBusMessage &msg);
-+ void deliverCall(const CallDeliveryEvent &data) const;
-+
-+protected:
-+ virtual void customEvent(QEvent *event);
-+
-+public slots:
-+ // public slots
-+ void socketRead(int);
-+ void socketWrite(int);
-+ void objectDestroyed(QObject *o);
-+
-+public:
-+ // public member variables
-+ DBusError error;
-+ QDBusError lastError;
-+
-+ QAtomic ref;
-+ QMutex mutex;
-+ ConnectionMode mode;
-+ DBusConnection *connection;
-+ DBusServer *server;
-+
-+ WatcherHash watchers;
-+ TimeoutHash timeouts;
-+ SignalHookHash signalHooks;
-+ ObjectHookHash objectHooks;
-+ QList<DBusTimeout *> pendingTimeouts;
-+
-+public:
-+ // public mutable member variables
-+ mutable KnownInterfacesHash knownInterfaces;
-+ mutable KnownObjectsHash knownObjects;
-+
-+public:
-+ // static methods
-+ static int messageMetaType;
-+ static int registerMessageMetaType();
-+ static int findSlot(QObject *obj, const char *slotName, QList<int>& params);
-+};
-+
-+class QDBusReplyWaiter: public QEventLoop
-+{
-+ Q_OBJECT
-+public:
-+ QDBusMessage replyMsg;
-+
-+public slots:
-+ void reply(const QDBusMessage &msg);
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbuserror.cpp dbus-0.61/qt/qdbuserror.cpp
---- dbus-0.61.orig/qt/qdbuserror.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbuserror.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,59 @@
-+/* qdbuserror.h QDBusError object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbuserror.h"
-+
-+#include <qdebug.h>
-+
-+#include <dbus/dbus.h>
-+#include "qdbusmessage.h"
-+
-+QDBusError::QDBusError(const DBusError *error)
-+{
-+ if (!error || !dbus_error_is_set(error))
-+ return;
-+
-+ nm = QString::fromUtf8(error->name);
-+ msg = QString::fromUtf8(error->message);
-+}
-+
-+QDBusError::QDBusError(const QDBusMessage &qdmsg)
-+{
-+ if (qdmsg.type() != QDBusMessage::ErrorMessage)
-+ return;
-+
-+ nm = qdmsg.name();
-+ if (qdmsg.count())
-+ msg = qdmsg[0].toString();
-+}
-+
-+#ifndef QT_NO_DEBUG
-+QDebug operator<<(QDebug dbg, const QDBusError &msg)
-+{
-+ dbg.nospace() << "QDBusError(" << msg.name() << ", " << msg.message() << ")";
-+ return dbg.space();
-+}
-+#endif
-+
-+
-diff -Naur dbus-0.61.orig/qt/qdbuserror.h dbus-0.61/qt/qdbuserror.h
---- dbus-0.61.orig/qt/qdbuserror.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbuserror.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,52 @@
-+/* qdbuserror.h QDBusError object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSERROR_H
-+#define QDBUSERROR_H
-+
-+#include "qdbusmacros.h"
-+#include <QtCore/qstring.h>
-+
-+struct DBusError;
-+class QDBusMessage;
-+
-+class QDBUS_EXPORT QDBusError
-+{
-+public:
-+ QDBusError(const DBusError *error = 0);
-+ QDBusError(const QDBusMessage& msg);
-+
-+ inline QString name() const { return nm; }
-+ inline QString message() const { return msg; }
-+ inline bool isValid() const { return !nm.isNull() && !msg.isNull(); }
-+
-+private:
-+ QString nm, msg;
-+};
-+
-+#ifndef QT_NO_DEBUG
-+QDebug operator<<(QDebug, const QDBusError &);
-+#endif
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusintegrator.cpp dbus-0.61/qt/qdbusintegrator.cpp
---- dbus-0.61.orig/qt/qdbusintegrator.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusintegrator.cpp 2006-02-20 14:23:11.000000000 +0100
-@@ -0,0 +1,1194 @@
-+/* qdbusintegrator.cpp QDBusConnection private implementation
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include <qcoreapplication.h>
-+#include <qcoreevent.h>
-+#include <qdebug.h>
-+#include <qmetaobject.h>
-+#include <qsocketnotifier.h>
-+#include <qcoreevent.h>
-+#include <qtimer.h>
-+
-+#include "qdbusvariant.h"
-+#include "qdbusconnection_p.h"
-+#include "qdbusinterface_p.h"
-+#include "qdbusobject_p.h"
-+#include "qdbusmessage.h"
-+#include "qdbusabstractadaptor.h"
-+
-+int QDBusConnectionPrivate::messageMetaType = 0;
-+
-+struct QDBusPendingCall
-+{
-+ QPointer<QObject> receiver;
-+ QList<int> metaTypes;
-+ int methodIdx;
-+ DBusPendingCall *pending;
-+ const QDBusConnectionPrivate *connection;
-+};
-+
-+class CallDeliveryEvent: public QEvent
-+{
-+public:
-+ CallDeliveryEvent()
-+ : QEvent(QEvent::User), object(0), flags(0), slotIdx(-1)
-+ { }
-+
-+ const QDBusConnectionPrivate *conn;
-+ QPointer<QObject> object;
-+ QDBusMessage message;
-+ QList<int> metaTypes;
-+
-+ int flags;
-+ int slotIdx;
-+};
-+
-+static dbus_bool_t qDBusAddTimeout(DBusTimeout *timeout, void *data)
-+{
-+ Q_ASSERT(timeout);
-+ Q_ASSERT(data);
-+
-+ // qDebug("addTimeout %d", dbus_timeout_get_interval(timeout));
-+
-+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
-+
-+ if (!dbus_timeout_get_enabled(timeout))
-+ return true;
-+
-+ if (!QCoreApplication::instance()) {
-+ d->pendingTimeouts.append(timeout);
-+ return true;
-+ }
-+ int timerId = d->startTimer(dbus_timeout_get_interval(timeout));
-+ if (!timerId)
-+ return false;
-+
-+ d->timeouts[timerId] = timeout;
-+ return true;
-+}
-+
-+static void qDBusRemoveTimeout(DBusTimeout *timeout, void *data)
-+{
-+ Q_ASSERT(timeout);
-+ Q_ASSERT(data);
-+
-+ // qDebug("removeTimeout");
-+
-+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
-+ d->pendingTimeouts.removeAll(timeout);
-+
-+ QDBusConnectionPrivate::TimeoutHash::iterator it = d->timeouts.begin();
-+ while (it != d->timeouts.end()) {
-+ if (it.value() == timeout) {
-+ d->killTimer(it.key());
-+ it = d->timeouts.erase(it);
-+ } else {
-+ ++it;
-+ }
-+ }
-+}
-+
-+static void qDBusToggleTimeout(DBusTimeout *timeout, void *data)
-+{
-+ Q_ASSERT(timeout);
-+ Q_ASSERT(data);
-+
-+ qDebug("ToggleTimeout");
-+
-+ qDBusRemoveTimeout(timeout, data);
-+ qDBusAddTimeout(timeout, data);
-+}
-+
-+static dbus_bool_t qDBusAddWatch(DBusWatch *watch, void *data)
-+{
-+ Q_ASSERT(watch);
-+ Q_ASSERT(data);
-+
-+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
-+
-+ int flags = dbus_watch_get_flags(watch);
-+ int fd = dbus_watch_get_fd(watch);
-+
-+ QDBusConnectionPrivate::Watcher watcher;
-+ if (flags & DBUS_WATCH_READABLE) {
-+ qDebug("addReadWatch %d", fd);
-+ watcher.watch = watch;
-+ if (QCoreApplication::instance()) {
-+ watcher.read = new QSocketNotifier(fd, QSocketNotifier::Read, d);
-+ watcher.read->setEnabled(dbus_watch_get_enabled(watch));
-+ d->connect(watcher.read, SIGNAL(activated(int)), SLOT(socketRead(int)));
-+ }
-+ }
-+ if (flags & DBUS_WATCH_WRITABLE) {
-+ qDebug("addWriteWatch %d", fd);
-+ watcher.watch = watch;
-+ if (QCoreApplication::instance()) {
-+ watcher.write = new QSocketNotifier(fd, QSocketNotifier::Write, d);
-+ watcher.write->setEnabled(dbus_watch_get_enabled(watch));
-+ d->connect(watcher.write, SIGNAL(activated(int)), SLOT(socketWrite(int)));
-+ }
-+ }
-+ d->watchers.insertMulti(fd, watcher);
-+
-+ return true;
-+}
-+
-+static void qDBusRemoveWatch(DBusWatch *watch, void *data)
-+{
-+ Q_ASSERT(watch);
-+ Q_ASSERT(data);
-+
-+ qDebug("remove watch");
-+
-+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
-+ int fd = dbus_watch_get_fd(watch);
-+
-+ QDBusConnectionPrivate::WatcherHash::iterator i = d->watchers.find(fd);
-+ while (i != d->watchers.end() && i.key() == fd) {
-+ if (i.value().watch == watch) {
-+ delete i.value().read;
-+ delete i.value().write;
-+ d->watchers.erase(i);
-+ return;
-+ }
-+ ++i;
-+ }
-+}
-+
-+static void qDBusToggleWatch(DBusWatch *watch, void *data)
-+{
-+ Q_ASSERT(watch);
-+ Q_ASSERT(data);
-+
-+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
-+ int fd = dbus_watch_get_fd(watch);
-+
-+ QDBusConnectionPrivate::WatcherHash::iterator i = d->watchers.find(fd);
-+ while (i != d->watchers.end() && i.key() == fd) {
-+ if (i.value().watch == watch) {
-+ bool enabled = dbus_watch_get_enabled(watch);
-+ int flags = dbus_watch_get_flags(watch);
-+
-+ qDebug("toggle watch %d to %d (write: %d, read: %d)", dbus_watch_get_fd(watch), enabled, flags & DBUS_WATCH_WRITABLE, flags & DBUS_WATCH_READABLE);
-+
-+ if (flags & DBUS_WATCH_READABLE && i.value().read)
-+ i.value().read->setEnabled(enabled);
-+ if (flags & DBUS_WATCH_WRITABLE && i.value().write)
-+ i.value().write->setEnabled(enabled);
-+ return;
-+ }
-+ ++i;
-+ }
-+}
-+
-+static void qDBusNewConnection(DBusServer *server, DBusConnection *c, void *data)
-+{
-+ Q_ASSERT(data); Q_ASSERT(server); Q_ASSERT(c);
-+
-+ qDebug("SERVER: GOT A NEW CONNECTION"); // TODO
-+}
-+
-+static DBusHandlerResult qDBusSignalFilter(DBusConnection *connection,
-+ DBusMessage *message, void *data)
-+{
-+ Q_ASSERT(data);
-+ Q_UNUSED(connection);
-+
-+ QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
-+ if (d->mode == QDBusConnectionPrivate::InvalidMode)
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+
-+ int msgType = dbus_message_get_type(message);
-+ bool handled = false;
-+
-+ QDBusMessage amsg = QDBusMessage::fromDBusMessage(message);
-+ qDebug() << "got message:" << amsg;
-+
-+ if (msgType == DBUS_MESSAGE_TYPE_SIGNAL) {
-+ handled = d->handleSignal(amsg);
-+ } else if (msgType == DBUS_MESSAGE_TYPE_METHOD_CALL) {
-+ handled = d->handleObjectCall(amsg);
-+ }
-+
-+ return handled ? DBUS_HANDLER_RESULT_HANDLED :
-+ DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static bool checkAsyncTag(const char *tag)
-+{
-+ if (!tag || !*tag)
-+ return false;
-+
-+ const char *p = strstr(tag, "async");
-+ if (p != NULL &&
-+ (p == tag || *(p-1) == ' ') &&
-+ (p[6] == '\0' || p[6] == ' '))
-+ return true;
-+
-+ p = strstr(tag, "Q_ASYNC");
-+ if (p != NULL &&
-+ (p == tag || *(p-1) == ' ') &&
-+ (p[8] == '\0' || p[8] == ' '))
-+ return true;
-+
-+ return false;
-+}
-+
-+static QList<QByteArray> splitParameters(const char *p)
-+{
-+ QList<QByteArray> retval;
-+ ++p;
-+ const char *e = p;
-+ while (*e != ')') {
-+ while (*e != ')' && *e != ',')
-+ ++e;
-+
-+ // found the end of this parameter
-+ retval += QByteArray(p, e - p);
-+
-+ if (*e != ')')
-+ p = ++e;
-+ }
-+ return retval;
-+}
-+
-+static bool typesMatch(int metaId, QVariant::Type variantType)
-+{
-+ if (metaId == (int)variantType)
-+ return true;
-+
-+ if (variantType == QVariant::Int && metaId == QMetaType::Short)
-+ return true;
-+
-+ if (variantType == QVariant::UInt && (metaId == QMetaType::UShort ||
-+ metaId == QMetaType::UChar))
-+ return true;
-+
-+ return false; // no match
-+}
-+
-+static int returnTypeId(const char *name)
-+{
-+ if (!name || !*name)
-+ return QMetaType::Void;
-+
-+ // force normalizedSignature to work for us
-+ QVarLengthArray<char, 32> buf(strlen(name) + 3);
-+ buf.append("_(", 2);
-+ buf.append(name, strlen(name));
-+ buf.append(')');
-+
-+ QByteArray normalized = QMetaObject::normalizedSignature( buf.data() );
-+ normalized.truncate(normalized.length() - 1);
-+ return QMetaType::type(normalized.constData() + 2);
-+}
-+
-+static int typeId(const char *type)
-+{
-+ int id = static_cast<int>( QVariant::nameToType(type) );
-+ if (id == QVariant::UserType)
-+ id = QMetaType::type(type);
-+
-+ switch (id) {
-+ case QVariant::Bool:
-+ case QVariant::Int:
-+ case QVariant::UInt:
-+ case QVariant::Char:
-+ case QMetaType::Short:
-+ case QMetaType::UShort:
-+ case QMetaType::UChar:
-+ case QVariant::LongLong:
-+ case QVariant::ULongLong:
-+ case QVariant::Double:
-+ case QVariant::String:
-+ case QVariant::Date:
-+ case QVariant::Time:
-+ case QVariant::DateTime:
-+ case QVariant::Map:
-+ case QVariant::StringList:
-+ case QVariant::ByteArray:
-+ case QVariant::List:
-+ return id;
-+
-+ default:
-+ if (id == qMetaTypeId<QDBusVariant>() || id == QDBusConnectionPrivate::messageMetaType)
-+ return id;
-+
-+ return 0; // invalid
-+ }
-+}
-+
-+
-+// calculates the metatypes for the method
-+// the slot must have the parameters in the following form:
-+// - zero or more value or const-ref parameters of any kind
-+// - zero or one const ref of QDBusMessage
-+// - zero or more non-const ref parameters
-+// No parameter may be a template.
-+// this function returns -1 if the parameters don't match the above form
-+// this function returns the number of *input* parameters, including the QDBusMessage one if any
-+// this function does not check the return type, so metaTypes[0] is always 0 and always present
-+// metaTypes.count() >= retval + 1 in all cases
-+//
-+// sig must be the normalised signature for the method
-+static int parametersForMethod(const QByteArray &sig, QList<int>& metaTypes)
-+{
-+ if (sig.indexOf('<') != -1) {
-+ qWarning("Could not parse the method '%s'", sig.constData());
-+ // there's no type with templates that we can handle
-+ return -1;
-+ }
-+
-+ int paren = sig.indexOf('(');
-+ QList<QByteArray> parameterTypes = splitParameters(sig.data() + paren);
-+ metaTypes.clear();
-+
-+ metaTypes.append(0); // return type
-+ int inputCount = 0;
-+ bool seenMessage = false;
-+ foreach (QByteArray type, parameterTypes) {
-+ if (type.endsWith('*')) {
-+ qWarning("Could not parse the method '%s'", sig.constData());
-+ // pointer?
-+ return -1;
-+ }
-+
-+ if (type.endsWith('&')) {
-+ type.truncate(type.length() - 1);
-+ int id = typeId(type);
-+ if (id == 0) {
-+ qWarning("Could not parse the method '%s'", sig.constData());
-+ // invalid type in method parameter list
-+ return -1;
-+ }
-+
-+ metaTypes.append( id );
-+
-+ if (metaTypes.last() == 0) {
-+ qWarning("Could not parse the method '%s'", sig.constData());
-+ // void?
-+ return -1;
-+ }
-+
-+ continue;
-+ }
-+
-+ if (seenMessage) { // && !type.endsWith('&')
-+ qWarning("Could not parse the method '%s'", sig.constData());
-+ // non-output parameters after message or after output params
-+ return -1; // not allowed
-+ }
-+
-+ int id = typeId(type);
-+ if (id == 0) {
-+ qWarning("Could not parse the method '%s'", sig.constData());
-+ // invalid type in method parameter list
-+ return -1;
-+ }
-+ metaTypes.append(id);
-+ ++inputCount;
-+
-+ if (id == QDBusConnectionPrivate::messageMetaType)
-+ seenMessage = true;
-+ }
-+
-+ return inputCount;
-+}
-+
-+static int findSlot(const QMetaObject *mo, const QByteArray &name, int flags,
-+ const QDBusTypeList &types, QList<int>& metaTypes, int &msgPos)
-+{
-+ // find the first slot
-+ const QMetaObject *super = mo;
-+ while (qstrcmp(super->className(), "QObject") != 0 &&
-+ qstrcmp(super->className(), "QDBusAbstractAdaptor") != 0)
-+ super = super->superClass();
-+
-+ int attributeMask = (flags & QDBusConnection::ExportNonScriptableSlots) ?
-+ 0 : QMetaMethod::Scriptable;
-+
-+ for (int idx = super->methodCount() ; idx <= mo->methodCount(); ++idx) {
-+ QMetaMethod mm = mo->method(idx);
-+
-+ // check access:
-+ if (mm.access() != QMetaMethod::Public)
-+ continue;
-+
-+ // check type:
-+ // unnecessary, since slots are never public:
-+ //if (mm.methodType() != QMetaMethod::Slot)
-+ // continue;
-+
-+ // check name:
-+ QByteArray sig = QMetaObject::normalizedSignature(mm.signature());
-+ int paren = sig.indexOf('(');
-+ if (paren != name.length() || !sig.startsWith( name ))
-+ continue;
-+
-+ int returnType = returnTypeId(mm.typeName());
-+ bool isAsync = checkAsyncTag(mm.tag());
-+
-+ // consistency check:
-+ if (isAsync && returnType != QMetaType::Void)
-+ continue;
-+
-+ int inputCount = parametersForMethod(sig, metaTypes);
-+ if (inputCount == -1)
-+ continue; // problem parsing
-+
-+ metaTypes[0] = returnType;
-+ msgPos = 0;
-+ if (inputCount > 0 &&
-+ metaTypes.at(inputCount) == QDBusConnectionPrivate::messageMetaType) {
-+ // no input parameters is allowed as long as the message meta type is there
-+ msgPos = inputCount;
-+ --inputCount;
-+ }
-+
-+ if (inputCount) {
-+ // try to match the parameters
-+ if (inputCount < types.count())
-+ continue; // not enough parameters
-+
-+ bool matches = true;
-+ int i;
-+ for (i = 0; i < types.count(); ++i)
-+ if ( !typesMatch(metaTypes.at(i + 1), types.at(i).qvariantType()) ) {
-+ matches = false;
-+ break;
-+ }
-+
-+ if (!matches)
-+ continue; // we didn't match them all
-+
-+ // consistency check:
-+ if (isAsync && metaTypes.count() > i + 1)
-+ continue;
-+ }
-+
-+ if (!msgPos && (mm.attributes() & attributeMask) != attributeMask)
-+ continue; // not exported
-+
-+ // if we got here, this slot matched
-+ return idx;
-+ }
-+
-+ // no slot matched
-+ return -1;
-+}
-+
-+bool QDBusConnectionPrivate::activateSignal(const QDBusConnectionPrivate::SignalHook& hook,
-+ const QDBusMessage &msg)
-+{
-+ // This is called by QDBusConnectionPrivate::handleSignal to deliver a signal
-+ // that was received from D-Bus
-+ //
-+ // Signals are delivered to slots if the parameters match
-+ // Slots can have less parameters than there are on the message
-+ // Slots can optionally have one final parameter that is a QDBusMessage
-+ // Slots receive read-only copies of the message (i.e., pass by value or by const-ref)
-+ return activateReply(hook.obj, hook.midx, hook.params, msg);
-+}
-+
-+bool QDBusConnectionPrivate::activateReply(QObject *object, int idx, const QList<int> &metaTypes,
-+ const QDBusMessage &msg)
-+{
-+ // This is called by qDBusResultReceived and is used to deliver the return value
-+ // of a remote function call.
-+ //
-+ // There is only one connection and it is specified by idx
-+ // The slot must have the same parameter types that the message does
-+ // The slot may have less parameters than the message
-+ // The slot may optionally have one final parameter that is QDBusMessage
-+ // The slot receives read-only copies of the message (i.e., pass by value or by const-ref)
-+ Q_ASSERT(object);
-+
-+ int n = metaTypes.count() - 1;
-+ if (metaTypes[n] == QDBusConnectionPrivate::messageMetaType)
-+ --n;
-+
-+ // check that types match
-+ for (int i = 0; i < n; ++i)
-+ if (!typesMatch(metaTypes.at(i + 1), msg.at(i).type()))
-+ return false; // no match
-+
-+ // we can deliver
-+ // prepare for the call
-+ CallDeliveryEvent *data = new CallDeliveryEvent;
-+ data->conn = this;
-+ data->object = object;
-+ data->flags = 0;
-+ data->message = msg;
-+ data->metaTypes = metaTypes;
-+ data->slotIdx = idx;
-+
-+ QCoreApplication::postEvent( this, data );
-+
-+ return true;
-+}
-+
-+bool QDBusConnectionPrivate::activateCall(QObject* object, int flags,
-+ const QDBusMessage &msg)
-+{
-+ // This is called by QDBusConnectionPrivate::handleObjectCall to place a call
-+ // to a slot on the object.
-+ //
-+ // The call is delivered to the first slot that matches the following conditions:
-+ // - has the same name as the message's target name
-+ // - ALL of the message's types are found in slot's parameter list
-+ // - optionally has one more parameter of type QDBusMessage
-+ // If none match, then the slot of the same name as the message target and with
-+ // the first type of QDBusMessage is delivered.
-+ //
-+ // Because the marshalling of D-Bus data into QVariant loses the information on
-+ // the original types, the message signature is used to determine the original type.
-+ // Aside from that, the "int" and "unsigned" types will be tried as well.
-+ //
-+ // The D-Bus specification requires that all MethodCall messages be replied to, unless the
-+ // caller specifically waived this requirement. This means that we inspect if the user slot
-+ // generated a reply and, if it didn't, we will. Obviously, if the user slot doesn't take a
-+ // QDBusMessage parameter, it cannot generate a reply.
-+ //
-+ // When a return message is generated, the slot's return type, if any, will be placed
-+ // in the message's first position. If there are non-const reference parameters to the
-+ // slot, they must appear at the end and will be placed in the subsequent message
-+ // positions.
-+
-+ Q_ASSERT(object);
-+
-+ QList<int> metaTypes;
-+ int idx;
-+ int msgPos;
-+
-+ {
-+ const QMetaObject *mo = object->metaObject();
-+ QDBusTypeList typeList(msg.signature().toUtf8());
-+
-+ // find a slot that matches according to the rules above
-+ idx = ::findSlot(mo, msg.name().toUtf8(), flags, typeList, metaTypes, msgPos);
-+ if (idx == -1)
-+ // no match
-+ return false;
-+ }
-+
-+ // found the slot to be called
-+ // prepare for the call:
-+ CallDeliveryEvent *call = new CallDeliveryEvent;
-+ call->conn = this;
-+
-+ // parameters:
-+ call->object = object;
-+ call->flags = flags;
-+ call->message = msg;
-+
-+ // save our state:
-+ call->metaTypes = metaTypes;
-+ call->slotIdx = idx;
-+
-+ QCoreApplication::postEvent( this, call );
-+
-+ // ready
-+ return true;
-+}
-+
-+void QDBusConnectionPrivate::deliverCall(const CallDeliveryEvent& data) const
-+{
-+ // resume state:
-+ const QList<int>& metaTypes = data.metaTypes;
-+ const QDBusMessage& msg = data.message;
-+
-+ QVarLengthArray<void *, 10> params;
-+ params.reserve(metaTypes.count());
-+
-+#if __BYTE_ORDER != __LITTLE_ENDIAN
-+ union integer
-+ {
-+ short s;
-+ unsigned short us;
-+ unsigned char uc;
-+ }
-+ QVarLengthArray<integer, 4> auxParameters;
-+#endif
-+ // let's create the parameter list
-+
-+ // first one is the return type -- add it below
-+ params.append(0);
-+
-+ // add the input parameters
-+ int i;
-+ for (i = 0; i < msg.count(); ++i) {
-+ int id = metaTypes[i + 1];
-+ if (id == QDBusConnectionPrivate::messageMetaType)
-+ break;
-+
-+#if __BYTE_ORDER == __LITTLE_ENDIAN
-+ params.append(const_cast<void *>( msg.at(i).constData() ));
-+#else
-+ if (id == msg.at(i).type())
-+ params.append(const_cast<void *>( msg.at(i).constData() ));
-+ else {
-+ // need some help
-+ integer aux;
-+ const QVariant &var = msg.at(i);
-+ if (id == QMetaType::Short)
-+ aux.s = var.toInt();
-+ else if (id == QMetaType::UShort)
-+ aux.us = var.toUInt();
-+ else
-+ aux.uc = var.toUInt();
-+ auxParameters.append(aux);
-+ params.append( &auxParameters[auxParameters.count()] );
-+ }
-+#endif
-+ }
-+
-+ bool takesMessage = false;
-+ if (metaTypes.count() > i + 1 && metaTypes[i + 1] == QDBusConnectionPrivate::messageMetaType) {
-+ params.append(const_cast<void*>(static_cast<const void*>(&msg)));
-+ takesMessage = true;
-+ ++i;
-+ }
-+
-+ // output arguments
-+ QVariantList outputArgs;
-+ void *null = 0;
-+ if (metaTypes[0] != QMetaType::Void) {
-+ QVariant arg(metaTypes[0], null);
-+ params.append( arg.data() );
-+ outputArgs.append( arg );
-+ }
-+ for ( ; i < metaTypes.count(); ++i) {
-+ QVariant arg(metaTypes[i], null);
-+ params.append( arg.data() );
-+ outputArgs.append( arg );
-+ }
-+
-+ // make call:
-+ bool fail;
-+ if (data.object.isNull())
-+ fail = true;
-+ else
-+ fail = data.object->qt_metacall(QMetaObject::InvokeMetaMethod,
-+ data.slotIdx, params.data()) >= 0;
-+
-+ // do we create a reply? Only if the caller is waiting for a reply and one hasn't been sent
-+ // yet.
-+ if (!msg.noReply() && !msg.wasRepliedTo()) {
-+ if (!fail) {
-+ // normal reply
-+ QDBusMessage reply = QDBusMessage::methodReply(msg);
-+ reply += outputArgs;
-+
-+ qDebug() << "Automatically sending reply:" << reply;
-+ send(reply);
-+ }
-+ else {
-+ // generate internal error
-+ QDBusMessage reply = QDBusMessage::error(msg, "com.trolltech.QtDBus.InternalError",
-+ "Failed to deliver message");
-+ qDebug("Internal error: Failed to deliver message");
-+ send(reply);
-+ }
-+ }
-+
-+ return;
-+}
-+
-+void QDBusConnectionPrivate::customEvent(QEvent *event)
-+{
-+ // nothing else should be sending custom events at us
-+ CallDeliveryEvent* call = static_cast<CallDeliveryEvent *>(event);
-+
-+ // self check:
-+ Q_ASSERT(call->conn == this);
-+
-+ deliverCall(*call);
-+}
-+
-+QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *parent)
-+ : QObject(parent), ref(1), mode(InvalidMode), connection(0), server(0)
-+{
-+ extern bool qDBusInitThreads();
-+ static const int msgType = registerMessageMetaType();
-+ static const bool threads = qDBusInitThreads();
-+
-+ Q_UNUSED(msgType);
-+ Q_UNUSED(threads);
-+
-+ dbus_error_init(&error);
-+}
-+
-+QDBusConnectionPrivate::~QDBusConnectionPrivate()
-+{
-+ Q_ASSERT(knownObjects.isEmpty());
-+
-+ if (dbus_error_is_set(&error))
-+ dbus_error_free(&error);
-+
-+ closeConnection();
-+
-+ KnownInterfacesHash::iterator it = knownInterfaces.begin();
-+ while (it != knownInterfaces.end()) {
-+ const QSharedDataPointer<QDBusIntrospection::Interface>& item = *it;
-+
-+ const_cast<QDBusIntrospection::Interface*>(item.constData())->ref.deref();
-+
-+ it = knownInterfaces.erase(it);
-+ }
-+}
-+
-+void QDBusConnectionPrivate::closeConnection()
-+{
-+ ConnectionMode oldMode = mode;
-+ mode = InvalidMode; // prevent reentrancy
-+ if (oldMode == ServerMode) {
-+ if (server) {
-+ dbus_server_disconnect(server);
-+ dbus_server_unref(server);
-+ server = 0;
-+ }
-+ } else if (oldMode == ClientMode) {
-+ if (connection) {
-+ dbus_connection_close(connection);
-+ // send the "close" message
-+ while (dbus_connection_dispatch(connection) == DBUS_DISPATCH_DATA_REMAINS)
-+ ;
-+ dbus_connection_unref(connection);
-+ connection = 0;
-+ }
-+ }
-+}
-+
-+bool QDBusConnectionPrivate::handleError()
-+{
-+ lastError = QDBusError(&error);
-+ if (dbus_error_is_set(&error))
-+ dbus_error_free(&error);
-+ return lastError.isValid();
-+}
-+
-+void QDBusConnectionPrivate::bindToApplication()
-+{
-+ // Yay, now that we have an application we are in business
-+ // Re-add all watchers
-+ WatcherHash oldWatchers = watchers;
-+ watchers.clear();
-+ QHashIterator<int, QDBusConnectionPrivate::Watcher> it(oldWatchers);
-+ while (it.hasNext()) {
-+ it.next();
-+ if (!it.value().read && !it.value().write) {
-+ qDBusAddWatch(it.value().watch, this);
-+ }
-+ }
-+
-+ // Re-add all timeouts
-+ while (!pendingTimeouts.isEmpty())
-+ qDBusAddTimeout(pendingTimeouts.takeFirst(), this);
-+}
-+
-+void QDBusConnectionPrivate::socketRead(int fd)
-+{
-+ QHashIterator<int, QDBusConnectionPrivate::Watcher> it(watchers);
-+ while (it.hasNext()) {
-+ it.next();
-+ if (it.key() == fd && it.value().read && it.value().read->isEnabled()) {
-+ if (!dbus_watch_handle(it.value().watch, DBUS_WATCH_READABLE))
-+ qDebug("OUT OF MEM");
-+ }
-+ }
-+ if (mode == ClientMode)
-+ while (dbus_connection_dispatch(connection) == DBUS_DISPATCH_DATA_REMAINS);
-+}
-+
-+void QDBusConnectionPrivate::socketWrite(int fd)
-+{
-+ QHashIterator<int, QDBusConnectionPrivate::Watcher> it(watchers);
-+ while (it.hasNext()) {
-+ it.next();
-+ if (it.key() == fd && it.value().write && it.value().write->isEnabled()) {
-+ if (!dbus_watch_handle(it.value().watch, DBUS_WATCH_WRITABLE))
-+ qDebug("OUT OF MEM");
-+ }
-+ }
-+}
-+
-+void QDBusConnectionPrivate::objectDestroyed(QObject *obj)
-+{
-+ ObjectHookHash::iterator it = objectHooks.begin();
-+ while (it != objectHooks.end()) {
-+ ObjectDataHash::iterator dit = it->begin();
-+ while (dit != it->end()) {
-+ if (static_cast<QObject *>(dit.value().obj) == obj)
-+ dit = it->erase(dit);
-+ else
-+ ++dit;
-+ }
-+
-+ if (it->isEmpty())
-+ it = objectHooks.erase(it);
-+ else
-+ ++it;
-+ }
-+
-+ SignalHookHash::iterator sit = signalHooks.begin();
-+ while (sit != signalHooks.end()) {
-+ if (static_cast<QObject *>(sit.value().obj) == obj)
-+ sit = signalHooks.erase(sit);
-+ else
-+ ++sit;
-+ }
-+ obj->disconnect(this);
-+}
-+
-+bool QDBusConnectionPrivate::activateAdaptor(QObject* object, int flags,
-+ const QDBusMessage &msg)
-+{
-+ // This is called by QDBusConnectionPrivate::handleObjectCall to place a call to a slot
-+ // on the object.
-+ //
-+ // The call is routed through the adaptor sub-objects
-+
-+ Q_ASSERT(object);
-+ flags |= QDBusConnection::ExportNonScriptableSlots;
-+
-+ const QObjectList& children = object->children();
-+ QObjectList::const_iterator child = children.begin(),
-+ end = children.end();
-+ for ( ; child != end; ++child) {
-+ // check if this is an adaptor
-+ if (!qobject_cast<QDBusAbstractAdaptor *>(*child))
-+ continue; // not adaptor
-+
-+ const QMetaObject *mo = (*child)->metaObject();
-+ int ciend = mo->classInfoCount();
-+ for (int i = 0; i < ciend; ++i) {
-+ QMetaClassInfo mci = mo->classInfo(i);
-+ if (strcmp(mci.name(), "DBus Interface") == 0 && *mci.value()) {
-+ // one interface.
-+ // is this it?
-+ if (msg.interface().isEmpty() || msg.interface() == mci.value())
-+ return activateCall(*child, flags, msg);
-+ }
-+ }
-+ }
-+ return false;
-+}
-+
-+int QDBusConnectionPrivate::registerMessageMetaType()
-+{
-+ int tp = messageMetaType = qRegisterMetaType<QDBusMessage>("QDBusMessage");
-+ return tp;
-+}
-+
-+int QDBusConnectionPrivate::findSlot(QObject* obj, const char *slotName, QList<int>& params)
-+{
-+ Q_ASSERT(slotName);
-+ QByteArray normalizedName = QMetaObject::normalizedSignature(slotName);
-+ int midx = obj->metaObject()->indexOfMethod(normalizedName);
-+ if (midx == -1) {
-+ qWarning("No such slot '%s' while connecting D-Bus", slotName);
-+ return -1;
-+ }
-+
-+ int inputCount = parametersForMethod(normalizedName, params);
-+ if ( inputCount == -1 || inputCount + 1 != params.count() )
-+ return -1; // failed to parse or invalid arguments or output arguments
-+
-+ return midx;
-+}
-+
-+bool QDBusConnectionPrivate::activateObject(const QDBusConnectionPrivate::ObjectData &hook,
-+ const QDBusMessage &msg)
-+{
-+ if (!hook.obj)
-+ return false; // object is gone
-+
-+ if (hook.flags & QDBusConnection::ExportAdaptors)
-+ return activateAdaptor(hook.obj, hook.flags, msg);
-+ else
-+ return activateCall(hook.obj, hook.flags, msg);
-+}
-+
-+bool QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg)
-+{
-+ ObjectHookHash::ConstIterator it = objectHooks.find(msg.path());
-+ if (it == objectHooks.constEnd())
-+ return false;
-+
-+ bool ok = false;
-+ const ObjectDataHash& hook = it.value();
-+ ObjectDataHash::ConstIterator hit;
-+ if (msg.interface().isEmpty()) {
-+ // we must go through all the objects and interfaces
-+
-+ for (hit = hook.begin(); hit != hook.end(); ++hit) {
-+ ok = activateObject(hit.value(), msg);
-+ if (ok)
-+ break; // processed
-+ }
-+ } else {
-+ // find the interface:
-+ hit = hook.find(msg.interface());
-+ if (hit != hook.end())
-+ ok = activateObject(hit.value(), msg);
-+
-+ if (!ok) {
-+ // try adaptors (or any interface)
-+ hit = hook.find(QString());
-+ if (hit != hook.end())
-+ ok = activateObject(hit.value(), msg);
-+ }
-+ }
-+
-+ qDebug(ok ? "Call scheduled" : "Call failed");
-+ return ok;
-+}
-+
-+bool QDBusConnectionPrivate::handleSignal(const QString &path, const QDBusMessage &msg)
-+{
-+ SignalHookHash::const_iterator it = signalHooks.find(path);
-+ qDebug("looking for: %s", path.toLocal8Bit().constData());
-+ qDebug() << signalHooks.keys();
-+ for ( ; it != signalHooks.constEnd() && it.key() == path; ++ it) {
-+ const SignalHook &hook = it.value();
-+ if ( hook.obj.isNull() )
-+ continue;
-+ if ( !hook.name.isEmpty() && hook.name != msg.name() )
-+ continue;
-+ if ( !hook.interface.isEmpty() && hook.interface != msg.interface() )
-+ continue;
-+ if ( !hook.signature.isEmpty() && hook.signature != msg.signature() )
-+ continue;
-+
-+ activateSignal(hook, msg);
-+ }
-+ return true;
-+}
-+
-+bool QDBusConnectionPrivate::handleSignal(const QDBusMessage& msg)
-+{
-+ // yes, it is a single "|" below...
-+ return handleSignal(QString(), msg) | handleSignal(msg.sender() + msg.path(), msg);
-+}
-+
-+static dbus_int32_t server_slot = -1;
-+
-+void QDBusConnectionPrivate::setServer(DBusServer *s)
-+{
-+ if (!server) {
-+ handleError();
-+ return;
-+ }
-+
-+ server = s;
-+ mode = ServerMode;
-+
-+ dbus_server_allocate_data_slot(&server_slot);
-+ if (server_slot < 0)
-+ return;
-+
-+ dbus_server_set_watch_functions(server, qDBusAddWatch, qDBusRemoveWatch,
-+ qDBusToggleWatch, this, 0); // ### check return type?
-+ dbus_server_set_timeout_functions(server, qDBusAddTimeout, qDBusRemoveTimeout,
-+ qDBusToggleTimeout, this, 0);
-+ dbus_server_set_new_connection_function(server, qDBusNewConnection, this, 0);
-+
-+ dbus_server_set_data(server, server_slot, this, 0);
-+}
-+
-+void QDBusConnectionPrivate::setConnection(DBusConnection *dbc)
-+{
-+ if (!dbc) {
-+ handleError();
-+ return;
-+ }
-+
-+ connection = dbc;
-+ mode = ClientMode;
-+
-+ dbus_connection_set_exit_on_disconnect(connection, false);
-+ dbus_connection_set_watch_functions(connection, qDBusAddWatch, qDBusRemoveWatch,
-+ qDBusToggleWatch, this, 0);
-+ dbus_connection_set_timeout_functions(connection, qDBusAddTimeout, qDBusRemoveTimeout,
-+ qDBusToggleTimeout, this, 0);
-+// dbus_bus_add_match(connection, "type='signal',interface='com.trolltech.dbus.Signal'", &error);
-+// dbus_bus_add_match(connection, "type='signal'", &error);
-+
-+ dbus_bus_add_match(connection, "type='signal'", &error);
-+ if (handleError()) {
-+ closeConnection();
-+ return;
-+ }
-+
-+ const char *service = dbus_bus_get_unique_name(connection);
-+ if (service) {
-+ QVarLengthArray<char, 56> filter;
-+ filter.append("destination='", 13);
-+ filter.append(service, qstrlen(service));
-+ filter.append("\'\0", 2);
-+
-+ dbus_bus_add_match(connection, filter.constData(), &error);
-+ if (handleError()) {
-+ closeConnection();
-+ return;
-+ }
-+ } else {
-+ qWarning("QDBusConnectionPrivate::SetConnection: Unable to get base service");
-+ }
-+
-+ dbus_connection_add_filter(connection, qDBusSignalFilter, this, 0);
-+
-+ qDebug("base service: %s", service);
-+}
-+
-+static void qDBusResultReceived(DBusPendingCall *pending, void *user_data)
-+{
-+ QDBusPendingCall *call = reinterpret_cast<QDBusPendingCall *>(user_data);
-+ QDBusConnectionPrivate *connection = const_cast<QDBusConnectionPrivate *>(call->connection);
-+ Q_ASSERT(call->pending == pending);
-+
-+ if (!call->receiver.isNull() && call->methodIdx != -1) {
-+ DBusMessage *reply = dbus_pending_call_steal_reply(pending);
-+ connection->activateReply(call->receiver, call->methodIdx, call->metaTypes,
-+ QDBusMessage::fromDBusMessage(reply));
-+ }
-+ dbus_pending_call_unref(pending);
-+ delete call;
-+}
-+
-+bool QDBusConnectionPrivate::send(const QDBusMessage& message) const
-+{
-+ DBusMessage *msg = message.toDBusMessage();
-+ if (!msg)
-+ return false;
-+
-+ dbus_message_set_no_reply(msg, true); // the reply would not be delivered to anything
-+
-+ qDebug() << "sending message:" << message;
-+ bool isOk = dbus_connection_send(connection, msg, 0);
-+ dbus_message_unref(msg);
-+ return isOk;
-+}
-+
-+int QDBusConnectionPrivate::sendWithReplyAsync(const QDBusMessage &message, QObject *receiver,
-+ const char *method) const
-+{
-+ DBusMessage *msg = message.toDBusMessage();
-+ if (!msg)
-+ return 0;
-+
-+ int slotIdx = -1;
-+ QList<int> metaTypes;
-+ if (receiver && method && *method)
-+ slotIdx = findSlot(receiver, method + 1, metaTypes);
-+
-+ qDebug() << "sending message:" << message;
-+ DBusPendingCall *pending = 0;
-+ if (dbus_connection_send_with_reply(connection, msg, &pending, message.timeout())) {
-+ if (slotIdx != -1) {
-+ QDBusPendingCall *pcall = new QDBusPendingCall;
-+ pcall->receiver = receiver;
-+ pcall->metaTypes = metaTypes;
-+ pcall->methodIdx = slotIdx;
-+ pcall->connection = this;
-+ pcall->pending = dbus_pending_call_ref(pending);
-+ dbus_pending_call_set_notify(pending, qDBusResultReceived, pcall, 0);
-+ }
-+ dbus_pending_call_unref(pending);
-+ return dbus_message_get_serial(msg);
-+ }
-+
-+ return 0;
-+}
-+
-+QSharedDataPointer<QDBusIntrospection::Interface>
-+QDBusConnectionPrivate::findInterface(const QString& name)
-+{
-+ QMutexLocker locker(&mutex);
-+ QSharedDataPointer<QDBusIntrospection::Interface> data = knownInterfaces.value(name);
-+ if (!data) {
-+ data = new QDBusIntrospection::Interface;
-+ data->name = name;
-+ data->ref.ref(); // don't delete
-+
-+ knownInterfaces.insert(name, data);
-+ }
-+ return data;
-+}
-+
-+QDBusIntrospection::Object*
-+QDBusConnectionPrivate::findObject(const QString& service, const QString& path)
-+{
-+ QMutexLocker locker(&mutex);
-+ QDBusIntrospection::Object* data = knownObjects.value(service + path);
-+ if (!data) {
-+ data = new QDBusIntrospection::Object;
-+ data->service = service;
-+ data->path = path;
-+
-+ knownObjects.insert(service + path, data);
-+ }
-+
-+ return data;
-+}
-+
-+void QDBusConnectionPrivate::disposeOfLocked(QDBusIntrospection::Object* p)
-+{
-+ if (p && !p->ref.deref()) { // ref--
-+ // no one else is using it
-+ // get rid of the reference
-+ QString objName = p->service + p->path;
-+
-+#ifndef QT_NO_DEBUG
-+ // debug code
-+ Q_ASSERT(p == knownObjects.take(objName));
-+#else
-+ // non-debug
-+ knownObjects.remove(objName);
-+#endif
-+
-+ // remove sub-objects too
-+ if (!objName.endsWith('/'))
-+ objName.append('/');
-+ foreach (QString subObjName, p->childObjects)
-+ disposeOfLocked(knownObjects.value(objName + subObjName));
-+
-+ delete p;
-+ }
-+}
-+
-+void QDBusConnectionPrivate::disposeOf(QDBusObjectPrivate* p)
-+{
-+ // We're called from QDBusConnectionPrivate's destructor
-+ // that means the object it represents is going out of scope
-+
-+ QMutexLocker locker(&mutex);
-+ disposeOfLocked( const_cast<QDBusIntrospection::Object*>(p->data) );
-+}
-+
-+void QDBusReplyWaiter::reply(const QDBusMessage &msg)
-+{
-+ replyMsg = msg;
-+ QTimer::singleShot(0, this, SLOT(quit()));
-+}
-diff -Naur dbus-0.61.orig/qt/qdbusinterface.cpp dbus-0.61/qt/qdbusinterface.cpp
---- dbus-0.61.orig/qt/qdbusinterface.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusinterface.cpp 2006-02-20 14:23:11.000000000 +0100
-@@ -0,0 +1,256 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusinterface.h"
-+#include "qdbusobject.h"
-+#include "qdbusstandardinterfaces.h"
-+
-+#include "qdbusinterface_p.h"
-+
-+QDBusInterface::QDBusInterface(QDBusInterfacePrivate* p)
-+ : d(p)
-+{
-+ d->ref.ref();
-+}
-+
-+QDBusInterface::QDBusInterface(const QDBusObject& obj, const QString& name)
-+ : d(0)
-+{
-+ *this = obj.connection().findInterface(obj.service(), obj.path(), name);
-+}
-+
-+QDBusInterface::QDBusInterface(QDBusConnection& conn, const QString& service, const QString& path,
-+ const QString& name)
-+ : d(0)
-+{
-+ *this = conn.findInterface(service, path, name);
-+}
-+
-+QDBusInterface::~QDBusInterface()
-+{
-+ if (!d->ref.deref())
-+ delete d;
-+}
-+
-+QDBusInterface& QDBusInterface::operator=(const QDBusInterface& other)
-+{
-+ other.d->ref.ref();
-+ QDBusInterfacePrivate* old = qAtomicSetPtr(&d, other.d);
-+ if (old && !old->ref.deref())
-+ delete old;
-+
-+ return *this;
-+}
-+
-+QDBusConnection QDBusInterface::connection() const
-+{
-+ return d->conn;
-+}
-+
-+QString QDBusInterface::service() const
-+{
-+ return d->service;
-+}
-+
-+QString QDBusInterface::path() const
-+{
-+ return d->path;
-+}
-+
-+QString QDBusInterface::interface() const
-+{
-+ return d->data->name;
-+}
-+
-+QString QDBusInterface::introspectionData() const
-+{
-+ d->introspect();
-+ return d->data->introspection;
-+}
-+
-+const QDBusIntrospection::Interface& QDBusInterface::interfaceData() const
-+{
-+ d->introspect();
-+ return *d->data;
-+}
-+
-+const QDBusIntrospection::Annotations& QDBusInterface::annotationData() const
-+{
-+ d->introspect();
-+ return d->data->annotations;
-+}
-+
-+const QDBusIntrospection::Methods& QDBusInterface::methodData() const
-+{
-+ d->introspect();
-+ return d->data->methods;
-+}
-+
-+const QDBusIntrospection::Signals& QDBusInterface::signalData() const
-+{
-+ d->introspect();
-+ return d->data->signals_;
-+}
-+
-+const QDBusIntrospection::Properties& QDBusInterface::propertyData() const
-+{
-+ d->introspect();
-+ return d->data->properties;
-+}
-+
-+QDBusMessage QDBusInterface::callWithArgs(const QDBusIntrospection::Method& method,
-+ const QList<QVariant>& a_args,
-+ CallMode mode)
-+{
-+ QString signature(""); // empty, not null
-+ QVariantList args = a_args;
-+
-+ if (!method.inputArgs.isEmpty())
-+ {
-+ // go over the list of parameters for the method
-+ QDBusIntrospection::Arguments::const_iterator it = method.inputArgs.begin(),
-+ end = method.inputArgs.end();
-+ int arg;
-+ for (arg = 0; it != end; ++it, ++arg)
-+ {
-+ // find the marshalled name for this type
-+ QString typeSig = QLatin1String(it->type.dbusSignature());
-+ signature += typeSig;
-+ }
-+ }
-+ else
-+ args.clear();
-+
-+ if (method.annotations.value(ANNOTATION_NO_WAIT, "false") == "true")
-+ mode = NoWaitForReply;
-+
-+ return callWithArgs(method.name, signature, args, mode);
-+}
-+
-+QDBusMessage QDBusInterface::callWithArgs(const QString& method, const QList<QVariant>& args,
-+ CallMode mode)
-+{
-+ QString m = method, sig;
-+ // split out the signature from the method
-+ int pos = method.indexOf('.');
-+ if (pos != -1) {
-+ m.truncate(pos);
-+ sig = method.mid(pos + 1);
-+ }
-+ return callWithArgs(m, sig, args, mode);
-+}
-+
-+QDBusMessage QDBusInterface::callWithArgs(const QString& method, const QString& signature,
-+ const QList<QVariant>& args, CallMode mode)
-+{
-+ QDBusMessage msg = QDBusMessage::methodCall(service(), path(), interface(), method, signature);
-+ msg.QList<QVariant>::operator=(args);
-+
-+ QDBusMessage reply;
-+ if (mode == WaitForReply)
-+ reply = d->conn.sendWithReply(msg);
-+ else
-+ d->conn.send(msg);
-+
-+ d->lastError = reply; // will clear if reply isn't an error
-+
-+ // ensure that there is at least one element
-+ if (reply.isEmpty())
-+ reply << QVariant();
-+
-+ return reply;
-+}
-+
-+bool QDBusInterface::connect(const QDBusIntrospection::Signal& sig, QObject* obj, const char *slot)
-+{
-+ QString signature(""); // empty, not null
-+
-+ if (!sig.outputArgs.isEmpty())
-+ {
-+ // go over the list of parameters for the method
-+ QDBusIntrospection::Arguments::const_iterator it = sig.outputArgs.begin(),
-+ end = sig.outputArgs.end();
-+ int arg;
-+ for (arg = 0; it != end; ++it, ++arg)
-+ {
-+ // find the marshalled name for this type
-+ QString typeSig = QLatin1String(it->type.dbusSignature());
-+ signature += typeSig;
-+ }
-+ }
-+
-+ return connect(sig.name, signature, obj, slot);
-+}
-+
-+bool QDBusInterface::connect(const QString& signalName, QObject* obj, const char *slot)
-+{
-+ QString s = signalName, sig;
-+ // split out the signature from the name
-+ int pos = signalName.indexOf('.');
-+ if (pos != -1) {
-+ s.truncate(pos);
-+ sig = signalName.mid(pos + 1);
-+ }
-+ return connect(s, sig, obj, slot);
-+}
-+
-+bool QDBusInterface::connect(const QString& signalName, const QString& signature,
-+ QObject* obj, const char *slot)
-+{
-+ return d->conn.connect(service(), path(), interface(), signalName, signature, obj, slot);
-+}
-+
-+QVariant QDBusInterface::propertyGet(const QDBusIntrospection::Property& prop)
-+{
-+ // sanity checking
-+ if (prop.access == QDBusIntrospection::Property::Write)
-+ return QVariant(); // write-only prop
-+
-+ QDBusPropertiesInterface pi(object());
-+ return pi.get(interface(), prop.name);
-+}
-+
-+QVariant QDBusInterface::propertyGet(const QString& propName)
-+{
-+ // can't do sanity checking
-+ QDBusPropertiesInterface pi(object());
-+ return pi.get(interface(), propName);
-+}
-+
-+void QDBusInterface::propertySet(const QDBusIntrospection::Property& prop, QVariant newValue)
-+{
-+ // sanity checking
-+ if (prop.access == QDBusIntrospection::Property::Read)
-+ return;
-+
-+ QDBusPropertiesInterface pi(object());
-+ pi.set(interface(), prop.name, newValue);
-+}
-+
-+void QDBusInterface::propertySet(const QString& propName, QVariant newValue)
-+{
-+ // can't do sanity checking
-+ QDBusPropertiesInterface pi(object());
-+ pi.set(interface(), propName, newValue);
-+}
-diff -Naur dbus-0.61.orig/qt/qdbusinterface.h dbus-0.61/qt/qdbusinterface.h
---- dbus-0.61.orig/qt/qdbusinterface.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusinterface.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,310 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSINTERFACE_H
-+#define QDBUSINTERFACE_H
-+
-+#include "qdbusmessage.h"
-+#include "qdbusobject.h"
-+#include "qdbusintrospection.h"
-+#include <QtCore/qstring.h>
-+#include <QtCore/qvariant.h>
-+#include <QtCore/qlist.h>
-+
-+class QDBusConnection;
-+
-+class QDBusInterfacePrivate;
-+/**
-+ * Base class for all DBUS interfaces in the QtDBUS binding.
-+ */
-+class QDBUS_EXPORT QDBusInterface
-+{
-+ friend class QDBusConnection;
-+
-+public:
-+ enum CallMode {
-+ WaitForReply,
-+ NoWaitForReply
-+ };
-+
-+public:
-+ /**
-+ * Construct an interface of the given name
-+ */
-+ QDBusInterface(const QDBusObject& obj, const QString& name);
-+
-+ /**
-+ * @overload.
-+ * Construct an interface of the given name
-+ */
-+ QDBusInterface(QDBusConnection& conn, const QString& service, const QString& path, const QString& name);
-+
-+ /**
-+ * Construct a copy of the interface.
-+ */
-+ QDBusInterface(const QDBusInterface&);
-+
-+ /**
-+ * Destructs this interface.
-+ */
-+ virtual ~QDBusInterface();
-+
-+ /**
-+ * Copy the interface.
-+ */
-+ QDBusInterface& operator=(const QDBusInterface&);
-+
-+ /**
-+ * Returns the object associated with this interface.
-+ */
-+ inline QDBusObject object()
-+ { return QDBusObject(*this); }
-+
-+ inline const QDBusObject object() const
-+ { return QDBusObject(*this); }
-+
-+ /**
-+ * Returns the connection this interface is on.
-+ */
-+ QDBusConnection connection() const;
-+
-+ /**
-+ * Returns the name of the service this interface is associated with.
-+ */
-+ QString service() const;
-+
-+ /**
-+ * Returns the object path that this interface is associated with.
-+ */
-+ QString path() const;
-+
-+ /**
-+ * Returns the name of this interface.
-+ */
-+ QString interface() const;
-+
-+ /**
-+ * Returns the introspection XML fragment data of this interface.
-+ */
-+ virtual QString introspectionData() const;
-+
-+ /**
-+ * Returns the interface data for this interface.
-+ */
-+ const QDBusIntrospection::Interface& interfaceData() const;
-+
-+ /**
-+ * Returns the annotations present in this interface, if any.
-+ */
-+ const QDBusIntrospection::Annotations& annotationData() const;
-+
-+ /**
-+ * List all methods in this interface.
-+ */
-+ const QDBusIntrospection::Methods& methodData() const;
-+
-+ /**
-+ * List all signals in this interface.
-+ */
-+ const QDBusIntrospection::Signals& signalData() const;
-+
-+ /**
-+ * List all properties in this interface.
-+ */
-+ const QDBusIntrospection::Properties& propertyData() const;
-+
-+ /**
-+ * Call the given method.
-+ */
-+ QDBusMessage callWithArgs(const QDBusIntrospection::Method& method,
-+ const QList<QVariant>& args = QList<QVariant>(),
-+ CallMode mode = WaitForReply);
-+
-+ /**
-+ * Call the given method.
-+ */
-+ QDBusMessage callWithArgs(const QString& method, const QList<QVariant>& args = QList<QVariant>(),
-+ CallMode mode = WaitForReply);
-+
-+ /**
-+ * Call the given method.
-+ */
-+ QDBusMessage callWithArgs(const QString& method, const QString& signature,
-+ const QList<QVariant>& args = QList<QVariant>(),
-+ CallMode mode = WaitForReply);
-+
-+ /**
-+ * Connects the DBUS signal to the given slot.
-+ */
-+ bool connect(const QDBusIntrospection::Signal&, QObject* obj, const char *slot);
-+
-+ /**
-+ * Connects the DBUS signal to the given slot.
-+ */
-+ bool connect(const QString& signalName, QObject* obj, const char *slot);
-+
-+ /**
-+ * Connects the DBUS signal to the given slot.
-+ */
-+ bool connect(const QString& signalName, const QString& signature,
-+ QObject* obj, const char *slot);
-+
-+ /**
-+ * Gets the value of the given property.
-+ */
-+ QVariant propertyGet(const QDBusIntrospection::Property&);
-+
-+ /**
-+ * Gets the value of the given property.
-+ */
-+ QVariant propertyGet(const QString& property);
-+
-+ /**
-+ * Sets the value of the given property.
-+ */
-+ void propertySet(const QDBusIntrospection::Property&, QVariant newValue);
-+
-+ /**
-+ * Sets the value of the given property.
-+ */
-+ void propertySet(const QString& property, QVariant newValue);
-+
-+ /**
-+ * Casts to QDBusObject.
-+ */
-+ inline operator QDBusObject()
-+ { return QDBusObject(*this); }
-+
-+ /**
-+ * Casts to const QDBusObject.
-+ */
-+ inline operator const QDBusObject() const
-+ { return QDBusObject(*this); }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType>
-+ inline QDBusMessage call(MethodType m)
-+ {
-+ return callWithArgs(m);
-+ }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType, typename T1>
-+ inline QDBusMessage call(MethodType m, T1 t1)
-+ {
-+ QList<QVariant> args;
-+ args << t1;
-+ return callWithArgs(m, args);
-+ }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType, typename T1, typename T2>
-+ inline QDBusMessage call(MethodType m, T1 t1, T2 t2)
-+ {
-+ QList<QVariant> args;
-+ args << t1 << t2;
-+ return callWithArgs(m, args);
-+ }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType, typename T1, typename T2, typename T3>
-+ inline QDBusMessage call(MethodType m, T1 t1, T2 t2, T3 t3)
-+ {
-+ QList<QVariant> args;
-+ args << t1 << t2 << t3;
-+ return callWithArgs(m, args);
-+ }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType, typename T1, typename T2, typename T3, typename T4>
-+ inline QDBusMessage call(MethodType m, T1 t1, T2 t2, T3 t3, T4 t4)
-+ {
-+ QList<QVariant> args;
-+ args << t1 << t2 << t3 << t4;
-+ return callWithArgs(m, args);
-+ }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType, typename T1, typename T2, typename T3, typename T4, typename T5>
-+ inline QDBusMessage call(MethodType m, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
-+ {
-+ QList<QVariant> args;
-+ args << t1 << t2 << t3 << t4 << t5;
-+ return callWithArgs(m, args);
-+ }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType, typename T1, typename T2, typename T3, typename T4, typename T5,
-+ typename T6>
-+ inline QDBusMessage call(MethodType m, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
-+ {
-+ QList<QVariant> args;
-+ args << t1 << t2 << t3 << t4 << t5 << t6;
-+ return callWithArgs(m, args);
-+ }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType, typename T1, typename T2, typename T3, typename T4, typename T5,
-+ typename T6, typename T7>
-+ inline QDBusMessage call(MethodType m, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
-+ {
-+ QList<QVariant> args;
-+ args << t1 << t2 << t3 << t4 << t5 << t6 << t7;
-+ return callWithArgs(m, args);
-+ }
-+
-+ /**
-+ * Call the given method.
-+ */
-+ template<typename MethodType, typename T1, typename T2, typename T3, typename T4, typename T5,
-+ typename T6, typename T7, typename T8>
-+ inline QDBusMessage call(MethodType m, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
-+ {
-+ QList<QVariant> args;
-+ args << t1 << t2 << t3 << t4 << t5 << t6 << t7 << t8;
-+ return callWithArgs(m, args);
-+ }
-+
-+private:
-+ QDBusInterface(QDBusInterfacePrivate*);
-+ QDBusInterfacePrivate *d;
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusinterface_p.h dbus-0.61/qt/qdbusinterface_p.h
---- dbus-0.61.orig/qt/qdbusinterface_p.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusinterface_p.h 2006-02-20 14:23:11.000000000 +0100
-@@ -0,0 +1,67 @@
-+/*
-+ *
-+ * Copyright (C) 2006 Thiago José Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+//
-+// W A R N I N G
-+// -------------
-+//
-+// This file is not part of the public API. This header file may
-+// change from version to version without notice, or even be
-+// removed.
-+//
-+// We mean it.
-+//
-+//
-+
-+#ifndef QDBUSINTERFACEPRIVATE_H
-+#define QDBUSINTERFACEPRIVATE_H
-+
-+#include "qdbusobject.h"
-+#include "qdbusinterface.h"
-+#include "qdbusconnection.h"
-+#include "qdbuserror.h"
-+
-+#define ANNOTATION_NO_WAIT "org.freedesktop.DBus.Method.NoReply"
-+
-+class QDBusInterfacePrivate
-+{
-+public:
-+ QAtomic ref;
-+ QDBusConnection conn;
-+ QString service;
-+ QString path;
-+ QDBusError lastError;
-+
-+ //QConstSharedDataPointer<QDBusIntrospection::Interface> data;
-+ const QDBusIntrospection::Interface* data;
-+
-+ inline bool needsIntrospection() const
-+ { return data->introspection.isNull(); }
-+
-+ inline void introspect()
-+ { if (needsIntrospection()) QDBusObject(conn, service, path).introspect(); }
-+};
-+
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusintrospection.cpp dbus-0.61/qt/qdbusintrospection.cpp
---- dbus-0.61.orig/qt/qdbusintrospection.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusintrospection.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,380 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusintrospection.h"
-+#include "qdbusxmlparser_p.h"
-+
-+/*!
-+ \class QDBusIntrospection
-+ \brief Information about introspected objects and interfaces on D-Bus.
-+
-+ This class provides structures and methods for parsing the XML introspection data for D-Bus.
-+ Normally, you don't have to use the methods provided here: QDBusInterface and QDBusObject will
-+ do that for you.
-+
-+ But they may prove useful if the XML data was obtained through other means (like parsing a file).
-+*/
-+
-+/*!
-+ \struct QDBusIntrospection::Argument
-+ \brief One argument to a D-Bus method or signal.
-+
-+ This struct represents one argument passed to a method or received from a method or signal in
-+ D-Bus. The struct does not contain information on the direction (input or output).
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Argument::type
-+ The argument type.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Argument::name
-+ The argument name. The argument name is optional, so this may be a null QString.
-+*/
-+
-+/*!
-+ \struct QDBusIntrospection::Method
-+ \brief Information about one method.
-+
-+ This struct represents one method discovered through introspection. A method is composed of
-+ its \a name, its input arguments, its output arguments, and, optionally, annotations. There are no
-+ "in-out" arguments.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Method::name
-+ The method's name.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Method::inputArgs
-+ A list of the method's input arguments.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Method::outputArgs
-+ A list of the method's output arguments (i.e., return values).
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Method::annotations
-+ The annotations associated with the method. Each annotation is a pair of strings, where the key
-+ is of the same format as a D-Bus interface name. The value is arbitrary.
-+*/
-+
-+/*!
-+ \struct QDBusIntrospection::Signal
-+ \brief Information about one signal.
-+
-+ This struct represents one signal discovered through introspection. A signal is composed of
-+ its \a name, its output arguments, and, optionally, annotations.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Signal::outputArgs
-+ A list of the signal's arguments.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Signal::annotations
-+ The annotations associated with the signal. Each annotation is a pair of strings, where the key
-+ is of the same format as a D-Bus interface name. The value is arbitrary.
-+*/
-+
-+/*!
-+ \struct QDBusIntrospection::Property
-+ \brief Information about one property.
-+
-+ This struct represents one property discovered through introspection. A property is composed of
-+ its \a name, its \a type, its \a access rights, and, optionally, annotations.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Property::name
-+ The property's name.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Property::type
-+ The property's type.
-+*/
-+
-+/*!
-+ \enum QDBusIntrospection::Property::Access
-+ The possible access rights for a property:
-+ - Read
-+ - Write
-+ - ReadWrite
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Property::access
-+ The property's access rights.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Property::annotations
-+ The annotations associated with the property. Each annotation is a pair of strings, where the key
-+ is of the same format as a D-Bus interface name. The value is arbitrary.
-+*/
-+
-+/*!
-+ \struct QDBusIntrospection::Interface
-+ \brief Information about one interface on the bus.
-+
-+ Each interface on D-Bus has an unique \a name, identifying where that interface was defined.
-+ Interfaces may have annotations, methods, signals and properties, but none are mandatory.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Interface::name
-+ The interface's name.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Interface::introspection
-+ The XML document fragment describing this interface.
-+
-+ If parsed again through parseInterface, the object returned should have the same contents as
-+ this object.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Interface::annotations
-+ The annotations associated with the interface. Each annotation is a pair of strings, where the key
-+ is of the same format as a D-Bus interface name. The value is arbitrary.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Interface::methods
-+ The methods available in this interface. Note that method names are not unique (i.e., methods
-+ can be overloaded with multiple arguments types).
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Interface::signals_
-+ The signals available in this interface. Note that signal names are not unique (i.e., signals
-+ can be overloaded with multiple argument types).
-+
-+ This member is called "signals_" because "signals" is a reserved keyword in Qt.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Interface::properties
-+ The properties available in this interface. Property names are unique.
-+*/
-+
-+/*!
-+ \struct QDBusIntrospection::Object
-+ \brief Information about one object on the bus.
-+
-+ An object on the D-Bus bus is represented by its service and path on the service but, unlike
-+ interfaces, objects are mutable. That is, their contents can change with time. Therefore,
-+ while the (service, path) pair uniquely identifies an object, the information contained in
-+ this struct may no longer represent the object.
-+
-+ An object can contain interfaces and child (sub) objects.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Object::service
-+ The object's service name.
-+
-+ \sa parseObject, parseObjectTree
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Object::path
-+ The object's path on the service. This is an absolute path.
-+
-+ \sa parseObject, parseObjectTree
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Object::introspection
-+ The XML document fragment describing this object, its interfaces and sub-objects at the time
-+ of the parsing.
-+
-+ The result of parseObject with this XML data should be the same as the Object struct.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Object::interfaces
-+ The list of interface names in this object.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::Object::childObjects
-+ The list of child object names in this object. Note that this is a relative name, not an
-+ absolute path. To obtain the absolute path, concatenate with \ref path.
-+*/
-+
-+/*!
-+ \struct QDBusIntrospection::ObjectTree
-+ \brief Complete information about one object node and its descendency.
-+ This struct contains the same data as QDBusIntrospection::Object, plus the actual data for the
-+ interfaces and child (sub) objects that was available in the XML document.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::ObjectTree::interfaceData
-+ A map of interfaces and their names.
-+*/
-+
-+/*!
-+ \var QDBusIntrospection::ObjectTree::childObjectData
-+ A map of object paths and their data. The map key contains the relative path to the object.
-+
-+ Note this map contains only the child notes that do have information about the sub-object's
-+ contents. If the XML data did not contain the information, only the object name will be listed
-+ in childObjects, but not in childObjectData.
-+*/
-+
-+/*!
-+ \typedef QDBusIntrospection::Annotations
-+ Contains a QMap of an annotation pair. The annotation's name is stored in the QMap key and
-+ must be unique. The annotation's value is stored in the QMap's value and is arbitrary.
-+*/
-+
-+/*!
-+ \typedef QDBusIntrospection::Arguments
-+ Contains a list of arguments to either a Method or a Signal. The arguments' order is important.
-+*/
-+
-+/*!
-+ \typedef QDBusIntrospection::Methods
-+ Contains a QMap of methods and their names. The method's name is stored in the map's key and
-+ is not necessarily unique. The order in which multiple methods with the same name are stored
-+ in this map is undefined.
-+*/
-+
-+/*!
-+ \typedef QDBusIntrospection::Signals
-+ Contains a QMap of signals and their names. The signal's name is stored in the map's key and
-+ is not necessarily unique. The order in which multiple signals with the same name are stored
-+ in this map is undefined.
-+*/
-+
-+/*!
-+ \typedef QDBusIntrospection::Properties
-+ Contains a QMap of properties and their names. Each property must have a unique name.
-+*/
-+
-+/*!
-+ \typedef QDBusIntrospection::Interfaces
-+ Contains a QMap of interfaces and their names. Each interface has a unique name.
-+*/
-+
-+/*!
-+ \typedef QDBusIntrospection::Objects
-+ Contains a QMap of objects and their paths relative to their immediate parent.
-+
-+ \sa parseObjectTree
-+*/
-+
-+/*!
-+ Parses the XML document fragment containing one interface.
-+
-+ The first element tag in this XML data must be either <node> or <interface>. If it is
-+ <node>, then the <interface> tag must be a child tag of the <node> one.
-+
-+ If there are multiple interfaces in this XML data, it is undefined which one will be
-+ returned.
-+
-+ \param xml the XML data to be parsed
-+ \returns the parsed interface
-+*/
-+QDBusIntrospection::Interface
-+QDBusIntrospection::parseInterface(const QString &xml)
-+{
-+ // be lazy
-+ Interfaces ifs = parseInterfaces(xml);
-+ if (ifs.isEmpty())
-+ return Interface();
-+
-+ // return the first in map order (probably alphabetical order)
-+ return *ifs.constBegin().value();
-+}
-+
-+/*!
-+ Parses the XML document fragment containing several interfaces.
-+
-+ If the first element tag in this document fragment is <node>, the interfaces parsed will
-+ be those found as child elements of the <node> tag.
-+
-+ \param xml the XML data to be parsed
-+ \returns the parsed interfaces
-+*/
-+QDBusIntrospection::Interfaces
-+QDBusIntrospection::parseInterfaces(const QString &xml)
-+{
-+ QDBusXmlParser parser(QString(), QString(), xml);
-+ return parser.interfaces();
-+}
-+
-+/*!
-+ Parses the XML document fragment containing one object.
-+
-+ The first element tag in this document must be <node>. If that tag does not contain
-+ a name attribute, the \a path argument will be used to determine the path of this
-+ object node.
-+
-+ This function does not parse the interfaces contained in the node, nor sub-object's contents.
-+ It will only list their names. If you need to know their contents, use parseObjectTree.
-+
-+ \param xml the XML data to be parsed
-+ \param service the service where this object is found
-+ \param path the absolute path to this node on the remote service
-+ \returns the parsed object
-+*/
-+QDBusIntrospection::Object
-+QDBusIntrospection::parseObject(const QString &xml, const QString &service, const QString &path)
-+{
-+ QDBusXmlParser parser(service, path, xml);
-+ QSharedDataPointer<QDBusIntrospection::Object> retval = parser.object();
-+ if (!retval)
-+ return QDBusIntrospection::Object();
-+ return *retval;
-+}
-+
-+/*!
-+ Parses the XML document fragment containing one object node and returns all the information
-+ about the interfaces and sub-objects.
-+
-+ The Objects map returned will contain the absolute path names in the key.
-+
-+ \param xml the XML data to be parsed
-+ \param service the service where this object is found
-+ \param path the absolute path to this node on the remote service
-+ \returns the parsed objects and interfaces
-+*/
-+QDBusIntrospection::ObjectTree
-+QDBusIntrospection::parseObjectTree(const QString &xml, const QString &service, const QString &path)
-+{
-+ QDBusXmlParser parser(service, path, xml);
-+ QSharedDataPointer<QDBusIntrospection::ObjectTree> retval = parser.objectTree();
-+ if (!retval)
-+ return QDBusIntrospection::ObjectTree();
-+ return *retval;
-+}
-diff -Naur dbus-0.61.orig/qt/qdbusintrospection.h dbus-0.61/qt/qdbusintrospection.h
---- dbus-0.61.orig/qt/qdbusintrospection.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusintrospection.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,148 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSINTROSPECTION_H
-+#define QDBUSINTROSPECTION_H
-+
-+#include <QtCore/qstring.h>
-+#include <QtCore/qlist.h>
-+#include <QtCore/qstringlist.h>
-+#include <QtCore/qmap.h>
-+#include <QtCore/qpair.h>
-+#include <QtCore/qshareddata.h>
-+#include "qdbustype.h"
-+#include "qdbusmacros.h"
-+
-+class QDBUS_EXPORT QDBusIntrospection
-+{
-+public:
-+ // forward declarations
-+ struct Argument;
-+ struct Method;
-+ struct Signal;
-+ struct Property;
-+ struct Interface;
-+ struct Object;
-+ struct ObjectTree;
-+
-+ // typedefs
-+ typedef QMap<QString, QString> Annotations;
-+ typedef QList<Argument> Arguments;
-+ typedef QMultiMap<QString, Method> Methods;
-+ typedef QMultiMap<QString, Signal> Signals;
-+ typedef QMap<QString, Property> Properties;
-+ typedef QMap<QString, QSharedDataPointer<Interface> > Interfaces;
-+ typedef QMap<QString, QSharedDataPointer<ObjectTree> > Objects;
-+
-+public:
-+ // the structs
-+
-+ struct Argument
-+ {
-+ QDBusType type;
-+ QString name;
-+
-+ inline bool operator==(const Argument& other) const
-+ { return name == other.name && type == other.type; }
-+ };
-+
-+ struct Method
-+ {
-+ QString name;
-+ Arguments inputArgs;
-+ Arguments outputArgs;
-+ Annotations annotations;
-+
-+ inline bool operator==(const Method& other) const
-+ { return name == other.name && annotations == other.annotations &&
-+ inputArgs == other.inputArgs && outputArgs == other.outputArgs; }
-+ };
-+
-+ struct Signal
-+ {
-+ QString name;
-+ Arguments outputArgs;
-+ Annotations annotations;
-+
-+ inline bool operator==(const Signal& other) const
-+ { return name == other.name && annotations == other.annotations &&
-+ outputArgs == other.outputArgs; }
-+ };
-+
-+ struct Property
-+ {
-+ enum Access { Read, Write, ReadWrite };
-+ QString name;
-+ QDBusType type;
-+ Access access;
-+ Annotations annotations;
-+
-+ inline bool operator==(const Property& other) const
-+ { return access == other.access && name == other.name &&
-+ annotations == other.annotations && type == other.type; }
-+ };
-+
-+ struct Interface: public QSharedData
-+ {
-+ QString name;
-+ QString introspection;
-+
-+ Annotations annotations;
-+ Methods methods;
-+ Signals signals_;
-+ Properties properties;
-+
-+ inline bool operator==(const Interface &other) const
-+ { return name == other.name; }
-+ };
-+
-+ struct Object: public QSharedData
-+ {
-+ QString service;
-+ QString path;
-+ QString introspection;
-+
-+ QStringList interfaces;
-+ QStringList childObjects;
-+ };
-+
-+ struct ObjectTree: public Object
-+ {
-+ Interfaces interfaceData;
-+ Objects childObjectData;
-+ };
-+
-+public:
-+ static Interface parseInterface(const QString &xml);
-+ static Interfaces parseInterfaces(const QString &xml);
-+ static Object parseObject(const QString &xml, const QString &service = QString(),
-+ const QString &path = QString());
-+ static ObjectTree parseObjectTree(const QString &xml,
-+ const QString &service,
-+ const QString &path);
-+
-+private:
-+ QDBusIntrospection();
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusmacros.h dbus-0.61/qt/qdbusmacros.h
---- dbus-0.61.orig/qt/qdbusmacros.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusmacros.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,36 @@
-+/* qdbusmessage.h QDBusMessage object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef QDBUSMACROS_H
-+#define QDBUSMACROS_H
-+
-+#include <QtCore/qglobal.h>
-+
-+#ifndef QDBUS_EXPORT
-+#ifdef QDBUS_MAKEDLL
-+# define QDBUS_EXPORT Q_DECL_EXPORT
-+#else
-+# define QDBUS_EXPORT Q_DECL_IMPORT
-+#endif
-+#endif
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusmarshall.cpp dbus-0.61/qt/qdbusmarshall.cpp
---- dbus-0.61.orig/qt/qdbusmarshall.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusmarshall.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,462 @@
-+/* qdbusmarshall.cpp
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusmarshall.h"
-+#include "qdbustype.h"
-+#include "qdbusvariant.h"
-+
-+#include <qdebug.h>
-+#include <qvariant.h>
-+#include <qlist.h>
-+#include <qmap.h>
-+#include <qstringlist.h>
-+#include <qvarlengtharray.h>
-+#include <qvector.h>
-+
-+#include <dbus/dbus.h>
-+
-+template <typename T>
-+inline T qIterGet(DBusMessageIter *it)
-+{
-+ T t;
-+ dbus_message_iter_get_basic(it, &t);
-+ return t;
-+}
-+
-+static QStringList qFetchStringList(DBusMessageIter *arrayIt)
-+{
-+ QStringList list;
-+
-+ DBusMessageIter it;
-+ dbus_message_iter_recurse(arrayIt, &it);
-+
-+ do {
-+ list.append(QString::fromUtf8(qIterGet<char *>(&it)));
-+ } while (dbus_message_iter_next(&it));
-+
-+ return list;
-+}
-+
-+static QVariant qFetchParameter(DBusMessageIter *it)
-+{
-+ switch (dbus_message_iter_get_arg_type(it)) {
-+ case DBUS_TYPE_BYTE:
-+ return qIterGet<unsigned char>(it);
-+ case DBUS_TYPE_INT16:
-+ return qIterGet<dbus_int16_t>(it);
-+ case DBUS_TYPE_UINT16:
-+ return qIterGet<dbus_uint16_t>(it);
-+ case DBUS_TYPE_INT32:
-+ return qIterGet<dbus_int32_t>(it);
-+ case DBUS_TYPE_UINT32:
-+ return qIterGet<dbus_uint32_t>(it);
-+ case DBUS_TYPE_DOUBLE:
-+ return qIterGet<double>(it);
-+ case DBUS_TYPE_BOOLEAN:
-+ return qIterGet<dbus_bool_t>(it);
-+ case DBUS_TYPE_INT64:
-+ return static_cast<qlonglong>(qIterGet<dbus_int64_t>(it));
-+ case DBUS_TYPE_UINT64:
-+ return static_cast<qulonglong>(qIterGet<dbus_uint64_t>(it));
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ case DBUS_TYPE_SIGNATURE:
-+ return QString::fromUtf8(qIterGet<char *>(it));
-+ case DBUS_TYPE_ARRAY: {
-+ int arrayType = dbus_message_iter_get_element_type(it);
-+ if (arrayType == DBUS_TYPE_STRING || arrayType == DBUS_TYPE_OBJECT_PATH ||
-+ arrayType == DBUS_TYPE_SIGNATURE) {
-+ return qFetchStringList(it);
-+ } else if (arrayType == DBUS_TYPE_BYTE) {
-+ DBusMessageIter sub;
-+ dbus_message_iter_recurse(it, &sub);
-+ int len = dbus_message_iter_get_array_len(&sub);
-+ char* data;
-+ dbus_message_iter_get_fixed_array(&sub,&data,&len);
-+ return QByteArray(data,len);
-+ } else if (arrayType == DBUS_TYPE_DICT_ENTRY) {
-+ // ### support other types of maps?
-+ QMap<QString, QVariant> map;
-+ DBusMessageIter sub;
-+
-+ dbus_message_iter_recurse(it, &sub);
-+ if (!dbus_message_iter_has_next(&sub))
-+ // empty map
-+ return map;
-+
-+ do {
-+ DBusMessageIter itemIter;
-+ dbus_message_iter_recurse(&sub, &itemIter);
-+ Q_ASSERT(dbus_message_iter_has_next(&itemIter));
-+ QString key = qFetchParameter(&itemIter).toString();
-+ dbus_message_iter_next(&itemIter);
-+ map.insertMulti(key, qFetchParameter(&itemIter));
-+ } while (dbus_message_iter_next(&sub));
-+ return map;
-+ }
-+ }
-+ // fall through
-+ // common handling for structs and lists
-+ case DBUS_TYPE_STRUCT: {
-+ QList<QVariant> list;
-+ DBusMessageIter sub;
-+ dbus_message_iter_recurse(it, &sub);
-+ if (!dbus_message_iter_has_next(&sub))
-+ return list;
-+ do {
-+ list.append(qFetchParameter(&sub));
-+ } while (dbus_message_iter_next(&sub));
-+ return list;
-+ }
-+ case DBUS_TYPE_VARIANT: {
-+ QDBusVariant dvariant;
-+ DBusMessageIter sub;
-+ dbus_message_iter_recurse(it, &sub);
-+ dvariant.type = QDBusType(dbus_message_iter_get_signature(&sub));
-+ dvariant.value = qFetchParameter(&sub);
-+ return qVariantFromValue(dvariant);
-+ }
-+
-+ default:
-+ qWarning("Don't know how to handle type %d '%c'", dbus_message_iter_get_arg_type(it), dbus_message_iter_get_arg_type(it));
-+ return QVariant();
-+ break;
-+ }
-+}
-+
-+void QDBusMarshall::messageToList(QList<QVariant> &list, DBusMessage *message)
-+{
-+ Q_ASSERT(message);
-+
-+ DBusMessageIter it;
-+ if (!dbus_message_iter_init(message, &it))
-+ return;
-+
-+ do {
-+ list.append(qFetchParameter(&it));
-+ } while (dbus_message_iter_next(&it));
-+}
-+
-+// convert the variant to the given type and return true if it worked.
-+// if the type is not known, guess it from the variant and set.
-+// return false if conversion failed.
-+static bool checkType(QVariant &var, QDBusType &type)
-+{
-+ if (!type.isValid()) {
-+ // guess it from the variant
-+ type = QDBusType::guessFromVariant(var);
-+ return true;
-+ }
-+
-+ // only catch the conversions that won't work
-+ // let QVariant do the hard work
-+
-+ // QVariant can't convert QDBusVariant:
-+ if (var.userType() == qMetaTypeId<QDBusVariant>()) {
-+ if (type.dbusType() == DBUS_TYPE_VARIANT)
-+ return true; // no change
-+
-+ // convert manually
-+ QDBusVariant dvariant = qvariant_cast<QDBusVariant>(var);
-+ var = dvariant.value;
-+ return checkType(var, type);
-+ }
-+
-+ if (type.dbusType() == DBUS_TYPE_VARIANT) {
-+ // variant can handle anything. Let it pass
-+ return true;
-+ }
-+
-+ switch (var.userType()) {
-+ case QMetaType::Short:
-+ case QMetaType::UShort:
-+ case QMetaType::UChar:
-+ case QVariant::Int:
-+ case QVariant::UInt:
-+ case QVariant::LongLong:
-+ case QVariant::ULongLong:
-+ case QVariant::Double:
-+ case QVariant::String:
-+ if (type.isBasic())
-+ // QVariant can handle this on its own
-+ return true;
-+
-+ // cannot handle this
-+ qWarning("Invalid conversion from %s to '%s'", var.typeName(),
-+ type.dbusSignature().constData());
-+ var.clear();
-+ return false;
-+
-+ case QVariant::ByteArray:
-+ // make sure it's an "ARRAY of BYTE"
-+ if (type.qvariantType() != QVariant::ByteArray) {
-+ qWarning("Invalid conversion from %s to '%s'", var.typeName(),
-+ type.dbusSignature().constData());
-+ var.clear();
-+ return false;
-+ }
-+ return true;
-+
-+ case QVariant::StringList:
-+ // make sure it's "ARRAY of STRING"
-+ if (type.qvariantType() != QVariant::StringList) {
-+ qWarning("Invalid conversion from %s to '%s'", var.typeName(),
-+ type.dbusSignature().constData());
-+ var.clear();
-+ return false;
-+ }
-+ return true;
-+
-+ case QVariant::List:
-+ // could be either struct or array
-+ if (type.dbusType() != DBUS_TYPE_ARRAY && type.dbusType() != DBUS_TYPE_STRUCT) {
-+ qWarning("Invalid conversion from %s to '%s'", var.typeName(),
-+ type.dbusSignature().constData());
-+ var.clear();
-+ return false;
-+ }
-+
-+ return true;
-+
-+ case QVariant::Map:
-+ if (!type.isMap()) {
-+ qWarning("Invalid conversion from %s to '%s'", var.typeName(),
-+ type.dbusSignature().constData());
-+ var.clear();
-+ return false;
-+ }
-+
-+ return true;
-+
-+ case QVariant::Invalid:
-+ // create an empty variant
-+ var.convert(type.qvariantType());
-+ break;
-+ }
-+
-+ qWarning("Found unknown QVariant type %d (%s) when converting to DBus", (int)var.type(),
-+ var.typeName());
-+ var.clear();
-+ return false;
-+}
-+
-+static void qVariantToIteratorInternal(DBusMessageIter *it, const QVariant &var,
-+ const QDBusType &type);
-+
-+static void qListToIterator(DBusMessageIter *it, const QList<QVariant> &list,
-+ const QDBusTypeList &list);
-+
-+template<typename T>
-+static void qIterAppend(DBusMessageIter *it, const QDBusType &type, T arg)
-+{
-+ dbus_message_iter_append_basic(it, type.dbusType(), &arg);
-+}
-+
-+static void qAppendArrayToMessage(DBusMessageIter *it, const QDBusType &subType,
-+ const QVariant &var)
-+{
-+ DBusMessageIter sub;
-+ dbus_message_iter_open_container(it, DBUS_TYPE_ARRAY, subType.dbusSignature(), &sub);
-+
-+ switch (var.type())
-+ {
-+ case QVariant::StringList: {
-+ const QStringList list = var.toStringList();
-+ foreach (QString str, list)
-+ qIterAppend(&sub, subType, str.toUtf8().constData());
-+ break;
-+ }
-+
-+ case QVariant::ByteArray: {
-+ const QByteArray array = var.toByteArray();
-+ const char* cdata = array.constData();
-+ dbus_message_iter_append_fixed_array(&sub, DBUS_TYPE_BYTE, &cdata, array.length());
-+ break;
-+ }
-+
-+ case QVariant::Map: {
-+ const QVariantMap map = var.toMap();
-+ const QDBusTypeList& subTypes = subType.subTypes();
-+ for (QMap<QString, QVariant>::const_iterator mit = map.constBegin();
-+ mit != map.constEnd(); ++mit) {
-+ DBusMessageIter itemIterator;
-+ dbus_message_iter_open_container(&sub, DBUS_TYPE_DICT_ENTRY, 0, &itemIterator);
-+
-+ // let the string be converted to QVariant
-+ qVariantToIteratorInternal(&itemIterator, mit.key(), subTypes[0]);
-+ qVariantToIteratorInternal(&itemIterator, mit.value(), subTypes[1]);
-+
-+ dbus_message_iter_close_container(&sub, &itemIterator);
-+ }
-+ break;
-+ }
-+
-+ case QVariant::List: {
-+ const QVariantList list = var.toList();
-+ foreach (QVariant v, list)
-+ qVariantToIteratorInternal(&sub, v, subType);
-+ break;
-+ }
-+
-+ default:
-+ qFatal("qAppendArrayToMessage got unknown type!");
-+ break;
-+ }
-+
-+ dbus_message_iter_close_container(it, &sub);
-+}
-+
-+static void qAppendStructToMessage(DBusMessageIter *it, const QDBusTypeList &typeList,
-+ const QVariantList &list)
-+{
-+ DBusMessageIter sub;
-+ dbus_message_iter_open_container(it, DBUS_TYPE_STRUCT, NULL, &sub);
-+ qListToIterator(&sub, list, typeList);
-+ dbus_message_iter_close_container(it, &sub);
-+}
-+
-+static void qAppendVariantToMessage(DBusMessageIter *it, const QDBusType & /* type */,
-+ const QVariant &var)
-+{
-+ QVariant v;
-+ QDBusType t;
-+
-+ if (var.userType() == qMetaTypeId<QDBusVariant>()) {
-+ QDBusVariant dvariant = qvariant_cast<QDBusVariant>(var);
-+ v = dvariant.value;
-+ t = dvariant.type;
-+ }
-+ else {
-+ v = var;
-+ t = QDBusType::guessFromVariant(v);
-+ }
-+
-+ // now add this variant
-+ DBusMessageIter sub;
-+ dbus_message_iter_open_container(it, DBUS_TYPE_VARIANT, t.dbusSignature(), &sub);
-+ qVariantToIteratorInternal(&sub, v, t);
-+ dbus_message_iter_close_container(it, &sub);
-+}
-+
-+static void qVariantToIterator(DBusMessageIter *it, QVariant var, QDBusType type)
-+{
-+ if (var.isNull() && !type.isValid())
-+ return; // cannot add a null like this
-+ if (!checkType(var, type))
-+ return; // type checking failed
-+
-+ qVariantToIteratorInternal(it, var, type);
-+}
-+
-+static void qVariantToIteratorInternal(DBusMessageIter *it, const QVariant &var,
-+ const QDBusType &type)
-+{
-+ switch (type.dbusType()) {
-+ case DBUS_TYPE_BYTE:
-+ qIterAppend( it, type, static_cast<unsigned char>(var.toUInt()) );
-+ break;
-+ case DBUS_TYPE_BOOLEAN:
-+ qIterAppend( it, type, static_cast<dbus_bool_t>(var.toBool()) );
-+ break;
-+ case DBUS_TYPE_INT16:
-+ qIterAppend( it, type, static_cast<dbus_int16_t>(var.toInt()) );
-+ break;
-+ case DBUS_TYPE_UINT16:
-+ qIterAppend( it, type, static_cast<dbus_uint16_t>(var.toUInt()) );
-+ break;
-+ case DBUS_TYPE_INT32:
-+ qIterAppend( it, type, static_cast<dbus_int32_t>(var.toInt()) );
-+ break;
-+ case DBUS_TYPE_UINT32:
-+ qIterAppend( it, type, static_cast<dbus_uint32_t>(var.toUInt()) );
-+ break;
-+ case DBUS_TYPE_INT64:
-+ qIterAppend( it, type, static_cast<dbus_int64_t>(var.toLongLong()) );
-+ break;
-+ case DBUS_TYPE_UINT64:
-+ qIterAppend( it, type, static_cast<dbus_uint64_t>(var.toULongLong()) );
-+ break;
-+ case DBUS_TYPE_DOUBLE:
-+ qIterAppend( it, type, var.toDouble() );
-+ break;
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ case DBUS_TYPE_SIGNATURE:
-+ qIterAppend( it, type, var.toString().toUtf8().constData() );
-+ break;
-+
-+ // compound types:
-+ case DBUS_TYPE_ARRAY:
-+ // could be many things
-+ qAppendArrayToMessage( it, type.arrayElement(), var );
-+ break;
-+
-+ case DBUS_TYPE_VARIANT:
-+ qAppendVariantToMessage( it, type, var );
-+ break;
-+
-+ case DBUS_TYPE_STRUCT:
-+ qAppendStructToMessage( it, type.subTypes(), var.toList() );
-+ break;
-+
-+ case DBUS_TYPE_DICT_ENTRY:
-+ qFatal("qVariantToIterator got a DICT_ENTRY!");
-+ break;
-+
-+ default:
-+ qWarning("Found unknown DBus type '%s'", type.dbusSignature().constData());
-+ break;
-+ }
-+}
-+
-+void qListToIterator(DBusMessageIter *it, const QList<QVariant> &list)
-+{
-+ for (int i = 0; i < list.count(); ++i)
-+ qVariantToIterator(it, list.at(i), QDBusType());
-+}
-+
-+void qListToIterator(DBusMessageIter *it, const QList<QVariant> &list, const QDBusTypeList &types)
-+{
-+ int min = qMin(list.count(), types.count());
-+ for (int i = 0; i < min; ++i)
-+ qVariantToIterator(it, list.at(i), types.at(i));
-+
-+ for (int i = min; i < types.count(); ++i)
-+ // we're missing a few arguments, so add default parameters
-+ qVariantToIterator(it, QVariant(), types.at(i));
-+}
-+
-+void QDBusMarshall::listToMessage(const QList<QVariant> &list, DBusMessage *msg,
-+ const QString &signature)
-+{
-+ Q_ASSERT(msg);
-+ DBusMessageIter it;
-+ dbus_message_iter_init_append(msg, &it);
-+
-+ if (signature.isEmpty())
-+ qListToIterator(&it, list);
-+ else
-+ qListToIterator(&it, list, QDBusTypeList(signature.toUtf8()));
-+}
-+
-diff -Naur dbus-0.61.orig/qt/qdbusmarshall.h dbus-0.61/qt/qdbusmarshall.h
---- dbus-0.61.orig/qt/qdbusmarshall.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusmarshall.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,42 @@
-+/* qdbusmarshall.h QDBusMarshall object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSMARSHALL_H
-+#define QDBUSMARSHALL_H
-+
-+struct DBusMessage;
-+
-+template <typename T> class QList;
-+class QVariant;
-+class QString;
-+
-+class QDBusMarshall
-+{
-+public:
-+ static void listToMessage(const QList<QVariant> &list, DBusMessage *message,
-+ const QString& signature);
-+ static void messageToList(QList<QVariant> &list, DBusMessage *message);
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusmessage.cpp dbus-0.61/qt/qdbusmessage.cpp
---- dbus-0.61.orig/qt/qdbusmessage.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusmessage.cpp 2006-02-20 14:23:11.000000000 +0100
-@@ -0,0 +1,494 @@
-+/* qdbusmessage.cpp
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusmessage.h"
-+
-+#include <qdebug.h>
-+#include <qstringlist.h>
-+
-+#include <dbus/dbus.h>
-+
-+#include "qdbusmarshall.h"
-+#include "qdbuserror.h"
-+#include "qdbusmessage_p.h"
-+
-+QDBusMessagePrivate::QDBusMessagePrivate(QDBusMessage *qq)
-+ : msg(0), reply(0), q(qq), type(DBUS_MESSAGE_TYPE_INVALID), timeout(-1), ref(1),
-+ repliedTo(false)
-+{
-+}
-+
-+QDBusMessagePrivate::~QDBusMessagePrivate()
-+{
-+ if (msg)
-+ dbus_message_unref(msg);
-+ if (reply)
-+ dbus_message_unref(reply);
-+}
-+
-+///////////////
-+/*!
-+ \class QDBusMessage
-+ \brief Represents one message sent or received over the DBus bus.
-+
-+ This object can represent any of four different types of messages possible on the bus
-+ (see MessageType)
-+ - Method calls
-+ - Method return values
-+ - Signal emissions
-+ - Error codes
-+
-+ Objects of this type are created with the four static functions signal, methodCall,
-+ methodReply and error.
-+*/
-+
-+/*!
-+ Constructs a new DBus message representing a signal emission. A DBus signal is emitted
-+ from one application and is received by all applications that are listening for that signal
-+ from that interface.
-+
-+ \param path the path of the object that is emitting the signal
-+ \param interface the interface that is emitting the signal
-+ \param name the name of the signal (a.k.a. method name)
-+ \returns a QDBusMessage object that can be sent with with QDBusConnection::send
-+*/
-+QDBusMessage QDBusMessage::signal(const QString &path, const QString &interface,
-+ const QString &name)
-+{
-+ QDBusMessage message;
-+ message.d->type = DBUS_MESSAGE_TYPE_SIGNAL;
-+ message.d->path = path;
-+ message.d->interface = interface;
-+ message.d->name = name;
-+
-+ return message;
-+}
-+
-+/*!
-+ Constructs a new DBus message representing a method call. A method call always informs
-+ its destination address (service, path, interface and method).
-+
-+ The DBus bus allows calling a method on a given remote object without specifying the
-+ destination interface, if the method name is unique. However, if two interfaces on the
-+ remote object export the same method name, the result is undefined (one of the two may be
-+ called or an error may be returned).
-+
-+ When using DBus in a peer-to-peer context (i.e., not on a bus), the service parameter is
-+ optional.
-+
-+ Optionally, a signature parameter can be passed, indicating the type of the parameters to
-+ be marshalled over the bus. If there are more arguments thanentries in the signature, the
-+ tailing arguments will be silently dropped and not sent. If there are less arguments,
-+ default values will be inserted (default values are those created by QVariant::convert
-+ when a variant of type QVariant::Invalid is converted to the type).
-+
-+ The QDBusObject and QDBusInterface classes provide a simpler abstraction to synchronous
-+ method calling.
-+
-+ \param service the remote service to be called (can be a well-known name, a bus
-+ address or null)
-+ \param path the path of the object on the remote service to be called
-+ \param interface the remote interface that is wanted (can be null)
-+ \param method the remote method to be called (a.k.a., name)
-+ \param sig the DBus signature (set to null to discard processing and guess the
-+ method signature from the arguments; empty means no arguments)
-+ \returns a QDBusMessage object that can be sent with QDBusConnection::send,
-+ QDBusConnection::sendWithReply, or QDBusConnection::sendWithReplyAsync
-+*/
-+QDBusMessage QDBusMessage::methodCall(const QString &service, const QString &path,
-+ const QString &interface, const QString &method,
-+ const QString &sig)
-+{
-+ QDBusMessage message;
-+ message.d->type = DBUS_MESSAGE_TYPE_METHOD_CALL;
-+ message.d->service = service;
-+ message.d->path = path;
-+ message.d->interface = interface;
-+ message.d->name = method;
-+ message.d->signature = sig;
-+
-+ return message;
-+}
-+
-+/*!
-+ Constructs a new DBus message representing the return values from a called method.
-+
-+ \param other the method call DBus message that this is a reply to
-+ \returns a QDBusMessage object that can be sent with QDBusConnection::send
-+*/
-+QDBusMessage QDBusMessage::methodReply(const QDBusMessage &other)
-+{
-+ Q_ASSERT(other.d->msg);
-+
-+ QDBusMessage message;
-+ message.d->type = DBUS_MESSAGE_TYPE_METHOD_RETURN;
-+ message.d->reply = dbus_message_ref(other.d->msg);
-+ other.d->repliedTo = true;
-+
-+ return message;
-+}
-+
-+/*!
-+ Constructs a DBus message representing an error condition.
-+
-+ \param other the QDBusMessage object that generated this error
-+ \param name the DBus error name (error names must follow the same convention that
-+ interface names do)
-+ \param msg the error message
-+ \return a QDBusMessage object that can be sent with QDBusMessage::send
-+*/
-+QDBusMessage QDBusMessage::error(const QDBusMessage &other, const QString &name,
-+ const QString &msg)
-+{
-+ Q_ASSERT(other.d->msg);
-+
-+ QDBusMessage message;
-+ message.d->type = DBUS_MESSAGE_TYPE_ERROR;
-+ message.d->name = name;
-+ message.d->message = msg;
-+ message.d->reply = dbus_message_ref(other.d->msg);
-+ other.d->repliedTo = true;
-+
-+ return message;
-+}
-+
-+/*!
-+ \overload
-+ Constructs a DBus message representing an error condition.
-+
-+ \param other the QDBusMessage object that generated this error
-+ \param error the QDBusError object representing this error
-+ \return a QDBusMessage object that can be sent with QDBusMessage::send
-+*/
-+QDBusMessage QDBusMessage::error(const QDBusMessage &other, const QDBusError &error)
-+{
-+ Q_ASSERT(other.d->msg);
-+
-+ QDBusMessage message;
-+ message.d->type = DBUS_MESSAGE_TYPE_ERROR;
-+ message.d->name = error.name();
-+ message.d->message = error.message();
-+ message.d->reply = dbus_message_ref(other.d->msg);
-+ other.d->repliedTo = true;
-+
-+ return message;
-+}
-+
-+/*!
-+ Constructs an empty, invalid QDBusMessage object.
-+
-+ \sa methodCall, methodReply, signal, error
-+*/
-+QDBusMessage::QDBusMessage()
-+{
-+ d = new QDBusMessagePrivate(this);
-+}
-+
-+/*!
-+ Constructs a copy of the other object.
-+*/
-+QDBusMessage::QDBusMessage(const QDBusMessage &other)
-+ : QList<QVariant>(other)
-+{
-+ d = other.d;
-+ d->ref.ref();
-+}
-+
-+/*!
-+ Disposes of the object and frees any resources that were being held.
-+*/
-+QDBusMessage::~QDBusMessage()
-+{
-+ if (!d->ref.deref())
-+ delete d;
-+}
-+
-+/*!
-+ Copies the contents of the other object.
-+*/
-+QDBusMessage &QDBusMessage::operator=(const QDBusMessage &other)
-+{
-+ QList<QVariant>::operator=(other);
-+ qAtomicAssign(d, other.d);
-+ return *this;
-+}
-+
-+/*!
-+ \internal
-+ Constructs a DBusMessage object from this object. The returned value must be de-referenced
-+ with dbus_message_unref.
-+*/
-+DBusMessage *QDBusMessage::toDBusMessage() const
-+{
-+ DBusMessage *msg = 0;
-+
-+ switch (d->type) {
-+ case DBUS_MESSAGE_TYPE_METHOD_CALL:
-+ msg = dbus_message_new_method_call(d->service.toUtf8().constData(),
-+ d->path.toUtf8().constData(), d->interface.toUtf8().constData(),
-+ d->name.toUtf8().constData());
-+ break;
-+ case DBUS_MESSAGE_TYPE_SIGNAL:
-+ msg = dbus_message_new_signal(d->path.toUtf8().constData(),
-+ d->interface.toUtf8().constData(), d->name.toUtf8().constData());
-+ break;
-+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
-+ msg = dbus_message_new_method_return(d->reply);
-+ break;
-+ case DBUS_MESSAGE_TYPE_ERROR:
-+ msg = dbus_message_new_error(d->reply, d->name.toUtf8().constData(),
-+ d->message.toUtf8().constData());
-+ break;
-+ }
-+ if (!msg)
-+ return 0;
-+
-+ QDBusMarshall::listToMessage(*this, msg, d->signature);
-+ return msg;
-+}
-+
-+/*!
-+ \internal
-+ Constructs a QDBusMessage by parsing the given DBusMessage object.
-+*/
-+QDBusMessage QDBusMessage::fromDBusMessage(DBusMessage *dmsg)
-+{
-+ QDBusMessage message;
-+ if (!dmsg)
-+ return message;
-+
-+ message.d->type = dbus_message_get_type(dmsg);
-+ message.d->path = QString::fromUtf8(dbus_message_get_path(dmsg));
-+ message.d->interface = QString::fromUtf8(dbus_message_get_interface(dmsg));
-+ message.d->name = message.d->type == DBUS_MESSAGE_TYPE_ERROR ?
-+ QString::fromUtf8(dbus_message_get_error_name(dmsg)) :
-+ QString::fromUtf8(dbus_message_get_member(dmsg));
-+ message.d->service = QString::fromUtf8(dbus_message_get_sender(dmsg));
-+ message.d->signature = QString::fromUtf8(dbus_message_get_signature(dmsg));
-+ message.d->msg = dbus_message_ref(dmsg);
-+
-+ QDBusMarshall::messageToList(message, dmsg);
-+ return message;
-+}
-+
-+/*!
-+ Creates a QDBusMessage that represents the same error as the QDBusError object.
-+*/
-+QDBusMessage QDBusMessage::fromError(const QDBusError &error)
-+{
-+ QDBusMessage message;
-+ message.d->type = DBUS_MESSAGE_TYPE_ERROR;
-+ message.d->name = error.name();
-+ message << error.message();
-+ return message;
-+}
-+
-+/*!
-+ Returns the path of the object that this message is being sent to (in the case of a
-+ method call) or being received from (for a signal).
-+*/
-+QString QDBusMessage::path() const
-+{
-+ return d->path;
-+}
-+
-+/*!
-+ Returns the interface of the method being called (in the case of a method call) or of
-+ the signal being received from.
-+*/
-+QString QDBusMessage::interface() const
-+{
-+ return d->interface;
-+}
-+
-+/*!
-+ Returns the name of the signal that was emitted or the name of the error that was
-+ received.
-+ \sa member
-+*/
-+QString QDBusMessage::name() const
-+{
-+ return d->name;
-+}
-+
-+/*!
-+ \fn QDBusMessage::member
-+ Returns the name of the method being called.
-+*/
-+
-+/*!
-+ \fn QDBusMessage::method
-+ \overload
-+ Returns the name of the method being called.
-+*/
-+
-+/*!
-+ Returns the name of the service or the bus address of the remote method call.
-+*/
-+QString QDBusMessage::service() const
-+{
-+ return d->service;
-+}
-+
-+/*!
-+ \fn QDBusMessage::sender
-+ Returns the unique name of the remote sender.
-+*/
-+
-+/*!
-+ Returns the timeout (in milliseconds) for this message to be processed.
-+*/
-+int QDBusMessage::timeout() const
-+{
-+ return d->timeout;
-+}
-+
-+/*!
-+ Sets the timeout for this message to be processed.
-+
-+ \param ms the time, in milliseconds
-+*/
-+void QDBusMessage::setTimeout(int ms)
-+{
-+ d->timeout = ms;
-+}
-+
-+/*!
-+ Returns the flag that indicates if this message should see a reply or not. This is only
-+ meaningful for MethodCall messages: any other kind of message cannot have replies and this
-+ function will always return false for them.
-+*/
-+bool QDBusMessage::noReply() const
-+{
-+ if (!d->msg)
-+ return false;
-+ return dbus_message_get_no_reply(d->msg);
-+}
-+
-+/*!
-+ Sets the flag that indicates whether we're expecting a reply from the callee. This flag only
-+ makes sense for MethodCall messages.
-+
-+ \param enable whether to enable the flag (i.e., we are not expecting a reply)
-+*/
-+void QDBusMessage::setNoReply(bool enable)
-+{
-+ if (d->msg)
-+ dbus_message_set_no_reply(d->msg, enable);
-+}
-+
-+/*!
-+ Returns the unique serial number assigned to this message
-+ or 0 if the message was not sent yet.
-+ */
-+int QDBusMessage::serialNumber() const
-+{
-+ if (!d->msg)
-+ return 0;
-+ return dbus_message_get_serial(d->msg);
-+}
-+
-+/*!
-+ Returns the unique serial number assigned to the message
-+ that triggered this reply message.
-+
-+ If this message is not a reply to another message, 0
-+ is returned.
-+
-+ */
-+int QDBusMessage::replySerialNumber() const
-+{
-+ if (!d->msg)
-+ return 0;
-+ return dbus_message_get_reply_serial(d->msg);
-+}
-+
-+/*!
-+ Returns true if this is a MethodCall message and a reply for it has been generated using
-+ QDBusMessage::methodReply or QDBusMessage::error.
-+*/
-+bool QDBusMessage::wasRepliedTo() const
-+{
-+ return d->repliedTo;
-+}
-+
-+/*!
-+ Returns the signature of the signal that was received or for the output arguments
-+ of a method call.
-+*/
-+QString QDBusMessage::signature() const
-+{
-+ return d->signature;
-+}
-+
-+/*!
-+ Returns the message type.
-+*/
-+QDBusMessage::MessageType QDBusMessage::type() const
-+{
-+ switch (d->type) {
-+ case DBUS_MESSAGE_TYPE_METHOD_CALL:
-+ return MethodCallMessage;
-+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
-+ return ReplyMessage;
-+ case DBUS_MESSAGE_TYPE_ERROR:
-+ return ErrorMessage;
-+ case DBUS_MESSAGE_TYPE_SIGNAL:
-+ return SignalMessage;
-+ default:
-+ return InvalidMessage;
-+ }
-+}
-+
-+#ifndef QT_NO_DEBUG
-+QDebug operator<<(QDebug dbg, QDBusMessage::MessageType t)
-+{
-+ switch (t)
-+ {
-+ case QDBusMessage::MethodCallMessage:
-+ return dbg << "MethodCall";
-+ case QDBusMessage::ReplyMessage:
-+ return dbg << "MethodReturn";
-+ case QDBusMessage::SignalMessage:
-+ return dbg << "Signal";
-+ case QDBusMessage::ErrorMessage:
-+ return dbg << "Error";
-+ default:
-+ return dbg << "Invalid";
-+ }
-+}
-+
-+QDebug operator<<(QDebug dbg, const QDBusMessage &msg)
-+{
-+ dbg.nospace() << "QDBusMessage(type=" << msg.type()
-+ << ", service=" << msg.service()
-+ << ", path=" << msg.path()
-+ << ", interface=" << msg.interface()
-+ << ", name=" << msg.name()
-+ << ", signature=" << msg.signature()
-+ << ", contents=" << static_cast<QList<QVariant> >(msg) << ")";
-+ return dbg.space();
-+}
-+#endif
-+
-diff -Naur dbus-0.61.orig/qt/qdbusmessage.h dbus-0.61/qt/qdbusmessage.h
---- dbus-0.61.orig/qt/qdbusmessage.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusmessage.h 2006-02-20 14:23:11.000000000 +0100
-@@ -0,0 +1,96 @@
-+/* qdbusmessage.h QDBusMessage object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSMESSAGE_H
-+#define QDBUSMESSAGE_H
-+
-+#include "qdbusmacros.h"
-+#include <QtCore/qlist.h>
-+#include <QtCore/qvariant.h>
-+
-+#include <limits.h>
-+
-+class QDBusMessagePrivate;
-+class QDBusError;
-+struct DBusMessage;
-+
-+class QDBUS_EXPORT QDBusMessage: public QList<QVariant>
-+{
-+ friend class QDBusConnection;
-+public:
-+ enum { DefaultTimeout = -1, NoTimeout = INT_MAX};
-+ enum MessageType { InvalidMessage, MethodCallMessage, ReplyMessage,
-+ ErrorMessage, SignalMessage };
-+
-+ QDBusMessage();
-+ QDBusMessage(const QDBusMessage &other);
-+ ~QDBusMessage();
-+
-+ QDBusMessage &operator=(const QDBusMessage &other);
-+
-+ static QDBusMessage signal(const QString &path, const QString &interface,
-+ const QString &name);
-+ static QDBusMessage methodCall(const QString &destination, const QString &path,
-+ const QString &interface, const QString &method,
-+ const QString &signature = QString());
-+ static QDBusMessage methodReply(const QDBusMessage &other);
-+ static QDBusMessage error(const QDBusMessage &other, const QString &name,
-+ const QString &message = QString());
-+ static QDBusMessage error(const QDBusMessage &other, const QDBusError &error);
-+
-+ QString path() const;
-+ QString interface() const;
-+ QString name() const;
-+ inline QString member() const { return name(); }
-+ inline QString method() const { return name(); }
-+ QString service() const;
-+ inline QString sender() const { return service(); }
-+ MessageType type() const;
-+
-+ int timeout() const;
-+ void setTimeout(int ms);
-+
-+ bool noReply() const;
-+ void setNoReply(bool enable);
-+
-+ QString signature() const;
-+
-+//protected:
-+ DBusMessage *toDBusMessage() const;
-+ static QDBusMessage fromDBusMessage(DBusMessage *dmsg);
-+ static QDBusMessage fromError(const QDBusError& error);
-+ int serialNumber() const;
-+ int replySerialNumber() const;
-+ bool wasRepliedTo() const;
-+
-+private:
-+ QDBusMessagePrivate *d;
-+};
-+
-+#ifndef QT_NO_DEBUG
-+QDebug operator<<(QDebug, const QDBusMessage &);
-+#endif
-+
-+#endif
-+
-diff -Naur dbus-0.61.orig/qt/qdbusmessage_p.h dbus-0.61/qt/qdbusmessage_p.h
---- dbus-0.61.orig/qt/qdbusmessage_p.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusmessage_p.h 2006-02-20 14:23:11.000000000 +0100
-@@ -0,0 +1,49 @@
-+/* qdbusmessage.h QDBusMessage private object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSMESSAGE_P_H
-+#define QDBUSMESSAGE_P_H
-+
-+#include <qatomic.h>
-+#include <qstring.h>
-+struct DBusMessage;
-+
-+class QDBusMessagePrivate
-+{
-+public:
-+ QDBusMessagePrivate(QDBusMessage *qq);
-+ ~QDBusMessagePrivate();
-+
-+ QString service, path, interface, name, message, signature;
-+ DBusMessage *msg;
-+ DBusMessage *reply;
-+ QDBusMessage *q;
-+ int type;
-+ int timeout;
-+ QAtomic ref;
-+
-+ mutable bool repliedTo : 1;
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusobject.cpp dbus-0.61/qt/qdbusobject.cpp
---- dbus-0.61.orig/qt/qdbusobject.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusobject.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,173 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusmessage.h"
-+#include "qdbusconnection.h"
-+#include "qdbusobject.h"
-+#include "qdbusinterface.h"
-+#include "qdbusstandardinterfaces.h"
-+#include "qdbuserror.h"
-+
-+#include "qdbusxmlparser_p.h"
-+#include "qdbusobject_p.h"
-+#include "qdbusutil.h"
-+
-+QDBusObject::QDBusObject(QDBusObjectPrivate* p, const QDBusConnection& conn)
-+ :d(p), m_conn(conn)
-+{
-+}
-+
-+QDBusObject::QDBusObject(const QDBusConnection& conn, const QString& service, const QString& path)
-+ : m_conn(conn)
-+{
-+ *this = m_conn.findObject(service, path);
-+}
-+
-+QDBusObject::QDBusObject(const QDBusInterface& iface)
-+ : m_conn(iface.connection())
-+{
-+ *this = m_conn.findObject(iface.service(), iface.path());
-+}
-+
-+QDBusObject::QDBusObject(const QDBusObject& other)
-+ : d(other.d), m_conn(other.m_conn)
-+{
-+}
-+
-+QDBusObject::~QDBusObject()
-+{
-+}
-+
-+QDBusObject& QDBusObject::operator=(const QDBusObject& other)
-+{
-+#if 0
-+ if (other.d)
-+ other.d->ref.ref();
-+
-+ QDBusObjectPrivate* old = qAtomicSetPtr(&d, other.d);
-+ if (old && !old->ref.deref())
-+ m_conn.d->disposeOf(d);
-+#endif
-+ d = other.d;
-+
-+ return *this;
-+}
-+
-+QDBusConnection QDBusObject::connection() const
-+{
-+ return m_conn;
-+}
-+
-+QString QDBusObject::service() const
-+{
-+ return d ? d->data->service : QString();
-+}
-+
-+QString QDBusObject::path() const
-+{
-+ return d ? d->data->path : QString();
-+}
-+
-+QString QDBusObject::introspect() const
-+{
-+ if (!d)
-+ // not connected
-+ return QString();
-+
-+ if (d->data->introspection.isNull()) {
-+ // Try to introspect
-+ QDBusIntrospectableInterface iface = *this;
-+ QString xml = iface.introspect();
-+
-+ if (!m_conn.lastError().isValid()) {
-+ // this will change the contents of d->data
-+ QDBusXmlParser::parse(d, xml);
-+ }
-+ }
-+ return d->data->introspection;
-+}
-+
-+QSharedDataPointer<QDBusIntrospection::Object> QDBusObject::introspectionData() const
-+{
-+ QSharedDataPointer<QDBusIntrospection::Object> retval;
-+ if (d)
-+ retval = const_cast<QDBusIntrospection::Object*>(d->data);
-+ return retval;
-+}
-+
-+QStringList QDBusObject::interfaces() const
-+{
-+ introspect();
-+ return d ? d->data->interfaces : QStringList();
-+}
-+
-+QMap<QString, QDBusObject> QDBusObject::children() const
-+{
-+ QMap<QString, QDBusObject> retval;
-+#if 0
-+ if (!d)
-+ return retval;
-+
-+ QString prefix = d->path;
-+ if (!prefix.endsWith('/'))
-+ prefix.append('/');
-+ foreach (QString sub, d->childObjects)
-+ retval.insert(sub, QDBusObject( m_conn.d->findObject(d->path, prefix + sub), m_conn ));
-+
-+ return retval;
-+#endif
-+ qFatal("fixme!");
-+ return retval;
-+}
-+
-+bool QDBusObject::isValid() const
-+{
-+ return d && m_conn.isConnected() && QDBusUtil::isValidBusName(d->data->service) &&
-+ QDBusUtil::isValidObjectPath(d->data->path);
-+}
-+
-+#if 0 // we don't have a way of determining if an object exists or not
-+bool QDBusObject::exists() const
-+{
-+ if (!isValid())
-+ return false;
-+
-+ // call a non-existant interface/method
-+ QDBusMessage msg = QDBusMessage::methodCall(d->service, d->path,
-+ "org.freedesktop.DBus.NonExistant", "NonExistant");
-+ QDBusMessage reply = m_conn.sendWithReply(msg);
-+ // ignore the reply
-+
-+ QDBusError err = m_conn.lastError();
-+ if (!err.isValid()) {
-+ qWarning("D-Bus call to %s:%s on a supposedly non-existant interface worked!",
-+ qPrintable(d->service), qPrintable(d->path));
-+ return true;
-+ }
-+
-+ if (err.name == DBUS_ERROR_SERVICE_UNKNOWN ||
-+ err.name == DBUS_ERROR_BAD_ADDRESS
-+ return !m_conn.lastError().isValid();
-+}
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusobject.h dbus-0.61/qt/qdbusobject.h
---- dbus-0.61.orig/qt/qdbusobject.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusobject.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,161 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSOBJECT_H
-+#define QDBUSOBJECT_H
-+
-+#include <QtCore/qstring.h>
-+#include <QtCore/qvariant.h>
-+#include <QtCore/qlist.h>
-+#include <QtCore/qshareddata.h>
-+
-+#include "qdbusconnection.h"
-+#include "qdbusintrospection.h"
-+
-+class QDBusInterface;
-+class QDBusObject;
-+
-+template<class Interface>
-+inline Interface qdbus_cast(QDBusObject& obj, Interface * = 0);
-+
-+template<class Interface>
-+inline const Interface qdbus_cast(const QDBusObject& obj, Interface * = 0);
-+
-+class QDBusObjectPrivate;
-+/**
-+ * QDBusObject
-+ * Base object for DBUS objects imported and exported.
-+ */
-+class QDBUS_EXPORT QDBusObject
-+{
-+ friend class QDBusConnection;
-+public:
-+ // public constructors
-+ /**
-+ * Construct a QDBusObject referencing the remote object given.
-+ */
-+ QDBusObject(const QDBusConnection& conn, const QString& service, const QString& path);
-+
-+ /**
-+ * Copy constructor.
-+ */
-+ QDBusObject(const QDBusObject& other);
-+
-+ /**
-+ * Construct from an interface.
-+ */
-+ QDBusObject(const QDBusInterface& iface);
-+
-+ // public destructors
-+ /**
-+ * Destructor.
-+ */
-+ ~QDBusObject();
-+
-+public:
-+ // public functions
-+
-+ /**
-+ * Assignment operator
-+ */
-+ QDBusObject& operator=(const QDBusObject&);
-+
-+ /**
-+ * Returns the connection this object is bound to.
-+ */
-+ QDBusConnection connection() const;
-+
-+ /**
-+ * Returns the service this object is associated to.
-+ */
-+ QString service() const;
-+
-+ /**
-+ * Returns the path on the service this object is on.
-+ */
-+ QString path() const;
-+
-+ /**
-+ * Returns the introspection XML data of this object node.
-+ */
-+ QString introspect() const;
-+
-+ /**
-+ * Returns the introspection data for this object node.
-+ */
-+ QSharedDataPointer<QDBusIntrospection::Object> introspectionData() const;
-+
-+ /**
-+ * Returns all the interfaces in this object.
-+ */
-+ QStringList interfaces() const;
-+
-+ /**
-+ * Returns all the children object in this object.
-+ */
-+ QMap<QString, QDBusObject> children() const;
-+
-+ /**
-+ * Returns true if the object being referenced exists.
-+ */
-+ //bool exists() const;
-+
-+ /**
-+ * Returns true if we're referencing a valid object.
-+ */
-+ bool isValid() const;
-+
-+ /**
-+ * Cast this object to an interface, if possible.
-+ */
-+ template<typename Interface>
-+ inline operator Interface()
-+ { return qdbus_cast<Interface>(*this); }
-+
-+ /**
-+ * Cast this object to an interface, if possible.
-+ */
-+ template<typename Interface>
-+ inline operator const Interface() const
-+ { return qdbus_cast<Interface>(*this); }
-+
-+private:
-+ QDBusObject(QDBusObjectPrivate*, const QDBusConnection& conn);
-+ QSharedDataPointer<QDBusObjectPrivate> d;
-+ QDBusConnection m_conn;
-+};
-+
-+template<class Interface>
-+inline Interface qdbus_cast(QDBusObject& obj, Interface *)
-+{
-+ return Interface(obj);
-+}
-+
-+template<class Interface>
-+inline const Interface qdbus_cast(const QDBusObject& obj, Interface *)
-+{
-+ return Interface(obj);
-+}
-+
-+#endif // QDBUSOBJECT_H
-diff -Naur dbus-0.61.orig/qt/qdbusobject_p.h dbus-0.61/qt/qdbusobject_p.h
---- dbus-0.61.orig/qt/qdbusobject_p.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusobject_p.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,69 @@
-+/*
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+//
-+// W A R N I N G
-+// -------------
-+//
-+// This file is not part of the public API. This header file may
-+// change from version to version without notice, or even be
-+// removed.
-+//
-+// We mean it.
-+//
-+//
-+
-+#ifndef QDBUSOBJECTPRIVATE_H
-+#define QDBUSOBJECTPRIVATE_H
-+
-+#include "QtCore/qatomic.h"
-+#include "QtCore/qstringlist.h"
-+#include "qdbusobject.h"
-+#include "qdbusinterface.h"
-+#include "qdbusconnection_p.h"
-+
-+class QDBusObject;
-+class QDBusInterface;
-+class QDBusXmlParser;
-+
-+class QDBusObjectPrivate: public QSharedData
-+{
-+public:
-+ inline QDBusObjectPrivate(QDBusConnectionPrivate* ptr, const QString &service,
-+ const QString &path)
-+ : parent(ptr),
-+ data( )
-+ {
-+ QDBusIntrospection::Object * d = ptr->findObject(service, path);
-+ d->ref.ref();
-+ data = d;
-+ }
-+
-+ inline ~QDBusObjectPrivate()
-+ { parent->disposeOf(this); }
-+
-+ QDBusConnectionPrivate* parent;
-+ const QDBusIntrospection::Object* data;
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusserver.cpp dbus-0.61/qt/qdbusserver.cpp
---- dbus-0.61.orig/qt/qdbusserver.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusserver.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,61 @@
-+/* qdbusserver.cpp
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusserver.h"
-+#include "qdbusconnection_p.h"
-+
-+QDBusServer::QDBusServer(const QString &addr, QObject *parent)
-+ : QObject(parent)
-+{
-+ d = new QDBusConnectionPrivate(this);
-+
-+ if (addr.isEmpty())
-+ return;
-+
-+ d->setServer(dbus_server_listen(addr.toUtf8().constData(), &d->error));
-+}
-+
-+bool QDBusServer::isConnected() const
-+{
-+ return d->server && dbus_server_get_is_connected(d->server);
-+}
-+
-+QDBusError QDBusServer::lastError() const
-+{
-+ return d->lastError;
-+}
-+
-+QString QDBusServer::address() const
-+{
-+ QString addr;
-+ if (d->server) {
-+ char *c = dbus_server_get_address(d->server);
-+ addr = QString::fromUtf8(c);
-+ dbus_free(c);
-+ }
-+
-+ return addr;
-+}
-+
-+#include "qdbusserver.moc"
-diff -Naur dbus-0.61.orig/qt/qdbusserver.h dbus-0.61/qt/qdbusserver.h
---- dbus-0.61.orig/qt/qdbusserver.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusserver.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,48 @@
-+/* qdbusserver.h QDBusServer object
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef QDBUSSERVER_H
-+#define QDBUSSERVER_H
-+
-+#include "qdbusmacros.h"
-+#include <QtCore/qobject.h>
-+#include <QtCore/qstring.h>
-+
-+class QDBusConnectionPrivate;
-+class QDBusError;
-+
-+class QDBUS_EXPORT QDBusServer: public QObject
-+{
-+ Q_OBJECT
-+public:
-+ QDBusServer(const QString &address, QObject *parent = 0);
-+
-+ bool isConnected() const;
-+ QDBusError lastError() const;
-+ QString address() const;
-+
-+private:
-+ Q_DISABLE_COPY(QDBusServer)
-+ QDBusConnectionPrivate *d;
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusstandardinterfaces.cpp dbus-0.61/qt/qdbusstandardinterfaces.cpp
---- dbus-0.61.orig/qt/qdbusstandardinterfaces.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusstandardinterfaces.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,114 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusstandardinterfaces.h"
-+
-+QDBusPeerInterface::~QDBusPeerInterface()
-+{
-+}
-+
-+QDBusIntrospectableInterface::~QDBusIntrospectableInterface()
-+{
-+}
-+
-+QDBusPropertiesInterface::~QDBusPropertiesInterface()
-+{
-+}
-+
-+QDBusBusInterface::~QDBusBusInterface()
-+{
-+}
-+
-+const char* QDBusBusInterface::staticIntrospectionData()
-+{
-+ // FIXME!
-+ // This should be auto-generated!
-+
-+ return
-+ "<interface name=\"org.freedesktop.DBus\">"
-+ "<method name=\"RequestName\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"in\" type=\"u\"/>"
-+ "<arg direction=\"out\" type=\"u\"/>"
-+ "</method>"
-+ "<method name=\"ReleaseName\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"out\" type=\"u\"/>"
-+ "</method>"
-+ "<method name=\"StartServiceByName\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"in\" type=\"u\"/>"
-+ "<arg direction=\"out\" type=\"u\"/>"
-+ "</method>"
-+ "<method name=\"Hello\">"
-+ "<arg direction=\"out\" type=\"s\"/>"
-+ "</method>"
-+ "<method name=\"NameHasOwner\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"out\" type=\"b\"/>"
-+ "</method>"
-+ "<method name=\"ListNames\">"
-+ "<arg direction=\"out\" type=\"as\"/>"
-+ "</method>"
-+ "<method name=\"AddMatch\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "</method>"
-+ "<method name=\"RemoveMatch\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "</method>"
-+ "<method name=\"GetNameOwner\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"out\" type=\"s\"/>"
-+ "</method>"
-+ "<method name=\"ListQueuedOwners\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"out\" type=\"as\"/>"
-+ "</method>"
-+ "<method name=\"GetConnectionUnixUser\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"out\" type=\"u\"/>"
-+ "</method>"
-+ "<method name=\"GetConnectionUnixProcessID\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"out\" type=\"u\"/>"
-+ "</method>"
-+ "<method name=\"GetConnectionSELinuxSecurityContext\">"
-+ "<arg direction=\"in\" type=\"s\"/>"
-+ "<arg direction=\"out\" type=\"ay\"/>"
-+ "</method>"
-+ "<method name=\"ReloadConfig\">"
-+ "</method>"
-+ "<signal name=\"NameOwnerChanged\">"
-+ "<arg type=\"s\"/>"
-+ "<arg type=\"s\"/>"
-+ "<arg type=\"s\"/>"
-+ "</signal>"
-+ "<signal name=\"NameLost\">"
-+ "<arg type=\"s\"/>"
-+ "</signal>"
-+ "<signal name=\"NameAcquired\">"
-+ "<arg type=\"s\"/>"
-+ "</signal>"
-+ "</interface>";
-+}
-diff -Naur dbus-0.61.orig/qt/qdbusstandardinterfaces.h dbus-0.61/qt/qdbusstandardinterfaces.h
---- dbus-0.61.orig/qt/qdbusstandardinterfaces.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusstandardinterfaces.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,218 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUS_STANDARD_INTERFACES_H
-+#define QDBUS_STANDARD_INTERFACES_H
-+
-+#include "qdbusinterface.h"
-+#include <QtCore/qstring.h>
-+#include <QtCore/qstringlist.h>
-+#include <dbus/dbus.h>
-+
-+class QDBusConnection;
-+
-+class QDBUS_EXPORT QDBusPeerInterface: public QDBusInterface
-+{
-+public:
-+ static inline const char* staticInterfaceName()
-+ { return DBUS_INTERFACE_PEER; }
-+
-+ static inline const char* staticIntrospectionData()
-+ {
-+ return
-+ "<interface name=\"org.freedesktop.DBus.Peer\">"
-+ "<method name=\"Ping\" />"
-+ "</interface>";
-+ }
-+
-+public:
-+ explicit QDBusPeerInterface(const QDBusObject& obj)
-+ : QDBusInterface(obj, staticInterfaceName())
-+ { }
-+
-+ QDBusPeerInterface(QDBusConnection& conn, const QString& service, const QString& path)
-+ : QDBusInterface(conn, service, path, staticInterfaceName())
-+ { }
-+
-+ ~QDBusPeerInterface();
-+
-+ inline virtual QString introspectionData() const
-+ { return staticIntrospectionData(); }
-+
-+ inline void ping()
-+ { call(QLatin1String("Ping")); }
-+};
-+
-+class QDBUS_EXPORT QDBusIntrospectableInterface: public QDBusInterface
-+{
-+public:
-+ static inline const char* staticInterfaceName()
-+ { return DBUS_INTERFACE_INTROSPECTABLE; }
-+
-+ static inline const char* staticIntrospectionData()
-+ {
-+ return
-+ "<interface name=\"org.freedesktop.DBus.Introspectable\">"
-+ "<method name=\"Introspect\">"
-+ "<arg name=\"xml_data\" type=\"s\" direction=\"out\" />"
-+ "</method>"
-+ "</interface>";
-+ }
-+public:
-+ explicit QDBusIntrospectableInterface(const QDBusObject& obj)
-+ : QDBusInterface(obj, staticInterfaceName())
-+ { }
-+
-+ QDBusIntrospectableInterface(QDBusConnection& conn, const QString& service, const QString& path)
-+ : QDBusInterface(conn, service, path, staticInterfaceName())
-+ { }
-+
-+ ~QDBusIntrospectableInterface();
-+
-+ inline virtual QString introspectionData() const
-+ { return staticIntrospectionData(); }
-+
-+ inline QString introspect()
-+ { return call(QLatin1String("Introspect")).at(0).toString(); }
-+};
-+
-+class QDBUS_EXPORT QDBusPropertiesInterface: public QDBusInterface
-+{
-+public:
-+ static inline const char* staticInterfaceName()
-+ { return DBUS_INTERFACE_PROPERTIES; }
-+
-+ static inline const char* staticIntrospectionData()
-+ {
-+ return
-+ "<interface name=\"org.freedesktop.DBus.Properties\">"
-+ "<method name=\"Get\">"
-+ "<arg name=\"interface_name\" type=\"s\" direction=\"in\"/>"
-+ "<arg name=\"property_name\" type=\"s\" direction=\"in\"/>"
-+ "<arg name=\"value\" type=\"v\" direction=\"out\"/>"
-+ "</method>"
-+ "<method name=\"Set\">"
-+ "<arg name=\"interface_name\" type=\"s\" direction=\"in\"/>"
-+ "<arg name=\"property_name\" type=\"s\" direction=\"in\"/>"
-+ "<arg name=\"value\" type=\"v\" direction=\"in\"/>"
-+ "</method>";
-+ }
-+public:
-+ explicit QDBusPropertiesInterface(const QDBusObject& obj)
-+ : QDBusInterface(obj, staticInterfaceName())
-+ { }
-+
-+ QDBusPropertiesInterface(QDBusConnection& conn, const QString& service, const QString& path)
-+ : QDBusInterface(conn, service, path, staticInterfaceName())
-+ { }
-+
-+ ~QDBusPropertiesInterface();
-+
-+ inline virtual QString introspectionData() const
-+ { return staticIntrospectionData(); }
-+
-+ inline void set(const QString& interfaceName, const QString& propertyName, QVariant value)
-+ { call(QLatin1String("Set.ssv"), interfaceName, propertyName, value); }
-+
-+ inline QVariant get(const QString& interfaceName, const QString& propertyName)
-+ { return call(QLatin1String("Get.ss"), interfaceName, propertyName).at(0); }
-+};
-+
-+class QDBUS_EXPORT QDBusBusInterface: public QDBusInterface
-+{
-+public:
-+ static inline const char* staticInterfaceName()
-+ { return DBUS_INTERFACE_DBUS; }
-+
-+ static const char* staticIntrospectionData();
-+
-+public:
-+ explicit QDBusBusInterface(const QDBusObject& obj)
-+ : QDBusInterface(obj, staticInterfaceName())
-+ { }
-+
-+ QDBusBusInterface(QDBusConnection& conn, const QString& service, const QString& path)
-+ : QDBusInterface(conn, service, path, staticInterfaceName())
-+ { }
-+
-+ ~QDBusBusInterface();
-+
-+ inline virtual QString introspectionData() const
-+ { return staticIntrospectionData(); }
-+
-+ inline unsigned requestName(const QString& name, unsigned flags)
-+ { return call(QLatin1String("RequestName.su"), name, flags).at(0).toUInt(); }
-+
-+ inline unsigned releaseName(const QString& name)
-+ { return call(QLatin1String("ReleaseName.s"), name).at(0).toUInt(); }
-+
-+ inline unsigned startServiceByName(const QString& name, unsigned flags)
-+ { return call(QLatin1String("StartServiceByName.su"), name, flags).at(0).toUInt(); }
-+
-+ inline QString Hello()
-+ { return call(QLatin1String("Hello")).at(0).toString(); }
-+
-+ inline bool nameHasOwner(const QString& name)
-+ { return call(QLatin1String("NameHasOwner.s"), name).at(0).toBool(); }
-+
-+ inline QStringList listNames()
-+ { return call(QLatin1String("ListNames")).at(0).toStringList(); }
-+
-+ inline void addMatch(const QString& rule)
-+ { call(QLatin1String("AddMatch"), rule); }
-+
-+ inline void removeMatch(const QString& rule)
-+ { call(QLatin1String("RemoveMatch"), rule); }
-+
-+ inline QString getNameOwner(const QString& name)
-+ { return call(QLatin1String("GetNameOwner.s"), name).at(0).toString(); }
-+
-+ inline QStringList listQueuedOwners(const QString& name)
-+ { return call(QLatin1String("ListQueuedOwners.s"), name).at(0).toStringList(); }
-+
-+ inline quint32 getConnectionUnixUser(const QString& connectionName)
-+ { return call(QLatin1String("GetConnectionUnixUser.s"), connectionName).at(0).toUInt(); }
-+
-+ inline quint32 getConnectionUnixProcessID(const QString& connectionName)
-+ { return call(QLatin1String("GetConnectionUnixProcessID.s"), connectionName).at(0).toUInt(); }
-+
-+ inline QByteArray getConnectionSELinuxSecurityContext(const QString& connectionName)
-+ { return call(QLatin1String("GetConnectionSELinuxSecurityContext.s"), connectionName).at(0).toByteArray(); }
-+
-+ inline void reloadConfig()
-+ { call(QLatin1String("ReloadConfig")); }
-+};
-+
-+
-+namespace org {
-+ namespace freedesktop {
-+ namespace DBus {
-+ typedef ::QDBusPeerInterface Peer;
-+ typedef ::QDBusIntrospectableInterface Introspectable;
-+ typedef ::QDBusPropertiesInterface Properties;
-+ }
-+ }
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusthread.cpp dbus-0.61/qt/qdbusthread.cpp
---- dbus-0.61.orig/qt/qdbusthread.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusthread.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,116 @@
-+/* qdbusintegrator.cpp QDBusConnection private implementation
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include <QtCore/qmutex.h>
-+#include <QtCore/qwaitcondition.h>
-+
-+#include <dbus/dbus.h>
-+
-+struct DBusMutex: public QMutex
-+{
-+ inline DBusMutex()
-+ : QMutex( QMutex::NonRecursive )
-+ { }
-+
-+ static DBusMutex* mutex_new()
-+ {
-+ return new DBusMutex;
-+ }
-+
-+ static void mutex_free(DBusMutex *mutex)
-+ {
-+ delete mutex;
-+ }
-+
-+ static dbus_bool_t mutex_lock(DBusMutex *mutex)
-+ {
-+ mutex->lock();
-+ return true;
-+ }
-+
-+ static dbus_bool_t mutex_unlock(DBusMutex *mutex)
-+ {
-+ mutex->unlock();
-+ return true;
-+ }
-+};
-+
-+struct DBusCondVar: public QWaitCondition
-+{
-+ inline DBusCondVar()
-+ { }
-+
-+ static DBusCondVar* condvar_new()
-+ {
-+ return new DBusCondVar;
-+ }
-+
-+ static void condvar_free(DBusCondVar *cond)
-+ {
-+ delete cond;
-+ }
-+
-+ static void condvar_wait(DBusCondVar *cond, DBusMutex *mutex)
-+ {
-+ cond->wait(mutex);
-+ }
-+
-+ static dbus_bool_t condvar_wait_timeout(DBusCondVar *cond, DBusMutex *mutex, int msec)
-+ {
-+ return cond->wait(mutex, msec);
-+ }
-+
-+ static void condvar_wake_one(DBusCondVar *cond)
-+ {
-+ cond->wakeOne();
-+ }
-+
-+ static void condvar_wake_all(DBusCondVar *cond)
-+ {
-+ cond->wakeAll();
-+ }
-+};
-+
-+bool qDBusInitThreads()
-+{
-+ static DBusThreadFunctions fcn = {
-+ DBUS_THREAD_FUNCTIONS_ALL_MASK,
-+ DBusMutex::mutex_new,
-+ DBusMutex::mutex_free,
-+ DBusMutex::mutex_lock,
-+ DBusMutex::mutex_unlock,
-+ DBusCondVar::condvar_new,
-+ DBusCondVar::condvar_free,
-+ DBusCondVar::condvar_wait,
-+ DBusCondVar::condvar_wait_timeout,
-+ DBusCondVar::condvar_wake_one,
-+ DBusCondVar::condvar_wake_all,
-+ 0, 0, 0, 0, 0, 0, 0, 0
-+ };
-+
-+ dbus_threads_init(&fcn);
-+ return true;
-+}
-+
-+
-diff -Naur dbus-0.61.orig/qt/qdbustype.cpp dbus-0.61/qt/qdbustype.cpp
---- dbus-0.61.orig/qt/qdbustype.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbustype.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,1151 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbustype.h"
-+#include "qdbusvariant.h"
-+#include <dbus/dbus.h>
-+
-+#include <QtCore/qstringlist.h>
-+
-+/// \internal
-+class QDBusPrettyTypeBase
-+{
-+public:
-+ struct Entry
-+ {
-+ const char* prettyName;
-+ char signature;
-+ };
-+
-+ enum Direction
-+ {
-+ In,
-+ Out
-+ };
-+
-+ enum Access
-+ {
-+ Read,
-+ Write,
-+ ReadWrite
-+ };
-+
-+ // so that the compiler doesn't complain
-+ virtual ~QDBusPrettyTypeBase() { }
-+
-+ virtual QString addElementsToArray(const QString& subType) = 0;
-+ virtual QString addElementsToMap(const QString& key, const QString& value) = 0;
-+ virtual QString addElementsToStruct(const QStringList& subTypes) = 0;
-+ virtual const Entry* entryMap() = 0;
-+
-+ QString toString(const QDBusType& type);
-+ QString toString(const QDBusTypeList& list);
-+};
-+
-+/// \internal
-+class QDBusConventionalNames: public QDBusPrettyTypeBase
-+{
-+public:
-+ virtual QString addElementsToArray(const QString& subType);
-+ virtual QString addElementsToMap(const QString& key, const QString& value);
-+ virtual QString addElementsToStruct(const QStringList& subTypes) ;
-+ virtual const Entry* entryMap();
-+};
-+
-+/// \internal
-+class QDBusQtNames: public QDBusPrettyTypeBase
-+{
-+public:
-+ virtual QString addElementsToArray(const QString& subType);
-+ virtual QString addElementsToMap(const QString& key, const QString& value);
-+ virtual QString addElementsToStruct(const QStringList& subTypes) ;
-+ virtual const Entry* entryMap();
-+};
-+
-+//! \internal
-+class QDBusQVariantNames: public QDBusQtNames
-+{
-+public:
-+ virtual QString addElementsToArray(const QString& subType);
-+ virtual QString addElementsToMap(const QString& key, const QString& value);
-+ virtual QString addElementsToStruct(const QStringList& subTypes) ;
-+};
-+
-+#if 0
-+/*
-+ * Parse the signature and return the max length that is valid
-+ */
-+static int parse(const char* signature)
-+{
-+ if (!signature || !*signature)
-+ return 0; // not valid
-+
-+ switch (signature[0]) {
-+ case DBUS_TYPE_BOOLEAN:
-+ case DBUS_TYPE_BYTE:
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT16:
-+ case DBUS_TYPE_UINT32:
-+ case DBUS_TYPE_INT64:
-+ case DBUS_TYPE_UINT64:
-+ case DBUS_TYPE_DOUBLE:
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ case DBUS_TYPE_SIGNATURE:
-+ case DBUS_TYPE_VARIANT:
-+ return 1;
-+
-+ case DBUS_TYPE_ARRAY: {
-+ // check if it's a dict-entry array
-+ if (signature[1] == DBUS_DICT_ENTRY_BEGIN_CHAR) {
-+ // the first type must be ok and primitive (length 1)
-+ char c[2] = { signature[2], 0 };
-+ if (parse(c) != 1)
-+ return 0; // not valid
-+
-+ // the rest must be a valid type too
-+ int len = parse(signature + 3);
-+ if (len == 0)
-+ return 0; // not valid
-+
-+ // check the closing brace
-+ if (signature[len + 3] != DBUS_DICT_ENTRY_END_CHAR)
-+ return 0; // not valid
-+
-+ // it's valid
-+ return len + 4;
-+ }
-+
-+ // it's not a dict-entry, so it's ok as long as the internal type is ok too
-+ int len = parse(signature + 1);
-+ return len ? len + 1 : 0;
-+ }
-+
-+ case DBUS_STRUCT_BEGIN_CHAR: {
-+ // check that each entry is valid
-+ int i = 1;
-+ while (i) {
-+ if (i > 1 && signature[i] == DBUS_STRUCT_END_CHAR)
-+ break; // this is valid
-+
-+ int len = parse(signature + i);
-+ if (len)
-+ i += len;
-+ else
-+ i = 0;
-+ }
-+ return i;
-+ }
-+
-+ default:
-+ return 0; // not valid
-+ }
-+}
-+#endif
-+
-+static QString findInMap(char type, const QDBusPrettyTypeBase::Entry* map)
-+{
-+ for ( ; map->signature; ++map)
-+ if (type == map->signature)
-+ return QLatin1String(map->prettyName);
-+ return QString();
-+}
-+
-+//
-+// Input MUST be valid
-+//
-+inline QString QDBusPrettyTypeBase::toString(const QDBusType& type)
-+{
-+ const Entry* map = entryMap();
-+
-+ const QDBusTypeList subTypes = type.subTypes();
-+ switch (type.dbusType()) {
-+ case DBUS_TYPE_STRUCT: {
-+ // handle a struct
-+ // find its sub-types
-+
-+ QStringList subStrings;
-+ QDBusTypeList subTypes = type.subTypes();
-+ foreach (QDBusType t, subTypes)
-+ subStrings << toString( t );
-+
-+ return addElementsToStruct(subStrings);
-+ }
-+
-+ case DBUS_TYPE_DICT_ENTRY: {
-+ Q_ASSERT_X(subTypes.size() == 2, "QDBusType::toString",
-+ "maps must have exactly two elements");
-+
-+ QString key = findInMap( subTypes.at(0).dbusType(), map );
-+ QString value = toString( subTypes.at(1) );
-+
-+ Q_ASSERT(!key.isNull());
-+
-+ return addElementsToMap( key, value );
-+ }
-+ case DBUS_TYPE_ARRAY: {
-+ Q_ASSERT_X(subTypes.size() == 1, "QDBusType::toString",
-+ "more than one element in array");
-+
-+ if (type.qvariantType() == QVariant::Map)
-+ return toString( subTypes.first() );
-+ return addElementsToArray( toString( subTypes.at(0) ) );
-+ }
-+
-+ default: {
-+ // normal, non-compound type
-+ QString name = findInMap(type.dbusType(), map);
-+ Q_ASSERT(!name.isNull());
-+ return name;
-+ }
-+ }
-+}
-+
-+const QDBusPrettyTypeBase::Entry* QDBusConventionalNames::entryMap()
-+{
-+ static QDBusPrettyTypeBase::Entry translation[] = {
-+ { "BYTE", DBUS_TYPE_BYTE },
-+ { "BOOLEAN", DBUS_TYPE_BOOLEAN },
-+ { "INT16", DBUS_TYPE_INT16 },
-+ { "UINT16", DBUS_TYPE_UINT16 },
-+ { "INT32", DBUS_TYPE_INT32 },
-+ { "UINT32", DBUS_TYPE_UINT32 },
-+ { "INT64", DBUS_TYPE_INT64 },
-+ { "UINT64", DBUS_TYPE_UINT64 },
-+ { "DOUBLE", DBUS_TYPE_DOUBLE },
-+ { "STRING", DBUS_TYPE_STRING },
-+ { "OBJECT_PATH", DBUS_TYPE_OBJECT_PATH },
-+ { "SIGNATURE", DBUS_TYPE_SIGNATURE },
-+ { "VARIANT", DBUS_TYPE_VARIANT }
-+ };
-+ return translation;
-+}
-+
-+QString QDBusConventionalNames::addElementsToStruct(const QStringList& subTypes)
-+{
-+ return QString( QLatin1String("STRUCT of (%1)") )
-+ .arg( subTypes.join( QLatin1String(",") ) );
-+}
-+
-+QString QDBusConventionalNames::addElementsToMap(const QString& key, const QString& value)
-+{
-+ return QString( QLatin1String("ARRAY of DICT_ENTRY of (%1,%2)") )
-+ .arg(key).arg(value);
-+}
-+
-+QString QDBusConventionalNames::addElementsToArray(const QString& subType)
-+{
-+ return QString( QLatin1String("ARRAY of %1") )
-+ .arg(subType);
-+}
-+
-+const QDBusPrettyTypeBase::Entry* QDBusQtNames::entryMap()
-+{
-+ static QDBusPrettyTypeBase::Entry translation[] = {
-+ { "quint8", DBUS_TYPE_BYTE },
-+ { "bool", DBUS_TYPE_BOOLEAN },
-+ { "qint16", DBUS_TYPE_INT16 },
-+ { "quint16", DBUS_TYPE_UINT16 },
-+ { "qint32", DBUS_TYPE_INT32 },
-+ { "quint32", DBUS_TYPE_UINT32 },
-+ { "qint64", DBUS_TYPE_INT64 },
-+ { "quint64", DBUS_TYPE_UINT64 },
-+ { "double", DBUS_TYPE_DOUBLE },
-+ { "QString", DBUS_TYPE_STRING },
-+ { "QString", DBUS_TYPE_OBJECT_PATH },
-+ { "QString", DBUS_TYPE_SIGNATURE },
-+ { "QDBusVariant", DBUS_TYPE_VARIANT }
-+ };
-+ return translation;
-+}
-+
-+static inline QString templateArg(const QString& input)
-+{
-+ if (input.endsWith('>'))
-+ return input + ' ';
-+ return input;
-+}
-+
-+QString QDBusQtNames::addElementsToStruct(const QStringList& subTypes)
-+{
-+ Q_UNUSED(subTypes);
-+
-+ return QLatin1String("QList"); // CHANGEME in the future
-+}
-+
-+QString QDBusQtNames::addElementsToMap(const QString& key, const QString& value)
-+{
-+ return QString( QLatin1String("QMap<%1, %2>") )
-+ .arg(key)
-+ .arg( templateArg(value) );
-+}
-+
-+QString QDBusQtNames::addElementsToArray(const QString& subType)
-+{
-+ if (subType == QLatin1String("quint8"))
-+ // special case
-+ return QLatin1String("QByteArray");
-+
-+ return QString( QLatin1String("QList<%1>") )
-+ .arg( templateArg(subType) );
-+}
-+
-+QString QDBusQVariantNames::addElementsToStruct(const QStringList& subTypes)
-+{
-+ Q_UNUSED(subTypes);
-+
-+ return QLatin1String("QVariantList");
-+}
-+
-+QString QDBusQVariantNames::addElementsToMap(const QString& key, const QString& value)
-+{
-+ Q_UNUSED(key);
-+ Q_UNUSED(value);
-+
-+ return QLatin1String("QVariantMap");
-+}
-+
-+QString QDBusQVariantNames::addElementsToArray(const QString& subType)
-+{
-+ if (subType == QLatin1String("quint8"))
-+ // special case
-+ return QLatin1String("QByteArray");
-+
-+ return QLatin1String("QVariantList");
-+}
-+
-+/*!
-+ \internal
-+*/
-+class QDBusTypePrivate: public QSharedData
-+{
-+public:
-+ int code;
-+ mutable QVariant::Type qvariantType;
-+ mutable QByteArray signature;
-+ QDBusTypeList subTypes;
-+
-+ inline QDBusTypePrivate()
-+ : code(0), qvariantType(QVariant::Invalid)
-+ { }
-+};
-+
-+/*!
-+ \class QDBusType
-+
-+ Represents one single DBus type.
-+*/
-+
-+/*!
-+ \enum QDBusType::StringFormat
-+
-+ This enum is used in QDBusType::toString to determine which type of formatting
-+ to apply to the DBus types:
-+
-+ \value ConventionalNames Use the DBus conventional names, such as STRING, BOOLEAN or
-+ ARRAY of BYTE.
-+ \value QtNames Use the Qt type names, such as QString, bool and QList<quint32>
-+ \value QVariantNames Same as QtNames, but for containers, use QVariantList and QVariantMap
-+*/
-+
-+/*!
-+ Constructs an empty (invalid) type.
-+*/
-+QDBusType::QDBusType()
-+ : d(0)
-+{
-+}
-+
-+/*!
-+ Constructs the type based on the given DBus type.
-+
-+ \param type the type
-+*/
-+QDBusType::QDBusType(int type)
-+{
-+ char c[2] = { type, 0 };
-+ *this = QDBusType(c);
-+}
-+
-+/*!
-+ Constructs the type based on the given QVariant type.
-+
-+ \param type the type
-+ \sa QVariant::Type
-+*/
-+QDBusType::QDBusType(QVariant::Type type)
-+{
-+ const char *sig = dbusSignature(type);
-+
-+ // it never returns NULL
-+ if (sig[0] == '\0')
-+ return;
-+
-+ d = new QDBusTypePrivate;
-+ d->qvariantType = type;
-+ d->code = sig[0];
-+ if (sig[1] == '\0')
-+ // single-letter type
-+ return;
-+ else if (sig[2] == '\0') {
-+ // two-letter type
-+ // must be an array
-+ d->code = sig[0];
-+ QDBusType t;
-+ t.d = new QDBusTypePrivate;
-+ t.d->code = sig[1];
-+ d->subTypes << t;
-+ }
-+ else {
-+ // the only longer type is "a{sv}"
-+ Q_ASSERT(sig[1] == '{' && sig[5] == '\0');
-+
-+ static QDBusType map("a{sv}");
-+ d->subTypes = map.d->subTypes;
-+ }
-+}
-+
-+/*!
-+ Parses the given DBus signature and constructs the type it represents.
-+
-+ \param signature the signature to parse. It must represent one single type, but can
-+ a container type.
-+*/
-+QDBusType::QDBusType(const char* signature)
-+{
-+ if ( !dbus_signature_validate_single(signature, 0) )
-+ return;
-+
-+ DBusSignatureIter iter;
-+ dbus_signature_iter_init(&iter, signature);
-+ *this = QDBusType(&iter);
-+ if (d)
-+ d->signature = signature;
-+}
-+
-+/*!
-+ Parses the given DBus signature and constructs the type it represents.
-+
-+ \param signature the signature to parse. It must represent one single type, but can
-+ a container type.
-+*/
-+QDBusType::QDBusType(const QString& str)
-+{
-+ *this = QDBusType( str.toUtf8().constData() );
-+}
-+
-+/*!
-+ Parses the given DBus signature and constructs the type it represents.
-+
-+ \param signature the signature to parse. It must represent one single type, but can
-+ a container type.
-+*/
-+QDBusType::QDBusType(const QByteArray& str)
-+{
-+ *this = QDBusType( str.constData() );
-+}
-+
-+/*!
-+ Creates a QDBusType object based on the current element pointed to by \a iter.
-+
-+ \param iter the iterator. Can be pointing to container types.
-+*/
-+QDBusType::QDBusType(DBusSignatureIter* iter)
-+ : d(new QDBusTypePrivate)
-+{
-+ if ( dbus_type_is_container( d->code = dbus_signature_iter_get_current_type(iter) ) ) {
-+ // we have to recurse
-+ if ( d->code == DBUS_TYPE_VARIANT )
-+ return; // no we don't. dbus_type_is_container lies to us
-+
-+ // we have to recurse
-+ DBusSignatureIter subiter;
-+ dbus_signature_iter_recurse(iter, &subiter);
-+
-+ d->subTypes = QDBusTypeList(&subiter);
-+
-+ // sanity checking:
-+ if ( d->code == DBUS_TYPE_ARRAY )
-+ Q_ASSERT_X(d->subTypes.size() == 1, "QDBusType",
-+ "more than one element in array");
-+ else if (d->code == DBUS_TYPE_DICT_ENTRY )
-+ Q_ASSERT_X(d->subTypes.size() == 2, "QDBusType",
-+ "maps must have exactly two elements");
-+ }
-+}
-+
-+/*!
-+ Copies the type from the other object.
-+*/
-+QDBusType::QDBusType(const QDBusType& other)
-+ : d(other.d)
-+{
-+}
-+
-+/*!
-+ Release the resources associated with this type.
-+*/
-+QDBusType::~QDBusType()
-+{
-+}
-+
-+/*!
-+ Copies the type from the other object.
-+*/
-+QDBusType& QDBusType::operator=(const QDBusType& other)
-+{
-+ d = other.d;
-+ return *this;
-+}
-+
-+/*!
-+ Returns the DBus type for this type.
-+*/
-+int QDBusType::dbusType() const
-+{
-+ return d ? d->code : DBUS_TYPE_INVALID;
-+}
-+
-+/*!
-+ Returns the DBus signature for this type and subtypes.
-+*/
-+QByteArray QDBusType::dbusSignature() const
-+{
-+ if (!d)
-+ return QByteArray();
-+
-+ if (!d->signature.isEmpty())
-+ return d->signature;
-+
-+ if (d->subTypes.isEmpty())
-+ return d->signature = QByteArray(1, d->code);
-+
-+ QByteArray retval;
-+ switch (d->code) {
-+ // can only be array, map or struct
-+
-+ case DBUS_TYPE_ARRAY:
-+ Q_ASSERT_X(d->subTypes.size() == 1, "QDBusType::dbusSignature",
-+ "more than one element in array");
-+
-+ retval += DBUS_TYPE_ARRAY;
-+ retval += d->subTypes.at(0).dbusSignature();
-+ break;
-+
-+ case DBUS_TYPE_DICT_ENTRY: {
-+ Q_ASSERT_X(d->subTypes.size() == 2, "QDBusType::dbusSignature",
-+ "maps must have exactly two elements");
-+
-+ QByteArray value = d->subTypes.at(1).dbusSignature();
-+ char key = d->subTypes.at(0).dbusType();
-+
-+ Q_ASSERT(key != DBUS_TYPE_INVALID);
-+ Q_ASSERT(!value.isEmpty());
-+
-+ retval.reserve(value.length() + 3);
-+ retval = DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING;
-+ retval += key;
-+ retval += value;
-+ retval += DBUS_DICT_ENTRY_END_CHAR;
-+ break;
-+ }
-+
-+ case DBUS_TYPE_STRUCT:
-+ retval = d->subTypes.dbusSignature();
-+ retval.prepend(DBUS_STRUCT_BEGIN_CHAR);
-+ retval.append(DBUS_STRUCT_END_CHAR);
-+ break;
-+
-+ default:
-+ Q_ASSERT_X(false, "QDBusType::dbusSignature", "invalid container type");
-+ }
-+
-+ d->signature = retval;
-+ return retval;
-+}
-+
-+/*!
-+ Returns the QVariant::Type for this entry.
-+*/
-+QVariant::Type QDBusType::qvariantType() const
-+{
-+ if (d && d->qvariantType != QVariant::Invalid)
-+ return d->qvariantType;
-+
-+ // check the special array cases:
-+ if (isArray()) {
-+ QDBusType t = arrayElement();
-+
-+ if (t.dbusType() == DBUS_TYPE_BYTE)
-+ return QVariant::ByteArray;
-+ else if (t.dbusType() == DBUS_TYPE_DICT_ENTRY)
-+ return QVariant::Map;
-+ else if (t.isBasic() && t.qvariantType() == QVariant::String)
-+ return QVariant::StringList;
-+ }
-+
-+ return qvariantType(dbusType());
-+}
-+
-+/*!
-+ Returns true if this type is a valid one.
-+*/
-+bool QDBusType::isValid() const
-+{
-+ return d && d->code != DBUS_TYPE_INVALID;
-+}
-+
-+/*!
-+ Returns true if this type is a basic one.
-+
-+ \sa dbus_type_is_basic
-+*/
-+bool QDBusType::isBasic() const
-+{
-+ return d && dbus_type_is_basic(d->code);
-+}
-+
-+/*!
-+ Returns true if this type is a container.
-+
-+ \sa dbus_type_is_container
-+*/
-+bool QDBusType::isContainer() const
-+{
-+ return d && dbus_type_is_container(d->code);
-+}
-+
-+/*!
-+ Returns the subtypes of this type, if this is a container.
-+
-+ \sa isContainer
-+*/
-+QDBusTypeList QDBusType::subTypes() const
-+{
-+ if (d)
-+ return d->subTypes;
-+ return QDBusTypeList();
-+}
-+
-+/*!
-+ Returns true if this type is an array.
-+
-+ \sa isContainer, arrayElement
-+*/
-+bool QDBusType::isArray() const
-+{
-+ return dbusType() == DBUS_TYPE_ARRAY;
-+}
-+
-+/*!
-+ This is a convenience function that returns the element type of an array.
-+ If this object is not an array, it returns an invalid QDBusType.
-+
-+ \sa isArray
-+*/
-+QDBusType QDBusType::arrayElement() const
-+{
-+ if (isArray() && d->subTypes.count() == 1)
-+ return d->subTypes.first();
-+ return QDBusType();
-+}
-+
-+/*!
-+ Returns true if this type is a map (i.e., an array of dictionary entries).
-+
-+ \sa isContainer, isArray, arrayElement
-+*/
-+bool QDBusType::isMap() const
-+{
-+ return arrayElement().dbusType() == DBUS_TYPE_DICT_ENTRY;
-+}
-+
-+/*!
-+ If this object is a map, returns the (basic) type that corresponds to the key type.
-+ If this object is not a map, returns an invalid QDBusType.
-+
-+ \sa isMap
-+*/
-+QDBusType QDBusType::mapKey() const
-+{
-+ if (isMap())
-+ return arrayElement().d->subTypes.first();
-+ return QDBusType();
-+}
-+
-+/*!
-+ If this object is a map, returns the type that corresponds to the value type.
-+ If this object is not a map, returns an invalid QDBusType.
-+
-+ \sa isMap
-+*/
-+QDBusType QDBusType::mapValue() const
-+{
-+ if (isMap())
-+ return arrayElement().d->subTypes.at(1);
-+ return QDBusType();
-+}
-+
-+/*!
-+ Returns true if the two types match.
-+*/
-+bool QDBusType::operator==(const QDBusType& other) const
-+{
-+ if (!d && !other.d)
-+ return true;
-+ if (!d || !other.d)
-+ return false;
-+ return d->code == other.d->code && d->subTypes == other.d->subTypes;
-+}
-+
-+/*!
-+ Returns a string representation of this type.
-+*/
-+QString QDBusType::toString(StringFormat sf) const
-+{
-+ switch (sf) {
-+ case ConventionalNames:
-+ return QDBusConventionalNames().toString(*this);
-+
-+ case QtNames:
-+ return QDBusQtNames().toString(*this);
-+
-+ case QVariantNames:
-+ return QDBusQVariantNames().toString(*this);
-+ }
-+
-+ return QString(); // invalid
-+}
-+
-+/*!
-+ Converts the DBus type to QVariant::Type
-+*/
-+QVariant::Type QDBusType::qvariantType(int type)
-+{
-+ char c[2] = { type, 0 };
-+ return qvariantType(c);
-+}
-+
-+/*!
-+ Converts the DBus type signature to QVariant::Type.
-+*/
-+QVariant::Type QDBusType::qvariantType(const char* signature)
-+{
-+ if (!signature)
-+ return QVariant::Invalid;
-+
-+ // three special cases that don't validate as single:
-+ if (qstrlen(signature) == 1) {
-+ if (signature[0] == DBUS_TYPE_STRUCT)
-+ return QVariant::List;
-+ else if (signature[0] == DBUS_TYPE_DICT_ENTRY)
-+ return QVariant::Map;
-+ else if (signature[0] == DBUS_TYPE_ARRAY)
-+ return QVariant::List;
-+ }
-+
-+ // now we can validate
-+ if ( !dbus_signature_validate_single(signature, 0) )
-+ return QVariant::Invalid;
-+
-+ switch (signature[0])
-+ {
-+ case DBUS_TYPE_BOOLEAN:
-+ return QVariant::Bool;
-+
-+ case DBUS_TYPE_INT16:
-+ case DBUS_TYPE_INT32:
-+ return QVariant::Int;
-+
-+ case DBUS_TYPE_BYTE:
-+ case DBUS_TYPE_UINT16:
-+ case DBUS_TYPE_UINT32:
-+ return QVariant::UInt;
-+
-+ case DBUS_TYPE_INT64:
-+ return QVariant::LongLong;
-+
-+ case DBUS_TYPE_UINT64:
-+ return QVariant::ULongLong;
-+
-+ case DBUS_TYPE_DOUBLE:
-+ return QVariant::Double;
-+
-+ case DBUS_TYPE_STRING:
-+ case DBUS_TYPE_OBJECT_PATH:
-+ case DBUS_TYPE_SIGNATURE:
-+ return QVariant::String;
-+
-+ case DBUS_STRUCT_BEGIN_CHAR:
-+ return QVariant::List; // change to QDBusStruct in the future
-+
-+ case DBUS_TYPE_VARIANT:
-+ return QVariant::UserType; // must set user-type too
-+
-+ case DBUS_TYPE_ARRAY: // special case
-+ // check if it's a string list
-+ if (qvariantType(signature + 1) == QVariant::String)
-+ return QVariant::StringList;
-+
-+ // maybe it's a byte array
-+ if (DBUS_TYPE_BYTE == signature[1])
-+ return QVariant::ByteArray;
-+
-+ // check if it's a dict
-+ if (DBUS_DICT_ENTRY_BEGIN_CHAR == signature[1])
-+ return QVariant::Map;
-+
-+ return QVariant::List;
-+
-+ default:
-+ return QVariant::Invalid;
-+
-+ }
-+}
-+
-+/*!
-+ Converts the QVariant::Type to a DBus type code.
-+
-+ \param t the type to convert
-+*/
-+int QDBusType::dbusType(QVariant::Type t)
-+{
-+ switch (t)
-+ {
-+ case QVariant::Bool:
-+ return DBUS_TYPE_BOOLEAN;
-+
-+ case QVariant::Int:
-+ return DBUS_TYPE_INT32;
-+
-+ case QVariant::UInt:
-+ case QVariant::Char:
-+ return DBUS_TYPE_UINT32;
-+
-+ case QVariant::LongLong:
-+ return DBUS_TYPE_INT64;
-+
-+ case QVariant::ULongLong:
-+ return DBUS_TYPE_UINT64;
-+
-+ case QVariant::Double:
-+ return DBUS_TYPE_DOUBLE;
-+
-+ // from QMetaType:
-+ case QMetaType::Short:
-+ return DBUS_TYPE_INT16;
-+
-+ case QMetaType::UShort:
-+ return DBUS_TYPE_UINT16;
-+
-+ case QMetaType::UChar:
-+ return DBUS_TYPE_BYTE;
-+
-+ case QVariant::String:
-+ case QVariant::Date:
-+ case QVariant::Time:
-+ case QVariant::DateTime:
-+ return DBUS_TYPE_STRING;
-+
-+ case QVariant::Map:
-+ // internal type information has been lost
-+ return DBUS_TYPE_DICT_ENTRY;
-+
-+ case QVariant::List:
-+ case QVariant::StringList:
-+ case QVariant::ByteArray:
-+ // could also be a struct...
-+ return DBUS_TYPE_ARRAY;
-+
-+ case QVariant::UserType:
-+ return DBUS_TYPE_VARIANT;
-+
-+ default:
-+ break; // avoid compiler warnings
-+ }
-+
-+ if (int(t) == QMetaTypeId<QDBusVariant>::qt_metatype_id())
-+ return DBUS_TYPE_VARIANT;
-+
-+ return DBUS_TYPE_INVALID;
-+}
-+
-+/*!
-+ Converts the QVariant::Type to a DBus type signature.
-+
-+ \param t the type to convert
-+*/
-+const char* QDBusType::dbusSignature(QVariant::Type t)
-+{
-+ switch (t)
-+ {
-+ case QVariant::Bool:
-+ return DBUS_TYPE_BOOLEAN_AS_STRING;
-+
-+ case QVariant::Int:
-+ return DBUS_TYPE_INT32_AS_STRING;
-+
-+ case QVariant::UInt:
-+ case QVariant::Char:
-+ return DBUS_TYPE_UINT32_AS_STRING;
-+
-+ case QMetaType::Short:
-+ return DBUS_TYPE_INT16_AS_STRING;
-+
-+ case QMetaType::UShort:
-+ return DBUS_TYPE_UINT16_AS_STRING;
-+
-+ case QMetaType::UChar:
-+ return DBUS_TYPE_BYTE_AS_STRING;
-+
-+ case QVariant::LongLong:
-+ return DBUS_TYPE_INT64_AS_STRING;
-+
-+ case QVariant::ULongLong:
-+ return DBUS_TYPE_UINT64_AS_STRING;
-+
-+ case QVariant::Double:
-+ return DBUS_TYPE_DOUBLE_AS_STRING;
-+
-+ case QVariant::String:
-+ case QVariant::Date:
-+ case QVariant::Time:
-+ case QVariant::DateTime:
-+ return DBUS_TYPE_STRING_AS_STRING;
-+
-+ case QVariant::Map:
-+ // internal type information has been lost
-+ return DBUS_TYPE_ARRAY_AS_STRING
-+ DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING
-+ DBUS_TYPE_STRING_AS_STRING
-+ DBUS_TYPE_VARIANT_AS_STRING
-+ DBUS_DICT_ENTRY_END_CHAR_AS_STRING; // a{sv}
-+
-+ case QVariant::StringList:
-+ return DBUS_TYPE_ARRAY_AS_STRING
-+ DBUS_TYPE_STRING_AS_STRING; // as
-+
-+ case QVariant::ByteArray:
-+ return DBUS_TYPE_ARRAY_AS_STRING
-+ DBUS_TYPE_BYTE_AS_STRING; // ay
-+
-+ case QVariant::List:
-+ // not a string list
-+ // internal list data has been lost
-+ // could also be a struct...
-+ return DBUS_TYPE_ARRAY_AS_STRING
-+ DBUS_TYPE_VARIANT_AS_STRING; // av
-+
-+ default:
-+ if (int(t) == qMetaTypeId<QDBusVariant>())
-+ return DBUS_TYPE_VARIANT_AS_STRING;
-+
-+ return DBUS_TYPE_INVALID_AS_STRING;
-+ }
-+}
-+
-+/*!
-+ Guesses the DBus type from the given variant.
-+*/
-+QDBusType QDBusType::guessFromVariant(const QVariant& variant, VariantListMode mode)
-+{
-+ if (variant.type() == QVariant::List) {
-+ // investigate deeper
-+ QDBusType t;
-+ t.d = new QDBusTypePrivate;
-+
-+ if (mode == ListIsArray) {
-+ t.d->code = DBUS_TYPE_ARRAY;
-+
-+ const QVariantList list = variant.toList();
-+ if (!list.isEmpty()) {
-+ // check if all elements have the same type
-+ QVariant::Type type = list.first().type();
-+ foreach (const QVariant& v, list)
-+ if (type != v.type()) {
-+ // at least one is different
-+ type = QVariant::Invalid;
-+ break;
-+ }
-+
-+ if (type != QVariant::Invalid) {
-+ // all are of the same type
-+ t.d->subTypes << guessFromVariant(list.first());
-+ return t;
-+ }
-+ }
-+
-+ // internal information has been lost or there are many types
-+ QDBusType nested;
-+ nested.d = new QDBusTypePrivate;
-+ nested.d->code = DBUS_TYPE_VARIANT;
-+ t.d->subTypes << nested;
-+ return t;
-+ }
-+ else {
-+ // treat it as a struct
-+ t.d->code = DBUS_TYPE_STRUCT;
-+
-+ // add the elements:
-+ const QVariantList list = variant.toList();
-+ foreach (const QVariant& v, list)
-+ t.d->subTypes << guessFromVariant(v, mode);
-+
-+ return t;
-+ }
-+ }
-+ else if (variant.type() == QVariant::Map) {
-+ // investigate deeper
-+ QDBusType t, t2, t3;
-+ t2.d = new QDBusTypePrivate;
-+ t2.d->code = DBUS_TYPE_DICT_ENTRY;
-+
-+ // the key
-+ t3.d = new QDBusTypePrivate;
-+ t3.d->code = DBUS_TYPE_STRING;
-+ t2.d->subTypes << t3;
-+
-+ const QVariantMap map = variant.toMap();
-+ if (!map.isEmpty()) {
-+ // check if all elements have the same type
-+ QVariantMap::const_iterator it = map.constBegin(),
-+ end = map.constEnd();
-+ QVariant::Type type = it.value().type();
-+ for ( ; it != end; ++it)
-+ if (type != it.value().type()) {
-+ // at least one is different
-+ type = QVariant::Invalid;
-+ break;
-+ }
-+
-+ if (type != QVariant::Invalid)
-+ t2.d->subTypes << guessFromVariant(map.constBegin().value());
-+ else {
-+ // multiple types
-+ t3.d->code = DBUS_TYPE_VARIANT;
-+ t2.d->subTypes << t3;
-+ }
-+ }
-+ else {
-+ // information lost
-+ t3.d->code = DBUS_TYPE_VARIANT;
-+ t2.d->subTypes << t3;
-+ }
-+
-+ t.d = new QDBusTypePrivate;
-+ t.d->code = DBUS_TYPE_ARRAY;
-+ t.d->subTypes << t2;
-+ return t;
-+ }
-+ else
-+ return QDBusType(variant.type());
-+}
-+
-+/*!
-+ \class QDBusTypeList
-+ \brief A list of DBus types.
-+
-+ Represents zero or more DBus types in sequence, such as those used in argument lists
-+ or in subtypes of structs and maps.
-+*/
-+
-+/*!
-+ \fn QDBusTypeList::QDBusTypeList()
-+
-+ Default constructor.
-+ */
-+
-+/*!
-+ \fn QDBusTypeList::QDBusTypeList(const QDBusTypeList& other)
-+
-+ Copy constructor.
-+ \param other the list to copy
-+ */
-+
-+/*!
-+ \fn QDBusTypeList::QDBusTypeList(const QList<QDBusType>& other)
-+
-+ Copy constructor.
-+ \param other the list to copy
-+ */
-+
-+/*!
-+ Constructs a type list by parsing the signature given.
-+ \param signature the signature to be parsed
-+ */
-+QDBusTypeList::QDBusTypeList(const char* signature)
-+{
-+ if (!signature || !*signature)
-+ return; // empty
-+
-+ // validate it first
-+ if ( !dbus_signature_validate(signature, 0) )
-+ return;
-+
-+ // split it into components
-+ DBusSignatureIter iter;
-+ dbus_signature_iter_init(&iter, signature);
-+
-+ do {
-+ *this << QDBusType(&iter);
-+ } while (dbus_signature_iter_next(&iter));
-+}
-+
-+/*!
-+ Constructs a type list by parsing the elements on this iterator level.
-+
-+ \param iter the iterator containing the elements on this level
-+*/
-+QDBusTypeList::QDBusTypeList(DBusSignatureIter* iter)
-+{
-+ do {
-+ QDBusType item(iter);
-+ if (!item.isValid()) {
-+ clear();
-+ return;
-+ }
-+
-+ *this << item;
-+ } while (dbus_signature_iter_next(iter));
-+}
-+
-+/*!
-+ Returns true if this type list can represent the inner components of a map.
-+*/
-+bool QDBusTypeList::canBeMap() const
-+{
-+ return size() == 2 && at(0).isBasic();
-+}
-+
-+/*!
-+ Reconstructs the type signature that this type list represents.
-+*/
-+QByteArray QDBusTypeList::dbusSignature() const
-+{
-+ QByteArray retval;
-+ foreach (QDBusType t, *this)
-+ retval += t.dbusSignature();
-+ return retval;
-+}
-diff -Naur dbus-0.61.orig/qt/qdbustype.h dbus-0.61/qt/qdbustype.h
---- dbus-0.61.orig/qt/qdbustype.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbustype.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,119 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSTYPE_H
-+#define QDBUSTYPE_H
-+
-+#include <QtCore/qvariant.h>
-+#include <QtCore/qbytearray.h>
-+#include <QtCore/qshareddata.h>
-+#include <QtCore/qlist.h>
-+#include "qdbusmacros.h"
-+#include <dbus/dbus.h>
-+
-+// forward declaration
-+class QDBusTypeList;
-+
-+class QDBusTypePrivate;
-+class QDBUS_EXPORT QDBusType
-+{
-+public:
-+ enum StringFormat
-+ {
-+ ConventionalNames,
-+ QtNames,
-+ QVariantNames
-+ };
-+
-+ QDBusType();
-+ explicit QDBusType(int type);
-+ explicit QDBusType(QVariant::Type type);
-+ explicit QDBusType(const char* signature);
-+ explicit QDBusType(DBusSignatureIter*);
-+ explicit QDBusType(const QString& str);
-+ explicit QDBusType(const QByteArray& str);
-+ QDBusType(const QDBusType& other);
-+
-+ ~QDBusType();
-+
-+ QDBusType& operator=(const QDBusType& other);
-+
-+ QVariant::Type qvariantType() const;
-+
-+ int dbusType() const;
-+ QByteArray dbusSignature() const;
-+ bool isValid() const;
-+ bool isBasic() const;
-+ bool isContainer() const;
-+
-+ QDBusTypeList subTypes() const;
-+
-+ bool isArray() const;
-+ QDBusType arrayElement() const;
-+
-+ bool isMap() const;
-+ QDBusType mapKey() const;
-+ QDBusType mapValue() const;
-+
-+ bool operator==(const QDBusType& other) const;
-+
-+ QString toString(StringFormat = QtNames) const;
-+
-+ static QVariant::Type qvariantType(int type);
-+ static QVariant::Type qvariantType(const char* signature);
-+ static int dbusType(QVariant::Type);
-+ static const char* dbusSignature(QVariant::Type);
-+
-+ enum VariantListMode {
-+ ListIsArray,
-+ ListIsStruct
-+ };
-+ static QDBusType guessFromVariant(const QVariant &variant, VariantListMode = ListIsArray);
-+
-+private:
-+ QSharedDataPointer<QDBusTypePrivate> d;
-+};
-+
-+class QDBUS_EXPORT QDBusTypeList: public QList<QDBusType>
-+{
-+public:
-+ inline QDBusTypeList() { }
-+ inline QDBusTypeList(const QDBusTypeList& other)
-+ : QList<QDBusType>(other)
-+ { }
-+ inline QDBusTypeList(const QList<QDBusType>& other)
-+ : QList<QDBusType>(other)
-+ { }
-+ QDBusTypeList(const char* signature);
-+ QDBusTypeList(DBusSignatureIter*);
-+
-+ bool canBeMap() const;
-+
-+ inline QDBusTypeList& operator<<(const QDBusType& item)
-+ { QList<QDBusType>::operator<<(item); return *this; }
-+
-+ QByteArray dbusSignature() const;
-+};
-+
-+#endif // QDBUSTYPE_H
-diff -Naur dbus-0.61.orig/qt/qdbusutil.cpp dbus-0.61/qt/qdbusutil.cpp
---- dbus-0.61.orig/qt/qdbusutil.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusutil.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,133 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusutil.h"
-+
-+#include <dbus/dbus.h>
-+
-+#include <QtCore/qstringlist.h>
-+#include <QtCore/qregexp.h>
-+
-+namespace QDBusUtil
-+{
-+
-+ bool isValidInterfaceName(const QString& ifaceName)
-+ {
-+ if (ifaceName.isEmpty() || ifaceName.length() > DBUS_MAXIMUM_NAME_LENGTH)
-+ return false;
-+
-+ QStringList parts = ifaceName.split('.');
-+ if (parts.count() < 2)
-+ return false; // at least two parts
-+
-+ foreach (QString part, parts)
-+ if (!isValidMemberName(part))
-+ return false;
-+
-+ return true;
-+ }
-+
-+ bool isValidUniqueConnectionName(const QString &connName)
-+ {
-+ if (connName.isEmpty() || connName.length() > DBUS_MAXIMUM_NAME_LENGTH ||
-+ !connName.startsWith(':'))
-+ return false;
-+
-+ QStringList parts = connName.mid(1).split('.');
-+ if (parts.count() < 1)
-+ return false;
-+
-+ QRegExp regex("[a-zA-Z0-9_-]+");
-+ foreach (QString part, parts)
-+ if (!regex.exactMatch(part))
-+ return false;
-+
-+ return true;
-+ }
-+
-+ bool isValidBusName(const QString &busName)
-+ {
-+ if (busName.isEmpty() || busName.length() > DBUS_MAXIMUM_NAME_LENGTH)
-+ return false;
-+
-+ if (busName.startsWith(':'))
-+ return isValidUniqueConnectionName(busName);
-+
-+ QStringList parts = busName.split('.');
-+ if (parts.count() < 1)
-+ return false;
-+
-+ QRegExp regex("[a-zA-Z_-][a-zA-Z0-9_-]*");
-+ foreach (QString part, parts)
-+ if (!regex.exactMatch(part))
-+ return false;
-+
-+ return true;
-+ }
-+
-+ bool isValidMemberName(const QString &memberName)
-+ {
-+ if (memberName.isEmpty() || memberName.length() > DBUS_MAXIMUM_NAME_LENGTH)
-+ return false;
-+
-+ QRegExp regex("[a-zA-Z0-9_]+");
-+ return regex.exactMatch(memberName);
-+ }
-+
-+ bool isValidErrorName(const QString &errorName)
-+ {
-+ return isValidInterfaceName(errorName);
-+ }
-+
-+ bool isValidObjectPath(const QString &path)
-+ {
-+ if (path == QLatin1String("/"))
-+ return true;
-+
-+ if (!path.startsWith('/') || path.indexOf(QLatin1String("//")) != -1 ||
-+ path.endsWith('/'))
-+ return false;
-+
-+ QStringList parts = path.split('/');
-+ Q_ASSERT(parts.count() >= 1);
-+ parts.removeFirst(); // it starts with /, so we get an empty first part
-+
-+ QRegExp regex("[a-zA-Z0-9_]+");
-+ foreach (QString part, parts)
-+ if (!regex.exactMatch(part))
-+ return false;
-+
-+ return true;
-+ }
-+
-+ bool isValidSignature(const QString &signature)
-+ {
-+ return dbus_signature_validate(signature.toUtf8(), 0);
-+ }
-+
-+ bool isValidSingleSignature(const QString &signature)
-+ {
-+ return dbus_signature_validate_single(signature.toUtf8(), 0);
-+ }
-+
-+} // namespace QDBusUtil
-diff -Naur dbus-0.61.orig/qt/qdbusutil.h dbus-0.61/qt/qdbusutil.h
---- dbus-0.61.orig/qt/qdbusutil.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusutil.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,50 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSUTIL_H
-+#define QDBUSUTIL_H
-+
-+#include <QtCore/qstring.h>
-+
-+#include "qdbusmacros.h"
-+
-+namespace QDBusUtil
-+{
-+ bool isValidInterfaceName(const QString &ifaceName) QDBUS_EXPORT;
-+
-+ bool isValidUniqueConnectionName(const QString &busName) QDBUS_EXPORT;
-+
-+ bool isValidBusName(const QString &busName) QDBUS_EXPORT;
-+
-+ bool isValidMemberName(const QString &memberName) QDBUS_EXPORT;
-+
-+ bool isValidErrorName(const QString &errorName) QDBUS_EXPORT;
-+
-+ bool isValidObjectPath(const QString &path) QDBUS_EXPORT;
-+
-+ bool isValidSignature(const QString &signature) QDBUS_EXPORT;
-+
-+ bool isValidSingleSignature(const QString &signature) QDBUS_EXPORT;
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt/qdbusvariant.h dbus-0.61/qt/qdbusvariant.h
---- dbus-0.61.orig/qt/qdbusvariant.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusvariant.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,40 @@
-+/* qdbusvariant.h DBUS variant struct
-+ *
-+ * Copyright (C) 2005 Harald Fernengel <harry at kdevelop.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSVARIANT_H
-+#define QDBUSVARIANT_H
-+
-+#include "qdbusmacros.h"
-+#include "qdbustype.h"
-+#include <qvariant.h>
-+
-+struct QDBUS_EXPORT QDBusVariant
-+{
-+ QDBusType type;
-+ QVariant value;
-+};
-+Q_DECLARE_METATYPE(QDBusVariant)
-+
-+#endif
-+
-diff -Naur dbus-0.61.orig/qt/qdbusxmlparser.cpp dbus-0.61/qt/qdbusxmlparser.cpp
---- dbus-0.61.orig/qt/qdbusxmlparser.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusxmlparser.cpp 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,347 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#include "qdbusxmlparser_p.h"
-+#include "qdbusinterface.h"
-+#include "qdbusinterface_p.h"
-+#include "qdbusconnection_p.h"
-+#include "qdbusobject_p.h"
-+
-+#include <QtXml/qdom.h>
-+#include <QtCore/qmap.h>
-+#include <QtCore/qvariant.h>
-+#include <QtCore/qtextstream.h>
-+
-+static QDBusIntrospection::Annotations
-+parseAnnotations(const QDomElement& elem)
-+{
-+ QDBusIntrospection::Annotations retval;
-+ QDomNodeList list = elem.elementsByTagName("annotation");
-+ for (int i = 0; i < list.count(); ++i)
-+ {
-+ QDomElement ann = list.item(i).toElement();
-+ if (ann.isNull())
-+ continue;
-+
-+ QString name = ann.attribute("name"),
-+ value = ann.attribute("value");
-+
-+ if (name.isEmpty())
-+ continue;
-+
-+ retval.insert(name, value);
-+ }
-+
-+ return retval;
-+}
-+
-+static QDBusType
-+parseType(const QString& type)
-+{
-+ if (type.isEmpty())
-+ return QDBusType();
-+ return QDBusType(type);
-+}
-+
-+static QDBusIntrospection::Arguments
-+parseArgs(const QDomElement& elem, const QLatin1String& direction, bool acceptEmpty = false)
-+{
-+ QDBusIntrospection::Arguments retval;
-+ QDomNodeList list = elem.elementsByTagName("arg");
-+ for (int i = 0; i < list.count(); ++i)
-+ {
-+ QDomElement arg = list.item(i).toElement();
-+ if (arg.isNull())
-+ continue;
-+
-+ if ((acceptEmpty && !arg.hasAttribute("direction")) ||
-+ arg.attribute("direction") == direction) {
-+
-+ QDBusIntrospection::Argument argData;
-+ if (arg.hasAttribute("name"))
-+ argData.name = arg.attribute("name"); // can be empty
-+ argData.type = parseType(arg.attribute("type"));
-+
-+ if (!argData.type.isValid())
-+ continue;
-+
-+ retval << argData;
-+ }
-+ }
-+ return retval;
-+}
-+
-+QDBusXmlParser::QDBusXmlParser(const QString& service, const QString& path,
-+ const QString& xmlData, QDBusConnectionPrivate* store)
-+ : m_service(service), m_path(path), m_store(store)
-+{
-+ QDomDocument doc;
-+ doc.setContent(xmlData);
-+ m_node = doc.firstChildElement("node");
-+}
-+
-+QDBusXmlParser::QDBusXmlParser(const QString& service, const QString& path,
-+ const QDomElement& node, QDBusConnectionPrivate* store)
-+ : m_service(service), m_path(path), m_node(node), m_store(store)
-+{
-+}
-+
-+void QDBusXmlParser::parse(const QDBusObjectPrivate* d, const QString &xml)
-+{
-+ QDBusXmlParser parser(d->data->service, d->data->path, xml, d->parent);
-+ parser.object();
-+ parser.interfaces();
-+}
-+
-+QDBusIntrospection::Interfaces
-+QDBusXmlParser::interfaces() const
-+{
-+ QDBusIntrospection::Interfaces retval;
-+
-+ if (m_node.isNull())
-+ return retval;
-+
-+ QDomNodeList interfaces = m_node.elementsByTagName("interface");
-+ for (int i = 0; i < interfaces.count(); ++i)
-+ {
-+ QDomElement iface = interfaces.item(i).toElement();
-+ QString ifaceName = iface.attribute("name");
-+ if (iface.isNull() || ifaceName.isEmpty())
-+ continue; // for whatever reason
-+
-+ QDBusIntrospection::Interface *ifaceData;
-+ if (m_store) {
-+ QSharedDataPointer<QDBusIntrospection::Interface> knownData =
-+ m_store->findInterface(ifaceName);
-+ if (!knownData.constData()->introspection.isEmpty()) {
-+ // it's already known
-+ // we don't have to re-parse
-+ retval.insert(ifaceName, knownData);
-+ continue;
-+ }
-+
-+ // ugly, but ok
-+ // we don't want to detach
-+ // we *WANT* to modify the shared data
-+ ifaceData = const_cast<QDBusIntrospection::Interface*>( knownData.constData() );
-+ }
-+ else {
-+ ifaceData = new QDBusIntrospection::Interface;
-+ ifaceData->name = ifaceName;
-+ }
-+
-+ {
-+ // save the data
-+ QTextStream ts(&ifaceData->introspection);
-+ iface.save(ts,2);
-+ }
-+
-+ // parse annotations
-+ ifaceData->annotations = parseAnnotations(iface);
-+
-+ // parse methods
-+ QDomNodeList list = iface.elementsByTagName("method");
-+ for (int j = 0; j < list.count(); ++j)
-+ {
-+ QDomElement method = list.item(j).toElement();
-+ QString methodName = method.attribute("name");
-+ if (method.isNull() || methodName.isEmpty())
-+ continue;
-+
-+ QDBusIntrospection::Method methodData;
-+ methodData.name = methodName;
-+
-+ // parse arguments
-+ methodData.inputArgs = parseArgs(method, QLatin1String("in"));
-+ methodData.outputArgs = parseArgs(method, QLatin1String("out"));
-+ methodData.annotations = parseAnnotations(method);
-+
-+ // add it
-+ ifaceData->methods.insert(methodName, methodData);
-+ }
-+
-+ // parse signals
-+ list = iface.elementsByTagName("signal");
-+ for (int j = 0; j < list.count(); ++j)
-+ {
-+ QDomElement signal = list.item(j).toElement();
-+ QString signalName = signal.attribute("name");
-+ if (signal.isNull() || signalName.isEmpty())
-+ continue;
-+
-+ QDBusIntrospection::Signal signalData;
-+ signalData.name = signalName;
-+
-+ // parse data
-+ signalData.outputArgs = parseArgs(signal, QLatin1String("out"), true);
-+ signalData.annotations = parseAnnotations(signal);
-+
-+ // add it
-+ ifaceData->signals_.insert(signalName, signalData);
-+ }
-+
-+ // parse properties
-+ list = iface.elementsByTagName("property");
-+ for (int j = 0; j < list.count(); ++j)
-+ {
-+ QDomElement property = list.item(j).toElement();
-+ QString propertyName = property.attribute("name");
-+ if (property.isNull() || propertyName.isEmpty())
-+ continue;
-+
-+ QDBusIntrospection::Property propertyData;
-+
-+ // parse data
-+ propertyData.name = propertyName;
-+ propertyData.type = parseType(property.attribute("type"));
-+ propertyData.annotations = parseAnnotations(property);
-+
-+ if (!propertyData.type.isValid())
-+ // cannot be!
-+ continue;
-+
-+ QString access = property.attribute("access");
-+ if (access.isEmpty())
-+ // can't be empty either!
-+ continue;
-+ else if (access == QLatin1String("read"))
-+ propertyData.access = QDBusIntrospection::Property::Read;
-+ else if (access == QLatin1String("write"))
-+ propertyData.access = QDBusIntrospection::Property::Write;
-+ else if (access == QLatin1String("readwrite"))
-+ propertyData.access = QDBusIntrospection::Property::ReadWrite;
-+ else
-+ continue; // invalid one!
-+
-+ // add it
-+ ifaceData->properties.insert(propertyName, propertyData);
-+ }
-+
-+ // add it
-+ retval.insert(ifaceName, QSharedDataPointer<QDBusIntrospection::Interface>(ifaceData));
-+ }
-+
-+ return retval;
-+}
-+
-+QSharedDataPointer<QDBusIntrospection::Object>
-+QDBusXmlParser::object() const
-+{
-+ QSharedDataPointer<QDBusIntrospection::Object> retval;
-+
-+ if (m_node.isNull())
-+ return retval;
-+
-+ // check if the store knows about this one
-+ QDBusIntrospection::Object* objData;
-+ if (m_store) {
-+ retval = objData = m_store->findObject(m_service, m_path);
-+ }
-+ else {
-+ objData = new QDBusIntrospection::Object;
-+ objData->service = m_service;
-+ objData->path = m_path;
-+ }
-+
-+ // check if we have anything to process
-+ if (objData->introspection.isNull() && !m_node.firstChild().isNull()) {
-+ // yes, introspect this object
-+ QTextStream ts(&objData->introspection);
-+ m_node.save(ts,2);
-+
-+ QDomNodeList objects = m_node.elementsByTagName("node");
-+ for (int i = 0; i < objects.count(); ++i) {
-+ QDomElement obj = objects.item(i).toElement();
-+ QString objName = obj.attribute("name");
-+ if (obj.isNull() || objName.isEmpty())
-+ continue; // for whatever reason
-+
-+ objData->childObjects.append(objName);
-+ }
-+
-+ QDomNodeList interfaces = m_node.elementsByTagName("interface");
-+ for (int i = 0; i < interfaces.count(); ++i) {
-+ QDomElement iface = interfaces.item(i).toElement();
-+ QString ifaceName = iface.attribute("name");
-+ if (iface.isNull() || ifaceName.isEmpty())
-+ continue;
-+
-+ objData->interfaces.append(ifaceName);
-+ }
-+ }
-+
-+ return retval;
-+}
-+
-+QSharedDataPointer<QDBusIntrospection::ObjectTree>
-+QDBusXmlParser::objectTree() const
-+{
-+ QSharedDataPointer<QDBusIntrospection::ObjectTree> retval;
-+
-+ if (m_node.isNull())
-+ return retval;
-+
-+ retval = new QDBusIntrospection::ObjectTree;
-+
-+ retval->service = m_service;
-+ retval->path = m_path;
-+
-+ QTextStream ts(&retval->introspection);
-+ m_node.save(ts,2);
-+
-+ // interfaces are easy:
-+ retval->interfaceData = interfaces();
-+ retval->interfaces = retval->interfaceData.keys();
-+
-+ // sub-objects are slightly more difficult:
-+ QDomNodeList objects = m_node.elementsByTagName("node");
-+ for (int i = 0; i < objects.count(); ++i) {
-+ QDomElement obj = objects.item(i).toElement();
-+ QString objName = obj.attribute("name");
-+ if (obj.isNull() || objName.isEmpty())
-+ continue; // for whatever reason
-+
-+ // check if we have anything to process
-+ if (!obj.firstChild().isNull()) {
-+ // yes, introspect this object
-+ QString xml;
-+ QTextStream ts(&xml);
-+ obj.save(ts,0);
-+
-+ // parse it
-+ QString objAbsName = m_path;
-+ if (!objAbsName.endsWith('/'))
-+ objAbsName.append('/');
-+ objAbsName += objName;
-+
-+ QDBusXmlParser parser(m_service, objAbsName, obj, m_store);
-+ retval->childObjectData.insert(objName, parser.objectTree());
-+ }
-+
-+ retval->childObjects << objName;
-+ }
-+
-+ return QSharedDataPointer<QDBusIntrospection::ObjectTree>( retval );
-+}
-+
-diff -Naur dbus-0.61.orig/qt/qdbusxmlparser_p.h dbus-0.61/qt/qdbusxmlparser_p.h
---- dbus-0.61.orig/qt/qdbusxmlparser_p.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt/qdbusxmlparser_p.h 2006-02-15 17:25:12.000000000 +0100
-@@ -0,0 +1,59 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2005 Thiago Macieira <thiago at kde.org>
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+
-+#ifndef QDBUSXMLPARSER_H
-+#define QDBUSXMLPARSER_H
-+
-+#include <QtCore/qmap.h>
-+#include <QtXml/qdom.h>
-+#include "qdbusmacros.h"
-+#include "qdbusintrospection.h"
-+
-+class QDBusConnectionPrivate;
-+class QDBusObjectPrivate;
-+
-+/**
-+ * @internal
-+ */
-+class QDBusXmlParser
-+{
-+ QString m_service;
-+ QString m_path;
-+ QDomElement m_node;
-+ QDBusConnectionPrivate* m_store;
-+
-+public:
-+ QDBusXmlParser(const QString& service, const QString& path,
-+ const QString& xmlData, QDBusConnectionPrivate* store = 0);
-+ QDBusXmlParser(const QString& service, const QString& path,
-+ const QDomElement& node, QDBusConnectionPrivate* store = 0);
-+
-+ QDBusIntrospection::Interfaces interfaces() const;
-+ QSharedDataPointer<QDBusIntrospection::Object> object() const;
-+ QSharedDataPointer<QDBusIntrospection::ObjectTree> objectTree() const;
-+
-+ static void parse(const QDBusObjectPrivate* d, const QString &xml);
-+};
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt3/Makefile.am dbus-0.61/qt3/Makefile.am
---- dbus-0.61.orig/qt3/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/Makefile.am 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,37 @@
-+if HAVE_QT3
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_QT3_CXXFLAGS)
-+
-+dbusincludedir=$(includedir)/dbus-1.0/dbus
-+
-+lib_LTLIBRARIES=libdbus-qt-1.la
-+
-+dbusinclude_HEADERS= \
-+ dbus-qt.h message.h connection.h \
-+ server.h
-+
-+libdbus_qt_1_la_SOURCES = \
-+ $(top_srcdir)/qt3/dbus-qthread.cpp \
-+ $(top_srcdir)/qt3/message.cpp \
-+ $(top_srcdir)/qt3/connection.cpp \
-+ $(top_srcdir)/qt3/integrator.cpp \
-+ $(top_srcdir)/qt3/server.cpp \
-+ $(top_srcdir)/qt3/connection.h \
-+ $(top_srcdir)/qt3/integrator.h \
-+ $(top_srcdir)/qt3/server.h
-+
-+
-+$(top_srcdir)/qt3/connection.cpp: connection.moc
-+$(top_srcdir)/qt3/integrator.cpp: integrator.moc
-+$(top_srcdir)/qt3/server.cpp: server.moc
-+$(top_srcdir)/qt3/connection.h: connection.moc
-+$(top_srcdir)/qt3/integrator.h: integrator.moc
-+$(top_srcdir)/qt3/server.h: server.moc
-+
-+CLEANFILES=connection.moc integrator.moc server.moc
-+
-+libdbus_qt_1_la_LIBADD= $(DBUS_QT3_LIBS) $(top_builddir)/dbus/libdbus-1.la
-+libdbus_qt_1_la_LDFLAGS= -version-info 1:0 -no-undefined
-+
-+%.moc: %.h
-+ $(QT3_MOC) $< > $@
-+endif
-diff -Naur dbus-0.61.orig/qt3/Makefile.in dbus-0.61/qt3/Makefile.in
---- dbus-0.61.orig/qt3/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/Makefile.in 2006-02-27 22:34:38.000000000 +0100
-@@ -0,0 +1,717 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = qt3
-+DIST_COMMON = $(am__dbusinclude_HEADERS_DIST) $(srcdir)/Makefile.am \
-+ $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(dbusincludedir)"
-+libLTLIBRARIES_INSTALL = $(INSTALL)
-+LTLIBRARIES = $(lib_LTLIBRARIES)
-+am__DEPENDENCIES_1 =
-+ at HAVE_QT3_TRUE@libdbus_qt_1_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-+ at HAVE_QT3_TRUE@ $(top_builddir)/dbus/libdbus-1.la
-+am__libdbus_qt_1_la_SOURCES_DIST = $(top_srcdir)/qt3/dbus-qthread.cpp \
-+ $(top_srcdir)/qt3/message.cpp $(top_srcdir)/qt3/connection.cpp \
-+ $(top_srcdir)/qt3/integrator.cpp $(top_srcdir)/qt3/server.cpp \
-+ $(top_srcdir)/qt3/connection.h $(top_srcdir)/qt3/integrator.h \
-+ $(top_srcdir)/qt3/server.h
-+ at HAVE_QT3_TRUE@am_libdbus_qt_1_la_OBJECTS = dbus-qthread.lo message.lo \
-+ at HAVE_QT3_TRUE@ connection.lo integrator.lo server.lo
-+libdbus_qt_1_la_OBJECTS = $(am_libdbus_qt_1_la_OBJECTS)
-+ at HAVE_QT3_TRUE@am_libdbus_qt_1_la_rpath = -rpath $(libdir)
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CXXFLAGS) $(CXXFLAGS)
-+CXXLD = $(CXX)
-+CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(libdbus_qt_1_la_SOURCES)
-+DIST_SOURCES = $(am__libdbus_qt_1_la_SOURCES_DIST)
-+am__dbusinclude_HEADERS_DIST = dbus-qt.h message.h connection.h \
-+ server.h
-+dbusincludeHEADERS_INSTALL = $(INSTALL_HEADER)
-+HEADERS = $(dbusinclude_HEADERS)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+ at HAVE_QT3_TRUE@INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_QT3_CXXFLAGS)
-+ at HAVE_QT3_TRUE@dbusincludedir = $(includedir)/dbus-1.0/dbus
-+ at HAVE_QT3_TRUE@lib_LTLIBRARIES = libdbus-qt-1.la
-+ at HAVE_QT3_TRUE@dbusinclude_HEADERS = \
-+ at HAVE_QT3_TRUE@ dbus-qt.h message.h connection.h \
-+ at HAVE_QT3_TRUE@ server.h
-+
-+ at HAVE_QT3_TRUE@libdbus_qt_1_la_SOURCES = \
-+ at HAVE_QT3_TRUE@ $(top_srcdir)/qt3/dbus-qthread.cpp \
-+ at HAVE_QT3_TRUE@ $(top_srcdir)/qt3/message.cpp \
-+ at HAVE_QT3_TRUE@ $(top_srcdir)/qt3/connection.cpp \
-+ at HAVE_QT3_TRUE@ $(top_srcdir)/qt3/integrator.cpp \
-+ at HAVE_QT3_TRUE@ $(top_srcdir)/qt3/server.cpp \
-+ at HAVE_QT3_TRUE@ $(top_srcdir)/qt3/connection.h \
-+ at HAVE_QT3_TRUE@ $(top_srcdir)/qt3/integrator.h \
-+ at HAVE_QT3_TRUE@ $(top_srcdir)/qt3/server.h
-+
-+ at HAVE_QT3_TRUE@CLEANFILES = connection.moc integrator.moc server.moc
-+ at HAVE_QT3_TRUE@libdbus_qt_1_la_LIBADD = $(DBUS_QT3_LIBS) $(top_builddir)/dbus/libdbus-1.la
-+ at HAVE_QT3_TRUE@libdbus_qt_1_la_LDFLAGS = -version-info 1:0 -no-undefined
-+all: all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .cpp .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu qt3/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu qt3/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ if test -f $$p; then \
-+ f=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-+ else :; fi; \
-+ done
-+
-+uninstall-libLTLIBRARIES:
-+ @$(NORMAL_UNINSTALL)
-+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ p=$(am__strip_dir) \
-+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
-+ done
-+
-+clean-libLTLIBRARIES:
-+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-+ test "$$dir" != "$$p" || dir=.; \
-+ echo "rm -f \"$${dir}/so_locations\""; \
-+ rm -f "$${dir}/so_locations"; \
-+ done
-+libdbus-qt-1.la: $(libdbus_qt_1_la_OBJECTS) $(libdbus_qt_1_la_DEPENDENCIES)
-+ $(CXXLINK) $(am_libdbus_qt_1_la_rpath) $(libdbus_qt_1_la_LDFLAGS) $(libdbus_qt_1_la_OBJECTS) $(libdbus_qt_1_la_LIBADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/connection.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-qthread.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/integrator.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/message.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/server.Plo at am__quote@
-+
-+.cpp.o:
-+ at am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
-+
-+.cpp.obj:
-+ at am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-+
-+.cpp.lo:
-+ at am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-+
-+dbus-qthread.lo: $(top_srcdir)/qt3/dbus-qthread.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT dbus-qthread.lo -MD -MP -MF "$(DEPDIR)/dbus-qthread.Tpo" -c -o dbus-qthread.lo `test -f '$(top_srcdir)/qt3/dbus-qthread.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/dbus-qthread.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/dbus-qthread.Tpo" "$(DEPDIR)/dbus-qthread.Plo"; else rm -f "$(DEPDIR)/dbus-qthread.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt3/dbus-qthread.cpp' object='dbus-qthread.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o dbus-qthread.lo `test -f '$(top_srcdir)/qt3/dbus-qthread.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/dbus-qthread.cpp
-+
-+message.lo: $(top_srcdir)/qt3/message.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT message.lo -MD -MP -MF "$(DEPDIR)/message.Tpo" -c -o message.lo `test -f '$(top_srcdir)/qt3/message.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/message.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/message.Tpo" "$(DEPDIR)/message.Plo"; else rm -f "$(DEPDIR)/message.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt3/message.cpp' object='message.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o message.lo `test -f '$(top_srcdir)/qt3/message.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/message.cpp
-+
-+connection.lo: $(top_srcdir)/qt3/connection.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT connection.lo -MD -MP -MF "$(DEPDIR)/connection.Tpo" -c -o connection.lo `test -f '$(top_srcdir)/qt3/connection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/connection.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/connection.Tpo" "$(DEPDIR)/connection.Plo"; else rm -f "$(DEPDIR)/connection.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt3/connection.cpp' object='connection.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o connection.lo `test -f '$(top_srcdir)/qt3/connection.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/connection.cpp
-+
-+integrator.lo: $(top_srcdir)/qt3/integrator.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT integrator.lo -MD -MP -MF "$(DEPDIR)/integrator.Tpo" -c -o integrator.lo `test -f '$(top_srcdir)/qt3/integrator.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/integrator.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/integrator.Tpo" "$(DEPDIR)/integrator.Plo"; else rm -f "$(DEPDIR)/integrator.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt3/integrator.cpp' object='integrator.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o integrator.lo `test -f '$(top_srcdir)/qt3/integrator.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/integrator.cpp
-+
-+server.lo: $(top_srcdir)/qt3/server.cpp
-+ at am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT server.lo -MD -MP -MF "$(DEPDIR)/server.Tpo" -c -o server.lo `test -f '$(top_srcdir)/qt3/server.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/server.cpp; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/server.Tpo" "$(DEPDIR)/server.Plo"; else rm -f "$(DEPDIR)/server.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(top_srcdir)/qt3/server.cpp' object='server.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o server.lo `test -f '$(top_srcdir)/qt3/server.cpp' || echo '$(srcdir)/'`$(top_srcdir)/qt3/server.cpp
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-dbusincludeHEADERS: $(dbusinclude_HEADERS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(dbusincludedir)" || $(mkdir_p) "$(DESTDIR)$(dbusincludedir)"
-+ @list='$(dbusinclude_HEADERS)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(dbusincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(dbusincludedir)/$$f'"; \
-+ $(dbusincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(dbusincludedir)/$$f"; \
-+ done
-+
-+uninstall-dbusincludeHEADERS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(dbusinclude_HEADERS)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(dbusincludedir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(dbusincludedir)/$$f"; \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: check-am
-+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
-+installdirs:
-+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(dbusincludedir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-+ mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am: install-dbusincludeHEADERS
-+
-+install-exec-am: install-libLTLIBRARIES
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-dbusincludeHEADERS uninstall-info-am \
-+ uninstall-libLTLIBRARIES
-+
-+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-+ clean-libLTLIBRARIES clean-libtool ctags distclean \
-+ distclean-compile distclean-generic distclean-libtool \
-+ distclean-tags distdir dvi dvi-am html html-am info info-am \
-+ install install-am install-data install-data-am \
-+ install-dbusincludeHEADERS install-exec install-exec-am \
-+ install-info install-info-am install-libLTLIBRARIES \
-+ install-man install-strip installcheck installcheck-am \
-+ installdirs maintainer-clean maintainer-clean-generic \
-+ mostlyclean mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-+ uninstall-am uninstall-dbusincludeHEADERS uninstall-info-am \
-+ uninstall-libLTLIBRARIES
-+
-+
-+ at HAVE_QT3_TRUE@$(top_srcdir)/qt3/connection.cpp: connection.moc
-+ at HAVE_QT3_TRUE@$(top_srcdir)/qt3/integrator.cpp: integrator.moc
-+ at HAVE_QT3_TRUE@$(top_srcdir)/qt3/server.cpp: server.moc
-+ at HAVE_QT3_TRUE@$(top_srcdir)/qt3/connection.h: connection.moc
-+ at HAVE_QT3_TRUE@$(top_srcdir)/qt3/integrator.h: integrator.moc
-+ at HAVE_QT3_TRUE@$(top_srcdir)/qt3/server.h: server.moc
-+
-+ at HAVE_QT3_TRUE@%.moc: %.h
-+ at HAVE_QT3_TRUE@ $(QT3_MOC) $< > $@
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/qt3/connection.cpp dbus-0.61/qt3/connection.cpp
---- dbus-0.61.orig/qt3/connection.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/connection.cpp 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,168 @@
-+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
-+/* connection.cpp: Qt wrapper for DBusConnection
-+ *
-+ * Copyright (C) 2003 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.0
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "connection.h"
-+
-+using namespace DBusQt;
-+
-+#include "integrator.h"
-+using Internal::Integrator;
-+
-+struct Connection::Private
-+{
-+ Private( Connection *qq );
-+ void setConnection( DBusConnection *c );
-+ DBusConnection *connection;
-+ int connectionSlot;
-+ DBusError error;
-+ Integrator *integrator;
-+ int timeout;
-+ Connection *q;
-+};
-+
-+Connection::Private::Private( Connection *qq )
-+ : connection( 0 ), connectionSlot( 0 ), integrator( 0 ),
-+ timeout( -1 ), q( qq )
-+{
-+ dbus_error_init( &error );
-+}
-+
-+void Connection::Private::setConnection( DBusConnection *c )
-+{
-+ if (!c) {
-+ qDebug( "error: %s, %s", error.name, error.message );
-+ dbus_error_free( &error );
-+ return;
-+ }
-+ connection = c;
-+ integrator = new Integrator( c, q );
-+ connect( integrator, SIGNAL(readReady()), q, SLOT(dispatchRead()) );
-+}
-+
-+Connection::Connection( QObject *parent )
-+ : QObject( parent )
-+{
-+ d = new Private( this );
-+}
-+
-+Connection::Connection( const QString& host, QObject *parent )
-+ : QObject( parent )
-+{
-+ d = new Private( this );
-+
-+ if ( !host.isEmpty() )
-+ init( host );
-+}
-+
-+Connection::Connection( DBusBusType type, QObject* parent )
-+ : QObject( parent )
-+{
-+ d = new Private( this );
-+ d->setConnection( dbus_bus_get(type, &d->error) );
-+}
-+
-+void Connection::init( const QString& host )
-+{
-+ d->setConnection( dbus_connection_open( host.ascii(), &d->error) );
-+ //dbus_connection_allocate_data_slot( &d->connectionSlot );
-+ //dbus_connection_set_data( d->connection, d->connectionSlot, 0, 0 );
-+}
-+
-+bool Connection::isConnected() const
-+{
-+ return dbus_connection_get_is_connected( d->connection );
-+}
-+
-+bool Connection::isAuthenticated() const
-+{
-+ return dbus_connection_get_is_authenticated( d->connection );
-+}
-+
-+void Connection::open( const QString& host )
-+{
-+ if ( host.isEmpty() ) return;
-+
-+ init( host );
-+}
-+
-+void Connection::close()
-+{
-+ dbus_connection_disconnect( d->connection );
-+}
-+
-+void Connection::flush()
-+{
-+ dbus_connection_flush( d->connection );
-+}
-+
-+void Connection::dispatchRead()
-+{
-+ while ( dbus_connection_dispatch( d->connection ) == DBUS_DISPATCH_DATA_REMAINS )
-+ ;
-+}
-+
-+DBusConnection* Connection::connection() const
-+{
-+ return d->connection;
-+}
-+
-+Connection::Connection( DBusConnection *connection, QObject *parent )
-+ : QObject( parent )
-+{
-+ d = new Private(this);
-+ d->setConnection(connection);
-+}
-+
-+void Connection::send( const Message &m )
-+{
-+ dbus_connection_send(d->connection, m.message(), 0);
-+}
-+
-+void Connection::sendWithReply( const Message& )
-+{
-+}
-+
-+Message Connection::sendWithReplyAndBlock( const Message &m )
-+{
-+ DBusMessage *reply;
-+ reply = dbus_connection_send_with_reply_and_block( d->connection, m.message(), d->timeout, &d->error );
-+ if (dbus_error_is_set(&d->error)) {
-+ qDebug("error: %s, %s", d->error.name, d->error.message);
-+ dbus_error_free(&d->error);
-+ }
-+ return Message( reply );
-+}
-+
-+void* Connection::virtual_hook( int, void* )
-+{
-+}
-+
-+void Connection::dbus_connection_setup_with_qt_main (DBusConnection *connection)
-+{
-+ d->setConnection( connection );
-+}
-+
-+
-+
-+/////////////////////////////////////////////////////////
-+
-+#include "connection.moc"
-diff -Naur dbus-0.61.orig/qt3/connection.h dbus-0.61/qt3/connection.h
---- dbus-0.61.orig/qt3/connection.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/connection.h 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,83 @@
-+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
-+/* connection.h: Qt wrapper for DBusConnection
-+ *
-+ * Copyright (C) 2003 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_QT_CONNECTION_H
-+#define DBUS_QT_CONNECTION_H
-+
-+#include "message.h"
-+
-+#include <qobject.h>
-+#include <qstring.h>
-+
-+#include "dbus/dbus.h"
-+
-+namespace DBusQt {
-+ namespace Internal {
-+ class Integrator;
-+ }
-+
-+ class Connection : public QObject
-+ {
-+ Q_OBJECT
-+ public:
-+ Connection( QObject *parent =0 );
-+ Connection( const QString& host,
-+ QObject *parent = 0 );
-+ Connection( DBusBusType type, QObject* parent = 0 );
-+
-+ bool isConnected() const;
-+ bool isAuthenticated() const;
-+
-+ Message borrowMessage();
-+ Message popMessage();
-+ void stealBorrowMessage( const Message& );
-+ void dbus_connection_setup_with_qt_main (DBusConnection *connection);
-+
-+ public slots:
-+ void open( const QString& );
-+ void close();
-+ void flush();
-+ void send( const Message& );
-+ void sendWithReply( const Message& );
-+ Message sendWithReplyAndBlock( const Message& );
-+
-+ protected slots:
-+ void dispatchRead();
-+
-+ protected:
-+ void init( const QString& host );
-+ virtual void *virtual_hook( int id, void *data );
-+
-+ private:
-+ friend class Internal::Integrator;
-+ DBusConnection *connection() const;
-+ Connection( DBusConnection *connection, QObject *parent );
-+
-+ private:
-+ struct Private;
-+ Private *d;
-+ };
-+
-+}
-+
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt3/dbus-qt.h dbus-0.61/qt3/dbus-qt.h
---- dbus-0.61.orig/qt3/dbus-qt.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/dbus-qt.h 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,81 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/*
-+ * dbus-qt.h Qt integration
-+ *
-+ * Copyright (C) 2002 DBus Developers
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ * 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_QT_H
-+#define DBUS_QT_H
-+
-+#include <dbus/dbus.h>
-+/*
-+ * Two approaches - one presented below a DBusQtConnection
-+ * object which is a Qt wrapper around DBusConnection
-+class DBusQtConnection : public QObject {
-+ Q_OBJECT
-+public:
-+ DBusQtConnection( const char *address=0, QObject *parent=0,
-+ const char *name=0 );
-+
-+ bool open( const char *address );
-+ bool isConnected() const;
-+ int numMessages() const;
-+
-+public slots:
-+ void disconnect();
-+ void flush();
-+ void sendMessage( DBusMessage *message );
-+
-+signals:
-+ void message( DBusMessage* message );
-+ void error( const char* error );
-+private:
-+ DBusConnection *mConnection;
-+ QSocketNotifier *mReadNotifier;
-+ QSocketNotifier *mWriteNotifier;
-+};
-+ *
-+ * Second approach is to have a static Qt dispatcher like:
-+class DBusQtNotifier : public QObject {
-+ Q_OBJECT
-+public:
-+ static DBusQtNotifier* dbus_qt_notifier();
-+ void addConnection(DBusConnection* connection);
-+signals:
-+ void message (DBusConnection* connection, DBusMessage* message);
-+
-+private:
-+ DBusQtNotifier(QObject *parent);
-+private slots:
-+ void processNotifiers( int socket );
-+private:
-+ //implemented in terms of QSocketNotifiers
-+ QAsciiDict<DBusConnection> mReadNotifiers;
-+ QAsciiDict<DBusConnection> mWriteNotifiers;
-+};
-+ *
-+ * First one gives us a full wrapper for DBusConnection (the Qt way),
-+ * the other exposes DBusConnection, so would be easier to maintain
-+ * and keep up while DBus evolves.
-+ *
-+ */
-+
-+#endif /* DBUS_QT_H */
-diff -Naur dbus-0.61.orig/qt3/dbus-qthread.cpp dbus-0.61/qt3/dbus-qthread.cpp
---- dbus-0.61.orig/qt3/dbus-qthread.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/dbus-qthread.cpp 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,163 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-qthread.cpp Qt threads integration
-+ *
-+ * Copyright (C) 2002 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.0
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <dbus/dbus.h>
-+#include <qmutex.h>
-+
-+#if defined(QT_THREAD_SUPPORT)
-+
-+static DBusMutex * dbus_qmutex_new (void);
-+static void dbus_qmutex_free (DBusMutex *mutex);
-+static dbus_bool_t dbus_qmutex_lock (DBusMutex *mutex);
-+static dbus_bool_t dbus_qmutex_unlock (DBusMutex *mutex);
-+
-+static DBusCondVar*dbus_qcondvar_new (void);
-+static void dbus_qcondvar_free (DBusCondVar *cond);
-+static void dbus_qcondvar_wait (DBusCondVar *cond,
-+ DBusMutex *mutex);
-+static dbus_bool_t dbus_qcondvar_wait_timeout (DBusCondVar *cond,
-+ DBusMutex *mutex.
-+ int timeout_msec);
-+static void dbus_qcondvar_wake_one (DBusCondVar *cond);
-+static void dbus_qcondvar_wake_all (DBusCondVar *cond);
-+
-+
-+static const DBusThreadFunctions functions =
-+{
-+ DBUS_THREAD_FUNCTIONS_NEW_MASK |
-+ DBUS_THREAD_FUNCTIONS_FREE_MASK |
-+ DBUS_THREAD_FUNCTIONS_LOCK_MASK |
-+ DBUS_THREAD_FUNCTIONS_UNLOCK_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_NEW_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_FREE_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAIT_TIMEOUT_MASK |
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ONE_MASK|
-+ DBUS_THREAD_FUNCTIONS_CONDVAR_WAKE_ALL_MASK,
-+ dbus_qmutex_new,
-+ dbus_qmutex_free,
-+ dbus_qmutex_lock,
-+ dbus_qmutex_unlock
-+ dbus_qcondvar_new,
-+ dbus_qcondvar_free,
-+ dbus_qcondvar_wait,
-+ dbus_qcondvar_wait_timeout,
-+ dbus_qcondvar_wake_one,
-+ dbus_qcondvar_wake_all
-+};
-+
-+static DBusMutex *
-+dbus_qmutex_new (void)
-+{
-+ QMutex *mutex;
-+ mutex = new QMutex;
-+ return static_cast<DBusMutex*>( mutex );
-+}
-+
-+static void
-+dbus_qmutex_free (DBusMutex *mutex)
-+{
-+ QMutex * qmutex = static_cast<QMutex*>(mutex);
-+ delete mutex;
-+}
-+
-+static dbus_bool_t
-+dbus_qmutex_lock (DBusMutex *mutex)
-+{
-+ QMutex *qmutex = static_cast<QMutex*>(mutex);
-+ qmutex->lock();
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+dbus_qmutex_unlock (DBusMutex *mutex)
-+{
-+ QMutex *qmutex = static_cast<QMutex*>(mutex);
-+ qmutex->unlock();
-+ return TRUE;
-+}
-+
-+static DBusCondVar*
-+dbus_qcondvar_new (void)
-+{
-+ QWaitCondition *cond;
-+ cond = new QWaitCondition;
-+ return static_cast<DBusCondVar*>( cond );
-+}
-+
-+static void
-+dbus_qcondvar_free (DBusCondVar *cond)
-+{
-+ QWaitCondition *qcond = static_cast<QWaitCondition*>(cond);
-+ delete qcond;
-+}
-+
-+static void
-+dbus_qcondvar_wait (DBusCondVar *cond,
-+ DBusMutex *mutex)
-+{
-+ QWaitCondition *qcond = static_cast<QWaitCondition*>(cond);
-+ QMutex *qmutex = static_cast<QMutex*>(mutex);
-+
-+ qcond->wait (qmutex);
-+}
-+
-+static dbus_bool_t
-+dbus_gcondvar_wait_timeout (DBusCondVar *cond,
-+ DBusMutex *mutex,
-+ int timeout_msec)
-+{
-+ QWaitCondition *qcond = static_cast<QWaitCondition*>(cond);
-+ QMutex *qmutex = static_cast<QMutex*>(mutex);
-+
-+ return qcond->wait (qmutex, timout_msec);
-+}
-+
-+static void
-+dbus_qcondvar_wake_one (DBusCondVar *cond)
-+{
-+ QWaitCondition *qcond = static_cast<QWaitCondition*>(cond);
-+
-+ qcond->wakeOne (qmutex);
-+}
-+
-+static void
-+dbus_qcondvar_wake_all (DBusCondVar *cond)
-+{
-+ QWaitCondition *qcond = static_cast<QWaitCondition*>(cond);
-+
-+ qcond->wakeAll (qmutex);
-+}
-+
-+extern "C" {
-+
-+void
-+dbus_qthread_init (void)
-+{
-+ //Do we want to do anything else here?
-+ dbus_threads_init (&functions);
-+}
-+
-+}
-+
-+#endif // QT_THREAD_SUPPORT
-diff -Naur dbus-0.61.orig/qt3/integrator.cpp dbus-0.61/qt3/integrator.cpp
---- dbus-0.61.orig/qt3/integrator.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/integrator.cpp 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,244 @@
-+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
-+/* integrator.h: integrates D-BUS into Qt event loop
-+ *
-+ * Copyright (C) 2003 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.0
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "integrator.h"
-+#include "connection.h"
-+
-+#include <qtimer.h>
-+#include <qsocketnotifier.h>
-+#include <qintdict.h>
-+#include <qptrlist.h>
-+
-+namespace DBusQt
-+{
-+namespace Internal {
-+
-+struct Watch {
-+ Watch(): readSocket( 0 ), writeSocket( 0 ) { }
-+
-+ DBusWatch *watch;
-+ QSocketNotifier *readSocket;
-+ QSocketNotifier *writeSocket;
-+};
-+
-+//////////////////////////////////////////////////////////////
-+dbus_bool_t dbusAddWatch( DBusWatch *watch, void *data )
-+{
-+ Integrator *con = static_cast<Integrator*>( data );
-+ con->addWatch( watch );
-+ return true;
-+}
-+void dbusRemoveWatch( DBusWatch *watch, void *data )
-+{
-+ Integrator *con = static_cast<Integrator*>( data );
-+ con->removeWatch( watch );
-+}
-+
-+void dbusToggleWatch( DBusWatch *watch, void *data )
-+{
-+ Integrator *itg = static_cast<Integrator*>( data );
-+ if ( dbus_watch_get_enabled( watch ) )
-+ itg->addWatch( watch );
-+ else
-+ itg->removeWatch( watch );
-+}
-+
-+dbus_bool_t dbusAddTimeout( DBusTimeout *timeout, void *data )
-+{
-+ if ( !dbus_timeout_get_enabled(timeout) )
-+ return true;
-+
-+ Integrator *itg = static_cast<Integrator*>( data );
-+ itg->addTimeout( timeout );
-+ return true;
-+}
-+
-+void dbusRemoveTimeout( DBusTimeout *timeout, void *data )
-+{
-+ Integrator *itg = static_cast<Integrator*>( data );
-+ itg->removeTimeout( timeout );
-+}
-+
-+void dbusToggleTimeout( DBusTimeout *timeout, void *data )
-+{
-+ Integrator *itg = static_cast<Integrator*>( data );
-+
-+ if ( dbus_timeout_get_enabled( timeout ) )
-+ itg->addTimeout( timeout );
-+ else
-+ itg->removeTimeout( timeout );
-+}
-+
-+void dbusWakeupMain( void* )
-+{
-+}
-+
-+void dbusNewConnection( DBusServer *server,
-+ DBusConnection *new_connection,
-+ void *data )
-+{
-+ Integrator *itg = static_cast<Integrator*>( data );
-+ itg->handleConnection( new_connection );
-+}
-+/////////////////////////////////////////////////////////////
-+
-+Timeout::Timeout( QObject *parent, DBusTimeout *t )
-+ : QObject( parent ), m_timeout( t )
-+{
-+ m_timer = new QTimer( this );
-+ connect( m_timer, SIGNAL(timeout()),
-+ SLOT(slotTimeout()) );
-+}
-+
-+void Timeout::slotTimeout()
-+{
-+ emit timeout( m_timeout );
-+}
-+
-+void Timeout::start()
-+{
-+ m_timer->start( dbus_timeout_get_interval( m_timeout ) );
-+}
-+
-+Integrator::Integrator( DBusConnection *conn, QObject *parent )
-+ : QObject( parent ), m_connection( conn )
-+{
-+ m_timeouts.setAutoDelete( true );
-+
-+ dbus_connection_set_watch_functions( m_connection,
-+ dbusAddWatch,
-+ dbusRemoveWatch,
-+ dbusToggleWatch,
-+ this, 0 );
-+ dbus_connection_set_timeout_functions( m_connection,
-+ dbusAddTimeout,
-+ dbusRemoveTimeout,
-+ dbusToggleTimeout,
-+ this, 0 );
-+ dbus_connection_set_wakeup_main_function( m_connection,
-+ dbusWakeupMain,
-+ this, 0 );
-+}
-+
-+Integrator::Integrator( DBusServer *server, QObject *parent )
-+ : QObject( parent ), m_server( server )
-+{
-+ m_connection = reinterpret_cast<DBusConnection*>( m_server );
-+ m_timeouts.setAutoDelete( true );
-+
-+ dbus_server_set_watch_functions( m_server,
-+ dbusAddWatch,
-+ dbusRemoveWatch,
-+ dbusToggleWatch,
-+ this, 0 );
-+ dbus_server_set_timeout_functions( m_server,
-+ dbusAddTimeout,
-+ dbusRemoveTimeout,
-+ dbusToggleTimeout,
-+ this, 0 );
-+ dbus_server_set_new_connection_function( m_server,
-+ dbusNewConnection,
-+ this, 0 );
-+}
-+
-+void Integrator::slotRead( int fd )
-+{
-+ QIntDictIterator<Watch> it( m_watches );
-+ for ( ; it.current(); ++it )
-+ dbus_watch_handle ( it.current()->watch, DBUS_WATCH_READABLE );
-+
-+ emit readReady();
-+}
-+
-+void Integrator::slotWrite( int fd )
-+{
-+ QIntDictIterator<Watch> it( m_watches );
-+ for ( ; it.current(); ++it )
-+ dbus_watch_handle ( it.current()->watch, DBUS_WATCH_WRITABLE );
-+}
-+
-+void Integrator::slotTimeout( DBusTimeout *timeout )
-+{
-+ dbus_timeout_handle( timeout );
-+}
-+
-+void Integrator::addWatch( DBusWatch *watch )
-+{
-+ if ( !dbus_watch_get_enabled( watch ) )
-+ return;
-+
-+ Watch *qtwatch = new Watch;
-+ qtwatch->watch = watch;
-+
-+ int flags = dbus_watch_get_flags( watch );
-+ int fd = dbus_watch_get_fd( watch );
-+
-+ if ( flags & DBUS_WATCH_READABLE ) {
-+ qtwatch->readSocket = new QSocketNotifier( fd, QSocketNotifier::Read, this );
-+ QObject::connect( qtwatch->readSocket, SIGNAL(activated(int)), SLOT(slotRead(int)) );
-+ }
-+
-+ if (flags & DBUS_WATCH_WRITABLE) {
-+ qtwatch->writeSocket = new QSocketNotifier( fd, QSocketNotifier::Write, this );
-+ QObject::connect( qtwatch->writeSocket, SIGNAL(activated(int)), SLOT(slotWrite(int)) );
-+ }
-+
-+ m_watches.insert( fd, qtwatch );
-+}
-+
-+void Integrator::removeWatch( DBusWatch *watch )
-+{
-+ int key = dbus_watch_get_fd( watch );
-+
-+ Watch *qtwatch = m_watches.take( key );
-+
-+ if ( qtwatch ) {
-+ delete qtwatch->readSocket; qtwatch->readSocket = 0;
-+ delete qtwatch->writeSocket; qtwatch->writeSocket = 0;
-+ delete qtwatch;
-+ }
-+}
-+
-+void Integrator::addTimeout( DBusTimeout *timeout )
-+{
-+ Timeout *mt = new Timeout( this, timeout );
-+ m_timeouts.insert( timeout, mt );
-+ connect( mt, SIGNAL(timeout(DBusTimeout*)),
-+ SLOT(slotTimeout(DBusTimeout*)) );
-+ mt->start();
-+}
-+
-+void Integrator::removeTimeout( DBusTimeout *timeout )
-+{
-+ m_timeouts.remove( timeout );
-+}
-+
-+void Integrator::handleConnection( DBusConnection *c )
-+{
-+ Connection *con = new Connection( c, this );
-+ emit newConnection( con );
-+}
-+
-+}//end namespace Internal
-+}//end namespace DBusQt
-+
-+#include "integrator.moc"
-diff -Naur dbus-0.61.orig/qt3/integrator.h dbus-0.61/qt3/integrator.h
---- dbus-0.61.orig/qt3/integrator.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/integrator.h 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,92 @@
-+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
-+/* integrator.h: integrates D-BUS into Qt event loop
-+ *
-+ * Copyright (C) 2003 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_QT_INTEGRATOR_H
-+#define DBUS_QT_INTEGRATOR_H
-+
-+#include <qobject.h>
-+
-+#include <qintdict.h>
-+#include <qptrdict.h>
-+
-+#include "dbus/dbus.h"
-+
-+class QTimer;
-+
-+namespace DBusQt
-+{
-+ class Connection;
-+
-+ namespace Internal
-+ {
-+ struct Watch;
-+
-+ class Timeout : public QObject
-+ {
-+ Q_OBJECT
-+ public:
-+ Timeout( QObject *parent, DBusTimeout *t );
-+ public:
-+ void start();
-+ signals:
-+ void timeout( DBusTimeout* );
-+ protected slots:
-+ void slotTimeout();
-+ private:
-+ QTimer *m_timer;
-+ DBusTimeout *m_timeout;
-+ };
-+
-+ class Integrator : public QObject
-+ {
-+ Q_OBJECT
-+ public:
-+ Integrator( DBusConnection *connection, QObject *parent );
-+ Integrator( DBusServer *server, QObject *parent );
-+
-+ signals:
-+ void readReady();
-+ void newConnection( Connection* );
-+
-+ protected slots:
-+ void slotRead( int );
-+ void slotWrite( int );
-+ void slotTimeout( DBusTimeout *timeout );
-+
-+ public:
-+ void addWatch( DBusWatch* );
-+ void removeWatch( DBusWatch* );
-+
-+ void addTimeout( DBusTimeout* );
-+ void removeTimeout( DBusTimeout* );
-+
-+ void handleConnection( DBusConnection* );
-+ private:
-+ QIntDict<Watch> m_watches;
-+ QPtrDict<Timeout> m_timeouts;
-+ DBusConnection *m_connection;
-+ DBusServer *m_server;
-+ };
-+ }
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt3/message.cpp dbus-0.61/qt3/message.cpp
---- dbus-0.61.orig/qt3/message.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/message.cpp 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,561 @@
-+/* -*- mode: C++; c-file-style: "gnu" -*- */
-+/* message.cpp: Qt wrapper for DBusMessage
-+ *
-+ * Copyright (C) 2003 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.0
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "message.h"
-+
-+#include <qmap.h>
-+
-+#include <cstdlib>
-+
-+namespace DBusQt {
-+
-+struct Message::iterator::IteratorData {
-+ DBusMessageIter *iter;
-+ QVariant var;
-+ bool end;
-+ DBusMessage *mesg;
-+};
-+
-+/**
-+ * Iterator.
-+ */
-+Message::iterator::iterator()
-+{
-+ d = new IteratorData;
-+ d->iter = 0; d->end = true;
-+}
-+
-+/**
-+ * Constructs iterator for the message.
-+ * @param msg message whose fields we want to iterate
-+ */
-+Message::iterator::iterator( DBusMessage* msg )
-+{
-+ d = new IteratorData;
-+ d->mesg = msg;
-+ d->iter = static_cast<DBusMessageIter *>( malloc( sizeof(DBusMessageIter) ) );
-+ dbus_message_iter_init( d->mesg, d->iter );
-+ if ( !d->iter ) {
-+ qDebug("No iterator??");
-+ }
-+ fillVar();
-+ d->end = false;
-+}
-+
-+/**
-+ * Copy constructor for the iterator.
-+ * @param itr iterator
-+ */
-+Message::iterator::iterator( const iterator& itr )
-+{
-+ d = new IteratorData;
-+ d->iter = itr.d->iter;
-+ d->var = itr.d->var;
-+ d->end = itr.d->end;
-+}
-+
-+/**
-+ * Destructor.
-+ */
-+Message::iterator::~iterator()
-+{
-+ free( d->iter );
-+ delete d; d=0;
-+}
-+
-+/**
-+ * Creates an iterator equal to the @p itr iterator
-+ * @param itr other iterator
-+ * @return
-+ */
-+Message::iterator&
-+Message::iterator::operator=( const iterator& itr )
-+{
-+ IteratorData *tmp = new IteratorData;
-+ tmp->iter = itr.d->iter;
-+ tmp->var = itr.d->var;
-+ tmp->end = itr.d->end;
-+ delete d; d=tmp;
-+ return *this;
-+}
-+
-+/**
-+ * Returns the constant QVariant held by the iterator.
-+ * @return the constant reference to QVariant held by this iterator
-+ */
-+const QVariant&
-+Message::iterator::operator*() const
-+{
-+ return d->var;
-+}
-+
-+/**
-+ * Returns the QVariant held by the iterator.
-+ * @return reference to QVariant held by this iterator
-+ */
-+QVariant&
-+Message::iterator::operator*()
-+{
-+ return d->var;
-+}
-+
-+/**
-+ * Moves to the next field and return a reference to itself after
-+ * incrementing.
-+ * @return reference to self after incrementing
-+ */
-+Message::iterator&
-+Message::iterator::operator++()
-+{
-+ if ( d->end )
-+ return *this;
-+
-+ if ( dbus_message_iter_next( d->iter ) ) {
-+ fillVar();
-+ } else {
-+ d->end = true;
-+ d->var = QVariant();
-+ }
-+ return *this;
-+}
-+
-+/**
-+ * Moves to the next field and returns self before incrementing.
-+ * @return self before incrementing
-+ */
-+Message::iterator
-+Message::iterator::operator++(int)
-+{
-+ iterator itr( *this );
-+ operator++();
-+ return itr;
-+}
-+
-+/**
-+ * Compares this iterator to @p it iterator.
-+ * @param it the iterator to which we're comparing this one to
-+ * @return true if they're equal, false otherwise
-+ */
-+bool
-+Message::iterator::operator==( const iterator& it )
-+{
-+ if ( d->end == it.d->end ) {
-+ if ( d->end == true ) {
-+ return true;
-+ } else {
-+ return d->var == it.d->var;
-+ }
-+ } else
-+ return false;
-+}
-+
-+/**
-+ * Compares two iterators.
-+ * @param it The other iterator.
-+ * @return true if two iterators are not equal, false
-+ * otherwise
-+ */
-+bool
-+Message::iterator::operator!=( const iterator& it )
-+{
-+ return !operator==( it );
-+}
-+
-+QVariant Message::iterator::marshallBaseType( DBusMessageIter* i )
-+{
-+ QVariant ret;
-+ switch (dbus_message_iter_get_arg_type(i)) {
-+ case DBUS_TYPE_INT32:
-+ {
-+ dbus_int32_t v;
-+ dbus_message_iter_get_basic (i, &v);
-+ ret = QVariant( v );
-+ }
-+ break;
-+ case DBUS_TYPE_UINT32:
-+ {
-+ dbus_uint32_t v;
-+ dbus_message_iter_get_basic (i, &v);
-+ ret = QVariant( v );
-+ }
-+ break;
-+ case DBUS_TYPE_DOUBLE:
-+ {
-+ double v;
-+ dbus_message_iter_get_basic (i, &v);
-+ ret = QVariant( v );
-+ }
-+ break;
-+ case DBUS_TYPE_STRING:
-+ {
-+ const char *v;
-+ dbus_message_iter_get_basic (i, &v);
-+ ret = QVariant( v );
-+ }
-+ break;
-+ default:
-+ ret = QVariant();
-+ break;
-+ }
-+ return ret;
-+}
-+
-+/**
-+ * Fills QVariant based on what current DBusMessageIter helds.
-+ */
-+void
-+Message::iterator::fillVar()
-+{
-+ switch ( dbus_message_iter_get_arg_type( d->iter ) ) {
-+ case DBUS_TYPE_INT32:
-+ case DBUS_TYPE_UINT32:
-+ case DBUS_TYPE_DOUBLE:
-+ case DBUS_TYPE_STRING:
-+ d->var = marshallBaseType( d->iter );
-+ break;
-+ case DBUS_TYPE_ARRAY: {
-+ switch ( dbus_message_iter_get_element_type( d->iter ) ) {
-+ case DBUS_TYPE_STRING: {
-+ QStringList tempList;
-+ DBusMessageIter sub;
-+ dbus_message_iter_recurse (d->iter, &sub);
-+ while (dbus_message_iter_get_arg_type (&sub) != DBUS_TYPE_INVALID)
-+ {
-+ const char *v;
-+ dbus_message_iter_get_basic (&sub, &v);
-+ tempList.append( QString( v ) );
-+ dbus_message_iter_next (&sub);
-+ }
-+ d->var = QVariant( tempList );
-+ break;
-+ }
-+ default:
-+ qDebug( "Array of type not implemented" );
-+ d->var = QVariant();
-+ break;
-+ }
-+ break;
-+ }
-+#if 0
-+ /* DICT is gone for now, but expected to be reintroduced, or else
-+ * reintroduced as a flag on the introspection data that can
-+ * apply to array of struct of two fields
-+ */
-+ case DBUS_TYPE_DICT: {
-+ qDebug( "Got a hash!" );
-+ QMap<QString, QVariant> tempMap;
-+ DBusMessageIter dictIter;
-+ dbus_message_iter_init_dict_iterator( d->iter, &dictIter );
-+ do {
-+ char *key = dbus_message_iter_get_dict_key( &dictIter );
-+ tempMap[key] = marshallBaseType( &dictIter );
-+ dbus_free( key );
-+ dbus_message_iter_next( &dictIter );
-+ } while( dbus_message_iter_has_next( &dictIter ) );
-+ d->var = QVariant( tempMap );
-+ break;
-+ qDebug( "Hash/Dict type not implemented" );
-+ d->var = QVariant();
-+ break;
-+ }
-+#endif
-+ default:
-+ qDebug( "not implemented" );
-+ d->var = QVariant();
-+ break;
-+ }
-+}
-+
-+/**
-+ * Returns a QVariant help by this iterator.
-+ * @return QVariant held by this iterator
-+ */
-+QVariant
-+Message::iterator::var() const
-+{
-+ return d->var;
-+}
-+
-+struct Message::Private {
-+ DBusMessage *msg;
-+};
-+
-+Message::Message( DBusMessage *m )
-+{
-+ d = new Private;
-+ d->msg = m;
-+}
-+
-+/**
-+ *
-+ */
-+Message::Message( int messageType )
-+{
-+ d = new Private;
-+ d->msg = dbus_message_new( messageType );
-+}
-+
-+/**
-+ * Constructs a new Message with the given service and name.
-+ * @param service service service that the message should be sent to
-+ * @param name name of the message
-+ */
-+Message::Message( const QString& service, const QString& path,
-+ const QString& interface, const QString& method )
-+{
-+ d = new Private;
-+ d->msg = dbus_message_new_method_call( service.latin1(), path.latin1(),
-+ interface.latin1(), method.latin1() );
-+}
-+
-+/**
-+ * Constructs a message that is a reply to some other
-+ * message.
-+ * @param name the name of the message
-+ * @param replayingTo original_message the message which the created
-+ * message is a reply to.
-+ */
-+Message::Message( const Message& replayingTo )
-+{
-+ d = new Private;
-+ d->msg = dbus_message_new_method_return( replayingTo.d->msg );
-+}
-+
-+Message:: Message( const QString& path, const QString& interface,
-+ const QString& name )
-+{
-+ d = new Private;
-+ d->msg = dbus_message_new_signal( path.ascii(), interface.ascii(),
-+ name.ascii() );
-+}
-+
-+Message::Message( const Message& replayingTo, const QString& errorName,
-+ const QString& errorMessage )
-+{
-+ d = new Private;
-+ d->msg = dbus_message_new_error( replayingTo.d->msg, errorName.utf8(),
-+ errorMessage.utf8() );
-+}
-+
-+Message Message::operator=( const Message& other )
-+{
-+ //FIXME: ref the other.d->msg instead of copying it?
-+}
-+/**
-+ * Destructs message.
-+ */
-+Message::~Message()
-+{
-+ if ( d->msg ) {
-+ dbus_message_unref( d->msg );
-+ }
-+ delete d; d=0;
-+}
-+
-+int Message::type() const
-+{
-+ return dbus_message_get_type( d->msg );
-+}
-+
-+void Message::setPath( const QString& path )
-+{
-+ dbus_message_set_path( d->msg, path.ascii() );
-+}
-+
-+QString Message::path() const
-+{
-+ return dbus_message_get_path( d->msg );
-+}
-+
-+void Message::setInterface( const QString& iface )
-+{
-+ dbus_message_set_interface( d->msg, iface.ascii() );
-+}
-+
-+QString Message::interface() const
-+{
-+ return dbus_message_get_interface( d->msg );
-+}
-+
-+void Message::setMember( const QString& member )
-+{
-+ dbus_message_set_member( d->msg, member.ascii() );
-+}
-+
-+QString Message::member() const
-+{
-+ return dbus_message_get_member( d->msg );
-+}
-+
-+void Message::setErrorName( const QString& err )
-+{
-+ dbus_message_set_error_name( d->msg, err );
-+}
-+
-+QString Message::errorName() const
-+{
-+ return dbus_message_get_error_name( d->msg );
-+}
-+
-+void Message::setDestination( const QString& dest )
-+{
-+ dbus_message_set_destination( d->msg, dest );
-+}
-+
-+QString Message::destination() const
-+{
-+ return dbus_message_get_destination( d->msg );
-+}
-+
-+/**
-+ * Sets the message sender.
-+ * @param sender the sender
-+ * @return false if unsuccessful
-+ */
-+bool
-+Message::setSender( const QString& sender )
-+{
-+ return dbus_message_set_sender( d->msg, sender.latin1() );
-+}
-+
-+/**
-+ * Returns sender of this message.
-+ * @return sender
-+ */
-+QString
-+Message::sender() const
-+{
-+ return dbus_message_get_sender( d->msg );
-+}
-+
-+QString Message::signature() const
-+{
-+ return dbus_message_get_signature( d->msg );
-+}
-+
-+
-+/**
-+ * Returns the starting iterator for the fields of this
-+ * message.
-+ * @return starting iterator
-+ */
-+Message::iterator
-+Message::begin() const
-+{
-+ return iterator( d->msg );
-+}
-+
-+/**
-+ * Returns the ending iterator for the fields of this
-+ * message.
-+ * @return ending iterator
-+ */
-+Message::iterator
-+Message::end() const
-+{
-+ return iterator();
-+}
-+
-+/**
-+ * Returns the field at position @p i
-+ * @param i position of the wanted field
-+ * @return QVariant at position @p i or an empty QVariant
-+ */
-+QVariant
-+Message::at( int i )
-+{
-+ iterator itr( d->msg );
-+
-+ while ( i-- ) {
-+ if ( itr == end() )
-+ return QVariant();//nothing there
-+ ++itr;
-+ }
-+ return *itr;
-+}
-+
-+/**
-+ * The underlying DBusMessage of this class.
-+ * @return DBusMessage pointer.
-+ */
-+DBusMessage*
-+Message::message() const
-+{
-+ return d->msg;
-+}
-+
-+Message& Message::operator<<( bool b )
-+{
-+ const dbus_bool_t right_size_bool = b;
-+ dbus_message_append_args( d->msg, DBUS_TYPE_BOOLEAN, &right_size_bool,
-+ DBUS_TYPE_INVALID );
-+}
-+
-+Message& Message::operator<<( Q_INT8 byte )
-+{
-+ dbus_message_append_args( d->msg, DBUS_TYPE_BYTE, &byte,
-+ DBUS_TYPE_INVALID );
-+}
-+
-+Message& Message::operator<<( Q_INT32 num )
-+{
-+ dbus_message_append_args( d->msg, DBUS_TYPE_INT32, &num,
-+ DBUS_TYPE_INVALID );
-+}
-+
-+Message& Message::operator<<( Q_UINT32 num )
-+{
-+ dbus_message_append_args( d->msg, DBUS_TYPE_UINT32, &num,
-+ DBUS_TYPE_INVALID );
-+}
-+
-+Message& Message::operator<<( Q_INT64 num )
-+{
-+ dbus_message_append_args( d->msg, DBUS_TYPE_INT64, &num,
-+ DBUS_TYPE_INVALID );
-+}
-+
-+Message& Message::operator<<( Q_UINT64 num )
-+{
-+ dbus_message_append_args( d->msg, DBUS_TYPE_UINT64, &num,
-+ DBUS_TYPE_INVALID );
-+}
-+
-+Message& Message::operator<<( double num )
-+{
-+ dbus_message_append_args( d->msg, DBUS_TYPE_DOUBLE, &num,
-+ DBUS_TYPE_INVALID );
-+}
-+
-+Message& Message::operator<<( const QString& str )
-+{
-+ const char *u = str.utf8();
-+ dbus_message_append_args( d->msg, DBUS_TYPE_STRING, &u,
-+ DBUS_TYPE_INVALID );
-+}
-+
-+Message& Message::operator<<( const QVariant& custom )
-+{
-+ //FIXME: imeplement
-+}
-+
-+}
-diff -Naur dbus-0.61.orig/qt3/message.h dbus-0.61/qt3/message.h
---- dbus-0.61.orig/qt3/message.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/message.h 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,131 @@
-+/* -*- mode: C++; c-file-style: "gnu" -*- */
-+/* message.h: Qt wrapper for DBusMessage
-+ *
-+ * Copyright (C) 2003 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_QT_MESSAGE_H
-+#define DBUS_QT_MESSAGE_H
-+
-+#include <qvariant.h>
-+#include <qstring.h>
-+#include <qstringlist.h>
-+
-+#include "dbus/dbus.h"
-+
-+namespace DBusQt {
-+
-+ class Message
-+ {
-+ public:
-+ class iterator {
-+ public:
-+ iterator();
-+ iterator( const iterator& );
-+ iterator( DBusMessage* msg );
-+ ~iterator();
-+
-+ iterator& operator=( const iterator& );
-+ const QVariant& operator*() const;
-+ QVariant& operator*();
-+ iterator& operator++();
-+ iterator operator++(int);
-+ bool operator==( const iterator& it );
-+ bool operator!=( const iterator& it );
-+
-+ QVariant var() const;
-+ protected:
-+ QVariant marshallBaseType( DBusMessageIter* i );
-+ void fillVar();
-+ struct IteratorData;
-+ IteratorData *d;
-+ };
-+
-+ Message( int messageType );
-+ Message( DBusMessage * );//hide this one from the public implementation
-+ Message( const QString& service, const QString& path,
-+ const QString& interface, const QString& method );
-+ Message( const Message& replayingTo );
-+ Message( const QString& path, const QString& interface,
-+ const QString& name );
-+ Message( const Message& replayingTo, const QString& errorName,
-+ const QString& errorMessage );
-+
-+ Message operator=( const Message& other );
-+
-+ virtual ~Message();
-+
-+ int type() const;
-+
-+ void setPath( const QString& );
-+ QString path() const;
-+
-+ void setInterface( const QString& );
-+ QString interface() const;
-+
-+ void setMember( const QString& );
-+ QString member() const;
-+
-+ void setErrorName( const QString& );
-+ QString errorName() const;
-+
-+ void setDestination( const QString& );
-+ QString destination() const;
-+
-+ bool setSender( const QString& sender );
-+ QString sender() const;
-+
-+ QString signature() const;
-+
-+ iterator begin() const;
-+ iterator end() const;
-+
-+ QVariant at( int i );
-+
-+
-+ public:
-+ Message& operator<<( bool );
-+ Message& operator<<( Q_INT8 );
-+ Message& operator<<( Q_INT32 );
-+ Message& operator<<( Q_UINT32 );
-+ Message& operator<<( Q_INT64 );
-+ Message& operator<<( Q_UINT64 );
-+ Message& operator<<( double );
-+ Message& operator<<( const QString& );
-+ Message& operator<<( const QVariant& );
-+ //Message& operator<<();
-+ //Message& operator<<();
-+ //Message& operator<<();
-+ //Message& operator<<();
-+ //Message& operator<<();
-+ //Message& operator<<();
-+ //Message& operator<<();
-+
-+ protected:
-+ friend class Connection;
-+ DBusMessage* message() const;
-+
-+ private:
-+ struct Private;
-+ Private *d;
-+ };
-+
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/qt3/server.cpp dbus-0.61/qt3/server.cpp
---- dbus-0.61.orig/qt3/server.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/server.cpp 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,90 @@
-+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
-+/* server.h: Qt wrapper for DBusServer
-+ *
-+ * Copyright (C) 2003 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.0
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "server.h"
-+#include "connection.h"
-+
-+#include "integrator.h"
-+using DBusQt::Internal::Integrator;
-+
-+namespace DBusQt
-+{
-+
-+struct Server::Private {
-+ Private() : integrator( 0 ), server( 0 )
-+ {}
-+
-+ Integrator *integrator;
-+ DBusServer *server;
-+ DBusError error;
-+};
-+
-+Server::Server( const QString& addr, QObject *parent )
-+ : QObject( parent )
-+{
-+ d = new Private;
-+
-+ if ( !addr.isEmpty() ) {
-+ init( addr );
-+ }
-+}
-+
-+Server::~Server()
-+{
-+ delete d;
-+}
-+
-+bool Server::isConnected() const
-+{
-+ return dbus_server_get_is_connected( d->server );
-+}
-+
-+void Server::disconnect()
-+{
-+ dbus_server_disconnect( d->server );
-+}
-+
-+QString Server::address() const
-+{
-+ //FIXME: leak?
-+ return dbus_server_get_address( d->server );
-+}
-+
-+void Server::listen( const QString& addr )
-+{
-+ if ( !d->server ) {
-+ init( addr );
-+ }
-+}
-+
-+void Server::init( const QString& addr )
-+{
-+ d->server = dbus_server_listen( addr.ascii(), &d->error );
-+ d->integrator = new Integrator( d->server, this );
-+ connect( d->integrator, SIGNAL(newConnection(Connection*)),
-+ SIGNAL(newConnection(Connection*)) );
-+}
-+
-+}
-+
-+
-+#include "server.moc"
-diff -Naur dbus-0.61.orig/qt3/server.h dbus-0.61/qt3/server.h
---- dbus-0.61.orig/qt3/server.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/qt3/server.h 2005-09-30 17:20:08.000000000 +0200
-@@ -0,0 +1,57 @@
-+// -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
-+/* server.h: Qt wrapper for DBusServer
-+ *
-+ * Copyright (C) 2003 Zack Rusin <zack at kde.org>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_QT_SERVER_H
-+#define DBUS_QT_SERVER_H
-+
-+#include <qobject.h>
-+
-+#include "dbus/dbus.h"
-+
-+namespace DBusQt
-+{
-+ class Connection;
-+ class Server : public QObject
-+ {
-+ Q_OBJECT
-+ public:
-+ Server( const QString& addr = QString::null, QObject *parent=0 );
-+ ~Server();
-+
-+ bool isConnected() const;
-+ QString address() const;
-+
-+ public slots:
-+ void listen( const QString& addr );
-+ void disconnect();
-+ signals:
-+ void newConnection( Connection* );
-+
-+ private:
-+ void init( const QString& addr );
-+ private:
-+ struct Private;
-+ Private *d;
-+ };
-+}
-+
-+#endif
-diff -Naur dbus-0.61.orig/test/Makefile.am dbus-0.61/test/Makefile.am
---- dbus-0.61.orig/test/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/Makefile.am 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,155 @@
-+
-+if HAVE_GLIB
-+ GLIB_SUBDIR=glib
-+endif
-+if HAVE_PYTHON
-+ PYTHON_SUBDIR=python
-+endif
-+if HAVE_QTESTLIB
-+ QT_SUBDIR=qt
-+endif
-+
-+SUBDIRS=name-test $(GLIB_SUBDIR) $(PYTHON_SUBDIR) $(QT_SUBDIR)
-+DIST_SUBDIRS=glib python qt name-test
-+
-+INCLUDES=-I$(top_srcdir) $(DBUS_TEST_CFLAGS)
-+
-+
-+if DBUS_BUILD_TESTS
-+## break-loader removed for now
-+TEST_BINARIES=test-service test-names test-shell-service shell-test spawn-test test-segfault test-exit test-sleep-forever
-+
-+#enable stand alone make check test
-+TESTS=shell-test
-+else
-+TEST_BINARIES=
-+TESTS=
-+endif
-+
-+if DBUS_GCOV_ENABLED
-+GCOV_BINARIES=decode-gcov
-+else
-+GCOV_BINARIES=
-+endif
-+
-+noinst_PROGRAMS= $(TEST_BINARIES) $(GCOV_BINARIES)
-+
-+test_service_SOURCES= \
-+ test-service.c \
-+ test-utils.c \
-+ test-utils.h
-+
-+test_names_SOURCES= \
-+ test-names.c \
-+ test-utils.c \
-+ test-utils.h
-+
-+##break_loader_SOURCES= \
-+## break-loader.c
-+
-+test_shell_service_SOURCES = \
-+ test-shell-service.c \
-+ test-utils.c \
-+ test-utils.h
-+
-+shell_test_SOURCES= \
-+ shell-test.c
-+
-+spawn_test_SOURCES= \
-+ spawn-test.c
-+
-+test_exit_SOURCES = \
-+ test-exit.c
-+
-+test_segfault_SOURCES = \
-+ test-segfault.c
-+
-+test_sleep_forever_SOURCES = \
-+ test-sleep-forever.c
-+
-+decode_gcov_SOURCES= \
-+ decode-gcov.c
-+
-+TEST_LIBS=$(DBUS_TEST_LIBS) $(top_builddir)/dbus/libdbus-convenience.la
-+
-+test_service_LDADD=$(TEST_LIBS)
-+test_names_LDADD=$(TEST_LIBS)
-+## break_loader_LDADD= $(TEST_LIBS)
-+test_shell_service_LDADD=$(TEST_LIBS)
-+shell_test_LDADD=$(TEST_LIBS)
-+spawn_test_LDADD=$(TEST_LIBS)
-+decode_gcov_LDADD=$(TEST_LIBS)
-+
-+EXTRA_DIST=
-+
-+## keep these in creation order, i.e. uppermost dirs first
-+TESTDIRS= \
-+ data \
-+ data/valid-messages \
-+ data/invalid-messages \
-+ data/incomplete-messages \
-+ data/auth \
-+ data/sha-1 \
-+ data/valid-config-files \
-+ data/valid-config-files/basic.d \
-+ data/valid-config-files/system.d \
-+ data/valid-service-files \
-+ data/invalid-config-files \
-+ data/equiv-config-files \
-+ data/equiv-config-files/basic \
-+ data/equiv-config-files/basic/basic.d \
-+ data/equiv-config-files/entities \
-+ data/equiv-config-files/entities/basic.d
-+
-+
-+FIND_TESTS=find -name "*.message" -o -name "*.message-raw" -o -name "*.auth-script" -o -name "*.sha1" -o -name "*.txt" -o -name "*.conf" -o -name "*.service"
-+
-+dist-hook:
-+ for D in $(TESTDIRS); do \
-+ test -d $(distdir)/$$D || mkdir $(distdir)/$$D || exit 1 ; \
-+ done ; \
-+ FILES=`(cd $(srcdir) && $(FIND_TESTS) -o -name "*.in" -a -not -name Makefile.in)` ; \
-+ for F in $$FILES; do \
-+ echo '-- Disting file '$$F ; \
-+ cp -f $(srcdir)/$$F $(distdir)/$$F || exit 1 ; \
-+ done
-+
-+## copy tests to builddir so that generated tests and static tests
-+## are all in one place.
-+all-local:
-+ for D in $(TESTDIRS); do \
-+ test -d $(top_builddir)/test/$$D || mkdir $(top_builddir)/test/$$D || exit 1 ; \
-+ done ; \
-+ if ! (test $(srcdir) = . || test $(srcdir) -ef .) ; then \
-+ FILES=`(cd $(srcdir) && $(FIND_TESTS))` ; \
-+ for F in $$FILES; do \
-+ SRC=$(srcdir)/$$F ; \
-+ DEST=$(top_builddir)/test/$$F ; \
-+ echo '-- Copying test file '$$F ; \
-+ cp $$SRC $$DEST || exit 1 ; \
-+ chmod u+w $$DEST || exit 1 ; \
-+ done ; \
-+ else \
-+ echo '-- No need to copy test data as srcdir = builddir' ; \
-+ fi ; \
-+ echo '-- Copying' $(top_builddir)/bus/*.conf 'to test directory' ; \
-+ cp $(top_builddir)/bus/*.conf $(top_builddir)/test/data/valid-config-files || exit 1 ; \
-+ chmod u+w $(top_builddir)/test/data/valid-config-files/*.conf || exit 1
-+
-+## this doesn't clean generated test data files when srcdir=builddir
-+clean-local:
-+ if test $(srcdir) != . ; then \
-+ FILES=`(cd $(top_builddir)/test && $(FIND_TESTS))` ; \
-+ for F in $$FILES; do \
-+ DEST=$(top_builddir)/test/$$F ; \
-+ echo '-- Deleting test file '$$F ; \
-+ rm $$DEST || exit 1 ; \
-+ done ; \
-+ REVERSEDIRS= ; \
-+ for D in $(TESTDIRS); do \
-+ REVERSEDIRS="$$D $$REVERSEDIRS" ; \
-+ done ; \
-+ for D in $$REVERSEDIRS; do \
-+ rmdir $(top_builddir)/test/$$D || exit 1 ; \
-+ done ; \
-+ fi
-diff -Naur dbus-0.61.orig/test/Makefile.in dbus-0.61/test/Makefile.in
---- dbus-0.61.orig/test/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/Makefile.in 2006-02-27 22:34:39.000000000 +0100
-@@ -0,0 +1,961 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+noinst_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2)
-+subdir = test
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+ at DBUS_BUILD_TESTS_TRUE@am__EXEEXT_1 = test-service$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ test-names$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ test-shell-service$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ shell-test$(EXEEXT) spawn-test$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ test-segfault$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ test-exit$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ test-sleep-forever$(EXEEXT)
-+ at DBUS_GCOV_ENABLED_TRUE@am__EXEEXT_2 = decode-gcov$(EXEEXT)
-+PROGRAMS = $(noinst_PROGRAMS)
-+am_decode_gcov_OBJECTS = decode-gcov.$(OBJEXT)
-+decode_gcov_OBJECTS = $(am_decode_gcov_OBJECTS)
-+am__DEPENDENCIES_1 =
-+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
-+ $(top_builddir)/dbus/libdbus-convenience.la
-+decode_gcov_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_shell_test_OBJECTS = shell-test.$(OBJEXT)
-+shell_test_OBJECTS = $(am_shell_test_OBJECTS)
-+shell_test_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_spawn_test_OBJECTS = spawn-test.$(OBJEXT)
-+spawn_test_OBJECTS = $(am_spawn_test_OBJECTS)
-+spawn_test_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_test_exit_OBJECTS = test-exit.$(OBJEXT)
-+test_exit_OBJECTS = $(am_test_exit_OBJECTS)
-+test_exit_LDADD = $(LDADD)
-+am_test_names_OBJECTS = test-names.$(OBJEXT) test-utils.$(OBJEXT)
-+test_names_OBJECTS = $(am_test_names_OBJECTS)
-+test_names_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_test_segfault_OBJECTS = test-segfault.$(OBJEXT)
-+test_segfault_OBJECTS = $(am_test_segfault_OBJECTS)
-+test_segfault_LDADD = $(LDADD)
-+am_test_service_OBJECTS = test-service.$(OBJEXT) test-utils.$(OBJEXT)
-+test_service_OBJECTS = $(am_test_service_OBJECTS)
-+test_service_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_test_shell_service_OBJECTS = test-shell-service.$(OBJEXT) \
-+ test-utils.$(OBJEXT)
-+test_shell_service_OBJECTS = $(am_test_shell_service_OBJECTS)
-+test_shell_service_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_test_sleep_forever_OBJECTS = test-sleep-forever.$(OBJEXT)
-+test_sleep_forever_OBJECTS = $(am_test_sleep_forever_OBJECTS)
-+test_sleep_forever_LDADD = $(LDADD)
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(decode_gcov_SOURCES) $(shell_test_SOURCES) \
-+ $(spawn_test_SOURCES) $(test_exit_SOURCES) \
-+ $(test_names_SOURCES) $(test_segfault_SOURCES) \
-+ $(test_service_SOURCES) $(test_shell_service_SOURCES) \
-+ $(test_sleep_forever_SOURCES)
-+DIST_SOURCES = $(decode_gcov_SOURCES) $(shell_test_SOURCES) \
-+ $(spawn_test_SOURCES) $(test_exit_SOURCES) \
-+ $(test_names_SOURCES) $(test_segfault_SOURCES) \
-+ $(test_service_SOURCES) $(test_shell_service_SOURCES) \
-+ $(test_sleep_forever_SOURCES)
-+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-+ html-recursive info-recursive install-data-recursive \
-+ install-exec-recursive install-info-recursive \
-+ install-recursive installcheck-recursive installdirs-recursive \
-+ pdf-recursive ps-recursive uninstall-info-recursive \
-+ uninstall-recursive
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+ at HAVE_GLIB_TRUE@GLIB_SUBDIR = glib
-+ at HAVE_PYTHON_TRUE@PYTHON_SUBDIR = python
-+ at HAVE_QTESTLIB_TRUE@QT_SUBDIR = qt
-+SUBDIRS = name-test $(GLIB_SUBDIR) $(PYTHON_SUBDIR) $(QT_SUBDIR)
-+DIST_SUBDIRS = glib python qt name-test
-+INCLUDES = -I$(top_srcdir) $(DBUS_TEST_CFLAGS)
-+ at DBUS_BUILD_TESTS_FALSE@TEST_BINARIES =
-+ at DBUS_BUILD_TESTS_TRUE@TEST_BINARIES = test-service test-names test-shell-service shell-test spawn-test test-segfault test-exit test-sleep-forever
-+ at DBUS_BUILD_TESTS_FALSE@TESTS =
-+
-+#enable stand alone make check test
-+ at DBUS_BUILD_TESTS_TRUE@TESTS = shell-test
-+ at DBUS_GCOV_ENABLED_FALSE@GCOV_BINARIES =
-+ at DBUS_GCOV_ENABLED_TRUE@GCOV_BINARIES = decode-gcov
-+test_service_SOURCES = \
-+ test-service.c \
-+ test-utils.c \
-+ test-utils.h
-+
-+test_names_SOURCES = \
-+ test-names.c \
-+ test-utils.c \
-+ test-utils.h
-+
-+test_shell_service_SOURCES = \
-+ test-shell-service.c \
-+ test-utils.c \
-+ test-utils.h
-+
-+shell_test_SOURCES = \
-+ shell-test.c
-+
-+spawn_test_SOURCES = \
-+ spawn-test.c
-+
-+test_exit_SOURCES = \
-+ test-exit.c
-+
-+test_segfault_SOURCES = \
-+ test-segfault.c
-+
-+test_sleep_forever_SOURCES = \
-+ test-sleep-forever.c
-+
-+decode_gcov_SOURCES = \
-+ decode-gcov.c
-+
-+TEST_LIBS = $(DBUS_TEST_LIBS) $(top_builddir)/dbus/libdbus-convenience.la
-+test_service_LDADD = $(TEST_LIBS)
-+test_names_LDADD = $(TEST_LIBS)
-+test_shell_service_LDADD = $(TEST_LIBS)
-+shell_test_LDADD = $(TEST_LIBS)
-+spawn_test_LDADD = $(TEST_LIBS)
-+decode_gcov_LDADD = $(TEST_LIBS)
-+EXTRA_DIST =
-+TESTDIRS = \
-+ data \
-+ data/valid-messages \
-+ data/invalid-messages \
-+ data/incomplete-messages \
-+ data/auth \
-+ data/sha-1 \
-+ data/valid-config-files \
-+ data/valid-config-files/basic.d \
-+ data/valid-config-files/system.d \
-+ data/valid-service-files \
-+ data/invalid-config-files \
-+ data/equiv-config-files \
-+ data/equiv-config-files/basic \
-+ data/equiv-config-files/basic/basic.d \
-+ data/equiv-config-files/entities \
-+ data/equiv-config-files/entities/basic.d
-+
-+FIND_TESTS = find -name "*.message" -o -name "*.message-raw" -o -name "*.auth-script" -o -name "*.sha1" -o -name "*.txt" -o -name "*.conf" -o -name "*.service"
-+all: all-recursive
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu test/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+decode-gcov$(EXEEXT): $(decode_gcov_OBJECTS) $(decode_gcov_DEPENDENCIES)
-+ @rm -f decode-gcov$(EXEEXT)
-+ $(LINK) $(decode_gcov_LDFLAGS) $(decode_gcov_OBJECTS) $(decode_gcov_LDADD) $(LIBS)
-+shell-test$(EXEEXT): $(shell_test_OBJECTS) $(shell_test_DEPENDENCIES)
-+ @rm -f shell-test$(EXEEXT)
-+ $(LINK) $(shell_test_LDFLAGS) $(shell_test_OBJECTS) $(shell_test_LDADD) $(LIBS)
-+spawn-test$(EXEEXT): $(spawn_test_OBJECTS) $(spawn_test_DEPENDENCIES)
-+ @rm -f spawn-test$(EXEEXT)
-+ $(LINK) $(spawn_test_LDFLAGS) $(spawn_test_OBJECTS) $(spawn_test_LDADD) $(LIBS)
-+test-exit$(EXEEXT): $(test_exit_OBJECTS) $(test_exit_DEPENDENCIES)
-+ @rm -f test-exit$(EXEEXT)
-+ $(LINK) $(test_exit_LDFLAGS) $(test_exit_OBJECTS) $(test_exit_LDADD) $(LIBS)
-+test-names$(EXEEXT): $(test_names_OBJECTS) $(test_names_DEPENDENCIES)
-+ @rm -f test-names$(EXEEXT)
-+ $(LINK) $(test_names_LDFLAGS) $(test_names_OBJECTS) $(test_names_LDADD) $(LIBS)
-+test-segfault$(EXEEXT): $(test_segfault_OBJECTS) $(test_segfault_DEPENDENCIES)
-+ @rm -f test-segfault$(EXEEXT)
-+ $(LINK) $(test_segfault_LDFLAGS) $(test_segfault_OBJECTS) $(test_segfault_LDADD) $(LIBS)
-+test-service$(EXEEXT): $(test_service_OBJECTS) $(test_service_DEPENDENCIES)
-+ @rm -f test-service$(EXEEXT)
-+ $(LINK) $(test_service_LDFLAGS) $(test_service_OBJECTS) $(test_service_LDADD) $(LIBS)
-+test-shell-service$(EXEEXT): $(test_shell_service_OBJECTS) $(test_shell_service_DEPENDENCIES)
-+ @rm -f test-shell-service$(EXEEXT)
-+ $(LINK) $(test_shell_service_LDFLAGS) $(test_shell_service_OBJECTS) $(test_shell_service_LDADD) $(LIBS)
-+test-sleep-forever$(EXEEXT): $(test_sleep_forever_OBJECTS) $(test_sleep_forever_DEPENDENCIES)
-+ @rm -f test-sleep-forever$(EXEEXT)
-+ $(LINK) $(test_sleep_forever_LDFLAGS) $(test_sleep_forever_OBJECTS) $(test_sleep_forever_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/decode-gcov.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/shell-test.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spawn-test.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-exit.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-names.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-segfault.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-service.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-shell-service.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-sleep-forever.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-utils.Po at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+# This directory's subdirectories are mostly independent; you can cd
-+# into them and run `make' without going through this Makefile.
-+# To change the values of `make' variables: instead of editing Makefiles,
-+# (1) if the variable is set in `config.status', edit `config.status'
-+# (which will cause the Makefiles to be regenerated when you run `make');
-+# (2) otherwise, pass the desired values on the `make' command line.
-+$(RECURSIVE_TARGETS):
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ dot_seen=yes; \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done; \
-+ if test "$$dot_seen" = "no"; then \
-+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-+ fi; test -z "$$fail"
-+
-+mostlyclean-recursive clean-recursive distclean-recursive \
-+maintainer-clean-recursive:
-+ @failcom='exit 1'; \
-+ for f in x $$MAKEFLAGS; do \
-+ case $$f in \
-+ *=* | --[!k]*);; \
-+ *k*) failcom='fail=yes';; \
-+ esac; \
-+ done; \
-+ dot_seen=no; \
-+ case "$@" in \
-+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-+ *) list='$(SUBDIRS)' ;; \
-+ esac; \
-+ rev=''; for subdir in $$list; do \
-+ if test "$$subdir" = "."; then :; else \
-+ rev="$$subdir $$rev"; \
-+ fi; \
-+ done; \
-+ rev="$$rev ."; \
-+ target=`echo $@ | sed s/-recursive//`; \
-+ for subdir in $$rev; do \
-+ echo "Making $$target in $$subdir"; \
-+ if test "$$subdir" = "."; then \
-+ local_target="$$target-am"; \
-+ else \
-+ local_target="$$target"; \
-+ fi; \
-+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-+ || eval $$failcom; \
-+ done && test -z "$$fail"
-+tags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-+ done
-+ctags-recursive:
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-+ include_option=--etags-include; \
-+ empty_fix=.; \
-+ else \
-+ include_option=--include; \
-+ empty_fix=; \
-+ fi; \
-+ list='$(SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test ! -f $$subdir/TAGS || \
-+ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-+ fi; \
-+ done; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+check-TESTS: $(TESTS)
-+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-+ srcdir=$(srcdir); export srcdir; \
-+ list='$(TESTS)'; \
-+ if test -n "$$list"; then \
-+ for tst in $$list; do \
-+ if test -f ./$$tst; then dir=./; \
-+ elif test -f $$tst; then dir=; \
-+ else dir="$(srcdir)/"; fi; \
-+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xpass=`expr $$xpass + 1`; \
-+ failed=`expr $$failed + 1`; \
-+ echo "XPASS: $$tst"; \
-+ ;; \
-+ *) \
-+ echo "PASS: $$tst"; \
-+ ;; \
-+ esac; \
-+ elif test $$? -ne 77; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xfail=`expr $$xfail + 1`; \
-+ echo "XFAIL: $$tst"; \
-+ ;; \
-+ *) \
-+ failed=`expr $$failed + 1`; \
-+ echo "FAIL: $$tst"; \
-+ ;; \
-+ esac; \
-+ else \
-+ skip=`expr $$skip + 1`; \
-+ echo "SKIP: $$tst"; \
-+ fi; \
-+ done; \
-+ if test "$$failed" -eq 0; then \
-+ if test "$$xfail" -eq 0; then \
-+ banner="All $$all tests passed"; \
-+ else \
-+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-+ fi; \
-+ else \
-+ if test "$$xpass" -eq 0; then \
-+ banner="$$failed of $$all tests failed"; \
-+ else \
-+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-+ fi; \
-+ fi; \
-+ dashes="$$banner"; \
-+ skipped=""; \
-+ if test "$$skip" -ne 0; then \
-+ skipped="($$skip tests were not run)"; \
-+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$skipped"; \
-+ fi; \
-+ report=""; \
-+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-+ report="Please report to $(PACKAGE_BUGREPORT)"; \
-+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$report"; \
-+ fi; \
-+ dashes=`echo "$$dashes" | sed s/./=/g`; \
-+ echo "$$dashes"; \
-+ echo "$$banner"; \
-+ test -z "$$skipped" || echo "$$skipped"; \
-+ test -z "$$report" || echo "$$report"; \
-+ echo "$$dashes"; \
-+ test "$$failed" -eq 0; \
-+ else :; fi
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-+ if test "$$subdir" = .; then :; else \
-+ test -d "$(distdir)/$$subdir" \
-+ || $(mkdir_p) "$(distdir)/$$subdir" \
-+ || exit 1; \
-+ distdir=`$(am__cd) $(distdir) && pwd`; \
-+ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-+ (cd $$subdir && \
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$$top_distdir" \
-+ distdir="$$distdir/$$subdir" \
-+ distdir) \
-+ || exit 1; \
-+ fi; \
-+ done
-+ $(MAKE) $(AM_MAKEFLAGS) \
-+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
-+ dist-hook
-+check-am: all-am
-+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-+check: check-recursive
-+all-am: Makefile $(PROGRAMS) all-local
-+installdirs: installdirs-recursive
-+installdirs-am:
-+install: install-recursive
-+install-exec: install-exec-recursive
-+install-data: install-data-recursive
-+uninstall: uninstall-recursive
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-recursive
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-recursive
-+
-+clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \
-+ mostlyclean-am
-+
-+distclean: distclean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-recursive
-+
-+dvi-am:
-+
-+html: html-recursive
-+
-+info: info-recursive
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-recursive
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-recursive
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-recursive
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-recursive
-+
-+pdf-am:
-+
-+ps: ps-recursive
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+uninstall-info: uninstall-info-recursive
-+
-+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am all-local check \
-+ check-TESTS check-am clean clean-generic clean-libtool \
-+ clean-local clean-noinstPROGRAMS clean-recursive ctags \
-+ ctags-recursive dist-hook distclean distclean-compile \
-+ distclean-generic distclean-libtool distclean-recursive \
-+ distclean-tags distdir dvi dvi-am html html-am info info-am \
-+ install install-am install-data install-data-am install-exec \
-+ install-exec-am install-info install-info-am install-man \
-+ install-strip installcheck installcheck-am installdirs \
-+ installdirs-am maintainer-clean maintainer-clean-generic \
-+ maintainer-clean-recursive mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
-+ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
-+ uninstall-info-am
-+
-+
-+dist-hook:
-+ for D in $(TESTDIRS); do \
-+ test -d $(distdir)/$$D || mkdir $(distdir)/$$D || exit 1 ; \
-+ done ; \
-+ FILES=`(cd $(srcdir) && $(FIND_TESTS) -o -name "*.in" -a -not -name Makefile.in)` ; \
-+ for F in $$FILES; do \
-+ echo '-- Disting file '$$F ; \
-+ cp -f $(srcdir)/$$F $(distdir)/$$F || exit 1 ; \
-+ done
-+
-+all-local:
-+ for D in $(TESTDIRS); do \
-+ test -d $(top_builddir)/test/$$D || mkdir $(top_builddir)/test/$$D || exit 1 ; \
-+ done ; \
-+ if ! (test $(srcdir) = . || test $(srcdir) -ef .) ; then \
-+ FILES=`(cd $(srcdir) && $(FIND_TESTS))` ; \
-+ for F in $$FILES; do \
-+ SRC=$(srcdir)/$$F ; \
-+ DEST=$(top_builddir)/test/$$F ; \
-+ echo '-- Copying test file '$$F ; \
-+ cp $$SRC $$DEST || exit 1 ; \
-+ chmod u+w $$DEST || exit 1 ; \
-+ done ; \
-+ else \
-+ echo '-- No need to copy test data as srcdir = builddir' ; \
-+ fi ; \
-+ echo '-- Copying' $(top_builddir)/bus/*.conf 'to test directory' ; \
-+ cp $(top_builddir)/bus/*.conf $(top_builddir)/test/data/valid-config-files || exit 1 ; \
-+ chmod u+w $(top_builddir)/test/data/valid-config-files/*.conf || exit 1
-+
-+clean-local:
-+ if test $(srcdir) != . ; then \
-+ FILES=`(cd $(top_builddir)/test && $(FIND_TESTS))` ; \
-+ for F in $$FILES; do \
-+ DEST=$(top_builddir)/test/$$F ; \
-+ echo '-- Deleting test file '$$F ; \
-+ rm $$DEST || exit 1 ; \
-+ done ; \
-+ REVERSEDIRS= ; \
-+ for D in $(TESTDIRS); do \
-+ REVERSEDIRS="$$D $$REVERSEDIRS" ; \
-+ done ; \
-+ for D in $$REVERSEDIRS; do \
-+ rmdir $(top_builddir)/test/$$D || exit 1 ; \
-+ done ; \
-+ fi
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/test/data/auth/cancel.auth-script dbus-0.61/test/data/auth/cancel.auth-script
---- dbus-0.61.orig/test/data/auth/cancel.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/cancel.auth-script 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,19 @@
-+## this tests canceling EXTERNAL
-+
-+SERVER
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND OK
-+EXPECT_STATE WAITING_FOR_INPUT
-+SEND 'CANCEL'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-+## now start over and see if it works
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND OK
-+EXPECT_STATE WAITING_FOR_INPUT
-+SEND 'BEGIN'
-+EXPECT_STATE AUTHENTICATED
-+
-+
-+
-diff -Naur dbus-0.61.orig/test/data/auth/client-out-of-mechanisms.auth-script dbus-0.61/test/data/auth/client-out-of-mechanisms.auth-script
---- dbus-0.61.orig/test/data/auth/client-out-of-mechanisms.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/client-out-of-mechanisms.auth-script 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,7 @@
-+## this tests that tests that the client disconnects when it's out of
-+## known mechanisms
-+
-+CLIENT
-+EXPECT_COMMAND AUTH
-+SEND 'REJECTED BONGO_MD5'
-+EXPECT_STATE NEED_DISCONNECT
-diff -Naur dbus-0.61.orig/test/data/auth/external-failed.auth-script dbus-0.61/test/data/auth/external-failed.auth-script
---- dbus-0.61.orig/test/data/auth/external-failed.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/external-failed.auth-script 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,8 @@
-+## this tests that auth of type EXTERNAL without credentials will fail
-+
-+SERVER
-+NO_CREDENTIALS
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-diff -Naur dbus-0.61.orig/test/data/auth/external-root.auth-script dbus-0.61/test/data/auth/external-root.auth-script
---- dbus-0.61.orig/test/data/auth/external-root.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/external-root.auth-script 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,10 @@
-+## this tests we can auth EXTERNAL as ourselves, with root credentials
-+
-+SERVER
-+ROOT_CREDENTIALS
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND OK
-+EXPECT_STATE WAITING_FOR_INPUT
-+SEND 'BEGIN'
-+EXPECT_STATE AUTHENTICATED
-+
-diff -Naur dbus-0.61.orig/test/data/auth/external-silly.auth-script dbus-0.61/test/data/auth/external-silly.auth-script
---- dbus-0.61.orig/test/data/auth/external-silly.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/external-silly.auth-script 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,8 @@
-+## this tests we can't auth with silly credentials
-+
-+SERVER
-+SILLY_CREDENTIALS
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-diff -Naur dbus-0.61.orig/test/data/auth/external-successful.auth-script dbus-0.61/test/data/auth/external-successful.auth-script
---- dbus-0.61.orig/test/data/auth/external-successful.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/external-successful.auth-script 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,9 @@
-+## this tests a successful auth of type EXTERNAL
-+
-+SERVER
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND OK
-+EXPECT_STATE WAITING_FOR_INPUT
-+SEND 'BEGIN'
-+EXPECT_STATE AUTHENTICATED
-+
-diff -Naur dbus-0.61.orig/test/data/auth/extra-bytes.auth-script dbus-0.61/test/data/auth/extra-bytes.auth-script
---- dbus-0.61.orig/test/data/auth/extra-bytes.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/extra-bytes.auth-script 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,10 @@
-+## this tests that we have the expected extra bytes at the end
-+
-+SERVER
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND OK
-+EXPECT_STATE WAITING_FOR_INPUT
-+SEND 'BEGIN\r\nHello'
-+EXPECT_STATE AUTHENTICATED_WITH_UNUSED_BYTES
-+EXPECT_UNUSED 'Hello\r\n'
-+EXPECT_STATE AUTHENTICATED
-diff -Naur dbus-0.61.orig/test/data/auth/fail-after-n-attempts.auth-script dbus-0.61/test/data/auth/fail-after-n-attempts.auth-script
---- dbus-0.61.orig/test/data/auth/fail-after-n-attempts.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/fail-after-n-attempts.auth-script 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,34 @@
-+## this tests that after retrying too often we fail
-+
-+SERVER
-+NO_CREDENTIALS
-+
-+# 1
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-+# 2
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-+# 3
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-+# 4
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-+# 5
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-+# 6
-+SEND 'AUTH EXTERNAL USERID_HEX'
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE NEED_DISCONNECT
-diff -Naur dbus-0.61.orig/test/data/auth/fallback.auth-script dbus-0.61/test/data/auth/fallback.auth-script
---- dbus-0.61.orig/test/data/auth/fallback.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/fallback.auth-script 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,17 @@
-+## this tests that a client can fallback to a secondary auth mech
-+
-+CLIENT
-+
-+## Will try EXTERNAL by default first without first calling AUTH alone.
-+
-+EXPECT_COMMAND AUTH
-+SEND 'REJECTED EXTERNAL DBUS_COOKIE_SHA1 DBUS_TEST_NONEXISTENT_MECH'
-+
-+## And this time we get DBUS_COOKIE_SHA1
-+
-+EXPECT_COMMAND AUTH
-+## of course real DBUS_COOKIE_SHA1 would not send this here...
-+SEND 'OK 1234deadbeef'
-+
-+EXPECT_COMMAND BEGIN
-+EXPECT_STATE AUTHENTICATED
-diff -Naur dbus-0.61.orig/test/data/auth/invalid-command-client.auth-script dbus-0.61/test/data/auth/invalid-command-client.auth-script
---- dbus-0.61.orig/test/data/auth/invalid-command-client.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/invalid-command-client.auth-script 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,8 @@
-+## this tests that receiving a nonexistent command is handled properly
-+## by a client
-+
-+CLIENT
-+EXPECT_COMMAND AUTH
-+SEND 'NONEXISTENT_COMMAND foo bar baz blah blah'
-+EXPECT_COMMAND ERROR
-+EXPECT_STATE WAITING_FOR_INPUT
-diff -Naur dbus-0.61.orig/test/data/auth/invalid-command.auth-script dbus-0.61/test/data/auth/invalid-command.auth-script
---- dbus-0.61.orig/test/data/auth/invalid-command.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/invalid-command.auth-script 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,7 @@
-+## this tests that receiving a nonexistent command is handled properly
-+## by a server
-+
-+SERVER
-+SEND 'NONEXISTENT_COMMAND foo bar baz blah blah'
-+EXPECT_COMMAND ERROR
-+EXPECT_STATE WAITING_FOR_INPUT
-diff -Naur dbus-0.61.orig/test/data/auth/invalid-hex-encoding.auth-script dbus-0.61/test/data/auth/invalid-hex-encoding.auth-script
---- dbus-0.61.orig/test/data/auth/invalid-hex-encoding.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/invalid-hex-encoding.auth-script 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,6 @@
-+## this tests an invalid hex encoding followed by successful authentication
-+
-+SERVER
-+SEND 'AUTH EXTERNAL willy'
-+EXPECT_COMMAND ERROR
-+EXPECT_STATE WAITING_FOR_INPUT
-diff -Naur dbus-0.61.orig/test/data/auth/mechanisms.auth-script dbus-0.61/test/data/auth/mechanisms.auth-script
---- dbus-0.61.orig/test/data/auth/mechanisms.auth-script 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/auth/mechanisms.auth-script 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,8 @@
-+## this tests that the server sends a list of mechanisms
-+## in response to blank AUTH
-+
-+SERVER
-+SEND AUTH
-+EXPECT_COMMAND REJECTED
-+EXPECT_STATE WAITING_FOR_INPUT
-+
-diff -Naur dbus-0.61.orig/test/data/equiv-config-files/basic/basic-1.conf dbus-0.61/test/data/equiv-config-files/basic/basic-1.conf
---- dbus-0.61.orig/test/data/equiv-config-files/basic/basic-1.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/equiv-config-files/basic/basic-1.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,25 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include ignore_missing="yes">nonexistent.conf</include>
-+ <policy context="default">
-+ <allow user="*"/>
-+ </policy>
-+
-+ <limit name="max_incoming_bytes">5000</limit>
-+ <limit name="max_outgoing_bytes">5000</limit>
-+ <limit name="max_message_size">300</limit>
-+ <limit name="service_start_timeout">5000</limit>
-+ <limit name="auth_timeout">6000</limit>
-+ <limit name="max_completed_connections">50</limit>
-+ <limit name="max_incomplete_connections">80</limit>
-+ <limit name="max_connections_per_user">64</limit>
-+ <limit name="max_pending_service_starts">64</limit>
-+ <limit name="max_names_per_connection">256</limit>
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/equiv-config-files/basic/basic-2.conf dbus-0.61/test/data/equiv-config-files/basic/basic-2.conf
---- dbus-0.61.orig/test/data/equiv-config-files/basic/basic-2.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/equiv-config-files/basic/basic-2.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,5 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+<include>basic-1.conf</include>
-+</busconfig>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/test/data/equiv-config-files/basic/basic.d/basic.conf dbus-0.61/test/data/equiv-config-files/basic/basic.d/basic.conf
---- dbus-0.61.orig/test/data/equiv-config-files/basic/basic.d/basic.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/equiv-config-files/basic/basic.d/basic.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,13 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include ignore_missing="yes">nonexistent.conf</include>
-+ <policy context="default">
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/equiv-config-files/entities/basic.d/basic.conf dbus-0.61/test/data/equiv-config-files/entities/basic.d/basic.conf
---- dbus-0.61.orig/test/data/equiv-config-files/entities/basic.d/basic.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/equiv-config-files/entities/basic.d/basic.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,13 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include ignore_missing="yes">nonexistent.conf</include>
-+ <policy context="default">
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/equiv-config-files/entities/entities-1.conf dbus-0.61/test/data/equiv-config-files/entities/entities-1.conf
---- dbus-0.61.orig/test/data/equiv-config-files/entities/entities-1.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/equiv-config-files/entities/entities-1.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,14 @@
-+<!-- This config file contains XML entities -->
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/<bar></listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/&share/foo</servicedir>
-+ <include ignore_missing="yes">nonexistent.confn</include>
-+ <policy context="default">
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/equiv-config-files/entities/entities-2.conf dbus-0.61/test/data/equiv-config-files/entities/entities-2.conf
---- dbus-0.61.orig/test/data/equiv-config-files/entities/entities-2.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/equiv-config-files/entities/entities-2.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,5 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+<include>entities-1.conf</include>
-+</busconfig>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/test/data/incomplete-messages/missing-body.message dbus-0.61/test/data/incomplete-messages/missing-body.message
---- dbus-0.61.orig/test/data/incomplete-messages/missing-body.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/incomplete-messages/missing-body.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,19 @@
-+## message that's missing an expected body
-+
-+VALID_HEADER method_call
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+ALIGN 8
-+END_LENGTH Header
-+
-+## create the body, then chop it off
-+START_LENGTH Body
-+TYPE INT32
-+INT32 37
-+END_LENGTH Body
-+
-+CHOP 8
-diff -Naur dbus-0.61.orig/test/data/invalid-config-files/badselinux-1.conf dbus-0.61/test/data/invalid-config-files/badselinux-1.conf
---- dbus-0.61.orig/test/data/invalid-config-files/badselinux-1.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-config-files/badselinux-1.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,10 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include selinux_root_relative="jomoma">blah</include>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/invalid-config-files/badselinux-2.conf dbus-0.61/test/data/invalid-config-files/badselinux-2.conf
---- dbus-0.61.orig/test/data/invalid-config-files/badselinux-2.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-config-files/badselinux-2.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,10 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include if_selinux_enabled="moo">blah</include>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/invalid-config-files/circular-1.conf dbus-0.61/test/data/invalid-config-files/circular-1.conf
---- dbus-0.61.orig/test/data/invalid-config-files/circular-1.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-config-files/circular-1.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,4 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+<include>circular-1.conf</include>
-+</busconfig>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/test/data/invalid-config-files/circular-2.conf dbus-0.61/test/data/invalid-config-files/circular-2.conf
---- dbus-0.61.orig/test/data/invalid-config-files/circular-2.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-config-files/circular-2.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,4 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+<include>circular-3.conf</include>
-+</busconfig>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/test/data/invalid-config-files/circular-3.conf dbus-0.61/test/data/invalid-config-files/circular-3.conf
---- dbus-0.61.orig/test/data/invalid-config-files/circular-3.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-config-files/circular-3.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,4 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+<include>circular-2.conf</include>
-+</busconfig>
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/test/data/invalid-config-files/not-well-formed.conf dbus-0.61/test/data/invalid-config-files/not-well-formed.conf
---- dbus-0.61.orig/test/data/invalid-config-files/not-well-formed.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-config-files/not-well-formed.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,5 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</foo>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/invalid-config-files/truncated-file.conf dbus-0.61/test/data/invalid-config-files/truncated-file.conf
---- dbus-0.61.orig/test/data/invalid-config-files/truncated-file.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-config-files/truncated-file.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,9 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include ignore_missing="y
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/array-of-nil.message dbus-0.61/test/data/invalid-messages/array-of-nil.message
---- dbus-0.61.orig/test/data/invalid-messages/array-of-nil.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/array-of-nil.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,31 @@
-+# Message with an array of NIL (not allowed)
-+
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+END_LENGTH Header
-+
-+START_LENGTH Body
-+TYPE ARRAY
-+TYPE NIL
-+UINT32 5
-+
-+## we want it to fail because of type nil, not because the length is no good
-+## so pad out the message with 5 bytes
-+BYTE 1
-+BYTE 2
-+BYTE 3
-+BYTE 4
-+BYTE 5
-+
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/array-with-mixed-types.message dbus-0.61/test/data/invalid-messages/array-with-mixed-types.message
---- dbus-0.61.orig/test/data/invalid-messages/array-with-mixed-types.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/array-with-mixed-types.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,52 @@
-+# Message with an array of array where the child arrays are of
-+# different types
-+
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+END_LENGTH Header
-+
-+START_LENGTH Body
-+
-+TYPE ARRAY
-+TYPE ARRAY
-+TYPE UINT32
-+
-+LENGTH Array
-+START_LENGTH Array
-+
-+## array of uint32
-+LENGTH SubArray1
-+START_LENGTH SubArray1
-+UINT32 1
-+UINT32 2
-+UINT32 3
-+END_LENGTH SubArray1
-+
-+## array of uint32
-+LENGTH SubArray2
-+START_LENGTH SubArray2
-+UINT32 4
-+UINT32 5
-+END_LENGTH SubArray2
-+
-+## array of boolean
-+LENGTH SubArray3
-+START_LENGTH SubArray3
-+BOOLEAN false
-+BOOLEAN true
-+END_LENGTH SubArray3
-+
-+END_LENGTH Array
-+
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/bad-boolean-array.message dbus-0.61/test/data/invalid-messages/bad-boolean-array.message
---- dbus-0.61.orig/test/data/invalid-messages/bad-boolean-array.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/bad-boolean-array.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,27 @@
-+## a message with an invalid boolean array
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+END_LENGTH Header
-+
-+START_LENGTH Body
-+TYPE ARRAY
-+TYPE BOOLEAN
-+ALIGN 4
-+INT32 3
-+BYTE 0
-+BYTE 1
-+BYTE 3
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/bad-boolean.message dbus-0.61/test/data/invalid-messages/bad-boolean.message
---- dbus-0.61.orig/test/data/invalid-messages/bad-boolean.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/bad-boolean.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,22 @@
-+## a message with an invalid boolean value
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+END_LENGTH Header
-+
-+START_LENGTH Body
-+TYPE BOOLEAN
-+BYTE 3
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/bad-endian.message dbus-0.61/test/data/invalid-messages/bad-endian.message
---- dbus-0.61.orig/test/data/invalid-messages/bad-endian.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/bad-endian.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,25 @@
-+## message with invalid endianness tag
-+
-+BYTE 'i'
-+BYTE 1
-+BYTE 0
-+BYTE 0
-+
-+LENGTH Header
-+LENGTH Body
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+END_LENGTH Header
-+
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/bad-header-field-alignment.message dbus-0.61/test/data/invalid-messages/bad-header-field-alignment.message
---- dbus-0.61.orig/test/data/invalid-messages/bad-header-field-alignment.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/bad-header-field-alignment.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,38 @@
-+## last field incorrectly aligned to 4 bytes
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+HEADER_FIELD UNKNOWN
-+TYPE STRING
-+STRING 'a'
-+
-+ALIGN 4
-+
-+HEADER_FIELD UNKNOWN
-+TYPE ARRAY
-+TYPE BYTE
-+ALIGN 4
-+LENGTH ThisByteArray
-+START_LENGTH ThisByteArray
-+BYTE 1
-+BYTE 2
-+END_LENGTH ThisByteArray
-+
-+
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/boolean-has-no-value.message-raw dbus-0.61/test/data/invalid-messages/boolean-has-no-value.message-raw
---- dbus-0.61.orig/test/data/invalid-messages/boolean-has-no-value.message-raw 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/boolean-has-no-value.message-raw 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1 @@
-+l ÂðãÀLJºUçæxÑ5"¢K}ãKEø):»|fi7»ó¢l&t¡HDv«ÈPñʪHr.ÐtÄEÍZÓºde
-\ No newline at end of file
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/local-namespace.message dbus-0.61/test/data/invalid-messages/local-namespace.message
---- dbus-0.61.orig/test/data/invalid-messages/local-namespace.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/local-namespace.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,21 @@
-+## a message that is in the org.freedesktop.Local. namespace and thus
-+## invalid
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.DBus.Local'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Disconnected'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+END_LENGTH Header
-+
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/no-dot-in-name.message dbus-0.61/test/data/invalid-messages/no-dot-in-name.message
---- dbus-0.61.orig/test/data/invalid-messages/no-dot-in-name.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/no-dot-in-name.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,19 @@
-+## a message with dotless interface
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'NoDotInHere'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/not-nul-header-padding.message dbus-0.61/test/data/invalid-messages/not-nul-header-padding.message
---- dbus-0.61.orig/test/data/invalid-messages/not-nul-header-padding.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/not-nul-header-padding.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,25 @@
-+## has one non-nul byte in header padding
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+HEADER_FIELD UNKNOWN
-+TYPE STRING
-+STRING 'a'
-+ALIGN 8
-+## kill a padding byte and replace it
-+CHOP 1
-+BYTE 'q'
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/overlong-name.message dbus-0.61/test/data/invalid-messages/overlong-name.message
---- dbus-0.61.orig/test/data/invalid-messages/overlong-name.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/overlong-name.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,20 @@
-+## a message with too-long name field
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.foo.bar.this.is.really.long 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200'
-+
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/too-little-header-padding.message dbus-0.61/test/data/invalid-messages/too-little-header-padding.message
---- dbus-0.61.orig/test/data/invalid-messages/too-little-header-padding.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/too-little-header-padding.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,24 @@
-+## has one byte missing from header padding
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+HEADER_FIELD UNKNOWN
-+TYPE STRING
-+STRING 'a'
-+ALIGN 8
-+## kill a padding byte
-+CHOP 1
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/too-much-header-padding-by-far.message dbus-0.61/test/data/invalid-messages/too-much-header-padding-by-far.message
---- dbus-0.61.orig/test/data/invalid-messages/too-much-header-padding-by-far.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/too-much-header-padding-by-far.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,26 @@
-+## has one byte extra header padding
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+HEADER_FIELD UNKNOWN
-+TYPE STRING
-+STRING 'a'
-+ALIGN 8
-+BYTE 0
-+ALIGN 8
-+BYTE 0
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/too-much-header-padding.message dbus-0.61/test/data/invalid-messages/too-much-header-padding.message
---- dbus-0.61.orig/test/data/invalid-messages/too-much-header-padding.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/too-much-header-padding.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,23 @@
-+## has one byte extra header padding
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+HEADER_FIELD UNKNOWN
-+TYPE STRING
-+STRING 'a'
-+ALIGN 8
-+BYTE 0
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/invalid-messages/too-short-dict.message dbus-0.61/test/data/invalid-messages/too-short-dict.message
---- dbus-0.61.orig/test/data/invalid-messages/too-short-dict.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/invalid-messages/too-short-dict.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,28 @@
-+# Message with lots of different argument types
-+
-+VALID_HEADER method_call
-+
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+
-+ALIGN 8
-+
-+END_LENGTH Header
-+
-+START_LENGTH Body
-+TYPE DICT
-+LENGTH Dict
-+START_LENGTH Dict
-+STRING 'uint32'
-+TYPE UINT32
-+UINT32 0x8765432
-+STRING 'uint32'
-+END_LENGTH Dict
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/sha-1/Readme.txt dbus-0.61/test/data/sha-1/Readme.txt
---- dbus-0.61.orig/test/data/sha-1/Readme.txt 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/sha-1/Readme.txt 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,83 @@
-+Test suite from http://csrc.nist.gov/cryptval/shs.html
-+
-+ Sample Vectors for SHA-1 Testing
-+
-+ This file describes tests and vectors that can be used in verifying the correctness of
-+an SHA-1 implementation. However, use of these vectors does not take the place of validation
-+obtained through the Cryptographic Module Validation Program.
-+
-+ There are three areas of the Secure Hash Standard for which test vectors are supplied:
-+short messages of varying length, selected long messages, and pseudorandomly generated messages.
-+Since it is possible for an implementation to correctly handle the hashing of byte-oriented
-+messages (and not messages of a non-byte length), the SHS tests each come in two flavors. For
-+both byte oriented and bit oriented messages, the message lengths are given in bits.
-+
-+Type I Test: Messages of Varying Length
-+
-+ An implementation of the SHS must be able to correctly generate message digests for
-+messages of arbitrary length. This functionality can be tested by supplying the implementation
-+with 1025 pseudorandomly generated messages with lengths from 0 to 1024 bits (for an implementation
-+that only hashes byte-oriented data correctly, 129 messages of length 0, 8, 16, 24,...,1024 bits
-+will be supplied).
-+
-+Type II Test: Selected Long Messages
-+
-+ Additional testing of an implementation can be performed by testing that the implementation
-+can correctly generate digests for longer messages. A list of 100 messages, each of length > 1024,
-+is supplied. These can be used to verify the hashing of longer message lengths. For bit oriented
-+testing the messages are from 1025 to 103425 bits long (length=1025+i*1024, where 0<=i<100). For
-+byte oriented testing the messages are from 1032 to 103432 (length=1032+i*1024, where 0<=i<100).
-+
-+Type III Test: Pseudorandomly Generated Messages
-+
-+ This test determines whether the implementation can compute message digests for messages
-+that are generated using a given seed. A sequence of 100 message digests is generated using this
-+seed. The digests are generated according to the following pseudocode:
-+
-+procedure MonteCarlo(string SEED)
-+{
-+ integer i, j, a;
-+ string M;
-+
-+ M := SEED;
-+ for j = 0 to 99 do {
-+ for i = 1 to 50000 do {
-+ for a = 1 to (j/4*8 + 24) do M := M || 0; /*0' is the binary zero bit. */
-+ M := M || i; /* Here, the value for i is expressed as a 32-bit word
-+ and concatenated with M. The first bit
-+ concatenated with M is the most significant bit of
-+ this 32-bit word. */
-+ M := SHA(M);
-+ }
-+ print(M);
-+ }
-+ }
-+
-+NOTE: In the above procedure, || denotes concatenation. Also, M || i denotes appending the 32-bit
-+word representing the value i, as defined in section 2 of the SHS. Within the procedure, M is a string
-+of variable length. The initial length of 416 bits ensures that the length of M never exceeds 512 bits
-+during execution of the above procedure, and it ensures that messages will be of a byte length. Each
-+element printed should be 160 bits in length.
-+
-+
-+File formats:
-+
-+There are two files included for each test type (bit-oriented and byte-oriented). One file contains
-+the messages and the other file contains the hashes.
-+
-+The message files provided use "compact strings" to store the message values. Compact strings are
-+used to represented the messages in a compact form. A compact string has the form
-+ z || b || n(1) || n(2) || ... || n(z)
-+where z>=0 that represents the number of n, b is either 0 or 1, and each n(i) is a decimal integer
-+representing a positive number. The length of the compact string is given by the summation of the n(i).
-+
-+The compact string is interpreted as the representation of the bit string consisting of b repeated n(1) times,
-+followed by 1-b repeated n(2) times, followed by b repeated n(3) times, and so on.
-+
-+Example:
-+ M = 5 1 7 13 5 1 2
-+ where z = 5 and b = 1. Then the compact string M represents the bit string
-+ 1111111000000000000011111011
-+ where 1 is repeated 7 times, 0 is repeated 13 times, 1 is repeated 5 times,
-+ 0 is repeated 1 time, and 1 is repeated 2 times.
-+
-diff -Naur dbus-0.61.orig/test/data/sha-1/bit-hashes.sha1 dbus-0.61/test/data/sha-1/bit-hashes.sha1
---- dbus-0.61.orig/test/data/sha-1/bit-hashes.sha1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/sha-1/bit-hashes.sha1 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,1239 @@
-+# Configuration information for "SHA-1 Test"
-+# SHA tests are configured for BIT oriented implementations
-+H>SHS Type 1 Hashes<H
-+D>
-+DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 ^
-+59C4526AA2CC59F9A5F56B5579BA7108E7CCB61A ^
-+6E42FB84067CFF056C43A49E484997AF23190879 ^
-+C63FBB9A87171A176E6E054890E29A8C5F125F6C ^
-+3109E33C1C4B9A0169D1599169D0E5A520A1E71C ^
-+9195E1E73CC68D7170F44BD1D83CB624BC87FA0B ^
-+64F7C374527278C0436DBC8DE5AABEC2BBF634BC ^
-+154B622EA426FB151B1FF1BE1CE871752B9EDEB4 ^
-+12BDD00FD4038756CBCF8ECDAD1B0CD862603CD8 ^
-+6700F93E1691E83735279E167F67AF61FEE9813B ^
-+84AF20A06799F366435BA20F99B9A10955B6D276 ^
-+C622FE003FD16220357F88FC6B9DE4789E77C321 ^
-+C8DEA5A98DADA1F9662D5C150618140A150ECA46 ^
-+FBB7127E77A39D856EC849D755C868CA7B9F11E9 ^
-+B7D8A7A39AB33ED8C3AFD8F76201BF0904149437 ^
-+154535460A12B9E100E251BB3A4D4DBCD80A309A ^
-+82FC6020C7A9B62F334F7156ADA608532DCA6A3B ^
-+9DD980B8073B32D21E9B2324F982024375C2951F ^
-+419F97A9899486DC53C58C761CEB564314FD47BD ^
-+A212E43EBFB31388F64C0C0B0B1CC7019704B744 ^
-+D8F1623C186A5615F58E846C9D164F35A8956E44 ^
-+AA32848DE1499365730A3650A3A7703FD404259A ^
-+79BDB01E55B61A8C1AFBF63D3CE2DCCAB8CF3DFB ^
-+23BF3164A448A727BA71457EBA9FCFABFBAC4F70 ^
-+BA26E846EBEF7434B63F5862FDA005A1CEB5656E ^
-+98622869A474EA85FE575CD979354248141A14A7 ^
-+5C9E7E6951D386205542DA0680E07E60EC61D64E ^
-+8EF07A02A7023AA0E6EE4BE1518627A521D1F9D5 ^
-+CDEA382A5DFDA1C633F8BBC77F291F40E8801CE3 ^
-+3C0A709FEF85DDBCC1B362AA162010461F31AECD ^
-+10ABD6B8D97E688AF5CDA7955CD3CC0850A4A75F ^
-+0EC53133F7FF955CA37D25491B592DFC0256BF23 ^
-+1A46A67FEED1604523C062AACC2455223B366D05 ^
-+FA3DD749E8F3D9029D9261F25157B3C0E2DF6834 ^
-+43DCAC2CF20E7CCB1DED6E379CC302F302655F3B ^
-+8BA25BDF331671CCB4B60961E4AF356224027862 ^
-+AC3A3EA0FB8727334A4478ED165128581BBC5BEA ^
-+CA4406A231EA2CA06CD1D8F3C77FEF9118B1501A ^
-+5B83465B8EED14871FB51D9E6CE499FB2E4B4209 ^
-+9445F521861946D4063E0CA3F41F580855A7454E ^
-+C2410140818962F95506B407AE8514F11F892AEC ^
-+F8F826FE0D93F415426ADB6956242116CBAB2426 ^
-+C803F7539AA036CBB31B735238120FB85180D8C8 ^
-+162EB5163692D9BC7B4529D214BBB932157361B6 ^
-+D4B0D876A1952ADB5D27A1A6BF71BCF22731A4C5 ^
-+CB5CD26AA39E45F248706604EDB9A2DB8EDC1BF6 ^
-+F1AC987F30FF0375F6115C0CCD6E22DDFD0FAFE7 ^
-+692E209D3A6A0228EB9823DCB738B16BDF97A4E9 ^
-+FB9E1E71F7645EEEEB3DDE66716DC44444CD657C ^
-+D51F071E360D96124DA49AD37E37DE17B564920D ^
-+0667AFCDBB82B4213447D0B22006DC4A1320CD21 ^
-+8FBFC65FEB2565F2FB8A9966B74702350C87CF40 ^
-+8A8BBCD6AF76E71067EB0AF54F90EE5AC2B5882F ^
-+8D831EF2344E336CC27281227185A34356B856A6 ^
-+DE7AA7424F92CBC50966FC4E6A577F98905998FC ^
-+1064EE6BEF704F3A618CB9C58F299B22A4D34293 ^
-+95F8CF7E864FEBBF77E46067063D08D5175FC508 ^
-+79381F230970F120D19B115BF864C794878E7797 ^
-+D82A30F49538561D5A7D1324ECAD321DD05E1202 ^
-+5926CEEAE43D29A7BE4C0EDCA626C43ABE00416A ^
-+563458C9F2C16C5AF96915FCD9306F1D9BA579C9 ^
-+C92B0BD604E45D7479AE19F641B2DB067E4CA774 ^
-+D69D013EE5C871D3AE3E388090BC1AAF9852A83C ^
-+7C341ECDEE7298605933465EA9ADBE7E044C8A79 ^
-+83EC687D22A13EDDCD470C52C45276A6E1554982 ^
-+6D27928F014269CEC4E8745EB73FA714BE2DC62E ^
-+75C0BF312C05231DAF7E9CD4CA33ACA78BCAA59A ^
-+015D799C602DD4E30D2C0104A57B1E214A423D66 ^
-+D2F43ECAD20F0B4C57DD07D3CECE562B6B72C7FB ^
-+27948CE5A56D57248D4DF683DC3FE023D2B9B43A ^
-+2D5A984BF32DE28242744406469E18B7A5178A97 ^
-+FFC5C4ECF0CC051320E071D14C7DCA4A4DDA305A ^
-+CED8A5487AD13AF0003129659DE2556183836C54 ^
-+599BB509863CC5D275416F6DB6C5D2BD827DC347 ^
-+3981DAC895DDB9294D933C1CE78828E3A558B152 ^
-+91EB715904123D326B23ACD684DFBD7203CABECB ^
-+5A9AC8C3705AF14DDE50E6CF2FE5B0C15C4BD282 ^
-+E2620DFB42B5ECAF85F590A71DF696906AC41C4D ^
-+CBAADDA7B5DB389BF1775AE50040081A05A0EE48 ^
-+AAF80D079F3F980BF9D5366C5B1991A3E3D9FDCE ^
-+2A861F616604C526ACB157732DC431E81BC9A1F6 ^
-+FBDB22AA0B87718F464C0D1AA39695A1BDCE053F ^
-+4331BA331522D4F9CD6137858DB9AA16AC95316E ^
-+33F6BFE23A4C0E04B8BF642CD96437EF0055AAF7 ^
-+2046138F7899FDB2063CD84B84E821525172C03B ^
-+E4FDC812C5F7A37FC7A81005F1E78BFF59666887 ^
-+6477F931AC20B2FCE1C92171FA4DCF2D266B3DC5 ^
-+ED0DD516FA7FE2DB7AFCC3DBEED0879A0C10F1C2 ^
-+FCEDA0311C085368A5751BCAD8EAED2063C2D40A ^
-+23EB08B5100C8FBAF7B3049887A11CC531B6CD78 ^
-+A6C42B757DF078A69FFF6819A8ABC46E1B09F435 ^
-+0615EE4840B1F1CD628636D1B4F4495639DEDEBC ^
-+E2288110007AE6DBCCFC74B7735F4D94B0AA10A1 ^
-+159E01DC348EB067E90A63BC6FEFBF4C45A01F9A ^
-+A16286459CC989AE662C731F3D7D0CD487DCCB3B ^
-+8FDAFE2DE37215E142E27A65A881F80E0430BF49 ^
-+1BF978B58D98FC15731F4111E7C7A49F9CFD7C65 ^
-+C1F61CD4B4DB14AA60C6448C0398EEC72107826C ^
-+5CF0A7F6F46A730CD9103A54F1EC8A7549FA5788 ^
-+FDC104217940BE5A7AD1C02D128B31747C972A5C ^
-+DFF58BEF4FF418D26A35B55215CE419D3579A194 ^
-+3A2EFD444F4AA7A3DB9765E027CE5D82B51F6737 ^
-+EB616B6F97C5BFD02C1B9E4AFBA8A5151DD4167F ^
-+62F31F9A28D0587BD8253601A7EFB698B03205FA ^
-+E87645B2CB7DF66DA2771ABE0CEDA0F625FC8AFA ^
-+E801C3071CA6AEE278B222747BFA819C118A2DDD ^
-+EC70223BD963C122E4FCE2928934DDD2D7661CBC ^
-+82261D26377A5A5DC69E0F39D0BBF59A1B2B2248 ^
-+2E4DE781E4407AE536F70DC5A5DBEB178DBA2FC3 ^
-+AD3D958B884CAA28D5858DA103463C300862DEE6 ^
-+2A6A563C7FE33129637FABB4D40F5F0EE8B5C500 ^
-+7EA6003A8BEF4D5BFA6BFEFBCB6A5B3B1A3B7991 ^
-+6DDC620DB14882575D5BA1219284CF1C3068094F ^
-+91AD7E588EC829739C3632656DE1915AC23C8CF5 ^
-+311A491C1B5D8A26EA2A77A36B5D53FDABA1FB2A ^
-+9D4B752AA8FDAF92897B03C4D65B65EABBDF062C ^
-+C569FF6F0592664F690B008EE7A12EDA5740F0C7 ^
-+1AE35E9CD3D0A8A165B2758E1DC4F9D1CD30FBF9 ^
-+819A83318700EA861CB69F6CD8ED4ECD78CC3CB7 ^
-+98099B550A82CE22EFAE48B5935F636D5814FDB4 ^
-+CFADB998167DB289A7C17BA94DF7EDA00B29085E ^
-+3F5A90A8F757936987938DFB95F10239F91AC264 ^
-+7402265908EEA5DA183490FEF2EA2E55C9FC2862 ^
-+EA6EF0F7050EDA6B78F35597E85B7A85AE0097E4 ^
-+73F2780548F7C79E15945D7EE2A3E03B30DF35CA ^
-+8EC3C93C7307E14E9C65F26DD847CEB195DE277A ^
-+CFBC571A35B82FB0B7CB59753C4E8DE36A751195 ^
-+3C4802A956CF93A148B9034FB8F041ECD8DD4532 ^
-+5DA269C1D5CCEE3C7A66E31BD9F5E0B83BA06CE1 ^
-+706D90C00800DB9790AF66788D1B3DC81E3FF7A1 ^
-+59AC856447FDD27421C52EA66E465C64C5033722 ^
-+EACA9E82D043F2B6E12E64CF03D82ED92FD6A64D ^
-+8160755BA09C74F79DE8F9496BF0C9248DB7D45E ^
-+8CE4390C185BDFC8BC9C4D3BEB1AB757C44F6434 ^
-+1A1ADB628EB7B9CAA821AE9DE417E09A42A97113 ^
-+97C4F92A46EF3F9169A977E1643C10745ECDAA4E ^
-+408E53C03D10E2B32222F2B54D118AC4D65A9386 ^
-+710628E811C207784E3255DA8432CE6E14B61FE7 ^
-+4F6DB622778F4B1B6203BD239312D86589F1B261 ^
-+888AD8FC1CA5B893294FDB8FC94AB7762018C1F8 ^
-+AE36C2F54223BC082DDA0D528B70B2AEA190779C ^
-+4BD2BF914223DCD0CBBCC444323FBF0E487F27B6 ^
-+7526D5DF7B2ECFAC7BFF62DD7A4B5F38463305F8 ^
-+0ED7C87B68F50813AAD5E50159CBE0BBF9BF05D2 ^
-+4D5CD4E40A6668893EEA15F025ECB8187475DF4F ^
-+D38446E842C0A94F175B772BDC707CD2EE79D098 ^
-+DDA868BC2903C55CF273F48E9B92C09D90CD0179 ^
-+0841268B95ECFAAB9FE3787BA7261227A1F23294 ^
-+D3DDF20B4C0DB668421DE1F242B65A8C83FA867B ^
-+112F3CF7DACA7527819D16704EB41302A4EE52AA ^
-+96072A3EA4463A156B3BD9EAEC16ADB0905160C9 ^
-+715F195F09E3EAD3D70AE51DEF1C9709500C0A6A ^
-+8A112CA82CFEB5F3001B7A00591462F4120DDC02 ^
-+50FC91E915270D1202F6FC8792BE16ECB73CE405 ^
-+907736EC45BE7BEDA1B154EA282C51B5795991F8 ^
-+05D49462991278720EB44BEA656AB4442C8845C3 ^
-+6FD56D08A2D4630F72AC97E3C94A9575F3046729 ^
-+DD1883376CF713C8D7AEBFEC60D51FF8E2A806E8 ^
-+E0457FE00F9DEEE958DD6AD948EDF9CD9412F73A ^
-+BA6538E91B276504C84E213B325B4A7703E924B4 ^
-+C20A9B848503650DE9463B9992EB977422BB53DF ^
-+BA4A565E5C0F9FAC89D55A2B784F291C7BAD4255 ^
-+6510E09AAD8288AB81CA54DD5656DF57D0EABBE6 ^
-+33996C9C5AD04883BCEB9771A5C4A272F88550B1 ^
-+7B96F3C1272AD765DBDC35A59243F6A8F75FA351 ^
-+5AA76B16EA4DFB267D88FF7DBE4F055184A56E56 ^
-+33B9CCEB1A6EDC8C91F6034245B2E3AAC898C678 ^
-+701A32FC0B1163BC55DB76FA46F69B574B3803A0 ^
-+5D6F44A4B5175BA873BFA3369DC8BFB0AD1AC26C ^
-+0727F12D8E554EDCB435AE3BD6425B197DF6EE2E ^
-+6E1F46DC4FAD671759AC969998694BD79326246E ^
-+85233F9CFD0780BD60240A22E037C14EB8286C33 ^
-+B66CC7332341FA9261D96362F0BBD7B676F95E02 ^
-+782A78F2FC32E0B627702C541341ED28B009BB6F ^
-+6B7935265C529880DA5B166EDD660BAE14A770A9 ^
-+49C298B1C10D380BACE26E907C213C90052D7523 ^
-+49CE4D4FF9FFF6724DA032FF33F8C5A7792D24E2 ^
-+CD2C4F19C12B086C071BB6B20E8E8210AFDD2D50 ^
-+39710F77BE564C417C80CB6E4B87BE72FA805A40 ^
-+F74A6A45F5B2979B5E773007B90804F322F13AD8 ^
-+6FD6A34339047CF13F777C4B7D9E287F499FB19C ^
-+FDB04F04D3B364A6953C341E343E310F2383A655 ^
-+981E8717538CE98998E950EAD28596B527736841 ^
-+E099987DB0CC61CF607C9852336CDAF478DEE33F ^
-+E9C42F25A3E3542D1510DD09BF516AD809D42702 ^
-+F7E580FB21C725CBEA563B193896862B9BEF7F24 ^
-+D778A3287F68F47B0AA421410292D47805997A94 ^
-+534DFE759735723649EDC89BCB063C0CCFEEC34F ^
-+9381FB5BD26677A7760FC0288532755062986DF1 ^
-+27E97EE829820399595DA0A0047B74D3C4E0DBF1 ^
-+D38450071D1B079A9FD518D2F317C83C33094F43 ^
-+0221B8E4D2FA66D2EBE1B04E679662CE41405E48 ^
-+B9BC4FDC4A5CE00EFB911C3062D6F33304701C28 ^
-+461B4206618B766C89E6D9AB2F8DB07903860234 ^
-+122A9306B102F2C50B7364E1D24FECB0662E2958 ^
-+61E91F5D167066EC904134AB1C4F9D116C9D3E80 ^
-+6B7558BD8F4D3C5914A9AB5D7418F7DB77583B55 ^
-+CE48EA94843854555DC48D24D32405DAB9DBA612 ^
-+5A722AAC576F4078C001D06DA91C28131A4F92C5 ^
-+9B8FE0F1E6573CC6832BA69DEC9F6E646228A374 ^
-+F98429CA2799E5CAAEDDFB168B782A54384EF0A8 ^
-+142877754AB95F57AA541CB978BA400E812AECC9 ^
-+6D84D053CCD9E68CAC5780892409F61B39DDFD48 ^
-+B58CC9CE0AE3DAAA02E3C040100D4B568D29E0FA ^
-+17FB18FA32A8237D32CF83A9664B1B2E40DC5B11 ^
-+C7F65E54E608CEF1C7A120BE8A29FA6C94B680D2 ^
-+9C46329BA34077394B439C5476B91D9DF019BA76 ^
-+3612B381B80A1DF6DA75AB2656BD5BA8DE6996B5 ^
-+EDD9BCA1C431200D3234C099791C81D8605091AB ^
-+C1951DDECB9796C0D39ED9AFCCBB65200AEAB0CB ^
-+55E4F7846D9B90D8B31EAA5B9371D395590B6528 ^
-+5D40B432ADBDF3A01355FFFDDBA47586B3DC7C52 ^
-+AF5C675D2249F4CD20E70DC9E18B88D3ACFBD6BF ^
-+B0EB6796A21876FAAF50FCDBA2EB121C4B742166 ^
-+3C577C70B76810DDF9AD579910347312B881C30F ^
-+0C16897D20C5F352FA6110C70F9A8C33CA35CA21 ^
-+DBE0B4341526060C5B37576F6B972A1EB8954059 ^
-+1567B10E33FBBE20033F5A52EB810348ED154F19 ^
-+C1E47289412D3ACC208620A1EA676CE2815DD4FB ^
-+ABC227EFFDCE3758061C77971860247E850382AD ^
-+B29EACEC903BB8AF7CC1A63516163640FFE62822 ^
-+5C8976A1A4FCC6B6FAB5EE631E3CDC561ED5FB10 ^
-+1A1EA5107CC46BE909DF8165C3EFEE8676161991 ^
-+268E86BA3A81FADDB20F74DD44C5BC71A98C3D08 ^
-+05057E5E7934AC9A9141D39B8D4F5EA6AA14F74F ^
-+C03EA72C4D68945726DF63803564E434426302BA ^
-+54AF20BFBFEAD6BB2DD68E65D39D427DF7E17FD9 ^
-+FDE938DB0843A844DC0F6601497A39ACF167D6DD ^
-+ED0292D0BD869B66E80014824A3D7886CD6D3590 ^
-+749B69964F5C0D9D02BF5CF903B2E56D09CF1B9C ^
-+6B143D30366C45F159B83A8D1AE8AAEC88E44136 ^
-+01169D65E71014946D0BF64BF439068978AA5B3A ^
-+4C36E0A8C19C0AA6C80DF0611BA3404C1025E9CC ^
-+A4DA9EEC2F682AF5B2EE7CC8525EB07DF66E5945 ^
-+F1349AD0124D11613CFA46D498671484E5F37790 ^
-+6A8E82D2D27D3EDD6E8B119F746761B8FE83182A ^
-+52E7C7C4AE02659953079DAE20F442353EE2BB29 ^
-+49C8D822724274B85DE62D9DF586FE880AF396E6 ^
-+57866C0BB976B4F8AAA7ACF3C9A0F700E73216DA ^
-+541A675DD37C5D6F2CF242163A5CF6B728DF9995 ^
-+55B26D9344D4D644CBB69C4789473543262E8B91 ^
-+3A8F3F0A96297020EEA583E9A280D53E0248DE26 ^
-+D1FF7A0CD0B69A76B5B80D2BB5736B8440DA7F7B ^
-+53E715FA39D3732F38FB4748D46409D998D67973 ^
-+377781ABB4AB4E974B9C1670867E74F87AB4950A ^
-+8E7DA96971265ACC0FF7C381127C966DF9F9F13A ^
-+28038713A33ACAAC730FB4DDC3A707886E598DD5 ^
-+5F6BD44D07A1C811D5B75661A61BB69A81444EE2 ^
-+D465E6C767BD02D457D601765DD0FE5521BA2AC7 ^
-+487D9E02912004E961968F387C21A65A0E653AE7 ^
-+1F54DF00052B3740301C43420CC2CB85B2770095 ^
-+7C5BB678083868EB817E616BD09421B910021649 ^
-+4D31526E4E2FE3BD6DD4B3F59DC2EE2A52A9FB42 ^
-+669F9FA9D71FB92D51ADE15C70742FB31B013901 ^
-+38D1E74FE26AA43D45DABC160DEFF113B7740211 ^
-+3724EF50CDEAEB856123BEBB190F38834461664D ^
-+E2634112D2977A179D4C9AF35F220D3A626AA04C ^
-+F14CF8133FF66A3E20D25E5DCFF70605F6B8A0BC ^
-+809E04A38340D010B78B5287C8FDD20C391FB61B ^
-+E5349D4D6EC31E2CF41001DFC440ADFF6D25B4F7 ^
-+139F25FDC344EC2456F6E4DD9938F65693F0CB2D ^
-+7C628B0954D4340B0851C89F1106589C5C6465C6 ^
-+E65E65D7050258B6B6B5B35866840B5ACE0DBF0D ^
-+77D33B87E0C13529D3AAC4D6606213EFE81FF398 ^
-+5BA456BA49ABE50BBCB772FAACB71D4F3AECBD45 ^
-+801A21F7AB73585AE3531058DB9512BD69BA5CB1 ^
-+192AC4D5210EC863604FC1BA388AEA8455D4175D ^
-+FD9F103EDFC4CC9F9C424266EE54A79C1C987F9E ^
-+361AC46D96A69DD6E416D4563D7C69D3B487EFC1 ^
-+3A7629045C0193FE08928F7D41B801827593116B ^
-+545B2F5FD015F81BDE1DAFAFCA184D25590560C9 ^
-+FEF2C50DA33621206450E21D92951B25385991A3 ^
-+913A417AC1ECE08952A60E0035F70993F161EF05 ^
-+4FFC95481F6F625B1B8E67B133F11619CE5C1460 ^
-+5D6D0765B156FE028780331B6A53F84DFB130F0A ^
-+2C5EC89F1018D34AB11E0CB6FDC812F82470B168 ^
-+34D62CDFF955233FE7A5308925C24CBCDC0579B8 ^
-+1148994D30F80C5689D7BB19CFBE33546872B4FC ^
-+074FCA22A8A63F446C8D196612F7C812C22CCD8B ^
-+228FE29FD13928D8FF0B850E50DB41DB406EFCBB ^
-+EFF7BBF8F2F7DF36AD51EF3D748AAB8D8DAB7B7D ^
-+C3AEA6AA17971C0A143ACE54A8CF515F9EEB0BD6 ^
-+4C3A980E40602D4621C2AF1BEB1CAE27DF19AD32 ^
-+E5CE2A41C72229D584E40FBA67C697EFA08F451D ^
-+64A5368264959C73FB0A12F85D4FA16F8E25FF08 ^
-+8FB770AEC165A93A6D99A0DC52F38444E0313073 ^
-+BCFF3C5E5C56876A3DD8C4C90D4E819B67D71394 ^
-+0EF20523757E25611C49C1F259D94381B08FB90A ^
-+5D9F05DAB91C46ADDCE4B163C6FCDFB5230BDFFA ^
-+11B3BDC5F3BE09148DA07CD42EC9C28C718D6A5B ^
-+1EAD76EF18840B3176296FA57791D832B7E4035C ^
-+AF8EBCBBDF5B8CFC203FBD8644B154445690B02E ^
-+0A156DAD35A10AA7E41C5CB3B3043A051B7180B6 ^
-+9B3E5F797BA246E5DE660B9A36E52C204BACE822 ^
-+78780359CD24A2B7157FD6D55CDFA6F9DE149FF5 ^
-+F2DADAB4275633F7ECDFA971D824A31B1C8D6643 ^
-+EA68BA8F16D8368E6673A5C5AEE86BA5C36F2D97 ^
-+788AA9451196E2BDD031E747B098D73BE113C093 ^
-+18FE259B3573F52F23DAD33F05D9C91942B516DD ^
-+0E4787F46AE8D5D7CC9589B76D00D60983079D75 ^
-+148E4FDF031CAFB726099DCD1EB591BC2F24D179 ^
-+3981DF8658AC2FA5C3151A424262324D41940DBA ^
-+3C50A3800636EF877D89059F66CD697A9DF44BD1 ^
-+D9BAB0471E2DB97FD5F3A42884DFC708768F62F9 ^
-+52DD1063326E2550B6EF40D5EE4E1AD67C7BB6BA ^
-+13CA27827127C698810AECA158DCAA7894F0C912 ^
-+086BDB17EC1B8CAC68030A56FBD4C741D4F95DBA ^
-+F7F389BC5ED225BD6399CC43EF22AFD77E895D06 ^
-+67F173AD3A24C26E95E2EA8B37FC0259B1DE955C ^
-+A7F348A3B6F67CCF7C7C69ED065B3FBFA832A8A2 ^
-+ECECBB25354468FB62AC87D5CEB688E4A671DC42 ^
-+62330BC400108DFAFF298EFB76BDC28CDC153AC1 ^
-+BB0ECF9CB3CE448B4EA9C57CF5F1F997F81082B4 ^
-+12C9741672CE8DBA14CC66AF3338B61E234F9E68 ^
-+DB4CB5961A2FF6964CEDECAED3DA03D140112EA4 ^
-+45E4D2BE3D9729BE9F69ADB245A5A9CC75064534 ^
-+E35253550C84BEFC26C2E97F0C236CFF1D85C36F ^
-+7D6D950A168107702CE3B6BCEF9298F9C8FC8F3C ^
-+812F459AB5887364D1F2A9A00CBEE5FC352C39A2 ^
-+7EE27F33C59B68C34604416D38606BD3F5CB6B06 ^
-+D57E2A4F15DF5C50F2485909EE3149735C6DFB84 ^
-+3D12D88B61EF0972808D8CAD41D8A16AA7ECCC87 ^
-+CF9A7CEA9B105ADAB6BBA3CFB6D090B76603F7CE ^
-+1D43CA164CAD0B616BE5763D7F5EA88355953F4B ^
-+3600F085A53FB0115C26DA90D1180FD34EEB6301 ^
-+E9F9C088C30A37E6CDF067F724BE6C4786F27C9E ^
-+2BB86B47EA34400D434F8F4F94830CBDA9D4E573 ^
-+3255A7D9A7A0B56D0D9C665EC13F7A8C8F05DA7B ^
-+453597500A7D5BEC8CFB950926A2BFC0F92E149B ^
-+A15EC452476870AC459B942F6A6B73822A07899C ^
-+5B1821BFAF917BAB3DB1284A1D1FD40EA011BCBC ^
-+8DDC25C7CA330A18CF39827B7CBEC00B874AF193 ^
-+283832F45BB5E69649FC10DD607BAF8BAD61783E ^
-+F39426F9C0474596B0251F0CBB5F92385D862D24 ^
-+714E32DD5BB8FCC75B1013E6F1F56F96D97B36F2 ^
-+988AC4592D50113B13F6EDB5C113A22E4D0F518E ^
-+93BF1463788B7F4A4A06AD4C17482DC260797A3F ^
-+5532535ACC8AC5668977B2A2F322B23AEB443DB2 ^
-+85CC7AF0929F206FA44FCAACDC24C4E78345BD80 ^
-+392196E3F2F4074D1D485A52119012D8C05740B6 ^
-+3BA88B91F1EA18E712292301FBBC375E9B48BFC6 ^
-+3DAAD1DAB1795F2C1C8C5CF5305B549ABFB85398 ^
-+6EC93AFA3AB617708276E99066FDC331C84F028D ^
-+CDA219303B91AF3C3FBD0B926758914984AD7C8D ^
-+599CE24745EB5408554077354BD10A65F6BC3037 ^
-+0798C1B53F949D643F7BD66C194715E7CAFC6E19 ^
-+A17230F164E98AB83AC1141730B23389F0EB473D ^
-+2C2B95173F1B06165E17EAE36A53C7AB641267C3 ^
-+A7F408EF449DC92961617D4C51B55AE4E4536E97 ^
-+2266C5133B6D6B08A09897AEFA355C768F718C6C ^
-+343F10EE6EB34DF005E749D1C4A98F64537272B1 ^
-+90EEB76B126E632308F8655FD49C52000027AA48 ^
-+C7EA3C7D4AA8DCBE9580C4434075017934268419 ^
-+455D4E7C988356A56588C40313D28E425AE219F9 ^
-+5C0F3090992138D34B4E33029CF83A64ED8AB03D ^
-+CB3C5288839D6FE79EB2E50D3AC34BBC4A942E46 ^
-+E605842205079D83BDD489DCF6F8A2D1EE074C60 ^
-+ABCBEC56EA20B6B369C85A931B2201FECB826F4A ^
-+480C1CB97C3419DA610D9783E6047E6C9A6101A4 ^
-+874818464DA1753D3AEDDB7D3B46E2D04614D7E6 ^
-+C95B65E3A37ED4A2FE2B27A2D52BF1BFD307ED20 ^
-+5E188A4F625C05482BF161C45F5094844CE70461 ^
-+6B2EBCFE74E0BF32480D4BCF9A5698A527AEBEAD ^
-+ABD3E28A2A528B7963EA8D8896651A17337304D9 ^
-+B873FDE2C312C2279EC8950EC2C2E9DF990F006F ^
-+4F1A18714689BDB766AF686623BEF08DAFDFE1F5 ^
-+BA886793A89E7EC62692A8690164BF072EAF7AA4 ^
-+A15C8DDAA0448DE7B361552FC51AF0D72C0737FA ^
-+6FB516CBB4CCE9681C44EFABABC7A26C79C79CB5 ^
-+C6DA89D3F7EC4D2FCDB36432042A78EAC9F04DC6 ^
-+2A94A9023F7D54DB26C8C2A6A4C951126712C2E5 ^
-+B0F115B8BF0A1464A378420A1F1F574AA1869FC8 ^
-+A3C1794F58FFDC361BCAD4779B5DEF48E02ABD1A ^
-+2DBA5D80C4B17167E715A8012876095577030D5C ^
-+062C3CB7A059766125B368AD6C19BE8FAA981950 ^
-+ECEA96EB623919DF4E22FB106616EF1FB2ACF5AF ^
-+C0CD5E555861FFBCB2FF4045A46CE30AE6CA1758 ^
-+A0150D931980E1D82A21928837F7E9E198E5D1B9 ^
-+BF877B202812184CA74DE61FE34DB95BA2AC5D0B ^
-+C863A0D2232E901920752F2AF92C201FC73609B5 ^
-+C54E676209D81CFED2E7ECEA6F7E35A5459A58AE ^
-+CBF376E8571F81792AAC49BA7E1D7F41713ACDCE ^
-+9CD248C07EEF6303C71901AC484F30788D9269F9 ^
-+AEA41C5B2260E0DC57094C5E1F80A70B85E79E77 ^
-+B1016F26E32624C5328566B243329A2F75A36D06 ^
-+3EDE118F7E2764CC49FBC3873508D38A2C6A4592 ^
-+03DF0C882FEED72F81B303414178976ABD089EEF ^
-+2A8E36B6A545D1ABE7B02D6DDD782AE032F7ED41 ^
-+D90588E606FBDF3CC6030756DF92FB3729441E6F ^
-+BCC413133B6D84621B482A7D2163EA955AC733BF ^
-+BE1F36D34DEC54306EF20D8326FF603A716F4331 ^
-+A2BAE41EA01E8AE9D59F5E8E663D22C9F414B0F6 ^
-+D2295FE26206DE9ED169FEA487B198E7CA0DE78B ^
-+06B13130DD10C94A24CB50DE6A612867F85E17FA ^
-+2CF4C4F2F270AF63D7035903231CF7E7180E66E5 ^
-+0A9EE3293A2C9B2ACC2F9B99BF17AAC618347857 ^
-+C338F14C156D8777ECFC36ADF1850B64EE9E6179 ^
-+E9BC6DA35AEB1CC399733CD0AD3B22E4E2C83E92 ^
-+7A42F820210158AD33935CB77D78C28F9FE7A940 ^
-+ECDEFA7817A436E43C3DFA35069F87948181A58A ^
-+761EBF336F1229BF80702C9C7798DAC37ACF3086 ^
-+1975B716880B49BA0863136736942E688C9EEC7C ^
-+A4232C3227DBB91581B86FABB1C5AB0A29801DFC ^
-+49947AF1D9488F146BE4C77782CB2FCF6EB13FC9 ^
-+A3402AE17DB9E6EC899B0E15973073CF9404A2DF ^
-+DCAFC2DC5BAB38629DFA0DE1454C300E5B9A2D66 ^
-+A7F915F745E30E4CF6AFFABF214AB6D950C66FAE ^
-+764515277D4AF73A14FAE2D9CFA4F9BAF306CCB5 ^
-+B021EB08A436B02658EAA7BA3C88D49F1219C035 ^
-+B97FE9E1C5918FEFBEDD986B757CCF4EC4AFA75D ^
-+6917353596BFAF1A5A06119ECDABB37CB017D71E ^
-+FCB4BCEBEBBAB66142AD2A5B35AB5DBF78C6A463 ^
-+BCA454B69F4486960C633D2C4453FD01D6758BCE ^
-+5CD25E62AD97AA5DB3A9CEE99C58439DFBF6073B ^
-+E8405E583D31B3B8E8B365087F2AB391753324A4 ^
-+39E32AE405420DEB07275224817B57187079886F ^
-+63AC20AFAEDAFBFC018755F4CEB13A042BDEFDFE ^
-+27245C74B61D19EA28FED81E59AA48EFC22946C9 ^
-+7254C8F5A2DF0E747760E2EB353C4AB24E253602 ^
-+32DD49B796ABCA76356AA9AB07D669CB7BC7F899 ^
-+B83F3FBE6DB38223253344E69C399C474E4C64A5 ^
-+B3E0EB484AE5B10B017F509730F350481A60F634 ^
-+A99FC247C177D66CBC6C21C10C21E10FB2F33EF9 ^
-+A7D033A946AA0315CD2E4B7025164B77E5979CBE ^
-+F2DE5CD912D5CFE727B353ADECB6B7FD11E80189 ^
-+111BA90582E17CB5E1BB70AB72C99FCF647876A0 ^
-+9AF7F1A742235C0E396F6D1319BD1104518F8475 ^
-+923B3E5246FB50FB5448742B8EA8CF4920E70702 ^
-+CBFC4563334D104E4DF24443A295F4E9A7D7D4AA ^
-+48F4BEDE76C6DDE9B72A9FED50D0BDBD0DF7E7AE ^
-+2A21E7828C064DB0D684561622802C86A504DD37 ^
-+2D599572D6E57A437A2A845546FBEF9F2FA11AD8 ^
-+CB4CFD92FFEFFDDFD87A4786D60E28C7622C71DF ^
-+FA6DB9D1EB92461454E7DADC36C9CE7A1F30C63E ^
-+98C264B7CDF774C7D82F4DA5E1160AE4370665CB ^
-+D503D3C5CAF7A2D124A7F9F0E7D8D0F5E29B6F19 ^
-+AEFF5AF0023868EF6E3AD49F2C30D65E963B6308 ^
-+73B1464B9D05509BE72E83C819F9D618B3121336 ^
-+791774666D2629D4304BC81138B4D8A7599E77D6 ^
-+362A2D419BAF263F1E77C5689F611AE301C044F2 ^
-+B4D4796D1BC1851DDB75F5D3BA3089D1D0E0A15D ^
-+B7C4FD404A73C0AE43FABAEB471FDB6F9B24A27C ^
-+B9DC118349DDAB37DD82B65E092277C1E2F20C5F ^
-+144782913DF2FA8F76D210A7A321F362FA5DA779 ^
-+29D64351A178E52EDDA9A4B2F5279B70F3FEF39C ^
-+31098A70FB95128BECC2C729CE5A2A4BCA121845 ^
-+9C05D6B171C60C37822CDBD7E8C1C57286E27461 ^
-+6FF7C4960E35463A8FDB77844A29DDAD1FF04F53 ^
-+2E08B9088646737620F1B448E81EA5E42C40C595 ^
-+AF2342D8F4BF12F9E524E44BCD42066F84620727 ^
-+543A1A99B497DBB7776403F3252A9B2E11A0610A ^
-+A2A46BEF09D21A9BA32AAE4FCF7A846D128F0358 ^
-+81960A20A755F84B3623D1E2A395EDB12DFDE73F ^
-+B016C90B350A5A9AD4C1F3AFE49E3EB21AAE8B7A ^
-+41D03A8D79E8BAAE116C2F5573D869D97D7F6E0B ^
-+831237F5BDAC37C58BA31F6131982AFE680BAC1F ^
-+2E8ACF5FDE18542BDC2D0B95D3AED7FC48B5993B ^
-+171763D880D45885EA61F5ED04BB51B79C6A2724 ^
-+405AD282A2141C38D3D731F9DF630667064B9ED0 ^
-+07F2ECB944D01DDF9C68AA68762BF07F385E7E6D ^
-+EB5FEBB813E4DD7BF852FB32466025F7D4E79DD9 ^
-+52DE090DB027385F17C9FD41F61272525FE108B1 ^
-+103E352A261134E1154ED3C312D890646FED38AE ^
-+65C73969E35E8F307B518ABBDE85654CAD13D0C7 ^
-+FB380C0099EADED9ED8DD48D70E15C7A26E2F417 ^
-+EF9E122E0B8F968EF262E1A98BBFED7B461846B9 ^
-+771A162BDE3CC4C07BE7A1DD25470286F133020E ^
-+5F892353DC5C65A1D8C9510ACEC43DD96F432742 ^
-+4E658B8743D510221B968F2C78C72A588A5DF6D6 ^
-+5D5295ACEC24F8A52ECC5B174E4884732BD216E2 ^
-+7791BD0E1C4136D97C46CCD66D36E98443C4182A ^
-+515419AE59BE4E824E575E497F361C3382C21783 ^
-+7669D0D083B3A0A7B631EE4871AD2A2AF8C512F9 ^
-+90A1A9BD93501D9AFE5040DDEE395F94E5594EE4 ^
-+B8E48F79618CDE951296F1D28B87653C3CDA6FDB ^
-+FE94D5373EF009ED2C06F632C739717791EB6BB6 ^
-+B5C3871DA2466E4635DD3BCD085A2B8E222CE8F4 ^
-+43032D022D24B65394F7A707C8441C2A7F3CD980 ^
-+87C13448017DB3B6C553250C59DF4D3D57676788 ^
-+F38FCA4589543051935D4F1525710AB366161F22 ^
-+921E3C3DE773F987452CAE28D3C10DF9804632DB ^
-+32308D5BCA33E694071B8C17470C6469EDC1DCCE ^
-+AC5258297BA22FE60B464DEE22349C70FDFAB219 ^
-+599322BC214D7248216F0C6ECF00CC34C792C5FB ^
-+99EBA91FAFC27288B3FF32DE55BF17BC6D76B16C ^
-+899DF7C21779CC0F54EDCD441051CACBD2B06941 ^
-+E5E0BA18BF3C99062BA444847876C5CA2DB8F9C4 ^
-+94B8B90566B2E3BDDA8FF8D37BDD9F95CF9BE0B2 ^
-+86422BAD65C5E0B22F02B9D1510B9D24F4227AC9 ^
-+427694B772A08400381D472854FA5FD4D4CC1D62 ^
-+3732DA8EBA84CB4591DD4A87BAE958635C85DD71 ^
-+D41C28C028E42AD1DF5057C97BB953B03AE8F6AE ^
-+4C44286F5979D44AB4CA5E3776F30CA04CE539EC ^
-+E695D9B049A1497A86765195BA7884E8869142DE ^
-+2A5DE9C5489375B8EFDB09CA29D32FDADAA07402 ^
-+012356EB46A587763ECD1EC9F3114B8B8B7987B7 ^
-+6B803DF07E5A47FBBE412149D8258B526D2BE96B ^
-+14A1090C3B382482AAD5EF49B30D842317792745 ^
-+C2A576DE385017FA84855388EE6CB1F51F43A6C4 ^
-+5746B8C88CE540313A0429E64841ECD0AD569299 ^
-+298EFB87E9C09299DEC17171902682D919899C9D ^
-+55AEB7930CD6202CD52E6513ED4C35824B574198 ^
-+ECDAA8404F88334E9C2C6FCC9209795581654C25 ^
-+061FFFCE8F69BE0D0C9B63E30BB065C6CC73DF33 ^
-+229F3A8BD2F6FFB5CE2DB330ACFBC4C4D7796D7F ^
-+0BABE60803248059F3B05E06E273B5F41A619C9A ^
-+5F496A5AAA1FC38B76069BF9F08C63777EE7530C ^
-+91FC8994FAA03E9A2D9D565F04478C6DF035AFE3 ^
-+A68552B9049E192BBF98E82E2A69E405FFC2D93F ^
-+7910393D1D9D8B876EC89FE9100320D371789C23 ^
-+9B923F97F2D2B057950DC3C0E89981F22F96EC2F ^
-+1EAD9C237CF3B1CB95E7ED79EF2E5842E9263447 ^
-+F51E5C202D698C75F8F0C2926081D4C28F641812 ^
-+8842D9CD97868196B31F34C02BA63CE34493DCA2 ^
-+26C8977BC36C3298582CE6703F62DFE4488E0DDE ^
-+955BEF358ACA4D44E33F31051A3B92D96BA669E3 ^
-+68D841B29DA285DA53A31E823462E794B3126914 ^
-+BB52C1806605DD37113035390D97036EFB3FE2BF ^
-+BC55772BC9B6066112512E1A8B633411B9508FA2 ^
-+BDD2CA4B43157C04CE7043F57B7E2610D3E175D9 ^
-+8E493F25E110F6244FBD7585CF18F285933950EC ^
-+650242DF99E985DE23A5CFC25C8CA72C80D7F23E ^
-+56A061FE49B428798C329336D4B184BFE69C4102 ^
-+59FF817CEE946CB948056227607A119F4C7DDA89 ^
-+BD4F03F1878CEA86E2AD981C6A80701E0AD30B4A ^
-+A635F528CC4028877184E8918CF73E1AEE6F777F ^
-+15DCAE87F7E40CA577C61C2AA5B6D90F0CBE6DCE ^
-+D67BD85A353CEBB99ADE4CD86B54673DD6D64360 ^
-+1619DE7229032800CDF071830CBCC3208B1EDB09 ^
-+09DC18BEE0C2DD9A2C7189AA6D3DEB8B7CC41CE5 ^
-+4165ED470D85FEDD9593577A9101306C31825E00 ^
-+C52942DABF4F9D72B31B2B3291705EF5201B3343 ^
-+88296035BE79F5281B91C0F1006E57C28671CBF3 ^
-+82593804880F168B9FF50D89CD149E9F263EB557 ^
-+52E4F42FC2EC2EB7C0A728D2251A14A6C5EA5A00 ^
-+C91B243CBA2031B29F365BA4451FEFD6A902298A ^
-+90F6F5A65E6BC9430A34C06631208AAE8B7555F5 ^
-+7535D77C8809B4EA21678BF9686791418FC71931 ^
-+027070AC6B5D77BFA0398B8AD556A23AB8E99EBF ^
-+B48335F6FB6EA27CE2156A1D3E00E42D3E3A8489 ^
-+B67303D71BF125F2441BFC599106177A32E43BAA ^
-+46E98D49BDC5A4604F62AAF76E964838291BFAF4 ^
-+F1ACC562D96999493EEBD2531A289264C3E1BEF6 ^
-+0B261712C3F4D0D74EBDDD052E1A058BCFF412D0 ^
-+50446AA7A1A81A97B1DD524AD0DB4D09971D383C ^
-+E3A51B6AA5AA586803EF2183DECA0CB5CA869B11 ^
-+C81B52FD60ABEA8CD5E3184E206F693211F008E4 ^
-+197270C0DF693622DFE871857A7C87B7BE2E439F ^
-+43453DF7620D71CAD56DEF9CEE616AD9E7C73EBA ^
-+3E3C6EE1141AB3D7EA5215ACEF4E876EFA89D03B ^
-+5773C28260C2B2D325883AE73B04D28BFD2E8884 ^
-+EB6F26A0E774022773CD86E1C8DFEA461CE6F8F8 ^
-+6C26410B11A0CFC97849F6E43E77B8E48D5C5363 ^
-+F0236CEF2298ED3D86A95E9F5247C17499A772DD ^
-+704B5496CE0AFF4289F3D915230F69ADC7A1ED7B ^
-+B0D4FF6B50F09FBBA19F76693AC9CA87768E2758 ^
-+10DE4F687577CCAD9E16AEDC9958021D90DE8726 ^
-+785741949059E8508DB8D132A9B053EB4277119A ^
-+CB041BAF13AD22778A1C73A8AAAB7458B664B1C5 ^
-+B4B0ADDBEFA078AA497045629840FD965BEEC33D ^
-+68F0E43B7DF89F484F3CBD6984C95168142E4A82 ^
-+D042BE14A23D0CA1A0466179C119F2A959E1E118 ^
-+DD23CC2824A881FDB6566AE6A57B1A2D1624E895 ^
-+15B75E7E13B374039B8C9FB4A1122BB8A22FAD6F ^
-+849F0D379A2775CCB5EBB0A88839516F30A665FB ^
-+8B4125FF2EBFA9459075459C1EE149D68C4F98F6 ^
-+1D632D3EEC63D18243FF48702AB894EA05A1AED3 ^
-+F2C2E1082004EDCBE3DF96C25D8860C0F5B432BD ^
-+4B96C3C284E9E12C3D2F18AB8C8FC6776F30C6DB ^
-+F40DC8B94D9FE9910117BCD66F3FFB22F6977447 ^
-+D65D126DF604DE306AEB41A641DE0B214449D69C ^
-+90FBEFF058E825EB940122B6D8B7492FC574B32A ^
-+AE4414AD47216DA0AFD9AD1E22C882F665429C54 ^
-+5F9D97E91B7E4810AE765A09803ABFA50B6F64E4 ^
-+A2D4E6AF7AFD87E303E867D0E03E1945A0F0B72C ^
-+14ABF713982D4DC7C1CCFCE7A48680576082DCAC ^
-+BEB8F77A7D211D9451B698D65FBC0B5E38D26086 ^
-+B35F660629962D5F1F8529203999FCA0169F2675 ^
-+07AC5B04166E739A9FB87FCCA74112AD93A08128 ^
-+2D8272C9D620A730561EDFDAF2A129666CEBB5C9 ^
-+C25C1971EAB264F44CEE1F44614579EE6D8C7858 ^
-+76F8234E2F0A533E810545F79AE28A7C46056AF3 ^
-+35025EA09EA111E299814FBC958977DDBC3A2387 ^
-+0A2EF548A38D84F6A1CBB2AE01D48D296D6CD8FD ^
-+6F546DD1623E92DDA185BDA01618DF7E7E7B82F6 ^
-+A0C1C2AED8C3F436DE200E2A3F4C2A9D2DA8DD7D ^
-+8DC10195B967FC7FE57B338494C2C42FB43599D5 ^
-+0D9192B27851CAA766D90A5376CE255B2FDE906A ^
-+7799450D003824356EDFEE1B408AA59E830175A8 ^
-+2EA6F3188D3010EDF4EBB55E009CC4D99296F578 ^
-+2A73ACB83FB8E25D65FBC1B8085BE67342F5858E ^
-+67F9928A27118ECC38EE231E05977A694AD0F7AA ^
-+27E2078CC9FDDF5C5DD6CE629F3EF071B2107936 ^
-+F50540B4DEE071C64D861872F1E0BC4C7DE75B52 ^
-+87DC9AF771F2EE543F96DB0C924AE650A063F854 ^
-+76DB885DD797249A4E2F794171DD559FF056A9FB ^
-+9AC2E9CD3881BF14D758A7FEBDA81BC9DDD31652 ^
-+D3D8595D75AF4D1EEEBEA8166CAFB156E827DE90 ^
-+5F7D9D9BD0DDC5A2AD4772610FE2A4923A826486 ^
-+F437BB6CFAA9139A1201FEB58841B18C3809F00E ^
-+8C3EB402D92E6543D885A9FDE2FC80B9D4340E8E ^
-+134307C50C24BBD7822DBA30F644B874EBB54F0A ^
-+24774DA4669C2037F7B2A43BCD1C8D574715F071 ^
-+69FEF8FBC9034D05F3C9BD9C663D2198AB48FA30 ^
-+0390F1C49421806B19DF1F886902F37088DF77DF ^
-+DD535B129F482256503AD2744B712BFEB8BF216B ^
-+ABEC552E41020144EFE06854149BE03F1BD7F6F6 ^
-+3FC8C8A14D1452713E76EDD5EF95C239F3F8A4E4 ^
-+8861A84429E238D94E75D3CC191FB4D128215F7D ^
-+DBA6377C376AED4D1E79C198EA864B6E6D90C494 ^
-+4E5DBF823DC5BFF56C999A1FD0ABBC51155017D3 ^
-+6699420C6FF512BE5CABFE1EBAEFB0AE40CDD902 ^
-+77CAE0D7EDFD2D13506D096D66A32B9907AB9B23 ^
-+F6022F2A1545842915029B344B19F4C69757925D ^
-+6ECD085FF34032636E7BE7269D29DA62BC4BFB5B ^
-+60CC512BE506BE1A580CEEAD2A009DB8D7A1BBC6 ^
-+0F34DFD7EDFA6A5DD132B2EE77B52EEAD98DC701 ^
-+1BD542585AB33A0A3694BE45D6C7EEBC266D4806 ^
-+1524F20389EBC2D7DE777F96156DF9B2A8652373 ^
-+451282E6DA707668886AF7E77DB4C58F73CA6EC2 ^
-+BB7D59890BC39F7F87D4DD7E2583C737B2B40B86 ^
-+255D67E3AF65376A1D71FFCCF505812481AF182B ^
-+4D559BC171516F79E22938DE999685F9FF05383D ^
-+2F7EB16081B2338D631153D5B70DE67F050E348F ^
-+5902CE6CF7700D2E23CEDEE742E273F4A6A39F6D ^
-+7D37A7515D1E04D44CA0F314306919C0307FF4AD ^
-+18C215A5B8AA9CA5C55DF8BCFC79683E9982B159 ^
-+63520C9DD2CF321388DC89CC69D0D9F6772A3553 ^
-+5FA13E6697196EBD0E40FEAED4B945CC93375DAD ^
-+BF8CA60D07D1B69767056B2F80A9AC4B1F9FA99D ^
-+6CDD13431EB70D9E346102B708E9F8AB233CF959 ^
-+4CB448B4131DEB8F1AC3085765303CF214436A26 ^
-+1FDC9CC58A748A9478A9E55C66C6446775382ECD ^
-+0EDC5CC7CF8C6CB318616D62CC08CD1449960315 ^
-+D5D0D540287D21AA519CE90B6E3D81958A2E307D ^
-+BA5CCD323B987F54E06AE04A09957BC417ADA611 ^
-+26846FD68BA956CEB2899DDC18324843DC211485 ^
-+12BD70565F701BB35B87364B47F73C93287E7672 ^
-+C57A0F96959C7DEDD353462099EFE380CB273E90 ^
-+9900D5268B99165BE1AA2A6B41B9FB66455B865C ^
-+D5AC2C2BF36B04EAEF95E8B93958BE28B5A4C836 ^
-+82788DAA7F95292B266CA17E86631D866D68FD47 ^
-+37B9E638610418C4CE4CF9AAC0D3E64F033D3D74 ^
-+9845A156240CE847508A1D3762362FA90216E59D ^
-+9E59DC76EA01567183A4B4AD65CD31F169706CA9 ^
-+B2B4A1500A176C883268447A09DE920F0CF77F76 ^
-+E14FA11B60B9389D3B9B2C1E7C45931992F666AE ^
-+922D169C624E79DABDB79B76E777F6994C339EF9 ^
-+AE99C2F46A3939CC5EE3F8CF68D6EA486392C23D ^
-+154F915F90340CBB03B9514810FD399EED06CE3B ^
-+C440E1E74C75266822919080966AB74D96FF43E2 ^
-+405155FA99EF5E4A0F4E93D107CAEC89A80B94A2 ^
-+0AA9625455A0CCDF37D486B4538E790BE407A59C ^
-+46D633F7F2EC56496D53138A56D11D9ABDB701E1 ^
-+75C1BD5738EB5380E25EC4FCFCC7BB3FD8164460 ^
-+B618C9E52303919BF762D452F5681D23ABFF23B6 ^
-+D08BE1F5485939677D294C4198FA15B118938B3F ^
-+F931441259B793DABAF082D1B0024ACAD3CB48A6 ^
-+096E206E3753BBEEC8F0F0D3F97EBF2EB3063B1D ^
-+13AA397D03C60AA4414271D33CAC2361C138422B ^
-+777E2979834E8C6E89D219E9109F0A2852961EFA ^
-+13960A648DB8B7CF541A56B9009A5F7FBCC1ABAB ^
-+B3447A3C462B53945F8295032FC9A057BC301FB7 ^
-+8C42386A2436DE83E1959E92B44EBF61E6C8D093 ^
-+D9EF91B04DD4371968E1978CBFEDB50C2BABBE67 ^
-+E84042479D1D669AB5871B71D1342AD6D15105C2 ^
-+4ACD112CD8CAC72DF2D4DA76910C2CD3BE1EC25D ^
-+AA20982E2B138FB2407EF99509075CE8366F10BC ^
-+5E3BC535BBFF471686885331CD9831C80FEB18CD ^
-+53C55C80D64411221C7311654921523D2BD0E227 ^
-+3FB8C850B9BC7A923767D036992AD79ED7F0E1AD ^
-+AF0BCA4D440D6599BB91396A0823DE64764C2112 ^
-+30B13703A702572257D54DC09463768F5AAEF759 ^
-+59C44B99EDC297B476402310044554B3F29F9CCF ^
-+FED078596C584810E5336545F6F6B93027D9CBD6 ^
-+6499E70E5455F9C8FFD2D5F600009A43FAE710ED ^
-+D26C0718A9C8222F30D021E8FA6508935E80BC85 ^
-+1F4152447ECB8D7CD725B57B65E30F79B466BBDE ^
-+6C4958665DDDFC828C1427E57D23359E9C5D1190 ^
-+B88EAD843C4897B2A691612B837E5A5D9F58172C ^
-+A51097DC1883B160AB799D2D103C443336EAC2CA ^
-+5DA1B85BBF4F3912C5E964242A61EBE83A3DA5B8 ^
-+4E9A45C0410F0211DD4D9123BFB8C29C53A5E03A ^
-+C2B7C89F7DEA6E5A6CF909388471DEC4CA362255 ^
-+4EF3B7E7846115212B3E77C29AACA6198422BEF2 ^
-+78C74563BB2CF819F83E73CC00072378C114639F ^
-+FAF96E836C381EC80FE1EA8AF76E9D8D8AD95FBD ^
-+3B30A2BBF84AB70E8220349CBA249DB87FFDCBFF ^
-+6CE0CC298D12597F801E0F1BDE66CA9DDF6AE66A ^
-+8274B1DB8C0C7390C383C837FDABDEBBEDD1A8C1 ^
-+D0F90D63ACD0126C84D714AD7C9EB673DFB459B2 ^
-+D1E63EB5C373C78EDF968E0651DC1171907258F7 ^
-+1530DC99565BE2B5AE91D1D70B027EDFD4EC6E93 ^
-+FEC0946FB9CC04713C67BA36FA36EA9211131281 ^
-+BD2BA680D2200AFC5CAFB362A5517BE9DAB7E593 ^
-+5FB57E1AAD5BD9C1D176E1CA03C1A5A8E33DDE2D ^
-+F6D5E7B1B28C9070115DB6665309B8DDF5F81281 ^
-+BFE88F7A0FD5F6A1B26A5E15D0A109A1DA7C1FC1 ^
-+E5668AA40375C8CA35FB3046EDD8AD9EDBA82FE3 ^
-+C854D5C5A0A100411FCC9189D6307C47B57228CF ^
-+1EE384076308AC6B80FB66856D5FA19952B3D6D5 ^
-+CAA4DCFEE058D22D726292B2C722D3147F1DCD63 ^
-+1887C76092C9275B2DE333014C99FD13E5E533BA ^
-+AEAC6ACB4561985DCFF6C9696BE836FBF75E24E9 ^
-+CA46F23773B30BF0ABF5C38EB9D0EE021D713F8C ^
-+2EF007988B2161FED07E5181C342E724D3F640A3 ^
-+F0F1422DFD34EDE00A8B0741F4F395234480FDB8 ^
-+2C471BF867F5A02CC241E35D95C97B43D6536E7D ^
-+D4906C8804B241E28F3F2E6380019FB739EC8503 ^
-+632183EEF8C6EC8EAA3016A43E568DC38E29379C ^
-+1808120D461A867C90222469985769AF1756EE5B ^
-+08C2F97B6FA6E1433DAF56403CDFE8CEECF6BCFE ^
-+2767E111977A20D318EAE19D59E1E551A4AA7F1E ^
-+B1A7158CE56666BCD1FDE7DC87B40C92705BFDE5 ^
-+7CE90514AD734390F6FE58BAE8FFCD66391E9595 ^
-+C57F4C2D8B78DB8464EF1F719B8B1DA270867480 ^
-+C97938F34C6DF26BFD509658838F7C35FDB0C58B ^
-+A5CAA6946300B1C4B5F53A69AAAD67961C4C6821 ^
-+DDF684947B1667A77A22C7DFE8B6A0A8484E2509 ^
-+8FB1310F1F215E4EF62C41566C523275BC929670 ^
-+1573CC447B398532BFB9A2E5AB3880F23CA7C27D ^
-+D6E0B674B9E4D283C0AAC355989CC0E8BBF09678 ^
-+7D083BB9C3E005B41FE32629F84B9E292D80FC67 ^
-+D3E2591B7D7CD29E9ACE61DF6019D8787AC93BE6 ^
-+7159B10AACA9E7610C7404DE961ABFDB17B89156 ^
-+B4A0248088E850FFC5CCA99EA2F28ECACBFF1960 ^
-+CA63F54FDB6C46E877760EF4E50E56F3164A417F ^
-+C41DF52EB252961619BD4861C4AACCF1AB392B69 ^
-+FE3EFE453C8705E1CEDD06F15DF5B35A7311DB32 ^
-+5E2E8BB04B327E91572992A8A61063F7A76A93FF ^
-+8EA0191E8491400038CC5B1416E5A56622EF1E8F ^
-+47727D4D7E8D9738608AEEDEB0E12C9F2427EBCB ^
-+7340F405BC428DA514E7B2F39728CD77FA2177F9 ^
-+5E451C7A51AEBABCEF9FDFBF3538AFECB968872B ^
-+528038274803D6DB419F6923993A45C999433336 ^
-+281D30FD3C725A4646A6287329140BEA4AC7A5B8 ^
-+922A57DBF62C01DA19B89F90F36C433817F089B0 ^
-+C79AB225BBD03145A981DBE7BF6FDD16A5E95D8A ^
-+301B4D0E270F2AEC6E1372560385D37875EB682C ^
-+1EF2EC6A3642C7FD61C4F1C3DFC55302535254B7 ^
-+1D94ECF29D2310B1A5A2042CFA616BA0D19E7C41 ^
-+52DDA9BEEFAAAE667A6D12BE414FAD8619750040 ^
-+B14486D16D1521D1283698E651A10FC14AFF8996 ^
-+4BBFBD0244BFEE440DBEDC8361806CADFF673253 ^
-+662E0E466C9D700C50C5F98CD77CFECF8278D708 ^
-+1AC5B8197B0689681B0F474832F316CD25147AF3 ^
-+8720E012F16588A3C368689113902119C9791FF2 ^
-+D892C1E257A997A8DF95B229C9D24C99F60EF205 ^
-+57F5C45286EC3D29CEC19939C04045D9C38E761E ^
-+07151D2EC889D24730AAA5282FA4DFC49A66E439 ^
-+6AC94690EA6DB4A8DC982271490EE18282A3B33D ^
-+32DD19F12AC0854998C7B14D1D96C15FA8995DBD ^
-+7817A25C6CF1EBFAA8DED7A80063D1A299AF8B18 ^
-+01C5EAC1830D1F5A7F186E039663CE925FCBACDF ^
-+B9F32F67FF4937F44094CB4A62BE12474AC3E1AA ^
-+05BE2CD6882447472AD2E02B08590EDED62C7638 ^
-+CEF149F6D6FC8987C3693D5F5CCAC0CDDD3D0787 ^
-+6A7CC99DAD86DA9797B1F8336356C9864F279D35 ^
-+3A72F8EFE64CF60D49589AB92D48301620CEC0ED ^
-+F1F5939419E375182A2AA928DAE3CF6C378E4589 ^
-+3EC1C1B74B8881F86C1D3EDE42F6689C61132710 ^
-+7164A5B4A69A004FD76EA4C6CDFE0273D35CFF71 ^
-+224325A309FDF2378C5776B1751BB0694ED30C28 ^
-+64E0FECBF5F94517EA9E0F4E1E16FC700EE275B8 ^
-+69CDF3321850BB640D5231D3B3458F83738CCE6C ^
-+0684349A2ABEC06CE05100EB69D01CD4FB7AB193 ^
-+1DFA49225C0FD725046AFCAFED17B1ABA6871FB7 ^
-+ECF4B1B9C78A802F748D58BF6E27FAF1B274EEC3 ^
-+A44B67EF91F2AAA9EB2DA8B166A1A316886E8909 ^
-+CF38B0F7DDD2F72A891B41AD026FCC3282218747 ^
-+F917033D4494A1CCC8580C1DBED6F28FEB3E2E57 ^
-+3C326F550039F815ECF5E236F6DDE5DB0E2E9F65 ^
-+7332001002A11FDAF501914A867398625398D5CD ^
-+DEA189DC41AF695109ADCD93906EB5372B512A57 ^
-+E0F14BCA9240B27E44647ECEB4A40408E2880DB9 ^
-+77545EF84146F952212D9E1FDBAF62243CDA630A ^
-+D162F654DEB5BB0D54179319D8DF9F1BB6D8A13B ^
-+3BF79007252537CC2EB11E148842E7AC443CA91A ^
-+6CB2F291C7198C9E4112B991FD4D829DBAD7EFB1 ^
-+C850258036781C0AE8A083D6A791D3FAEC946C99 ^
-+DC64C5037BDC93A3D38613D203FB3D7C82A18A24 ^
-+620B7714289FD82ABB9FC776B644571F72A9557F ^
-+4BEBC1EF44C30B0B033153F883D5C58E4AE6876D ^
-+E3815A4E6BF3B50EE312E5A795B3E9AA2D7832AD ^
-+9CB13D19C64752209D5D4D7033FAF9DE8960C147 ^
-+3182B9F03D0ABA3BD91A1EB8CDD0F465FD9CCB51 ^
-+73D8E8B9E6A04E88E29797CC5E2F489350D978A7 ^
-+732734CCEC18944BCA784B953DCC0E582225AB89 ^
-+A2152DB03048AE27B47C25DDF99D249504A8ADF1 ^
-+AB70B32A28D9BFAAE1CA868C4A161B6D4B3A92E5 ^
-+AB8B90085B47050B87F4BDAFDF971790B7950900 ^
-+B315A8C87011BACA969A1B79EBAC80A7343742E6 ^
-+B78A044908CDA9640633DC8BE828E22F90E6D7F3 ^
-+AC2BC5246C1BD99231CDCCF3CECDEF5688E58D71 ^
-+0679F888F8C353B807F544C2379BB5A4AE8EB9A4 ^
-+464B5754E3D42864CC0A98B4E696C827E3254317 ^
-+7E5385C8A1BFF0FF476905BB6B7515B6D438CC0D ^
-+0F5C968CA2FCB4A17E0AF0B94682B3AC347C2D12 ^
-+4F5E353500D63C99F58A28F5870064FA278FC7BA ^
-+E7A104651C4D6DFD0778EC8AC8E4F001BC7B9DD3 ^
-+23DCF9A854D1D5B5599B14A0E9A19AB4F2E3BB77 ^
-+588E429FA1C3055C4DCC99EE5407A64115B54345 ^
-+39215ACE01669CADFB81E9FB085710EB5B97461B ^
-+23566449DD29A315D413604A2DBCFAE0D40579A2 ^
-+1EA87C13DA38FE4C59691D96AF590EAF3908C0F1 ^
-+5A6170FC6BD7E8C01140E16F248C56890B51323A ^
-+FF328DFB506B72FDB8DF5716E291A1830BC539D4 ^
-+7B4DA846F9074254C676F00948BD4C9698148C4D ^
-+2AC310393EE1ECC5844A4BEC15A9CFC1B5022294 ^
-+3AE36316FA94B369D7320A8B71304CE6490FECCD ^
-+7078C7041275BCBE8403DE24D16A646B4462882B ^
-+8325A8716A2C879888BA9F674C869B1FF31BF363 ^
-+586200B55B5D537B59B5E0BC6FD9BACE1E72C6EE ^
-+0B675E7F434756F5E310B80B58F861E789495F5D ^
-+749C4C0856CC4629DC397678C0E8BDCBD649A6E2 ^
-+25327C66FF46C4466F81EE635E8EC02C5CA60F2A ^
-+BD9DFB59EB5E53BA6988734FBE0894194A119D33 ^
-+3084040E5ECA5E77406B4DF3CB7F324ACC96B506 ^
-+1E14A09FEDB61CEBE255B94F533C4018E5AF4BAE ^
-+C8840C051A204F8A13420CF17FE77EEE2FD7945D ^
-+4790265B5231F9A1738CB9F8423BEEF219DF110D ^
-+354947C0F2F25EB491D21BD0BD1D809FDD140A66 ^
-+23762BF3CDF3F484C70D2003B55E6F447BAF46FA ^
-+E5BFC99555CED5C1743B152A64AE08C9ED1365D6 ^
-+4CB44DC507F716BED4B4CAC742E79E1A2DFA308F ^
-+62790EC14E8CFD1A0D6FAF93D7984A1E9416FD5C ^
-+5C2D3ED988F5BD9579D2F710D5DD68B11584295C ^
-+CF8414ED85FA0135E44B37A8F8B40756BAED23DF ^
-+03432064C1C05D28393C9AC5878C9A9BAA6E5C7E ^
-+C37A6D64CF81CDF7DBB1B81509A67A0A1BB5F278 ^
-+F341D89B75E599048A911D0AE756E0065669B4FB ^
-+269E1529285414A74B76586EA4FCECA895C7D1EC ^
-+FF9BB39F9FEA1EA63D944BF12ADC98D1D4255096 ^
-+DD114F2DF3D92977F9DB98AEC04F367CFF9FBA2D ^
-+69B53BB13375F9E123FC30098CD9EDB3C1A1FDF8 ^
-+2A60984DC79682E96C29CC7050E1ACF988D9E4D6 ^
-+09AC4CA1A40A7D83A463AF0804C4EDA208E09D36 ^
-+A2EE2473C270A0637FAAF17DA54237D37E0C6960 ^
-+B3A7817ADE962DCEEA7FB6F960EBE2BC1F9BCBA7 ^
-+85A46CCE01A7968104496225483ECE2C198F2A27 ^
-+BC028F5ECD8773AE47563F1216E0BC36A9E37E4E ^
-+C65C40CCC3DD80045D6A4EFF3E9C7D6E4E0E5583 ^
-+BD9C189A639FD3D70167367DF61F14868CE7E313 ^
-+C6899A84B8E66548BFB50781632CC3D2D1BE8B9E ^
-+92F3C8E436227976F32F005469DE91B2363150DC ^
-+7D2A80A5C5CC88988F38334AFFE31C04AA1AFC9C ^
-+D60FACFA57F663C4A399B1FDDD75973910F27294 ^
-+CEEB9661BED2E89DDB07A21EEBF590BB1AD644A0 ^
-+0465C9DF2E0886AC79F46BBBEB0A243DF7D6BAAA ^
-+98073013597B7AE84CB884BD932E20E6CB47709C ^
-+3CB4F76B602BF6B58B316A2D8D169D432F02CE23 ^
-+5CD4EB05E8612974BD9C3B19E48D192BE8B96A09 ^
-+BB188D5FDE806BD30648B6058143F1802F15FA10 ^
-+84EF1D3DE5C1144C2C928CD4D9070A6E79543417 ^
-+73BE2AA66F5FD6BF63273EA136350D29491A3305 ^
-+53CF3BB07761910BBB486C3C0C643943D5BF17C3 ^
-+9A774BDBD27C3704871B52CD5F7F924C8EE4A67D ^
-+B106B6582F0F6C9E2EFBC4860CFC7028F2C47F74 ^
-+FEAFF44298CBB7517B14B81A6AAD501828C773A0 ^
-+B5BB48BED969F15D162301966C537A81C40CF4B3 ^
-+3495D7E36747B824D33465B5DB72D6C623EDA72F ^
-+D7F49178B43847D9984B923DEAA6DE9571690B92 ^
-+3AB7E26BDB0409E55063AFFF456B7A29CF098AF0 ^
-+7984E1565BADCD2249EDCA0A3AADB4346104A556 ^
-+42DD99B41801B0C347580DF1FDFB2397D55D2A85 ^
-+8D59C00401EFB314A0DFA4D82E1D85711C77E246 ^
-+50CF74894F7CF5A9F37C37B47327047E910D88A1 ^
-+1FC40E2840C4B68F40C205B6BB06C3E106B6B8D8 ^
-+A49F56DFC293411736F27C19FA2A362A545C761E ^
-+221E48845FE8B3D2C79AFED37414C0D732A69F4F ^
-+AFC12E7BDF9F48FAB1B595FD656776A39F0F6CA8 ^
-+5EAA114491E88938276FC3ACCDE659623C024BD7 ^
-+5081444C3F81E18114B289020D9AEC75FB205597 ^
-+D4F69156DE85C61E9B4150AC9F6F6A54F8E193A6 ^
-+3D7C7EF4D362DE137AF0625925B36837C1FC7572 ^
-+575D772F9C1CBCA8FF38243348E0DFE02643C28C ^
-+0C821F27FD82C55CB4D76D386F41DDC92F79493E ^
-+C3D0101DDF552A11C8E1EE6BFADB72A983F38571 ^
-+F4D650440127390F3A3C2EE991C185CE7650FAEB ^
-+54460FDAFEF3022BC2C7D1D497CBE5CED73624C2 ^
-+9B3F7B9D594AAF6A26F5C21BD6E4717F46267418 ^
-+14E2B34F0B2C89DAE1732400C02E2CA19A767F8E ^
-+1072ABC4DFD2FDC6C114314D3C08457772421713 ^
-+C9EA4B020C11DEB794D1D05957473A46A906B472 ^
-+90BA4272464A020612F0085B7DB9367B7BA8E15E ^
-+8713A3997A3CD5DA87E97AB94851B68E748268CF ^
-+370358D54C819703E20EF63A2498C8586B48D44E ^
-+0DE40249A8B215E98E849008FB7CAE80EC23F4A6 ^
-+BBDB96306594D13598BB0109258E488D486D98E4 ^
-+DF7DB9CB2FD8A86854C5DEFCE59C4E2F0245F582 ^
-+84DE32ED88B3D2BD5F4E33BA3398CD2EC1E9BDF3 ^
-+D20967844FED11CA71D28D72B28ACFDB14A7DBB2 ^
-+B13A0A6A7723BCD9098E2B04FA04320C4A0E605D ^
-+BE66BE38F97E7DDB02EDC8E0ACE97CDF83F034FE ^
-+28ECC25FFB394AA8DE18F8ADE8B3577955346FBB ^
-+45068B6A0F61D0AEF708AF7D848683DABE817C2C ^
-+EAAD829C32C3AD4EAEA8B7E6090A5CF6B2FCAA82 ^
-+F445FEB22DF5A9E49E2CF7AAD7CC1F5F72F18B77 ^
-+73C424FA0B7863F1F170A850F6A0F85C87820841 ^
-+71F0155D40CC55F3D64BEA645608FD184E2543F2 ^
-+4542FFCF50267B77502D1A0ED0C2A5050CAD5200 ^
-+FB48F26F320D7A4B803ED459BDF92BC1F8703631 ^
-+C9F9A37E34BEA6220BEBC167E34B0BAC6B55A6B6 ^
-+B0C836CC2831FB8BFE5988360CC39FAA6A904A89 ^
-+B0CF783D84BF5383EF30EF2071E0FBA9ABB553EA ^
-+8411C8D1A4FC3F130143DEC5232B59BBDDF11B7C ^
-+ACB6D9EB22D474CFD5836C8CE22F387E12DC20B7 ^
-+D582FA3DE1DC425AE6A394FE5AC321DFE96B9305 ^
-+15CA32D0E246F395DE22FAF8F0FD90036C4016C8 ^
-+F1832FEECBFFF1330C7A6AC47D6FC1880E79550D ^
-+C4846BEA159D1D43427CB5802C46E479F9157392 ^
-+C84FF09BA6A2EE9BD1972B8C0BF25240F5A7EE72 ^
-+4E6B4F363D7FDB4083AA6F5E7979966FB8FF6C5A ^
-+7A543B81CB4DC93081D8CB6AED436A31C4018A84 ^
-+85990A1C35B86BA244F60BA0EBD6F6E801552FD4 ^
-+D3E07F5D14AE219D3CB59B034764C40056BA95F4 ^
-+F4C4DCCC63E8FC5402E93CF50533E51D1BECED43 ^
-+3806AFF9AD3859B150F1E2A40FBC047FB624CB14 ^
-+B51A4E4FA213D22548CFF28323C6679D2693110A ^
-+A7C70C19BAC1040698C7AE6A23B0688B58405153 ^
-+E74FD8C457581CD09F75EE3D43485130609FA9B7 ^
-+86ED1E49D4CA868934D7C254D3AE0D5BF7323CD7 ^
-+A16507DABC3A0CF7137150C4E6F88D5AC9A0AA3C ^
-+DDC76D7BA54354112C2D7D31E1A80F0048551E5E ^
-+D943F6028146EEB0386BB3084FD354CE86ABCF00 ^
-+4ABCAB65C7DAA52BDBD13BCC9098643F5A165329 ^
-+D75FE22162C538BA1E2687D66E2923CEC7375E01 ^
-+1A11A2B12D93FB030B0C3441D7AAC06DAD6FB527 ^
-+F8F3D414C26D09C6CA1B88BE44BE69AC879D3C5C ^
-+D2D0BC98795740002B2EB6EA6AECA5559340B54B ^
-+A8A3838BA45AB6B05D1D464E8681AD61B136B6A5 ^
-+5B162923200439D870F57AEC584A67CA2E8939B9 ^
-+A8FE0B55CFB15D977E871152905D8FDB18AA6B59 ^
-+02D5D4928969C7A852B5A8AC772A3D1EB424C9A3 ^
-+4ECE08DFF1FDE1258B1BF0423E1E31D83C57557F ^
-+F701430EF6CB54BF0D138B54FB13A1B586A1CDCC ^
-+E3242A71106CB77D25A60D164BD17FE07EAC4951 ^
-+D8B18DE86132672EDB330190BE895E3106F92D2C ^
-+8CF05FF1387C61A8CC3724BB1283AAD3E2F85EEF ^
-+797B311DC2B5D14B5277E49A38A787D3D6A58C2D ^
-+6472BC5881A62BA95651DBB3DFF9B3885949C9B6 ^
-+86AED4B53D8617FC135D0E1FCB762271B2545A45 ^
-+E3C888A1C00301AA7CE203A5590D82C1CE77C6D4 ^
-+8A081A7A672F91493AC09D95B29FABD043DA83DD ^
-+D47F87022DB4FAE551FF3FA09FFF02D92D112527 ^
-+B2271E377E9B158ACBCA1EDAE0ED6BA4C59CB722 ^
-+71EDE0C9488A21E62456D06EE393F390478C3F31 ^
-+437A1B709176598020EBA1E92386C3979A18915D ^
-+E3F4AC4384848071C8A9F9868376D941DEC2A9FB ^
-+00444CAF6A3F4210FD97DCB8F10F43B28D890600 ^
-+9B6BB350E30CEE209C77A3E20BB6ACE867546313 ^
-+935D2688AE2B16B79B517BFB79D48CE7E4F0F4E9 ^
-+16B21F19ADE7B6DEE665D45A847491B7F055C46D ^
-+853397C3565C807AE72EDFA37F4198E801103FD4 ^
-+10992C2FFE5127006BAFB2172359701AB10FA4BE ^
-+C82D6BA4BA621E36872ACEE4AE3BDF33C2381B07 ^
-+D7852DBC8FF592E08A1F1EE57A70BEFF327D8EBD ^
-+CF67308422F072415EFB75B43D5B67C7F5362B0D ^
-+30DDF35E1E99243F85311A0994D91B8AA543F729 ^
-+DB2FE340F62A89400AE4A16B61435204405350D3 ^
-+744980FA26DE503743EED298B966ED5FA8471DF6 ^
-+D2C8B803D3DDB54CDE6464D126CE3009A9F0FB73 ^
-+885700ECC04EB97943A9C100EB6EC4ACFE59DF81 ^
-+770F9CAC5D4E9C878A6636EB0306EE8DDF0CF915 ^
-+03C3F0553D7CF16CFE3D3F01C0A4CE26A914512C ^
-+93B304BDB138DB6790DFF8A84FFF3D3506770CDC ^
-+D5C5FA0488C5A6E14770F216B575997950A94184 ^
-+2F695B8EB18C28250D7C8B35BA000042EABDB245 ^
-+0353FFA7F7085D3B7888F96B8498486EE7DE16CD ^
-+239FE3AAC0D3739F5EEEC82B2BF6F5F47D058548 ^
-+16DE8684395CCA8A5DBAC72ECFAFA4BC3DBFC5D6 ^
-+AEB2BA742708DBC048B01FD77B1560CD3A23E707 ^
-+FAAE178B97175A7A68E51BD7EEC06234723B670A ^
-+B3F1311247D920110972772C3DC30F789D3FDBAB ^
-+466F682842C07D2C770B41B66A66BE9F6651C046 ^
-+39724BD29138F776ED20633B66A3A241FACD817E ^
-+5931F19A1985CD5F7171A5D2B81CE1CB3BA8EBBB ^
-+27DE5C33A18DF1A731051D6644DE8900E30E242E ^
-+A4E1C4F20A34C033589ED0985E80168A28C2377A ^
-+9BE820B134475CA31513EE1C79D06E299D70E017 ^
-+98F396D147EDF3D3079A6B2DCDDE92D48C9CC52B ^
-+D6108901909418CF7E7AECD9E4D1CA121E992E90 ^
-+F2E8F0FF1C652356E6056644B81FF8270A07F56A ^
-+EA1669ED509120F2B42CFA547A3FD6002FFB862D ^
-+219BAB55653B03A3CA7886212DF27B23C082B2E0 ^
-+BBE95F8BBEEB6F9A0062D151A7155630F2010B88 ^
-+FF6BFC90FE3EAB299892A5D9CA4D17DF2C6C604E ^
-+8D0E1DBFCC419AEB1C7827C7649333E34AC7E30C ^
-+EF3847F7FEA054F0E080836D0F2BFB676E3573EE ^
-+F60A15E6A28A5CCC9C4EFB1B3107A54C9AAEC26C ^
-+76328CDE5EFE6961B2CED4E3457D219229E161F7 ^
-+FFAF03FB632A042B837F8660412B72B1099394B1 ^
-+211BA6675C52CBD9E7F5F5B366A64A2466532AA7 ^
-+51E05B7481381358782FDF73CB958E1434CF3330 ^
-+BB5CEAD1F3B68227CB032B2B8E5B627461071637 ^
-+3EBCF1D78998D4D11C094BF28FD522EA9F5A1E37 ^
-+3E7186CB1D39C64CEFD28BDA2CCAA073E71A5327 ^
-+415B6A0083386054D3B77026A38654D45D3BA106 ^
-+2297372256479E31E139AA16E63C27C207519C0C ^
-+65A79FC4B322F655ADCF63432D295349FDCA9E7B ^
-+2D1130EE6E4156151C637B46527FAC54D9E79DF7 ^
-+80E18DE7C798F040C008B3BFE3054261740E1444 ^
-+0710A3A300290CC1C3BAB56CF00A682C1B711BB7 ^
-+C6BE5E337A1A976C253CBF356687F359548B6A3E ^
-+3D6E4E514277223BADE6A317C478F17EA6EBC9DC ^
-+25C66C904C35EBAD2613A30B73283E0FC23CCC10 ^
-+125709FDFD511180B08DB77366DC7E5A2B46F0CB ^
-+AFB5C53BB272826DB7A1C030B89C7F3AE956F65A ^
-+D166E71D8142E26E58E0F7A69C50CF19CFE225FC ^
-+426007235D8F06FDCFF20CE7FD00E994F2FC422C ^
-+8CA2730163EA816BF9B63CC653B443A8E8BD7656 ^
-+BB2DA623B5FD10032BAFA1A2F9FB1E13F74AC4EB ^
-+82238EC3C90BAF3227885BE78534A1B08213660C ^
-+64BA275EE9422356EAC19A46A4C5C9BDB4D63C05 ^
-+4995323B85FD3879631B439BF4F8D7D39639A7FA ^
-+41F95B512991A4E05B219479842285900DF8425E ^
-+3CEBE929AC763F2FD85F21354C9158E5169A844E ^
-+BAD5D53D67CBCD7767B6009546A91D59188DE99D ^
-+E9C2909F6F0A3079890193C8772E745A317C48B0 ^
-+BB97E31E9B8EAA8CE758DD775D8326F94720E198 ^
-+109471A1C3A427C65C4BBAF8C785DB99C748E5FA ^
-+751D9CC64F00176E424A1F331C63EAF2910A75CB ^
-+27EC395B07FC740569612741E5CF13A9A6048010 ^
-+F674BD87556FD0F71D9BF23A0ECCE9F39AC82099 ^
-+93B2F9109A25C511865D15E1683C0683555FFC01 ^
-+<D
-+
-+H>SHS Type 2 Hashes<H
-+D>
-+EFA3EC89797EE3F1A5BE4B8D34747136CA7DFB99 ^
-+D146D467E321E4EA4C73E8424029BEA461F3D90B ^
-+25ACD32DED334AD20DDCCF01059B6B8B864E8D7A ^
-+25416D69665007C3EDD24161F3DF0F6ACBD0E859 ^
-+542A29E5C04A5B79AD0986FAD49BE741F09942B9 ^
-+5B197E1011286E5C130F9379843DE89776C37C59 ^
-+467277EB8887EDE0F2369C6E7D12281EE3B51857 ^
-+BC1610204E15A37D533B74412683767898B35DFF ^
-+3DC7C4726B3EF75AB89193701C990F86AA6DE80F ^
-+4AD4348E5022685C70A2B9806698664C281E7123 ^
-+A33E4996BD9980ED505F8AAAF0F6D64E97D7E619 ^
-+06280ACC2D0DA15EAD7C963253349C86A6C3C6C4 ^
-+33BE29779F42EE504A3CDAE0422F7B9C5CC994DE ^
-+412941272C5CE344AC144B69D4BA5F61F1474F4E ^
-+C33ECAC1FA74D54685669F8B9F85918471A88D60 ^
-+C48272E42F921A2749D60418965D8A7CB1C7BF0D ^
-+44ABEEAD2C278098062D934460E565ED3C646880 ^
-+08DF185007816E3EF01D6226C72B03256478F23F ^
-+289E89F8F15DD709701AA22B12C69E8F90C93F1D ^
-+5B93CAB369C99B85EEE3130F833B7BB06D4FC041 ^
-+7B2872C58FB340C9A1D068B618E4980B04FDFF2D ^
-+62783421CF58EA66366ADDCBFA96968FB1369918 ^
-+C8BD732D0181051698160B2FBC2025476297C96B ^
-+038D587CC069C9B89DBC2FE9D86A98C031D340B9 ^
-+3059031A68585DA8F09B87B0BE3413987EB390BF ^
-+1B74A4A95713083609B27E67140708EDA15F80B1 ^
-+6EACEA69922C7ACE38E0560A91DA459C0CC89B55 ^
-+60E21F5299EC719D2832A82268B24AF6B2815DEB ^
-+3D7D51782A532F4F410AA2AB3DC9178C21A55F0A ^
-+B2423D96008FB800E5E35E19DA6BEA27487585E0 ^
-+5038FE9AEAC82966A4EE5CC69ACC8ACCF55E63DC ^
-+90BF0A90F88F5F1DA51E4494E2D5D4C6250D2D4B ^
-+F858434E0A5FD61A220CC792380801D19E0D9F77 ^
-+C31E0BB45FF1DC0DE44C77C53C59B15C3BDE9EB4 ^
-+DF5628CF6445C409B51F46A86488A95DD34A3DA5 ^
-+744CDCC9A51B1AD14FAFD673D4104433B7A24739 ^
-+CEA5E7B91773DFE13649ACA78907769B5BEBCA1F ^
-+DC23EC1A04F7417D9704B844E9F39F39EAABE6D8 ^
-+D39DDE97297B7D1C9FFD6B6733349D0B8E802688 ^
-+65219E79F5A3C61FC075660258A9C5F13A159271 ^
-+D2A86164D1366B60F146651464761B01353F9028 ^
-+8E3D1E4E0438EABC58AB967B1CDDDAE3CDD9B078 ^
-+EE9BEEC73D0E760CFD05CF62382A461C7DE3CE2A ^
-+5C4FDD604751596BE5419D4AC256C3D982012149 ^
-+43ECD0DE83F087815CF257982914611E4BFF698C ^
-+1A1BCA41BA127DF4264D3795E2EBCEDCD1BD8EC7 ^
-+FF82BC6904520E186803FFE861DCE7E566D75F03 ^
-+764546FFA014DF8278974BE66D01485251B8B0CF ^
-+A06BC97DACB07EF207808684978841C425AE1238 ^
-+6C7E6E0E89F2A070EDF3C4333353869942F3D883 ^
-+572437B2B35C5BA00EBC74521B12D20E6F14ACBC ^
-+08703186E74A9397CEBB1B2034A6770995AF3D0F ^
-+E4F9055356AABA933EEF0C0B07B6FCE90361D208 ^
-+2020203EFD4C5FFA02E593B7A658024B33FB368E ^
-+2BB2F32D64ADA56A3E53A6D750A05F8D2B5D7A7D ^
-+C719AEE4708E7A242440C9429B7236DFDEC02B4B ^
-+924A26B46649287197E142CB42506C96E309EB26 ^
-+0463F94B5452A2D8BA3A0DBFE9C490A371C19975 ^
-+9FB2FE5393238EAAF58034BC934B190784A10DD3 ^
-+AD4A6962A6A59CA32789AC3BBA368583B9122AF4 ^
-+2A89459657F9E2685D794E7AEAF30A05B06AA573 ^
-+9B65CB91D0A24773AC8675FE9862E28A7B84954F ^
-+9CB7CADEDD391A3689B04427B461C4113717B6C8 ^
-+F1B922D7EC240FC99692EC28C1A6CC7D907B1018 ^
-+DE301A1413C36A5CB891FBCD9CF9258DF4EF14A4 ^
-+B330738D2AD53448C287BEEFE5C5583F2B817A03 ^
-+B80EBE0104A25840CAEF6AD74C4676D524571A29 ^
-+3B5CD01661A279BA72DFC1272E683573B4F16DCD ^
-+1412D6A2DBBC9D00641A71164A690C640852B56E ^
-+0EF514429CAC95CDCBE8A2E60C2AA8B892AC5B33 ^
-+5F32CFF3B07D47EC13EB54E7C39E4F5216FDBDC5 ^
-+B931966169D171DE8F9488E8B5E0960124BC7451 ^
-+E5034D3A5A573442781EF0C6EEA7BD39FAD0B94A ^
-+F97CAC5013135944FDF8BDCF02B4CC61241BEA6A ^
-+FF74C93CF32506B4E17A0B596AB564989F20F1D4 ^
-+5CA42E33BCE4301B8FBCE56BFBDB43EF79E956D8 ^
-+87F5D981EDFA01A2E9885BD52CC4E649A2330621 ^
-+63F43844ECDDF338203DFB116FA79CBAF4E5C92B ^
-+92C5E2A5D380D2BB5E19E9E65DC9A77F4B8B25F4 ^
-+E3D78501969ACDD78A71042E7B0BD0C14882E402 ^
-+4E1FD6F5CFE29A0E33248F2E2EFB74E7E0A99765 ^
-+5FF5DADC93B2E452A60677C8CD0CBAF7BD4895E4 ^
-+CA490FAA2D6723F9F682D5C96586460D0C8B2010 ^
-+94F099C2FF7DB694FD2DCF5A9A6B06855B2A9948 ^
-+CF3B1E0DA7BE87180BF1847DEBEC706788C53B8B ^
-+F85305C4BF149B92068D363EF19B914DB90618DA ^
-+B4BAFCA3176B80E9800E319FB3BB74E5D65BEB64 ^
-+38CCF51915A38559A96E6F3258148D5E63230984 ^
-+6FF43B0D25C7171FF178DEAB13D7F488D21C4216 ^
-+3E4A034152D86E4568A2197A5328E8E97363287E ^
-+F231D4C3ABBE0FDF77C71EB2C28E50ACD9584537 ^
-+23E1A4F73F288233847E647CF8623289F1F89E55 ^
-+726DAEAE724E79232611CBB216B7722594E814FB ^
-+0E5FE512B0AF52B4183119508CB01AF5338C63E3 ^
-+4A5D3E12EB29B224202C0B319B086535E99F5E32 ^
-+363574A910830EDCFDAED1055975F0613D1B5C95 ^
-+4820BE6C74AD34D8A43A5DD0130CBDE3F890C53B ^
-+FEB6E5BF7A66ED9B838A10305F850052DDF9207E ^
-+D50B331AD6925545264B6614C3B4C39375AB1F65 ^
-+36B1BF39BF4AEF05FB054BD02FAD9062D2337239 ^
-+<D
-+
-+H>SHS Type 3 Hashes<H
-+D>
-+9B30CAFDD7F5E525221EC036D55A9C8D78294DBD ^
-+9BCA33B3DAD2201D0F1981CCD0AF4874E162A6DB ^
-+8B06697E4A75DA5F020CEB860A29040B3DF6EF21 ^
-+F0D48401AE22498E281CDAAF045FFEBAA87A9776 ^
-+6247DF62DF5D4857A795996039B5A6271F7A2031 ^
-+D98433C3372F1405FCC2475959B9F35DF27D32E9 ^
-+C4D14B2873B0BDF01CA7C1628EE01D61682CF1C8 ^
-+C027A9C010F8EBE89FC88C1C9FB68DAB09A0CFCD ^
-+4D8D19F35FAECDEB015E116130A0A4C836A42A6A ^
-+928E2E95D3F09D8EE63CB8F10296EE6EF7455FFF ^
-+55F3E770DCA28CFB711D059174CC7A9EC2B2DD7B ^
-+4500987086FD8C275330E0F27E8A3ED8596D01AA ^
-+60BC57D16F50E2ADD1724E0C7DDD5E47DDF8E300 ^
-+59D174272AE602AC092EE7EF393AC19B87B8E865 ^
-+8C25614E6E4D825D6AEDD93A62D1A0458583EE84 ^
-+695390D1E57BCC4CDD442879F0978BD823322E5C ^
-+6F353EE6B5F4B8272E4A0D3D4BBCC83B1B942516 ^
-+4B3F671874220DCCF49B580189E6B13FFF0F531D ^
-+BC6C473B4824D8E2FA04DDA86A5865D4A36E8E91 ^
-+1BFEC269FD18D25DC5C56ACD83810022775F3EC8 ^
-+3E9921E2F685413C0AEA64801945B48CB76E195E ^
-+EEC7221FBAC5F27B56CF68C396B7EBBCAA3C0B05 ^
-+F86DDD2A8229532C3F183EA9903AD228A2521593 ^
-+FA17B5DF33E4326BCDCB27F1CE8B83BE8B8EF890 ^
-+A4AFC0B41D30CE796C2B4B06E368A5D390735889 ^
-+745AF12B4EF985E4D2F848D7C7ADB6B32404B6E6 ^
-+5CE4B657409033BF67DB7B0CA480EC2ACCA801EC ^
-+0B5AABC9D3A8E861103D6B5B9B994F9C743BF058 ^
-+86A1198983A73298BF4EB41A61EAAC3E4B06B408 ^
-+460A107A6AF329B330DE9425B3077755553AD370 ^
-+62C81D06AFE8C8F3E642AD42374FFE486DE86F2F ^
-+FC1EECA32F7E434BBC74F4360808EDB141087BDC ^
-+BF494B4E8D3311F167B1EAAE58A3343683F337EE ^
-+961247D01E1C4CC0D71307637CD559D530521FD5 ^
-+B34F846411BE61E15361922E0E2AF83F3F03B291 ^
-+CD845B240FC2551DCB2CE487646648CF249AE8F0 ^
-+5C124B615FAC548DAA35AD0287E032EC77D220BD ^
-+3C74771D838CCF7FAE2DAB100CEA7B46BE2FFF3F ^
-+62860DB8C0C897C7369A1AB61747B04C0AE9F8A6 ^
-+C98400CDD7FE71C7B35488C16D3395C04300EDFA ^
-+95167E2BBFC0349C0DB7CB7BD2030BC30F9F286A ^
-+9F835DBB27076B5F0D8880603F417CE83A0D2242 ^
-+08442B715C84B7A8B2C7FFB46010AE56A0C8C05D ^
-+B7132DBA522C54F42903CAEB705167485AAD30B0 ^
-+9E99F03ED08374EFA4F9A26551A909F40BEE503C ^
-+999977E6AFFAE0451E93E7F77C7D177DE121402C ^
-+30E0BB7F21433A348E3B446F08D80CEAAE06DB71 ^
-+B3A41EEDF017DA7B20FBD9111BA6E2E59842CED2 ^
-+5B9CA331BD03D97E8D057DFD35C9E600F90C57DC ^
-+5338A25B31CC9C64552B6F6742F9FEBDC13D9733 ^
-+1B3A55BF6FD748B3B650EA5BE839B61530C871C0 ^
-+1503F21523CE8BC5A19E6A7F5CB0EC34A7E9F75C ^
-+7F6A16B30377D3D0014B0B0B4C8639160C721DDB ^
-+8F621F8CFB6AF216746D8B99C913267DB14ADB08 ^
-+42E9177C487B4B711A4451C360BD7E2C6DA73446 ^
-+5B2497CA6EC2426B12653D711E6BFDBEEFD4A389 ^
-+30F4690FD4F09AC8E29B926F64C673539D7FB65D ^
-+CE12D1AA4961245E606097B672EC3E16103D0D16 ^
-+9BE5D693BC0CC56B34B8DDB92FACEC2F8F4B638A ^
-+D2040005AE230EFDAE95942372607577EFA5DBC2 ^
-+8A920F9407C74FA37D9C93C3606B996DB945841D ^
-+F26915C08DC1D3D31D9CA73F18F04DBB57E8A672 ^
-+E449381C8148837B9E44251B17825530D8754C94 ^
-+BD8402B21520E40E31D1EAFD9C99A9E409C3A77D ^
-+624CCE538A78CF0FF788B9BE433A008FA7779280 ^
-+B796B521B90D55396E8EC02AD9B69B7E91093E4C ^
-+5C4D584F97C1D8FAF810CEF3A4CA0915FB0B630A ^
-+A179FEAF341BA97B1D0278822ACCAE5FCF8F4ADE ^
-+693DCF85919E06A5423F92780E79C2C0C4528D67 ^
-+DB94BEADFEA3682051D622519AF9F87BAB28C5F9 ^
-+2E20D1925FBD460E7A5E6B48A92964A7DDCB874F ^
-+86651FD71862CF72F01F099F68CC164DEF0E9625 ^
-+D5948BDCA91D6707015C79BBC2BC74C1B60573F5 ^
-+8870B8A6884FF54E0E400441FB2EC74F2452F39C ^
-+7DF1C3C052E8396D251E9D522C4227344DF92C11 ^
-+59A290A0BD41B973DEE35947CB240006DBCEC582 ^
-+DD0EDB3AA60CDEBB85DC01258B9F49F3A5E83589 ^
-+FC6794E4B4F2735773A195F9BB2022C70AA4C754 ^
-+8BBC40A02D87A8CF14D6CBA0A2C9857D93EFDEFA ^
-+D28FF6E2366097135EE565F10263E8798140C5DC ^
-+2E4289EBE02E75E53B52D6724CDC16B89ECF3DC6 ^
-+F2E716831CC0CB5CB2A623197D14C2C9FC25A914 ^
-+47B926A13D65377A8E2AF27A84E175BE93739E38 ^
-+D368B8ACC50353EC8070936C73242A2BF6CEC3AA ^
-+8556025BED695B975CB924DDFB372F6899A7B09D ^
-+9B4ED89E63D17B7210A3FC1BBF0FDA607694F5D9 ^
-+0D2221F5CDA184EC7F6CCA29A75F502FCA25673A ^
-+3C152CCB811DD9BC16529B23DFA1757D744FE676 ^
-+48D1808CD62F868FB6F45560137CFB1DFD856266 ^
-+8A3FA42A984C95CA75D6AE51391AAAC0688C2ABD ^
-+AB570D91E9B6F3F1188DC8639A3B144837EF1ED8 ^
-+673F62A7D205D5C90B7454E81A5EDA9A60650D91 ^
-+D00575E45FA324FA05142359BC3A07C803836EE4 ^
-+B908BE44A2A66F7370DCC022378A9C2F9BA70B38 ^
-+1EF79029F88E7A091D6F2FA2F44A96829C120C62 ^
-+491CB2EE0994EE6A4FAC59C4B9FBC9CF8183DE8C ^
-+CEAAC4E211E7DDDCE3931C47ACA3D626B62E5054 ^
-+BE2041CB55A4882A8335A46B744ECB8611336F5D ^
-+E4C0BC6857AFFE0C2B77B38FC01829B44247B6CC ^
-+122A6AF11DEB6C3B97E6ADF5E077B5D6363887E3 ^
-+<D
-+
-diff -Naur dbus-0.61.orig/test/data/sha-1/bit-messages.sha1 dbus-0.61/test/data/sha-1/bit-messages.sha1
---- dbus-0.61.orig/test/data/sha-1/bit-messages.sha1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/sha-1/bit-messages.sha1 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,4009 @@
-+# Configuration information for "SHA-1 Test"
-+# SHA tests are configured for BIT oriented implementations
-+H>SHS Type 1 Strings<H
-+D>
-+0 1 ^
-+1 1 1 ^
-+2 1 1 1 ^
-+3 0 1 1 1 ^
-+2 0 2 2 ^
-+4 1 1 1 2 1 ^
-+3 0 2 2 2 ^
-+4 1 1 2 2 2 ^
-+5 1 2 2 1 1 2 ^
-+5 0 2 2 1 1 3 ^
-+4 0 3 3 3 1 ^
-+5 0 2 2 3 2 2 ^
-+5 1 2 3 3 1 3 ^
-+5 0 3 3 3 2 2 ^
-+6 0 2 3 1 2 3 3 ^
-+7 1 3 3 3 1 1 1 3 ^
-+7 0 2 3 1 2 3 2 3 ^
-+6 1 2 4 3 3 3 2 ^
-+7 0 2 4 3 3 1 1 4 ^
-+8 0 2 3 1 1 2 2 4 4 ^
-+7 0 2 4 2 3 1 4 4 ^
-+9 0 4 1 2 1 1 2 4 4 2 ^
-+8 1 4 4 1 1 4 2 2 4 ^
-+7 0 3 3 4 3 4 4 2 ^
-+11 0 1 3 1 1 2 1 2 4 4 4 1 ^
-+6 0 4 3 4 5 5 4 ^
-+7 1 2 5 2 4 5 4 4 ^
-+12 1 1 2 3 3 1 1 1 4 2 1 5 3 ^
-+11 0 2 3 3 3 1 2 2 4 1 5 2 ^
-+8 1 3 3 5 5 2 5 2 4 ^
-+9 1 5 4 5 1 2 1 5 3 4 ^
-+9 1 5 1 5 2 3 4 4 4 3 ^
-+12 1 1 2 5 1 1 5 5 1 4 1 5 1 ^
-+12 1 5 3 2 1 3 2 2 2 1 4 5 3 ^
-+10 0 5 1 4 5 5 4 1 1 3 5 ^
-+12 1 1 5 2 3 1 5 1 3 3 5 1 5 ^
-+12 0 1 1 2 3 2 5 1 3 3 6 4 5 ^
-+11 1 3 1 5 1 3 4 3 1 5 5 6 ^
-+8 1 4 6 4 5 4 4 5 6 ^
-+10 1 6 5 4 3 3 3 2 6 2 5 ^
-+10 1 2 3 4 4 5 5 2 5 6 4 ^
-+13 1 3 1 3 1 4 1 6 6 5 1 2 6 2 ^
-+10 1 4 3 3 6 6 6 3 2 6 3 ^
-+13 0 3 5 3 1 4 1 4 3 5 3 4 1 6 ^
-+10 0 2 5 5 2 6 6 5 2 6 5 ^
-+12 1 2 2 5 3 6 6 4 3 2 4 3 5 ^
-+13 1 2 6 3 6 5 2 3 2 1 2 3 5 6 ^
-+13 1 3 5 6 2 1 1 6 2 4 5 4 5 3 ^
-+16 1 2 1 4 3 2 3 2 5 3 4 1 4 1 5 3 5 ^
-+11 1 3 1 3 6 7 7 4 1 6 5 6 ^
-+12 0 2 5 2 7 5 5 4 2 2 6 7 3 ^
-+13 1 6 4 4 1 4 2 5 2 4 2 7 4 6 ^
-+12 1 3 4 7 6 7 1 4 4 3 2 5 6 ^
-+16 0 3 2 4 5 6 1 1 1 5 3 4 1 4 4 5 4 ^
-+14 1 5 1 3 7 6 3 1 3 7 3 1 5 7 2 ^
-+14 0 1 5 3 2 7 1 5 5 4 6 5 3 6 2 ^
-+14 0 4 7 6 6 2 3 5 1 1 3 6 2 3 7 ^
-+13 1 6 4 6 3 7 5 1 4 5 1 7 4 4 ^
-+13 0 7 5 3 1 4 7 4 2 2 7 5 4 7 ^
-+15 1 7 3 6 1 1 2 7 5 1 5 4 6 1 6 4 ^
-+16 0 2 5 3 2 7 2 3 5 2 1 3 3 3 7 5 7 ^
-+18 1 3 7 2 4 1 7 3 4 1 5 1 5 1 1 6 1 2 7 ^
-+17 0 2 1 7 3 7 1 2 1 4 3 6 6 6 2 2 5 4 ^
-+22 1 2 2 1 1 2 6 2 4 1 1 3 5 2 3 4 5 6 1 1 2 6 3 ^
-+12 1 7 8 7 2 1 3 5 7 8 7 4 5 ^
-+15 1 3 5 5 2 2 2 7 4 2 8 7 4 5 5 4 ^
-+16 0 1 4 4 6 1 2 7 1 6 4 1 8 4 7 4 6 ^
-+16 0 8 7 7 2 5 2 1 5 6 1 1 5 1 5 6 5 ^
-+14 0 7 3 2 3 8 3 3 8 2 8 3 7 7 4 ^
-+14 0 4 2 6 5 4 5 3 8 8 4 8 2 6 4 ^
-+14 0 8 7 1 3 5 8 2 8 1 4 5 2 8 8 ^
-+16 0 5 5 2 2 4 2 4 7 6 1 5 8 3 8 7 2 ^
-+16 0 1 6 6 6 6 4 2 2 6 4 2 4 4 6 7 6 ^
-+16 1 2 3 7 4 1 7 7 5 7 2 4 7 2 6 6 3 ^
-+13 0 7 4 8 6 5 7 6 3 5 7 5 8 3 ^
-+16 1 4 1 1 5 4 3 6 5 5 8 5 4 8 5 3 8 ^
-+13 0 7 4 4 5 8 3 8 3 8 6 6 6 8 ^
-+14 1 5 4 7 5 8 4 6 1 6 2 7 8 6 8 ^
-+18 1 3 4 4 5 3 4 1 6 3 7 6 7 3 3 2 8 4 5 ^
-+19 0 5 8 1 2 1 3 5 3 1 6 6 3 7 4 5 7 1 4 7 ^
-+17 0 5 7 7 2 2 6 4 7 1 7 8 1 5 3 2 7 6 ^
-+14 0 9 3 6 9 3 4 7 6 9 1 7 2 9 6 ^
-+21 1 8 6 5 2 2 4 3 1 1 6 2 8 4 2 5 4 5 1 2 5 6 ^
-+16 1 2 6 5 4 9 8 1 8 1 7 6 7 7 1 2 9 ^
-+15 0 6 9 5 4 7 1 7 3 9 4 7 7 5 2 8 ^
-+16 0 1 7 8 2 7 2 9 8 8 3 4 5 2 4 8 7 ^
-+16 1 1 6 8 2 8 1 6 7 7 5 9 2 9 2 8 5 ^
-+16 0 4 2 9 6 2 6 6 7 9 9 1 9 4 1 5 7 ^
-+18 1 6 9 2 7 2 8 5 8 4 3 4 4 6 6 3 1 6 4 ^
-+19 0 1 7 4 4 4 6 1 6 3 9 5 6 4 7 2 2 5 5 8 ^
-+17 1 8 5 3 7 3 5 6 4 1 9 2 6 5 7 9 1 9 ^
-+18 0 8 8 6 3 5 3 3 5 5 3 8 3 2 5 5 4 7 8 ^
-+16 1 4 7 7 2 7 3 8 5 7 5 6 8 5 2 8 8 ^
-+19 0 3 7 2 3 9 5 9 7 7 6 5 3 1 1 5 2 3 9 6 ^
-+18 0 2 4 6 7 8 1 2 9 7 2 3 5 8 9 1 7 9 4 ^
-+21 1 4 1 8 3 3 1 7 3 5 7 4 1 8 3 6 3 5 7 6 8 2 ^
-+17 0 4 8 3 7 9 8 6 8 4 2 8 7 2 4 4 5 7 ^
-+18 1 3 9 7 1 4 5 6 9 2 9 1 3 8 4 7 8 7 4 ^
-+25 1 2 4 8 1 7 2 7 5 5 3 2 3 2 1 2 1 1 2 4 2 8 7 8 7 4 ^
-+25 0 9 4 6 5 8 1 1 1 3 2 1 3 1 1 1 5 3 3 6 5 7 4 5 6 8 ^
-+19 1 7 5 6 6 8 2 4 1 8 7 1 6 3 4 8 5 8 5 6 ^
-+19 0 6 1 2 1 7 1 10 7 4 5 1 6 4 6 8 7 10 9 6 ^
-+16 0 10 10 5 5 9 7 2 5 4 3 6 3 10 10 5 8 ^
-+18 1 2 3 5 9 8 5 10 6 8 4 2 2 4 7 9 6 9 4 ^
-+18 0 5 10 3 1 4 5 4 6 8 3 7 7 7 5 9 2 9 9 ^
-+18 1 4 9 7 5 4 4 10 6 9 3 6 6 8 6 2 4 6 6 ^
-+17 0 5 7 4 8 5 9 10 4 9 1 4 8 6 6 5 9 6 ^
-+17 1 3 4 8 9 1 5 8 10 5 10 3 8 1 6 8 9 9 ^
-+18 0 8 3 6 1 3 10 3 7 6 5 9 3 10 9 4 6 10 5 ^
-+16 1 9 1 9 6 5 7 7 10 9 6 1 5 7 10 8 9 ^
-+20 0 6 4 10 10 4 3 9 8 10 3 3 5 2 1 8 1 3 2 9 9 ^
-+17 1 10 6 10 6 8 3 6 7 3 10 8 6 6 4 4 9 5 ^
-+19 1 9 4 3 4 7 3 8 10 2 4 10 7 6 10 1 3 5 7 9 ^
-+21 1 2 2 2 3 9 2 8 3 9 3 7 7 4 9 9 5 4 2 6 10 7 ^
-+17 1 5 9 8 8 9 10 9 1 8 3 10 2 7 2 10 4 9 ^
-+23 0 5 4 10 4 10 7 8 3 1 1 3 4 2 1 1 10 2 1 4 10 10 10 4 ^
-+19 0 9 2 5 7 9 6 7 1 8 9 1 2 1 10 8 10 4 7 10 ^
-+22 1 2 6 8 8 9 7 2 1 3 3 10 6 2 6 2 6 5 2 5 10 5 9 ^
-+22 1 8 7 8 10 1 6 3 7 4 5 5 5 1 9 2 2 5 5 2 10 9 4 ^
-+21 0 1 10 2 6 10 9 4 3 3 7 10 2 9 6 10 2 1 5 6 3 10 ^
-+21 1 8 5 7 10 5 6 7 3 3 1 2 9 4 8 6 3 9 1 7 7 9 ^
-+22 0 5 5 6 5 2 3 5 3 11 4 5 1 10 6 4 11 8 3 6 5 6 7 ^
-+20 0 2 1 9 9 3 6 1 8 11 6 7 11 6 1 10 6 7 5 5 8 ^
-+19 0 4 1 7 10 4 8 10 8 10 4 11 9 6 1 4 5 6 11 4 ^
-+19 1 9 2 4 11 11 11 7 1 1 6 8 1 9 8 5 11 5 4 10 ^
-+20 0 8 3 10 1 7 6 10 8 2 9 3 8 6 8 9 3 7 5 1 11 ^
-+22 0 4 5 8 4 10 6 5 4 5 3 3 4 1 5 9 4 10 9 6 7 3 11 ^
-+21 0 6 5 8 7 8 11 2 1 11 10 3 3 2 9 1 3 6 9 10 10 2 ^
-+24 1 3 1 1 9 4 2 5 7 3 10 11 5 6 7 1 7 7 8 7 2 2 7 4 9 ^
-+23 1 9 4 6 3 7 5 10 9 8 9 3 2 1 7 2 2 7 6 2 8 3 6 10 ^
-+22 1 7 10 2 10 5 1 8 7 7 3 8 6 6 8 3 2 11 6 3 4 7 6 ^
-+20 1 11 3 7 2 10 10 7 5 2 4 3 5 11 3 11 8 9 5 5 10 ^
-+19 0 6 2 6 8 5 9 4 9 10 9 8 3 2 10 11 2 6 11 11 ^
-+20 1 8 2 4 2 7 3 9 9 11 8 2 11 4 8 4 8 10 6 9 8 ^
-+21 0 6 10 10 7 9 2 5 11 9 10 7 3 1 4 5 4 10 1 2 8 10 ^
-+18 1 8 11 6 10 8 9 11 6 7 7 2 6 2 6 10 6 9 11 ^
-+21 0 5 11 1 6 8 11 8 10 5 10 3 7 8 9 9 1 1 1 10 2 10 ^
-+25 1 5 10 2 9 9 9 7 2 2 4 6 1 11 7 3 3 5 5 2 11 2 5 5 10 2 ^
-+21 1 1 8 1 11 6 9 3 6 11 7 11 8 6 9 4 4 10 7 1 8 7 ^
-+23 1 7 7 5 11 1 4 7 11 11 11 9 2 1 3 8 2 8 7 4 5 2 5 8 ^
-+24 1 4 11 5 10 7 7 9 5 1 5 6 2 9 1 5 7 9 9 11 1 1 3 1 11 ^
-+27 1 10 4 6 8 5 7 11 4 10 8 6 4 3 4 4 2 1 1 3 3 1 11 2 3 4 10 6 ^
-+21 1 7 11 2 7 10 10 9 10 1 3 10 4 3 11 10 2 5 3 9 11 4 ^
-+22 0 7 9 10 9 5 2 6 6 9 2 7 4 9 8 4 9 2 5 9 8 10 3 ^
-+21 0 12 2 6 12 7 9 3 5 11 6 11 3 5 4 4 11 10 2 1 10 10 ^
-+27 1 1 4 12 2 10 1 6 5 5 4 1 10 3 1 12 3 2 11 5 1 4 6 4 6 11 11 4 ^
-+22 1 8 9 4 8 12 5 5 9 3 5 2 3 4 12 12 8 5 3 1 9 10 9 ^
-+24 0 5 12 8 6 2 4 11 11 2 7 11 9 4 5 2 1 8 3 10 2 5 2 8 9 ^
-+21 0 3 7 7 7 5 9 11 5 9 11 2 9 7 5 6 11 2 12 4 9 7 ^
-+26 0 4 4 6 4 7 2 4 2 5 7 2 6 11 5 9 8 2 5 10 2 10 8 8 5 2 11 ^
-+23 1 3 3 2 6 9 10 5 6 8 5 8 11 3 6 10 4 6 9 2 11 10 3 10 ^
-+25 1 1 3 12 3 7 4 5 5 3 8 9 2 4 8 7 7 9 1 9 11 4 5 7 7 10 ^
-+20 1 11 9 8 10 11 1 7 12 6 7 4 2 12 12 2 3 9 10 8 8 ^
-+20 0 12 11 1 4 10 6 10 3 9 7 12 4 11 8 4 6 12 4 7 12 ^
-+24 0 8 6 4 8 2 2 9 2 9 6 3 6 3 3 10 12 2 7 8 7 8 12 10 7 ^
-+26 0 5 11 11 7 3 3 9 10 3 9 3 3 7 2 9 9 1 2 4 12 2 5 5 6 10 4 ^
-+22 1 12 9 10 10 12 12 7 8 2 7 1 6 8 2 8 7 6 3 1 1 12 12 ^
-+22 1 11 10 2 11 10 8 1 2 8 12 8 3 9 5 7 9 8 7 11 1 10 4 ^
-+22 0 10 1 8 6 12 2 11 7 10 4 10 6 5 7 10 11 3 3 8 8 4 12 ^
-+26 0 8 5 5 12 1 8 6 7 6 11 8 10 4 3 7 6 1 5 1 1 9 1 5 8 9 12 ^
-+21 0 1 12 4 11 12 9 2 12 12 3 12 5 4 12 4 1 5 8 12 9 10 ^
-+26 1 5 3 8 1 11 4 7 3 3 10 4 9 6 6 4 3 9 11 1 3 7 10 7 9 6 11 ^
-+23 0 7 12 3 5 8 9 7 10 8 11 10 11 6 1 8 1 1 6 3 9 8 12 6 ^
-+25 0 1 5 5 6 5 12 1 1 1 11 9 9 3 11 9 6 1 11 3 1 12 8 11 11 10 ^
-+22 1 10 9 7 3 10 2 6 4 11 3 11 6 4 5 5 11 12 9 7 8 12 9 ^
-+22 0 8 5 10 7 12 8 3 4 4 5 8 9 12 6 8 10 6 7 11 4 8 10 ^
-+26 0 3 5 3 11 11 2 1 9 1 10 4 4 6 9 4 7 6 5 10 10 1 8 9 9 6 12 ^
-+24 0 12 11 4 10 1 3 7 5 11 9 11 7 2 11 5 4 7 8 1 6 12 7 4 9 ^
-+28 0 1 12 10 2 2 2 4 9 11 4 11 7 2 4 3 11 7 10 5 10 5 5 3 5 2 7 5 9 ^
-+26 1 4 1 4 2 13 6 11 5 6 8 5 1 5 6 3 8 1 5 8 9 9 10 12 13 12 2 ^
-+26 0 12 3 1 11 2 12 6 8 6 8 11 4 11 10 9 6 3 3 2 2 2 13 2 1 13 9 ^
-+22 0 3 3 12 13 13 7 12 2 8 11 9 10 10 1 1 13 11 13 4 1 11 3 ^
-+26 1 2 6 2 8 12 3 7 12 8 9 8 3 12 7 4 9 2 6 4 9 9 4 8 2 4 12 ^
-+24 1 8 11 11 3 13 2 10 3 10 8 6 6 4 4 13 4 2 4 8 1 11 12 9 10 ^
-+29 1 1 2 5 1 1 10 3 2 4 9 11 8 2 5 2 8 10 2 10 11 7 8 12 6 1 9 8 4 12 ^
-+23 0 6 12 7 10 7 7 13 2 2 7 10 2 8 13 10 7 11 2 5 9 11 13 1 ^
-+25 1 3 11 2 10 5 11 5 7 10 8 10 1 10 3 11 7 9 5 3 3 4 5 13 12 8 ^
-+26 1 5 13 9 4 3 3 4 3 13 1 6 11 10 8 13 3 4 11 9 1 9 1 7 8 7 11 ^
-+22 1 1 3 13 8 11 3 4 10 10 12 7 2 11 4 7 7 6 13 13 9 13 11 ^
-+26 1 7 9 7 8 9 9 5 1 13 3 3 4 9 2 1 8 9 3 9 12 8 10 10 6 11 3 ^
-+23 1 3 8 12 8 10 4 3 8 5 5 7 11 13 11 12 11 4 12 3 6 5 11 8 ^
-+27 0 3 10 9 6 9 7 2 10 4 4 5 5 2 12 13 5 3 1 10 1 4 7 8 13 13 12 3 ^
-+30 0 2 6 5 4 7 3 10 6 13 6 3 9 6 2 10 5 3 8 4 1 11 3 5 3 7 11 1 12 9 7 ^
-+29 0 5 2 13 6 5 2 6 3 2 9 5 3 6 6 4 10 2 4 7 7 10 13 9 6 10 6 5 9 8 ^
-+31 1 9 8 2 7 3 5 11 3 7 7 5 6 2 1 1 6 2 11 5 4 5 7 9 1 11 10 2 3 9 12 10 ^
-+28 0 11 1 4 1 12 10 5 5 1 7 2 3 10 7 12 9 2 8 2 6 10 5 12 12 4 9 2 13 ^
-+26 1 11 9 8 12 4 12 7 3 4 4 6 1 2 7 12 4 6 8 10 11 11 1 10 2 9 12 ^
-+28 0 10 9 7 10 1 10 9 12 7 10 7 6 6 5 3 2 3 1 3 12 1 4 13 3 9 7 9 8 ^
-+27 1 4 11 1 5 6 9 12 12 13 13 13 1 2 13 1 2 1 12 12 3 2 2 8 3 13 7 7 ^
-+29 0 6 5 5 2 4 2 11 4 4 13 9 13 7 3 12 8 3 7 6 4 12 3 1 8 11 1 6 13 6 ^
-+23 1 11 6 6 11 7 13 11 6 7 4 4 12 2 13 5 12 5 7 9 6 11 11 11 ^
-+23 0 11 13 11 7 4 3 6 12 13 10 11 5 12 13 11 6 1 1 4 7 13 10 7 ^
-+27 1 7 5 13 5 4 8 7 3 9 6 7 11 7 1 9 3 8 5 8 8 2 13 13 8 5 13 4 ^
-+30 1 2 5 8 4 13 10 6 4 2 6 1 1 12 4 13 5 10 4 10 8 5 7 1 5 5 12 4 8 6 12 ^
-+28 1 12 1 12 11 10 2 3 10 1 2 6 11 12 9 11 12 2 1 9 4 1 5 7 2 12 11 4 11 ^
-+29 0 6 8 7 8 8 12 2 7 4 12 11 5 5 3 5 13 4 11 8 8 9 2 2 1 6 2 8 6 12 ^
-+28 1 7 13 5 7 11 3 1 9 2 5 12 8 6 2 5 9 10 10 11 4 5 12 5 4 6 5 6 13 ^
-+25 1 14 4 8 2 9 11 7 4 3 2 8 14 6 14 7 13 5 5 14 6 5 11 6 6 13 ^
-+26 1 3 5 12 1 11 13 1 3 3 10 11 5 6 12 11 12 7 14 4 3 6 6 10 11 14 4 ^
-+27 0 4 2 3 10 7 12 13 8 8 12 10 13 1 7 10 2 7 2 13 10 2 3 3 6 4 13 14 ^
-+24 1 11 1 9 14 4 14 14 8 10 13 4 3 2 7 6 6 8 14 5 11 7 14 14 1 ^
-+22 1 13 13 10 9 13 8 14 9 3 14 3 11 9 9 12 13 2 10 1 5 8 12 ^
-+25 0 9 10 9 8 4 14 6 9 3 13 10 11 3 1 4 6 10 3 4 3 12 12 14 11 13 ^
-+26 1 11 8 11 7 8 10 9 12 11 6 10 6 3 9 9 1 7 5 6 7 7 12 4 5 8 11 ^
-+26 1 12 10 8 14 7 4 13 13 8 4 5 3 2 4 7 14 3 10 6 9 13 9 2 1 9 14 ^
-+28 0 6 12 2 4 7 8 11 10 12 2 14 3 1 1 1 12 5 13 9 12 5 9 10 5 1 12 10 8 ^
-+29 1 2 6 5 14 14 3 6 13 1 2 6 2 12 1 2 10 1 4 5 14 10 12 11 2 3 14 14 12 5 ^
-+30 1 5 2 3 5 11 12 3 7 12 7 9 8 3 3 14 10 5 2 9 3 8 6 11 8 7 8 1 6 12 7 ^
-+28 1 14 5 2 14 7 8 1 5 4 12 9 6 12 1 1 7 9 5 14 11 9 4 1 10 1 14 10 12 ^
-+27 0 7 2 8 5 3 14 8 9 4 6 11 3 11 6 12 1 7 14 9 14 6 10 6 1 8 14 10 ^
-+26 1 6 14 2 2 12 10 5 10 10 8 3 7 13 10 1 14 1 14 7 11 12 9 1 8 8 12 ^
-+30 0 6 13 5 13 3 5 8 8 8 2 5 5 4 2 13 14 7 2 12 12 3 3 5 7 5 11 3 7 13 7 ^
-+26 0 13 7 2 8 4 10 14 2 7 1 10 8 11 11 2 13 9 11 2 9 11 7 13 11 2 14 ^
-+31 1 7 7 8 5 13 4 1 12 14 1 9 11 3 5 3 13 11 7 3 2 9 1 3 13 6 3 10 12 1 13 3 ^
-+23 0 9 8 8 7 14 13 6 13 14 12 13 12 7 4 14 10 1 3 9 7 11 14 5 ^
-+27 1 1 10 4 12 4 11 5 13 13 4 12 13 7 12 12 4 13 6 2 7 5 2 8 7 13 12 3 ^
-+26 1 7 6 11 12 14 12 3 12 8 7 4 9 14 1 8 11 6 5 10 10 6 8 5 2 11 14 ^
-+33 1 1 11 1 5 3 8 1 12 14 5 1 3 7 2 3 9 3 4 14 4 4 10 8 5 14 1 11 12 12 10 4 13
-+2 ^
-+32 0 11 4 4 9 5 5 8 9 5 10 4 2 4 7 9 9 6 3 5 1 8 3 2 13 3 14 9 8 9 10 14 5 ^
-+28 0 12 9 5 8 7 2 14 12 3 8 14 6 6 4 7 5 7 10 7 11 10 1 9 6 7 12 8 9 ^
-+25 0 9 9 2 11 13 12 11 11 6 14 13 10 5 6 8 10 4 3 11 11 14 5 5 10 7 ^
-+30 0 13 9 14 11 4 8 12 9 5 9 1 2 9 13 12 6 1 14 11 10 7 8 6 1 4 3 2 2 2 13 ^
-+33 1 13 5 9 6 13 9 1 13 2 6 8 9 1 3 12 13 3 4 4 12 5 2 1 12 1 6 2 1 8 2 14 13 9
-+^
-+32 1 8 6 7 1 4 4 6 1 13 3 3 1 13 7 6 11 6 4 9 10 4 8 13 1 9 10 12 7 10 11 10 5 ^
-+30 0 12 6 6 3 4 13 1 4 11 10 2 6 14 6 9 12 6 2 2 11 9 13 4 7 9 14 2 11 8 7 ^
-+26 1 2 11 13 2 9 11 8 11 11 15 13 13 3 15 2 12 1 15 3 8 4 9 13 1 13 7 ^
-+32 1 9 6 1 2 2 1 15 3 15 1 10 1 4 11 14 14 6 10 2 5 9 10 10 9 1 2 14 10 12 1 1
-+15 ^
-+29 1 13 2 3 8 12 5 14 9 8 9 2 14 1 4 6 15 10 9 2 7 9 4 8 7 9 10 11 11 5 ^
-+34 1 12 2 7 2 12 8 2 8 6 3 12 4 4 10 1 14 12 11 5 15 3 3 3 14 13 2 2 3 8 2 1 8
-+8 8 ^
-+31 0 6 2 7 10 1 13 10 6 6 6 2 8 7 6 7 14 3 12 6 8 9 3 11 1 3 10 12 11 11 9 9 ^
-+24 1 13 15 4 7 11 13 10 14 14 13 4 11 5 6 11 8 12 13 9 1 10 9 10 7 ^
-+33 0 3 1 3 3 4 13 1 6 14 8 3 4 3 2 1 14 14 14 5 13 13 11 10 13 4 3 10 11 3 6 1
-+10 7 ^
-+28 0 7 9 13 9 15 2 4 12 10 10 4 12 3 8 5 6 13 1 6 15 1 8 9 6 12 11 7 14 ^
-+32 1 3 1 13 6 4 1 9 4 5 7 1 8 8 11 10 5 15 14 2 8 14 9 7 12 2 4 13 7 4 3 9 14 ^
-+31 1 14 12 13 8 4 12 2 6 5 12 9 3 11 8 5 13 5 10 5 2 3 7 12 14 4 1 7 3 6 9 9 ^
-+32 1 10 15 7 2 13 5 7 2 5 2 10 7 11 5 5 9 8 2 9 3 3 6 3 13 10 3 5 7 15 11 10 12
-+^
-+38 0 2 3 7 1 6 3 3 12 5 2 9 4 5 11 2 1 7 6 14 7 14 10 4 11 6 3 11 2 10 6 4 8 1
-+4 9 4 15 4 ^
-+27 0 7 7 4 14 2 3 14 15 10 7 12 7 5 8 7 15 15 14 10 2 3 1 10 12 15 9 9 ^
-+31 1 15 3 9 9 5 4 2 6 14 4 9 5 12 8 1 6 1 4 8 7 10 14 3 10 14 8 11 9 8 10 9 ^
-+28 0 14 11 8 3 5 5 7 2 11 4 4 4 6 14 13 10 14 10 3 9 6 9 7 5 10 15 15 15 ^
-+30 1 8 13 4 2 13 6 4 7 4 4 15 2 2 12 13 3 14 12 7 11 6 2 14 2 6 6 9 14 13 12 ^
-+27 1 13 14 15 12 14 5 14 15 11 4 1 1 9 5 13 10 6 5 5 6 14 13 1 5 3 14 13 ^
-+29 0 4 2 13 12 15 7 3 15 5 1 6 7 6 13 1 14 11 9 5 15 6 13 3 6 11 7 15 8 9 ^
-+31 0 5 4 4 14 3 13 8 13 3 7 13 7 9 12 3 11 15 11 5 14 1 3 4 10 12 7 12 1 2 13 4
-+^
-+28 1 12 7 13 14 7 7 1 9 13 8 5 14 2 5 9 9 15 9 13 7 8 9 8 1 12 3 9 15 ^
-+34 1 6 12 4 14 12 5 3 15 4 4 6 8 2 11 8 4 2 5 1 15 15 1 15 2 11 4 10 9 4 7 3 2
-+15 6 ^
-+26 0 14 5 6 5 11 12 14 12 12 11 15 2 14 9 15 1 7 12 11 12 13 14 1 1 12 5 ^
-+32 0 2 2 4 5 2 11 12 5 4 12 9 14 5 5 8 6 2 15 15 6 13 11 3 5 15 5 11 3 12 7 10
-+8 ^
-+26 1 2 15 14 9 14 7 6 15 9 3 4 8 8 12 14 2 9 11 14 6 11 15 10 8 14 8 ^
-+34 1 15 7 4 5 10 1 13 7 1 1 8 3 13 11 2 8 15 11 12 6 6 1 3 2 2 11 3 13 9 10 3 6
-+12 15 ^
-+25 0 15 7 10 2 10 15 5 10 13 12 8 15 3 1 11 14 15 8 15 12 9 6 8 13 13 ^
-+27 0 10 8 13 10 15 13 5 8 4 10 10 6 7 13 6 12 12 9 12 2 5 10 12 10 8 15 6 ^
-+28 0 5 3 8 12 15 8 14 15 9 12 12 3 10 13 6 11 10 4 13 14 8 9 1 8 1 5 11 12 ^
-+29 0 9 12 4 13 15 5 9 11 7 14 11 1 11 7 8 8 11 1 13 15 12 1 5 8 3 8 10 7 14 ^
-+30 0 1 5 13 12 14 5 3 6 4 12 15 6 6 10 11 13 9 1 11 6 10 3 7 14 4 14 11 7 8 13 ^
-+34 1 1 12 5 1 7 4 6 7 5 11 1 4 7 12 10 10 8 15 13 4 11 15 11 6 9 1 2 15 5 1 5
-+12 6 13 ^
-+35 1 12 15 4 11 13 3 6 5 10 8 1 3 9 3 11 1 2 16 12 10 6 1 9 1 16 5 6 15 1 12 4
-+4 2 15 4 ^
-+27 0 15 11 15 5 11 9 7 15 16 6 16 12 3 2 10 16 5 5 7 1 7 11 13 7 9 11 12 ^
-+31 1 5 5 5 4 13 13 14 4 7 12 6 4 8 2 9 9 13 13 3 3 6 7 16 7 6 15 5 8 15 6 15 ^
-+30 1 6 16 15 11 14 14 4 7 10 3 4 10 3 6 7 14 4 6 6 5 2 7 8 16 2 12 16 10 14 7 ^
-+36 1 2 3 7 14 6 9 4 4 5 9 7 12 3 9 2 5 1 3 10 11 11 6 12 7 1 7 12 2 1 2 8 12 15
-+16 9 13 ^
-+34 1 6 3 12 11 16 15 8 8 8 14 13 7 7 8 2 7 6 2 2 14 7 1 4 2 4 11 11 5 7 2 12 1
-+14 11 ^
-+29 0 12 11 2 9 8 5 6 14 10 12 5 11 5 3 1 13 15 9 12 11 13 4 14 5 16 3 5 13 15 ^
-+30 1 5 16 11 2 6 13 16 3 6 4 9 10 9 8 6 14 8 9 5 13 6 5 14 2 8 15 8 7 14 11 ^
-+28 1 14 10 13 13 11 10 13 9 8 4 11 14 11 6 10 10 1 9 13 16 5 3 4 7 9 12 10 8 ^
-+36 1 10 15 12 8 8 10 13 5 6 11 4 6 2 3 5 6 11 1 1 8 6 13 15 6 3 15 5 10 1 6 2 5
-+2 11 10 10 ^
-+31 1 4 14 7 2 14 3 1 12 7 15 13 1 5 9 8 3 3 14 12 13 2 15 12 7 16 12 3 8 11 5
-+15 ^
-+34 0 10 2 10 16 4 16 7 8 1 16 6 14 9 5 12 16 8 9 4 4 4 1 7 13 10 1 7 10 5 7 4 1
-+5 15 ^
-+30 0 16 3 8 7 3 8 8 11 8 13 4 16 8 16 1 4 16 11 4 12 1 14 5 1 16 11 8 14 12 9 ^
-+33 0 7 9 9 16 11 7 6 1 11 14 12 14 10 9 11 8 11 7 5 10 15 2 6 9 3 9 4 2 1 1 9
-+14 6 ^
-+32 0 5 8 14 15 4 1 6 1 10 8 1 15 15 3 10 7 8 10 12 4 3 11 15 8 5 3 3 16 15 7 14
-+13 ^
-+36 0 3 10 12 2 11 9 2 1 4 3 8 10 14 2 11 3 2 4 15 14 5 2 8 16 16 1 5 7 5 9 5 15
-+9 11 3 14 ^
-+31 1 5 4 14 4 8 3 3 1 10 4 15 15 13 2 13 9 7 13 11 9 1 15 15 15 16 7 7 6 5 13 9
-+^
-+30 0 14 16 12 1 11 11 7 3 7 3 3 13 4 13 14 5 15 12 5 14 16 14 4 5 9 6 6 3 16 11
-+^
-+28 1 10 16 10 14 13 6 16 14 3 14 15 7 13 12 4 1 8 4 10 6 1 13 6 14 11 3 16 14 ^
-+33 0 15 11 13 8 11 1 15 2 10 9 9 14 8 13 2 13 8 1 2 1 3 12 8 5 4 11 10 14 8 9 4
-+5 16 ^
-+34 1 12 12 6 7 13 13 12 1 13 14 1 1 6 3 13 2 16 3 1 16 9 9 15 3 13 1 8 3 2 6 12
-+8 9 13 ^
-+27 0 11 12 15 14 12 10 8 15 9 15 2 7 5 11 8 9 7 16 6 15 4 15 7 11 15 4 14 ^
-+29 1 9 1 14 7 4 14 16 11 10 11 12 14 6 12 11 15 7 14 3 15 6 1 12 5 12 13 3 6 14
-+^
-+28 0 6 10 7 7 9 10 7 11 12 16 9 6 9 14 10 10 2 7 4 15 16 13 11 8 10 15 10 15 ^
-+32 1 8 12 1 10 3 7 15 14 9 16 14 1 15 3 14 9 2 2 12 14 7 3 5 14 5 15 10 2 14 1
-+15 8 ^
-+33 0 9 16 10 16 6 13 1 6 2 8 13 5 7 2 15 11 12 6 8 7 1 5 8 13 9 4 8 12 9 15 1
-+10 13 ^
-+30 0 10 4 16 4 13 12 2 4 14 6 11 3 15 8 4 12 3 11 16 16 16 2 13 7 10 2 13 10 15
-+10 ^
-+33 1 16 2 15 10 4 1 13 12 12 9 12 7 16 4 12 4 2 16 4 9 16 8 2 6 15 2 3 4 9 12 6
-+8 12 ^
-+34 1 13 11 11 4 9 13 14 2 9 6 8 6 10 11 9 3 12 9 13 4 10 3 5 1 14 11 11 16 1 2
-+2 11 6 14 ^
-+33 1 15 12 6 5 16 2 14 2 10 12 2 5 5 6 10 13 12 3 10 8 16 9 5 12 15 4 11 13 3 6
-+5 10 8 ^
-+35 1 1 3 9 3 11 1 2 16 12 10 6 1 9 1 16 5 6 15 1 12 4 4 2 15 13 15 11 15 5 11 9
-+7 15 16 4 ^
-+36 0 16 12 3 2 10 16 5 5 7 1 7 11 13 7 9 11 2 5 5 5 4 13 13 14 4 7 12 6 4 8 2 9
-+9 13 13 4 ^
-+35 0 3 6 7 16 7 6 15 5 8 15 6 4 6 16 15 11 14 14 4 7 10 3 4 10 3 6 7 14 4 6 6 5
-+2 7 16 ^
-+31 0 7 4 8 17 16 16 11 14 2 10 14 15 10 9 1 14 10 14 6 6 16 3 2 3 8 3 12 8 11
-+17 2 ^
-+30 1 9 7 16 14 4 11 15 5 13 9 5 12 17 17 13 8 2 6 8 16 1 12 5 17 2 9 8 10 13 6 ^
-+27 0 11 17 12 5 14 9 11 9 11 4 11 13 16 6 10 5 8 3 17 16 14 1 15 15 15 6 17 ^
-+29 1 2 11 6 13 11 13 4 6 7 11 11 12 16 13 1 16 16 14 16 2 4 16 11 6 15 7 4 17
-+11 ^
-+32 0 5 7 6 3 14 16 5 17 11 13 1 1 14 13 3 6 14 5 17 5 4 8 14 3 16 7 13 4 14 8 9
-+17 ^
-+31 1 8 12 8 15 9 6 6 1 5 13 16 5 8 4 6 10 6 11 16 17 15 15 12 4 13 5 3 4 10 15
-+16 ^
-+33 0 7 15 16 12 12 11 8 13 14 5 8 1 11 10 9 3 14 3 1 9 6 15 12 16 4 5 9 7 1 9 4
-+8 17 ^
-+36 1 7 9 16 11 11 6 13 7 1 7 8 1 14 12 2 7 4 5 15 16 12 3 1 6 11 4 15 8 9 9 2 1
-+13 2 14 14 ^
-+29 1 6 8 8 15 13 13 10 2 16 12 17 6 7 14 13 12 13 3 14 12 12 2 15 2 5 15 10 7
-+15 ^
-+38 1 5 15 7 8 10 10 1 11 2 4 3 11 11 3 5 2 3 11 5 12 12 8 6 2 17 15 6 16 15 4 3
-+14 6 3 2 10 5 15 ^
-+30 0 12 11 15 14 2 16 14 7 6 15 9 3 11 8 8 5 16 2 16 2 16 6 9 6 12 10 16 7 15
-+10 ^
-+36 0 11 5 3 16 1 15 7 10 17 10 10 13 2 2 17 6 2 5 6 6 10 12 2 9 11 12 6 1 1 8
-+12 2 6 16 12 16 ^
-+30 1 10 17 5 1 6 14 17 8 12 10 11 16 15 1 8 3 9 13 7 7 16 8 13 11 10 8 15 3 15
-+12 ^
-+31 1 14 8 4 12 1 6 5 13 15 3 5 11 14 11 14 17 5 10 17 7 8 13 5 12 15 3 6 17 7
-+17 7 ^
-+31 0 12 3 10 10 4 13 13 8 11 13 7 17 11 1 10 1 5 11 11 9 14 13 15 8 14 2 7 16
-+11 8 15 ^
-+32 1 7 16 17 17 4 1 13 15 5 1 5 6 14 15 1 5 1 9 9 17 12 13 12 7 12 3 7 15 4 16
-+12 13 ^
-+36 0 8 17 1 11 4 10 2 6 10 3 16 16 2 7 13 9 15 7 17 14 3 10 16 13 6 7 5 2 1 4
-+16 3 10 1 15 5 ^
-+32 0 4 6 4 15 11 4 2 17 9 15 5 10 7 12 15 16 15 17 12 14 9 2 13 4 9 2 4 15 2 11
-+9 16 ^
-+29 0 4 4 3 17 2 14 17 17 1 17 13 11 15 17 4 9 15 8 11 16 9 10 8 9 12 15 1 17 11
-+^
-+35 0 16 4 2 14 14 15 1 2 12 9 1 10 16 10 11 7 1 12 17 8 2 15 11 1 7 17 12 7 3 7
-+6 9 9 14 6 ^
-+36 0 2 15 17 10 11 9 5 9 4 17 16 3 11 2 10 12 11 5 3 8 17 15 3 3 4 7 2 1 10 7
-+14 4 16 6 12 8 ^
-+36 1 12 14 6 9 3 17 11 10 6 8 14 6 11 7 10 8 6 17 4 4 9 8 2 8 14 8 7 14 1 3 6 8
-+11 10 17 1 ^
-+39 1 12 14 9 4 11 7 6 6 13 14 2 13 1 14 9 7 7 15 2 2 5 15 13 17 3 15 16 9 1 1 2
-+3 2 12 1 3 3 13 9 ^
-+34 0 13 10 15 5 8 10 15 10 8 7 5 5 14 4 13 11 12 4 4 12 10 13 12 4 10 3 3 7 9
-+13 16 9 17 1 ^
-+36 0 4 12 1 9 12 13 5 10 1 3 15 4 1 13 17 1 8 9 6 12 4 7 7 10 17 13 17 6 17 9 6
-+9 3 5 17 10 ^
-+34 0 1 4 10 12 17 14 11 8 5 16 5 5 2 13 13 16 9 13 10 9 9 5 3 13 6 4 3 9 15 14
-+14 7 3 16 ^
-+38 1 9 17 3 6 5 16 10 14 9 1 16 7 3 5 4 17 14 7 12 6 2 8 8 17 7 2 4 5 7 12 2 1
-+7 11 3 14 9 15 ^
-+41 0 2 12 3 4 1 4 1 16 10 5 16 8 7 2 10 3 5 9 16 8 16 13 3 12 5 5 11 2 2 7 4 2
-+8 16 4 14 5 14 10 4 17 ^
-+36 0 6 1 2 7 1 15 13 1 17 4 7 4 8 17 16 16 11 14 2 10 14 15 10 9 1 14 10 14 6 6
-+16 3 2 3 8 14 ^
-+32 1 12 8 11 17 3 9 7 16 14 4 11 15 5 13 9 5 12 17 17 13 8 2 6 8 16 1 12 5 17 2
-+9 14 ^
-+29 0 10 13 14 11 17 12 5 14 9 11 9 11 4 11 13 16 6 10 5 8 3 17 16 14 1 15 15 15
-+14 ^
-+32 0 13 2 11 6 13 11 13 4 6 7 11 11 12 16 13 1 16 16 14 16 2 4 16 11 6 15 7 4
-+17 6 5 15 ^
-+35 1 6 3 14 16 5 17 11 13 1 1 14 13 3 6 14 5 17 5 4 8 14 3 16 7 13 4 14 8 9 3 8
-+12 8 15 11 ^
-+33 1 6 6 1 5 13 16 5 8 4 6 10 6 11 16 17 15 15 12 4 13 5 3 4 10 15 12 7 15 16
-+12 12 11 11 ^
-+40 0 13 14 5 8 1 11 10 9 3 14 3 1 9 6 15 12 16 4 5 9 7 1 9 4 8 5 7 9 16 11 11 6
-+13 7 1 7 8 1 14 10 ^
-+34 0 2 10 15 10 14 8 18 9 9 12 12 3 13 12 6 4 9 17 13 13 5 7 3 2 1 17 14 4 16 6
-+13 1 13 13 ^
-+35 1 6 10 1 3 18 3 11 7 9 5 7 11 17 1 9 16 5 15 10 17 3 8 15 17 8 15 11 3 15 17
-+11 1 1 4 15 ^
-+36 1 14 18 4 2 18 8 15 6 4 6 3 15 11 16 10 17 17 9 6 3 2 6 16 4 9 12 6 8 1 11 3
-+2 12 2 14 16 ^
-+37 0 4 1 5 11 16 18 16 8 11 15 2 18 7 5 14 5 15 13 3 3 5 4 3 11 4 4 5 10 3 12
-+17 1 4 17 10 10 17 ^
-+35 0 1 3 4 2 1 12 5 14 11 10 4 6 14 9 1 5 8 2 9 15 12 13 7 16 2 13 17 15 9 18
-+15 9 13 16 17 ^
-+34 1 18 10 4 11 13 9 6 1 17 6 8 6 5 11 5 14 16 9 13 11 10 9 15 4 14 7 14 3 1 15
-+5 5 18 16 ^
-+34 0 13 8 13 16 5 17 5 10 1 8 8 12 6 13 18 9 6 17 3 16 2 8 9 8 7 2 14 14 8 10
-+13 9 11 11 ^
-+40 0 7 11 4 6 9 10 11 12 2 14 1 13 1 7 1 15 7 9 8 2 1 4 9 14 17 8 17 15 3 4 15
-+15 2 2 3 16 13 2 9 12 ^
-+33 0 14 6 6 5 2 13 4 16 11 3 10 18 2 15 5 9 4 8 4 18 18 17 18 3 14 12 9 11 15
-+16 1 9 16 ^
-+32 1 18 5 10 6 7 17 7 12 3 13 8 12 3 8 9 3 17 12 8 18 6 14 3 6 14 14 10 14 13
-+17 18 8 ^
-+36 1 18 12 17 9 17 2 12 5 9 12 1 18 10 5 5 2 18 3 6 16 18 3 1 2 10 15 2 5 8 16
-+10 14 3 9 8 13 ^
-+33 1 16 14 1 16 15 16 17 4 12 12 16 5 3 9 14 5 7 17 12 11 12 18 14 2 7 7 15 8 3
-+5 1 8 13 ^
-+34 1 7 6 7 14 9 15 15 18 16 3 10 5 16 6 8 11 4 1 10 1 16 4 12 17 15 14 8 5 4 6
-+4 17 16 16 ^
-+38 0 4 5 18 18 12 9 3 9 6 9 7 6 10 15 4 9 17 5 17 5 6 1 6 2 8 17 7 7 4 4 13 16
-+3 4 10 16 12 13 ^
-+33 0 16 7 18 3 3 11 9 13 14 15 18 2 12 10 3 15 3 1 10 6 15 13 17 13 5 9 7 11 9
-+5 18 15 12 ^
-+33 1 16 11 1 6 18 13 8 1 18 8 1 5 13 1 18 5 15 15 16 12 13 2 17 12 14 17 8 1 10
-+12 10 4 18 ^
-+34 0 5 6 18 18 7 10 13 14 10 12 7 4 10 8 16 16 15 5 13 14 4 14 2 4 12 6 11 5 17
-+8 5 1 14 16 ^
-+31 1 17 9 11 2 11 11 3 13 13 11 12 13 5 12 12 11 6 13 4 18 15 12 18 6 6 7 15 13
-+12 14 16 ^
-+38 1 4 11 2 5 6 12 10 2 7 15 11 8 14 7 16 16 1 4 3 9 14 16 3 18 1 7 17 1 7 3 16
-+17 6 16 12 5 3 17 ^
-+40 1 10 15 18 10 8 10 2 5 11 2 7 3 5 6 7 1 12 2 9 2 4 15 1 11 11 17 3 3 16 8 3
-+11 18 16 11 6 15 8 8 13 ^
-+40 1 10 3 17 7 10 18 13 14 8 7 8 14 2 2 8 6 3 7 5 6 9 5 12 10 7 6 5 16 4 14 2
-+15 3 15 9 15 1 9 7 12 ^
-+35 0 14 15 12 7 2 16 18 8 18 1 13 12 1 1 14 14 13 3 14 7 2 10 10 11 14 3 12 5
-+13 6 17 14 1 11 13 ^
-+34 0 7 12 8 12 17 17 18 17 13 2 4 7 5 1 15 7 14 17 11 6 10 9 18 9 14 13 3 8 4
-+13 8 7 13 7 ^
-+35 0 4 16 8 17 10 2 13 10 2 2 6 2 3 18 17 2 17 4 18 7 16 18 14 4 11 7 4 15 17 6
-+11 11 14 17 4 ^
-+37 0 10 17 16 13 15 14 6 1 14 11 8 16 6 2 16 13 7 8 6 2 15 1 9 12 4 4 11 13 7 2
-+11 9 18 4 5 4 18 ^
-+39 0 2 14 9 9 1 8 13 11 15 8 5 9 10 16 9 2 7 1 1 17 13 6 11 10 8 5 12 15 6 15
-+10 12 4 18 1 2 8 11 15 ^
-+32 1 16 10 12 18 11 16 12 11 17 17 4 7 13 7 10 7 10 6 1 12 7 18 11 18 2 10 15
-+10 14 8 18 2 ^
-+40 1 9 12 12 3 13 12 6 4 9 17 13 13 5 7 3 2 1 17 14 4 16 6 13 1 13 6 6 10 1 3
-+18 3 11 7 9 5 7 11 17 12 ^
-+36 1 9 16 5 15 10 17 3 8 15 17 8 15 11 3 15 17 11 1 1 4 3 14 18 4 2 18 8 15 6 4
-+6 3 15 11 16 8 ^
-+39 1 17 17 9 6 3 2 6 16 4 9 12 6 8 1 11 3 2 12 2 14 12 4 1 5 11 16 18 16 8 11
-+15 2 18 7 5 14 5 15 10 ^
-+47 1 3 3 5 4 3 11 4 4 5 10 3 12 17 1 4 17 10 10 9 1 3 4 2 1 12 5 14 11 10 4 6
-+14 9 1 5 8 2 9 15 12 13 7 16 2 13 17 3 ^
-+34 1 9 18 15 9 13 16 18 10 4 11 13 9 6 1 17 6 8 6 5 11 5 14 16 9 13 11 10 9 15
-+4 14 7 14 9 ^
-+37 1 1 15 5 5 18 13 13 8 13 16 5 17 5 10 1 8 8 12 6 13 18 9 6 17 3 16 2 8 9 8 7
-+2 14 14 8 10 13 ^
-+42 0 9 11 10 7 11 4 6 9 10 11 12 2 14 1 13 1 7 1 15 7 9 8 2 1 4 9 14 17 8 17 15
-+3 4 15 15 2 2 3 16 13 2 17 ^
-+36 0 16 14 6 6 5 2 13 4 16 11 3 10 18 2 15 5 9 4 8 4 18 18 17 18 3 14 12 9 11
-+15 16 1 9 2 18 6 ^
-+33 1 10 6 7 17 7 12 3 13 8 12 3 8 9 3 17 12 8 18 6 14 3 6 14 14 10 14 13 17 18
-+14 18 12 13 ^
-+39 1 9 17 2 12 5 9 12 1 18 10 5 5 2 18 3 6 16 18 3 1 2 10 15 2 5 8 16 10 14 3 9
-+8 10 16 14 1 16 15 14 ^
-+30 1 17 19 5 7 14 4 11 3 6 18 13 7 18 18 19 19 13 9 10 19 14 12 4 15 15 18 2 10
-+7 15 ^
-+34 1 2 13 8 19 15 1 11 14 7 7 17 6 16 4 16 17 2 18 12 5 14 19 17 1 8 12 6 6 6
-+19 13 10 16 5 ^
-+36 1 14 13 6 16 14 15 4 13 15 4 4 11 4 10 3 17 4 19 6 17 14 3 2 16 1 14 16 5 17
-+8 1 1 19 13 12 12 ^
-+34 0 17 11 13 5 19 11 18 19 1 3 12 11 8 4 11 13 17 3 8 9 4 5 12 15 12 6 7 16 16
-+12 1 13 17 15 ^
-+40 0 18 9 3 16 2 16 4 19 6 6 18 3 13 1 5 3 2 6 15 11 6 4 14 15 15 9 13 8 1 9 15
-+2 7 5 11 5 12 7 16 15 ^
-+37 0 18 4 3 1 4 11 15 7 6 9 1 14 7 1 17 17 16 14 13 14 12 14 9 12 11 18 7 14 3
-+1 6 1 15 8 15 19 9 ^
-+32 0 3 9 9 7 7 10 12 13 7 11 12 16 9 9 9 17 13 13 2 17 10 4 18 17 19 16 11 11
-+13 18 13 12 ^
-+35 0 8 15 18 10 6 10 18 17 9 2 14 1 17 18 6 14 12 5 5 15 17 10 3 8 8 1 10 5 1
-+18 18 9 16 10 14 ^
-+38 1 6 16 1 6 3 5 8 16 8 7 5 18 11 15 17 6 11 10 4 8 14 16 6 7 8 12 12 18 1 10
-+4 7 1 19 7 19 15 12 ^
-+34 0 1 14 6 11 18 5 4 12 6 14 2 19 2 5 13 10 10 2 16 10 18 16 19 2 15 10 7 18
-+16 17 15 15 9 13 ^
-+38 1 10 16 4 15 7 5 19 1 15 16 11 19 9 18 2 4 6 12 9 8 7 13 14 11 4 12 13 5 9 6
-+5 6 16 11 9 3 15 6 ^
-+40 0 16 1 13 6 8 18 11 11 2 1 2 2 14 9 13 1 15 6 5 16 19 14 19 7 18 5 2 2 3 13
-+13 12 13 11 2 12 2 12 18 5 ^
-+35 0 7 8 13 6 9 8 17 10 11 1 9 14 4 19 19 3 15 13 9 18 12 17 1 16 8 9 15 1 12 4
-+4 19 18 13 11 ^
-+36 1 14 18 8 14 9 3 4 18 16 9 19 12 3 17 5 10 16 5 8 4 4 10 14 13 4 9 11 19 8 8
-+5 1 13 16 14 13 ^
-+41 1 10 15 3 4 8 2 12 9 16 3 16 3 6 17 3 10 19 7 6 1 5 11 18 9 4 6 2 15 11 17
-+17 17 4 10 13 3 7 10 3 9 14 ^
-+42 0 7 9 3 3 8 19 10 8 2 19 12 19 13 6 19 3 4 17 6 9 1 7 2 9 7 18 6 15 2 2 4 3
-+10 11 11 6 12 10 18 4 12 10 ^
-+35 1 4 5 11 12 15 19 12 10 6 15 14 19 18 11 8 11 17 16 7 7 11 2 10 6 19 5 14 7
-+1 7 3 19 4 17 15 ^
-+36 1 5 10 2 18 1 17 8 12 17 2 9 8 8 3 14 10 15 2 14 8 3 1 16 18 12 18 11 16 7
-+17 5 19 2 19 12 19 ^
-+37 0 16 14 2 9 16 2 6 6 7 9 10 9 11 9 14 11 15 5 16 9 2 17 2 8 15 8 4 3 14 14
-+16 16 13 11 10 16 14 ^
-+40 0 11 7 14 14 14 6 10 10 1 6 13 19 5 6 4 7 12 12 10 5 10 15 15 8 5 13 17 13 5
-+6 14 1 9 2 6 5 17 9 11 13 ^
-+38 0 18 8 6 13 15 3 3 15 5 13 18 3 2 5 5 14 7 13 4 17 7 2 17 3 18 15 7 15 16 18
-+5 12 8 6 3 17 12 13 ^
-+38 1 19 15 9 7 17 16 15 3 11 11 5 2 13 19 16 2 4 16 7 8 1 2 9 17 12 3 5 18 19
-+11 17 9 1 4 1 18 10 10 ^
-+41 1 13 1 7 13 5 7 4 1 8 13 16 3 5 7 6 8 8 14 8 13 7 19 8 16 18 4 2 8 7 12 4 14
-+5 1 3 19 17 11 14 15 19 ^
-+39 0 10 9 12 19 11 10 3 18 14 17 18 17 7 12 14 8 11 7 2 10 17 15 5 3 12 3 12 1
-+2 1 1 12 14 10 2 8 17 18 2 ^
-+45 1 4 9 4 16 5 18 1 1 10 10 11 3 10 12 1 3 11 1 11 5 3 3 16 15 10 17 14 15 6
-+13 12 2 3 14 3 9 19 4 4 8 10 14 5 11 9 ^
-+35 0 2 7 15 14 8 2 11 19 19 4 5 10 8 9 5 15 9 17 19 5 7 14 4 11 3 6 18 13 7 18
-+18 19 19 13 13 ^
-+35 1 10 19 14 12 4 15 15 18 2 10 7 9 2 13 8 19 15 1 11 14 7 7 17 6 16 4 16 17 2
-+18 12 5 14 19 9 ^
-+38 1 1 8 12 6 6 6 19 13 10 16 13 14 13 6 16 14 15 4 13 15 4 4 11 4 10 3 17 4 19
-+6 17 14 3 2 16 1 14 19 ^
-+38 0 5 17 8 1 1 19 13 12 12 17 11 13 5 19 11 18 19 1 3 12 11 8 4 11 13 17 3 8 9
-+4 5 12 15 12 6 7 16 11 ^
-+43 0 12 1 13 17 4 18 9 3 16 2 16 4 19 6 6 18 3 13 1 5 3 2 6 15 11 6 4 14 15 15
-+9 13 8 1 9 15 2 7 5 11 5 12 16 ^
-+39 1 16 6 18 4 3 1 4 11 15 7 6 9 1 14 7 1 17 17 16 14 13 14 12 14 9 12 11 18 7
-+14 3 1 6 1 15 8 15 19 12 ^
-+35 0 3 9 9 7 7 10 12 13 7 11 12 16 9 9 9 17 13 13 2 17 10 4 18 17 19 16 11 11
-+13 18 13 8 8 15 6 ^
-+40 0 10 6 10 18 17 9 2 14 1 17 18 6 14 12 5 5 15 17 10 3 8 8 1 10 5 1 18 18 9
-+16 10 19 6 16 1 6 3 5 8 16 ^
-+40 0 8 7 5 18 11 15 17 6 11 10 4 8 14 16 6 7 8 12 12 18 1 10 4 7 1 19 7 19 15 2
-+1 14 6 11 18 5 4 12 6 19 ^
-+35 0 2 19 2 5 13 10 10 2 16 10 18 16 19 2 15 10 7 18 16 17 15 15 9 15 10 16 4
-+15 7 5 19 1 15 16 6 ^
-+43 1 19 9 18 2 4 6 12 9 8 7 13 14 11 4 12 13 5 9 6 5 6 16 11 9 3 15 12 16 1 13
-+6 8 18 11 11 2 1 2 2 14 9 13 11 ^
-+39 1 15 6 5 16 19 14 19 7 18 5 2 2 3 13 13 12 13 11 2 12 2 12 18 7 8 13 6 9 8
-+17 10 11 1 9 14 4 19 19 3 ^
-+34 1 15 13 9 18 12 17 1 16 8 9 15 1 12 4 4 19 18 13 15 14 18 8 14 9 3 4 18 16 9
-+19 12 3 17 15 ^
-+45 1 10 16 5 8 4 4 10 14 13 4 9 11 19 8 8 5 1 13 16 14 1 10 15 3 4 8 2 12 9 16
-+3 16 3 6 17 3 10 19 7 6 1 5 11 18 2 ^
-+43 1 15 4 13 14 3 4 1 3 1 5 11 4 9 7 20 8 15 4 16 7 19 11 1 11 2 13 13 11 12 13
-+15 12 1 5 13 3 8 15 12 8 16 16 6 ^
-+44 0 5 13 12 14 5 3 1 4 16 12 20 1 6 15 11 18 4 17 16 6 10 3 2 9 9 14 6 2 8 6 7
-+10 17 12 20 6 7 5 16 1 4 2 17 9 ^
-+38 0 15 8 20 18 20 11 15 11 11 9 6 2 15 5 17 12 1 9 1 3 5 11 7 2 2 6 18 2 9 11
-+8 16 11 16 15 18 18 18 ^
-+35 1 20 2 17 17 10 8 13 20 4 18 6 18 9 4 1 1 18 5 2 17 15 16 19 15 1 10 17 16 4
-+16 14 14 11 15 10 ^
-+38 0 5 9 15 10 9 17 18 14 15 12 6 1 16 8 18 8 13 12 10 14 14 13 9 2 14 17 9 1
-+20 10 4 2 12 9 4 13 16 5 ^
-+36 0 14 10 11 16 17 12 18 12 7 17 8 7 3 1 3 17 4 9 5 17 14 17 11 5 20 19 8 19
-+14 13 2 18 3 3 18 13 ^
-+41 1 13 8 14 6 18 7 10 1 13 10 11 11 16 1 2 8 7 1 7 14 8 17 6 8 4 3 11 17 3 5 7
-+16 11 11 14 7 13 20 20 7 20 ^
-+40 1 13 15 14 16 14 8 9 16 5 1 6 3 17 18 16 9 1 15 9 10 9 19 1 3 3 20 11 13 17
-+1 19 8 3 4 3 7 1 14 19 17 ^
-+37 1 18 13 11 5 18 4 19 10 6 19 11 17 10 10 7 9 13 16 9 10 18 4 12 5 16 5 20 12
-+3 8 10 1 18 1 6 20 14 ^
-+36 0 8 9 6 12 11 7 7 3 17 13 6 20 17 9 20 16 10 12 17 8 11 8 11 10 5 10 14 18 8
-+19 9 12 12 2 20 12 ^
-+38 0 12 16 20 3 9 9 19 17 13 13 4 17 2 11 7 14 3 6 16 13 10 13 5 16 10 2 8 2 17
-+19 4 17 7 19 6 9 15 7 ^
-+41 1 20 7 2 18 5 7 18 5 2 15 7 11 10 9 3 2 14 19 3 11 8 18 15 5 3 5 12 15 16 10
-+17 7 19 16 2 1 16 6 3 19 10 ^
-+46 0 5 18 9 9 11 2 1 12 11 14 12 14 10 4 11 6 8 16 7 5 11 20 8 17 4 14 4 15 3 2
-+2 4 3 2 3 14 15 10 2 12 7 3 7 20 20 5 ^
-+41 1 10 2 3 1 10 12 15 14 11 20 3 16 14 9 4 18 1 19 20 9 5 12 13 6 6 1 9 13 7
-+15 9 8 5 19 3 16 9 8 10 20 8 ^
-+39 1 11 13 19 5 7 16 18 16 4 4 4 6 9 13 10 19 15 3 14 6 4 12 10 15 15 4 8 13 13
-+9 18 13 6 4 7 20 4 20 7 ^
-+31 1 18 18 12 16 13 19 19 5 7 2 6 11 18 9 18 6 11 14 14 18 10 13 19 20 17 11 14
-+5 19 20 13 ^
-+46 1 20 1 1 4 13 10 6 5 6 19 18 1 3 9 14 20 7 18 7 15 2 3 15 5 1 1 2 6 13 1 19
-+6 14 16 5 15 11 13 3 6 11 2 20 8 1 20 ^
-+37 0 4 20 19 3 18 3 8 19 7 8 12 14 12 19 11 15 6 19 1 19 4 10 16 17 7 17 1 2 13
-+18 12 2 18 19 2 7 15 ^
-+42 1 9 18 8 5 14 2 5 4 4 20 14 13 7 8 14 8 1 7 19 9 7 11 12 4 19 12 10 19 20 4
-+4 1 8 2 16 16 8 20 2 1 20 13 ^
-+37 1 1 15 7 6 20 10 14 9 12 19 18 20 6 14 6 5 6 17 14 12 12 16 4 2 19 14 15 17
-+7 12 11 12 8 14 1 17 7 ^
-+39 0 15 18 2 4 10 18 11 17 5 9 17 4 19 5 5 8 6 2 20 15 6 5 18 11 3 10 20 10 16
-+3 12 7 5 14 18 15 14 9 14 ^
-+44 0 14 7 6 15 9 3 4 8 8 12 19 2 9 16 19 6 16 20 5 3 19 7 4 7 4 5 10 5 1 18 7
-+17 6 3 3 13 16 2 3 20 16 12 6 16 ^
-+38 0 17 19 2 2 11 19 13 4 15 8 1 12 9 20 2 5 2 10 20 5 15 13 7 13 15 19 17 11 9
-+15 8 15 17 9 6 16 8 13 ^
-+38 1 18 10 8 8 10 15 13 8 4 5 15 6 12 13 1 17 12 4 7 18 10 12 10 3 15 20 5 19 8
-+17 20 13 14 10 9 12 17 5 ^
-+46 1 10 18 6 6 15 4 13 14 3 4 1 3 1 5 11 4 9 7 20 8 15 4 16 7 19 11 1 11 2 13
-+13 11 12 13 15 12 1 5 13 3 8 15 12 8 16 6 ^
-+45 1 17 5 13 12 14 5 3 1 4 16 12 20 1 6 15 11 18 4 17 16 6 10 3 2 9 9 14 6 2 8
-+6 7 10 17 12 20 6 7 5 16 1 4 2 17 16 ^
-+40 0 15 8 20 18 20 11 15 11 11 9 6 2 15 5 17 12 1 9 1 3 5 11 7 2 2 6 18 2 9 11
-+8 16 11 16 15 18 18 3 20 19 ^
-+38 0 17 17 10 8 13 20 4 18 6 18 9 4 1 1 18 5 2 17 15 16 19 15 1 10 17 16 4 16
-+14 14 11 15 2 5 9 15 10 15 ^
-+38 0 17 18 14 15 12 6 1 16 8 18 8 13 12 10 14 14 13 9 2 14 17 9 1 20 10 4 2 12
-+9 4 13 16 7 14 10 11 16 19 ^
-+39 0 12 18 12 7 17 8 7 3 1 3 17 4 9 5 17 14 17 11 5 20 19 8 19 14 13 2 18 3 3
-+18 17 13 8 14 6 18 7 10 12 ^
-+41 0 13 10 11 11 16 1 2 8 7 1 7 14 8 17 6 8 4 3 11 17 3 5 7 16 11 11 14 7 13 20
-+20 7 16 13 15 14 16 14 8 9 16 ^
-+43 1 5 1 6 3 17 18 16 9 1 15 9 10 9 19 1 3 3 20 11 13 17 1 19 8 3 4 3 7 1 14 19
-+19 18 13 11 5 18 4 19 10 6 19 4 ^
-+41 1 17 10 10 7 9 13 16 9 10 18 4 12 5 16 5 20 12 3 8 10 1 18 1 6 20 12 8 9 6
-+12 11 7 7 3 17 13 6 20 17 9 15 ^
-+37 0 16 10 12 17 8 11 8 11 10 5 10 14 18 8 19 9 12 12 2 20 13 12 16 20 3 9 9 19
-+17 13 13 4 17 2 11 7 16 ^
-+43 0 3 6 16 13 10 13 5 16 10 2 8 2 17 19 4 17 7 19 6 9 15 15 20 7 2 18 5 7 18 5
-+2 15 7 11 10 9 3 2 14 19 3 11 14 ^
-+43 1 18 15 5 3 5 12 15 16 10 17 7 19 16 2 1 16 6 3 19 12 5 18 9 9 11 2 1 12 11
-+14 12 14 10 4 11 6 8 16 7 5 11 20 2 ^
-+45 0 17 4 14 4 15 3 2 2 4 3 2 3 14 15 10 2 12 7 3 7 20 20 19 10 2 3 1 10 12 15
-+14 11 20 3 16 14 9 4 18 1 19 20 9 5 18 ^
-+42 0 13 6 6 1 9 13 7 15 9 8 5 19 3 16 9 8 10 20 14 11 13 19 5 7 16 18 16 4 4 4
-+6 9 13 10 19 15 3 14 6 4 12 18 ^
-+36 1 15 15 4 8 13 13 9 18 13 6 4 7 20 4 20 18 18 12 16 13 19 19 5 7 2 6 11 18 9
-+18 6 11 14 14 18 15 ^
-+43 1 13 19 20 17 11 14 5 19 20 11 20 1 1 4 13 10 6 5 6 19 18 1 3 9 14 20 7 18 7
-+15 2 3 15 5 1 1 2 6 13 1 19 6 19 ^
-+40 1 16 5 15 11 13 3 6 11 2 20 8 1 5 4 20 19 3 18 3 8 19 7 8 12 14 12 19 11 15
-+6 19 1 19 4 10 16 17 7 17 16 ^
-+39 1 12 19 20 1 13 12 10 8 21 15 7 19 13 6 8 19 20 18 2 12 14 3 10 6 2 6 2 17
-+16 2 5 21 5 17 19 7 8 11 15 ^
-+33 0 12 17 14 18 15 16 16 16 12 20 13 2 5 5 2 10 20 16 12 10 2 17 21 20 15 14
-+14 18 21 13 9 17 10 ^
-+40 1 2 12 16 17 3 9 19 5 7 10 5 11 17 18 14 14 12 2 20 15 8 17 3 20 11 12 18 7
-+12 7 9 8 3 18 14 3 5 17 9 14 ^
-+43 0 8 21 11 8 8 16 21 12 5 8 7 20 10 14 7 1 9 5 4 5 2 21 12 1 1 9 20 14 11 9
-+19 16 3 1 14 10 2 8 20 18 7 8 18 ^
-+40 1 2 19 6 11 18 11 15 6 5 16 14 9 7 21 3 15 21 16 8 7 3 6 14 17 17 5 10 20 10
-+15 10 1 15 18 6 10 9 7 16 6 ^
-+39 0 11 15 12 2 9 1 1 6 6 13 8 20 6 18 8 5 8 1 1 17 20 20 19 17 13 14 17 12 5 3
-+18 20 20 11 18 15 13 16 7 ^
-+48 1 7 10 1 19 10 7 17 7 16 3 8 4 4 15 17 13 9 11 2 2 11 7 13 4 17 7 1 5 13 19
-+16 5 14 16 2 11 18 5 11 6 4 7 3 17 2 1 18 12 ^
-+41 1 21 18 3 5 16 6 11 2 8 8 7 14 13 21 6 14 12 6 12 19 14 3 16 3 2 7 11 14 8
-+16 10 19 12 19 4 5 6 13 19 12 13 ^
-+44 1 7 5 12 4 13 21 2 5 17 15 15 1 13 5 21 6 4 12 14 15 5 18 12 1 19 2 14 1 8 8
-+11 6 20 10 3 21 8 20 2 4 1 16 11 21 ^
-+42 1 5 3 8 16 15 8 12 14 20 16 18 7 2 18 2 18 19 7 4 19 3 1 20 7 15 1 4 5 12 10
-+19 6 11 4 4 9 20 20 8 2 20 18 ^
-+42 1 19 2 8 4 15 7 2 2 6 18 20 16 1 18 17 13 3 14 2 1 2 10 14 19 12 9 15 20 1 7
-+15 17 7 12 18 1 15 14 8 21 21 5 ^
-+43 1 7 20 10 11 10 1 9 21 7 5 1 12 15 2 9 17 4 13 5 4 11 21 14 13 3 20 21 1 3
-+12 18 11 4 14 20 5 3 14 13 15 9 21 3 ^
-+40 1 19 8 1 5 9 5 9 16 17 9 6 12 6 16 7 4 3 1 21 16 19 15 18 17 17 17 21 13 20
-+9 6 6 9 1 13 17 21 1 9 14 ^
-+36 0 11 12 13 18 19 19 15 12 20 2 16 12 9 21 17 16 8 2 14 6 4 1 6 16 15 19 19
-+21 9 13 18 3 16 8 13 11 ^
-+47 0 21 15 4 21 4 2 3 8 15 19 8 6 16 2 15 3 12 3 11 3 17 12 21 6 3 4 13 1 12 4
-+10 2 6 7 6 9 12 21 10 10 11 2 13 19 2 14 17 ^
-+44 1 11 8 10 19 1 11 11 9 3 13 15 4 3 18 9 14 5 15 18 5 6 17 11 19 2 4 12 8 18
-+12 17 3 4 8 5 19 16 16 6 1 13 1 18 18 ^
-+39 1 10 18 15 11 5 1 17 4 17 19 11 18 21 9 2 10 10 5 5 20 18 13 5 15 3 6 3 10
-+10 16 13 13 14 16 20 19 11 16 8 ^
-+42 1 6 8 15 13 11 13 15 18 11 20 17 20 4 16 10 14 1 4 16 4 17 8 3 7 7 18 16 20
-+2 9 9 4 20 7 16 4 11 4 10 6 20 4 ^
-+41 0 17 6 19 17 2 15 6 5 7 4 8 11 16 9 10 15 20 12 15 8 6 17 5 9 3 3 4 19 20 12
-+5 19 21 5 21 11 14 19 1 17 6 ^
-+39 0 9 4 19 3 17 1 14 21 14 7 6 5 20 14 21 20 4 6 21 7 11 20 12 9 11 6 16 18 18
-+10 11 20 6 12 11 5 7 21 3 ^
-+43 1 18 6 15 21 10 4 14 9 19 10 3 3 5 13 1 8 12 3 13 9 7 10 17 10 6 8 3 17 18 3
-+21 19 6 17 15 4 9 15 9 15 14 4 18 ^
-+45 1 14 8 10 13 4 11 10 7 6 21 1 14 5 11 7 7 2 13 13 3 9 13 8 14 9 3 7 18 4 9 9
-+5 15 13 17 10 15 16 20 8 19 9 10 9 13 ^
-+40 1 19 14 21 2 18 13 10 4 18 16 4 21 15 10 18 19 3 12 12 14 4 13 11 1 11 1 10
-+2 12 4 21 10 21 18 9 2 16 7 20 7 ^
-+41 0 7 12 19 20 1 13 12 10 8 21 15 7 19 13 6 8 19 20 18 2 12 14 3 10 6 2 6 2 17
-+16 2 5 21 5 17 19 7 8 11 10 21 ^
-+35 0 17 14 18 15 16 16 16 12 20 13 2 5 5 2 10 20 16 12 10 2 17 21 20 15 14 14
-+18 21 13 9 17 21 2 12 10 ^
-+40 0 17 3 9 19 5 7 10 5 11 17 18 14 14 12 2 20 15 8 17 3 20 11 12 18 7 12 7 9 8
-+3 18 14 3 5 17 9 18 8 21 20 ^
-+46 1 8 8 16 21 12 5 8 7 20 10 14 7 1 9 5 4 5 2 21 12 1 1 9 20 14 11 9 19 16 3 1
-+14 10 2 8 20 18 7 8 15 2 19 6 11 18 10 ^
-+44 1 15 6 5 16 14 9 7 21 3 15 21 16 8 7 3 6 14 17 17 5 10 20 10 15 10 1 15 18 6
-+10 9 7 16 14 11 15 12 2 9 1 1 6 6 19 ^
-+38 1 8 20 6 18 8 5 8 1 1 17 20 20 19 17 13 14 17 12 5 3 18 20 20 11 18 15 13 16
-+13 7 10 1 19 10 7 17 7 15 ^
-+50 0 3 8 4 4 15 17 13 9 11 2 2 11 7 13 4 17 7 1 5 13 19 16 5 14 16 2 11 18 5 11
-+6 4 7 3 17 2 1 18 13 21 18 3 5 16 6 11 2 8 8 18 ^
-+42 1 14 13 21 6 14 12 6 12 19 14 3 16 3 2 7 11 14 8 16 10 19 12 19 4 5 6 13 19
-+12 13 7 5 12 4 13 21 2 5 17 15 15 12 ^
-+45 1 13 5 21 6 4 12 14 15 5 18 12 1 19 2 14 1 8 8 11 6 20 10 3 21 8 20 2 4 1 16
-+11 1 5 3 8 16 15 8 12 14 20 16 18 7 18 ^
-+46 0 18 2 18 19 7 4 19 3 1 20 7 15 1 4 5 12 10 19 6 11 4 4 9 20 20 8 2 20 3 19
-+2 8 4 15 7 2 2 6 18 20 16 1 18 17 13 14 ^
-+43 1 14 2 1 2 10 14 19 12 9 15 20 1 7 15 17 7 12 18 1 15 14 8 21 21 19 7 20 10
-+11 10 1 9 21 7 5 1 12 15 2 9 17 4 19 ^
-+45 1 5 4 11 21 14 13 3 20 21 1 3 12 18 11 4 14 20 5 3 14 13 15 9 21 11 19 8 1 5
-+9 5 9 16 17 9 6 12 6 16 7 4 3 1 21 15 ^
-+35 0 19 15 18 17 17 17 21 13 20 9 6 6 9 1 13 17 21 1 9 16 11 12 13 18 19 19 15
-+12 20 2 16 12 9 21 12 ^
-+44 1 16 8 2 14 6 4 1 6 16 15 19 19 21 9 13 18 3 16 8 13 21 15 4 21 4 2 3 8 15
-+19 8 6 16 2 15 3 12 3 11 3 17 12 21 9 ^
-+48 0 3 4 13 1 12 4 10 2 6 7 6 9 12 21 10 10 11 2 13 19 2 14 17 11 8 10 19 1 11
-+11 9 3 13 15 4 3 18 9 14 5 15 18 5 6 17 11 19 15 ^
-+44 0 4 12 8 18 12 17 3 4 8 5 19 16 16 6 1 13 1 18 1 10 18 15 11 5 1 17 4 17 19
-+11 18 21 9 2 10 10 5 5 20 18 13 5 15 18 ^
-+39 1 6 3 10 10 16 13 13 14 16 20 19 11 16 21 6 8 15 13 11 13 15 18 11 20 17 20
-+4 16 10 14 1 4 16 4 17 8 3 7 21 ^
-+46 1 18 16 20 2 9 9 4 20 7 16 4 11 4 10 6 20 14 17 6 19 17 2 15 6 5 7 4 8 11 16
-+9 10 15 20 12 15 8 6 17 5 9 3 3 4 19 3 ^
-+40 0 12 5 19 21 5 21 11 14 19 1 17 8 9 4 19 3 17 1 14 21 14 7 6 5 20 14 21 20 4
-+6 21 7 11 20 12 9 11 6 16 11 ^
-+44 0 18 10 11 20 6 12 11 5 7 21 19 18 6 15 21 10 4 14 9 19 10 3 3 5 13 1 8 12 3
-+13 9 7 10 17 10 6 8 3 17 18 3 21 19 8 ^
-+47 0 4 12 22 5 11 20 16 15 4 17 22 1 8 16 11 6 13 18 3 14 8 13 2 19 16 1 19 1 5
-+3 16 9 8 20 7 5 1 11 15 2 3 17 3 12 7 4 19 ^
-+42 0 18 16 13 7 1 19 5 12 18 12 6 15 19 4 4 9 13 13 8 17 13 18 12 2 8 4 7 17 17
-+14 11 13 1 16 11 2 21 3 22 17 16 11 ^
-+39 0 18 22 12 20 17 13 1 7 10 7 20 11 1 7 8 14 14 12 15 13 15 18 15 11 18 1 17
-+14 15 20 16 20 8 2 17 10 4 21 2 ^
-+44 1 19 19 14 22 21 18 13 14 1 3 12 11 11 4 22 13 5 18 7 21 9 22 19 12 8 16 5
-+17 5 9 1 2 9 6 12 6 1 7 4 3 15 1 14 16 ^
-+42 1 12 3 10 2 10 14 21 13 17 6 6 17 1 21 2 14 16 17 9 11 20 21 11 12 12 8 20
-+13 2 9 20 9 14 10 1 16 2 22 6 4 16 18 ^
-+51 0 15 1 12 4 14 9 21 3 3 9 8 21 15 14 8 4 14 4 2 3 8 12 8 6 1 2 18 20 15 3 19
-+3 10 20 14 6 3 4 21 1 12 4 18 2 6 7 6 9 20 14 13 ^
-+40 1 10 19 17 21 12 15 17 7 10 11 8 10 12 1 19 19 9 18 21 4 18 11 9 22 5 15 8
-+15 3 5 6 2 19 12 17 4 20 8 11 20 ^
-+45 0 2 18 4 16 20 12 9 9 6 16 21 16 3 16 18 3 19 5 16 2 4 2 12 11 15 11 14 17 2
-+10 18 5 5 13 3 21 5 3 6 18 18 10 1 21 15 ^
-+45 1 7 1 13 12 19 1 14 6 8 21 19 21 11 19 13 2 13 4 1 10 22 16 4 9 4 10 16 3 7
-+15 11 9 13 17 15 9 9 15 4 13 15 9 4 19 9 ^
-+46 0 18 6 13 22 10 6 12 2 17 15 6 5 7 4 8 11 1 9 10 8 5 20 16 6 10 5 17 3 3 19
-+12 13 20 5 12 14 5 14 11 22 12 16 10 8 9 16 ^
-+39 0 15 12 3 2 16 22 14 22 7 6 5 13 22 14 13 4 6 14 7 11 13 20 9 19 6 9 11 11
-+18 19 13 6 20 19 20 7 22 12 12 ^
-+41 0 6 14 18 19 7 17 12 10 3 18 15 5 21 16 8 20 3 21 9 15 18 10 15 10 6 8 18 2
-+11 3 14 4 6 10 19 9 8 17 8 22 20 ^
-+36 1 7 22 16 18 21 4 11 10 15 6 22 16 22 5 19 15 7 7 2 21 21 3 17 21 16 22 9 3
-+7 11 4 17 17 20 21 21 ^
-+37 1 18 9 5 8 12 17 18 17 16 12 22 14 17 11 21 10 4 3 1 4 14 10 11 4 3 20 20 22
-+19 21 19 16 19 16 10 17 17 ^
-+40 1 19 14 18 14 3 9 17 1 7 13 6 7 15 20 12 13 16 21 20 10 8 22 7 12 21 6 16 4
-+13 11 2 12 15 22 3 18 6 17 6 22 ^
-+42 0 10 9 2 5 22 5 10 4 7 8 19 10 20 10 22 11 8 1 9 1 20 13 21 17 5 5 17 10 13
-+9 20 18 17 2 14 13 22 22 3 14 21 10 ^
-+46 0 2 14 2 20 1 10 18 9 12 5 7 18 20 19 10 11 22 7 12 2 13 8 8 2 3 13 19 20 3
-+7 20 7 9 8 3 11 22 3 5 10 9 11 16 14 19 16 ^
-+46 1 15 8 1 14 20 5 8 7 13 10 22 7 16 9 5 4 5 2 14 20 1 1 15 17 13 22 19 17 4 1
-+3 1 22 10 15 15 2 16 13 11 7 16 17 12 6 20 ^
-+40 1 3 19 8 6 5 9 15 22 17 7 14 18 14 9 16 7 18 14 22 2 2 5 18 13 18 8 18 16 8
-+11 15 6 18 9 7 9 22 19 20 15 ^
-+44 0 9 16 16 6 6 21 8 13 6 11 8 5 16 16 1 10 13 13 4 10 21 22 15 10 20 5 3 3 13
-+15 13 11 11 15 21 1 21 7 10 1 12 18 7 20 ^
-+51 0 7 1 18 8 4 19 2 21 17 19 2 2 19 7 21 19 2 7 15 15 16 5 21 12 1 5 22 1 17
-+19 11 5 11 6 4 7 3 10 2 1 3 6 14 11 18 5 1 6 11 17 8 ^
-+39 1 8 15 22 21 14 6 22 20 6 20 12 22 18 1 3 2 7 19 22 8 9 18 4 20 12 4 5 6 21
-+12 20 21 7 5 20 4 21 14 14 ^
-+45 0 15 5 2 16 15 21 5 14 15 6 4 12 22 5 11 20 16 15 4 17 22 1 8 16 11 6 13 18
-+3 14 8 13 2 19 16 1 19 1 5 3 16 9 8 20 14 ^
-+48 1 5 1 11 15 2 3 17 3 12 7 4 12 18 16 13 7 1 19 5 12 18 12 6 15 19 4 4 9 13
-+13 8 17 13 18 12 2 8 4 7 17 17 14 11 13 1 16 11 22 ^
-+38 0 21 3 22 17 16 17 18 22 12 20 17 13 1 7 10 7 20 11 1 7 8 14 14 12 15 13 15
-+18 15 11 18 1 17 14 15 20 16 10 ^
-+43 0 8 2 17 10 4 21 5 19 19 14 22 21 18 13 14 1 3 12 11 11 4 22 13 5 18 7 21 9
-+22 19 12 8 16 5 17 5 9 1 2 9 6 12 22 ^
-+47 1 1 7 4 3 15 1 14 1 12 3 10 2 10 14 21 13 17 6 6 17 1 21 2 14 16 17 9 11 20
-+21 11 12 12 8 20 13 2 9 20 9 14 10 1 16 2 22 20 ^
-+53 0 4 16 14 15 1 12 4 14 9 21 3 3 9 8 21 15 14 8 4 14 4 2 3 8 12 8 6 1 2 18 20
-+15 3 19 3 10 20 14 6 3 4 21 1 12 4 18 2 6 7 6 9 20 15 ^
-+42 1 10 10 19 17 21 12 15 17 7 10 11 8 10 12 1 19 19 9 18 21 4 18 11 9 22 5 15
-+8 15 3 5 6 2 19 12 17 4 20 8 11 20 12 ^
-+45 0 18 4 16 20 12 9 9 6 16 21 16 3 16 18 3 19 5 16 2 4 2 12 11 15 11 14 17 2
-+10 18 5 5 13 3 21 5 3 6 18 18 10 1 21 21 18 ^
-+45 0 1 13 12 19 1 14 6 8 21 19 21 11 19 13 2 13 4 1 10 22 16 4 9 4 10 16 3 7 15
-+11 9 13 17 15 9 9 15 4 13 15 9 4 19 19 19 ^
-+49 0 6 13 22 10 6 12 2 17 15 6 5 7 4 8 11 1 9 10 8 5 20 16 6 10 5 17 3 3 19 12
-+13 20 5 12 14 5 14 11 22 12 16 10 8 9 4 15 12 3 22 ^
-+39 0 16 22 14 22 7 6 5 13 22 14 13 4 6 14 7 11 13 20 9 19 6 9 11 11 18 19 13 6
-+20 19 20 7 22 12 11 6 14 18 17 ^
-+43 1 7 17 12 10 3 18 15 5 21 16 8 20 3 21 9 15 18 10 15 10 6 8 18 2 11 3 14 4 6
-+10 19 9 8 17 8 22 4 7 22 16 18 21 11 ^
-+39 0 11 10 15 6 22 16 22 5 19 15 7 7 2 21 21 3 17 21 16 22 9 3 7 11 4 17 17 20
-+21 10 18 9 5 8 12 17 18 17 17 ^
-+40 1 12 22 14 17 11 21 10 4 3 1 4 14 10 11 4 3 20 20 22 19 21 19 16 19 16 10 17
-+20 19 14 18 14 3 9 17 1 7 13 6 18 ^
-+44 1 15 20 12 13 16 21 20 10 8 22 7 12 21 6 16 4 13 11 2 12 15 22 3 18 6 17 6 2
-+10 9 2 5 22 5 10 4 7 8 19 10 20 10 22 7 ^
-+43 0 8 1 9 1 20 13 21 17 5 5 17 10 13 9 20 18 17 2 14 13 22 22 3 14 21 9 2 14 2
-+20 1 10 18 9 12 5 7 18 20 19 10 11 19 ^
-+53 1 7 12 2 13 8 8 2 3 13 19 20 3 7 20 7 9 8 3 11 22 3 5 10 9 11 16 14 19 8 15
-+8 1 14 20 5 8 7 13 10 22 7 16 9 5 4 5 2 14 20 1 1 15 8 ^
-+42 0 13 22 19 17 4 1 3 1 22 10 15 15 2 16 13 11 7 16 17 12 6 19 3 19 8 6 5 9 15
-+22 17 7 14 18 14 9 16 7 18 14 22 19 ^
-+43 0 2 5 18 13 18 8 18 16 8 11 15 6 18 9 7 9 22 19 20 17 9 16 16 6 6 21 8 13 6
-+11 8 5 16 16 1 10 13 13 4 10 21 22 14 ^
-+48 0 10 20 5 3 3 13 15 13 11 11 15 21 1 21 7 10 1 12 18 7 2 7 1 18 8 4 19 2 21
-+17 19 2 2 19 7 21 19 2 7 15 15 16 5 21 12 1 5 21 ^
-+49 1 1 17 19 11 5 11 6 4 7 3 10 2 1 3 6 14 11 18 5 1 6 11 17 8 8 15 22 21 14 6
-+22 20 6 20 12 22 18 1 3 2 7 19 22 8 9 18 4 20 10 ^
-+45 1 4 5 6 21 12 20 21 7 5 20 4 21 14 2 15 5 2 16 15 21 5 14 15 6 4 12 22 5 11
-+20 16 15 4 17 22 1 8 16 11 6 13 18 3 14 13 ^
-+52 0 13 2 19 16 1 19 1 5 3 16 9 8 20 7 5 1 11 15 2 3 17 3 12 7 4 12 18 16 13 7
-+1 19 5 12 18 12 6 15 19 4 4 9 13 13 8 17 13 18 12 2 8 15 ^
-+46 0 20 1 1 11 21 2 3 16 8 12 21 22 1 16 1 10 22 17 4 14 7 2 16 9 18 23 9 4 8
-+16 7 9 18 11 11 17 20 2 7 10 20 8 10 16 14 14 ^
-+41 1 20 4 16 4 18 1 14 12 19 13 15 19 19 11 22 13 10 2 11 16 10 17 8 8 6 22 2
-+15 10 9 13 18 14 22 8 6 18 16 15 14 20 ^
-+43 1 14 3 12 14 17 11 3 9 19 10 20 16 11 3 17 7 21 23 12 23 11 13 2 14 14 16 13
-+12 11 5 14 3 8 4 13 8 17 17 18 17 2 12 22 ^
-+43 1 17 3 11 12 16 5 1 22 6 16 11 20 3 18 17 6 22 14 13 21 21 3 18 13 20 11 18
-+19 11 6 1 10 18 7 17 5 16 1 7 10 4 20 22 ^
-+46 0 8 10 12 4 11 21 6 13 16 17 6 23 1 9 14 4 11 23 23 19 1 13 6 20 1 9 12 8 5
-+23 17 16 8 8 3 10 13 7 6 10 8 14 9 15 20 20 ^
-+46 0 20 21 15 12 19 17 1 6 4 5 8 4 12 10 6 5 4 17 3 3 16 13 5 21 16 10 21 18 19
-+15 16 12 6 12 17 8 7 8 11 14 1 23 10 15 15 13 ^
-+43 0 21 13 15 18 21 10 10 23 3 13 13 9 16 2 17 19 3 22 11 5 18 19 13 7 7 8 19 2
-+12 2 19 16 23 9 16 6 3 19 12 5 10 9 17 ^
-+47 0 21 3 2 1 7 14 14 7 6 2 20 3 6 19 19 10 2 22 12 17 12 1 20 7 7 15 20 6 18 8
-+3 14 23 18 15 4 7 5 23 15 7 14 10 10 19 17 11 ^
-+44 0 4 15 17 11 15 11 8 9 17 5 12 18 14 6 20 17 21 12 16 9 22 9 20 15 2 22 11 2
-+6 11 9 8 2 4 14 19 3 21 21 23 8 2 11 15 ^
-+37 0 8 4 20 22 6 21 18 22 10 19 9 14 17 23 21 10 7 15 13 16 5 4 10 13 14 20 23
-+12 20 23 18 10 12 8 21 11 19 ^
-+39 0 12 7 19 14 18 14 18 22 6 9 22 5 23 13 6 8 23 20 22 5 22 15 19 20 9 9 1 13
-+13 10 14 13 5 22 14 21 9 21 3 ^
-+45 1 14 14 4 18 13 12 23 7 3 15 5 17 14 23 14 5 17 22 11 1 8 13 23 6 21 3 6 11
-+7 23 8 6 21 4 4 22 19 13 8 5 19 7 5 23 3 ^
-+50 1 4 19 11 23 11 21 14 1 3 20 2 20 7 4 17 2 5 13 4 23 5 22 7 7 9 17 13 5 6 2
-+21 1 17 7 9 21 23 1 1 12 3 1 15 22 4 12 6 20 5 23 ^
-+46 1 23 4 12 22 8 18 16 3 16 4 2 13 1 15 15 1 23 2 3 4 10 1 12 7 11 2 7 22 22
-+21 22 13 3 12 22 12 4 3 23 10 14 17 15 9 23 20 ^
-+44 0 19 12 21 22 9 17 12 2 18 18 12 21 2 19 4 21 20 4 9 14 5 21 8 22 10 15 23
-+14 8 5 11 19 5 7 5 3 11 4 15 18 9 2 23 4 ^
-+46 0 9 16 14 15 6 15 1 11 4 16 16 20 14 2 9 19 14 6 3 7 10 16 22 23 7 7 12 5 2
-+8 9 5 7 1 17 19 21 19 18 15 3 20 22 14 9 16 ^
-+44 1 10 18 11 3 5 9 10 11 22 12 12 15 23 2 10 18 23 5 18 21 20 23 3 9 3 22 7 8
-+7 4 1 14 16 16 13 18 2 21 18 15 5 5 16 21 ^
-+46 0 2 2 6 23 13 22 20 12 17 4 10 21 2 20 2 8 8 7 20 13 3 20 23 16 6 23 9 12 20
-+3 10 5 6 19 18 12 13 14 8 1 1 8 9 13 19 23 ^
-+47 0 9 20 20 5 15 13 17 3 15 22 3 1 19 8 15 8 19 9 21 7 12 1 16 21 11 8 10 15
-+16 8 1 5 5 20 22 13 11 22 4 4 7 6 22 10 3 21 4 ^
-+45 1 9 19 22 18 3 23 6 4 6 19 15 13 17 4 13 9 15 4 6 7 13 11 1 20 15 12 18 18
-+16 7 13 4 11 7 11 6 17 9 18 15 21 17 5 20 11 ^
-+49 0 1 22 16 18 5 8 11 2 23 10 11 5 2 1 19 16 3 19 16 15 21 5 3 7 18 4 9 15 3 8
-+20 1 21 1 21 17 9 6 17 10 16 2 9 7 16 19 15 17 9 ^
-+51 0 17 20 19 6 6 14 2 2 5 1 2 10 17 1 18 6 18 20 1 1 11 21 2 3 16 8 12 21 22 1
-+16 1 10 22 17 4 14 7 2 16 9 18 23 9 4 8 16 7 9 18 17 ^
-+45 1 11 17 20 2 7 10 20 8 10 16 14 11 20 4 16 4 18 1 14 12 19 13 15 19 19 11 22
-+13 10 2 11 16 10 17 8 8 6 22 2 15 10 9 13 18 8 ^
-+44 0 22 8 6 18 16 15 14 15 14 3 12 14 17 11 3 9 19 10 20 16 11 3 17 7 21 23 12
-+23 11 13 2 14 14 16 13 12 11 5 14 3 8 4 13 20 ^
-+43 0 17 17 18 17 2 12 3 17 3 11 12 16 5 1 22 6 16 11 20 3 18 17 6 22 14 13 21
-+21 3 18 13 20 11 18 19 11 6 1 10 18 7 17 20 ^
-+50 1 16 1 7 10 4 20 10 8 10 12 4 11 21 6 13 16 17 6 23 1 9 14 4 11 23 23 19 1
-+13 6 20 1 9 12 8 5 23 17 16 8 8 3 10 13 7 6 10 8 14 17 ^
-+46 1 15 20 18 20 21 15 12 19 17 1 6 4 5 8 4 12 10 6 5 4 17 3 3 16 13 5 21 16 10
-+21 18 19 15 16 12 6 12 17 8 7 8 11 14 1 23 21 ^
-+45 0 15 15 2 21 13 15 18 21 10 10 23 3 13 13 9 16 2 17 19 3 22 11 5 18 19 13 7
-+7 8 19 2 12 2 19 16 23 9 16 6 3 19 12 5 10 15 ^
-+48 1 20 21 3 2 1 7 14 14 7 6 2 20 3 6 19 19 10 2 22 12 17 12 1 20 7 7 15 20 6
-+18 8 3 14 23 18 15 4 7 5 23 15 7 14 10 10 19 17 12 ^
-+47 0 4 15 17 11 15 11 8 9 17 5 12 18 14 6 20 17 21 12 16 9 22 9 20 15 2 22 11 2
-+6 11 9 8 2 4 14 19 3 21 21 23 8 2 11 4 8 4 20 ^
-+39 0 22 6 21 18 22 10 19 9 14 17 23 21 10 7 15 13 16 5 4 10 13 14 20 23 12 20
-+23 18 10 12 8 21 11 6 12 7 19 14 14 ^
-+40 0 14 18 22 6 9 22 5 23 13 6 8 23 20 22 5 22 15 19 20 9 9 1 13 13 10 14 13 5
-+22 14 21 9 21 19 14 14 4 18 13 12 ^
-+46 0 23 7 3 15 5 17 14 23 14 5 17 22 11 1 8 13 23 6 21 3 6 11 7 23 8 6 21 4 4
-+22 19 13 8 5 19 7 5 23 1 4 19 11 23 11 21 9 ^
-+52 0 1 3 20 2 20 7 4 17 2 5 13 4 23 5 22 7 7 9 17 13 5 6 2 21 1 17 7 9 21 23 1
-+1 12 3 1 15 22 4 12 6 20 5 19 23 4 12 22 8 18 16 3 22 ^
-+48 0 4 2 13 1 15 15 1 23 2 3 4 10 1 12 7 11 2 7 22 22 21 22 13 3 12 22 12 4 3
-+23 10 14 17 15 9 23 4 19 12 21 22 9 17 12 2 18 18 9 ^
-+46 0 21 2 19 4 21 20 4 9 14 5 21 8 22 10 15 23 14 8 5 11 19 5 7 5 3 11 4 15 18
-+9 2 23 22 9 16 14 15 6 15 1 11 4 16 16 20 22 ^
-+47 0 2 9 19 14 6 3 7 10 16 22 23 7 7 12 5 2 8 9 5 7 1 17 19 21 19 18 15 3 20 22
-+14 9 11 10 18 11 3 5 9 10 11 22 12 12 15 23 22 ^
-+45 0 10 18 23 5 18 21 20 23 3 9 3 22 7 8 7 4 1 14 16 16 13 18 2 21 18 15 5 5 16
-+12 2 2 6 23 13 22 20 12 17 4 10 21 2 20 19 ^
-+47 0 8 8 7 20 13 3 20 23 16 6 23 9 12 20 3 10 5 6 19 18 12 13 14 8 1 1 8 9 13
-+19 12 9 20 20 5 15 13 17 3 15 22 3 1 19 8 15 23 ^
-+48 0 19 9 21 7 12 1 16 21 11 8 10 15 16 8 1 5 5 20 22 13 11 22 4 4 7 6 22 10 3
-+21 1 9 19 22 18 3 23 6 4 6 19 15 13 17 4 13 9 17 ^
-+49 1 4 6 7 13 11 1 20 15 12 18 18 16 7 13 4 11 7 11 6 17 9 18 15 21 17 5 20 6 1
-+22 16 18 5 8 11 2 23 10 11 5 2 1 19 16 3 19 16 15 18 ^
-+55 1 5 3 7 18 4 9 15 3 8 20 1 21 1 21 17 9 6 17 10 16 2 9 7 16 19 15 17 10 17
-+20 19 6 6 14 2 2 5 1 2 10 17 1 18 6 18 20 1 1 11 21 2 3 16 8 17 ^
-+47 0 21 22 1 16 1 10 22 17 4 14 7 2 16 9 18 23 9 4 8 16 7 9 18 11 11 17 20 2 7
-+10 20 8 10 16 14 11 20 4 16 4 18 1 14 12 19 13 19 ^
-+45 1 19 19 11 22 13 10 2 11 16 10 17 8 8 6 22 2 15 10 9 13 18 14 22 8 6 18 16
-+15 14 15 14 3 12 14 17 11 3 9 19 10 20 16 11 3 21 ^
-+47 1 7 21 23 12 23 11 13 2 14 14 16 13 12 11 5 14 3 8 4 13 8 17 17 18 17 2 12 3
-+17 3 11 12 16 5 1 22 6 16 11 20 3 18 17 6 22 14 20 ^
-+47 1 21 21 3 18 13 20 11 18 19 11 6 1 10 18 7 17 5 16 1 7 10 4 20 10 8 10 12 4
-+11 21 6 13 16 17 6 23 1 9 14 4 11 23 23 19 1 13 22 ^
-+51 0 20 1 9 12 8 5 23 17 16 8 8 3 10 13 7 6 10 8 14 9 15 20 18 20 21 15 12 19
-+17 1 6 4 5 8 4 12 10 6 5 4 17 3 3 16 13 5 21 16 10 21 21 ^
-+52 0 15 13 4 8 12 22 9 6 3 1 13 16 12 23 10 14 2 1 6 11 8 19 24 16 2 5 21 2 7
-+22 4 5 23 3 12 20 8 4 5 17 9 18 18 18 4 10 13 2 4 7 24 21 ^
-+51 1 10 21 4 8 24 2 6 19 10 6 22 22 14 22 13 21 5 22 2 4 18 5 11 21 1 7 8 4 17
-+5 14 1 2 10 9 12 5 11 10 20 4 14 3 1 3 21 12 11 17 22 21 ^
-+43 1 7 5 21 14 15 19 20 12 6 12 18 19 4 7 12 10 5 22 3 15 21 7 23 7 2 22 4 18
-+18 3 24 10 17 24 23 18 6 11 18 22 8 6 20 ^
-+45 0 2 12 10 14 12 9 2 23 16 20 14 17 9 16 7 21 6 22 24 19 11 9 19 21 15 11 19
-+2 2 7 8 10 8 9 8 15 9 14 6 16 8 21 21 22 13 ^
-+50 1 17 9 4 24 21 15 15 16 16 13 9 10 16 14 12 7 12 15 15 5 10 10 23 5 13 22 3
-+5 1 4 11 14 7 6 10 17 14 6 3 13 18 16 3 5 15 23 8 5 3 22 ^
-+47 0 8 12 20 20 9 2 13 24 17 2 2 17 3 13 20 2 6 3 15 7 13 1 18 7 22 18 24 20 14
-+7 17 16 20 3 11 6 5 2 18 14 16 22 14 11 7 18 22 ^
-+48 1 17 24 12 12 3 13 19 16 22 4 16 4 6 23 8 18 11 2 3 20 22 9 21 8 23 1 23 20
-+7 16 13 23 4 13 3 7 4 23 6 13 19 2 3 7 2 9 9 19 ^
-+45 1 6 13 4 22 6 19 20 1 9 7 14 1 15 3 23 24 22 18 12 12 17 19 10 8 11 22 12 10
-+2 20 15 18 17 18 7 11 12 21 6 12 4 7 18 17 18 ^
-+44 0 2 14 24 14 1 23 1 11 15 10 6 18 20 7 1 8 1 16 6 20 23 23 21 10 10 12 24 10
-+11 23 2 12 23 9 3 24 24 19 14 10 18 15 14 12 ^
-+50 1 16 11 22 2 15 24 8 22 1 4 24 9 10 15 3 9 5 4 17 15 9 12 19 19 1 3 10 6 8 3
-+17 8 18 24 19 3 4 15 4 9 2 24 5 20 13 7 20 17 19 11 ^
-+43 0 13 8 10 19 15 11 1 14 17 20 22 10 7 11 16 9 21 22 17 23 12 15 4 24 7 21 18
-+2 21 16 1 19 18 20 11 3 15 19 18 1 6 14 15 ^
-+45 0 5 5 19 13 10 24 19 16 24 15 13 2 19 15 24 21 17 4 13 17 1 1 9 1 10 2 18 1
-+21 19 5 18 12 2 22 16 23 15 19 6 18 9 1 23 20 ^
-+49 0 21 13 14 11 18 12 13 3 19 9 20 22 20 2 11 12 6 1 12 16 18 2 9 8 4 3 11 17
-+11 5 4 19 16 11 23 13 18 1 20 8 2 16 16 21 4 19 5 5 24 ^
-+46 0 24 13 23 6 24 5 17 12 5 1 15 17 17 21 11 13 9 23 11 14 21 7 6 9 6 14 7 16
-+2 17 1 24 23 4 12 14 4 2 11 23 12 4 23 21 21 4 ^
-+49 1 15 13 15 14 15 8 14 9 17 7 15 2 23 2 1 17 6 14 19 24 2 8 8 7 7 10 14 13 7
-+9 11 16 11 8 8 18 13 13 18 10 1 20 18 22 19 12 9 16 12 ^
-+43 1 13 6 9 17 20 10 5 7 20 18 8 15 23 21 20 5 15 11 3 3 14 21 10 24 6 21 21 6
-+23 10 3 21 23 17 20 8 16 10 22 5 16 1 24 ^
-+50 0 24 3 9 16 6 7 3 20 12 17 18 21 5 9 7 1 9 12 19 5 7 6 24 11 11 20 23 10 4 7
-+1 19 7 19 17 23 15 5 12 21 20 3 1 14 2 15 22 3 16 11 ^
-+45 1 10 19 10 20 16 19 17 10 4 21 20 16 21 14 14 8 17 10 19 1 17 4 3 22 23 14
-+16 9 22 8 20 24 1 5 11 11 6 4 13 15 12 1 11 13 22 ^
-+45 0 3 8 5 6 5 16 12 11 2 17 14 19 23 16 5 6 20 21 9 24 9 22 23 22 12 8 13 23
-+17 5 3 16 22 15 22 7 17 3 2 13 13 11 24 13 17 ^
-+42 1 21 11 14 20 24 24 4 9 13 5 8 9 18 7 12 1 21 8 24 15 1 22 19 24 14 13 8 20
-+14 18 23 19 9 8 14 23 11 4 4 22 20 17 ^
-+49 1 17 15 20 6 15 8 24 4 20 19 8 19 14 21 24 18 3 10 16 3 6 4 1 10 15 13 4 8
-+12 22 9 6 3 1 13 16 12 23 10 14 2 1 6 11 8 19 24 16 23 ^
-+50 0 5 21 2 7 22 4 5 23 3 12 20 8 4 5 17 9 18 18 18 4 10 13 2 4 7 24 8 10 21 4
-+8 24 2 6 19 10 6 22 22 14 22 13 21 5 22 2 4 18 5 24 ^
-+53 1 21 1 7 8 4 17 5 14 1 2 10 9 12 5 11 10 20 4 14 3 1 3 21 12 11 17 22 11 7 5
-+21 14 15 19 20 12 6 12 18 19 4 7 12 10 5 22 3 15 21 7 23 7 18 ^
-+43 1 22 4 18 18 3 24 10 17 24 23 18 6 11 18 22 8 6 6 2 12 10 14 12 9 2 23 16 20
-+14 17 9 16 7 21 6 22 24 19 11 9 19 21 6 ^
-+49 1 11 19 2 2 7 8 10 8 9 8 15 9 14 6 16 8 21 21 22 6 17 9 4 24 21 15 15 16 16
-+13 9 10 16 14 12 7 12 15 15 5 10 10 23 5 13 22 3 5 22 ^
-+52 0 4 11 14 7 6 10 17 14 6 3 13 18 16 3 5 15 23 8 5 3 18 8 12 20 20 9 2 13 24
-+17 2 2 17 3 13 20 2 6 3 15 7 13 1 18 7 22 18 24 20 14 7 23 ^
-+45 1 16 20 3 11 6 5 2 18 14 16 22 14 11 7 18 16 17 24 12 12 3 13 19 16 22 4 16
-+4 6 23 8 18 11 2 3 20 22 9 21 8 23 1 23 20 23 ^
-+51 1 16 13 23 4 13 3 7 4 23 6 13 19 2 3 7 2 9 9 15 6 13 4 22 6 19 20 1 9 7 14 1
-+15 3 23 24 22 18 12 12 17 19 10 8 11 22 12 10 2 20 15 15 ^
-+48 1 17 18 7 11 12 21 6 12 4 7 18 17 3 2 14 24 14 1 23 1 11 15 10 6 18 20 7 1 8
-+1 16 6 20 23 23 21 10 10 12 24 10 11 23 2 12 23 9 20 ^
-+49 1 24 24 19 14 10 18 15 14 5 16 11 22 2 15 24 8 22 1 4 24 9 10 15 3 9 5 4 17
-+15 9 12 19 19 1 3 10 6 8 3 17 8 18 24 19 3 4 15 4 24 ^
-+43 0 2 24 5 20 13 7 20 17 19 22 13 8 10 19 15 11 1 14 17 20 22 10 7 11 16 9 21
-+22 17 23 12 15 4 24 7 21 18 2 21 16 1 19 11 ^
-+48 1 20 11 3 15 19 18 1 6 14 5 5 5 19 13 10 24 19 16 24 15 13 2 19 15 24 21 17
-+4 13 17 1 1 9 1 10 2 18 1 21 19 5 18 12 2 22 16 23 19 ^
-+50 1 19 6 18 9 1 23 22 21 13 14 11 18 12 13 3 19 9 20 22 20 2 11 12 6 1 12 16
-+18 2 9 8 4 3 11 17 11 5 4 19 16 11 23 13 18 1 20 8 2 16 16 ^
-+48 1 16 21 4 19 5 5 20 24 13 23 6 24 5 17 12 5 1 15 17 17 21 11 13 9 23 11 14
-+21 7 6 9 6 14 7 16 2 17 1 24 23 4 12 14 4 2 11 23 15 ^
-+50 1 4 23 21 21 16 15 13 15 14 15 8 14 9 17 7 15 2 23 2 1 17 6 14 19 24 2 8 8 7
-+7 10 14 13 7 9 11 16 11 8 8 18 13 13 18 10 1 20 18 22 3 ^
-+44 1 12 9 16 17 13 6 9 17 20 10 5 7 20 18 8 15 23 21 20 5 15 11 3 3 14 21 10 24
-+6 21 21 6 23 10 3 21 23 17 20 8 16 10 22 12 ^
-+53 0 16 1 5 24 3 9 16 6 7 3 20 12 17 18 21 5 9 7 1 9 12 19 5 7 6 24 11 11 20 23
-+10 4 7 1 19 7 19 17 23 15 5 12 21 20 3 1 14 2 15 22 3 16 9 ^
-+46 1 10 19 10 20 16 19 17 10 4 21 20 16 21 14 14 8 17 10 19 1 17 4 3 22 23 14
-+16 9 22 8 20 24 1 5 11 11 6 4 13 15 12 1 11 13 21 21 ^
-+46 0 8 5 6 5 16 12 11 2 17 14 19 23 16 5 6 20 21 9 24 9 22 23 22 12 8 13 23 17
-+5 3 16 22 15 22 7 17 3 2 13 13 11 24 13 12 21 7 ^
-+43 1 14 20 24 24 4 9 13 5 8 9 18 7 12 1 21 8 24 15 1 22 19 24 14 13 8 20 14 18
-+23 19 9 8 14 23 11 4 4 22 20 13 17 15 24 ^
-+55 0 6 15 8 24 4 20 19 8 19 14 21 24 18 3 10 16 3 6 4 1 10 15 13 4 8 12 22 9 6
-+3 1 13 16 12 23 10 14 2 1 6 11 8 19 24 16 2 5 21 2 7 22 4 5 23 4 ^
-+55 1 12 20 8 4 5 17 9 18 18 18 4 10 13 2 4 7 24 8 10 21 4 8 24 2 6 19 10 6 22
-+22 14 22 13 21 5 22 2 4 18 5 11 21 1 7 8 4 17 5 14 1 2 10 9 12 14 ^
-+49 0 11 10 20 4 14 3 1 3 21 12 11 17 22 11 7 5 21 14 15 19 20 12 6 12 18 19 4 7
-+12 10 5 22 3 15 21 7 23 7 2 22 4 18 18 3 24 10 17 24 12 ^
-+50 0 18 6 11 18 22 8 6 6 2 12 10 14 12 9 2 23 16 20 14 17 9 16 7 21 6 22 24 19
-+11 9 19 21 15 11 19 2 2 7 8 10 8 9 8 15 9 14 6 16 8 22 ^
-+51 1 21 22 6 17 9 4 24 21 15 15 16 16 13 9 10 16 14 12 7 12 15 15 5 10 10 23 5
-+13 22 3 5 1 4 11 14 7 6 10 17 14 6 3 13 18 16 3 5 15 23 8 21 ^
-+51 1 5 3 18 8 12 20 20 9 2 13 24 17 2 2 17 3 13 20 2 6 3 15 7 13 1 18 7 22 18
-+24 20 14 7 17 16 20 3 11 6 5 2 18 14 16 22 14 11 7 18 16 20 ^
-+52 0 24 12 12 3 13 19 16 22 4 16 4 6 23 8 18 11 2 3 20 22 9 21 8 23 1 23 20 7
-+16 13 23 4 13 3 7 4 23 6 13 19 2 3 7 2 9 9 15 6 13 4 22 16 ^
-+49 1 19 20 1 9 7 14 1 15 3 23 24 22 18 12 12 17 19 10 8 11 22 12 10 2 20 15 18
-+17 18 7 11 12 21 6 12 4 7 18 17 3 2 14 24 14 1 23 1 11 16 ^
-+47 0 10 6 18 20 7 1 8 1 16 6 20 23 23 21 10 10 12 24 10 11 23 2 12 23 9 3 24 24
-+19 14 10 18 15 14 5 16 11 22 2 15 24 8 22 1 4 24 3 ^
-+45 0 17 6 24 11 7 21 9 17 8 25 5 5 22 16 13 5 2 16 4 25 25 8 18 13 13 3 1 22 23
-+24 18 12 21 19 2 4 24 13 11 2 7 24 22 17 21 ^
-+46 1 15 1 8 3 10 15 18 15 8 10 16 20 20 7 18 22 11 18 9 11 15 22 20 18 6 24 15
-+25 4 22 12 17 4 6 17 20 2 4 2 5 20 15 19 24 18 15 ^
-+52 1 8 2 5 23 2 10 21 8 5 2 9 16 16 15 6 22 23 5 6 21 5 21 24 3 6 10 17 19 9 15
-+11 23 16 17 1 3 12 3 20 4 5 5 3 21 22 15 4 21 20 7 22 18 ^
-+43 0 9 24 4 18 7 7 25 24 22 21 23 24 14 20 12 6 7 4 2 12 25 15 3 9 23 8 16 25
-+11 14 4 10 19 23 16 13 9 20 25 17 11 8 19 ^
-+55 0 19 25 17 7 16 21 6 4 8 2 15 9 2 9 19 3 6 3 3 10 25 13 15 7 8 20 21 12 10
-+12 5 24 11 20 3 13 13 16 9 13 10 3 9 16 3 7 15 9 9 14 2 13 17 25 3 ^
-+46 0 18 5 19 23 9 25 9 10 23 12 12 7 13 8 15 7 1 6 21 2 8 7 6 16 14 14 12 15 13
-+24 10 15 11 10 8 14 15 21 25 21 16 9 18 20 22 21 ^
-+50 1 20 11 14 23 22 10 13 14 8 19 12 2 11 20 23 13 4 10 6 5 7 23 11 3 16 8 21 4
-+8 18 5 12 14 8 6 20 19 24 8 23 17 3 7 19 1 18 1 14 22 11 ^
-+44 1 14 5 8 22 18 14 25 17 11 12 22 2 12 12 16 12 13 18 17 12 17 14 18 8 25 9
-+23 5 3 8 14 24 17 7 3 3 23 17 22 19 19 17 16 19 ^
-+51 0 24 14 16 20 23 20 9 19 16 7 12 16 5 8 9 7 10 21 24 10 11 19 1 21 14 14 19
-+3 22 8 12 20 1 18 5 6 5 12 14 1 1 11 9 22 3 24 9 6 1 11 20 ^
-+47 0 1 12 8 11 11 17 10 22 7 3 10 2 6 4 24 16 24 19 4 5 18 11 12 9 20 21 25 2
-+21 18 10 20 25 21 3 17 17 5 8 22 25 19 8 10 19 7 25 ^
-+55 1 4 8 18 3 18 3 11 24 2 14 9 1 10 4 4 13 19 22 4 7 19 5 10 10 1 8 22 22 6 8
-+13 12 11 17 23 14 16 7 5 11 22 24 7 2 11 13 18 4 20 8 1 6 25 20 16 ^
-+51 1 20 1 25 10 15 15 2 17 13 9 24 17 24 20 13 15 17 3 11 20 10 5 13 23 18 5 3
-+18 15 7 5 7 4 15 20 16 2 17 1 7 4 12 7 25 14 1 4 7 19 19 22 ^
-+52 0 3 13 12 4 3 14 4 14 11 6 3 25 18 16 20 24 12 19 18 25 6 23 6 15 5 4 4 6 14
-+13 20 5 14 15 2 13 21 11 5 17 2 2 10 11 13 14 12 11 21 15 23 20 ^
-+50 1 2 5 7 23 10 20 6 12 1 19 10 24 21 22 25 16 12 19 22 15 10 18 24 1 5 16 10
-+18 2 19 14 3 5 1 7 20 7 16 6 20 6 6 25 10 22 20 2 1 15 18 ^
-+48 0 23 25 23 4 11 15 15 6 9 22 22 19 22 25 6 19 6 2 20 21 7 22 18 10 7 17 4 16
-+12 10 25 12 23 23 9 2 22 1 20 2 8 3 14 7 1 2 3 24 ^
-+38 1 21 21 23 20 22 11 25 20 24 25 1 9 21 20 14 10 14 19 9 17 15 13 5 15 24 21
-+12 13 25 22 21 1 16 23 7 24 15 22 ^
-+54 1 22 5 25 3 4 2 9 12 24 6 19 1 14 9 5 9 1 17 9 4 23 21 1 3 15 16 11 1 12 18
-+6 2 7 8 17 8 21 13 22 9 21 4 9 1 13 17 21 10 9 18 24 23 13 24 ^
-+43 1 23 23 19 23 22 17 18 23 18 21 17 1 10 12 4 6 1 21 11 18 2 6 6 12 18 13 16
-+16 18 19 13 11 21 19 15 12 15 16 19 2 23 19 23 ^
-+48 0 1 2 25 14 11 25 24 16 8 14 21 21 16 6 13 1 23 15 8 17 4 3 4 9 23 12 8 8 24
-+13 6 11 3 8 24 19 8 23 1 24 24 18 25 13 2 6 25 14 ^
-+51 1 9 3 5 11 19 11 16 5 4 17 24 23 15 14 10 7 14 17 25 15 10 14 6 18 18 4 1 13
-+10 16 1 25 16 2 24 5 1 17 6 17 6 24 11 7 21 9 17 8 25 5 23 ^
-+48 1 22 16 13 5 2 16 4 25 25 8 18 13 13 3 1 22 23 24 18 12 21 19 2 4 24 13 11 2
-+7 24 22 17 5 15 1 8 3 10 15 18 15 8 10 16 20 20 7 25 ^
-+49 0 22 11 18 9 11 15 22 20 18 6 24 15 25 4 22 12 17 4 6 17 20 2 4 2 5 20 15 19
-+24 18 9 8 2 5 23 2 10 21 8 5 2 9 16 16 15 6 22 23 17 ^
-+47 1 6 21 5 21 24 3 6 10 17 19 9 15 11 23 16 17 1 3 12 3 20 4 5 5 3 21 22 15 4
-+21 20 7 22 14 9 24 4 18 7 7 25 24 22 21 23 24 14 ^
-+53 0 20 12 6 7 4 2 12 25 15 3 9 23 8 16 25 11 14 4 10 19 23 16 13 9 20 25 17 11
-+8 4 19 25 17 7 16 21 6 4 8 2 15 9 2 9 19 3 6 3 3 10 25 13 15 ^
-+54 1 7 8 20 21 12 10 12 5 24 11 20 3 13 13 16 9 13 10 3 9 16 3 7 15 9 9 14 2 13
-+17 25 2 18 5 19 23 9 25 9 10 23 12 12 7 13 8 15 7 1 6 21 2 8 25 ^
-+44 1 6 16 14 14 12 15 13 24 10 15 11 10 8 14 15 21 25 21 16 9 18 20 22 21 20 11
-+14 23 22 10 13 14 8 19 12 2 11 20 23 13 4 10 6 25 ^
-+49 1 7 23 11 3 16 8 21 4 8 18 5 12 14 8 6 20 19 24 8 23 17 3 7 19 1 18 1 14 22
-+13 14 5 8 22 18 14 25 17 11 12 22 2 12 12 16 12 13 18 25 ^
-+45 1 12 17 14 18 8 25 9 23 5 3 8 14 24 17 7 3 3 23 17 22 19 19 17 16 22 24 14
-+16 20 23 20 9 19 16 7 12 16 5 8 9 7 10 21 24 7 ^
-+58 0 11 19 1 21 14 14 19 3 22 8 12 20 1 18 5 6 5 12 14 1 1 11 9 22 3 24 9 6 1
-+11 16 1 12 8 11 11 17 10 22 7 3 10 2 6 4 24 16 24 19 4 5 18 11 12 9 20 21 7 ^
-+54 1 2 21 18 10 20 25 21 3 17 17 5 8 22 25 19 8 10 19 7 11 4 8 18 3 18 3 11 24
-+2 14 9 1 10 4 4 13 19 22 4 7 19 5 10 10 1 8 22 22 6 8 13 12 11 21 ^
-+47 1 23 14 16 7 5 11 22 24 7 2 11 13 18 4 20 8 1 6 25 20 17 20 1 25 10 15 15 2
-+17 13 9 24 17 24 20 13 15 17 3 11 20 10 5 13 23 18 21 ^
-+57 1 3 18 15 7 5 7 4 15 20 16 2 17 1 7 4 12 7 25 14 1 4 7 19 19 20 3 13 12 4 3
-+14 4 14 11 6 3 25 18 16 20 24 12 19 18 25 6 23 6 15 5 4 4 6 14 13 20 7 ^
-+51 1 14 15 2 13 21 11 5 17 2 2 10 11 13 14 12 11 21 15 23 3 2 5 7 23 10 20 6 12
-+1 19 10 24 21 22 25 16 12 19 22 15 10 18 24 1 5 16 10 18 2 19 8 ^
-+49 0 3 5 1 7 20 7 16 6 20 6 6 25 10 22 20 2 1 15 14 23 25 23 4 11 15 15 6 9 22
-+22 19 22 25 6 19 6 2 20 21 7 22 18 10 7 17 4 16 12 24 ^
-+46 0 10 25 12 23 23 9 2 22 1 20 2 8 3 14 7 1 2 3 19 21 21 23 20 22 11 25 20 24
-+25 1 9 21 20 14 10 14 19 9 17 15 13 5 15 24 21 14 ^
-+55 0 13 25 22 21 1 16 23 7 24 15 3 22 5 25 3 4 2 9 12 24 6 19 1 14 9 5 9 1 17 9
-+4 23 21 1 3 15 16 11 1 12 18 6 2 7 8 17 8 21 13 22 9 21 4 9 22 ^
-+45 1 13 17 21 10 9 18 24 23 13 7 23 23 19 23 22 17 18 23 18 21 17 1 10 12 4 6 1
-+21 11 18 2 6 6 12 18 13 16 16 18 19 13 11 21 19 8 ^
-+50 1 12 15 16 19 2 23 19 4 1 2 25 14 11 25 24 16 8 14 21 21 16 6 13 1 23 15 8
-+17 4 3 4 9 23 12 8 8 24 13 6 11 3 8 24 19 8 23 1 24 24 12 ^
-+53 0 25 13 2 6 25 7 9 3 5 11 19 11 16 5 4 17 24 23 15 14 10 7 14 17 25 15 10 14
-+6 18 18 4 1 13 10 16 1 25 16 2 24 5 1 17 6 17 6 24 11 7 21 9 19 ^
-+51 1 8 25 5 5 22 16 13 5 2 16 4 25 25 8 18 13 13 3 1 22 23 24 18 12 21 19 2 4
-+24 13 11 2 7 24 22 17 5 15 1 8 3 10 15 18 15 8 10 16 20 20 8 ^
-+50 1 18 22 11 18 9 11 15 22 20 18 6 24 15 25 4 22 12 17 4 6 17 20 2 4 2 5 20 15
-+19 24 18 9 8 2 5 23 2 10 21 8 5 2 9 16 16 15 6 22 23 18 ^
-+48 1 6 21 5 21 24 3 6 10 17 19 9 15 11 23 16 17 1 3 12 3 20 4 5 5 3 21 22 15 4
-+21 20 7 22 14 9 24 4 18 7 7 25 24 22 21 23 24 14 19 ^
-+55 0 12 6 7 4 2 12 25 15 3 9 23 8 16 25 11 14 4 10 19 23 16 13 9 20 25 17 11 8
-+4 19 25 17 7 16 21 6 4 8 2 15 9 2 9 19 3 6 3 3 10 25 13 15 7 8 24 ^
-+56 0 21 12 10 12 5 24 11 20 3 13 13 16 9 13 10 3 9 16 3 7 15 9 9 14 2 13 17 25
-+2 18 5 19 23 9 25 9 10 23 12 12 7 13 8 15 7 1 6 21 2 8 7 6 16 14 14 22 ^
-+47 0 15 13 24 10 15 11 10 8 14 15 21 25 21 16 9 18 20 22 21 20 11 14 23 22 10
-+13 14 8 19 12 2 11 20 23 13 4 10 6 5 7 23 11 3 16 8 21 12 ^
-+49 0 4 8 18 5 12 14 8 6 20 19 24 8 23 17 3 7 19 1 18 1 14 22 13 14 5 8 22 18 14
-+25 17 11 12 22 2 12 12 16 12 13 18 17 12 17 14 18 8 25 22 ^
-+46 1 23 5 3 8 14 24 17 7 3 3 23 17 22 19 19 17 16 22 24 14 16 20 23 20 9 19 16
-+7 12 16 5 8 9 7 10 21 24 10 11 19 1 21 14 14 19 20 ^
-+57 1 22 8 12 20 1 18 5 6 5 12 14 1 1 11 9 22 3 24 9 6 1 11 16 1 12 8 11 11 17
-+10 22 7 3 10 2 6 4 24 16 24 19 4 5 18 11 12 9 20 21 25 2 21 18 10 20 25 7 ^
-+56 1 3 17 17 5 8 22 25 19 8 10 19 7 11 4 8 18 3 18 3 11 24 2 14 9 1 10 4 4 13
-+19 22 4 7 19 5 10 10 1 8 22 22 6 8 13 12 11 17 23 14 16 7 5 11 22 24 18 ^
-+54 1 2 11 13 18 4 20 8 1 6 25 20 17 20 1 25 10 15 15 2 17 13 9 24 17 24 20 13
-+15 17 3 11 20 10 5 13 23 18 5 3 18 15 7 5 7 4 15 20 16 2 17 1 7 4 23 ^
-+56 0 7 25 14 1 4 7 19 19 20 3 13 12 4 3 14 4 14 11 6 3 25 18 16 20 24 12 19 18
-+25 6 23 6 15 5 4 4 6 14 13 20 5 14 15 2 13 21 11 5 17 2 2 10 11 13 14 24 ^
-+49 0 12 11 20 3 14 2 3 2 23 12 12 17 24 11 8 6 24 16 15 22 21 14 6 12 20 19 5 5
-+12 11 6 23 2 16 23 7 24 6 21 2 17 17 5 25 11 25 20 25 19 ^
-+54 0 18 6 12 19 25 7 6 5 2 14 12 16 1 15 7 1 26 19 19 13 20 11 17 6 20 5 24 24
-+1 21 11 9 20 21 15 10 19 26 3 2 6 7 12 9 10 8 14 10 15 5 17 8 21 7 ^
-+56 0 20 25 6 19 8 3 22 16 16 16 17 13 11 10 17 15 12 6 13 14 17 4 12 10 24 5 13
-+24 3 5 2 5 11 14 8 5 10 17 16 8 4 14 21 15 3 6 17 25 8 2 3 3 19 10 13 23 ^
-+51 1 22 8 2 13 25 17 2 1 19 1 14 20 2 5 4 15 8 14 20 7 25 20 26 20 16 7 17 17
-+22 1 13 6 5 1 18 14 15 23 15 10 5 19 18 18 26 12 13 3 25 12 18 ^
-+51 1 16 24 4 16 3 6 26 26 10 20 13 1 20 24 10 21 7 25 2 25 22 9 15 16 26 5 12 1
-+7 4 24 7 14 20 1 4 7 3 10 10 15 6 13 6 22 6 20 22 2 26 26 ^
-+47 1 6 14 1 16 3 24 25 24 17 12 14 18 18 9 9 11 22 13 9 2 22 15 20 20 18 8 13
-+13 21 8 11 5 26 8 19 17 4 2 15 26 13 24 26 11 16 9 24 ^
-+52 0 8 18 21 6 1 8 1 16 4 20 23 23 24 10 11 12 10 10 25 1 11 25 10 3 26 26 20
-+15 11 19 16 17 3 16 12 25 15 9 23 1 2 24 8 10 18 2 9 5 4 17 16 12 ^
-+50 0 12 20 20 1 3 11 5 9 3 17 9 17 24 21 3 4 16 2 10 1 25 5 22 16 6 21 19 21 23
-+15 9 9 21 17 11 1 15 17 23 24 11 7 10 26 15 8 22 22 18 16 ^
-+48 0 11 17 5 26 7 23 19 3 24 17 2 19 18 26 21 12 5 18 22 20 7 15 6 4 5 20 13 10
-+23 18 16 25 18 15 2 20 14 24 22 17 3 15 16 1 10 2 12 16 ^
-+47 0 21 1 21 21 4 18 13 1 24 18 23 17 19 6 19 9 26 25 23 23 14 13 13 20 12 13 4
-+21 10 22 21 22 1 12 12 7 13 16 18 8 9 4 3 10 18 12 25 ^
-+47 1 5 19 19 12 24 13 18 1 22 8 1 17 18 24 3 22 7 7 19 26 13 26 6 26 6 18 12 5
-+26 17 18 19 22 10 12 8 23 11 17 23 25 5 5 11 4 13 20 ^
-+52 0 18 4 19 23 3 13 15 4 3 9 24 14 5 25 21 22 18 17 12 15 14 16 10 14 9 19 7
-+16 3 23 4 26 18 5 16 21 24 2 8 8 8 7 11 13 14 7 9 12 18 11 10 20 ^
-+47 1 20 12 14 19 11 21 21 22 19 13 10 16 19 14 7 8 16 20 10 3 9 23 18 7 26 16
-+22 21 21 5 14 11 2 2 16 22 11 26 7 22 23 5 23 10 4 22 5 ^
-+50 0 19 20 9 16 10 24 4 19 26 4 25 4 8 17 7 7 2 23 11 18 19 23 6 10 9 1 9 14 19
-+5 6 6 25 12 11 21 26 12 3 8 20 8 21 18 25 25 14 4 11 25 ^
-+45 1 23 4 14 3 17 26 22 26 2 15 9 8 25 19 12 23 17 20 17 10 4 23 20 17 21 14 14
-+9 18 11 18 2 18 4 2 22 25 15 18 10 23 8 21 26 15 ^
-+54 0 7 14 10 6 6 15 15 13 2 11 15 22 2 9 4 4 6 16 11 11 3 16 13 19 25 16 5 7 20
-+22 9 25 11 24 24 25 13 8 15 23 16 6 3 18 23 16 23 8 20 4 1 1 14 16 ^
-+43 1 12 24 14 14 26 23 13 26 14 21 25 25 4 9 13 5 8 9 21 8 12 26 24 9 24 15 1
-+23 22 16 14 8 22 15 19 24 20 7 8 15 24 12 18 ^
-+57 0 4 23 21 13 19 15 21 7 15 7 3 21 20 8 22 14 23 26 19 2 10 18 3 5 3 1 9 15
-+15 3 7 13 23 9 7 1 13 17 14 25 9 16 2 2 6 13 7 19 25 17 1 5 21 2 7 22 5 ^
-+55 1 6 25 3 12 19 6 2 4 24 17 9 18 20 19 4 11 14 1 6 8 26 6 9 22 4 10 2 7 21 9
-+8 24 25 14 22 12 22 3 23 3 3 20 6 11 23 6 1 7 5 18 5 15 25 26 23 ^
-+53 0 1 10 11 11 4 12 11 20 3 14 2 3 2 23 12 12 17 24 11 8 6 24 16 15 22 21 14 6
-+12 20 19 5 5 12 11 6 23 2 16 23 7 24 6 21 2 17 17 5 25 11 25 20 26 ^
-+54 0 24 18 6 12 19 25 7 6 5 2 14 12 16 1 15 7 1 26 19 19 13 20 11 17 6 20 5 24
-+24 1 21 11 9 20 21 15 10 19 26 3 2 6 7 12 9 10 8 14 10 15 5 17 8 23 ^
-+58 0 1 20 25 6 19 8 3 22 16 16 16 17 13 11 10 17 15 12 6 13 14 17 4 12 10 24 5
-+13 24 3 5 2 5 11 14 8 5 10 17 16 8 4 14 21 15 3 6 17 25 8 2 3 3 19 10 13 22 19 ^
-+52 1 8 2 13 25 17 2 1 19 1 14 20 2 5 4 15 8 14 20 7 25 20 26 20 16 7 17 17 22 1
-+13 6 5 1 18 14 15 23 15 10 5 19 18 18 26 12 13 3 25 12 21 16 22 ^
-+56 1 4 16 3 6 26 26 10 20 13 1 20 24 10 21 7 25 2 25 22 9 15 16 26 5 12 1 7 4
-+24 7 14 20 1 4 7 3 10 10 15 6 13 6 22 6 20 22 2 26 9 6 14 1 16 3 24 12 ^
-+52 0 24 17 12 14 18 18 9 9 11 22 13 9 2 22 15 20 20 18 8 13 13 21 8 11 5 26 8
-+19 17 4 2 15 26 13 24 26 11 16 9 1 8 18 21 6 1 8 1 16 4 20 23 5 ^
-+54 0 24 10 11 12 10 10 25 1 11 25 10 3 26 26 20 15 11 19 16 17 3 16 12 25 15 9
-+23 1 2 24 8 10 18 2 9 5 4 17 16 9 12 20 20 1 3 11 5 9 3 17 9 17 24 20 ^
-+49 1 3 4 16 2 10 1 25 5 22 16 6 21 19 21 23 15 9 9 21 17 11 1 15 17 23 24 11 7
-+10 26 15 8 22 22 18 26 11 17 5 26 7 23 19 3 24 17 2 19 8 ^
-+49 0 26 21 12 5 18 22 20 7 15 6 4 5 20 13 10 23 18 16 25 18 15 2 20 14 24 22 17
-+3 15 16 1 10 2 12 2 21 1 21 21 4 18 13 1 24 18 23 17 19 23 ^
-+50 1 19 9 26 25 23 23 14 13 13 20 12 13 4 21 10 22 21 22 1 12 12 7 13 16 18 8 9
-+4 3 10 18 12 4 5 19 19 12 24 13 18 1 22 8 1 17 18 24 3 22 21 ^
-+48 1 7 19 26 13 26 6 26 6 18 12 5 26 17 18 19 22 10 12 8 23 11 17 23 25 5 5 11
-+4 13 7 18 4 19 23 3 13 15 4 3 9 24 14 5 25 21 22 18 25 ^
-+53 1 12 15 14 16 10 14 9 19 7 16 3 23 4 26 18 5 16 21 24 2 8 8 8 7 11 13 14 7 9
-+12 18 11 10 7 20 12 14 19 11 21 21 22 19 13 10 16 19 14 7 8 16 20 7 ^
-+49 0 3 9 23 18 7 26 16 22 21 21 5 14 11 2 2 16 22 11 26 7 22 23 5 23 10 4 22 24
-+19 20 9 16 10 24 4 19 26 4 25 4 8 17 7 7 2 23 11 18 19 ^
-+49 0 23 6 10 9 1 9 14 19 5 6 6 25 12 11 21 26 12 3 8 20 8 21 18 25 25 14 4 11
-+24 23 4 14 3 17 26 22 26 2 15 9 8 25 19 12 23 17 20 17 10 ^
-+54 0 4 23 20 17 21 14 14 9 18 11 18 2 18 4 2 22 25 15 18 10 23 8 21 26 7 14 10
-+6 6 15 15 13 2 11 15 22 2 9 4 4 6 16 11 11 3 16 13 19 25 16 5 7 20 23 ^
-+47 0 9 25 11 24 24 25 13 8 15 23 16 6 3 18 23 16 23 8 20 4 1 1 14 13 12 24 14
-+14 26 23 13 26 14 21 25 25 4 9 13 5 8 9 21 8 12 26 15 ^
-+51 1 9 24 15 1 23 22 16 14 8 22 15 19 24 20 7 8 15 24 12 4 4 23 21 13 19 15 21
-+7 15 7 3 21 20 8 22 14 23 26 19 2 10 18 3 5 3 1 9 15 15 3 24 ^
-+60 0 13 23 9 7 1 13 17 14 25 9 16 2 2 6 13 7 19 25 17 1 5 21 2 7 22 5 6 25 3 12
-+19 6 2 4 24 17 9 18 20 19 4 11 14 1 6 8 26 6 9 22 4 10 2 7 21 9 8 24 25 10 ^
-+59 0 22 12 22 3 23 3 3 20 6 11 23 6 1 7 5 18 5 15 25 26 1 1 10 11 11 4 12 11 20
-+3 14 2 3 2 23 12 12 17 24 11 8 6 24 16 15 22 21 14 6 12 20 19 5 5 12 11 6 23 8 ^
-+50 0 16 23 7 24 6 21 2 17 17 5 25 11 25 20 25 24 18 6 12 19 25 7 6 5 2 14 12 16
-+1 15 7 1 26 19 19 13 20 11 17 6 20 5 24 24 1 21 11 9 20 14 ^
-+60 0 15 10 19 26 3 2 6 7 12 9 10 8 14 10 15 5 17 8 21 1 20 25 6 19 8 3 22 16 16
-+16 17 13 11 10 17 15 12 6 13 14 17 4 12 10 24 5 13 24 3 5 2 5 11 14 8 5 10 17
-+16 13 ^
-+57 0 4 14 21 15 3 6 17 25 8 2 3 3 19 10 13 22 22 8 2 13 25 17 2 1 19 1 14 20 2
-+5 4 15 8 14 20 7 25 20 26 20 16 7 17 17 22 1 13 6 5 1 18 14 15 23 15 10 21 ^
-+52 1 19 18 18 26 12 13 3 25 12 21 16 24 4 16 3 6 26 26 10 20 13 1 20 24 10 21 7
-+25 2 25 22 9 15 16 26 5 12 1 7 4 24 7 14 20 1 4 7 3 10 10 15 19 ^
-+51 0 13 6 22 6 20 22 2 26 9 6 14 1 16 3 24 25 24 17 12 14 18 18 9 9 11 22 13 9
-+2 22 15 20 20 18 8 13 13 21 8 11 5 26 8 19 17 4 2 15 26 13 21 ^
-+52 1 24 26 11 16 9 1 8 18 21 6 1 8 1 16 4 20 23 23 24 10 11 12 10 10 25 1 11 25
-+10 3 26 26 20 15 11 19 16 17 3 16 12 25 15 9 23 1 2 24 8 10 18 15 ^
-+55 1 9 5 4 17 16 9 12 20 20 1 3 11 5 9 3 17 9 17 24 21 3 4 16 2 10 1 25 5 22 16
-+6 21 19 21 23 15 9 9 21 17 11 1 15 17 23 24 11 7 10 26 15 8 22 22 11 ^
-+50 1 26 11 17 5 26 7 23 19 3 24 17 2 19 18 26 21 12 5 18 22 20 7 15 6 4 5 20 13
-+10 23 18 16 25 18 15 2 20 14 24 22 17 3 15 16 1 10 2 12 2 25 ^
-+51 0 1 21 21 4 18 13 1 24 18 23 17 19 6 19 9 26 25 23 23 14 13 13 20 12 13 4 21
-+10 22 21 22 1 12 12 7 13 16 18 8 9 4 3 10 18 12 4 5 19 19 12 24 ^
-+53 1 13 18 1 22 8 1 17 18 24 3 22 7 7 19 26 13 26 6 26 6 18 12 5 26 17 18 19 22
-+10 12 8 23 11 17 23 25 5 5 11 4 13 7 18 4 19 23 3 13 15 4 3 9 18 ^
-+51 1 14 5 25 21 22 18 17 12 15 14 16 10 14 9 19 7 16 3 23 4 26 18 5 16 21 24 2
-+8 8 8 7 11 13 14 7 9 12 18 11 10 7 20 12 14 19 11 21 21 22 19 26 ^
-+49 0 10 16 19 14 7 8 16 20 10 3 9 23 18 7 26 16 22 21 21 5 14 11 2 2 16 22 11
-+26 7 22 23 5 23 10 4 22 24 19 20 9 16 10 24 4 19 26 4 25 14 ^
-+52 0 8 17 7 7 2 23 11 18 19 23 6 10 9 1 9 14 19 5 6 6 25 12 11 21 26 12 3 8 20
-+8 21 18 25 25 14 4 11 24 23 4 14 3 17 26 22 26 2 15 9 8 25 24 ^
-+55 1 12 23 17 20 17 10 4 23 20 17 21 14 14 9 18 11 18 2 18 4 2 22 25 15 18 10
-+23 8 21 26 7 14 10 6 6 15 15 13 2 11 15 22 2 9 4 4 6 16 11 11 3 16 13 19 15 ^
-+49 0 16 5 7 20 22 9 25 11 24 24 25 13 8 15 23 16 6 3 18 23 16 23 8 20 4 1 1 14
-+13 12 24 14 14 26 23 13 26 14 21 25 25 4 9 13 5 8 9 21 9 ^
-+55 0 22 24 9 27 23 1 13 18 24 1 8 24 8 6 14 1 4 5 15 27 12 20 1 17 5 4 14 25 14
-+3 19 24 24 14 8 13 12 19 8 3 6 13 7 10 23 19 10 17 17 11 6 13 8 18 18 ^
-+51 0 7 3 25 1 17 8 26 25 11 23 14 27 1 22 11 9 7 19 4 15 18 2 27 20 11 5 20 22
-+19 15 5 6 17 8 1 19 22 9 23 10 26 27 26 14 12 3 14 15 11 2 26 ^
-+50 0 6 22 20 8 25 4 25 24 23 20 3 3 16 2 2 27 2 15 14 27 3 17 12 27 27 7 26 2
-+22 11 9 10 24 15 1 27 11 27 4 1 25 25 16 6 2 22 12 17 21 14 ^
-+52 0 8 9 22 17 12 7 18 14 23 2 6 4 23 9 4 22 16 18 23 8 11 25 17 27 16 10 3 24
-+8 20 20 18 18 13 4 2 18 22 15 25 26 9 3 1 2 19 15 1 24 17 16 18 ^
-+49 0 9 14 11 8 16 19 16 22 10 16 24 25 7 22 12 20 15 23 22 18 22 14 6 26 21 10
-+21 7 13 2 16 7 24 16 22 13 10 7 11 16 5 9 25 13 9 14 14 17 14 ^
-+54 1 2 10 5 25 5 7 10 22 10 1 24 3 11 7 23 5 17 14 3 18 5 13 26 15 5 13 23 18
-+17 3 18 3 27 15 6 25 24 22 27 17 4 25 23 15 9 15 21 8 7 7 15 3 13 25 ^
-+47 0 25 3 4 10 24 12 7 16 25 18 21 21 20 27 13 14 23 27 1 21 9 21 14 22 9 9 5
-+15 13 17 3 4 9 16 1 8 23 17 23 26 8 24 10 20 25 27 25 ^
-+58 1 8 26 8 10 4 3 8 14 5 5 7 11 13 11 26 11 4 26 17 20 19 11 10 3 10 14 9 6 9
-+7 16 10 4 4 19 19 2 26 13 19 17 15 24 15 4 21 22 13 13 12 22 2 14 20 5 18 7 25 ^
-+58 0 17 24 20 13 6 17 9 20 2 10 19 3 22 4 1 11 3 5 3 21 11 15 12 23 26 5 2 27 6
-+5 16 6 3 2 23 5 3 20 20 4 24 2 18 21 7 14 10 27 23 6 24 6 19 23 3 9 22 15 ^
-+54 0 21 17 19 25 17 7 21 19 6 16 15 15 20 14 2 25 19 14 18 19 7 9 1 14 11 10 16
-+3 23 14 26 10 11 1 18 1 12 24 19 19 1 7 2 3 24 7 12 9 2 8 16 20 24 25 ^
-+49 1 26 26 4 9 2 7 25 9 8 12 18 14 26 7 17 18 4 20 1 16 14 21 26 4 6 8 24 11 25
-+15 24 16 23 4 10 23 21 24 15 10 9 26 7 14 24 21 6 20 19 ^
-+56 1 17 16 17 1 3 12 1 4 13 3 9 21 23 7 18 11 1 19 20 23 12 12 27 13 13 15 16
-+13 1 16 15 12 26 3 16 16 8 17 13 21 4 6 5 19 14 16 4 16 11 14 18 18 27 9 13 22 ^
-+51 1 3 26 22 3 7 6 4 26 3 15 8 25 1 20 13 9 11 20 6 11 21 27 25 20 7 4 18 26 16
-+27 5 12 19 7 23 6 25 25 2 11 13 25 21 18 17 6 12 14 13 24 13 ^
-+48 1 14 19 26 27 25 6 1 15 4 7 27 24 27 21 5 27 19 18 8 21 3 23 20 21 25 21 1 9
-+17 22 5 22 8 2 13 27 8 19 27 21 2 5 8 4 27 10 6 25 ^
-+52 0 2 6 1 1 26 18 13 5 10 18 10 8 5 21 15 5 14 19 12 4 8 20 21 26 1 12 25 10 2
-+17 10 15 2 20 25 26 23 25 12 16 15 9 18 15 19 21 16 26 11 18 20 26 ^
-+53 0 6 22 7 8 8 12 2 21 18 12 11 5 19 3 19 27 18 25 22 22 23 16 2 1 20 16 14 22
-+6 15 22 1 21 6 6 10 2 26 12 11 6 27 14 7 20 26 20 17 7 19 5 23 14 ^
-+61 0 16 12 7 15 17 7 5 11 12 15 7 1 10 10 8 4 2 4 17 4 11 17 26 23 24 4 5 12 5
-+1 6 9 6 8 27 5 11 11 24 24 13 17 2 24 26 19 11 22 21 2 2 14 21 13 1 23 10 25 8
-+15 13 ^
-+52 0 19 23 2 9 26 6 23 13 5 24 12 21 11 14 4 12 10 12 22 4 3 20 17 10 13 16 9
-+10 27 9 12 13 20 10 12 23 23 11 19 13 25 22 8 1 5 16 20 9 19 9 24 26 ^
-+51 0 12 15 6 21 27 22 26 24 18 9 15 8 22 24 9 27 23 1 13 18 24 1 8 24 8 6 14 1
-+4 5 15 27 12 20 1 17 5 4 14 25 14 3 19 24 24 14 8 13 12 19 22 ^
-+56 0 3 6 13 7 10 23 19 10 17 17 11 6 13 8 18 6 7 3 25 1 17 8 26 25 11 23 14 27
-+1 22 11 9 7 19 4 15 18 2 27 20 11 5 20 22 19 15 5 6 17 8 1 19 22 9 23 17 ^
-+50 0 26 27 26 14 12 3 14 15 11 2 12 6 22 20 8 25 4 25 24 23 20 3 3 16 2 2 27 2
-+15 14 27 3 17 12 27 27 7 26 2 22 11 9 10 24 15 1 27 11 27 21 ^
-+52 0 1 25 25 16 6 2 22 12 17 21 12 8 9 22 17 12 7 18 14 23 2 6 4 23 9 4 22 16
-+18 23 8 11 25 17 27 16 10 3 24 8 20 20 18 18 13 4 2 18 22 15 25 10 ^
-+52 0 9 3 1 2 19 15 1 24 17 16 18 9 14 11 8 16 19 16 22 10 16 24 25 7 22 12 20
-+15 23 22 18 22 14 6 26 21 10 21 7 13 2 16 7 24 16 22 13 10 7 11 16 13 ^
-+53 1 9 25 13 9 14 14 17 25 2 10 5 25 5 7 10 22 10 1 24 3 11 7 23 5 17 14 3 18 5
-+13 26 15 5 13 23 18 17 3 18 3 27 15 6 25 24 22 27 17 4 25 23 15 15 ^
-+52 1 15 21 8 7 7 15 3 13 22 25 3 4 10 24 12 7 16 25 18 21 21 20 27 13 14 23 27
-+1 21 9 21 14 22 9 9 5 15 13 17 3 4 9 16 1 8 23 17 23 26 8 24 14 ^
-+58 0 20 25 27 3 8 26 8 10 4 3 8 14 5 5 7 11 13 11 26 11 4 26 17 20 19 11 10 3
-+10 14 9 6 9 7 16 10 4 4 19 19 2 26 13 19 17 15 24 15 4 21 22 13 13 12 22 2 14
-+18 ^
-+60 0 5 18 7 17 24 20 13 6 17 9 20 2 10 19 3 22 4 1 11 3 5 3 21 11 15 12 23 26 5
-+2 27 6 5 16 6 3 2 23 5 3 20 20 4 24 2 18 21 7 14 10 27 23 6 24 6 19 23 3 9 25 ^
-+55 0 16 21 17 19 25 17 7 21 19 6 16 15 15 20 14 2 25 19 14 18 19 7 9 1 14 11 10
-+16 3 23 14 26 10 11 1 18 1 12 24 19 19 1 7 2 3 24 7 12 9 2 8 16 20 24 27 ^
-+51 1 26 26 4 9 2 7 25 9 8 12 18 14 26 7 17 18 4 20 1 16 14 21 26 4 6 8 24 11 25
-+15 24 16 23 4 10 23 21 24 15 10 9 26 7 14 24 21 6 20 5 17 15 ^
-+57 0 17 1 3 12 1 4 13 3 9 21 23 7 18 11 1 19 20 23 12 12 27 13 13 15 16 13 1 16
-+15 12 26 3 16 16 8 17 13 21 4 6 5 19 14 16 4 16 11 14 18 18 27 9 13 21 3 26 23 ^
-+52 0 3 7 6 4 26 3 15 8 25 1 20 13 9 11 20 6 11 21 27 25 20 7 4 18 26 16 27 5 12
-+19 7 23 6 25 25 2 11 13 25 21 18 17 6 12 14 13 24 11 14 19 26 12 ^
-+55 1 25 6 1 15 4 7 27 24 27 21 5 27 19 18 8 21 3 23 20 21 25 21 1 9 17 22 5 22
-+8 2 13 27 8 19 27 21 2 5 8 4 27 10 6 18 2 6 1 1 26 18 13 5 10 18 11 ^
-+52 0 8 5 21 15 5 14 19 12 4 8 20 21 26 1 12 25 10 2 17 10 15 2 20 25 26 23 25
-+12 16 15 9 18 15 19 21 16 26 11 18 20 6 22 7 8 8 12 2 21 18 12 11 27 ^
-+53 1 19 3 19 27 18 25 22 22 23 16 2 1 20 16 14 22 6 15 22 1 21 6 6 10 2 26 12
-+11 6 27 14 7 20 26 20 17 7 19 5 23 18 16 12 7 15 17 7 5 11 12 15 7 22 ^
-+57 1 10 10 8 4 2 4 17 4 11 17 26 23 24 4 5 12 5 1 6 9 6 8 27 5 11 11 24 24 13
-+17 2 24 26 19 11 22 21 2 2 14 21 13 1 23 10 25 8 15 26 19 23 2 9 26 6 23 22 ^
-+52 1 5 24 12 21 11 14 4 12 10 12 22 4 3 20 17 10 13 16 9 10 27 9 12 13 20 10 12
-+23 23 11 19 13 25 22 8 1 5 16 20 9 19 9 24 20 12 15 6 21 27 22 26 16 ^
-+58 0 18 9 15 8 22 24 9 27 23 1 13 18 24 1 8 24 8 6 14 1 4 5 15 27 12 20 1 17 5
-+4 14 25 14 3 19 24 24 14 8 13 12 19 8 3 6 13 7 10 23 19 10 17 17 11 6 13 8 22 ^
-+55 0 6 7 3 25 1 17 8 26 25 11 23 14 27 1 22 11 9 7 19 4 15 18 2 27 20 11 5 20
-+22 19 15 5 6 17 8 1 19 22 9 23 10 26 27 26 14 12 3 14 15 11 2 12 6 22 16 ^
-+53 0 8 25 4 25 24 23 20 3 3 16 2 2 27 2 15 14 27 3 17 12 27 27 7 26 2 22 11 9
-+10 24 15 1 27 11 27 4 1 25 25 16 6 2 22 12 17 21 12 8 9 22 17 12 18 ^
-+54 0 7 18 14 23 2 6 4 23 9 4 22 16 18 23 8 11 25 17 27 16 10 3 24 8 20 20 18 18
-+13 4 2 18 22 15 25 26 9 3 1 2 19 15 1 24 17 16 18 9 14 11 8 16 19 27 ^
-+52 0 22 10 16 24 25 7 22 12 20 15 23 22 18 22 14 6 26 21 10 21 7 13 2 16 7 24
-+16 22 13 10 7 11 16 5 9 25 13 9 14 14 17 25 2 10 5 25 5 7 10 22 10 22 ^
-+54 1 24 3 11 7 23 5 17 14 3 18 5 13 26 15 5 13 23 18 17 3 18 3 27 15 6 25 24 22
-+27 17 4 25 23 15 9 15 21 8 7 7 15 3 13 22 25 3 4 10 24 12 7 16 25 10 ^
-+56 0 21 21 20 27 13 14 23 27 1 21 9 21 14 22 9 9 5 15 13 17 3 4 9 16 1 8 23 17
-+23 26 8 24 10 20 25 27 3 8 26 8 10 4 3 8 14 5 5 7 11 13 11 26 11 4 26 2 ^
-+61 1 20 19 11 10 3 10 14 9 6 9 7 16 10 4 4 19 19 2 26 13 19 17 15 24 15 4 21 22
-+13 13 12 22 2 14 20 5 18 7 17 24 20 13 6 17 9 20 2 10 19 3 22 4 1 11 3 5 3 21
-+11 15 22 ^
-+53 0 23 26 5 2 27 6 5 16 6 3 2 23 5 3 20 20 4 24 2 18 21 7 14 10 27 23 6 24 6
-+19 23 3 9 22 16 21 17 19 25 17 7 21 19 6 16 15 15 20 14 2 25 19 25 ^
-+60 0 18 19 7 9 1 14 11 10 16 3 23 14 26 10 11 1 18 1 12 24 19 19 1 7 2 3 24 7
-+12 9 2 8 16 20 24 5 26 26 4 9 2 7 25 9 8 12 18 14 26 7 17 18 4 20 1 16 14 21 26
-+18 ^
-+54 0 6 8 24 11 25 15 24 16 23 4 10 23 21 24 15 10 9 26 7 14 24 21 6 20 5 17 16
-+17 1 3 12 1 4 13 3 9 21 23 7 18 11 1 19 20 23 12 12 27 13 13 15 16 13 24 ^
-+57 0 1 16 15 12 26 3 16 16 8 17 13 21 4 6 5 19 14 16 4 16 11 14 18 18 27 9 13
-+21 3 26 22 3 7 6 4 26 3 15 8 25 1 20 13 9 11 20 6 11 21 27 25 20 7 4 18 26 10 ^
-+48 0 27 5 12 19 7 23 6 25 25 2 11 13 25 21 18 17 6 12 14 13 24 11 14 19 26 27
-+25 6 1 15 4 7 27 24 27 21 5 27 19 18 8 21 3 23 20 21 25 8 ^
-+60 1 1 9 17 22 5 22 8 2 13 27 8 19 27 21 2 5 8 4 27 10 6 18 2 6 1 1 26 18 13 5
-+10 18 10 8 5 21 15 5 14 19 12 4 8 20 21 26 1 12 25 10 2 17 10 15 2 20 25 26 23
-+21 ^
-+54 1 12 16 15 9 18 15 19 21 16 26 11 18 20 6 22 7 8 8 12 2 21 18 12 11 5 19 3
-+19 27 18 25 22 22 23 16 2 1 20 16 14 22 6 15 22 1 21 6 6 10 2 26 12 11 24 ^
-+60 0 27 14 7 20 26 20 17 7 19 5 23 18 16 12 7 15 17 7 5 11 12 15 7 1 10 10 8 4
-+2 4 17 4 11 17 26 23 24 4 5 12 5 1 6 9 6 8 27 5 11 11 24 24 13 17 2 24 26 19 11
-+22 ^
-+55 0 21 2 2 14 21 13 1 23 10 25 8 15 26 19 23 2 9 26 6 23 13 5 24 12 21 11 14 4
-+12 10 12 22 4 3 20 17 10 13 16 9 10 27 9 12 13 20 10 12 23 23 11 19 13 25 13 ^
-+55 0 8 1 5 16 20 9 19 9 24 20 12 15 6 21 27 22 26 24 18 9 15 8 22 24 9 27 23 1
-+13 18 24 1 8 24 8 6 14 1 4 5 15 27 12 20 1 17 5 4 14 25 14 3 19 24 16 ^
-+60 0 14 8 13 12 19 8 3 6 13 7 10 23 19 10 17 17 11 6 13 8 18 6 7 3 25 1 17 8 26
-+25 11 23 14 27 1 22 11 9 7 19 4 15 18 2 27 20 11 5 20 22 19 15 5 6 17 8 1 19 22
-+10 ^
-+55 1 15 9 11 26 19 22 27 2 21 8 20 23 26 12 10 21 9 15 13 25 7 26 1 13 5 9 1 3
-+9 21 22 7 1 23 28 1 2 8 22 12 18 28 5 18 14 7 11 17 20 20 7 21 13 8 22 ^
-+52 1 21 22 2 16 20 15 28 9 3 22 13 10 23 4 16 11 14 1 10 8 14 14 15 18 13 12 21
-+18 25 15 27 17 5 1 23 7 17 20 11 14 10 4 21 17 19 25 17 22 18 21 19 17 ^
-+57 0 10 15 26 20 8 13 19 7 8 18 7 12 14 6 8 22 21 11 10 14 23 25 9 15 22 18 6
-+17 24 7 13 6 12 7 2 18 18 26 13 13 16 8 24 10 3 26 9 20 1 12 2 14 13 23 12 25 5
-+^
-+57 0 24 11 6 3 8 27 8 21 26 3 11 19 18 5 5 25 26 24 4 23 15 15 23 21 24 5 15 21
-+3 3 18 2 24 27 11 20 10 11 4 5 12 2 23 6 5 3 1 14 26 15 12 6 28 12 19 20 9 ^
-+55 0 6 23 4 7 7 3 10 24 28 6 10 9 6 20 14 27 10 19 11 1 15 21 5 10 7 11 8 16 9
-+27 5 2 6 6 27 20 24 21 2 20 16 14 24 17 15 3 2 26 25 25 14 24 20 28 28 ^
-+59 1 17 5 9 10 25 20 12 9 18 3 16 4 10 7 18 23 17 2 8 1 28 7 2 15 5 18 11 23 2
-+1 18 22 14 7 20 21 2 11 12 3 15 12 4 1 27 21 16 27 19 18 13 21 14 5 20 9 19 27
-+25 ^
-+55 0 3 5 16 16 22 2 13 7 4 13 19 27 15 7 16 25 3 4 4 17 12 13 11 12 26 6 1 10
-+15 18 4 19 10 27 9 4 25 13 21 25 26 21 20 12 25 21 7 17 28 27 3 13 14 19 18 ^
-+53 1 23 19 4 28 3 20 18 9 7 15 4 26 5 6 20 5 23 28 10 24 19 13 28 1 9 12 23 16
-+10 13 2 19 21 6 25 22 28 23 16 7 20 4 2 22 11 26 22 6 9 17 11 21 10 ^
-+47 0 1 3 28 11 27 25 12 8 26 26 28 24 13 22 17 6 4 24 15 17 18 4 22 23 9 24 12
-+27 27 25 9 13 15 11 9 22 28 26 11 18 15 10 6 16 17 14 24 ^
-+55 1 25 27 16 28 22 24 1 1 11 7 24 3 28 7 5 28 16 15 1 7 14 9 7 6 15 25 19 9 3
-+19 23 1 26 20 17 17 1 16 24 9 16 8 15 6 21 17 22 9 28 8 8 5 4 24 26 ^
-+47 1 14 4 21 26 23 7 8 27 23 23 22 19 24 25 16 19 12 22 10 20 3 7 14 1 20 6 26
-+23 27 4 16 20 18 12 20 15 19 16 18 20 27 11 11 17 24 18 16 ^
-+50 0 19 1 25 23 2 15 16 26 27 23 14 12 28 22 15 8 19 2 20 13 1 24 2 25 1 6 19
-+19 8 11 24 24 21 13 27 5 11 28 17 7 25 6 23 24 14 25 12 5 13 25 ^
-+60 0 2 5 8 10 16 11 5 26 18 19 21 3 12 11 13 4 14 22 22 14 16 13 3 22 16 23 5
-+19 6 13 10 26 17 27 26 4 3 25 6 14 2 3 5 7 23 11 22 8 25 2 9 25 18 17 8 2 14 4
-+19 22 ^
-+54 1 5 27 13 9 2 27 28 2 17 23 10 27 18 26 7 22 16 3 27 1 26 21 28 10 3 6 2 2
-+10 17 13 16 6 17 21 23 13 20 22 5 6 11 12 12 8 23 13 17 9 23 20 3 28 21 ^
-+56 0 12 17 25 28 19 5 21 4 27 8 1 19 14 20 6 7 9 1 6 22 3 19 26 14 8 6 7 19 15
-+23 1 17 16 6 26 14 5 22 25 4 7 10 16 21 10 18 19 24 16 23 8 3 17 28 18 13 ^
-+58 0 2 5 3 21 21 15 6 24 1 4 24 18 10 22 1 21 12 5 4 4 20 25 24 26 8 25 11 2 7
-+27 22 19 4 18 27 10 28 4 12 24 8 16 12 11 16 17 25 8 12 16 1 9 9 10 5 24 23 11 ^
-+62 1 5 14 18 8 4 9 5 17 8 28 1 22 4 11 3 2 17 3 14 9 27 13 18 24 9 8 7 28 25 14
-+21 27 24 6 18 16 2 12 15 9 14 10 1 8 17 4 6 15 26 11 15 2 28 20 26 16 3 7 5 8 9
-+24 ^
-+50 1 10 12 25 11 9 13 24 15 20 2 4 8 2 22 20 19 4 15 14 28 13 25 10 10 12 28 24
-+22 26 28 15 9 11 26 19 22 27 2 21 8 20 23 26 12 10 21 9 15 13 17 ^
-+60 1 7 26 1 13 5 9 1 3 9 21 22 7 1 23 28 1 2 8 22 12 18 28 5 18 14 7 11 17 20
-+20 7 21 13 8 28 21 22 2 16 20 15 28 9 3 22 13 10 23 4 16 11 14 1 10 8 14 14 15
-+18 17 ^
-+52 0 12 21 18 25 15 27 17 5 1 23 7 17 20 11 14 10 4 21 17 19 25 17 22 18 21 19
-+17 10 15 26 20 8 13 19 7 8 18 7 12 14 6 8 22 21 11 10 14 23 25 9 15 19 ^
-+57 1 18 6 17 24 7 13 6 12 7 2 18 18 26 13 13 16 8 24 10 3 26 9 20 1 12 2 14 13
-+23 12 25 3 24 11 6 3 8 27 8 21 26 3 11 19 18 5 5 25 26 24 4 23 15 15 23 21 12 ^
-+67 1 5 15 21 3 3 18 2 24 27 11 20 10 11 4 5 12 2 23 6 5 3 1 14 26 15 12 6 28 12
-+19 20 6 23 4 7 7 3 10 24 28 6 10 9 6 20 14 27 10 19 11 1 15 21 5 10 7 11 8 16 9
-+27 5 2 6 6 27 2 ^
-+56 1 24 21 2 20 16 14 24 17 15 3 2 26 25 25 14 24 20 28 14 17 5 9 10 25 20 12 9
-+18 3 16 4 10 7 18 23 17 2 8 1 28 7 2 15 5 18 11 23 2 1 18 22 14 7 20 21 24 ^
-+60 1 11 12 3 15 12 4 1 27 21 16 27 19 18 13 21 14 5 20 9 19 27 6 3 5 16 16 22 2
-+13 7 4 13 19 27 15 7 16 25 3 4 4 17 12 13 11 12 26 6 1 10 15 18 4 19 10 27 9 4
-+25 27 ^
-+51 0 21 25 26 21 20 12 25 21 7 17 28 27 3 13 14 19 3 23 19 4 28 3 20 18 9 7 15
-+4 26 5 6 20 5 23 28 10 24 19 13 28 1 9 12 23 16 10 13 2 19 21 23 ^
-+49 1 25 22 28 23 16 7 20 4 2 22 11 26 22 6 9 17 11 21 5 1 3 28 11 27 25 12 8 26
-+26 28 24 13 22 17 6 4 24 15 17 18 4 22 23 9 24 12 27 27 9 ^
-+56 0 9 13 15 11 9 22 28 26 11 18 15 10 6 16 17 14 11 25 27 16 28 22 24 1 1 11 7
-+24 3 28 7 5 28 16 15 1 7 14 9 7 6 15 25 19 9 3 19 23 1 26 20 17 17 1 16 16 ^
-+51 0 9 16 8 15 6 21 17 22 9 28 8 8 5 4 24 27 14 4 21 26 23 7 8 27 23 23 22 19
-+24 25 16 19 12 22 10 20 3 7 14 1 20 6 26 23 27 4 16 20 18 12 22 ^
-+51 0 15 19 16 18 20 27 11 11 17 24 18 1 19 1 25 23 2 15 16 26 27 23 14 12 28 22
-+15 8 19 2 20 13 1 24 2 25 1 6 19 19 8 11 24 24 21 13 27 5 11 28 16 ^
-+59 0 7 25 6 23 24 14 25 12 5 13 26 2 5 8 10 16 11 5 26 18 19 21 3 12 11 13 4 14
-+22 22 14 16 13 3 22 16 23 5 19 6 13 10 26 17 27 26 4 3 25 6 14 2 3 5 7 23 11 22
-+10 ^
-+59 0 25 2 9 25 18 17 8 2 14 4 19 1 5 27 13 9 2 27 28 2 17 23 10 27 18 26 7 22
-+16 3 27 1 26 21 28 10 3 6 2 2 10 17 13 16 6 17 21 23 13 20 22 5 6 11 12 12 8 23
-+7 ^
-+56 1 17 9 23 20 3 28 27 12 17 25 28 19 5 21 4 27 8 1 19 14 20 6 7 9 1 6 22 3 19
-+26 14 8 6 7 19 15 23 1 17 16 6 26 14 5 22 25 4 7 10 16 21 10 18 19 24 16 ^
-+57 1 23 8 3 17 28 18 10 2 5 3 21 21 15 6 24 1 4 24 18 10 22 1 21 12 5 4 4 20 25
-+24 26 8 25 11 2 7 27 22 19 4 18 27 10 28 4 12 24 8 16 12 11 16 17 25 8 12 18 ^
-+63 0 1 9 9 10 5 24 23 18 5 14 18 8 4 9 5 17 8 28 1 22 4 11 3 2 17 3 14 9 27 13
-+18 24 9 8 7 28 25 14 21 27 24 6 18 16 2 12 15 9 14 10 1 8 17 4 6 15 26 11 15 2
-+28 20 16 ^
-+52 1 16 3 7 5 8 9 26 10 12 25 11 9 13 24 15 20 2 4 8 2 22 20 19 4 15 14 28 13
-+25 10 10 12 28 24 22 26 28 15 9 11 26 19 22 27 2 21 8 20 23 26 12 28 ^
-+60 0 21 9 15 13 25 7 26 1 13 5 9 1 3 9 21 22 7 1 23 28 1 2 8 22 12 18 28 5 18
-+14 7 11 17 20 20 7 21 13 8 28 21 22 2 16 20 15 28 9 3 22 13 10 23 4 16 11 14 1
-+10 20 ^
-+54 1 14 14 15 18 13 12 21 18 25 15 27 17 5 1 23 7 17 20 11 14 10 4 21 17 19 25
-+17 22 18 21 19 17 10 15 26 20 8 13 19 7 8 18 7 12 14 6 8 22 21 11 10 14 23 11 ^
-+58 0 9 15 22 18 6 17 24 7 13 6 12 7 2 18 18 26 13 13 16 8 24 10 3 26 9 20 1 12
-+2 14 13 23 12 25 3 24 11 6 3 8 27 8 21 26 3 11 19 18 5 5 25 26 24 4 23 15 15 27
-+^
-+64 1 21 24 5 15 21 3 3 18 2 24 27 11 20 10 11 4 5 12 2 23 6 5 3 1 14 26 15 12 6
-+28 12 19 20 6 23 4 7 7 3 10 24 28 6 10 9 6 20 14 27 10 19 11 1 15 21 5 10 7 11
-+8 16 9 27 20 ^
-+58 1 2 6 6 27 20 24 21 2 20 16 14 24 17 15 3 2 26 25 25 14 24 20 28 14 17 5 9
-+10 25 20 12 9 18 3 16 4 10 7 18 23 17 2 8 1 28 7 2 15 5 18 11 23 2 1 18 22 14
-+28 ^
-+62 0 20 21 2 11 12 3 15 12 4 1 27 21 16 27 19 18 13 21 14 5 20 9 19 27 6 3 5 16
-+16 22 2 13 7 4 13 19 27 15 7 16 25 3 4 4 17 12 13 11 12 26 6 1 10 15 18 4 19 10
-+27 9 4 26 ^
-+52 0 13 21 25 26 21 20 12 25 21 7 17 28 27 3 13 14 19 3 23 19 4 28 3 20 18 9 7
-+15 4 26 5 6 20 5 23 28 10 24 19 13 28 1 9 12 23 16 10 13 2 19 21 27 ^
-+49 1 25 22 28 23 16 7 20 4 2 22 11 26 22 6 9 17 11 21 5 1 3 28 11 27 25 12 8 26
-+26 28 24 13 22 17 6 4 24 15 17 18 4 22 23 9 24 12 27 27 26 ^
-+57 0 9 13 15 11 9 22 28 26 11 18 15 10 6 16 17 14 11 25 27 16 28 22 24 1 1 11 7
-+24 3 28 7 5 28 16 15 1 7 14 9 7 6 15 25 19 9 3 19 23 1 26 20 17 17 1 16 24 9 ^
-+52 1 9 16 8 15 6 21 17 22 9 28 8 8 5 4 24 27 14 4 21 26 23 7 8 27 23 23 22 19
-+24 25 16 19 12 22 10 20 3 7 14 1 20 6 26 23 27 4 16 20 18 12 20 19 ^
-+52 1 19 16 18 20 27 11 11 17 24 18 1 19 1 25 23 2 15 16 26 27 23 14 12 28 22 15
-+8 19 2 20 13 1 24 2 25 1 6 19 19 8 11 24 24 21 13 27 5 11 28 17 7 24 ^
-+59 0 6 23 24 14 25 12 5 13 26 2 5 8 10 16 11 5 26 18 19 21 3 12 11 13 4 14 22
-+22 14 16 13 3 22 16 23 5 19 6 13 10 26 17 27 26 4 3 25 6 14 2 3 5 7 23 11 22 8
-+25 26 ^
-+59 0 9 25 18 17 8 2 14 4 19 1 5 27 13 9 2 27 28 2 17 23 10 27 18 26 7 22 16 3
-+27 1 26 21 28 10 3 6 2 2 10 17 13 16 6 17 21 23 13 20 22 5 6 11 12 12 8 23 13
-+17 21 ^
-+56 1 23 20 3 28 27 12 17 25 28 19 5 21 4 27 8 1 19 14 20 6 7 9 1 6 22 3 19 26
-+14 8 6 7 19 15 23 1 17 16 6 26 14 5 22 25 4 7 10 16 21 10 18 19 24 16 23 20 ^
-+60 0 3 17 28 18 10 2 5 3 21 21 15 6 24 1 4 24 18 10 22 1 21 12 5 4 4 20 25 24
-+26 8 25 11 2 7 27 22 19 4 18 27 10 28 4 12 24 8 16 12 11 16 17 25 8 12 16 1 9 9
-+10 21 ^
-+60 0 24 23 18 5 14 18 8 4 9 5 17 8 28 1 22 4 11 3 2 17 3 14 9 27 13 18 24 9 8 7
-+28 25 14 21 27 24 6 18 16 2 12 15 9 14 10 1 8 17 4 6 15 26 11 15 2 28 20 26 16
-+25 ^
-+53 1 7 5 8 9 26 10 12 25 11 9 13 24 15 20 2 4 8 2 22 20 19 4 15 14 28 13 25 10
-+10 12 28 24 22 26 28 15 9 11 26 19 22 27 2 21 8 20 23 26 12 10 21 9 24 ^
-+62 1 13 25 7 26 1 13 5 9 1 3 9 21 22 7 1 23 28 1 2 8 22 12 18 28 5 18 14 7 11
-+17 20 20 7 21 13 8 28 21 22 2 16 20 15 28 9 3 22 13 10 23 4 16 11 14 1 10 8 14
-+14 15 18 13 ^
-+54 0 12 21 18 25 15 27 17 5 1 23 7 17 20 11 14 10 4 21 17 19 25 17 22 18 21 19
-+17 10 15 26 20 8 13 19 7 8 18 7 12 14 6 8 22 21 11 10 14 23 25 9 15 22 18 13 ^
-+58 0 17 24 7 13 6 12 7 2 18 18 26 13 13 16 8 24 10 3 26 9 20 1 12 2 14 13 23 12
-+25 3 24 11 6 3 8 27 8 21 26 3 11 19 18 5 5 25 26 24 4 23 15 15 23 21 24 5 15 26
-+^
-+67 1 3 3 18 2 24 27 11 20 10 11 4 5 12 2 23 6 5 3 1 14 26 15 12 6 28 12 19 20 6
-+23 4 7 7 3 10 24 28 6 10 9 6 20 14 27 10 19 11 1 15 21 5 10 7 11 8 16 9 27 5 2
-+6 6 27 20 24 21 12 ^
-+62 0 20 16 14 24 17 15 3 2 26 25 25 14 24 20 28 14 17 5 9 10 25 20 12 9 18 3 16
-+4 10 7 18 23 17 2 8 1 28 7 2 15 5 18 11 23 2 1 18 22 14 7 20 21 2 11 12 3 15 12
-+4 1 27 18 ^
-+61 1 4 9 14 16 15 8 11 21 20 10 10 21 23 20 2 11 23 1 11 1 5 3 23 16 15 27 14 5
-+16 3 22 2 3 24 3 19 29 4 4 10 8 20 14 15 1 26 12 27 25 4 28 22 11 19 19 24 5 20
-+8 9 26 ^
-+55 1 25 19 17 19 15 7 24 24 21 3 20 16 8 3 17 28 18 29 9 23 9 10 29 4 12 24 15
-+5 8 22 17 29 12 3 8 29 15 21 21 4 7 20 7 10 7 26 10 16 24 6 7 12 8 12 28 ^
-+52 1 24 9 17 11 28 12 26 26 6 29 13 10 20 6 23 10 4 3 26 26 14 20 20 25 14 13
-+15 24 14 11 4 23 27 24 20 9 16 17 24 13 12 6 1 14 26 25 7 8 21 1 19 27 ^
-+65 0 3 2 2 17 21 13 5 9 21 28 9 1 13 2 21 8 24 1 3 27 13 18 19 4 15 12 5 2 16
-+27 16 6 2 1 23 17 14 28 19 23 6 22 16 4 19 6 16 28 3 3 1 15 13 22 6 15 11 6 4
-+24 25 15 19 23 12 ^
-+55 0 1 9 15 10 12 7 25 11 25 2 27 6 6 18 4 13 1 4 11 25 17 6 29 21 24 27 21 17
-+17 26 24 13 4 22 24 29 2 11 8 17 4 23 11 26 1 25 28 15 19 10 3 9 29 27 24 ^
-+53 1 22 3 27 21 2 26 19 9 19 27 23 3 12 17 10 4 8 27 19 16 1 21 23 28 23 18 8
-+25 18 26 20 8 17 19 2 4 11 7 18 6 24 2 25 25 5 27 20 3 28 20 18 21 11 ^
-+55 0 25 10 1 28 28 29 16 20 19 26 16 21 6 23 15 28 26 28 7 15 18 11 5 17 20 26
-+1 10 14 8 4 16 26 17 8 10 22 22 18 1 20 24 7 1 9 7 19 5 22 1 4 26 11 10 20 ^
-+58 0 5 14 2 6 4 2 9 22 15 13 20 22 26 18 16 9 2 15 20 27 8 6 17 5 15 9 25 10 26
-+4 5 27 5 19 21 5 6 11 29 19 8 2 24 26 22 19 18 17 23 14 21 14 22 13 20 5 29 12 ^
-+54 0 5 26 6 21 29 3 5 12 16 11 13 16 18 18 10 11 20 21 12 11 12 22 14 19 3 21
-+15 6 25 26 29 24 19 17 18 25 22 12 13 23 23 12 10 13 1 22 10 2 22 2 28 10 17 28
-+^
-+56 0 3 6 19 28 17 11 1 9 14 4 29 29 23 25 13 19 18 2 7 21 6 8 29 5 11 22 14 14
-+9 28 13 25 24 28 8 14 9 3 14 18 26 9 9 12 13 17 25 16 5 8 4 24 10 24 23 25 ^
-+49 0 29 21 9 18 28 25 11 3 16 4 21 25 3 4 18 12 12 29 26 13 26 23 26 7 23 10 9
-+27 26 21 25 21 18 9 24 16 22 5 21 7 7 27 4 20 23 13 27 10 27 ^
-+58 1 29 7 19 13 13 8 19 20 18 2 19 22 29 3 10 6 9 13 24 17 16 9 20 21 27 2 19 7
-+8 26 25 12 2 14 3 1 1 16 12 20 28 24 12 5 24 25 20 1 12 25 9 2 6 20 15 14 29 20
-+^
-+56 0 21 28 1 17 6 17 27 1 2 10 16 19 5 14 10 27 11 17 3 29 14 27 17 5 2 18 20
-+11 27 18 22 27 22 9 8 18 3 14 10 5 2 24 18 23 21 26 8 22 8 1 6 27 27 15 29 18 ^
-+64 0 2 29 22 8 16 20 4 12 9 6 12 16 16 7 9 20 29 11 9 4 1 15 25 16 29 10 22 7 2
-+8 5 18 14 23 24 4 6 26 3 11 6 12 1 7 14 24 14 6 10 21 16 23 29 25 6 14 17 2 12
-+10 5 10 15 25 ^
-+62 1 8 15 3 7 13 25 16 14 1 29 22 26 15 27 9 1 8 8 28 6 13 5 13 3 15 5 23 8 23
-+2 5 5 4 17 13 14 7 17 12 27 3 18 5 7 5 26 18 15 22 28 16 13 7 2 23 19 25 29 17
-+7 16 22 ^
-+55 1 23 11 11 15 2 13 9 26 2 24 26 7 28 11 2 29 7 22 23 5 28 19 1 27 29 1 24 11
-+18 20 3 13 11 7 3 15 17 24 1 18 13 6 3 25 27 16 28 18 24 8 23 7 29 28 15 ^
-+52 0 28 14 12 28 27 22 4 14 25 1 3 9 7 11 14 15 16 10 19 12 19 11 20 13 28 4 27
-+28 7 27 12 4 28 21 17 22 20 17 15 15 23 22 13 12 21 22 21 11 12 14 12 28 ^
-+62 0 27 8 7 4 9 14 16 15 8 11 21 20 10 10 21 23 20 2 11 23 1 11 1 5 3 23 16 15
-+27 14 5 16 3 22 2 3 24 3 19 29 4 4 10 8 20 14 15 1 26 12 27 25 4 28 22 11 19 19
-+24 5 20 18 ^
-+58 0 9 5 25 19 17 19 15 7 24 24 21 3 20 16 8 3 17 28 18 29 9 23 9 10 29 4 12 24
-+15 5 8 22 17 29 12 3 8 29 15 21 21 4 7 20 7 10 7 26 10 16 24 6 7 12 8 12 15 16 ^
-+56 0 9 17 11 28 12 26 26 6 29 13 10 20 6 23 10 4 3 26 26 14 20 20 25 14 13 15
-+24 14 11 4 23 27 24 20 9 16 17 24 13 12 6 1 14 26 25 7 8 21 1 19 3 2 2 17 21 23
-+^
-+64 1 5 9 21 28 9 1 13 2 21 8 24 1 3 27 13 18 19 4 15 12 5 2 16 27 16 6 2 1 23
-+17 14 28 19 23 6 22 16 4 19 6 16 28 3 3 1 15 13 22 6 15 11 6 4 24 25 15 19 23
-+28 1 9 15 10 24 ^
-+54 0 7 25 11 25 2 27 6 6 18 4 13 1 4 11 25 17 6 29 21 24 27 21 17 17 26 24 13 4
-+22 24 29 2 11 8 17 4 23 11 26 1 25 28 15 19 10 3 9 29 27 7 22 3 27 29 ^
-+54 1 2 26 19 9 19 27 23 3 12 17 10 4 8 27 19 16 1 21 23 28 23 18 8 25 18 26 20
-+8 17 19 2 4 11 7 18 6 24 2 25 25 5 27 20 3 28 20 18 21 10 25 10 1 28 27 ^
-+60 0 29 16 20 19 26 16 21 6 23 15 28 26 28 7 15 18 11 5 17 20 26 1 10 14 8 4 16
-+26 17 8 10 22 22 18 1 20 24 7 1 9 7 19 5 22 1 4 26 11 10 28 5 14 2 6 4 2 9 22
-+15 22 ^
-+54 1 20 22 26 18 16 9 2 15 20 27 8 6 17 5 15 9 25 10 26 4 5 27 5 19 21 5 6 11
-+29 19 8 2 24 26 22 19 18 17 23 14 21 14 22 13 20 5 29 6 5 26 6 21 29 28 ^
-+57 1 5 12 16 11 13 16 18 18 10 11 20 21 12 11 12 22 14 19 3 21 15 6 25 26 29 24
-+19 17 18 25 22 12 13 23 23 12 10 13 1 22 10 2 22 2 28 10 17 18 3 6 19 28 17 11
-+1 9 23 ^
-+54 0 14 4 29 29 23 25 13 19 18 2 7 21 6 8 29 5 11 22 14 14 9 28 13 25 24 28 8
-+14 9 3 14 18 26 9 9 12 13 17 25 16 5 8 4 24 10 24 23 4 29 21 9 18 28 27 ^
-+52 1 11 3 16 4 21 25 3 4 18 12 12 29 26 13 26 23 26 7 23 10 9 27 26 21 25 21 18
-+9 24 16 22 5 21 7 7 27 4 20 23 13 27 10 23 29 7 19 13 13 8 19 20 23 ^
-+61 0 2 19 22 29 3 10 6 9 13 24 17 16 9 20 21 27 2 19 7 8 26 25 12 2 14 3 1 1 16
-+12 20 28 24 12 5 24 25 20 1 12 25 9 2 6 20 15 14 29 18 21 28 1 17 6 17 27 1 2
-+10 16 19 ^
-+57 1 5 14 10 27 11 17 3 29 14 27 17 5 2 18 20 11 27 18 22 27 22 9 8 18 3 14 10
-+5 2 24 18 23 21 26 8 22 8 1 6 27 27 15 29 20 2 29 22 8 16 20 4 12 9 6 12 16 24 ^
-+64 0 7 9 20 29 11 9 4 1 15 25 16 29 10 22 7 2 8 5 18 14 23 24 4 6 26 3 11 6 12
-+1 7 14 24 14 6 10 21 16 23 29 25 6 14 17 2 12 10 5 10 15 25 8 15 3 7 13 25 16
-+14 1 29 22 26 10 ^
-+63 1 27 9 1 8 8 28 6 13 5 13 3 15 5 23 8 23 2 5 5 4 17 13 14 7 17 12 27 3 18 5
-+7 5 26 18 15 22 28 16 13 7 2 23 19 25 29 17 7 16 25 23 11 11 15 2 13 9 26 2 24
-+26 7 28 11 ^
-+56 1 2 29 7 22 23 5 28 19 1 27 29 1 24 11 18 20 3 13 11 7 3 15 17 24 1 18 13 6
-+3 25 27 16 28 18 24 8 23 7 29 28 6 28 14 12 28 27 22 4 14 25 1 3 9 7 11 29 ^
-+54 0 15 16 10 19 12 19 11 20 13 28 4 27 28 7 27 12 4 28 21 17 22 20 17 15 15 23
-+22 13 12 21 22 21 11 12 14 12 18 27 8 7 4 9 14 16 15 8 11 21 20 10 10 21 23 22 ^
-+63 0 2 11 23 1 11 1 5 3 23 16 15 27 14 5 16 3 22 2 3 24 3 19 29 4 4 10 8 20 14
-+15 1 26 12 27 25 4 28 22 11 19 19 24 5 20 8 9 5 25 19 17 19 15 7 24 24 21 3 20
-+16 8 3 17 19 ^
-+59 0 18 29 9 23 9 10 29 4 12 24 15 5 8 22 17 29 12 3 8 29 15 21 21 4 7 20 7 10
-+7 26 10 16 24 6 7 12 8 12 15 24 9 17 11 28 12 26 26 6 29 13 10 20 6 23 10 4 3
-+26 10 ^
-+62 0 14 20 20 25 14 13 15 24 14 11 4 23 27 24 20 9 16 17 24 13 12 6 1 14 26 25
-+7 8 21 1 19 3 2 2 17 21 13 5 9 21 28 9 1 13 2 21 8 24 1 3 27 13 18 19 4 15 12 5
-+2 16 27 29 ^
-+62 0 6 2 1 23 17 14 28 19 23 6 22 16 4 19 6 16 28 3 3 1 15 13 22 6 15 11 6 4 24
-+25 15 19 23 28 1 9 15 10 12 7 25 11 25 2 27 6 6 18 4 13 1 4 11 25 17 6 29 21 24
-+27 21 18 ^
-+54 1 17 26 24 13 4 22 24 29 2 11 8 17 4 23 11 26 1 25 28 15 19 10 3 9 29 27 7
-+22 3 27 21 2 26 19 9 19 27 23 3 12 17 10 4 8 27 19 16 1 21 23 28 23 18 17 ^
-+52 0 25 18 26 20 8 17 19 2 4 11 7 18 6 24 2 25 25 5 27 20 3 28 20 18 21 10 25
-+10 1 28 28 29 16 20 19 26 16 21 6 23 15 28 26 28 7 15 18 11 5 17 20 13 ^
-+68 0 1 10 14 8 4 16 26 17 8 10 22 22 18 1 20 24 7 1 9 7 19 5 22 1 4 26 11 10 28
-+5 14 2 6 4 2 9 22 15 13 20 22 26 18 16 9 2 15 20 27 8 6 17 5 15 9 25 10 26 4 5
-+27 5 19 21 5 6 11 19 ^
-+54 1 19 8 2 24 26 22 19 18 17 23 14 21 14 22 13 20 5 29 6 5 26 6 21 29 3 5 12
-+16 11 13 16 18 18 10 11 20 21 12 11 12 22 14 19 3 21 15 6 25 26 29 24 19 17 24 ^
-+59 0 25 22 12 13 23 23 12 10 13 1 22 10 2 22 2 28 10 17 18 3 6 19 28 17 11 1 9
-+14 4 29 29 23 25 13 19 18 2 7 21 6 8 29 5 11 22 14 14 9 28 13 25 24 28 8 14 9 3
-+14 16 ^
-+53 0 26 9 9 12 13 17 25 16 5 8 4 24 10 24 23 4 29 21 9 18 28 25 11 3 16 4 21 25
-+3 4 18 12 12 29 26 13 26 23 26 7 23 10 9 27 26 21 25 21 18 9 24 16 17 ^
-+59 0 5 21 7 7 27 4 20 23 13 27 10 23 29 7 19 13 13 8 19 20 18 2 19 22 29 3 10 6
-+9 13 24 17 16 9 20 21 27 2 19 7 8 26 25 12 2 14 3 1 1 16 12 20 28 24 12 5 24 25
-+19 ^
-+60 0 1 12 25 9 2 6 20 15 14 29 18 21 28 1 17 6 17 27 1 2 10 16 19 5 14 10 27 11
-+17 3 29 14 27 17 5 2 18 20 11 27 18 22 27 22 9 8 18 3 14 10 5 2 24 18 23 21 26
-+8 22 13 ^
-+62 0 1 6 27 27 15 29 20 2 29 22 8 16 20 4 12 9 6 12 16 16 7 9 20 29 11 9 4 1 15
-+25 16 29 10 22 7 2 8 5 18 14 23 24 4 6 26 3 11 6 12 1 7 14 24 14 6 10 21 16 23
-+29 25 24 ^
-+67 0 14 17 2 12 10 5 10 15 25 8 15 3 7 13 25 16 14 1 29 22 26 15 27 9 1 8 8 28
-+6 13 5 13 3 15 5 23 8 23 2 5 5 4 17 13 14 7 17 12 27 3 18 5 7 5 26 18 15 22 28
-+16 13 7 2 23 19 25 14 ^
-+58 1 17 7 16 25 23 11 11 15 2 13 9 26 2 24 26 7 28 11 2 29 7 22 23 5 28 19 1 27
-+29 1 24 11 18 20 3 13 11 7 3 15 17 24 1 18 13 6 3 25 27 16 28 18 24 8 23 7 29
-+11 ^
-+55 0 6 28 14 12 28 27 22 4 14 25 1 3 9 7 11 14 15 16 10 19 12 19 11 20 13 28 4
-+27 28 7 27 12 4 28 21 17 22 20 17 15 15 23 22 13 12 21 22 21 11 12 14 12 18 27
-+10 ^
-+65 0 7 4 9 14 16 15 8 11 21 20 10 10 21 23 20 2 11 23 1 11 1 5 3 23 16 15 27 14
-+5 16 3 22 2 3 24 3 19 29 4 4 10 8 20 14 15 1 26 12 27 25 4 28 22 11 19 19 24 5
-+20 8 9 5 25 19 20 ^
-+59 1 19 15 7 24 24 21 3 20 16 8 3 17 28 18 29 9 23 9 10 29 4 12 24 15 5 8 22 17
-+29 12 3 8 29 15 21 21 4 7 20 7 10 7 26 10 16 24 6 7 12 8 12 15 24 9 17 11 28 12
-+23 ^
-+61 0 26 6 29 13 10 20 6 23 10 4 3 26 26 14 20 20 25 14 13 15 24 14 11 4 23 27
-+24 20 9 16 17 24 13 12 6 1 14 26 25 7 8 21 1 19 3 2 2 17 21 13 5 9 21 28 9 1 13
-+2 21 8 29 ^
-+68 0 1 3 27 13 18 19 4 15 12 5 2 16 27 16 6 2 1 23 17 14 28 19 23 6 22 16 4 19
-+6 16 28 3 3 1 15 13 22 6 15 11 6 4 24 25 15 19 23 28 1 9 15 10 12 7 25 11 25 2
-+27 6 6 18 4 13 1 4 11 26 ^
-+54 1 17 6 29 21 24 27 21 17 17 26 24 13 4 22 24 29 2 11 8 17 4 23 11 26 1 25 28
-+15 19 10 3 9 29 27 7 22 3 27 21 2 26 19 9 19 27 23 3 12 17 10 4 8 27 20 ^
-+52 1 16 1 21 23 28 23 18 8 25 18 26 20 8 17 19 2 4 11 7 18 6 24 2 25 25 5 27 20
-+3 28 20 18 21 10 25 10 1 28 28 29 16 20 19 26 16 21 6 23 15 28 26 12 ^
-+67 0 7 15 18 11 5 17 20 26 1 10 14 8 4 16 26 17 8 10 22 22 18 1 20 24 7 1 9 7
-+19 5 22 1 4 26 11 10 28 5 14 2 6 4 2 9 22 15 13 20 22 26 18 16 9 2 15 20 27 8 6
-+17 5 15 9 25 10 26 19 ^
-+58 0 5 27 5 19 21 5 6 11 29 19 8 2 24 26 22 19 18 17 23 14 21 14 22 13 20 5 29
-+6 5 26 6 21 29 3 5 12 16 11 13 16 18 18 10 11 20 21 12 11 12 22 14 19 3 21 15 6
-+25 27 ^
-+57 0 29 24 19 17 18 25 22 12 13 23 23 12 10 13 1 22 10 2 22 2 28 10 17 18 3 6
-+19 28 17 11 1 9 14 4 29 29 23 25 13 19 18 2 7 21 6 8 29 5 11 22 14 14 9 28 13
-+25 25 ^
-+52 0 15 29 9 28 20 2 30 26 21 17 8 28 17 22 29 24 8 11 18 29 15 6 7 27 27 17 24
-+18 23 11 19 8 30 5 24 22 12 25 15 28 23 5 10 21 5 8 7 3 10 19 17 18 ^
-+62 0 9 15 29 10 7 4 1 16 21 16 29 13 18 5 3 8 15 8 21 29 20 5 27 2 13 27 7 7 30
-+2 18 26 10 2 5 29 21 15 25 26 24 8 12 20 3 9 10 30 7 12 24 5 13 1 6 10 25 13 9
-+29 30 7 ^
-+62 0 29 17 26 6 25 4 7 25 8 15 26 30 11 2 9 6 22 6 21 28 3 3 6 12 13 15 7 17 16
-+26 3 19 3 5 2 29 16 16 22 26 13 12 9 19 16 27 25 16 7 15 22 22 5 6 13 4 12 11
-+27 5 19 15 ^
-+57 0 9 30 9 1 28 3 21 22 7 17 2 25 1 28 21 11 17 20 28 12 10 10 3 15 13 20 1 20
-+11 1 30 22 23 15 26 12 21 7 27 9 27 29 5 26 16 11 23 28 18 1 13 23 30 6 3 11 25
-+^
-+61 1 16 10 13 13 19 15 18 7 22 10 29 3 25 30 8 22 13 4 4 27 22 18 21 23 17 15
-+16 19 20 17 10 17 21 20 6 14 14 1 10 18 4 5 5 9 17 18 14 5 12 22 22 11 8 18 24
-+21 3 7 21 9 22 ^
-+58 1 3 4 23 14 17 25 27 10 5 16 30 23 2 4 25 3 16 28 4 6 6 17 12 18 2 23 7 29
-+23 29 27 19 7 20 21 25 5 17 9 7 1 21 20 19 29 19 14 8 23 23 19 3 18 17 3 29 14
-+17 ^
-+62 1 23 28 5 22 8 10 1 1 11 27 18 3 2 22 28 14 24 12 1 3 30 29 11 22 19 7 16 1
-+11 4 28 8 20 25 2 6 8 5 14 11 21 9 16 8 25 6 26 27 1 29 12 8 16 4 17 5 30 30 24
-+12 19 21 ^
-+57 1 25 11 13 12 27 16 14 3 24 20 24 23 22 9 14 19 26 8 13 6 13 25 19 5 1 19 1
-+17 28 30 13 21 11 4 10 23 25 7 5 11 20 7 24 29 27 13 16 17 1 15 12 29 4 16 27
-+12 21 ^
-+65 0 2 2 24 17 13 22 20 22 4 20 16 2 17 3 11 29 1 5 10 14 23 3 14 9 2 7 18 20
-+13 2 16 25 24 4 4 14 7 13 8 20 12 23 1 26 7 9 19 6 16 3 8 26 21 10 26 23 24 28
-+16 12 14 25 22 16 15 ^
-+53 0 21 24 27 30 15 10 15 2 18 13 26 28 23 16 23 10 2 11 26 26 4 29 18 4 24 24
-+1 24 13 5 21 29 26 2 10 16 6 5 7 23 19 11 28 22 21 1 24 19 7 26 18 30 26 ^
-+58 0 21 6 18 22 2 1 14 2 14 5 25 1 27 24 6 23 16 5 1 20 29 22 25 9 25 10 3 28
-+28 25 19 18 16 24 14 15 5 28 12 28 26 29 2 15 15 9 5 18 19 22 12 15 4 6 15 24
-+16 22 ^
-+59 0 4 26 25 18 27 19 20 4 26 12 3 22 1 22 30 3 28 10 9 24 14 29 6 30 3 10 20
-+14 6 3 19 21 21 28 16 18 11 30 11 20 30 1 9 8 11 5 19 10 24 4 22 4 2 26 5 15 20
-+8 25 ^
-+55 1 13 30 18 8 1 25 28 20 20 15 21 18 18 12 16 13 24 9 21 2 28 6 1 23 9 18 27
-+27 4 9 13 10 8 14 16 15 12 11 14 21 14 10 11 25 17 17 30 21 13 27 26 26 22 14
-+21 ^
-+57 0 17 21 19 9 9 20 23 13 7 10 28 24 10 22 27 23 27 8 17 14 6 4 21 26 15 1 8
-+29 27 6 28 15 3 27 25 25 14 19 13 29 8 24 2 8 2 4 12 19 11 10 6 26 14 22 24 30
-+2 ^
-+56 1 11 12 2 12 17 23 8 8 12 28 13 14 28 2 17 4 8 3 26 9 23 21 30 30 20 4 13 28
-+29 9 3 17 7 19 30 28 1 2 20 9 12 24 15 30 20 27 3 23 11 6 29 25 23 26 17 23 ^
-+61 1 10 22 15 23 6 25 5 4 30 2 19 23 15 27 14 26 1 1 7 19 12 7 6 20 18 14 4 15
-+17 28 7 11 7 8 9 22 17 12 5 23 18 25 18 6 12 26 30 12 30 14 3 1 18 10 20 27 21
-+8 6 24 30 ^
-+54 0 20 11 24 7 2 4 18 15 14 30 16 19 2 27 15 4 19 25 29 29 7 14 18 9 11 9 27
-+11 15 29 9 28 20 2 30 26 21 17 8 28 17 22 29 24 8 11 18 29 15 6 7 27 27 7 ^
-+63 1 24 18 23 11 19 8 30 5 24 22 12 25 15 28 23 5 10 21 5 8 7 3 10 19 17 6 9 15
-+29 10 7 4 1 16 21 16 29 13 18 5 3 8 15 8 21 29 20 5 27 2 13 27 7 7 30 2 18 26
-+10 2 5 29 12 ^
-+63 1 15 25 26 24 8 12 20 3 9 10 30 7 12 24 5 13 1 6 10 25 13 9 29 30 17 29 17
-+26 6 25 4 7 25 8 15 26 30 11 2 9 6 22 6 21 28 3 3 6 12 13 15 7 17 16 26 3 19 3
-+5 2 29 16 17 ^
-+60 1 22 26 13 12 9 19 16 27 25 16 7 15 22 22 5 6 13 4 12 11 27 5 19 28 9 30 9 1
-+28 3 21 22 7 17 2 25 1 28 21 11 17 20 28 12 10 10 3 15 13 20 1 20 11 1 30 22 23
-+15 26 6 ^
-+56 0 21 7 27 9 27 29 5 26 16 11 23 28 18 1 13 23 30 6 3 11 11 16 10 13 13 19 15
-+18 7 22 10 29 3 25 30 8 22 13 4 4 27 22 18 21 23 17 15 16 19 20 17 10 17 21 20
-+11 ^
-+64 1 14 14 1 10 18 4 5 5 9 17 18 14 5 12 22 22 11 8 18 24 21 3 7 21 9 4 3 4 23
-+14 17 25 27 10 5 16 30 23 2 4 25 3 16 28 4 6 6 17 12 18 2 23 7 29 23 29 27 19 7
-+20 21 25 5 30 ^
-+63 1 9 7 1 21 20 19 29 19 14 8 23 23 19 3 18 17 3 29 14 27 23 28 5 22 8 10 1 1
-+11 27 18 3 2 22 28 14 24 12 1 3 30 29 11 22 19 7 16 1 11 4 28 8 20 25 2 6 8 5
-+14 11 21 9 29 ^
-+57 0 8 25 6 26 27 1 29 12 8 16 4 17 5 30 30 24 12 19 24 25 11 13 12 27 16 14 3
-+24 20 24 23 22 9 14 19 26 8 13 6 13 25 19 5 1 19 1 17 28 30 13 21 11 4 10 23 25
-+6 ^
-+68 0 5 11 20 7 24 29 27 13 16 17 1 15 12 29 4 16 27 12 6 2 2 24 17 13 22 20 22
-+4 20 16 2 17 3 11 29 1 5 10 14 23 3 14 9 2 7 18 20 13 2 16 25 24 4 4 14 7 13 8
-+20 12 23 1 26 7 9 19 6 30 ^
-+54 1 3 8 26 21 10 26 23 24 28 16 12 14 25 22 16 2 21 24 27 30 15 10 15 2 18 13
-+26 28 23 16 23 10 2 11 26 26 4 29 18 4 24 24 1 24 13 5 21 29 26 2 10 16 6 27 ^
-+56 0 7 23 19 11 28 22 21 1 24 19 7 26 18 30 25 21 6 18 22 2 1 14 2 14 5 25 1 27
-+24 6 23 16 5 1 20 29 22 25 9 25 10 3 28 28 25 19 18 16 24 14 15 5 28 12 28 9 ^
-+58 0 29 2 15 15 9 5 18 19 22 12 15 4 6 15 24 16 9 4 26 25 18 27 19 20 4 26 12 3
-+22 1 22 30 3 28 10 9 24 14 29 6 30 3 10 20 14 6 3 19 21 21 28 16 18 11 30 11 20
-+29 ^
-+65 0 1 9 8 11 5 19 10 24 4 22 4 2 26 5 15 20 8 3 13 30 18 8 1 25 28 20 20 15 21
-+18 18 12 16 13 24 9 21 2 28 6 1 23 9 18 27 27 4 9 13 10 8 14 16 15 12 11 14 21
-+14 10 11 25 17 17 20 ^
-+55 0 21 13 27 26 26 22 14 13 17 21 19 9 9 20 23 13 7 10 28 24 10 22 27 23 27 8
-+17 14 6 4 21 26 15 1 8 29 27 6 28 15 3 27 25 25 14 19 13 29 8 24 2 8 2 4 30 ^
-+57 1 19 11 10 6 26 14 22 24 30 10 11 12 2 12 17 23 8 8 12 28 13 14 28 2 17 4 8
-+3 26 9 23 21 30 30 20 4 13 28 29 9 3 17 7 19 30 28 1 2 20 9 12 24 15 30 20 27
-+30 ^
-+59 0 23 11 6 29 25 23 26 17 20 10 22 15 23 6 25 5 4 30 2 19 23 15 27 14 26 1 1
-+7 19 12 7 6 20 18 14 4 15 17 28 7 11 7 8 9 22 17 12 5 23 18 25 18 6 12 26 30 12
-+30 18 ^
-+56 0 3 1 18 10 20 27 21 8 6 24 26 20 11 24 7 2 4 18 15 14 30 16 19 2 27 15 4 19
-+25 29 29 7 14 18 9 11 9 27 11 15 29 9 28 20 2 30 26 21 17 8 28 17 22 29 24 7 ^
-+62 0 11 18 29 15 6 7 27 27 17 24 18 23 11 19 8 30 5 24 22 12 25 15 28 23 5 10
-+21 5 8 7 3 10 19 17 6 9 15 29 10 7 4 1 16 21 16 29 13 18 5 3 8 15 8 21 29 20 5
-+27 2 13 27 7 ^
-+62 1 7 30 2 18 26 10 2 5 29 21 15 25 26 24 8 12 20 3 9 10 30 7 12 24 5 13 1 6
-+10 25 13 9 29 30 17 29 17 26 6 25 4 7 25 8 15 26 30 11 2 9 6 22 6 21 28 3 3 6
-+12 13 15 26 ^
-+62 0 17 16 26 3 19 3 5 2 29 16 16 22 26 13 12 9 19 16 27 25 16 7 15 22 22 5 6
-+13 4 12 11 27 5 19 28 9 30 9 1 28 3 21 22 7 17 2 25 1 28 21 11 17 20 28 12 10
-+10 3 15 13 20 19 ^
-+56 1 20 11 1 30 22 23 15 26 12 21 7 27 9 27 29 5 26 16 11 23 28 18 1 13 23 30 6
-+3 11 11 16 10 13 13 19 15 18 7 22 10 29 3 25 30 8 22 13 4 4 27 22 18 21 23 17
-+22 ^
-+66 1 16 19 20 17 10 17 21 20 6 14 14 1 10 18 4 5 5 9 17 18 14 5 12 22 22 11 8
-+18 24 21 3 7 21 9 4 3 4 23 14 17 25 27 10 5 16 30 23 2 4 25 3 16 28 4 6 6 17 12
-+18 2 23 7 29 23 29 24 ^
-+62 0 19 7 20 21 25 5 17 9 7 1 21 20 19 29 19 14 8 23 23 19 3 18 17 3 29 14 27
-+23 28 5 22 8 10 1 1 11 27 18 3 2 22 28 14 24 12 1 3 30 29 11 22 19 7 16 1 11 4
-+28 8 20 25 7 ^
-+59 0 6 8 5 14 11 21 9 16 8 25 6 26 27 1 29 12 8 16 4 17 5 30 30 24 12 19 24 25
-+11 13 12 27 16 14 3 24 20 24 23 22 9 14 19 26 8 13 6 13 25 19 5 1 19 1 17 28 30
-+13 26 ^
-+70 0 11 4 10 23 25 7 5 11 20 7 24 29 27 13 16 17 1 15 12 29 4 16 27 12 6 2 2 24
-+17 13 22 20 22 4 20 16 2 17 3 11 29 1 5 10 14 23 3 14 9 2 7 18 20 13 2 16 25 24
-+4 4 14 7 13 8 20 12 23 1 26 7 ^
-+54 1 9 19 6 16 3 8 26 21 10 26 23 24 28 16 12 14 25 22 16 2 21 24 27 30 15 10
-+15 2 18 13 26 28 23 16 23 10 2 11 26 26 4 29 18 4 24 24 1 24 13 5 21 29 26 27 ^
-+58 1 10 16 6 5 7 23 19 11 28 22 21 1 24 19 7 26 18 30 25 21 6 18 22 2 1 14 2 14
-+5 25 1 27 24 6 23 16 5 1 20 29 22 25 9 25 10 3 28 28 25 19 18 16 24 14 15 5 28
-+28 ^
-+58 1 28 26 29 2 15 15 9 5 18 19 22 12 15 4 6 15 24 16 9 4 26 25 18 27 19 20 4
-+26 12 3 22 1 22 30 3 28 10 9 24 14 29 6 30 3 10 20 14 6 3 19 21 21 28 16 18 11
-+30 22 ^
-+65 1 20 30 1 9 8 11 5 19 10 24 4 22 4 2 26 5 15 20 8 3 13 30 18 8 1 25 28 20 20
-+15 21 18 18 12 16 13 24 9 21 2 28 6 1 23 9 18 27 27 4 9 13 10 8 14 16 15 12 11
-+14 21 14 10 11 25 20 ^
-+53 0 17 30 21 13 27 26 26 22 14 13 17 21 19 9 9 20 23 13 7 10 28 24 10 22 27 23
-+27 8 17 14 6 4 21 26 15 1 8 29 27 6 28 15 3 27 25 25 14 19 13 29 8 24 15 ^
-+61 0 8 2 4 12 19 11 10 6 26 14 22 24 30 10 11 12 2 12 17 23 8 8 12 28 13 14 28
-+2 17 4 8 3 26 9 23 21 30 30 20 4 13 28 29 9 3 17 7 19 30 28 1 2 20 9 12 24 15
-+30 20 27 20 ^
-+60 0 23 11 6 29 25 23 26 17 20 10 22 15 23 6 25 5 4 30 2 19 23 15 27 14 26 1 1
-+7 19 12 7 6 20 18 14 4 15 17 28 7 11 7 8 9 22 17 12 5 23 18 25 18 6 12 26 30 12
-+30 14 20 ^
-+56 0 3 1 18 10 20 27 21 8 6 24 26 20 11 24 7 2 4 18 15 14 30 16 19 2 27 15 4 19
-+25 29 29 7 14 18 9 11 9 27 11 15 29 9 28 20 2 30 26 21 17 8 28 17 22 29 24 23 ^
-+62 0 11 18 29 15 6 7 27 27 17 24 18 23 11 19 8 30 5 24 22 12 25 15 28 23 5 10
-+21 5 8 7 3 10 19 17 6 9 15 29 10 7 4 1 16 21 16 29 13 18 5 3 8 15 8 21 29 20 5
-+27 2 13 27 23 ^
-+64 1 7 30 2 18 26 10 2 5 29 21 15 25 26 24 8 12 20 3 9 10 30 7 12 24 5 13 1 6
-+10 25 13 9 29 30 17 29 17 26 6 25 4 7 25 8 15 26 30 11 2 9 6 22 6 21 28 3 3 6
-+12 13 15 7 17 18 ^
-+65 0 26 3 19 3 5 2 29 16 16 22 26 13 12 9 19 16 27 25 16 7 15 22 22 5 6 13 4 12
-+11 27 5 19 28 9 30 9 1 28 3 21 22 7 17 2 25 1 28 21 11 17 20 28 12 10 10 3 15
-+13 20 1 20 11 1 30 5 ^
-+57 0 23 15 26 12 21 7 27 9 27 29 5 26 16 11 23 28 18 1 13 23 30 6 3 11 11 16 10
-+13 13 19 15 18 7 22 10 29 3 25 30 8 22 13 4 4 27 22 18 21 23 17 15 16 19 20 17
-+10 25 ^
-+66 1 21 20 6 14 14 1 10 18 4 5 5 9 17 18 14 5 12 22 22 11 8 18 24 21 3 7 21 9 4
-+3 4 23 14 17 25 27 10 5 16 30 23 2 4 25 3 16 28 4 6 6 17 12 18 2 23 7 29 23 29
-+27 19 7 20 21 25 20 ^
-+65 1 17 9 7 1 21 20 19 29 19 14 8 23 23 19 3 18 17 3 29 14 27 23 28 5 22 8 10 1
-+1 11 27 18 3 2 22 28 14 24 12 1 3 30 29 11 22 19 7 16 1 11 4 28 8 20 25 2 6 8 5
-+14 11 21 9 16 28 ^
-+59 1 25 6 26 27 1 29 12 8 16 4 17 5 30 30 24 12 19 24 25 11 13 12 27 16 14 3 24
-+20 24 23 22 9 14 19 26 8 13 6 13 25 19 5 1 19 1 17 28 30 13 21 11 4 10 23 25 7
-+5 11 23 ^
-+70 0 20 7 24 29 27 13 16 17 1 15 12 29 4 16 27 12 6 2 2 24 17 13 22 20 22 4 20
-+16 2 17 3 11 29 1 5 10 14 23 3 14 9 2 7 18 20 13 2 16 25 24 4 4 14 7 13 8 20 12
-+23 1 26 7 9 19 6 16 3 8 26 25 ^
-+56 0 10 26 23 24 28 16 12 14 25 22 16 2 21 24 27 30 15 10 15 2 18 13 26 28 23
-+16 23 10 2 11 26 26 4 29 18 4 24 24 1 24 13 5 21 29 26 2 10 16 6 5 7 23 19 11
-+28 24 ^
-+59 1 21 1 24 19 7 26 18 30 25 21 6 18 22 2 1 14 2 14 5 25 1 27 24 6 23 16 5 1
-+20 29 22 25 9 25 10 3 28 28 25 19 18 16 24 14 15 5 28 12 28 26 29 2 15 15 9 5
-+18 19 13 ^
-+63 1 12 15 4 6 15 24 16 9 4 26 25 18 27 19 20 4 26 12 3 22 1 22 30 3 28 10 9 24
-+14 29 6 30 3 10 20 14 6 3 19 21 21 28 16 18 11 30 11 20 30 1 9 8 11 5 19 10 24
-+4 22 4 2 26 20 ^
-+59 1 15 20 8 3 13 30 18 8 1 25 28 20 20 15 21 18 18 12 16 13 24 9 21 2 28 6 1
-+23 9 18 27 27 4 9 13 10 8 14 16 15 12 11 14 21 14 10 11 25 17 17 30 21 13 27 26
-+26 22 14 23 ^
-+61 0 16 21 30 25 8 9 18 30 17 4 6 31 26 16 25 18 23 9 20 8 7 25 26 11 27 17 28
-+2 23 2 12 24 2 8 6 3 12 20 16 4 10 17 30 12 11 5 31 19 19 19 30 13 18 2 3 8 2
-+17 8 24 28 ^
-+69 0 22 2 7 26 1 13 26 6 6 6 18 24 7 6 7 30 19 12 22 24 25 3 11 17 3 10 12 11
-+11 25 7 13 31 4 7 27 13 10 30 16 30 16 29 4 27 5 6 27 8 12 29 9 1 10 9 26 4 19
-+1 3 3 4 16 13 17 6 16 14 28 ^
-+62 0 3 20 3 2 1 30 14 14 21 29 13 11 10 29 20 19 26 27 19 6 17 26 26 7 9 13 16
-+9 31 2 20 28 10 10 4 28 3 24 21 6 29 16 1 22 31 1 24 9 16 22 28 11 7 7 3 17 13
-+22 4 17 9 27 ^
-+60 0 21 23 17 24 16 24 11 26 5 31 30 2 24 14 9 23 28 18 4 13 23 4 3 9 9 14 12
-+13 8 20 12 18 6 21 12 25 3 27 8 21 13 5 26 21 18 19 23 16 12 14 20 17 16 7 16
-+19 22 9 15 25 ^
-+64 0 31 7 18 29 5 7 2 5 16 18 10 7 11 21 21 9 8 18 25 19 3 6 19 29 10 3 5 23 15
-+16 27 26 12 2 19 23 1 22 3 19 28 5 2 9 4 21 11 18 1 23 6 30 23 30 26 20 11 22
-+19 27 2 16 10 31 ^
-+60 0 4 24 17 20 25 20 15 8 23 23 20 30 18 16 3 30 15 26 23 28 7 21 8 7 31 31 14
-+26 18 3 1 26 28 15 25 11 31 3 25 9 21 20 2 6 14 4 9 5 28 8 17 22 1 4 8 7 10 14
-+19 19 ^
-+62 0 14 8 27 9 24 26 4 30 11 8 19 5 21 7 2 27 20 16 20 20 22 14 13 16 26 14 10
-+3 25 22 25 23 21 10 15 15 29 8 13 4 2 13 22 20 7 4 20 31 16 2 2 28 13 19 14 12
-+23 27 6 2 14 24 ^
-+62 0 22 6 25 30 29 31 13 14 16 31 12 16 30 5 14 31 11 4 1 1 25 21 13 26 22 21 5
-+22 14 29 1 21 3 14 30 4 2 29 12 15 23 3 15 5 1 6 23 22 13 1 14 27 25 5 15 6 13
-+3 22 11 23 21 ^
-+56 1 24 6 5 20 4 14 3 29 8 29 19 7 29 23 25 28 19 11 15 27 21 14 1 19 20 26 12
-+7 12 1 18 13 29 28 23 29 14 23 7 1 9 29 24 5 30 18 5 25 25 31 25 13 7 24 25 11 ^
-+54 0 1 12 19 9 7 6 28 20 14 28 21 19 31 20 20 6 24 18 27 24 4 18 21 1 31 15 1
-+15 2 27 4 26 25 4 23 19 2 31 22 30 21 22 5 27 12 30 28 28 27 15 18 14 25 23 ^
-+59 1 17 7 28 11 28 29 30 1 17 12 10 2 18 20 21 2 11 12 5 4 12 25 14 5 5 24 22
-+18 31 15 22 29 11 3 21 31 21 27 3 28 7 10 25 2 15 30 9 30 7 22 15 9 3 20 24 24
-+28 14 25 ^
-+58 0 9 27 14 22 27 31 10 8 14 7 15 7 20 5 26 1 29 7 17 17 8 3 13 27 18 8 31 27
-+28 22 22 17 19 18 18 11 19 13 25 10 19 6 28 4 31 23 10 18 26 31 5 10 13 12 8 15
-+19 24 ^
-+56 1 11 14 15 24 15 12 9 22 16 16 24 13 2 26 24 29 26 15 13 21 24 20 10 10 22
-+23 13 6 12 28 25 12 2 21 26 28 26 8 16 15 4 5 19 24 12 31 8 30 31 9 28 12 3 26
-+29 8 ^
-+65 0 27 10 20 13 30 8 25 1 8 1 5 11 20 9 12 4 29 15 21 25 27 7 14 11 1 11 16 23
-+8 8 11 1 13 15 28 1 16 5 8 3 24 10 23 24 17 5 13 28 30 5 3 16 6 20 28 31 6 22
-+10 11 29 25 17 27 23 ^
-+60 0 26 3 23 14 4 30 27 23 24 21 17 12 21 17 23 4 22 7 5 27 1 20 23 12 26 10 24
-+31 29 4 11 15 11 6 9 17 18 15 5 17 21 28 6 9 6 8 10 21 16 11 2 23 18 27 29 18 9
-+11 24 24 ^
-+58 1 11 15 29 29 3 31 18 12 17 31 19 8 4 25 29 17 29 9 25 6 1 2 18 17 15 19 15
-+1 26 17 20 27 30 30 6 10 18 5 9 10 26 9 17 2 30 10 28 17 1 27 29 2 19 16 8 28
-+16 28 ^
-+61 1 30 25 8 9 18 30 17 4 6 31 26 16 25 18 23 9 20 8 7 25 26 11 27 17 28 2 23 2
-+12 24 2 8 6 3 12 20 16 4 10 17 30 12 11 5 31 19 19 19 30 13 18 2 3 8 2 17 8 24
-+30 22 29 ^
-+70 0 7 26 1 13 26 6 6 6 18 24 7 6 7 30 19 12 22 24 25 3 11 17 3 10 12 11 11 25
-+7 13 31 4 7 27 13 10 30 16 30 16 29 4 27 5 6 27 8 12 29 9 1 10 9 26 4 19 1 3 3
-+4 16 13 17 6 16 14 24 3 20 21 ^
-+62 1 2 1 30 14 14 21 29 13 11 10 29 20 19 26 27 19 6 17 26 26 7 9 13 16 9 31 2
-+20 28 10 10 4 28 3 24 21 6 29 16 1 22 31 1 24 9 16 22 28 11 7 7 3 17 13 22 4 17
-+9 4 21 23 21 ^
-+62 1 24 16 24 11 26 5 31 30 2 24 14 9 23 28 18 4 13 23 4 3 9 9 14 12 13 8 20 12
-+18 6 21 12 25 3 27 8 21 13 5 26 21 18 19 23 16 12 14 20 17 16 7 16 19 22 9 15
-+10 31 7 18 29 7 ^
-+66 1 7 2 5 16 18 10 7 11 21 21 9 8 18 25 19 3 6 19 29 10 3 5 23 15 16 27 26 12
-+2 19 23 1 22 3 19 28 5 2 9 4 21 11 18 1 23 6 30 23 30 26 20 11 22 19 27 2 16 10
-+6 4 24 17 20 25 20 21 ^
-+62 1 8 23 23 20 30 18 16 3 30 15 26 23 28 7 21 8 7 31 31 14 26 18 3 1 26 28 15
-+25 11 31 3 25 9 21 20 2 6 14 4 9 5 28 8 17 22 1 4 8 7 10 14 19 10 14 8 27 9 24
-+26 4 30 8 ^
-+62 1 8 19 5 21 7 2 27 20 16 20 20 22 14 13 16 26 14 10 3 25 22 25 23 21 10 15
-+15 29 8 13 4 2 13 22 20 7 4 20 31 16 2 2 28 13 19 14 12 23 27 6 2 14 2 22 6 25
-+30 29 31 13 14 21 ^
-+65 0 31 12 16 30 5 14 31 11 4 1 1 25 21 13 26 22 21 5 22 14 29 1 21 3 14 30 4 2
-+29 12 15 23 3 15 5 1 6 23 22 13 1 14 27 25 5 15 6 13 3 22 11 23 31 24 6 5 20 4
-+14 3 29 8 29 19 31 ^
-+55 1 29 23 25 28 19 11 15 27 21 14 1 19 20 26 12 7 12 1 18 13 29 28 23 29 14 23
-+7 1 9 29 24 5 30 18 5 25 25 31 25 13 7 24 25 24 1 12 19 9 7 6 28 20 14 28 27 ^
-+53 1 19 31 20 20 6 24 18 27 24 4 18 21 1 31 15 1 15 2 27 4 26 25 4 23 19 2 31
-+22 30 21 22 5 27 12 30 28 28 27 15 18 14 25 15 17 7 28 11 28 29 30 1 17 21 ^
-+61 0 10 2 18 20 21 2 11 12 5 4 12 25 14 5 5 24 22 18 31 15 22 29 11 3 21 31 21
-+27 3 28 7 10 25 2 15 30 9 30 7 22 15 9 3 20 24 24 28 14 18 9 27 14 22 27 31 10
-+8 14 7 15 19 ^
-+59 1 20 5 26 1 29 7 17 17 8 3 13 27 18 8 31 27 28 22 22 17 19 18 18 11 19 13 25
-+10 19 6 28 4 31 23 10 18 26 31 5 10 13 12 8 15 19 17 11 14 15 24 15 12 9 22 16
-+16 24 13 23 ^
-+57 0 26 24 29 26 15 13 21 24 20 10 10 22 23 13 6 12 28 25 12 2 21 26 28 26 8 16
-+15 4 5 19 24 12 31 8 30 31 9 28 12 3 26 29 22 27 10 20 13 30 8 25 1 8 1 5 11 20
-+16 ^
-+61 1 12 4 29 15 21 25 27 7 14 11 1 11 16 23 8 8 11 1 13 15 28 1 16 5 8 3 24 10
-+23 24 17 5 13 28 30 5 3 16 6 20 28 31 6 22 10 11 29 25 17 27 22 26 3 23 14 4 30
-+27 23 24 31 ^
-+61 1 17 12 21 17 23 4 22 7 5 27 1 20 23 12 26 10 24 31 29 4 11 15 11 6 9 17 18
-+15 5 17 21 28 6 9 6 8 10 21 16 11 2 23 18 27 29 18 9 11 24 27 11 15 29 29 3 31
-+18 12 17 31 12 ^
-+60 1 8 4 25 29 17 29 9 25 6 1 2 18 17 15 19 15 1 26 17 20 27 30 30 6 10 18 5 9
-+10 26 9 17 2 30 10 28 17 1 27 29 2 19 16 8 28 16 21 30 25 8 9 18 30 17 4 6 31
-+26 16 18 ^
-+67 1 18 23 9 20 8 7 25 26 11 27 17 28 2 23 2 12 24 2 8 6 3 12 20 16 4 10 17 30
-+12 11 5 31 19 19 19 30 13 18 2 3 8 2 17 8 24 30 22 2 7 26 1 13 26 6 6 6 18 24 7
-+6 7 30 19 12 22 24 28 ^
-+69 1 3 11 17 3 10 12 11 11 25 7 13 31 4 7 27 13 10 30 16 30 16 29 4 27 5 6 27 8
-+12 29 9 1 10 9 26 4 19 1 3 3 4 16 13 17 6 16 14 24 3 20 3 2 1 30 14 14 21 29 13
-+11 10 29 20 19 26 27 19 6 28 ^
-+62 1 26 26 7 9 13 16 9 31 2 20 28 10 10 4 28 3 24 21 6 29 16 1 22 31 1 24 9 16
-+22 28 11 7 7 3 17 13 22 4 17 9 4 21 23 17 24 16 24 11 26 5 31 30 2 24 14 9 23
-+28 18 4 13 26 ^
-+70 1 4 3 9 9 14 12 13 8 20 12 18 6 21 12 25 3 27 8 21 13 5 26 21 18 19 23 16 12
-+14 20 17 16 7 16 19 22 9 15 10 31 7 18 29 5 7 2 5 16 18 10 7 11 21 21 9 8 18 25
-+19 3 6 19 29 10 3 5 23 15 16 17 ^
-+60 1 26 12 2 19 23 1 22 3 19 28 5 2 9 4 21 11 18 1 23 6 30 23 30 26 20 11 22 19
-+27 2 16 10 6 4 24 17 20 25 20 15 8 23 23 20 30 18 16 3 30 15 26 23 28 7 21 8 7
-+31 31 7 ^
-+66 0 26 18 3 1 26 28 15 25 11 31 3 25 9 21 20 2 6 14 4 9 5 28 8 17 22 1 4 8 7
-+10 14 19 10 14 8 27 9 24 26 4 30 11 8 19 5 21 7 2 27 20 16 20 20 22 14 13 16 26
-+14 10 3 25 22 25 23 17 ^
-+64 1 10 15 15 29 8 13 4 2 13 22 20 7 4 20 31 16 2 2 28 13 19 14 12 23 27 6 2 14
-+2 22 6 25 30 29 31 13 14 16 31 12 16 30 5 14 31 11 4 1 1 25 21 13 26 22 21 5 22
-+14 29 1 21 3 14 27 ^
-+64 0 4 2 29 12 15 23 3 15 5 1 6 23 22 13 1 14 27 25 5 15 6 13 3 22 11 23 31 24
-+6 5 20 4 14 3 29 8 29 19 7 29 23 25 28 19 11 15 27 21 14 1 19 20 26 12 7 12 1
-+18 13 29 28 23 29 13 ^
-+58 0 23 7 1 9 29 24 5 30 18 5 25 25 31 25 13 7 24 25 24 1 12 19 9 7 6 28 20 14
-+28 21 19 31 20 20 6 24 18 27 24 4 18 21 1 31 15 1 15 2 27 4 26 25 4 23 19 2 31
-+28 ^
-+57 0 30 21 22 5 27 12 30 28 28 27 15 18 14 25 15 17 7 28 11 28 29 30 1 17 12 10
-+2 18 20 21 2 11 12 5 4 12 25 14 5 5 24 22 18 31 15 22 29 11 3 21 31 21 27 3 28
-+7 26 ^
-+59 0 25 2 15 30 9 30 7 22 15 9 3 20 24 24 28 14 18 9 27 14 22 27 31 10 8 14 7
-+15 7 20 5 26 1 29 7 17 17 8 3 13 27 18 8 31 27 28 22 22 17 19 18 18 11 19 13 25
-+10 19 19 ^
-+59 0 28 4 31 23 10 18 26 31 5 10 13 12 8 15 19 17 11 14 15 24 15 12 9 22 16 16
-+24 13 2 26 24 29 26 15 13 21 24 20 10 10 22 23 13 6 12 28 25 12 2 21 26 28 26 8
-+16 15 4 5 31 ^
-+66 1 24 12 31 8 30 31 9 28 12 3 26 29 22 27 10 20 13 30 8 25 1 8 1 5 11 20 9 12
-+4 29 15 21 25 27 7 14 11 1 11 16 23 8 8 11 1 13 15 28 1 16 5 8 3 24 10 23 24 17
-+5 13 28 30 5 3 16 21 ^
-+59 0 20 28 31 6 22 10 11 29 25 17 27 22 26 3 23 14 4 30 27 23 24 21 17 12 21 17
-+23 4 22 7 5 27 1 20 23 12 26 10 24 31 29 4 11 15 11 6 9 17 18 15 5 17 21 28 6 9
-+6 8 26 ^
-+59 0 21 16 11 2 23 18 27 29 18 9 11 24 27 11 15 29 29 3 31 18 12 17 31 19 8 4
-+25 29 17 29 9 25 6 1 2 18 17 15 19 15 1 26 17 20 27 30 30 6 10 18 5 9 10 26 9
-+17 2 30 24 ^
-+61 0 28 17 1 27 29 2 19 16 8 28 16 21 30 25 8 9 18 30 17 4 6 31 26 16 25 18 23
-+9 20 8 7 25 26 11 27 17 28 2 23 2 12 24 2 8 6 3 12 20 16 4 10 17 30 12 11 5 31
-+19 19 19 25 ^
-+74 0 13 18 2 3 8 2 17 8 24 30 22 2 7 26 1 13 26 6 6 6 18 24 7 6 7 30 19 12 22
-+24 25 3 11 17 3 10 12 11 11 25 7 13 31 4 7 27 13 10 30 16 30 16 29 4 27 5 6 27
-+8 12 29 9 1 10 9 26 4 19 1 3 3 4 16 16 ^
-+64 1 17 6 16 14 24 3 20 3 2 1 30 14 14 21 29 13 11 10 29 20 19 26 27 19 6 17 26
-+26 7 9 13 16 9 31 2 20 28 10 10 4 28 3 24 21 6 29 16 1 22 31 1 24 9 16 22 28 11
-+7 7 3 17 13 22 27 ^
-+65 0 17 9 4 21 23 17 24 16 24 11 26 5 31 30 2 24 14 9 23 28 18 4 13 23 4 3 9 9
-+14 12 13 8 20 12 18 6 21 12 25 3 27 8 21 13 5 26 21 18 19 23 16 12 14 20 17 16
-+7 16 19 22 9 15 10 31 1 ^
-+68 1 18 29 5 7 2 5 16 18 10 7 11 21 21 9 8 18 25 19 3 6 19 29 10 3 5 23 15 16
-+27 26 12 2 19 23 1 22 3 19 28 5 2 9 4 21 11 18 1 23 6 30 23 30 26 20 11 22 19
-+27 2 16 10 6 4 24 17 20 25 20 ^
-+63 0 15 8 23 23 20 30 18 16 3 30 15 26 23 28 7 21 8 7 31 31 14 26 18 3 1 26 28
-+15 25 11 31 3 25 9 21 20 2 6 14 4 9 5 28 8 17 22 1 4 8 7 10 14 19 10 14 8 27 9
-+24 26 4 30 24 ^
-+64 1 8 19 5 21 7 2 27 20 16 20 20 22 14 13 16 26 14 10 3 25 22 25 23 21 10 15
-+15 29 8 13 4 2 13 22 20 7 4 20 31 16 2 2 28 13 19 14 12 23 27 6 2 14 2 22 6 25
-+30 29 31 13 14 16 31 5 ^
-+67 0 16 30 5 14 31 11 4 1 1 25 21 13 26 22 21 5 22 14 29 1 21 3 14 30 4 2 29 12
-+15 23 3 15 5 1 6 23 22 13 1 14 27 25 5 15 6 13 3 22 11 23 31 24 6 5 20 4 14 3
-+29 8 29 19 7 29 23 25 21 ^
-+58 0 19 11 15 27 21 14 1 19 20 26 12 7 12 1 18 13 29 28 23 29 14 23 7 1 9 29 24
-+5 30 18 5 25 25 31 25 13 7 24 25 24 1 12 19 9 7 6 28 20 14 28 21 19 31 20 20 6
-+24 22 ^
-+60 0 27 24 4 18 21 1 31 15 1 15 2 27 4 26 25 4 23 19 2 31 22 30 21 22 5 27 12
-+30 28 28 27 15 18 14 25 15 17 7 28 11 28 29 30 1 17 12 10 2 18 20 21 2 11 12 5
-+4 12 25 14 22 ^
-+60 1 5 24 22 18 31 15 22 29 11 3 21 31 21 27 3 28 7 10 25 2 15 30 9 30 7 22 15
-+9 3 20 24 24 28 14 18 9 27 14 22 27 31 10 8 14 7 15 7 20 5 26 1 29 7 17 17 8 3
-+13 27 31 ^
-+58 0 8 31 27 28 22 22 17 19 18 18 11 19 13 25 10 19 6 28 4 31 23 10 18 26 31 5
-+10 13 12 8 15 19 17 11 14 15 24 15 12 9 22 16 16 24 13 2 26 24 29 26 15 13 21
-+24 20 10 10 25 ^
-+65 0 23 13 6 12 28 25 12 2 21 26 28 26 8 16 15 4 5 19 24 12 31 8 30 31 9 28 12
-+3 26 29 22 27 10 20 13 30 8 25 1 8 1 5 11 20 9 12 4 29 15 21 25 27 7 14 11 1 11
-+16 23 8 8 11 1 13 21 ^
-+60 1 28 1 16 5 8 3 24 10 23 24 17 5 13 28 30 5 3 16 6 20 28 31 6 22 10 11 29 25
-+17 27 22 26 3 23 14 4 30 27 23 24 21 17 12 21 17 23 4 22 7 5 27 1 20 23 12 26
-+10 24 31 11 ^
-+64 1 4 11 15 11 6 9 17 18 15 5 17 21 28 6 9 6 8 10 21 16 11 2 23 18 27 29 18 9
-+11 24 27 11 15 29 29 3 31 18 12 17 31 19 8 4 25 29 17 29 9 25 6 1 2 18 17 15 19
-+15 1 26 17 20 27 25 ^
-+64 0 30 6 10 18 5 9 10 26 9 17 2 30 10 28 17 1 27 29 2 19 16 8 28 16 21 30 25 8
-+9 18 30 17 4 6 31 26 16 25 18 23 9 20 8 7 25 26 11 27 17 28 2 23 2 12 24 2 8 6
-+3 12 20 16 4 31 ^
-+60 0 28 5 24 16 10 27 28 19 29 19 22 10 23 17 25 7 26 5 5 27 1 20 24 13 27 16
-+24 32 31 5 12 21 13 6 11 21 20 15 3 14 18 32 2 9 6 10 13 23 16 17 3 20 19 27 29
-+21 5 11 28 14 ^
-+<D
-+
-+H>SHS Type 2 Strings<H
-+D>
-+60 1 16 13 19 5 16 14 27 2 22 7 5 28 15 18 25 17 13 12 29 24 21 29 25 16 5 17
-+22 24 8 8 18 3 13 10 28 3 23 28 12 8 3 25 5 25 24 7 14 30 27 32 30 23 8 15 27
-+28 13 8 12 21 ^
-+86 1 33 5 40 26 3 19 12 36 43 5 35 37 5 14 11 45 35 16 10 8 32 4 15 35 26 2 39
-+22 37 22 30 29 28 36 45 14 36 4 29 37 30 34 36 20 9 42 29 9 11 11 18 42 13 6 20
-+42 20 30 22 35 34 6 14 41 19 30 17 35 33 26 41 15 5 44 39 8 20 3 44 32 15 18 10
-+15 10 36 ^
-+112 0 10 44 24 53 35 22 40 20 15 51 22 18 22 42 6 54 49 38 21 7 13 30 16 7 52
-+16 22 13 38 7 11 44 33 9 25 13 37 42 14 45 53 30 38 5 25 5 35 38 22 28 10 29 52
-+31 39 35 23 5 17 14 31 46 5 41 54 43 33 13 23 46 45 3 46 3 55 15 6 53 28 52 22
-+27 45 32 53 51 15 37 15 49 36 35 35 15 3 13 22 25 3 4 10 24 12 7 44 25 18 21 21
-+20 55 24 ^
-+123 1 43 9 1 52 4 21 49 61 18 50 23 13 46 62 23 45 62 9 56 18 23 31 8 30 27 36
-+13 38 4 58 53 47 24 18 41 58 19 12 18 52 42 29 44 45 26 63 34 32 41 64 15 26 55
-+19 2 49 6 30 53 13 54 12 53 37 12 37 29 60 53 21 47 42 45 52 40 10 28 47 43 17
-+16 17 61 36 12 34 60 37 13 52 58 37 39 29 34 11 45 8 36 1 50 50 5 51 13 15 32
-+51 33 61 16 31 50 58 63 16 5 30 17 24 10 26 52 ^
-+144 1 64 62 63 30 15 1 35 28 16 40 20 14 50 33 19 38 30 27 55 10 16 46 47 7 55
-+12 53 26 56 33 29 55 25 17 48 43 21 43 18 24 63 27 68 46 38 33 35 10 18 11 27 5
-+9 58 35 70 36 36 39 47 2 10 66 47 5 18 21 44 71 51 57 3 22 7 56 55 28 25 14 40
-+16 24 48 37 66 50 24 45 18 39 53 29 64 60 26 50 6 47 61 46 44 60 17 4 58 45 26
-+20 26 32 8 7 68 37 3 24 44 47 64 54 71 57 12 68 27 58 29 54 43 42 60 13 14 56
-+49 1 32 9 61 43 36 33 20 59 ^
-+166 0 7 38 57 33 61 73 7 64 1 49 35 76 14 27 21 45 68 38 58 73 13 72 47 73 33 8
-+66 23 38 4 56 77 47 10 71 13 20 31 41 6 51 3 18 17 61 47 14 48 76 46 28 34 43 1
-+56 4 25 7 65 41 1 34 37 23 59 59 27 26 13 15 14 75 60 14 1 28 59 26 65 61 16 23
-+17 28 6 19 2 35 49 30 29 48 2 63 73 59 1 3 76 41 11 19 18 43 54 63 67 51 4 9 78
-+60 8 72 31 35 77 54 58 20 36 58 51 76 40 20 37 49 3 75 1 29 20 57 64 22 25 6 25
-+59 32 43 58 40 51 77 1 2 36 10 12 28 39 11 46 2 41 27 27 53 76 13 66 69 76 28 ^
-+186 1 5 73 38 30 30 48 21 75 80 40 21 8 53 9 26 30 34 81 71 71 51 23 75 33 41
-+23 32 5 8 66 40 72 40 16 66 45 14 48 34 21 41 27 3 55 27 37 23 41 65 4 57 51 74
-+22 19 75 42 16 19 46 16 10 48 20 19 37 41 14 57 9 17 55 38 5 60 7 46 20 43 36
-+39 52 20 10 62 45 23 46 7 35 75 29 70 35 36 34 25 12 15 84 26 10 6 71 29 79 33
-+32 25 59 76 82 64 58 7 8 19 41 74 2 53 65 24 1 55 51 36 21 79 28 5 17 41 36 63
-+51 18 48 25 46 45 36 77 76 22 57 14 44 63 56 45 56 20 1 64 49 9 12 28 30 72 82
-+73 33 3 22 30 43 56 67 62 2 57 13 50 20 57 38 43 61 9 8 57 65 76 9 ^
-+183 1 54 34 83 10 33 51 86 81 82 69 18 8 22 64 19 86 62 58 33 37 17 34 5 29 83
-+42 76 50 54 66 39 9 1 36 43 17 65 6 35 56 72 71 83 88 10 1 8 87 22 6 21 78 25
-+89 43 62 40 55 85 31 89 74 63 46 28 24 26 31 17 7 8 27 19 12 85 17 20 27 77 10
-+2 54 80 17 52 74 76 69 78 11 20 80 4 29 24 85 75 18 39 23 70 83 29 57 67 72 70
-+33 4 15 46 42 2 69 13 53 33 69 64 33 64 14 40 69 59 78 71 19 85 16 65 38 82 55
-+40 56 40 24 84 29 25 44 68 13 85 76 64 32 18 25 45 23 6 80 31 30 30 58 14 13 72
-+57 14 41 28 52 73 26 76 83 56 54 2 36 11 65 66 38 50 8 41 88 77 ^
-+200 1 25 57 40 46 78 57 34 78 61 36 66 57 38 80 22 32 68 71 30 74 37 81 66 77
-+66 55 2 51 24 93 61 40 68 45 61 12 63 24 89 59 52 72 43 20 20 69 36 40 88 46 9
-+62 55 77 84 20 18 6 77 15 52 39 75 3 26 4 85 17 62 29 11 92 46 58 29 59 28 42
-+80 71 96 2 49 85 37 63 4 61 14 2 53 87 25 86 6 75 76 93 41 39 93 92 42 56 41 63
-+26 28 18 77 11 50 78 79 1 12 12 91 29 13 58 5 56 92 66 59 4 39 47 95 5 5 62 33
-+13 80 69 60 43 51 22 30 32 42 5 38 3 50 7 48 90 56 96 68 47 41 61 60 96 20 14 4
-+19 19 23 25 13 9 38 52 17 11 96 48 19 25 88 42 7 74 59 48 70 55 24 18 28 44 46
-+3 24 38 56 19 96 22 50 60 17 96 ^
-+195 1 25 51 45 35 66 19 61 60 9 31 93 64 70 30 42 86 53 1 71 46 42 22 38 96 10
-+99 34 76 26 55 73 63 63 97 23 92 81 64 46 1 30 31 35 86 91 88 64 87 16 37 69 84
-+94 60 100 3 47 52 8 71 87 57 29 76 43 18 45 46 15 65 12 44 42 66 60 15 68 19 58
-+39 62 76 9 92 101 57 32 4 34 15 41 62 32 89 71 43 35 31 41 21 17 82 33 96 27 62
-+29 82 57 46 62 15 24 99 37 83 40 52 46 56 80 98 3 91 74 6 27 7 58 94 10 41 79
-+97 84 77 74 26 99 95 61 19 17 24 55 15 85 84 30 45 93 44 100 44 39 59 46 18 95
-+3 41 15 82 77 16 48 18 51 83 20 82 60 53 53 12 99 92 54 5 99 51 39 100 61 2 31
-+52 49 86 94 16 78 84 91 42 ^
-+212 0 56 98 16 98 78 22 72 33 103 104 52 84 12 65 15 85 101 97 84 31 51 26 100
-+100 38 80 13 2 78 7 24 44 84 103 27 7 28 16 33 99 25 103 54 14 42 62 87 92 27
-+22 42 5 52 100 84 73 72 63 24 48 56 52 23 5 17 76 31 1 95 58 43 60 50 62 30 23
-+35 79 20 35 3 72 32 45 51 87 41 84 27 79 77 70 102 15 54 15 100 8 52 69 105 3
-+30 84 42 93 66 89 69 74 24 33 42 97 4 38 99 106 13 93 6 106 74 100 54 45 21 59
-+56 37 9 50 32 75 79 31 77 9 61 1 8 68 6 60 81 7 100 99 14 61 48 25 73 26 70 72
-+94 3 11 98 31 5 67 7 39 92 73 88 101 32 105 34 82 81 11 72 48 10 59 71 51 71 35
-+33 27 49 49 19 98 47 43 75 64 17 15 24 94 49 4 84 58 58 74 39 47 104 82 5 63 69
-+90 19 ^
-+236 1 29 79 41 40 72 51 12 92 34 52 44 69 104 21 97 89 96 48 21 4 61 40 28 67
-+34 23 85 44 22 62 52 33 84 23 30 73 74 4 79 12 81 47 80 53 47 89 40 19 80 62 34
-+61 29 41 95 43 1 70 63 55 53 18 19 13 48 10 19 89 49 4 52 53 56 76 10 8 104 77
-+15 28 38 75 109 3 85 90 8 40 8 93 90 43 39 14 60 17 36 78 56 105 80 35 75 36 58
-+82 50 100 98 45 74 13 66 95 72 71 95 34 14 98 72 33 38 37 52 6 14 107 59 3 29
-+61 67 98 92 5 93 17 98 36 87 41 75 71 57 88 17 25 91 84 3 58 20 92 69 51 50 36
-+31 14 25 18 30 18 1 41 104 30 82 59 87 70 34 96 28 47 62 81 103 109 103 100 7
-+17 16 104 1 12 34 5 102 42 16 22 71 39 5 73 45 45 54 41 13 2 26 41 22 100 109
-+30 44 4 90 108 53 38 104 68 28 56 47 51 94 22 7 81 85 26 50 9 72 98 54 59 96 52
-+^
-+232 1 92 72 47 37 33 38 92 17 8 28 88 22 62 69 32 89 75 3 72 96 85 13 105 24 38
-+37 94 115 83 72 108 114 24 93 76 103 60 99 102 9 43 10 59 95 46 33 93 15 26 69
-+44 2 86 107 55 45 61 65 92 66 9 55 39 70 83 29 98 67 13 111 15 20 31 62 8 2 51
-+20 19 33 44 14 115 71 112 97 10 41 28 53 51 26 57 15 38 98 55 106 22 56 31 50
-+95 107 110 84 70 10 108 96 73 100 25 36 55 88 71 63 96 30 90 96 79 22 7 30 23
-+28 59 89 8 51 99 47 86 34 18 43 65 98 104 107 49 7 79 71 8 57 21 29 80 2 74 78
-+44 57 9 61 22 13 68 52 91 74 98 43 30 58 68 95 101 72 102 76 42 99 108 47 25 73
-+27 104 34 59 52 36 104 20 98 14 97 4 50 46 106 83 17 22 105 79 77 46 39 15 113
-+20 37 100 106 65 66 76 7 12 72 35 8 22 50 40 68 101 23 54 96 44 51 87 18 6 46
-+110 ^
-+245 0 70 30 81 46 53 119 85 6 104 47 92 72 70 5 70 15 115 68 105 33 97 13 85
-+106 14 61 29 22 86 45 57 69 91 38 38 28 66 13 60 95 103 3 15 5 113 38 23 62 5
-+65 94 107 73 104 37 47 102 117 3 78 35 7 95 56 78 45 52 28 46 43 37 32 53 19 55
-+29 47 97 76 115 83 71 11 45 62 73 99 116 2 24 116 7 28 41 2 29 37 52 23 5 118
-+79 31 57 89 61 24 101 78 50 93 73 41 7 33 45 47 24 1 48 73 36 3 25 87 46 28 108
-+54 68 53 67 119 28 36 118 104 42 88 27 112 4 74 85 1 63 39 97 71 74 75 76 10 49
-+12 79 11 50 103 118 94 117 118 37 27 12 94 60 28 51 47 82 110 17 15 105 23 52
-+43 12 21 22 81 41 12 74 90 42 108 117 98 67 4 69 44 76 105 38 101 21 80 70 10
-+111 23 110 32 101 83 91 101 31 5 3 83 76 15 90 57 74 95 46 33 112 62 63 54 63
-+49 59 4 64 40 68 110 74 105 91 86 102 27 55 34 88 55 ^
-+240 0 55 79 75 84 113 22 4 113 109 31 33 17 96 11 29 63 98 103 107 116 34 14 9
-+95 38 18 51 75 33 109 118 55 66 4 76 7 75 70 82 74 23 1 26 69 40 112 99 47 65
-+31 70 119 52 103 88 85 86 28 16 12 76 25 22 78 64 21 86 27 61 77 72 108 2 18
-+106 119 121 54 16 85 72 2 73 26 88 66 60 80 35 24 117 63 24 44 67 52 122 119 33
-+72 16 99 98 69 54 19 42 28 53 114 32 117 81 100 57 49 123 56 21 68 80 53 95 1
-+45 95 107 98 87 1 27 24 99 116 16 67 1 113 91 84 25 40 25 72 3 28 90 87 112 80
-+16 117 45 77 36 90 105 59 88 122 64 108 108 71 98 18 50 115 93 105 77 35 6 46
-+55 47 102 4 26 87 111 120 81 113 4 57 105 3 84 94 115 61 3 121 72 71 24 62 14
-+60 99 61 96 103 51 107 6 65 81 114 83 121 109 49 104 30 73 82 92 94 9 8 11 98
-+19 10 55 97 22 97 95 88 67 15 20 39 65 13 123 77 ^
-+253 1 45 7 15 24 51 5 98 115 24 49 90 104 117 66 128 94 64 80 12 43 91 46 111
-+59 58 77 30 14 88 60 123 68 41 44 68 40 104 118 41 43 93 90 105 92 16 127 26 54
-+125 114 79 71 24 48 21 25 118 40 103 49 91 44 67 65 25 119 109 18 48 23 69 112
-+38 61 64 87 84 104 119 110 122 92 22 1 8 83 34 100 32 62 41 46 112 34 102 76 56
-+39 4 127 30 13 19 110 124 7 16 128 95 4 124 11 104 116 126 49 95 3 55 96 70 90
-+101 4 122 96 75 118 39 128 99 92 18 42 20 87 83 35 75 111 61 67 71 28 101 9 56
-+34 105 95 71 23 73 71 26 57 15 23 76 55 99 89 128 98 117 68 43 88 62 38 62 39 2
-+83 36 15 26 60 128 96 73 74 10 1 12 42 22 2 77 33 33 32 57 13 14 82 57 12 39 3
-+58 80 14 87 85 44 69 109 19 117 67 68 44 63 106 37 88 64 82 56 37 89 4 126 55
-+98 114 84 99 91 43 92 21 26 58 84 102 75 116 124 5 101 5 97 46 109 15 29 79 72
-+93 92 110 ^
-+289 1 83 5 76 20 32 15 10 1 103 18 22 116 98 9 51 104 102 44 33 15 12 24 31 89
-+1 6 28 101 8 64 72 106 30 5 52 89 111 39 108 64 85 17 57 124 22 105 78 115 3 40
-+108 66 108 77 128 103 44 35 38 13 95 10 111 63 98 117 61 51 126 69 96 70 70 59
-+39 13 97 33 112 2 77 7 123 70 83 29 66 67 49 79 19 104 115 14 60 2 55 40 71 33
-+28 114 51 91 17 46 45 128 57 87 62 25 115 38 50 55 90 74 8 51 102 79 43 94 36
-+122 94 12 41 36 25 104 91 24 7 99 80 30 126 32 63 122 107 114 27 28 79 41 12 35
-+51 115 122 70 22 79 65 2 88 27 17 59 15 23 44 57 5 65 6 26 78 80 125 93 84 100
-+45 22 129 68 36 111 74 118 11 50 42 120 47 21 8 86 112 26 67 60 99 45 93 47 8
-+38 59 52 56 124 20 82 18 117 24 18 46 106 19 117 26 41 47 45 130 7 15 1 4 5 100
-+10 85 50 44 11 48 92 119 108 42 118 24 20 69 107 90 96 48 103 7 2 90 50 18 130
-+126 45 106 17 35 25 102 68 23 68 120 58 41 34 75 103 20 45 117 37 61 73 34 62 1
-+125 58 74 21 21 129 7 86 110 76 66 124 ^
-+263 1 100 135 7 75 23 5 81 110 31 118 29 1 62 11 41 88 109 119 102 37 3 30 123
-+47 31 56 134 29 124 116 118 99 21 56 77 91 23 37 135 81 44 51 67 95 51 133 30
-+57 67 116 122 48 100 7 132 97 106 69 93 4 95 125 102 103 119 81 57 133 96 37
-+118 50 117 113 81 127 17 45 103 32 121 129 60 43 65 127 30 36 132 110 52 53 35
-+71 12 76 22 72 130 112 99 76 26 21 73 63 63 97 23 58 115 132 114 1 132 31 35 18
-+23 54 30 53 118 37 35 84 94 60 100 3 47 18 110 105 87 57 63 76 43 52 45 46 49
-+65 12 10 42 66 60 117 34 19 92 5 28 76 9 126 101 125 32 38 34 15 7 62 32 21 3
-+43 69 31 109 123 51 116 135 130 129 130 63 14 57 80 62 15 126 31 105 83 108 120
-+80 124 46 98 105 91 6 6 27 7 58 128 78 7 79 63 84 77 74 128 65 61 95 121 17 24
-+123 117 51 50 64 79 59 44 134 78 73 59 114 18 27 3 109 49 82 43 118 116 52 119
-+15 122 82 26 87 53 114 133 92 88 39 99 17 107 134 95 104 31 52 49 94 ^
-+286 0 120 16 104 136 117 82 138 32 65 114 119 137 121 8 12 46 126 26 119 73 130
-+60 76 113 100 14 133 26 116 34 120 80 95 84 53 15 24 44 51 4 10 23 77 24 99 66
-+37 54 63 42 136 21 34 76 5 17 128 101 1 59 40 113 112 32 97 31 93 105 79 91 18
-+39 1 103 132 51 68 124 111 13 97 43 128 69 84 85 72 15 12 26 87 16 16 92 101 13
-+77 4 118 89 103 56 42 16 60 44 39 126 46 18 83 93 41 105 3 82 106 115 91 6 4 54
-+115 15 120 109 113 48 41 9 95 20 62 67 105 111 25 132 7 116 46 138 44 83 61 124
-+131 35 107 6 109 81 114 67 41 137 77 56 74 73 34 12 14 69 52 11 98 47 54 83 81
-+6 1 15 88 35 139 80 83 49 89 27 47 130 92 133 87 51 112 76 49 109 49 57 93 73
-+22 117 50 64 58 97 139 36 131 111 133 58 33 8 88 55 38 90 46 30 118 57 29 82 74
-+41 117 38 46 94 92 5 105 15 117 70 103 68 60 120 48 21 110 85 40 81 38 58 129
-+56 10 99 86 76 81 26 23 25 68 16 28 127 65 18 71 75 77 100 26 11 130 104 28 34
-+56 106 7 8 120 112 12 58 21 130 124 67 61 19 87 119 ^
-+286 1 35 94 61 130 98 35 88 34 65 104 56 126 118 50 87 10 81 109 90 86 118 32 6
-+114 88 39 38 39 62 3 12 134 72 137 35 75 81 115 106 140 112 11 123 41 103 45 95
-+84 71 107 13 26 110 96 62 16 109 84 59 53 38 27 8 28 13 32 137 17 138 41 122 36
-+99 65 99 83 36 112 29 49 70 96 126 136 131 116 3 18 17 126 142 14 37 141 141
-+123 42 13 20 83 42 139 83 54 49 58 42 7 137 29 48 16 121 127 34 52 140 106 128
-+58 36 124 83 24 69 54 61 112 17 6 95 97 24 57 86 124 59 71 119 67 1 109 54 68
-+49 57 132 32 5 71 113 40 80 104 75 106 133 31 126 130 104 62 9 39 44 66 116 141
-+135 96 132 19 41 121 126 124 77 8 4 60 82 6 101 124 89 51 123 48 40 85 77 21
-+112 10 69 66 115 87 16 108 30 84 65 80 103 32 131 134 73 47 10 63 39 50 93 37
-+135 114 69 48 34 58 23 27 133 37 9 40 98 41 115 99 70 83 29 42 67 133 55 79 80
-+91 122 12 2 115 112 23 33 16 102 3 19 60 101 130 105 116 117 27 2 1 103 38 14
-+55 78 26 116 123 54 67 139 82 74 70 84 72 17 132 25 68 31 120 103 140 ^
-+285 1 65 30 51 119 48 107 92 84 69 28 136 143 54 20 6 70 47 142 64 4 65 59 73
-+99 134 146 102 125 116 57 137 137 72 48 128 78 5 80 63 54 85 30 22 129 68 21 21
-+74 28 128 107 27 60 2 93 95 71 37 11 37 15 39 102 3 104 65 80 59 52 113 34 20
-+67 60 27 81 135 46 106 106 102 68 128 17 15 100 124 15 43 136 122 100 67 142 35
-+14 53 120 2 89 93 99 73 9 122 39 77 15 96 90 43 79 134 60 92 105 55 96 31 119
-+77 97 72 23 140 38 30 43 83 136 88 107 117 72 109 118 58 91 119 73 95 100 59
-+138 123 54 49 143 50 133 66 106 45 80 88 42 93 5 59 77 101 74 110 104 40 92 19
-+77 76 86 102 129 3 144 101 139 134 56 90 18 91 94 85 55 10 137 11 58 1 107 113
-+70 22 7 56 29 143 111 8 46 45 116 122 129 89 7 121 53 95 14 49 118 62 125 91 37
-+97 15 35 100 63 140 63 50 51 58 26 127 6 45 59 102 121 114 85 141 135 10 72 19
-+106 66 66 41 53 13 38 1 21 103 50 108 46 66 70 43 140 124 40 63 144 97 137 47
-+60 88 103 115 132 145 116 143 115 10 133 9 118 37 105 51 94 60 67 117 116 ^
-+305 1 109 110 75 42 12 139 137 43 128 106 107 19 126 12 101 148 127 15 117 125
-+125 62 96 13 76 70 96 101 110 138 8 95 76 143 17 32 97 79 149 39 31 94 123 21
-+41 135 55 84 70 33 135 118 50 62 121 81 1 45 144 93 60 5 64 137 8 105 91 82 67
-+27 113 119 53 18 98 79 48 84 32 135 128 5 1 20 76 17 85 108 72 36 141 140 49
-+150 105 104 3 149 14 54 18 148 64 49 125 37 28 28 101 22 104 91 32 82 117 12
-+114 69 58 2 58 115 9 108 47 59 65 14 92 7 4 86 98 16 82 92 95 38 94 10 10 48 97
-+104 66 115 97 142 115 122 119 40 97 16 32 47 34 88 89 26 50 12 76 80 51 40 9
-+133 24 44 40 122 84 108 22 142 140 99 44 15 54 8 42 125 150 130 21 79 124 62 46
-+119 15 29 91 57 150 42 138 71 61 68 80 114 6 1 70 121 18 35 113 56 87 86 10 73
-+14 29 41 72 89 1 133 87 101 123 59 90 142 77 133 52 78 48 34 138 134 27 17 60
-+131 147 61 93 148 39 132 49 62 71 36 91 4 139 49 100 120 43 113 144 30 94 73
-+127 40 34 50 100 110 88 114 94 35 138 33 72 61 58 65 24 107 6 54 81 114 56 137
-+71 11 23 19 73 1 108 110 25 148 11 98 132 150 17 70 146 50 ^
-+314 1 99 88 7 139 24 13 35 47 97 145 74 36 119 3 51 84 48 119 53 49 15 79 17
-+120 103 148 64 30 41 97 120 75 111 63 58 131 134 18 13 10 48 18 16 48 43 15 54
-+18 41 47 122 144 80 92 145 77 1 33 89 54 46 78 48 21 54 43 40 53 24 16 73 42 94
-+29 44 34 151 152 23 123 12 142 140 43 37 88 29 19 35 72 96 151 130 62 112 34 36
-+91 120 50 112 138 2 105 60 68 137 131 5 17 19 139 74 11 120 78 149 58 128 15
-+104 16 126 78 20 57 134 71 49 90 76 108 126 100 54 68 39 132 153 42 147 146 124
-+62 87 35 75 61 65 46 100 82 105 113 31 63 5 95 54 71 77 127 150 80 36 144 2 130
-+59 74 39 3 152 121 122 18 117 12 117 141 118 135 62 36 69 5 39 53 150 52 153
-+143 30 66 96 126 131 56 137 8 7 86 142 14 7 111 141 93 136 137 134 43 12 89 23
-+44 9 152 146 121 97 19 38 110 91 67 14 32 110 66 68 8 130 84 73 118 59 24 41 72
-+121 150 55 37 138 27 104 66 124 9 51 109 47 125 109 148 8 29 47 72 146 149 61
-+93 10 20 54 15 76 133 125 106 110 94 32 9 29 148 36 66 121 125 56 112 9 1 111
-+116 94 57 8 108 50 62 140 71 74 89 1 83 152 20 85 17 145 102 39 56 115 47 150
-+108 64 98 ^
-+335 1 28 103 19 92 95 152 152 10 11 13 155 67 11 83 101 69 153 152 45 141 14
-+120 129 140 119 59 2 89 73 70 83 29 16 67 81 29 1 54 65 96 117 2 37 47 128 33 3
-+89 108 98 139 49 78 27 103 39 119 94 132 90 38 132 55 65 131 90 58 2 54 100 69
-+118 22 44 19 7 148 93 25 29 123 81 64 131 55 30 1 89 38 97 82 64 9 28 86 123
-+151 10 133 40 154 102 4 111 65 9 63 59 124 116 72 105 76 57 137 97 32 145 108
-+78 112 50 43 34 75 20 22 129 68 11 118 74 125 118 57 17 20 129 53 65 61 144 1
-+17 142 156 52 100 54 15 20 59 52 63 131 20 57 124 31 125 46 106 76 92 8 98 154
-+152 80 114 15 140 136 112 100 17 92 25 151 150 80 99 69 83 49 43 156 102 19 57
-+122 96 30 3 39 134 40 32 75 5 76 127 138 99 17 57 52 150 130 18 127 33 23 116
-+107 78 77 77 42 69 68 48 41 69 33 75 40 49 128 103 4 146 93 10 83 66 96 152 30
-+38 12 33 5 39 47 41 34 60 74 20 42 156 67 46 56 102 89 3 124 81 99 104 56 50 8
-+61 74 55 15 87 108 28 138 47 93 60 2 124 46 126 103 91 145 36 25 116 122 79 79
-+7 111 13 85 121 9 98 32 125 81 134 77 112 15 70 33 110 13 50 148 8 133 127 153
-+45 19 42 121 94 45 91 95 117 22 9 46 6 26 31 53 150 8 148 128 53 141 ^
-+326 0 80 123 24 147 1 112 82 159 63 74 97 109 33 151 32 89 87 132 117 46 129 59
-+115 91 114 118 37 21 9 94 60 25 89 47 79 110 55 12 143 99 87 43 88 56 57 160 76
-+12 71 128 77 146 117 95 105 42 66 3 76 20 76 101 100 118 149 45 26 143 148 32
-+57 39 129 19 31 84 123 1 152 135 5 54 30 13 125 68 30 62 101 51 142 5 94 83 20
-+116 24 107 109 105 91 42 17 27 93 69 3 139 68 79 38 84 2 85 128 126 122 131 46
-+17 35 98 42 26 111 100 29 120 55 84 114 109 145 14 18 138 14 9 85 7 18 129 91 2
-+94 51 133 82 87 123 64 39 8 103 38 75 110 78 7 9 45 115 42 138 135 86 78 16 62
-+52 75 159 54 151 121 149 77 74 16 85 47 102 105 82 119 10 67 137 153 148 135 28
-+49 26 151 153 36 80 11 130 113 24 44 30 102 24 58 133 122 140 99 24 156 54 119
-+42 115 140 90 132 19 94 2 157 99 136 19 71 7 130 153 108 51 21 58 70 74 137 1
-+40 111 149 5 103 6 27 76 141 23 125 140 1 72 29 152 103 87 51 93 29 80 132 77
-+123 153 68 159 14 98 114 158 121 158 81 137 41 93 118 140 122 19 22 31 147 41 4
-+89 150 50 120 144 113 104 20 44 53 97 20 4 90 60 48 84 74 25 138 23 62 61 159 5
-+14 107 6 4 81 114 46 97 11 112 154 130 73 132 60 ^
-+325 0 58 137 96 11 98 67 98 103 57 146 21 59 88 151 139 148 127 25 17 47 115 34
-+160 109 107 51 64 28 69 13 49 149 69 141 90 93 118 64 10 1 67 80 35 111 13 58
-+101 124 132 147 154 18 162 6 162 33 5 34 142 41 161 82 114 70 92 145 57 155 137
-+114 79 44 36 48 48 21 14 13 40 33 14 150 33 32 54 143 14 4 101 142 23 93 136
-+132 120 147 17 38 163 143 5 52 46 151 130 32 72 34 124 150 51 100 112 128 126
-+65 10 28 87 81 159 131 19 99 54 125 110 58 119 28 78 129 104 140 126 38 154 27
-+114 61 153 90 66 98 76 50 158 48 39 82 123 22 147 136 114 52 37 35 75 41 15 150
-+60 52 55 103 21 23 129 95 24 71 47 97 130 50 140 144 106 100 9 64 19 117 122 71
-+92 8 77 156 97 121 98 85 2 36 39 109 143 23 120 156 133 93 154 36 66 116 131
-+160 127 162 161 46 142 14 141 81 141 63 86 117 104 3 146 39 127 34 133 102 106
-+91 57 9 28 60 61 7 158 12 80 26 8 122 80 44 63 68 49 158 21 32 81 150 15 141
-+108 161 64 46 124 123 31 99 27 105 109 98 112 9 37 12 116 149 51 73 144 124 4
-+119 46 133 75 86 90 84 2 9 19 108 6 16 101 115 16 92 163 125 101 106 64 37 8 68
-+40 42 130 41 24 89 115 43 112 85 121 125 92 154 9 46 115 7 140 108 158 ^
-+336 0 38 42 155 103 9 62 65 102 122 10 138 160 125 47 158 43 91 69 123 132 35
-+121 4 110 89 130 69 29 139 69 53 70 83 29 163 67 41 9 108 34 45 76 87 2 144 164
-+98 33 160 79 78 48 89 9 38 134 93 146 79 54 122 80 38 112 55 55 101 70 8 129 44
-+70 59 98 149 24 136 124 138 63 25 166 83 51 34 91 45 30 118 59 28 87 72 44 116
-+28 36 103 101 113 10 114 62 111 71 65 126 53 19 114 86 42 85 36 57 137 57 159
-+95 88 78 72 20 23 14 65 10 22 129 68 1 68 74 75 108 7 7 147 109 13 35 51 104
-+158 164 122 126 2 50 4 132 127 59 52 13 81 20 47 107 74 148 115 46 106 46 82
-+115 68 144 142 60 104 15 90 136 102 100 134 42 15 141 100 40 49 49 73 166 13
-+156 82 166 37 82 96 137 130 166 134 20 139 45 122 56 107 98 79 124 17 32 130
-+120 165 77 23 130 96 67 68 47 37 12 29 18 38 158 19 160 55 147 39 118 83 121 96
-+43 137 33 66 86 112 147 155 149 140 5 19 17 148 161 10 44 159 146 57 16 26 102
-+49 3 104 61 59 74 56 10 165 31 54 25 142 157 37 58 165 128 154 73 50 149 94 36
-+76 63 71 135 26 5 116 122 29 69 7 101 140 75 81 136 78 2 125 71 84 57 62 162 40
-+3 80 130 50 98 125 93 127 153 45 146 149 121 74 5 41 55 77 139 166 153 113 153
-+21 53 140 145 148 88 162 ^
-+341 0 4 62 78 167 102 144 94 55 141 63 29 97 91 24 115 166 80 69 132 99 1 120
-+23 88 64 87 118 37 137 152 94 60 168 71 47 52 110 37 155 125 63 42 43 52 11 12
-+151 31 12 44 110 32 128 117 68 87 24 39 164 76 145 58 101 91 100 140 151 143
-+130 32 21 3 111 1 31 75 123 153 116 135 130 27 164 165 116 23 12 62 83 24 133
-+139 49 74 154 80 158 80 64 105 91 6 142 27 75 24 128 112 41 79 29 84 145 40 128
-+99 95 95 19 17 160 89 15 17 84 64 11 93 10 66 78 73 127 148 18 129 139 143 49
-+150 9 84 82 154 85 15 88 82 60 87 19 12 133 58 20 39 65 51 141 134 27 70 167
-+120 117 86 60 16 44 16 57 132 18 142 85 104 59 47 141 58 2 66 96 46 119 153 40
-+110 126 103 90 144 13 26 106 144 80 145 134 103 95 24 44 21 84 140 13 97 104
-+140 99 6 147 54 83 42 106 131 54 96 135 67 118 121 81 109 10 53 132 112 117 81
-+33 155 49 61 38 119 1 13 102 131 148 94 131 143 67 123 148 89 104 135 72 145
-+152 76 87 6 66 2 71 123 77 114 108 59 123 166 62 96 140 94 149 116 36 128 23 93
-+91 95 113 162 156 165 111 166 4 44 105 5 120 99 113 68 11 169 35 70 2 147 125
-+81 15 12 57 56 16 138 14 53 61 114 121 5 107 6 129 81 114 37 61 127 67 136 94
-+73 114 32 34 119 72 11 98 37 74 73 51 146 161 35 146 ^
-+349 0 142 139 121 91 16 163 2 88 171 133 100 62 51 46 10 24 150 49 131 60 114
-+63 84 91 64 165 138 40 44 172 111 141 58 74 115 96 129 145 164 153 170 126 24
-+169 16 115 41 125 46 87 61 92 145 39 155 92 78 70 35 27 21 48 21 151 159 40 15
-+5 132 170 23 18 107 160 150 56 133 23 66 109 123 102 102 172 166 145 116 151 34
-+1 151 130 5 36 34 97 114 15 82 128 112 119 99 29 138 165 42 36 159 95 19 63 36
-+89 101 40 92 1 33 93 104 113 126 2 136 96 52 108 90 57 89 31 5 113 30 39 37 96
-+4 147 127 105 43 165 35 75 23 143 105 24 25 10 94 12 160 102 95 170 71 20 70
-+112 23 95 144 61 73 137 55 1 81 95 26 65 172 41 147 79 103 80 40 121 36 12 64
-+98 169 93 111 115 48 127 9 39 107 131 115 118 162 161 10 142 14 123 54 141 36
-+41 99 77 140 128 167 82 25 106 57 70 64 21 19 15 34 126 149 167 53 163 127 86
-+35 8 54 23 40 140 3 169 45 150 152 96 81 143 28 28 124 87 13 90 9 87 109 53 67
-+164 28 131 89 149 42 55 126 79 132 74 19 133 30 68 72 75 148 9 10 72 152 144 83
-+106 153 74 163 98 92 97 37 19 8 32 31 24 121 14 152 89 79 7 76 155 85 76 107 83
-+154 155 37 115 144 131 108 116 26 36 137 103 3 44 47 72 104 10 120 154 107 35
-+152 19 85 69 105 120 29 109 171 104 65 124 39 11 127 57 41 70 83 29 157 67 164 ^
-+370 1 167 63 16 27 58 60 2 99 128 71 33 160 70 51 3 44 149 2 89 84 101 43 18
-+113 71 38 94 55 46 74 52 139 102 35 43 50 80 122 6 100 88 129 36 25 148 47 24 7
-+55 36 30 82 32 19 78 63 26 71 28 167 85 56 167 95 159 78 26 66 35 65 90 44 159
-+105 59 15 67 57 137 21 132 50 70 78 36 169 5 172 56 1 22 129 68 168 23 74 30 99
-+138 174 120 91 153 8 42 68 158 155 104 99 133 5 135 96 82 59 52 144 36 20 38 62
-+29 112 106 46 106 19 73 70 41 135 133 42 95 15 45 136 93 100 98 173 6 132 55 4
-+4 31 64 130 162 156 64 157 19 46 96 92 103 139 134 2 94 18 86 38 89 62 61 79
-+157 14 112 111 156 32 14 85 78 31 59 20 1 161 169 149 29 122 150 133 37 102 30
-+109 65 85 51 174 110 164 66 77 76 111 119 131 95 5 1 166 103 134 141 17 158 123
-+137 48 165 175 102 13 3 86 43 23 47 56 150 165 4 36 174 115 157 168 13 147 119
-+109 55 41 140 67 27 31 27 53 126 17 163 116 122 160 60 7 92 113 66 45 109 60
-+151 125 62 39 39 17 153 13 152 53 94 50 53 89 57 127 153 45 119 104 121 56 145
-+172 19 41 103 166 108 68 126 12 53 131 127 148 52 134 168 50 48 155 72 132 82
-+37 129 63 175 97 79 18 91 148 74 57 132 87 147 114 175 70 46 69 118 37 107 140
-+94 60 156 59 47 34 110 25 143 113 39 12 43 28 157 158 145 1 12 26 98 2 116 117
-+50 75 12 21 164 76 121 46 101 85 88 134 146 127 143 79 ^
-+364 0 32 164 146 93 162 31 66 123 144 80 135 94 137 156 107 157 173 62 65 176
-+124 112 4 65 127 44 131 53 19 105 91 149 106 27 57 158 92 85 14 79 20 84 127
-+174 128 72 68 59 171 17 124 80 167 8 57 28 172 66 144 48 42 37 109 121 18 120
-+103 116 13 132 39 73 145 76 158 43 82 33 51 153 164 97 13 2 3 20 24 114 98 9 25
-+131 102 99 86 42 16 26 159 39 105 161 133 49 59 41 20 105 31 136 30 87 10 119
-+135 13 83 99 58 45 99 156 26 61 135 143 80 118 107 76 77 24 44 12 66 95 147 61
-+86 140 99 167 138 54 47 42 97 122 18 60 90 40 73 85 63 82 1 35 96 94 81 54 15
-+128 40 52 2 101 1 165 93 113 130 85 95 98 58 105 112 53 68 108 72 100 152 49 87
-+140 39 154 62 114 77 105 63 50 87 157 26 78 122 67 140 71 170 119 5 93 64 50
-+104 144 129 138 75 130 4 178 60 139 120 54 113 32 2 133 17 43 163 129 89 72 149
-+155 30 38 7 138 5 44 61 69 76 175 107 6 93 81 114 28 25 82 22 118 58 73 96 175
-+177 92 36 11 98 171 38 28 42 146 125 178 88 136 139 103 67 10 151 151 70 153
-+115 94 32 51 34 177 173 132 49 119 54 96 45 78 73 64 159 120 22 20 154 111 117
-+58 56 109 72 117 139 152 147 170 102 18 169 4 97 41 101 22 69 55 92 145 27 155
-+62 54 64 29 21 3 48 21 133 147 40 3 178 120 152 17 173 83 148 138 26 127 23 48
-+91 117 90 72 166 142 133 98 139 22 150 151 130 140 ^
-+372 0 34 70 78 161 64 92 112 110 72 175 102 138 179 173 159 59 19 27 18 53 92
-+22 65 156 170 57 104 86 126 148 118 155 78 43 63 90 48 80 168 142 68 12 39 174
-+69 168 147 118 96 34 129 35 75 5 107 60 170 180 147 85 3 133 75 95 152 71 175
-+43 94 178 50 144 16 46 101 46 165 45 68 163 38 172 5 138 61 85 62 177 76 36 167
-+19 53 151 66 66 97 3 100 164 12 98 131 70 109 162 161 156 142 14 105 27 141 9
-+178 81 50 113 110 131 37 16 79 12 34 37 167 173 10 152 7 81 140 158 26 136 82
-+50 172 154 45 160 31 122 167 142 9 150 125 51 54 125 174 10 124 51 177 81 173
-+69 109 8 22 155 19 86 62 149 33 37 108 34 96 29 174 133 167 50 54 66 130 9 1 36
-+134 108 65 97 126 56 163 71 83 88 10 1 8 178 22 6 112 169 116 89 43 153 40 146
-+85 31 89 74 154 137 28 115 117 122 108 98 8 27 110 103 176 17 20 27 77 10 93
-+145 80 17 143 165 76 69 78 102 20 91 171 95 29 115 176 166 109 39 23 70 83 29
-+148 67 163 161 33 4 15 46 42 2 69 104 53 33 160 64 33 155 14 131 160 59 78 71
-+19 176 107 65 38 82 55 40 56 40 115 84 29 25 44 68 104 176 76 64 123 18 25 136
-+23 6 171 31 30 30 58 14 13 72 57 14 41 28 143 73 26 167 83 147 54 2 36 11 65 66
-+38 141 99 41 179 55 158 57 137 179 114 20 58 78 12 157 175 166 50 177 22 129 68
-+168 175 74 93 114 174 102 79 135 172 36 44 158 149 92 81 109 157 111 72 119 ^
-+372 0 59 52 112 180 20 30 22 173 80 98 46 106 179 65 30 17 127 125 26 87 15 5
-+136 85 100 66 141 182 124 15 156 148 15 56 98 146 156 48 149 3 14 96 52 79 115
-+134 170 54 178 54 22 73 30 45 39 133 182 96 103 148 176 6 45 62 183 51 180 153
-+145 145 117 21 90 118 109 21 62 22 101 49 53 11 142 86 132 66 69 44 79 87 115
-+55 5 169 150 63 110 109 177 150 91 129 40 149 159 102 165 3 70 27 175 23 56 126
-+165 164 20 158 91 157 136 157 131 111 69 39 33 132 43 19 175 179 37 118 9 155
-+116 122 128 52 7 84 89 58 13 85 44 135 125 54 183 23 161 145 173 136 29 62 50
-+13 57 25 127 153 45 95 64 121 40 121 140 171 9 71 166 68 28 102 4 53 123 111
-+148 20 102 160 34 8 139 32 116 66 13 113 63 143 97 63 10 59 124 66 41 132 71
-+115 106 151 46 22 45 118 37 67 124 94 60 140 43 47 10 110 9 127 97 7 156 43 180
-+125 126 137 145 12 2 82 146 100 117 26 59 180 181 164 76 89 30 101 77 72 126
-+114 95 143 102 32 149 131 83 157 31 61 123 139 60 135 74 169 122 151 102 137
-+168 62 55 166 119 97 163 60 112 24 116 38 178 105 91 134 86 27 47 138 72 70 183
-+79 15 84 117 154 128 57 53 39 161 17 104 75 157 3 42 8 167 51 124 38 22 17 99
-+106 18 115 83 101 177 122 179 14 68 140 71 143 18 82 18 31 133 154 77 172 176
-+167 179 9 99 78 183 111 92 89 86 32 16 16 144 29 90 146 128 29 34 31 5 85 16
-+116 10 82 174 119 125 79 ^
-+391 0 59 75 18 5 59 132 26 21 127 119 80 94 83 52 61 24 44 4 50 55 115 29 70
-+140 99 159 130 54 15 42 89 114 173 28 50 16 33 53 47 58 180 19 64 78 49 30 186
-+104 32 44 157 85 1 149 85 97 114 77 63 58 50 89 80 21 36 84 72 60 152 25 87 108
-+15 138 54 106 77 97 23 42 55 149 181 62 106 43 132 31 138 111 176 93 40 10 96
-+128 105 114 43 98 4 146 20 107 120 14 113 181 101 1 19 155 113 57 64 117 131 6
-+22 186 138 184 36 61 29 36 175 107 6 61 81 114 20 180 42 169 102 26 73 80 151
-+153 68 4 11 98 139 6 175 34 146 93 154 88 128 139 79 35 2 135 119 46 129 91 86
-+179 51 18 169 141 108 49 103 46 72 21 70 49 64 151 96 185 175 130 111 85 58 32
-+101 40 101 131 136 139 170 70 10 169 175 73 41 69 177 45 47 92 145 11 155 22 22
-+56 21 13 166 48 21 109 131 40 174 178 104 128 9 149 51 132 122 173 119 23 24 67
-+109 74 32 158 110 117 74 123 6 118 151 130 150 167 34 55 58 146 54 72 112 105
-+57 160 82 123 159 153 159 39 19 7 8 33 87 12 50 146 150 37 104 71 126 133 108
-+145 68 38 38 90 43 75 148 122 43 2 39 154 54 163 147 113 91 29 109 35 75 182 87
-+35 155 170 127 80 185 118 60 95 142 71 165 28 84 168 25 144 178 31 81 41 160 25
-+53 143 23 172 172 133 51 75 52 157 51 36 157 181 28 141 51 41 87 165 85 154 184
-+93 131 45 104 162 161 141 142 14 95 12 141 181 158 71 35 98 100 111 12 11 64
-+174 14 22 152 173 5 132 179 56 135 153 11 121 57 30 152 139 40 140 53 ^
-+384 1 106 159 118 167 150 101 11 30 109 150 184 124 19 169 73 165 53 109 158
-+172 147 11 46 38 149 25 21 92 184 64 179 158 133 135 34 38 58 114 9 183 4 118
-+76 49 89 102 40 163 47 75 80 176 175 8 154 14 180 104 153 84 89 11 129 8 138 85
-+181 73 66 154 121 20 115 93 114 108 82 182 19 86 103 176 183 186 177 53 10 69
-+137 56 1 135 141 68 69 54 86 12 75 171 87 187 107 144 150 93 23 7 70 83 29 140
-+67 139 153 183 178 189 30 18 2 29 72 29 33 160 56 9 123 164 107 136 19 70 31
-+177 152 99 57 38 66 55 32 32 24 83 60 21 1 36 52 80 168 44 32 115 184 25 120
-+181 172 155 189 22 30 26 180 5 64 49 188 1 28 111 57 176 167 67 131 22 160 186
-+169 65 34 30 117 91 17 163 39 134 57 137 155 90 170 42 78 170 141 167 158 42
-+177 22 129 68 168 143 74 150 85 82 174 78 63 111 156 28 12 158 141 76 57 77 125
-+79 40 12 59 52 88 156 20 24 182 149 56 92 46 106 167 59 189 121 119 14 81 15
-+165 136 79 100 42 117 182 118 175 138 124 3 50 74 134 156 36 143 181 180 96 22
-+61 97 134 164 24 166 30 10 61 6 33 9 115 176 84 97 142 152 15 50 165 45 168 135
-+133 127 93 15 66 94 91 9 32 16 95 37 29 171 118 68 108 66 63 20 55 63 103 25 5
-+163 138 33 92 85 165 144 67 123 34 137 147 102 147 3 58 15 157 5 56 108 165 152
-+8 146 73 157 112 133 119 105 39 27 27 126 25 13 151 161 25 112 3 149 116 122
-+104 46 7 78 71 52 179 67 32 123 125 48 159 11 137 139 161 110 ^
-+394 0 2 26 50 161 21 182 127 153 45 68 19 121 22 94 104 144 166 35 166 23 176
-+75 188 53 114 93 148 177 66 151 16 156 121 180 98 48 179 95 63 107 97 45 1 23
-+97 57 23 132 53 79 97 124 19 188 18 118 37 22 106 94 60 122 25 47 176 110 184
-+109 79 164 120 43 153 89 90 128 109 12 168 64 110 82 117 192 41 171 163 164 76
-+53 12 101 68 54 117 78 59 143 84 32 122 104 65 148 31 52 123 130 24 135 38 151
-+95 142 93 101 159 62 37 148 110 70 127 51 85 181 89 11 142 105 91 107 50 27 29
-+102 36 43 165 79 6 84 99 118 128 30 26 3 143 17 68 66 139 187 15 165 158 24 88
-+20 179 174 81 79 18 106 47 74 150 104 179 162 59 131 62 116 166 82 184 188 97
-+136 41 136 167 140 143 175 72 42 174 148 75 74 71 86 14 16 191 117 11 63 119
-+119 186 182 13 171 49 182 80 167 73 147 119 107 164 41 57 181 168 29 114 26 184
-+121 101 80 76 65 34 49 24 44 191 38 25 91 5 58 140 99 153 124 54 184 42 83 108
-+155 4 20 191 3 29 35 40 180 7 40 66 25 12 180 86 26 38 139 73 1 137 79 85 102
-+71 39 28 44 77 56 190 12 66 72 30 152 7 87 84 190 126 48 100 77 91 186 36 31
-+143 163 50 94 25 126 1 114 105 170 93 22 173 90 116 87 96 19 74 4 122 183 83
-+120 177 113 169 181 77 182 1 149 101 33 58 93 113 181 10 186 138 184 30 61 192
-+6 175 107 6 37 81 114 14 162 12 145 90 2 73 68 133 135 50 173 11 98 115 175 151
-+28 146 69 136 88 122 139 61 11 189 123 95 28 111 73 80 155 51 6 163 117 90 49
-+91 40 54 189 ^
-+390 0 62 25 64 143 72 169 151 106 111 53 58 8 93 8 85 123 120 131 170 38 2 169
-+167 49 41 37 153 21 39 92 145 190 155 177 185 48 13 5 150 48 21 85 115 40 166
-+178 88 104 1 125 19 116 106 141 111 23 43 101 58 187 150 78 101 50 107 185 86
-+151 130 134 143 34 31 26 122 38 40 112 97 33 136 50 99 127 121 159 7 19 170 187
-+1 79 191 26 130 118 5 104 47 126 109 92 129 52 30 193 90 35 67 116 90 3 181 39
-+122 30 155 147 105 83 21 77 35 75 174 55 190 131 154 95 72 185 94 36 95 126 71
-+149 4 68 152 180 144 146 7 49 33 152 188 29 111 194 172 148 125 35 59 36 125 11
-+36 141 149 183 125 27 1 71 133 61 138 168 85 131 5 96 162 161 117 142 14 79 183
-+141 165 126 55 11 74 84 79 167 3 40 142 177 193 128 173 192 100 163 16 127 145
-+182 97 17 193 120 115 32 108 18 96 154 103 152 150 86 181 15 99 135 179 124 194
-+164 68 160 43 109 138 152 142 6 21 23 149 20 11 82 164 44 159 148 133 115 24 28
-+53 104 9 183 179 108 56 39 84 87 30 163 32 70 75 166 170 8 139 9 175 99 143 64
-+89 186 114 183 133 85 161 63 61 154 111 15 115 78 109 108 72 177 14 71 103 176
-+173 176 157 38 10 54 132 41 186 130 126 63 69 39 76 7 65 171 82 172 102 124 140
-+83 13 192 70 83 29 135 67 124 148 163 173 184 20 3 2 4 52 14 33 160 51 189 103
-+144 92 121 189 65 6 162 137 94 52 38 56 55 27 17 14 63 45 16 181 31 42 65 163
-+24 12 110 174 25 110 166 162 145 174 17 30 6 170 59 44 183 171 28 91 47 156 172
-+^
-+400 1 51 115 188 136 154 145 65 2 22 93 83 191 147 23 110 57 137 131 66 138 26
-+78 146 125 159 150 34 177 22 129 68 168 111 74 118 77 50 174 54 47 87 140 20
-+178 158 133 60 33 45 93 47 8 170 59 52 56 124 20 16 150 117 24 84 46 106 151 51
-+158 173 113 111 196 73 15 133 136 71 100 10 85 182 110 143 114 92 185 42 42 118
-+156 20 135 173 156 96 180 37 73 134 156 182 150 196 192 45 172 17 167 91 168 68
-+89 134 120 190 173 34 141 37 152 111 117 103 61 7 34 62 67 191 190 8 87 21 195
-+139 86 44 76 66 55 186 23 31 87 183 5 155 122 191 68 53 149 136 35 115 26 121
-+131 102 123 3 42 197 133 179 56 84 165 136 190 130 49 157 80 101 103 97 197 11
-+19 118 1 5 119 137 9 104 193 141 116 122 72 38 7 70 47 44 155 43 16 107 125 40
-+127 193 105 131 145 108 185 6 50 141 1 167 127 153 45 53 192 121 12 79 84 129
-+151 15 166 196 156 60 188 53 109 83 148 162 46 146 6 136 111 160 88 38 169 85
-+63 87 97 35 194 3 82 52 13 132 43 59 92 109 4 178 3 118 37 195 96 94 60 112 15
-+47 166 110 179 99 69 149 100 43 138 69 70 123 89 12 158 54 90 72 117 182 31 166
-+153 164 76 33 2 101 63 44 112 58 39 143 74 32 107 89 55 143 31 47 123 125 4 135
-+18 141 80 137 88 81 154 62 27 138 105 55 107 46 70 166 74 194 122 105 91 92 30
-+27 19 82 16 28 155 79 1 84 89 98 128 15 11 181 133 17 48 61 129 187 150 153 9
-+68 10 164 159 71 64 18 101 27 59 135 94 179 142 54 126 57 101 146 82 174 173 77
-+126 21 116 162 125 123 165 57 22 169 153 ^
-+394 0 47 60 57 86 16 184 96 197 42 98 112 165 154 199 157 21 168 52 146 66 126
-+119 93 150 20 36 153 140 194 93 26 156 114 80 80 55 44 13 35 24 44 191 24 190
-+63 177 44 140 99 146 117 54 163 42 76 101 134 176 185 177 168 1 21 19 180 193
-+12 52 197 191 173 65 19 31 118 59 1 123 72 71 88 64 11 193 37 63 28 169 184 45
-+72 195 152 186 87 56 176 112 41 93 77 84 158 29 3 136 142 36 80 4 119 166 86 98
-+163 93 1 145 83 102 66 75 191 46 4 94 155 55 120 149 113 148 181 49 175 180 142
-+87 5 51 65 92 167 196 186 138 184 23 61 164 171 175 107 6 9 81 114 7 141 177
-+117 76 174 73 54 112 114 29 152 11 98 87 154 123 21 146 41 115 88 115 139 40
-+183 189 109 67 7 90 52 73 127 51 192 156 89 69 49 77 33 33 182 57 10 64 138 57
-+159 136 91 111 33 58 193 88 188 75 118 110 126 170 18 197 169 162 34 41 17 138
-+6 34 92 145 185 155 157 170 43 8 140 48 21 70 105 40 161 178 78 89 196 110 199
-+106 96 121 106 23 185 28 96 48 167 145 58 91 35 97 180 66 151 130 124 128 34 16
-+6 107 28 20 112 92 18 121 30 84 107 101 159 187 19 155 182 181 74 186 11 120 98
-+185 104 32 126 94 82 119 42 25 173 90 30 62 96 70 178 176 39 102 15 150 147 100
-+78 16 57 35 75 169 35 170 116 144 75 67 185 79 21 95 116 71 139 189 58 142 160
-+144 126 192 29 28 147 173 14 91 184 172 133 120 25 49 26 105 186 36 131 129 163
-+115 12 176 61 113 46 128 158 80 131 180 91 162 161 102 142 14 69 173 141 155
-+106 45 196 59 74 59 147 195 ^
-+412 0 16 110 153 177 104 173 192 68 147 179 119 137 166 73 180 169 88 91 24 76
-+10 80 146 79 128 150 62 149 194 83 111 171 124 170 156 60 152 27 109 106 120
-+134 201 184 202 149 12 198 66 132 12 127 132 133 83 8 12 45 88 9 183 155 92 24
-+23 76 63 14 163 8 62 67 150 162 8 115 1 167 91 127 32 89 162 90 159 125 85 129
-+47 53 154 95 7 115 54 101 108 56 169 6 47 103 176 157 160 125 14 10 30 124 17
-+178 122 102 55 69 15 60 202 49 171 74 148 94 92 124 67 200 184 70 83 29 127 67
-+100 140 131 165 176 4 182 2 167 20 193 33 160 43 173 71 112 68 97 157 57 169
-+138 113 86 44 38 40 55 19 196 201 31 21 8 165 23 26 41 155 195 183 102 158 25
-+94 142 146 129 150 9 30 177 154 195 51 36 175 139 28 59 31 124 167 41 105 173
-+121 134 130 65 185 17 78 78 181 137 13 95 57 137 116 51 118 16 78 131 115 154
-+145 29 177 22 129 68 168 91 74 98 72 30 174 39 37 72 130 15 163 158 128 50 18
-+25 73 27 191 150 59 52 36 104 20 11 130 97 4 79 46 106 141 46 138 163 108 106
-+191 68 15 113 136 66 100 193 65 182 105 123 99 72 180 37 22 108 156 10 130 168
-+141 96 160 22 58 134 151 162 140 181 187 35 157 7 147 76 163 58 84 129 100 190
-+153 24 126 32 142 96 107 88 41 2 14 42 52 186 170 3 82 11 180 119 66 29 56 66
-+50 171 3 11 77 163 5 150 112 171 53 33 139 131 15 110 21 111 121 102 108 3 32
-+192 118 169 56 69 165 126 185 120 34 157 60 81 93 92 177 1 14 113 189 99 122
-+202 99 193 136 116 122 52 33 7 65 32 39 140 28 6 97 125 35 107 188 85 126 135
-+98 175 189 50 121 184 116 ^
-+413 1 127 153 45 32 164 121 203 58 56 108 130 192 166 168 128 39 188 53 102 69
-+148 141 18 139 197 108 97 132 74 24 155 71 63 59 97 21 194 180 61 45 204 132 29
-+31 85 88 188 164 187 118 37 167 82 94 60 98 1 47 152 110 172 85 55 128 72 43
-+117 41 42 116 61 12 144 40 62 58 117 168 17 159 139 164 76 5 193 101 56 30 105
-+30 11 143 60 32 86 68 41 136 31 40 123 118 181 135 195 127 59 130 81 53 147 62
-+13 124 98 34 79 39 49 145 53 180 94 105 91 71 2 27 5 54 193 7 141 79 199 84 75
-+70 128 199 195 160 119 17 20 54 115 187 184 129 146 193 40 201 143 138 57 43 18
-+94 204 38 114 80 179 114 47 119 50 80 118 82 160 152 49 112 198 88 155 104 95
-+151 36 199 162 100 27 50 47 86 195 16 179 81 192 27 83 107 150 134 194 147 1
-+158 32 131 61 111 119 83 140 5 21 133 120 174 78 26 136 109 65 80 40 29 203 25
-+24 44 191 14 170 43 162 34 140 99 141 112 54 148 42 71 96 119 161 165 167 148
-+186 11 4 180 188 197 42 182 181 168 50 14 26 103 49 1 113 67 61 78 59 196 173
-+32 53 8 154 169 30 72 175 152 176 87 36 166 102 36 88 77 79 138 24 188 131 127
-+26 70 194 114 146 66 93 158 93 191 125 78 92 51 60 176 26 4 74 135 35 120 129
-+113 133 181 29 170 170 137 77 190 46 45 77 157 191 186 138 184 18 61 144 151
-+175 107 6 194 81 114 2 126 157 97 66 159 73 44 97 99 14 137 11 98 67 139 103 16
-+146 21 100 88 110 139 25 168 189 99 47 197 75 37 68 107 51 187 151 69 54 49 67
-+28 18 172 52 200 64 133 42 149 121 76 111 13 58 183 83 173 65 113 100 121 170
-+203 197 169 157 19 202 ^
-+434 1 193 114 190 26 92 145 177 155 125 146 35 200 124 48 21 46 89 40 153 178
-+62 65 196 86 175 90 80 89 98 23 169 4 88 32 135 137 26 75 11 81 172 34 151 130
-+108 104 34 200 182 83 12 196 112 84 202 97 206 60 75 69 159 163 19 131 174 157
-+66 178 195 104 66 161 104 8 126 70 66 103 26 17 141 90 22 54 64 38 146 168 39
-+70 199 142 147 92 70 8 25 35 75 161 3 138 92 128 43 59 185 55 205 95 100 71 123
-+173 42 126 128 144 94 176 205 20 139 149 198 59 168 172 109 112 9 33 10 73 154
-+36 115 97 131 99 196 144 45 81 22 112 142 72 131 148 83 162 161 78 142 14 53
-+157 141 139 74 29 180 35 58 27 115 198 1 90 138 167 89 173 192 48 137 159 114
-+132 156 58 160 154 68 76 19 56 5 70 141 64 113 150 47 129 184 73 96 166 124 155
-+151 55 147 17 109 86 100 129 201 164 192 149 7 193 56 112 200 107 122 133 63
-+206 2 40 78 9 183 140 82 4 13 71 48 4 163 201 57 62 140 157 8 100 204 162 86
-+117 12 89 147 75 144 120 85 109 37 48 154 85 2 115 39 96 108 46 164 1 32 103
-+176 147 150 105 207 10 15 119 2 173 117 87 50 69 50 202 39 171 69 133 89 72 114
-+57 195 179 70 83 29 122 67 85 135 111 160 171 202 172 2 147 183 33 160 38 163
-+51 92 53 82 137 52 149 123 98 81 39 38 30 55 14 186 196 11 6 3 155 18 16 26 150
-+180 168 97 148 25 84 127 136 119 135 4 30 162 144 195 46 31 170 119 28 39 21
-+104 167 31 95 158 106 114 115 65 170 12 63 73 171 127 3 80 57 137 101 36 98 6
-+78 116 105 149 140 24 177 22 129 68 168 71 74 78 67 10 174 24 27 57 120 10 148
-+158 123 40 3 5 53 7 176 130 59 52 16 84 20 6 110 77 192 74 46 106 131 41 118
-+153 144 ^
-+438 1 99 184 61 15 85 136 59 100 172 37 182 98 95 78 44 173 30 204 94 156 206
-+123 161 120 96 132 1 37 134 144 134 126 160 180 21 136 203 119 55 156 44 77 122
-+72 190 125 10 105 25 128 75 93 67 13 205 196 14 31 179 142 206 75 207 159 91 38
-+8 28 66 43 150 185 193 63 135 5 143 98 143 32 5 125 124 197 103 14 97 107 102
-+87 3 18 185 97 155 56 48 165 112 178 106 13 157 32 53 79 85 149 197 7 106 175
-+203 71 101 195 92 193 129 116 122 24 26 7 58 11 32 119 7 202 83 125 28 79 181
-+57 119 121 84 161 168 50 93 163 131 127 153 45 17 144 121 198 43 36 93 115 177
-+166 148 108 24 188 53 97 59 148 126 208 134 192 88 87 112 64 14 145 61 63 39 97
-+11 194 165 46 40 199 132 19 11 80 73 178 154 177 118 37 147 72 94 60 88 201 47
-+142 110 167 75 45 113 52 43 102 21 22 111 41 12 134 30 42 48 117 158 7 154 129
-+164 76 195 188 101 51 20 100 10 201 143 50 32 71 53 31 131 31 35 123 113 166
-+135 180 117 44 125 76 33 142 62 3 114 93 19 59 34 34 130 38 170 74 105 91 56
-+192 27 205 34 178 202 131 79 199 84 65 50 128 189 185 145 109 17 49 105 187 174
-+114 141 183 20 196 128 123 47 28 18 89 189 23 99 70 179 94 42 114 45 65 98 82
-+150 137 29 102 183 68 150 89 75 141 21 184 157 80 7 40 37 86 190 16 174 66 187
-+12 68 102 135 114 189 137 191 148 12 116 56 96 119 73 130 200 6 113 100 154 63
-+26 116 104 50 80 25 14 193 15 24 44 191 4 150 23 147 24 140 99 136 107 54 133
-+42 66 91 104 146 145 157 128 171 1 199 180 183 182 32 167 171 163 35 9 21 88 39
-+1 103 62 51 68 54 181 153 27 43 198 139 154 15 72 155 152 166 87 16 156 92 31
-+83 77 74 118 19 173 126 202 ^
-+431 0 10 54 178 106 114 34 85 150 93 175 93 70 76 27 36 152 207 4 42 103 3 120
-+97 113 109 181 210 162 154 129 61 166 38 13 53 141 183 186 138 184 10 61 112
-+119 175 107 6 170 81 114 207 102 125 65 50 135 73 28 73 75 203 113 11 98 35 115
-+71 8 146 202 76 88 102 139 1 144 189 83 15 181 51 13 60 75 51 179 143 37 30 49
-+51 20 207 156 44 184 64 125 18 133 97 52 111 194 58 167 75 149 49 105 84 113
-+170 179 197 169 149 208 41 178 99 180 21 92 145 172 155 105 131 30 208 200 114
-+48 21 31 79 40 148 178 52 50 196 71 160 80 70 69 93 23 159 202 83 22 115 132 6
-+65 209 71 167 14 151 130 98 89 34 190 167 68 2 181 112 79 192 82 191 45 55 49
-+159 148 19 116 169 142 61 173 185 94 46 146 104 206 126 55 56 93 16 12 121 90
-+17 49 44 18 126 163 39 50 189 137 147 87 65 3 5 35 75 156 196 118 77 118 23 54
-+185 40 195 95 90 71 113 163 32 116 108 144 74 166 190 15 134 134 188 39 158 172
-+94 107 212 23 53 134 36 105 77 111 89 186 124 35 61 7 102 132 67 131 128 78 162
-+161 63 142 14 43 147 141 129 54 19 170 20 48 7 95 198 199 70 123 157 74 173 192
-+28 127 139 109 127 146 43 140 139 48 61 14 36 60 136 49 98 150 32 109 174 63 81
-+161 124 140 146 50 142 7 109 66 80 124 201 144 182 149 2 188 46 92 185 87 112
-+133 43 201 205 35 68 9 183 125 72 197 3 66 33 207 163 191 52 57 130 152 8 85
-+204 157 81 107 205 89 132 60 129 115 85 89 27 43 154 75 210 115 24 91 108 36
-+159 209 17 103 176 137 140 85 197 10 114 200 168 112 72 45 69 198 40 202 29 171
-+64 118 84 52 104 47 190 174 70 83 29 117 67 70 130 91 155 166 197 162 2 127 193
-+173 82 ^
-+464 1 160 31 149 23 64 32 61 109 45 121 102 77 74 32 38 16 55 7 172 189 198 200
-+211 141 11 2 5 143 159 147 90 134 25 70 106 122 105 114 212 30 141 130 195 39
-+24 163 91 28 11 7 76 167 17 81 137 85 86 94 65 149 5 42 66 157 113 204 59 57
-+137 80 15 70 207 78 95 91 142 133 17 177 22 129 68 168 43 74 50 60 197 174 3 13
-+36 106 3 127 158 116 26 197 192 25 194 155 102 59 52 203 56 20 214 82 49 171 67
-+46 106 117 34 90 139 96 94 179 56 15 65 136 54 100 157 17 182 93 75 63 24 168
-+25 189 84 156 201 118 156 105 96 112 201 22 134 139 114 116 145 175 11 121 198
-+99 40 151 34 72 117 52 190 105 90 20 118 60 83 52 208 205 181 209 16 174 122
-+206 70 202 144 71 18 208 8 66 38 135 170 178 53 115 5 138 88 123 17 200 115 119
-+182 98 9 87 97 102 72 3 8 180 82 145 56 33 165 102 173 96 213 157 12 33 69 80
-+129 192 2 101 165 203 51 86 190 87 193 124 116 122 4 21 7 53 211 27 104 207 197
-+73 125 23 59 176 37 114 111 74 151 153 50 73 148 116 127 153 45 2 124 121 193
-+28 16 78 100 162 166 128 88 9 188 53 92 49 148 111 193 129 187 68 77 92 54 4
-+135 51 63 19 97 1 194 150 31 35 194 132 9 206 75 58 168 144 167 118 37 127 62
-+94 60 78 196 47 132 110 162 65 35 98 32 43 87 1 2 106 21 12 124 20 22 38 117
-+148 212 149 119 164 76 180 183 101 46 10 95 205 186 143 40 32 56 38 21 126 31
-+30 123 108 151 135 165 107 29 120 71 13 137 62 208 104 88 4 39 29 19 115 23 160
-+54 105 91 41 177 27 200 14 163 192 121 79 199 84 55 30 128 179 175 130 99 17
-+195 44 95 187 164 99 136 173 191 113 108 37 13 18 84 174 8 84 60 179 74 37 109
-+40 50 78 82 140 122 9 92 168 48 145 74 55 131 6 169 152 60 202 30 27 86 185 16
-+169 51 182 212 53 97 185 ^
-+452 1 82 181 121 167 132 198 92 48 72 119 57 114 184 200 81 68 122 39 26 84 96
-+26 80 1 208 177 217 24 44 191 206 118 209 123 8 140 99 128 99 54 109 42 58 83
-+80 122 113 141 96 147 203 183 180 175 158 16 143 155 155 11 1 13 64 23 1 87 54
-+35 52 46 157 121 19 27 174 115 130 209 72 123 152 150 87 202 140 76 23 75 77 66
-+86 11 149 118 88 44 168 101 94 14 80 145 93 165 73 65 66 12 21 137 192 4 22 83
-+201 120 77 113 94 181 195 157 144 124 51 151 33 211 38 131 178 186 138 184 5 61
-+92 99 175 107 6 155 81 114 207 87 105 45 40 120 73 18 58 60 193 98 11 98 15 100
-+51 3 146 187 61 88 97 139 204 129 189 73 213 171 36 216 55 55 51 174 138 17 15
-+49 41 15 197 146 39 174 64 120 3 123 82 37 111 179 58 157 70 134 39 100 74 108
-+170 164 197 169 144 198 41 163 84 170 16 92 145 167 155 85 116 25 208 200 104
-+48 21 16 69 40 143 178 42 35 196 56 145 70 60 49 88 23 149 192 78 12 95 127 204
-+55 199 61 162 212 151 130 88 74 34 180 152 53 210 166 112 74 182 67 176 30 35
-+29 159 133 19 101 164 127 56 168 175 84 26 131 104 196 126 40 46 83 6 7 101 90
-+12 44 24 216 106 158 39 30 179 132 147 82 60 216 203 35 75 151 181 98 62 108 3
-+49 185 25 185 95 80 71 103 153 22 106 88 144 54 156 175 10 129 119 178 19 148
-+172 79 102 207 13 208 33 114 36 95 57 91 79 176 104 25 41 210 92 122 62 131 108
-+73 162 161 48 142 14 33 137 141 119 34 9 160 5 38 205 75 198 189 50 108 147 59
-+173 192 8 117 119 104 122 136 28 120 124 28 46 9 16 213 50 131 34 83 150 17 89
-+164 53 66 156 124 125 141 45 137 215 109 46 60 119 201 124 172 149 215 183 36
-+72 170 67 102 133 23 196 200 30 58 9 183 110 62 182 211 61 18 202 163 97 ^
-+463 1 45 50 116 145 8 64 204 150 74 93 184 89 111 39 108 108 85 61 13 36 154 61
-+210 115 3 84 108 22 152 209 216 103 176 123 126 57 183 10 199 107 186 161 105
-+51 38 69 184 26 202 15 171 57 97 77 24 90 33 183 167 70 83 29 110 67 49 123 63
-+148 159 190 148 2 99 172 159 33 160 26 139 3 44 17 46 89 40 101 87 62 69 27 38
-+6 55 2 162 184 183 190 211 131 6 212 210 138 144 132 85 124 25 60 91 112 95 99
-+212 30 126 120 195 34 19 158 71 28 211 217 56 167 7 71 122 70 66 79 65 134 27
-+61 147 103 199 44 57 137 65 50 202 78 80 81 137 128 12 177 22 129 68 168 23 74
-+30 55 182 174 208 3 21 96 218 112 158 111 16 187 177 5 179 140 82 59 52 188 36
-+20 214 62 29 156 62 46 106 107 29 70 129 91 89 174 51 15 45 136 49 100 142 217
-+182 88 55 48 4 163 20 174 74 156 196 113 151 90 96 92 191 7 134 134 94 106 130
-+170 1 106 193 79 25 146 24 67 112 32 190 85 210 75 15 108 45 73 37 193 205 166
-+194 1 169 102 206 65 197 129 51 218 198 208 66 33 120 155 163 43 95 5 133 78
-+103 2 185 105 114 167 93 4 77 87 102 57 3 218 175 67 135 56 18 165 92 168 86
-+203 157 212 13 59 75 109 187 217 96 155 203 31 71 185 82 193 119 116 122 204 16
-+7 48 201 22 89 197 192 63 125 18 39 171 17 109 101 64 141 138 50 53 133 101 127
-+153 45 207 104 121 188 13 216 63 85 147 166 108 68 214 188 53 87 39 148 96 178
-+124 182 48 67 72 44 214 125 41 63 219 97 211 194 135 16 30 189 132 219 191 70
-+43 158 134 157 118 37 107 52 94 60 68 191 47 122 110 157 55 25 83 12 43 72 201
-+202 101 1 12 114 10 2 28 117 138 207 144 109 164 76 165 178 101 41 90 190 171
-+143 30 32 41 23 11 121 31 25 123 103 136 135 150 97 14 115 66 213 132 62 203 94
-+83 209 19 24 4 100 8 150 160 ^
-+474 0 105 91 20 156 27 193 208 142 178 107 79 199 84 41 2 128 165 161 109 85 17
-+174 37 81 187 150 78 129 159 194 184 92 87 23 214 18 77 153 209 63 46 179 46 30
-+102 33 29 50 82 126 101 203 78 147 20 138 53 27 117 207 148 145 32 181 16 13 86
-+178 16 162 30 175 198 32 90 99 66 177 113 155 124 186 80 44 60 119 49 106 176
-+192 65 52 106 27 26 68 92 14 80 211 200 169 213 24 44 191 202 102 197 111 140
-+99 124 95 54 97 42 54 79 68 110 97 133 80 135 199 175 180 171 146 8 131 147 151
-+221 219 9 52 15 1 79 50 27 44 42 145 105 15 19 162 103 118 201 72 107 152 142
-+87 190 132 68 19 71 77 62 70 7 137 114 76 214 36 160 97 78 220 76 141 93 157 57
-+61 58 9 125 180 4 6 67 189 120 61 113 82 181 183 153 136 120 43 139 29 199 26
-+123 174 186 138 184 1 61 76 83 175 107 6 143 81 114 207 75 89 29 32 108 73 10
-+46 48 185 86 11 98 221 88 35 221 146 175 49 88 93 139 196 117 189 65 201 163 24
-+208 51 39 51 170 134 1 3 49 33 11 189 138 35 166 64 116 213 115 70 25 111 167
-+58 149 66 122 31 96 66 104 170 152 197 169 140 190 41 151 72 162 12 92 145 163
-+155 69 104 21 208 200 96 48 21 4 61 40 139 178 34 23 196 44 133 62 52 33 84 23
-+141 184 74 4 79 123 192 47 191 53 158 200 151 130 80 62 34 172 140 41 206 154
-+112 70 174 55 164 18 19 13 159 121 19 89 160 115 52 164 167 76 10 119 104 188
-+126 28 38 75 220 3 85 90 8 40 8 204 90 154 39 14 171 128 147 78 56 216 191 35
-+75 147 169 82 50 100 209 45 185 13 177 95 72 71 95 145 14 98 72 144 38 148 163
-+6 125 107 170 3 140 172 67 98 203 5 204 17 98 36 87 41 75 71 168 88 17 25 202
-+84 114 58 131 92 69 162 161 36 142 14 25 129 141 111 18 1 152 215 30 193 59 198
-+181 34 96 139 47 173 192 214 109 103 100 118 128 16 104 112 198 ^
-+466 0 25 2 213 213 36 124 13 62 150 221 61 150 39 45 149 124 104 134 38 130 208
-+109 18 32 112 201 96 158 149 215 176 22 44 149 39 88 133 220 189 193 23 44 9
-+183 89 48 161 204 54 222 195 163 167 40 45 106 140 8 49 204 145 69 83 169 89 96
-+24 93 103 85 41 3 31 154 51 210 115 213 79 108 12 147 209 206 103 176 113 116
-+37 173 10 189 102 176 156 100 36 33 69 174 16 202 5 171 52 82 72 4 80 23 178
-+162 70 83 29 105 67 34 118 43 143 154 185 138 2 79 157 149 33 160 21 129 208 24
-+2 31 69 35 81 72 47 64 22 38 221 55 222 152 179 168 180 211 121 1 207 200 133
-+129 117 80 114 25 50 76 102 85 84 212 30 111 110 195 29 14 153 51 28 196 212 36
-+167 222 61 107 55 46 64 65 119 220 12 56 137 93 194 29 57 137 50 210 30 197 78
-+65 71 132 123 7 177 22 129 68 168 3 74 10 50 167 174 198 218 6 86 218 97 158
-+106 6 177 162 210 164 125 62 59 52 173 16 20 214 42 9 141 57 46 106 97 24 50
-+119 86 84 169 46 15 25 136 44 100 127 202 182 83 35 33 209 158 15 159 64 156
-+191 108 146 75 96 72 181 217 134 129 74 96 115 165 216 91 188 59 10 141 14 62
-+107 12 190 65 205 60 10 98 30 63 22 178 205 151 179 211 164 82 206 60 192 114
-+31 203 188 193 66 28 105 140 148 33 75 5 128 68 83 212 170 95 109 152 88 224 67
-+77 102 42 3 213 170 52 125 56 3 165 82 163 76 193 157 197 218 49 70 89 182 217
-+91 145 203 11 56 180 77 193 114 116 122 189 11 7 43 191 17 74 187 187 53 125 13
-+19 166 222 104 91 54 131 123 50 33 118 86 127 153 45 197 84 121 183 223 201 48
-+70 132 166 88 48 204 188 53 82 29 148 81 163 119 177 28 57 52 34 209 115 31 63
-+204 97 206 194 120 1 25 184 132 214 176 65 28 148 124 147 118 37 87 42 94 60 58
-+186 47 112 110 152 45 15 68 217 43 57 186 187 218 ^
-+477 1 200 12 100 223 201 14 117 124 200 137 95 164 76 144 171 101 34 213 83 169
-+150 143 16 32 20 2 224 114 31 18 123 96 115 135 129 83 220 108 59 192 125 62
-+196 80 76 195 218 17 210 79 214 136 6 105 91 5 141 27 188 193 127 168 97 79 199
-+84 31 209 128 155 151 94 75 17 159 32 71 187 140 63 124 149 179 179 77 72 13
-+204 18 72 138 199 48 36 179 26 25 97 28 14 30 82 116 86 188 68 132 133 38 7 107
-+197 133 140 12 166 6 3 86 173 16 157 15 170 188 17 85 84 46 172 103 140 114 171
-+65 39 45 119 39 96 166 182 45 32 86 12 26 48 87 226 80 201 190 159 208 24 44
-+191 197 82 182 96 217 140 99 119 90 54 82 42 49 74 53 95 77 123 60 120 194 165
-+180 166 131 225 116 137 146 211 219 4 37 5 1 69 45 17 34 37 130 85 10 9 147 88
-+103 191 72 87 152 132 87 175 122 58 14 66 77 57 50 2 122 109 61 209 26 150 92
-+58 205 71 136 93 147 37 56 48 212 221 110 165 4 213 47 174 120 41 113 67 181
-+168 148 126 115 33 124 24 184 11 113 169 186 138 184 223 61 56 63 175 107 6 128
-+81 114 207 60 69 9 22 93 73 31 33 175 71 11 98 206 73 15 221 146 160 34 88 88
-+139 186 102 189 55 186 153 9 198 46 19 51 165 129 208 215 49 23 6 179 128 30
-+156 64 111 203 105 55 10 111 152 58 139 61 107 21 91 56 99 170 137 197 169 135
-+180 41 136 57 152 7 92 145 158 155 49 89 16 208 200 86 48 21 216 51 40 134 178
-+24 8 196 29 118 52 42 13 79 23 131 174 69 221 59 118 177 37 181 43 153 185 151
-+130 70 47 34 162 125 26 201 139 112 65 164 40 149 3 226 220 159 106 19 74 155
-+100 47 159 157 66 217 104 104 178 126 13 28 65 215 225 65 90 3 35 215 189 70
-+149 39 221 161 123 147 73 51 216 176 35 75 142 154 62 35 90 194 40 185 225 167
-+95 62 71 85 135 4 88 52 144 18 138 148 1 120 92 160 210 130 172 52 93 198 222
-+199 224 19 ^
-+479 0 36 73 13 47 57 154 60 3 226 188 70 100 51 131 64 62 162 161 15 142 14 11
-+115 141 97 219 216 138 201 16 172 31 198 167 6 75 125 26 173 192 193 95 75 93
-+111 114 224 76 91 213 13 227 201 213 28 120 1 50 150 213 45 142 31 33 145 124
-+92 130 34 126 204 109 2 16 108 201 80 150 149 215 172 14 28 137 23 80 133 208
-+185 189 19 36 9 183 77 40 149 200 50 214 191 163 159 36 41 98 136 8 37 204 141
-+65 75 157 89 84 12 81 99 85 25 224 27 154 43 210 115 205 75 108 4 143 209 198
-+103 176 105 108 21 165 10 181 98 168 152 96 24 29 69 166 8 202 226 171 48 70 68
-+217 72 15 174 158 70 83 29 101 67 22 114 27 139 150 181 130 2 63 145 141 33 160
-+17 121 196 8 219 19 53 31 65 60 35 60 18 38 217 55 222 144 175 156 172 211 113
-+226 203 192 129 117 105 76 106 25 42 64 94 77 72 212 30 99 102 195 25 10 149 35
-+28 184 208 20 167 218 53 95 43 30 52 65 107 220 52 129 85 190 17 57 137 38 202
-+14 193 78 53 63 128 119 3 177 22 129 68 168 216 74 223 46 155 174 190 214 223
-+78 218 85 158 102 227 169 150 198 152 113 46 59 52 161 20 214 26 222 129 53 46
-+106 89 20 34 111 82 80 165 42 15 9 136 40 100 115 190 182 79 19 21 197 154 11
-+147 56 156 187 104 142 63 96 56 173 209 134 125 58 88 103 161 212 79 184 43 227
-+137 6 58 103 225 190 49 201 48 6 90 18 55 10 166 205 139 167 203 160 66 206 56
-+188 102 15 191 180 181 66 24 93 128 136 25 59 5 124 60 67 204 158 87 105 140 84
-+224 59 69 102 30 3 209 166 40 117 56 220 165 74 159 68 185 157 185 206 41 66 73
-+178 217 87 137 203 224 44 176 73 193 110 116 122 177 7 7 39 183 13 62 179 183
-+45 125 9 3 162 210 100 83 46 123 111 50 17 106 74 127 153 45 189 68 121 179 215
-+189 36 58 120 166 72 32 196 188 53 78 21 148 69 151 115 173 12 49 36 26 205 107
-+23 63 192 112 ^
-+485 1 200 194 102 214 19 178 132 208 158 59 10 136 112 135 118 37 63 30 94 60
-+46 180 47 100 110 146 33 3 50 199 43 39 168 169 90 188 12 92 219 189 6 117 116
-+196 133 87 164 76 132 167 101 30 209 79 157 138 143 8 32 8 221 220 110 31 14
-+123 92 103 135 117 75 212 104 55 180 121 62 192 72 72 187 206 13 202 67 206 128
-+221 105 91 224 129 27 184 181 115 160 89 79 199 84 23 197 128 147 143 82 67 17
-+147 28 63 187 132 51 120 141 167 175 65 60 5 196 18 68 126 191 36 28 179 10 21
-+93 24 2 14 82 108 74 176 60 120 215 129 26 222 99 189 121 136 227 154 229 226
-+86 169 16 153 3 166 180 5 81 72 30 168 95 128 106 159 53 35 33 119 31 88 158
-+174 29 16 70 26 32 83 218 80 193 182 151 204 24 44 191 193 66 170 84 213 140 99
-+115 86 54 70 42 45 70 41 83 61 115 44 108 190 157 180 162 119 221 104 129 142
-+203 219 25 228 1 61 41 9 26 33 118 69 6 1 135 76 91 183 72 71 152 124 87 163
-+114 50 10 62 77 53 34 229 110 105 49 205 18 142 88 42 193 67 132 93 139 21 52
-+40 204 213 98 153 4 201 31 162 120 25 113 55 181 156 144 118 111 25 112 20 172
-+230 105 165 186 138 184 223 61 40 47 175 107 6 116 81 114 207 48 53 224 14 81
-+73 223 19 21 167 59 11 98 194 61 230 221 146 148 22 88 84 139 178 90 189 47 174
-+145 228 190 42 3 51 161 125 196 207 49 15 2 171 120 26 148 64 107 195 97 43 229
-+111 140 58 131 57 95 13 87 48 95 170 125 197 169 131 172 41 124 45 144 3 92 145
-+154 155 33 77 12 208 200 78 48 21 208 43 40 130 178 16 227 196 17 106 44 34 228
-+75 23 123 166 65 217 43 114 165 29 173 35 149 173 151 130 62 35 34 154 113 14
-+197 127 112 61 156 28 137 222 214 208 159 94 19 62 151 88 43 155 149 58 205 92
-+104 170 126 1 20 57 211 225 49 90 230 31 203 177 54 145 39 209 153 119 147 69
-+47 216 164 35 75 138 142 46 23 82 182 36 185 198 ^
-+483 1 155 95 50 71 73 123 225 76 28 144 227 126 130 228 114 74 148 192 118 172
-+34 87 192 216 193 206 54 36 65 230 31 49 146 44 228 214 180 62 92 47 131 48 58
-+162 161 3 142 14 3 107 141 89 207 212 130 193 8 160 15 198 159 223 63 117 14
-+173 192 181 87 59 89 107 106 216 60 79 201 1 227 189 213 20 116 222 38 150 205
-+29 134 23 21 141 124 80 126 30 122 200 109 219 104 201 64 142 149 215 168 6 12
-+125 7 72 133 196 181 185 15 28 9 183 65 32 137 196 46 206 187 163 151 32 37 90
-+132 8 25 204 137 61 67 145 89 72 69 95 85 9 220 23 154 35 210 115 197 71 108
-+229 139 209 190 103 176 97 100 5 157 10 173 94 160 148 92 12 25 69 158 202 222
-+171 44 58 64 205 64 7 170 154 70 83 29 97 67 10 110 11 135 146 177 122 2 47 133
-+133 33 160 13 113 184 225 211 7 37 27 49 48 23 56 14 38 213 55 222 136 171 144
-+164 211 105 226 199 184 125 105 93 72 98 25 34 52 86 69 60 212 30 87 94 195 21
-+6 145 19 28 172 204 4 167 214 45 83 31 14 40 65 95 220 221 48 121 77 186 5 57
-+137 26 194 231 189 78 41 55 124 115 232 177 22 129 68 168 204 74 211 42 143 174
-+182 210 215 70 218 73 158 98 223 161 138 186 140 101 30 59 52 149 217 20 214 10
-+210 117 49 46 106 81 16 18 103 78 76 161 38 15 226 136 36 100 103 178 182 75 3
-+9 185 150 7 135 48 156 183 100 138 51 96 40 165 201 134 121 42 80 91 157 208 67
-+180 27 219 133 231 54 99 213 190 33 197 36 2 82 6 47 231 154 205 127 155 195
-+156 50 206 52 184 90 232 179 172 169 66 20 81 116 124 17 43 5 120 52 51 196 146
-+79 101 128 80 224 51 61 102 18 3 205 162 28 109 56 212 165 66 155 60 177 157
-+173 194 33 62 57 174 217 83 129 203 212 32 172 69 193 106 116 122 165 3 7 35
-+175 9 50 171 179 37 125 5 220 158 198 96 75 38 115 99 50 1 94 62 127 153 45 181
-+52 121 175 207 177 24 46 108 164 ^
-+499 0 44 4 182 188 53 71 7 148 48 130 108 166 220 35 8 12 198 93 9 63 171 97
-+195 194 87 204 14 173 132 203 143 54 231 126 102 125 118 37 43 20 94 60 36 175
-+47 90 110 141 23 229 35 184 43 24 153 154 85 173 12 82 214 174 232 117 106 191
-+128 77 164 76 117 162 101 25 204 74 142 123 143 234 32 229 211 215 105 31 9 123
-+87 88 135 102 65 202 99 50 165 116 62 187 62 67 177 191 8 192 52 196 118 206
-+105 91 214 114 27 179 166 100 150 79 79 199 84 13 182 128 137 133 67 57 17 132
-+23 53 187 122 36 115 131 152 170 50 45 231 186 18 63 111 181 21 18 179 226 16
-+88 19 223 230 82 98 59 161 50 105 200 124 11 207 89 179 106 131 212 139 224 221
-+86 164 16 148 224 161 170 226 76 57 10 163 85 113 96 144 38 30 18 119 21 78 148
-+164 9 232 50 221 26 12 78 208 80 183 172 141 199 24 44 191 188 46 155 69 208
-+140 99 110 81 54 55 42 40 65 26 68 41 105 24 93 185 147 180 157 104 216 89 119
-+137 193 219 231 10 223 1 51 36 235 16 28 103 49 1 227 120 61 76 173 72 51 152
-+114 87 148 104 40 5 57 77 48 14 229 95 100 34 200 8 132 83 22 178 62 127 93 129
-+1 47 30 194 203 83 138 4 186 11 147 120 5 113 40 181 141 139 108 106 15 97 15
-+157 220 95 160 186 138 184 223 61 20 27 175 107 6 101 81 114 207 33 33 209 4 66
-+73 218 4 6 157 44 11 98 179 46 215 221 146 133 7 88 79 139 168 75 189 37 159
-+135 218 180 37 219 51 156 120 181 197 49 5 233 161 110 21 138 64 102 185 87 28
-+219 111 125 58 121 52 80 3 82 38 90 170 110 197 169 126 162 41 109 30 134 234
-+92 145 149 155 13 62 7 208 200 68 48 21 198 33 40 125 178 6 217 196 2 91 34 24
-+213 70 23 113 156 60 212 23 109 150 19 163 25 144 158 151 130 52 20 34 144 98
-+235 192 112 112 56 146 13 122 212 199 193 159 79 19 47 146 73 38 150 139 48 190
-+77 104 160 126 222 10 47 206 225 29 90 230 26 188 162 34 140 39 194 143 114 147
-+64 42 216 149 174 ^
-+473 1 75 131 121 18 2 68 161 29 185 203 145 95 40 71 63 113 220 66 8 144 212
-+116 115 228 109 59 138 177 108 172 19 82 187 211 188 191 34 36 55 215 11 39 136
-+24 223 199 170 52 82 42 131 28 53 162 161 226 142 14 231 97 141 79 192 207 120
-+183 236 145 233 198 149 208 48 107 237 173 192 166 77 39 84 102 96 206 40 64
-+186 224 227 174 213 10 111 212 23 150 195 9 124 13 6 136 124 65 121 25 117 195
-+109 204 218 99 201 44 132 149 215 163 234 230 110 225 62 133 181 176 180 10 18
-+9 183 50 22 122 191 41 196 182 163 141 27 32 80 127 8 10 204 132 56 57 130 89
-+57 223 54 90 85 227 215 18 154 25 210 115 187 66 108 224 134 209 180 103 176 87
-+90 223 147 10 163 89 150 143 87 235 20 69 148 228 202 217 171 39 43 59 190 54
-+235 165 149 70 83 29 92 67 233 105 229 130 141 172 112 2 27 118 123 33 160 8
-+103 169 210 201 230 17 22 29 33 8 51 9 38 208 55 222 126 166 129 154 211 95 226
-+194 174 120 90 78 67 88 25 24 37 76 59 45 212 30 72 84 195 16 1 140 237 28 157
-+199 222 167 209 35 68 16 232 25 65 80 220 211 43 111 67 181 228 57 137 11 184
-+216 184 78 26 45 119 110 232 177 22 129 68 168 189 74 196 37 128 174 172 205
-+205 60 218 58 158 93 218 151 123 171 125 86 10 59 52 134 202 20 214 228 195 102
-+44 46 106 71 11 236 93 73 71 156 33 15 211 136 31 100 88 163 182 70 221 232 170
-+145 2 120 38 156 178 95 133 36 96 20 155 191 134 116 22 70 76 152 203 52 175 7
-+209 128 226 49 94 198 190 13 192 21 235 72 229 37 221 139 205 112 140 185 151
-+30 206 47 179 75 217 164 162 154 66 15 66 101 109 7 23 5 115 42 31 186 131 69
-+96 113 75 224 41 51 102 3 3 200 157 13 99 56 202 165 56 150 50 167 157 158 179
-+23 57 37 169 217 78 119 203 197 17 167 64 193 101 116 122 150 236 7 30 165 4 35
-+161 174 27 125 205 153 148 ^
-+502 1 89 61 24 101 78 50 213 73 41 127 153 45 167 24 121 168 193 156 3 25 87
-+166 28 228 174 188 53 67 239 148 36 118 104 162 208 27 232 4 194 85 1 63 159 97
-+191 194 75 196 10 169 132 199 131 50 223 118 94 117 118 37 27 12 94 60 28 171
-+47 82 110 137 15 225 23 172 43 12 141 142 81 161 12 74 210 162 228 117 98 187
-+124 69 164 76 105 158 101 21 200 70 130 111 143 230 32 221 203 211 101 31 5 123
-+83 76 135 90 57 194 95 46 153 112 62 183 54 63 169 179 4 184 40 188 110 194 105
-+91 206 102 27 175 154 88 142 71 79 199 84 5 170 128 129 125 55 49 17 120 19 45
-+187 114 24 111 123 140 166 38 33 227 178 18 59 99 173 9 10 179 214 12 84 15 215
-+218 82 90 47 149 42 93 188 120 239 195 81 171 94 127 200 127 220 217 86 160 16
-+144 216 157 162 218 72 45 234 159 77 101 88 132 26 26 6 119 13 70 140 156 233
-+220 34 213 26 236 74 200 80 175 164 133 195 24 44 191 184 30 143 57 204 140 99
-+106 77 54 43 42 36 61 14 56 25 97 8 81 181 139 180 153 92 212 77 111 133 185
-+219 231 238 219 1 43 32 231 8 24 91 33 237 223 108 49 64 165 72 35 152 106 87
-+136 96 32 1 53 77 44 238 229 83 96 22 196 124 79 6 166 58 123 93 121 225 43 22
-+186 195 71 126 4 174 235 135 120 229 113 28 181 129 135 100 102 7 85 11 145 212
-+87 156 186 138 184 223 61 4 11 175 107 6 89 81 114 207 21 17 197 236 54 73 214
-+232 234 149 32 11 98 167 34 203 221 146 121 235 88 75 139 160 63 189 29 147 127
-+210 172 33 207 51 152 116 169 189 49 237 233 153 102 17 130 64 98 177 79 16 211
-+111 113 58 113 48 68 235 78 30 86 170 98 197 169 122 154 41 97 18 126 234 92
-+145 145 155 237 50 3 208 200 60 48 21 190 25 40 121 178 238 209 196 230 79 26
-+16 201 66 23 105 148 56 208 7 105 138 11 155 17 140 146 151 130 44 8 34 136 86
-+227 188 100 112 52 138 1 110 204 187 181 159 67 19 35 142 61 34 146 131 40 178
-+65 104 152 126 214 2 39 202 173 ^
-+486 1 5 90 230 20 170 144 10 134 39 176 131 108 147 58 36 216 131 35 75 127 109
-+2 232 60 149 25 185 195 137 95 32 71 55 105 216 58 234 144 200 108 103 228 105
-+47 130 165 100 172 7 78 183 207 184 179 18 36 47 203 237 31 128 8 219 187 162
-+44 74 38 131 12 49 162 161 218 142 14 227 89 141 71 180 203 112 175 232 133 221
-+198 141 196 36 99 229 173 192 154 69 23 80 98 88 198 24 52 174 216 227 162 213
-+2 107 204 11 150 187 235 116 5 236 132 124 53 117 21 113 191 109 192 206 95 201
-+28 124 149 215 159 230 218 98 213 54 133 169 172 176 6 10 9 183 38 14 110 187
-+37 188 178 163 133 23 28 72 123 8 240 204 128 52 49 118 89 45 215 42 86 85 215
-+211 14 154 17 210 115 179 62 108 220 130 209 172 103 176 79 82 211 139 10 155
-+85 142 139 83 227 16 69 140 224 202 213 171 35 31 55 178 46 231 161 145 70 83
-+29 88 67 225 101 217 126 137 168 104 2 11 106 115 33 160 4 95 157 198 193 222 1
-+18 13 21 238 47 5 38 204 55 222 118 162 117 146 211 87 226 190 166 116 78 66 63
-+80 25 16 25 68 51 33 212 30 60 76 195 12 239 136 225 28 145 195 210 167 205 27
-+56 4 220 13 65 68 220 203 39 103 59 177 220 57 137 241 176 204 180 78 14 37 115
-+106 232 177 22 129 68 168 177 74 184 33 116 174 164 201 197 52 218 46 158 89
-+214 143 111 159 113 74 236 59 52 122 190 20 214 216 183 90 40 46 106 63 7 224
-+85 69 67 152 29 15 199 136 27 100 76 151 182 66 209 224 158 141 240 108 30 156
-+174 91 129 24 96 4 147 183 134 112 6 62 64 148 199 40 171 233 201 124 222 45 90
-+186 190 239 188 9 235 64 221 29 213 127 205 100 128 177 147 14 206 43 175 63
-+205 152 154 142 66 11 54 89 97 241 7 5 111 34 15 178 119 61 92 101 71 224 33 43
-+102 233 3 196 153 1 91 56 194 165 48 146 42 159 157 146 167 15 53 21 165 217 74
-+111 203 185 5 163 60 193 97 116 122 138 236 7 26 157 23 153 170 184 ^
-+505 1 125 238 187 147 165 85 53 16 93 66 50 201 61 29 127 153 45 159 8 121 164
-+185 144 235 13 75 166 12 216 166 188 53 63 235 148 24 106 100 158 196 19 220
-+240 190 77 237 63 147 97 187 194 63 188 6 165 132 195 119 46 215 110 86 109 118
-+37 11 4 94 60 20 167 47 74 110 133 7 221 11 160 43 129 130 77 149 12 66 206 150
-+224 117 90 183 120 61 164 76 93 154 101 17 196 66 118 99 143 226 32 213 195 207
-+97 31 1 123 79 64 135 78 49 186 91 42 141 108 62 179 46 59 161 167 176 28 180
-+102 182 105 91 198 90 27 171 142 76 134 63 79 199 84 241 158 128 121 117 43 41
-+17 108 15 37 187 106 12 107 115 128 162 26 21 223 170 18 55 87 165 241 2 179
-+202 8 80 11 207 206 82 82 35 137 34 81 176 116 231 183 73 163 82 123 188 115
-+216 213 86 156 16 140 208 153 154 210 68 33 222 155 69 89 80 120 14 22 238 119
-+5 62 132 148 221 208 18 205 26 224 70 192 80 167 156 125 191 24 44 191 180 14
-+131 45 200 140 99 102 73 54 31 42 32 57 2 44 9 89 236 69 177 131 180 149 80 208
-+65 103 129 177 219 231 230 215 1 35 28 227 20 79 17 237 219 96 37 52 157 72 19
-+152 98 87 124 88 24 241 49 77 40 226 229 71 92 10 192 236 116 75 234 154 54 119
-+93 113 213 39 14 178 187 59 114 4 162 223 123 120 217 113 16 181 117 131 92 98
-+243 73 7 133 204 79 152 186 138 184 223 61 232 239 175 107 6 77 81 114 207 9 1
-+185 232 42 73 210 224 226 141 20 11 98 155 22 191 221 146 109 227 88 71 139 152
-+51 189 21 135 119 202 164 29 195 51 148 112 157 181 49 233 233 145 94 13 122 64
-+94 169 71 4 203 111 101 58 105 44 56 231 74 22 82 170 86 197 169 118 146 41 85
-+6 118 234 92 145 141 155 225 38 243 208 200 52 48 21 182 17 40 117 178 234 201
-+196 222 67 18 8 189 62 23 97 140 52 204 235 101 126 3 147 9 136 134 151 130 36
-+240 34 128 74 219 184 88 112 48 130 233 98 196 175 169 159 55 19 23 138 49 30
-+142 123 32 166 53 104 144 126 206 238 31 198 203 ^
-+483 1 235 90 230 16 158 132 240 130 39 164 123 104 147 54 32 216 119 35 75 123
-+97 232 224 52 137 21 185 187 129 95 24 71 47 97 212 50 222 144 188 100 91 228
-+101 35 122 153 92 172 241 74 179 203 180 167 2 36 39 191 225 23 120 238 215 175
-+154 36 66 34 131 242 45 162 161 210 142 14 223 81 141 63 168 199 104 167 228
-+121 209 198 133 184 24 91 221 173 192 142 61 7 76 94 80 190 8 40 162 208 227
-+150 213 240 103 196 245 150 179 223 108 243 228 128 124 41 113 17 109 187 109
-+180 194 91 201 12 116 149 215 155 226 206 86 201 46 133 157 168 172 2 2 9 183
-+26 6 98 183 33 180 174 163 125 19 24 64 119 8 232 204 124 48 41 106 89 33 207
-+30 82 85 203 207 10 154 9 210 115 171 58 108 216 126 209 164 103 176 71 74 199
-+131 10 147 81 134 135 79 219 12 69 132 220 202 209 171 31 19 51 166 38 227 157
-+141 70 83 29 84 67 217 97 205 122 133 164 96 2 241 94 107 33 160 87 145 186 185
-+214 231 14 243 9 230 43 1 38 200 55 222 110 158 105 138 211 79 226 186 158 112
-+66 54 59 72 25 8 13 60 43 21 212 30 48 68 195 8 239 132 213 28 133 191 198 167
-+201 19 44 238 208 1 65 56 220 195 35 95 51 173 212 57 137 233 168 192 176 78 2
-+29 111 102 232 177 22 129 68 168 165 74 172 29 104 174 156 197 189 44 218 34
-+158 85 210 135 99 147 101 62 224 59 52 110 178 20 214 204 171 78 36 46 106 55 3
-+212 77 65 63 148 25 15 187 136 23 100 64 139 182 62 197 216 146 137 240 96 22
-+156 170 87 125 12 96 234 139 175 134 108 236 54 52 144 195 28 167 221 193 120
-+218 41 86 174 190 227 184 243 235 56 213 21 205 115 205 88 116 169 143 244 206
-+39 171 51 193 140 146 130 66 7 42 77 85 237 237 5 107 26 245 170 107 53 88 89
-+67 224 25 35 102 225 3 192 149 235 83 56 186 165 40 142 34 151 157 134 155 7 49
-+5 161 217 70 103 203 173 239 159 56 193 93 116 122 126 236 7 22 149 242 178 ^
-+507 1 141 164 7 125 238 175 143 153 81 45 8 85 54 50 189 49 17 127 153 45 151
-+240 121 160 177 132 227 1 63 166 244 204 158 188 53 59 231 148 12 94 96 154 184
-+11 208 236 186 69 233 63 135 97 183 194 51 180 2 161 132 191 107 42 207 102 78
-+101 118 37 243 244 94 60 12 163 47 66 110 129 247 217 247 148 43 236 117 118 73
-+137 12 58 202 138 220 117 82 179 116 53 164 76 81 150 101 13 192 62 106 87 143
-+222 32 205 187 203 93 31 245 123 75 52 135 66 41 178 87 38 129 104 62 175 38 55
-+153 155 244 168 16 172 94 170 105 91 190 78 27 167 130 64 126 55 79 199 84 237
-+146 128 113 109 31 33 17 96 11 29 187 98 103 107 116 158 14 9 219 162 18 51 75
-+157 233 242 179 190 4 76 7 199 194 82 74 23 125 26 69 164 112 223 171 65 155 70
-+119 176 103 212 209 86 152 16 136 200 149 146 202 64 21 210 151 61 77 72 108 2
-+18 230 119 245 54 124 140 209 196 2 197 26 212 66 184 80 159 148 117 187 24 44
-+191 176 246 119 33 196 140 99 98 69 54 19 42 28 53 238 32 241 81 224 57 173 123
-+180 145 68 204 53 95 125 169 219 231 222 211 1 27 24 223 240 16 67 1 237 215 84
-+25 40 149 72 3 152 90 87 112 80 16 241 45 77 36 214 229 59 88 246 188 232 108
-+71 222 142 50 115 93 105 201 35 6 170 179 47 102 4 150 211 111 120 205 113 4
-+181 105 127 84 94 239 61 3 121 196 71 148 186 138 184 223 61 220 227 175 107 6
-+65 81 114 207 245 233 173 228 30 73 206 216 218 133 8 11 98 143 10 179 221 146
-+97 219 88 67 139 144 39 189 13 123 111 194 156 25 183 51 144 108 145 173 49 229
-+233 137 86 9 114 64 90 161 63 240 195 111 89 58 97 40 44 227 70 14 78 170 74
-+197 169 114 138 41 73 242 110 234 92 145 137 155 213 26 243 208 200 44 48 21
-+174 9 40 113 178 230 193 196 214 55 10 177 58 23 89 132 48 200 223 97 114 243
-+139 1 132 122 151 130 28 232 34 120 62 211 180 76 112 44 122 225 86 188 163 157
-+159 43 19 11 134 37 26 138 115 24 154 41 104 136 126 198 234 140 ^
-+490 1 192 225 223 90 230 12 146 120 228 126 39 152 115 100 147 50 28 216 107 35
-+75 119 85 220 216 44 125 17 185 179 121 95 16 71 39 89 208 42 210 144 176 92 79
-+228 97 23 114 141 84 172 233 70 175 199 176 155 236 36 31 179 213 15 112 226
-+211 163 146 28 58 30 131 230 41 162 161 202 142 14 219 73 141 55 156 195 96 159
-+224 109 197 198 125 172 12 83 213 173 192 130 53 241 72 90 72 182 242 28 150
-+200 227 138 213 236 99 188 237 150 171 211 100 239 220 124 124 29 109 13 105
-+183 109 168 182 87 201 246 108 149 215 151 222 194 74 189 38 133 145 164 168
-+248 244 9 183 14 248 86 179 29 172 170 163 117 15 20 56 115 8 224 204 120 44 33
-+94 89 21 199 18 78 85 191 203 6 154 1 210 115 163 54 108 212 122 209 156 103
-+176 63 66 187 123 10 139 77 126 131 75 211 8 69 124 216 202 205 171 27 7 47 154
-+30 223 153 137 70 83 29 80 67 209 93 193 118 129 160 88 2 229 82 99 33 160 246
-+79 133 174 177 206 219 10 231 247 222 39 247 38 196 55 222 102 154 93 130 211
-+71 226 182 150 108 54 42 55 64 25 1 52 35 9 212 30 36 60 195 4 239 128 201 28
-+121 187 186 167 197 11 32 230 196 239 65 44 220 187 31 87 43 169 204 57 137 225
-+160 180 172 78 240 21 107 98 232 177 22 129 68 168 153 74 160 25 92 174 148 193
-+181 36 218 22 158 81 206 127 87 135 89 50 212 59 52 98 166 20 214 192 159 66 32
-+46 106 47 249 200 69 61 59 144 21 15 175 136 19 100 52 127 182 58 185 208 134
-+133 240 84 14 156 166 83 121 96 222 131 167 134 104 224 46 40 140 191 16 163
-+209 185 116 214 37 82 162 190 215 180 235 235 48 205 13 197 103 205 76 104 161
-+139 232 206 35 167 39 181 128 138 118 66 3 30 65 73 233 225 5 103 18 233 162 95
-+45 84 77 63 224 17 27 102 217 3 188 145 227 75 56 178 165 32 138 26 143 157 122
-+143 249 45 239 157 217 66 95 203 161 231 155 52 193 89 116 122 114 236 7 18 141
-+242 249 137 162 3 125 238 69 ^
-+514 1 139 141 77 37 77 42 50 177 37 5 127 153 45 143 228 121 156 169 120 219
-+241 51 166 232 192 150 188 53 55 227 148 82 92 150 172 3 196 232 182 61 229 63
-+123 97 179 194 39 172 250 157 132 187 95 38 199 94 70 93 118 37 231 240 94 60 4
-+159 47 58 110 125 243 213 239 136 43 228 105 106 69 125 12 50 198 126 216 117
-+74 175 112 45 164 76 69 146 101 9 188 58 94 75 143 218 32 197 179 199 89 31 245
-+123 71 40 135 54 33 170 83 34 117 100 62 171 30 51 145 143 244 160 4 164 86 158
-+105 91 182 66 27 163 118 52 118 47 79 199 84 233 134 128 105 101 19 25 17 84 7
-+21 187 90 240 99 99 104 154 2 249 215 154 18 47 63 149 225 238 179 178 72 3 191
-+182 82 66 11 113 18 57 152 108 215 159 57 147 58 115 164 91 208 205 86 148 16
-+132 192 145 138 194 60 9 198 147 53 65 64 96 242 14 222 119 241 46 116 132 197
-+184 238 189 26 200 62 176 80 151 140 109 183 24 44 191 172 234 107 21 192 140
-+99 94 65 54 7 42 24 49 230 20 229 73 212 45 169 115 180 141 56 200 41 87 121
-+161 219 231 214 207 1 19 20 219 236 12 55 237 237 211 72 13 28 141 72 239 152
-+82 87 100 72 8 241 41 77 32 202 229 47 84 238 184 228 100 67 210 130 46 111 93
-+97 189 31 250 162 171 35 90 4 138 199 99 120 193 113 244 181 93 123 76 90 235
-+49 251 109 188 63 144 186 138 184 223 61 208 215 175 107 6 53 81 114 207 237
-+221 161 224 18 73 202 208 210 125 248 11 98 131 250 167 221 146 85 211 88 63
-+139 136 27 189 5 111 103 186 148 21 171 51 140 104 133 165 49 225 233 129 78 5
-+106 64 86 153 55 232 187 111 77 58 89 36 32 223 66 6 74 170 62 197 169 110 130
-+41 61 234 102 234 92 145 133 155 201 14 243 208 200 36 48 21 166 1 40 109 178
-+226 185 196 206 43 2 244 165 54 23 81 124 44 196 211 93 102 239 131 245 128 110
-+151 130 20 224 34 112 50 203 176 64 112 40 114 217 74 180 151 145 159 31 19 251
-+130 25 22 134 107 16 142 29 104 128 126 190 230 15 190 225 217 90 230 10 140
-+114 222 124 39 146 111 217 ^
-+510 0 147 46 24 216 95 35 75 115 73 208 208 36 113 13 185 171 113 95 8 71 31 81
-+204 34 198 144 164 84 67 228 93 11 106 129 76 172 225 66 171 195 172 143 224 36
-+23 167 201 7 104 214 207 151 138 20 50 26 131 218 37 162 161 194 142 14 215 65
-+141 47 144 191 88 151 220 97 185 198 117 160 75 205 173 192 118 45 229 68 86 64
-+174 230 16 138 192 227 126 213 232 95 180 229 150 163 199 92 235 212 120 124 17
-+105 9 101 179 109 156 170 83 201 234 100 149 215 147 218 182 62 177 30 133 133
-+160 164 248 240 9 183 2 244 74 175 25 164 166 163 109 11 16 48 111 8 216 204
-+116 40 25 82 89 9 191 6 74 85 179 199 2 154 247 210 115 155 50 108 208 118 209
-+148 103 176 55 58 175 115 10 131 73 118 127 71 203 4 69 116 212 202 201 171 23
-+249 43 142 22 219 149 133 70 83 29 76 67 201 89 181 114 125 156 80 2 217 70 91
-+33 160 246 71 121 162 169 198 207 6 219 239 214 35 247 38 192 55 222 94 150 81
-+122 211 63 226 178 142 104 42 30 51 56 25 246 243 44 27 251 212 30 24 52 195
-+239 124 189 28 109 183 174 167 193 3 20 222 184 231 65 32 220 179 27 79 35 165
-+196 57 137 217 152 168 168 78 232 13 103 94 232 177 22 129 68 168 141 74 148 21
-+80 174 140 189 173 28 218 10 158 77 202 119 75 123 77 38 200 59 52 86 154 20
-+214 180 147 54 28 46 106 39 249 188 61 57 55 140 17 15 163 136 15 100 40 115
-+182 54 173 200 122 129 240 72 6 156 162 79 117 242 96 210 123 159 134 100 212
-+38 28 136 187 4 159 197 177 112 210 33 78 150 190 203 176 227 235 40 197 5 189
-+91 205 64 92 153 135 220 206 31 163 27 169 116 130 106 66 253 18 53 61 229 213
-+5 99 10 221 154 83 37 80 65 59 224 9 19 102 209 3 184 141 219 67 56 170 165 24
-+134 18 135 157 110 131 245 41 227 153 217 62 87 203 149 223 151 48 193 85 116
-+122 102 236 7 14 133 242 241 129 158 249 125 238 157 137 135 75 33 250 73 36 50
-+171 31 253 127 153 45 139 222 121 154 165 114 215 237 45 166 226 186 146 188 53
-+53 225 148 248 118 ^
-+533 0 87 145 157 250 181 227 177 51 224 63 108 97 174 194 24 162 250 152 132
-+182 80 33 189 84 60 83 118 37 216 235 94 60 251 154 47 48 110 120 238 208 229
-+121 43 218 90 91 64 110 12 40 193 111 211 117 64 170 107 35 164 76 54 141 101 4
-+183 53 79 60 143 213 32 187 169 194 84 31 245 123 66 25 135 39 23 160 78 29 102
-+95 62 166 20 46 135 128 244 150 246 154 76 143 105 91 172 51 27 158 103 37 108
-+37 79 199 84 228 119 128 95 91 4 15 17 69 2 11 187 80 230 94 89 89 149 244 239
-+210 144 18 42 48 139 215 233 179 163 252 67 255 181 167 82 56 253 98 8 42 137
-+103 205 144 47 137 43 110 149 76 203 200 86 143 16 127 182 140 128 184 55 251
-+183 142 43 50 54 81 232 9 212 119 236 36 106 122 182 169 223 179 26 185 57 166
-+80 141 130 99 178 24 44 191 167 219 92 6 187 140 99 89 60 54 249 42 19 44 220 5
-+214 63 197 30 164 105 180 136 41 195 26 77 116 151 219 231 204 202 1 9 15 214
-+231 7 40 222 237 206 57 255 13 131 72 224 152 72 87 85 62 255 241 36 77 27 187
-+229 32 79 228 179 223 90 62 195 115 41 106 93 87 174 26 245 152 161 20 75 4 123
-+184 84 120 178 113 234 181 78 118 66 85 230 34 251 94 178 53 139 186 138 184
-+223 61 193 200 175 107 6 38 81 114 207 227 206 146 219 3 73 197 198 200 115 238
-+11 98 116 240 152 221 146 70 201 88 58 139 126 12 189 252 96 93 176 138 16 156
-+51 135 99 118 155 49 220 233 119 68 96 64 81 143 45 222 177 111 62 58 79 31 17
-+218 61 253 69 170 47 197 169 105 120 41 46 224 92 234 92 145 128 155 186 256
-+243 208 200 26 48 21 156 248 40 104 178 221 175 196 196 28 249 239 150 49 23 71
-+114 39 191 196 88 87 234 121 240 123 95 151 130 10 214 34 102 35 193 171 49 112
-+35 104 207 59 170 136 130 159 16 19 241 125 10 17 129 97 6 127 14 104 118 126
-+180 225 5 185 225 202 90 230 5 125 99 207 119 39 131 101 93 147 43 21 216 86 35
-+75 112 64 199 202 30 104 10 185 165 107 95 2 71 25 75 201 28 189 144 155 78 58
-+228 90 2 100 120 70 172 219 63 168 192 169 134 215 36 17 158 192 1 98 205 137 ^
-+522 1 139 130 12 42 22 131 206 33 162 161 186 142 14 211 57 141 39 132 187 80
-+143 216 85 173 198 109 148 246 67 197 173 192 106 37 217 64 82 56 166 218 4 126
-+184 227 114 213 228 91 172 221 150 155 187 84 231 204 116 124 5 101 5 97 175
-+109 144 158 79 201 222 92 149 215 143 214 170 50 165 22 133 121 156 160 248 236
-+9 183 248 240 62 171 21 156 162 163 101 7 12 40 107 8 208 204 112 36 17 70 89
-+255 183 252 70 85 167 195 256 154 243 210 115 147 46 108 204 114 209 140 103
-+176 47 50 163 107 10 123 69 110 123 67 195 69 108 208 202 197 171 19 241 39 130
-+14 215 145 129 70 83 29 72 67 193 85 169 110 121 152 72 2 205 58 83 33 160 246
-+63 109 150 161 190 195 2 207 231 206 31 247 38 188 55 222 86 146 69 114 211 55
-+226 174 134 100 30 18 47 48 25 242 235 36 19 243 212 30 12 44 195 254 239 120
-+177 28 97 179 162 167 189 253 8 214 172 223 65 20 220 171 23 71 27 161 188 57
-+137 209 144 156 164 78 224 5 99 90 232 177 22 129 68 168 129 74 136 17 68 174
-+132 185 165 20 218 256 158 73 198 111 63 111 65 26 188 59 52 74 142 20 214 168
-+135 42 24 46 106 31 249 176 53 53 51 136 13 15 151 136 11 100 28 103 182 50 161
-+192 110 125 240 60 256 156 158 75 113 234 96 198 115 151 134 96 200 30 16 132
-+183 250 155 185 169 108 206 29 74 138 190 191 172 219 235 32 189 255 181 79 205
-+52 80 145 131 208 206 27 159 15 157 104 122 94 66 253 6 41 49 225 201 5 95 2
-+209 146 71 29 76 53 55 224 1 11 102 201 3 180 137 211 59 56 162 165 16 130 10
-+127 157 98 119 241 37 215 149 217 58 79 203 137 215 147 44 193 81 116 122 90
-+236 7 10 125 242 233 121 154 245 125 238 145 133 123 71 25 246 65 24 50 159 19
-+245 127 153 45 131 210 121 150 157 102 207 229 33 166 214 174 138 188 53 49 221
-+148 240 64 86 144 154 249 178 226 176 49 223 63 105 97 173 194 21 160 250 151
-+132 181 77 32 187 82 58 81 118 37 213 234 94 60 250 153 47 46 110 119 237 207
-+227 118 43 216 87 88 63 107 12 38 192 108 210 117 62 169 106 33 164 76 51 211 ^
-+540 0 101 1 180 50 70 51 143 210 32 181 163 191 81 31 245 123 63 16 135 30 17
-+154 75 26 93 92 62 163 14 43 129 119 244 144 240 148 70 134 105 91 166 42 27
-+155 94 28 102 31 79 199 84 225 110 128 89 85 255 9 17 60 259 5 187 74 224 91 83
-+80 146 238 233 207 138 18 39 39 133 209 230 179 154 252 64 255 175 158 82 50
-+247 89 2 33 128 100 199 135 41 131 34 107 140 67 200 197 86 140 16 124 176 137
-+122 178 52 245 174 139 37 41 48 72 226 6 206 119 233 30 100 116 173 160 214 173
-+26 176 54 160 80 135 124 93 175 24 44 191 164 210 83 257 184 140 99 86 57 54
-+243 42 16 41 214 256 205 57 188 21 161 99 180 133 32 192 17 71 113 145 219 231
-+198 199 1 3 12 211 228 4 31 213 237 203 48 249 4 125 72 215 152 66 87 76 56 252
-+241 33 77 24 178 229 23 76 222 176 220 84 59 186 106 38 103 93 81 165 23 242
-+146 155 11 66 4 114 175 75 120 169 113 228 181 69 115 60 82 227 25 251 85 172
-+47 136 186 138 184 223 61 184 191 175 107 6 29 81 114 207 221 197 137 216 254
-+73 194 192 194 109 232 11 98 107 234 143 221 146 61 195 88 55 139 120 3 189 249
-+87 87 170 132 13 147 51 132 96 109 149 49 217 233 113 62 257 90 64 78 137 39
-+216 171 111 53 58 73 28 8 215 58 250 66 170 38 197 169 102 114 41 37 218 86 234
-+92 145 125 155 177 250 243 208 200 20 48 21 150 245 40 101 178 218 169 196 190
-+19 246 236 141 46 23 65 108 36 188 187 85 78 231 115 237 120 86 151 130 4 208
-+34 96 26 187 168 40 112 32 98 201 50 164 127 121 159 7 19 235 122 1 14 126 91
-+118 5 104 112 126 174 222 259 182 225 193 90 230 2 116 90 198 116 39 122 95 90
-+147 40 18 216 77 35 75 109 55 190 196 24 95 7 185 159 101 95 256 71 19 69 198
-+22 180 144 146 72 49 228 87 253 94 111 64 172 213 60 165 189 166 125 206 36 11
-+149 183 255 92 196 201 133 126 8 38 20 131 200 31 162 161 182 142 14 209 53 141
-+35 126 185 76 139 214 79 167 198 105 142 242 63 193 173 192 100 33 211 62 80 52
-+162 212 258 120 180 227 108 213 226 89 168 217 150 151 181 80 229 200 114 124
-+259 99 3 95 173 109 138 152 77 201 129 ^
-+555 0 84 149 215 139 210 158 38 153 14 133 109 152 156 248 232 9 183 240 236 50
-+167 17 148 158 163 93 3 8 32 103 8 200 204 108 32 9 58 89 247 175 244 66 85 155
-+191 256 154 239 210 115 139 42 108 200 110 209 132 103 176 39 42 151 99 10 115
-+65 102 119 63 187 258 69 100 204 202 193 171 15 233 35 118 6 211 141 125 70 83
-+29 68 67 185 81 157 106 117 148 64 2 193 46 75 33 160 246 55 97 138 153 182 183
-+260 195 223 198 27 247 38 184 55 222 78 142 57 106 211 47 226 170 126 96 18 6
-+43 40 25 238 227 28 11 235 212 30 36 195 254 239 116 165 28 85 175 150 167 185
-+249 258 206 160 215 65 8 220 163 19 63 19 157 180 57 137 201 136 144 160 78 216
-+259 95 86 232 177 22 129 68 168 117 74 124 13 56 174 124 181 157 12 218 248 158
-+69 194 103 51 99 53 14 176 59 52 62 130 20 214 156 123 30 20 46 106 23 249 164
-+45 49 47 132 9 15 139 136 7 100 16 91 182 46 149 184 98 121 240 48 252 156 154
-+71 109 226 96 186 107 143 134 92 188 22 4 128 179 242 151 173 161 104 202 25 70
-+126 190 179 168 211 235 24 181 251 173 67 205 40 68 137 127 196 206 23 155 3
-+145 92 114 82 66 253 256 29 37 221 189 5 91 256 197 138 59 21 72 41 51 224 255
-+3 102 193 3 176 133 203 51 56 154 165 8 126 2 119 157 86 107 237 33 203 145 217
-+54 71 203 125 207 143 40 193 77 116 122 78 236 7 6 117 242 225 113 150 241 125
-+238 133 129 111 67 17 242 57 12 50 147 7 237 127 153 45 123 198 121 146 149 90
-+199 221 21 166 202 162 130 188 53 45 217 148 232 52 82 140 142 245 166 222 172
-+41 219 63 93 97 169 194 9 152 250 147 132 177 65 28 179 74 50 73 118 37 201 230
-+94 60 246 149 47 38 110 115 233 203 219 106 43 208 75 76 59 95 12 30 188 96 206
-+117 54 165 102 25 164 76 39 136 101 261 178 48 64 45 143 208 32 177 159 189 79
-+31 245 123 61 10 135 24 13 150 73 24 87 90 62 161 10 41 125 113 244 140 236 144
-+66 128 105 91 162 36 27 153 88 22 98 27 79 199 84 223 104 128 85 81 251 5 17 54
-+259 1 187 70 220 89 79 74 144 234 229 205 134 18 37 33 129 205 228 179 148 252
-+62 255 171 152 82 46 243 83 260 27 122 98 195 129 37 127 28 105 134 207 ^
-+545 1 196 193 86 136 16 120 168 133 114 170 48 237 162 135 29 29 40 60 218 2
-+198 119 229 22 92 108 161 148 202 165 26 164 50 152 80 127 116 85 171 24 44 191
-+160 198 71 249 180 140 99 82 53 54 235 42 12 37 206 248 193 49 176 9 157 91 180
-+129 20 188 5 63 109 137 219 231 190 195 1 259 8 207 224 19 201 237 199 36 241
-+256 117 72 203 152 58 87 64 48 248 241 29 77 20 166 229 11 72 214 172 216 76 55
-+174 94 34 99 93 73 153 19 238 138 147 263 54 4 102 163 63 120 157 113 220 181
-+57 111 52 78 223 13 251 73 164 39 132 186 138 184 223 61 172 179 175 107 6 17
-+81 114 207 213 185 125 212 246 73 190 184 186 101 224 11 98 95 226 131 221 146
-+49 187 88 51 139 112 255 189 245 75 79 162 124 9 135 51 128 92 97 141 49 213
-+233 105 54 257 82 64 74 129 31 208 163 111 41 58 65 24 260 211 54 246 62 170 26
-+197 169 98 106 41 25 210 78 234 92 145 121 155 165 242 243 208 200 12 48 21 142
-+241 40 97 178 214 161 196 182 7 242 232 129 42 23 57 100 32 184 175 81 66 227
-+107 233 116 74 151 130 260 200 34 88 14 179 164 28 112 28 90 193 38 156 115 109
-+159 259 19 227 118 253 10 122 83 256 106 257 104 104 126 166 218 255 178 225
-+181 90 230 262 104 78 186 112 39 110 87 86 147 36 14 216 65 35 75 105 43 178
-+188 16 83 3 185 151 93 95 252 71 11 61 194 14 168 144 134 64 37 228 83 245 86
-+99 56 172 205 56 161 185 162 113 194 36 3 137 171 251 84 184 197 121 118 30 16
-+131 188 27 162 161 174 142 14 205 45 141 27 114 181 68 131 210 67 155 198 97
-+130 234 55 185 173 192 88 25 199 58 76 44 154 200 250 108 172 227 96 213 222 85
-+160 209 150 143 169 72 225 192 110 124 251 95 263 91 169 109 126 140 73 201 204
-+80 149 215 137 208 152 32 147 10 133 103 150 154 248 230 9 183 236 234 44 165
-+15 144 156 163 89 1 6 28 101 8 196 204 106 30 5 52 89 243 171 240 64 85 149 189
-+256 154 237 210 115 135 40 108 198 108 209 128 103 176 35 38 145 95 10 111 63
-+98 117 61 183 258 69 96 202 202 191 171 13 229 33 112 2 209 139 123 70 83 29 66
-+67 181 79 151 104 115 146 60 2 187 40 71 33 160 246 51 91 132 178 ^
-+563 1 174 171 260 183 215 190 23 247 38 180 55 222 70 138 45 98 211 39 226 166
-+118 92 6 260 39 32 25 234 219 20 3 227 212 30 254 28 195 254 239 112 153 28 73
-+171 138 167 181 245 250 198 148 207 65 262 220 155 15 55 11 153 172 57 137 193
-+128 132 156 78 208 255 91 82 232 177 22 129 68 168 105 74 112 9 44 174 116 177
-+149 4 218 240 158 65 190 95 39 87 41 2 164 59 52 50 118 20 214 144 111 18 16 46
-+106 15 249 152 37 45 43 128 5 15 127 136 3 100 4 79 182 42 137 176 86 117 240
-+36 248 156 150 67 105 218 96 174 99 135 134 88 176 14 258 124 175 234 147 161
-+153 100 198 21 66 114 190 167 164 203 235 16 173 247 165 55 205 28 56 129 123
-+184 206 19 151 257 133 80 106 70 66 253 248 17 25 217 177 5 87 252 185 130 47
-+13 68 29 47 224 251 261 102 185 3 172 129 195 43 56 146 165 122 260 111 157 74
-+95 233 29 191 141 217 50 63 203 113 199 139 36 193 73 116 122 66 236 7 2 109
-+242 217 105 146 237 125 238 121 125 99 63 9 238 49 50 135 261 229 127 153 45
-+115 186 121 142 141 78 191 213 9 166 190 150 122 188 53 41 213 148 224 40 78
-+136 130 241 154 218 168 33 215 63 81 97 165 194 263 144 250 143 132 173 53 24
-+171 66 42 65 118 37 189 226 94 60 242 145 47 30 110 111 229 199 211 94 43 200
-+63 64 55 83 12 22 184 84 202 117 46 161 98 17 164 76 27 132 101 261 174 44 52
-+33 143 204 32 169 151 185 75 31 245 123 57 264 135 12 5 142 69 20 75 86 62 157
-+2 37 117 101 244 132 228 136 58 116 105 91 154 24 27 149 76 10 90 19 79 199 84
-+219 92 128 77 73 243 263 17 42 259 259 187 62 212 85 71 62 140 226 221 201 126
-+18 33 21 121 197 224 179 136 252 58 255 163 140 82 38 235 71 256 15 110 94 187
-+117 29 119 16 101 122 49 194 191 86 134 16 118 164 131 110 166 46 233 156 133
-+25 23 36 54 214 194 119 227 18 88 104 155 142 196 161 26 158 48 148 80 123 112
-+81 169 24 44 191 158 192 65 245 178 140 99 80 51 54 231 42 10 35 202 244 187 45
-+170 3 155 87 180 127 14 186 265 59 107 133 219 231 186 193 1 257 6 205 222 264
-+13 195 237 197 30 237 252 113 72 197 152 54 87 58 44 246 241 27 77 18 160 229 5
-+70 210 170 214 72 53 168 88 32 97 93 69 261 ^
-+563 1 15 234 130 139 255 42 4 90 151 51 120 145 113 212 181 45 107 44 74 219 1
-+251 61 156 31 128 186 138 184 223 61 160 167 175 107 6 5 81 114 207 205 173 113
-+208 238 73 186 176 178 93 216 11 98 83 218 119 221 146 37 179 88 47 139 104 247
-+189 241 63 71 154 116 5 123 51 124 88 85 133 49 209 233 97 46 257 74 64 70 121
-+23 200 155 111 29 58 57 20 252 207 50 242 58 170 14 197 169 94 98 41 13 202 70
-+234 92 145 117 155 153 234 243 208 200 4 48 21 134 237 40 93 178 210 153 196
-+174 263 238 228 117 38 23 49 92 28 180 163 77 54 223 99 229 112 62 151 130 256
-+192 34 80 2 171 160 16 112 24 82 185 26 148 103 97 159 251 19 219 114 245 6 118
-+75 252 94 249 104 96 126 158 214 251 174 225 169 90 230 262 92 66 174 108 39 98
-+79 82 147 32 10 216 53 35 75 101 31 166 180 8 71 267 185 143 85 95 248 71 3 53
-+190 6 156 144 122 56 25 228 79 237 78 87 48 172 197 52 157 181 158 101 182 36
-+263 125 159 247 76 172 193 109 110 260 22 12 131 176 23 162 161 166 142 14 201
-+37 141 19 102 177 60 123 206 55 143 198 89 118 226 47 177 173 192 76 17 187 54
-+72 36 146 188 242 96 164 227 84 213 218 81 152 201 150 135 157 64 221 184 106
-+124 243 91 263 87 165 109 114 128 69 201 192 72 149 215 133 204 140 20 135 2
-+133 91 146 150 248 226 9 183 228 230 32 161 11 136 152 163 81 265 2 20 97 8 188
-+204 102 26 265 40 89 235 163 232 60 85 137 185 256 154 233 210 115 127 36 108
-+194 104 209 120 103 176 27 30 133 87 10 103 59 90 113 57 175 258 69 88 198 202
-+187 171 9 221 29 100 262 205 135 119 70 83 29 62 67 173 75 139 100 111 142 52 2
-+175 28 63 33 160 246 43 79 120 141 170 165 260 177 211 186 21 247 38 178 55 222
-+66 136 39 94 211 35 226 164 114 90 256 37 28 25 232 215 16 267 223 212 30 250
-+24 195 254 239 110 147 28 67 169 132 167 179 243 246 194 142 203 65 258 220 151
-+13 51 7 151 168 57 137 189 124 126 154 78 204 253 89 80 232 177 22 129 68 168
-+99 74 106 7 38 174 112 175 145 218 236 158 63 188 91 33 81 35 264 158 59 52 44
-+112 20 214 138 105 12 14 46 106 11 249 146 33 43 41 126 3 15 121 136 1 100 266
-+73 182 40 131 172 80 115 240 30 246 186 ^
-+573 0 146 63 101 210 96 162 91 127 134 84 164 6 250 120 171 226 143 149 145 96
-+194 17 62 102 190 155 160 195 235 8 165 243 157 43 205 16 44 121 119 172 206 15
-+147 249 121 68 98 58 66 253 240 5 13 213 165 5 83 248 173 122 35 5 64 17 43 224
-+247 257 102 177 3 168 125 187 35 56 138 165 262 118 256 103 157 62 83 229 25
-+179 137 217 46 55 203 101 191 135 32 193 69 116 122 54 236 7 268 101 242 209 97
-+142 233 125 238 109 121 87 59 1 234 41 258 50 123 253 221 127 153 45 107 174
-+121 138 133 66 183 205 267 166 178 138 114 188 53 37 209 148 216 28 74 132 118
-+237 142 214 164 25 211 63 69 97 161 194 255 136 250 139 132 169 41 20 163 58 34
-+57 118 37 177 222 94 60 238 141 47 22 110 107 225 195 203 82 43 192 51 52 51 71
-+12 14 180 72 198 117 38 157 94 9 164 76 15 128 101 261 170 40 40 21 143 200 32
-+161 143 181 71 31 245 123 53 256 135 267 134 65 16 63 82 62 153 264 33 109 89
-+244 124 220 128 50 104 105 91 146 12 27 145 64 268 82 11 79 199 84 215 80 128
-+69 65 235 259 17 30 259 255 187 54 204 81 63 50 136 218 213 197 118 18 29 9 113
-+189 220 179 124 252 54 255 155 128 82 30 227 59 252 3 98 90 179 105 21 111 4 97
-+110 37 190 187 86 130 16 114 156 127 102 158 42 225 144 129 17 11 28 42 206 266
-+186 119 223 10 80 96 143 130 184 153 26 146 44 140 80 115 104 73 165 24 44 191
-+154 180 53 237 174 140 99 76 47 54 223 42 6 31 194 236 175 37 158 261 151 79
-+180 123 2 182 257 51 103 125 219 231 178 189 1 253 2 201 218 264 1 183 237 193
-+18 229 244 105 72 185 152 46 87 46 36 242 241 23 77 14 148 229 263 66 202 166
-+210 64 49 156 76 28 93 93 61 135 13 232 126 135 251 36 4 84 145 45 120 139 113
-+208 181 39 105 40 72 217 265 251 55 152 27 126 186 138 184 223 61 154 161 175
-+107 6 269 81 114 207 201 167 107 206 234 73 184 172 174 89 212 11 98 77 214 113
-+221 146 31 175 88 45 139 100 243 189 239 57 67 150 112 3 117 51 122 86 79 129
-+49 207 233 93 42 257 70 64 68 117 19 196 151 111 23 58 53 18 248 205 48 240 56
-+170 8 197 169 92 94 41 7 198 66 234 92 145 115 155 147 230 243 208 200 48 21
-+130 235 40 91 178 208 149 196 170 259 236 226 111 36 23 45 88 26 178 157 207 ^
-+566 1 42 219 91 225 108 50 151 130 252 184 34 72 262 163 156 4 112 20 74 177 14
-+140 91 85 159 243 19 211 110 237 2 114 67 248 82 241 104 88 126 150 210 247 170
-+225 157 90 230 262 80 54 162 104 39 86 71 78 147 28 6 216 41 35 75 97 19 154
-+172 59 267 185 135 77 95 244 71 267 45 186 270 144 144 110 48 13 228 75 229 70
-+75 40 172 189 48 153 177 154 89 170 36 259 113 147 243 68 160 189 97 102 256 14
-+8 131 164 19 162 161 158 142 14 197 29 141 11 90 173 52 115 202 43 131 198 81
-+106 218 39 169 173 192 64 9 175 50 68 28 138 176 234 84 156 227 72 213 214 77
-+144 193 150 127 145 56 217 176 102 124 235 87 263 83 161 109 102 116 65 201 180
-+64 149 215 129 200 128 8 123 266 133 79 142 146 248 222 9 183 220 226 20 157 7
-+128 148 163 73 265 270 12 93 8 180 204 98 22 261 28 89 227 155 224 56 85 125
-+181 256 154 229 210 115 119 32 108 190 100 209 112 103 176 19 22 121 79 10 95
-+55 82 109 53 167 258 69 80 194 202 183 171 5 213 25 88 258 201 131 115 70 83 29
-+58 67 165 71 127 96 107 138 44 2 163 16 55 33 160 246 35 67 108 133 162 153 260
-+165 203 178 17 247 38 174 55 222 58 132 27 86 211 27 226 160 106 86 260 248 33
-+20 25 228 207 8 263 215 212 30 242 16 195 254 239 106 135 28 55 165 120 167 175
-+239 238 186 130 195 65 250 220 143 9 43 271 147 160 57 137 181 116 114 150 78
-+196 249 85 76 232 177 22 129 68 168 87 74 94 3 26 174 104 171 137 264 218 228
-+158 59 184 83 21 69 23 256 146 59 52 32 100 20 214 126 93 10 46 106 3 249 134
-+25 39 37 122 271 15 109 136 269 100 258 61 182 36 119 164 68 111 240 18 242 156
-+144 61 99 206 96 156 87 123 134 82 158 2 246 118 169 222 141 143 141 94 192 15
-+60 96 190 149 158 191 235 4 161 241 153 37 205 10 38 117 117 166 206 13 145 245
-+115 62 94 52 66 253 236 271 7 211 159 5 81 246 167 118 29 1 62 11 41 224 245
-+255 102 173 3 166 123 183 31 56 134 165 260 116 254 99 157 56 77 227 23 173 135
-+217 44 51 203 95 187 133 30 193 67 116 122 48 236 7 268 97 242 205 93 140 231
-+125 238 103 119 81 57 269 232 37 254 50 117 249 217 127 153 45 103 168 121 136
-+129 60 179 201 263 166 172 132 110 188 53 35 207 148 212 262 ^
-+589 0 70 128 106 233 130 210 160 17 207 63 57 97 157 194 247 128 250 135 132
-+165 29 16 155 50 26 49 118 37 165 218 94 60 234 137 47 14 110 103 221 191 195
-+70 43 184 39 40 47 59 12 6 176 60 194 117 30 153 90 1 164 76 3 124 101 261 166
-+36 28 9 143 196 32 153 135 177 67 31 245 123 49 248 135 262 263 126 61 12 51 78
-+62 149 260 29 101 77 244 116 212 120 42 92 105 91 138 27 141 52 260 74 3 79 199
-+84 211 68 128 61 57 227 255 17 18 259 251 187 46 196 77 55 38 132 210 205 193
-+110 18 25 271 105 181 216 179 112 252 50 255 147 116 82 22 219 47 248 265 86 86
-+171 93 13 103 266 93 98 25 186 183 86 126 16 110 148 123 94 150 38 217 132 125
-+9 273 20 30 198 266 178 119 219 2 72 88 131 118 172 145 26 134 40 132 80 107 96
-+65 161 24 44 191 150 168 41 229 170 140 99 72 43 54 215 42 2 27 186 228 163 29
-+146 253 147 71 180 119 264 178 249 43 99 117 219 231 170 185 1 249 272 197 214
-+264 263 171 237 189 6 221 236 97 72 173 152 38 87 34 28 238 241 19 77 10 136
-+229 255 62 194 162 206 56 45 144 64 24 89 93 53 123 9 228 118 127 243 24 4 72
-+133 33 120 127 113 200 181 27 101 32 68 213 257 251 43 144 19 122 186 138 184
-+223 61 142 149 175 107 6 261 81 114 207 193 155 95 202 226 73 180 164 166 81
-+204 11 98 65 206 101 221 146 19 167 88 41 139 92 235 189 235 45 59 142 104 273
-+105 51 118 82 67 121 49 203 233 85 34 257 62 64 64 109 11 188 143 111 11 58 45
-+14 240 201 44 236 52 170 270 197 169 88 86 41 269 190 58 234 92 145 111 155 135
-+222 243 208 200 266 48 21 122 231 40 87 178 204 141 196 162 251 232 222 99 32
-+23 37 80 22 174 145 71 36 217 87 223 106 44 151 130 250 180 34 68 258 159 154
-+272 112 18 70 173 8 136 85 79 159 239 19 207 108 233 112 63 246 76 237 104 84
-+126 146 208 245 168 225 151 90 230 262 74 48 156 102 39 80 67 76 147 26 4 216
-+35 35 75 95 13 148 168 270 53 267 185 131 73 95 242 71 265 41 184 268 138 144
-+104 44 7 228 73 225 66 69 36 172 185 46 151 175 152 83 164 36 257 107 141 241
-+64 154 187 91 98 254 10 6 131 158 17 162 161 154 142 14 195 25 141 7 84 171 48
-+111 200 37 125 198 77 100 214 35 165 173 192 58 5 169 48 66 24 134 170 230 78
-+152 227 66 213 212 75 140 189 150 123 139 52 215 172 124 ^
-+584 0 124 227 83 263 79 157 109 90 104 61 201 168 56 149 215 125 196 116 272
-+111 262 133 67 138 142 248 218 9 183 212 222 8 153 3 120 144 163 65 265 270 4
-+89 8 172 204 94 18 257 16 89 219 147 216 52 85 113 177 256 154 225 210 115 111
-+28 108 186 96 209 104 103 176 11 14 109 71 10 87 51 74 105 49 159 258 69 72 190
-+202 179 171 1 205 21 76 254 197 127 111 70 83 29 54 67 157 67 115 92 103 134 36
-+2 151 4 47 33 160 246 27 55 96 125 154 141 260 153 195 170 13 247 38 170 55 222
-+50 128 15 78 211 19 226 156 98 82 252 240 29 12 25 224 199 259 207 212 30 234 8
-+195 254 239 102 123 28 43 161 108 167 171 235 230 178 118 187 65 242 220 135 5
-+35 267 143 152 57 137 173 108 102 146 78 188 245 81 72 232 177 22 129 68 168 75
-+74 82 275 14 174 96 167 129 260 218 220 158 55 180 75 9 57 11 248 134 59 52 20
-+88 20 214 114 81 264 6 46 106 271 249 122 17 35 33 118 271 15 97 136 269 100
-+250 49 182 32 107 156 56 107 240 6 238 156 140 57 95 198 96 144 79 115 134 78
-+146 270 238 114 165 214 137 131 133 90 188 11 56 84 190 137 154 183 235 272 153
-+237 145 25 205 274 26 109 113 154 206 9 141 237 103 50 86 40 66 253 228 263 271
-+207 147 5 77 242 155 110 17 269 58 275 37 224 241 251 102 165 3 162 119 175 23
-+56 126 165 256 112 250 91 157 44 65 223 19 161 131 217 40 43 203 83 179 129 26
-+193 63 116 122 36 236 7 268 89 242 197 85 136 227 125 238 91 115 69 53 265 228
-+29 246 50 105 241 209 127 153 45 95 156 121 132 121 48 171 193 255 166 160 120
-+102 188 53 31 203 148 204 10 68 126 100 231 124 208 158 13 205 63 51 97 155 194
-+243 124 250 133 132 163 23 14 151 46 22 45 118 37 159 216 94 60 232 135 47 10
-+110 101 219 189 191 64 43 180 33 34 45 53 12 2 174 54 192 117 26 151 88 273 164
-+76 273 122 101 261 164 34 22 3 143 194 32 149 131 175 65 31 245 123 47 244 135
-+258 261 122 59 10 45 76 62 147 258 27 97 71 244 112 208 116 38 86 105 91 134
-+270 27 139 46 256 70 275 79 199 84 209 62 128 57 53 223 253 17 12 259 249 187
-+42 192 75 51 32 130 206 201 191 106 18 23 267 101 177 214 179 106 252 48 255
-+143 110 82 18 215 41 246 261 80 84 167 87 9 99 262 91 92 19 184 181 86 124 16
-+108 144 121 90 146 36 213 126 123 5 269 230 ^
-+587 0 18 190 266 170 119 215 272 64 80 119 106 160 137 26 122 36 124 80 99 88
-+57 157 24 44 191 146 156 29 221 166 140 99 68 39 54 207 42 276 23 178 220 151
-+21 134 245 143 63 180 115 256 174 241 35 95 109 219 231 162 181 1 245 272 193
-+210 264 255 159 237 185 272 213 228 89 72 161 152 30 87 22 20 234 241 15 77 6
-+124 229 247 58 186 158 202 48 41 132 52 20 85 93 45 111 5 224 110 119 235 12 4
-+60 121 21 120 115 113 192 181 15 97 24 64 209 249 251 31 136 11 118 186 138 184
-+223 61 130 137 175 107 6 253 81 114 207 185 143 83 198 218 73 176 156 158 73
-+196 11 98 53 198 89 221 146 7 159 88 37 139 84 227 189 231 33 51 134 96 273 93
-+51 114 78 55 113 49 199 233 77 26 257 54 64 60 101 3 180 135 111 277 58 37 10
-+232 197 40 232 48 170 262 197 169 84 78 41 261 182 50 234 92 145 107 155 123
-+214 243 208 200 262 48 21 114 227 40 83 178 200 133 196 154 243 228 218 87 28
-+23 29 72 18 170 133 67 24 213 79 219 102 32 151 130 246 172 34 60 250 151 150
-+264 112 14 62 165 274 128 73 67 159 231 19 199 104 225 274 108 55 242 64 229
-+104 76 126 138 204 241 164 225 139 90 230 262 62 36 144 98 39 68 59 72 147 22
-+216 23 35 75 91 1 136 160 266 41 267 185 123 65 95 238 71 261 33 180 264 126
-+144 92 36 273 228 69 217 58 57 28 172 177 42 147 171 148 71 152 36 253 95 129
-+237 56 142 183 79 90 250 2 2 131 146 13 162 161 146 142 14 191 17 141 277 72
-+167 40 103 196 25 113 198 69 88 206 27 157 173 192 46 275 157 44 62 16 126 158
-+222 66 144 227 54 213 208 71 132 181 150 115 127 44 211 164 96 124 223 81 263
-+77 155 109 84 98 59 201 162 52 149 215 123 194 110 268 105 260 133 61 136 140
-+248 216 9 183 208 220 2 151 1 116 142 163 61 265 270 87 8 168 204 92 16 255 10
-+89 215 143 212 50 85 107 175 256 154 223 210 115 107 26 108 184 94 209 100 103
-+176 7 10 103 67 10 83 49 70 103 47 155 258 69 68 188 202 177 171 277 201 19 70
-+252 195 125 109 70 83 29 52 67 153 65 109 90 101 132 32 2 145 276 43 33 160 246
-+23 49 90 121 150 135 260 147 191 166 11 247 38 168 55 222 46 126 9 74 211 15
-+226 154 94 80 248 236 27 8 25 222 195 274 257 203 212 30 230 4 195 254 239 100
-+117 28 37 159 102 167 169 233 226 174 112 183 65 238 220 131 3 31 270 ^
-+609 1 140 146 57 137 167 102 93 143 78 182 242 78 69 232 177 22 129 68 168 66
-+74 73 275 5 174 90 164 123 257 218 214 158 52 177 69 48 2 242 125 59 52 11 79
-+20 214 105 72 258 3 46 106 268 249 113 11 32 30 115 271 15 88 136 269 100 244
-+40 182 29 98 150 47 104 240 276 235 156 137 54 92 192 96 135 73 109 134 75 137
-+267 232 111 162 208 134 122 127 87 185 8 53 75 190 128 151 177 235 269 147 234
-+139 16 205 268 17 103 110 145 206 6 138 231 94 41 80 31 66 253 222 257 265 204
-+138 5 74 239 146 104 8 266 55 269 34 224 238 248 102 159 3 159 116 169 17 56
-+120 165 253 109 247 85 157 35 56 220 16 152 128 217 37 37 203 74 173 126 23 193
-+60 116 122 27 236 7 268 83 242 191 79 133 224 125 238 82 112 60 50 262 225 23
-+240 50 96 235 203 127 153 45 89 147 121 129 115 39 165 187 249 166 151 111 96
-+188 53 28 200 148 198 1 65 123 91 228 115 205 155 7 202 63 42 97 152 194 237
-+118 250 130 132 160 14 11 145 40 16 39 118 37 150 213 94 60 229 132 47 4 110 98
-+216 186 185 55 43 174 24 25 42 44 12 275 171 45 189 117 20 148 85 270 164 76
-+267 119 101 261 161 31 13 273 143 191 32 143 125 172 62 31 245 123 44 238 135
-+252 258 116 56 7 36 73 62 144 255 24 91 62 244 106 202 110 32 77 105 91 128 264
-+27 136 37 250 64 272 79 199 84 206 53 128 51 47 217 250 17 3 259 246 187 36 186
-+72 45 23 127 200 195 188 100 18 20 261 95 171 211 179 97 252 45 255 137 101 82
-+12 209 32 243 255 71 81 161 78 3 93 256 88 83 10 181 178 86 121 16 105 138 118
-+84 140 33 207 117 120 278 263 10 15 188 266 168 119 214 271 62 78 116 103 157
-+135 26 119 35 122 80 97 86 55 156 24 44 191 145 153 26 219 165 140 99 67 38 54
-+205 42 276 22 176 218 148 19 131 243 142 61 180 114 254 173 239 33 94 107 219
-+231 160 180 1 244 272 192 209 264 253 156 237 184 270 211 226 87 72 158 152 28
-+87 19 18 233 241 14 77 5 121 229 245 57 184 157 201 46 40 129 49 19 84 93 43
-+108 4 223 108 117 233 9 4 57 118 18 120 112 113 190 181 12 96 22 63 208 247 251
-+28 134 9 117 186 138 184 223 61 127 134 175 107 6 251 81 114 207 183 140 80 197
-+216 73 175 154 156 71 194 11 98 50 196 86 221 146 4 157 88 36 139 82 225 189
-+230 30 49 132 94 273 90 51 113 77 52 111 49 198 233 75 24 257 52 64 59 99 1 178
-+133 111 275 58 35 9 230 196 39 231 47 170 216 ^
-+589 0 197 169 81 72 41 255 176 44 234 92 145 104 155 114 208 243 208 200 259 48
-+21 108 224 40 80 178 197 127 196 148 237 225 215 78 25 23 23 66 15 167 124 64
-+15 210 73 216 99 23 151 130 243 166 34 54 244 145 147 258 112 11 56 159 268 122
-+64 58 159 225 19 193 101 219 274 105 49 239 55 223 104 70 126 132 201 238 161
-+225 130 90 230 262 53 27 135 95 39 59 53 69 147 19 278 216 14 35 75 88 273 127
-+154 263 32 267 185 117 59 95 235 71 258 27 177 261 117 144 83 30 267 228 66 211
-+52 48 22 172 171 39 144 168 145 62 143 36 250 86 120 234 50 133 180 70 84 247
-+277 280 131 137 10 162 161 140 142 14 188 11 141 274 63 164 34 97 193 16 104
-+198 63 79 200 21 151 173 192 37 272 148 41 59 10 120 149 216 57 138 227 45 213
-+205 68 126 175 150 109 118 38 208 158 93 124 217 78 263 74 152 109 75 89 56 201
-+153 46 149 215 120 191 101 262 96 257 133 52 133 137 248 213 9 183 202 217 274
-+148 279 110 139 163 55 265 270 275 84 8 162 204 89 13 252 1 89 209 137 206 47
-+85 98 172 256 154 220 210 115 101 23 108 181 91 209 94 103 176 1 4 94 61 10 77
-+46 64 100 44 149 258 69 62 185 202 174 171 277 195 16 61 249 192 122 106 70 83
-+29 49 67 147 62 100 87 98 129 26 2 136 270 37 33 160 246 17 40 81 115 144 126
-+260 138 185 160 8 247 38 165 55 222 40 123 68 211 9 226 151 88 77 242 230 24 2
-+25 219 189 271 254 197 212 30 224 279 195 254 239 97 108 28 28 156 93 167 166
-+230 220 168 103 177 65 232 220 125 25 262 138 142 57 137 163 98 87 141 78 178
-+240 76 67 232 177 22 129 68 168 60 74 67 275 280 174 86 162 119 255 218 210 158
-+50 175 65 275 42 277 238 119 59 52 5 73 20 214 99 66 254 1 46 106 266 249 107 7
-+30 28 113 271 15 82 136 269 100 240 34 182 27 92 146 41 102 240 272 233 156 135
-+52 90 188 96 129 69 105 134 73 131 265 228 109 160 204 132 116 123 85 183 6 51
-+69 190 122 149 173 235 267 143 232 135 10 205 264 11 99 108 139 206 4 136 227
-+88 35 76 25 66 253 218 253 261 202 132 5 72 237 140 100 2 264 53 265 32 224 236
-+246 102 155 3 157 114 165 13 56 116 165 251 107 245 81 157 29 50 218 14 146 126
-+217 35 33 203 68 169 124 21 193 58 116 122 21 236 7 268 79 242 187 75 131 222
-+125 238 76 110 54 48 260 223 19 236 50 90 231 199 127 153 45 270 ^
-+623 1 135 121 125 107 27 157 179 241 166 139 99 88 188 53 24 196 148 190 272 61
-+119 79 224 103 201 151 282 198 63 30 97 148 194 229 110 250 126 132 156 2 7 137
-+32 8 31 118 37 138 209 94 60 225 128 47 279 110 94 212 182 177 43 43 166 12 13
-+38 32 12 271 167 33 185 117 12 144 81 266 164 76 259 115 101 261 157 27 1 265
-+143 187 32 135 117 168 58 31 245 123 40 230 135 244 254 108 52 3 24 69 62 140
-+251 20 83 50 244 98 194 102 24 65 105 91 120 256 27 132 25 242 56 268 79 199 84
-+202 41 128 43 39 209 246 17 274 259 242 187 28 178 68 37 11 123 192 187 184 92
-+18 16 253 87 163 207 179 85 252 41 255 129 89 82 4 201 20 239 247 59 77 153 66
-+278 85 248 84 71 281 177 174 86 117 16 101 130 114 76 132 29 199 105 116 274
-+255 2 3 180 266 160 119 210 267 54 70 104 91 145 127 26 107 31 114 80 89 78 47
-+152 24 44 191 141 141 14 211 161 140 99 63 34 54 197 42 276 18 168 210 136 11
-+119 235 138 53 180 110 246 169 231 25 90 99 219 231 152 176 1 240 272 188 205
-+264 245 144 237 180 262 203 218 79 72 146 152 20 87 7 10 229 241 10 77 1 109
-+229 237 53 176 153 197 38 36 117 37 15 80 93 35 96 219 100 109 225 280 4 45 106
-+6 120 100 113 182 181 92 14 59 204 239 251 16 126 1 113 186 138 184 223 61 115
-+122 175 107 6 243 81 114 207 175 128 68 193 208 73 171 146 148 63 186 11 98 38
-+188 74 221 146 275 149 88 32 139 74 217 189 226 18 41 124 86 273 78 51 109 73
-+40 103 49 194 233 67 16 257 44 64 55 91 276 170 125 111 267 58 27 5 222 192 35
-+227 43 170 252 197 169 79 68 41 251 172 40 234 92 145 102 155 108 204 243 208
-+200 257 48 21 104 222 40 78 178 195 123 196 144 233 223 213 72 23 23 19 62 13
-+165 118 62 9 208 69 214 97 17 151 130 241 162 34 50 240 141 145 254 112 9 52
-+155 264 118 58 52 159 221 19 189 99 215 274 103 45 237 49 219 104 66 126 128
-+199 236 159 225 124 90 230 262 47 21 129 93 39 53 49 67 147 17 278 216 8 35 75
-+86 269 121 150 261 26 267 185 113 55 95 233 71 256 23 175 259 111 144 77 26 263
-+228 64 207 48 42 18 172 167 37 142 166 143 56 137 36 248 80 114 232 46 127 178
-+64 80 245 275 280 131 131 8 162 161 136 142 14 186 7 141 272 57 162 30 93 191
-+10 98 198 59 73 196 17 147 173 192 31 270 142 39 57 6 116 143 212 51 134 227 39
-+213 203 66 122 171 150 105 112 34 206 154 91 124 213 76 263 72 150 109 69 83 54
-+201 147 42 149 202 ^
-+602 1 116 187 89 254 84 253 133 40 129 133 248 209 9 183 194 213 266 144 279
-+102 135 163 47 265 270 271 80 8 154 204 85 9 248 274 89 201 129 198 43 85 86
-+168 256 154 216 210 115 93 19 108 177 87 209 86 103 176 278 281 82 53 10 69 42
-+56 96 40 141 258 69 54 181 202 170 171 277 187 12 49 245 188 118 102 70 83 29
-+45 67 139 58 88 83 94 125 18 2 124 262 29 33 160 246 9 28 69 107 136 114 260
-+126 177 152 4 247 38 161 55 222 32 119 273 60 211 1 226 147 80 73 234 222 20
-+279 25 215 181 267 250 189 212 30 216 275 195 254 239 93 96 28 16 152 81 167
-+162 226 212 160 91 169 65 224 220 117 281 17 258 134 134 57 137 155 90 75 137
-+78 170 236 72 63 232 177 22 129 68 168 48 74 55 275 272 174 78 158 111 251 218
-+202 158 46 171 57 267 30 269 230 107 59 52 278 61 20 214 87 54 246 282 46 106
-+262 249 95 284 26 24 109 271 15 70 136 269 100 232 22 182 23 80 138 29 98 240
-+264 229 156 131 48 86 180 96 117 61 97 134 69 119 261 220 105 156 196 128 104
-+115 81 179 2 47 57 190 110 145 165 235 263 135 228 127 283 205 256 284 91 104
-+127 206 132 219 76 23 68 13 66 253 210 245 253 198 120 5 68 233 128 92 275 260
-+49 257 28 224 232 242 102 147 3 153 110 157 5 56 108 165 247 103 241 73 157 17
-+38 214 10 134 122 217 31 25 203 56 161 120 17 193 54 116 122 9 236 7 268 71 242
-+179 67 127 218 125 238 64 106 42 44 256 219 11 228 50 78 223 191 127 153 45 77
-+129 121 123 103 21 153 175 237 166 133 93 84 188 53 22 194 148 186 268 59 117
-+73 222 97 199 149 280 196 63 24 97 146 194 225 106 250 124 132 154 281 5 133 28
-+4 27 118 37 132 207 94 60 223 126 47 277 110 92 210 180 173 37 43 162 6 7 36 26
-+12 269 165 27 183 117 8 142 79 264 164 76 255 113 101 261 155 25 280 261 143
-+185 32 131 113 166 56 31 245 123 38 226 135 240 252 104 50 1 18 67 62 138 249
-+18 79 44 244 94 190 98 20 59 105 91 116 252 27 130 19 238 52 266 79 199 84 200
-+35 128 39 35 205 244 17 270 259 240 187 24 174 66 33 5 121 188 183 182 88 18 14
-+249 83 159 205 179 79 252 39 255 125 83 82 197 14 237 243 53 75 149 60 276 81
-+244 82 65 277 175 172 86 115 16 99 126 112 72 128 27 195 99 114 272 251 283 282
-+176 266 156 119 208 265 50 66 98 85 139 123 26 101 29 110 80 85 74 43 150 24 44
-+191 139 135 8 207 159 140 99 61 248 ^
-+609 1 54 189 42 276 14 160 202 124 3 107 227 134 45 180 106 238 165 223 17 86
-+91 219 231 144 172 1 236 272 184 201 264 237 132 237 176 254 195 210 71 72 134
-+152 12 87 282 2 225 241 6 77 284 97 229 229 49 168 149 193 30 32 105 25 11 76
-+93 27 84 283 215 92 101 217 272 4 33 94 281 120 88 113 174 181 275 88 6 55 200
-+231 251 4 118 280 109 186 138 184 223 61 103 110 175 107 6 235 81 114 207 167
-+116 56 189 200 73 167 138 140 55 178 11 98 26 180 62 221 146 267 141 88 28 139
-+66 209 189 222 6 33 116 78 273 66 51 105 69 28 95 49 190 233 59 8 257 36 64 51
-+83 272 162 117 111 259 58 19 1 214 188 31 223 39 170 244 197 169 75 60 41 243
-+164 32 234 92 145 98 155 96 196 243 208 200 253 48 21 96 218 40 74 178 191 115
-+196 136 225 219 209 60 19 23 11 54 9 161 106 58 284 204 61 210 93 5 151 130 237
-+154 34 42 232 133 141 246 112 5 44 147 256 110 46 40 159 213 19 181 95 207 274
-+99 37 233 37 211 104 58 126 120 195 232 155 225 112 90 230 262 35 9 117 89 39
-+41 41 63 147 13 278 216 283 35 75 82 261 109 142 257 14 267 185 105 47 95 229
-+71 252 15 171 255 99 144 65 18 255 228 60 199 40 30 10 172 159 33 138 162 139
-+44 125 36 244 68 102 228 38 115 174 52 72 241 271 280 131 119 4 162 161 128 142
-+14 182 286 141 268 45 158 22 85 187 285 86 198 51 61 188 9 139 173 192 19 266
-+130 35 53 285 108 131 204 39 126 227 27 213 199 62 114 163 150 97 100 26 202
-+146 87 124 205 72 263 68 146 109 57 71 50 201 135 34 149 215 114 185 83 250 78
-+251 133 34 127 131 248 207 9 183 190 211 262 142 279 98 133 163 43 265 270 269
-+78 8 150 204 83 7 246 270 89 197 125 194 41 85 80 166 256 154 214 210 115 89 17
-+108 175 85 209 82 103 176 276 279 76 49 10 65 40 52 94 38 137 258 69 50 179 202
-+168 171 277 183 10 43 243 186 116 100 70 83 29 43 67 135 56 82 81 92 123 14 2
-+118 258 25 33 160 246 5 22 63 103 132 108 260 120 173 148 2 247 38 159 55 222
-+28 117 269 56 211 284 226 145 76 71 230 218 18 277 25 213 177 265 248 185 212
-+30 212 273 195 254 239 91 90 28 10 150 75 167 160 224 208 156 85 165 65 220 220
-+113 281 13 256 132 130 57 137 151 86 69 135 78 166 234 70 61 232 177 22 129 68
-+168 42 74 49 275 268 174 74 156 107 249 218 198 158 44 169 53 263 24 265 226
-+101 59 52 274 55 20 214 81 48 242 282 46 106 260 145 ^
-+614 1 83 280 22 20 105 271 15 58 136 269 100 224 10 182 19 68 130 17 94 240 256
-+225 156 127 44 82 172 96 105 53 89 134 65 107 257 212 101 152 188 124 92 107 77
-+175 287 43 45 190 98 141 157 235 259 127 224 119 275 205 248 276 83 100 115 206
-+285 128 211 64 11 60 1 66 253 202 237 245 194 108 5 64 229 116 84 267 256 45
-+249 24 224 228 238 102 139 3 149 106 149 286 56 100 165 243 99 237 65 157 5 26
-+210 6 122 118 217 27 17 203 44 153 116 13 193 50 116 122 286 236 7 268 63 242
-+171 59 123 214 125 238 52 102 30 40 252 215 3 220 50 66 215 183 127 153 45 69
-+117 121 119 95 9 145 167 229 166 121 81 76 188 53 18 190 148 178 260 55 113 61
-+218 85 195 145 276 192 63 12 97 142 194 217 98 250 120 132 150 273 1 125 20 285
-+19 118 37 120 203 94 60 219 122 47 273 110 88 206 176 165 25 43 154 283 284 32
-+14 12 265 161 15 179 117 138 75 260 164 76 247 109 101 261 151 21 272 253 143
-+181 32 123 105 162 52 31 245 123 34 218 135 232 248 96 46 286 6 63 62 134 245
-+14 71 32 244 86 182 90 12 47 105 91 108 244 27 126 7 230 44 262 79 199 84 196
-+23 128 31 27 197 240 17 262 259 236 187 16 166 62 25 282 117 180 175 178 80 18
-+10 241 75 151 201 179 67 252 35 255 117 71 82 281 189 2 233 235 41 71 141 48
-+272 73 236 78 53 269 171 168 86 111 16 95 118 108 64 120 23 187 87 110 268 243
-+279 274 168 266 148 119 204 261 42 58 86 73 127 115 26 89 25 102 80 77 66 35
-+146 24 44 191 135 123 285 199 155 140 99 57 28 54 185 42 276 12 156 198 118 288
-+101 223 132 41 180 104 234 163 219 13 84 87 219 231 140 170 1 234 272 182 199
-+264 233 126 237 174 250 191 206 67 72 128 152 8 87 278 287 223 241 4 77 284 91
-+229 225 47 164 147 191 26 30 99 19 9 74 93 23 78 283 213 88 97 213 268 4 27 88
-+277 120 82 113 170 181 271 86 2 53 198 227 251 287 114 278 107 186 138 184 223
-+61 97 104 175 107 6 231 81 114 207 163 110 50 187 196 73 165 134 136 51 174 11
-+98 20 176 56 221 146 263 137 88 26 139 62 205 189 220 29 112 74 273 60 51 103
-+67 22 91 49 188 233 55 4 257 32 64 49 79 270 158 113 111 255 58 15 288 210 186
-+29 221 37 170 240 197 169 73 56 41 239 160 28 234 92 145 96 155 90 192 243 208
-+200 251 48 21 92 216 40 72 178 189 111 196 132 221 217 207 54 17 23 7 50 7 159
-+100 56 280 202 57 208 91 288 151 130 235 150 34 38 228 129 139 242 112 226 ^
-+619 0 38 141 250 104 37 31 159 207 19 175 92 201 274 96 31 230 28 205 104 52
-+126 114 192 229 152 225 103 90 230 262 26 108 86 39 32 35 60 147 10 278 216 277
-+35 75 79 255 100 136 254 5 267 185 99 41 95 226 71 249 9 168 252 90 144 56 12
-+249 228 57 193 34 21 4 172 153 30 135 159 136 35 116 36 241 59 93 225 32 106
-+171 43 66 238 268 280 131 110 1 162 161 122 142 14 179 283 141 265 36 155 16 79
-+184 279 77 198 45 52 182 3 133 173 192 10 263 121 32 50 282 102 122 198 30 120
-+227 18 213 196 59 108 157 150 91 91 20 199 140 84 124 199 69 263 65 143 109 48
-+62 47 201 126 28 149 215 111 182 74 244 69 248 133 25 124 128 248 204 9 183 184
-+208 256 139 279 92 130 163 37 265 270 266 75 8 144 204 80 4 243 264 89 191 119
-+188 38 85 71 163 256 154 211 210 115 83 14 108 172 82 209 76 103 176 273 276 67
-+43 10 59 37 46 91 35 131 258 69 44 176 202 165 171 277 177 7 34 240 183 113 97
-+70 83 29 40 67 129 53 73 78 89 120 8 2 109 252 19 33 160 246 289 13 54 97 126
-+99 260 111 167 142 289 247 38 156 55 222 22 114 263 50 211 281 226 142 70 68
-+224 212 15 274 25 210 171 262 245 179 212 30 206 270 195 254 239 88 81 28 1 147
-+66 167 157 221 202 150 76 159 65 214 220 107 281 7 253 129 124 57 137 145 80 60
-+132 78 160 231 67 58 232 177 22 129 68 168 33 74 40 275 262 174 68 153 101 246
-+218 192 158 41 166 47 257 15 259 220 92 59 52 268 46 20 214 72 39 236 282 46
-+106 257 249 80 279 21 19 104 271 15 55 136 269 100 222 7 182 18 65 128 14 93
-+240 254 224 156 126 43 81 170 96 102 51 87 134 64 104 256 210 100 151 186 123
-+89 105 76 174 287 42 42 190 95 140 155 235 258 125 223 117 273 205 246 274 81
-+99 112 206 285 127 209 61 8 58 288 66 253 200 235 243 193 105 5 63 228 113 82
-+265 255 44 247 23 224 227 237 102 137 3 148 105 147 285 56 98 165 242 98 236 63
-+157 2 23 209 5 119 117 217 26 15 203 41 151 115 12 193 49 116 122 284 236 7 268
-+61 242 169 57 122 213 125 238 49 101 27 39 251 214 1 218 50 63 213 181 127 153
-+45 67 114 121 118 93 6 143 165 227 166 118 78 74 188 53 17 189 148 176 258 54
-+112 58 217 82 194 144 275 191 63 9 97 141 194 215 96 250 119 132 149 271 123 18
-+284 17 118 37 117 202 94 60 218 121 47 272 110 87 205 175 163 22 43 152 281 282
-+31 11 12 264 160 12 178 117 288 137 74 259 164 76 245 108 101 261 150 20 270
-+251 143 180 264 ^
-+639 0 117 99 159 49 31 245 123 31 212 135 226 245 90 43 286 289 60 62 131 242
-+11 65 23 244 80 176 84 6 38 105 91 102 238 27 123 290 224 38 259 79 199 84 193
-+14 128 25 21 191 237 17 256 259 233 187 10 160 59 19 276 114 174 169 175 74 18
-+7 235 69 145 198 179 58 252 32 255 111 62 82 278 183 285 230 229 32 68 135 39
-+269 67 230 75 44 263 168 165 86 108 16 92 112 105 58 114 20 181 78 107 265 237
-+276 268 162 266 142 119 201 258 36 52 77 64 118 109 26 80 22 96 80 71 60 29 143
-+24 44 191 132 114 279 193 152 140 99 54 25 54 179 42 276 9 150 192 109 285 92
-+217 129 35 180 101 228 160 213 7 81 81 219 231 134 167 1 231 272 179 196 264
-+227 117 237 171 244 185 200 61 72 119 152 2 87 272 284 220 241 1 77 284 82 229
-+219 44 158 144 188 20 27 90 10 6 71 93 17 69 283 210 82 91 207 262 4 18 79 271
-+120 73 113 164 181 265 83 288 50 195 221 251 281 108 275 104 186 138 184 223 61
-+88 95 175 107 6 225 81 114 207 157 101 41 184 190 73 162 128 130 45 168 11 98
-+11 170 47 221 146 257 131 88 23 139 56 199 189 217 283 23 106 68 273 51 51 100
-+64 13 85 49 185 233 49 290 257 26 64 46 73 267 152 107 111 249 58 9 288 204 183
-+26 218 34 170 234 197 169 70 50 41 233 154 22 234 92 145 93 155 81 186 243 208
-+200 248 48 21 86 213 40 69 178 186 105 196 126 215 214 204 45 14 23 1 44 4 156
-+91 53 274 199 51 205 88 282 151 130 232 144 34 32 222 123 136 236 112 34 137
-+246 100 31 25 159 203 19 171 90 197 274 94 27 228 22 201 104 48 126 110 190 227
-+150 225 97 90 230 262 20 286 102 84 39 26 31 58 147 8 278 216 273 35 75 77 251
-+94 132 252 291 267 185 95 37 95 224 71 247 5 166 250 84 144 50 8 245 228 55 189
-+30 15 172 149 28 133 157 134 29 110 36 239 53 87 223 28 100 169 37 62 236 266
-+280 131 104 291 162 161 118 142 14 177 281 141 263 30 153 12 75 182 275 71 198
-+41 46 178 291 129 173 192 4 261 115 30 48 280 98 116 194 24 116 227 12 213 194
-+57 104 153 150 87 85 16 197 136 82 124 195 67 263 63 141 109 42 56 45 201 120
-+24 149 215 109 180 68 240 63 246 133 19 122 126 248 202 9 183 180 206 252 137
-+279 88 128 163 33 265 270 264 73 8 140 204 78 2 241 260 89 187 115 184 36 85 65
-+161 256 154 209 210 115 79 12 108 170 80 209 72 103 176 271 274 61 39 10 55 35
-+42 89 33 127 258 69 40 174 202 163 171 277 173 5 28 238 181 111 95 70 83 29 38
-+67 125 51 67 76 87 118 4 2 103 248 15 33 160 246 287 7 48 93 283 ^
-+611 0 87 260 99 159 134 289 247 38 152 55 222 14 110 255 42 211 277 226 138 62
-+64 216 204 11 270 25 206 163 258 241 171 212 30 198 266 195 254 239 84 69 28
-+283 143 54 167 153 217 194 142 64 151 65 206 220 99 281 293 249 125 116 57 137
-+137 72 48 128 78 152 227 63 54 232 177 22 129 68 168 21 74 28 275 254 174 60
-+149 93 242 218 184 158 37 162 39 249 3 251 212 80 59 52 260 34 20 214 60 27 228
-+282 46 106 253 249 68 275 17 15 100 271 15 43 136 269 100 214 289 182 14 53 120
-+2 89 240 246 220 156 122 39 77 162 96 90 43 79 134 60 92 252 202 96 147 178 119
-+77 97 72 170 287 38 30 190 83 136 147 235 254 117 219 109 265 205 238 266 73 95
-+100 206 285 123 201 49 290 50 280 66 253 192 227 235 189 93 5 59 224 101 74 257
-+251 40 239 19 224 223 233 102 129 3 144 101 139 281 56 90 165 238 94 232 55 157
-+284 11 205 1 107 113 217 22 7 203 29 143 111 8 193 45 116 122 276 236 7 268 53
-+242 161 49 118 209 125 238 37 97 15 35 247 210 287 210 50 51 205 173 127 153 45
-+59 102 121 114 85 288 135 157 219 166 106 66 66 188 53 13 185 148 168 250 50
-+108 46 213 70 190 140 271 187 63 291 97 137 194 207 88 250 115 132 145 263 290
-+115 10 280 9 118 37 105 198 94 60 214 117 47 268 110 83 201 171 155 10 43 144
-+273 274 27 293 12 260 156 174 117 284 133 70 255 164 76 237 104 101 261 146 16
-+262 243 143 176 32 113 95 157 47 31 245 123 29 208 135 222 243 86 41 286 285 58
-+62 129 240 9 61 17 244 76 172 80 2 32 105 91 98 234 27 121 286 220 34 257 79
-+199 84 191 8 128 21 17 187 235 17 252 259 231 187 6 156 57 15 272 112 170 165
-+173 70 18 5 231 65 141 196 179 52 252 30 255 107 56 82 276 179 281 228 225 26
-+66 131 33 267 63 226 73 38 259 166 163 86 106 16 90 108 103 54 110 18 177 72
-+105 263 233 274 264 158 266 138 119 199 256 32 48 71 58 112 105 26 74 20 92 80
-+67 56 25 141 24 44 191 130 108 275 189 150 140 99 52 23 54 175 42 276 7 146 188
-+103 283 86 213 127 31 180 99 224 158 209 3 79 77 219 231 130 165 1 229 272 177
-+194 264 223 111 237 169 240 181 196 57 72 113 152 292 87 268 282 218 241 293 77
-+284 76 229 215 42 154 142 186 16 25 84 4 4 69 93 13 63 283 208 78 87 203 258 4
-+12 73 267 120 67 113 160 181 261 81 286 48 193 217 251 277 104 273 102 186 138
-+184 223 61 82 89 175 107 6 221 81 114 207 153 95 35 182 186 73 275 ^
-+634 0 120 122 37 160 11 98 295 162 35 221 146 249 123 88 19 139 48 191 189 213
-+275 15 98 60 273 39 51 96 60 1 77 49 181 233 41 286 257 18 64 42 65 263 144 99
-+111 241 58 1 288 196 179 22 214 30 170 226 197 169 66 42 41 225 146 14 234 92
-+145 89 155 69 178 243 208 200 244 48 21 78 209 40 65 178 182 97 196 118 207 210
-+200 33 10 23 289 36 152 79 49 266 195 43 201 84 274 151 130 228 136 34 24 214
-+115 132 228 112 292 26 129 238 92 19 13 159 195 19 163 86 189 274 90 19 224 10
-+193 104 40 126 102 186 223 146 225 85 90 230 262 8 278 90 80 39 14 23 54 147 4
-+278 216 265 35 75 73 243 82 124 248 283 267 185 87 29 95 220 71 243 293 162 246
-+72 144 38 237 228 51 181 22 3 288 172 141 24 129 153 130 17 98 36 235 41 75 219
-+20 88 165 25 54 232 262 280 131 92 291 162 161 110 142 14 173 277 141 259 18
-+149 4 67 178 267 59 198 33 34 170 287 121 173 192 288 257 103 26 44 276 90 104
-+186 12 108 227 213 190 53 96 145 150 79 73 8 193 128 78 124 187 63 263 59 137
-+109 30 44 41 201 108 16 149 215 105 176 56 232 51 242 133 7 118 122 248 198 9
-+183 172 202 244 133 279 80 124 163 25 265 270 260 69 8 132 204 74 294 237 252
-+89 179 107 176 32 85 53 157 256 154 205 210 115 71 8 108 166 76 209 64 103 176
-+267 270 49 31 10 47 31 34 85 29 119 258 69 32 170 202 159 171 277 165 1 16 234
-+177 107 91 70 83 29 34 67 117 47 55 72 83 114 292 2 91 240 7 33 160 246 283 291
-+36 85 114 81 260 93 155 130 289 247 38 150 55 222 10 108 251 38 211 275 226 136
-+58 62 212 200 9 268 25 204 159 256 239 167 212 30 194 264 195 254 239 82 63 28
-+279 141 48 167 151 215 190 138 58 147 65 202 220 95 281 291 247 123 112 57 137
-+133 68 42 126 78 148 225 61 52 232 177 22 129 68 168 15 74 22 275 250 174 56
-+147 89 240 218 180 158 35 160 35 245 293 247 208 74 59 52 256 28 20 214 54 21
-+224 282 46 106 251 249 62 273 15 13 98 271 15 37 136 269 100 210 285 182 12 47
-+116 292 87 240 242 218 156 120 37 75 158 96 84 39 75 134 58 86 250 198 94 145
-+174 117 71 93 70 168 287 36 24 190 77 134 143 235 252 113 217 105 261 205 234
-+262 69 93 94 206 285 121 197 43 286 46 276 66 253 188 223 231 187 87 5 57 222
-+95 70 253 249 38 235 17 224 221 231 102 125 3 142 99 135 279 56 86 165 236 92
-+230 51 157 280 5 203 295 101 111 217 20 3 203 23 139 109 6 193 43 116 122 272
-+236 7 268 49 242 157 45 116 207 125 238 31 95 9 33 245 220 ^
-+638 0 284 204 50 42 199 167 127 153 45 53 93 121 111 79 282 129 151 213 166 97
-+57 60 188 53 10 182 148 162 244 47 105 37 210 61 187 137 268 184 63 285 97 134
-+194 201 82 250 112 132 142 257 290 109 4 277 3 118 37 96 195 94 60 211 114 47
-+265 110 80 198 168 149 1 43 138 267 268 24 287 12 257 153 288 171 117 281 130
-+67 252 164 76 231 101 101 261 143 13 256 237 143 173 32 107 89 154 44 31 245
-+123 26 202 135 216 240 80 38 286 279 55 62 126 237 6 55 8 244 70 166 74 293 23
-+105 91 92 228 27 118 280 214 28 254 79 199 84 188 296 128 15 11 181 232 17 246
-+259 228 187 150 54 9 266 109 164 159 170 64 18 2 225 59 135 193 179 43 252 27
-+255 101 47 82 273 173 275 225 219 17 63 125 24 264 57 220 70 29 253 163 160 86
-+103 16 87 102 100 48 104 15 171 63 102 260 227 271 258 152 266 132 119 196 253
-+26 42 62 49 103 99 26 65 17 86 80 61 50 19 138 24 44 191 127 99 269 183 147 140
-+99 49 20 54 169 42 276 4 140 182 94 280 77 207 124 25 180 96 218 155 203 294 76
-+71 219 231 124 162 1 226 272 174 191 264 217 102 237 166 234 175 190 51 72 104
-+152 289 87 262 279 215 241 293 77 284 67 229 209 39 148 139 183 10 22 75 292 1
-+66 93 7 54 283 205 72 81 197 252 4 3 64 261 120 58 113 154 181 255 78 283 45
-+190 211 251 271 98 270 99 186 138 184 223 61 73 80 175 107 6 215 81 114 207 147
-+86 26 179 180 73 157 118 120 35 158 11 98 293 160 32 221 146 247 121 88 18 139
-+46 189 189 212 273 13 96 58 273 36 51 95 59 295 75 49 180 233 39 285 257 16 64
-+41 63 262 142 97 111 239 58 296 288 194 178 21 213 29 170 224 197 169 65 40 41
-+223 144 12 234 92 145 88 155 66 176 243 208 200 243 48 21 76 208 40 64 178 181
-+95 196 116 205 209 199 30 9 23 288 34 296 151 76 48 264 194 41 200 83 272 151
-+130 227 134 34 22 212 113 131 226 112 292 24 127 236 90 16 10 159 193 19 161 85
-+187 274 89 17 223 7 191 104 38 126 100 185 222 145 225 82 90 230 262 5 276 87
-+79 39 11 21 53 147 3 278 216 263 35 75 72 241 79 122 247 281 267 185 85 27 95
-+219 71 242 292 161 245 69 144 35 295 235 228 50 179 20 287 172 139 23 128 152
-+129 14 95 36 234 38 72 218 18 85 164 22 52 231 261 280 131 89 291 162 161 108
-+142 14 172 276 141 258 15 148 2 65 177 265 56 198 31 31 168 286 119 173 192 286
-+256 100 25 43 275 88 101 184 9 106 227 294 213 189 52 94 143 150 77 70 6 192
-+126 77 124 185 62 263 58 136 109 27 41 40 201 105 14 149 215 104 175 53 230 219
-+^
-+635 1 239 133 297 115 119 248 195 9 183 166 199 238 130 279 74 121 163 19 265
-+270 257 66 8 126 204 71 294 234 246 89 173 101 170 29 85 44 154 256 154 202 210
-+115 65 5 108 163 73 209 58 103 176 264 267 40 25 10 41 28 28 82 26 113 258 69
-+26 167 202 156 171 277 159 297 7 231 174 104 88 70 83 29 31 67 111 44 46 69 80
-+111 289 2 82 234 1 33 160 246 280 285 27 79 108 72 260 84 149 124 289 247 38
-+147 55 222 4 105 245 32 211 272 226 133 52 59 206 194 6 265 25 201 153 253 236
-+161 212 30 188 261 195 254 239 79 54 28 273 138 39 167 148 212 184 132 49 141
-+65 196 220 89 281 288 244 120 106 57 137 127 62 33 123 78 142 222 58 49 232 177
-+22 129 68 168 6 74 13 275 244 174 50 144 83 237 218 174 158 32 157 29 239 287
-+241 202 65 59 52 250 19 20 214 45 12 218 282 46 106 248 249 53 270 12 10 95 271
-+15 28 136 269 100 204 279 182 9 38 110 286 84 240 236 215 156 117 34 72 152 96
-+75 33 69 134 55 77 247 192 91 142 168 114 62 87 67 165 287 33 15 190 68 131 137
-+235 249 107 214 99 255 205 228 256 63 90 85 206 285 118 191 34 280 40 270 66
-+253 182 217 225 184 78 5 54 219 86 64 247 246 35 229 14 224 218 228 102 119 3
-+139 96 129 276 56 80 165 233 89 227 45 157 274 295 200 295 92 108 217 17 296
-+203 14 133 106 3 193 40 116 122 266 236 7 268 43 242 151 39 113 204 125 238 22
-+92 30 242 205 282 200 50 36 195 163 127 153 45 49 87 121 109 75 278 125 147 209
-+166 91 51 56 188 53 8 180 148 158 240 45 103 31 208 55 185 135 266 182 63 281
-+97 132 194 197 78 250 110 132 140 253 290 105 275 298 118 37 90 193 94 60 209
-+112 47 263 110 78 196 166 145 294 43 134 263 264 22 283 12 255 151 284 169 117
-+279 128 65 250 164 76 227 99 101 261 141 11 252 233 143 171 32 103 85 152 42 31
-+245 123 24 198 135 212 238 76 36 286 275 53 62 124 235 4 51 2 244 66 162 70 291
-+17 105 91 88 224 27 116 276 210 24 252 79 199 84 186 292 128 11 7 177 230 17
-+242 259 226 187 295 146 52 5 262 107 160 155 168 60 18 221 55 131 191 179 37
-+252 25 255 97 41 82 271 169 271 223 215 11 61 121 18 262 53 216 68 23 249 161
-+158 86 101 16 85 98 98 44 100 13 167 57 100 258 223 269 254 148 266 128 119 194
-+251 22 38 56 43 97 95 26 59 15 82 80 57 46 15 136 24 44 191 125 93 265 179 145
-+140 99 47 18 54 165 42 276 2 136 178 88 278 71 203 122 21 180 94 214 153 199
-+292 74 67 219 231 120 160 1 224 272 172 189 264 213 96 237 164 230 171 186 153 ^
-+638 1 72 92 152 285 87 254 275 211 241 293 77 284 55 229 201 35 140 135 179 2
-+18 63 284 298 62 93 300 42 283 201 64 73 189 244 4 292 52 253 120 46 113 146
-+181 247 74 279 41 186 203 251 263 90 266 95 186 138 184 223 61 61 68 175 107 6
-+207 81 114 207 139 74 14 175 172 73 153 110 112 27 150 11 98 285 152 20 221 146
-+239 113 88 14 139 38 181 189 208 265 5 88 50 273 24 51 91 55 287 67 49 176 233
-+31 281 257 8 64 37 55 258 134 89 111 231 58 292 288 186 174 17 209 25 170 216
-+197 169 61 32 41 215 136 4 234 92 145 84 155 54 168 243 208 200 239 48 21 68
-+204 40 60 178 177 87 196 108 197 205 195 18 5 23 284 26 296 147 64 44 256 190
-+33 196 79 264 151 130 223 126 34 14 204 105 127 218 112 292 16 119 228 82 4 299
-+159 185 19 153 81 179 274 85 9 219 296 183 104 30 126 92 181 218 141 225 70 90
-+230 262 294 268 75 75 39 300 13 49 147 300 278 216 255 35 75 68 233 67 114 243
-+273 267 185 77 19 95 215 71 238 288 157 241 57 144 23 291 227 228 46 171 12 289
-+283 172 131 19 124 148 125 2 83 36 230 26 60 214 10 73 160 10 44 227 257 280
-+131 77 291 162 161 100 142 14 168 272 141 254 3 144 295 57 173 257 44 198 23 19
-+160 282 111 173 192 278 252 88 21 39 271 80 89 176 298 98 227 286 213 185 48 86
-+135 150 69 58 299 188 118 73 124 177 58 263 54 132 109 15 29 36 201 93 6 149
-+215 100 171 41 222 36 237 133 293 113 117 248 193 9 183 162 197 234 128 279 70
-+119 163 15 265 270 255 64 8 122 204 69 294 232 242 89 169 97 166 27 85 38 152
-+256 154 200 210 115 61 3 108 161 71 209 54 103 176 262 265 34 21 10 37 26 24 80
-+24 109 258 69 22 165 202 154 171 277 155 297 1 229 172 102 86 70 83 29 29 67
-+107 42 40 67 78 109 287 2 76 230 298 33 160 246 278 281 21 75 104 66 260 78 145
-+120 289 247 38 145 55 222 103 241 28 211 270 226 131 48 57 202 190 4 263 25 199
-+149 251 234 157 212 30 184 259 195 254 239 77 48 28 269 136 33 167 146 210 180
-+128 43 137 65 192 220 85 281 286 242 118 102 57 137 123 58 27 121 78 138 220 56
-+47 232 177 22 129 68 168 74 7 275 240 174 46 142 79 235 218 170 158 30 155 25
-+235 283 237 198 59 59 52 246 13 20 214 39 6 214 282 46 106 246 249 47 268 10 8
-+93 271 15 22 136 269 100 200 275 182 7 32 106 282 82 240 232 213 156 115 32 70
-+148 96 69 29 65 134 53 71 245 188 89 140 164 112 56 83 65 163 287 31 9 190 62
-+129 133 235 247 103 212 95 251 205 224 252 59 88 79 206 285 116 187 28 276 263 ^
-+640 0 264 66 253 176 211 219 181 69 5 51 216 77 58 241 243 32 223 11 224 215
-+225 102 113 3 136 93 123 273 56 74 165 230 86 224 39 157 268 289 197 295 83 105
-+217 14 293 203 5 127 103 193 37 116 122 260 236 7 268 37 242 145 33 110 201 125
-+238 13 89 293 27 239 202 279 194 50 27 189 157 127 153 45 43 78 121 106 69 272
-+119 141 203 166 82 42 50 188 53 5 177 148 152 234 42 100 22 205 46 182 132 263
-+179 63 275 97 129 194 191 72 250 107 132 137 247 290 99 296 272 295 118 37 81
-+190 94 60 206 109 47 260 110 75 193 163 139 288 43 128 257 258 19 277 12 252
-+148 278 166 117 276 125 62 247 164 76 221 96 101 261 138 8 246 227 143 168 32
-+97 79 149 39 31 245 123 21 192 135 206 235 70 33 286 269 50 62 121 232 1 45 295
-+244 60 156 64 288 8 105 91 82 218 27 113 270 204 18 249 79 199 84 183 286 128 5
-+1 171 227 17 236 259 223 187 292 140 49 301 256 104 154 149 165 54 18 299 215
-+49 125 188 179 28 252 22 255 91 32 82 268 163 265 220 209 2 58 115 9 259 47 210
-+65 14 243 158 155 86 98 16 82 92 95 38 94 10 161 48 97 255 217 266 248 142 266
-+122 119 191 248 16 32 47 34 88 89 26 50 12 76 80 51 40 9 133 24 44 191 122 84
-+259 173 142 140 99 44 15 54 159 42 276 301 130 172 79 275 62 197 119 15 180 91
-+208 150 193 289 71 61 219 231 114 157 1 221 272 169 186 264 207 87 237 161 224
-+165 180 41 72 89 152 284 87 252 274 210 241 293 77 284 52 229 199 34 138 134
-+178 17 60 282 298 61 93 299 39 283 200 62 71 187 242 4 290 49 251 120 43 113
-+144 181 245 73 278 40 185 201 251 261 88 265 94 186 138 184 223 61 58 65 175
-+107 6 205 81 114 207 137 71 11 174 170 73 152 108 110 25 148 11 98 283 150 17
-+221 146 237 111 88 13 139 36 179 189 207 263 3 86 48 273 21 51 90 54 285 65 49
-+175 233 29 280 257 6 64 36 53 257 132 87 111 229 58 291 288 184 173 16 208 24
-+170 214 197 169 60 30 41 213 134 2 234 92 145 83 155 51 166 243 208 200 238 48
-+21 66 203 40 59 178 176 85 196 106 195 204 194 15 4 23 283 24 296 146 61 43 254
-+189 31 195 78 262 151 130 222 124 34 12 202 103 126 216 112 292 14 117 226 80 1
-+297 159 183 19 151 80 177 274 84 7 218 294 181 104 28 126 90 180 217 140 225 67
-+90 230 262 292 266 72 74 39 298 11 48 147 300 278 216 253 35 75 67 231 64 112
-+242 271 267 185 75 17 95 214 71 237 287 156 240 54 144 20 290 225 228 45 169 10
-+287 282 172 129 18 123 147 124 301 80 36 229 23 57 213 8 70 159 7 42 226 256
-+280 131 213 ^
-+640 0 291 162 161 94 142 14 165 269 141 251 298 141 292 51 170 251 35 198 17 10
-+154 279 105 173 192 272 249 79 18 36 268 74 80 170 292 92 227 280 213 182 45 80
-+129 150 63 49 296 185 112 70 124 171 55 263 51 129 109 6 20 33 201 84 149 215
-+97 168 32 216 27 234 133 287 110 114 248 190 9 183 156 194 228 125 279 64 116
-+163 9 265 270 252 61 8 116 204 66 294 229 236 89 163 91 160 24 85 29 149 256
-+154 197 210 115 55 108 158 68 209 48 103 176 259 262 25 15 10 31 23 18 77 21
-+103 258 69 16 162 202 151 171 277 149 297 296 226 169 99 83 70 83 29 26 67 101
-+39 31 64 75 106 284 2 67 224 295 33 160 246 275 275 12 69 98 57 260 69 139 114
-+289 247 38 142 55 222 298 100 235 22 211 267 226 128 42 54 196 184 1 260 25 196
-+143 248 231 151 212 30 178 256 195 254 239 74 39 28 263 133 24 167 143 207 174
-+122 34 131 65 186 220 79 281 283 239 115 96 57 137 117 52 18 118 78 132 217 53
-+44 232 177 22 129 68 168 295 74 302 275 234 174 40 139 73 232 218 164 158 27
-+152 19 229 277 231 192 50 59 52 240 4 20 214 30 301 208 282 46 106 243 249 38
-+265 7 5 90 271 15 13 136 269 100 194 269 182 4 23 100 276 79 240 226 210 156
-+112 29 67 142 96 60 23 59 134 50 62 242 182 86 137 158 109 47 77 62 160 287 28
-+190 53 126 127 235 244 97 209 89 245 205 218 246 53 85 70 206 285 113 181 19
-+270 30 260 66 253 172 207 215 179 63 5 49 214 71 54 237 241 30 219 9 224 213
-+223 102 109 3 134 91 119 271 56 70 165 228 84 222 35 157 264 285 195 295 77 103
-+217 12 291 203 303 123 101 302 193 35 116 122 256 236 7 268 33 242 141 29 108
-+199 125 238 7 87 289 25 237 200 277 190 50 21 185 153 127 153 45 39 72 121 104
-+65 268 115 137 199 166 76 36 46 188 53 3 175 148 148 230 40 98 16 203 40 180
-+130 261 177 63 271 97 127 194 187 68 250 105 132 135 243 290 95 294 270 293 118
-+37 75 188 94 60 204 107 47 258 110 73 191 161 135 284 43 124 253 254 17 273 12
-+250 146 274 164 117 274 123 60 245 164 76 217 94 101 261 136 6 242 223 143 166
-+32 93 75 147 37 31 245 123 19 188 135 202 233 66 31 286 265 48 62 119 230 303
-+41 291 244 56 152 60 286 2 105 91 78 214 27 111 266 200 14 247 79 199 84 181
-+282 128 1 301 167 225 17 232 259 221 187 290 136 47 299 252 102 150 145 163 50
-+18 299 211 45 121 186 179 22 252 20 255 87 26 82 266 159 261 218 205 300 56 111
-+3 257 43 206 63 8 239 156 153 86 96 16 80 88 93 34 90 8 157 42 95 253 213 264
-+244 138 266 118 119 189 246 79 ^
-+650 0 24 35 22 76 81 26 38 8 68 80 43 32 1 129 24 44 191 118 72 251 165 138 140
-+99 40 11 54 151 42 276 301 122 164 67 271 50 189 115 7 180 87 200 146 185 285
-+67 53 219 231 106 153 1 217 272 165 182 264 199 75 237 157 216 157 172 33 72 77
-+152 280 87 244 270 206 241 293 77 284 40 229 191 30 130 130 174 298 13 48 274
-+298 57 93 295 27 283 196 54 63 179 234 4 282 37 243 120 31 113 136 181 237 69
-+274 36 181 193 251 253 80 261 90 186 138 184 223 61 46 53 175 107 6 197 81 114
-+207 129 59 305 170 162 73 148 100 102 17 140 11 98 275 142 5 221 146 229 103 88
-+9 139 28 171 189 203 255 301 78 40 273 9 51 86 50 277 57 49 171 233 21 276 257
-+304 64 32 45 253 124 79 111 221 58 287 288 176 169 12 204 20 170 206 197 169 56
-+22 41 205 126 300 234 92 145 79 155 39 158 243 208 200 234 48 21 58 199 40 55
-+178 172 77 196 98 187 200 190 3 23 279 16 296 142 49 39 246 185 23 191 74 254
-+151 130 218 116 34 4 194 95 122 208 112 292 6 109 218 72 295 289 159 175 19 143
-+76 169 274 80 305 214 286 173 104 20 126 82 176 213 136 225 55 90 230 262 284
-+258 60 70 39 290 3 44 147 300 278 216 245 35 75 63 223 52 104 238 263 267 185
-+67 9 95 210 71 233 283 152 236 42 144 8 286 217 228 41 161 2 279 278 172 121 14
-+119 143 120 293 68 36 225 11 45 209 58 155 301 34 222 252 280 131 62 291 162
-+161 90 142 14 163 267 141 249 294 139 290 47 168 247 29 198 13 4 150 277 101
-+173 192 268 247 73 16 34 266 70 74 166 288 88 227 276 213 180 43 76 125 150 59
-+43 294 183 108 68 124 167 53 263 49 127 109 14 31 201 78 302 149 215 95 166 26
-+212 21 232 133 283 108 112 248 188 9 183 152 192 224 123 279 60 114 163 5 265
-+270 250 59 8 112 204 64 294 227 232 89 159 87 156 22 85 23 147 256 154 195 210
-+115 51 304 108 156 66 209 44 103 176 257 260 19 11 10 27 21 14 75 19 99 258 69
-+12 160 202 149 171 277 145 297 292 224 167 97 81 70 83 29 24 67 97 37 25 62 73
-+104 282 2 61 220 293 33 160 246 273 271 6 65 94 51 260 63 135 110 289 247 38
-+140 55 222 296 98 231 18 211 265 226 126 38 52 192 180 305 258 25 194 139 246
-+229 147 212 30 174 254 195 254 239 72 33 28 259 131 18 167 141 205 170 118 28
-+127 65 182 220 75 281 281 237 113 92 57 137 113 48 12 116 78 128 215 51 42 232
-+177 22 129 68 168 291 74 298 275 230 174 36 137 69 230 218 160 158 25 150 15
-+225 273 227 188 44 59 52 236 304 20 214 24 297 204 282 46 106 241 249 32 263 5
-+3 88 271 15 7 136 269 100 190 265 182 2 17 96 283 ^
-+649 0 76 240 220 207 156 109 26 64 136 96 51 17 53 134 47 53 239 176 83 134 152
-+106 38 71 59 157 287 25 298 190 44 123 121 235 241 91 206 83 239 205 212 240 47
-+82 61 206 285 110 175 10 264 24 254 66 253 166 201 209 176 54 5 46 211 62 48
-+231 238 27 213 6 224 210 220 102 103 3 131 88 113 268 56 64 165 225 81 219 29
-+157 258 279 192 295 68 100 217 9 288 203 297 117 98 302 193 32 116 122 250 236
-+7 268 27 242 135 23 105 196 125 238 305 84 283 22 234 197 274 184 50 12 179 147
-+127 153 45 33 63 121 101 59 262 109 131 193 166 67 27 40 188 53 172 148 142 224
-+37 95 7 200 31 177 127 258 174 63 265 97 124 194 181 62 250 102 132 132 237 290
-+89 291 267 290 118 37 66 185 94 60 201 104 47 255 110 70 188 158 129 278 43 118
-+247 248 14 267 12 247 143 268 161 117 271 120 57 242 164 76 211 91 101 261 133
-+3 236 217 143 163 32 87 69 144 34 31 245 123 16 182 135 196 230 60 28 286 259
-+45 62 116 227 303 35 285 244 50 146 54 283 300 105 91 72 208 27 108 260 194 8
-+244 79 199 84 178 276 128 302 298 161 222 17 226 259 218 187 287 130 44 296 246
-+99 144 139 160 44 18 299 205 39 115 183 179 13 252 17 255 81 17 82 263 153 255
-+215 199 294 53 105 301 254 37 200 60 306 233 153 150 86 93 16 77 82 90 28 84 5
-+151 33 92 250 207 261 238 132 266 112 119 186 243 6 22 32 19 73 79 26 35 7 66
-+80 41 30 306 128 24 44 191 117 69 249 163 137 140 99 39 10 54 149 42 276 301
-+120 162 64 270 47 187 114 5 180 86 198 145 183 284 66 51 219 231 104 152 1 216
-+272 164 181 264 197 72 237 156 214 155 170 31 72 74 152 279 87 242 269 205 241
-+293 77 284 37 229 189 29 128 129 173 297 12 45 272 298 56 93 294 24 283 195 52
-+61 177 232 4 280 34 241 120 28 113 134 181 235 68 273 35 180 191 251 251 78 260
-+89 186 138 184 223 61 43 50 175 107 6 195 81 114 207 127 56 303 169 160 73 147
-+98 100 15 138 11 98 273 140 2 221 146 227 101 88 8 139 26 169 189 202 253 300
-+76 38 273 6 51 85 49 275 55 49 170 233 19 275 257 303 64 31 43 252 122 77 111
-+219 58 286 288 174 168 11 203 19 170 204 197 169 55 20 41 203 124 299 234 92
-+145 78 155 36 156 243 208 200 233 48 21 56 198 40 54 178 171 75 196 96 185 199
-+189 306 23 278 14 296 141 46 38 244 184 21 190 73 252 151 130 217 114 34 2 192
-+93 121 206 112 292 4 107 216 70 293 287 159 173 19 141 75 167 274 79 304 213
-+284 171 104 18 126 80 175 212 135 225 52 90 230 262 282 256 57 69 39 288 1 43
-+147 300 278 216 243 35 75 62 221 49 102 237 261 267 140 ^
-+649 1 61 3 95 207 71 230 280 149 233 33 144 308 283 211 228 38 155 305 273 275
-+172 115 11 116 140 117 287 59 36 222 2 36 206 303 49 152 295 28 219 249 280 131
-+53 291 162 161 84 142 14 160 264 141 246 288 136 287 41 165 241 20 198 7 304
-+144 274 95 173 192 262 244 64 13 31 263 64 65 160 282 82 227 270 213 177 40 70
-+119 150 53 34 291 180 102 65 124 161 50 263 46 124 109 300 5 28 201 69 299 149
-+215 92 163 17 206 12 229 133 277 105 109 248 185 9 183 146 189 218 120 279 54
-+111 163 308 265 270 247 56 8 106 204 61 294 224 226 89 153 81 150 19 85 14 144
-+256 154 192 210 115 45 304 108 153 63 209 38 103 176 254 257 10 5 10 21 18 8 72
-+16 93 258 69 6 157 202 146 171 277 139 297 286 221 164 94 78 70 83 29 21 67 91
-+34 16 59 70 101 279 2 52 214 290 33 160 246 270 265 306 59 88 42 260 54 129 104
-+289 247 38 137 55 222 293 95 225 12 211 262 226 123 32 49 186 174 305 255 25
-+191 133 243 226 141 212 30 168 251 195 254 239 69 24 28 253 128 9 167 138 202
-+164 112 19 121 65 176 220 69 281 278 234 110 86 57 137 107 42 3 113 78 122 212
-+48 39 232 177 22 129 68 168 285 74 292 275 224 174 30 134 63 227 218 154 158 22
-+147 9 219 267 221 182 35 59 52 230 298 20 214 15 291 198 282 46 106 238 249 23
-+260 2 85 271 15 307 136 269 100 184 259 182 308 8 90 266 74 240 216 205 156 107
-+24 62 132 96 45 13 49 134 45 47 237 172 81 132 148 104 32 67 57 155 287 23 294
-+190 38 121 117 235 239 87 204 79 235 205 208 236 43 80 55 206 285 108 171 4 260
-+20 250 66 253 162 197 205 174 48 5 44 209 56 44 227 236 25 209 4 224 208 218
-+102 99 3 129 86 109 266 56 60 165 223 79 217 25 157 254 275 190 295 62 98 217 7
-+286 203 293 113 96 302 193 30 116 122 246 236 7 268 23 242 131 19 103 194 125
-+238 301 82 279 20 232 195 272 180 50 6 175 143 127 153 45 29 57 121 99 55 258
-+105 127 189 166 61 21 36 188 53 307 170 148 138 220 35 93 1 198 25 175 125 256
-+172 63 261 97 122 194 177 58 250 100 132 130 233 290 85 289 265 288 118 37 60
-+183 94 60 199 102 47 253 110 68 186 156 125 274 43 114 243 244 12 263 12 245
-+141 264 159 117 269 118 55 240 164 76 207 89 101 261 131 1 232 213 143 161 32
-+83 65 142 32 31 245 123 14 178 135 192 228 56 26 286 255 43 62 114 225 303 31
-+281 244 46 142 50 281 296 105 91 68 204 27 106 256 190 4 242 79 199 84 176 272
-+128 300 296 157 220 17 222 259 216 187 285 126 42 294 242 97 140 135 158 40 18
-+299 201 35 111 181 179 7 252 15 255 77 11 82 261 149 251 69 ^
-+655 0 191 286 49 97 293 250 29 192 56 298 225 149 146 86 89 16 73 74 86 20 76 1
-+143 21 88 246 199 257 230 124 266 104 119 182 239 309 14 20 7 61 71 26 23 3 58
-+80 33 22 302 124 24 44 191 113 57 241 155 133 140 99 35 6 54 141 42 276 301 112
-+154 52 266 35 179 110 308 180 82 190 141 175 280 62 43 219 231 96 148 1 212 272
-+160 177 264 189 60 237 152 206 147 162 23 72 62 152 275 87 234 265 201 241 293
-+77 284 25 229 181 25 120 125 169 293 8 33 264 298 52 93 290 12 283 191 44 53
-+169 224 4 272 22 233 120 16 113 126 181 227 64 269 31 176 183 251 243 70 256 85
-+186 138 184 223 61 31 38 175 107 6 187 81 114 207 119 44 295 165 152 73 143 90
-+92 7 130 11 98 265 132 301 221 146 219 93 88 4 139 18 161 189 198 245 296 68 30
-+273 305 51 81 45 267 47 49 166 233 11 271 257 299 64 27 35 248 114 69 111 211
-+58 282 288 166 164 7 199 15 170 196 197 169 51 12 41 195 116 295 234 92 145 74
-+155 24 148 243 208 200 229 48 21 48 194 40 50 178 167 67 196 88 177 195 185 299
-+306 23 274 6 296 137 34 34 236 180 13 186 69 244 151 130 213 106 34 305 184 85
-+117 198 112 292 307 99 208 62 285 279 159 165 19 133 71 159 274 75 300 209 276
-+163 104 10 126 72 171 208 131 225 40 90 230 262 274 248 45 65 39 280 304 39 147
-+300 278 216 235 35 75 58 213 37 94 233 253 267 185 57 310 95 205 71 228 278 147
-+231 27 144 304 281 207 228 36 151 303 269 273 172 111 9 114 138 115 283 53 36
-+220 307 30 204 301 43 150 291 24 217 247 280 131 47 291 162 161 80 142 14 158
-+262 141 244 284 134 285 37 163 237 14 198 3 300 140 272 91 173 192 258 242 58
-+11 29 261 60 59 156 278 78 227 266 213 175 38 66 115 150 49 28 289 178 98 63
-+124 157 48 263 44 122 109 296 310 26 201 63 297 149 215 90 161 11 202 6 227 133
-+273 103 107 248 183 9 183 142 187 214 118 279 50 109 163 306 265 270 245 54 8
-+102 204 59 294 222 222 89 149 77 146 17 85 8 142 256 154 190 210 115 41 304 108
-+151 61 209 34 103 176 252 255 4 1 10 17 16 4 70 14 89 258 69 2 155 202 144 171
-+277 135 297 282 219 162 92 76 70 83 29 19 67 87 32 10 57 68 99 277 2 46 210 288
-+33 160 246 268 261 302 55 84 36 260 48 125 100 289 247 38 135 55 222 291 93 221
-+8 211 260 226 121 28 47 182 170 305 253 25 189 129 241 224 137 212 30 164 249
-+195 254 239 67 18 28 249 126 3 167 136 200 160 108 13 117 65 172 220 65 281 276
-+232 108 82 57 137 103 38 308 111 78 118 210 46 37 232 177 22 129 68 168 281 74
-+288 275 220 174 26 132 59 225 218 150 158 20 145 5 215 263 100 ^
-+661 1 176 26 59 52 224 292 20 214 6 285 192 282 46 106 235 249 14 257 311 309
-+82 271 15 301 136 269 100 178 253 182 308 311 84 260 71 240 210 202 156 104 21
-+59 126 96 36 7 43 134 42 38 234 166 78 129 142 101 23 61 54 152 287 20 288 190
-+29 118 111 235 236 81 201 73 229 205 202 230 37 77 46 206 285 105 165 307 254
-+14 244 66 253 156 191 199 171 39 5 41 206 47 38 221 233 22 203 1 224 205 215
-+102 93 3 126 83 103 263 56 54 165 220 76 214 19 157 248 269 187 295 53 95 217 4
-+283 203 287 107 93 302 193 27 116 122 240 236 7 268 17 242 125 13 100 191 125
-+238 295 79 273 17 229 192 269 174 50 309 169 137 127 153 45 23 48 121 96 49 252
-+99 121 183 166 52 12 30 188 53 307 167 148 132 214 32 90 304 195 16 172 122 253
-+169 63 255 97 119 194 171 52 250 97 132 127 227 290 79 286 262 285 118 37 51
-+180 94 60 196 99 47 250 110 65 183 153 119 268 43 108 237 238 9 257 12 242 138
-+258 156 117 266 115 52 237 164 76 201 86 101 261 128 310 226 207 143 158 32 77
-+59 139 29 31 245 123 11 172 135 186 225 50 23 286 249 40 62 111 222 303 25 275
-+244 40 136 44 278 290 105 91 62 198 27 103 250 184 310 239 79 199 84 173 266
-+128 297 293 151 217 17 216 259 213 187 282 120 39 291 236 94 134 129 155 34 18
-+299 195 29 105 178 179 310 252 12 255 71 2 82 258 143 245 210 189 284 48 95 291
-+249 27 190 55 296 223 148 145 86 88 16 72 72 85 18 74 141 18 87 245 197 256 228
-+122 266 102 119 181 238 308 12 17 4 58 69 26 20 2 56 80 31 20 301 123 24 44 191
-+112 54 239 153 132 140 99 34 5 54 139 42 276 301 110 152 49 265 32 177 109 307
-+180 81 188 140 173 279 61 41 219 231 94 147 1 211 272 159 176 264 187 57 237
-+151 204 145 160 21 72 59 152 274 87 232 264 200 241 293 77 284 22 229 179 24
-+118 124 168 292 7 30 262 298 51 93 289 9 283 190 42 51 167 222 4 270 19 231 120
-+13 113 124 181 225 63 268 30 175 181 251 241 68 255 84 186 138 184 223 61 28 35
-+175 107 6 185 81 114 207 117 41 293 164 150 73 142 88 90 5 128 11 98 263 130
-+299 221 146 217 91 88 3 139 16 159 189 197 243 295 66 28 273 303 51 80 44 265
-+45 49 165 233 9 270 257 298 64 26 33 247 112 67 111 209 58 281 288 164 163 6
-+198 14 170 194 197 169 50 10 41 193 114 294 234 92 145 73 155 21 146 243 208
-+200 228 48 21 46 193 40 49 178 166 65 196 86 175 194 184 297 306 23 273 4 296
-+136 31 33 234 179 11 185 68 242 151 130 212 104 34 304 182 83 116 196 112 292
-+306 97 206 60 283 277 159 163 19 131 70 157 274 74 299 208 274 161 104 8 126 70
-+170 207 130 225 37 90 230 194 ^
-+643 0 268 242 36 62 39 274 301 36 147 300 278 216 229 35 75 55 207 28 88 230
-+247 267 185 51 307 95 202 71 225 275 144 228 18 144 298 278 201 228 33 145 300
-+263 270 172 105 6 111 135 112 277 44 36 217 301 21 201 298 34 147 285 18 214
-+244 280 131 38 291 162 161 74 142 14 155 259 141 241 278 131 282 31 160 231 5
-+198 311 294 134 269 85 173 192 252 239 49 8 26 258 54 50 150 272 72 227 260 213
-+172 35 60 109 150 43 19 286 175 92 60 124 151 45 263 41 119 109 290 304 23 201
-+54 294 149 215 87 158 2 196 311 224 133 267 100 104 248 180 9 183 136 184 208
-+115 279 44 106 163 303 265 270 242 51 8 96 204 56 294 219 216 89 143 71 140 14
-+85 313 139 256 154 187 210 115 35 304 108 148 58 209 28 103 176 249 252 309 309
-+10 11 13 312 67 11 83 258 69 310 152 202 141 171 277 129 297 276 216 159 89 73
-+70 83 29 16 67 81 29 1 54 65 96 274 2 37 204 285 33 160 246 265 255 296 49 78
-+27 260 39 119 94 289 247 38 132 55 222 288 90 215 2 211 257 226 118 22 44 176
-+164 305 250 25 186 123 238 221 131 212 30 158 246 195 254 239 64 9 28 243 123
-+308 167 133 197 154 102 4 111 65 166 220 59 281 273 229 105 76 57 137 97 32 302
-+108 78 112 207 43 34 232 177 22 129 68 168 275 74 282 275 214 174 20 129 53 222
-+218 144 158 17 142 313 209 257 211 172 20 59 52 220 288 20 214 281 188 282 46
-+106 233 249 8 255 311 309 80 271 15 297 136 269 100 174 249 182 308 307 80 256
-+69 240 206 200 156 102 19 57 122 96 30 3 39 134 40 32 232 162 76 127 138 99 17
-+57 52 150 287 18 284 190 23 116 107 235 234 77 199 69 225 205 198 226 33 75 40
-+206 285 103 161 303 250 10 240 66 253 152 187 195 169 33 5 39 204 41 34 217 231
-+20 199 313 224 203 213 102 89 3 124 81 99 261 56 50 165 218 74 212 15 157 244
-+265 185 295 47 93 217 2 281 203 283 103 91 302 193 25 116 122 236 236 7 268 13
-+242 121 9 98 189 125 238 291 77 269 15 227 190 267 170 50 305 165 133 127 153
-+45 19 42 121 94 45 248 95 117 179 166 46 6 26 188 53 307 165 148 128 210 30 88
-+300 193 10 170 120 251 167 63 251 97 117 194 167 48 250 95 132 125 223 290 75
-+284 260 283 118 37 45 178 94 60 194 97 47 248 110 63 181 151 115 264 43 104 233
-+234 7 253 12 240 136 254 154 117 264 113 50 235 164 76 197 84 101 261 126 310
-+222 203 143 156 32 73 55 137 27 31 245 123 9 168 135 182 223 46 21 286 245 38
-+62 109 220 303 21 271 244 36 132 40 276 286 105 91 58 194 27 101 246 180 308
-+237 79 199 84 171 262 128 295 291 147 215 17 212 259 219 ^
-+652 1 187 278 112 35 287 228 90 126 121 151 26 18 299 187 21 97 174 179 302 252
-+8 255 63 306 82 254 135 237 206 181 276 44 87 283 245 19 182 51 288 215 144 141
-+86 84 16 68 64 81 10 66 312 133 6 83 241 189 252 220 114 266 94 119 177 234 304
-+4 5 308 46 61 26 8 314 48 80 23 12 297 119 24 44 191 108 42 231 145 128 140 99
-+30 1 54 131 42 276 301 102 144 37 261 20 169 105 303 180 77 180 136 165 275 57
-+33 219 231 86 143 1 207 272 155 172 264 179 45 237 147 196 137 152 13 72 47 152
-+270 87 224 260 196 241 293 77 284 10 229 171 20 110 120 164 288 3 18 254 298 47
-+93 285 313 283 186 34 43 159 214 4 262 7 223 120 1 113 116 181 217 59 264 26
-+171 173 251 233 60 251 80 186 138 184 223 61 16 23 175 107 6 177 81 114 207 109
-+29 285 160 142 73 138 80 82 313 120 11 98 255 122 291 221 146 209 83 88 315 139
-+8 151 189 193 235 291 58 20 273 295 51 76 40 257 37 49 161 233 1 266 257 294 64
-+22 25 243 104 59 111 201 58 277 288 156 159 2 194 10 170 186 197 169 46 2 41
-+185 106 290 234 92 145 69 155 9 138 243 208 200 224 48 21 38 189 40 45 178 162
-+57 196 78 167 190 180 289 306 23 269 312 296 132 19 29 226 175 3 181 64 234 151
-+130 208 96 34 300 174 75 112 188 112 292 302 89 198 52 275 269 159 155 19 123
-+66 149 274 70 295 204 266 153 104 126 62 166 203 126 225 25 90 230 262 264 238
-+30 60 39 270 299 34 147 300 278 216 225 35 75 53 203 22 84 228 243 267 185 47
-+305 95 200 71 223 273 142 226 12 144 294 276 197 228 31 141 298 259 268 172 101
-+4 109 133 110 273 38 36 215 297 15 199 296 28 145 281 14 212 242 280 131 32 291
-+162 161 70 142 14 153 257 141 239 274 129 280 27 158 227 315 198 309 290 130
-+267 81 173 192 248 237 43 6 24 256 50 44 146 268 68 227 256 213 170 33 56 105
-+150 39 13 284 173 88 58 124 147 43 263 39 117 109 286 300 21 201 48 292 149 215
-+85 156 312 192 307 222 133 263 98 102 248 178 9 183 132 182 204 113 279 40 104
-+163 301 265 270 240 49 8 92 204 54 294 217 212 89 139 67 136 12 85 309 137 256
-+154 185 210 115 31 304 108 146 56 209 24 103 176 247 250 305 307 10 7 11 310 65
-+9 79 258 69 308 150 202 139 171 277 125 297 272 214 157 87 71 70 83 29 14 67 77
-+27 311 52 63 94 272 2 31 200 283 33 160 246 263 251 292 45 74 21 260 33 115 90
-+289 247 38 130 55 222 286 88 211 314 211 255 226 116 18 42 172 160 305 248 25
-+184 119 236 219 127 212 30 154 244 195 254 239 62 3 28 239 121 304 167 131 195
-+150 98 314 107 65 162 220 55 281 271 227 103 72 57 137 93 28 308 ^
-+670 0 105 78 106 204 40 31 232 177 22 129 68 168 269 74 276 275 208 174 14 126
-+47 219 218 138 158 14 139 310 203 251 205 166 11 59 52 214 282 20 214 308 275
-+182 282 46 106 230 249 316 252 311 309 77 271 15 291 136 269 100 168 243 182
-+308 301 74 250 66 240 200 197 156 99 16 54 116 96 21 314 33 134 37 23 229 156
-+73 124 132 96 8 51 49 147 287 15 278 190 14 113 101 235 231 71 196 63 219 205
-+192 220 27 72 31 206 285 100 155 297 244 4 234 66 253 146 181 189 166 24 5 36
-+201 32 28 211 228 17 193 313 224 200 210 102 83 3 121 78 93 258 56 44 165 215
-+71 209 9 157 238 259 182 295 38 90 217 316 278 203 277 97 88 302 193 22 116 122
-+230 236 7 268 7 242 115 3 95 186 125 238 285 74 263 12 224 187 264 164 50 299
-+159 127 127 153 45 13 33 121 91 39 242 89 111 173 166 37 314 20 188 53 307 162
-+148 122 204 27 85 294 190 1 167 117 248 164 63 245 97 114 194 161 42 250 92 132
-+122 217 290 69 281 257 280 118 37 36 175 94 60 191 94 47 245 110 60 178 148 109
-+258 43 98 227 228 4 247 12 237 133 248 151 117 261 110 47 232 164 76 191 81 101
-+261 123 310 216 197 143 153 32 67 49 134 24 31 245 123 6 162 135 176 220 40 18
-+286 239 35 62 106 217 303 15 265 244 30 126 34 273 280 105 91 52 188 27 98 240
-+174 305 234 79 199 84 168 256 128 292 288 141 212 17 206 259 208 187 277 110 34
-+286 226 89 124 119 150 24 18 299 185 19 95 173 179 300 252 7 255 61 304 82 253
-+133 235 205 179 274 43 85 281 244 17 180 50 286 213 143 140 86 83 16 67 62 80 8
-+64 312 131 3 82 240 187 251 218 112 266 92 119 176 233 303 2 2 306 43 59 26 5
-+314 46 80 21 10 296 118 24 44 191 107 39 229 143 127 140 99 29 54 129 42 276
-+301 100 142 34 260 17 167 104 302 180 76 178 135 163 274 56 31 219 231 84 142 1
-+206 272 154 171 264 177 42 237 146 194 135 150 11 72 44 152 269 87 222 259 195
-+241 293 77 284 7 229 169 19 108 119 163 287 2 15 252 298 46 93 284 311 283 185
-+32 41 157 212 4 260 4 221 120 315 113 114 181 215 58 263 25 170 171 251 231 58
-+250 79 186 138 184 223 61 13 20 175 107 6 175 81 114 207 107 26 283 159 140 73
-+137 78 80 312 118 11 98 253 120 289 221 146 207 81 88 315 139 6 149 189 192 233
-+290 56 18 273 293 51 75 39 255 35 49 160 233 316 265 257 293 64 21 23 242 102
-+57 111 199 58 276 288 154 158 1 193 9 170 184 197 169 45 41 183 104 289 234 92
-+145 68 155 6 136 243 208 200 223 48 21 36 188 40 44 178 161 55 196 76 165 189
-+179 287 306 23 268 311 296 131 16 28 224 174 1 180 63 232 151 130 207 94 34 299
-+172 73 111 186 112 292 301 87 196 50 273 267 159 153 235 ^
-+658 1 117 63 143 274 67 292 201 260 147 104 313 126 56 163 200 123 225 16 90
-+230 262 258 232 21 57 39 264 296 31 147 300 278 216 219 35 75 50 197 13 78 225
-+237 267 185 41 302 95 197 71 220 270 139 223 3 144 288 273 191 228 28 135 295
-+253 265 172 95 1 106 130 107 267 29 36 212 291 6 196 293 19 142 275 8 209 239
-+280 131 23 291 162 161 64 142 14 150 254 141 236 268 126 277 21 155 221 309 198
-+306 284 124 264 75 173 192 242 234 34 3 21 253 44 35 140 262 62 227 250 213 167
-+30 50 99 150 33 4 281 170 82 55 124 141 40 263 36 114 109 280 294 18 201 39 289
-+149 215 82 153 306 186 301 219 133 257 95 99 248 175 9 183 126 179 198 110 279
-+34 101 163 298 265 270 237 46 8 86 204 51 294 214 206 89 133 61 130 9 85 303
-+134 256 154 182 210 115 25 304 108 143 53 209 18 103 176 244 247 299 304 10 1 8
-+307 62 6 73 258 69 305 147 202 136 171 277 119 297 266 211 154 84 68 70 83 29
-+11 67 71 24 305 49 60 91 269 2 22 194 280 33 160 246 260 245 286 39 68 12 260
-+24 109 84 289 247 38 127 55 222 283 85 205 311 211 252 226 113 12 39 166 154
-+305 245 25 181 113 233 216 121 212 30 148 241 195 254 239 59 313 28 233 118 298
-+167 128 192 144 92 308 101 65 156 220 49 281 268 224 100 66 57 137 87 22 292
-+103 78 102 202 38 29 232 177 22 129 68 168 265 74 272 275 204 174 10 124 43 217
-+218 134 158 12 137 308 199 247 201 162 5 59 52 210 278 20 214 304 271 178 282
-+46 106 228 249 312 250 311 309 75 271 15 287 136 269 100 164 239 182 308 297 70
-+246 64 240 196 195 156 97 14 52 112 96 15 312 29 134 35 17 227 152 71 122 128
-+94 2 47 47 145 287 13 274 190 8 111 97 235 229 67 194 59 215 205 188 216 23 70
-+25 206 285 98 151 293 240 230 66 253 142 177 185 164 18 5 34 199 26 24 207 226
-+15 189 313 224 198 208 102 79 3 119 76 89 256 56 40 165 213 69 207 5 157 234
-+255 180 295 32 88 217 316 276 203 273 93 86 302 193 20 116 122 226 236 7 268 3
-+242 111 318 93 184 125 238 281 72 259 10 222 185 262 160 50 295 155 123 127 153
-+45 9 27 121 89 35 238 85 107 169 166 31 310 16 188 53 307 160 148 118 200 25 83
-+290 188 314 165 115 246 162 63 241 97 112 194 157 38 250 90 132 120 213 290 65
-+279 255 278 118 37 30 173 94 60 189 92 47 243 110 58 176 146 105 254 43 94 223
-+224 2 243 12 235 131 244 149 117 259 108 45 230 164 76 187 79 101 261 121 310
-+212 193 143 151 32 63 45 132 22 31 245 123 4 158 135 172 218 36 16 286 235 33
-+62 104 215 303 11 261 244 26 122 30 271 276 105 91 48 184 27 96 236 170 303 232
-+79 199 84 166 252 128 290 283 ^
-+649 1 133 208 17 198 259 204 187 273 102 30 282 218 85 116 111 146 16 18 299
-+177 11 87 169 179 292 252 3 255 53 296 82 249 125 227 201 171 266 39 77 273 240
-+9 172 46 278 205 139 136 86 79 16 63 54 76 56 312 123 312 78 236 179 247 210
-+104 266 84 119 172 229 299 315 311 298 31 51 26 314 314 38 80 13 2 292 114 24
-+44 191 103 27 221 135 123 140 99 25 317 54 121 42 276 301 92 134 22 256 5 159
-+100 298 180 72 170 131 155 270 52 23 219 231 76 138 1 202 272 150 167 264 169
-+30 237 142 186 127 142 3 72 32 152 265 87 214 255 191 241 293 77 284 316 229
-+161 15 100 115 159 283 319 3 244 298 42 93 280 303 283 181 24 33 149 204 4 252
-+313 213 120 307 113 106 181 207 54 259 21 166 163 251 223 50 246 75 186 138 184
-+223 61 1 8 175 107 6 167 81 114 207 99 14 275 155 132 73 133 70 72 308 110 11
-+98 245 112 281 221 146 199 73 88 315 139 319 141 189 188 225 286 48 10 273 285
-+51 71 35 247 27 49 156 233 312 261 257 289 64 17 15 238 94 49 111 191 58 272
-+288 146 154 318 189 5 170 176 197 169 41 313 41 175 96 285 234 92 145 64 155
-+315 128 243 208 200 219 48 21 28 184 40 40 178 157 47 196 68 157 185 175 279
-+306 23 264 307 296 127 4 24 216 170 314 176 59 224 151 130 203 86 34 295 164 65
-+107 178 112 292 297 79 188 42 265 259 159 145 19 113 61 139 274 65 290 199 256
-+143 104 311 126 52 161 198 121 225 10 90 230 262 254 228 15 55 39 260 294 29
-+147 300 278 216 215 35 75 48 193 7 74 223 233 267 185 37 300 95 195 71 218 268
-+137 221 318 144 284 271 187 228 26 131 293 249 263 172 91 320 104 128 105 263
-+23 36 210 287 194 291 13 140 271 4 207 237 280 131 17 291 162 161 60 142 14 148
-+252 141 234 264 124 275 17 153 217 305 198 304 280 120 262 71 173 192 238 232
-+28 1 19 251 40 29 136 258 58 227 246 213 165 28 46 95 150 29 319 279 168 78 53
-+124 137 38 263 34 112 109 276 290 16 201 33 287 149 215 80 151 302 182 297 217
-+133 253 93 97 248 173 9 183 122 177 194 108 279 30 99 163 296 265 270 235 44 8
-+82 204 49 294 212 202 89 129 57 126 7 85 299 132 256 154 180 210 115 21 304 108
-+141 51 209 14 103 176 242 245 295 302 10 318 6 305 60 4 69 258 69 303 145 202
-+134 171 277 115 297 262 209 152 82 66 70 83 29 9 67 67 22 301 47 58 89 267 2 16
-+190 278 33 160 246 258 241 282 35 64 6 260 18 105 80 289 247 38 125 55 222 281
-+83 201 309 211 250 226 111 8 37 162 150 305 243 25 179 109 231 214 117 212 30
-+144 239 195 254 239 57 309 28 229 116 294 167 126 190 140 88 304 97 65 152 220
-+45 281 178 ^
-+<D
-+
-+H>SHS Type 3 Strings<H
-+D>
-+40 1 18 20 11 15 11 11 9 6 2 15 5 17 12 1 9 1 3 5 11 7 2 2 6 18 2 9 11 8 16 11
-+16 15 18 18 3 20 2 17 17 16 ^
-+<D
-+
-diff -Naur dbus-0.61.orig/test/data/sha-1/byte-hashes.sha1 dbus-0.61/test/data/sha-1/byte-hashes.sha1
---- dbus-0.61.orig/test/data/sha-1/byte-hashes.sha1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/sha-1/byte-hashes.sha1 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,343 @@
-+# Configuration information for "SHA-1 Test"
-+# SHA tests are configured for BYTE oriented implementations
-+H>SHS Type 1 Hashes<H
-+D>
-+DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 ^
-+3CDF2936DA2FC556BFA533AB1EB59CE710AC80E5 ^
-+19C1E2048FA7393CFBF2D310AD8209EC11D996E5 ^
-+CA775D8C80FAA6F87FA62BECA6CA6089D63B56E5 ^
-+71AC973D0E4B50AE9E5043FF4D615381120A25A0 ^
-+A6B5B9F854CFB76701C3BDDBF374B3094EA49CBA ^
-+D87A0EE74E4B9AD72E6847C87BDEEB3D07844380 ^
-+1976B8DD509FE66BF09C9A8D33534D4EF4F63BFD ^
-+5A78F439B6DB845BB8A558E4CEB106CD7B7FF783 ^
-+F871BCE62436C1E280357416695EE2EF9B83695C ^
-+62B243D1B780E1D31CF1BA2DE3F01C72AEEA0E47 ^
-+1698994A273404848E56E7FDA4457B5900DE1342 ^
-+056F4CDC02791DA7ED1EB2303314F7667518DEEF ^
-+9FE2DA967BD8441EEA1C32DF68DDAA9DC1FC8E4B ^
-+73A31777B4ACE9384EFA8BBEAD45C51A71ABA6DD ^
-+3F9D7C4E2384EDDABFF5DD8A31E23DE3D03F42AC ^
-+4814908F72B93FFD011135BEE347DE9A08DA838F ^
-+0978374B67A412A3102C5AA0B10E1A6596FC68EB ^
-+44AD6CB618BD935460D46D3F921D87B99AB91C1E ^
-+02DC989AF265B09CF8485640842128DCF95E9F39 ^
-+67507B8D497B35D6E99FC01976D73F54AECA75CF ^
-+1EAE0373C1317CB60C36A42A867B716039D441F5 ^
-+9C3834589E5BFFAC9F50950E0199B3EC2620BEC8 ^
-+209F7ABC7F3B878EE46CDF3A1FBB9C21C3474F32 ^
-+05FC054B00D97753A9B3E2DA8FBBA3EE808CEF22 ^
-+0C4980EA3A46C757DFBFC5BAA38AC6C8E72DDCE7 ^
-+96A460D2972D276928B69864445BEA353BDCFFD2 ^
-+F3EF04D8FA8C6FA9850F394A4554C080956FA64B ^
-+F2A31D875D1D7B30874D416C4D2EA6BAF0FFBAFE ^
-+F4942D3B9E9588DCFDC6312A84DF75D05F111C20 ^
-+310207DF35B014E4676D30806FA34424813734DD ^
-+4DA1955B2FA7C7E74E3F47D7360CE530BBF57CA3 ^
-+74C4BC5B26FB4A08602D40CCEC6C6161B6C11478 ^
-+0B103CE297338DFC7395F7715EE47539B556DDB6 ^
-+EFC72D99E3D2311CE14190C0B726BDC68F4B0821 ^
-+660EDAC0A8F4CE33DA0D8DBAE597650E97687250 ^
-+FE0A55A988B3B93946A63EB36B23785A5E6EFC3E ^
-+0CBDF2A5781C59F907513147A0DE3CC774B54BF3 ^
-+663E40FEE5A44BFCB1C99EA5935A6B5BC9F583B0 ^
-+00162134256952DD9AE6B51EFB159B35C3C138C7 ^
-+CEB88E4736E354416E2010FC1061B3B53B81664B ^
-+A6A2C4B6BCC41DDC67278F3DF4D8D0B9DD7784EF ^
-+C23D083CD8820B57800A869F5F261D45E02DC55D ^
-+E8AC31927B78DDEC41A31CA7A44EB7177165E7AB ^
-+E864EC5DBAB0F9FF6984AB6AD43A8C9B81CC9F9C ^
-+CFED6269069417A84D6DE2347220F4B858BCD530 ^
-+D9217BFB46C96348722C3783D29D4B1A3FEDA38C ^
-+DEC24E5554F79697218D317315FA986229CE3350 ^
-+83A099DF7071437BA5495A5B0BFBFEFE1C0EF7F3 ^
-+AA3198E30891A83E33CE3BFA0587D86A197D4F80 ^
-+9B6ACBEB4989CBEE7015C7D515A75672FFDE3442 ^
-+B021EB08A436B02658EAA7BA3C88D49F1219C035 ^
-+CAE36DAB8AEA29F62E0855D9CB3CD8E7D39094B1 ^
-+02DE8BA699F3C1B0CB5AD89A01F2346E630459D7 ^
-+88021458847DD39B4495368F7254941859FAD44B ^
-+91A165295C666FE85C2ADBC5A10329DAF0CB81A0 ^
-+4B31312EAF8B506811151A9DBD162961F7548C4B ^
-+3FE70971B20558F7E9BAC303ED2BC14BDE659A62 ^
-+93FB769D5BF49D6C563685954E2AECC024DC02D6 ^
-+BC8827C3E614D515E83DEA503989DEA4FDA6EA13 ^
-+E83868DBE4A389AB48E61CFC4ED894F32AE112AC ^
-+55C95459CDE4B33791B4B2BCAAF840930AF3F3BD ^
-+36BB0E2BA438A3E03214D9ED2B28A4D5C578FCAA ^
-+3ACBF874199763EBA20F3789DFC59572ACA4CF33 ^
-+86BE037C4D509C9202020767D860DAB039CADACE ^
-+51B57D7080A87394EEC3EB2E0B242E553F2827C9 ^
-+1EFBFA78866315CE6A71E457F3A750A38FACAB41 ^
-+57D6CB41AEEC20236F365B3A490C61D0CFA39611 ^
-+C532CB64B4BA826372BCCF2B4B5793D5B88BB715 ^
-+15833B5631032663E783686A209C6A2B47A1080E ^
-+D04F2043C96E10CD83B574B1E1C217052CD4A6B2 ^
-+E8882627C64DB743F7DB8B4413DD033FC63BEB20 ^
-+CD2D32286B8867BC124A0AF2236FC74BE3622199 ^
-+019B70D745375091ED5C7B218445EC986D0F5A82 ^
-+E5FF5FEC1DADBAED02BF2DAD4026BE6A96B3F2AF ^
-+6F4E23B3F2E2C068D13921FE4E5E053FFED4E146 ^
-+25E179602A575C915067566FBA6DA930E97F8678 ^
-+67DED0E68E235C8A523E051E86108EEB757EFBFD ^
-+AF78536EA83C822796745556D62A3EE82C7BE098 ^
-+64D7AC52E47834BE72455F6C64325F9C358B610D ^
-+9D4866BAA3639C13E541F250FFA3D8BC157A491F ^
-+2E258811961D3EB876F30E7019241A01F9517BEC ^
-+8E0EBC487146F83BC9077A1630E0FB3AB3C89E63 ^
-+CE8953741FFF3425D2311FBBF4AB481B669DEF70 ^
-+789D1D2DAB52086BD90C0E137E2515ED9C6B59B5 ^
-+B76CE7472700DD68D6328B7AA8437FB051D15745 ^
-+F218669B596C5FFB0B1C14BD03C467FC873230A0 ^
-+1FF3BDBE0D504CB0CDFAB17E6C37ABA6B3CFFDED ^
-+2F3CBACBB14405A4652ED52793C1814FD8C4FCE0 ^
-+982C8AB6CE164F481915AF59AAED9FFF2A391752 ^
-+5CD92012D488A07ECE0E47901D0E083B6BD93E3F ^
-+69603FEC02920851D4B3B8782E07B92BB2963009 ^
-+3E90F76437B1EA44CF98A08D83EA24CECF6E6191 ^
-+34C09F107C42D990EB4881D4BF2DDDCAB01563AE ^
-+474BE0E5892EB2382109BFC5E3C8249A9283B03D ^
-+A04B4F75051786682483252438F6A75BF4705EC6 ^
-+BE88A6716083EB50ED9416719D6A247661299383 ^
-+C67E38717FEE1A5F65EC6C7C7C42AFC00CD37F04 ^
-+959AC4082388E19E9BE5DE571C047EF10C174A8D ^
-+BAA7AA7B7753FA0ABDC4A541842B5D238D949F0A ^
-+351394DCEBC08155D100FCD488578E6AE71D0E9C ^
-+AB8BE94C5AF60D9477EF1252D604E58E27B2A9EE ^
-+3429EC74A695FDD3228F152564952308AFE0680A ^
-+907FA46C029BC67EAA8E4F46E3C2A232F85BD122 ^
-+2644C87D1FBBBC0FC8D65F64BCA2492DA15BAAE4 ^
-+110A3EEB408756E2E81ABAF4C5DCD4D4C6AFCF6D ^
-+CD4FDC35FAC7E1ADB5DE40F47F256EF74D584959 ^
-+8E6E273208AC256F9ECCF296F3F5A37BC8A0F9F7 ^
-+FE0606100BDBC268DB39B503E0FDFE3766185828 ^
-+6C63C3E58047BCDB35A17F74EEBA4E9B14420809 ^
-+BCC2BD305F0BCDA8CF2D478EF9FE080486CB265F ^
-+CE5223FD3DD920A3B666481D5625B16457DCB5E8 ^
-+948886776E42E4F5FAE1B2D0C906AC3759E3F8B0 ^
-+4C12A51FCFE242F832E3D7329304B11B75161EFB ^
-+C54BDD2050504D92F551D378AD5FC72C9ED03932 ^
-+8F53E8FA79EA09FD1B682AF5ED1515ECA965604C ^
-+2D7E17F6294524CE78B33EAB72CDD08E5FF6E313 ^
-+64582B4B57F782C9302BFE7D07F74AA176627A3A ^
-+6D88795B71D3E386BBD1EB830FB9F161BA98869F ^
-+86AD34A6463F12CEE6DE9596ABA72F0DF1397FD1 ^
-+7EB46685A57C0D466152DC339C8122548C757ED1 ^
-+E7A98FB0692684054407CC221ABC60C199D6F52A ^
-+34DF1306662206FD0A5FC2969A4BEEC4EB0197F7 ^
-+56CF7EBF08D10F0CB9FE7EE3B63A5C3A02BCB450 ^
-+3BAE5CB8226642088DA760A6F78B0CF8EDDEA9F1 ^
-+6475DF681E061FA506672C27CBABFA9AA6DDFF62 ^
-+79D81991FA4E4957C8062753439DBFD47BBB277D ^
-+BAE224477B20302E881F5249F52EC6C34DA8ECEF ^
-+EDE4DEB4293CFE4138C2C056B7C46FF821CC0ACC ^
-+<D
-+
-+H>SHS Type 2 Hashes<H
-+D>
-+A771FA5C812BD0C9596D869EC99E4F4AC988B13F ^
-+E99D566212BBBCEEE903946F6100C9C96039A8F4 ^
-+B48CE6B1D13903E3925AE0C88CB931388C013F9C ^
-+E647D5BAF670D4BF3AFC0A6B72A2424B0C64F194 ^
-+65C1CD932A06B05CD0B43AFB3BC7891F6BCEF45C ^
-+70FFAE353A5CD0F8A65A8B2746D0F16281B25EC7 ^
-+CC8221F2B829B8CF39646BF46888317C3EB378EA ^
-+26ACCC2D6D51FF7BF3E5895588907765111BB69B ^
-+01072915B8E868D9B28E759CF2BC1AEA4BB92165 ^
-+3016115711D74236ADF0C371E47992F87A428598 ^
-+BF30417999C1368F008C1F19FECA4D18A5E1C3C9 ^
-+62BA49087185F2742C26E1C1F4844112178BF673 ^
-+E1F6B9536F384DD3098285BBFD495A474140DC5A ^
-+B522DAE1D67726EBA7C4136D4E2F6D6D645AC43E ^
-+E9A021C3EB0B9F2C710554D4BF21B19F78E09478 ^
-+DF13573188F3BF705E697A3E1F580145F2183377 ^
-+188835CFE52ECFA0C4135C2825F245DC29973970 ^
-+41B615A34EE2CEC9D84A91B141CFAB115821950B ^
-+AB3DD6221D2AFE6613B815DA1C389EEC74AA0337 ^
-+0706D414B4AA7FB4A9051AA70D6856A7264054FB ^
-+3CBF8151F3A00B1D5A809CBB8C4F3135055A6BD1 ^
-+DA5D6A0319272BBCCEA63ACFA6799756FFDA6840 ^
-+FB4429C95F6277B346D3B389413758DFFFEEDC98 ^
-+2C6E30D9C895B42DCCCFC84C906EC88C09B20DE1 ^
-+3DE3189A5E19F225CDCE254DFF23DACD22C61363 ^
-+93530A9BC9A817F6922518A73A1505C411D05DA2 ^
-+E31354345F832D31E05C1B842D405D4BD4588EC8 ^
-+3FF76957E80B60CF74D015AD431FCA147B3AF232 ^
-+34AE3B806BE143A84DCE82E4B830EB7D3D2BAC69 ^
-+D7447E53D66BB5E4C26E8B41F83EFD107BF4ADDA ^
-+77DD2A4482705BC2E9DC96EC0A13395771AC850C ^
-+EAA1465DB1F59DE3F25EB8629602B568E693BB57 ^
-+9329D5B40E0DC43AA25FED69A0FA9C211A948411 ^
-+E94C0B6AA62AA08C625FAF817DDF8F51EC645273 ^
-+7FF02B909D82AD668E31E547E0FB66CB8E213771 ^
-+5BB3570858FA1744123BAC2873B0BB9810F53FA1 ^
-+905F43940B3591CE39D1145ACB1ECA80AB5E43CD ^
-+336C79FBD82F33E490C577E3F791C3CBFE842AFF ^
-+5C6D07A6B44F7A75A64F6CE592F3BAE91E022210 ^
-+7E0D3E9D33127F4A30EB8D9C134A58409FA8695B ^
-+9A5F50DFCFB19286206C229019F0ABF25283028C ^
-+DCA737E269F9D8626D488988C996E06B352C0708 ^
-+B8FFC1D4972FCE63241E0E77850AC46DDE75DBFA ^
-+E9C9BF41C8549354151B977003CE1D830BE667DB ^
-+0942908960B54F96CB43452E583F4F9CB66E398A ^
-+FCE34051C34D4B81B85DDC4B543CDE8007E284B3 ^
-+61E8916532503627F4024D13884640A46F1D61D4 ^
-+F008D5D7853B6A17B7466CD9E18BD135E520FAF4 ^
-+BD8D2E873CF659B5C77AAC1616827EF8A3B1A3B3 ^
-+B25A04DD425302ED211A1C2412D2410FA10C63B6 ^
-+A404E21588123E0893718B4B44E91414A785B91F ^
-+A1E13BC55BF6DAD83CF3AABDA3287AD68681EA64 ^
-+D5FD35FFABED6733C92365929DF0FB4CAE864D15 ^
-+C12E9C280EE9C079E0506FF89F9B20536E0A83EF ^
-+E22769DC00748A9BBD6C05BBC8E81F2CD1DC4E2D ^
-+F29835A93475740E888E8C14318F3CA45A3C8606 ^
-+1A1D77C6D0F97C4B620FAA90F3F8644408E4B13D ^
-+4EC84870E9BDD25F523C6DFB6EDD605052CA4EAA ^
-+D689513FED08B80C39B67371959BC4E3FECB0537 ^
-+C4FED58F209FC3C34AD19F86A6DACADC86C04D33 ^
-+051888C6D00029C176DE792B84DECE2DC1C74B00 ^
-+1A3540BEE05518505827954F58B751C475AEECE0 ^
-+DFA19180359D5A7A38E842F172359CAF4208FC05 ^
-+7B0FA84EBBCFF7D7F4500F73D79660C4A3431B67 ^
-+9E886081C9ACAAD0F97B10810D1DE6FCDCE6B5F4 ^
-+A4D46E4BA0AE4B012F75B1B50D0534D578AE9CB6 ^
-+6342B199EE64C7B2C9CBCD4F2DCB65ACEF51516F ^
-+AABFD63688EB678357869130083E1B52F6EA861D ^
-+F732B7372DAF44801F81EFFE3108726239837936 ^
-+5E9347FE4574CDCB80281ED092191199BADD7B42 ^
-+D5776B7DFFF75C1358ABDBBB3F27A20BB6CA7C55 ^
-+022B7ADA472FB7A9DA9219621C9C5F563D3792F6 ^
-+7F1DE4ECA20362DA624653D225A5B3F7964A9FF2 ^
-+CA0F2B1BFB4469C11ED006A994734F0F2F5EFD17 ^
-+833D63F5C2EA0CD43EC15F2B9DD97FF12B030479 ^
-+14FD356190416C00592B86FF7CA50B622F85593A ^
-+4AB6B57EDDEF1CE935622F935C1619AE7C1667D6 ^
-+B456A6A968ACD66CAA974F96A9A916E700AA3C5D ^
-+FD1C257FE046B2A27E2F0CD55ED2DECA845F01D7 ^
-+66E0D01780F1063E2929EAAD74826BC64060E38C ^
-+A8478DF406F179FD4EF97F4574D7F99EA1CE9EB8 ^
-+248E58CF09A372114FC2F93B09C5FC14F3D0059E ^
-+F15767DE91796A6816977EFA4FCED4B7FD9B8A57 ^
-+36A6BC5E680E15675D9696338C88B36248BBBAF4 ^
-+4DEA6251B2A6DF017A8093AB066EE3863A4EC369 ^
-+D30E70E357D57E3D82CA554B8A3D58DFF528FA94 ^
-+70CA84D827F7FD61446233F88CF2F990B0F3E2AA ^
-+8D500C9CFDE0288530A2106B70BED39326C52C3C ^
-+F3D4D139EDFC24596377BC97A96FB7621F27FFC7 ^
-+5509BAFFAC6D507860CEFC5AB5832CB63CD4B687 ^
-+0C0AEA0C2FD7A620C77866B1A177481E26B4F592 ^
-+149176007FEE58A591E3F00F8DB658B605F8390C ^
-+17C0D7B0256159F3626786FFDB20237AE154FA84 ^
-+741A58618ABEB1D983D67AFDCBC49AA397A3B8E0 ^
-+B738D6B3409EB9ED2F1719B84D13F7C36169CDEC ^
-+3D33DE31F64055D3B128AC9A6AA3F92DFD4F5330 ^
-+B6925F4DF94949B8844C867428BA3DEDF4CF2B51 ^
-+CF5E7256292ABEC431D8E8B9CBEAF22AF072377E ^
-+975DCE94902923977F129C0E4ACF40AD28DDB9AA ^
-+333B0259B18CE64D6B52CF563DD3041E5F63A516 ^
-+<D
-+
-+H>SHS Type 3 Hashes<H
-+D>
-+80E044703A880C20EC41F645120A8A5B5D194ECE ^
-+E142829CA08FC9787F17AA16CE727396169B2713 ^
-+6A2BAF62469D311F9257A0727F52C7EAA87CCEB4 ^
-+362E3E7136CA611D7FBF687D3BBDC54CDA64843F ^
-+F5900ADC6223A5D24A7526ABFC60FA8E2D59A5AB ^
-+AD0CAC6A21D5B10833DDE7FA85927D74EDA142A9 ^
-+47AD337EAFFDC177AAF7CBD035BE6F398B9D0536 ^
-+9CF58595DF80872535BCC7C056E223546F0BB4EE ^
-+7151CEB1918278CED2902B1D663D596F8D1B986F ^
-+ADDC9F09AA4026EF6C4B7F1A84D3A13B4CDC65B3 ^
-+921FE78A863A317B1FA1FB3CA3BE1948DE7EF754 ^
-+64BE10732D71D52CE8A486DA23E6B453DF7C6FBD ^
-+4A450659470DD759ABFAE1D73972A6D2E63AC16C ^
-+0D665E4BBF30B7EAB955BDE84759E185EECAB4CB ^
-+0C1B8EE94D61CDD0837EAED9FE33DE4A8334B596 ^
-+D93BFE2A6227A4BF9B7C61EBCE4A8CDE131593FE ^
-+BDA883F804B470C90BD6AC490DFC34EBC27F9648 ^
-+46A0969373552213632591C52030C38E5DBDC49E ^
-+4781289E48B910C550DC23CA7D3AF5324C03532D ^
-+693A34CFCDDED0F3AC72E7197FCE9BB66A8E3981 ^
-+AE088AF1D8865140963B3ABFB63E32E04CD1506F ^
-+ADF0F8F1D85CA97586F5DC6DC5FD11FA39270F55 ^
-+E484F5AD86C5F4D09E366ADF6E0DE73449F97B28 ^
-+81C49842BA3D7072FB42288E03CE737A2672C091 ^
-+F6CC71AD897C23A16835490DED289BFD45500AB0 ^
-+23E71AED62FE8E28F34F58E7FE5594EC5EB0486C ^
-+92BA7934AA5867EE52960F4E0EDFB90AA7B69305 ^
-+C3D1CC8CBD1B6FFEE0D90CE962CD9C09AB1548AA ^
-+3CE37A583B71A6A77BE325066A0F00C5D11DFC3E ^
-+76EF5D236E1042D356A3234A422C092F86003064 ^
-+8C3F703436C6C882E60263540A8E4C3E5646DC15 ^
-+6138F9F3AB43B988DD3857422CCB304352459F40 ^
-+B812DE98775B4690B4FC2ECFCAB61C73C7271DC7 ^
-+06660985CD80D48E7B9F88455B4233924C3B64BB ^
-+76AB4B6378D6F63499A94EB67EB1CB31AFF8D775 ^
-+F31F6B0BE7AB059A1F59A46481967E88392979E6 ^
-+0C1638498FBB7DB9600B98B4B22EF85E0FE245FB ^
-+5607C6AF600939736795AC523FA43B736F41A118 ^
-+8A03244866BDD21B9D8A82E98436C894FAD86ECC ^
-+8A75BFD911AF87303B9B8FB7A1A47CCA52D3D98A ^
-+16F0F3B5D37411236A1E3D6B1EDAB74CDA25ED4B ^
-+AC72BF45477481F58A302628DC5299FFA32E7C9F ^
-+74CFFD5881F75AC20726E1447DCF7F47024380EF ^
-+5BFBECEECBC27DA05729C4D1AC8C1286EA6DCEC9 ^
-+012AACBC0579FA4CB4F107E9A9AD1A86AD2F6A4D ^
-+F7D552CBC5EF90F1A579388B5A8A9EC71EB67681 ^
-+10C70115C4C34753274BFED477DF01440A67A361 ^
-+078D2FACD293B6B6219D89899C16AA1AA8E3DE82 ^
-+83C6BF9FB0D3091ADF374EBFA0A69916F17E6D26 ^
-+2CDB1924DA62AB64C007C6505FF657E4ADDEA9C1 ^
-+E95D209BCB9864B076FF4DFCA8F8BD75D62D1B48 ^
-+632824CF5025F8F90AD2923BDDF449550D64C0F5 ^
-+02B1C0B41FC27EC5A32E586F1AC480BF0061E56A ^
-+28156BC6769AE390BF32C6512C46169181E1536D ^
-+F730E6E287D992E7F3E013B6F1E088F0B9C41598 ^
-+B056A6A832FA5FE964EF77FF3E0BE1C32E0D58C0 ^
-+D5B3D19AFBB48FB56BA6D44A82DE6BD08DB208DE ^
-+0215AD79BD6B8023C05FD2F8966211897DF6337A ^
-+EC4CF38C244EB6526A44F70570925247145DA8CA ^
-+C0D931262ECE93DA5A6ABC89CD6AD3162EA6B09E ^
-+6BB48FAC26AA2B4859BBDEFCFB53AE4D1D9A0340 ^
-+58611D43741E67A7F0DA9CB337A59DCD1EBE758E ^
-+7C2AEC216AF231509E47B7EED06BB17859812B7E ^
-+F60EE5DBF4A7A676EC98B3DDB1CDD6CDF3CDA33B ^
-+0492E59B1F4C94E97F29A26C3EE7D57E1B0FDD72 ^
-+4FCF549D902D9BE1101A756DB9E45415FB61BCD2 ^
-+95C71D26AD6B38CC771376B4A4F962F12E1E3D4F ^
-+F6A2449E773C72FB886B3C43E2B30EC2A1B7454A ^
-+CDE86695E00AEC9A5DB6FDDB5D5A5934448D58E0 ^
-+502318A758FABFF6AC53844E9E2BCD159C678510 ^
-+589D295148F95F75DAE964DD743FE981FA236D4E ^
-+7973DD33AE3599A556BACC77E8656E782E029EFF ^
-+9F5BE43AADD43C6DB3883C9DA4B52E1A50257AEE ^
-+454289D8FFB237A56D5214EAE88F0A9D328FEA1A ^
-+7E686B36595BEB4C0D4528FF960EDB55088A028D ^
-+F9789D1EF19A0084AC0E9F43A4BC0EE0478939EF ^
-+2F32B0E7CC8BE19C325545C816E77056D7BBE70F ^
-+6B1617746F073CFCD2CEBCAFBBE6FD0E28ED2D56 ^
-+CF8D2EA3888AD76761799383E5A15979F6DB7A88 ^
-+557AF6D9D5947203C60E98C9A79B92B8BD085E2B ^
-+C61A217423DE68ED6CD34C91756C8DD3A650A2A2 ^
-+73F3F79C151B6C1BD9369EDB26B932C2362B0593 ^
-+364141E5FBCDE83F210C5BBBEB6810F6299DE14B ^
-+F806BECD025D264FD59E93D9E3606A674C40F216 ^
-+E0C761A57F00CBFB07D49BCB034C36A7122F4C5B ^
-+5D3831044B9E0032FBE3C3425FFD13698F413B33 ^
-+7EB1AB41E9997753C5D530DF118E71E72D7B86FC ^
-+CC053EA1556269D7E8BCBA30B208FCBF0EE2EE64 ^
-+A57739B1DD41E7DC0C40D6B6159A7E73CE2748AA ^
-+90DA527C9DB9ACC2FD530D560A2F1191A80D0567 ^
-+6AC1F2A0B8CA0E5ABC9FDF1ADCE588FBDF5CC53E ^
-+43C1A0A0EE4163EC929726989F92B03639B233AB ^
-+8927F299462413AC29A74080E54D8EE2DB7165E7 ^
-+0C8D7E22226D91B423E781B508F31517EAAB607B ^
-+7286E20D7F08D18A893254FBD3CC833F7973DCAF ^
-+0CB8C235928B8E936C43B8F29EF3758B9FD54A7B ^
-+F67C24CC23E440CA3F206CEEB5504ECA54CD5CA3 ^
-+D78A25DEAA1E7ADADDB3C145ED0E5263BA4F2910 ^
-+00AA68174D29492C578AC853FFCD55908292D41A ^
-+D5570EEDB09A62A5948F7F311F7ED5EF247F9AD9 ^
-+<D
-+
-diff -Naur dbus-0.61.orig/test/data/sha-1/byte-messages.sha1 dbus-0.61/test/data/sha-1/byte-messages.sha1
---- dbus-0.61.orig/test/data/sha-1/byte-messages.sha1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/sha-1/byte-messages.sha1 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,2294 @@
-+# Configuration information for "SHA-1 Test"
-+# SHA tests are configured for BYTE oriented implementations
-+H>SHS Type 1 Strings<H
-+D>
-+0 1 ^
-+5 0 2 1 2 1 2 ^
-+5 0 1 3 4 4 4 ^
-+7 0 4 3 4 4 1 4 4 ^
-+10 0 4 1 5 3 4 4 3 1 3 4 ^
-+10 0 3 1 6 5 5 1 3 6 6 4 ^
-+13 1 3 2 5 3 3 3 4 6 6 1 4 6 2 ^
-+16 1 3 5 5 1 2 1 3 3 6 3 5 2 3 5 7 2 ^
-+15 1 8 1 5 3 2 7 4 5 6 7 3 3 1 6 3 ^
-+15 1 4 6 8 2 1 4 2 5 1 6 8 8 6 4 7 ^
-+18 1 1 2 7 3 8 6 7 5 4 3 4 3 5 3 3 2 6 8 ^
-+16 0 9 8 1 8 1 7 6 7 7 1 2 6 9 5 4 7 ^
-+18 0 7 1 7 3 9 4 7 7 5 2 8 1 7 8 2 7 2 9 ^
-+19 1 2 3 1 8 8 6 9 10 3 10 8 9 2 4 1 5 1 5 9 ^
-+19 1 8 5 4 8 1 3 9 5 7 7 2 7 2 7 8 7 4 8 10 ^
-+20 1 1 9 7 4 1 4 5 1 10 8 6 4 4 9 9 9 8 2 9 10 ^
-+19 1 11 6 7 7 2 6 2 6 10 6 9 10 5 11 1 6 8 11 4 ^
-+22 0 10 5 10 3 7 8 9 9 1 1 1 10 2 1 5 10 2 9 9 9 7 8 ^
-+21 0 1 10 1 6 9 4 2 5 2 11 8 12 12 9 8 1 3 10 7 11 12 ^
-+24 1 3 9 5 12 3 4 2 9 12 11 6 6 1 1 9 5 9 1 4 9 4 10 8 9 ^
-+25 1 3 2 3 11 1 12 5 6 2 7 8 4 8 8 9 9 8 4 9 1 4 8 10 9 9 ^
-+23 0 11 10 7 10 10 6 10 9 4 5 10 5 8 4 1 10 12 4 6 1 8 11 6 ^
-+22 0 12 8 10 4 3 8 5 5 7 11 13 11 12 11 4 12 3 6 5 11 10 5 ^
-+26 1 10 9 6 9 7 2 10 4 4 5 5 2 12 13 5 3 1 10 1 4 7 8 13 13 12 9 ^
-+31 0 2 6 5 4 7 3 10 6 13 6 3 9 6 2 10 5 3 8 4 1 11 3 5 3 7 11 1 12 9 12 5 ^
-+27 1 14 5 1 3 7 2 3 9 3 4 14 4 4 10 8 5 14 1 11 12 12 10 4 13 7 11 9 ^
-+30 1 4 9 5 5 8 9 5 10 4 2 4 7 9 9 6 3 5 1 8 3 2 13 3 14 9 8 9 10 14 10 ^
-+27 0 12 9 5 8 7 2 14 12 3 8 14 6 6 4 7 5 7 10 7 11 10 1 9 6 7 12 14 ^
-+24 0 12 9 9 2 11 13 12 11 11 6 14 13 10 5 6 8 10 4 3 11 11 14 5 14 ^
-+24 0 15 4 5 3 8 12 15 8 14 15 9 12 12 3 10 13 6 11 10 4 13 14 8 8 ^
-+28 1 1 8 1 5 11 4 9 12 4 13 15 5 9 11 7 14 11 1 11 7 8 8 11 1 13 15 12 13 ^
-+32 1 5 8 3 8 10 7 8 1 5 13 12 14 5 3 6 4 12 15 6 6 10 11 13 9 1 11 6 10 3 7 14
-+2 ^
-+31 0 10 3 5 1 14 11 11 16 1 2 2 11 6 13 15 12 6 5 16 2 14 2 10 12 2 5 5 6 10 13
-+15 ^
-+34 0 3 10 8 16 9 5 12 15 4 11 13 3 6 5 10 8 1 3 9 3 11 1 2 16 12 10 6 1 9 1 16
-+5 6 14 ^
-+30 1 1 12 4 4 2 15 13 15 11 15 5 11 9 7 15 16 6 16 12 3 2 10 16 5 5 7 1 7 11 16
-+^
-+34 0 7 9 11 2 5 5 5 4 13 13 14 4 7 12 6 4 8 2 9 9 13 13 3 3 6 7 16 7 6 15 5 8
-+15 14 ^
-+36 1 4 6 16 15 11 14 14 4 7 10 3 4 10 3 6 7 14 4 6 6 5 2 7 8 16 2 12 16 10 14 3
-+2 3 7 14 3 ^
-+32 0 15 10 9 1 14 10 14 6 6 16 3 2 3 8 3 12 8 11 17 3 9 7 16 14 4 11 15 5 13 9
-+5 17 ^
-+30 0 17 17 13 8 2 6 8 16 1 12 5 17 2 9 8 10 13 14 11 17 12 5 14 9 11 9 11 4 11
-+12 ^
-+30 1 16 6 10 5 8 3 17 16 14 1 15 15 15 6 13 2 11 6 13 11 13 4 6 7 11 11 12 16
-+13 16 ^
-+33 1 16 16 14 16 2 4 16 11 6 15 7 4 17 6 5 7 6 3 14 16 5 17 11 13 1 1 14 13 3 6
-+14 5 16 ^
-+39 1 2 16 13 7 8 6 2 15 1 9 12 4 4 11 13 7 2 11 9 18 4 5 4 8 2 14 9 9 1 8 13 11
-+15 8 5 9 10 16 7 ^
-+34 0 2 7 1 1 17 13 6 11 10 8 5 12 15 6 15 10 12 4 18 1 2 8 11 12 16 10 12 18 11
-+16 12 11 17 6 ^
-+34 1 4 7 13 7 10 7 10 6 1 12 7 18 11 18 2 10 15 10 14 8 18 9 9 12 12 3 13 12 6
-+4 9 17 13 17 ^
-+40 0 5 7 3 2 1 17 14 4 16 6 13 1 13 6 6 10 1 3 18 3 11 7 9 5 7 11 17 1 9 16 5
-+15 10 17 3 8 15 17 8 12 ^
-+40 0 11 3 15 17 11 1 1 4 3 14 18 4 2 18 8 15 6 4 6 3 15 11 16 10 17 17 9 6 3 2
-+6 16 4 9 12 6 8 1 11 17 ^
-+37 1 2 19 12 8 16 14 2 9 16 2 6 6 7 9 10 9 11 9 14 11 15 5 16 9 2 17 2 8 15 8 4
-+3 14 14 16 16 12 ^
-+37 1 11 10 16 12 11 7 14 14 14 6 10 10 1 6 13 19 5 6 4 7 12 12 10 5 10 15 15 8
-+5 13 17 13 5 6 14 1 19 ^
-+38 1 2 6 5 17 9 11 18 18 8 6 13 15 3 3 15 5 13 18 3 2 5 5 14 7 13 4 17 7 2 17 3
-+18 15 7 15 16 18 11 ^
-+38 1 12 8 6 3 17 12 13 19 15 9 7 17 16 15 3 11 11 5 2 13 19 16 2 4 16 7 8 1 2 9
-+17 12 3 5 18 19 11 9 ^
-+39 1 14 16 14 8 9 16 5 1 6 3 17 18 16 9 1 15 9 10 9 19 1 3 3 20 11 13 17 1 19 8
-+3 4 3 7 1 14 19 19 19 ^
-+37 1 18 13 11 5 18 4 19 10 6 19 11 17 10 10 7 9 13 16 9 10 18 4 12 5 16 5 20 12
-+3 8 10 1 18 1 6 20 14 ^
-+36 0 8 9 6 12 11 7 7 3 17 13 6 20 17 9 20 16 10 12 17 8 11 8 11 10 5 10 14 18 8
-+19 9 12 12 2 20 19 ^
-+39 0 12 16 20 3 9 9 19 17 13 13 4 17 2 11 7 14 3 6 16 13 10 13 5 16 10 2 8 2 17
-+19 4 17 7 19 6 9 15 15 6 ^
-+43 0 7 2 18 5 7 18 5 2 15 7 11 10 9 3 2 14 19 3 11 8 18 15 5 3 5 12 15 16 10 17
-+7 19 16 2 1 16 6 3 19 12 5 18 16 ^
-+49 1 9 11 2 1 12 11 14 12 14 10 4 11 6 8 16 7 5 11 20 8 17 4 14 4 15 3 2 2 4 3
-+2 3 14 15 10 2 12 7 3 7 20 20 19 10 2 3 1 10 20 ^
-+36 0 19 20 12 5 19 21 5 21 11 14 19 1 17 8 9 4 19 3 17 1 14 21 14 7 6 5 20 14
-+21 20 4 6 21 7 11 12 ^
-+41 0 12 9 11 6 16 18 18 10 11 20 6 12 11 5 7 21 19 18 6 15 21 10 4 14 9 19 10 3
-+3 5 13 1 8 12 3 13 9 7 10 17 14 ^
-+45 0 10 6 8 3 17 18 3 21 19 6 17 15 4 9 15 9 15 14 4 7 14 8 10 13 4 11 10 7 6
-+21 1 14 5 11 7 7 2 13 13 3 9 13 8 14 20 ^
-+39 1 3 7 18 4 9 9 5 15 13 17 10 15 16 20 8 19 9 10 9 1 19 14 21 2 18 13 10 4 18
-+16 4 21 15 10 18 19 3 12 18 ^
-+41 0 14 4 13 11 1 11 1 10 2 12 4 21 10 21 18 9 2 16 7 20 6 7 12 19 20 1 13 12
-+10 8 21 15 7 19 13 6 8 19 20 18 19 ^
-+37 0 11 18 1 17 14 15 20 16 20 8 2 17 10 4 21 5 19 19 14 22 21 18 13 14 1 3 12
-+11 11 4 22 13 5 18 7 21 21 ^
-+48 0 9 22 19 12 8 16 5 17 5 9 1 2 9 6 12 6 1 7 4 3 15 1 14 1 12 3 10 2 10 14 21
-+13 17 6 6 17 1 21 2 14 16 17 9 11 20 21 11 18 ^
-+50 1 12 8 20 13 2 9 20 9 14 10 1 16 2 22 6 4 16 14 15 1 12 4 14 9 21 3 3 9 8 21
-+15 14 8 4 14 4 2 3 8 12 8 6 1 2 18 20 15 3 19 10 ^
-+44 0 10 20 14 6 3 4 21 1 12 4 18 2 6 7 6 9 20 14 10 10 19 17 21 12 15 17 7 10
-+11 8 10 12 1 19 19 9 18 21 4 18 11 9 22 5 ^
-+47 0 15 8 15 3 5 6 2 19 12 17 4 20 8 11 20 2 18 4 16 20 12 9 9 6 16 21 16 3 16
-+18 3 19 5 16 2 4 2 12 11 15 11 14 17 2 10 18 8 ^
-+48 1 5 13 3 21 5 3 6 18 18 10 1 21 21 7 1 13 12 19 1 14 6 8 21 19 21 11 19 13 2
-+13 4 1 10 22 16 4 9 4 10 16 3 7 15 11 9 13 17 12 ^
-+45 0 14 7 6 2 20 3 6 19 19 10 2 22 12 17 12 1 20 7 7 15 20 6 18 8 3 14 23 18 15
-+4 7 5 23 15 7 14 10 10 19 17 2 4 15 17 21 ^
-+45 1 15 11 8 9 17 5 12 18 14 6 20 17 21 12 16 9 22 9 20 15 2 22 11 2 6 11 9 8 2
-+4 14 19 3 21 21 23 8 2 11 4 8 4 20 22 11 ^
-+38 0 21 18 22 10 19 9 14 17 23 21 10 7 15 13 16 5 4 10 13 14 20 23 12 20 23 18
-+10 12 8 21 11 6 12 7 19 14 18 17 ^
-+40 0 18 22 6 9 22 5 23 13 6 8 23 20 22 5 22 15 19 20 9 9 1 13 13 10 14 13 5 22
-+14 21 9 21 19 14 14 4 18 13 12 14 ^
-+48 1 7 3 15 5 17 14 23 14 5 17 22 11 1 8 13 23 6 21 3 6 11 7 23 8 6 21 4 4 22
-+19 13 8 5 19 7 5 23 1 4 19 11 23 11 21 14 1 3 21 ^
-+43 0 22 14 11 7 18 16 17 24 12 12 3 13 19 16 22 4 16 4 6 23 8 18 11 2 3 20 22 9
-+21 8 23 1 23 20 7 16 13 23 4 13 3 7 22 ^
-+47 1 23 6 13 19 2 3 7 2 9 9 15 6 13 4 22 6 19 20 1 9 7 14 1 15 3 23 24 22 18 12
-+12 17 19 10 8 11 22 12 10 2 20 15 18 17 18 7 19 ^
-+47 1 12 21 6 12 4 7 18 17 3 2 14 24 14 1 23 1 11 15 10 6 18 20 7 1 8 1 16 6 20
-+23 23 21 10 10 12 24 10 11 23 2 12 23 9 3 24 24 10 ^
-+52 0 14 10 18 15 14 5 16 11 22 2 15 24 8 22 1 4 24 9 10 15 3 9 5 4 17 15 9 12
-+19 19 1 3 10 6 8 3 17 8 18 24 19 3 4 15 4 9 2 24 5 20 13 13 ^
-+42 0 20 17 19 22 13 8 10 19 15 11 1 14 17 20 22 10 7 11 16 9 21 22 17 23 12 15
-+4 24 7 21 18 2 21 16 1 19 18 20 11 3 15 17 ^
-+50 0 18 1 6 14 5 5 5 19 13 10 24 19 16 24 15 13 2 19 15 24 21 17 4 13 17 1 1 9
-+1 10 2 18 1 21 19 5 18 12 2 22 16 23 15 19 6 18 9 1 23 5 ^
-+51 0 21 13 14 11 18 12 13 3 19 9 20 22 20 2 11 12 6 1 12 16 18 2 9 8 4 3 11 17
-+11 5 4 19 16 11 23 13 18 1 20 8 2 16 16 21 4 19 5 5 20 24 16 ^
-+53 1 20 25 17 11 8 4 19 25 17 7 16 21 6 4 8 2 15 9 2 9 19 3 6 3 3 10 25 13 15 7
-+8 20 21 12 10 12 5 24 11 20 3 13 13 16 9 13 10 3 9 16 3 7 25 ^
-+49 1 9 9 14 2 13 17 25 2 18 5 19 23 9 25 9 10 23 12 12 7 13 8 15 7 1 6 21 2 8 7
-+6 16 14 14 12 15 13 24 10 15 11 10 8 14 15 21 25 21 25 ^
-+47 0 9 18 20 22 21 20 11 14 23 22 10 13 14 8 19 12 2 11 20 23 13 4 10 6 5 7 23
-+11 3 16 8 21 4 8 18 5 12 14 8 6 20 19 24 8 23 17 23 ^
-+48 1 7 19 1 18 1 14 22 13 14 5 8 22 18 14 25 17 11 12 22 2 12 12 16 12 13 18 17
-+12 17 14 18 8 25 9 23 5 3 8 14 24 17 7 3 3 23 17 22 19 ^
-+51 1 19 17 16 22 24 14 16 20 23 20 9 19 16 7 12 16 5 8 9 7 10 21 24 10 11 19 1
-+21 14 14 19 3 22 8 12 20 1 18 5 6 5 12 14 1 1 11 9 22 3 24 4 ^
-+52 1 6 1 11 16 1 12 8 11 11 17 10 22 7 3 10 2 6 4 24 16 24 19 4 5 18 11 12 9 20
-+21 25 2 21 18 10 20 25 21 3 17 17 5 8 22 25 19 8 10 19 7 11 18 ^
-+44 0 26 14 21 25 25 4 9 13 5 8 9 21 8 12 26 24 9 24 15 1 23 22 16 14 8 22 15 19
-+24 20 7 8 15 24 12 4 4 23 21 13 19 15 21 12 ^
-+59 1 15 7 3 21 20 8 22 14 23 26 19 2 10 18 3 5 3 1 9 15 15 3 7 13 23 9 7 1 13
-+17 14 25 9 16 2 2 6 13 7 19 25 17 1 5 21 2 7 22 5 6 25 3 12 19 6 2 4 24 17 ^
-+60 0 9 18 20 19 4 11 14 1 6 8 26 6 9 22 4 10 2 7 21 9 8 24 25 14 22 12 22 3 23
-+3 3 20 6 11 23 6 1 7 5 18 5 15 25 26 1 1 10 11 11 4 12 11 20 3 14 2 3 2 23 15 ^
-+49 0 12 17 24 11 8 6 24 16 15 22 21 14 6 12 20 19 5 5 12 11 6 23 2 16 23 7 24 6
-+21 2 17 17 5 25 11 25 20 25 24 18 6 12 19 25 7 6 5 2 25 ^
-+54 1 12 16 1 15 7 1 26 19 19 13 20 11 17 6 20 5 24 24 1 21 11 9 20 21 15 10 19
-+26 3 2 6 7 12 9 10 8 14 10 15 5 17 8 21 1 20 25 6 19 8 3 22 16 16 20 ^
-+63 0 17 13 11 10 17 15 12 6 13 14 17 4 12 10 24 5 13 24 3 5 2 5 11 14 8 5 10 17
-+16 8 4 14 21 15 3 6 17 25 8 2 3 3 19 10 13 22 22 8 2 13 25 17 2 1 19 1 14 20 2
-+5 4 15 24 ^
-+49 0 14 20 7 25 20 26 20 16 7 17 17 22 1 13 6 5 1 18 14 15 23 15 10 5 19 18 18
-+26 12 13 3 25 12 21 16 24 4 16 3 6 26 26 10 20 13 1 20 24 15 ^
-+56 0 3 8 14 5 5 7 11 13 11 26 11 4 26 17 20 19 11 10 3 10 14 9 6 9 7 16 10 4 4
-+19 19 2 26 13 19 17 15 24 15 4 21 22 13 13 12 22 2 14 20 5 18 7 17 24 20 20 ^
-+58 1 6 17 9 20 2 10 19 3 22 4 1 11 3 5 3 21 11 15 12 23 26 5 2 27 6 5 16 6 3 2
-+23 5 3 20 20 4 24 2 18 21 7 14 10 27 23 6 24 6 19 23 3 9 22 16 21 17 19 23 ^
-+58 1 17 7 21 19 6 16 15 15 20 14 2 25 19 14 18 19 7 9 1 14 11 10 16 3 23 14 26
-+10 11 1 18 1 12 24 19 19 1 7 2 3 24 7 12 9 2 8 16 20 24 5 26 26 4 9 2 7 25 17 ^
-+54 1 8 12 18 14 26 7 17 18 4 20 1 16 14 21 26 4 6 8 24 11 25 15 24 16 23 4 10
-+23 21 24 15 10 9 26 7 14 24 21 6 20 5 17 16 17 1 3 12 1 4 13 3 9 21 26 ^
-+56 1 7 18 11 1 19 20 23 12 12 27 13 13 15 16 13 1 16 15 12 26 3 16 16 8 17 13
-+21 4 6 5 19 14 16 4 16 11 14 18 18 27 9 13 21 3 26 22 3 7 6 4 26 3 15 8 25 21 ^
-+50 1 20 13 9 11 20 6 11 21 27 25 20 7 4 18 26 16 27 5 12 19 7 23 6 25 25 2 11
-+13 25 21 18 17 6 12 14 13 24 11 14 19 26 27 25 6 1 15 4 7 27 15 ^
-+51 0 15 16 26 27 23 14 12 28 22 15 8 19 2 20 13 1 24 2 25 1 6 19 19 8 11 24 24
-+21 13 27 5 11 28 17 7 25 6 23 24 14 25 12 5 13 26 2 5 8 10 16 17 ^
-+58 1 5 26 18 19 21 3 12 11 13 4 14 22 22 14 16 13 3 22 16 23 5 19 6 13 10 26 17
-+27 26 4 3 25 6 14 2 3 5 7 23 11 22 8 25 2 9 25 18 17 8 2 14 4 19 1 5 27 13 24 ^
-+53 0 2 27 28 2 17 23 10 27 18 26 7 22 16 3 27 1 26 21 28 10 3 6 2 2 10 17 13 16
-+6 17 21 23 13 20 22 5 6 11 12 12 8 23 13 17 9 23 20 3 28 27 12 17 22 ^
-+59 0 28 19 5 21 4 27 8 1 19 14 20 6 7 9 1 6 22 3 19 26 14 8 6 7 19 15 23 1 17
-+16 6 26 14 5 22 25 4 7 10 16 21 10 18 19 24 16 23 8 3 17 28 18 10 2 5 3 21 21
-+15 ^
-+58 0 6 24 1 4 24 18 10 22 1 21 12 5 4 4 20 25 24 26 8 25 11 2 7 27 22 19 4 18
-+27 10 28 4 12 24 8 16 12 11 16 17 25 8 12 16 1 9 9 10 5 24 23 18 5 14 18 8 4 28
-+^
-+61 0 5 17 8 28 1 22 4 11 3 2 17 3 14 9 27 13 18 24 9 8 7 28 25 14 21 27 24 6 18
-+16 2 12 15 9 14 10 1 8 17 4 6 15 26 11 15 2 28 20 26 16 3 7 5 8 9 26 10 12 25
-+11 22 ^
-+53 0 9 13 24 15 20 2 4 8 2 22 20 19 4 15 14 28 13 25 10 10 12 28 24 22 26 28 15
-+9 11 26 19 22 27 2 21 8 20 23 26 12 10 21 9 15 13 25 7 26 1 13 5 9 20 ^
-+58 0 3 9 21 22 7 1 23 28 1 2 8 22 12 18 28 5 18 14 7 11 17 20 20 7 21 13 8 28
-+21 22 2 16 20 15 28 9 3 22 13 10 23 4 16 11 14 1 10 8 14 14 15 18 13 12 21 18
-+25 28 ^
-+60 1 29 20 2 29 22 8 16 20 4 12 9 6 12 16 16 7 9 20 29 11 9 4 1 15 25 16 29 10
-+22 7 2 8 5 18 14 23 24 4 6 26 3 11 6 12 1 7 14 24 14 6 10 21 16 23 29 25 6 14
-+17 24 ^
-+64 0 12 10 5 10 15 25 8 15 3 7 13 25 16 14 1 29 22 26 15 27 9 1 8 8 28 6 13 5
-+13 3 15 5 23 8 23 2 5 5 4 17 13 14 7 17 12 27 3 18 5 7 5 26 18 15 22 28 16 13 7
-+2 23 19 25 15 ^
-+56 1 17 7 16 25 23 11 11 15 2 13 9 26 2 24 26 7 28 11 2 29 7 22 23 5 28 19 1 27
-+29 1 24 11 18 20 3 13 11 7 3 15 17 24 1 18 13 6 3 25 27 16 28 18 24 8 23 22 ^
-+51 1 29 28 6 28 14 12 28 27 22 4 14 25 1 3 9 7 11 14 15 16 10 19 12 19 11 20 13
-+28 4 27 28 7 27 12 4 28 21 17 22 20 17 15 15 23 22 13 12 21 22 21 29 ^
-+64 1 12 14 12 18 27 8 7 4 9 14 16 15 8 11 21 20 10 10 21 23 20 2 11 23 1 11 1 5
-+3 23 16 15 27 14 5 16 3 22 2 3 24 3 19 29 4 4 10 8 20 14 15 1 26 12 27 25 4 28
-+22 11 19 19 24 9 ^
-+60 1 20 8 9 5 25 19 17 19 15 7 24 24 21 3 20 16 8 3 17 28 18 29 9 23 9 10 29 4
-+12 24 15 5 8 22 17 29 12 3 8 29 15 21 21 4 7 20 7 10 7 26 10 16 24 6 7 12 8 12
-+15 17 ^
-+60 0 9 17 11 28 12 26 26 6 29 13 10 20 6 23 10 4 3 26 26 14 20 20 25 14 13 15
-+24 14 11 4 23 27 24 20 9 16 17 24 13 12 6 1 14 26 25 7 8 21 1 19 3 2 2 17 21 13
-+5 9 21 11 ^
-+54 0 25 1 27 24 6 23 16 5 1 20 29 22 25 9 25 10 3 28 28 25 19 18 16 24 14 15 5
-+28 12 28 26 29 2 15 15 9 5 18 19 22 12 15 4 6 15 24 16 9 4 26 25 18 27 12 ^
-+61 1 20 4 26 12 3 22 1 22 30 3 28 10 9 24 14 29 6 30 3 10 20 14 6 3 19 21 21 28
-+16 18 11 30 11 20 30 1 9 8 11 5 19 10 24 4 22 4 2 26 5 15 20 8 3 13 30 18 8 1
-+25 28 19 ^
-+56 1 20 15 21 18 18 12 16 13 24 9 21 2 28 6 1 23 9 18 27 27 4 9 13 10 8 14 16
-+15 12 11 14 21 14 10 11 25 17 17 30 21 13 27 26 26 22 14 13 17 21 19 9 9 20 23
-+13 28 ^
-+59 1 10 28 24 10 22 27 23 27 8 17 14 6 4 21 26 15 1 8 29 27 6 28 15 3 27 25 25
-+14 19 13 29 8 24 2 8 2 4 12 19 11 10 6 26 14 22 24 30 10 11 12 2 12 17 23 8 8
-+12 28 12 ^
-+56 0 14 28 2 17 4 8 3 26 9 23 21 30 30 20 4 13 28 29 9 3 17 7 19 30 28 1 2 20 9
-+12 24 15 30 20 27 3 23 11 6 29 25 23 26 17 20 10 22 15 23 6 25 5 4 30 2 29 ^
-+63 1 23 15 27 14 26 1 1 7 19 12 7 6 20 18 14 4 15 17 28 7 11 7 8 9 22 17 12 5
-+23 18 25 18 6 12 26 30 12 30 14 3 1 18 10 20 27 21 8 6 24 26 20 11 24 7 2 4 18
-+15 14 30 16 19 14 ^
-+52 0 27 15 4 19 25 29 29 7 14 18 9 11 9 27 11 15 29 9 28 20 2 30 26 21 17 8 28
-+17 22 29 24 8 11 18 29 15 6 7 27 27 17 24 18 23 11 19 8 30 5 24 22 24 ^
-+66 1 25 15 28 23 5 10 21 5 8 7 3 10 19 17 6 9 15 29 10 7 4 1 16 21 16 29 13 18
-+5 3 8 15 8 21 29 20 5 27 2 13 27 7 7 30 2 18 26 10 2 5 29 21 15 25 26 24 8 12
-+20 3 9 10 30 7 12 29 ^
-+53 1 30 26 20 11 22 19 27 2 16 10 6 4 24 17 20 25 20 15 8 23 23 20 30 18 16 3
-+30 15 26 23 28 7 21 8 7 31 31 14 26 18 3 1 26 28 15 25 11 31 3 25 9 21 30 ^
-+67 0 2 6 14 4 9 5 28 8 17 22 1 4 8 7 10 14 19 10 14 8 27 9 24 26 4 30 11 8 19 5
-+21 7 2 27 20 16 20 20 22 14 13 16 26 14 10 3 25 22 25 23 21 10 15 15 29 8 13 4
-+2 13 22 20 7 4 20 31 23 ^
-+65 0 2 2 28 13 19 14 12 23 27 6 2 14 2 22 6 25 30 29 31 13 14 16 31 12 16 30 5
-+14 31 11 4 1 1 25 21 13 26 22 21 5 22 14 29 1 21 3 14 30 4 2 29 12 15 23 3 15 5
-+1 6 23 22 13 1 14 23 ^
-+59 1 25 5 15 6 13 3 22 11 23 31 24 6 5 20 4 14 3 29 8 29 19 7 29 23 25 28 19 11
-+15 27 21 14 1 19 20 26 12 7 12 1 18 13 29 28 23 29 14 23 7 1 9 29 24 5 30 18 5
-+25 30 ^
-+55 1 31 25 13 7 24 25 24 1 12 19 9 7 6 28 20 14 28 21 19 31 20 20 6 24 18 27 24
-+4 18 21 1 31 15 1 15 2 27 4 26 25 4 23 19 2 31 22 30 21 22 5 27 12 30 28 31 ^
-+62 0 27 15 18 14 25 15 17 7 28 11 28 29 30 1 17 12 10 2 18 20 21 2 11 12 5 4 12
-+25 14 5 5 24 22 18 31 15 22 29 11 3 21 31 21 27 3 28 7 10 25 2 15 30 9 30 7 22
-+15 9 3 20 24 14 ^
-+60 0 28 14 18 9 27 14 22 27 31 10 8 14 7 15 7 20 5 26 1 29 7 17 17 8 3 13 27 18
-+8 31 27 28 22 22 17 19 18 18 11 19 13 25 10 19 6 28 4 31 23 10 18 26 31 5 10 13
-+12 8 15 27 ^
-+60 1 24 22 4 29 22 31 28 20 4 16 21 3 1 15 5 15 6 30 3 29 29 7 27 20 2 20 31 22
-+26 9 29 16 4 26 32 17 20 14 28 17 19 6 24 11 26 28 5 18 15 8 16 20 21 4 9 12 4
-+8 17 29 ^
-+<D
-+
-+H>SHS Type 2 Strings<H
-+D>
-+69 1 5 3 11 15 12 24 31 23 1 6 28 2 8 31 6 7 30 5 19 23 12 6 9 31 19 17 24 25
-+22 6 12 16 3 7 9 9 11 29 4 11 2 5 13 29 10 12 30 32 18 28 18 27 3 30 4 4 26 6
-+13 31 13 2 11 7 24 4 17 29 12 ^
-+95 0 21 19 21 23 11 42 36 2 13 4 1 33 22 16 27 9 4 33 16 3 30 15 11 32 13 17 38
-+32 9 38 4 36 15 32 27 19 42 18 6 36 22 10 29 12 25 40 15 29 23 28 30 4 8 11 24
-+9 10 31 28 43 23 16 29 33 5 40 26 3 19 12 36 43 5 35 37 5 14 11 45 35 16 10 8
-+32 4 15 35 26 2 39 22 37 22 30 29 ^
-+106 1 18 14 51 2 6 32 51 9 32 50 44 46 51 8 11 53 45 55 16 10 3 52 8 20 20 46
-+46 13 32 2 46 50 43 25 54 9 31 29 2 47 15 29 24 45 44 18 37 14 28 39 36 44 47
-+16 50 10 44 24 53 35 22 40 20 15 51 22 18 22 42 6 54 49 38 21 7 13 30 16 7 52
-+16 22 13 38 7 11 44 33 9 25 13 37 42 14 45 53 30 38 5 25 5 35 38 22 28 53 ^
-+127 0 58 35 43 28 5 28 63 8 12 25 9 47 53 29 62 7 37 2 3 48 5 12 55 56 28 35 12
-+63 6 58 27 27 48 44 35 14 17 22 56 10 8 1 16 15 42 63 14 51 57 19 41 7 8 56 47
-+34 52 22 48 60 43 9 1 52 4 21 49 61 18 50 23 13 46 62 23 45 62 9 56 18 23 31 8
-+30 27 36 13 38 4 58 53 47 24 18 41 58 19 12 18 52 42 29 44 45 26 63 34 32 41 64
-+15 26 55 19 2 49 6 30 53 13 54 12 53 37 12 37 43 ^
-+148 0 60 4 51 47 58 38 17 63 33 23 28 43 12 69 70 33 17 12 50 18 18 36 45 2 67
-+4 45 20 4 33 38 29 45 8 22 58 39 71 38 32 53 35 19 53 31 29 51 35 4 63 18 33 26
-+47 70 9 64 62 63 30 15 1 35 28 16 40 20 14 50 33 19 38 30 27 55 10 16 46 47 7
-+55 12 53 26 56 33 29 55 25 17 48 43 21 43 18 24 63 27 68 46 38 33 35 10 18 11
-+27 5 9 58 35 70 36 36 39 47 2 10 66 47 5 18 21 44 71 51 57 3 22 7 56 55 28 25
-+14 40 16 24 48 37 66 50 24 45 18 39 53 55 ^
-+165 1 15 62 35 29 15 40 19 76 67 4 5 71 46 61 26 8 77 48 1 23 12 60 40 24 44 33
-+29 42 73 66 49 61 20 30 1 54 52 42 39 64 23 65 37 24 20 11 26 66 22 77 22 57 7
-+38 57 33 61 73 7 64 1 49 35 76 14 27 21 45 68 38 58 73 13 72 47 73 33 8 66 23
-+38 4 56 77 47 10 71 13 20 31 41 6 51 3 18 17 61 47 14 48 76 46 28 34 43 1 56 4
-+25 7 65 41 1 34 37 23 59 59 27 26 13 15 14 75 60 14 1 28 59 26 65 61 16 23 17
-+28 6 19 2 35 49 30 29 48 2 63 73 59 1 3 76 41 11 19 18 43 54 63 67 51 4 9 78 60
-+66 ^
-+181 0 18 19 84 17 12 10 57 18 77 51 52 16 39 74 49 52 63 38 72 2 15 64 83 62 49
-+56 11 26 68 58 83 33 23 50 63 71 53 27 84 22 39 41 52 58 11 64 7 60 45 70 22 5
-+73 38 30 30 48 21 75 80 40 21 8 53 9 26 30 34 81 71 71 51 23 75 33 41 23 32 5 8
-+66 40 72 40 16 66 45 14 48 34 21 41 27 3 55 27 37 23 41 65 4 57 51 74 22 19 75
-+42 16 19 46 16 10 48 20 19 37 41 14 57 9 17 55 38 5 60 7 46 20 43 36 39 52 20
-+10 62 45 23 46 7 35 75 29 70 35 36 34 25 12 15 84 26 10 6 71 29 79 33 32 25 59
-+76 82 64 58 7 8 19 41 74 2 53 65 24 1 55 51 36 21 79 7 ^
-+184 1 60 66 66 6 3 9 73 12 7 40 70 18 71 70 65 51 14 14 27 50 9 87 81 50 22 19
-+40 37 16 79 12 34 37 76 82 10 61 7 81 49 67 26 45 82 50 81 63 45 69 31 31 76 51
-+9 59 34 51 54 34 83 10 33 51 86 81 82 69 18 8 22 64 19 86 62 58 33 37 17 34 5
-+29 83 42 76 50 54 66 39 9 1 36 43 17 65 6 35 56 72 71 83 88 10 1 8 87 22 6 21
-+78 25 89 43 62 40 55 85 31 89 74 63 46 28 24 26 31 17 7 8 27 19 12 85 17 20 27
-+77 10 2 54 80 17 52 74 76 69 78 11 20 80 4 29 24 85 75 18 39 23 70 83 29 57 67
-+72 70 33 4 15 46 42 2 69 13 53 33 69 64 33 64 14 40 69 59 78 54 ^
-+193 1 68 43 95 53 38 58 55 28 20 16 67 48 17 86 32 44 68 67 28 16 14 79 25 15
-+72 67 50 80 18 30 10 75 1 60 45 87 78 28 95 49 63 70 59 26 6 51 73 60 65 18 26
-+8 87 5 58 31 25 57 40 46 78 57 34 78 61 36 66 57 38 80 22 32 68 71 30 74 37 81
-+66 77 66 55 2 51 24 93 61 40 68 45 61 12 63 24 89 59 52 72 43 20 20 69 36 40 88
-+46 9 62 55 77 84 20 18 6 77 15 52 39 75 3 26 4 85 17 62 29 11 92 46 58 29 59 28
-+42 80 71 96 2 49 85 37 63 4 61 14 2 53 87 25 86 6 75 76 93 41 39 93 92 42 56 41
-+63 26 28 18 77 11 50 78 79 1 12 12 91 29 13 58 5 56 92 66 59 4 39 47 95 5 5 62
-+33 13 80 27 ^
-+203 1 35 28 11 7 20 7 17 3 3 30 89 13 65 56 66 63 22 82 16 31 55 56 77 91 91 71
-+101 13 10 85 101 95 17 99 98 91 33 14 20 48 32 7 64 29 38 35 25 4 95 23 34 1 85
-+81 23 31 96 71 84 50 15 79 47 25 51 45 35 66 19 61 60 9 31 93 64 70 30 42 86 53
-+1 71 46 42 22 38 96 10 99 34 76 26 55 73 63 63 97 23 92 81 64 46 1 30 31 35 86
-+91 88 64 87 16 37 69 84 94 60 100 3 47 52 8 71 87 57 29 76 43 18 45 46 15 65 12
-+44 42 66 60 15 68 19 58 39 62 76 9 92 101 57 32 4 34 15 41 62 32 89 71 43 35 31
-+41 21 17 82 33 96 27 62 29 82 57 46 62 15 24 99 37 83 40 52 46 56 80 98 3 91 74
-+6 27 7 58 94 10 41 79 97 84 77 74 26 99 35 ^
-+212 1 26 101 17 91 45 97 80 59 102 30 68 4 85 9 4 39 16 18 85 70 11 87 62 72 78
-+38 3 41 53 82 82 35 18 13 94 64 52 39 77 59 26 9 65 46 64 98 32 29 86 79 16 63
-+54 76 56 98 16 98 78 22 72 33 103 104 52 84 12 65 15 85 101 97 84 31 51 26 100
-+100 38 80 13 2 78 7 24 44 84 103 27 7 28 16 33 99 25 103 54 14 42 62 87 92 27
-+22 42 5 52 100 84 73 72 63 24 48 56 52 23 5 17 76 31 1 95 58 43 60 50 62 30 23
-+35 79 20 35 3 72 32 45 51 87 41 84 27 79 77 70 102 15 54 15 100 8 52 69 105 3
-+30 84 42 93 66 89 69 74 24 33 42 97 4 38 99 106 13 93 6 106 74 100 54 45 21 59
-+56 37 9 50 32 75 79 31 77 9 61 1 8 68 6 60 81 7 100 99 14 61 48 25 73 26 70 72
-+94 34 ^
-+233 0 11 98 110 88 35 110 35 64 49 88 93 28 85 6 78 65 90 52 24 97 51 39 51 59
-+23 1 3 49 33 11 78 27 35 55 64 5 102 4 70 25 56 58 38 66 11 31 96 66 104 59 41
-+86 58 29 79 41 40 72 51 12 92 34 52 44 69 104 21 97 89 96 48 21 4 61 40 28 67
-+34 23 85 44 22 62 52 33 84 23 30 73 74 4 79 12 81 47 80 53 47 89 40 19 80 62 34
-+61 29 41 95 43 1 70 63 55 53 18 19 13 48 10 19 89 49 4 52 53 56 76 10 8 104 77
-+15 28 38 75 109 3 85 90 8 40 8 93 90 43 39 14 60 17 36 78 56 105 80 35 75 36 58
-+82 50 100 98 45 74 13 66 95 72 71 95 34 14 98 72 33 38 37 52 6 14 107 59 3 29
-+61 67 98 92 5 93 17 98 36 87 41 75 71 57 88 17 25 91 84 3 58 20 92 69 51 50 36
-+31 14 25 18 30 18 1 41 104 30 82 59 87 70 34 96 28 47 62 81 103 48 ^
-+234 1 63 90 108 108 102 64 82 88 4 111 76 97 22 1 108 41 34 91 33 20 25 24 26 8
-+83 11 31 7 85 109 106 4 105 85 68 28 33 99 53 8 16 12 11 74 17 83 66 70 16 30 9
-+67 68 34 24 81 47 92 72 47 37 33 38 92 17 8 28 88 22 62 69 32 89 75 3 72 96 85
-+13 105 24 38 37 94 115 83 72 108 114 24 93 76 103 60 99 102 9 43 10 59 95 46 33
-+93 15 26 69 44 2 86 107 55 45 61 65 92 66 9 55 39 70 83 29 98 67 13 111 15 20
-+31 62 8 2 51 20 19 33 44 14 115 71 112 97 10 41 28 53 51 26 57 15 38 98 55 106
-+22 56 31 50 95 107 110 84 70 10 108 96 73 100 25 36 55 88 71 63 96 30 90 96 79
-+22 7 30 23 28 59 89 8 51 99 47 86 34 18 43 65 98 104 107 49 7 79 71 8 57 21 29
-+80 2 74 78 44 57 9 61 22 13 68 52 91 74 98 43 30 58 68 95 101 72 102 76 42 99
-+61 ^
-+249 0 27 117 45 119 80 2 59 52 8 76 20 94 102 69 96 42 46 106 67 9 110 89 71 69
-+34 31 15 85 16 29 100 82 37 62 68 95 108 44 23 114 34 36 56 93 11 30 96 12 31
-+67 14 114 14 66 70 30 81 46 53 119 85 6 104 47 92 72 70 5 70 15 115 68 105 33
-+97 13 85 106 14 61 29 22 86 45 57 69 91 38 38 28 66 13 60 95 103 3 15 5 113 38
-+23 62 5 65 94 107 73 104 37 47 102 117 3 78 35 7 95 56 78 45 52 28 46 43 37 32
-+53 19 55 29 47 97 76 115 83 71 11 45 62 73 99 116 2 24 116 7 28 41 2 29 37 52
-+23 5 118 79 31 57 89 61 24 101 78 50 93 73 41 7 33 45 47 24 1 48 73 36 3 25 87
-+46 28 108 54 68 53 67 119 28 36 118 104 42 88 27 112 4 74 85 1 63 39 97 71 74
-+75 76 10 49 12 79 11 50 103 118 94 117 118 37 27 12 94 60 28 51 47 82 110 17 15
-+105 23 52 43 12 21 22 81 41 12 74 90 42 108 117 98 67 4 69 85 ^
-+243 0 76 81 26 101 13 68 62 106 87 19 98 32 81 63 79 93 31 121 123 75 52 11 66
-+41 54 87 38 5 104 62 51 38 55 29 31 120 44 16 48 94 46 105 91 66 78 27 43 6 64
-+2 55 79 75 84 113 22 4 113 109 31 33 17 96 11 29 63 98 103 107 116 34 14 9 95
-+38 18 51 75 33 109 118 55 66 4 76 7 75 70 82 74 23 1 26 69 40 112 99 47 65 31
-+70 119 52 103 88 85 86 28 16 12 76 25 22 78 64 21 86 27 61 77 72 108 2 18 106
-+119 121 54 16 85 72 2 73 26 88 66 60 80 35 24 117 63 24 44 67 52 122 119 33 72
-+16 99 98 69 54 19 42 28 53 114 32 117 81 100 57 49 123 56 21 68 80 53 95 1 45
-+95 107 98 87 1 27 24 99 116 16 67 1 113 91 84 25 40 25 72 3 28 90 87 112 80 16
-+117 45 77 36 90 105 59 88 122 64 108 108 71 98 18 50 115 93 105 77 35 6 46 55
-+47 102 4 26 87 111 120 81 113 4 57 105 3 84 94 115 61 73 ^
-+255 1 91 47 51 9 57 9 55 94 61 61 68 46 107 6 35 81 114 78 96 74 14 89 73 67 67
-+69 113 107 11 98 113 109 20 92 17 67 70 88 57 10 124 9 60 122 93 91 45 7 15 24
-+51 5 98 115 24 49 90 104 117 66 128 94 64 80 12 43 91 46 111 59 58 77 30 14 88
-+60 123 68 41 44 68 40 104 118 41 43 93 90 105 92 16 127 26 54 125 114 79 71 24
-+48 21 25 118 40 103 49 91 44 67 65 25 119 109 18 48 23 69 112 38 61 64 87 84
-+104 119 110 122 92 22 1 8 83 34 100 32 62 41 46 112 34 102 76 56 39 4 127 30 13
-+19 110 124 7 16 128 95 4 124 11 104 116 126 49 95 3 55 96 70 90 101 4 122 96 75
-+118 39 128 99 92 18 42 20 87 83 35 75 111 61 67 71 28 101 9 56 34 105 95 71 23
-+73 71 26 57 15 23 76 55 99 89 128 98 117 68 43 88 62 38 62 39 2 83 36 15 26 60
-+128 96 73 74 10 1 12 42 22 2 77 33 33 32 57 13 14 82 57 12 39 3 58 80 14 87 85
-+44 69 109 119 ^
-+283 0 102 55 53 41 60 88 25 67 58 76 44 22 68 118 108 40 95 96 81 90 85 28 77
-+18 11 37 72 93 60 110 124 119 95 131 91 37 109 126 8 73 69 72 80 17 83 5 76 20
-+32 15 10 1 103 18 22 116 98 9 51 104 102 44 33 15 12 24 31 89 1 6 28 101 8 64
-+72 106 30 5 52 89 111 39 108 64 85 17 57 124 22 105 78 115 3 40 108 66 108 77
-+128 103 44 35 38 13 95 10 111 63 98 117 61 51 126 69 96 70 70 59 39 13 97 33
-+112 2 77 7 123 70 83 29 66 67 49 79 19 104 115 14 60 2 55 40 71 33 28 114 51 91
-+17 46 45 128 57 87 62 25 115 38 50 55 90 74 8 51 102 79 43 94 36 122 94 12 41
-+36 25 104 91 24 7 99 80 30 126 32 63 122 107 114 27 28 79 41 12 35 51 115 122
-+70 22 79 65 2 88 27 17 59 15 23 44 57 5 65 6 26 78 80 125 93 84 100 45 22 129
-+68 36 111 74 118 11 50 42 120 47 21 8 86 112 26 67 60 99 45 93 47 8 38 59 52 56
-+124 20 82 18 117 24 18 46 106 19 117 26 41 47 45 130 7 15 1 4 5 100 10 85 50 44
-+11 48 92 119 108 42 118 125 ^
-+272 0 8 61 99 70 96 20 87 123 134 82 22 2 110 118 33 86 5 7 5 94 56 15 60 96 54
-+13 22 55 99 4 25 105 17 37 69 10 38 117 117 30 70 13 9 109 115 62 94 52 66 117
-+100 135 7 75 23 5 81 110 31 118 29 1 62 11 41 88 109 119 102 37 3 30 123 47 31
-+56 134 29 124 116 118 99 21 56 77 91 23 37 135 81 44 51 67 95 51 133 30 57 67
-+116 122 48 100 7 132 97 106 69 93 4 95 125 102 103 119 81 57 133 96 37 118 50
-+117 113 81 127 17 45 103 32 121 129 60 43 65 127 30 36 132 110 52 53 35 71 12
-+76 22 72 130 112 99 76 26 21 73 63 63 97 23 58 115 132 114 1 132 31 35 18 23 54
-+30 53 118 37 35 84 94 60 100 3 47 18 110 105 87 57 63 76 43 52 45 46 49 65 12
-+10 42 66 60 117 34 19 92 5 28 76 9 126 101 125 32 38 34 15 7 62 32 21 3 43 69
-+31 109 123 51 116 135 130 129 130 63 14 57 80 62 15 126 31 105 83 108 120 80
-+124 46 98 105 91 6 6 27 7 58 128 78 7 79 63 84 77 74 128 65 61 95 121 17 24 123
-+117 51 122 ^
-+284 0 44 71 43 20 126 58 53 47 98 18 19 119 93 29 70 39 94 112 44 115 135 98 82
-+10 67 29 102 113 68 80 19 75 1 91 114 87 80 7 40 37 86 120 16 104 136 117 82
-+138 32 65 114 119 137 121 8 12 46 126 26 119 73 130 60 76 113 100 14 133 26 116
-+34 120 80 95 84 53 15 24 44 51 4 10 23 77 24 99 66 37 54 63 42 136 21 34 76 5
-+17 128 101 1 59 40 113 112 32 97 31 93 105 79 91 18 39 1 103 132 51 68 124 111
-+13 97 43 128 69 84 85 72 15 12 26 87 16 16 92 101 13 77 4 118 89 103 56 42 16
-+60 44 39 126 46 18 83 93 41 105 3 82 106 115 91 6 4 54 115 15 120 109 113 48 41
-+9 95 20 62 67 105 111 25 132 7 116 46 138 44 83 61 124 131 35 107 6 109 81 114
-+67 41 137 77 56 74 73 34 12 14 69 52 11 98 47 54 83 81 6 1 15 88 35 139 80 83
-+49 89 27 47 130 92 133 87 51 112 76 49 109 49 57 93 73 22 117 50 64 58 97 139
-+36 131 111 133 58 33 8 88 55 38 90 46 30 118 57 29 82 74 41 117 38 46 94 92 5
-+105 15 117 70 103 68 60 120 48 21 110 85 40 81 66 ^
-+291 0 46 113 52 134 79 74 64 57 18 23 9 52 8 16 103 57 138 59 59 65 92 2 7 130
-+92 8 34 40 86 131 140 100 112 4 42 1 110 108 43 37 15 67 19 35 94 61 130 98 35
-+88 34 65 104 56 126 118 50 87 10 81 109 90 86 118 32 6 114 88 39 38 39 62 3 12
-+134 72 137 35 75 81 115 106 140 112 11 123 41 103 45 95 84 71 107 13 26 110 96
-+62 16 109 84 59 53 38 27 8 28 13 32 137 17 138 41 122 36 99 65 99 83 36 112 29
-+49 70 96 126 136 131 116 3 18 17 126 142 14 37 141 141 123 42 13 20 83 42 139
-+83 54 49 58 42 7 137 29 48 16 121 127 34 52 140 106 128 58 36 124 83 24 69 54
-+61 112 17 6 95 97 24 57 86 124 59 71 119 67 1 109 54 68 49 57 132 32 5 71 113
-+40 80 104 75 106 133 31 126 130 104 62 9 39 44 66 116 141 135 96 132 19 41 121
-+126 124 77 8 4 60 82 6 101 124 89 51 123 48 40 85 77 21 112 10 69 66 115 87 16
-+108 30 84 65 80 103 32 131 134 73 47 10 63 39 50 93 37 135 114 69 48 34 58 23
-+27 133 37 9 40 98 41 115 99 70 83 29 42 67 133 55 79 80 91 122 12 2 115 112 47 ^
-+293 1 33 13 99 138 1 42 89 118 87 113 99 12 134 142 100 38 5 55 75 14 110 108
-+42 64 130 79 138 62 64 69 57 11 123 25 59 16 111 94 24 65 30 51 119 48 107 92
-+84 69 28 136 143 54 20 6 70 47 142 64 4 65 59 73 99 134 146 102 125 116 57 137
-+137 72 48 128 78 5 80 63 54 85 30 22 129 68 21 21 74 28 128 107 27 60 2 93 95
-+71 37 11 37 15 39 102 3 104 65 80 59 52 113 34 20 67 60 27 81 135 46 106 106
-+102 68 128 17 15 100 124 15 43 136 122 100 67 142 35 14 53 120 2 89 93 99 73 9
-+122 39 77 15 96 90 43 79 134 60 92 105 55 96 31 119 77 97 72 23 140 38 30 43 83
-+136 88 107 117 72 109 118 58 91 119 73 95 100 59 138 123 54 49 143 50 133 66
-+106 45 80 88 42 93 5 59 77 101 74 110 104 40 92 19 77 76 86 102 129 3 144 101
-+139 134 56 90 18 91 94 85 55 10 137 11 58 1 107 113 70 22 7 56 29 143 111 8 46
-+45 116 122 129 89 7 121 53 95 14 49 118 62 125 91 37 97 15 35 100 63 140 63 50
-+51 58 26 127 6 45 59 102 121 114 85 141 135 10 72 19 106 66 66 41 53 13 38 1 21
-+103 50 108 46 119 ^
-+297 1 46 31 132 112 28 63 124 97 129 43 40 72 99 107 132 137 96 139 99 145 121
-+144 118 37 81 39 94 60 55 109 47 109 110 75 42 12 139 137 43 128 106 107 19 126
-+12 101 148 127 15 117 125 125 62 96 13 76 70 96 101 110 138 8 95 76 143 17 32
-+97 79 149 39 31 94 123 21 41 135 55 84 70 33 135 118 50 62 121 81 1 45 144 93
-+60 5 64 137 8 105 91 82 67 27 113 119 53 18 98 79 48 84 32 135 128 5 1 20 76 17
-+85 108 72 36 141 140 49 150 105 104 3 149 14 54 18 148 64 49 125 37 28 28 101
-+22 104 91 32 82 117 12 114 69 58 2 58 115 9 108 47 59 65 14 92 7 4 86 98 16 82
-+92 95 38 94 10 10 48 97 104 66 115 97 142 115 122 119 40 97 16 32 47 34 88 89
-+26 50 12 76 80 51 40 9 133 24 44 40 122 84 108 22 142 140 99 44 15 54 8 42 125
-+150 130 21 79 124 62 46 119 15 29 91 57 150 42 138 71 61 68 80 114 6 1 70 121
-+18 35 113 56 87 86 10 73 14 29 41 72 89 1 133 87 101 123 59 90 142 77 133 52 78
-+48 34 138 134 27 17 60 131 147 61 93 148 39 132 49 62 71 36 91 4 139 49 100 120
-+43 113 144 30 94 73 127 40 125 ^
-+313 1 35 97 95 76 105 88 32 138 30 69 61 40 47 21 107 6 39 81 114 53 125 53 147
-+14 4 73 146 96 98 13 136 11 98 117 138 153 67 146 71 99 88 7 139 24 13 35 47 97
-+145 74 36 119 3 51 84 48 119 53 49 15 79 17 120 103 148 64 30 41 97 120 75 111
-+63 58 131 134 18 13 10 48 18 16 48 43 15 54 18 41 47 122 144 80 92 145 77 1 33
-+89 54 46 78 48 21 54 43 40 53 24 16 73 42 94 29 44 34 151 152 23 123 12 142 140
-+43 37 88 29 19 35 72 96 151 130 62 112 34 36 91 120 50 112 138 2 105 60 68 137
-+131 5 17 19 139 74 11 120 78 149 58 128 15 104 16 126 78 20 57 134 71 49 90 76
-+108 126 100 54 68 39 132 153 42 147 146 124 62 87 35 75 61 65 46 100 82 105 113
-+31 63 5 95 54 71 77 127 150 80 36 144 2 130 59 74 39 3 152 121 122 18 117 12
-+117 141 118 135 62 36 69 5 39 53 150 52 153 143 30 66 96 126 131 56 137 8 7 86
-+142 14 7 111 141 93 136 137 134 43 12 89 23 44 9 152 146 121 97 19 38 110 91 67
-+14 32 110 66 68 8 130 84 73 118 59 24 41 72 121 150 55 37 138 27 104 66 124 9
-+51 109 47 125 109 148 8 29 47 72 146 149 61 93 10 20 54 15 76 133 125 106 110
-+67 ^
-+330 0 23 9 26 136 27 51 115 122 44 106 6 146 108 113 85 51 8 96 47 56 137 62 59
-+89 143 71 140 14 85 156 139 99 154 30 53 115 35 147 108 148 58 52 28 103 19 92
-+95 152 152 10 11 13 155 67 11 83 101 69 153 152 45 141 14 120 129 140 119 59 2
-+89 73 70 83 29 16 67 81 29 1 54 65 96 117 2 37 47 128 33 3 89 108 98 139 49 78
-+27 103 39 119 94 132 90 38 132 55 65 131 90 58 2 54 100 69 118 22 44 19 7 148
-+93 25 29 123 81 64 131 55 30 1 89 38 97 82 64 9 28 86 123 151 10 133 40 154 102
-+4 111 65 9 63 59 124 116 72 105 76 57 137 97 32 145 108 78 112 50 43 34 75 20
-+22 129 68 11 118 74 125 118 57 17 20 129 53 65 61 144 1 17 142 156 52 100 54 15
-+20 59 52 63 131 20 57 124 31 125 46 106 76 92 8 98 154 152 80 114 15 140 136
-+112 100 17 92 25 151 150 80 99 69 83 49 43 156 102 19 57 122 96 30 3 39 134 40
-+32 75 5 76 127 138 99 17 57 52 150 130 18 127 33 23 116 107 78 77 77 42 69 68
-+48 41 69 33 75 40 49 128 103 4 146 93 10 83 66 96 152 30 38 12 33 5 39 47 41 34
-+60 74 20 42 156 67 46 56 102 89 3 124 81 99 104 56 50 8 61 74 55 15 87 108 28
-+138 47 93 60 2 124 46 126 103 91 145 36 25 116 122 51 ^
-+322 0 75 7 107 158 81 105 154 90 20 125 77 114 69 92 7 58 21 98 154 50 128 149
-+117 127 153 45 3 18 121 86 29 71 79 101 2 5 22 143 10 27 53 146 157 148 112 33
-+22 80 123 24 147 1 112 82 159 63 74 97 109 33 151 32 89 87 132 117 46 129 59
-+115 91 114 118 37 21 9 94 60 25 89 47 79 110 55 12 143 99 87 43 88 56 57 160 76
-+12 71 128 77 146 117 95 105 42 66 3 76 20 76 101 100 118 149 45 26 143 148 32
-+57 39 129 19 31 84 123 1 152 135 5 54 30 13 125 68 30 62 101 51 142 5 94 83 20
-+116 24 107 109 105 91 42 17 27 93 69 3 139 68 79 38 84 2 85 128 126 122 131 46
-+17 35 98 42 26 111 100 29 120 55 84 114 109 145 14 18 138 14 9 85 7 18 129 91 2
-+94 51 133 82 87 123 64 39 8 103 38 75 110 78 7 9 45 115 42 138 135 86 78 16 62
-+52 75 159 54 151 121 149 77 74 16 85 47 102 105 82 119 10 67 137 153 148 135 28
-+49 26 151 153 36 80 11 130 113 24 44 30 102 24 58 133 122 140 99 24 156 54 119
-+42 115 140 90 132 19 94 2 157 99 136 19 71 7 130 153 108 51 21 58 70 74 137 1
-+40 111 149 5 103 6 27 76 141 23 125 140 1 72 29 152 103 87 51 93 29 80 132 77
-+123 153 68 159 14 98 114 158 121 158 81 131 ^
-+322 0 35 93 109 125 119 10 10 19 135 26 4 74 135 35 120 129 113 92 17 29 47 88
-+14 159 149 87 45 36 75 68 22 138 20 59 61 144 151 11 107 6 153 81 114 43 85 157
-+97 148 118 73 126 56 58 137 96 11 98 67 98 103 57 146 21 59 88 151 139 148 127
-+25 17 47 115 34 160 109 107 51 64 28 69 13 49 149 69 141 90 93 118 64 10 1 67
-+80 35 111 13 58 101 124 132 147 154 18 162 6 162 33 5 34 142 41 161 82 114 70
-+92 145 57 155 137 114 79 44 36 48 48 21 14 13 40 33 14 150 33 32 54 143 14 4
-+101 142 23 93 136 132 120 147 17 38 163 143 5 52 46 151 130 32 72 34 124 150 51
-+100 112 128 126 65 10 28 87 81 159 131 19 99 54 125 110 58 119 28 78 129 104
-+140 126 38 154 27 114 61 153 90 66 98 76 50 158 48 39 82 123 22 147 136 114 52
-+37 35 75 41 15 150 60 52 55 103 21 23 129 95 24 71 47 97 130 50 140 144 106 100
-+9 64 19 117 122 71 92 8 77 156 97 121 98 85 2 36 39 109 143 23 120 156 133 93
-+154 36 66 116 131 160 127 162 161 46 142 14 141 81 141 63 86 117 104 3 146 39
-+127 34 133 102 106 91 57 9 28 60 61 7 158 12 80 26 8 122 80 44 63 68 49 158 21
-+32 81 150 15 141 108 161 64 46 124 123 31 99 27 105 109 98 112 144 ^
-+336 1 34 161 107 149 48 67 138 109 156 104 37 133 60 80 84 81 160 9 16 96 164 1
-+95 112 4 86 163 116 98 103 55 31 8 56 37 36 127 32 9 89 103 31 100 161 85 106
-+119 89 154 43 115 162 137 108 128 38 42 155 103 9 62 65 102 122 10 138 160 125
-+47 158 43 91 69 123 132 35 121 4 110 89 130 69 29 139 69 53 70 83 29 163 67 41
-+9 108 34 45 76 87 2 144 164 98 33 160 79 78 48 89 9 38 134 93 146 79 54 122 80
-+38 112 55 55 101 70 8 129 44 70 59 98 149 24 136 124 138 63 25 166 83 51 34 91
-+45 30 118 59 28 87 72 44 116 28 36 103 101 113 10 114 62 111 71 65 126 53 19
-+114 86 42 85 36 57 137 57 159 95 88 78 72 20 23 14 65 10 22 129 68 1 68 74 75
-+108 7 7 147 109 13 35 51 104 158 164 122 126 2 50 4 132 127 59 52 13 81 20 47
-+107 74 148 115 46 106 46 82 115 68 144 142 60 104 15 90 136 102 100 134 42 15
-+141 100 40 49 49 73 166 13 156 82 166 37 82 96 137 130 166 134 20 139 45 122 56
-+107 98 79 124 17 32 130 120 165 77 23 130 96 67 68 47 37 12 29 18 38 158 19 160
-+55 147 39 118 83 121 96 43 137 33 66 86 112 147 155 149 140 5 19 17 148 161 10
-+44 159 146 57 16 26 102 49 3 104 61 59 74 56 10 165 31 54 25 142 157 37 58 165
-+128 154 73 50 149 94 137 ^
-+330 1 61 51 65 132 23 169 116 122 14 66 7 98 131 72 69 127 72 163 125 68 69 51
-+47 159 31 164 71 118 50 83 113 81 127 153 45 137 134 121 68 163 26 43 65 127
-+166 138 98 144 18 53 137 139 148 76 158 4 62 78 167 102 144 94 55 141 63 29 97
-+91 24 115 166 80 69 132 99 1 120 23 88 64 87 118 37 137 152 94 60 168 71 47 52
-+110 37 155 125 63 42 43 52 11 12 151 31 12 44 110 32 128 117 68 87 24 39 164 76
-+145 58 101 91 100 140 151 143 130 32 21 3 111 1 31 75 123 153 116 135 130 27
-+164 165 116 23 12 62 83 24 133 139 49 74 154 80 158 80 64 105 91 6 142 27 75 24
-+128 112 41 79 29 84 145 40 128 99 95 95 19 17 160 89 15 17 84 64 11 93 10 66 78
-+73 127 148 18 129 139 143 49 150 9 84 82 154 85 15 88 82 60 87 19 12 133 58 20
-+39 65 51 141 134 27 70 167 120 117 86 60 16 44 16 57 132 18 142 85 104 59 47
-+141 58 2 66 96 46 119 153 40 110 126 103 90 144 13 26 106 144 80 145 134 103 95
-+24 44 21 84 140 13 97 104 140 99 6 147 54 83 42 106 131 54 96 135 67 118 121 81
-+109 10 53 132 112 117 81 33 155 49 61 38 119 1 13 102 131 148 94 131 143 67 123
-+148 89 104 135 72 145 152 76 87 6 66 2 71 123 77 114 108 59 123 166 62 96 140
-+94 149 116 169 ^
-+349 0 125 17 93 82 80 110 156 147 156 99 154 4 29 90 163 120 84 113 56 8 157 29
-+61 169 141 113 78 48 50 13 138 11 50 61 99 106 2 107 6 117 81 114 34 49 112 52
-+130 82 73 108 20 22 110 60 11 98 22 62 58 48 146 149 23 88 142 139 121 91 16
-+163 2 88 171 133 100 62 51 46 10 24 150 49 131 60 114 63 84 91 64 165 138 40 44
-+172 111 141 58 74 115 96 129 145 164 153 170 126 24 169 16 115 41 125 46 87 61
-+92 145 39 155 92 78 70 35 27 21 48 21 151 159 40 15 5 132 170 23 18 107 160 150
-+56 133 23 66 109 123 102 102 172 166 145 116 151 34 1 151 130 5 36 34 97 114 15
-+82 128 112 119 99 29 138 165 42 36 159 95 19 63 36 89 101 40 92 1 33 93 104 113
-+126 2 136 96 52 108 90 57 89 31 5 113 30 39 37 96 4 147 127 105 43 165 35 75 23
-+143 105 24 25 10 94 12 160 102 95 170 71 20 70 112 23 95 144 61 73 137 55 1 81
-+95 26 65 172 41 147 79 103 80 40 121 36 12 64 98 169 93 111 115 48 127 9 39 107
-+131 115 118 162 161 10 142 14 123 54 141 36 41 99 77 140 128 167 82 25 106 57
-+70 64 21 19 15 34 126 149 167 53 163 127 86 35 8 54 23 40 140 3 169 45 150 152
-+96 81 143 28 28 124 87 13 90 9 87 109 53 67 164 28 131 89 149 42 55 126 79 132
-+74 19 133 30 68 72 75 148 9 10 72 152 144 83 106 153 74 163 98 152 ^
-+375 1 94 28 13 8 20 28 18 118 5 140 89 67 171 64 152 85 61 101 80 154 149 34
-+115 135 128 108 110 20 33 128 103 35 38 57 95 10 111 151 98 29 149 7 82 69 96
-+114 26 103 171 101 53 121 24 2 121 51 35 70 83 29 154 67 5 167 63 16 27 58 60 2
-+99 128 71 33 160 70 51 3 44 149 2 89 84 101 43 18 113 71 38 94 55 46 74 52 139
-+102 35 43 50 80 122 6 100 88 129 36 25 148 47 24 7 55 36 30 82 32 19 78 63 26
-+71 28 167 85 56 167 95 159 78 26 66 35 65 90 44 159 105 59 15 67 57 137 21 132
-+50 70 78 36 169 5 172 56 1 22 129 68 168 23 74 30 99 138 174 120 91 153 8 42 68
-+158 155 104 99 133 5 135 96 82 59 52 144 36 20 38 62 29 112 106 46 106 19 73 70
-+41 135 133 42 95 15 45 136 93 100 98 173 6 132 55 4 4 31 64 130 162 156 64 157
-+19 46 96 92 103 139 134 2 94 18 86 38 89 62 61 79 157 14 112 111 156 32 14 85
-+78 31 59 20 1 161 169 149 29 122 150 133 37 102 30 109 65 85 51 174 110 164 66
-+77 76 111 119 131 95 5 1 166 103 134 141 17 158 123 137 48 165 175 102 13 3 86
-+43 23 47 56 150 165 4 36 174 115 157 168 13 147 119 109 55 41 140 67 27 31 27
-+53 126 17 163 116 122 160 60 7 92 113 66 45 109 60 151 125 62 39 39 17 153 13
-+152 53 94 50 53 89 57 127 153 45 119 104 121 56 145 172 19 41 103 166 108 68
-+126 12 53 131 127 148 52 134 168 50 48 155 72 132 82 37 129 63 175 160 ^
-+366 1 73 15 79 139 71 51 132 81 135 111 166 61 37 60 118 37 92 134 94 60 150 53
-+47 25 110 19 137 107 27 176 43 16 145 146 142 165 12 17 92 166 110 117 41 69 6
-+12 164 76 109 40 101 82 82 131 134 115 143 112 32 164 146 93 162 31 66 123 144
-+80 135 94 137 156 107 157 173 62 65 176 124 112 4 65 127 44 131 53 19 105 91
-+149 106 27 57 158 92 85 14 79 20 84 127 174 128 72 68 59 171 17 124 80 167 8 57
-+28 172 66 144 48 42 37 109 121 18 120 103 116 13 132 39 73 145 76 158 43 82 33
-+51 153 164 97 13 2 3 20 24 114 98 9 25 131 102 99 86 42 16 26 159 39 105 161
-+133 49 59 41 20 105 31 136 30 87 10 119 135 13 83 99 58 45 99 156 26 61 135 143
-+80 118 107 76 77 24 44 12 66 95 147 61 86 140 99 167 138 54 47 42 97 122 18 60
-+90 40 73 85 63 82 1 35 96 94 81 54 15 128 40 52 2 101 1 165 93 113 130 85 95 98
-+58 105 112 53 68 108 72 100 152 49 87 140 39 154 62 114 77 105 63 50 87 157 26
-+78 122 67 140 71 170 119 5 93 64 50 104 144 129 138 75 130 4 178 60 139 120 54
-+113 32 2 133 17 43 163 129 89 72 149 155 30 38 7 138 5 44 61 69 76 175 107 6 93
-+81 114 28 25 82 22 118 58 73 96 175 177 92 36 11 98 171 38 28 42 146 125 178 88
-+136 139 103 67 10 151 151 70 153 115 94 32 51 34 177 173 132 49 119 54 96 45 78
-+73 64 159 120 22 20 154 111 117 58 56 109 72 143 ^
-+372 1 136 146 144 170 90 15 169 180 88 41 89 10 60 52 92 145 21 155 47 42 61 26
-+18 176 48 21 124 141 40 179 178 114 143 14 164 71 142 132 11 124 23 39 82 114
-+84 57 163 130 127 89 133 16 138 151 130 160 34 70 78 161 64 92 112 110 72 175
-+102 138 179 173 159 59 19 27 18 53 92 22 65 156 170 57 104 86 126 148 118 155
-+78 43 63 90 48 80 168 142 68 12 39 174 69 168 147 118 96 34 129 35 75 5 107 60
-+170 180 147 85 3 133 75 95 152 71 175 43 94 178 50 144 16 46 101 46 165 45 68
-+163 38 172 5 138 61 85 62 177 76 36 167 19 53 151 66 66 97 3 100 164 12 98 131
-+70 109 162 161 156 142 14 105 27 141 9 178 81 50 113 110 131 37 16 79 12 34 37
-+167 173 10 152 7 81 140 158 26 136 82 50 172 154 45 160 31 122 167 142 9 150
-+125 51 54 125 174 10 124 51 177 81 173 69 109 8 22 155 19 86 62 149 33 37 108
-+34 96 29 174 133 167 50 54 66 130 9 1 36 134 108 65 97 126 56 163 71 83 88 10 1
-+8 178 22 6 112 169 116 89 43 153 40 146 85 31 89 74 154 137 28 115 117 122 108
-+98 8 27 110 103 176 17 20 27 77 10 93 145 80 17 143 165 76 69 78 102 20 91 171
-+95 29 115 176 166 109 39 23 70 83 29 148 67 163 161 33 4 15 46 42 2 69 104 53
-+33 160 64 33 155 14 131 160 59 78 71 19 176 107 65 38 82 55 40 56 40 115 84 29
-+25 44 68 104 176 76 64 123 18 25 136 23 6 171 31 30 30 58 14 13 72 57 14 41 177
-+^
-+363 0 135 69 16 167 79 143 46 178 26 3 65 58 36 135 97 35 175 51 152 57 137 173
-+108 10 54 78 4 153 173 164 48 177 22 129 68 168 167 74 174 91 106 174 96 75 129
-+168 34 36 158 147 88 75 101 149 103 64 42 59 52 112 180 20 30 22 173 80 98 46
-+106 179 65 30 17 127 125 26 87 15 5 136 85 100 66 141 182 124 15 156 148 15 56
-+98 146 156 48 149 3 14 96 52 79 115 134 170 54 178 54 22 73 30 45 39 133 182 96
-+103 148 176 6 45 62 183 51 180 153 145 145 117 21 90 118 109 21 62 22 101 49 53
-+11 142 86 132 66 69 44 79 87 115 55 5 169 150 63 110 109 177 150 91 129 40 149
-+159 102 165 3 70 27 175 23 56 126 165 164 20 158 91 157 136 157 131 111 69 39
-+33 132 43 19 175 179 37 118 9 155 116 122 128 52 7 84 89 58 13 85 44 135 125 54
-+183 23 161 145 173 136 29 62 50 13 57 25 127 153 45 95 64 121 40 121 140 171 9
-+71 166 68 28 102 4 53 123 111 148 20 102 160 34 8 139 32 116 66 13 113 63 143
-+97 63 10 59 124 66 41 132 71 115 106 151 46 22 45 118 37 67 124 94 60 140 43 47
-+10 110 9 127 97 7 156 43 180 125 126 137 145 12 2 82 146 100 117 26 59 180 181
-+164 76 89 30 101 77 72 126 114 95 143 102 32 149 131 83 157 31 61 123 139 60
-+135 74 169 122 151 102 137 168 62 55 166 119 97 163 60 112 24 116 38 178 105 91
-+134 86 27 47 138 72 70 183 79 15 84 117 154 128 57 53 39 161 88 ^
-+393 1 92 72 151 33 183 164 42 112 32 10 5 93 97 18 112 71 92 168 116 179 186 65
-+137 68 134 3 82 9 19 121 148 65 160 173 158 167 90 66 180 172 99 86 83 86 26 16
-+10 135 23 81 137 125 17 19 25 183 73 7 104 185 79 165 119 119 176 59 75 18 5 59
-+132 26 21 127 119 80 94 83 52 61 24 44 4 50 55 115 29 70 140 99 159 130 54 15
-+42 89 114 173 28 50 16 33 53 47 58 180 19 64 78 49 30 186 104 32 44 157 85 1
-+149 85 97 114 77 63 58 50 89 80 21 36 84 72 60 152 25 87 108 15 138 54 106 77
-+97 23 42 55 149 181 62 106 43 132 31 138 111 176 93 40 10 96 128 105 114 43 98
-+4 146 20 107 120 14 113 181 101 1 19 155 113 57 64 117 131 6 22 186 138 184 36
-+61 29 36 175 107 6 61 81 114 20 180 42 169 102 26 73 80 151 153 68 4 11 98 139
-+6 175 34 146 93 154 88 128 139 79 35 2 135 119 46 129 91 86 179 51 18 169 141
-+108 49 103 46 72 21 70 49 64 151 96 185 175 130 111 85 58 32 101 40 101 131 136
-+139 170 70 10 169 175 73 41 69 177 45 47 92 145 11 155 22 22 56 21 13 166 48 21
-+109 131 40 174 178 104 128 9 149 51 132 122 173 119 23 24 67 109 74 32 158 110
-+117 74 123 6 118 151 130 150 167 34 55 58 146 54 72 112 105 57 160 82 123 159
-+153 159 39 19 7 8 33 87 12 50 146 150 37 104 71 126 133 108 145 68 38 38 90 43
-+75 148 122 43 2 39 154 54 163 147 113 91 29 109 35 75 182 87 35 155 170 127 80
-+185 118 60 95 142 71 165 28 84 168 25 144 178 31 81 41 160 25 53 143 ^
-+381 1 14 172 163 130 45 69 46 145 36 36 151 169 13 135 42 26 81 153 76 148 178
-+90 131 30 101 162 161 132 142 14 89 3 141 175 146 65 26 89 94 99 187 8 55 162 2
-+13 143 173 2 120 173 41 132 150 2 112 42 18 140 130 37 128 23 106 159 118 167
-+150 101 11 30 109 150 184 124 19 169 73 165 53 109 158 172 147 11 46 38 149 25
-+21 92 184 64 179 158 133 135 34 38 58 114 9 183 4 118 76 49 89 102 40 163 47 75
-+80 176 175 8 154 14 180 104 153 84 89 11 129 8 138 85 181 73 66 154 121 20 115
-+93 114 108 82 182 19 86 103 176 183 186 177 53 10 69 137 56 1 135 141 68 69 54
-+86 12 75 171 87 187 107 144 150 93 23 7 70 83 29 140 67 139 153 183 178 189 30
-+18 2 29 72 29 33 160 56 9 123 164 107 136 19 70 31 177 152 99 57 38 66 55 32 32
-+24 83 60 21 1 36 52 80 168 44 32 115 184 25 120 181 172 155 189 22 30 26 180 5
-+64 49 188 1 28 111 57 176 167 67 131 22 160 186 169 65 34 30 117 91 17 163 39
-+134 57 137 155 90 170 42 78 170 141 167 158 42 177 22 129 68 168 143 74 150 85
-+82 174 78 63 111 156 28 12 158 141 76 57 77 125 79 40 12 59 52 88 156 20 24 182
-+149 56 92 46 106 167 59 189 121 119 14 81 15 165 136 79 100 42 117 182 118 175
-+138 124 3 50 74 134 156 36 143 181 180 96 22 61 97 134 164 24 166 30 10 61 6 33
-+9 115 176 84 97 142 152 15 50 165 45 168 135 133 127 93 15 66 94 91 9 32 16 95
-+37 29 171 118 68 108 66 63 20 55 186 ^
-+396 1 97 10 5 160 132 18 83 73 159 141 55 120 31 131 141 102 138 3 52 9 148 189
-+56 99 165 146 2 140 64 157 100 121 113 102 24 21 24 123 16 10 139 152 19 109
-+146 116 122 92 43 7 75 62 49 170 58 26 117 125 45 147 5 125 136 155 118 2 26 50
-+161 21 182 127 153 45 68 19 121 22 94 104 144 166 35 166 23 176 75 188 53 114
-+93 148 177 66 151 16 156 121 180 98 48 179 95 63 107 97 45 1 23 97 57 23 132 53
-+79 97 124 19 188 18 118 37 22 106 94 60 122 25 47 176 110 184 109 79 164 120 43
-+153 89 90 128 109 12 168 64 110 82 117 192 41 171 163 164 76 53 12 101 68 54
-+117 78 59 143 84 32 122 104 65 148 31 52 123 130 24 135 38 151 95 142 93 101
-+159 62 37 148 110 70 127 51 85 181 89 11 142 105 91 107 50 27 29 102 36 43 165
-+79 6 84 99 118 128 30 26 3 143 17 68 66 139 187 15 165 158 24 88 20 179 174 81
-+79 18 106 47 74 150 104 179 162 59 131 62 116 166 82 184 188 97 136 41 136 167
-+140 143 175 72 42 174 148 75 74 71 86 14 16 191 117 11 63 119 119 186 182 13
-+171 49 182 80 167 73 147 119 107 164 41 57 181 168 29 114 26 184 121 101 80 76
-+65 34 49 24 44 191 38 25 91 5 58 140 99 153 124 54 184 42 83 108 155 4 20 191 3
-+29 35 40 180 7 40 66 25 12 180 86 26 38 139 73 1 137 79 85 102 71 39 28 44 77
-+56 190 12 66 72 30 152 7 87 84 190 126 48 100 77 91 186 36 31 143 163 50 94 25
-+126 1 114 105 170 93 22 173 90 116 87 96 19 74 4 122 183 83 120 177 113 169 181
-+77 182 1 149 186 ^
-+384 1 25 56 85 107 177 6 186 138 184 28 61 184 191 175 107 6 29 81 114 12 156 2
-+137 86 189 73 64 127 129 44 167 11 98 107 169 143 26 146 61 130 88 120 139 55 3
-+189 119 87 22 105 67 78 147 51 2 161 109 84 49 87 38 48 192 62 25 64 143 72 169
-+151 106 111 53 58 8 93 8 85 123 120 131 170 38 2 169 167 49 41 37 153 21 39 92
-+145 190 155 177 185 48 13 5 150 48 21 85 115 40 166 178 88 104 1 125 19 116 106
-+141 111 23 43 101 58 187 150 78 101 50 107 185 86 151 130 134 143 34 31 26 122
-+38 40 112 97 33 136 50 99 127 121 159 7 19 170 187 1 79 191 26 130 118 5 104 47
-+126 109 92 129 52 30 193 90 35 67 116 90 3 181 39 122 30 155 147 105 83 21 77
-+35 75 174 55 190 131 154 95 72 185 94 36 95 126 71 149 4 68 152 180 144 146 7
-+49 33 152 188 29 111 194 172 148 125 35 59 36 125 11 36 141 149 183 125 27 1 71
-+133 61 138 168 85 131 5 96 162 161 117 142 14 79 183 141 165 126 55 11 74 84 79
-+167 3 40 142 177 193 128 173 192 100 163 16 127 145 182 97 17 193 120 115 32
-+108 18 96 154 103 152 150 86 181 15 99 135 179 124 194 164 68 160 43 109 138
-+152 142 6 21 23 149 20 11 82 164 44 159 148 133 115 24 28 53 104 9 183 179 108
-+56 39 84 87 30 163 32 70 75 166 170 8 139 9 175 99 143 64 89 186 114 183 133 85
-+161 63 61 154 111 15 115 78 109 108 72 177 14 71 103 176 173 176 157 38 10 54
-+132 41 186 130 126 63 69 39 76 7 65 171 82 172 102 124 140 83 113 ^
-+396 1 189 70 83 29 132 67 115 145 151 170 181 14 192 2 187 40 5 33 160 48 183
-+91 132 83 112 177 62 189 153 128 91 49 38 50 55 24 8 8 51 36 13 175 28 36 56
-+160 12 107 168 25 104 157 156 139 165 14 30 192 164 195 56 41 180 159 28 79 41
-+144 167 51 115 188 136 154 145 65 2 22 93 83 191 147 23 110 57 137 131 66 138
-+26 78 146 125 159 150 34 177 22 129 68 168 111 74 118 77 50 174 54 47 87 140 20
-+178 158 133 60 33 45 93 47 8 170 59 52 56 124 20 16 150 117 24 84 46 106 151 51
-+158 173 113 111 196 73 15 133 136 71 100 10 85 182 110 143 114 92 185 42 42 118
-+156 20 135 173 156 96 180 37 73 134 156 182 150 196 192 45 172 17 167 91 168 68
-+89 134 120 190 173 34 141 37 152 111 117 103 61 7 34 62 67 191 190 8 87 21 195
-+139 86 44 76 66 55 186 23 31 87 183 5 155 122 191 68 53 149 136 35 115 26 121
-+131 102 123 3 42 197 133 179 56 84 165 136 190 130 49 157 80 101 103 97 197 11
-+19 118 1 5 119 137 9 104 193 141 116 122 72 38 7 70 47 44 155 43 16 107 125 40
-+127 193 105 131 145 108 185 6 50 141 1 167 127 153 45 53 192 121 12 79 84 129
-+151 15 166 196 156 60 188 53 109 83 148 162 46 146 6 136 111 160 88 38 169 85
-+63 87 97 35 194 3 82 52 13 132 43 59 92 109 4 178 3 118 37 195 96 94 60 112 15
-+47 166 110 179 99 69 149 100 43 138 69 70 123 89 12 158 54 90 72 117 182 31 166
-+153 164 76 33 2 101 63 44 112 58 39 143 74 32 107 89 55 143 31 47 123 125 4 135
-+18 141 80 137 88 81 154 187 ^
-+406 0 23 134 103 49 99 44 64 160 68 190 114 105 91 86 22 27 15 74 8 22 151 79
-+199 84 85 90 128 9 5 175 129 17 40 59 125 187 194 144 151 3 60 6 158 153 67 58
-+18 99 19 53 129 90 179 134 52 124 55 95 138 82 170 167 69 122 13 108 160 119
-+115 161 51 14 167 120 47 60 57 86 16 184 96 197 42 98 112 165 154 199 157 21
-+168 52 146 66 126 119 93 150 20 36 153 140 194 93 26 156 114 80 80 55 44 13 35
-+24 44 191 24 190 63 177 44 140 99 146 117 54 163 42 76 101 134 176 185 177 168
-+1 21 19 180 193 12 52 197 191 173 65 19 31 118 59 1 123 72 71 88 64 11 193 37
-+63 28 169 184 45 72 195 152 186 87 56 176 112 41 93 77 84 158 29 3 136 142 36
-+80 4 119 166 86 98 163 93 1 145 83 102 66 75 191 46 4 94 155 55 120 149 113 148
-+181 49 175 180 142 87 5 51 65 92 167 196 186 138 184 23 61 164 171 175 107 6 9
-+81 114 7 141 177 117 76 174 73 54 112 114 29 152 11 98 87 154 123 21 146 41 115
-+88 115 139 40 183 189 109 67 7 90 52 73 127 51 192 156 89 69 49 77 33 33 182 57
-+10 64 138 57 159 136 91 111 33 58 193 88 188 75 118 110 126 170 18 197 169 162
-+34 41 17 138 6 34 92 145 185 155 157 170 43 8 140 48 21 70 105 40 161 178 78 89
-+196 110 199 106 96 121 106 23 185 28 96 48 167 145 58 91 35 97 180 66 151 130
-+124 128 34 16 6 107 28 20 112 92 18 121 30 84 107 101 159 187 19 155 182 181 74
-+186 11 120 98 185 104 32 126 94 82 119 42 25 173 90 30 62 96 70 178 176 39 102
-+15 150 147 100 78 16 57 35 75 169 35 170 116 144 75 146 ^
-+409 1 185 70 12 95 110 71 133 183 52 136 148 144 114 186 17 25 144 164 5 79 178
-+172 124 117 19 43 20 93 174 36 125 117 151 109 3 164 55 101 37 122 152 77 131
-+168 88 162 161 93 142 14 63 167 141 149 94 39 190 50 68 47 135 198 16 110 153
-+177 104 173 192 68 147 179 119 137 166 73 180 169 88 91 24 76 10 80 146 79 128
-+150 62 149 194 83 111 171 124 170 156 60 152 27 109 106 120 134 201 184 202 149
-+12 198 66 132 12 127 132 133 83 8 12 45 88 9 183 155 92 24 23 76 63 14 163 8 62
-+67 150 162 8 115 1 167 91 127 32 89 162 90 159 125 85 129 47 53 154 95 7 115 54
-+101 108 56 169 6 47 103 176 157 160 125 14 10 30 124 17 178 122 102 55 69 15 60
-+202 49 171 74 148 94 92 124 67 200 184 70 83 29 127 67 100 140 131 165 176 4
-+182 2 167 20 193 33 160 43 173 71 112 68 97 157 57 169 138 113 86 44 38 40 55
-+19 196 201 31 21 8 165 23 26 41 155 195 183 102 158 25 94 142 146 129 150 9 30
-+177 154 195 51 36 175 139 28 59 31 124 167 41 105 173 121 134 130 65 185 17 78
-+78 181 137 13 95 57 137 116 51 118 16 78 131 115 154 145 29 177 22 129 68 168
-+91 74 98 72 30 174 39 37 72 130 15 163 158 128 50 18 25 73 27 191 150 59 52 36
-+104 20 11 130 97 4 79 46 106 141 46 138 163 108 106 191 68 15 113 136 66 100
-+193 65 182 105 123 99 72 180 37 22 108 156 10 130 168 141 96 160 22 58 134 151
-+162 140 181 187 35 157 7 147 76 163 58 84 129 100 190 153 24 126 32 142 96 107
-+88 41 2 14 42 52 186 170 3 82 11 180 119 66 29 56 66 50 171 3 11 77 163 5 150
-+112 128 ^
-+413 1 47 25 135 129 7 108 19 107 117 102 102 3 28 190 112 165 56 63 165 122 183
-+116 28 157 52 73 89 90 169 202 12 111 185 203 91 116 200 97 193 134 116 122 44
-+31 7 63 26 37 134 22 2 93 125 33 99 186 77 124 131 94 171 183 50 113 178 146
-+127 153 45 32 164 121 203 58 56 108 130 192 166 168 128 39 188 53 102 69 148
-+141 18 139 197 108 97 132 74 24 155 71 63 59 97 21 194 180 61 45 204 132 29 31
-+85 88 188 164 187 118 37 167 82 94 60 98 1 47 152 110 172 85 55 128 72 43 117
-+41 42 116 61 12 144 40 62 58 117 168 17 159 139 164 76 5 193 101 56 30 105 30
-+11 143 60 32 86 68 41 136 31 40 123 118 181 135 195 127 59 130 81 53 147 62 13
-+124 98 34 79 39 49 145 53 180 94 105 91 71 2 27 5 54 193 7 141 79 199 84 75 70
-+128 199 195 160 119 17 20 54 115 187 184 129 146 193 40 201 143 138 57 43 18 94
-+204 38 114 80 179 114 47 119 50 80 118 82 160 152 49 112 198 88 155 104 95 151
-+36 199 162 100 27 50 47 86 195 16 179 81 192 27 83 107 150 134 194 147 1 158 32
-+131 61 111 119 83 140 5 21 133 120 174 78 26 136 109 65 80 40 29 203 25 24 44
-+191 14 170 43 162 34 140 99 141 112 54 148 42 71 96 119 161 165 167 148 186 11
-+4 180 188 197 42 182 181 168 50 14 26 103 49 1 113 67 61 78 59 196 173 32 53 8
-+154 169 30 72 175 152 176 87 36 166 102 36 88 77 79 138 24 188 131 127 26 70
-+194 114 146 66 93 158 93 191 125 78 92 51 60 176 26 4 74 135 35 120 129 113 133
-+181 29 170 170 137 77 190 46 45 77 157 191 186 138 184 18 61 144 151 175 107 6
-+194 81 114 2 126 110 ^
-+427 1 85 60 150 73 38 88 90 5 128 11 98 55 130 91 13 146 9 91 88 107 139 16 159
-+189 93 35 191 66 28 65 95 51 184 148 57 45 49 61 25 9 166 49 194 64 130 33 143
-+112 67 111 1 58 177 80 164 59 110 94 118 170 194 197 169 154 10 41 193 114 190
-+26 92 145 177 155 125 146 35 200 124 48 21 46 89 40 153 178 62 65 196 86 175 90
-+80 89 98 23 169 4 88 32 135 137 26 75 11 81 172 34 151 130 108 104 34 200 182
-+83 12 196 112 84 202 97 206 60 75 69 159 163 19 131 174 157 66 178 195 104 66
-+161 104 8 126 70 66 103 26 17 141 90 22 54 64 38 146 168 39 70 199 142 147 92
-+70 8 25 35 75 161 3 138 92 128 43 59 185 55 205 95 100 71 123 173 42 126 128
-+144 94 176 205 20 139 149 198 59 168 172 109 112 9 33 10 73 154 36 115 97 131
-+99 196 144 45 81 22 112 142 72 131 148 83 162 161 78 142 14 53 157 141 139 74
-+29 180 35 58 27 115 198 1 90 138 167 89 173 192 48 137 159 114 132 156 58 160
-+154 68 76 19 56 5 70 141 64 113 150 47 129 184 73 96 166 124 155 151 55 147 17
-+109 86 100 129 201 164 192 149 7 193 56 112 200 107 122 133 63 206 2 40 78 9
-+183 140 82 4 13 71 48 4 163 201 57 62 140 157 8 100 204 162 86 117 12 89 147 75
-+144 120 85 109 37 48 154 85 2 115 39 96 108 46 164 1 32 103 176 147 150 105 207
-+10 15 119 2 173 117 87 50 69 50 202 39 171 69 133 89 72 114 57 195 179 70 83 29
-+122 67 85 135 111 160 171 202 172 2 147 183 33 160 38 163 51 92 53 82 137 52
-+149 123 98 81 39 38 30 55 14 186 196 11 6 3 155 18 16 26 150 180 168 97 148 25
-+84 127 136 119 135 4 30 162 144 195 46 31 170 119 28 190 ^
-+443 1 17 96 167 27 91 152 100 106 109 65 164 10 57 71 167 123 209 74 57 137 95
-+30 90 2 78 110 101 147 138 22 177 22 129 68 168 63 74 70 65 2 174 18 23 51 116
-+8 142 158 121 36 207 207 45 209 170 122 59 52 8 76 20 4 102 69 186 72 46 106
-+127 39 110 149 101 99 184 61 15 85 136 59 100 172 37 182 98 95 78 44 173 30 204
-+94 156 206 123 161 120 96 132 1 37 134 144 134 126 160 180 21 136 203 119 55
-+156 44 77 122 72 190 125 10 105 25 128 75 93 67 13 205 196 14 31 179 142 206 75
-+207 159 91 38 8 28 66 43 150 185 193 63 135 5 143 98 143 32 5 125 124 197 103
-+14 97 107 102 87 3 18 185 97 155 56 48 165 112 178 106 13 157 32 53 79 85 149
-+197 7 106 175 203 71 101 195 92 193 129 116 122 24 26 7 58 11 32 119 7 202 83
-+125 28 79 181 57 119 121 84 161 168 50 93 163 131 127 153 45 17 144 121 198 43
-+36 93 115 177 166 148 108 24 188 53 97 59 148 126 208 134 192 88 87 112 64 14
-+145 61 63 39 97 11 194 165 46 40 199 132 19 11 80 73 178 154 177 118 37 147 72
-+94 60 88 201 47 142 110 167 75 45 113 52 43 102 21 22 111 41 12 134 30 42 48
-+117 158 7 154 129 164 76 195 188 101 51 20 100 10 201 143 50 32 71 53 31 131 31
-+35 123 113 166 135 180 117 44 125 76 33 142 62 3 114 93 19 59 34 34 130 38 170
-+74 105 91 56 192 27 205 34 178 202 131 79 199 84 65 50 128 189 185 145 109 17
-+49 105 187 174 114 141 183 20 196 128 123 47 28 18 89 189 23 99 70 179 94 42
-+114 45 65 98 82 150 137 29 102 183 68 150 89 75 141 21 184 157 80 7 40 37 86
-+190 16 174 66 187 12 68 102 135 114 189 137 191 148 12 116 56 96 119 73 130 200
-+6 113 100 154 63 26 116 104 50 80 25 14 193 83 ^
-+436 1 24 44 191 211 138 11 138 18 140 99 133 104 54 124 42 63 88 95 137 133 151
-+116 162 208 193 180 180 173 26 158 165 160 26 6 18 79 33 1 97 59 45 62 51 172
-+141 24 37 189 130 145 6 72 143 152 160 87 4 150 86 28 80 77 71 106 16 164 123
-+103 10 54 178 106 114 34 85 150 93 175 93 70 76 27 36 152 207 4 42 103 3 120 97
-+113 109 181 210 162 154 129 61 166 38 13 53 141 183 186 138 184 10 61 112 119
-+175 107 6 170 81 114 207 102 125 65 50 135 73 28 73 75 203 113 11 98 35 115 71
-+8 146 202 76 88 102 139 1 144 189 83 15 181 51 13 60 75 51 179 143 37 30 49 51
-+20 207 156 44 184 64 125 18 133 97 52 111 194 58 167 75 149 49 105 84 113 170
-+179 197 169 149 208 41 178 99 180 21 92 145 172 155 105 131 30 208 200 114 48
-+21 31 79 40 148 178 52 50 196 71 160 80 70 69 93 23 159 202 83 22 115 132 6 65
-+209 71 167 14 151 130 98 89 34 190 167 68 2 181 112 79 192 82 191 45 55 49 159
-+148 19 116 169 142 61 173 185 94 46 146 104 206 126 55 56 93 16 12 121 90 17 49
-+44 18 126 163 39 50 189 137 147 87 65 3 5 35 75 156 196 118 77 118 23 54 185 40
-+195 95 90 71 113 163 32 116 108 144 74 166 190 15 134 134 188 39 158 172 94 107
-+212 23 53 134 36 105 77 111 89 186 124 35 61 7 102 132 67 131 128 78 162 161 63
-+142 14 43 147 141 129 54 19 170 20 48 7 95 198 199 70 123 157 74 173 192 28 127
-+139 109 127 146 43 140 139 48 61 14 36 60 136 49 98 150 32 109 174 63 81 161
-+124 140 146 50 142 7 109 66 80 124 201 144 182 149 2 188 46 92 185 87 112 133
-+43 201 205 35 68 9 183 125 72 197 3 66 33 207 163 191 52 57 130 152 8 85 204
-+157 81 107 205 187 ^
-+462 1 126 54 123 113 85 81 23 41 154 71 210 115 18 89 108 32 157 209 11 103 176
-+133 136 77 193 10 209 112 196 166 110 66 43 69 194 36 202 25 171 62 112 82 44
-+100 43 188 172 70 83 29 115 67 64 128 83 153 164 195 158 2 119 187 169 33 160
-+31 149 23 64 32 61 109 45 121 102 77 74 32 38 16 55 7 172 189 198 200 211 141
-+11 2 5 143 159 147 90 134 25 70 106 122 105 114 212 30 141 130 195 39 24 163 91
-+28 11 7 76 167 17 81 137 85 86 94 65 149 5 42 66 157 113 204 59 57 137 80 15 70
-+207 78 95 91 142 133 17 177 22 129 68 168 43 74 50 60 197 174 3 13 36 106 3 127
-+158 116 26 197 192 25 194 155 102 59 52 203 56 20 214 82 49 171 67 46 106 117
-+34 90 139 96 94 179 56 15 65 136 54 100 157 17 182 93 75 63 24 168 25 189 84
-+156 201 118 156 105 96 112 201 22 134 139 114 116 145 175 11 121 198 99 40 151
-+34 72 117 52 190 105 90 20 118 60 83 52 208 205 181 209 16 174 122 206 70 202
-+144 71 18 208 8 66 38 135 170 178 53 115 5 138 88 123 17 200 115 119 182 98 9
-+87 97 102 72 3 8 180 82 145 56 33 165 102 173 96 213 157 12 33 69 80 129 192 2
-+101 165 203 51 86 190 87 193 124 116 122 4 21 7 53 211 27 104 207 197 73 125 23
-+59 176 37 114 111 74 151 153 50 73 148 116 127 153 45 2 124 121 193 28 16 78
-+100 162 166 128 88 9 188 53 92 49 148 111 193 129 187 68 77 92 54 4 135 51 63
-+19 97 1 194 150 31 35 194 132 9 206 75 58 168 144 167 118 37 127 62 94 60 78
-+196 47 132 110 162 65 35 98 32 43 87 1 2 106 21 12 124 20 22 38 117 148 212 149
-+119 164 76 180 183 101 46 10 95 205 186 143 40 32 56 38 21 126 31 30 123 108
-+151 135 165 107 29 120 71 13 137 62 208 104 88 4 39 29 19 115 23 160 54 105 91
-+41 177 27 200 14 163 124 ^
-+453 0 115 79 199 84 49 18 128 173 169 121 93 17 186 41 89 187 158 90 133 167
-+206 188 104 99 31 4 18 81 165 217 75 54 179 62 34 106 37 41 66 82 134 113 215
-+86 159 36 142 65 43 125 215 160 149 48 193 24 21 86 182 16 166 42 179 206 44 94
-+111 82 181 121 167 132 198 92 48 72 119 57 114 184 200 81 68 122 39 26 84 96 26
-+80 1 208 177 217 24 44 191 206 118 209 123 8 140 99 128 99 54 109 42 58 83 80
-+122 113 141 96 147 203 183 180 175 158 16 143 155 155 11 1 13 64 23 1 87 54 35
-+52 46 157 121 19 27 174 115 130 209 72 123 152 150 87 202 140 76 23 75 77 66 86
-+11 149 118 88 44 168 101 94 14 80 145 93 165 73 65 66 12 21 137 192 4 22 83 201
-+120 77 113 94 181 195 157 144 124 51 151 33 211 38 131 178 186 138 184 5 61 92
-+99 175 107 6 155 81 114 207 87 105 45 40 120 73 18 58 60 193 98 11 98 15 100 51
-+3 146 187 61 88 97 139 204 129 189 73 213 171 36 216 55 55 51 174 138 17 15 49
-+41 15 197 146 39 174 64 120 3 123 82 37 111 179 58 157 70 134 39 100 74 108 170
-+164 197 169 144 198 41 163 84 170 16 92 145 167 155 85 116 25 208 200 104 48 21
-+16 69 40 143 178 42 35 196 56 145 70 60 49 88 23 149 192 78 12 95 127 204 55
-+199 61 162 212 151 130 88 74 34 180 152 53 210 166 112 74 182 67 176 30 35 29
-+159 133 19 101 164 127 56 168 175 84 26 131 104 196 126 40 46 83 6 7 101 90 12
-+44 24 216 106 158 39 30 179 132 147 82 60 216 203 35 75 151 181 98 62 108 3 49
-+185 25 185 95 80 71 103 153 22 106 88 144 54 156 175 10 129 119 178 19 148 172
-+79 102 207 13 208 33 114 36 95 57 91 79 176 104 25 41 210 92 122 62 131 108 73
-+162 161 48 142 14 33 137 141 119 34 9 160 5 38 205 75 198 189 50 108 112 ^
-+454 1 53 173 192 113 111 102 120 132 22 112 118 20 40 7 8 213 46 129 28 77 150
-+11 81 160 49 60 154 124 119 139 43 135 213 109 38 52 117 201 116 168 149 215
-+181 32 64 164 59 98 133 15 194 198 28 54 9 183 104 58 176 209 59 12 200 163 177
-+45 50 116 145 8 64 204 150 74 93 184 89 111 39 108 108 85 61 13 36 154 61 210
-+115 3 84 108 22 152 209 216 103 176 123 126 57 183 10 199 107 186 161 105 51 38
-+69 184 26 202 15 171 57 97 77 24 90 33 183 167 70 83 29 110 67 49 123 63 148
-+159 190 148 2 99 172 159 33 160 26 139 3 44 17 46 89 40 101 87 62 69 27 38 6 55
-+2 162 184 183 190 211 131 6 212 210 138 144 132 85 124 25 60 91 112 95 99 212
-+30 126 120 195 34 19 158 71 28 211 217 56 167 7 71 122 70 66 79 65 134 27 61
-+147 103 199 44 57 137 65 50 202 78 80 81 137 128 12 177 22 129 68 168 23 74 30
-+55 182 174 208 3 21 96 218 112 158 111 16 187 177 5 179 140 82 59 52 188 36 20
-+214 62 29 156 62 46 106 107 29 70 129 91 89 174 51 15 45 136 49 100 142 217 182
-+88 55 48 4 163 20 174 74 156 196 113 151 90 96 92 191 7 134 134 94 106 130 170
-+1 106 193 79 25 146 24 67 112 32 190 85 210 75 15 108 45 73 37 193 205 166 194
-+1 169 102 206 65 197 129 51 218 198 208 66 33 120 155 163 43 95 5 133 78 103 2
-+185 105 114 167 93 4 77 87 102 57 3 218 175 67 135 56 18 165 92 168 86 203 157
-+212 13 59 75 109 187 217 96 155 203 31 71 185 82 193 119 116 122 204 16 7 48
-+201 22 89 197 192 63 125 18 39 171 17 109 101 64 141 138 50 53 133 101 127 153
-+45 207 104 121 188 13 216 63 85 147 166 108 68 214 188 53 87 39 148 96 178 124
-+182 48 67 72 44 214 125 41 63 219 97 211 194 135 16 30 189 132 219 191 70 43
-+158 181 ^
-+475 0 153 118 37 99 48 94 60 64 189 47 118 110 155 51 21 77 4 43 66 195 196 99
-+215 12 110 6 216 24 117 134 205 142 105 164 76 159 176 101 39 218 88 184 165
-+143 26 32 35 17 7 119 31 23 123 101 130 135 144 93 8 113 64 207 130 62 201 90
-+81 205 11 22 220 94 2 146 26 105 91 20 156 27 193 208 142 178 107 79 199 84 41
-+2 128 165 161 109 85 17 174 37 81 187 150 78 129 159 194 184 92 87 23 214 18 77
-+153 209 63 46 179 46 30 102 33 29 50 82 126 101 203 78 147 20 138 53 27 117 207
-+148 145 32 181 16 13 86 178 16 162 30 175 198 32 90 99 66 177 113 155 124 186
-+80 44 60 119 49 106 176 192 65 52 106 27 26 68 92 14 80 211 200 169 213 24 44
-+191 202 102 197 111 140 99 124 95 54 97 42 54 79 68 110 97 133 80 135 199 175
-+180 171 146 8 131 147 151 221 219 9 52 15 1 79 50 27 44 42 145 105 15 19 162
-+103 118 201 72 107 152 142 87 190 132 68 19 71 77 62 70 7 137 114 76 214 36 160
-+97 78 220 76 141 93 157 57 61 58 9 125 180 4 6 67 189 120 61 113 82 181 183 153
-+136 120 43 139 29 199 26 123 174 186 138 184 1 61 76 83 175 107 6 143 81 114
-+207 75 89 29 32 108 73 10 46 48 185 86 11 98 221 88 35 221 146 175 49 88 93 139
-+196 117 189 65 201 163 24 208 51 39 51 170 134 1 3 49 33 11 189 138 35 166 64
-+116 213 115 70 25 111 167 58 149 66 122 31 96 66 104 170 152 197 169 140 190 41
-+151 72 162 12 92 145 163 155 69 104 21 208 200 96 48 21 4 61 40 139 178 34 23
-+196 44 133 62 52 33 84 23 141 184 74 4 79 123 192 47 191 53 158 200 151 130 80
-+62 34 172 140 41 206 154 112 70 174 55 164 18 19 13 159 121 19 89 160 115 52
-+164 167 76 10 119 104 188 126 28 38 75 220 3 85 90 8 40 8 204 90 154 39 14 171
-+128 147 78 56 216 191 35 75 147 169 82 50 100 209 45 185 13 177 95 150 ^
-+471 0 71 89 139 8 92 60 144 26 142 154 3 122 98 164 216 134 172 58 95 200 224
-+201 5 86 36 81 29 63 65 162 76 11 13 196 78 108 55 131 80 66 162 161 27 142 14
-+19 123 141 105 6 220 146 209 24 184 47 198 175 22 87 133 38 173 192 205 103 91
-+97 115 122 7 92 103 25 2 213 213 36 124 13 62 150 221 61 150 39 45 149 124 104
-+134 38 130 208 109 18 32 112 201 96 158 149 215 176 22 44 149 39 88 133 220 189
-+193 23 44 9 183 89 48 161 204 54 222 195 163 167 40 45 106 140 8 49 204 145 69
-+83 169 89 96 24 93 103 85 41 3 31 154 51 210 115 213 79 108 12 147 209 206 103
-+176 113 116 37 173 10 189 102 176 156 100 36 33 69 174 16 202 5 171 52 82 72 4
-+80 23 178 162 70 83 29 105 67 34 118 43 143 154 185 138 2 79 157 149 33 160 21
-+129 208 24 2 31 69 35 81 72 47 64 22 38 221 55 222 152 179 168 180 211 121 1
-+207 200 133 129 117 80 114 25 50 76 102 85 84 212 30 111 110 195 29 14 153 51
-+28 196 212 36 167 222 61 107 55 46 64 65 119 220 12 56 137 93 194 29 57 137 50
-+210 30 197 78 65 71 132 123 7 177 22 129 68 168 3 74 10 50 167 174 198 218 6 86
-+218 97 158 106 6 177 162 210 164 125 62 59 52 173 16 20 214 42 9 141 57 46 106
-+97 24 50 119 86 84 169 46 15 25 136 44 100 127 202 182 83 35 33 209 158 15 159
-+64 156 191 108 146 75 96 72 181 217 134 129 74 96 115 165 216 91 188 59 10 141
-+14 62 107 12 190 65 205 60 10 98 30 63 22 178 205 151 179 211 164 82 206 60 192
-+114 31 203 188 193 66 28 105 140 148 33 75 5 128 68 83 212 170 95 109 152 88
-+224 67 77 102 42 3 213 170 52 125 56 3 165 82 163 76 193 157 197 218 49 70 89
-+182 217 91 145 203 11 56 180 77 193 114 116 122 189 11 7 43 191 17 74 187 187
-+53 125 13 19 166 222 104 91 54 131 123 50 33 118 86 127 167 ^
-+480 1 45 193 76 121 181 219 195 42 64 126 166 80 40 200 188 53 80 25 148 75 157
-+117 175 20 53 44 30 207 111 27 63 198 97 204 194 114 222 23 182 132 212 170 63
-+22 144 120 143 118 37 79 38 94 60 54 184 47 108 110 150 41 11 62 211 43 51 180
-+181 94 200 12 100 223 201 14 117 124 200 137 95 164 76 144 171 101 34 213 83
-+169 150 143 16 32 20 2 224 114 31 18 123 96 115 135 129 83 220 108 59 192 125
-+62 196 80 76 195 218 17 210 79 214 136 6 105 91 5 141 27 188 193 127 168 97 79
-+199 84 31 209 128 155 151 94 75 17 159 32 71 187 140 63 124 149 179 179 77 72
-+13 204 18 72 138 199 48 36 179 26 25 97 28 14 30 82 116 86 188 68 132 133 38 7
-+107 197 133 140 12 166 6 3 86 173 16 157 15 170 188 17 85 84 46 172 103 140 114
-+171 65 39 45 119 39 96 166 182 45 32 86 12 26 48 87 226 80 201 190 159 208 24
-+44 191 197 82 182 96 217 140 99 119 90 54 82 42 49 74 53 95 77 123 60 120 194
-+165 180 166 131 225 116 137 146 211 219 4 37 5 1 69 45 17 34 37 130 85 10 9 147
-+88 103 191 72 87 152 132 87 175 122 58 14 66 77 57 50 2 122 109 61 209 26 150
-+92 58 205 71 136 93 147 37 56 48 212 221 110 165 4 213 47 174 120 41 113 67 181
-+168 148 126 115 33 124 24 184 11 113 169 186 138 184 223 61 56 63 175 107 6 128
-+81 114 207 60 69 9 22 93 73 31 33 175 71 11 98 206 73 15 221 146 160 34 88 88
-+139 186 102 189 55 186 153 9 198 46 19 51 165 129 208 215 49 23 6 179 128 30
-+156 64 111 203 105 55 10 111 152 58 139 61 107 21 91 56 99 170 137 197 169 135
-+180 41 136 57 152 7 92 145 158 155 49 89 16 208 200 86 48 21 216 51 40 134 178
-+24 8 196 29 118 52 42 13 79 23 131 174 69 221 59 118 177 37 181 43 153 185 151
-+130 70 47 34 162 125 26 201 139 112 65 164 40 149 3 226 220 159 106 19 74 155
-+100 47 159 157 193 ^
-+471 0 211 98 104 174 126 7 24 61 213 225 57 90 1 33 209 183 62 147 39 215 157
-+121 147 71 49 216 170 35 75 140 148 54 29 86 188 38 185 221 163 95 58 71 81 131
-+84 44 144 10 134 142 228 118 86 156 204 126 172 46 91 196 220 197 218 70 36 73
-+13 47 57 154 60 3 226 188 70 100 51 131 64 62 162 161 15 142 14 11 115 141 97
-+219 216 138 201 16 172 31 198 167 6 75 125 26 173 192 193 95 75 93 111 114 224
-+76 91 213 13 227 201 213 28 120 1 50 150 213 45 142 31 33 145 124 92 130 34 126
-+204 109 2 16 108 201 80 150 149 215 172 14 28 137 23 80 133 208 185 189 19 36 9
-+183 77 40 149 200 50 214 191 163 159 36 41 98 136 8 37 204 141 65 75 157 89 84
-+12 81 99 85 25 224 27 154 43 210 115 205 75 108 4 143 209 198 103 176 105 108
-+21 165 10 181 98 168 152 96 24 29 69 166 8 202 226 171 48 70 68 217 72 15 174
-+158 70 83 29 101 67 22 114 27 139 150 181 130 2 63 145 141 33 160 17 121 196 8
-+219 19 53 31 65 60 35 60 18 38 217 55 222 144 175 156 172 211 113 226 203 192
-+129 117 105 76 106 25 42 64 94 77 72 212 30 99 102 195 25 10 149 35 28 184 208
-+20 167 218 53 95 43 30 52 65 107 220 52 129 85 190 17 57 137 38 202 14 193 78
-+53 63 128 119 3 177 22 129 68 168 216 74 223 46 155 174 190 214 223 78 218 85
-+158 102 227 169 150 198 152 113 46 59 52 161 20 214 26 222 129 53 46 106 89 20
-+34 111 82 80 165 42 15 9 136 40 100 115 190 182 79 19 21 197 154 11 147 56 156
-+187 104 142 63 96 56 173 209 134 125 58 88 103 161 212 79 184 43 227 137 6 58
-+103 225 190 49 201 48 6 90 18 55 10 166 205 139 167 203 160 66 206 56 188 102
-+15 191 180 181 66 24 93 128 136 25 59 5 124 60 67 204 158 87 105 140 84 224 59
-+69 102 30 3 209 166 40 117 56 220 165 74 159 68 185 157 185 206 41 66 167 ^
-+490 1 176 217 85 133 203 218 38 174 71 193 108 116 122 171 5 7 37 179 11 56 175
-+181 41 125 7 226 160 204 98 79 42 119 105 50 9 100 68 127 153 45 185 60 121 177
-+211 183 30 52 114 166 64 24 192 188 53 76 17 148 63 145 113 171 4 45 28 22 203
-+103 19 63 186 97 200 194 102 214 19 178 132 208 158 59 10 136 112 135 118 37 63
-+30 94 60 46 180 47 100 110 146 33 3 50 199 43 39 168 169 90 188 12 92 219 189 6
-+117 116 196 133 87 164 76 132 167 101 30 209 79 157 138 143 8 32 8 221 220 110
-+31 14 123 92 103 135 117 75 212 104 55 180 121 62 192 72 72 187 206 13 202 67
-+206 128 221 105 91 224 129 27 184 181 115 160 89 79 199 84 23 197 128 147 143
-+82 67 17 147 28 63 187 132 51 120 141 167 175 65 60 5 196 18 68 126 191 36 28
-+179 10 21 93 24 2 14 82 108 74 176 60 120 215 129 26 222 99 189 121 136 227 154
-+229 226 86 169 16 153 3 166 180 5 81 72 30 168 95 128 106 159 53 35 33 119 31
-+88 158 174 29 16 70 26 32 83 218 80 193 182 151 204 24 44 191 193 66 170 84 213
-+140 99 115 86 54 70 42 45 70 41 83 61 115 44 108 190 157 180 162 119 221 104
-+129 142 203 219 25 228 1 61 41 9 26 33 118 69 6 1 135 76 91 183 72 71 152 124
-+87 163 114 50 10 62 77 53 34 229 110 105 49 205 18 142 88 42 193 67 132 93 139
-+21 52 40 204 213 98 153 4 201 31 162 120 25 113 55 181 156 144 118 111 25 112
-+20 172 230 105 165 186 138 184 223 61 40 47 175 107 6 116 81 114 207 48 53 224
-+14 81 73 223 19 21 167 59 11 98 194 61 230 221 146 148 22 88 84 139 178 90 189
-+47 174 145 228 190 42 3 51 161 125 196 207 49 15 2 171 120 26 148 64 107 195 97
-+43 229 111 140 58 131 57 95 13 87 48 95 170 125 197 169 131 172 41 124 45 144 3
-+92 145 154 155 33 77 12 208 200 78 48 21 208 43 40 130 178 16 227 196 17 106 44
-+34 228 75 23 123 166 65 217 43 114 165 29 173 35 200 ^
-+479 0 167 151 130 58 29 34 150 107 8 195 121 112 59 152 22 131 218 208 202 159
-+88 19 56 149 82 41 153 145 54 199 86 104 166 126 228 16 53 209 225 41 90 230 29
-+197 171 46 143 39 203 149 117 147 67 45 216 158 35 75 136 136 38 17 78 176 34
-+185 213 155 95 50 71 73 123 225 76 28 144 227 126 130 228 114 74 148 192 118
-+172 34 87 192 216 193 206 54 36 65 230 31 49 146 44 228 214 180 62 92 47 131 48
-+58 162 161 3 142 14 3 107 141 89 207 212 130 193 8 160 15 198 159 223 63 117 14
-+173 192 181 87 59 89 107 106 216 60 79 201 1 227 189 213 20 116 222 38 150 205
-+29 134 23 21 141 124 80 126 30 122 200 109 219 104 201 64 142 149 215 168 6 12
-+125 7 72 133 196 181 185 15 28 9 183 65 32 137 196 46 206 187 163 151 32 37 90
-+132 8 25 204 137 61 67 145 89 72 69 95 85 9 220 23 154 35 210 115 197 71 108
-+229 139 209 190 103 176 97 100 5 157 10 173 94 160 148 92 12 25 69 158 202 222
-+171 44 58 64 205 64 7 170 154 70 83 29 97 67 10 110 11 135 146 177 122 2 47 133
-+133 33 160 13 113 184 225 211 7 37 27 49 48 23 56 14 38 213 55 222 136 171 144
-+164 211 105 226 199 184 125 105 93 72 98 25 34 52 86 69 60 212 30 87 94 195 21
-+6 145 19 28 172 204 4 167 214 45 83 31 14 40 65 95 220 221 48 121 77 186 5 57
-+137 26 194 231 189 78 41 55 124 115 232 177 22 129 68 168 204 74 211 42 143 174
-+182 210 215 70 218 73 158 98 223 161 138 186 140 101 30 59 52 149 217 20 214 10
-+210 117 49 46 106 81 16 18 103 78 76 161 38 15 226 136 36 100 103 178 182 75 3
-+9 185 150 7 135 48 156 183 100 138 51 96 40 165 201 134 121 42 80 91 157 208 67
-+180 27 219 133 231 54 99 213 190 33 197 36 2 82 6 47 231 154 205 127 155 195
-+156 50 206 52 184 90 232 179 172 169 66 20 81 116 124 17 43 5 120 52 51 196 146
-+79 101 128 80 224 65 ^
-+503 1 55 102 9 3 202 159 19 103 56 206 165 60 152 54 171 157 164 185 27 59 45
-+171 217 80 123 203 203 23 169 66 193 103 116 122 156 7 32 169 6 41 165 176 31
-+125 2 211 155 189 93 69 32 109 90 50 225 85 53 127 153 45 175 40 121 172 201
-+168 15 37 99 166 44 4 182 188 53 71 7 148 48 130 108 166 220 35 8 12 198 93 9
-+63 171 97 195 194 87 204 14 173 132 203 143 54 231 126 102 125 118 37 43 20 94
-+60 36 175 47 90 110 141 23 229 35 184 43 24 153 154 85 173 12 82 214 174 232
-+117 106 191 128 77 164 76 117 162 101 25 204 74 142 123 143 234 32 229 211 215
-+105 31 9 123 87 88 135 102 65 202 99 50 165 116 62 187 62 67 177 191 8 192 52
-+196 118 206 105 91 214 114 27 179 166 100 150 79 79 199 84 13 182 128 137 133
-+67 57 17 132 23 53 187 122 36 115 131 152 170 50 45 231 186 18 63 111 181 21 18
-+179 226 16 88 19 223 230 82 98 59 161 50 105 200 124 11 207 89 179 106 131 212
-+139 224 221 86 164 16 148 224 161 170 226 76 57 10 163 85 113 96 144 38 30 18
-+119 21 78 148 164 9 232 50 221 26 12 78 208 80 183 172 141 199 24 44 191 188 46
-+155 69 208 140 99 110 81 54 55 42 40 65 26 68 41 105 24 93 185 147 180 157 104
-+216 89 119 137 193 219 231 10 223 1 51 36 235 16 28 103 49 1 227 120 61 76 173
-+72 51 152 114 87 148 104 40 5 57 77 48 14 229 95 100 34 200 8 132 83 22 178 62
-+127 93 129 1 47 30 194 203 83 138 4 186 11 147 120 5 113 40 181 141 139 108 106
-+15 97 15 157 220 95 160 186 138 184 223 61 20 27 175 107 6 101 81 114 207 33 33
-+209 4 66 73 218 4 6 157 44 11 98 179 46 215 221 146 133 7 88 79 139 168 75 189
-+37 159 135 218 180 37 219 51 156 120 181 197 49 5 233 161 110 21 138 64 102 185
-+87 28 219 111 125 58 121 52 80 3 82 38 90 170 110 197 169 126 162 41 109 30 134
-+234 92 145 149 155 13 62 7 208 200 68 48 21 198 33 40 125 178 6 217 196 2 91 34
-+24 213 70 23 113 161 ^
-+470 0 58 210 15 107 144 15 159 21 142 152 151 130 48 14 34 140 92 231 190 106
-+112 54 142 7 116 208 193 187 159 73 19 41 144 67 36 148 135 44 184 71 104 156
-+126 218 6 43 204 225 21 90 230 24 182 156 26 138 39 188 139 112 147 62 40 216
-+143 35 75 131 121 18 2 68 161 29 185 203 145 95 40 71 63 113 220 66 8 144 212
-+116 115 228 109 59 138 177 108 172 19 82 187 211 188 191 34 36 55 215 11 39 136
-+24 223 199 170 52 82 42 131 28 53 162 161 226 142 14 231 97 141 79 192 207 120
-+183 236 145 233 198 149 208 48 107 237 173 192 166 77 39 84 102 96 206 40 64
-+186 224 227 174 213 10 111 212 23 150 195 9 124 13 6 136 124 65 121 25 117 195
-+109 204 218 99 201 44 132 149 215 163 234 230 110 225 62 133 181 176 180 10 18
-+9 183 50 22 122 191 41 196 182 163 141 27 32 80 127 8 10 204 132 56 57 130 89
-+57 223 54 90 85 227 215 18 154 25 210 115 187 66 108 224 134 209 180 103 176 87
-+90 223 147 10 163 89 150 143 87 235 20 69 148 228 202 217 171 39 43 59 190 54
-+235 165 149 70 83 29 92 67 233 105 229 130 141 172 112 2 27 118 123 33 160 8
-+103 169 210 201 230 17 22 29 33 8 51 9 38 208 55 222 126 166 129 154 211 95 226
-+194 174 120 90 78 67 88 25 24 37 76 59 45 212 30 72 84 195 16 1 140 237 28 157
-+199 222 167 209 35 68 16 232 25 65 80 220 211 43 111 67 181 228 57 137 11 184
-+216 184 78 26 45 119 110 232 177 22 129 68 168 189 74 196 37 128 174 172 205
-+205 60 218 58 158 93 218 151 123 171 125 86 10 59 52 134 202 20 214 228 195 102
-+44 46 106 71 11 236 93 73 71 156 33 15 211 136 31 100 88 163 182 70 221 232 170
-+145 2 120 38 156 178 95 133 36 96 20 155 191 134 116 22 70 76 152 203 52 175 7
-+209 128 226 49 94 198 190 13 192 21 235 72 229 37 221 139 205 112 140 185 151
-+30 206 47 179 75 217 101 ^
-+502 0 158 148 66 13 60 95 103 3 15 5 113 38 23 182 125 65 94 107 73 224 37 47
-+102 237 3 198 155 7 95 56 198 165 52 148 46 163 157 152 173 19 55 29 167 217 76
-+115 203 191 11 165 62 193 99 116 122 144 236 7 28 161 2 29 157 172 23 125 238
-+199 151 177 89 61 24 101 78 50 213 73 41 127 153 45 167 24 121 168 193 156 3 25
-+87 166 28 228 174 188 53 67 239 148 36 118 104 162 208 27 232 4 194 85 1 63 159
-+97 191 194 75 196 10 169 132 199 131 50 223 118 94 117 118 37 27 12 94 60 28
-+171 47 82 110 137 15 225 23 172 43 12 141 142 81 161 12 74 210 162 228 117 98
-+187 124 69 164 76 105 158 101 21 200 70 130 111 143 230 32 221 203 211 101 31 5
-+123 83 76 135 90 57 194 95 46 153 112 62 183 54 63 169 179 4 184 40 188 110 194
-+105 91 206 102 27 175 154 88 142 71 79 199 84 5 170 128 129 125 55 49 17 120 19
-+45 187 114 24 111 123 140 166 38 33 227 178 18 59 99 173 9 10 179 214 12 84 15
-+215 218 82 90 47 149 42 93 188 120 239 195 81 171 94 127 200 127 220 217 86 160
-+16 144 216 157 162 218 72 45 234 159 77 101 88 132 26 26 6 119 13 70 140 156
-+233 220 34 213 26 236 74 200 80 175 164 133 195 24 44 191 184 30 143 57 204 140
-+99 106 77 54 43 42 36 61 14 56 25 97 8 81 181 139 180 153 92 212 77 111 133 185
-+219 231 238 219 1 43 32 231 8 24 91 33 237 223 108 49 64 165 72 35 152 106 87
-+136 96 32 1 53 77 44 238 229 83 96 22 196 124 79 6 166 58 123 93 121 225 43 22
-+186 195 71 126 4 174 235 135 120 229 113 28 181 129 135 100 102 7 85 11 145 212
-+87 156 186 138 184 223 61 4 11 175 107 6 89 81 114 207 21 17 197 236 54 73 214
-+232 234 149 32 11 98 167 34 203 221 146 121 235 88 75 139 160 63 189 29 147 127
-+210 172 33 207 51 152 116 169 189 49 237 233 153 102 17 130 64 98 177 79 16 211
-+111 113 58 113 48 68 235 78 30 86 170 98 197 169 122 154 41 97 18 126 234 92
-+145 145 155 237 50 209 ^
-+481 1 208 200 56 48 21 186 21 40 119 178 236 205 196 226 73 22 12 195 64 23 101
-+144 54 206 241 103 132 7 151 13 138 140 151 130 40 2 34 132 80 223 186 94 112
-+50 134 237 104 200 181 175 159 61 19 29 140 55 32 144 127 36 172 59 104 148 126
-+210 240 35 200 225 5 90 230 20 170 144 10 134 39 176 131 108 147 58 36 216 131
-+35 75 127 109 2 232 60 149 25 185 195 137 95 32 71 55 105 216 58 234 144 200
-+108 103 228 105 47 130 165 100 172 7 78 183 207 184 179 18 36 47 203 237 31 128
-+8 219 187 162 44 74 38 131 12 49 162 161 218 142 14 227 89 141 71 180 203 112
-+175 232 133 221 198 141 196 36 99 229 173 192 154 69 23 80 98 88 198 24 52 174
-+216 227 162 213 2 107 204 11 150 187 235 116 5 236 132 124 53 117 21 113 191
-+109 192 206 95 201 28 124 149 215 159 230 218 98 213 54 133 169 172 176 6 10 9
-+183 38 14 110 187 37 188 178 163 133 23 28 72 123 8 240 204 128 52 49 118 89 45
-+215 42 86 85 215 211 14 154 17 210 115 179 62 108 220 130 209 172 103 176 79 82
-+211 139 10 155 85 142 139 83 227 16 69 140 224 202 213 171 35 31 55 178 46 231
-+161 145 70 83 29 88 67 225 101 217 126 137 168 104 2 11 106 115 33 160 4 95 157
-+198 193 222 1 18 13 21 238 47 5 38 204 55 222 118 162 117 146 211 87 226 190
-+166 116 78 66 63 80 25 16 25 68 51 33 212 30 60 76 195 12 239 136 225 28 145
-+195 210 167 205 27 56 4 220 13 65 68 220 203 39 103 59 177 220 57 137 241 176
-+204 180 78 14 37 115 106 232 177 22 129 68 168 177 74 184 33 116 174 164 201
-+197 52 218 46 158 89 214 143 111 159 113 74 236 59 52 122 190 20 214 216 183 90
-+40 46 106 63 7 224 85 69 67 152 29 15 199 136 27 100 76 151 182 66 209 224 158
-+141 240 108 30 156 174 91 129 24 96 4 147 183 134 112 6 62 64 148 199 40 171
-+233 201 124 222 45 90 186 190 239 188 9 235 64 221 29 213 127 178 ^
-+508 1 94 122 173 145 6 206 41 173 57 199 146 150 136 66 9 48 83 91 239 243 5
-+109 30 7 174 113 57 90 95 69 224 29 39 102 229 3 194 151 239 87 56 190 165 44
-+144 38 155 157 140 161 11 51 13 163 217 72 107 203 179 243 161 58 193 95 116
-+122 132 236 7 24 153 242 17 149 168 15 125 238 187 147 165 85 53 16 93 66 50
-+201 61 29 127 153 45 159 8 121 164 185 144 235 13 75 166 12 216 166 188 53 63
-+235 148 24 106 100 158 196 19 220 240 190 77 237 63 147 97 187 194 63 188 6 165
-+132 195 119 46 215 110 86 109 118 37 11 4 94 60 20 167 47 74 110 133 7 221 11
-+160 43 129 130 77 149 12 66 206 150 224 117 90 183 120 61 164 76 93 154 101 17
-+196 66 118 99 143 226 32 213 195 207 97 31 1 123 79 64 135 78 49 186 91 42 141
-+108 62 179 46 59 161 167 176 28 180 102 182 105 91 198 90 27 171 142 76 134 63
-+79 199 84 241 158 128 121 117 43 41 17 108 15 37 187 106 12 107 115 128 162 26
-+21 223 170 18 55 87 165 241 2 179 202 8 80 11 207 206 82 82 35 137 34 81 176
-+116 231 183 73 163 82 123 188 115 216 213 86 156 16 140 208 153 154 210 68 33
-+222 155 69 89 80 120 14 22 238 119 5 62 132 148 221 208 18 205 26 224 70 192 80
-+167 156 125 191 24 44 191 180 14 131 45 200 140 99 102 73 54 31 42 32 57 2 44 9
-+89 236 69 177 131 180 149 80 208 65 103 129 177 219 231 230 215 1 35 28 227 20
-+79 17 237 219 96 37 52 157 72 19 152 98 87 124 88 24 241 49 77 40 226 229 71 92
-+10 192 236 116 75 234 154 54 119 93 113 213 39 14 178 187 59 114 4 162 223 123
-+120 217 113 16 181 117 131 92 98 243 73 7 133 204 79 152 186 138 184 223 61 232
-+239 175 107 6 77 81 114 207 9 1 185 232 42 73 210 224 226 141 20 11 98 155 22
-+191 221 146 109 227 88 71 139 152 51 189 21 135 119 202 164 29 195 51 148 112
-+157 181 49 233 233 145 94 13 122 64 94 169 71 4 203 111 101 58 105 44 56 231 74
-+22 82 170 86 197 169 118 146 41 85 6 118 234 92 145 141 149 ^
-+484 1 219 32 243 208 200 48 48 21 178 13 40 115 178 232 197 196 218 61 14 4 183
-+60 23 93 136 50 202 229 99 120 245 143 5 134 128 151 130 32 236 34 124 68 215
-+182 82 112 46 126 229 92 192 169 163 159 49 19 17 136 43 28 140 119 28 160 47
-+104 140 126 202 236 27 196 225 235 90 230 16 158 132 240 130 39 164 123 104 147
-+54 32 216 119 35 75 123 97 232 224 52 137 21 185 187 129 95 24 71 47 97 212 50
-+222 144 188 100 91 228 101 35 122 153 92 172 241 74 179 203 180 167 2 36 39 191
-+225 23 120 238 215 175 154 36 66 34 131 242 45 162 161 210 142 14 223 81 141 63
-+168 199 104 167 228 121 209 198 133 184 24 91 221 173 192 142 61 7 76 94 80 190
-+8 40 162 208 227 150 213 240 103 196 245 150 179 223 108 243 228 128 124 41 113
-+17 109 187 109 180 194 91 201 12 116 149 215 155 226 206 86 201 46 133 157 168
-+172 2 2 9 183 26 6 98 183 33 180 174 163 125 19 24 64 119 8 232 204 124 48 41
-+106 89 33 207 30 82 85 203 207 10 154 9 210 115 171 58 108 216 126 209 164 103
-+176 71 74 199 131 10 147 81 134 135 79 219 12 69 132 220 202 209 171 31 19 51
-+166 38 227 157 141 70 83 29 84 67 217 97 205 122 133 164 96 2 241 94 107 33 160
-+87 145 186 185 214 231 14 243 9 230 43 1 38 200 55 222 110 158 105 138 211 79
-+226 186 158 112 66 54 59 72 25 8 13 60 43 21 212 30 48 68 195 8 239 132 213 28
-+133 191 198 167 201 19 44 238 208 1 65 56 220 195 35 95 51 173 212 57 137 233
-+168 192 176 78 2 29 111 102 232 177 22 129 68 168 165 74 172 29 104 174 156 197
-+189 44 218 34 158 85 210 135 99 147 101 62 224 59 52 110 178 20 214 204 171 78
-+36 46 106 55 3 212 77 65 63 148 25 15 187 136 23 100 64 139 182 62 197 216 146
-+137 240 96 22 156 170 87 125 12 96 234 139 175 134 108 236 54 52 144 195 28 167
-+221 193 120 218 41 86 174 190 227 184 243 235 56 213 21 205 115 205 71 ^
-+506 0 110 165 141 238 206 37 169 45 187 134 142 124 66 5 36 71 79 235 231 5 105
-+22 239 166 101 49 86 83 65 224 21 31 102 221 3 190 147 231 79 56 182 165 36 140
-+30 147 157 128 149 3 47 245 159 217 68 99 203 167 235 157 54 193 91 116 122 120
-+236 7 20 145 242 5 141 164 7 125 238 175 143 153 81 45 8 85 54 50 189 49 17 127
-+153 45 151 240 121 160 177 132 227 1 63 166 244 204 158 188 53 59 231 148 12 94
-+96 154 184 11 208 236 186 69 233 63 135 97 183 194 51 180 2 161 132 191 107 42
-+207 102 78 101 118 37 243 244 94 60 12 163 47 66 110 129 247 217 247 148 43 236
-+117 118 73 137 12 58 202 138 220 117 82 179 116 53 164 76 81 150 101 13 192 62
-+106 87 143 222 32 205 187 203 93 31 245 123 75 52 135 66 41 178 87 38 129 104
-+62 175 38 55 153 155 244 168 16 172 94 170 105 91 190 78 27 167 130 64 126 55
-+79 199 84 237 146 128 113 109 31 33 17 96 11 29 187 98 103 107 116 158 14 9 219
-+162 18 51 75 157 233 242 179 190 4 76 7 199 194 82 74 23 125 26 69 164 112 223
-+171 65 155 70 119 176 103 212 209 86 152 16 136 200 149 146 202 64 21 210 151
-+61 77 72 108 2 18 230 119 245 54 124 140 209 196 2 197 26 212 66 184 80 159 148
-+117 187 24 44 191 176 246 119 33 196 140 99 98 69 54 19 42 28 53 238 32 241 81
-+224 57 173 123 180 145 68 204 53 95 125 169 219 231 222 211 1 27 24 223 240 16
-+67 1 237 215 84 25 40 149 72 3 152 90 87 112 80 16 241 45 77 36 214 229 59 88
-+246 188 232 108 71 222 142 50 115 93 105 201 35 6 170 179 47 102 4 150 211 111
-+120 205 113 4 181 105 127 84 94 239 61 3 121 196 71 148 186 138 184 223 61 220
-+227 175 107 6 65 81 114 207 245 233 173 228 30 73 206 216 218 133 8 11 98 143
-+10 179 221 146 97 219 88 67 139 144 39 189 13 123 111 194 156 25 183 51 144 108
-+145 173 49 229 233 137 86 9 114 64 90 161 63 240 195 111 89 58 97 40 44 227 70
-+14 78 170 74 197 169 114 138 41 73 242 110 234 177 ^
-+491 0 145 135 155 207 20 243 208 200 40 48 21 170 5 40 111 178 228 189 196 210
-+49 6 246 171 56 23 85 128 46 198 217 95 108 241 135 247 130 116 151 130 24 228
-+34 116 56 207 178 70 112 42 118 221 80 184 157 151 159 37 19 5 132 31 24 136
-+111 20 148 35 104 132 126 194 232 19 192 225 223 90 230 12 146 120 228 126 39
-+152 115 100 147 50 28 216 107 35 75 119 85 220 216 44 125 17 185 179 121 95 16
-+71 39 89 208 42 210 144 176 92 79 228 97 23 114 141 84 172 233 70 175 199 176
-+155 236 36 31 179 213 15 112 226 211 163 146 28 58 30 131 230 41 162 161 202
-+142 14 219 73 141 55 156 195 96 159 224 109 197 198 125 172 12 83 213 173 192
-+130 53 241 72 90 72 182 242 28 150 200 227 138 213 236 99 188 237 150 171 211
-+100 239 220 124 124 29 109 13 105 183 109 168 182 87 201 246 108 149 215 151
-+222 194 74 189 38 133 145 164 168 248 244 9 183 14 248 86 179 29 172 170 163
-+117 15 20 56 115 8 224 204 120 44 33 94 89 21 199 18 78 85 191 203 6 154 1 210
-+115 163 54 108 212 122 209 156 103 176 63 66 187 123 10 139 77 126 131 75 211 8
-+69 124 216 202 205 171 27 7 47 154 30 223 153 137 70 83 29 80 67 209 93 193 118
-+129 160 88 2 229 82 99 33 160 246 79 133 174 177 206 219 10 231 247 222 39 247
-+38 196 55 222 102 154 93 130 211 71 226 182 150 108 54 42 55 64 25 1 52 35 9
-+212 30 36 60 195 4 239 128 201 28 121 187 186 167 197 11 32 230 196 239 65 44
-+220 187 31 87 43 169 204 57 137 225 160 180 172 78 240 21 107 98 232 177 22 129
-+68 168 153 74 160 25 92 174 148 193 181 36 218 22 158 81 206 127 87 135 89 50
-+212 59 52 98 166 20 214 192 159 66 32 46 106 47 249 200 69 61 59 144 21 15 175
-+136 19 100 52 127 182 58 185 208 134 133 240 84 14 156 166 83 121 96 222 131
-+167 134 104 224 46 40 140 191 16 163 209 185 116 214 37 82 162 190 215 180 235
-+235 48 205 13 197 103 205 76 104 161 139 232 146 ^
-+516 0 33 165 33 175 122 134 112 66 1 24 59 67 231 219 5 101 14 227 158 89 41 82
-+71 61 224 13 23 102 213 3 186 143 223 71 56 174 165 28 136 22 139 157 116 137
-+247 43 233 155 217 64 91 203 155 227 153 50 193 87 116 122 108 236 7 16 137 242
-+245 133 160 251 125 238 163 139 141 77 37 77 42 50 177 37 5 127 153 45 143 228
-+121 156 169 120 219 241 51 166 232 192 150 188 53 55 227 148 82 92 150 172 3
-+196 232 182 61 229 63 123 97 179 194 39 172 250 157 132 187 95 38 199 94 70 93
-+118 37 231 240 94 60 4 159 47 58 110 125 243 213 239 136 43 228 105 106 69 125
-+12 50 198 126 216 117 74 175 112 45 164 76 69 146 101 9 188 58 94 75 143 218 32
-+197 179 199 89 31 245 123 71 40 135 54 33 170 83 34 117 100 62 171 30 51 145
-+143 244 160 4 164 86 158 105 91 182 66 27 163 118 52 118 47 79 199 84 233 134
-+128 105 101 19 25 17 84 7 21 187 90 240 99 99 104 154 2 249 215 154 18 47 63
-+149 225 238 179 178 72 3 191 182 82 66 11 113 18 57 152 108 215 159 57 147 58
-+115 164 91 208 205 86 148 16 132 192 145 138 194 60 9 198 147 53 65 64 96 242
-+14 222 119 241 46 116 132 197 184 238 189 26 200 62 176 80 151 140 109 183 24
-+44 191 172 234 107 21 192 140 99 94 65 54 7 42 24 49 230 20 229 73 212 45 169
-+115 180 141 56 200 41 87 121 161 219 231 214 207 1 19 20 219 236 12 55 237 237
-+211 72 13 28 141 72 239 152 82 87 100 72 8 241 41 77 32 202 229 47 84 238 184
-+228 100 67 210 130 46 111 93 97 189 31 250 162 171 35 90 4 138 199 99 120 193
-+113 244 181 93 123 76 90 235 49 251 109 188 63 144 186 138 184 223 61 208 215
-+175 107 6 53 81 114 207 237 221 161 224 18 73 202 208 210 125 248 11 98 131 250
-+167 221 146 85 211 88 63 139 136 27 189 5 111 103 186 148 21 171 51 140 104 133
-+165 49 225 233 129 78 5 106 64 86 153 55 232 187 111 77 58 89 36 32 223 66 6 74
-+170 62 197 169 110 130 41 61 234 102 234 92 145 133 155 201 14 243 208 200 36
-+48 21 166 1 40 109 178 147 ^
-+522 0 179 196 200 34 251 241 156 51 23 75 118 41 193 202 90 93 236 125 242 125
-+101 151 130 14 218 34 106 41 197 173 55 112 37 108 211 65 174 142 136 159 22 19
-+245 127 16 19 131 101 10 133 20 104 122 126 184 227 9 187 225 208 90 230 7 131
-+105 213 121 39 137 105 95 147 45 23 216 92 35 75 114 70 205 206 34 110 12 185
-+169 111 95 6 71 29 79 203 32 195 144 161 82 64 228 92 8 104 126 74 172 223 65
-+170 194 171 140 221 36 21 164 198 5 102 211 206 148 136 18 48 25 131 215 36 162
-+161 192 142 14 214 63 141 45 141 190 86 149 219 94 182 198 115 157 252 73 203
-+173 192 115 43 226 67 85 62 172 227 13 135 190 227 123 213 231 94 178 227 150
-+161 196 90 234 210 119 124 14 104 8 100 178 109 153 167 82 201 231 98 149 215
-+146 217 179 59 174 28 133 130 159 163 248 239 9 183 254 243 71 174 24 162 165
-+163 107 10 15 46 110 8 214 204 115 39 23 79 89 6 189 3 73 85 176 198 1 154 246
-+210 115 153 49 108 207 117 209 146 103 176 53 56 172 113 10 129 72 116 126 70
-+201 3 69 114 211 202 200 171 22 247 42 139 20 218 148 132 70 83 29 75 67 199 88
-+178 113 124 155 78 2 214 67 89 33 160 246 69 118 159 167 196 204 5 216 237 212
-+34 247 38 191 55 222 92 149 78 120 211 61 226 177 140 103 39 27 50 54 25 245
-+241 42 25 249 212 30 21 50 195 254 239 123 186 28 106 182 171 167 192 1 17 220
-+181 229 65 29 220 177 26 77 33 164 194 57 137 215 150 165 167 78 230 11 102 93
-+232 177 22 129 68 168 138 74 145 20 77 174 138 188 171 26 218 7 158 76 201 117
-+72 120 74 35 197 59 52 83 151 20 214 177 144 51 27 46 106 37 249 185 59 56 54
-+139 16 15 160 136 14 100 37 112 182 53 170 198 119 128 240 69 4 156 161 78 116
-+240 96 207 121 157 134 99 209 36 25 135 186 1 158 194 175 111 209 32 77 147 190
-+200 175 225 235 38 195 3 187 88 205 61 89 151 134 217 206 30 162 24 166 113 128
-+103 66 253 15 50 58 228 210 5 98 8 218 152 80 35 79 62 58 224 7 17 102 207 3
-+183 140 217 65 56 168 165 22 133 16 133 157 107 128 244 12 ^
-+517 1 218 150 217 59 81 203 140 217 148 45 193 82 116 122 93 236 7 11 127 242
-+235 123 155 246 125 238 148 134 126 72 27 247 67 27 50 162 22 247 127 153 45
-+133 213 121 151 159 105 209 231 36 166 217 177 140 188 53 50 222 148 242 67 87
-+145 157 250 181 227 177 51 224 63 108 97 174 194 24 162 250 152 132 182 80 33
-+189 84 60 83 118 37 216 235 94 60 251 154 47 48 110 120 238 208 229 121 43 218
-+90 91 64 110 12 40 193 111 211 117 64 170 107 35 164 76 54 141 101 4 183 53 79
-+60 143 213 32 187 169 194 84 31 245 123 66 25 135 39 23 160 78 29 102 95 62 166
-+20 46 135 128 244 150 246 154 76 143 105 91 172 51 27 158 103 37 108 37 79 199
-+84 228 119 128 95 91 4 15 17 69 2 11 187 80 230 94 89 89 149 244 239 210 144 18
-+42 48 139 215 233 179 163 252 67 255 181 167 82 56 253 98 8 42 137 103 205 144
-+47 137 43 110 149 76 203 200 86 143 16 127 182 140 128 184 55 251 183 142 43 50
-+54 81 232 9 212 119 236 36 106 122 182 169 223 179 26 185 57 166 80 141 130 99
-+178 24 44 191 167 219 92 6 187 140 99 89 60 54 249 42 19 44 220 5 214 63 197 30
-+164 105 180 136 41 195 26 77 116 151 219 231 204 202 1 9 15 214 231 7 40 222
-+237 206 57 255 13 131 72 224 152 72 87 85 62 255 241 36 77 27 187 229 32 79 228
-+179 223 90 62 195 115 41 106 93 87 174 26 245 152 161 20 75 4 123 184 84 120
-+178 113 234 181 78 118 66 85 230 34 251 94 178 53 139 186 138 184 223 61 193
-+200 175 107 6 38 81 114 207 227 206 146 219 3 73 197 198 200 115 238 11 98 116
-+240 152 221 146 70 201 88 58 139 126 12 189 252 96 93 176 138 16 156 51 135 99
-+118 155 49 220 233 119 68 96 64 81 143 45 222 177 111 62 58 79 31 17 218 61 253
-+69 170 47 197 169 105 120 41 46 224 92 234 92 145 128 155 186 256 243 208 200
-+26 48 21 156 248 40 104 178 221 175 196 196 28 249 239 150 49 23 71 114 39 191
-+196 88 87 234 121 240 123 95 151 130 10 214 34 102 35 193 171 49 112 35 104 207
-+59 170 136 130 159 16 19 241 125 213 ^
-+529 1 15 127 93 2 121 8 104 114 126 176 223 1 183 225 196 90 230 3 119 93 201
-+117 39 125 97 91 147 41 19 216 80 35 75 110 58 193 198 26 98 8 185 161 103 95
-+257 71 21 71 199 24 183 144 149 74 52 228 88 255 96 114 66 172 215 61 166 190
-+167 128 209 36 13 152 186 256 94 199 202 136 128 10 40 21 131 203 32 162 161
-+184 142 14 210 55 141 37 129 186 78 141 215 82 170 198 107 145 244 65 195 173
-+192 103 35 214 63 81 54 164 215 1 123 182 227 111 213 227 90 170 219 150 153
-+184 82 230 202 115 124 2 100 4 96 174 109 141 155 78 201 219 90 149 215 142 213
-+167 47 162 20 133 118 155 159 248 235 9 183 246 239 59 170 20 154 161 163 99 6
-+11 38 106 8 206 204 111 35 15 67 89 253 181 250 69 85 164 194 256 154 242 210
-+115 145 45 108 203 113 209 138 103 176 45 48 160 105 10 121 68 108 122 66 193
-+258 69 106 207 202 196 171 18 239 38 127 12 214 144 128 70 83 29 71 67 191 84
-+166 109 120 151 70 2 202 55 81 33 160 246 61 106 147 159 188 192 1 204 229 204
-+30 247 38 187 55 222 84 145 66 112 211 53 226 173 132 99 27 15 46 46 25 241 233
-+34 17 241 212 30 9 42 195 254 239 119 174 28 94 178 159 167 188 252 5 212 169
-+221 65 17 220 169 22 69 25 160 186 57 137 207 142 153 163 78 222 3 98 89 232
-+177 22 129 68 168 126 74 133 16 65 174 130 184 163 18 218 254 158 72 197 109 60
-+108 62 23 185 59 52 71 139 20 214 165 132 39 23 46 106 29 249 173 51 52 50 135
-+12 15 148 136 10 100 25 100 182 49 158 190 107 124 240 57 255 156 157 74 112
-+232 96 195 113 149 134 95 197 28 13 131 182 248 154 182 167 107 205 28 73 135
-+190 188 171 217 235 30 187 254 179 76 205 49 77 143 130 205 206 26 158 12 154
-+101 120 91 66 253 3 38 46 224 198 5 94 206 144 68 27 75 50 54 224 258 9 102 199
-+3 179 136 209 57 56 160 165 14 129 8 125 157 95 116 240 36 212 148 217 57 77
-+203 134 213 146 43 193 80 116 122 87 236 7 9 123 242 231 119 153 244 125 238
-+142 132 120 70 23 245 63 21 50 156 16 243 127 153 45 129 207 121 149 155 99 205
-+227 30 166 211 57 ^
-+548 0 134 188 53 47 219 148 236 58 84 142 148 247 172 224 174 45 221 63 99 97
-+171 194 15 156 250 149 132 179 71 30 183 78 54 77 118 37 207 232 94 60 248 151
-+47 42 110 117 235 205 223 112 43 212 81 82 61 101 12 34 190 102 208 117 58 167
-+104 29 164 76 45 138 101 1 180 50 70 51 143 210 32 181 163 191 81 31 245 123 63
-+16 135 30 17 154 75 26 93 92 62 163 14 43 129 119 244 144 240 148 70 134 105 91
-+166 42 27 155 94 28 102 31 79 199 84 225 110 128 89 85 255 9 17 60 259 5 187 74
-+224 91 83 80 146 238 233 207 138 18 39 39 133 209 230 179 154 252 64 255 175
-+158 82 50 247 89 2 33 128 100 199 135 41 131 34 107 140 67 200 197 86 140 16
-+124 176 137 122 178 52 245 174 139 37 41 48 72 226 6 206 119 233 30 100 116 173
-+160 214 173 26 176 54 160 80 135 124 93 175 24 44 191 164 210 83 257 184 140 99
-+86 57 54 243 42 16 41 214 256 205 57 188 21 161 99 180 133 32 192 17 71 113 145
-+219 231 198 199 1 3 12 211 228 4 31 213 237 203 48 249 4 125 72 215 152 66 87
-+76 56 252 241 33 77 24 178 229 23 76 222 176 220 84 59 186 106 38 103 93 81 165
-+23 242 146 155 11 66 4 114 175 75 120 169 113 228 181 69 115 60 82 227 25 251
-+85 172 47 136 186 138 184 223 61 184 191 175 107 6 29 81 114 207 221 197 137
-+216 254 73 194 192 194 109 232 11 98 107 234 143 221 146 61 195 88 55 139 120 3
-+189 249 87 87 170 132 13 147 51 132 96 109 149 49 217 233 113 62 257 90 64 78
-+137 39 216 171 111 53 58 73 28 8 215 58 250 66 170 38 197 169 102 114 41 37 218
-+86 234 92 145 125 155 177 250 243 208 200 20 48 21 150 245 40 101 178 218 169
-+196 190 19 246 236 141 46 23 65 108 36 188 187 85 78 231 115 237 120 86 151 130
-+4 208 34 96 26 187 168 40 112 32 98 201 50 164 127 121 159 7 19 235 122 1 14
-+126 91 118 5 104 112 126 174 222 259 182 225 193 90 230 2 116 90 198 116 39 122
-+95 90 147 40 18 216 77 35 75 109 55 190 196 24 95 7 185 159 101 95 256 71 19 69
-+198 22 180 144 146 72 49 228 87 253 94 111 64 172 213 60 165 189 166 125 206 36
-+11 149 183 255 92 196 201 133 126 8 38 20 131 213 ^
-+547 0 29 162 161 178 142 14 207 49 141 31 120 183 72 135 212 73 161 198 101 136
-+238 59 189 173 192 94 29 205 60 78 48 158 206 254 114 176 227 102 213 224 87
-+164 213 150 147 175 76 227 196 112 124 255 97 1 93 171 109 132 146 75 201 210
-+84 149 215 139 210 158 38 153 14 133 109 152 156 248 232 9 183 240 236 50 167
-+17 148 158 163 93 3 8 32 103 8 200 204 108 32 9 58 89 247 175 244 66 85 155 191
-+256 154 239 210 115 139 42 108 200 110 209 132 103 176 39 42 151 99 10 115 65
-+102 119 63 187 258 69 100 204 202 193 171 15 233 35 118 6 211 141 125 70 83 29
-+68 67 185 81 157 106 117 148 64 2 193 46 75 33 160 246 55 97 138 153 182 183
-+260 195 223 198 27 247 38 184 55 222 78 142 57 106 211 47 226 170 126 96 18 6
-+43 40 25 238 227 28 11 235 212 30 36 195 254 239 116 165 28 85 175 150 167 185
-+249 258 206 160 215 65 8 220 163 19 63 19 157 180 57 137 201 136 144 160 78 216
-+259 95 86 232 177 22 129 68 168 117 74 124 13 56 174 124 181 157 12 218 248 158
-+69 194 103 51 99 53 14 176 59 52 62 130 20 214 156 123 30 20 46 106 23 249 164
-+45 49 47 132 9 15 139 136 7 100 16 91 182 46 149 184 98 121 240 48 252 156 154
-+71 109 226 96 186 107 143 134 92 188 22 4 128 179 242 151 173 161 104 202 25 70
-+126 190 179 168 211 235 24 181 251 173 67 205 40 68 137 127 196 206 23 155 3
-+145 92 114 82 66 253 256 29 37 221 189 5 91 256 197 138 59 21 72 41 51 224 255
-+3 102 193 3 176 133 203 51 56 154 165 8 126 2 119 157 86 107 237 33 203 145 217
-+54 71 203 125 207 143 40 193 77 116 122 78 236 7 6 117 242 225 113 150 241 125
-+238 133 129 111 67 17 242 57 12 50 147 7 237 127 153 45 123 198 121 146 149 90
-+199 221 21 166 202 162 130 188 53 45 217 148 232 52 82 140 142 245 166 222 172
-+41 219 63 93 97 169 194 9 152 250 147 132 177 65 28 179 74 50 73 118 37 201 230
-+94 60 246 149 47 38 110 115 233 203 219 106 43 208 75 76 59 95 12 30 188 96 206
-+117 54 165 102 25 164 76 39 136 101 261 178 48 64 45 143 208 32 177 159 189 79
-+31 245 123 61 10 135 24 13 150 73 24 87 90 62 161 10 41 125 209 ^
-+542 1 244 136 232 140 62 122 105 91 158 30 27 151 82 16 94 23 79 199 84 221 98
-+128 81 77 247 1 17 48 259 261 187 66 216 87 75 68 142 230 225 203 130 18 35 27
-+125 201 226 179 142 252 60 255 167 146 82 42 239 77 258 21 116 96 191 123 33
-+123 22 103 128 55 196 193 86 136 16 120 168 133 114 170 48 237 162 135 29 29 40
-+60 218 2 198 119 229 22 92 108 161 148 202 165 26 164 50 152 80 127 116 85 171
-+24 44 191 160 198 71 249 180 140 99 82 53 54 235 42 12 37 206 248 193 49 176 9
-+157 91 180 129 20 188 5 63 109 137 219 231 190 195 1 259 8 207 224 19 201 237
-+199 36 241 256 117 72 203 152 58 87 64 48 248 241 29 77 20 166 229 11 72 214
-+172 216 76 55 174 94 34 99 93 73 153 19 238 138 147 263 54 4 102 163 63 120 157
-+113 220 181 57 111 52 78 223 13 251 73 164 39 132 186 138 184 223 61 172 179
-+175 107 6 17 81 114 207 213 185 125 212 246 73 190 184 186 101 224 11 98 95 226
-+131 221 146 49 187 88 51 139 112 255 189 245 75 79 162 124 9 135 51 128 92 97
-+141 49 213 233 105 54 257 82 64 74 129 31 208 163 111 41 58 65 24 260 211 54
-+246 62 170 26 197 169 98 106 41 25 210 78 234 92 145 121 155 165 242 243 208
-+200 12 48 21 142 241 40 97 178 214 161 196 182 7 242 232 129 42 23 57 100 32
-+184 175 81 66 227 107 233 116 74 151 130 260 200 34 88 14 179 164 28 112 28 90
-+193 38 156 115 109 159 259 19 227 118 253 10 122 83 256 106 257 104 104 126 166
-+218 255 178 225 181 90 230 262 104 78 186 112 39 110 87 86 147 36 14 216 65 35
-+75 105 43 178 188 16 83 3 185 151 93 95 252 71 11 61 194 14 168 144 134 64 37
-+228 83 245 86 99 56 172 205 56 161 185 162 113 194 36 3 137 171 251 84 184 197
-+121 118 30 16 131 188 27 162 161 174 142 14 205 45 141 27 114 181 68 131 210 67
-+155 198 97 130 234 55 185 173 192 88 25 199 58 76 44 154 200 250 108 172 227 96
-+213 222 85 160 209 150 143 169 72 225 192 110 124 251 95 263 91 169 109 126 140
-+73 201 204 80 149 215 137 208 152 32 147 10 133 103 150 154 248 230 9 183 236
-+234 44 165 15 144 156 163 89 1 6 28 101 8 196 204 106 164 ^
-+567 0 1 46 89 239 167 236 62 85 143 187 256 154 235 210 115 131 38 108 196 106
-+209 124 103 176 31 34 139 91 10 107 61 94 115 59 179 258 69 92 200 202 189 171
-+11 225 31 106 264 207 137 121 70 83 29 64 67 177 77 145 102 113 144 56 2 181 34
-+67 33 160 246 47 85 126 145 174 171 260 183 215 190 23 247 38 180 55 222 70 138
-+45 98 211 39 226 166 118 92 6 260 39 32 25 234 219 20 3 227 212 30 254 28 195
-+254 239 112 153 28 73 171 138 167 181 245 250 198 148 207 65 262 220 155 15 55
-+11 153 172 57 137 193 128 132 156 78 208 255 91 82 232 177 22 129 68 168 105 74
-+112 9 44 174 116 177 149 4 218 240 158 65 190 95 39 87 41 2 164 59 52 50 118 20
-+214 144 111 18 16 46 106 15 249 152 37 45 43 128 5 15 127 136 3 100 4 79 182 42
-+137 176 86 117 240 36 248 156 150 67 105 218 96 174 99 135 134 88 176 14 258
-+124 175 234 147 161 153 100 198 21 66 114 190 167 164 203 235 16 173 247 165 55
-+205 28 56 129 123 184 206 19 151 257 133 80 106 70 66 253 248 17 25 217 177 5
-+87 252 185 130 47 13 68 29 47 224 251 261 102 185 3 172 129 195 43 56 146 165
-+122 260 111 157 74 95 233 29 191 141 217 50 63 203 113 199 139 36 193 73 116
-+122 66 236 7 2 109 242 217 105 146 237 125 238 121 125 99 63 9 238 49 50 135
-+261 229 127 153 45 115 186 121 142 141 78 191 213 9 166 190 150 122 188 53 41
-+213 148 224 40 78 136 130 241 154 218 168 33 215 63 81 97 165 194 263 144 250
-+143 132 173 53 24 171 66 42 65 118 37 189 226 94 60 242 145 47 30 110 111 229
-+199 211 94 43 200 63 64 55 83 12 22 184 84 202 117 46 161 98 17 164 76 27 132
-+101 261 174 44 52 33 143 204 32 169 151 185 75 31 245 123 57 264 135 12 5 142
-+69 20 75 86 62 157 2 37 117 101 244 132 228 136 58 116 105 91 154 24 27 149 76
-+10 90 19 79 199 84 219 92 128 77 73 243 263 17 42 259 259 187 62 212 85 71 62
-+140 226 221 201 126 18 33 21 121 197 224 179 136 252 58 255 163 140 82 38 235
-+71 256 15 110 94 187 117 29 119 16 101 122 49 194 191 86 134 16 118 164 131 110
-+166 46 233 156 133 25 23 36 54 214 194 119 227 18 88 104 155 142 196 161 26 158
-+48 148 80 123 112 81 169 24 44 191 158 192 65 245 178 140 223 ^
-+551 1 78 49 54 227 42 8 33 198 240 181 41 164 265 153 83 180 125 8 184 261 55
-+105 129 219 231 182 191 1 255 4 203 220 264 7 189 237 195 24 233 248 109 72 191
-+152 50 87 52 40 244 241 25 77 16 154 229 267 68 206 168 212 68 51 162 82 30 95
-+93 65 141 15 234 130 139 255 42 4 90 151 51 120 145 113 212 181 45 107 44 74
-+219 1 251 61 156 31 128 186 138 184 223 61 160 167 175 107 6 5 81 114 207 205
-+173 113 208 238 73 186 176 178 93 216 11 98 83 218 119 221 146 37 179 88 47 139
-+104 247 189 241 63 71 154 116 5 123 51 124 88 85 133 49 209 233 97 46 257 74 64
-+70 121 23 200 155 111 29 58 57 20 252 207 50 242 58 170 14 197 169 94 98 41 13
-+202 70 234 92 145 117 155 153 234 243 208 200 4 48 21 134 237 40 93 178 210 153
-+196 174 263 238 228 117 38 23 49 92 28 180 163 77 54 223 99 229 112 62 151 130
-+256 192 34 80 2 171 160 16 112 24 82 185 26 148 103 97 159 251 19 219 114 245 6
-+118 75 252 94 249 104 96 126 158 214 251 174 225 169 90 230 262 92 66 174 108
-+39 98 79 82 147 32 10 216 53 35 75 101 31 166 180 8 71 267 185 143 85 95 248 71
-+3 53 190 6 156 144 122 56 25 228 79 237 78 87 48 172 197 52 157 181 158 101 182
-+36 263 125 159 247 76 172 193 109 110 260 22 12 131 176 23 162 161 166 142 14
-+201 37 141 19 102 177 60 123 206 55 143 198 89 118 226 47 177 173 192 76 17 187
-+54 72 36 146 188 242 96 164 227 84 213 218 81 152 201 150 135 157 64 221 184
-+106 124 243 91 263 87 165 109 114 128 69 201 192 72 149 215 133 204 140 20 135
-+2 133 91 146 150 248 226 9 183 228 230 32 161 11 136 152 163 81 265 2 20 97 8
-+188 204 102 26 265 40 89 235 163 232 60 85 137 185 256 154 233 210 115 127 36
-+108 194 104 209 120 103 176 27 30 133 87 10 103 59 90 113 57 175 258 69 88 198
-+202 187 171 9 221 29 100 262 205 135 119 70 83 29 62 67 173 75 139 100 111 142
-+52 2 175 28 63 33 160 246 43 79 120 141 170 165 260 177 211 186 21 247 38 178
-+55 222 66 136 39 94 211 35 226 164 114 90 256 37 28 25 232 215 16 267 223 212
-+30 250 24 195 254 239 110 147 28 67 169 132 167 179 243 246 194 142 203 65 263 ^
-+578 0 220 147 11 47 3 149 164 57 137 185 120 120 152 78 200 251 87 78 232 177
-+22 129 68 168 93 74 100 5 32 174 108 173 141 266 218 232 158 61 186 87 27 75 29
-+260 152 59 52 38 106 20 214 132 99 6 12 46 106 7 249 140 29 41 39 124 1 15 115
-+136 269 100 262 67 182 38 125 168 74 113 240 24 244 156 146 63 101 210 96 162
-+91 127 134 84 164 6 250 120 171 226 143 149 145 96 194 17 62 102 190 155 160
-+195 235 8 165 243 157 43 205 16 44 121 119 172 206 15 147 249 121 68 98 58 66
-+253 240 5 13 213 165 5 83 248 173 122 35 5 64 17 43 224 247 257 102 177 3 168
-+125 187 35 56 138 165 262 118 256 103 157 62 83 229 25 179 137 217 46 55 203
-+101 191 135 32 193 69 116 122 54 236 7 268 101 242 209 97 142 233 125 238 109
-+121 87 59 1 234 41 258 50 123 253 221 127 153 45 107 174 121 138 133 66 183 205
-+267 166 178 138 114 188 53 37 209 148 216 28 74 132 118 237 142 214 164 25 211
-+63 69 97 161 194 255 136 250 139 132 169 41 20 163 58 34 57 118 37 177 222 94
-+60 238 141 47 22 110 107 225 195 203 82 43 192 51 52 51 71 12 14 180 72 198 117
-+38 157 94 9 164 76 15 128 101 261 170 40 40 21 143 200 32 161 143 181 71 31 245
-+123 53 256 135 267 134 65 16 63 82 62 153 264 33 109 89 244 124 220 128 50 104
-+105 91 146 12 27 145 64 268 82 11 79 199 84 215 80 128 69 65 235 259 17 30 259
-+255 187 54 204 81 63 50 136 218 213 197 118 18 29 9 113 189 220 179 124 252 54
-+255 155 128 82 30 227 59 252 3 98 90 179 105 21 111 4 97 110 37 190 187 86 130
-+16 114 156 127 102 158 42 225 144 129 17 11 28 42 206 266 186 119 223 10 80 96
-+143 130 184 153 26 146 44 140 80 115 104 73 165 24 44 191 154 180 53 237 174
-+140 99 76 47 54 223 42 6 31 194 236 175 37 158 261 151 79 180 123 2 182 257 51
-+103 125 219 231 178 189 1 253 2 201 218 264 1 183 237 193 18 229 244 105 72 185
-+152 46 87 46 36 242 241 23 77 14 148 229 263 66 202 166 210 64 49 156 76 28 93
-+93 61 135 13 232 126 135 251 36 4 84 145 45 120 139 113 208 181 39 105 40 72
-+217 265 251 55 152 27 126 186 138 184 223 61 154 161 175 107 6 269 81 114 207
-+201 167 107 206 234 73 184 172 174 89 212 11 98 77 214 113 221 146 31 175 88 45
-+139 100 243 189 213 ^
-+578 1 51 63 146 108 1 111 51 120 84 73 125 49 205 233 89 38 257 66 64 66 113 15
-+192 147 111 17 58 49 16 244 203 46 238 54 170 2 197 169 90 90 41 1 194 62 234
-+92 145 113 155 141 226 243 208 200 268 48 21 126 233 40 89 178 206 145 196 166
-+255 234 224 105 34 23 41 84 24 176 151 73 42 219 91 225 108 50 151 130 252 184
-+34 72 262 163 156 4 112 20 74 177 14 140 91 85 159 243 19 211 110 237 2 114 67
-+248 82 241 104 88 126 150 210 247 170 225 157 90 230 262 80 54 162 104 39 86 71
-+78 147 28 6 216 41 35 75 97 19 154 172 59 267 185 135 77 95 244 71 267 45 186
-+270 144 144 110 48 13 228 75 229 70 75 40 172 189 48 153 177 154 89 170 36 259
-+113 147 243 68 160 189 97 102 256 14 8 131 164 19 162 161 158 142 14 197 29 141
-+11 90 173 52 115 202 43 131 198 81 106 218 39 169 173 192 64 9 175 50 68 28 138
-+176 234 84 156 227 72 213 214 77 144 193 150 127 145 56 217 176 102 124 235 87
-+263 83 161 109 102 116 65 201 180 64 149 215 129 200 128 8 123 266 133 79 142
-+146 248 222 9 183 220 226 20 157 7 128 148 163 73 265 270 12 93 8 180 204 98 22
-+261 28 89 227 155 224 56 85 125 181 256 154 229 210 115 119 32 108 190 100 209
-+112 103 176 19 22 121 79 10 95 55 82 109 53 167 258 69 80 194 202 183 171 5 213
-+25 88 258 201 131 115 70 83 29 58 67 165 71 127 96 107 138 44 2 163 16 55 33
-+160 246 35 67 108 133 162 153 260 165 203 178 17 247 38 174 55 222 58 132 27 86
-+211 27 226 160 106 86 260 248 33 20 25 228 207 8 263 215 212 30 242 16 195 254
-+239 106 135 28 55 165 120 167 175 239 238 186 130 195 65 250 220 143 9 43 271
-+147 160 57 137 181 116 114 150 78 196 249 85 76 232 177 22 129 68 168 87 74 94
-+3 26 174 104 171 137 264 218 228 158 59 184 83 21 69 23 256 146 59 52 32 100 20
-+214 126 93 10 46 106 3 249 134 25 39 37 122 271 15 109 136 269 100 258 61 182
-+36 119 164 68 111 240 18 242 156 144 61 99 206 96 156 87 123 134 82 158 2 246
-+118 169 222 141 143 141 94 192 15 60 96 190 149 158 191 235 4 161 241 153 37
-+205 10 38 117 117 166 206 13 145 245 115 62 94 52 66 253 236 271 7 211 159 5 81
-+246 167 118 29 1 62 11 41 224 245 255 102 173 3 166 123 183 31 56 134 165 260
-+116 254 81 ^
-+583 1 157 50 71 225 21 167 133 217 42 47 203 89 183 131 28 193 65 116 122 42
-+236 7 268 93 242 201 89 138 229 125 238 97 117 75 55 267 230 33 250 50 111 245
-+213 127 153 45 99 162 121 134 125 54 175 197 259 166 166 126 106 188 53 33 205
-+148 208 16 70 128 106 233 130 210 160 17 207 63 57 97 157 194 247 128 250 135
-+132 165 29 16 155 50 26 49 118 37 165 218 94 60 234 137 47 14 110 103 221 191
-+195 70 43 184 39 40 47 59 12 6 176 60 194 117 30 153 90 1 164 76 3 124 101 261
-+166 36 28 9 143 196 32 153 135 177 67 31 245 123 49 248 135 262 263 126 61 12
-+51 78 62 149 260 29 101 77 244 116 212 120 42 92 105 91 138 27 141 52 260 74 3
-+79 199 84 211 68 128 61 57 227 255 17 18 259 251 187 46 196 77 55 38 132 210
-+205 193 110 18 25 271 105 181 216 179 112 252 50 255 147 116 82 22 219 47 248
-+265 86 86 171 93 13 103 266 93 98 25 186 183 86 126 16 110 148 123 94 150 38
-+217 132 125 9 273 20 30 198 266 178 119 219 2 72 88 131 118 172 145 26 134 40
-+132 80 107 96 65 161 24 44 191 150 168 41 229 170 140 99 72 43 54 215 42 2 27
-+186 228 163 29 146 253 147 71 180 119 264 178 249 43 99 117 219 231 170 185 1
-+249 272 197 214 264 263 171 237 189 6 221 236 97 72 173 152 38 87 34 28 238 241
-+19 77 10 136 229 255 62 194 162 206 56 45 144 64 24 89 93 53 123 9 228 118 127
-+243 24 4 72 133 33 120 127 113 200 181 27 101 32 68 213 257 251 43 144 19 122
-+186 138 184 223 61 142 149 175 107 6 261 81 114 207 193 155 95 202 226 73 180
-+164 166 81 204 11 98 65 206 101 221 146 19 167 88 41 139 92 235 189 235 45 59
-+142 104 273 105 51 118 82 67 121 49 203 233 85 34 257 62 64 64 109 11 188 143
-+111 11 58 45 14 240 201 44 236 52 170 270 197 169 88 86 41 269 190 58 234 92
-+145 111 155 135 222 243 208 200 266 48 21 122 231 40 87 178 204 141 196 162 251
-+232 222 99 32 23 37 80 22 174 145 71 36 217 87 223 106 44 151 130 250 180 34 68
-+258 159 154 272 112 18 70 173 8 136 85 79 159 239 19 207 108 233 112 63 246 76
-+237 104 84 126 146 208 245 168 225 151 90 230 262 74 48 156 102 39 80 67 76 147
-+26 4 216 35 35 75 95 13 148 168 270 53 267 185 131 73 95 242 71 265 41 184 268
-+138 144 104 44 7 228 73 225 66 69 36 272 ^
-+588 0 181 44 149 173 150 77 158 36 255 101 135 239 60 148 185 85 94 252 6 4 131
-+152 15 162 161 150 142 14 193 21 141 3 78 169 44 107 198 31 119 198 73 94 210
-+31 161 173 192 52 1 163 46 64 20 130 164 226 72 148 227 60 213 210 73 136 185
-+150 119 133 48 213 168 98 124 227 83 263 79 157 109 90 104 61 201 168 56 149
-+215 125 196 116 272 111 262 133 67 138 142 248 218 9 183 212 222 8 153 3 120
-+144 163 65 265 270 4 89 8 172 204 94 18 257 16 89 219 147 216 52 85 113 177 256
-+154 225 210 115 111 28 108 186 96 209 104 103 176 11 14 109 71 10 87 51 74 105
-+49 159 258 69 72 190 202 179 171 1 205 21 76 254 197 127 111 70 83 29 54 67 157
-+67 115 92 103 134 36 2 151 4 47 33 160 246 27 55 96 125 154 141 260 153 195 170
-+13 247 38 170 55 222 50 128 15 78 211 19 226 156 98 82 252 240 29 12 25 224 199
-+259 207 212 30 234 8 195 254 239 102 123 28 43 161 108 167 171 235 230 178 118
-+187 65 242 220 135 5 35 267 143 152 57 137 173 108 102 146 78 188 245 81 72 232
-+177 22 129 68 168 75 74 82 275 14 174 96 167 129 260 218 220 158 55 180 75 9 57
-+11 248 134 59 52 20 88 20 214 114 81 264 6 46 106 271 249 122 17 35 33 118 271
-+15 97 136 269 100 250 49 182 32 107 156 56 107 240 6 238 156 140 57 95 198 96
-+144 79 115 134 78 146 270 238 114 165 214 137 131 133 90 188 11 56 84 190 137
-+154 183 235 272 153 237 145 25 205 274 26 109 113 154 206 9 141 237 103 50 86
-+40 66 253 228 263 271 207 147 5 77 242 155 110 17 269 58 275 37 224 241 251 102
-+165 3 162 119 175 23 56 126 165 256 112 250 91 157 44 65 223 19 161 131 217 40
-+43 203 83 179 129 26 193 63 116 122 36 236 7 268 89 242 197 85 136 227 125 238
-+91 115 69 53 265 228 29 246 50 105 241 209 127 153 45 95 156 121 132 121 48 171
-+193 255 166 160 120 102 188 53 31 203 148 204 10 68 126 100 231 124 208 158 13
-+205 63 51 97 155 194 243 124 250 133 132 163 23 14 151 46 22 45 118 37 159 216
-+94 60 232 135 47 10 110 101 219 189 191 64 43 180 33 34 45 53 12 2 174 54 192
-+117 26 151 88 273 164 76 273 122 101 261 164 34 22 3 143 194 32 149 131 175 65
-+31 245 123 47 244 135 258 261 122 59 10 45 76 62 147 258 27 97 71 244 112 208
-+116 38 86 105 91 134 270 27 139 46 256 70 275 79 199 160 ^
-+594 0 207 56 128 53 49 219 251 17 6 259 247 187 38 188 73 47 26 128 202 197 189
-+102 18 21 263 97 173 212 179 100 252 46 255 139 104 82 14 211 35 244 257 74 82
-+163 81 5 95 258 89 86 13 182 179 86 122 16 106 140 119 86 142 34 209 120 121 1
-+265 12 18 190 266 170 119 215 272 64 80 119 106 160 137 26 122 36 124 80 99 88
-+57 157 24 44 191 146 156 29 221 166 140 99 68 39 54 207 42 276 23 178 220 151
-+21 134 245 143 63 180 115 256 174 241 35 95 109 219 231 162 181 1 245 272 193
-+210 264 255 159 237 185 272 213 228 89 72 161 152 30 87 22 20 234 241 15 77 6
-+124 229 247 58 186 158 202 48 41 132 52 20 85 93 45 111 5 224 110 119 235 12 4
-+60 121 21 120 115 113 192 181 15 97 24 64 209 249 251 31 136 11 118 186 138 184
-+223 61 130 137 175 107 6 253 81 114 207 185 143 83 198 218 73 176 156 158 73
-+196 11 98 53 198 89 221 146 7 159 88 37 139 84 227 189 231 33 51 134 96 273 93
-+51 114 78 55 113 49 199 233 77 26 257 54 64 60 101 3 180 135 111 277 58 37 10
-+232 197 40 232 48 170 262 197 169 84 78 41 261 182 50 234 92 145 107 155 123
-+214 243 208 200 262 48 21 114 227 40 83 178 200 133 196 154 243 228 218 87 28
-+23 29 72 18 170 133 67 24 213 79 219 102 32 151 130 246 172 34 60 250 151 150
-+264 112 14 62 165 274 128 73 67 159 231 19 199 104 225 274 108 55 242 64 229
-+104 76 126 138 204 241 164 225 139 90 230 262 62 36 144 98 39 68 59 72 147 22
-+216 23 35 75 91 1 136 160 266 41 267 185 123 65 95 238 71 261 33 180 264 126
-+144 92 36 273 228 69 217 58 57 28 172 177 42 147 171 148 71 152 36 253 95 129
-+237 56 142 183 79 90 250 2 2 131 146 13 162 161 146 142 14 191 17 141 277 72
-+167 40 103 196 25 113 198 69 88 206 27 157 173 192 46 275 157 44 62 16 126 158
-+222 66 144 227 54 213 208 71 132 181 150 115 127 44 211 164 96 124 223 81 263
-+77 155 109 84 98 59 201 162 52 149 215 123 194 110 268 105 260 133 61 136 140
-+248 216 9 183 208 220 2 151 1 116 142 163 61 265 270 87 8 168 204 92 16 255 10
-+89 215 143 212 50 85 107 175 256 154 223 210 115 107 26 108 184 94 209 100 103
-+176 7 10 103 67 10 83 49 70 103 47 155 258 69 68 188 202 177 171 277 201 19 70
-+252 195 125 109 70 83 29 52 67 153 65 109 90 101 132 32 2 145 276 43 33 160 246
-+23 259 ^
-+600 1 87 119 148 132 260 144 189 164 10 247 38 167 55 222 44 125 6 72 211 13
-+226 153 92 79 246 234 26 6 25 221 193 273 256 201 212 30 228 2 195 254 239 99
-+114 28 34 158 99 167 168 232 224 172 109 181 65 236 220 129 2 29 264 140 146 57
-+137 167 102 93 143 78 182 242 78 69 232 177 22 129 68 168 66 74 73 275 5 174 90
-+164 123 257 218 214 158 52 177 69 48 2 242 125 59 52 11 79 20 214 105 72 258 3
-+46 106 268 249 113 11 32 30 115 271 15 88 136 269 100 244 40 182 29 98 150 47
-+104 240 276 235 156 137 54 92 192 96 135 73 109 134 75 137 267 232 111 162 208
-+134 122 127 87 185 8 53 75 190 128 151 177 235 269 147 234 139 16 205 268 17
-+103 110 145 206 6 138 231 94 41 80 31 66 253 222 257 265 204 138 5 74 239 146
-+104 8 266 55 269 34 224 238 248 102 159 3 159 116 169 17 56 120 165 253 109 247
-+85 157 35 56 220 16 152 128 217 37 37 203 74 173 126 23 193 60 116 122 27 236 7
-+268 83 242 191 79 133 224 125 238 82 112 60 50 262 225 23 240 50 96 235 203 127
-+153 45 89 147 121 129 115 39 165 187 249 166 151 111 96 188 53 28 200 148 198 1
-+65 123 91 228 115 205 155 7 202 63 42 97 152 194 237 118 250 130 132 160 14 11
-+145 40 16 39 118 37 150 213 94 60 229 132 47 4 110 98 216 186 185 55 43 174 24
-+25 42 44 12 275 171 45 189 117 20 148 85 270 164 76 267 119 101 261 161 31 13
-+273 143 191 32 143 125 172 62 31 245 123 44 238 135 252 258 116 56 7 36 73 62
-+144 255 24 91 62 244 106 202 110 32 77 105 91 128 264 27 136 37 250 64 272 79
-+199 84 206 53 128 51 47 217 250 17 3 259 246 187 36 186 72 45 23 127 200 195
-+188 100 18 20 261 95 171 211 179 97 252 45 255 137 101 82 12 209 32 243 255 71
-+81 161 78 3 93 256 88 83 10 181 178 86 121 16 105 138 118 84 140 33 207 117 120
-+278 263 10 15 188 266 168 119 214 271 62 78 116 103 157 135 26 119 35 122 80 97
-+86 55 156 24 44 191 145 153 26 219 165 140 99 67 38 54 205 42 276 22 176 218
-+148 19 131 243 142 61 180 114 254 173 239 33 94 107 219 231 160 180 1 244 272
-+192 209 264 253 156 237 184 270 211 226 87 72 158 152 28 87 19 18 233 241 14 77
-+5 121 229 245 57 184 157 201 46 40 129 49 19 84 93 43 108 4 223 108 117 233 9 4
-+57 118 18 120 112 113 190 181 12 96 22 63 208 247 251 28 134 9 117 186 138 184
-+223 61 127 216 ^
-+590 1 175 107 6 247 81 114 207 179 134 74 195 212 73 173 150 152 67 190 11 98
-+44 192 80 221 146 279 153 88 34 139 78 221 189 228 24 45 128 90 273 84 51 111
-+75 46 107 49 196 233 71 20 257 48 64 57 95 278 174 129 111 271 58 31 7 226 194
-+37 229 45 170 256 197 169 81 72 41 255 176 44 234 92 145 104 155 114 208 243
-+208 200 259 48 21 108 224 40 80 178 197 127 196 148 237 225 215 78 25 23 23 66
-+15 167 124 64 15 210 73 216 99 23 151 130 243 166 34 54 244 145 147 258 112 11
-+56 159 268 122 64 58 159 225 19 193 101 219 274 105 49 239 55 223 104 70 126
-+132 201 238 161 225 130 90 230 262 53 27 135 95 39 59 53 69 147 19 278 216 14
-+35 75 88 273 127 154 263 32 267 185 117 59 95 235 71 258 27 177 261 117 144 83
-+30 267 228 66 211 52 48 22 172 171 39 144 168 145 62 143 36 250 86 120 234 50
-+133 180 70 84 247 277 280 131 137 10 162 161 140 142 14 188 11 141 274 63 164
-+34 97 193 16 104 198 63 79 200 21 151 173 192 37 272 148 41 59 10 120 149 216
-+57 138 227 45 213 205 68 126 175 150 109 118 38 208 158 93 124 217 78 263 74
-+152 109 75 89 56 201 153 46 149 215 120 191 101 262 96 257 133 52 133 137 248
-+213 9 183 202 217 274 148 279 110 139 163 55 265 270 275 84 8 162 204 89 13 252
-+1 89 209 137 206 47 85 98 172 256 154 220 210 115 101 23 108 181 91 209 94 103
-+176 1 4 94 61 10 77 46 64 100 44 149 258 69 62 185 202 174 171 277 195 16 61
-+249 192 122 106 70 83 29 49 67 147 62 100 87 98 129 26 2 136 270 37 33 160 246
-+17 40 81 115 144 126 260 138 185 160 8 247 38 165 55 222 40 123 68 211 9 226
-+151 88 77 242 230 24 2 25 219 189 271 254 197 212 30 224 279 195 254 239 97 108
-+28 28 156 93 167 166 230 220 168 103 177 65 232 220 125 25 262 138 142 57 137
-+163 98 87 141 78 178 240 76 67 232 177 22 129 68 168 60 74 67 275 280 174 86
-+162 119 255 218 210 158 50 175 65 275 42 277 238 119 59 52 5 73 20 214 99 66
-+254 1 46 106 266 249 107 7 30 28 113 271 15 82 136 269 100 240 34 182 27 92 146
-+41 102 240 272 233 156 135 52 90 188 96 129 69 105 134 73 131 265 228 109 160
-+204 132 116 123 85 183 6 51 69 190 122 149 173 235 267 143 232 135 10 205 264
-+11 99 108 139 206 4 136 227 88 35 76 25 66 253 218 253 261 202 132 5 72 237 140
-+203 ^
-+620 0 279 262 51 261 30 224 234 244 102 151 3 155 112 161 9 56 112 165 249 105
-+243 77 157 23 44 216 12 140 124 217 33 29 203 62 165 122 19 193 56 116 122 15
-+236 7 268 75 242 183 71 129 220 125 238 70 108 48 46 258 221 15 232 50 84 227
-+195 127 153 45 81 135 121 125 107 27 157 179 241 166 139 99 88 188 53 24 196
-+148 190 272 61 119 79 224 103 201 151 282 198 63 30 97 148 194 229 110 250 126
-+132 156 2 7 137 32 8 31 118 37 138 209 94 60 225 128 47 279 110 94 212 182 177
-+43 43 166 12 13 38 32 12 271 167 33 185 117 12 144 81 266 164 76 259 115 101
-+261 157 27 1 265 143 187 32 135 117 168 58 31 245 123 40 230 135 244 254 108 52
-+3 24 69 62 140 251 20 83 50 244 98 194 102 24 65 105 91 120 256 27 132 25 242
-+56 268 79 199 84 202 41 128 43 39 209 246 17 274 259 242 187 28 178 68 37 11
-+123 192 187 184 92 18 16 253 87 163 207 179 85 252 41 255 129 89 82 4 201 20
-+239 247 59 77 153 66 278 85 248 84 71 281 177 174 86 117 16 101 130 114 76 132
-+29 199 105 116 274 255 2 3 180 266 160 119 210 267 54 70 104 91 145 127 26 107
-+31 114 80 89 78 47 152 24 44 191 141 141 14 211 161 140 99 63 34 54 197 42 276
-+18 168 210 136 11 119 235 138 53 180 110 246 169 231 25 90 99 219 231 152 176 1
-+240 272 188 205 264 245 144 237 180 262 203 218 79 72 146 152 20 87 7 10 229
-+241 10 77 1 109 229 237 53 176 153 197 38 36 117 37 15 80 93 35 96 219 100 109
-+225 280 4 45 106 6 120 100 113 182 181 92 14 59 204 239 251 16 126 1 113 186
-+138 184 223 61 115 122 175 107 6 243 81 114 207 175 128 68 193 208 73 171 146
-+148 63 186 11 98 38 188 74 221 146 275 149 88 32 139 74 217 189 226 18 41 124
-+86 273 78 51 109 73 40 103 49 194 233 67 16 257 44 64 55 91 276 170 125 111 267
-+58 27 5 222 192 35 227 43 170 252 197 169 79 68 41 251 172 40 234 92 145 102
-+155 108 204 243 208 200 257 48 21 104 222 40 78 178 195 123 196 144 233 223 213
-+72 23 23 19 62 13 165 118 62 9 208 69 214 97 17 151 130 241 162 34 50 240 141
-+145 254 112 9 52 155 264 118 58 52 159 221 19 189 99 215 274 103 45 237 49 219
-+104 66 126 128 199 236 159 225 124 90 230 262 47 21 129 93 39 53 49 67 147 17
-+278 216 8 35 75 86 269 121 150 261 26 267 185 113 55 95 233 71 256 23 175 259
-+111 144 77 26 263 228 64 207 48 42 18 172 167 37 142 166 143 56 137 36 248 80
-+114 232 46 127 257 ^
-+605 1 58 76 243 273 280 131 125 6 162 161 132 142 14 184 3 141 270 51 160 26 89
-+189 4 92 198 55 67 192 13 143 173 192 25 268 136 37 55 2 112 137 208 45 130 227
-+33 213 201 64 118 167 150 101 106 30 204 150 89 124 209 74 263 70 148 109 63 77
-+52 201 141 38 149 215 116 187 89 254 84 253 133 40 129 133 248 209 9 183 194
-+213 266 144 279 102 135 163 47 265 270 271 80 8 154 204 85 9 248 274 89 201 129
-+198 43 85 86 168 256 154 216 210 115 93 19 108 177 87 209 86 103 176 278 281 82
-+53 10 69 42 56 96 40 141 258 69 54 181 202 170 171 277 187 12 49 245 188 118
-+102 70 83 29 45 67 139 58 88 83 94 125 18 2 124 262 29 33 160 246 9 28 69 107
-+136 114 260 126 177 152 4 247 38 161 55 222 32 119 273 60 211 1 226 147 80 73
-+234 222 20 279 25 215 181 267 250 189 212 30 216 275 195 254 239 93 96 28 16
-+152 81 167 162 226 212 160 91 169 65 224 220 117 281 17 258 134 134 57 137 155
-+90 75 137 78 170 236 72 63 232 177 22 129 68 168 48 74 55 275 272 174 78 158
-+111 251 218 202 158 46 171 57 267 30 269 230 107 59 52 278 61 20 214 87 54 246
-+282 46 106 262 249 95 284 26 24 109 271 15 70 136 269 100 232 22 182 23 80 138
-+29 98 240 264 229 156 131 48 86 180 96 117 61 97 134 69 119 261 220 105 156 196
-+128 104 115 81 179 2 47 57 190 110 145 165 235 263 135 228 127 283 205 256 284
-+91 104 127 206 132 219 76 23 68 13 66 253 210 245 253 198 120 5 68 233 128 92
-+275 260 49 257 28 224 232 242 102 147 3 153 110 157 5 56 108 165 247 103 241 73
-+157 17 38 214 10 134 122 217 31 25 203 56 161 120 17 193 54 116 122 9 236 7 268
-+71 242 179 67 127 218 125 238 64 106 42 44 256 219 11 228 50 78 223 191 127 153
-+45 77 129 121 123 103 21 153 175 237 166 133 93 84 188 53 22 194 148 186 268 59
-+117 73 222 97 199 149 280 196 63 24 97 146 194 225 106 250 124 132 154 281 5
-+133 28 4 27 118 37 132 207 94 60 223 126 47 277 110 92 210 180 173 37 43 162 6
-+7 36 26 12 269 165 27 183 117 8 142 79 264 164 76 255 113 101 261 155 25 280
-+261 143 185 32 131 113 166 56 31 245 123 38 226 135 240 252 104 50 1 18 67 62
-+138 249 18 79 44 244 94 190 98 20 59 105 91 116 252 27 130 19 238 52 266 79 199
-+84 200 35 128 39 35 205 244 17 270 259 240 187 24 174 66 33 5 121 188 183 182
-+88 18 14 249 83 159 205 179 79 252 186 ^
-+615 0 255 121 77 82 283 193 8 235 239 47 73 145 54 274 77 240 80 59 273 173 170
-+86 113 16 97 122 110 68 124 25 191 93 112 270 247 281 278 172 266 152 119 206
-+263 46 62 92 79 133 119 26 95 27 106 80 81 70 39 148 24 44 191 137 129 2 203
-+157 140 99 59 30 54 189 42 276 14 160 202 124 3 107 227 134 45 180 106 238 165
-+223 17 86 91 219 231 144 172 1 236 272 184 201 264 237 132 237 176 254 195 210
-+71 72 134 152 12 87 282 2 225 241 6 77 284 97 229 229 49 168 149 193 30 32 105
-+25 11 76 93 27 84 283 215 92 101 217 272 4 33 94 281 120 88 113 174 181 275 88
-+6 55 200 231 251 4 118 280 109 186 138 184 223 61 103 110 175 107 6 235 81 114
-+207 167 116 56 189 200 73 167 138 140 55 178 11 98 26 180 62 221 146 267 141 88
-+28 139 66 209 189 222 6 33 116 78 273 66 51 105 69 28 95 49 190 233 59 8 257 36
-+64 51 83 272 162 117 111 259 58 19 1 214 188 31 223 39 170 244 197 169 75 60 41
-+243 164 32 234 92 145 98 155 96 196 243 208 200 253 48 21 96 218 40 74 178 191
-+115 196 136 225 219 209 60 19 23 11 54 9 161 106 58 284 204 61 210 93 5 151 130
-+237 154 34 42 232 133 141 246 112 5 44 147 256 110 46 40 159 213 19 181 95 207
-+274 99 37 233 37 211 104 58 126 120 195 232 155 225 112 90 230 262 35 9 117 89
-+39 41 41 63 147 13 278 216 283 35 75 82 261 109 142 257 14 267 185 105 47 95
-+229 71 252 15 171 255 99 144 65 18 255 228 60 199 40 30 10 172 159 33 138 162
-+139 44 125 36 244 68 102 228 38 115 174 52 72 241 271 280 131 119 4 162 161 128
-+142 14 182 286 141 268 45 158 22 85 187 285 86 198 51 61 188 9 139 173 192 19
-+266 130 35 53 285 108 131 204 39 126 227 27 213 199 62 114 163 150 97 100 26
-+202 146 87 124 205 72 263 68 146 109 57 71 50 201 135 34 149 215 114 185 83 250
-+78 251 133 34 127 131 248 207 9 183 190 211 262 142 279 98 133 163 43 265 270
-+269 78 8 150 204 83 7 246 270 89 197 125 194 41 85 80 166 256 154 214 210 115
-+89 17 108 175 85 209 82 103 176 276 279 76 49 10 65 40 52 94 38 137 258 69 50
-+179 202 168 171 277 183 10 43 243 186 116 100 70 83 29 43 67 135 56 82 81 92
-+123 14 2 118 258 25 33 160 246 5 22 63 103 132 108 260 120 173 148 2 247 38 159
-+55 222 28 117 269 56 211 284 226 145 76 71 230 218 18 277 25 213 177 265 248
-+185 212 30 212 273 195 254 239 91 90 28 10 150 75 167 160 224 175 ^
-+613 0 152 79 161 65 216 220 109 281 9 254 130 126 57 137 147 82 63 133 78 162
-+232 68 59 232 177 22 129 68 168 36 74 43 275 264 174 70 154 103 247 218 194 158
-+42 167 49 259 18 261 222 95 59 52 270 49 20 214 75 42 238 282 46 106 258 249 83
-+280 22 20 105 271 15 58 136 269 100 224 10 182 19 68 130 17 94 240 256 225 156
-+127 44 82 172 96 105 53 89 134 65 107 257 212 101 152 188 124 92 107 77 175 287
-+43 45 190 98 141 157 235 259 127 224 119 275 205 248 276 83 100 115 206 285 128
-+211 64 11 60 1 66 253 202 237 245 194 108 5 64 229 116 84 267 256 45 249 24 224
-+228 238 102 139 3 149 106 149 286 56 100 165 243 99 237 65 157 5 26 210 6 122
-+118 217 27 17 203 44 153 116 13 193 50 116 122 286 236 7 268 63 242 171 59 123
-+214 125 238 52 102 30 40 252 215 3 220 50 66 215 183 127 153 45 69 117 121 119
-+95 9 145 167 229 166 121 81 76 188 53 18 190 148 178 260 55 113 61 218 85 195
-+145 276 192 63 12 97 142 194 217 98 250 120 132 150 273 1 125 20 285 19 118 37
-+120 203 94 60 219 122 47 273 110 88 206 176 165 25 43 154 283 284 32 14 12 265
-+161 15 179 117 138 75 260 164 76 247 109 101 261 151 21 272 253 143 181 32 123
-+105 162 52 31 245 123 34 218 135 232 248 96 46 286 6 63 62 134 245 14 71 32 244
-+86 182 90 12 47 105 91 108 244 27 126 7 230 44 262 79 199 84 196 23 128 31 27
-+197 240 17 262 259 236 187 16 166 62 25 282 117 180 175 178 80 18 10 241 75 151
-+201 179 67 252 35 255 117 71 82 281 189 2 233 235 41 71 141 48 272 73 236 78 53
-+269 171 168 86 111 16 95 118 108 64 120 23 187 87 110 268 243 279 274 168 266
-+148 119 204 261 42 58 86 73 127 115 26 89 25 102 80 77 66 35 146 24 44 191 135
-+123 285 199 155 140 99 57 28 54 185 42 276 12 156 198 118 288 101 223 132 41
-+180 104 234 163 219 13 84 87 219 231 140 170 1 234 272 182 199 264 233 126 237
-+174 250 191 206 67 72 128 152 8 87 278 287 223 241 4 77 284 91 229 225 47 164
-+147 191 26 30 99 19 9 74 93 23 78 283 213 88 97 213 268 4 27 88 277 120 82 113
-+170 181 271 86 2 53 198 227 251 287 114 278 107 186 138 184 223 61 97 104 175
-+107 6 231 81 114 207 163 110 50 187 196 73 165 134 136 51 174 11 98 20 176 56
-+221 146 263 137 88 26 139 62 205 189 220 29 112 74 273 60 51 103 67 22 91 49
-+188 233 55 4 257 32 64 49 79 270 158 113 111 255 58 15 288 210 213 ^
-+624 1 28 220 36 170 238 197 169 72 54 41 237 158 26 234 92 145 95 155 87 190
-+243 208 200 250 48 21 90 215 40 71 178 188 109 196 130 219 216 206 51 16 23 5
-+48 6 158 97 55 278 201 55 207 90 286 151 130 234 148 34 36 226 127 138 240 112
-+2 38 141 250 104 37 31 159 207 19 175 92 201 274 96 31 230 28 205 104 52 126
-+114 192 229 152 225 103 90 230 262 26 108 86 39 32 35 60 147 10 278 216 277 35
-+75 79 255 100 136 254 5 267 185 99 41 95 226 71 249 9 168 252 90 144 56 12 249
-+228 57 193 34 21 4 172 153 30 135 159 136 35 116 36 241 59 93 225 32 106 171 43
-+66 238 268 280 131 110 1 162 161 122 142 14 179 283 141 265 36 155 16 79 184
-+279 77 198 45 52 182 3 133 173 192 10 263 121 32 50 282 102 122 198 30 120 227
-+18 213 196 59 108 157 150 91 91 20 199 140 84 124 199 69 263 65 143 109 48 62
-+47 201 126 28 149 215 111 182 74 244 69 248 133 25 124 128 248 204 9 183 184
-+208 256 139 279 92 130 163 37 265 270 266 75 8 144 204 80 4 243 264 89 191 119
-+188 38 85 71 163 256 154 211 210 115 83 14 108 172 82 209 76 103 176 273 276 67
-+43 10 59 37 46 91 35 131 258 69 44 176 202 165 171 277 177 7 34 240 183 113 97
-+70 83 29 40 67 129 53 73 78 89 120 8 2 109 252 19 33 160 246 289 13 54 97 126
-+99 260 111 167 142 289 247 38 156 55 222 22 114 263 50 211 281 226 142 70 68
-+224 212 15 274 25 210 171 262 245 179 212 30 206 270 195 254 239 88 81 28 1 147
-+66 167 157 221 202 150 76 159 65 214 220 107 281 7 253 129 124 57 137 145 80 60
-+132 78 160 231 67 58 232 177 22 129 68 168 33 74 40 275 262 174 68 153 101 246
-+218 192 158 41 166 47 257 15 259 220 92 59 52 268 46 20 214 72 39 236 282 46
-+106 257 249 80 279 21 19 104 271 15 55 136 269 100 222 7 182 18 65 128 14 93
-+240 254 224 156 126 43 81 170 96 102 51 87 134 64 104 256 210 100 151 186 123
-+89 105 76 174 287 42 42 190 95 140 155 235 258 125 223 117 273 205 246 274 81
-+99 112 206 285 127 209 61 8 58 288 66 253 200 235 243 193 105 5 63 228 113 82
-+265 255 44 247 23 224 227 237 102 137 3 148 105 147 285 56 98 165 242 98 236 63
-+157 2 23 209 5 119 117 217 26 15 203 41 151 115 12 193 49 116 122 284 236 7 268
-+61 242 169 57 122 213 125 238 49 101 27 39 251 214 1 218 50 63 213 181 127 153
-+45 67 114 121 118 93 6 143 165 227 166 118 78 74 188 53 17 189 148 176 258 54
-+112 58 217 82 194 144 275 191 141 ^
-+628 1 3 97 139 194 211 92 250 117 132 147 267 290 119 14 282 13 118 37 111 200
-+94 60 216 119 47 270 110 85 203 173 159 16 43 148 277 278 29 5 12 262 158 6 176
-+117 286 135 72 257 164 76 241 106 101 261 148 18 266 247 143 178 32 117 99 159
-+49 31 245 123 31 212 135 226 245 90 43 286 289 60 62 131 242 11 65 23 244 80
-+176 84 6 38 105 91 102 238 27 123 290 224 38 259 79 199 84 193 14 128 25 21 191
-+237 17 256 259 233 187 10 160 59 19 276 114 174 169 175 74 18 7 235 69 145 198
-+179 58 252 32 255 111 62 82 278 183 285 230 229 32 68 135 39 269 67 230 75 44
-+263 168 165 86 108 16 92 112 105 58 114 20 181 78 107 265 237 276 268 162 266
-+142 119 201 258 36 52 77 64 118 109 26 80 22 96 80 71 60 29 143 24 44 191 132
-+114 279 193 152 140 99 54 25 54 179 42 276 9 150 192 109 285 92 217 129 35 180
-+101 228 160 213 7 81 81 219 231 134 167 1 231 272 179 196 264 227 117 237 171
-+244 185 200 61 72 119 152 2 87 272 284 220 241 1 77 284 82 229 219 44 158 144
-+188 20 27 90 10 6 71 93 17 69 283 210 82 91 207 262 4 18 79 271 120 73 113 164
-+181 265 83 288 50 195 221 251 281 108 275 104 186 138 184 223 61 88 95 175 107
-+6 225 81 114 207 157 101 41 184 190 73 162 128 130 45 168 11 98 11 170 47 221
-+146 257 131 88 23 139 56 199 189 217 283 23 106 68 273 51 51 100 64 13 85 49
-+185 233 49 290 257 26 64 46 73 267 152 107 111 249 58 9 288 204 183 26 218 34
-+170 234 197 169 70 50 41 233 154 22 234 92 145 93 155 81 186 243 208 200 248 48
-+21 86 213 40 69 178 186 105 196 126 215 214 204 45 14 23 1 44 4 156 91 53 274
-+199 51 205 88 282 151 130 232 144 34 32 222 123 136 236 112 34 137 246 100 31
-+25 159 203 19 171 90 197 274 94 27 228 22 201 104 48 126 110 190 227 150 225 97
-+90 230 262 20 286 102 84 39 26 31 58 147 8 278 216 273 35 75 77 251 94 132 252
-+291 267 185 95 37 95 224 71 247 5 166 250 84 144 50 8 245 228 55 189 30 15 172
-+149 28 133 157 134 29 110 36 239 53 87 223 28 100 169 37 62 236 266 280 131 104
-+291 162 161 118 142 14 177 281 141 263 30 153 12 75 182 275 71 198 41 46 178
-+291 129 173 192 4 261 115 30 48 280 98 116 194 24 116 227 12 213 194 57 104 153
-+150 87 85 16 197 136 82 124 195 67 263 63 141 109 42 56 45 201 120 24 149 215
-+109 180 68 240 63 246 133 19 122 126 248 202 9 183 180 206 252 137 279 88 128
-+163 33 265 270 264 73 8 140 204 78 2 241 76 ^
-+622 0 89 183 111 180 34 85 59 159 256 154 207 210 115 75 10 108 168 78 209 68
-+103 176 269 272 55 35 10 51 33 38 87 31 123 258 69 36 172 202 161 171 277 169 3
-+22 236 179 109 93 70 83 29 36 67 121 49 61 74 85 116 2 97 244 11 33 160 246 285
-+1 42 89 118 87 260 99 159 134 289 247 38 152 55 222 14 110 255 42 211 277 226
-+138 62 64 216 204 11 270 25 206 163 258 241 171 212 30 198 266 195 254 239 84
-+69 28 283 143 54 167 153 217 194 142 64 151 65 206 220 99 281 293 249 125 116
-+57 137 137 72 48 128 78 152 227 63 54 232 177 22 129 68 168 21 74 28 275 254
-+174 60 149 93 242 218 184 158 37 162 39 249 3 251 212 80 59 52 260 34 20 214 60
-+27 228 282 46 106 253 249 68 275 17 15 100 271 15 43 136 269 100 214 289 182 14
-+53 120 2 89 240 246 220 156 122 39 77 162 96 90 43 79 134 60 92 252 202 96 147
-+178 119 77 97 72 170 287 38 30 190 83 136 147 235 254 117 219 109 265 205 238
-+266 73 95 100 206 285 123 201 49 290 50 280 66 253 192 227 235 189 93 5 59 224
-+101 74 257 251 40 239 19 224 223 233 102 129 3 144 101 139 281 56 90 165 238 94
-+232 55 157 284 11 205 1 107 113 217 22 7 203 29 143 111 8 193 45 116 122 276
-+236 7 268 53 242 161 49 118 209 125 238 37 97 15 35 247 210 287 210 50 51 205
-+173 127 153 45 59 102 121 114 85 288 135 157 219 166 106 66 66 188 53 13 185
-+148 168 250 50 108 46 213 70 190 140 271 187 63 291 97 137 194 207 88 250 115
-+132 145 263 290 115 10 280 9 118 37 105 198 94 60 214 117 47 268 110 83 201 171
-+155 10 43 144 273 274 27 293 12 260 156 174 117 284 133 70 255 164 76 237 104
-+101 261 146 16 262 243 143 176 32 113 95 157 47 31 245 123 29 208 135 222 243
-+86 41 286 285 58 62 129 240 9 61 17 244 76 172 80 2 32 105 91 98 234 27 121 286
-+220 34 257 79 199 84 191 8 128 21 17 187 235 17 252 259 231 187 6 156 57 15 272
-+112 170 165 173 70 18 5 231 65 141 196 179 52 252 30 255 107 56 82 276 179 281
-+228 225 26 66 131 33 267 63 226 73 38 259 166 163 86 106 16 90 108 103 54 110
-+18 177 72 105 263 233 274 264 158 266 138 119 199 256 32 48 71 58 112 105 26 74
-+20 92 80 67 56 25 141 24 44 191 130 108 275 189 150 140 99 52 23 54 175 42 276
-+7 146 188 103 283 86 213 127 31 180 99 224 158 209 3 79 77 219 231 130 165 1
-+229 272 177 194 264 223 111 237 169 240 181 196 57 72 113 152 292 87 268 282
-+218 241 293 77 284 76 229 80 ^
-+635 1 40 150 140 184 12 23 78 294 2 67 93 9 57 283 206 74 83 199 254 4 6 67 263
-+120 61 113 156 181 257 79 284 46 191 213 251 273 100 271 100 186 138 184 223 61
-+76 83 175 107 6 217 81 114 207 149 89 29 180 182 73 158 120 122 37 160 11 98
-+295 162 35 221 146 249 123 88 19 139 48 191 189 213 275 15 98 60 273 39 51 96
-+60 1 77 49 181 233 41 286 257 18 64 42 65 263 144 99 111 241 58 1 288 196 179
-+22 214 30 170 226 197 169 66 42 41 225 146 14 234 92 145 89 155 69 178 243 208
-+200 244 48 21 78 209 40 65 178 182 97 196 118 207 210 200 33 10 23 289 36 152
-+79 49 266 195 43 201 84 274 151 130 228 136 34 24 214 115 132 228 112 292 26
-+129 238 92 19 13 159 195 19 163 86 189 274 90 19 224 10 193 104 40 126 102 186
-+223 146 225 85 90 230 262 8 278 90 80 39 14 23 54 147 4 278 216 265 35 75 73
-+243 82 124 248 283 267 185 87 29 95 220 71 243 293 162 246 72 144 38 237 228 51
-+181 22 3 288 172 141 24 129 153 130 17 98 36 235 41 75 219 20 88 165 25 54 232
-+262 280 131 92 291 162 161 110 142 14 173 277 141 259 18 149 4 67 178 267 59
-+198 33 34 170 287 121 173 192 288 257 103 26 44 276 90 104 186 12 108 227 213
-+190 53 96 145 150 79 73 8 193 128 78 124 187 63 263 59 137 109 30 44 41 201 108
-+16 149 215 105 176 56 232 51 242 133 7 118 122 248 198 9 183 172 202 244 133
-+279 80 124 163 25 265 270 260 69 8 132 204 74 294 237 252 89 179 107 176 32 85
-+53 157 256 154 205 210 115 71 8 108 166 76 209 64 103 176 267 270 49 31 10 47
-+31 34 85 29 119 258 69 32 170 202 159 171 277 165 1 16 234 177 107 91 70 83 29
-+34 67 117 47 55 72 83 114 292 2 91 240 7 33 160 246 283 291 36 85 114 81 260 93
-+155 130 289 247 38 150 55 222 10 108 251 38 211 275 226 136 58 62 212 200 9 268
-+25 204 159 256 239 167 212 30 194 264 195 254 239 82 63 28 279 141 48 167 151
-+215 190 138 58 147 65 202 220 95 281 291 247 123 112 57 137 133 68 42 126 78
-+148 225 61 52 232 177 22 129 68 168 15 74 22 275 250 174 56 147 89 240 218 180
-+158 35 160 35 245 293 247 208 74 59 52 256 28 20 214 54 21 224 282 46 106 251
-+249 62 273 15 13 98 271 15 37 136 269 100 210 285 182 12 47 116 292 87 240 242
-+218 156 120 37 75 158 96 84 39 75 134 58 86 250 198 94 145 174 117 71 93 70 168
-+287 36 24 190 77 134 143 235 252 113 217 105 261 205 234 262 69 93 94 206 285
-+121 197 43 286 46 276 66 253 188 223 231 187 87 5 57 222 95 285 ^
-+636 0 251 248 37 233 16 224 220 230 102 123 3 141 98 133 278 56 84 165 235 91
-+229 49 157 278 2 202 295 98 110 217 19 1 203 20 137 108 5 193 42 116 122 270
-+236 7 268 47 242 155 43 115 206 125 238 28 94 6 32 244 207 284 204 50 42 199
-+167 127 153 45 53 93 121 111 79 282 129 151 213 166 97 57 60 188 53 10 182 148
-+162 244 47 105 37 210 61 187 137 268 184 63 285 97 134 194 201 82 250 112 132
-+142 257 290 109 4 277 3 118 37 96 195 94 60 211 114 47 265 110 80 198 168 149 1
-+43 138 267 268 24 287 12 257 153 288 171 117 281 130 67 252 164 76 231 101 101
-+261 143 13 256 237 143 173 32 107 89 154 44 31 245 123 26 202 135 216 240 80 38
-+286 279 55 62 126 237 6 55 8 244 70 166 74 293 23 105 91 92 228 27 118 280 214
-+28 254 79 199 84 188 296 128 15 11 181 232 17 246 259 228 187 150 54 9 266 109
-+164 159 170 64 18 2 225 59 135 193 179 43 252 27 255 101 47 82 273 173 275 225
-+219 17 63 125 24 264 57 220 70 29 253 163 160 86 103 16 87 102 100 48 104 15
-+171 63 102 260 227 271 258 152 266 132 119 196 253 26 42 62 49 103 99 26 65 17
-+86 80 61 50 19 138 24 44 191 127 99 269 183 147 140 99 49 20 54 169 42 276 4
-+140 182 94 280 77 207 124 25 180 96 218 155 203 294 76 71 219 231 124 162 1 226
-+272 174 191 264 217 102 237 166 234 175 190 51 72 104 152 289 87 262 279 215
-+241 293 77 284 67 229 209 39 148 139 183 10 22 75 292 1 66 93 7 54 283 205 72
-+81 197 252 4 3 64 261 120 58 113 154 181 255 78 283 45 190 211 251 271 98 270
-+99 186 138 184 223 61 73 80 175 107 6 215 81 114 207 147 86 26 179 180 73 157
-+118 120 35 158 11 98 293 160 32 221 146 247 121 88 18 139 46 189 189 212 273 13
-+96 58 273 36 51 95 59 295 75 49 180 233 39 285 257 16 64 41 63 262 142 97 111
-+239 58 296 288 194 178 21 213 29 170 224 197 169 65 40 41 223 144 12 234 92 145
-+88 155 66 176 243 208 200 243 48 21 76 208 40 64 178 181 95 196 116 205 209 199
-+30 9 23 288 34 296 151 76 48 264 194 41 200 83 272 151 130 227 134 34 22 212
-+113 131 226 112 292 24 127 236 90 16 10 159 193 19 161 85 187 274 89 17 223 7
-+191 104 38 126 100 185 222 145 225 82 90 230 262 5 276 87 79 39 11 21 53 147 3
-+278 216 263 35 75 72 241 79 122 247 281 267 185 85 27 95 219 71 242 292 161 245
-+69 144 35 295 235 228 50 179 20 287 172 139 23 128 152 129 14 95 36 234 38 72
-+218 18 85 164 22 52 231 261 280 131 89 291 162 161 108 142 14 172 276 91 ^
-+635 1 256 9 146 297 61 175 261 50 198 27 25 164 284 115 173 192 282 254 94 23
-+41 273 84 95 180 3 102 227 290 213 187 50 90 139 150 73 64 2 190 122 75 124 181
-+60 263 56 134 109 21 35 38 201 99 10 149 215 102 173 47 226 42 239 133 297 115
-+119 248 195 9 183 166 199 238 130 279 74 121 163 19 265 270 257 66 8 126 204 71
-+294 234 246 89 173 101 170 29 85 44 154 256 154 202 210 115 65 5 108 163 73 209
-+58 103 176 264 267 40 25 10 41 28 28 82 26 113 258 69 26 167 202 156 171 277
-+159 297 7 231 174 104 88 70 83 29 31 67 111 44 46 69 80 111 289 2 82 234 1 33
-+160 246 280 285 27 79 108 72 260 84 149 124 289 247 38 147 55 222 4 105 245 32
-+211 272 226 133 52 59 206 194 6 265 25 201 153 253 236 161 212 30 188 261 195
-+254 239 79 54 28 273 138 39 167 148 212 184 132 49 141 65 196 220 89 281 288
-+244 120 106 57 137 127 62 33 123 78 142 222 58 49 232 177 22 129 68 168 6 74 13
-+275 244 174 50 144 83 237 218 174 158 32 157 29 239 287 241 202 65 59 52 250 19
-+20 214 45 12 218 282 46 106 248 249 53 270 12 10 95 271 15 28 136 269 100 204
-+279 182 9 38 110 286 84 240 236 215 156 117 34 72 152 96 75 33 69 134 55 77 247
-+192 91 142 168 114 62 87 67 165 287 33 15 190 68 131 137 235 249 107 214 99 255
-+205 228 256 63 90 85 206 285 118 191 34 280 40 270 66 253 182 217 225 184 78 5
-+54 219 86 64 247 246 35 229 14 224 218 228 102 119 3 139 96 129 276 56 80 165
-+233 89 227 45 157 274 295 200 295 92 108 217 17 296 203 14 133 106 3 193 40 116
-+122 266 236 7 268 43 242 151 39 113 204 125 238 22 92 30 242 205 282 200 50 36
-+195 163 127 153 45 49 87 121 109 75 278 125 147 209 166 91 51 56 188 53 8 180
-+148 158 240 45 103 31 208 55 185 135 266 182 63 281 97 132 194 197 78 250 110
-+132 140 253 290 105 275 298 118 37 90 193 94 60 209 112 47 263 110 78 196 166
-+145 294 43 134 263 264 22 283 12 255 151 284 169 117 279 128 65 250 164 76 227
-+99 101 261 141 11 252 233 143 171 32 103 85 152 42 31 245 123 24 198 135 212
-+238 76 36 286 275 53 62 124 235 4 51 2 244 66 162 70 291 17 105 91 88 224 27
-+116 276 210 24 252 79 199 84 186 292 128 11 7 177 230 17 242 259 226 187 295
-+146 52 5 262 107 160 155 168 60 18 221 55 131 191 179 37 252 25 255 97 41 82
-+271 169 271 223 215 11 61 121 18 262 53 216 68 23 249 161 158 86 101 16 85 98
-+98 44 100 13 167 57 100 258 223 269 254 148 266 128 119 194 251 22 38 56 43 275
-+^
-+642 0 91 26 53 13 78 80 53 42 11 134 24 44 191 123 87 261 175 143 140 99 45 16
-+54 161 42 276 132 174 82 276 65 199 120 17 180 92 210 151 195 290 72 63 219 231
-+116 158 1 222 272 170 187 264 209 90 237 162 226 167 182 43 72 92 152 285 87
-+254 275 211 241 293 77 284 55 229 201 35 140 135 179 2 18 63 284 298 62 93 300
-+42 283 201 64 73 189 244 4 292 52 253 120 46 113 146 181 247 74 279 41 186 203
-+251 263 90 266 95 186 138 184 223 61 61 68 175 107 6 207 81 114 207 139 74 14
-+175 172 73 153 110 112 27 150 11 98 285 152 20 221 146 239 113 88 14 139 38 181
-+189 208 265 5 88 50 273 24 51 91 55 287 67 49 176 233 31 281 257 8 64 37 55 258
-+134 89 111 231 58 292 288 186 174 17 209 25 170 216 197 169 61 32 41 215 136 4
-+234 92 145 84 155 54 168 243 208 200 239 48 21 68 204 40 60 178 177 87 196 108
-+197 205 195 18 5 23 284 26 296 147 64 44 256 190 33 196 79 264 151 130 223 126
-+34 14 204 105 127 218 112 292 16 119 228 82 4 299 159 185 19 153 81 179 274 85
-+9 219 296 183 104 30 126 92 181 218 141 225 70 90 230 262 294 268 75 75 39 300
-+13 49 147 300 278 216 255 35 75 68 233 67 114 243 273 267 185 77 19 95 215 71
-+238 288 157 241 57 144 23 291 227 228 46 171 12 289 283 172 131 19 124 148 125
-+2 83 36 230 26 60 214 10 73 160 10 44 227 257 280 131 77 291 162 161 100 142 14
-+168 272 141 254 3 144 295 57 173 257 44 198 23 19 160 282 111 173 192 278 252
-+88 21 39 271 80 89 176 298 98 227 286 213 185 48 86 135 150 69 58 299 188 118
-+73 124 177 58 263 54 132 109 15 29 36 201 93 6 149 215 100 171 41 222 36 237
-+133 293 113 117 248 193 9 183 162 197 234 128 279 70 119 163 15 265 270 255 64
-+8 122 204 69 294 232 242 89 169 97 166 27 85 38 152 256 154 200 210 115 61 3
-+108 161 71 209 54 103 176 262 265 34 21 10 37 26 24 80 24 109 258 69 22 165 202
-+154 171 277 155 297 1 229 172 102 86 70 83 29 29 67 107 42 40 67 78 109 287 2
-+76 230 298 33 160 246 278 281 21 75 104 66 260 78 145 120 289 247 38 145 55 222
-+103 241 28 211 270 226 131 48 57 202 190 4 263 25 199 149 251 234 157 212 30
-+184 259 195 254 239 77 48 28 269 136 33 167 146 210 180 128 43 137 65 192 220
-+85 281 286 242 118 102 57 137 123 58 27 121 78 138 220 56 47 232 177 22 129 68
-+168 74 7 275 240 174 46 142 79 235 218 170 158 30 155 25 235 283 237 198 59 59
-+52 246 13 20 214 39 6 214 282 46 106 246 249 47 268 10 8 93 271 15 22 136 269
-+100 200 275 42 ^
-+644 0 6 29 104 280 81 240 230 212 156 114 31 69 146 96 66 27 63 134 52 68 244
-+186 88 139 162 111 53 81 64 162 287 30 6 190 59 128 131 235 246 101 211 93 249
-+205 222 250 57 87 76 206 285 115 185 25 274 34 264 66 253 176 211 219 181 69 5
-+51 216 77 58 241 243 32 223 11 224 215 225 102 113 3 136 93 123 273 56 74 165
-+230 86 224 39 157 268 289 197 295 83 105 217 14 293 203 5 127 103 193 37 116
-+122 260 236 7 268 37 242 145 33 110 201 125 238 13 89 293 27 239 202 279 194 50
-+27 189 157 127 153 45 43 78 121 106 69 272 119 141 203 166 82 42 50 188 53 5
-+177 148 152 234 42 100 22 205 46 182 132 263 179 63 275 97 129 194 191 72 250
-+107 132 137 247 290 99 296 272 295 118 37 81 190 94 60 206 109 47 260 110 75
-+193 163 139 288 43 128 257 258 19 277 12 252 148 278 166 117 276 125 62 247 164
-+76 221 96 101 261 138 8 246 227 143 168 32 97 79 149 39 31 245 123 21 192 135
-+206 235 70 33 286 269 50 62 121 232 1 45 295 244 60 156 64 288 8 105 91 82 218
-+27 113 270 204 18 249 79 199 84 183 286 128 5 1 171 227 17 236 259 223 187 292
-+140 49 301 256 104 154 149 165 54 18 299 215 49 125 188 179 28 252 22 255 91 32
-+82 268 163 265 220 209 2 58 115 9 259 47 210 65 14 243 158 155 86 98 16 82 92
-+95 38 94 10 161 48 97 255 217 266 248 142 266 122 119 191 248 16 32 47 34 88 89
-+26 50 12 76 80 51 40 9 133 24 44 191 122 84 259 173 142 140 99 44 15 54 159 42
-+276 301 130 172 79 275 62 197 119 15 180 91 208 150 193 289 71 61 219 231 114
-+157 1 221 272 169 186 264 207 87 237 161 224 165 180 41 72 89 152 284 87 252
-+274 210 241 293 77 284 52 229 199 34 138 134 178 17 60 282 298 61 93 299 39 283
-+200 62 71 187 242 4 290 49 251 120 43 113 144 181 245 73 278 40 185 201 251 261
-+88 265 94 186 138 184 223 61 58 65 175 107 6 205 81 114 207 137 71 11 174 170
-+73 152 108 110 25 148 11 98 283 150 17 221 146 237 111 88 13 139 36 179 189 207
-+263 3 86 48 273 21 51 90 54 285 65 49 175 233 29 280 257 6 64 36 53 257 132 87
-+111 229 58 291 288 184 173 16 208 24 170 214 197 169 60 30 41 213 134 2 234 92
-+145 83 155 51 166 243 208 200 238 48 21 66 203 40 59 178 176 85 196 106 195 204
-+194 15 4 23 283 24 296 146 61 43 254 189 31 195 78 262 151 130 222 124 34 12
-+202 103 126 216 112 292 14 117 226 80 1 297 159 183 19 151 80 177 274 84 7 218
-+294 181 104 28 126 90 180 217 140 225 67 90 230 262 292 266 72 74 39 298 11 48
-+147 300 278 216 253 265 ^
-+638 1 75 65 227 58 108 240 267 267 185 71 13 95 212 71 235 285 154 238 48 144
-+14 288 221 228 43 165 6 283 280 172 125 16 121 145 122 297 74 36 227 17 51 211
-+4 64 157 1 38 224 254 280 131 68 291 162 161 94 142 14 165 269 141 251 298 141
-+292 51 170 251 35 198 17 10 154 279 105 173 192 272 249 79 18 36 268 74 80 170
-+292 92 227 280 213 182 45 80 129 150 63 49 296 185 112 70 124 171 55 263 51 129
-+109 6 20 33 201 84 149 215 97 168 32 216 27 234 133 287 110 114 248 190 9 183
-+156 194 228 125 279 64 116 163 9 265 270 252 61 8 116 204 66 294 229 236 89 163
-+91 160 24 85 29 149 256 154 197 210 115 55 108 158 68 209 48 103 176 259 262 25
-+15 10 31 23 18 77 21 103 258 69 16 162 202 151 171 277 149 297 296 226 169 99
-+83 70 83 29 26 67 101 39 31 64 75 106 284 2 67 224 295 33 160 246 275 275 12 69
-+98 57 260 69 139 114 289 247 38 142 55 222 298 100 235 22 211 267 226 128 42 54
-+196 184 1 260 25 196 143 248 231 151 212 30 178 256 195 254 239 74 39 28 263
-+133 24 167 143 207 174 122 34 131 65 186 220 79 281 283 239 115 96 57 137 117
-+52 18 118 78 132 217 53 44 232 177 22 129 68 168 295 74 302 275 234 174 40 139
-+73 232 218 164 158 27 152 19 229 277 231 192 50 59 52 240 4 20 214 30 301 208
-+282 46 106 243 249 38 265 7 5 90 271 15 13 136 269 100 194 269 182 4 23 100 276
-+79 240 226 210 156 112 29 67 142 96 60 23 59 134 50 62 242 182 86 137 158 109
-+47 77 62 160 287 28 190 53 126 127 235 244 97 209 89 245 205 218 246 53 85 70
-+206 285 113 181 19 270 30 260 66 253 172 207 215 179 63 5 49 214 71 54 237 241
-+30 219 9 224 213 223 102 109 3 134 91 119 271 56 70 165 228 84 222 35 157 264
-+285 195 295 77 103 217 12 291 203 303 123 101 302 193 35 116 122 256 236 7 268
-+33 242 141 29 108 199 125 238 7 87 289 25 237 200 277 190 50 21 185 153 127 153
-+45 39 72 121 104 65 268 115 137 199 166 76 36 46 188 53 3 175 148 148 230 40 98
-+16 203 40 180 130 261 177 63 271 97 127 194 187 68 250 105 132 135 243 290 95
-+294 270 293 118 37 75 188 94 60 204 107 47 258 110 73 191 161 135 284 43 124
-+253 254 17 273 12 250 146 274 164 117 274 123 60 245 164 76 217 94 101 261 136
-+6 242 223 143 166 32 93 75 147 37 31 245 123 19 188 135 202 233 66 31 286 265
-+48 62 119 230 303 41 291 244 56 152 60 286 2 105 91 78 214 27 111 266 200 14
-+247 79 199 84 181 282 128 1 301 167 225 17 232 259 221 187 290 136 47 299 252
-+102 150 145 163 157 ^
-+653 0 18 299 207 41 117 184 179 16 252 18 255 83 20 82 264 155 257 216 201 296
-+54 107 303 255 39 202 61 2 235 154 151 86 94 16 78 84 91 30 86 6 153 36 93 251
-+209 262 240 134 266 114 119 187 244 8 24 35 22 76 81 26 38 8 68 80 43 32 1 129
-+24 44 191 118 72 251 165 138 140 99 40 11 54 151 42 276 301 122 164 67 271 50
-+189 115 7 180 87 200 146 185 285 67 53 219 231 106 153 1 217 272 165 182 264
-+199 75 237 157 216 157 172 33 72 77 152 280 87 244 270 206 241 293 77 284 40
-+229 191 30 130 130 174 298 13 48 274 298 57 93 295 27 283 196 54 63 179 234 4
-+282 37 243 120 31 113 136 181 237 69 274 36 181 193 251 253 80 261 90 186 138
-+184 223 61 46 53 175 107 6 197 81 114 207 129 59 305 170 162 73 148 100 102 17
-+140 11 98 275 142 5 221 146 229 103 88 9 139 28 171 189 203 255 301 78 40 273 9
-+51 86 50 277 57 49 171 233 21 276 257 304 64 32 45 253 124 79 111 221 58 287
-+288 176 169 12 204 20 170 206 197 169 56 22 41 205 126 300 234 92 145 79 155 39
-+158 243 208 200 234 48 21 58 199 40 55 178 172 77 196 98 187 200 190 3 23 279
-+16 296 142 49 39 246 185 23 191 74 254 151 130 218 116 34 4 194 95 122 208 112
-+292 6 109 218 72 295 289 159 175 19 143 76 169 274 80 305 214 286 173 104 20
-+126 82 176 213 136 225 55 90 230 262 284 258 60 70 39 290 3 44 147 300 278 216
-+245 35 75 63 223 52 104 238 263 267 185 67 9 95 210 71 233 283 152 236 42 144 8
-+286 217 228 41 161 2 279 278 172 121 14 119 143 120 293 68 36 225 11 45 209 58
-+155 301 34 222 252 280 131 62 291 162 161 90 142 14 163 267 141 249 294 139 290
-+47 168 247 29 198 13 4 150 277 101 173 192 268 247 73 16 34 266 70 74 166 288
-+88 227 276 213 180 43 76 125 150 59 43 294 183 108 68 124 167 53 263 49 127 109
-+14 31 201 78 302 149 215 95 166 26 212 21 232 133 283 108 112 248 188 9 183 152
-+192 224 123 279 60 114 163 5 265 270 250 59 8 112 204 64 294 227 232 89 159 87
-+156 22 85 23 147 256 154 195 210 115 51 304 108 156 66 209 44 103 176 257 260
-+19 11 10 27 21 14 75 19 99 258 69 12 160 202 149 171 277 145 297 292 224 167 97
-+81 70 83 29 24 67 97 37 25 62 73 104 282 2 61 220 293 33 160 246 273 271 6 65
-+94 51 260 63 135 110 289 247 38 140 55 222 296 98 231 18 211 265 226 126 38 52
-+192 180 305 258 25 194 139 246 229 147 212 30 174 254 195 254 239 72 33 28 259
-+131 18 167 141 205 170 118 28 127 65 182 220 75 281 281 237 113 92 57 137 113
-+48 12 116 78 128 215 51 42 232 177 22 129 68 168 291 161 ^
-+653 0 296 275 228 174 34 136 67 229 218 158 158 24 149 13 223 271 225 186 41 59
-+52 234 302 20 214 21 295 202 282 46 106 240 249 29 262 4 2 87 271 15 4 136 269
-+100 188 263 182 1 14 94 270 76 240 220 207 156 109 26 64 136 96 51 17 53 134 47
-+53 239 176 83 134 152 106 38 71 59 157 287 25 298 190 44 123 121 235 241 91 206
-+83 239 205 212 240 47 82 61 206 285 110 175 10 264 24 254 66 253 166 201 209
-+176 54 5 46 211 62 48 231 238 27 213 6 224 210 220 102 103 3 131 88 113 268 56
-+64 165 225 81 219 29 157 258 279 192 295 68 100 217 9 288 203 297 117 98 302
-+193 32 116 122 250 236 7 268 27 242 135 23 105 196 125 238 305 84 283 22 234
-+197 274 184 50 12 179 147 127 153 45 33 63 121 101 59 262 109 131 193 166 67 27
-+40 188 53 172 148 142 224 37 95 7 200 31 177 127 258 174 63 265 97 124 194 181
-+62 250 102 132 132 237 290 89 291 267 290 118 37 66 185 94 60 201 104 47 255
-+110 70 188 158 129 278 43 118 247 248 14 267 12 247 143 268 161 117 271 120 57
-+242 164 76 211 91 101 261 133 3 236 217 143 163 32 87 69 144 34 31 245 123 16
-+182 135 196 230 60 28 286 259 45 62 116 227 303 35 285 244 50 146 54 283 300
-+105 91 72 208 27 108 260 194 8 244 79 199 84 178 276 128 302 298 161 222 17 226
-+259 218 187 287 130 44 296 246 99 144 139 160 44 18 299 205 39 115 183 179 13
-+252 17 255 81 17 82 263 153 255 215 199 294 53 105 301 254 37 200 60 306 233
-+153 150 86 93 16 77 82 90 28 84 5 151 33 92 250 207 261 238 132 266 112 119 186
-+243 6 22 32 19 73 79 26 35 7 66 80 41 30 306 128 24 44 191 117 69 249 163 137
-+140 99 39 10 54 149 42 276 301 120 162 64 270 47 187 114 5 180 86 198 145 183
-+284 66 51 219 231 104 152 1 216 272 164 181 264 197 72 237 156 214 155 170 31
-+72 74 152 279 87 242 269 205 241 293 77 284 37 229 189 29 128 129 173 297 12 45
-+272 298 56 93 294 24 283 195 52 61 177 232 4 280 34 241 120 28 113 134 181 235
-+68 273 35 180 191 251 251 78 260 89 186 138 184 223 61 43 50 175 107 6 195 81
-+114 207 127 56 303 169 160 73 147 98 100 15 138 11 98 273 140 2 221 146 227 101
-+88 8 139 26 169 189 202 253 300 76 38 273 6 51 85 49 275 55 49 170 233 19 275
-+257 303 64 31 43 252 122 77 111 219 58 286 288 174 168 11 203 19 170 204 197
-+169 55 20 41 203 124 299 234 92 145 78 155 36 156 243 208 200 233 48 21 56 198
-+40 54 178 171 75 196 96 185 199 189 306 23 278 14 296 141 46 38 244 184 21 190
-+73 252 151 130 217 114 34 2 192 93 121 206 112 292 4 107 216 70 293 112 ^
-+646 1 159 169 19 137 73 163 274 77 302 211 280 167 104 14 126 76 173 210 133
-+225 46 90 230 262 278 252 51 67 39 284 306 41 147 300 278 216 239 35 75 60 217
-+43 98 235 257 267 185 61 3 95 207 71 230 280 149 233 33 144 308 283 211 228 38
-+155 305 273 275 172 115 11 116 140 117 287 59 36 222 2 36 206 303 49 152 295 28
-+219 249 280 131 53 291 162 161 84 142 14 160 264 141 246 288 136 287 41 165 241
-+20 198 7 304 144 274 95 173 192 262 244 64 13 31 263 64 65 160 282 82 227 270
-+213 177 40 70 119 150 53 34 291 180 102 65 124 161 50 263 46 124 109 300 5 28
-+201 69 299 149 215 92 163 17 206 12 229 133 277 105 109 248 185 9 183 146 189
-+218 120 279 54 111 163 308 265 270 247 56 8 106 204 61 294 224 226 89 153 81
-+150 19 85 14 144 256 154 192 210 115 45 304 108 153 63 209 38 103 176 254 257
-+10 5 10 21 18 8 72 16 93 258 69 6 157 202 146 171 277 139 297 286 221 164 94 78
-+70 83 29 21 67 91 34 16 59 70 101 279 2 52 214 290 33 160 246 270 265 306 59 88
-+42 260 54 129 104 289 247 38 137 55 222 293 95 225 12 211 262 226 123 32 49 186
-+174 305 255 25 191 133 243 226 141 212 30 168 251 195 254 239 69 24 28 253 128
-+9 167 138 202 164 112 19 121 65 176 220 69 281 278 234 110 86 57 137 107 42 3
-+113 78 122 212 48 39 232 177 22 129 68 168 285 74 292 275 224 174 30 134 63 227
-+218 154 158 22 147 9 219 267 221 182 35 59 52 230 298 20 214 15 291 198 282 46
-+106 238 249 23 260 2 85 271 15 307 136 269 100 184 259 182 308 8 90 266 74 240
-+216 205 156 107 24 62 132 96 45 13 49 134 45 47 237 172 81 132 148 104 32 67 57
-+155 287 23 294 190 38 121 117 235 239 87 204 79 235 205 208 236 43 80 55 206
-+285 108 171 4 260 20 250 66 253 162 197 205 174 48 5 44 209 56 44 227 236 25
-+209 4 224 208 218 102 99 3 129 86 109 266 56 60 165 223 79 217 25 157 254 275
-+190 295 62 98 217 7 286 203 293 113 96 302 193 30 116 122 246 236 7 268 23 242
-+131 19 103 194 125 238 301 82 279 20 232 195 272 180 50 6 175 143 127 153 45 29
-+57 121 99 55 258 105 127 189 166 61 21 36 188 53 307 170 148 138 220 35 93 1
-+198 25 175 125 256 172 63 261 97 122 194 177 58 250 100 132 130 233 290 85 289
-+265 288 118 37 60 183 94 60 199 102 47 253 110 68 186 156 125 274 43 114 243
-+244 12 263 12 245 141 264 159 117 269 118 55 240 164 76 207 89 101 261 131 1
-+232 213 143 161 32 83 65 142 32 31 245 123 14 178 135 192 228 56 26 286 255 43
-+62 114 225 303 31 281 244 46 142 50 281 296 105 91 238 ^
-+647 0 200 27 104 252 186 240 79 199 84 174 268 128 298 294 153 218 17 218 259
-+214 187 283 122 40 292 238 95 136 131 156 36 18 299 197 31 107 179 179 1 252 13
-+255 73 5 82 259 145 247 211 191 286 49 97 293 250 29 192 56 298 225 149 146 86
-+89 16 73 74 86 20 76 1 143 21 88 246 199 257 230 124 266 104 119 182 239 309 14
-+20 7 61 71 26 23 3 58 80 33 22 302 124 24 44 191 113 57 241 155 133 140 99 35 6
-+54 141 42 276 301 112 154 52 266 35 179 110 308 180 82 190 141 175 280 62 43
-+219 231 96 148 1 212 272 160 177 264 189 60 237 152 206 147 162 23 72 62 152
-+275 87 234 265 201 241 293 77 284 25 229 181 25 120 125 169 293 8 33 264 298 52
-+93 290 12 283 191 44 53 169 224 4 272 22 233 120 16 113 126 181 227 64 269 31
-+176 183 251 243 70 256 85 186 138 184 223 61 31 38 175 107 6 187 81 114 207 119
-+44 295 165 152 73 143 90 92 7 130 11 98 265 132 301 221 146 219 93 88 4 139 18
-+161 189 198 245 296 68 30 273 305 51 81 45 267 47 49 166 233 11 271 257 299 64
-+27 35 248 114 69 111 211 58 282 288 166 164 7 199 15 170 196 197 169 51 12 41
-+195 116 295 234 92 145 74 155 24 148 243 208 200 229 48 21 48 194 40 50 178 167
-+67 196 88 177 195 185 299 306 23 274 6 296 137 34 34 236 180 13 186 69 244 151
-+130 213 106 34 305 184 85 117 198 112 292 307 99 208 62 285 279 159 165 19 133
-+71 159 274 75 300 209 276 163 104 10 126 72 171 208 131 225 40 90 230 262 274
-+248 45 65 39 280 304 39 147 300 278 216 235 35 75 58 213 37 94 233 253 267 185
-+57 310 95 205 71 228 278 147 231 27 144 304 281 207 228 36 151 303 269 273 172
-+111 9 114 138 115 283 53 36 220 307 30 204 301 43 150 291 24 217 247 280 131 47
-+291 162 161 80 142 14 158 262 141 244 284 134 285 37 163 237 14 198 3 300 140
-+272 91 173 192 258 242 58 11 29 261 60 59 156 278 78 227 266 213 175 38 66 115
-+150 49 28 289 178 98 63 124 157 48 263 44 122 109 296 310 26 201 63 297 149 215
-+90 161 11 202 6 227 133 273 103 107 248 183 9 183 142 187 214 118 279 50 109
-+163 306 265 270 245 54 8 102 204 59 294 222 222 89 149 77 146 17 85 8 142 256
-+154 190 210 115 41 304 108 151 61 209 34 103 176 252 255 4 1 10 17 16 4 70 14
-+89 258 69 2 155 202 144 171 277 135 297 282 219 162 92 76 70 83 29 19 67 87 32
-+10 57 68 99 277 2 46 210 288 33 160 246 268 261 302 55 84 36 260 48 125 100 289
-+247 38 135 55 222 291 93 221 8 211 260 226 121 28 47 182 170 305 253 25 189 129
-+241 224 137 212 30 164 249 195 254 239 86 ^
-+665 0 15 28 247 125 167 135 199 158 106 10 115 65 170 220 63 281 275 231 107 80
-+57 137 101 36 306 110 78 116 209 45 36 232 177 22 129 68 168 279 74 286 275 218
-+174 24 131 57 224 218 148 158 19 144 3 213 261 215 176 26 59 52 224 292 20 214
-+6 285 192 282 46 106 235 249 14 257 311 309 82 271 15 301 136 269 100 178 253
-+182 308 311 84 260 71 240 210 202 156 104 21 59 126 96 36 7 43 134 42 38 234
-+166 78 129 142 101 23 61 54 152 287 20 288 190 29 118 111 235 236 81 201 73 229
-+205 202 230 37 77 46 206 285 105 165 307 254 14 244 66 253 156 191 199 171 39 5
-+41 206 47 38 221 233 22 203 1 224 205 215 102 93 3 126 83 103 263 56 54 165 220
-+76 214 19 157 248 269 187 295 53 95 217 4 283 203 287 107 93 302 193 27 116 122
-+240 236 7 268 17 242 125 13 100 191 125 238 295 79 273 17 229 192 269 174 50
-+309 169 137 127 153 45 23 48 121 96 49 252 99 121 183 166 52 12 30 188 53 307
-+167 148 132 214 32 90 304 195 16 172 122 253 169 63 255 97 119 194 171 52 250
-+97 132 127 227 290 79 286 262 285 118 37 51 180 94 60 196 99 47 250 110 65 183
-+153 119 268 43 108 237 238 9 257 12 242 138 258 156 117 266 115 52 237 164 76
-+201 86 101 261 128 310 226 207 143 158 32 77 59 139 29 31 245 123 11 172 135
-+186 225 50 23 286 249 40 62 111 222 303 25 275 244 40 136 44 278 290 105 91 62
-+198 27 103 250 184 310 239 79 199 84 173 266 128 297 293 151 217 17 216 259 213
-+187 282 120 39 291 236 94 134 129 155 34 18 299 195 29 105 178 179 310 252 12
-+255 71 2 82 258 143 245 210 189 284 48 95 291 249 27 190 55 296 223 148 145 86
-+88 16 72 72 85 18 74 141 18 87 245 197 256 228 122 266 102 119 181 238 308 12
-+17 4 58 69 26 20 2 56 80 31 20 301 123 24 44 191 112 54 239 153 132 140 99 34 5
-+54 139 42 276 301 110 152 49 265 32 177 109 307 180 81 188 140 173 279 61 41
-+219 231 94 147 1 211 272 159 176 264 187 57 237 151 204 145 160 21 72 59 152
-+274 87 232 264 200 241 293 77 284 22 229 179 24 118 124 168 292 7 30 262 298 51
-+93 289 9 283 190 42 51 167 222 4 270 19 231 120 13 113 124 181 225 63 268 30
-+175 181 251 241 68 255 84 186 138 184 223 61 28 35 175 107 6 185 81 114 207 117
-+41 293 164 150 73 142 88 90 5 128 11 98 263 130 299 221 146 217 91 88 3 139 16
-+159 189 197 243 295 66 28 273 303 51 80 44 265 45 49 165 233 9 270 257 298 64
-+26 33 247 112 67 111 209 58 281 288 164 163 6 198 14 170 194 197 169 50 10 41
-+193 114 294 234 92 145 73 155 21 146 243 208 200 228 48 21 46 193 40 49 178 166
-+65 196 86 175 194 184 297 306 23 273 206 ^
-+641 0 296 134 25 31 230 177 7 183 66 238 151 130 210 100 34 302 178 79 114 192
-+112 292 304 93 202 56 279 273 159 159 19 127 68 153 274 72 297 206 270 157 104
-+4 126 66 168 205 128 225 31 90 230 262 268 242 36 62 39 274 301 36 147 300 278
-+216 229 35 75 55 207 28 88 230 247 267 185 51 307 95 202 71 225 275 144 228 18
-+144 298 278 201 228 33 145 300 263 270 172 105 6 111 135 112 277 44 36 217 301
-+21 201 298 34 147 285 18 214 244 280 131 38 291 162 161 74 142 14 155 259 141
-+241 278 131 282 31 160 231 5 198 311 294 134 269 85 173 192 252 239 49 8 26 258
-+54 50 150 272 72 227 260 213 172 35 60 109 150 43 19 286 175 92 60 124 151 45
-+263 41 119 109 290 304 23 201 54 294 149 215 87 158 2 196 311 224 133 267 100
-+104 248 180 9 183 136 184 208 115 279 44 106 163 303 265 270 242 51 8 96 204 56
-+294 219 216 89 143 71 140 14 85 313 139 256 154 187 210 115 35 304 108 148 58
-+209 28 103 176 249 252 309 309 10 11 13 312 67 11 83 258 69 310 152 202 141 171
-+277 129 297 276 216 159 89 73 70 83 29 16 67 81 29 1 54 65 96 274 2 37 204 285
-+33 160 246 265 255 296 49 78 27 260 39 119 94 289 247 38 132 55 222 288 90 215
-+2 211 257 226 118 22 44 176 164 305 250 25 186 123 238 221 131 212 30 158 246
-+195 254 239 64 9 28 243 123 308 167 133 197 154 102 4 111 65 166 220 59 281 273
-+229 105 76 57 137 97 32 302 108 78 112 207 43 34 232 177 22 129 68 168 275 74
-+282 275 214 174 20 129 53 222 218 144 158 17 142 313 209 257 211 172 20 59 52
-+220 288 20 214 281 188 282 46 106 233 249 8 255 311 309 80 271 15 297 136 269
-+100 174 249 182 308 307 80 256 69 240 206 200 156 102 19 57 122 96 30 3 39 134
-+40 32 232 162 76 127 138 99 17 57 52 150 287 18 284 190 23 116 107 235 234 77
-+199 69 225 205 198 226 33 75 40 206 285 103 161 303 250 10 240 66 253 152 187
-+195 169 33 5 39 204 41 34 217 231 20 199 313 224 203 213 102 89 3 124 81 99 261
-+56 50 165 218 74 212 15 157 244 265 185 295 47 93 217 2 281 203 283 103 91 302
-+193 25 116 122 236 236 7 268 13 242 121 9 98 189 125 238 291 77 269 15 227 190
-+267 170 50 305 165 133 127 153 45 19 42 121 94 45 248 95 117 179 166 46 6 26
-+188 53 307 165 148 128 210 30 88 300 193 10 170 120 251 167 63 251 97 117 194
-+167 48 250 95 132 125 223 290 75 284 260 283 118 37 45 178 94 60 194 97 47 248
-+110 63 181 151 115 264 43 104 233 234 7 253 12 240 136 254 154 117 264 113 50
-+235 164 76 197 84 101 261 126 310 222 203 143 276 ^
-+656 0 32 69 51 135 25 31 245 123 7 164 135 178 221 42 19 286 241 36 62 107 218
-+303 17 267 244 32 128 36 274 282 105 91 54 190 27 99 242 176 306 235 79 199 84
-+169 258 128 293 289 143 213 17 208 259 209 187 278 112 35 287 228 90 126 121
-+151 26 18 299 187 21 97 174 179 302 252 8 255 63 306 82 254 135 237 206 181 276
-+44 87 283 245 19 182 51 288 215 144 141 86 84 16 68 64 81 10 66 312 133 6 83
-+241 189 252 220 114 266 94 119 177 234 304 4 5 308 46 61 26 8 314 48 80 23 12
-+297 119 24 44 191 108 42 231 145 128 140 99 30 1 54 131 42 276 301 102 144 37
-+261 20 169 105 303 180 77 180 136 165 275 57 33 219 231 86 143 1 207 272 155
-+172 264 179 45 237 147 196 137 152 13 72 47 152 270 87 224 260 196 241 293 77
-+284 10 229 171 20 110 120 164 288 3 18 254 298 47 93 285 313 283 186 34 43 159
-+214 4 262 7 223 120 1 113 116 181 217 59 264 26 171 173 251 233 60 251 80 186
-+138 184 223 61 16 23 175 107 6 177 81 114 207 109 29 285 160 142 73 138 80 82
-+313 120 11 98 255 122 291 221 146 209 83 88 315 139 8 151 189 193 235 291 58 20
-+273 295 51 76 40 257 37 49 161 233 1 266 257 294 64 22 25 243 104 59 111 201 58
-+277 288 156 159 2 194 10 170 186 197 169 46 2 41 185 106 290 234 92 145 69 155
-+9 138 243 208 200 224 48 21 38 189 40 45 178 162 57 196 78 167 190 180 289 306
-+23 269 312 296 132 19 29 226 175 3 181 64 234 151 130 208 96 34 300 174 75 112
-+188 112 292 302 89 198 52 275 269 159 155 19 123 66 149 274 70 295 204 266 153
-+104 126 62 166 203 126 225 25 90 230 262 264 238 30 60 39 270 299 34 147 300
-+278 216 225 35 75 53 203 22 84 228 243 267 185 47 305 95 200 71 223 273 142 226
-+12 144 294 276 197 228 31 141 298 259 268 172 101 4 109 133 110 273 38 36 215
-+297 15 199 296 28 145 281 14 212 242 280 131 32 291 162 161 70 142 14 153 257
-+141 239 274 129 280 27 158 227 315 198 309 290 130 267 81 173 192 248 237 43 6
-+24 256 50 44 146 268 68 227 256 213 170 33 56 105 150 39 13 284 173 88 58 124
-+147 43 263 39 117 109 286 300 21 201 48 292 149 215 85 156 312 192 307 222 133
-+263 98 102 248 178 9 183 132 182 204 113 279 40 104 163 301 265 270 240 49 8 92
-+204 54 294 217 212 89 139 67 136 12 85 309 137 256 154 185 210 115 31 304 108
-+146 56 209 24 103 176 247 250 305 307 10 7 11 310 65 9 79 258 69 308 150 202
-+139 171 277 125 297 272 214 157 87 71 70 83 29 14 67 77 27 311 52 63 94 272 2
-+31 200 283 33 160 246 263 251 292 45 74 21 260 33 115 90 289 247 38 130 55 222
-+286 88 211 227 ^
-+668 0 211 254 226 115 16 41 170 158 305 247 25 183 117 235 218 125 212 30 152
-+243 195 254 239 61 28 237 120 302 167 130 194 148 96 312 105 65 160 220 53 281
-+270 226 102 70 57 137 91 26 296 105 78 106 204 40 31 232 177 22 129 68 168 269
-+74 276 275 208 174 14 126 47 219 218 138 158 14 139 310 203 251 205 166 11 59
-+52 214 282 20 214 308 275 182 282 46 106 230 249 316 252 311 309 77 271 15 291
-+136 269 100 168 243 182 308 301 74 250 66 240 200 197 156 99 16 54 116 96 21
-+314 33 134 37 23 229 156 73 124 132 96 8 51 49 147 287 15 278 190 14 113 101
-+235 231 71 196 63 219 205 192 220 27 72 31 206 285 100 155 297 244 4 234 66 253
-+146 181 189 166 24 5 36 201 32 28 211 228 17 193 313 224 200 210 102 83 3 121
-+78 93 258 56 44 165 215 71 209 9 157 238 259 182 295 38 90 217 316 278 203 277
-+97 88 302 193 22 116 122 230 236 7 268 7 242 115 3 95 186 125 238 285 74 263 12
-+224 187 264 164 50 299 159 127 127 153 45 13 33 121 91 39 242 89 111 173 166 37
-+314 20 188 53 307 162 148 122 204 27 85 294 190 1 167 117 248 164 63 245 97 114
-+194 161 42 250 92 132 122 217 290 69 281 257 280 118 37 36 175 94 60 191 94 47
-+245 110 60 178 148 109 258 43 98 227 228 4 247 12 237 133 248 151 117 261 110
-+47 232 164 76 191 81 101 261 123 310 216 197 143 153 32 67 49 134 24 31 245 123
-+6 162 135 176 220 40 18 286 239 35 62 106 217 303 15 265 244 30 126 34 273 280
-+105 91 52 188 27 98 240 174 305 234 79 199 84 168 256 128 292 288 141 212 17
-+206 259 208 187 277 110 34 286 226 89 124 119 150 24 18 299 185 19 95 173 179
-+300 252 7 255 61 304 82 253 133 235 205 179 274 43 85 281 244 17 180 50 286 213
-+143 140 86 83 16 67 62 80 8 64 312 131 3 82 240 187 251 218 112 266 92 119 176
-+233 303 2 2 306 43 59 26 5 314 46 80 21 10 296 118 24 44 191 107 39 229 143 127
-+140 99 29 54 129 42 276 301 100 142 34 260 17 167 104 302 180 76 178 135 163
-+274 56 31 219 231 84 142 1 206 272 154 171 264 177 42 237 146 194 135 150 11 72
-+44 152 269 87 222 259 195 241 293 77 284 7 229 169 19 108 119 163 287 2 15 252
-+298 46 93 284 311 283 185 32 41 157 212 4 260 4 221 120 315 113 114 181 215 58
-+263 25 170 171 251 231 58 250 79 186 138 184 223 61 13 20 175 107 6 175 81 114
-+207 107 26 283 159 140 73 137 78 80 312 118 11 98 253 120 289 221 146 207 81 88
-+315 139 6 149 189 192 233 290 56 18 273 293 51 75 39 255 35 49 160 233 316 265
-+257 293 64 21 23 242 102 57 111 199 58 276 288 154 158 1 193 9 170 184 197 169
-+45 41 183 104 289 234 92 145 68 155 6 136 243 208 203 ^
-+656 0 221 48 21 32 186 40 42 178 159 51 196 72 161 187 177 283 306 23 266 309
-+296 129 10 26 220 172 316 178 61 228 151 130 205 90 34 297 168 69 109 182 112
-+292 299 83 192 46 269 263 159 149 19 117 63 143 274 67 292 201 260 147 104 313
-+126 56 163 200 123 225 16 90 230 262 258 232 21 57 39 264 296 31 147 300 278
-+216 219 35 75 50 197 13 78 225 237 267 185 41 302 95 197 71 220 270 139 223 3
-+144 288 273 191 228 28 135 295 253 265 172 95 1 106 130 107 267 29 36 212 291 6
-+196 293 19 142 275 8 209 239 280 131 23 291 162 161 64 142 14 150 254 141 236
-+268 126 277 21 155 221 309 198 306 284 124 264 75 173 192 242 234 34 3 21 253
-+44 35 140 262 62 227 250 213 167 30 50 99 150 33 4 281 170 82 55 124 141 40 263
-+36 114 109 280 294 18 201 39 289 149 215 82 153 306 186 301 219 133 257 95 99
-+248 175 9 183 126 179 198 110 279 34 101 163 298 265 270 237 46 8 86 204 51 294
-+214 206 89 133 61 130 9 85 303 134 256 154 182 210 115 25 304 108 143 53 209 18
-+103 176 244 247 299 304 10 1 8 307 62 6 73 258 69 305 147 202 136 171 277 119
-+297 266 211 154 84 68 70 83 29 11 67 71 24 305 49 60 91 269 2 22 194 280 33 160
-+246 260 245 286 39 68 12 260 24 109 84 289 247 38 127 55 222 283 85 205 311 211
-+252 226 113 12 39 166 154 305 245 25 181 113 233 216 121 212 30 148 241 195 254
-+239 59 313 28 233 118 298 167 128 192 144 92 308 101 65 156 220 49 281 268 224
-+100 66 57 137 87 22 292 103 78 102 202 38 29 232 177 22 129 68 168 265 74 272
-+275 204 174 10 124 43 217 218 134 158 12 137 308 199 247 201 162 5 59 52 210
-+278 20 214 304 271 178 282 46 106 228 249 312 250 311 309 75 271 15 287 136 269
-+100 164 239 182 308 297 70 246 64 240 196 195 156 97 14 52 112 96 15 312 29 134
-+35 17 227 152 71 122 128 94 2 47 47 145 287 13 274 190 8 111 97 235 229 67 194
-+59 215 205 188 216 23 70 25 206 285 98 151 293 240 230 66 253 142 177 185 164
-+18 5 34 199 26 24 207 226 15 189 313 224 198 208 102 79 3 119 76 89 256 56 40
-+165 213 69 207 5 157 234 255 180 295 32 88 217 316 276 203 273 93 86 302 193 20
-+116 122 226 236 7 268 3 242 111 318 93 184 125 238 281 72 259 10 222 185 262
-+160 50 295 155 123 127 153 45 9 27 121 89 35 238 85 107 169 166 31 310 16 188
-+53 307 160 148 118 200 25 83 290 188 314 165 115 246 162 63 241 97 112 194 157
-+38 250 90 132 120 213 290 65 279 255 278 118 37 30 173 94 60 189 92 47 243 110
-+58 176 146 105 254 43 94 223 224 2 243 12 235 131 244 149 117 259 108 45 230
-+164 76 187 79 101 261 109 ^
-+656 0 310 208 189 143 149 32 59 41 130 20 31 245 123 2 154 135 168 216 32 14
-+286 231 31 62 102 213 303 7 257 244 22 118 26 269 272 105 91 44 180 27 94 232
-+166 301 230 79 199 84 164 248 128 288 284 133 208 17 198 259 204 187 273 102 30
-+282 218 85 116 111 146 16 18 299 177 11 87 169 179 292 252 3 255 53 296 82 249
-+125 227 201 171 266 39 77 273 240 9 172 46 278 205 139 136 86 79 16 63 54 76 56
-+312 123 312 78 236 179 247 210 104 266 84 119 172 229 299 315 311 298 31 51 26
-+314 314 38 80 13 2 292 114 24 44 191 103 27 221 135 123 140 99 25 317 54 121 42
-+276 301 92 134 22 256 5 159 100 298 180 72 170 131 155 270 52 23 219 231 76 138
-+1 202 272 150 167 264 169 30 237 142 186 127 142 3 72 32 152 265 87 214 255 191
-+241 293 77 284 316 229 161 15 100 115 159 283 319 3 244 298 42 93 280 303 283
-+181 24 33 149 204 4 252 313 213 120 307 113 106 181 207 54 259 21 166 163 251
-+223 50 246 75 186 138 184 223 61 1 8 175 107 6 167 81 114 207 99 14 275 155 132
-+73 133 70 72 308 110 11 98 245 112 281 221 146 199 73 88 315 139 319 141 189
-+188 225 286 48 10 273 285 51 71 35 247 27 49 156 233 312 261 257 289 64 17 15
-+238 94 49 111 191 58 272 288 146 154 318 189 5 170 176 197 169 41 313 41 175 96
-+285 234 92 145 64 155 315 128 243 208 200 219 48 21 28 184 40 40 178 157 47 196
-+68 157 185 175 279 306 23 264 307 296 127 4 24 216 170 314 176 59 224 151 130
-+203 86 34 295 164 65 107 178 112 292 297 79 188 42 265 259 159 145 19 113 61
-+139 274 65 290 199 256 143 104 311 126 52 161 198 121 225 10 90 230 262 254 228
-+15 55 39 260 294 29 147 300 278 216 215 35 75 48 193 7 74 223 233 267 185 37
-+300 95 195 71 218 268 137 221 318 144 284 271 187 228 26 131 293 249 263 172 91
-+320 104 128 105 263 23 36 210 287 194 291 13 140 271 4 207 237 280 131 17 291
-+162 161 60 142 14 148 252 141 234 264 124 275 17 153 217 305 198 304 280 120
-+262 71 173 192 238 232 28 1 19 251 40 29 136 258 58 227 246 213 165 28 46 95
-+150 29 319 279 168 78 53 124 137 38 263 34 112 109 276 290 16 201 33 287 149
-+215 80 151 302 182 297 217 133 253 93 97 248 173 9 183 122 177 194 108 279 30
-+99 163 296 265 270 235 44 8 82 204 49 294 212 202 89 129 57 126 7 85 299 132
-+256 154 180 210 115 21 304 108 141 51 209 14 103 176 242 245 295 302 10 318 6
-+305 60 4 69 258 69 303 145 202 134 171 277 115 297 262 209 152 82 66 70 83 29 9
-+67 67 22 301 47 58 89 267 2 16 190 278 33 160 246 258 241 282 35 64 6 260 18
-+105 80 289 247 38 125 55 292 ^
-+<D
-+
-+H>SHS Type 3 Strings<H
-+D>
-+45 0 14 5 3 1 4 16 12 20 1 6 15 11 18 4 17 16 6 10 3 2 9 9 14 6 2 8 6 7 10 17
-+12 20 6 7 5 16 1 4 2 17 10 15 8 20 1 ^
-+<D
-+
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/basic.conf dbus-0.61/test/data/valid-config-files/basic.conf
---- dbus-0.61.orig/test/data/valid-config-files/basic.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/basic.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,32 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include ignore_missing="yes">nonexistent.conf</include>
-+ <policy context="default">
-+ <allow user="*"/>
-+ </policy>
-+
-+ <limit name="max_incoming_bytes">5000</limit>
-+ <limit name="max_outgoing_bytes">5000</limit>
-+ <limit name="max_message_size">300</limit>
-+ <limit name="service_start_timeout">5000</limit>
-+ <limit name="auth_timeout">6000</limit>
-+ <limit name="max_completed_connections">50</limit>
-+ <limit name="max_incomplete_connections">80</limit>
-+ <limit name="max_connections_per_user">64</limit>
-+ <limit name="max_pending_service_starts">64</limit>
-+ <limit name="max_names_per_connection">256</limit>
-+
-+ <selinux>
-+ <associate own="org.freedesktop.FrobationaryMeasures"
-+ context="my_selinux_context_t"/>
-+ <associate own="org.freedesktop.BlahBlahBlah"
-+ context="foo_t"/>
-+ </selinux>
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/basic.d/basic.conf dbus-0.61/test/data/valid-config-files/basic.d/basic.conf
---- dbus-0.61.orig/test/data/valid-config-files/basic.d/basic.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/basic.d/basic.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,13 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include ignore_missing="yes">nonexistent.conf</include>
-+ <policy context="default">
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/debug-allow-all-sha1.conf dbus-0.61/test/data/valid-config-files/debug-allow-all-sha1.conf
---- dbus-0.61.orig/test/data/valid-config-files/debug-allow-all-sha1.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/debug-allow-all-sha1.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,16 @@
-+<!-- Bus that listens on a debug pipe and requires SHA1 auth, used to test SHA1 -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <listen>debug-pipe:name=test-server</listen>
-+ <listen>unix:tmpdir=/tmp</listen>
-+ <servicedir>/usr/src/johnp/dbus/test/data/valid-service-files</servicedir>
-+ <auth>DBUS_COOKIE_SHA1</auth>
-+ <policy context="default">
-+ <allow send_interface="*"/>
-+ <allow receive_interface="*"/>
-+ <allow own="*"/>
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/debug-allow-all-sha1.conf.in dbus-0.61/test/data/valid-config-files/debug-allow-all-sha1.conf.in
---- dbus-0.61.orig/test/data/valid-config-files/debug-allow-all-sha1.conf.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/debug-allow-all-sha1.conf.in 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,16 @@
-+<!-- Bus that listens on a debug pipe and requires SHA1 auth, used to test SHA1 -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <listen>debug-pipe:name=test-server</listen>
-+ <listen>unix:tmpdir=@TEST_SOCKET_DIR@</listen>
-+ <servicedir>@TEST_SERVICE_DIR@</servicedir>
-+ <auth>DBUS_COOKIE_SHA1</auth>
-+ <policy context="default">
-+ <allow send_interface="*"/>
-+ <allow receive_interface="*"/>
-+ <allow own="*"/>
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/debug-allow-all.conf dbus-0.61/test/data/valid-config-files/debug-allow-all.conf
---- dbus-0.61.orig/test/data/valid-config-files/debug-allow-all.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/debug-allow-all.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,15 @@
-+<!-- Bus that listens on a debug pipe and doesn't create any restrictions -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <listen>debug-pipe:name=test-server</listen>
-+ <listen>unix:tmpdir=/tmp</listen>
-+ <servicedir>/usr/src/johnp/dbus/test/data/valid-service-files</servicedir>
-+ <policy context="default">
-+ <allow send_interface="*"/>
-+ <allow receive_interface="*"/>
-+ <allow own="*"/>
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/debug-allow-all.conf.in dbus-0.61/test/data/valid-config-files/debug-allow-all.conf.in
---- dbus-0.61.orig/test/data/valid-config-files/debug-allow-all.conf.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/debug-allow-all.conf.in 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,15 @@
-+<!-- Bus that listens on a debug pipe and doesn't create any restrictions -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <listen>debug-pipe:name=test-server</listen>
-+ <listen>unix:tmpdir=@TEST_SOCKET_DIR@</listen>
-+ <servicedir>@TEST_SERVICE_DIR@</servicedir>
-+ <policy context="default">
-+ <allow send_interface="*"/>
-+ <allow receive_interface="*"/>
-+ <allow own="*"/>
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/entities.conf dbus-0.61/test/data/valid-config-files/entities.conf
---- dbus-0.61.orig/test/data/valid-config-files/entities.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/entities.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,14 @@
-+<!-- This config file contains XML entities -->
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/<bar></listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/&share/foo</servicedir>
-+ <include ignore_missing="yes">nonexistent.confn</include>
-+ <policy context="default">
-+ <allow user="*"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/many-rules.conf dbus-0.61/test/data/valid-config-files/many-rules.conf
---- dbus-0.61.orig/test/data/valid-config-files/many-rules.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/many-rules.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,58 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <user>mybususer</user>
-+ <listen>unix:path=/foo/bar</listen>
-+ <listen>tcp:port=1234</listen>
-+ <includedir>basic.d</includedir>
-+ <servicedir>/usr/share/foo</servicedir>
-+ <include ignore_missing="yes">nonexistent.conf</include>
-+ <policy context="default">
-+ <allow user="*"/>
-+ <deny send_interface="org.freedesktop.System" send_member="Reboot"/>
-+ <deny receive_interface="org.freedesktop.System" receive_member="Reboot"/>
-+ <deny send_path="/foo/bar/SystemObjectThing" send_member="Reboot"/>
-+ <deny own="org.freedesktop.System"/>
-+ <deny send_destination="org.freedesktop.System"/>
-+ <deny receive_sender="org.freedesktop.System"/>
-+ <deny user="root"/>
-+ <deny group="root"/>
-+ <allow send_type="error"/>
-+ <allow send_type="method_call"/>
-+ <allow send_type="method_return"/>
-+ <allow send_type="signal"/>
-+ <deny send_destination="org.freedesktop.Bar" send_interface="org.freedesktop.Foo"/>
-+ <deny send_destination="org.freedesktop.Bar" send_interface="org.freedesktop.Foo" send_type="method_call"/>
-+ </policy>
-+
-+ <policy context="mandatory">
-+ <allow user="*"/>
-+ <deny send_interface="org.freedesktop.System" send_member="Reboot"/>
-+ <deny receive_interface="org.freedesktop.System" receive_member="Reboot"/>
-+ <deny send_path="/foo/bar/SystemObjectThing" send_member="Reboot"/>
-+ <deny own="org.freedesktop.System"/>
-+ <deny send_destination="org.freedesktop.System"/>
-+ <deny receive_sender="org.freedesktop.System"/>
-+ <deny user="root"/>
-+ <deny group="root"/>
-+ <allow send_type="error"/>
-+ <allow send_type="method_call"/>
-+ <allow send_type="method_return"/>
-+ <allow send_type="signal"/>
-+ <deny send_destination="org.freedesktop.Bar" send_interface="org.freedesktop.Foo"/>
-+ <deny send_destination="org.freedesktop.Bar" send_interface="org.freedesktop.Foo" send_type="method_call"/>
-+ </policy>
-+
-+ <limit name="max_incoming_bytes">5000</limit>
-+ <limit name="max_outgoing_bytes">5000</limit>
-+ <limit name="max_message_size">300</limit>
-+ <limit name="service_start_timeout">5000</limit>
-+ <limit name="auth_timeout">6000</limit>
-+ <limit name="max_completed_connections">50</limit>
-+ <limit name="max_incomplete_connections">80</limit>
-+ <limit name="max_connections_per_user">64</limit>
-+ <limit name="max_pending_service_starts">64</limit>
-+ <limit name="max_names_per_connection">256</limit>
-+ <limit name="max_match_rules_per_connection">512</limit>
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/session.conf dbus-0.61/test/data/valid-config-files/session.conf
---- dbus-0.61.orig/test/data/valid-config-files/session.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/session.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,30 @@
-+<!-- This configuration file controls the per-user-login-session message bus.
-+ Add a session-local.conf and edit that rather than changing this
-+ file directly. -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <!-- Our well-known bus type, don't change this -->
-+ <type>session</type>
-+
-+ <listen>unix:tmpdir=/tmp</listen>
-+
-+ <servicedir>/usr/local/share/dbus-1/services</servicedir>
-+
-+ <policy context="default">
-+ <!-- Allow everything to be sent -->
-+ <allow send_destination="*"/>
-+ <!-- Allow everything to be received -->
-+ <allow eavesdrop="true"/>
-+ <!-- Allow anyone to own anything -->
-+ <allow own="*"/>
-+ </policy>
-+
-+ <!-- This is included last so local configuration can override what's
-+ in this standard file -->
-+ <include ignore_missing="yes">session-local.conf</include>
-+
-+ <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include>
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/system.conf dbus-0.61/test/data/valid-config-files/system.conf
---- dbus-0.61.orig/test/data/valid-config-files/system.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/system.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,62 @@
-+<!-- This configuration file controls the systemwide message bus.
-+ Add a system-local.conf and edit that rather than changing this
-+ file directly. -->
-+
-+<!-- Note that there are any number of ways you can hose yourself
-+ security-wise by screwing up this file; in particular, you
-+ probably don't want to listen on any more addresses, add any more
-+ auth mechanisms, run as a different user, etc. -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+
-+ <!-- Our well-known bus type, do not change this -->
-+ <type>system</type>
-+
-+ <!-- Run as special user -->
-+ <user>messagebus</user>
-+
-+ <!-- Fork into daemon mode -->
-+ <fork/>
-+
-+ <!-- Write a pid file -->
-+ <pidfile>/usr/local/var/run/messagebus.pid</pidfile>
-+
-+ <!-- Only allow socket-credentials-based authentication -->
-+ <auth>EXTERNAL</auth>
-+
-+ <!-- Only listen on a local socket. (abstract=/path/to/socket
-+ means use abstract namespace, don't really create filesystem
-+ file; only Linux supports this. Use path=/whatever on other
-+ systems.) -->
-+ <listen>unix:path=/usr/local/var/run/dbus/system_bus_socket</listen>
-+
-+ <policy context="default">
-+ <!-- Deny everything then punch holes -->
-+ <deny send_interface="*"/>
-+ <deny receive_interface="*"/>
-+ <deny own="*"/>
-+ <!-- But allow all users to connect -->
-+ <allow user="*"/>
-+ <!-- Allow anyone to talk to the message bus -->
-+ <!-- FIXME I think currently these allow rules are always implicit
-+ even if they aren't in here -->
-+ <allow send_destination="org.freedesktop.DBus"/>
-+ <allow receive_sender="org.freedesktop.DBus"/>
-+ <!-- valid replies are always allowed -->
-+ <allow send_requested_reply="true"/>
-+ <allow receive_requested_reply="true"/>
-+ </policy>
-+
-+ <!-- Config files are placed here that among other things, punch
-+ holes in the above policy for specific services. -->
-+ <includedir>system.d</includedir>
-+
-+ <!-- This is included last so local configuration can override what's
-+ in this standard file -->
-+ <include ignore_missing="yes">system-local.conf</include>
-+
-+ <include if_selinux_enabled="yes" selinux_root_relative="yes">contexts/dbus_contexts</include>
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-config-files/system.d/test.conf dbus-0.61/test/data/valid-config-files/system.d/test.conf
---- dbus-0.61.orig/test/data/valid-config-files/system.d/test.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-config-files/system.d/test.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,20 @@
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <!-- The following demonstrates how to punch holes in a default deny-all
-+ policy so that a particular user can own a service, and other
-+ connections can get messages from it -->
-+
-+ <!-- Only root can own the FooService service, and
-+ this user can only send the one kind of message -->
-+ <policy user="root">
-+ <allow own="org.foo.FooService"/>
-+ <allow send_interface="org.foo.FooBroadcastInterface"/>
-+ </policy>
-+
-+ <!-- Allow any connection to receive the message, but
-+ only if the message is sent by the owner of FooService -->
-+ <policy context="default">
-+ <allow receive_interface="org.foo.FooBroadcastInterface" receive_sender="org.foo.FooService"/>
-+ </policy>
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/data/valid-messages/array-of-array-of-uint32.message dbus-0.61/test/data/valid-messages/array-of-array-of-uint32.message
---- dbus-0.61.orig/test/data/valid-messages/array-of-array-of-uint32.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/array-of-array-of-uint32.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,33 @@
-+# Message with an array of array of uint32
-+
-+VALID_HEADER method_call
-+REQUIRED_FIELDS
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+
-+TYPE ARRAY
-+TYPE ARRAY
-+TYPE UINT32
-+
-+LENGTH Array
-+START_LENGTH Array
-+
-+## array of uint32
-+LENGTH SubArray1
-+START_LENGTH SubArray1
-+UINT32 1
-+UINT32 2
-+UINT32 3
-+END_LENGTH SubArray1
-+
-+## array of uint32
-+LENGTH SubArray2
-+START_LENGTH SubArray2
-+UINT32 4
-+UINT32 5
-+END_LENGTH SubArray2
-+
-+END_LENGTH Array
-+
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/dict-simple.message dbus-0.61/test/data/valid-messages/dict-simple.message
---- dbus-0.61.orig/test/data/valid-messages/dict-simple.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/dict-simple.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,15 @@
-+# A simple dict
-+
-+VALID_HEADER method_call
-+REQUIRED_FIELDS
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+TYPE DICT
-+LENGTH Dict
-+START_LENGTH Dict
-+STRING 'int32'
-+TYPE INT32
-+INT32 0x12345678
-+END_LENGTH Dict
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/dict.message dbus-0.61/test/data/valid-messages/dict.message
---- dbus-0.61.orig/test/data/valid-messages/dict.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/dict.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,47 @@
-+# Dict with different values
-+
-+VALID_HEADER method_call
-+REQUIRED_FIELDS
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+TYPE DICT
-+LENGTH Dict
-+START_LENGTH Dict
-+STRING 'boolean'
-+TYPE BOOLEAN
-+BYTE 1
-+STRING 'int32'
-+TYPE INT32
-+INT32 0x12345678
-+STRING 'uint32'
-+TYPE UINT32
-+UINT32 0x8765432
-+STRING 'double'
-+TYPE DOUBLE
-+DOUBLE 3.141592653589
-+STRING 'string'
-+TYPE STRING
-+STRING 'This is a string'
-+STRING 'boolean_array'
-+TYPE ARRAY
-+TYPE BOOLEAN
-+BOOLEAN_ARRAY { true, false, false, true, false }
-+STRING 'int32_array'
-+TYPE ARRAY
-+TYPE INT32
-+INT32_ARRAY { 1, -2, 3, -4, 5, -6, 7, -8, 9, -10 }
-+STRING 'uint32_array'
-+TYPE ARRAY
-+TYPE UINT32
-+UINT32_ARRAY { 11, 12, 314, 1911, 57692, 1237, 2834 }
-+STRING 'double_array'
-+TYPE ARRAY
-+TYPE DOUBLE
-+DOUBLE_ARRAY { 0.1, 0.2, 3.1415926, 2.7183, 10.0, 9.99 }
-+STRING 'string_array'
-+TYPE ARRAY
-+TYPE STRING
-+STRING_ARRAY { 'Hello', 'This', 'Is', 'A', 'String', 'Array!' }
-+END_LENGTH Dict
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/emptiness.message dbus-0.61/test/data/valid-messages/emptiness.message
---- dbus-0.61.orig/test/data/valid-messages/emptiness.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/emptiness.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,63 @@
-+# Empty arrays and strings
-+
-+VALID_HEADER method_call
-+REQUIRED_FIELDS
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+TYPE STRING
-+INT32 0
-+BYTE 0 # Strings need to be NULL-terminated
-+TYPE ARRAY
-+TYPE BOOLEAN
-+INT32 0
-+TYPE ARRAY
-+TYPE INT32
-+INT32 0
-+TYPE ARRAY
-+TYPE UINT32
-+INT32 0
-+TYPE ARRAY
-+TYPE DOUBLE
-+INT32 0
-+TYPE ARRAY
-+TYPE BYTE
-+INT32 0
-+TYPE ARRAY
-+TYPE STRING
-+INT32 0
-+TYPE DICT
-+INT32 0
-+
-+# A dict with empty arrays
-+TYPE DICT
-+LENGTH Dict
-+START_LENGTH Dict
-+STRING 'boolean_array'
-+TYPE ARRAY
-+TYPE BOOLEAN
-+INT32 0
-+STRING 'int32_array'
-+TYPE ARRAY
-+TYPE INT32
-+INT32 0
-+STRING 'uint32_array'
-+TYPE ARRAY
-+TYPE UINT32
-+INT32 0
-+STRING 'double_array'
-+TYPE ARRAY
-+TYPE DOUBLE
-+INT32 0
-+STRING 'byte_array'
-+TYPE ARRAY
-+TYPE BYTE
-+INT32 0
-+STRING 'string_array' }
-+TYPE ARRAY
-+TYPE STRING
-+INT32 0
-+END_LENGTH Dict
-+
-+END_LENGTH Body
-+
-diff -Naur dbus-0.61.orig/test/data/valid-messages/lots-of-arguments.message dbus-0.61/test/data/valid-messages/lots-of-arguments.message
---- dbus-0.61.orig/test/data/valid-messages/lots-of-arguments.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/lots-of-arguments.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,65 @@
-+# Message with lots of different argument types
-+
-+VALID_HEADER method_call
-+REQUIRED_FIELDS
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+TYPE NIL
-+TYPE BYTE
-+BYTE 42
-+TYPE INT32
-+INT32 0x12345678
-+TYPE UINT32
-+UINT32 0x8765432
-+TYPE DOUBLE
-+DOUBLE 3.141592653589
-+TYPE STRING
-+STRING 'This is a string'
-+TYPE ARRAY
-+TYPE BOOLEAN
-+BOOLEAN_ARRAY { true, false, false, true, false }
-+TYPE ARRAY
-+TYPE INT32
-+INT32_ARRAY { 1, -2, 3, -4, 5, -6, 7, -8, 9, -10 }
-+TYPE ARRAY
-+TYPE UINT32
-+UINT32_ARRAY { 11, 12, 314, 1911, 57692, 1237, 2834 }
-+TYPE ARRAY
-+TYPE DOUBLE
-+DOUBLE_ARRAY { 0.1, 0.2, 3.1415926, 2.7183, 10.0, 9.99 }
-+TYPE ARRAY
-+TYPE STRING
-+STRING_ARRAY { 'Hello', 'This', 'Is', 'A', 'String', 'Array!' }
-+TYPE CUSTOM
-+STRING 'named type'
-+BYTE_ARRAY { 'b', 'i', 'n', 'a', 'r', 'y', 'd', 'a', 't', 'a' }
-+
-+TYPE ARRAY
-+TYPE DICT
-+LENGTH Array
-+START_LENGTH Array
-+
-+LENGTH Dict1
-+START_LENGTH Dict1
-+STRING 'key1'
-+TYPE INT32
-+INT32 0x12345678
-+STRING 'key2'
-+TYPE UINT32
-+UINT32 0x8765432
-+END_LENGTH Dict1
-+
-+LENGTH Dict2
-+START_LENGTH Dict2
-+STRING 'key1'
-+TYPE INT32
-+INT32 0x12345678
-+STRING 'key2'
-+TYPE UINT32
-+UINT32 0x8765432
-+END_LENGTH Dict2
-+
-+END_LENGTH Array
-+
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/no-padding.message dbus-0.61/test/data/valid-messages/no-padding.message
---- dbus-0.61.orig/test/data/valid-messages/no-padding.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/no-padding.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,22 @@
-+## Message with no header padding
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+REQUIRED_FIELDS
-+
-+## this byte array is filled with zeros to the natural length
-+## of the header
-+HEADER_FIELD UNKNOWN
-+TYPE ARRAY
-+TYPE BYTE
-+ALIGN 4
-+LENGTH ThisByteArray
-+START_LENGTH ThisByteArray
-+BYTE 1
-+ALIGN 8 1
-+END_LENGTH ThisByteArray
-+
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/opposite-endian.message dbus-0.61/test/data/valid-messages/opposite-endian.message
---- dbus-0.61.orig/test/data/valid-messages/opposite-endian.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/opposite-endian.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,30 @@
-+## Message of opposite endianness, with lots of random fields in it
-+
-+OPPOSITE_ENDIAN
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+REQUIRED_FIELDS
-+
-+HEADER_FIELD UNKNOWN
-+TYPE INT32
-+INT32 0xfeeb
-+
-+ALIGN 8
-+END_LENGTH Header
-+
-+START_LENGTH Body
-+
-+TYPE INT32
-+INT32 89765432
-+TYPE UINT32
-+UINT32 0xfffffff
-+TYPE STRING
-+STRING 'Hello this is a string'
-+TYPE DOUBLE
-+DOUBLE 3.14159
-+
-+TYPE NIL
-+
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/recursive-types.message dbus-0.61/test/data/valid-messages/recursive-types.message
---- dbus-0.61.orig/test/data/valid-messages/recursive-types.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/recursive-types.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,99 @@
-+## Message with recursive types
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+
-+REQUIRED_FIELDS
-+
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+
-+# Everything is inside a dict
-+TYPE DICT
-+LENGTH Dict1
-+START_LENGTH Dict1
-+
-+# first dict entry is an array of array of uint32
-+STRING 'mega-uint-array'
-+TYPE ARRAY
-+TYPE ARRAY
-+TYPE ARRAY
-+TYPE UINT32
-+LENGTH Array1
-+START_LENGTH Array1
-+
-+LENGTH Array1_1
-+START_LENGTH Array1_1
-+UINT32_ARRAY { 1, 2, 3, 4, 5}
-+UINT32_ARRAY { 2, 3, 4, 5, 1}
-+UINT32_ARRAY { 3, 4, 5, 1, 2}
-+END_LENGTH Array1_1
-+
-+LENGTH Array1_2
-+START_LENGTH Array1_2
-+UINT32_ARRAY { 4, 5, 6, 7, 8}
-+UINT32_ARRAY { 5, 6, 7, 8, 4}
-+END_LENGTH Array1_2
-+
-+END_LENGTH Array1
-+
-+# second dict entry is an array of strings
-+STRING 'string-array'
-+TYPE ARRAY
-+TYPE STRING
-+STRING_ARRAY { 'a', 'string', 'array'}
-+
-+# third dict entry is another dict
-+STRING 'nested-dict'
-+TYPE DICT
-+LENGTH Dict2
-+START_LENGTH Dict2
-+
-+STRING 'string'
-+TYPE STRING
-+STRING 'a deeply nested string'
-+
-+STRING 'super-nested-dict'
-+TYPE DICT
-+LENGTH Dict3
-+START_LENGTH Dict3
-+
-+STRING 'double-array'
-+TYPE ARRAY
-+TYPE DOUBLE
-+DOUBLE_ARRAY {1.0, 2.0, 3.0}
-+
-+STRING 'dict-array'
-+TYPE ARRAY
-+TYPE DICT
-+LENGTH Array2
-+START_LENGTH Array2
-+
-+LENGTH Dict4
-+START_LENGTH Dict4
-+STRING 'key4'
-+TYPE BYTE
-+BYTE '4'
-+END_LENGTH Dict4
-+
-+LENGTH Dict5
-+START_LENGTH Dict5
-+STRING 'key5'
-+TYPE BYTE
-+BYTE '5'
-+END_LENGTH Dict5
-+
-+END_LENGTH Array2
-+
-+STRING 'boolean'
-+TYPE BOOLEAN
-+BOOLEAN false
-+
-+END_LENGTH Dict3
-+
-+END_LENGTH Dict2
-+
-+END_LENGTH Dict1
-+
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/simplest-manual.message dbus-0.61/test/data/valid-messages/simplest-manual.message
---- dbus-0.61.orig/test/data/valid-messages/simplest-manual.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/simplest-manual.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,30 @@
-+## like simplest.message, but doesn't use VALID_HEADER
-+## convenience command. mostly to test the test framework.
-+
-+LITTLE_ENDIAN
-+BYTE 'l'
-+BYTE 1
-+BYTE 0
-+BYTE 0
-+LENGTH Header
-+LENGTH Body
-+## client serial
-+INT32 7
-+
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/foo'
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.Foo'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Bar'
-+HEADER_FIELD SIGNATURE
-+TYPE STRING
-+STRING ''
-+
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/simplest.message dbus-0.61/test/data/valid-messages/simplest.message
---- dbus-0.61.orig/test/data/valid-messages/simplest.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/simplest.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,10 @@
-+## simplest possible valid message
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+REQUIRED_FIELDS
-+
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/standard-acquire-service.message dbus-0.61/test/data/valid-messages/standard-acquire-service.message
---- dbus-0.61.orig/test/data/valid-messages/standard-acquire-service.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/standard-acquire-service.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,26 @@
-+# Standard org.freedesktop.DBus.AcquireService message
-+
-+VALID_HEADER method_call
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/org/freedesktop/DBus'
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.DBus'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'AcquireService'
-+HEADER_FIELD DESTINATION
-+TYPE STRING
-+STRING 'org.freedesktop.DBus'
-+HEADER_FIELD SIGNATURE
-+TYPE STRING
-+STRING 'su'
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+TYPE STRING
-+STRING 'org.freedesktop.DBus.Sample'
-+TYPE UINT32
-+UINT32 0
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/standard-hello.message dbus-0.61/test/data/valid-messages/standard-hello.message
---- dbus-0.61.orig/test/data/valid-messages/standard-hello.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/standard-hello.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,22 @@
-+# Standard org.freedesktop.DBus.Hello message
-+
-+VALID_HEADER method_call
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/org/freedesktop/DBus'
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.DBus'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'Hello'
-+HEADER_FIELD DESTINATION
-+TYPE STRING
-+STRING 'org.freedesktop.DBus'
-+HEADER_FIELD SIGNATURE
-+TYPE STRING
-+STRING ''
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/standard-list-services.message dbus-0.61/test/data/valid-messages/standard-list-services.message
---- dbus-0.61.orig/test/data/valid-messages/standard-list-services.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/standard-list-services.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,22 @@
-+# Standard org.freedesktop.DBus.ListServices message
-+
-+VALID_HEADER method_call
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/org/freedesktop/DBus'
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.DBus'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'ListServices'
-+HEADER_FIELD DESTINATION
-+TYPE STRING
-+STRING 'org.freedesktop.DBus'
-+HEADER_FIELD SIGNATURE
-+TYPE STRING
-+STRING ''
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/standard-service-exists.message dbus-0.61/test/data/valid-messages/standard-service-exists.message
---- dbus-0.61.orig/test/data/valid-messages/standard-service-exists.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/standard-service-exists.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,24 @@
-+# Standard org.freedesktop.DBus.ServiceExists message
-+
-+VALID_HEADER method_call
-+HEADER_FIELD PATH
-+TYPE OBJECT_PATH
-+OBJECT_PATH '/org/freedesktop/DBus'
-+HEADER_FIELD INTERFACE
-+TYPE STRING
-+STRING 'org.freedesktop.DBus'
-+HEADER_FIELD MEMBER
-+TYPE STRING
-+STRING 'ServiceExists'
-+HEADER_FIELD DESTINATION
-+TYPE STRING
-+STRING 'org.freedesktop.DBus'
-+HEADER_FIELD SIGNATURE
-+TYPE STRING
-+STRING 's'
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+TYPE STRING
-+STRING 'org.freedesktop.DBus.Sample'
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-messages/unknown-header-field.message dbus-0.61/test/data/valid-messages/unknown-header-field.message
---- dbus-0.61.orig/test/data/valid-messages/unknown-header-field.message 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-messages/unknown-header-field.message 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,19 @@
-+## message with a 'name' header field and unknown 'unkn' field
-+
-+## VALID_HEADER includes a LENGTH Header and LENGTH Body
-+VALID_HEADER method_call
-+REQUIRED_FIELDS
-+
-+HEADER_FIELD UNKNOWN
-+TYPE DICT
-+LENGTH Dict
-+START_LENGTH Dict
-+STRING 'int32'
-+TYPE INT32
-+INT32 0x12345678
-+END_LENGTH Dict
-+
-+ALIGN 8
-+END_LENGTH Header
-+START_LENGTH Body
-+END_LENGTH Body
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-echo.service dbus-0.61/test/data/valid-service-files/debug-echo.service
---- dbus-0.61.orig/test/data/valid-service-files/debug-echo.service 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-echo.service 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteEchoService
-+Exec=/usr/src/johnp/dbus/test/test-service
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-echo.service.in dbus-0.61/test/data/valid-service-files/debug-echo.service.in
---- dbus-0.61.orig/test/data/valid-service-files/debug-echo.service.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-echo.service.in 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteEchoService
-+Exec=@TEST_SERVICE_BINARY@
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-glib.service dbus-0.61/test/data/valid-service-files/debug-glib.service
---- dbus-0.61.orig/test/data/valid-service-files/debug-glib.service 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-glib.service 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteGLibService
-+Exec=/usr/src/johnp/dbus/test/glib/test-service-glib
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-glib.service.in dbus-0.61/test/data/valid-service-files/debug-glib.service.in
---- dbus-0.61.orig/test/data/valid-service-files/debug-glib.service.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-glib.service.in 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteGLibService
-+Exec=@TEST_GLIB_SERVICE_BINARY@
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-python.service dbus-0.61/test/data/valid-service-files/debug-python.service
---- dbus-0.61.orig/test/data/valid-service-files/debug-python.service 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-python.service 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuitePythonService
-+Exec=/usr/src/johnp/dbus/test/python/test-service.py
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-python.service.in dbus-0.61/test/data/valid-service-files/debug-python.service.in
---- dbus-0.61.orig/test/data/valid-service-files/debug-python.service.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-python.service.in 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuitePythonService
-+Exec=@TEST_PYTHON_SERVICE_BINARY@
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-segfault.service dbus-0.61/test/data/valid-service-files/debug-segfault.service
---- dbus-0.61.orig/test/data/valid-service-files/debug-segfault.service 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-segfault.service 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,4 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteSegfaultService
-+Exec=/usr/src/johnp/dbus/test/test-segfault
-+
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-segfault.service.in dbus-0.61/test/data/valid-service-files/debug-segfault.service.in
---- dbus-0.61.orig/test/data/valid-service-files/debug-segfault.service.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-segfault.service.in 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,4 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteSegfaultService
-+Exec=@TEST_SEGFAULT_BINARY@
-+
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-shell-echo-fail.service dbus-0.61/test/data/valid-service-files/debug-shell-echo-fail.service
---- dbus-0.61.orig/test/data/valid-service-files/debug-shell-echo-fail.service 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-shell-echo-fail.service 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteShellEchoServiceFail
-+Exec=/usr/src/johnp/dbus/test/test-shell-service "this should 'fail' because of an unterminated quote
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-shell-echo-fail.service.in dbus-0.61/test/data/valid-service-files/debug-shell-echo-fail.service.in
---- dbus-0.61.orig/test/data/valid-service-files/debug-shell-echo-fail.service.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-shell-echo-fail.service.in 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteShellEchoServiceFail
-+Exec=@TEST_SHELL_SERVICE_BINARY@ "this should 'fail' because of an unterminated quote
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-shell-echo-success.service dbus-0.61/test/data/valid-service-files/debug-shell-echo-success.service
---- dbus-0.61.orig/test/data/valid-service-files/debug-shell-echo-success.service 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-shell-echo-success.service 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess
-+Exec=/usr/src/johnp/dbus/test/test-shell-service -test "that" 'we get' back --what "we put in"
-diff -Naur dbus-0.61.orig/test/data/valid-service-files/debug-shell-echo-success.service.in dbus-0.61/test/data/valid-service-files/debug-shell-echo-success.service.in
---- dbus-0.61.orig/test/data/valid-service-files/debug-shell-echo-success.service.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/data/valid-service-files/debug-shell-echo-success.service.in 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,3 @@
-+[D-BUS Service]
-+Name=org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess
-+Exec=@TEST_SHELL_SERVICE_BINARY@ -test "that" 'we get' back --what "we put in"
-diff -Naur dbus-0.61.orig/test/decode-gcov.c dbus-0.61/test/decode-gcov.c
---- dbus-0.61.orig/test/decode-gcov.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/decode-gcov.c 2004-12-24 18:54:01.000000000 +0100
-@@ -0,0 +1,2652 @@
-+ /* -*- mode: C; c-file-style: "gnu" -*- */
-+/* decode-gcov.c gcov decoder program
-+ *
-+ * Copyright (C) 2003 Red Hat Inc.
-+ *
-+ * Partially derived from gcov,
-+ * Copyright (C) 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998,
-+ * 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-+ *
-+ * This file is NOT licensed under the Academic Free License
-+ * as it is largely derived from gcov.c and gcov-io.h in the
-+ * gcc source code.
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#define DBUS_COMPILATION /* cheat */
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-string.h>
-+#include <dbus/dbus-sysdeps.h>
-+#include <dbus/dbus-marshal.h>
-+#include <dbus/dbus-hash.h>
-+#undef DBUS_COMPILATION
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#ifndef DBUS_HAVE_INT64
-+#error "gcov support can't be built without 64-bit integer support"
-+#endif
-+
-+static void
-+die (const char *message)
-+{
-+ fprintf (stderr, "%s", message);
-+ exit (1);
-+}
-+
-+/* This bizarro function is from gcov-io.h in gcc source tree */
-+static int
-+fetch_long (long *dest,
-+ const char *source,
-+ size_t bytes)
-+{
-+ long value = 0;
-+ int i;
-+
-+ for (i = bytes - 1; (size_t) i > (sizeof (*dest) - 1); i--)
-+ if (source[i] & ((size_t) i == (bytes - 1) ? 127 : 255 ))
-+ return 1;
-+
-+ for (; i >= 0; i--)
-+ value = value * 256 + (source[i] & ((size_t)i == (bytes - 1) ? 127 : 255));
-+
-+ if ((source[bytes - 1] & 128) && (value > 0))
-+ value = - value;
-+
-+ *dest = value;
-+ return 0;
-+}
-+
-+static int
-+fetch_long64 (dbus_int64_t *dest,
-+ const char *source,
-+ size_t bytes)
-+{
-+ dbus_int64_t value = 0;
-+ int i;
-+
-+ for (i = bytes - 1; (size_t) i > (sizeof (*dest) - 1); i--)
-+ if (source[i] & ((size_t) i == (bytes - 1) ? 127 : 255 ))
-+ return 1;
-+
-+ for (; i >= 0; i--)
-+ value = value * 256 + (source[i] & ((size_t)i == (bytes - 1) ? 127 : 255));
-+
-+ if ((source[bytes - 1] & 128) && (value > 0))
-+ value = - value;
-+
-+ *dest = value;
-+ return 0;
-+}
-+
-+#define BB_FILENAME (-1)
-+#define BB_FUNCTION (-2)
-+#define BB_ENDOFLIST 0
-+
-+static dbus_bool_t
-+string_get_int (const DBusString *str,
-+ int start,
-+ long *val)
-+{
-+ const char *p;
-+
-+ if ((_dbus_string_get_length (str) - start) < 4)
-+ return FALSE;
-+
-+ p = _dbus_string_get_const_data (str);
-+
-+ p += start;
-+
-+ fetch_long (val, p, 4);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+string_get_int64 (const DBusString *str,
-+ int start,
-+ dbus_int64_t *val)
-+{
-+ const char *p;
-+
-+ if ((_dbus_string_get_length (str) - start) < 8)
-+ return FALSE;
-+
-+ p = _dbus_string_get_const_data (str);
-+
-+ p += start;
-+
-+ fetch_long64 (val, p, 8);
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+string_get_string (const DBusString *str,
-+ int start,
-+ long terminator,
-+ DBusString *val,
-+ int *end)
-+{
-+ int i;
-+ long n;
-+
-+ i = start;
-+ while (string_get_int (str, i, &n))
-+ {
-+ unsigned char b;
-+
-+ i += 4;
-+
-+ if (n == terminator)
-+ break;
-+
-+ b = n & 0xff;
-+ if (b)
-+ {
-+ _dbus_string_append_byte (val, b);
-+ b = (n >> 8) & 0xff;
-+ if (b)
-+ {
-+ _dbus_string_append_byte (val, b);
-+ b = (n >> 16) & 0xff;
-+ if (b)
-+ {
-+ _dbus_string_append_byte (val, b);
-+ b = (n >> 24) & 0xff;
-+ if (b)
-+ _dbus_string_append_byte (val, b);
-+ }
-+ }
-+ }
-+ }
-+
-+ *end = i;
-+
-+ return TRUE;
-+}
-+
-+#ifdef DBUS_HAVE_GCC33_GCOV
-+/* In gcc33 .bbg files, there's a function name of the form:
-+ * -1, length, name (padded to 4), -1, checksum
-+ */
-+static dbus_bool_t
-+string_get_function (const DBusString *str,
-+ int start,
-+ DBusString *funcname,
-+ int *checksum,
-+ int *next)
-+{
-+ int end;
-+ long val;
-+ int i;
-+
-+ i = start;
-+
-+ if (!string_get_int (str, i, &val))
-+ die ("no room for -1 before function name\n");
-+
-+ i += 4;
-+
-+ if (val != -1)
-+ die ("value before function name is not -1\n");
-+
-+ if (!string_get_int (str, i, &val))
-+ die ("no length found for function name\n");
-+
-+ i += 4;
-+
-+ end = i + val;
-+ if (end > _dbus_string_get_length (str))
-+ die ("Function name length points past end of file\n");
-+
-+ if (!_dbus_string_append (funcname,
-+ _dbus_string_get_const_data (str) + i))
-+ die ("no memory\n");
-+
-+ /* skip alignment padding the length doesn't include the nul so add 1
-+ */
-+ i = _DBUS_ALIGN_VALUE (end + 1, 4);
-+
-+ if (!string_get_int (str, i, &val) ||
-+ val != -1)
-+ die ("-1 at end of function name not found\n");
-+
-+ i += 4;
-+
-+ if (!string_get_int (str, i, &val))
-+ die ("no checksum found at end of function name\n");
-+
-+ i += 4;
-+
-+ *checksum = val;
-+
-+ *next = i;
-+
-+ return TRUE;
-+}
-+#endif /* DBUS_HAVE_GCC33_GCOV */
-+
-+static void
-+dump_bb_file (const DBusString *contents)
-+{
-+ int i;
-+ long val;
-+ int n_functions;
-+
-+ n_functions = 0;
-+ i = 0;
-+ while (string_get_int (contents, i, &val))
-+ {
-+ i += 4;
-+
-+ switch (val)
-+ {
-+ case BB_FILENAME:
-+ {
-+ DBusString f;
-+
-+ if (!_dbus_string_init (&f))
-+ die ("no memory\n");
-+
-+ if (string_get_string (contents, i,
-+ BB_FILENAME,
-+ &f, &i))
-+ {
-+ printf ("File %s\n", _dbus_string_get_const_data (&f));
-+ }
-+ _dbus_string_free (&f);
-+ }
-+ break;
-+ case BB_FUNCTION:
-+ {
-+ DBusString f;
-+ if (!_dbus_string_init (&f))
-+ die ("no memory\n");
-+
-+ if (string_get_string (contents, i,
-+ BB_FUNCTION,
-+ &f, &i))
-+ {
-+ printf ("Function %s\n", _dbus_string_get_const_data (&f));
-+ }
-+ _dbus_string_free (&f);
-+
-+ n_functions += 1;
-+ }
-+ break;
-+ case BB_ENDOFLIST:
-+ printf ("End of block\n");
-+ break;
-+ default:
-+ printf ("Line %ld\n", val);
-+ break;
-+ }
-+ }
-+
-+ printf ("%d functions in file\n", n_functions);
-+}
-+
-+#define FLAG_ON_TREE 0x1
-+#define FLAG_FAKE 0x2
-+#define FLAG_FALL_THROUGH 0x4
-+
-+static void
-+dump_bbg_file (const DBusString *contents)
-+{
-+ int i;
-+ long val;
-+ int n_functions;
-+ int n_arcs;
-+ int n_blocks;
-+ int n_arcs_off_tree;
-+
-+ n_arcs_off_tree = 0;
-+ n_blocks = 0;
-+ n_arcs = 0;
-+ n_functions = 0;
-+ i = 0;
-+ while (i < _dbus_string_get_length (contents))
-+ {
-+ long n_blocks_in_func;
-+ long n_arcs_in_func;
-+ int j;
-+
-+#ifdef DBUS_HAVE_GCC33_GCOV
-+ /* In gcc33 .bbg files, there's a function name of the form:
-+ * -1, length, name (padded to 4), -1, checksum
-+ * after that header on each function description, it's
-+ * the same as in gcc32
-+ */
-+
-+ {
-+ DBusString funcname;
-+ int checksum;
-+
-+ if (!_dbus_string_init (&funcname))
-+ die ("no memory\n");
-+
-+ if (!string_get_function (contents, i,
-+ &funcname, &checksum, &i))
-+ die ("could not read function name\n");
-+
-+ printf ("Function name is \"%s\" checksum %d\n",
-+ _dbus_string_get_const_data (&funcname),
-+ checksum);
-+
-+ _dbus_string_free (&funcname);
-+ }
-+#endif /* DBUS_HAVE_GCC33_GCOV */
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no count of blocks in func found\n");
-+
-+ i += 4;
-+
-+ n_blocks_in_func = val;
-+
-+ if (!string_get_int (contents, i, &n_arcs_in_func))
-+ break;
-+
-+ i += 4;
-+
-+ printf ("Function has %ld blocks and %ld arcs\n",
-+ n_blocks_in_func, n_arcs_in_func);
-+
-+ n_functions += 1;
-+ n_blocks += n_blocks_in_func;
-+ n_arcs += n_arcs_in_func;
-+
-+ j = 0;
-+ while (j < n_blocks_in_func)
-+ {
-+ long n_arcs_in_block;
-+ int k;
-+
-+ if (!string_get_int (contents, i, &n_arcs_in_block))
-+ break;
-+
-+ i += 4;
-+
-+ printf (" Block has %ld arcs\n", n_arcs_in_block);
-+
-+ k = 0;
-+ while (k < n_arcs_in_block)
-+ {
-+ long destination_block;
-+ long flags;
-+
-+ if (!string_get_int (contents, i, &destination_block))
-+ break;
-+
-+ i += 4;
-+
-+ if (!string_get_int (contents, i, &flags))
-+ break;
-+
-+ i += 4;
-+
-+ printf (" Arc has destination block %ld flags 0x%lx\n",
-+ destination_block, flags);
-+
-+ if ((flags & FLAG_ON_TREE) == 0)
-+ n_arcs_off_tree += 1;
-+
-+ ++k;
-+ }
-+
-+ if (k < n_arcs_in_block)
-+ break;
-+
-+ ++j;
-+ }
-+
-+ if (j < n_blocks_in_func)
-+ break;
-+
-+ if (!string_get_int (contents, i, &val))
-+ break;
-+
-+ i += 4;
-+
-+ if (val != -1)
-+ die ("-1 separator not found\n");
-+ }
-+
-+ printf ("%d functions %d blocks %d arcs %d off-tree arcs in file\n",
-+ n_functions, n_blocks, n_arcs, n_arcs_off_tree);
-+}
-+
-+#ifndef DBUS_HAVE_GCC33_GCOV
-+
-+/* gcc 3.2 version:
-+ * The da file contains first a count of arcs in the file,
-+ * then a count of executions for all "off tree" arcs
-+ * in the file.
-+ */
-+static void
-+dump_da_file (const DBusString *contents)
-+{
-+ int i;
-+ dbus_int64_t val;
-+ int n_arcs;
-+ int claimed_n_arcs;
-+
-+ i = 0;
-+ if (!string_get_int64 (contents, i, &val))
-+ return;
-+
-+ i += 8;
-+
-+ printf ("%ld arcs in file\n", (long) val);
-+ claimed_n_arcs = val;
-+
-+ n_arcs = 0;
-+ while (string_get_int64 (contents, i, &val))
-+ {
-+ i += 8;
-+
-+ printf ("%ld executions of arc %d\n",
-+ (long) val, n_arcs);
-+
-+ ++n_arcs;
-+ }
-+
-+ if (n_arcs != claimed_n_arcs)
-+ {
-+ printf ("File claimed to have %d arcs but only had %d\n",
-+ claimed_n_arcs, n_arcs);
-+ }
-+}
-+
-+#else /* DBUS_HAVE_GCC33_GCOV */
-+
-+/* gcc 3.3 version:
-+ * The da file is more complex than 3.2.
-+ *
-+ * We have a magic value of "-123" only it isn't really
-+ * -123, it's -123 as encoded by the crackass gcov-io.h
-+ * routines. Anyway, 4 bytes.
-+ *
-+ * We then have:
-+ *
-+ * - 4 byte count of how many functions in the following list
-+ * - 4 byte length of random extra data
-+ * - the random extra data, just skip it, info pages have some
-+ * details on what might be in there or see __bb_exit_func in gcc
-+ * - then for each function (number of functions given above):
-+ * . -1, length, funcname, alignment padding, -1
-+ * . checksum
-+ * . 4 byte number of arcs in function
-+ * . 8 bytes each, a count of execution for each arc
-+ *
-+ * Now, the whole thing *starting with the magic* can repeat.
-+ * This is caused by multiple runs of the profiled app appending
-+ * to the file.
-+ */
-+static void
-+dump_da_file (const DBusString *contents)
-+{
-+ int i;
-+ dbus_int64_t v64;
-+ long val;
-+ int n_sections;
-+ int total_functions;
-+
-+ total_functions = 0;
-+ n_sections = 0;
-+
-+ i = 0;
-+ while (i < _dbus_string_get_length (contents))
-+ {
-+ int claimed_n_functions;
-+ int n_functions;
-+ int total_arcs;
-+
-+ printf (".da file section %d\n", n_sections);
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no magic found in .da file\n");
-+
-+ i += 4;
-+
-+ if (val != -123)
-+ die ("wrong file magic in .da file\n");
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no function count in .da file\n");
-+ i += 4;
-+ claimed_n_functions = val;
-+
-+ printf ("%d functions expected in section %d of .da file\n",
-+ claimed_n_functions, n_sections);
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no extra data length in .da file\n");
-+
-+ i += 4;
-+
-+ i += val;
-+
-+ total_arcs = 0;
-+ n_functions = 0;
-+ while (n_functions < claimed_n_functions)
-+ {
-+ DBusString funcname;
-+ int checksum;
-+ int claimed_n_arcs;
-+ int n_arcs;
-+
-+ if (!_dbus_string_init (&funcname))
-+ die ("no memory\n");
-+
-+ if (!string_get_function (contents, i,
-+ &funcname, &checksum, &i))
-+ die ("could not read function name\n");
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no arc count for function\n");
-+
-+ i += 4;
-+ claimed_n_arcs = val;
-+
-+ printf (" %d arcs in function %d %s checksum %d\n",
-+ claimed_n_arcs, n_functions,
-+ _dbus_string_get_const_data (&funcname),
-+ checksum);
-+
-+ n_arcs = 0;
-+ while (n_arcs < claimed_n_arcs)
-+ {
-+ if (!string_get_int64 (contents, i, &v64))
-+ die ("did not get execution count for arc\n");
-+
-+ i += 8;
-+
-+ printf (" %ld executions of arc %d (total arcs %d)\n",
-+ (long) v64, n_arcs, total_arcs + n_arcs);
-+
-+ ++n_arcs;
-+ }
-+
-+ _dbus_string_free (&funcname);
-+
-+ total_arcs += n_arcs;
-+ ++n_functions;
-+ }
-+
-+ printf ("total of %d functions and %d arcs in section %d\n",
-+ n_functions, total_arcs, n_sections);
-+
-+ total_functions += n_functions;
-+ ++n_sections;
-+ }
-+
-+ printf ("%d total function sections in %d total .da file sections\n",
-+ total_functions, n_sections);
-+}
-+
-+#endif /* DBUS_HAVE_GCC33_GCOV */
-+
-+typedef struct Arc Arc;
-+typedef struct Block Block;
-+typedef struct Function Function;
-+typedef struct File File;
-+typedef struct Line Line;
-+
-+struct Arc
-+{
-+ int source;
-+ int target;
-+ dbus_int64_t arc_count;
-+ unsigned int count_valid : 1;
-+ unsigned int on_tree : 1;
-+ unsigned int fake : 1;
-+ unsigned int fall_through : 1;
-+ Arc *pred_next;
-+ Arc *succ_next;
-+};
-+
-+struct Block
-+{
-+ Arc *succ;
-+ Arc *pred;
-+ dbus_int64_t succ_count;
-+ dbus_int64_t pred_count;
-+ dbus_int64_t exec_count;
-+ DBusList *lines;
-+ unsigned int count_valid : 1;
-+ unsigned int on_tree : 1;
-+ unsigned int inside_dbus_build_tests : 1;
-+};
-+
-+struct Function
-+{
-+ char *name;
-+ int checksum;
-+ Block *block_graph;
-+ int n_blocks;
-+ /* number of blocks in DBUS_BUILD_TESTS */
-+ int n_test_blocks;
-+ int n_test_blocks_executed;
-+ /* number of blocks outside DBUS_BUILD_TESTS */
-+ int n_nontest_blocks;
-+ int n_nontest_blocks_executed;
-+ /* Summary result flags */
-+ unsigned int unused : 1;
-+ unsigned int inside_dbus_build_tests : 1;
-+ unsigned int partial : 1; /* only some of the blocks were executed */
-+};
-+
-+struct Line
-+{
-+ int number;
-+ char *text;
-+ DBusList *blocks;
-+ unsigned int inside_dbus_build_tests : 1;
-+ unsigned int partial : 1; /* only some of the blocks were executed */
-+};
-+
-+struct File
-+{
-+ char *name;
-+ Line *lines;
-+ int n_lines;
-+ DBusList *functions;
-+};
-+
-+static void
-+function_add_arc (Function *function,
-+ long source,
-+ long target,
-+ long flags)
-+{
-+ Arc *arc;
-+
-+ arc = dbus_new0 (Arc, 1);
-+ if (arc == NULL)
-+ die ("no memory\n");
-+
-+ arc->target = target;
-+ arc->source = source;
-+
-+ arc->succ_next = function->block_graph[source].succ;
-+ function->block_graph[source].succ = arc;
-+ function->block_graph[source].succ_count += 1;
-+
-+ arc->pred_next = function->block_graph[target].pred;
-+ function->block_graph[target].pred = arc;
-+ function->block_graph[target].pred_count += 1;
-+
-+ if ((flags & FLAG_ON_TREE) != 0)
-+ arc->on_tree = TRUE;
-+
-+ if ((flags & FLAG_FAKE) != 0)
-+ arc->fake = TRUE;
-+
-+ if ((flags & FLAG_FALL_THROUGH) != 0)
-+ arc->fall_through = TRUE;
-+}
-+
-+
-+static Arc*
-+reverse_arcs (Arc *arc)
-+{
-+ struct Arc *prev = 0;
-+ struct Arc *next;
-+
-+ for ( ; arc; arc = next)
-+ {
-+ next = arc->succ_next;
-+ arc->succ_next = prev;
-+ prev = arc;
-+ }
-+
-+ return prev;
-+}
-+
-+static void
-+function_reverse_succ_arcs (Function *func)
-+{
-+ /* Must reverse the order of all succ arcs, to ensure that they match
-+ * the order of the data in the .da file.
-+ */
-+ int i;
-+
-+ for (i = 0; i < func->n_blocks; i++)
-+ if (func->block_graph[i].succ)
-+ func->block_graph[i].succ = reverse_arcs (func->block_graph[i].succ);
-+}
-+
-+static void
-+get_functions_from_bbg (const DBusString *contents,
-+ DBusList **functions)
-+{
-+ int i;
-+ long val;
-+ int n_functions;
-+ int n_arcs;
-+ int n_blocks;
-+ int n_arcs_off_tree;
-+
-+#if 0
-+ printf ("Loading arcs and blocks from .bbg file\n");
-+#endif
-+
-+ n_arcs_off_tree = 0;
-+ n_blocks = 0;
-+ n_arcs = 0;
-+ n_functions = 0;
-+ i = 0;
-+ while (i < _dbus_string_get_length (contents))
-+ {
-+ Function *func;
-+ long n_blocks_in_func;
-+ long n_arcs_in_func;
-+ int j;
-+
-+#ifdef DBUS_HAVE_GCC33_GCOV
-+ DBusString funcname;
-+ int checksum;
-+
-+ /* In gcc33 .bbg files, there's a function name of the form:
-+ * -1, length, name (padded to 4), -1, checksum
-+ * after that header on each function description, it's
-+ * the same as in gcc32
-+ */
-+ if (!_dbus_string_init (&funcname))
-+ die ("no memory\n");
-+
-+ if (!string_get_function (contents, i,
-+ &funcname, &checksum, &i))
-+ die ("could not read function name\n");
-+#endif /* DBUS_HAVE_GCC33_GCOV */
-+
-+ if (!string_get_int (contents, i, &val))
-+ break;
-+
-+ n_blocks_in_func = val;
-+
-+ i += 4;
-+
-+ if (!string_get_int (contents, i, &n_arcs_in_func))
-+ break;
-+
-+ i += 4;
-+
-+ n_functions += 1;
-+ n_blocks += n_blocks_in_func;
-+ n_arcs += n_arcs_in_func;
-+
-+ func = dbus_new0 (Function, 1);
-+ if (func == NULL)
-+ die ("no memory\n");
-+
-+#ifdef DBUS_HAVE_GCC33_GCOV
-+ func->name = _dbus_strdup (_dbus_string_get_const_data (&funcname));
-+ func->checksum = checksum;
-+ _dbus_string_free (&funcname);
-+#endif
-+
-+ func->block_graph = dbus_new0 (Block, n_blocks_in_func);
-+ func->n_blocks = n_blocks_in_func;
-+
-+ j = 0;
-+ while (j < n_blocks_in_func)
-+ {
-+ long n_arcs_in_block;
-+ int k;
-+
-+ if (!string_get_int (contents, i, &n_arcs_in_block))
-+ break;
-+
-+ i += 4;
-+
-+ k = 0;
-+ while (k < n_arcs_in_block)
-+ {
-+ long destination_block;
-+ long flags;
-+
-+ if (!string_get_int (contents, i, &destination_block))
-+ break;
-+
-+ i += 4;
-+
-+ if (!string_get_int (contents, i, &flags))
-+ break;
-+
-+ i += 4;
-+
-+ if ((flags & FLAG_ON_TREE) == 0)
-+ n_arcs_off_tree += 1;
-+
-+ function_add_arc (func, j, destination_block,
-+ flags);
-+
-+ ++k;
-+ }
-+
-+ if (k < n_arcs_in_block)
-+ break;
-+
-+ ++j;
-+ }
-+
-+ if (j < n_blocks_in_func)
-+ break;
-+
-+ function_reverse_succ_arcs (func);
-+
-+ if (!_dbus_list_append (functions, func))
-+ die ("no memory\n");
-+
-+ if (!string_get_int (contents, i, &val))
-+ break;
-+
-+ i += 4;
-+
-+ if (val != -1)
-+ die ("-1 separator not found in .bbg file\n");
-+ }
-+
-+#if 0
-+ printf ("%d functions %d blocks %d arcs %d off-tree arcs in file\n",
-+ n_functions, n_blocks, n_arcs, n_arcs_off_tree);
-+#endif
-+
-+ _dbus_assert (n_functions == _dbus_list_get_length (functions));
-+}
-+
-+#ifdef DBUS_HAVE_GCC33_GCOV
-+static void
-+add_counts_from_da (const DBusString *contents,
-+ DBusList **functions)
-+{
-+ int i;
-+ dbus_int64_t v64;
-+ long val;
-+ int n_sections;
-+ DBusList *link;
-+ Function *current_func;
-+ int current_block;
-+ Arc *current_arc;
-+
-+ n_sections = 0;
-+
-+ i = 0;
-+ while (i < _dbus_string_get_length (contents))
-+ {
-+ int claimed_n_functions;
-+ int n_functions;
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no magic found in .da file\n");
-+
-+ i += 4;
-+
-+ if (val != -123)
-+ die ("wrong file magic in .da file\n");
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no function count in .da file\n");
-+ i += 4;
-+ claimed_n_functions = val;
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no extra data length in .da file\n");
-+
-+ i += 4;
-+
-+ i += val;
-+
-+ link = _dbus_list_get_first_link (functions);
-+ if (link == NULL)
-+ goto no_more_functions;
-+
-+ n_functions = 0;
-+ while (n_functions < claimed_n_functions && link != NULL)
-+ {
-+ DBusString funcname;
-+ int checksum;
-+ int claimed_n_arcs;
-+ int n_arcs;
-+
-+ current_func = link->data;
-+ current_block = 0;
-+ current_arc = current_func->block_graph[current_block].succ;
-+
-+ if (!_dbus_string_init (&funcname))
-+ die ("no memory\n");
-+
-+ if (!string_get_function (contents, i,
-+ &funcname, &checksum, &i))
-+ die ("could not read function name\n");
-+
-+ if (!_dbus_string_equal_c_str (&funcname, current_func->name))
-+ {
-+ fprintf (stderr, "Expecting .da info for %s but got %s\n",
-+ current_func->name,
-+ _dbus_string_get_const_data (&funcname));
-+ exit (1);
-+ }
-+
-+ if (checksum != current_func->checksum)
-+ die (".da file checksum doesn't match checksum from .bbg file\n");
-+
-+ if (!string_get_int (contents, i, &val))
-+ die ("no arc count for function\n");
-+
-+ i += 4;
-+ claimed_n_arcs = val;
-+
-+ /* For each arc in the profile, find the corresponding
-+ * arc in the function and increment its count
-+ */
-+ n_arcs = 0;
-+ while (n_arcs < claimed_n_arcs)
-+ {
-+ if (!string_get_int64 (contents, i, &v64))
-+ die ("did not get execution count for arc\n");
-+
-+ i += 8;
-+
-+ /* Find the next arc in the function that isn't on tree */
-+ while (current_arc == NULL ||
-+ current_arc->on_tree)
-+ {
-+ if (current_arc == NULL)
-+ {
-+ ++current_block;
-+
-+ if (current_block >= current_func->n_blocks)
-+ die ("too many blocks in function\n");
-+
-+ current_arc = current_func->block_graph[current_block].succ;
-+ }
-+ else
-+ {
-+ current_arc = current_arc->succ_next;
-+ }
-+ }
-+
-+ _dbus_assert (current_arc != NULL);
-+ _dbus_assert (!current_arc->on_tree);
-+
-+ current_arc->arc_count = v64;
-+ current_arc->count_valid = TRUE;
-+ current_func->block_graph[current_block].succ_count -= 1;
-+ current_func->block_graph[current_arc->target].pred_count -= 1;
-+
-+ ++n_arcs;
-+
-+ current_arc = current_arc->succ_next;
-+ }
-+
-+ _dbus_string_free (&funcname);
-+
-+ link = _dbus_list_get_next_link (functions, link);
-+ ++n_functions;
-+
-+ if (link == NULL && n_functions < claimed_n_functions)
-+ {
-+ fprintf (stderr, "Ran out of functions loading .da file\n");
-+ goto no_more_functions;
-+ }
-+ }
-+
-+ no_more_functions:
-+
-+ ++n_sections;
-+ }
-+}
-+#else /* DBUS_HAVE_GCC33_GCOV */
-+static void
-+add_counts_from_da (const DBusString *contents,
-+ DBusList **functions)
-+{
-+ int i;
-+ dbus_int64_t val;
-+ int n_arcs;
-+ int claimed_n_arcs;
-+ DBusList *link;
-+ Function *current_func;
-+ int current_block;
-+ Arc *current_arc;
-+
-+#if 0
-+ printf ("Loading execution count for each arc from .da file\n");
-+#endif
-+
-+ i = 0;
-+ if (!string_get_int64 (contents, i, &val))
-+ return;
-+
-+ i += 8;
-+
-+ claimed_n_arcs = val;
-+
-+ link = _dbus_list_get_first_link (functions);
-+ if (link == NULL)
-+ goto done;
-+
-+ current_func = link->data;
-+ current_block = 0;
-+ current_arc = current_func->block_graph[current_block].succ;
-+
-+ n_arcs = 0;
-+ while (string_get_int64 (contents, i, &val))
-+ {
-+ i += 8;
-+
-+ while (current_arc == NULL ||
-+ current_arc->on_tree)
-+ {
-+ if (current_arc == NULL)
-+ {
-+ ++current_block;
-+
-+ if (current_block == current_func->n_blocks)
-+ {
-+ link = _dbus_list_get_next_link (functions, link);
-+ if (link == NULL)
-+ {
-+ fprintf (stderr, "Ran out of functions loading .da file\n");
-+ goto done;
-+ }
-+ current_func = link->data;
-+ current_block = 0;
-+ }
-+
-+ current_arc = current_func->block_graph[current_block].succ;
-+ }
-+ else
-+ {
-+ current_arc = current_arc->succ_next;
-+ }
-+ }
-+
-+ _dbus_assert (current_arc != NULL);
-+ _dbus_assert (!current_arc->on_tree);
-+
-+ current_arc->arc_count = val;
-+ current_arc->count_valid = TRUE;
-+ current_func->block_graph[current_block].succ_count -= 1;
-+ current_func->block_graph[current_arc->target].pred_count -= 1;
-+
-+ ++n_arcs;
-+
-+ current_arc = current_arc->succ_next;
-+ }
-+
-+ done:
-+
-+ if (n_arcs != claimed_n_arcs)
-+ {
-+ fprintf (stderr, "File claimed to have %d arcs but only had %d\n",
-+ claimed_n_arcs, n_arcs);
-+ exit (1);
-+ }
-+
-+#if 0
-+ printf ("%d arcs in file\n", n_arcs);
-+#endif
-+}
-+#endif
-+
-+static void
-+function_solve_graph (Function *func)
-+{
-+ int passes, changes;
-+ dbus_int64_t total;
-+ int i;
-+ Arc *arc;
-+ Block *block_graph;
-+ int n_blocks;
-+
-+#if 0
-+ printf ("Solving function graph\n");
-+#endif
-+
-+ n_blocks = func->n_blocks;
-+ block_graph = func->block_graph;
-+
-+ /* For every block in the file,
-+ - if every exit/entrance arc has a known count, then set the block count
-+ - if the block count is known, and every exit/entrance arc but one has
-+ a known execution count, then set the count of the remaining arc
-+
-+ As arc counts are set, decrement the succ/pred count, but don't delete
-+ the arc, that way we can easily tell when all arcs are known, or only
-+ one arc is unknown. */
-+
-+ /* The order that the basic blocks are iterated through is important.
-+ Since the code that finds spanning trees starts with block 0, low numbered
-+ arcs are put on the spanning tree in preference to high numbered arcs.
-+ Hence, most instrumented arcs are at the end. Graph solving works much
-+ faster if we propagate numbers from the end to the start.
-+
-+ This takes an average of slightly more than 3 passes. */
-+
-+ changes = 1;
-+ passes = 0;
-+ while (changes)
-+ {
-+ passes++;
-+ changes = 0;
-+
-+ for (i = n_blocks - 1; i >= 0; i--)
-+ {
-+ if (! block_graph[i].count_valid)
-+ {
-+ if (block_graph[i].succ_count == 0)
-+ {
-+ total = 0;
-+ for (arc = block_graph[i].succ; arc;
-+ arc = arc->succ_next)
-+ total += arc->arc_count;
-+ block_graph[i].exec_count = total;
-+ block_graph[i].count_valid = 1;
-+ changes = 1;
-+ }
-+ else if (block_graph[i].pred_count == 0)
-+ {
-+ total = 0;
-+ for (arc = block_graph[i].pred; arc;
-+ arc = arc->pred_next)
-+ total += arc->arc_count;
-+ block_graph[i].exec_count = total;
-+ block_graph[i].count_valid = 1;
-+ changes = 1;
-+ }
-+ }
-+ if (block_graph[i].count_valid)
-+ {
-+ if (block_graph[i].succ_count == 1)
-+ {
-+ total = 0;
-+ /* One of the counts will be invalid, but it is zero,
-+ so adding it in also doesn't hurt. */
-+ for (arc = block_graph[i].succ; arc;
-+ arc = arc->succ_next)
-+ total += arc->arc_count;
-+ /* Calculate count for remaining arc by conservation. */
-+ total = block_graph[i].exec_count - total;
-+ /* Search for the invalid arc, and set its count. */
-+ for (arc = block_graph[i].succ; arc;
-+ arc = arc->succ_next)
-+ if (! arc->count_valid)
-+ break;
-+ if (! arc)
-+ die ("arc == NULL\n");
-+ arc->count_valid = 1;
-+ arc->arc_count = total;
-+ block_graph[i].succ_count -= 1;
-+
-+ block_graph[arc->target].pred_count -= 1;
-+ changes = 1;
-+ }
-+ if (block_graph[i].pred_count == 1)
-+ {
-+ total = 0;
-+ /* One of the counts will be invalid, but it is zero,
-+ so adding it in also doesn't hurt. */
-+ for (arc = block_graph[i].pred; arc;
-+ arc = arc->pred_next)
-+ total += arc->arc_count;
-+ /* Calculate count for remaining arc by conservation. */
-+ total = block_graph[i].exec_count - total;
-+ /* Search for the invalid arc, and set its count. */
-+ for (arc = block_graph[i].pred; arc;
-+ arc = arc->pred_next)
-+ if (! arc->count_valid)
-+ break;
-+ if (! arc)
-+ die ("arc == NULL\n");
-+ arc->count_valid = 1;
-+ arc->arc_count = total;
-+ block_graph[i].pred_count -= 1;
-+
-+ block_graph[arc->source].succ_count -= 1;
-+ changes = 1;
-+ }
-+ }
-+ }
-+ }
-+
-+ /* If the graph has been correctly solved, every block will have a
-+ * succ and pred count of zero.
-+ */
-+ {
-+ dbus_bool_t header = FALSE;
-+ for (i = 0; i < n_blocks; i++)
-+ {
-+ if (block_graph[i].succ_count || block_graph[i].pred_count)
-+ {
-+ if (!header)
-+ {
-+ fprintf (stderr, "WARNING: Block graph solved incorrectly for function %s\n",
-+ func->name);
-+ fprintf (stderr, " this error reflects a bug in decode-gcov.c or perhaps bogus data\n");
-+ header = TRUE;
-+ }
-+ fprintf (stderr, " block %d has succ_count = %d pred_count = %d\n",
-+ i, (int) block_graph[i].succ_count, (int) block_graph[i].pred_count);
-+ }
-+ }
-+ }
-+}
-+
-+static void
-+solve_graphs (DBusList **functions)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ function_solve_graph (func);
-+
-+ link = _dbus_list_get_next_link (functions, link);
-+ }
-+}
-+
-+static void
-+load_functions_for_c_file (const DBusString *filename,
-+ DBusList **functions)
-+{
-+ DBusString bbg_filename;
-+ DBusString da_filename;
-+ DBusString gcno_filename;
-+ DBusString gcda_filename;
-+ DBusString contents;
-+ DBusString *name;
-+ DBusError error;
-+
-+ /* With latest gcc it's .gcno instead of .bbg and
-+ * gcda instead of .da
-+ */
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_string_init (&bbg_filename) ||
-+ !_dbus_string_init (&da_filename) ||
-+ !_dbus_string_init (&gcno_filename) ||
-+ !_dbus_string_init (&gcda_filename) ||
-+ !_dbus_string_copy (filename, 0, &bbg_filename, 0) ||
-+ !_dbus_string_copy (filename, 0, &da_filename, 0) ||
-+ !_dbus_string_copy (filename, 0, &gcno_filename, 0) ||
-+ !_dbus_string_copy (filename, 0, &gcda_filename, 0) ||
-+ !_dbus_string_init (&contents))
-+ die ("no memory\n");
-+
-+ _dbus_string_shorten (&bbg_filename, 2);
-+ _dbus_string_shorten (&da_filename, 2);
-+
-+ if (!_dbus_string_append (&bbg_filename, ".bbg") ||
-+ !_dbus_string_append (&da_filename, ".da") ||
-+ !_dbus_string_append (&bbg_filename, ".gcno") ||
-+ !_dbus_string_append (&bbg_filename, ".gcda"))
-+ die ("no memory\n");
-+
-+ if (_dbus_file_exists (_dbus_string_get_const_data (&gcno_filename)))
-+ name = &gcno_filename;
-+ else
-+ name = &bbg_filename;
-+
-+ if (!_dbus_file_get_contents (&contents, name,
-+ &error))
-+ {
-+ fprintf (stderr, "Could not open file: %s\n",
-+ error.message);
-+ exit (1);
-+ }
-+
-+ get_functions_from_bbg (&contents, functions);
-+
-+ _dbus_string_set_length (&contents, 0);
-+
-+ if (_dbus_file_exists (_dbus_string_get_const_data (&gcda_filename)))
-+ name = &gcda_filename;
-+ else
-+ name = &da_filename;
-+
-+ if (!_dbus_file_get_contents (&contents, name,
-+ &error))
-+ {
-+ /* Try .libs/file.da */
-+ int slash;
-+
-+ if (_dbus_string_find_byte_backward (name,
-+ _dbus_string_get_length (name),
-+ '/',
-+ &slash))
-+ {
-+ DBusString libs;
-+ _dbus_string_init_const (&libs, "/.libs");
-+
-+ if (!_dbus_string_copy (&libs, 0, name, slash))
-+ die ("no memory");
-+
-+ dbus_error_free (&error);
-+ if (!_dbus_file_get_contents (&contents, name,
-+ &error))
-+ {
-+ fprintf (stderr, "Could not open file: %s\n",
-+ error.message);
-+ exit (1);
-+ }
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Could not open file: %s\n",
-+ error.message);
-+ exit (1);
-+ }
-+ }
-+
-+ add_counts_from_da (&contents, functions);
-+
-+ solve_graphs (functions);
-+
-+ _dbus_string_free (&contents);
-+ _dbus_string_free (&da_filename);
-+ _dbus_string_free (&bbg_filename);
-+}
-+
-+static void
-+get_lines_from_bb_file (const DBusString *contents,
-+ File *fl)
-+{
-+ int i;
-+ long val;
-+ int n_functions;
-+ dbus_bool_t in_our_file;
-+ DBusList *link;
-+ Function *func;
-+ int block;
-+
-+#if 0
-+ printf ("Getting line numbers for blocks from .bb file\n");
-+#endif
-+
-+ /* There's this "filename" field in the .bb file which
-+ * mysteriously comes *after* the first function in the
-+ * file in the .bb file; and every .bb file seems to
-+ * have only one filename. I don't understand
-+ * what's going on here, so just set in_our_file = TRUE
-+ * at the start categorically.
-+ */
-+
-+ block = 0;
-+ func = NULL;
-+ in_our_file = TRUE;
-+ link = _dbus_list_get_first_link (&fl->functions);
-+ n_functions = 0;
-+ i = 0;
-+ while (string_get_int (contents, i, &val))
-+ {
-+ i += 4;
-+
-+ switch (val)
-+ {
-+ case BB_FILENAME:
-+ {
-+ DBusString f;
-+
-+ if (!_dbus_string_init (&f))
-+ die ("no memory\n");
-+
-+ if (string_get_string (contents, i,
-+ BB_FILENAME,
-+ &f, &i))
-+ {
-+ /* fl->name is a full path and the filename in .bb is
-+ * not.
-+ */
-+ DBusString tmp_str;
-+
-+ _dbus_string_init_const (&tmp_str, fl->name);
-+
-+ if (_dbus_string_ends_with_c_str (&tmp_str,
-+ _dbus_string_get_const_data (&f)))
-+ in_our_file = TRUE;
-+ else
-+ in_our_file = FALSE;
-+
-+#if 0
-+ fprintf (stderr,
-+ "File %s in .bb, looking for %s, in_our_file = %d\n",
-+ _dbus_string_get_const_data (&f),
-+ fl->name,
-+ in_our_file);
-+#endif
-+ }
-+ _dbus_string_free (&f);
-+ }
-+ break;
-+ case BB_FUNCTION:
-+ {
-+ DBusString f;
-+ if (!_dbus_string_init (&f))
-+ die ("no memory\n");
-+
-+ if (string_get_string (contents, i,
-+ BB_FUNCTION,
-+ &f, &i))
-+ {
-+#if 0
-+ fprintf (stderr, "Function %s\n", _dbus_string_get_const_data (&f));
-+#endif
-+
-+ block = 0;
-+
-+ if (in_our_file)
-+ {
-+ if (link == NULL)
-+ {
-+ fprintf (stderr, "No function object for function %s\n",
-+ _dbus_string_get_const_data (&f));
-+ }
-+ else
-+ {
-+ func = link->data;
-+ link = _dbus_list_get_next_link (&fl->functions, link);
-+
-+ if (func->name == NULL)
-+ {
-+ if (!_dbus_string_copy_data (&f, &func->name))
-+ die ("no memory\n");
-+ }
-+ else
-+ {
-+ if (!_dbus_string_equal_c_str (&f, func->name))
-+ {
-+ fprintf (stderr, "got function name \"%s\" (%d) from .bbg file, but \"%s\" (%d) from .bb file\n",
-+ func->name, strlen (func->name),
-+ _dbus_string_get_const_data (&f),
-+ _dbus_string_get_length (&f));
-+
-+ }
-+ }
-+ }
-+ }
-+ }
-+ _dbus_string_free (&f);
-+
-+ n_functions += 1;
-+ }
-+ break;
-+ case BB_ENDOFLIST:
-+ block += 1;
-+ break;
-+ default:
-+#if 0
-+ fprintf (stderr, "Line %ld\n", val);
-+#endif
-+
-+ if (val >= fl->n_lines)
-+ {
-+ fprintf (stderr, "Line %ld but file only has %d lines\n",
-+ val, fl->n_lines);
-+ }
-+ else if (func != NULL)
-+ {
-+ val -= 1; /* To convert the 1-based line number to 0-based */
-+ _dbus_assert (val >= 0);
-+
-+ if (block < func->n_blocks)
-+ {
-+ if (!_dbus_list_append (&func->block_graph[block].lines,
-+ &fl->lines[val]))
-+ die ("no memory\n");
-+
-+
-+ if (!_dbus_list_append (&fl->lines[val].blocks,
-+ &func->block_graph[block]))
-+ die ("no memory\n");
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Line number for block %d but function only has %d blocks\n",
-+ block, func->n_blocks);
-+ }
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Line %ld given outside of any function\n",
-+ val);
-+ }
-+
-+ break;
-+ }
-+ }
-+
-+#if 0
-+ printf ("%d functions in file\n", n_functions);
-+#endif
-+}
-+
-+
-+static void
-+load_block_line_associations (const DBusString *filename,
-+ File *f)
-+{
-+ DBusString bb_filename;
-+ DBusString contents;
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_string_init (&bb_filename) ||
-+ !_dbus_string_copy (filename, 0, &bb_filename, 0) ||
-+ !_dbus_string_init (&contents))
-+ die ("no memory\n");
-+
-+ _dbus_string_shorten (&bb_filename, 2);
-+
-+ if (!_dbus_string_append (&bb_filename, ".bb"))
-+ die ("no memory\n");
-+
-+ if (!_dbus_file_get_contents (&contents, &bb_filename,
-+ &error))
-+ {
-+ fprintf (stderr, "Could not open file: %s\n",
-+ error.message);
-+ exit (1);
-+ }
-+
-+ get_lines_from_bb_file (&contents, f);
-+
-+ _dbus_string_free (&contents);
-+ _dbus_string_free (&bb_filename);
-+}
-+
-+static int
-+count_lines_in_string (const DBusString *str)
-+{
-+ int n_lines;
-+ const char *p;
-+ const char *prev;
-+ const char *end;
-+ const char *last_line_end;
-+
-+#if 0
-+ printf ("Counting lines in source file\n");
-+#endif
-+
-+ n_lines = 0;
-+ prev = NULL;
-+ p = _dbus_string_get_const_data (str);
-+ end = p + _dbus_string_get_length (str);
-+ last_line_end = p;
-+ while (p != end)
-+ {
-+ /* too lazy to handle \r\n as one linebreak */
-+ if (*p == '\n' || *p == '\r')
-+ {
-+ ++n_lines;
-+ last_line_end = p + 1;
-+ }
-+
-+ prev = p;
-+ ++p;
-+ }
-+
-+ if (last_line_end != p)
-+ ++n_lines;
-+
-+ return n_lines;
-+}
-+
-+static void
-+fill_line_content (const DBusString *str,
-+ Line *lines)
-+{
-+ int n_lines;
-+ const char *p;
-+ const char *prev;
-+ const char *end;
-+ const char *last_line_end;
-+
-+#if 0
-+ printf ("Saving contents of each line in source file\n");
-+#endif
-+
-+ n_lines = 0;
-+ prev = NULL;
-+ p = _dbus_string_get_const_data (str);
-+ end = p + _dbus_string_get_length (str);
-+ last_line_end = p;
-+ while (p != end)
-+ {
-+ if (*p == '\n' || *p == '\r')
-+ {
-+ lines[n_lines].text = dbus_malloc0 (p - last_line_end + 1);
-+ if (lines[n_lines].text == NULL)
-+ die ("no memory\n");
-+
-+ memcpy (lines[n_lines].text, last_line_end, p - last_line_end);
-+ lines[n_lines].number = n_lines + 1;
-+
-+ ++n_lines;
-+
-+ last_line_end = p + 1;
-+ }
-+
-+ prev = p;
-+ ++p;
-+ }
-+
-+ if (p != last_line_end)
-+ {
-+ memcpy (lines[n_lines].text, last_line_end, p - last_line_end);
-+ ++n_lines;
-+ }
-+}
-+
-+static void
-+mark_inside_dbus_build_tests (File *f)
-+{
-+ int i;
-+ DBusList *link;
-+ int inside_depth;
-+
-+ inside_depth = 0;
-+ i = 0;
-+ while (i < f->n_lines)
-+ {
-+ Line *l = &f->lines[i];
-+ dbus_bool_t is_verbose;
-+
-+ is_verbose = strstr (l->text, "_dbus_verbose") != NULL;
-+
-+ if (inside_depth == 0)
-+ {
-+ const char *a, *b;
-+
-+ a = strstr (l->text, "#if");
-+ b = strstr (l->text, "DBUS_BUILD_TESTS");
-+ if (a && b && (a < b))
-+ inside_depth += 1;
-+ }
-+ else
-+ {
-+ if (strstr (l->text, "#if") != NULL)
-+ inside_depth += 1;
-+ else if (strstr (l->text, "#endif") != NULL)
-+ inside_depth -= 1;
-+ }
-+
-+ if (inside_depth > 0 || is_verbose)
-+ {
-+ /* Mark the line and its blocks */
-+ DBusList *blink;
-+
-+ l->inside_dbus_build_tests = TRUE;
-+
-+ blink = _dbus_list_get_first_link (&l->blocks);
-+ while (blink != NULL)
-+ {
-+ Block *b = blink->data;
-+
-+ b->inside_dbus_build_tests = TRUE;
-+
-+ blink = _dbus_list_get_next_link (&l->blocks, blink);
-+ }
-+ }
-+
-+ ++i;
-+ }
-+
-+ /* Now mark functions where for all blocks that are associated
-+ * with a source line, the block is inside_dbus_build_tests.
-+ */
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ /* The issue is that some blocks aren't associated with a source line.
-+ * Assume they are inside/outside tests according to the source
-+ * line of the preceding block. For the first block, make it
-+ * match the first following block with a line associated.
-+ */
-+ if (func->block_graph[0].lines == NULL)
-+ {
-+ /* find first following line */
-+ i = 1;
-+ while (i < func->n_blocks)
-+ {
-+ if (func->block_graph[i].lines != NULL)
-+ {
-+ func->block_graph[0].inside_dbus_build_tests =
-+ func->block_graph[i].inside_dbus_build_tests;
-+ break;
-+ }
-+
-+ ++i;
-+ }
-+ }
-+
-+ /* Now mark all blocks but the first */
-+ i = 1;
-+ while (i < func->n_blocks)
-+ {
-+ if (func->block_graph[i].lines == NULL)
-+ {
-+ func->block_graph[i].inside_dbus_build_tests =
-+ func->block_graph[i-1].inside_dbus_build_tests;
-+ }
-+
-+ ++i;
-+ }
-+
-+ i = 0;
-+ while (i < func->n_blocks)
-+ {
-+ /* Break as soon as any block is not a test block */
-+ if (func->block_graph[i].lines != NULL &&
-+ !func->block_graph[i].inside_dbus_build_tests)
-+ break;
-+
-+ ++i;
-+ }
-+
-+ if (i == func->n_blocks)
-+ func->inside_dbus_build_tests = TRUE;
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+}
-+
-+static void
-+mark_coverage (File *f)
-+{
-+ int i;
-+ DBusList *link;
-+
-+ i = 0;
-+ while (i < f->n_lines)
-+ {
-+ Line *l = &f->lines[i];
-+ DBusList *blink;
-+ int n_blocks;
-+ int n_blocks_executed;
-+
-+ n_blocks = 0;
-+ n_blocks_executed = 0;
-+ blink = _dbus_list_get_first_link (&l->blocks);
-+ while (blink != NULL)
-+ {
-+ Block *b = blink->data;
-+
-+ if (b->exec_count > 0)
-+ n_blocks_executed += 1;
-+
-+ n_blocks += 1;
-+
-+ blink = _dbus_list_get_next_link (&l->blocks, blink);
-+ }
-+
-+ if (n_blocks_executed > 0 &&
-+ n_blocks_executed < n_blocks)
-+ l->partial = TRUE;
-+
-+ ++i;
-+ }
-+
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+ int i;
-+ int n_test_blocks;
-+ int n_test_blocks_executed;
-+ int n_nontest_blocks;
-+ int n_nontest_blocks_executed;
-+
-+ n_test_blocks = 0;
-+ n_test_blocks_executed = 0;
-+ n_nontest_blocks = 0;
-+ n_nontest_blocks_executed = 0;
-+
-+ i = 0;
-+ while (i < func->n_blocks)
-+ {
-+ if (!func->block_graph[i].inside_dbus_build_tests)
-+ {
-+ n_nontest_blocks += 1;
-+
-+ if (func->block_graph[i].exec_count > 0)
-+ n_nontest_blocks_executed += 1;
-+ }
-+ else
-+ {
-+ n_test_blocks += 1;
-+
-+ if (func->block_graph[i].exec_count > 0)
-+ n_test_blocks_executed += 1;
-+ }
-+
-+ ++i;
-+ }
-+
-+ if (n_nontest_blocks_executed > 0 &&
-+ n_nontest_blocks_executed < n_nontest_blocks)
-+ func->partial = TRUE;
-+
-+ if (n_nontest_blocks_executed == 0 &&
-+ n_nontest_blocks > 0)
-+ func->unused = TRUE;
-+
-+ func->n_test_blocks = n_test_blocks;
-+ func->n_test_blocks_executed = n_test_blocks_executed;
-+ func->n_nontest_blocks = n_nontest_blocks;
-+ func->n_nontest_blocks_executed = n_nontest_blocks_executed;
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+}
-+
-+static File*
-+load_c_file (const DBusString *filename)
-+{
-+ DBusString contents;
-+ DBusError error;
-+ File *f;
-+
-+ f = dbus_new0 (File, 1);
-+ if (f == NULL)
-+ die ("no memory\n");
-+
-+ if (!_dbus_string_copy_data (filename, &f->name))
-+ die ("no memory\n");
-+
-+ if (!_dbus_string_init (&contents))
-+ die ("no memory\n");
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_file_get_contents (&contents, filename,
-+ &error))
-+ {
-+ fprintf (stderr, "Could not open file: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ load_functions_for_c_file (filename, &f->functions);
-+
-+ f->n_lines = count_lines_in_string (&contents);
-+ f->lines = dbus_new0 (Line, f->n_lines);
-+ if (f->lines == NULL)
-+ die ("no memory\n");
-+
-+ fill_line_content (&contents, f->lines);
-+
-+ _dbus_string_free (&contents);
-+
-+ load_block_line_associations (filename, f);
-+
-+ mark_inside_dbus_build_tests (f);
-+ mark_coverage (f);
-+
-+ return f;
-+}
-+
-+typedef struct Stats Stats;
-+
-+struct Stats
-+{
-+ int n_blocks;
-+ int n_blocks_executed;
-+ int n_blocks_inside_dbus_build_tests;
-+
-+ int n_lines; /* lines that have blocks on them */
-+ int n_lines_executed;
-+ int n_lines_partial;
-+ int n_lines_inside_dbus_build_tests;
-+
-+ int n_functions;
-+ int n_functions_executed;
-+ int n_functions_partial;
-+ int n_functions_inside_dbus_build_tests;
-+};
-+
-+static dbus_bool_t
-+line_was_executed (Line *l)
-+{
-+ DBusList *link;
-+
-+ link = _dbus_list_get_first_link (&l->blocks);
-+ while (link != NULL)
-+ {
-+ Block *b = link->data;
-+
-+ if (b->exec_count > 0)
-+ return TRUE;
-+
-+ link = _dbus_list_get_next_link (&l->blocks, link);
-+ }
-+
-+ return FALSE;
-+}
-+
-+
-+static int
-+line_exec_count (Line *l)
-+{
-+ DBusList *link;
-+ dbus_int64_t total;
-+
-+ total = 0;
-+ link = _dbus_list_get_first_link (&l->blocks);
-+ while (link != NULL)
-+ {
-+ Block *b = link->data;
-+
-+ total += b->exec_count;
-+
-+ link = _dbus_list_get_next_link (&l->blocks, link);
-+ }
-+
-+ return total;
-+}
-+
-+static void
-+merge_stats_for_file (Stats *stats,
-+ File *f)
-+{
-+ int i;
-+ DBusList *link;
-+
-+ for (i = 0; i < f->n_lines; ++i)
-+ {
-+ Line *l = &f->lines[i];
-+
-+ if (l->inside_dbus_build_tests)
-+ {
-+ stats->n_lines_inside_dbus_build_tests += 1;
-+ continue;
-+ }
-+
-+ if (line_was_executed (l))
-+ stats->n_lines_executed += 1;
-+
-+ if (l->blocks != NULL)
-+ stats->n_lines += 1;
-+
-+ if (l->partial)
-+ stats->n_lines_partial += 1;
-+ }
-+
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ if (func->inside_dbus_build_tests)
-+ stats->n_functions_inside_dbus_build_tests += 1;
-+ else
-+ {
-+ stats->n_functions += 1;
-+
-+ if (!func->unused)
-+ stats->n_functions_executed += 1;
-+
-+ if (func->partial)
-+ stats->n_functions_partial += 1;
-+ }
-+
-+ stats->n_blocks_inside_dbus_build_tests +=
-+ func->n_test_blocks;
-+
-+ stats->n_blocks_executed +=
-+ func->n_nontest_blocks_executed;
-+
-+ stats->n_blocks +=
-+ func->n_nontest_blocks;
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+}
-+
-+/* The output of this matches gcov exactly ("diff" shows no difference) */
-+static void
-+print_annotated_source_gcov_format (File *f)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i < f->n_lines)
-+ {
-+ Line *l = &f->lines[i];
-+
-+ if (l->blocks != NULL)
-+ {
-+ int exec_count;
-+
-+ exec_count = line_exec_count (l);
-+
-+ if (exec_count > 0)
-+ printf ("%12d %s\n",
-+ exec_count, l->text);
-+ else
-+ printf (" ###### %s\n", l->text);
-+ }
-+ else
-+ {
-+ printf ("\t\t%s\n", l->text);
-+ }
-+
-+ ++i;
-+ }
-+}
-+
-+static void
-+print_annotated_source (File *f)
-+{
-+ int i;
-+
-+ i = 0;
-+ while (i < f->n_lines)
-+ {
-+ Line *l = &f->lines[i];
-+
-+ if (l->inside_dbus_build_tests)
-+ printf ("*");
-+ else
-+ printf (" ");
-+
-+ if (l->blocks != NULL)
-+ {
-+ int exec_count;
-+
-+ exec_count = line_exec_count (l);
-+
-+ if (exec_count > 0)
-+ printf ("%12d %s\n",
-+ exec_count, l->text);
-+ else
-+ printf (" ###### %s\n", l->text);
-+ }
-+ else
-+ {
-+ printf ("\t\t%s\n", l->text);
-+ }
-+
-+ ++i;
-+ }
-+}
-+
-+static void
-+print_block_superdetails (File *f)
-+{
-+ DBusList *link;
-+ int i;
-+
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ printf ("=== %s():\n", func->name);
-+
-+ i = 0;
-+ while (i < func->n_blocks)
-+ {
-+ Block *b = &func->block_graph[i];
-+ DBusList *l;
-+
-+ printf (" %5d executed %d times%s\n", i,
-+ (int) b->exec_count,
-+ b->inside_dbus_build_tests ?
-+ " [inside DBUS_BUILD_TESTS]" : "");
-+
-+ l = _dbus_list_get_first_link (&b->lines);
-+ while (l != NULL)
-+ {
-+ Line *line = l->data;
-+
-+ printf ("4%d\t%s\n", line->number, line->text);
-+
-+ l = _dbus_list_get_next_link (&b->lines, l);
-+ }
-+
-+ ++i;
-+ }
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+}
-+
-+static void
-+print_one_file (const DBusString *filename)
-+{
-+ if (_dbus_string_ends_with_c_str (filename, ".bb"))
-+ {
-+ DBusString contents;
-+ DBusError error;
-+
-+ if (!_dbus_string_init (&contents))
-+ die ("no memory\n");
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_file_get_contents (&contents, filename,
-+ &error))
-+ {
-+ fprintf (stderr, "Could not open file: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ dump_bb_file (&contents);
-+
-+ _dbus_string_free (&contents);
-+ }
-+ else if (_dbus_string_ends_with_c_str (filename, ".bbg"))
-+ {
-+ DBusString contents;
-+ DBusError error;
-+
-+ if (!_dbus_string_init (&contents))
-+ die ("no memory\n");
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_file_get_contents (&contents, filename,
-+ &error))
-+ {
-+ fprintf (stderr, "Could not open file: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ dump_bbg_file (&contents);
-+
-+ _dbus_string_free (&contents);
-+ }
-+ else if (_dbus_string_ends_with_c_str (filename, ".da"))
-+ {
-+ DBusString contents;
-+ DBusError error;
-+
-+ if (!_dbus_string_init (&contents))
-+ die ("no memory\n");
-+
-+ dbus_error_init (&error);
-+
-+ if (!_dbus_file_get_contents (&contents, filename,
-+ &error))
-+ {
-+ fprintf (stderr, "Could not open file: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ dump_da_file (&contents);
-+
-+ _dbus_string_free (&contents);
-+ }
-+ else if (_dbus_string_ends_with_c_str (filename, ".c"))
-+ {
-+ File *f;
-+
-+ f = load_c_file (filename);
-+
-+ print_annotated_source (f);
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Unknown file type %s\n",
-+ _dbus_string_get_const_data (filename));
-+ exit (1);
-+ }
-+}
-+
-+static void
-+print_untested_functions (File *f)
-+{
-+ DBusList *link;
-+ dbus_bool_t found;
-+
-+ found = FALSE;
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ if (func->unused &&
-+ !func->inside_dbus_build_tests)
-+ found = TRUE;
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+
-+ if (!found)
-+ return;
-+
-+ printf ("Untested functions in %s\n", f->name);
-+ printf ("=======\n");
-+
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ if (func->unused &&
-+ !func->inside_dbus_build_tests)
-+ printf (" %s\n", func->name);
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+
-+ printf ("\n");
-+}
-+
-+static void
-+print_poorly_tested_functions (File *f,
-+ Stats *stats)
-+{
-+ DBusList *link;
-+ dbus_bool_t found;
-+
-+#define TEST_FRACTION(function) ((function)->n_nontest_blocks_executed / (double) (function)->n_nontest_blocks)
-+
-+#define AVERAGE_COVERAGE ((stats)->n_blocks_executed / (double) (stats)->n_blocks)
-+
-+#define POORLY_TESTED(function) (!(function)->unused && \
-+ (function)->n_nontest_blocks > 0 && \
-+ TEST_FRACTION (function) < AVERAGE_COVERAGE)
-+
-+ found = FALSE;
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ if (POORLY_TESTED (func))
-+ found = TRUE;
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+
-+ if (!found)
-+ return;
-+
-+ printf ("Below average functions in %s\n", f->name);
-+ printf ("=======\n");
-+
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ if (POORLY_TESTED (func))
-+ printf (" %s (%d%%)\n", func->name,
-+ (int) (TEST_FRACTION (func) * 100));
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+
-+ printf ("\n");
-+}
-+
-+static int
-+func_cmp (const void *a,
-+ const void *b)
-+{
-+ Function *af = *(Function**) a;
-+ Function *bf = *(Function**) b;
-+ int a_untested = af->n_nontest_blocks - af->n_nontest_blocks_executed;
-+ int b_untested = bf->n_nontest_blocks - bf->n_nontest_blocks_executed;
-+
-+ /* Sort by number of untested blocks */
-+ return b_untested - a_untested;
-+}
-+
-+static void
-+print_n_untested_blocks_by_function (File *f,
-+ Stats *stats)
-+{
-+ DBusList *link;
-+ Function **funcs;
-+ int n_found;
-+ int i;
-+
-+ n_found = 0;
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ if (func->n_nontest_blocks_executed <
-+ func->n_nontest_blocks)
-+ n_found += 1;
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+
-+ if (n_found == 0)
-+ return;
-+
-+ /* make an array so we can use qsort */
-+
-+ funcs = dbus_new (Function*, n_found);
-+ if (funcs == NULL)
-+ return;
-+
-+ i = 0;
-+ link = _dbus_list_get_first_link (&f->functions);
-+ while (link != NULL)
-+ {
-+ Function *func = link->data;
-+
-+ if (func->n_nontest_blocks_executed <
-+ func->n_nontest_blocks)
-+ {
-+ funcs[i] = func;
-+ ++i;
-+ }
-+
-+ link = _dbus_list_get_next_link (&f->functions, link);
-+ }
-+
-+ _dbus_assert (i == n_found);
-+
-+ qsort (funcs, n_found, sizeof (Function*),
-+ func_cmp);
-+
-+ printf ("Incomplete functions in %s\n", f->name);
-+ printf ("=======\n");
-+
-+ i = 0;
-+ while (i < n_found)
-+ {
-+ Function *func = funcs[i];
-+
-+ printf (" %s (%d/%d untested blocks)\n",
-+ func->name,
-+ func->n_nontest_blocks - func->n_nontest_blocks_executed,
-+ func->n_nontest_blocks);
-+
-+ ++i;
-+ }
-+
-+ dbus_free (funcs);
-+
-+ printf ("\n");
-+}
-+
-+static void
-+print_stats (Stats *stats,
-+ const char *of_what)
-+{
-+ int completely;
-+
-+ printf ("Summary (%s)\n", of_what);
-+ printf ("=======\n");
-+ printf (" %g%% blocks executed (%d of %d)\n",
-+ (stats->n_blocks_executed / (double) stats->n_blocks) * 100.0,
-+ stats->n_blocks_executed,
-+ stats->n_blocks);
-+
-+ printf (" (ignored %d blocks of test-only/debug-only code)\n",
-+ stats->n_blocks_inside_dbus_build_tests);
-+
-+ printf (" %g%% functions executed (%d of %d)\n",
-+ (stats->n_functions_executed / (double) stats->n_functions) * 100.0,
-+ stats->n_functions_executed,
-+ stats->n_functions);
-+
-+ completely = stats->n_functions_executed - stats->n_functions_partial;
-+ printf (" %g%% functions completely executed (%d of %d)\n",
-+ (completely / (double) stats->n_functions) * 100.0,
-+ completely,
-+ stats->n_functions);
-+
-+ printf (" (ignored %d functions of test-only/debug-only code)\n",
-+ stats->n_functions_inside_dbus_build_tests);
-+
-+ printf (" %g%% lines executed (%d of %d)\n",
-+ (stats->n_lines_executed / (double) stats->n_lines) * 100.0,
-+ stats->n_lines_executed,
-+ stats->n_lines);
-+
-+ completely = stats->n_lines_executed - stats->n_lines_partial;
-+ printf (" %g%% lines completely executed (%d of %d)\n",
-+ (completely / (double) stats->n_lines) * 100.0,
-+ completely,
-+ stats->n_lines);
-+
-+ printf (" (ignored %d lines of test-only/debug-only code)\n",
-+ stats->n_lines_inside_dbus_build_tests);
-+
-+ printf ("\n");
-+}
-+
-+typedef enum
-+{
-+ MODE_PRINT,
-+ MODE_REPORT,
-+ MODE_BLOCKS,
-+ MODE_GCOV
-+} Mode;
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusString filename;
-+ int i;
-+ Mode m;
-+
-+ if (argc < 2)
-+ {
-+ fprintf (stderr, "Must specify files on command line\n");
-+ return 1;
-+ }
-+
-+ m = MODE_PRINT;
-+ i = 1;
-+
-+ if (strcmp (argv[i], "--report") == 0)
-+ {
-+ m = MODE_REPORT;
-+ ++i;
-+ }
-+ else if (strcmp (argv[i], "--blocks") == 0)
-+ {
-+ m = MODE_BLOCKS;
-+ ++i;
-+ }
-+ else if (strcmp (argv[i], "--gcov") == 0)
-+ {
-+ m = MODE_GCOV;
-+ ++i;
-+ }
-+
-+
-+ if (i == argc)
-+ {
-+ fprintf (stderr, "Must specify files on command line\n");
-+ return 1;
-+ }
-+
-+ if (m == MODE_PRINT)
-+ {
-+ while (i < argc)
-+ {
-+ _dbus_string_init_const (&filename, argv[i]);
-+
-+ print_one_file (&filename);
-+
-+ ++i;
-+ }
-+ }
-+ else if (m == MODE_BLOCKS || m == MODE_GCOV)
-+ {
-+ while (i < argc)
-+ {
-+ File *f;
-+
-+ _dbus_string_init_const (&filename, argv[i]);
-+
-+ f = load_c_file (&filename);
-+
-+ if (m == MODE_BLOCKS)
-+ print_block_superdetails (f);
-+ else if (m == MODE_GCOV)
-+ print_annotated_source_gcov_format (f);
-+
-+ ++i;
-+ }
-+ }
-+ else if (m == MODE_REPORT)
-+ {
-+ Stats stats = { 0, };
-+ DBusList *files;
-+ DBusList *link;
-+ DBusHashTable *stats_by_dir;
-+ DBusHashIter iter;
-+
-+ files = NULL;
-+ while (i < argc)
-+ {
-+ _dbus_string_init_const (&filename, argv[i]);
-+
-+ if (_dbus_string_ends_with_c_str (&filename, ".c"))
-+ {
-+ File *f;
-+
-+ f = load_c_file (&filename);
-+
-+ if (!_dbus_list_append (&files, f))
-+ die ("no memory\n");
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Unknown file type %s\n",
-+ _dbus_string_get_const_data (&filename));
-+ exit (1);
-+ }
-+
-+ ++i;
-+ }
-+
-+ link = _dbus_list_get_first_link (&files);
-+ while (link != NULL)
-+ {
-+ File *f = link->data;
-+
-+ merge_stats_for_file (&stats, f);
-+
-+ link = _dbus_list_get_next_link (&files, link);
-+ }
-+
-+ print_stats (&stats, "all files");
-+
-+ stats_by_dir = _dbus_hash_table_new (DBUS_HASH_STRING,
-+ dbus_free, dbus_free);
-+
-+ link = _dbus_list_get_first_link (&files);
-+ while (link != NULL)
-+ {
-+ File *f = link->data;
-+ DBusString dirname;
-+ char *dirname_c;
-+ Stats *dir_stats;
-+
-+ _dbus_string_init_const (&filename, f->name);
-+
-+ if (!_dbus_string_init (&dirname))
-+ die ("no memory\n");
-+
-+ if (!_dbus_string_get_dirname (&filename, &dirname) ||
-+ !_dbus_string_copy_data (&dirname, &dirname_c))
-+ die ("no memory\n");
-+
-+ dir_stats = _dbus_hash_table_lookup_string (stats_by_dir,
-+ dirname_c);
-+
-+ if (dir_stats == NULL)
-+ {
-+ dir_stats = dbus_new0 (Stats, 1);
-+ if (!_dbus_hash_table_insert_string (stats_by_dir, dirname_c,
-+ dir_stats))
-+ die ("no memory\n");
-+ }
-+ else
-+ dbus_free (dirname_c);
-+
-+ merge_stats_for_file (dir_stats, f);
-+
-+ link = _dbus_list_get_next_link (&files, link);
-+ }
-+
-+ _dbus_hash_iter_init (stats_by_dir, &iter);
-+ while (_dbus_hash_iter_next (&iter))
-+ {
-+ const char *dirname = _dbus_hash_iter_get_string_key (&iter);
-+ Stats *dir_stats = _dbus_hash_iter_get_value (&iter);
-+
-+ print_stats (dir_stats, dirname);
-+ }
-+
-+ _dbus_hash_table_unref (stats_by_dir);
-+
-+ link = _dbus_list_get_first_link (&files);
-+ while (link != NULL)
-+ {
-+ File *f = link->data;
-+
-+ print_untested_functions (f);
-+
-+ link = _dbus_list_get_next_link (&files, link);
-+ }
-+
-+ link = _dbus_list_get_first_link (&files);
-+ while (link != NULL)
-+ {
-+ File *f = link->data;
-+
-+ print_poorly_tested_functions (f, &stats);
-+
-+ link = _dbus_list_get_next_link (&files, link);
-+ }
-+
-+ link = _dbus_list_get_first_link (&files);
-+ while (link != NULL)
-+ {
-+ File *f = link->data;
-+
-+ print_n_untested_blocks_by_function (f, &stats);
-+
-+ link = _dbus_list_get_next_link (&files, link);
-+ }
-+ }
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/glib/Makefile.am dbus-0.61/test/glib/Makefile.am
---- dbus-0.61.orig/test/glib/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/Makefile.am 2005-08-23 21:48:30.000000000 +0200
-@@ -0,0 +1,80 @@
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) -DDBUS_COMPILATION
-+
-+## note that TESTS has special meaning (stuff to use in make check)
-+## so if adding tests not to be run in make check, don't add them to
-+## TESTS
-+if DBUS_BUILD_TESTS
-+TESTS_ENVIRONMENT=DBUS_TOP_BUILDDIR=$(ABSOLUTE_TOP_BUILDDIR)
-+TESTS=run-test.sh
-+else
-+TESTS=
-+endif
-+
-+EXTRA_DIST=run-test.sh test-service-glib.xml my-object-marshal.list test-service-glib.xml
-+
-+if DBUS_BUILD_TESTS
-+
-+if HAVE_GLIB_THREADS
-+THREAD_APPS=test-thread-server test-thread-client test-profile
-+
-+test_thread_server_SOURCES= \
-+ test-thread-server.c \
-+ test-thread.h
-+
-+test_thread_server_LDADD= $(DBUS_GLIB_THREADS_LIBS) $(top_builddir)/glib/libdbus-glib-1.la
-+
-+test_thread_client_SOURCES= \
-+ test-thread-client.c \
-+ test-thread.h
-+
-+test_thread_client_LDADD= $(DBUS_GLIB_THREADS_LIBS) $(top_builddir)/glib/libdbus-glib-1.la
-+endif
-+
-+## we use noinst_PROGRAMS not check_PROGRAMS for TESTS so that we
-+## build even when not doing "make check"
-+noinst_PROGRAMS= test-dbus-glib test-service-glib $(THREAD_APPS)
-+
-+test_dbus_glib_SOURCES= \
-+ my-object-marshal.c \
-+ test-dbus-glib.c
-+
-+test_dbus_glib_LDADD= $(DBUS_GLIB_TOOL_LIBS) $(top_builddir)/glib/libdbus-glib-1.la $(top_builddir)/glib/libdbus-gtool.la
-+
-+BUILT_SOURCES = test-service-glib-glue.h test-service-glib-bindings.h my-object-marshal.c my-object-marshal.h
-+
-+test_service_glib_SOURCES= \
-+ my-object-marshal.c \
-+ test-service-glib.c
-+
-+test-service-glib-glue.h: test-service-glib.xml $(top_builddir)/glib/dbus-binding-tool
-+ $(top_builddir)/glib/dbus-binding-tool --prefix=my_object --mode=glib-server --output=test-service-glib-glue.h $(srcdir)/test-service-glib.xml
-+
-+test-service-glib-bindings.h: test-service-glib.xml $(top_builddir)/glib/dbus-binding-tool
-+ $(top_builddir)/glib/dbus-binding-tool --prefix=my_object --mode=glib-client --output=test-service-glib-bindings.h $(srcdir)/test-service-glib.xml
-+
-+my-object-marshal.c: Makefile my-object-marshal.list
-+ @GLIB_GENMARSHAL@ --prefix=my_object_marshal $(srcdir)/my-object-marshal.list --header --body > my-object-marshal.c
-+
-+my-object-marshal.h: Makefile my-object-marshal.list
-+ @GLIB_GENMARSHAL@ --prefix=my_object_marshal $(srcdir)/my-object-marshal.list --header > my-object-marshal.h
-+
-+
-+CLEANFILES = $(BUILT_SOURCES)
-+
-+test_service_glib_LDADD= $(top_builddir)/glib/libdbus-glib-1.la $(DBUS_GLIB_THREADS_LIBS)
-+
-+else
-+### not building tests
-+
-+if HAVE_GLIB_THREADS
-+noinst_PROGRAMS=test-profile
-+endif
-+
-+endif
-+
-+if HAVE_GLIB_THREADS
-+test_profile_SOURCES= \
-+ test-profile.c
-+
-+test_profile_LDADD= $(DBUS_GLIB_THREADS_LIBS) $(top_builddir)/glib/libdbus-glib-1.la
-+endif
-diff -Naur dbus-0.61.orig/test/glib/Makefile.in dbus-0.61/test/glib/Makefile.in
---- dbus-0.61.orig/test/glib/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/Makefile.in 2006-02-27 22:34:40.000000000 +0100
-@@ -0,0 +1,762 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+ at DBUS_BUILD_TESTS_FALSE@@HAVE_GLIB_THREADS_TRUE at noinst_PROGRAMS = test-profile$(EXEEXT)
-+ at DBUS_BUILD_TESTS_TRUE@noinst_PROGRAMS = test-dbus-glib$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ test-service-glib$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ $(am__EXEEXT_1)
-+subdir = test/glib
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at am__EXEEXT_1 = test-thread-server$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE@ test-thread-client$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE@ test-profile$(EXEEXT)
-+PROGRAMS = $(noinst_PROGRAMS)
-+am__test_dbus_glib_SOURCES_DIST = my-object-marshal.c test-dbus-glib.c
-+ at DBUS_BUILD_TESTS_TRUE@am_test_dbus_glib_OBJECTS = \
-+ at DBUS_BUILD_TESTS_TRUE@ my-object-marshal.$(OBJEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ test-dbus-glib.$(OBJEXT)
-+test_dbus_glib_OBJECTS = $(am_test_dbus_glib_OBJECTS)
-+am__DEPENDENCIES_1 =
-+ at DBUS_BUILD_TESTS_TRUE@test_dbus_glib_DEPENDENCIES = \
-+ at DBUS_BUILD_TESTS_TRUE@ $(am__DEPENDENCIES_1) \
-+ at DBUS_BUILD_TESTS_TRUE@ $(top_builddir)/glib/libdbus-glib-1.la \
-+ at DBUS_BUILD_TESTS_TRUE@ $(top_builddir)/glib/libdbus-gtool.la
-+am__test_profile_SOURCES_DIST = test-profile.c
-+ at HAVE_GLIB_THREADS_TRUE@am_test_profile_OBJECTS = \
-+ at HAVE_GLIB_THREADS_TRUE@ test-profile.$(OBJEXT)
-+test_profile_OBJECTS = $(am_test_profile_OBJECTS)
-+ at HAVE_GLIB_THREADS_TRUE@test_profile_DEPENDENCIES = \
-+ at HAVE_GLIB_THREADS_TRUE@ $(am__DEPENDENCIES_1) \
-+ at HAVE_GLIB_THREADS_TRUE@ $(top_builddir)/glib/libdbus-glib-1.la
-+am__test_service_glib_SOURCES_DIST = my-object-marshal.c \
-+ test-service-glib.c
-+ at DBUS_BUILD_TESTS_TRUE@am_test_service_glib_OBJECTS = \
-+ at DBUS_BUILD_TESTS_TRUE@ my-object-marshal.$(OBJEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ test-service-glib.$(OBJEXT)
-+test_service_glib_OBJECTS = $(am_test_service_glib_OBJECTS)
-+ at DBUS_BUILD_TESTS_TRUE@test_service_glib_DEPENDENCIES = \
-+ at DBUS_BUILD_TESTS_TRUE@ $(top_builddir)/glib/libdbus-glib-1.la \
-+ at DBUS_BUILD_TESTS_TRUE@ $(am__DEPENDENCIES_1)
-+am__test_thread_client_SOURCES_DIST = test-thread-client.c \
-+ test-thread.h
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at am_test_thread_client_OBJECTS = test-thread-client.$(OBJEXT)
-+test_thread_client_OBJECTS = $(am_test_thread_client_OBJECTS)
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at test_thread_client_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE@ $(top_builddir)/glib/libdbus-glib-1.la
-+am__test_thread_server_SOURCES_DIST = test-thread-server.c \
-+ test-thread.h
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at am_test_thread_server_OBJECTS = test-thread-server.$(OBJEXT)
-+test_thread_server_OBJECTS = $(am_test_thread_server_OBJECTS)
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at test_thread_server_DEPENDENCIES = $(am__DEPENDENCIES_1) \
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE@ $(top_builddir)/glib/libdbus-glib-1.la
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(test_dbus_glib_SOURCES) $(test_profile_SOURCES) \
-+ $(test_service_glib_SOURCES) $(test_thread_client_SOURCES) \
-+ $(test_thread_server_SOURCES)
-+DIST_SOURCES = $(am__test_dbus_glib_SOURCES_DIST) \
-+ $(am__test_profile_SOURCES_DIST) \
-+ $(am__test_service_glib_SOURCES_DIST) \
-+ $(am__test_thread_client_SOURCES_DIST) \
-+ $(am__test_thread_server_SOURCES_DIST)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) -DDBUS_COMPILATION
-+ at DBUS_BUILD_TESTS_TRUE@TESTS_ENVIRONMENT = DBUS_TOP_BUILDDIR=$(ABSOLUTE_TOP_BUILDDIR)
-+ at DBUS_BUILD_TESTS_FALSE@TESTS =
-+ at DBUS_BUILD_TESTS_TRUE@TESTS = run-test.sh
-+EXTRA_DIST = run-test.sh test-service-glib.xml my-object-marshal.list test-service-glib.xml
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at THREAD_APPS = test-thread-server test-thread-client test-profile
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at test_thread_server_SOURCES = \
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE@ test-thread-server.c \
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE@ test-thread.h
-+
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at test_thread_server_LDADD = $(DBUS_GLIB_THREADS_LIBS) $(top_builddir)/glib/libdbus-glib-1.la
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at test_thread_client_SOURCES = \
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE@ test-thread-client.c \
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE@ test-thread.h
-+
-+ at DBUS_BUILD_TESTS_TRUE@@HAVE_GLIB_THREADS_TRUE at test_thread_client_LDADD = $(DBUS_GLIB_THREADS_LIBS) $(top_builddir)/glib/libdbus-glib-1.la
-+ at DBUS_BUILD_TESTS_TRUE@test_dbus_glib_SOURCES = \
-+ at DBUS_BUILD_TESTS_TRUE@ my-object-marshal.c \
-+ at DBUS_BUILD_TESTS_TRUE@ test-dbus-glib.c
-+
-+ at DBUS_BUILD_TESTS_TRUE@test_dbus_glib_LDADD = $(DBUS_GLIB_TOOL_LIBS) $(top_builddir)/glib/libdbus-glib-1.la $(top_builddir)/glib/libdbus-gtool.la
-+ at DBUS_BUILD_TESTS_TRUE@BUILT_SOURCES = test-service-glib-glue.h test-service-glib-bindings.h my-object-marshal.c my-object-marshal.h
-+ at DBUS_BUILD_TESTS_TRUE@test_service_glib_SOURCES = \
-+ at DBUS_BUILD_TESTS_TRUE@ my-object-marshal.c \
-+ at DBUS_BUILD_TESTS_TRUE@ test-service-glib.c
-+
-+ at DBUS_BUILD_TESTS_TRUE@CLEANFILES = $(BUILT_SOURCES)
-+ at DBUS_BUILD_TESTS_TRUE@test_service_glib_LDADD = $(top_builddir)/glib/libdbus-glib-1.la $(DBUS_GLIB_THREADS_LIBS)
-+ at HAVE_GLIB_THREADS_TRUE@test_profile_SOURCES = \
-+ at HAVE_GLIB_THREADS_TRUE@ test-profile.c
-+
-+ at HAVE_GLIB_THREADS_TRUE@test_profile_LDADD = $(DBUS_GLIB_THREADS_LIBS) $(top_builddir)/glib/libdbus-glib-1.la
-+all: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/glib/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu test/glib/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+test-dbus-glib$(EXEEXT): $(test_dbus_glib_OBJECTS) $(test_dbus_glib_DEPENDENCIES)
-+ @rm -f test-dbus-glib$(EXEEXT)
-+ $(LINK) $(test_dbus_glib_LDFLAGS) $(test_dbus_glib_OBJECTS) $(test_dbus_glib_LDADD) $(LIBS)
-+test-profile$(EXEEXT): $(test_profile_OBJECTS) $(test_profile_DEPENDENCIES)
-+ @rm -f test-profile$(EXEEXT)
-+ $(LINK) $(test_profile_LDFLAGS) $(test_profile_OBJECTS) $(test_profile_LDADD) $(LIBS)
-+test-service-glib$(EXEEXT): $(test_service_glib_OBJECTS) $(test_service_glib_DEPENDENCIES)
-+ @rm -f test-service-glib$(EXEEXT)
-+ $(LINK) $(test_service_glib_LDFLAGS) $(test_service_glib_OBJECTS) $(test_service_glib_LDADD) $(LIBS)
-+test-thread-client$(EXEEXT): $(test_thread_client_OBJECTS) $(test_thread_client_DEPENDENCIES)
-+ @rm -f test-thread-client$(EXEEXT)
-+ $(LINK) $(test_thread_client_LDFLAGS) $(test_thread_client_OBJECTS) $(test_thread_client_LDADD) $(LIBS)
-+test-thread-server$(EXEEXT): $(test_thread_server_OBJECTS) $(test_thread_server_DEPENDENCIES)
-+ @rm -f test-thread-server$(EXEEXT)
-+ $(LINK) $(test_thread_server_LDFLAGS) $(test_thread_server_OBJECTS) $(test_thread_server_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/my-object-marshal.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-dbus-glib.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-profile.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-service-glib.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-thread-client.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-thread-server.Po at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+check-TESTS: $(TESTS)
-+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-+ srcdir=$(srcdir); export srcdir; \
-+ list='$(TESTS)'; \
-+ if test -n "$$list"; then \
-+ for tst in $$list; do \
-+ if test -f ./$$tst; then dir=./; \
-+ elif test -f $$tst; then dir=; \
-+ else dir="$(srcdir)/"; fi; \
-+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xpass=`expr $$xpass + 1`; \
-+ failed=`expr $$failed + 1`; \
-+ echo "XPASS: $$tst"; \
-+ ;; \
-+ *) \
-+ echo "PASS: $$tst"; \
-+ ;; \
-+ esac; \
-+ elif test $$? -ne 77; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xfail=`expr $$xfail + 1`; \
-+ echo "XFAIL: $$tst"; \
-+ ;; \
-+ *) \
-+ failed=`expr $$failed + 1`; \
-+ echo "FAIL: $$tst"; \
-+ ;; \
-+ esac; \
-+ else \
-+ skip=`expr $$skip + 1`; \
-+ echo "SKIP: $$tst"; \
-+ fi; \
-+ done; \
-+ if test "$$failed" -eq 0; then \
-+ if test "$$xfail" -eq 0; then \
-+ banner="All $$all tests passed"; \
-+ else \
-+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-+ fi; \
-+ else \
-+ if test "$$xpass" -eq 0; then \
-+ banner="$$failed of $$all tests failed"; \
-+ else \
-+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-+ fi; \
-+ fi; \
-+ dashes="$$banner"; \
-+ skipped=""; \
-+ if test "$$skip" -ne 0; then \
-+ skipped="($$skip tests were not run)"; \
-+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$skipped"; \
-+ fi; \
-+ report=""; \
-+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-+ report="Please report to $(PACKAGE_BUGREPORT)"; \
-+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$report"; \
-+ fi; \
-+ dashes=`echo "$$dashes" | sed s/./=/g`; \
-+ echo "$$dashes"; \
-+ echo "$$banner"; \
-+ test -z "$$skipped" || echo "$$skipped"; \
-+ test -z "$$report" || echo "$$report"; \
-+ echo "$$dashes"; \
-+ test "$$failed" -eq 0; \
-+ else :; fi
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-+check: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) check-am
-+all-am: Makefile $(PROGRAMS)
-+installdirs:
-+install: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-+ mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
-+ clean-generic clean-libtool clean-noinstPROGRAMS ctags \
-+ distclean distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-exec install-exec-am install-info \
-+ install-info-am install-man install-strip installcheck \
-+ installcheck-am installdirs maintainer-clean \
-+ maintainer-clean-generic mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-+ tags uninstall uninstall-am uninstall-info-am
-+
-+
-+ at DBUS_BUILD_TESTS_TRUE@test-service-glib-glue.h: test-service-glib.xml $(top_builddir)/glib/dbus-binding-tool
-+ at DBUS_BUILD_TESTS_TRUE@ $(top_builddir)/glib/dbus-binding-tool --prefix=my_object --mode=glib-server --output=test-service-glib-glue.h $(srcdir)/test-service-glib.xml
-+
-+ at DBUS_BUILD_TESTS_TRUE@test-service-glib-bindings.h: test-service-glib.xml $(top_builddir)/glib/dbus-binding-tool
-+ at DBUS_BUILD_TESTS_TRUE@ $(top_builddir)/glib/dbus-binding-tool --prefix=my_object --mode=glib-client --output=test-service-glib-bindings.h $(srcdir)/test-service-glib.xml
-+
-+ at DBUS_BUILD_TESTS_TRUE@my-object-marshal.c: Makefile my-object-marshal.list
-+ at DBUS_BUILD_TESTS_TRUE@ @GLIB_GENMARSHAL@ --prefix=my_object_marshal $(srcdir)/my-object-marshal.list --header --body > my-object-marshal.c
-+
-+ at DBUS_BUILD_TESTS_TRUE@my-object-marshal.h: Makefile my-object-marshal.list
-+ at DBUS_BUILD_TESTS_TRUE@ @GLIB_GENMARSHAL@ --prefix=my_object_marshal $(srcdir)/my-object-marshal.list --header > my-object-marshal.h
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/test/glib/my-object-marshal.c dbus-0.61/test/glib/my-object-marshal.c
---- dbus-0.61.orig/test/glib/my-object-marshal.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/my-object-marshal.c 2006-02-24 17:38:07.000000000 +0100
-@@ -0,0 +1,147 @@
-+
-+#ifndef __my_object_marshal_MARSHAL_H__
-+#define __my_object_marshal_MARSHAL_H__
-+
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+#ifdef G_ENABLE_DEBUG
-+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-+#define g_marshal_value_peek_char(v) g_value_get_char (v)
-+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-+#define g_marshal_value_peek_int(v) g_value_get_int (v)
-+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-+#define g_marshal_value_peek_long(v) g_value_get_long (v)
-+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-+#define g_marshal_value_peek_float(v) g_value_get_float (v)
-+#define g_marshal_value_peek_double(v) g_value_get_double (v)
-+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-+#define g_marshal_value_peek_param(v) g_value_get_param (v)
-+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-+#define g_marshal_value_peek_object(v) g_value_get_object (v)
-+#else /* !G_ENABLE_DEBUG */
-+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
-+ * Do not access GValues directly in your code. Instead, use the
-+ * g_value_get_*() functions
-+ */
-+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
-+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
-+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-+#endif /* !G_ENABLE_DEBUG */
-+
-+
-+/* NONE:STRING,INT,STRING (./my-object-marshal.list:1) */
-+extern void my_object_marshal_VOID__STRING_INT_STRING (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+void
-+my_object_marshal_VOID__STRING_INT_STRING (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ typedef void (*GMarshalFunc_VOID__STRING_INT_STRING) (gpointer data1,
-+ gpointer arg_1,
-+ gint arg_2,
-+ gpointer arg_3,
-+ gpointer data2);
-+ register GMarshalFunc_VOID__STRING_INT_STRING callback;
-+ register GCClosure *cc = (GCClosure*) closure;
-+ register gpointer data1, data2;
-+
-+ g_return_if_fail (n_param_values == 4);
-+
-+ if (G_CCLOSURE_SWAP_DATA (closure))
-+ {
-+ data1 = closure->data;
-+ data2 = g_value_peek_pointer (param_values + 0);
-+ }
-+ else
-+ {
-+ data1 = g_value_peek_pointer (param_values + 0);
-+ data2 = closure->data;
-+ }
-+ callback = (GMarshalFunc_VOID__STRING_INT_STRING) (marshal_data ? marshal_data : cc->callback);
-+
-+ callback (data1,
-+ g_marshal_value_peek_string (param_values + 1),
-+ g_marshal_value_peek_int (param_values + 2),
-+ g_marshal_value_peek_string (param_values + 3),
-+ data2);
-+}
-+#define my_object_marshal_NONE__STRING_INT_STRING my_object_marshal_VOID__STRING_INT_STRING
-+
-+/* NONE:STRING,BOXED (./my-object-marshal.list:2) */
-+extern void my_object_marshal_VOID__STRING_BOXED (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+void
-+my_object_marshal_VOID__STRING_BOXED (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ typedef void (*GMarshalFunc_VOID__STRING_BOXED) (gpointer data1,
-+ gpointer arg_1,
-+ gpointer arg_2,
-+ gpointer data2);
-+ register GMarshalFunc_VOID__STRING_BOXED callback;
-+ register GCClosure *cc = (GCClosure*) closure;
-+ register gpointer data1, data2;
-+
-+ g_return_if_fail (n_param_values == 3);
-+
-+ if (G_CCLOSURE_SWAP_DATA (closure))
-+ {
-+ data1 = closure->data;
-+ data2 = g_value_peek_pointer (param_values + 0);
-+ }
-+ else
-+ {
-+ data1 = g_value_peek_pointer (param_values + 0);
-+ data2 = closure->data;
-+ }
-+ callback = (GMarshalFunc_VOID__STRING_BOXED) (marshal_data ? marshal_data : cc->callback);
-+
-+ callback (data1,
-+ g_marshal_value_peek_string (param_values + 1),
-+ g_marshal_value_peek_boxed (param_values + 2),
-+ data2);
-+}
-+#define my_object_marshal_NONE__STRING_BOXED my_object_marshal_VOID__STRING_BOXED
-+
-+G_END_DECLS
-+
-+#endif /* __my_object_marshal_MARSHAL_H__ */
-+
-diff -Naur dbus-0.61.orig/test/glib/my-object-marshal.list dbus-0.61/test/glib/my-object-marshal.list
---- dbus-0.61.orig/test/glib/my-object-marshal.list 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/my-object-marshal.list 2005-06-17 16:29:48.000000000 +0200
-@@ -0,0 +1,2 @@
-+NONE:STRING,INT,STRING
-+NONE:STRING,BOXED
-diff -Naur dbus-0.61.orig/test/glib/run-test.sh dbus-0.61/test/glib/run-test.sh
---- dbus-0.61.orig/test/glib/run-test.sh 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/run-test.sh 2005-03-17 18:48:29.000000000 +0100
-@@ -0,0 +1,36 @@
-+#! /bin/bash
-+
-+SCRIPTNAME=$0
-+MODE=$1
-+
-+## so the tests can complain if you fail to use the script to launch them
-+export DBUS_TEST_GLIB_RUN_TEST_SCRIPT=1
-+
-+# Rerun ourselves with tmp session bus if we're not already
-+if test -z "$DBUS_TEST_GLIB_IN_RUN_TEST"; then
-+ DBUS_TEST_GLIB_IN_RUN_TEST=1
-+ export DBUS_TEST_GLIB_IN_RUN_TEST
-+ exec $DBUS_TOP_BUILDDIR/tools/run-with-tmp-session-bus.sh $SCRIPTNAME $MODE
-+fi
-+
-+if test x$MODE = xprofile ; then
-+ echo "profiling type $PROFILE_TYPE"
-+ sleep 2 ## this lets the bus get started so its startup time doesn't affect the profile too much
-+ if test x$PROFILE_TYPE = x ; then
-+ PROFILE_TYPE=all
-+ fi
-+ libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/test/glib/test-profile $PROFILE_TYPE || die "test-profile failed"
-+elif test x$MODE = xviewer ; then
-+ echo "Launching dbus-viewer"
-+ ARGS=
-+ if test x$DEBUG = x ; then
-+ ARGS="--services org.freedesktop.DBus org.freedesktop.DBus.TestSuiteGLibService"
-+ fi
-+ libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/tools/dbus-viewer $ARGS || die "could not run dbus-viewer"
-+elif test x$MODE = xwait ; then
-+ echo "Waiting DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS"
-+ sleep 86400
-+else
-+ echo "running test-dbus-glib"
-+ libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/test/glib/test-dbus-glib || die "test-dbus-glib failed"
-+fi
-diff -Naur dbus-0.61.orig/test/glib/run-with-tmp-session-bus.conf dbus-0.61/test/glib/run-with-tmp-session-bus.conf
---- dbus-0.61.orig/test/glib/run-with-tmp-session-bus.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/run-with-tmp-session-bus.conf 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,30 @@
-+<!-- This configuration file controls the per-user-login-session message bus.
-+ Add a session-local.conf and edit that rather than changing this
-+ file directly. -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <!-- Our well-known bus type, don't change this -->
-+ <type>session</type>
-+
-+ <listen>unix:tmpdir=/tmp</listen>
-+
-+ <servicedir>/home/boston/johnp/devel-local/dbus/test/data/valid-service-files</servicedir>
-+
-+ <policy context="default">
-+ <!-- Allow everything to be sent -->
-+ <allow send_destination="*"/>
-+ <!-- Allow everything to be received -->
-+ <allow eavesdrop="true"/>
-+ <!-- Allow anyone to own anything -->
-+ <allow own="*"/>
-+ </policy>
-+
-+ <!-- This is included last so local configuration can override what's
-+ in this standard file -->
-+
-+
-+
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/glib/test-dbus-glib.c dbus-0.61/test/glib/test-dbus-glib.c
---- dbus-0.61.orig/test/glib/test-dbus-glib.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/test-dbus-glib.c 2006-02-16 01:43:41.000000000 +0100
-@@ -0,0 +1,1621 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+#include <dbus/dbus-glib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include "test-service-glib-bindings.h"
-+#include <glib/dbus-gidl.h>
-+#include <glib/dbus-gparser.h>
-+#include <glib.h>
-+#include <glib-object.h>
-+#include "my-object-marshal.h"
-+
-+static GMainLoop *loop = NULL;
-+static const char *await_terminating_service = NULL;
-+static int n_times_foo_received = 0;
-+static int n_times_frobnicate_received = 0;
-+static int n_times_frobnicate_received_2 = 0;
-+static int n_times_sig0_received = 0;
-+static int n_times_sig1_received = 0;
-+static int n_times_sig2_received = 0;
-+static guint exit_timeout = 0;
-+static gboolean proxy_destroyed = FALSE;
-+static gboolean proxy_destroy_and_nameowner = FALSE;
-+static gboolean proxy_destroy_and_nameowner_complete = FALSE;
-+
-+static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-+static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
-+
-+static void
-+unset_and_free_gvalue (gpointer val)
-+{
-+ g_value_unset (val);
-+ g_free (val);
-+}
-+
-+static gboolean
-+timed_exit (gpointer loop)
-+{
-+ g_print ("timed exit!\n");
-+ g_main_loop_quit (loop);
-+ return TRUE;
-+}
-+
-+static void
-+proxy_destroyed_cb (DBusGProxy *proxy, gpointer user_data)
-+{
-+ proxy_destroyed = TRUE;
-+ if (proxy_destroy_and_nameowner && !proxy_destroy_and_nameowner_complete && await_terminating_service == NULL)
-+ {
-+ g_source_remove (exit_timeout);
-+ g_main_loop_quit (loop);
-+ proxy_destroy_and_nameowner_complete = TRUE;
-+ }
-+}
-+
-+static void
-+name_owner_changed (DBusGProxy *proxy,
-+ const char *name,
-+ const char *prev_owner,
-+ const char *new_owner,
-+ gpointer user_data)
-+{
-+ g_print ("(signal NameOwnerChanged) name owner changed for %s from %s to %s\n",
-+ name, prev_owner, new_owner);
-+ if (await_terminating_service &&
-+ !strcmp (name, await_terminating_service)
-+ && !strcmp ("", new_owner))
-+ {
-+ g_print ("Caught expected ownership loss for %s\n", name);
-+ await_terminating_service = NULL;
-+ if (proxy_destroy_and_nameowner && !proxy_destroy_and_nameowner_complete && proxy_destroyed)
-+ {
-+ g_source_remove (exit_timeout);
-+ g_main_loop_quit (loop);
-+ proxy_destroy_and_nameowner_complete = TRUE;
-+ }
-+ else if (!proxy_destroy_and_nameowner)
-+ {
-+ g_source_remove (exit_timeout);
-+ g_main_loop_quit (loop);
-+ }
-+ }
-+}
-+
-+static void
-+foo_signal_handler (DBusGProxy *proxy,
-+ double d,
-+ void *user_data)
-+{
-+ n_times_foo_received += 1;
-+
-+ g_print ("Got Foo signal\n");
-+
-+ g_main_loop_quit (loop);
-+ g_source_remove (exit_timeout);
-+}
-+
-+static void
-+frobnicate_signal_handler (DBusGProxy *proxy,
-+ int val,
-+ void *user_data)
-+{
-+ n_times_frobnicate_received += 1;
-+
-+ g_assert (val == 42);
-+ g_print ("Got Frobnicate signal\n");
-+
-+ g_main_loop_quit (loop);
-+ g_source_remove (exit_timeout);
-+}
-+
-+static void
-+frobnicate_signal_handler_2 (DBusGProxy *proxy,
-+ int val,
-+ void *user_data)
-+{
-+ n_times_frobnicate_received_2 += 1;
-+
-+ g_assert (val == 42);
-+ g_print ("Got Frobnicate signal (again)\n");
-+}
-+
-+static void
-+sig0_signal_handler (DBusGProxy *proxy,
-+ const char *str0,
-+ int val,
-+ const char *str1,
-+ void *user_data)
-+{
-+ n_times_sig0_received += 1;
-+
-+ g_assert (!strcmp (str0, "foo"));
-+
-+ g_assert (val == 22);
-+
-+ g_assert (!strcmp (str1, "moo"));
-+
-+ g_print ("Got Sig0 signal\n");
-+
-+ g_main_loop_quit (loop);
-+ g_source_remove (exit_timeout);
-+}
-+
-+static void
-+sig1_signal_handler (DBusGProxy *proxy,
-+ const char *str0,
-+ GValue *value,
-+ void *user_data)
-+{
-+ n_times_sig1_received += 1;
-+
-+ g_assert (!strcmp (str0, "baz"));
-+
-+ g_assert (G_VALUE_HOLDS_STRING (value));
-+
-+ g_assert (!strcmp (g_value_get_string (value), "bar"));
-+
-+ g_print ("Got Sig1 signal\n");
-+
-+ g_main_loop_quit (loop);
-+ g_source_remove (exit_timeout);
-+}
-+
-+static void
-+sig2_signal_handler (DBusGProxy *proxy,
-+ GHashTable *table,
-+ void *user_data)
-+{
-+ n_times_sig2_received += 1;
-+
-+ g_assert (g_hash_table_size (table) == 2);
-+
-+ g_assert (g_hash_table_lookup (table, "baz") != NULL);
-+ g_assert (!strcmp (g_hash_table_lookup (table, "baz"), "cow"));
-+ g_assert (g_hash_table_lookup (table, "bar") != NULL);
-+ g_assert (!strcmp (g_hash_table_lookup (table, "bar"), "foo"));
-+
-+ g_print ("Got Sig2 signal\n");
-+
-+ g_main_loop_quit (loop);
-+ g_source_remove (exit_timeout);
-+}
-+
-+static DBusGProxyCall *echo_call;
-+static guint n_times_echo_cb_entered;
-+static void
-+echo_received_cb (DBusGProxy *proxy,
-+ DBusGProxyCall *call,
-+ gpointer data)
-+{
-+ GError *error;
-+ char *echo_data;
-+
-+ g_assert (call == echo_call);
-+ g_assert (data == NULL);
-+
-+ error = NULL;
-+ echo_data = NULL;
-+ n_times_echo_cb_entered++;
-+
-+ if (!dbus_g_proxy_end_call (proxy, call, &error,
-+ G_TYPE_STRING,
-+ &echo_data,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete async Echo", error);
-+ g_assert (echo_data != NULL);
-+ g_print ("Async echo gave \"%s\"\n", echo_data);
-+ g_free (echo_data);
-+ g_main_loop_quit (loop);
-+ g_source_remove (exit_timeout);
-+}
-+
-+static void
-+increment_received_cb (DBusGProxy *proxy,
-+ DBusGProxyCall *call,
-+ gpointer data)
-+{
-+ GError *error;
-+ guint val;
-+
-+ g_assert (!strcmp (data, "moo"));
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_end_call (proxy, call, &error,
-+ G_TYPE_UINT, &val,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete (async) Increment call", error);
-+
-+ if (val != 43)
-+ lose ("Increment call returned %d, should be 43", val);
-+
-+ g_print ("Async increment gave \"%d\"\n", val);
-+ g_main_loop_quit (loop);
-+ g_source_remove (exit_timeout);
-+}
-+
-+static void
-+increment_async_cb (DBusGProxy *proxy, guint val, GError *error, gpointer data)
-+{
-+ if (error)
-+ lose_gerror ("Failed to complete (wrapped async) Increment call", error);
-+
-+ if (data != NULL)
-+ lose ("(wrapped async) Increment call gave unexpected data");
-+ if (val != 43)
-+ lose ("(wrapped async) Increment call returned %d, should be 43", val);
-+
-+ g_print ("(wrapped async) increment gave \"%d\"\n", val);
-+ g_main_loop_quit (loop);
-+ g_source_remove (exit_timeout);
-+}
-+
-+
-+static void
-+lose (const char *str, ...)
-+{
-+ va_list args;
-+
-+ va_start (args, str);
-+
-+ vfprintf (stderr, str, args);
-+ fputc ('\n', stderr);
-+
-+ va_end (args);
-+
-+ exit (1);
-+}
-+
-+static void
-+lose_gerror (const char *prefix, GError *error)
-+{
-+ if (error->domain == DBUS_GERROR && error->code == DBUS_GERROR_REMOTE_EXCEPTION)
-+ lose ("%s (%s): %s", prefix, dbus_g_error_get_name (error),
-+ error->message);
-+ else
-+ lose ("%s: %s", prefix, error->message);
-+}
-+
-+static void
-+run_mainloop (void)
-+{
-+ GMainContext *ctx;
-+
-+ ctx = g_main_loop_get_context (loop);
-+
-+ while (g_main_context_pending (ctx))
-+ g_main_context_iteration (ctx, FALSE);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *connection;
-+ GError *error;
-+ DBusGProxy *driver;
-+ DBusGProxy *proxy;
-+ DBusGProxy *proxy2;
-+ char **name_list;
-+ guint name_list_len;
-+ guint i;
-+ DBusGProxyCall *call;
-+ guint32 result;
-+ char *v_STRING_2;
-+ guint32 v_UINT32_2;
-+ double v_DOUBLE_2;
-+
-+ g_type_init ();
-+
-+ g_log_set_always_fatal (G_LOG_LEVEL_WARNING);
-+
-+ loop = g_main_loop_new (NULL, FALSE);
-+
-+ error = NULL;
-+ connection = dbus_g_bus_get (DBUS_BUS_SESSION,
-+ &error);
-+ if (connection == NULL)
-+ lose_gerror ("Failed to open connection to bus", error);
-+
-+ /* should always get the same one */
-+ g_assert (connection == dbus_g_bus_get (DBUS_BUS_SESSION, NULL));
-+ g_assert (connection == dbus_g_bus_get (DBUS_BUS_SESSION, NULL));
-+ g_assert (connection == dbus_g_bus_get (DBUS_BUS_SESSION, NULL));
-+
-+ /* Create a proxy object for the "bus driver" */
-+
-+ driver = dbus_g_proxy_new_for_name (connection,
-+ DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS);
-+
-+ dbus_g_proxy_add_signal (driver,
-+ "NameOwnerChanged",
-+ G_TYPE_STRING,
-+ G_TYPE_STRING,
-+ G_TYPE_STRING,
-+ G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (driver,
-+ "NameOwnerChanged",
-+ G_CALLBACK (name_owner_changed),
-+ NULL,
-+ NULL);
-+ /* Call ListNames method */
-+
-+ error = NULL;
-+ if (!dbus_g_proxy_call (driver, "ListNames", &error,
-+ G_TYPE_INVALID,
-+ G_TYPE_STRV, &name_list,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete ListNames call", error);
-+
-+ g_print ("Names on the message bus:\n");
-+ i = 0;
-+ name_list_len = g_strv_length (name_list);
-+ while (i < name_list_len)
-+ {
-+ g_assert (name_list[i] != NULL);
-+ g_print (" %s\n", name_list[i]);
-+ ++i;
-+ }
-+ g_assert (name_list[i] == NULL);
-+
-+ g_strfreev (name_list);
-+
-+ g_print ("calling ThisMethodDoesNotExist\n");
-+ /* Test handling of unknown method */
-+ if (dbus_g_proxy_call (driver, "ThisMethodDoesNotExist", &error,
-+ G_TYPE_STRING,
-+ "blah blah blah blah blah",
-+ G_TYPE_INT,
-+ 10,
-+ G_TYPE_INVALID, G_TYPE_INVALID) != FALSE)
-+ lose ("Calling nonexistent method succeeded!");
-+
-+ g_print ("Got EXPECTED error from calling unknown method: %s\n", error->message);
-+ g_clear_error (&error);
-+
-+ run_mainloop ();
-+
-+ /* Activate a service */
-+ g_print ("Activating echo service\n");
-+ if (!dbus_g_proxy_call (driver, "StartServiceByName", &error,
-+ G_TYPE_STRING,
-+ "org.freedesktop.DBus.TestSuiteEchoService",
-+ G_TYPE_UINT, 0,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &result,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Activate call", error);
-+
-+ g_print ("Starting echo service result = 0x%x\n", result);
-+
-+ /* Activate a service again */
-+ g_print ("Activating echo service again\n");
-+ if (!dbus_g_proxy_call (driver, "StartServiceByName", &error,
-+ G_TYPE_STRING,
-+ "org.freedesktop.DBus.TestSuiteEchoService",
-+ G_TYPE_UINT,
-+ 0,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &result,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Activate call", error);
-+
-+ g_print ("Duplicate start of echo service = 0x%x\n", result);
-+
-+ /* Talk to the new service */
-+
-+ g_print ("Creating proxy for echo service\n");
-+ proxy = dbus_g_proxy_new_for_name_owner (connection,
-+ "org.freedesktop.DBus.TestSuiteEchoService",
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ &error);
-+
-+ if (proxy == NULL)
-+ lose_gerror ("Failed to create proxy for name owner", error);
-+
-+ run_mainloop ();
-+
-+ g_print ("Calling Echo\n");
-+ if (!dbus_g_proxy_call (proxy, "Echo", &error,
-+ G_TYPE_STRING, "my string hello",
-+ G_TYPE_INVALID,
-+ G_TYPE_STRING, &v_STRING_2,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Echo call", error);
-+
-+ g_print ("String echoed = \"%s\"\n", v_STRING_2);
-+ g_free (v_STRING_2);
-+
-+ g_print ("Calling Echo (async)\n");
-+ echo_call = dbus_g_proxy_begin_call (proxy, "Echo",
-+ echo_received_cb, NULL, NULL,
-+ G_TYPE_STRING, "my string hello",
-+ G_TYPE_INVALID);
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ /* Test oneway call and signal handling */
-+
-+ g_print ("Testing Foo emission\n");
-+ dbus_g_proxy_add_signal (proxy, "Foo", G_TYPE_DOUBLE, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (proxy, "Foo",
-+ G_CALLBACK (foo_signal_handler),
-+ NULL, NULL);
-+
-+ dbus_g_proxy_call_no_reply (proxy, "EmitFoo",
-+ G_TYPE_INVALID);
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_foo_received != 1)
-+ lose ("Foo signal received %d times, should have been 1", n_times_foo_received);
-+
-+ /* Activate test servie */
-+ g_print ("Activating TestSuiteGLibService\n");
-+ error = NULL;
-+ if (!dbus_g_proxy_call (driver, "StartServiceByName", &error,
-+ G_TYPE_STRING,
-+ "org.freedesktop.DBus.TestSuiteGLibService",
-+ G_TYPE_UINT,
-+ 0,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &result,
-+ G_TYPE_INVALID)) {
-+ lose_gerror ("Failed to complete Activate call", error);
-+ }
-+
-+ g_print ("TestSuiteGLibService activated\n");
-+
-+ if (getenv ("DBUS_GLIB_TEST_SLEEP_AFTER_ACTIVATION"))
-+ g_usleep (8 * G_USEC_PER_SEC);
-+
-+ g_object_unref (G_OBJECT (proxy));
-+
-+ run_mainloop ();
-+
-+ proxy = dbus_g_proxy_new_for_name_owner (connection,
-+ "org.freedesktop.DBus.TestSuiteGLibService",
-+ "/org/freedesktop/DBus/Tests/MyTestObject",
-+ "org.freedesktop.DBus.Tests.MyObject",
-+ &error);
-+
-+ if (proxy == NULL)
-+ lose_gerror ("Failed to create proxy for name owner", error);
-+
-+ g_print ("Calling DoNothing\n");
-+ if (!dbus_g_proxy_call (proxy, "DoNothing", &error,
-+ G_TYPE_INVALID, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete DoNothing call", error);
-+
-+ g_print ("Calling Increment\n");
-+ error = NULL;
-+ if (!dbus_g_proxy_call (proxy, "Increment", &error,
-+ G_TYPE_UINT, 42,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &v_UINT32_2,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Increment call", error);
-+ if (v_UINT32_2 != 43)
-+ lose ("Increment call returned %d, should be 43", v_UINT32_2);
-+
-+ v_UINT32_2 = 0;
-+ g_print ("Calling Increment (async)\n");
-+ call = dbus_g_proxy_begin_call (proxy, "Increment",
-+ increment_received_cb, g_strdup ("moo"), g_free,
-+ G_TYPE_UINT, 42,
-+ G_TYPE_INVALID);
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ g_print ("Calling IncrementRetval\n");
-+ error = NULL;
-+ v_UINT32_2 = 0;
-+ if (!dbus_g_proxy_call (proxy, "IncrementRetval", &error,
-+ G_TYPE_UINT, 42,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &v_UINT32_2,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Increment call", error);
-+ if (v_UINT32_2 != 43)
-+ lose ("IncrementRetval call returned %d, should be 43", v_UINT32_2);
-+
-+ g_print ("Calling IncrementRetvalError\n");
-+ error = NULL;
-+ v_UINT32_2 = 0;
-+ if (!dbus_g_proxy_call (proxy, "IncrementRetvalError", &error,
-+ G_TYPE_UINT, 5,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &v_UINT32_2,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Increment call", error);
-+ if (v_UINT32_2 != 6)
-+ lose ("IncrementRetval call returned %d, should be 6", v_UINT32_2);
-+
-+ g_print ("Calling ThrowError\n");
-+ if (dbus_g_proxy_call (proxy, "ThrowError", &error,
-+ G_TYPE_INVALID, G_TYPE_INVALID) != FALSE)
-+ lose ("ThrowError call unexpectedly succeeded!");
-+
-+ if (!dbus_g_error_has_name (error, "org.freedesktop.DBus.Tests.MyObject.Foo"))
-+ lose ("ThrowError call returned unexpected error \"%s\": %s", dbus_g_error_get_name (error),
-+ error->message);
-+
-+ g_print ("ThrowError failed (as expected) returned error: %s\n", error->message);
-+ g_clear_error (&error);
-+
-+ g_print ("Calling IncrementRetvalError (for error)\n");
-+ error = NULL;
-+ v_UINT32_2 = 0;
-+ if (dbus_g_proxy_call (proxy, "IncrementRetvalError", &error,
-+ G_TYPE_UINT, 20,
-+ G_TYPE_INVALID,
-+ G_TYPE_UINT, &v_UINT32_2,
-+ G_TYPE_INVALID) != FALSE)
-+ lose ("IncrementRetvalError call unexpectedly succeeded!");
-+ if (!dbus_g_error_has_name (error, "org.freedesktop.DBus.Tests.MyObject.Foo"))
-+ lose ("IncrementRetvalError call returned unexpected error \"%s\": %s", dbus_g_error_get_name (error), error->message);
-+ g_clear_error (&error);
-+
-+ error = NULL;
-+ g_print ("Calling Uppercase\n");
-+ if (!dbus_g_proxy_call (proxy, "Uppercase", &error,
-+ G_TYPE_STRING, "foobar",
-+ G_TYPE_INVALID,
-+ G_TYPE_STRING, &v_STRING_2,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Uppercase call", error);
-+ if (strcmp ("FOOBAR", v_STRING_2) != 0)
-+ lose ("Uppercase call returned unexpected string %s", v_STRING_2);
-+ g_free (v_STRING_2);
-+
-+ run_mainloop ();
-+
-+ g_print ("Calling ManyArgs\n");
-+ if (!dbus_g_proxy_call (proxy, "ManyArgs", &error,
-+ G_TYPE_UINT, 26,
-+ G_TYPE_STRING, "bazwhee",
-+ G_TYPE_DOUBLE, G_PI,
-+ G_TYPE_INVALID,
-+ G_TYPE_DOUBLE, &v_DOUBLE_2,
-+ G_TYPE_STRING, &v_STRING_2,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete ManyArgs call", error);
-+ if (v_DOUBLE_2 < 55 || v_DOUBLE_2 > 56)
-+ lose ("ManyArgs call returned unexpected double value %f", v_DOUBLE_2);
-+ if (strcmp ("BAZWHEE", v_STRING_2) != 0)
-+ lose ("ManyArgs call returned unexpected string %s", v_STRING_2);
-+ g_free (v_STRING_2);
-+
-+ g_print ("Calling (wrapped) do_nothing\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_do_nothing (proxy, &error))
-+ lose_gerror ("Failed to complete (wrapped) DoNothing call", error);
-+
-+ g_print ("Calling (wrapped) increment\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_increment (proxy, 42, &v_UINT32_2, &error))
-+ lose_gerror ("Failed to complete (wrapped) Increment call", error);
-+
-+ if (v_UINT32_2 != 43)
-+ lose ("(wrapped) increment call returned %d, should be 43", v_UINT32_2);
-+
-+ g_print ("Calling (wrapped async) increment\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_increment_async (proxy, 42, increment_async_cb, NULL))
-+ lose_gerror ("Failed to complete (wrapped) Increment call", error);
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ v_UINT32_2 = 0;
-+ if (!org_freedesktop_DBus_Tests_MyObject_async_increment (proxy, 42, &v_UINT32_2, &error))
-+ lose_gerror ("Failed to complete (wrapped) AsyncIncrement call", error);
-+
-+ if (v_UINT32_2 != 43)
-+ lose ("(wrapped) async increment call returned %d, should be 43", v_UINT32_2);
-+
-+ g_print ("Calling (wrapped) throw_error\n");
-+ if (org_freedesktop_DBus_Tests_MyObject_throw_error (proxy, &error) != FALSE)
-+ lose ("(wrapped) ThrowError call unexpectedly succeeded!");
-+
-+ g_print ("(wrapped) ThrowError failed (as expected) returned error: %s\n", error->message);
-+ g_clear_error (&error);
-+
-+ if (org_freedesktop_DBus_Tests_MyObject_async_throw_error (proxy, &error) != FALSE)
-+ lose ("(wrapped) AsyncThrowError call unexpectedly succeeded!");
-+
-+ g_print ("(wrapped) AsyncThrowError failed (as expected) returned error: %s\n", error->message);
-+ g_clear_error (&error);
-+
-+ g_print ("Calling (wrapped) uppercase\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_uppercase (proxy, "foobar", &v_STRING_2, &error))
-+ lose_gerror ("Failed to complete (wrapped) Uppercase call", error);
-+ if (strcmp ("FOOBAR", v_STRING_2) != 0)
-+ lose ("(wrapped) Uppercase call returned unexpected string %s", v_STRING_2);
-+ g_free (v_STRING_2);
-+
-+ g_print ("Calling (wrapped) many_args\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_many_args (proxy, 26, "bazwhee", G_PI,
-+ &v_DOUBLE_2, &v_STRING_2, &error))
-+ lose_gerror ("Failed to complete (wrapped) ManyArgs call", error);
-+
-+ if (v_DOUBLE_2 < 55 || v_DOUBLE_2 > 56)
-+
-+ lose ("(wrapped) ManyArgs call returned unexpected double value %f", v_DOUBLE_2);
-+
-+ if (strcmp ("BAZWHEE", v_STRING_2) != 0)
-+ lose ("(wrapped) ManyArgs call returned unexpected string %s", v_STRING_2);
-+ g_free (v_STRING_2);
-+
-+ {
-+ guint32 arg0;
-+ char *arg1;
-+ gint32 arg2;
-+ guint32 arg3;
-+ guint32 arg4;
-+ char *arg5;
-+
-+ g_print ("Calling (wrapped) many_return\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_many_return (proxy, &arg0, &arg1, &arg2, &arg3, &arg4, &arg5, &error))
-+ lose_gerror ("Failed to complete (wrapped) ManyReturn call", error);
-+
-+ if (arg0 != 42)
-+ lose ("(wrapped) ManyReturn call returned unexpected guint32 value %u", arg0);
-+
-+ if (strcmp ("42", arg1) != 0)
-+ lose ("(wrapped) ManyReturn call returned unexpected string %s", arg1);
-+ g_free (arg1);
-+
-+ if (arg2 != -67)
-+ lose ("(wrapped) ManyReturn call returned unexpected gint32 value %u", arg2);
-+
-+ if (arg3 != 2)
-+ lose ("(wrapped) ManyReturn call returned unexpected guint32 value %u", arg3);
-+
-+ if (arg4 != 26)
-+ lose ("(wrapped) ManyReturn call returned unexpected guint32 value %u", arg4);
-+
-+ if (strcmp ("hello world", arg5))
-+ lose ("(wrapped) ManyReturn call returned unexpected string %s", arg5);
-+ g_free (arg5);
-+ }
-+
-+ run_mainloop ();
-+
-+ {
-+ GValue value = {0, };
-+
-+ g_value_init (&value, G_TYPE_STRING);
-+ g_value_set_string (&value, "foo");
-+
-+ g_print ("Calling (wrapped) stringify, with string\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_stringify (proxy,
-+ &value,
-+ &v_STRING_2,
-+ &error))
-+ lose_gerror ("Failed to complete (wrapped) stringify call", error);
-+ if (strcmp ("foo", v_STRING_2) != 0)
-+ lose ("(wrapped) stringify call returned unexpected string %s", v_STRING_2);
-+ g_free (v_STRING_2);
-+
-+ g_value_unset (&value);
-+ g_value_init (&value, G_TYPE_INT);
-+ g_value_set_int (&value, 42);
-+
-+ g_print ("Calling (wrapped) stringify, with int\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_stringify (proxy,
-+ &value,
-+ &v_STRING_2,
-+ &error))
-+ lose_gerror ("Failed to complete (wrapped) stringify call 2", error);
-+ if (strcmp ("42", v_STRING_2) != 0)
-+ lose ("(wrapped) stringify call 2 returned unexpected string %s", v_STRING_2);
-+ g_value_unset (&value);
-+ g_free (v_STRING_2);
-+
-+ g_value_init (&value, G_TYPE_INT);
-+ g_value_set_int (&value, 88);
-+ g_print ("Calling (wrapped) stringify, with another int\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_stringify (proxy,
-+ &value,
-+ NULL,
-+ &error))
-+ lose_gerror ("Failed to complete (wrapped) stringify call 3", error);
-+ g_value_unset (&value);
-+
-+ g_print ("Calling (wrapped) unstringify, for string\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_unstringify (proxy,
-+ "foo",
-+ &value,
-+ &error))
-+ lose_gerror ("Failed to complete (wrapped) unstringify call", error);
-+ if (!G_VALUE_HOLDS_STRING (&value))
-+ lose ("(wrapped) unstringify call returned unexpected value type %d", (int) G_VALUE_TYPE (&value));
-+ if (strcmp (g_value_get_string (&value), "foo"))
-+ lose ("(wrapped) unstringify call returned unexpected string %s",
-+ g_value_get_string (&value));
-+
-+ g_value_unset (&value);
-+
-+ g_print ("Calling (wrapped) unstringify, for int\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_unstringify (proxy,
-+ "10",
-+ &value,
-+ &error))
-+ lose_gerror ("Failed to complete (wrapped) unstringify call", error);
-+ if (!G_VALUE_HOLDS_INT (&value))
-+ lose ("(wrapped) unstringify call returned unexpected value type %d", (int) G_VALUE_TYPE (&value));
-+ if (g_value_get_int (&value) != 10)
-+ lose ("(wrapped) unstringify call returned unexpected integer %d",
-+ g_value_get_int (&value));
-+
-+ g_value_unset (&value);
-+ }
-+
-+ run_mainloop ();
-+
-+ {
-+ GArray *array;
-+ guint32 arraylen;
-+
-+ array = g_array_new (FALSE, TRUE, sizeof (guint32));
-+
-+ arraylen = 0;
-+ g_print ("Calling (wrapped) zero-length recursive1\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_recursive1 (proxy, array,
-+ &arraylen, &error))
-+ lose_gerror ("Failed to complete (wrapped) zero-length recursive1 call", error);
-+ if (arraylen != 0)
-+ lose ("(wrapped) zero-length recursive1 call returned invalid length %u", arraylen);
-+ }
-+
-+ {
-+ GArray *array;
-+ guint32 val;
-+ guint32 arraylen;
-+
-+ array = g_array_new (FALSE, TRUE, sizeof (guint32));
-+ val = 42;
-+ g_array_append_val (array, val);
-+ val = 69;
-+ g_array_append_val (array, val);
-+ val = 88;
-+ g_array_append_val (array, val);
-+ val = 26;
-+ g_array_append_val (array, val);
-+ val = 2;
-+ g_array_append_val (array, val);
-+
-+ arraylen = 0;
-+ g_print ("Calling (wrapped) recursive1\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_recursive1 (proxy, array,
-+ &arraylen, &error))
-+ lose_gerror ("Failed to complete (wrapped) recursive1 call", error);
-+ if (arraylen != 5)
-+ lose ("(wrapped) recursive1 call returned invalid length %u", arraylen);
-+ }
-+
-+ {
-+ GArray *array = NULL;
-+ guint32 *arrayvals;
-+
-+ g_print ("Calling (wrapped) recursive2\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_recursive2 (proxy, 2, &array, &error))
-+ lose_gerror ("Failed to complete (wrapped) Recursive2 call", error);
-+
-+ if (array == NULL)
-+ lose ("(wrapped) Recursive2 call returned NULL");
-+ if (array->len != 5)
-+ lose ("(wrapped) Recursive2 call returned unexpected array length %u", array->len);
-+
-+ arrayvals = (guint32*) array->data;
-+ if (arrayvals[0] != 42)
-+ lose ("(wrapped) Recursive2 call returned unexpected value %d in position 0", arrayvals[0]);
-+ if (arrayvals[1] != 26)
-+ lose ("(wrapped) Recursive2 call returned unexpected value %d in position 1", arrayvals[1]);
-+ if (arrayvals[4] != 2)
-+ lose ("(wrapped) Recursive2 call returned unexpected value %d in position 4", arrayvals[4]);
-+
-+ g_array_free (array, TRUE);
-+ }
-+
-+ run_mainloop ();
-+
-+ {
-+ char **strs;
-+ char **strs_ret;
-+
-+ strs = g_new0 (char *, 4);
-+ strs[0] = "hello";
-+ strs[1] = "HellO";
-+ strs[2] = "HELLO";
-+ strs[3] = NULL;
-+
-+ strs_ret = NULL;
-+ g_print ("Calling (wrapped) many_uppercase\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_many_uppercase (proxy, strs, &strs_ret, &error))
-+ lose_gerror ("Failed to complete (wrapped) ManyUppercase call", error);
-+ g_assert (strs_ret != NULL);
-+ if (strcmp ("HELLO", strs_ret[0]) != 0)
-+ lose ("(wrapped) ManyUppercase call returned unexpected string %s", strs_ret[0]);
-+ if (strcmp ("HELLO", strs_ret[1]) != 0)
-+ lose ("(wrapped) ManyUppercase call returned unexpected string %s", strs_ret[1]);
-+ if (strcmp ("HELLO", strs_ret[2]) != 0)
-+ lose ("(wrapped) ManyUppercase call returned unexpected string %s", strs_ret[2]);
-+
-+ g_free (strs);
-+ g_strfreev (strs_ret);
-+ }
-+
-+ {
-+ GHashTable *table;
-+ guint len;
-+
-+ table = g_hash_table_new (g_str_hash, g_str_equal);
-+ g_hash_table_insert (table, "moooo", "b");
-+ g_hash_table_insert (table, "xxx", "cow!");
-+
-+ len = 0;
-+ g_print ("Calling (wrapped) str_hash_len\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_str_hash_len (proxy, table, &len, &error))
-+ lose_gerror ("(wrapped) StrHashLen call failed", error);
-+ if (len != 13)
-+ lose ("(wrapped) StrHashLen returned unexpected length %u", len);
-+ g_hash_table_destroy (table);
-+ }
-+
-+ {
-+ GHashTable *table;
-+ const char *val;
-+
-+ g_print ("Calling (wrapped) get_hash\n");
-+ if (!org_freedesktop_DBus_Tests_MyObject_get_hash (proxy, &table, &error))
-+ lose_gerror ("(wrapped) GetHash call failed", error);
-+ val = g_hash_table_lookup (table, "foo");
-+ if (val == NULL || strcmp ("bar", val))
-+ lose ("(wrapped) StrHashLen returned invalid value %s for key \"foo\"",
-+ val ? val : "(null)");
-+ val = g_hash_table_lookup (table, "baz");
-+ if (val == NULL || strcmp ("whee", val))
-+ lose ("(wrapped) StrHashLen returned invalid value %s for key \"whee\"",
-+ val ? val : "(null)");
-+ val = g_hash_table_lookup (table, "cow");
-+ if (val == NULL || strcmp ("crack", val))
-+ lose ("(wrapped) StrHashLen returned invalid value %s for key \"cow\"",
-+ val ? val : "(null)");
-+ if (g_hash_table_size (table) != 3)
-+ lose ("(wrapped) StrHashLen returned unexpected hash size %u",
-+ g_hash_table_size (table));
-+
-+ g_hash_table_destroy (table);
-+ }
-+
-+ run_mainloop ();
-+
-+ {
-+ GValueArray *vals;
-+ GValueArray *vals_ret;
-+ GValue *val;
-+
-+ vals = g_value_array_new (3);
-+
-+ g_value_array_append (vals, NULL);
-+ g_value_init (g_value_array_get_nth (vals, vals->n_values - 1), G_TYPE_STRING);
-+ g_value_set_string (g_value_array_get_nth (vals, 0), "foo");
-+
-+ g_value_array_append (vals, NULL);
-+ g_value_init (g_value_array_get_nth (vals, vals->n_values - 1), G_TYPE_UINT);
-+ g_value_set_uint (g_value_array_get_nth (vals, vals->n_values - 1), 42);
-+
-+ g_value_array_append (vals, NULL);
-+ g_value_init (g_value_array_get_nth (vals, vals->n_values - 1), G_TYPE_VALUE);
-+ val = g_new0 (GValue, 1);
-+ g_value_init (val, G_TYPE_UCHAR);
-+ g_value_set_uchar (val, '!');
-+ g_value_set_boxed (g_value_array_get_nth (vals, vals->n_values - 1), val);
-+
-+ vals_ret = NULL;
-+ g_print ("Calling SendCar\n");
-+ if (!dbus_g_proxy_call (proxy, "SendCar", &error,
-+ G_TYPE_VALUE_ARRAY, vals,
-+ G_TYPE_INVALID,
-+ G_TYPE_VALUE_ARRAY, &vals_ret,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete SendCar call", error);
-+
-+ g_assert (vals_ret != NULL);
-+ g_assert (vals_ret->n_values == 2);
-+
-+ g_assert (G_VALUE_HOLDS_UINT (g_value_array_get_nth (vals_ret, 0)));
-+ g_assert (g_value_get_uint (g_value_array_get_nth (vals_ret, 0)) == 43);
-+
-+ g_assert (G_VALUE_TYPE (g_value_array_get_nth (vals_ret, 1)) == DBUS_TYPE_G_OBJECT_PATH);
-+ g_assert (!strcmp ("/org/freedesktop/DBus/Tests/MyTestObject2",
-+ g_value_get_boxed (g_value_array_get_nth (vals_ret, 1))));
-+
-+ g_value_array_free (vals);
-+ g_value_array_free (vals_ret);
-+ }
-+
-+ {
-+ GValue *val;
-+ GHashTable *table;
-+ GHashTable *ret_table;
-+
-+ table = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ g_free, unset_and_free_gvalue);
-+
-+ val = g_new0 (GValue, 1);
-+ g_value_init (val, G_TYPE_UINT);
-+ g_value_set_uint (val, 42);
-+ g_hash_table_insert (table, g_strdup ("foo"), val);
-+
-+ val = g_new0 (GValue, 1);
-+ g_value_init (val, G_TYPE_STRING);
-+ g_value_set_string (val, "hello");
-+ g_hash_table_insert (table, g_strdup ("bar"), val);
-+
-+ ret_table = NULL;
-+ g_print ("Calling ManyStringify\n");
-+ if (!dbus_g_proxy_call (proxy, "ManyStringify", &error,
-+ dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), table,
-+ G_TYPE_INVALID,
-+ dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), &ret_table,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete ManyStringify call", error);
-+
-+ g_assert (ret_table != NULL);
-+ g_assert (g_hash_table_size (ret_table) == 2);
-+
-+ val = g_hash_table_lookup (ret_table, "foo");
-+ g_assert (val != NULL);
-+ g_assert (G_VALUE_HOLDS_STRING (val));
-+ g_assert (!strcmp ("42", g_value_get_string (val)));
-+
-+ val = g_hash_table_lookup (ret_table, "bar");
-+ g_assert (val != NULL);
-+ g_assert (G_VALUE_HOLDS_STRING (val));
-+ g_assert (!strcmp ("hello", g_value_get_string (val)));
-+
-+ g_hash_table_destroy (table);
-+ g_hash_table_destroy (ret_table);
-+ }
-+
-+ {
-+ GPtrArray *in_array;
-+ GPtrArray *out_array;
-+ char **strs;
-+ GArray *uints;
-+
-+ in_array = g_ptr_array_new ();
-+
-+ strs = g_new0 (char *, 3);
-+ strs[0] = "foo";
-+ strs[1] = "bar";
-+ strs[2] = NULL;
-+ g_ptr_array_add (in_array, strs);
-+
-+ strs = g_new0 (char *, 4);
-+ strs[0] = "baz";
-+ strs[1] = "whee";
-+ strs[2] = "moo";
-+ strs[3] = NULL;
-+ g_ptr_array_add (in_array, strs);
-+
-+ out_array = NULL;
-+ g_print ("Calling RecArrays\n");
-+ if (!dbus_g_proxy_call (proxy, "RecArrays", &error,
-+ dbus_g_type_get_collection ("GPtrArray", G_TYPE_STRV), in_array,
-+ G_TYPE_INVALID,
-+ dbus_g_type_get_collection ("GPtrArray",
-+ dbus_g_type_get_collection ("GPtrArray",
-+ G_TYPE_UINT)), &out_array,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete RecArrays call", error);
-+ g_free (g_ptr_array_index (in_array, 0));
-+ g_free (g_ptr_array_index (in_array, 1));
-+
-+ g_assert (out_array);
-+ g_assert (out_array->len == 2);
-+ uints = g_ptr_array_index (out_array, 0);
-+ g_assert (uints);
-+ g_assert (uints->len == 3);
-+ g_assert (g_array_index (uints, guint, 0) == 10);
-+ g_assert (g_array_index (uints, guint, 1) == 42);
-+ g_assert (g_array_index (uints, guint, 2) == 27);
-+ g_array_free (uints, TRUE);
-+ uints = g_ptr_array_index (out_array, 1);
-+ g_assert (uints);
-+ g_assert (uints->len == 1);
-+ g_assert (g_array_index (uints, guint, 0) == 30);
-+ g_array_free (uints, TRUE);
-+ g_ptr_array_free (out_array, TRUE);
-+ }
-+
-+ {
-+ guint val;
-+ char *ret_path;
-+ DBusGProxy *ret_proxy;
-+
-+ g_print ("Calling (wrapped) objpath\n");
-+ if (!dbus_g_proxy_call (proxy, "Objpath", &error,
-+ DBUS_TYPE_G_PROXY, proxy, G_TYPE_INVALID,
-+ DBUS_TYPE_G_PROXY, &ret_proxy, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Objpath call", error);
-+ if (strcmp ("/org/freedesktop/DBus/Tests/MyTestObject2",
-+ dbus_g_proxy_get_path (ret_proxy)) != 0)
-+ lose ("(wrapped) objpath call returned unexpected proxy %s",
-+ dbus_g_proxy_get_path (ret_proxy));
-+
-+ g_print ("Doing get/increment val tests\n");
-+ val = 1;
-+ if (!org_freedesktop_DBus_Tests_MyObject_get_val (ret_proxy, &val, &error))
-+ lose_gerror ("Failed to complete (wrapped) GetVal call", error);
-+ if (val != 0)
-+ lose ("(wrapped) GetVal returned invalid value %d", val);
-+
-+ if (!org_freedesktop_DBus_Tests_MyObject_increment_val (ret_proxy, &error))
-+ lose_gerror ("Failed to complete (wrapped) IncrementVal call", error);
-+
-+ if (!org_freedesktop_DBus_Tests_MyObject_increment_val (ret_proxy, &error))
-+ lose_gerror ("Failed to complete (wrapped) IncrementVal call", error);
-+
-+ if (!org_freedesktop_DBus_Tests_MyObject_increment_val (ret_proxy, &error))
-+ lose_gerror ("Failed to complete (wrapped) IncrementVal call", error);
-+
-+ if (!org_freedesktop_DBus_Tests_MyObject_get_val (ret_proxy, &val, &error))
-+ lose_gerror ("Failed to complete (wrapped) GetVal call", error);
-+ if (val != 3)
-+ lose ("(wrapped) GetVal returned invalid value %d", val);
-+
-+ if (!org_freedesktop_DBus_Tests_MyObject_get_val (proxy, &val, &error))
-+ lose_gerror ("Failed to complete (wrapped) GetVal call", error);
-+ if (val != 0)
-+ lose ("(wrapped) GetVal returned invalid value %d", val);
-+
-+ if (!org_freedesktop_DBus_Tests_MyObject_increment_val (proxy, &error))
-+ lose_gerror ("Failed to complete (wrapped) IncrementVal call", error);
-+
-+ if (!org_freedesktop_DBus_Tests_MyObject_get_val (proxy, &val, &error))
-+ lose_gerror ("Failed to complete (wrapped) GetVal call", error);
-+ if (val != 1)
-+ lose ("(wrapped) GetVal returned invalid value %d", val);
-+
-+ if (!org_freedesktop_DBus_Tests_MyObject_get_val (ret_proxy, &val, &error))
-+ lose_gerror ("Failed to complete (wrapped) GetVal call", error);
-+ if (val != 3)
-+ lose ("(wrapped) GetVal returned invalid value %d", val);
-+
-+ g_object_unref (G_OBJECT (ret_proxy));
-+
-+ g_print ("Calling objpath again\n");
-+ ret_proxy = NULL;
-+
-+ if (!dbus_g_proxy_call (proxy, "Objpath", &error,
-+ DBUS_TYPE_G_OBJECT_PATH,
-+ dbus_g_proxy_get_path (proxy),
-+ G_TYPE_INVALID,
-+ DBUS_TYPE_G_OBJECT_PATH,
-+ &ret_path,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Objpath call 2", error);
-+ if (strcmp ("/org/freedesktop/DBus/Tests/MyTestObject2", ret_path) != 0)
-+ lose ("Objpath call 2 returned unexpected path %s",
-+ ret_path);
-+
-+ ret_proxy = dbus_g_proxy_new_for_name_owner (connection,
-+ "org.freedesktop.DBus.TestSuiteGLibService",
-+ ret_path,
-+ "org.freedesktop.DBus.Tests.FooObject",
-+ &error);
-+ g_free (ret_path);
-+
-+ val = 0;
-+ if (!org_freedesktop_DBus_Tests_FooObject_get_value (ret_proxy, &val, &error))
-+ lose_gerror ("Failed to complete (wrapped) GetValue call", error);
-+ if (val != 3)
-+ lose ("(wrapped) GetValue returned invalid value %d", val);
-+ }
-+
-+ run_mainloop ();
-+
-+ {
-+ GPtrArray *objs;
-+ guint i;
-+
-+ g_print ("Calling GetObjs\n");
-+
-+ if (!dbus_g_proxy_call (proxy, "GetObjs", &error, G_TYPE_INVALID,
-+ dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH),
-+ &objs,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete GetObjs call", error);
-+ if (objs->len != 2)
-+ lose ("GetObjs call returned unexpected number of objects %d, expected 2",
-+ objs->len);
-+
-+ if (strcmp ("/org/freedesktop/DBus/Tests/MyTestObject",
-+ g_ptr_array_index (objs, 0)) != 0)
-+ lose ("GetObjs call returned unexpected path \"%s\" in position 0; expected /org/freedesktop/DBus/Tests/MyTestObject", (char*) g_ptr_array_index (objs, 0));
-+
-+ if (strcmp ("/org/freedesktop/DBus/Tests/MyTestObject2",
-+ g_ptr_array_index (objs, 1)) != 0)
-+ lose ("GetObjs call returned unexpected path \"%s\" in position 1; expected /org/freedesktop/DBus/Tests/MyTestObject2", (char*) g_ptr_array_index (objs, 1));
-+
-+ for (i = 0; i < objs->len; i++)
-+ g_free (g_ptr_array_index (objs, i));
-+ g_ptr_array_free (objs, TRUE);
-+ }
-+
-+ {
-+ GValue *variant;
-+ GArray *array;
-+ gint i;
-+
-+ g_print ("Calling ProcessVariantOfArrayOfInts123\n");
-+
-+ array = g_array_sized_new (FALSE, FALSE, sizeof(gint), 3);
-+ i = 1;
-+ g_array_append_val (array, i);
-+ i++;
-+ g_array_append_val (array, i);
-+ i++;
-+ g_array_append_val (array, i);
-+
-+ variant = g_new0 (GValue, 1);
-+ g_value_init (variant, dbus_g_type_get_collection ("GArray", G_TYPE_INT));
-+ g_value_set_boxed_take_ownership (variant, array);
-+
-+ if (!dbus_g_proxy_call (proxy, "ProcessVariantOfArrayOfInts123", &error,
-+ G_TYPE_VALUE, variant,
-+ G_TYPE_INVALID,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to send a vairant of array of ints 1, 2 and 3!", error);
-+
-+ g_value_unset (variant);
-+ }
-+
-+ for (i=0; i<3; i++)
-+ {
-+ gchar *val;
-+ GHashTable *table;
-+ GHashTable *subtable;
-+ GHashTable *ret_table;
-+
-+ table = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ (GDestroyNotify) (g_free),
-+ (GDestroyNotify) (g_hash_table_destroy));
-+
-+ subtable = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ (GDestroyNotify) (g_free),
-+ (GDestroyNotify) (g_free));
-+ g_hash_table_insert (subtable, g_strdup ("foo"), g_strdup("1"));
-+ g_hash_table_insert (subtable, g_strdup ("bar"), g_strdup("2"));
-+ g_hash_table_insert (subtable, g_strdup ("baz"), g_strdup("3"));
-+
-+ g_hash_table_insert (table, g_strdup("dict1"), subtable);
-+
-+ subtable = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ (GDestroyNotify) (g_free),
-+ (GDestroyNotify) (g_free));
-+ g_hash_table_insert (subtable, g_strdup ("foo"), g_strdup("4"));
-+ g_hash_table_insert (subtable, g_strdup ("bar"), g_strdup("5"));
-+ g_hash_table_insert (subtable, g_strdup ("baz"), g_strdup("6"));
-+
-+ g_hash_table_insert (table, g_strdup("dict2"), subtable);
-+
-+ subtable = NULL;
-+
-+ ret_table = NULL;
-+
-+ g_print ("Calling DictOfDicts\n");
-+ if (!dbus_g_proxy_call (proxy, "DictOfDicts", &error,
-+ dbus_g_type_get_map ("GHashTable", G_TYPE_STRING,
-+ dbus_g_type_get_map ("GHashTable", G_TYPE_STRING,
-+ G_TYPE_STRING)), table,
-+ G_TYPE_INVALID,
-+ dbus_g_type_get_map ("GHashTable", G_TYPE_STRING,
-+ dbus_g_type_get_map ("GHashTable", G_TYPE_STRING,
-+ G_TYPE_STRING)), &ret_table,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete DictOfDicts call", error);
-+
-+ g_assert (ret_table != NULL);
-+ g_assert (g_hash_table_size (ret_table) == 2);
-+
-+ subtable = g_hash_table_lookup (ret_table, "dict1");
-+ g_assert(subtable);
-+ g_assert (g_hash_table_size (subtable) == 3);
-+
-+ val = g_hash_table_lookup (subtable, "foo");
-+ g_assert (val != NULL);
-+ g_assert (!strcmp ("dict1 1", val));
-+
-+ val = g_hash_table_lookup (subtable, "bar");
-+ g_assert (val != NULL);
-+ g_assert (!strcmp ("dict1 2", val));
-+
-+ val = g_hash_table_lookup (subtable, "baz");
-+ g_assert (val != NULL);
-+ g_assert (!strcmp ("dict1 3", val));
-+
-+ subtable = g_hash_table_lookup (ret_table, "dict2");
-+ g_assert(subtable);
-+ g_assert (g_hash_table_size (subtable) == 3);
-+
-+ val = g_hash_table_lookup (subtable, "foo");
-+ g_assert (val != NULL);
-+ g_assert (!strcmp ("dict2 4", val));
-+
-+ val = g_hash_table_lookup (subtable, "bar");
-+ g_assert (val != NULL);
-+ g_assert (!strcmp ("dict2 5", val));
-+
-+ val = g_hash_table_lookup (subtable, "baz");
-+ g_assert (val != NULL);
-+ g_assert (!strcmp ("dict2 6", val));
-+
-+ g_hash_table_destroy (table);
-+ g_hash_table_destroy (ret_table);
-+
-+ g_mem_profile ();
-+ }
-+
-+
-+
-+ /* Signal handling tests */
-+
-+ g_print ("Testing signal handling\n");
-+ dbus_g_proxy_add_signal (proxy, "Frobnicate", G_TYPE_INT, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (proxy, "Frobnicate",
-+ G_CALLBACK (frobnicate_signal_handler),
-+ NULL, NULL);
-+
-+ g_print ("Calling EmitFrobnicate\n");
-+ if (!dbus_g_proxy_call (proxy, "EmitFrobnicate", &error,
-+ G_TYPE_INVALID, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete EmitFrobnicate call", error);
-+
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_frobnicate_received != 1)
-+ lose ("Frobnicate signal received %d times, should have been 1", n_times_frobnicate_received);
-+
-+ g_print ("Calling EmitFrobnicate again\n");
-+ if (!dbus_g_proxy_call (proxy, "EmitFrobnicate", &error,
-+ G_TYPE_INVALID, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete EmitFrobnicate call", error);
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_frobnicate_received != 2)
-+ lose ("Frobnicate signal received %d times, should have been 2", n_times_frobnicate_received);
-+
-+ g_object_unref (G_OBJECT (proxy));
-+
-+ run_mainloop ();
-+
-+ g_print ("Creating proxy for FooObject interface\n");
-+ proxy = dbus_g_proxy_new_for_name_owner (connection,
-+ "org.freedesktop.DBus.TestSuiteGLibService",
-+ "/org/freedesktop/DBus/Tests/MyTestObject",
-+ "org.freedesktop.DBus.Tests.FooObject",
-+ &error);
-+
-+ if (proxy == NULL)
-+ lose_gerror ("Failed to create proxy for name owner", error);
-+
-+ dbus_g_object_register_marshaller (my_object_marshal_VOID__STRING_INT_STRING,
-+ G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INVALID);
-+
-+ dbus_g_object_register_marshaller (my_object_marshal_VOID__STRING_BOXED,
-+ G_TYPE_NONE, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_add_signal (proxy, "Sig0", G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INVALID);
-+ dbus_g_proxy_add_signal (proxy, "Sig1", G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
-+ dbus_g_proxy_add_signal (proxy, "Sig2", DBUS_TYPE_G_STRING_STRING_HASHTABLE, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (proxy, "Sig0",
-+ G_CALLBACK (sig0_signal_handler),
-+ NULL, NULL);
-+ dbus_g_proxy_connect_signal (proxy, "Sig1",
-+ G_CALLBACK (sig1_signal_handler),
-+ NULL, NULL);
-+ dbus_g_proxy_connect_signal (proxy, "Sig2",
-+ G_CALLBACK (sig2_signal_handler),
-+ NULL, NULL);
-+
-+ g_print ("Calling FooObject EmitSignals\n");
-+ dbus_g_proxy_call_no_reply (proxy, "EmitSignals", G_TYPE_INVALID);
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_sig0_received != 1)
-+ lose ("Sig0 signal received %d times, should have been 1", n_times_sig0_received);
-+ if (n_times_sig1_received != 1)
-+ lose ("Sig1 signal received %d times, should have been 1", n_times_sig1_received);
-+
-+ g_print ("Calling FooObject EmitSignals and EmitSignal2\n");
-+ dbus_g_proxy_call_no_reply (proxy, "EmitSignal2", G_TYPE_INVALID);
-+ dbus_g_connection_flush (connection);
-+
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_sig2_received != 1)
-+ lose ("Sig2 signal received %d times, should have been 1", n_times_sig2_received);
-+
-+ g_print ("Calling FooObject EmitSignals two more times\n");
-+ dbus_g_proxy_call_no_reply (proxy, "EmitSignals", G_TYPE_INVALID);
-+ dbus_g_proxy_call_no_reply (proxy, "EmitSignals", G_TYPE_INVALID);
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_sig0_received != 3)
-+ lose ("Sig0 signal received %d times, should have been 3", n_times_sig0_received);
-+ if (n_times_sig1_received != 3)
-+ lose ("Sig1 signal received %d times, should have been 3", n_times_sig1_received);
-+
-+ /* Terminate again */
-+ g_print ("Terminating service\n");
-+ await_terminating_service = "org.freedesktop.DBus.TestSuiteGLibService";
-+ dbus_g_proxy_call_no_reply (proxy, "Terminate", G_TYPE_INVALID);
-+
-+ proxy_destroyed = FALSE;
-+ proxy_destroy_and_nameowner = TRUE;
-+ proxy_destroy_and_nameowner_complete = FALSE;
-+
-+ g_signal_connect (G_OBJECT (proxy),
-+ "destroy",
-+ G_CALLBACK (proxy_destroyed_cb),
-+ NULL);
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (await_terminating_service != NULL)
-+ lose ("Didn't see name loss for \"org.freedesktop.DBus.TestSuiteGLibService\"");
-+ if (!proxy_destroyed)
-+ lose ("Didn't get proxy_destroyed");
-+ g_print ("Proxy destroyed successfully\n");
-+
-+ /* Don't need to unref, proxy was destroyed */
-+
-+ run_mainloop ();
-+
-+ /* Create a new proxy for the name; should not be associated */
-+ proxy = dbus_g_proxy_new_for_name (connection,
-+ "org.freedesktop.DBus.TestSuiteGLibService",
-+ "/org/freedesktop/DBus/Tests/MyTestObject",
-+ "org.freedesktop.DBus.Tests.MyObject");
-+ g_assert (proxy != NULL);
-+
-+ proxy_destroyed = FALSE;
-+ proxy_destroy_and_nameowner = FALSE;
-+ proxy_destroy_and_nameowner_complete = FALSE;
-+
-+ g_signal_connect (G_OBJECT (proxy),
-+ "destroy",
-+ G_CALLBACK (proxy_destroyed_cb),
-+ NULL);
-+
-+ if (!dbus_g_proxy_call (driver, "GetNameOwner", &error,
-+ G_TYPE_STRING,
-+ "org.freedesktop.DBus.TestSuiteGLibService",
-+ G_TYPE_INVALID,
-+ G_TYPE_STRING,
-+ &v_STRING_2,
-+ G_TYPE_INVALID)) {
-+ if (error->domain == DBUS_GERROR && error->code == DBUS_GERROR_NAME_HAS_NO_OWNER)
-+ g_print ("Got expected error \"org.freedesktop.DBus.Error.NameHasNoOwner\"\n");
-+ else
-+ lose_gerror ("Unexpected error from GetNameOwner", error);
-+ } else
-+ lose ("GetNameOwner unexpectedly succeeded!");
-+ g_clear_error (&error);
-+
-+ /* This will have the side-effect of activating the service, thus
-+ * causing a NameOwnerChanged, which should let our name proxy
-+ * get signals
-+ */
-+ g_print ("Calling Uppercase for name proxy\n");
-+ if (!dbus_g_proxy_call (proxy, "Uppercase", &error,
-+ G_TYPE_STRING, "bazwhee",
-+ G_TYPE_INVALID,
-+ G_TYPE_STRING, &v_STRING_2,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Uppercase call", error);
-+ g_free (v_STRING_2);
-+
-+ if (getenv ("DBUS_GLIB_TEST_SLEEP_AFTER_ACTIVATION1"))
-+ g_usleep (8 * G_USEC_PER_SEC);
-+
-+ dbus_g_proxy_add_signal (proxy, "Frobnicate", G_TYPE_INT, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (proxy, "Frobnicate",
-+ G_CALLBACK (frobnicate_signal_handler),
-+ NULL, NULL);
-+
-+ g_print ("Calling EmitFrobnicate\n");
-+ if (!dbus_g_proxy_call (proxy, "EmitFrobnicate", &error,
-+ G_TYPE_INVALID, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete EmitFrobnicate call", error);
-+
-+ n_times_frobnicate_received = 0;
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_frobnicate_received != 1)
-+ lose ("Frobnicate signal received %d times, should have been 1", n_times_frobnicate_received);
-+
-+ /* Now terminate the service, then start it again (implicitly) and wait for signals */
-+ g_print ("Terminating service (2)\n");
-+ await_terminating_service = "org.freedesktop.DBus.TestSuiteGLibService";
-+ dbus_g_proxy_call_no_reply (proxy, "Terminate", G_TYPE_INVALID);
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+ if (await_terminating_service != NULL)
-+ lose ("Didn't see name loss for \"org.freedesktop.DBus.TestSuiteGLibService\"");
-+
-+ if (proxy_destroyed)
-+ lose ("Unexpectedly got proxy_destroyed!");
-+
-+ n_times_frobnicate_received = 0;
-+
-+ g_print ("Calling EmitFrobnicate (2)\n");
-+ if (!dbus_g_proxy_call (proxy, "EmitFrobnicate", &error,
-+ G_TYPE_INVALID, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete EmitFrobnicate call", error);
-+
-+ if (getenv ("DBUS_GLIB_TEST_SLEEP_AFTER_ACTIVATION2"))
-+ g_usleep (8 * G_USEC_PER_SEC);
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_frobnicate_received != 1)
-+ lose ("Frobnicate signal received %d times, should have been 1", n_times_frobnicate_received);
-+
-+ if (proxy_destroyed)
-+ lose ("Unexpectedly got proxy_destroyed!");
-+
-+ /* Create another proxy for the name; should be associated immediately */
-+ proxy2 = dbus_g_proxy_new_for_name (connection,
-+ "org.freedesktop.DBus.TestSuiteGLibService",
-+ "/org/freedesktop/DBus/Tests/MyTestObject",
-+ "org.freedesktop.DBus.Tests.MyObject");
-+ g_assert (proxy2 != NULL);
-+
-+ dbus_g_proxy_add_signal (proxy2, "Frobnicate", G_TYPE_INT, G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (proxy2, "Frobnicate",
-+ G_CALLBACK (frobnicate_signal_handler_2),
-+ NULL, NULL);
-+
-+ g_print ("Calling EmitFrobnicate (3)\n");
-+ if (!dbus_g_proxy_call (proxy, "EmitFrobnicate", &error,
-+ G_TYPE_INVALID, G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete EmitFrobnicate call", error);
-+
-+ dbus_g_connection_flush (connection);
-+ exit_timeout = g_timeout_add (5000, timed_exit, loop);
-+ g_main_loop_run (loop);
-+
-+ if (n_times_frobnicate_received != 2)
-+ lose ("Frobnicate signal received %d times for 1st proxy, should have been 2", n_times_frobnicate_received);
-+ if (n_times_frobnicate_received_2 != 1)
-+ lose ("Frobnicate signal received %d times for 2nd proxy, should have been 1", n_times_frobnicate_received_2);
-+
-+ g_object_unref (G_OBJECT (proxy));
-+ g_object_unref (G_OBJECT (proxy2));
-+
-+ run_mainloop ();
-+
-+ /* Test introspection */
-+ proxy = dbus_g_proxy_new_for_name_owner (connection,
-+ "org.freedesktop.DBus.TestSuiteGLibService",
-+ "/org/freedesktop/DBus/Tests/MyTestObject",
-+ "org.freedesktop.DBus.Introspectable",
-+ &error);
-+ if (proxy == NULL)
-+ lose_gerror ("Failed to create proxy for name owner", error);
-+
-+ g_print ("Testing introspect\n");
-+ if (!dbus_g_proxy_call (proxy, "Introspect", &error,
-+ G_TYPE_INVALID,
-+ G_TYPE_STRING, &v_STRING_2,
-+ G_TYPE_INVALID))
-+ lose_gerror ("Failed to complete Introspect call", error);
-+
-+ /* Could just do strcmp(), but that seems more fragile */
-+ {
-+ NodeInfo *node;
-+ GSList *elt;
-+ gboolean found_introspectable;
-+ gboolean found_properties;
-+ gboolean found_myobject;
-+ gboolean found_fooobject;
-+
-+ node = description_load_from_string (v_STRING_2, strlen (v_STRING_2), &error);
-+ if (!node)
-+ lose_gerror ("Failed to parse introspection data: %s", error);
-+
-+ found_introspectable = FALSE;
-+ found_properties = FALSE;
-+ found_myobject = FALSE;
-+ found_fooobject = FALSE;
-+ for (elt = node_info_get_interfaces (node); elt ; elt = elt->next)
-+ {
-+ InterfaceInfo *iface = elt->data;
-+
-+ if (!found_introspectable && strcmp (interface_info_get_name (iface), "org.freedesktop.DBus.Introspectable") == 0)
-+ found_introspectable = TRUE;
-+ else if (!found_properties && strcmp (interface_info_get_name (iface), "org.freedesktop.DBus.Properties") == 0)
-+ found_properties = TRUE;
-+ else if (!found_myobject && strcmp (interface_info_get_name (iface), "org.freedesktop.DBus.Tests.MyObject") == 0)
-+ {
-+ GSList *elt;
-+ gboolean found_manyargs;
-+
-+ found_myobject = TRUE;
-+
-+ found_manyargs = FALSE;
-+ for (elt = interface_info_get_methods (iface); elt; elt = elt->next)
-+ {
-+ MethodInfo *method;
-+
-+ method = elt->data;
-+ if (strcmp (method_info_get_name (method), "ManyArgs") == 0)
-+ {
-+ found_manyargs = TRUE;
-+ break;
-+ }
-+ }
-+ if (!found_manyargs)
-+ lose ("Missing method org.freedesktop.DBus.Tests.MyObject.ManyArgs");
-+ }
-+ else if (!found_fooobject && strcmp (interface_info_get_name (iface), "org.freedesktop.DBus.Tests.FooObject") == 0)
-+ found_fooobject = TRUE;
-+ else
-+ lose ("Unexpected or duplicate interface %s", interface_info_get_name (iface));
-+ }
-+
-+ if (!(found_introspectable && found_myobject && found_properties))
-+ lose ("Missing interface");
-+ }
-+ g_free (v_STRING_2);
-+
-+ g_object_unref (G_OBJECT (driver));
-+
-+ g_print ("Successfully completed %s\n", argv[0]);
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/glib/test-profile.c dbus-0.61/test/glib/test-profile.c
---- dbus-0.61.orig/test/glib/test-profile.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/test-profile.c 2005-08-03 19:42:56.000000000 +0200
-@@ -0,0 +1,1150 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* test-profile.c Program that does basic message-response for timing; doesn't really use glib bindings
-+ *
-+ * Copyright (C) 2003, 2004 Red Hat Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <config.h>
-+#include <glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <netinet/in.h>
-+#include <string.h>
-+#include <sys/time.h>
-+#include <sys/stat.h>
-+#ifndef HAVE_SOCKLEN_T
-+#define socklen_t int
-+#endif
-+
-+#define _DBUS_ZERO(object) (memset (&(object), '\0', sizeof ((object))))
-+#define _DBUS_MAX_SUN_PATH_LENGTH 99
-+
-+/* Note that if you set threads > 1 you get a bogus profile since the
-+ * clients start blocking on the server, so the client write() will go
-+ * higher in the profile the larger the number of threads.
-+ */
-+#define N_CLIENT_THREADS 1
-+/* It seems like at least 750000 or so iterations reduces the variability to sane levels */
-+#define N_ITERATIONS 2000
-+#define N_PROGRESS_UPDATES 20
-+/* Don't make PAYLOAD_SIZE too huge because it gets used as a static buffer size */
-+#define PAYLOAD_SIZE 0
-+
-+#define ECHO_SERVICE "org.freedesktop.EchoTestServer"
-+#define ECHO_PATH "/org/freedesktop/EchoTest"
-+#define ECHO_INTERFACE "org.freedesktop.EchoTest"
-+#define ECHO_PING_METHOD "Ping"
-+
-+static const char *messages_address;
-+static const char *plain_sockets_address;
-+static unsigned char *payload;
-+static int echo_call_size;
-+static int echo_return_size;
-+
-+typedef struct ProfileRunVTable ProfileRunVTable;
-+
-+typedef struct
-+{
-+ const ProfileRunVTable *vtable;
-+ int iterations;
-+ GMainLoop *loop;
-+} ClientData;
-+
-+typedef struct
-+{
-+ const ProfileRunVTable *vtable;
-+ int handled;
-+ GMainLoop *loop;
-+ int n_clients;
-+} ServerData;
-+
-+struct ProfileRunVTable
-+{
-+ const char *name;
-+ gboolean fake_malloc_overhead;
-+ void* (* init_server) (ServerData *sd);
-+ void (* stop_server) (ServerData *sd,
-+ void *server);
-+ void* (* client_thread_func) (void *data); /* Data has to be the vtable */
-+
-+ /* this is so different runs show up in the profiler with
-+ * different backtrace
-+ */
-+ void (* main_loop_run_func) (GMainLoop *loop);
-+};
-+
-+/* Note, this is all crack-a-rific; it isn't using DBusGProxy and thus is
-+ * a major pain
-+ */
-+static void
-+send_echo_method_call (DBusConnection *connection)
-+{
-+ DBusMessage *message;
-+ const char *hello = "Hello World!";
-+ dbus_int32_t i32 = 123456;
-+
-+ message = dbus_message_new_method_call (ECHO_SERVICE,
-+ ECHO_PATH,
-+ ECHO_INTERFACE,
-+ ECHO_PING_METHOD);
-+ dbus_message_append_args (message,
-+ DBUS_TYPE_STRING, &hello,
-+ DBUS_TYPE_INT32, &i32,
-+#if PAYLOAD_SIZE > 0
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
-+ &payload, PAYLOAD_SIZE,
-+#endif
-+ DBUS_TYPE_INVALID);
-+
-+ dbus_connection_send (connection, message, NULL);
-+ dbus_message_unref (message);
-+ dbus_connection_flush (connection);
-+}
-+
-+static void
-+send_echo_method_return (DBusConnection *connection,
-+ DBusMessage *call_message)
-+{
-+ DBusMessage *message;
-+
-+ message = dbus_message_new_method_return (call_message);
-+
-+ dbus_connection_send (connection, message, NULL);
-+ dbus_message_unref (message);
-+ dbus_connection_flush (connection);
-+}
-+
-+static DBusHandlerResult
-+with_or_without_bus_client_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ ClientData *cd)
-+{
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ {
-+ g_printerr ("Client thread disconnected\n");
-+ exit (1);
-+ }
-+ else if (dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_RETURN)
-+ {
-+ cd->iterations += 1;
-+ if (cd->iterations >= N_ITERATIONS)
-+ {
-+ g_printerr ("\nCompleted %d iterations\n", N_ITERATIONS);
-+ g_main_loop_quit (cd->loop);
-+ }
-+ else if (cd->iterations % (N_ITERATIONS/N_PROGRESS_UPDATES) == 0)
-+ {
-+ g_printerr ("%d%% ", (int) (cd->iterations/(double)N_ITERATIONS * 100.0));
-+ }
-+
-+ send_echo_method_call (connection);
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static DBusHandlerResult
-+no_bus_client_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ ClientData *cd = user_data;
-+
-+ return with_or_without_bus_client_filter (connection, message, cd);
-+}
-+
-+static void*
-+no_bus_thread_func (void *data)
-+{
-+ DBusError error;
-+ GMainContext *context;
-+ DBusConnection *connection;
-+ ClientData cd;
-+
-+ g_printerr ("Starting client thread %p\n", g_thread_self());
-+
-+ dbus_error_init (&error);
-+ connection = dbus_connection_open_private (messages_address, &error);
-+ if (connection == NULL)
-+ {
-+ g_printerr ("could not open connection: %s\n", error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ context = g_main_context_new ();
-+
-+ cd.iterations = 1;
-+ cd.loop = g_main_loop_new (context, FALSE);
-+
-+ if (!dbus_connection_add_filter (connection,
-+ no_bus_client_filter, &cd, NULL))
-+ g_error ("no memory");
-+
-+
-+ dbus_connection_setup_with_g_main (connection, context);
-+
-+ g_printerr ("Client thread sending message to prime pingpong\n");
-+ send_echo_method_call (connection);
-+ g_printerr ("Client thread sent message\n");
-+
-+ g_printerr ("Client thread entering main loop\n");
-+ g_main_loop_run (cd.loop);
-+ g_printerr ("Client thread %p exiting main loop\n",
-+ g_thread_self());
-+
-+ dbus_connection_close (connection);
-+
-+ g_main_loop_unref (cd.loop);
-+ g_main_context_unref (context);
-+
-+ return NULL;
-+}
-+
-+static DBusHandlerResult
-+no_bus_server_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ ServerData *sd = user_data;
-+
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ {
-+ g_printerr ("Client disconnected from server\n");
-+ sd->n_clients -= 1;
-+ if (sd->n_clients == 0)
-+ g_main_loop_quit (sd->loop);
-+ }
-+ else if (dbus_message_is_method_call (message,
-+ ECHO_INTERFACE,
-+ ECHO_PING_METHOD))
-+ {
-+ sd->handled += 1;
-+ send_echo_method_return (connection, message);
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static void
-+no_bus_new_connection_callback (DBusServer *server,
-+ DBusConnection *new_connection,
-+ void *user_data)
-+{
-+ ServerData *sd = user_data;
-+
-+ dbus_connection_ref (new_connection);
-+ dbus_connection_setup_with_g_main (new_connection, NULL);
-+
-+ if (!dbus_connection_add_filter (new_connection,
-+ no_bus_server_filter, sd, NULL))
-+ g_error ("no memory");
-+
-+ sd->n_clients += 1;
-+
-+ /* FIXME we leak the handler */
-+}
-+
-+static void*
-+no_bus_init_server (ServerData *sd)
-+{
-+ DBusServer *server;
-+ DBusError error;
-+
-+ dbus_error_init (&error);
-+ server = dbus_server_listen ("unix:tmpdir="DBUS_TEST_SOCKET_DIR,
-+ &error);
-+ if (server == NULL)
-+ {
-+ g_printerr ("Could not start server: %s\n",
-+ error.message);
-+ exit (1);
-+ }
-+
-+ messages_address = dbus_server_get_address (server);
-+
-+ dbus_server_set_new_connection_function (server,
-+ no_bus_new_connection_callback,
-+ sd, NULL);
-+
-+ dbus_server_setup_with_g_main (server, NULL);
-+
-+ return server;
-+}
-+
-+static void
-+no_bus_stop_server (ServerData *sd,
-+ void *server)
-+{
-+ dbus_server_disconnect (server);
-+ dbus_server_unref (server);
-+}
-+
-+static void
-+no_bus_main_loop_run (GMainLoop *loop)
-+{
-+ g_main_loop_run (loop);
-+}
-+
-+static const ProfileRunVTable no_bus_vtable = {
-+ "dbus direct without bus",
-+ FALSE,
-+ no_bus_init_server,
-+ no_bus_stop_server,
-+ no_bus_thread_func,
-+ no_bus_main_loop_run
-+};
-+
-+typedef struct
-+{
-+ const ProfileRunVTable *vtable;
-+ ServerData *sd;
-+ GHashTable *client_names;
-+ DBusConnection *connection;
-+} WithBusServer;
-+
-+static DBusHandlerResult
-+with_bus_client_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ ClientData *cd = user_data;
-+
-+ return with_or_without_bus_client_filter (connection, message, cd);
-+}
-+
-+static void*
-+with_bus_thread_func (void *data)
-+{
-+ DBusError error;
-+ DBusConnection *connection;
-+ ClientData cd;
-+ const char *address;
-+ GMainContext *context;
-+
-+ g_printerr ("Starting client thread %p\n", g_thread_self());
-+
-+ address = g_getenv ("DBUS_SESSION_BUS_ADDRESS");
-+ if (address == NULL)
-+ {
-+ g_printerr ("DBUS_SESSION_BUS_ADDRESS not set\n");
-+ exit (1);
-+ }
-+
-+ dbus_error_init (&error);
-+ connection = dbus_connection_open_private (address, &error);
-+ if (connection == NULL)
-+ {
-+ g_printerr ("could not open connection to bus: %s\n", error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ if (!dbus_bus_register (connection, &error))
-+ {
-+ g_printerr ("could not register with bus: %s\n", error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ context = g_main_context_new ();
-+
-+ cd.iterations = 1;
-+ cd.loop = g_main_loop_new (context, FALSE);
-+
-+ if (!dbus_connection_add_filter (connection,
-+ with_bus_client_filter, &cd, NULL))
-+ g_error ("no memory");
-+
-+ dbus_connection_setup_with_g_main (connection, context);
-+
-+ g_printerr ("Client thread sending message to prime pingpong\n");
-+ send_echo_method_call (connection);
-+ g_printerr ("Client thread sent message\n");
-+
-+ g_printerr ("Client thread entering main loop\n");
-+ g_main_loop_run (cd.loop);
-+ g_printerr ("Client thread %p exiting main loop\n",
-+ g_thread_self());
-+
-+ dbus_connection_close (connection);
-+
-+ g_main_loop_unref (cd.loop);
-+ g_main_context_unref (context);
-+
-+ return NULL;
-+}
-+
-+static DBusHandlerResult
-+with_bus_server_filter (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ WithBusServer *server = user_data;
-+
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ {
-+ g_printerr ("Server disconnected from message bus\n");
-+ exit (1);
-+ }
-+ else if (dbus_message_has_sender (message,
-+ DBUS_SERVICE_DBUS) &&
-+ dbus_message_is_signal (message,
-+ DBUS_INTERFACE_DBUS,
-+ "NameOwnerChanged"))
-+ {
-+ const char *name, *old_owner, *new_owner;
-+ DBusError error;
-+
-+ name = NULL;
-+ old_owner = NULL;
-+ new_owner = NULL;
-+
-+ dbus_error_init (&error);
-+ if (!dbus_message_get_args (message,
-+ &error,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_STRING, &old_owner,
-+ DBUS_TYPE_STRING, &new_owner,
-+ DBUS_TYPE_INVALID))
-+ {
-+ g_printerr ("dbus_message_get_args(): %s\n", error.message);
-+ exit (1);
-+ }
-+
-+ if (g_hash_table_lookup (server->client_names,
-+ name) &&
-+ *old_owner != '\0' &&
-+ *new_owner == '\0')
-+ {
-+ g_hash_table_remove (server->client_names,
-+ name);
-+ server->sd->n_clients -= 1;
-+ if (server->sd->n_clients == 0)
-+ g_main_loop_quit (server->sd->loop);
-+ }
-+ }
-+ else if (dbus_message_is_method_call (message,
-+ ECHO_INTERFACE,
-+ ECHO_PING_METHOD))
-+ {
-+ const char *sender;
-+
-+ sender = dbus_message_get_sender (message);
-+
-+ if (!g_hash_table_lookup (server->client_names,
-+ sender))
-+ {
-+ g_printerr ("First message from new client %s on bus\n", sender);
-+
-+ g_hash_table_replace (server->client_names,
-+ g_strdup (sender),
-+ GINT_TO_POINTER (1));
-+ server->sd->n_clients += 1;
-+ }
-+
-+ server->sd->handled += 1;
-+ send_echo_method_return (connection, message);
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static void*
-+with_bus_init_server (ServerData *sd)
-+{
-+ DBusGConnection *gconnection;
-+ DBusConnection *connection;
-+ GError *gerror;
-+ const char *s;
-+ WithBusServer *server;
-+ char *rule;
-+
-+ server = g_new0 (WithBusServer, 1);
-+
-+ server->vtable = sd->vtable;
-+ server->sd = sd;
-+
-+ s = g_getenv ("DBUS_TEST_GLIB_RUN_TEST_SCRIPT");
-+ if (s == NULL ||
-+ *s != '1')
-+ {
-+ g_printerr ("You have to run with_bus mode with the run-test.sh script\n");
-+ exit (1);
-+ }
-+
-+ /* Note that we use the standard global bus connection for the
-+ * server, and the clients open their own connections so they can
-+ * have their own main loops and because I'm not sure "talking to
-+ * yourself" really works yet
-+ */
-+ gerror = NULL;
-+ gconnection = dbus_g_bus_get (DBUS_BUS_SESSION, &gerror);
-+ if (gconnection == NULL)
-+ {
-+ g_printerr ("could not open connection to bus: %s\n", gerror->message);
-+ g_error_free (gerror);
-+ exit (1);
-+ }
-+
-+ server->client_names = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ g_free, NULL);
-+
-+ connection = dbus_g_connection_get_connection (gconnection);
-+
-+ dbus_bus_request_name (connection,
-+ ECHO_SERVICE,
-+ 0, NULL); /* ignore errors because we suck */
-+
-+ rule = g_strdup_printf ("type='signal',sender='%s',member='%s'",
-+ DBUS_SERVICE_DBUS,
-+ "NameOwnerChanged");
-+
-+ /* ignore errors because we suck */
-+ dbus_bus_add_match (connection, rule, NULL);
-+
-+ g_free (rule);
-+
-+ if (!dbus_connection_add_filter (connection,
-+ with_bus_server_filter, server, NULL))
-+ g_error ("no memory");
-+
-+ server->connection = connection;
-+ server->client_names = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ g_free, NULL);
-+
-+ return server;
-+}
-+
-+static void
-+with_bus_stop_server (ServerData *sd,
-+ void *serverv)
-+{
-+ WithBusServer *server = serverv;
-+
-+ dbus_connection_remove_filter (server->connection,
-+ with_bus_server_filter, server);
-+
-+ g_hash_table_destroy (server->client_names);
-+ dbus_connection_unref (server->connection);
-+
-+ g_free (server);
-+}
-+
-+static void
-+with_bus_main_loop_run (GMainLoop *loop)
-+{
-+ g_main_loop_run (loop);
-+}
-+
-+static const ProfileRunVTable with_bus_vtable = {
-+ "routing via a bus",
-+ FALSE,
-+ with_bus_init_server,
-+ with_bus_stop_server,
-+ with_bus_thread_func,
-+ with_bus_main_loop_run
-+};
-+
-+
-+typedef struct
-+{
-+ const ProfileRunVTable *vtable;
-+ int listen_fd;
-+ ServerData *sd;
-+ unsigned int source_id;
-+} PlainSocketServer;
-+
-+static void
-+read_and_drop_on_floor (int fd,
-+ int count,
-+ gboolean fake_malloc_overhead)
-+{
-+ int bytes_read;
-+ int val;
-+ char *buf;
-+ char *allocated;
-+ char not_allocated[512+PAYLOAD_SIZE];
-+
-+ g_assert (count < (int) sizeof(not_allocated));
-+
-+ if (fake_malloc_overhead)
-+ {
-+ allocated = g_malloc (count);
-+ buf = allocated;
-+ }
-+ else
-+ {
-+ allocated = NULL;
-+ buf = not_allocated;
-+ }
-+
-+ bytes_read = 0;
-+
-+ while (bytes_read < count)
-+ {
-+ again:
-+
-+ val = read (fd, buf + bytes_read, count - bytes_read);
-+
-+ if (val < 0)
-+ {
-+ if (errno == EINTR)
-+ goto again;
-+ else
-+ {
-+ g_printerr ("read() failed thread %p: %s\n",
-+ g_thread_self(), strerror (errno));
-+ exit (1);
-+ }
-+ }
-+ else
-+ {
-+ bytes_read += val;
-+ }
-+ }
-+
-+ if (fake_malloc_overhead)
-+ g_free (allocated);
-+
-+#if 0
-+ g_printerr ("%p read %d bytes from fd %d\n",
-+ g_thread_self(), bytes_read, fd);
-+#endif
-+}
-+
-+static void
-+write_junk (int fd,
-+ int count,
-+ gboolean fake_malloc_overhead)
-+{
-+ int bytes_written;
-+ int val;
-+ char *buf;
-+ char *allocated;
-+ char not_allocated[512+PAYLOAD_SIZE] = { '\0', };
-+
-+ g_assert (count < (int) sizeof(not_allocated));
-+
-+ if (fake_malloc_overhead)
-+ {
-+ int i;
-+
-+ allocated = g_malloc (count);
-+ buf = allocated;
-+
-+ /* Write some stuff into the allocated buffer to simulate
-+ * creating some sort of data
-+ */
-+ i = 0;
-+ while (i < count)
-+ {
-+ allocated[i] = (char) i;
-+ ++i;
-+ }
-+ }
-+ else
-+ {
-+ allocated = NULL;
-+ buf = not_allocated;
-+ }
-+
-+ bytes_written = 0;
-+
-+ while (bytes_written < count)
-+ {
-+ again:
-+
-+ val = write (fd, buf + bytes_written, count - bytes_written);
-+
-+ if (val < 0)
-+ {
-+ if (errno == EINTR)
-+ goto again;
-+ else
-+ {
-+ g_printerr ("write() failed thread %p: %s\n",
-+ g_thread_self(), strerror (errno));
-+ exit (1);
-+ }
-+ }
-+ else
-+ {
-+ bytes_written += val;
-+ }
-+ }
-+
-+ if (fake_malloc_overhead)
-+ g_free (allocated);
-+
-+#if 0
-+ g_printerr ("%p wrote %d bytes to fd %d\n",
-+ g_thread_self(), bytes_written, fd);
-+#endif
-+}
-+
-+static gboolean
-+plain_sockets_talk_to_client_watch (GIOChannel *source,
-+ GIOCondition condition,
-+ gpointer data)
-+{
-+ PlainSocketServer *server = data;
-+ int client_fd = g_io_channel_unix_get_fd (source);
-+
-+ if (condition & G_IO_HUP)
-+ {
-+ g_printerr ("Client disconnected from server\n");
-+ server->sd->n_clients -= 1;
-+ if (server->sd->n_clients == 0)
-+ g_main_loop_quit (server->sd->loop);
-+
-+ return FALSE; /* remove watch */
-+ }
-+ else if (condition & G_IO_IN)
-+ {
-+ server->sd->handled += 1;
-+
-+ read_and_drop_on_floor (client_fd, echo_call_size, server->vtable->fake_malloc_overhead);
-+ write_junk (client_fd, echo_return_size, server->vtable->fake_malloc_overhead);
-+ }
-+ else
-+ {
-+ g_printerr ("Unexpected IO condition in server thread\n");
-+ exit (1);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+plain_sockets_new_client_watch (GIOChannel *source,
-+ GIOCondition condition,
-+ gpointer data)
-+{
-+ int client_fd;
-+ struct sockaddr addr;
-+ socklen_t addrlen;
-+ GIOChannel *channel;
-+ PlainSocketServer *server = data;
-+
-+ if (!(condition & G_IO_IN))
-+ {
-+ g_printerr ("Unexpected IO condition on server socket\n");
-+ exit (1);
-+ }
-+
-+ addrlen = sizeof (addr);
-+
-+ retry:
-+ client_fd = accept (server->listen_fd, &addr, &addrlen);
-+
-+ if (client_fd < 0)
-+ {
-+ if (errno == EINTR)
-+ goto retry;
-+ else
-+ {
-+ g_printerr ("Failed to accept() connection from client: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+ }
-+
-+ channel = g_io_channel_unix_new (client_fd);
-+ g_io_add_watch (channel,
-+ G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL | G_IO_PRI,
-+ plain_sockets_talk_to_client_watch,
-+ server);
-+ g_io_channel_unref (channel);
-+
-+ server->sd->n_clients += 1;
-+
-+ return TRUE;
-+}
-+
-+static void*
-+plain_sockets_init_server (ServerData *sd)
-+{
-+ PlainSocketServer *server;
-+ struct sockaddr_un addr;
-+ static char path[] = "/tmp/dbus-test-profile-XXXXXX";
-+ char *p;
-+ GIOChannel *channel;
-+
-+ server = g_new0 (PlainSocketServer, 1);
-+ server->sd = sd;
-+ server->vtable = sd->vtable; /* for convenience */
-+
-+ p = path;
-+ while (*p)
-+ {
-+ if (*p == 'X')
-+ *p = 'a' + (int) (26.0*rand()/(RAND_MAX+1.0));
-+ ++p;
-+ }
-+
-+ g_printerr ("Socket is %s\n", path);
-+
-+ server->listen_fd = socket (PF_UNIX, SOCK_STREAM, 0);
-+
-+ if (server->listen_fd < 0)
-+ {
-+ g_printerr ("Failed to create socket: %s",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ _DBUS_ZERO (addr);
-+ addr.sun_family = AF_UNIX;
-+
-+#ifdef HAVE_ABSTRACT_SOCKETS
-+ /* remember that abstract names aren't nul-terminated so we rely
-+ * on sun_path being filled in with zeroes above.
-+ */
-+ addr.sun_path[0] = '\0'; /* this is what says "use abstract" */
-+ strncpy (&addr.sun_path[1], path, _DBUS_MAX_SUN_PATH_LENGTH - 2);
-+ /* _dbus_verbose_bytes (addr.sun_path, sizeof (addr.sun_path)); */
-+#else /* HAVE_ABSTRACT_SOCKETS */
-+ {
-+ struct stat sb;
-+
-+ if (stat (path, &sb) == 0 &&
-+ S_ISSOCK (sb.st_mode))
-+ unlink (path);
-+ }
-+
-+ strncpy (addr.sun_path, path, _DBUS_MAX_SUN_PATH_LENGTH - 1);
-+#endif /* ! HAVE_ABSTRACT_SOCKETS */
-+
-+ if (bind (server->listen_fd, (struct sockaddr*) &addr, sizeof (addr)) < 0)
-+ {
-+ g_printerr ("Failed to bind socket \"%s\": %s",
-+ path, strerror (errno));
-+ exit (1);
-+ }
-+
-+ if (listen (server->listen_fd, 30 /* backlog */) < 0)
-+ {
-+ g_printerr ("Failed to listen on socket \"%s\": %s",
-+ path, strerror (errno));
-+ exit (1);
-+ }
-+
-+ plain_sockets_address = path;
-+
-+ channel = g_io_channel_unix_new (server->listen_fd);
-+ server->source_id =
-+ g_io_add_watch (channel,
-+ G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL | G_IO_PRI,
-+ plain_sockets_new_client_watch,
-+ server);
-+ g_io_channel_unref (channel);
-+
-+ return server;
-+}
-+
-+static void
-+plain_sockets_stop_server (ServerData *sd,
-+ void *server_v)
-+{
-+ PlainSocketServer *server = server_v;
-+
-+ g_source_remove (server->source_id);
-+
-+ close (server->listen_fd);
-+ g_free (server);
-+
-+ {
-+ struct stat sb;
-+
-+ if (stat (plain_sockets_address, &sb) == 0 &&
-+ S_ISSOCK (sb.st_mode))
-+ unlink (plain_sockets_address);
-+ }
-+}
-+
-+static gboolean
-+plain_sockets_client_side_watch (GIOChannel *source,
-+ GIOCondition condition,
-+ gpointer data)
-+{
-+ ClientData *cd = data;
-+ int fd = g_io_channel_unix_get_fd (source);
-+
-+ if (condition & G_IO_IN)
-+ {
-+ read_and_drop_on_floor (fd, echo_return_size, cd->vtable->fake_malloc_overhead);
-+ }
-+ else if (condition & G_IO_OUT)
-+ {
-+ cd->iterations += 1;
-+ if (cd->iterations >= N_ITERATIONS)
-+ {
-+ g_printerr ("\nCompleted %d iterations\n", N_ITERATIONS);
-+ g_main_loop_quit (cd->loop);
-+ }
-+ else if (cd->iterations % (N_ITERATIONS/N_PROGRESS_UPDATES) == 0)
-+ {
-+ g_printerr ("%d%% ", (int) (cd->iterations/(double)N_ITERATIONS * 100.0));
-+ }
-+
-+ write_junk (fd, echo_call_size, cd->vtable->fake_malloc_overhead);
-+ }
-+ else
-+ {
-+ g_printerr ("Unexpected IO condition in client thread\n");
-+ exit (1);
-+ }
-+
-+ return TRUE;
-+}
-+
-+static void*
-+plain_sockets_thread_func (void *data)
-+{
-+ GMainContext *context;
-+ ClientData cd;
-+ int fd;
-+ struct sockaddr_un addr;
-+ GIOChannel *channel;
-+ GSource *gsource;
-+
-+ g_printerr ("Starting client thread %p\n",
-+ g_thread_self());
-+
-+ fd = socket (PF_UNIX, SOCK_STREAM, 0);
-+
-+ if (fd < 0)
-+ {
-+ g_printerr ("Failed to create socket: %s",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ _DBUS_ZERO (addr);
-+ addr.sun_family = AF_UNIX;
-+
-+#ifdef HAVE_ABSTRACT_SOCKETS
-+ /* remember that abstract names aren't nul-terminated so we rely
-+ * on sun_path being filled in with zeroes above.
-+ */
-+ addr.sun_path[0] = '\0'; /* this is what says "use abstract" */
-+ strncpy (&addr.sun_path[1], plain_sockets_address, _DBUS_MAX_SUN_PATH_LENGTH - 2);
-+ /* _dbus_verbose_bytes (addr.sun_path, sizeof (addr.sun_path)); */
-+#else /* HAVE_ABSTRACT_SOCKETS */
-+ strncpy (addr.sun_path, plain_sockets_address, _DBUS_MAX_SUN_PATH_LENGTH - 1);
-+#endif /* ! HAVE_ABSTRACT_SOCKETS */
-+
-+ if (connect (fd, (struct sockaddr*) &addr, sizeof (addr)) < 0)
-+ {
-+ g_printerr ("Failed to connect to socket %s: %s",
-+ plain_sockets_address, strerror (errno));
-+ exit (1);
-+ }
-+
-+ context = g_main_context_new ();
-+
-+ cd.iterations = 1;
-+ cd.loop = g_main_loop_new (context, FALSE);
-+ cd.vtable = data;
-+
-+ channel = g_io_channel_unix_new (fd);
-+
-+ gsource = g_io_create_watch (channel,
-+ G_IO_IN | G_IO_OUT |
-+ G_IO_ERR | G_IO_HUP | G_IO_NVAL | G_IO_PRI);
-+
-+ g_source_set_callback (gsource,
-+ (GSourceFunc)plain_sockets_client_side_watch,
-+ &cd, NULL);
-+
-+ g_source_attach (gsource, context);
-+
-+ g_io_channel_unref (channel);
-+
-+ g_printerr ("Client thread writing to prime pingpong\n");
-+ write_junk (fd, echo_call_size, cd.vtable->fake_malloc_overhead);
-+ g_printerr ("Client thread done writing primer\n");
-+
-+ g_printerr ("Client thread entering main loop\n");
-+ g_main_loop_run (cd.loop);
-+ g_printerr ("Client thread %p exiting main loop\n",
-+ g_thread_self());
-+
-+ g_source_destroy (gsource);
-+
-+ close (fd);
-+
-+ g_main_loop_unref (cd.loop);
-+ g_main_context_unref (context);
-+
-+ return NULL;
-+}
-+
-+static void
-+plain_sockets_main_loop_run (GMainLoop *loop)
-+{
-+ g_main_loop_run (loop);
-+}
-+
-+static const ProfileRunVTable plain_sockets_vtable = {
-+ "plain sockets",
-+ FALSE,
-+ plain_sockets_init_server,
-+ plain_sockets_stop_server,
-+ plain_sockets_thread_func,
-+ plain_sockets_main_loop_run
-+};
-+
-+static const ProfileRunVTable plain_sockets_with_malloc_vtable = {
-+ "plain sockets with malloc overhead",
-+ TRUE,
-+ plain_sockets_init_server,
-+ plain_sockets_stop_server,
-+ plain_sockets_thread_func,
-+ plain_sockets_main_loop_run
-+};
-+
-+static double
-+do_profile_run (const ProfileRunVTable *vtable)
-+{
-+ GTimer *timer;
-+ int i;
-+ double secs;
-+ ServerData sd;
-+ void *server;
-+
-+ g_printerr ("Profiling %s\n", vtable->name);
-+
-+ sd.handled = 0;
-+ sd.n_clients = 0;
-+ sd.loop = g_main_loop_new (NULL, FALSE);
-+ sd.vtable = vtable;
-+
-+ server = (* vtable->init_server) (&sd);
-+
-+ for (i = 0; i < N_CLIENT_THREADS; i++)
-+ {
-+ g_thread_create (vtable->client_thread_func, (void*) vtable, FALSE, NULL);
-+ }
-+
-+ timer = g_timer_new ();
-+
-+ g_printerr ("Server thread %p entering main loop\n",
-+ g_thread_self());
-+ (* vtable->main_loop_run_func) (sd.loop);
-+ g_printerr ("Server thread %p exiting main loop\n",
-+ g_thread_self());
-+
-+ secs = g_timer_elapsed (timer, NULL);
-+ g_timer_destroy (timer);
-+
-+ g_printerr ("%s: %g seconds, %d round trips, %f seconds per pingpong\n",
-+ vtable->name, secs, sd.handled, secs/sd.handled);
-+
-+ (* vtable->stop_server) (&sd, server);
-+
-+ g_main_loop_unref (sd.loop);
-+
-+ return secs;
-+}
-+
-+static void
-+print_result (const ProfileRunVTable *vtable,
-+ double seconds,
-+ double baseline)
-+{
-+ g_printerr (" %g times slower for %s (%g seconds, %f per iteration)\n",
-+ seconds/baseline, vtable->name,
-+ seconds, seconds / N_ITERATIONS);
-+}
-+
-+int
-+main (int argc, char *argv[])
-+{
-+ g_thread_init (NULL);
-+ dbus_g_thread_init ();
-+
-+#ifndef DBUS_DISABLE_ASSERT
-+ g_printerr ("You should probably --disable-asserts before you profile as they have noticeable overhead\n");
-+#endif
-+
-+#if DBUS_ENABLE_VERBOSE_MODE
-+ g_printerr ("You should probably --disable-verbose-mode before you profile as verbose has noticeable overhead\n");
-+#endif
-+
-+ payload = g_malloc (PAYLOAD_SIZE);
-+
-+ /* The actual size of the DBusMessage on the wire, as of Nov 23 2004,
-+ * without the payload
-+ */
-+ echo_call_size = 140 + PAYLOAD_SIZE;
-+ echo_return_size = 32;
-+
-+ if (argc > 1 && strcmp (argv[1], "plain_sockets") == 0)
-+ do_profile_run (&plain_sockets_vtable);
-+ else if (argc > 1 && strcmp (argv[1], "plain_sockets_with_malloc") == 0)
-+ do_profile_run (&plain_sockets_with_malloc_vtable);
-+ else if (argc > 1 && strcmp (argv[1], "no_bus") == 0)
-+ do_profile_run (&no_bus_vtable);
-+ else if (argc > 1 && strcmp (argv[1], "with_bus") == 0)
-+ do_profile_run (&with_bus_vtable);
-+ else if (argc > 1 && strcmp (argv[1], "all") == 0)
-+ {
-+ double e1, e2, e3, e4;
-+
-+ e1 = do_profile_run (&plain_sockets_vtable);
-+ e2 = do_profile_run (&plain_sockets_with_malloc_vtable);
-+ e3 = do_profile_run (&no_bus_vtable);
-+ e4 = do_profile_run (&with_bus_vtable);
-+
-+ g_printerr ("Baseline plain sockets time %g seconds for %d iterations\n",
-+ e1, N_ITERATIONS);
-+ print_result (&plain_sockets_vtable, e1, e1);
-+ print_result (&plain_sockets_with_malloc_vtable, e2, e1);
-+ print_result (&no_bus_vtable, e3, e1);
-+ print_result (&with_bus_vtable, e4, e1);
-+ }
-+ else
-+ {
-+ g_printerr ("Specify profile type plain_sockets, plain_sockets_with_malloc, no_bus, with_bus, all\n");
-+ exit (1);
-+ }
-+
-+ /* Make valgrind happy */
-+ dbus_shutdown ();
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/glib/test-service-glib.c dbus-0.61/test/glib/test-service-glib.c
---- dbus-0.61.orig/test/glib/test-service-glib.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/test-service-glib.c 2006-01-27 16:40:36.000000000 +0100
-@@ -0,0 +1,928 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+#include <dbus/dbus-glib.h>
-+/* NOTE - outside of D-BUS core this would be
-+ * include <dbus/dbus-glib-bindings.h>
-+ */
-+#include "tools/dbus-glib-bindings.h"
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <glib/gi18n.h>
-+#include <glib-object.h>
-+#include <glib/gquark.h>
-+#include "my-object-marshal.h"
-+
-+typedef struct MyObject MyObject;
-+typedef struct MyObjectClass MyObjectClass;
-+
-+GType my_object_get_type (void);
-+
-+struct MyObject
-+{
-+ GObject parent;
-+ char *this_is_a_string;
-+ guint val;
-+};
-+
-+struct MyObjectClass
-+{
-+ GObjectClass parent;
-+};
-+
-+#define MY_TYPE_OBJECT (my_object_get_type ())
-+#define MY_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), MY_TYPE_OBJECT, MyObject))
-+#define MY_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MY_TYPE_OBJECT, MyObjectClass))
-+#define MY_IS_OBJECT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), MY_TYPE_OBJECT))
-+#define MY_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MY_TYPE_OBJECT))
-+#define MY_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MY_TYPE_OBJECT, MyObjectClass))
-+
-+G_DEFINE_TYPE(MyObject, my_object, G_TYPE_OBJECT)
-+
-+typedef enum
-+{
-+ MY_OBJECT_ERROR_FOO,
-+ MY_OBJECT_ERROR_BAR
-+} MyObjectError;
-+
-+#define MY_OBJECT_ERROR (my_object_error_quark ())
-+
-+#define MY_TYPE_ERROR (my_object_error_get_type ())
-+
-+gboolean my_object_do_nothing (MyObject *obj, GError **error);
-+
-+gboolean my_object_increment (MyObject *obj, gint32 x, gint32 *ret, GError **error);
-+
-+gint32 my_object_increment_retval (MyObject *obj, gint32 x);
-+
-+gint32 my_object_increment_retval_error (MyObject *obj, gint32 x, GError **error);
-+
-+gboolean my_object_throw_error (MyObject *obj, GError **error);
-+
-+gboolean my_object_uppercase (MyObject *obj, const char *str, char **ret, GError **error);
-+
-+gboolean my_object_many_args (MyObject *obj, guint32 x, const char *str, double trouble, double *d_ret, char **str_ret, GError **error);
-+
-+gboolean my_object_many_return (MyObject *obj, guint32 *arg0, char **arg1, gint32 *arg2, guint32 *arg3, guint32 *arg4, const char **arg5, GError **error);
-+
-+gboolean my_object_recursive1 (MyObject *obj, GArray *array, guint32 *len_ret, GError **error);
-+gboolean my_object_recursive2 (MyObject *obj, guint32 reqlen, GArray **array, GError **error);
-+
-+gboolean my_object_many_stringify (MyObject *obj, GHashTable *vals, GHashTable **ret, GError **error);
-+
-+gboolean my_object_rec_arrays (MyObject *obj, GPtrArray *in, GPtrArray **ret, GError **error);
-+
-+gboolean my_object_objpath (MyObject *obj, const char *in, const char **arg1, GError **error);
-+
-+gboolean my_object_get_objs (MyObject *obj, GPtrArray **objs, GError **error);
-+
-+gboolean my_object_stringify (MyObject *obj, GValue *value, char **ret, GError **error);
-+gboolean my_object_unstringify (MyObject *obj, const char *str, GValue *value, GError **error);
-+
-+gboolean my_object_many_uppercase (MyObject *obj, const char * const *in, char ***out, GError **error);
-+
-+gboolean my_object_str_hash_len (MyObject *obj, GHashTable *table, guint *len, GError **error);
-+
-+gboolean my_object_send_car (MyObject *obj, GValueArray *invals, GValueArray **outvals, GError **error);
-+
-+gboolean my_object_get_hash (MyObject *obj, GHashTable **table, GError **error);
-+
-+gboolean my_object_increment_val (MyObject *obj, GError **error);
-+
-+gboolean my_object_get_val (MyObject *obj, guint *ret, GError **error);
-+
-+gboolean my_object_get_value (MyObject *obj, guint *ret, GError **error);
-+
-+gboolean my_object_emit_signals (MyObject *obj, GError **error);
-+gboolean my_object_emit_signal2 (MyObject *obj, GError **error);
-+
-+gboolean my_object_emit_frobnicate (MyObject *obj, GError **error);
-+
-+gboolean my_object_echo_variant (MyObject *obj, GValue *variant, GValue *ret, GError **error);
-+
-+gboolean my_object_process_variant_of_array_of_ints123 (MyObject *obj, GValue *variant, GError **error);
-+
-+gboolean my_object_dict_of_dicts (MyObject *obj, GHashTable *dict, GHashTable **ret, GError **error);
-+
-+gboolean my_object_terminate (MyObject *obj, GError **error);
-+
-+void my_object_async_increment (MyObject *obj, gint32 x, DBusGMethodInvocation *context);
-+
-+void my_object_async_throw_error (MyObject *obj, DBusGMethodInvocation *context);
-+
-+#include "test-service-glib-glue.h"
-+
-+GQuark my_object_error_quark (void);
-+
-+GType my_object_error_get_type (void);
-+
-+/* Properties */
-+enum
-+{
-+ PROP_0,
-+ PROP_THIS_IS_A_STRING
-+};
-+
-+enum
-+{
-+ FROBNICATE,
-+ SIG0,
-+ SIG1,
-+ SIG2,
-+ LAST_SIGNAL
-+};
-+
-+static guint signals[LAST_SIGNAL] = { 0 };
-+
-+static void
-+my_object_finalize (GObject *object)
-+{
-+ MyObject *mobject = MY_OBJECT (object);
-+
-+ g_free (mobject->this_is_a_string);
-+
-+ (G_OBJECT_CLASS (my_object_parent_class)->finalize) (object);
-+}
-+
-+static void
-+my_object_set_property (GObject *object,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *pspec)
-+{
-+ MyObject *mobject;
-+
-+ mobject = MY_OBJECT (object);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_THIS_IS_A_STRING:
-+ g_free (mobject->this_is_a_string);
-+ mobject->this_is_a_string = g_value_dup_string (value);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+my_object_get_property (GObject *object,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *pspec)
-+{
-+ MyObject *mobject;
-+
-+ mobject = MY_OBJECT (object);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_THIS_IS_A_STRING:
-+ g_value_set_string (value, mobject->this_is_a_string);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+my_object_init (MyObject *obj)
-+{
-+ obj->val = 0;
-+}
-+
-+static void
-+my_object_class_init (MyObjectClass *mobject_class)
-+{
-+ GObjectClass *gobject_class = G_OBJECT_CLASS (mobject_class);
-+
-+ gobject_class->finalize = my_object_finalize;
-+ gobject_class->set_property = my_object_set_property;
-+ gobject_class->get_property = my_object_get_property;
-+
-+ g_object_class_install_property (gobject_class,
-+ PROP_THIS_IS_A_STRING,
-+ g_param_spec_string ("this_is_a_string",
-+ _("Sample string"),
-+ _("Example of a string property"),
-+ "default value",
-+ G_PARAM_READWRITE));
-+ signals[FROBNICATE] =
-+ g_signal_new ("frobnicate",
-+ G_OBJECT_CLASS_TYPE (mobject_class),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ g_cclosure_marshal_VOID__INT,
-+ G_TYPE_NONE, 1, G_TYPE_INT);
-+
-+ signals[SIG0] =
-+ g_signal_new ("sig0",
-+ G_OBJECT_CLASS_TYPE (mobject_class),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ my_object_marshal_VOID__STRING_INT_STRING,
-+ G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING);
-+
-+ signals[SIG1] =
-+ g_signal_new ("sig1",
-+ G_OBJECT_CLASS_TYPE (mobject_class),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ my_object_marshal_VOID__STRING_BOXED,
-+ G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_VALUE);
-+
-+ signals[SIG2] =
-+ g_signal_new ("sig2",
-+ G_OBJECT_CLASS_TYPE (mobject_class),
-+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
-+ 0,
-+ NULL, NULL,
-+ g_cclosure_marshal_VOID__BOXED,
-+ G_TYPE_NONE, 1, DBUS_TYPE_G_STRING_STRING_HASHTABLE);
-+}
-+
-+GQuark
-+my_object_error_quark (void)
-+{
-+ static GQuark quark = 0;
-+ if (!quark)
-+ quark = g_quark_from_static_string ("my_object_error");
-+
-+ return quark;
-+}
-+
-+/* This should really be standard. */
-+#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-+
-+GType
-+my_object_error_get_type (void)
-+{
-+ static GType etype = 0;
-+
-+ if (etype == 0)
-+ {
-+ static const GEnumValue values[] =
-+ {
-+
-+ ENUM_ENTRY (MY_OBJECT_ERROR_FOO, "Foo"),
-+ ENUM_ENTRY (MY_OBJECT_ERROR_BAR, "Bar"),
-+ { 0, 0, 0 }
-+ };
-+
-+ etype = g_enum_register_static ("MyObjectError", values);
-+ }
-+
-+ return etype;
-+}
-+
-+static GObject *obj;
-+static GObject *obj2;
-+
-+gboolean
-+my_object_do_nothing (MyObject *obj, GError **error)
-+{
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_increment (MyObject *obj, gint32 x, gint32 *ret, GError **error)
-+{
-+ *ret = x +1;
-+ return TRUE;
-+}
-+
-+gint32
-+my_object_increment_retval (MyObject *obj, gint32 x)
-+{
-+ return x + 1;
-+}
-+
-+gint32
-+my_object_increment_retval_error (MyObject *obj, gint32 x, GError **error)
-+{
-+ if (x + 1 > 10)
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "%s",
-+ "x is bigger than 9");
-+ return FALSE;
-+ }
-+ return x + 1;
-+}
-+
-+gboolean
-+my_object_throw_error (MyObject *obj, GError **error)
-+{
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "%s",
-+ "this method always loses");
-+ return FALSE;
-+}
-+
-+gboolean
-+my_object_uppercase (MyObject *obj, const char *str, char **ret, GError **error)
-+{
-+ *ret = g_ascii_strup (str, -1);
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_many_args (MyObject *obj, guint32 x, const char *str, double trouble, double *d_ret, char **str_ret, GError **error)
-+{
-+ *d_ret = trouble + (x * 2);
-+ *str_ret = g_ascii_strup (str, -1);
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_many_return (MyObject *obj, guint32 *arg0, char **arg1, gint32 *arg2, guint32 *arg3, guint32 *arg4, const char **arg5, GError **error)
-+{
-+ *arg0 = 42;
-+ *arg1 = g_strdup ("42");
-+ *arg2 = -67;
-+ *arg3 = 2;
-+ *arg4 = 26;
-+ *arg5 = "hello world"; /* Annotation specifies as const */
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_stringify (MyObject *obj, GValue *value, char **ret, GError **error)
-+{
-+ GValue valstr = {0, };
-+
-+ g_value_init (&valstr, G_TYPE_STRING);
-+ if (!g_value_transform (value, &valstr))
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "couldn't transform value");
-+ return FALSE;
-+ }
-+ *ret = g_value_dup_string (&valstr);
-+ g_value_unset (&valstr);
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_unstringify (MyObject *obj, const char *str, GValue *value, GError **error)
-+{
-+ if (str[0] == '\0' || !g_ascii_isdigit (str[0])) {
-+ g_value_init (value, G_TYPE_STRING);
-+ g_value_set_string (value, str);
-+ } else {
-+ g_value_init (value, G_TYPE_INT);
-+ g_value_set_int (value, (int) g_ascii_strtoull (str, NULL, 10));
-+ }
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_recursive1 (MyObject *obj, GArray *array, guint32 *len_ret, GError **error)
-+{
-+ *len_ret = array->len;
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_recursive2 (MyObject *obj, guint32 reqlen, GArray **ret, GError **error)
-+{
-+ guint32 val;
-+ GArray *array;
-+
-+ array = g_array_new (FALSE, TRUE, sizeof (guint32));
-+
-+ while (reqlen > 0) {
-+ val = 42;
-+ g_array_append_val (array, val);
-+ val = 26;
-+ g_array_append_val (array, val);
-+ reqlen--;
-+ }
-+ val = 2;
-+ g_array_append_val (array, val);
-+ *ret = array;
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_many_uppercase (MyObject *obj, const char * const *in, char ***out, GError **error)
-+{
-+ int len;
-+ int i;
-+
-+ len = g_strv_length ((char**) in);
-+
-+ *out = g_new0 (char *, len + 1);
-+ for (i = 0; i < len; i++)
-+ {
-+ (*out)[i] = g_ascii_strup (in[i], -1);
-+ }
-+ (*out)[i] = NULL;
-+
-+ return TRUE;
-+}
-+
-+static void
-+hash_foreach_stringify (gpointer key, gpointer val, gpointer user_data)
-+{
-+ const char *keystr = key;
-+ const GValue *value = val;
-+ GValue *sval;
-+ GHashTable *ret = user_data;
-+
-+ sval = g_new0 (GValue, 1);
-+ g_value_init (sval, G_TYPE_STRING);
-+ if (!g_value_transform (value, sval))
-+ g_assert_not_reached ();
-+
-+ g_hash_table_insert (ret, g_strdup (keystr), sval);
-+}
-+
-+static void
-+unset_and_free_gvalue (gpointer val)
-+{
-+ g_value_unset (val);
-+ g_free (val);
-+}
-+
-+gboolean
-+my_object_many_stringify (MyObject *obj, GHashTable /* char * -> GValue * */ *vals, GHashTable /* char * -> GValue * */ **ret, GError **error)
-+{
-+ *ret = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ g_free, unset_and_free_gvalue);
-+ g_hash_table_foreach (vals, hash_foreach_stringify, *ret);
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_rec_arrays (MyObject *obj, GPtrArray *in, GPtrArray **ret, GError **error)
-+{
-+ char **strs;
-+ GArray *ints;
-+ guint v_UINT;
-+
-+ if (in->len != 2)
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid array len");
-+ return FALSE;
-+ }
-+
-+ strs = g_ptr_array_index (in, 0);
-+ if (!*strs || strcmp (*strs, "foo"))
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid string 0");
-+ return FALSE;
-+ }
-+ strs++;
-+ if (!*strs || strcmp (*strs, "bar"))
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid string 1");
-+ return FALSE;
-+ }
-+ strs++;
-+ if (*strs)
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid string array len in pos 0");
-+ return FALSE;
-+ }
-+ strs = g_ptr_array_index (in, 1);
-+ if (!*strs || strcmp (*strs, "baz"))
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid string 0");
-+ return FALSE;
-+ }
-+ strs++;
-+ if (!*strs || strcmp (*strs, "whee"))
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid string 1");
-+ return FALSE;
-+ }
-+ strs++;
-+ if (!*strs || strcmp (*strs, "moo"))
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid string 2");
-+ return FALSE;
-+ }
-+ strs++;
-+ if (*strs)
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid string array len in pos 1");
-+ return FALSE;
-+ }
-+
-+ *ret = g_ptr_array_new ();
-+
-+ ints = g_array_new (TRUE, TRUE, sizeof (guint));
-+ v_UINT = 10;
-+ g_array_append_val (ints, v_UINT);
-+ v_UINT = 42;
-+ g_array_append_val (ints, v_UINT);
-+ v_UINT = 27;
-+ g_array_append_val (ints, v_UINT);
-+ g_ptr_array_add (*ret, ints);
-+
-+ ints = g_array_new (TRUE, TRUE, sizeof (guint));
-+ v_UINT = 30;
-+ g_array_append_val (ints, v_UINT);
-+ g_ptr_array_add (*ret, ints);
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_objpath (MyObject *obj, const char *incoming, const char **outgoing, GError **error)
-+{
-+ if (strcmp (incoming, "/org/freedesktop/DBus/Tests/MyTestObject"))
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid incoming object");
-+ return FALSE;
-+ }
-+ *outgoing = "/org/freedesktop/DBus/Tests/MyTestObject2";
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_get_objs (MyObject *obj, GPtrArray **objs, GError **error)
-+{
-+ *objs = g_ptr_array_new ();
-+
-+ g_ptr_array_add (*objs, g_strdup ("/org/freedesktop/DBus/Tests/MyTestObject"));
-+ g_ptr_array_add (*objs, g_strdup ("/org/freedesktop/DBus/Tests/MyTestObject2"));
-+
-+ return TRUE;
-+}
-+
-+static void
-+hash_foreach (gpointer key, gpointer val, gpointer user_data)
-+{
-+ const char *keystr = key;
-+ const char *valstr = val;
-+ guint *count = user_data;
-+
-+ *count += (strlen (keystr) + strlen (valstr));
-+ g_print ("%s -> %s\n", keystr, valstr);
-+}
-+
-+gboolean
-+my_object_str_hash_len (MyObject *obj, GHashTable *table, guint *len, GError **error)
-+{
-+ *len = 0;
-+ g_hash_table_foreach (table, hash_foreach, len);
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_send_car (MyObject *obj, GValueArray *invals, GValueArray **outvals, GError **error)
-+{
-+ if (invals->n_values != 3
-+ || G_VALUE_TYPE (g_value_array_get_nth (invals, 0)) != G_TYPE_STRING
-+ || G_VALUE_TYPE (g_value_array_get_nth (invals, 1)) != G_TYPE_UINT
-+ || G_VALUE_TYPE (g_value_array_get_nth (invals, 2)) != G_TYPE_VALUE)
-+ {
-+ g_set_error (error,
-+ MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "invalid incoming values");
-+ return FALSE;
-+ }
-+ *outvals = g_value_array_new (2);
-+ g_value_array_append (*outvals, NULL);
-+ g_value_init (g_value_array_get_nth (*outvals, (*outvals)->n_values - 1), G_TYPE_UINT);
-+ g_value_set_uint (g_value_array_get_nth (*outvals, (*outvals)->n_values - 1),
-+ g_value_get_uint (g_value_array_get_nth (invals, 1)) + 1);
-+ g_value_array_append (*outvals, NULL);
-+ g_value_init (g_value_array_get_nth (*outvals, (*outvals)->n_values - 1), DBUS_TYPE_G_OBJECT_PATH);
-+ g_value_set_boxed (g_value_array_get_nth (*outvals, (*outvals)->n_values - 1),
-+ g_strdup ("/org/freedesktop/DBus/Tests/MyTestObject2"));
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_get_hash (MyObject *obj, GHashTable **ret, GError **error)
-+{
-+ GHashTable *table;
-+
-+ table = g_hash_table_new (g_str_hash, g_str_equal);
-+ g_hash_table_insert (table, "foo", "bar");
-+ g_hash_table_insert (table, "baz", "whee");
-+ g_hash_table_insert (table, "cow", "crack");
-+ *ret = table;
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_increment_val (MyObject *obj, GError **error)
-+{
-+ obj->val++;
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_get_val (MyObject *obj, guint *ret, GError **error)
-+{
-+ *ret = obj->val;
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_get_value (MyObject *obj, guint *ret, GError **error)
-+{
-+ *ret = obj->val;
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_echo_variant (MyObject *obj, GValue *variant, GValue *ret, GError **error)
-+{
-+ GType t;
-+ t = G_VALUE_TYPE(variant);
-+ g_value_init (ret, t);
-+ g_value_copy (variant, ret);
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_process_variant_of_array_of_ints123 (MyObject *obj, GValue *variant, GError **error)
-+{
-+ GArray *array;
-+ int i;
-+ int j;
-+
-+ j = 0;
-+
-+ array = (GArray *)g_value_get_boxed (variant);
-+
-+ for (i = 0; i <= 2; i++)
-+ {
-+ j = g_array_index (array, int, i);
-+ if (j != i + 1)
-+ goto error;
-+ }
-+
-+ return TRUE;
-+
-+error:
-+ *error = g_error_new (MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "Error decoding a variant of type ai (i + 1 = %i, j = %i)",
-+ i, j + 1);
-+ return FALSE;
-+}
-+
-+
-+typedef struct _HashAndString HashAndString;
-+
-+struct _HashAndString
-+{
-+ GHashTable *hash;
-+ gchar* string;
-+};
-+
-+static void
-+hash_foreach_prepend_string (gpointer key, gpointer val, gpointer user_data)
-+{
-+ HashAndString *data = (HashAndString*) user_data;
-+ gchar *in = (gchar*) val;
-+ g_hash_table_insert (data->hash, g_strdup ((gchar*) key),
-+ g_strjoin (" ", data->string, in, NULL));
-+}
-+
-+
-+static void
-+hash_foreach_mangle_dict_of_strings (gpointer key, gpointer val, gpointer user_data)
-+{
-+ GHashTable *out = (GHashTable*) user_data;
-+ GHashTable *in_dict = (GHashTable *) val;
-+ HashAndString *data = g_new0 (HashAndString, 1);
-+
-+ data->string = (gchar*) key;
-+ data->hash = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ g_free, g_free);
-+ g_hash_table_foreach (in_dict, hash_foreach_prepend_string, data);
-+
-+ g_hash_table_insert(out, g_strdup ((gchar*) key), data->hash);
-+}
-+
-+gboolean
-+my_object_dict_of_dicts (MyObject *obj, GHashTable *in,
-+ GHashTable **out, GError **error)
-+{
-+ *out = g_hash_table_new_full (g_str_hash, g_str_equal,
-+ (GDestroyNotify) g_free,
-+ (GDestroyNotify) g_hash_table_destroy);
-+ g_hash_table_foreach (in, hash_foreach_mangle_dict_of_strings, *out);
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_emit_frobnicate (MyObject *obj, GError **error)
-+{
-+ g_signal_emit (obj, signals[FROBNICATE], 0, 42);
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_emit_signals (MyObject *obj, GError **error)
-+{
-+ GValue val = {0, };
-+
-+ g_signal_emit (obj, signals[SIG0], 0, "foo", 22, "moo");
-+
-+ g_value_init (&val, G_TYPE_STRING);
-+ g_value_set_string (&val, "bar");
-+ g_signal_emit (obj, signals[SIG1], 0, "baz", &val);
-+ g_value_unset (&val);
-+
-+ return TRUE;
-+}
-+
-+gboolean
-+my_object_emit_signal2 (MyObject *obj, GError **error)
-+{
-+ GHashTable *table;
-+
-+ table = g_hash_table_new (g_str_hash, g_str_equal);
-+ g_hash_table_insert (table, "baz", "cow");
-+ g_hash_table_insert (table, "bar", "foo");
-+ g_signal_emit (obj, signals[SIG2], 0, table);
-+ g_hash_table_destroy (table);
-+ return TRUE;
-+}
-+
-+typedef struct {
-+ gint32 x;
-+ DBusGMethodInvocation *context;
-+} IncrementData;
-+
-+static gboolean
-+do_async_increment (IncrementData *data)
-+{
-+ gint32 newx = data->x + 1;
-+ dbus_g_method_return (data->context, newx);
-+ g_free (data);
-+ return FALSE;
-+}
-+
-+void
-+my_object_async_increment (MyObject *obj, gint32 x, DBusGMethodInvocation *context)
-+{
-+ IncrementData *data = g_new0 (IncrementData, 1);
-+ data->x = x;
-+ data->context = context;
-+ g_idle_add ((GSourceFunc)do_async_increment, data);
-+}
-+
-+static gboolean
-+do_async_error (IncrementData *data)
-+{
-+ GError *error;
-+ error = g_error_new (MY_OBJECT_ERROR,
-+ MY_OBJECT_ERROR_FOO,
-+ "%s",
-+ "this method always loses");
-+ dbus_g_method_return_error (data->context, error);
-+ g_free (data);
-+ return FALSE;
-+}
-+
-+void
-+my_object_async_throw_error (MyObject *obj, DBusGMethodInvocation *context)
-+{
-+ IncrementData *data = g_new0(IncrementData, 1);
-+ data->context = context;
-+ g_idle_add ((GSourceFunc)do_async_error, data);
-+}
-+
-+
-+static GMainLoop *loop;
-+
-+gboolean
-+my_object_terminate (MyObject *obj, GError **error)
-+{
-+ g_main_loop_quit (loop);
-+ return TRUE;
-+}
-+
-+#define TEST_SERVICE_NAME "org.freedesktop.DBus.TestSuiteGLibService"
-+
-+int
-+main (int argc, char **argv)
-+{
-+ DBusGConnection *connection;
-+ GError *error;
-+ DBusGProxy *driver_proxy;
-+ guint32 request_name_ret;
-+
-+ g_type_init ();
-+ g_thread_init (NULL); dbus_g_thread_init ();
-+
-+ dbus_g_object_type_install_info (MY_TYPE_OBJECT,
-+ &dbus_glib_my_object_object_info);
-+
-+ dbus_g_error_domain_register (MY_OBJECT_ERROR,
-+ NULL,
-+ MY_TYPE_ERROR);
-+
-+ g_printerr ("Launching test-service-glib\n");
-+
-+ loop = g_main_loop_new (NULL, FALSE);
-+
-+ {
-+ GLogLevelFlags fatal_mask;
-+
-+ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
-+ fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
-+ g_log_set_always_fatal (fatal_mask);
-+ }
-+
-+ error = NULL;
-+ connection = dbus_g_bus_get (DBUS_BUS_STARTER,
-+ &error);
-+ if (connection == NULL)
-+ {
-+ g_printerr ("Failed to open connection to bus: %s\n",
-+ error->message);
-+ g_error_free (error);
-+ exit (1);
-+ }
-+
-+ obj = g_object_new (MY_TYPE_OBJECT, NULL);
-+ obj2 = g_object_new (MY_TYPE_OBJECT, NULL);
-+
-+ dbus_g_connection_register_g_object (connection,
-+ "/org/freedesktop/DBus/Tests/MyTestObject",
-+ obj);
-+ dbus_g_connection_register_g_object (connection,
-+ "/org/freedesktop/DBus/Tests/MyTestObject2",
-+ obj2);
-+
-+ driver_proxy = dbus_g_proxy_new_for_name (connection,
-+ DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS);
-+
-+ if (!org_freedesktop_DBus_request_name (driver_proxy,
-+ TEST_SERVICE_NAME,
-+ 0, &request_name_ret, &error))
-+ {
-+ g_assert (error != NULL);
-+ g_printerr ("Failed to get name: %s\n",
-+ error->message);
-+ g_clear_error (&error);
-+ exit (1);
-+ }
-+
-+ if (!(request_name_ret == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER))
-+ {
-+ g_printerr ("Got result code %u from requesting name\n", request_name_ret);
-+ exit (1);
-+ }
-+
-+ g_printerr ("GLib test service has name '%s'\n", TEST_SERVICE_NAME);
-+ g_printerr ("GLib test service entering main loop\n");
-+
-+ g_main_loop_run (loop);
-+
-+ g_printerr ("Successfully completed %s\n", argv[0]);
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/glib/test-service-glib.xml dbus-0.61/test/glib/test-service-glib.xml
---- dbus-0.61.orig/test/glib/test-service-glib.xml 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/test-service-glib.xml 2006-01-27 16:40:36.000000000 +0100
-@@ -0,0 +1,179 @@
-+<?xml version="1.0" encoding="UTF-8" ?>
-+
-+<node name="/org/freedesktop/DBus/Tests/MyTestObject">
-+ <interface name="org.freedesktop.DBus.Tests.MyObject">
-+ <method name="DoNothing">
-+ </method>
-+
-+ <method name="Increment">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out" />
-+ </method>
-+
-+ <method name="IncrementRetval">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out">
-+ <annotation name="org.freedesktop.DBus.GLib.ReturnVal" value=""/>
-+ </arg>
-+ </method>
-+
-+ <method name="IncrementRetvalError">
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out">
-+ <annotation name="org.freedesktop.DBus.GLib.ReturnVal" value="error"/>
-+ </arg>
-+ </method>
-+
-+ <method name="ThrowError">
-+ </method>
-+
-+ <method name="Uppercase">
-+ <arg type="s" direction="in" />
-+ <arg type="s" direction="out" />
-+ </method>
-+
-+ <method name="ManyArgs">
-+ <arg type="u" name="x" direction="in" />
-+ <arg type="s" name="str" direction="in" />
-+ <arg type="d" name="trouble" direction="in" />
-+ <arg type="d" name="d_ret" direction="out" />
-+ <arg type="s" name="str_ret" direction="out" />
-+ </method>
-+
-+ <method name="ManyReturn">
-+ <arg type="u" direction="out" />
-+ <arg type="s" direction="out" />
-+ <arg type="i" direction="out" />
-+ <arg type="u" direction="out" />
-+ <arg type="u" direction="out" />
-+ <arg type="s" direction="out">
-+ <annotation name="org.freedesktop.DBus.GLib.Const" value=""/>
-+ </arg>
-+ </method>
-+
-+ <method name="Stringify">
-+ <arg type="v" name="val" direction="in"/>
-+ <arg type="s" direction="out"/>
-+ </method>
-+
-+ <method name="Unstringify">
-+ <arg type="s" name="val" direction="in"/>
-+ <arg type="v" direction="out"/>
-+ </method>
-+
-+ <method name="Recursive1">
-+ <arg type="au" direction="in"/>
-+ <arg type="u" direction="out"/>
-+ </method>
-+
-+ <method name="Recursive2">
-+ <arg type="u" direction="in"/>
-+ <arg type="au" direction="out"/>
-+ </method>
-+
-+ <method name="ManyUppercase">
-+ <arg type="as" direction="in"/>
-+ <arg type="as" direction="out"/>
-+ </method>
-+
-+ <method name="StrHashLen">
-+ <arg type="a{ss}" direction="in"/>
-+ <arg type="u" direction="out"/>
-+ </method>
-+
-+ <method name="SendCar">
-+ <arg type="(suv)" direction="in"/>
-+ <arg type="(uo)" direction="out"/>
-+ </method>
-+
-+ <method name="GetHash">
-+ <arg type="a{ss}" direction="out"/>
-+ </method>
-+
-+ <method name="RecArrays">
-+ <arg type="aas" name="val" direction="in"/>
-+ <arg type="aau" direction="out"/>
-+ </method>
-+
-+ <method name="Objpath">
-+ <arg type="o" direction="in"/>
-+ <arg type="o" direction="out">
-+ <annotation name="org.freedesktop.DBus.GLib.Const" value=""/>
-+ </arg>
-+ </method>
-+
-+ <method name="GetObjs">
-+ <arg type="ao" direction="out"/>
-+ </method>
-+
-+ <method name="IncrementVal">
-+ </method>
-+
-+ <method name="AsyncIncrement">
-+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-+ <arg type="u" name="x" />
-+ <arg type="u" direction="out" />
-+ </method>
-+
-+ <method name="AsyncThrowError">
-+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-+ </method>
-+
-+ <method name="GetVal">
-+ <arg type="u" direction="out" />
-+ </method>
-+
-+ <method name="ManyStringify">
-+ <arg type="a{sv}" direction="in"/>
-+ <arg type="a{sv}" direction="out"/>
-+ </method>
-+
-+ <method name="EchoVariant">
-+ <arg type="v" direction="in" />
-+ <arg type="v" direction="out" />
-+ </method>
-+
-+ <method name="ProcessVariantOfArrayOfInts123">
-+ <arg type="v" direction="in" />
-+ </method>
-+
-+ <method name="DictOfDicts">
-+ <arg type="a{sa{ss}}" direction="in"/>
-+ <arg type="a{sa{ss}}" direction="out"/>
-+ </method>
-+
-+ <method name="EmitFrobnicate">
-+ </method>
-+
-+ <!-- Export signals -->
-+ <signal name="Frobnicate"/>
-+
-+ <method name="Terminate">
-+ </method>
-+ </interface>
-+
-+ <!-- Test multiple interfaces on the same object -->
-+
-+ <interface name="org.freedesktop.DBus.Tests.FooObject">
-+ <method name="GetValue">
-+ <arg type="u" direction="out" />
-+ </method>
-+
-+ <method name="EmitSignals">
-+ </method>
-+
-+ <signal name="Sig0"/>
-+
-+ <signal name="Sig1"/>
-+
-+ <method name="EmitSignal2">
-+ </method>
-+
-+ <signal name="Sig2"/>
-+
-+ <method name="Terminate">
-+ </method>
-+
-+ </interface>
-+
-+</node>
-diff -Naur dbus-0.61.orig/test/glib/test-thread-client.c dbus-0.61/test/glib/test-thread-client.c
---- dbus-0.61.orig/test/glib/test-thread-client.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/test-thread-client.c 2005-01-16 16:51:55.000000000 +0100
-@@ -0,0 +1,98 @@
-+#include <glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <unistd.h>
-+
-+#include "test-thread.h"
-+
-+DBusConnection *connection;
-+
-+static gpointer
-+thread_func (gpointer data)
-+{
-+ gint32 threadnr = GPOINTER_TO_INT (data);
-+ guint32 counter = 0;
-+ DBusMessageIter iter;
-+ DBusMessage *message;
-+ char *str;
-+
-+ while (1)
-+ {
-+ message = dbus_message_new_method_call (NULL,
-+ "/org/freedesktop/ThreadTest",
-+ "org.freedesktop.ThreadTest",
-+ "TestMethod");
-+
-+ dbus_message_iter_init_append (message, &iter);
-+
-+ if (!dbus_message_iter_append_basic (&iter, DBUS_TYPE_INT32, &threadnr))
-+ {
-+ g_print ("thread %d: append threadnr failed\n", threadnr);
-+ }
-+
-+ if (!dbus_message_iter_append_basic (&iter, DBUS_TYPE_INT32, &counter))
-+ {
-+ g_print ("thread %d: append counter (%d) failed\n", threadnr, counter);
-+ }
-+
-+ str = g_strdup_printf ("Thread %d-%d\n", threadnr, counter);
-+ if (!dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &str))
-+ {
-+ g_print ("thread %d: append string (%s) failed\n", threadnr, str);
-+ }
-+ g_free (str);
-+
-+ if (!dbus_connection_send (connection,
-+ message,
-+ NULL))
-+ {
-+ g_print ("thread %d: send message failed\n", threadnr);
-+ }
-+
-+ dbus_message_unref (message);
-+
-+ counter ++;
-+ }
-+
-+ return NULL;
-+}
-+
-+int
-+main (int argc, char *argv[])
-+{
-+ GMainLoop *loop;
-+ DBusError error;
-+ int i;
-+
-+ g_thread_init (NULL);
-+ dbus_g_thread_init ();
-+
-+ if(argc < 2)
-+ {
-+ g_error("Need an address as argv[1]\n");
-+ return 1;
-+ }
-+
-+ dbus_error_init (&error);
-+ connection = dbus_connection_open (argv[1], &error);
-+ if (connection == NULL)
-+ {
-+ g_printerr ("could not open connection: %s\n", error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ dbus_connection_setup_with_g_main (connection, NULL);
-+
-+ for (i = 0; i < N_TEST_THREADS; i++)
-+ {
-+ g_thread_create (thread_func, GINT_TO_POINTER (i), FALSE, NULL);
-+ }
-+
-+ loop = g_main_loop_new (NULL, FALSE);
-+ g_main_run (loop);
-+
-+ return 0;
-+}
-+
-diff -Naur dbus-0.61.orig/test/glib/test-thread-server.c dbus-0.61/test/glib/test-thread-server.c
---- dbus-0.61.orig/test/glib/test-thread-server.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/test-thread-server.c 2005-02-17 22:19:48.000000000 +0100
-@@ -0,0 +1,209 @@
-+#include <glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include <stdio.h>
-+#include <string.h>
-+
-+#include "test-thread.h"
-+
-+typedef struct {
-+ guint32 counters[N_TEST_THREADS];
-+} ThreadTestData;
-+
-+static ThreadTestData *
-+thread_test_data_new (void)
-+{
-+ ThreadTestData *data;
-+
-+ data = g_new0 (ThreadTestData, 1);
-+
-+ return data;
-+}
-+
-+static void
-+thread_test_data_free (ThreadTestData *data)
-+{
-+ g_free (data);
-+}
-+
-+static DBusHandlerResult
-+filter_test_message (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ ThreadTestData *data = user_data;
-+ DBusMessageIter iter;
-+ gint32 threadnr;
-+ guint32 counter;
-+ const char *str;
-+ char *expected_str;
-+ GString *counter_str;
-+ int i;
-+
-+ if (!dbus_message_is_method_call (message, "org.freedesktop.ThreadTest",
-+ "TestMethod"))
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+
-+ dbus_message_iter_init (message, &iter);
-+
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_INT32)
-+ {
-+ g_print ("First arg not right type\n");
-+ goto out;
-+ }
-+ dbus_message_iter_get_basic (&iter, &threadnr);
-+ if (threadnr < 0 || threadnr >= N_TEST_THREADS)
-+ {
-+ g_print ("Invalid thread nr\n");
-+ goto out;
-+ }
-+
-+ if (! dbus_message_iter_next (&iter))
-+ {
-+ g_print ("Couldn't get second arg\n");
-+ goto out;
-+ }
-+
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_UINT32)
-+ {
-+ g_print ("Second arg not right type\n");
-+ goto out;
-+ }
-+
-+ dbus_message_iter_get_basic (&iter, &counter);
-+
-+ if (counter != data->counters[threadnr])
-+ {
-+ g_print ("Thread %d, counter %d, expected %d\n", threadnr, counter, data->counters[threadnr]);
-+ goto out;
-+ }
-+ data->counters[threadnr]++;
-+
-+ if (! dbus_message_iter_next (&iter))
-+ {
-+ g_print ("Couldn't get third arg\n");
-+ goto out;
-+ }
-+
-+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_STRING)
-+ {
-+ g_print ("Third arg not right type\n");
-+ goto out;
-+ }
-+
-+ dbus_message_iter_get_basic (&iter, &str);
-+
-+ if (str == NULL)
-+ {
-+ g_print ("No third arg\n");
-+ goto out;
-+ }
-+
-+ expected_str = g_strdup_printf ("Thread %d-%d\n", threadnr, counter);
-+ if (strcmp (expected_str, str) != 0)
-+ {
-+ g_print ("Wrong string '%s', expected '%s'\n", str, expected_str);
-+ goto out;
-+ }
-+ g_free (expected_str);
-+
-+ if (dbus_message_iter_next (&iter))
-+ {
-+ g_print ("Extra args on end of message\n");
-+ goto out;
-+ }
-+
-+ dbus_connection_flush (connection);
-+
-+ counter_str = g_string_new ("");
-+ for (i = 0; i < N_TEST_THREADS; i++)
-+ {
-+ g_string_append_printf (counter_str, "%d ", data->counters[i]);
-+ }
-+ g_print ("%s\r", counter_str->str);
-+ g_string_free (counter_str, TRUE);
-+
-+ out:
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+}
-+
-+static DBusHandlerResult
-+filter_disconnect (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ if (!dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+
-+ g_print ("connection disconnected\n");
-+ dbus_connection_unref (connection);
-+
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+}
-+
-+static void
-+new_connection_callback (DBusServer *server,
-+ DBusConnection *new_connection,
-+ void *user_data)
-+{
-+ ThreadTestData * data;
-+
-+ g_print ("new_connection_callback\n");
-+
-+ dbus_connection_ref (new_connection);
-+ dbus_connection_setup_with_g_main (new_connection, NULL);
-+
-+ data = thread_test_data_new ();
-+
-+ if (!dbus_connection_add_filter (new_connection,
-+ filter_test_message, data,
-+ (DBusFreeFunction) thread_test_data_free))
-+ goto nomem;
-+
-+ if (!dbus_connection_add_filter (new_connection,
-+ filter_disconnect, NULL, NULL))
-+ goto nomem;
-+
-+ return;
-+
-+ nomem:
-+ g_error ("no memory to setup new connection");
-+}
-+
-+int
-+main (int argc, char *argv[])
-+{
-+ GMainLoop *loop;
-+ DBusServer *server;
-+ DBusError error;
-+
-+ g_thread_init (NULL);
-+ dbus_g_thread_init ();
-+
-+ if (argc < 2)
-+ {
-+ fprintf (stderr, "Give the server address as an argument\n");
-+ return 1;
-+ }
-+
-+ dbus_error_init (&error);
-+ server = dbus_server_listen (argv[1], &error);
-+ if (server == NULL)
-+ {
-+ fprintf (stderr, "Failed to start server on %s: %s\n",
-+ argv[1], error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ dbus_server_set_new_connection_function (server,
-+ new_connection_callback,
-+ NULL, NULL);
-+
-+ dbus_server_setup_with_g_main (server, NULL);
-+
-+ loop = g_main_loop_new (NULL, FALSE);
-+ g_main_run (loop);
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/glib/test-thread.h dbus-0.61/test/glib/test-thread.h
---- dbus-0.61.orig/test/glib/test-thread.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/glib/test-thread.h 2003-09-30 04:43:21.000000000 +0200
-@@ -0,0 +1 @@
-+#define N_TEST_THREADS 5
-diff -Naur dbus-0.61.orig/test/name-test/Makefile.am dbus-0.61/test/name-test/Makefile.am
---- dbus-0.61.orig/test/name-test/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/name-test/Makefile.am 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,26 @@
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) -DDBUS_COMPILATION
-+
-+## note that TESTS has special meaning (stuff to use in make check)
-+## so if adding tests not to be run in make check, don't add them to
-+## TESTS
-+if DBUS_BUILD_TESTS
-+TESTS_ENVIRONMENT=DBUS_TOP_BUILDDIR=$(ABSOLUTE_TOP_BUILDDIR)
-+TESTS=run-test.sh
-+else
-+TESTS=
-+endif
-+
-+EXTRA_DIST=run-test.sh
-+
-+if DBUS_BUILD_TESTS
-+
-+## we use noinst_PROGRAMS not check_PROGRAMS for TESTS so that we
-+## build even when not doing "make check"
-+noinst_PROGRAMS=test-names
-+
-+test_names_SOURCES= \
-+ test-names.c
-+
-+test_names_LDADD=$(top_builddir)/dbus/libdbus-1.la $(top_builddir)/dbus/libdbus-convenience.la
-+endif
-+
-diff -Naur dbus-0.61.orig/test/name-test/Makefile.in dbus-0.61/test/name-test/Makefile.in
---- dbus-0.61.orig/test/name-test/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/name-test/Makefile.in 2006-02-27 22:34:40.000000000 +0100
-@@ -0,0 +1,661 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+ at DBUS_BUILD_TESTS_TRUE@noinst_PROGRAMS = test-names$(EXEEXT)
-+subdir = test/name-test
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+PROGRAMS = $(noinst_PROGRAMS)
-+am__test_names_SOURCES_DIST = test-names.c
-+ at DBUS_BUILD_TESTS_TRUE@am_test_names_OBJECTS = test-names.$(OBJEXT)
-+test_names_OBJECTS = $(am_test_names_OBJECTS)
-+ at DBUS_BUILD_TESTS_TRUE@test_names_DEPENDENCIES = \
-+ at DBUS_BUILD_TESTS_TRUE@ $(top_builddir)/dbus/libdbus-1.la \
-+ at DBUS_BUILD_TESTS_TRUE@ $(top_builddir)/dbus/libdbus-convenience.la
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(test_names_SOURCES)
-+DIST_SOURCES = $(am__test_names_SOURCES_DIST)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) -DDBUS_COMPILATION
-+ at DBUS_BUILD_TESTS_TRUE@TESTS_ENVIRONMENT = DBUS_TOP_BUILDDIR=$(ABSOLUTE_TOP_BUILDDIR)
-+ at DBUS_BUILD_TESTS_FALSE@TESTS =
-+ at DBUS_BUILD_TESTS_TRUE@TESTS = run-test.sh
-+EXTRA_DIST = run-test.sh
-+ at DBUS_BUILD_TESTS_TRUE@test_names_SOURCES = \
-+ at DBUS_BUILD_TESTS_TRUE@ test-names.c
-+
-+ at DBUS_BUILD_TESTS_TRUE@test_names_LDADD = $(top_builddir)/dbus/libdbus-1.la $(top_builddir)/dbus/libdbus-convenience.la
-+all: all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/name-test/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu test/name-test/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+test-names$(EXEEXT): $(test_names_OBJECTS) $(test_names_DEPENDENCIES)
-+ @rm -f test-names$(EXEEXT)
-+ $(LINK) $(test_names_LDFLAGS) $(test_names_OBJECTS) $(test_names_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-names.Po at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+check-TESTS: $(TESTS)
-+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-+ srcdir=$(srcdir); export srcdir; \
-+ list='$(TESTS)'; \
-+ if test -n "$$list"; then \
-+ for tst in $$list; do \
-+ if test -f ./$$tst; then dir=./; \
-+ elif test -f $$tst; then dir=; \
-+ else dir="$(srcdir)/"; fi; \
-+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xpass=`expr $$xpass + 1`; \
-+ failed=`expr $$failed + 1`; \
-+ echo "XPASS: $$tst"; \
-+ ;; \
-+ *) \
-+ echo "PASS: $$tst"; \
-+ ;; \
-+ esac; \
-+ elif test $$? -ne 77; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xfail=`expr $$xfail + 1`; \
-+ echo "XFAIL: $$tst"; \
-+ ;; \
-+ *) \
-+ failed=`expr $$failed + 1`; \
-+ echo "FAIL: $$tst"; \
-+ ;; \
-+ esac; \
-+ else \
-+ skip=`expr $$skip + 1`; \
-+ echo "SKIP: $$tst"; \
-+ fi; \
-+ done; \
-+ if test "$$failed" -eq 0; then \
-+ if test "$$xfail" -eq 0; then \
-+ banner="All $$all tests passed"; \
-+ else \
-+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-+ fi; \
-+ else \
-+ if test "$$xpass" -eq 0; then \
-+ banner="$$failed of $$all tests failed"; \
-+ else \
-+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-+ fi; \
-+ fi; \
-+ dashes="$$banner"; \
-+ skipped=""; \
-+ if test "$$skip" -ne 0; then \
-+ skipped="($$skip tests were not run)"; \
-+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$skipped"; \
-+ fi; \
-+ report=""; \
-+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-+ report="Please report to $(PACKAGE_BUGREPORT)"; \
-+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$report"; \
-+ fi; \
-+ dashes=`echo "$$dashes" | sed s/./=/g`; \
-+ echo "$$dashes"; \
-+ echo "$$banner"; \
-+ test -z "$$skipped" || echo "$$skipped"; \
-+ test -z "$$report" || echo "$$report"; \
-+ echo "$$dashes"; \
-+ test "$$failed" -eq 0; \
-+ else :; fi
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-+check: check-am
-+all-am: Makefile $(PROGRAMS)
-+installdirs:
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-+ mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
-+ clean-generic clean-libtool clean-noinstPROGRAMS ctags \
-+ distclean distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-exec install-exec-am install-info \
-+ install-info-am install-man install-strip installcheck \
-+ installcheck-am installdirs maintainer-clean \
-+ maintainer-clean-generic mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-+ tags uninstall uninstall-am uninstall-info-am
-+
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/test/name-test/run-test.sh dbus-0.61/test/name-test/run-test.sh
---- dbus-0.61.orig/test/name-test/run-test.sh 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/name-test/run-test.sh 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,30 @@
-+#! /bin/bash
-+
-+function die()
-+{
-+ if ! test -z "$DBUS_SESSION_BUS_PID" ; then
-+ echo "killing message bus "$DBUS_SESSION_BUS_PID >&2
-+ kill -9 $DBUS_SESSION_BUS_PID
-+ fi
-+ echo $SCRIPTNAME: $* >&2
-+
-+ rm $DBUS_TOP_BUILDDIR/python/dbus
-+
-+ exit 1
-+}
-+
-+
-+SCRIPTNAME=$0
-+MODE=$1
-+
-+## so the tests can complain if you fail to use the script to launch them
-+export DBUS_TEST_NAME_RUN_TEST_SCRIPT=1
-+
-+# Rerun ourselves with tmp session bus if we're not already
-+if test -z "$DBUS_TEST_NAME_IN_RUN_TEST"; then
-+ DBUS_TEST_NAME_IN_RUN_TEST=1
-+ export DBUS_TEST_NAME_IN_RUN_TEST
-+ exec $DBUS_TOP_BUILDDIR/tools/run-with-tmp-session-bus.sh $SCRIPTNAME $MODE
-+fi
-+echo "running test-names"
-+libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/test/name-test/test-names || die "test-client failed"
-diff -Naur dbus-0.61.orig/test/name-test/run-with-tmp-session-bus.conf dbus-0.61/test/name-test/run-with-tmp-session-bus.conf
---- dbus-0.61.orig/test/name-test/run-with-tmp-session-bus.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/name-test/run-with-tmp-session-bus.conf 2006-02-24 18:22:25.000000000 +0100
-@@ -0,0 +1,30 @@
-+<!-- This configuration file controls the per-user-login-session message bus.
-+ Add a session-local.conf and edit that rather than changing this
-+ file directly. -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <!-- Our well-known bus type, don't change this -->
-+ <type>session</type>
-+
-+ <listen>unix:tmpdir=/tmp</listen>
-+
-+ <servicedir>/home/boston/johnp/devel-local/dbus/test/data/valid-service-files</servicedir>
-+
-+ <policy context="default">
-+ <!-- Allow everything to be sent -->
-+ <allow send_destination="*"/>
-+ <!-- Allow everything to be received -->
-+ <allow eavesdrop="true"/>
-+ <!-- Allow anyone to own anything -->
-+ <allow own="*"/>
-+ </policy>
-+
-+ <!-- This is included last so local configuration can override what's
-+ in this standard file -->
-+
-+
-+
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/name-test/test-names.c dbus-0.61/test/name-test/test-names.c
---- dbus-0.61.orig/test/name-test/test-names.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/name-test/test-names.c 2005-11-22 21:37:00.000000000 +0100
-@@ -0,0 +1,578 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <dbus/dbus.h>
-+#include <dbus/dbus-connection-internal.h>
-+
-+#define REMOVE_CONNECTION 0
-+#define ADD_CONNECTION 1
-+#define ALLOW_REPLACEMENT DBUS_NAME_FLAG_ALLOW_REPLACEMENT
-+#define REPLACE_EXISTING DBUS_NAME_FLAG_REPLACE_EXISTING
-+#define DO_NOT_QUEUE DBUS_NAME_FLAG_DO_NOT_QUEUE
-+
-+#define PRIMARY_OWNER DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER
-+#define IN_QUEUE DBUS_REQUEST_NAME_REPLY_IN_QUEUE
-+#define EXISTS DBUS_REQUEST_NAME_REPLY_EXISTS
-+#define ALREADY_OWNER DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER
-+
-+#define RELEASED DBUS_RELEASE_NAME_REPLY_RELEASED
-+#define NON_EXISTANT DBUS_RELEASE_NAME_REPLY_NON_EXISTENT
-+#define NOT_OWNER DBUS_RELEASE_NAME_REPLY_NOT_OWNER
-+
-+#define NUM_CONN 4
-+#define TEST_NAME "org.freedesktop.DBus.TestSuite.NameTest"
-+#define NUM_TRIES_TIL_FAIL 15
-+
-+extern const char *dbus_bus_connection_get_unique_name (DBusConnection *connection);
-+
-+typedef struct {
-+ int command;
-+
-+ int connection_number;
-+ dbus_uint32_t flags;
-+
-+ dbus_uint32_t expected_result;
-+
-+ int expected_queue[NUM_CONN];
-+} CommandAndResult;
-+
-+CommandAndResult test_data[] = {
-+ {ADD_CONNECTION, 0, ALLOW_REPLACEMENT | REPLACE_EXISTING,
-+ PRIMARY_OWNER, {0,-1,-1,-1}},
-+ {ADD_CONNECTION, 0, REPLACE_EXISTING,
-+ ALREADY_OWNER, {0,-1,-1,-1}},
-+ {ADD_CONNECTION, 1, ALLOW_REPLACEMENT | REPLACE_EXISTING,
-+ IN_QUEUE, {0,1,-1,-1}},
-+ {REMOVE_CONNECTION, 0, 0,
-+ RELEASED, {1,-1,-1,-1}},
-+ {ADD_CONNECTION, 0, REPLACE_EXISTING | DO_NOT_QUEUE,
-+ PRIMARY_OWNER, {0,1,-1,-1}},
-+ {ADD_CONNECTION, 2, ALLOW_REPLACEMENT,
-+ IN_QUEUE, {0,1,2,-1}},
-+ {ADD_CONNECTION, 2, ALLOW_REPLACEMENT | REPLACE_EXISTING,
-+ IN_QUEUE, {0,2,1,-1}},
-+ {ADD_CONNECTION, 0, ALLOW_REPLACEMENT | DO_NOT_QUEUE,
-+ ALREADY_OWNER, {0,2,1,-1}},
-+ {ADD_CONNECTION, 1, ALLOW_REPLACEMENT | REPLACE_EXISTING,
-+ PRIMARY_OWNER, {1,2,-1,-1}},
-+ {ADD_CONNECTION, 0, REPLACE_EXISTING,
-+ PRIMARY_OWNER, {0,1,2,-1}},
-+ {ADD_CONNECTION, 2, DO_NOT_QUEUE,
-+ EXISTS, {0,1,-1,-1}},
-+ {REMOVE_CONNECTION, 2, 0,
-+ NOT_OWNER, {0,1,-1,-1}},
-+ {ADD_CONNECTION, 3, 0,
-+ IN_QUEUE, {0,1,3,-1}},
-+ {ADD_CONNECTION, 0, ALLOW_REPLACEMENT,
-+ ALREADY_OWNER, {0,1,3,-1}},
-+ {ADD_CONNECTION, 2, ALLOW_REPLACEMENT,
-+ IN_QUEUE, {0,1,3,2}}
-+};
-+
-+static dbus_bool_t
-+check_connection (DBusConnection *conn,
-+ int iteration,
-+ DBusConnection *uniq_conn[NUM_CONN])
-+{
-+ DBusMessage *reply;
-+ DBusMessage *method;
-+ DBusError error;
-+ char **list;
-+ int len, i;
-+ const char *name;
-+
-+ reply = NULL;
-+ method = NULL;
-+ list = NULL;
-+
-+ dbus_error_init (&error);
-+
-+ name = TEST_NAME;
-+ method = dbus_message_new_method_call (DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS,
-+ "ListQueuedOwners");
-+
-+ if (method == NULL)
-+ goto out;
-+
-+ if (!dbus_message_append_args (method,
-+ DBUS_TYPE_STRING, &name,
-+ DBUS_TYPE_INVALID))
-+ {
-+ fprintf (stderr, "Error appending args\n") ;
-+ goto out;
-+ }
-+
-+ reply = dbus_connection_send_with_reply_and_block (conn,
-+ method,
-+ -1,
-+ &error);
-+
-+ if (reply == NULL)
-+ {
-+ fprintf (stderr, "Error calling ListQueuedOwners: %s\n", error.message);
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+
-+
-+
-+ if (!dbus_message_get_args (reply,
-+ &error,
-+ DBUS_TYPE_ARRAY, DBUS_TYPE_STRING,
-+ &list, &len,
-+ DBUS_TYPE_INVALID))
-+ {
-+ fprintf (stderr, "Error getting args: %s\n", error.message);
-+ dbus_error_free (&error);
-+ goto out;
-+ }
-+
-+ printf ("Iteration %i: ", iteration);
-+
-+ if (len > NUM_CONN)
-+ {
-+ fprintf (stderr, "There are %i connections in the queue,"
-+ " we are only expecting up to %i connections!\n",
-+ len,
-+ NUM_CONN);
-+ goto out;
-+ }
-+
-+ for (i = 0; i < len; i++)
-+ {
-+ int expected_conn_num;
-+ const char *expected_uname;
-+
-+ if (i > 0)
-+ printf (", ");
-+
-+ printf ("%s", list[i]);
-+
-+ expected_conn_num = test_data[iteration].expected_queue[i];
-+
-+ if (expected_conn_num == -1)
-+ {
-+ fprintf (stderr,
-+ "\nDid not expect this last connection"
-+ " to be in the queue!\n");
-+ goto out;
-+ }
-+
-+ expected_uname =
-+ dbus_bus_connection_get_unique_name (uniq_conn[expected_conn_num]);
-+
-+ if (strcmp (list[i], expected_uname) != 0)
-+ {
-+ fprintf (stderr,
-+ "\n%s expected but %s is in the queue!\n",
-+ expected_uname,
-+ list[i]);
-+
-+ goto out;
-+ }
-+ }
-+
-+ printf ("\n");
-+
-+ dbus_message_unref (method);
-+ dbus_message_unref (reply);
-+ dbus_free_string_array (list);
-+ return TRUE;
-+
-+ out:
-+ if (method != NULL)
-+ dbus_message_unref (method);
-+
-+ if (reply != NULL)
-+ dbus_message_unref (reply);
-+
-+ if (list != NULL)
-+ dbus_free_string_array (list);
-+
-+ return FALSE;
-+}
-+
-+static void
-+clear_message_queue (DBusConnection *conn)
-+{
-+ int tries;
-+ DBusMessage *msg;
-+
-+ for (tries = 0; tries < NUM_TRIES_TIL_FAIL; tries++)
-+ {
-+ _dbus_connection_lock (conn);
-+ _dbus_connection_do_iteration_unlocked (conn,
-+ DBUS_ITERATION_DO_READING |
-+ DBUS_ITERATION_DO_WRITING |
-+ DBUS_ITERATION_BLOCK,
-+ 0);
-+ _dbus_connection_unlock (conn);
-+ msg = dbus_connection_pop_message (conn);
-+ }
-+}
-+
-+static dbus_bool_t
-+match_acquired_or_lost_signal (DBusConnection *conn, const char *member, const char *name)
-+{
-+ int tries;
-+ DBusMessage *msg;
-+ const char *interface = "org.freedesktop.DBus";
-+
-+ for (tries = 0; tries < NUM_TRIES_TIL_FAIL; tries++)
-+ {
-+ _dbus_connection_lock (conn);
-+ _dbus_connection_do_iteration_unlocked (conn,
-+ DBUS_ITERATION_DO_READING |
-+ DBUS_ITERATION_DO_WRITING |
-+ DBUS_ITERATION_BLOCK,
-+ 0);
-+ _dbus_connection_unlock (conn);
-+ msg = dbus_connection_pop_message (conn);
-+ if (msg != NULL)
-+ {
-+ if (dbus_message_is_signal (msg,
-+ interface,
-+ member))
-+ {
-+ const char *n;
-+ DBusError error;
-+ dbus_error_init (&error);
-+
-+ dbus_message_get_args (msg, &error, DBUS_TYPE_STRING, &n, DBUS_TYPE_INVALID);
-+
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "Error getting args: %s\n", error.message);
-+ dbus_error_free (&error);
-+ dbus_message_unref (msg);
-+ return FALSE;
-+ }
-+
-+ if (strcmp (n, name) == 0)
-+ {
-+ dbus_message_unref (msg);
-+ break;
-+ }
-+ }
-+ dbus_message_unref (msg);
-+ }
-+ }
-+
-+ if (tries == NUM_TRIES_TIL_FAIL)
-+ {
-+ fprintf (stderr, "Did not recive the expected %s.%s signal!!!\n", interface, member);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static dbus_bool_t
-+match_name_owner_changed_signal (DBusConnection *conn, const char *bus_name, const char *lost_name, const char *acquired_name)
-+{
-+ int tries;
-+ DBusMessage *msg;
-+
-+ for (tries = 0; tries < NUM_TRIES_TIL_FAIL; tries++)
-+ {
-+ _dbus_connection_lock (conn);
-+ _dbus_connection_do_iteration_unlocked (conn,
-+ DBUS_ITERATION_DO_READING |
-+ DBUS_ITERATION_DO_WRITING |
-+ DBUS_ITERATION_BLOCK,
-+ 0);
-+ _dbus_connection_unlock (conn);
-+ msg = dbus_connection_pop_message (conn);
-+
-+ if (msg != NULL)
-+ {
-+ if (dbus_message_is_signal (msg,
-+ "org.freedesktop.DBus",
-+ "NameOwnerChanged"))
-+ {
-+ const char *n;
-+ const char *ln;
-+ const char *an;
-+ DBusError error;
-+ dbus_error_init (&error);
-+
-+ dbus_message_get_args (msg, &error, DBUS_TYPE_STRING, &n, DBUS_TYPE_STRING, &ln, DBUS_TYPE_STRING, &an, DBUS_TYPE_INVALID);
-+
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "Error getting args: %s\n", error.message);
-+ dbus_error_free (&error);
-+ dbus_message_unref (msg);
-+ return FALSE;
-+ }
-+
-+ if (strcmp (n, bus_name) == 0)
-+ {
-+ if ((lost_name == NULL && strcmp (ln, "") == 0)
-+ || strcmp (lost_name, ln) == 0)
-+ {
-+ if ((acquired_name == NULL && strcmp (an, "") == 0)
-+ || strcmp (acquired_name, an) == 0)
-+ {
-+ dbus_message_unref (msg);
-+ break;
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Error: name %s was expected to be acquired but we got %s instead\n", acquired_name, an);
-+ dbus_message_unref (msg);
-+ return FALSE;
-+ }
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Error: name %s was expected to be lost but we got %s instead\n", lost_name, ln);
-+ dbus_message_unref (msg);
-+ return FALSE;
-+ }
-+ }
-+ }
-+ dbus_message_unref (msg);
-+ }
-+ }
-+
-+ if (tries == NUM_TRIES_TIL_FAIL)
-+ {
-+ fprintf (stderr, "Did not recive the expected NameOwnerChanged signal!!!\n");
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+
-+static dbus_bool_t
-+check_signals (DBusConnection *monitor,
-+ int iteration,
-+ DBusConnection *conn[NUM_CONN])
-+{
-+ DBusConnection *lost_conn = NULL;
-+ DBusConnection *acquired_conn = NULL;
-+ const char *lost_name;
-+ const char *acquired_name;
-+
-+ if (iteration == 0)
-+ {
-+ int i;
-+ i = test_data[iteration].expected_queue[0];
-+
-+ if (i >= 0)
-+ acquired_conn = conn[i];
-+ }
-+ else
-+ {
-+ int i;
-+ i = test_data[iteration - 1].expected_queue[0];
-+
-+ if (i >= 0)
-+ lost_conn = conn[i];
-+
-+ i = test_data[iteration].expected_queue[0];
-+
-+ if (i >= 0)
-+ acquired_conn = conn[i];
-+
-+ if (acquired_conn == lost_conn)
-+ acquired_conn = lost_conn = NULL;
-+ }
-+
-+ lost_name = lost_conn == NULL? NULL :
-+ dbus_bus_connection_get_unique_name (lost_conn);
-+
-+ acquired_name = acquired_conn == NULL? NULL :
-+ dbus_bus_connection_get_unique_name (acquired_conn);
-+
-+ if (lost_name != NULL)
-+ if (!match_acquired_or_lost_signal (lost_conn,
-+ "NameLost",
-+ TEST_NAME))
-+ return FALSE;
-+
-+ if (acquired_name != NULL)
-+ if (!match_acquired_or_lost_signal (acquired_conn,
-+ "NameAcquired",
-+ TEST_NAME))
-+ return FALSE;
-+
-+ if (acquired_name != NULL || lost_name != NULL)
-+ if (!match_name_owner_changed_signal (monitor,
-+ TEST_NAME,
-+ lost_name,
-+ acquired_name))
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+int
-+main (int argc, char *argv[])
-+{
-+ DBusConnection *conn[NUM_CONN];
-+ DBusConnection *monitor;
-+ DBusError error;
-+ int i;
-+ int test_data_len;
-+
-+ test_data_len = sizeof (test_data) / sizeof (CommandAndResult);
-+
-+ dbus_error_init (&error);
-+
-+ conn[0] = dbus_bus_get_private (DBUS_BUS_SESSION, &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "*** Failed to open connection 0 to session bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ if (!match_acquired_or_lost_signal (conn[0],
-+ "NameAcquired",
-+ dbus_bus_connection_get_unique_name (conn[0])))
-+ return 1;
-+
-+ conn[1] = dbus_bus_get_private (DBUS_BUS_SESSION, &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "*** Failed to open connection 1 to session bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ if (!match_acquired_or_lost_signal (conn[1],
-+ "NameAcquired",
-+ dbus_bus_connection_get_unique_name (conn[1])))
-+ return 1;
-+
-+
-+ conn[2] = dbus_bus_get_private (DBUS_BUS_SESSION, &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "*** Failed to open connection 2 to session bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ if (!match_acquired_or_lost_signal (conn[2],
-+ "NameAcquired",
-+ dbus_bus_connection_get_unique_name (conn[2])))
-+ return 1;
-+
-+
-+ conn[3] = dbus_bus_get_private (DBUS_BUS_SESSION, &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "*** Failed to open connection 3 to session bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ if (!match_acquired_or_lost_signal (conn[3],
-+ "NameAcquired",
-+ dbus_bus_connection_get_unique_name (conn[3])))
-+ return 1;
-+
-+
-+ monitor = dbus_bus_get (DBUS_BUS_SESSION, &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "*** Failed to open monitoring connection to session bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ if (!match_acquired_or_lost_signal (monitor,
-+ "NameAcquired",
-+ dbus_bus_connection_get_unique_name (monitor)))
-+ return 1;
-+
-+ dbus_bus_add_match (monitor, "", &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "*** Failed to set filter on monitoring connection: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+
-+ for (i = 0; i < NUM_CONN; i++)
-+ dbus_connection_set_exit_on_disconnect (conn[i], FALSE);
-+
-+ for (i = 0; i < test_data_len; i++)
-+ {
-+ dbus_uint32_t result;
-+ result = 0;
-+
-+ if (test_data[i].command == ADD_CONNECTION)
-+ {
-+ result = dbus_bus_request_name (conn[test_data[i].connection_number],
-+ TEST_NAME,
-+ test_data[i].flags,
-+ &error);
-+
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "Error on addition in iteration %i: %s\n", i, error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+ }
-+ else if (test_data[i].command == REMOVE_CONNECTION)
-+ {
-+ result = dbus_bus_release_name (conn[test_data[i].connection_number],
-+ TEST_NAME,
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "*** Failed to remove connection %i in iteration %i: %s\n",
-+ test_data[i].connection_number,
-+ i,
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Command #%i not a valid command!\n", test_data[i].command);
-+ return 1;
-+ }
-+
-+
-+ if (result != test_data[i].expected_result)
-+ {
-+ fprintf (stderr, "Results recived (%i) are not the expected results (%i) in iteration %i\n",
-+ result,
-+ test_data[i].expected_result,
-+ i);
-+ return 1;
-+ }
-+
-+ if (!check_connection (monitor, i, conn))
-+ {
-+ fprintf (stderr, "Failed at iteration %i\n", i);
-+ return 1;
-+ }
-+
-+ if (!check_signals (monitor, i, conn))
-+ {
-+ fprintf (stderr, "Failed at iteration %i\n", i);
-+ return 1;
-+ }
-+ }
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/python/Makefile.am dbus-0.61/test/python/Makefile.am
---- dbus-0.61.orig/test/python/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/python/Makefile.am 2005-08-25 02:20:41.000000000 +0200
-@@ -0,0 +1,11 @@
-+## note that TESTS has special meaning (stuff to use in make check)
-+## so if adding tests not to be run in make check, don't add them to
-+## TESTS
-+if DBUS_BUILD_TESTS
-+TESTS_ENVIRONMENT=DBUS_TOP_BUILDDIR=$(ABSOLUTE_TOP_BUILDDIR)
-+TESTS=run-test.sh
-+else
-+TESTS=
-+endif
-+
-+EXTRA_DIST=run-test.sh test-service.py test-client.py
-diff -Naur dbus-0.61.orig/test/python/Makefile.in dbus-0.61/test/python/Makefile.in
---- dbus-0.61.orig/test/python/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/python/Makefile.in 2006-02-27 22:34:41.000000000 +0100
-@@ -0,0 +1,545 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+subdir = test/python
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+SOURCES =
-+DIST_SOURCES =
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+ at DBUS_BUILD_TESTS_TRUE@TESTS_ENVIRONMENT = DBUS_TOP_BUILDDIR=$(ABSOLUTE_TOP_BUILDDIR)
-+ at DBUS_BUILD_TESTS_FALSE@TESTS =
-+ at DBUS_BUILD_TESTS_TRUE@TESTS = run-test.sh
-+EXTRA_DIST = run-test.sh test-service.py test-client.py
-+all: all-am
-+
-+.SUFFIXES:
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/python/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu test/python/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+tags: TAGS
-+TAGS:
-+
-+ctags: CTAGS
-+CTAGS:
-+
-+
-+check-TESTS: $(TESTS)
-+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-+ srcdir=$(srcdir); export srcdir; \
-+ list='$(TESTS)'; \
-+ if test -n "$$list"; then \
-+ for tst in $$list; do \
-+ if test -f ./$$tst; then dir=./; \
-+ elif test -f $$tst; then dir=; \
-+ else dir="$(srcdir)/"; fi; \
-+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xpass=`expr $$xpass + 1`; \
-+ failed=`expr $$failed + 1`; \
-+ echo "XPASS: $$tst"; \
-+ ;; \
-+ *) \
-+ echo "PASS: $$tst"; \
-+ ;; \
-+ esac; \
-+ elif test $$? -ne 77; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xfail=`expr $$xfail + 1`; \
-+ echo "XFAIL: $$tst"; \
-+ ;; \
-+ *) \
-+ failed=`expr $$failed + 1`; \
-+ echo "FAIL: $$tst"; \
-+ ;; \
-+ esac; \
-+ else \
-+ skip=`expr $$skip + 1`; \
-+ echo "SKIP: $$tst"; \
-+ fi; \
-+ done; \
-+ if test "$$failed" -eq 0; then \
-+ if test "$$xfail" -eq 0; then \
-+ banner="All $$all tests passed"; \
-+ else \
-+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-+ fi; \
-+ else \
-+ if test "$$xpass" -eq 0; then \
-+ banner="$$failed of $$all tests failed"; \
-+ else \
-+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-+ fi; \
-+ fi; \
-+ dashes="$$banner"; \
-+ skipped=""; \
-+ if test "$$skip" -ne 0; then \
-+ skipped="($$skip tests were not run)"; \
-+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$skipped"; \
-+ fi; \
-+ report=""; \
-+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-+ report="Please report to $(PACKAGE_BUGREPORT)"; \
-+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$report"; \
-+ fi; \
-+ dashes=`echo "$$dashes" | sed s/./=/g`; \
-+ echo "$$dashes"; \
-+ echo "$$banner"; \
-+ test -z "$$skipped" || echo "$$skipped"; \
-+ test -z "$$report" || echo "$$report"; \
-+ echo "$$dashes"; \
-+ test "$$failed" -eq 0; \
-+ else :; fi
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-+check: check-am
-+all-am: Makefile
-+installdirs:
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-generic distclean-libtool
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
-+ clean-libtool distclean distclean-generic distclean-libtool \
-+ distdir dvi dvi-am html html-am info info-am install \
-+ install-am install-data install-data-am install-exec \
-+ install-exec-am install-info install-info-am install-man \
-+ install-strip installcheck installcheck-am installdirs \
-+ maintainer-clean maintainer-clean-generic mostlyclean \
-+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-+ uninstall uninstall-am uninstall-info-am
-+
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/test/python/run-test.sh dbus-0.61/test/python/run-test.sh
---- dbus-0.61.orig/test/python/run-test.sh 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/python/run-test.sh 2005-10-18 06:38:05.000000000 +0200
-@@ -0,0 +1,42 @@
-+#! /bin/bash
-+
-+function die()
-+{
-+ if ! test -z "$DBUS_SESSION_BUS_PID" ; then
-+ echo "killing message bus "$DBUS_SESSION_BUS_PID >&2
-+ kill -9 $DBUS_SESSION_BUS_PID
-+ fi
-+ echo $SCRIPTNAME: $* >&2
-+
-+ rm $DBUS_TOP_BUILDDIR/python/dbus
-+
-+ exit 1
-+}
-+
-+
-+SCRIPTNAME=$0
-+MODE=$1
-+
-+## so the tests can complain if you fail to use the script to launch them
-+export DBUS_TEST_PYTHON_RUN_TEST_SCRIPT=1
-+
-+# Rerun ourselves with tmp session bus if we're not already
-+if test -z "$DBUS_TEST_PYTHON_IN_RUN_TEST"; then
-+ DBUS_TEST_PYTHON_IN_RUN_TEST=1
-+ export DBUS_TEST_PYTHON_IN_RUN_TEST
-+ exec $DBUS_TOP_BUILDDIR/tools/run-with-tmp-session-bus.sh $SCRIPTNAME $MODE
-+fi
-+
-+ln -s $DBUS_TOP_BUILDDIR/python $DBUS_TOP_BUILDDIR/python/dbus
-+echo "running test-client.py"
-+#uncomment this if you need to see the output from the service for debugging
-+#otherwise keep it commented so we can test activation
-+#libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/test/python/test-service.py &
-+#libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/test/glib/test-service-glib &
-+#sleep 1
-+#ps
-+#sleep 9
-+
-+libtool --mode=execute $DEBUG $DBUS_TOP_BUILDDIR/test/python/test-client.py || die "test-client.py failed"
-+rm $DBUS_TOP_BUILDDIR/python/dbus
-+
-diff -Naur dbus-0.61.orig/test/python/run-with-tmp-session-bus.conf dbus-0.61/test/python/run-with-tmp-session-bus.conf
---- dbus-0.61.orig/test/python/run-with-tmp-session-bus.conf 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/python/run-with-tmp-session-bus.conf 2006-02-24 18:22:24.000000000 +0100
-@@ -0,0 +1,30 @@
-+<!-- This configuration file controls the per-user-login-session message bus.
-+ Add a session-local.conf and edit that rather than changing this
-+ file directly. -->
-+
-+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
-+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
-+<busconfig>
-+ <!-- Our well-known bus type, don't change this -->
-+ <type>session</type>
-+
-+ <listen>unix:tmpdir=/tmp</listen>
-+
-+ <servicedir>/home/boston/johnp/devel-local/dbus/test/data/valid-service-files</servicedir>
-+
-+ <policy context="default">
-+ <!-- Allow everything to be sent -->
-+ <allow send_destination="*"/>
-+ <!-- Allow everything to be received -->
-+ <allow eavesdrop="true"/>
-+ <!-- Allow anyone to own anything -->
-+ <allow own="*"/>
-+ </policy>
-+
-+ <!-- This is included last so local configuration can override what's
-+ in this standard file -->
-+
-+
-+
-+
-+</busconfig>
-diff -Naur dbus-0.61.orig/test/python/test-client.py dbus-0.61/test/python/test-client.py
---- dbus-0.61.orig/test/python/test-client.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/python/test-client.py 2005-11-27 18:44:19.000000000 +0100
-@@ -0,0 +1,306 @@
-+#!/usr/bin/env python
-+import sys
-+import os
-+import unittest
-+import time
-+
-+builddir = os.environ["DBUS_TOP_BUILDDIR"]
-+pydir = builddir + "/python"
-+
-+sys.path.insert(0, pydir)
-+sys.path.insert(0, pydir + "/.libs")
-+
-+import dbus
-+import dbus_bindings
-+import gobject
-+import dbus.glib
-+import dbus.service
-+
-+if not dbus.__file__.startswith(pydir):
-+ raise Exception("DBus modules are not being picked up from the package")
-+
-+if not dbus_bindings.__file__.startswith(pydir):
-+ raise Exception("DBus modules are not being picked up from the package")
-+
-+test_types_vals = [1, 12323231, 3.14159265, 99999999.99,
-+ "dude", "123", "What is all the fuss about?", "gob at gob.com",
-+ u'\\u310c\\u310e\\u3114', u'\\u0413\\u0414\\u0415',
-+ u'\\u2200software \\u2203crack', u'\\xf4\\xe5\\xe8',
-+ [1,2,3], ["how", "are", "you"], [1.23,2.3], [1], ["Hello"],
-+ (1,2,3), (1,), (1,"2",3), ("2", "what"), ("you", 1.2),
-+ {1:"a", 2:"b"}, {"a":1, "b":2}, #{"a":(1,"B")},
-+ {1:1.1, 2:2.2}, [[1,2,3],[2,3,4]], [["a","b"],["c","d"]],
-+ True, False,
-+ dbus.Int16(-10), dbus.UInt16(10),
-+ #([1,2,3],"c", 1.2, ["a","b","c"], {"a": (1,"v"), "b": (2,"d")})
-+ ]
-+
-+class TestDBusBindings(unittest.TestCase):
-+ def setUp(self):
-+ self.bus = dbus.SessionBus()
-+ self.remote_object = self.bus.get_object("org.freedesktop.DBus.TestSuitePythonService", "/org/freedesktop/DBus/TestSuitePythonObject")
-+ self.iface = dbus.Interface(self.remote_object, "org.freedesktop.DBus.TestSuiteInterface")
-+
-+ def testInterfaceKeyword(self):
-+ #test dbus_interface parameter
-+ print self.remote_object.Echo("dbus_interface on Proxy test Passed", dbus_interface = "org.freedesktop.DBus.TestSuiteInterface")
-+ print self.iface.Echo("dbus_interface on Interface test Passed", dbus_interface = "org.freedesktop.DBus.TestSuiteInterface")
-+ self.assert_(True)
-+
-+ def testIntrospection(self):
-+ #test introspection
-+ print "\n********* Introspection Test ************"
-+ print self.remote_object.Introspect(dbus_interface="org.freedesktop.DBus.Introspectable")
-+ print "Introspection test passed"
-+ self.assert_(True)
-+
-+ def testPythonTypes(self):
-+ #test sending python types and getting them back
-+ print "\n********* Testing Python Types ***********"
-+
-+ for send_val in test_types_vals:
-+ print "Testing %s"% str(send_val)
-+ recv_val = self.iface.Echo(send_val)
-+ self.assertEquals(send_val, recv_val)
-+
-+ def testBenchmarkIntrospect(self):
-+ print "\n********* Benchmark Introspect ************"
-+ a = time.time()
-+ print a
-+ print self.iface.GetComplexArray()
-+ b = time.time()
-+ print b
-+ print "Delta: %f" % (b - a)
-+ self.assert_(True)
-+
-+ def testAsyncCalls(self):
-+ #test sending python types and getting them back async
-+ print "\n********* Testing Async Calls ***********"
-+
-+
-+ main_loop = gobject.MainLoop()
-+ class async_check:
-+ def __init__(self, test_controler, expected_result, do_exit):
-+ self.expected_result = expected_result
-+ self.do_exit = do_exit
-+ self.test_controler = test_controler
-+
-+ def callback(self, val):
-+ try:
-+ if self.do_exit:
-+ main_loop.quit()
-+
-+ self.test_controler.assertEquals(val, self.expected_result)
-+ except Exception, e:
-+ print "%s:\n%s" % (e.__class__, e)
-+
-+ def error_handler(self, error):
-+ print error
-+ if self.do_exit:
-+ main_loop.quit()
-+
-+ self.test_controler.assert_(val, False)
-+
-+ last_type = test_types_vals[-1]
-+ for send_val in test_types_vals:
-+ print "Testing %s"% str(send_val)
-+ check = async_check(self, send_val, last_type == send_val)
-+ recv_val = self.iface.Echo(send_val,
-+ reply_handler = check.callback,
-+ error_handler = check.error_handler)
-+
-+ main_loop.run()
-+
-+ def testStrictMarshalling(self):
-+ print "\n********* Testing strict return & signal marshalling ***********"
-+
-+ # these values are the same as in the server, and the
-+ # methods should only succeed when they are called with
-+ # the right value number, because they have out_signature
-+ # decorations, and return an unmatching type when called
-+ # with a different number
-+ values = ["", ("",""), ("","",""), [], {}, ["",""], ["","",""]]
-+ methods = [
-+ (self.iface.ReturnOneString, 'SignalOneString', set([0]), set([0])),
-+ (self.iface.ReturnTwoStrings, 'SignalTwoStrings', set([1, 5]), set([5])),
-+ (self.iface.ReturnStruct, 'SignalStruct', set([1, 5]), set([1])),
-+ # all of our test values are sequences so will marshall correctly into an array :P
-+ (self.iface.ReturnArray, 'SignalArray', set(range(len(values))), set([3, 5, 6])),
-+ (self.iface.ReturnDict, 'SignalDict', set([0, 3, 4]), set([4]))
-+ ]
-+
-+ for (method, signal, success_values, return_values) in methods:
-+ print "\nTrying correct behaviour of", method._method_name
-+ for value in range(len(values)):
-+ try:
-+ ret = method(value)
-+ except Exception, e:
-+ print "%s(%r) raised %s" % (method._method_name, values[value], e.__class__)
-+
-+ # should fail if it tried to marshal the wrong type
-+ self.assert_(value not in success_values, "%s should succeed when we ask it to return %r\n%s\n%s" % (method._method_name, values[value], e.__class__, e))
-+ else:
-+ print "%s(%r) returned %r" % (method._method_name, values[value], ret)
-+
-+ # should only succeed if it's the right return type
-+ self.assert_(value in success_values, "%s should fail when we ask it to return %r" % (method._method_name, values[value]))
-+
-+ # check the value is right too :D
-+ returns = map(lambda n: values[n], return_values)
-+ self.assert_(ret in returns, "%s should return one of %r" % (method._method_name, returns))
-+
-+ print "\nTrying correct emission of", signal
-+ for value in range(len(values)):
-+ try:
-+ self.iface.EmitSignal(signal, value)
-+ except Exception, e:
-+ print "EmitSignal(%s, %r) raised %s" % (signal, values[value], e.__class__)
-+
-+ # should fail if it tried to marshal the wrong type
-+ self.assert_(value not in success_values, "EmitSignal(%s) should succeed when we ask it to return %r\n%s\n%s" % (signal, values[value], e.__class__, e))
-+ else:
-+ print "EmitSignal(%s, %r) appeared to succeed" % (signal, values[value])
-+
-+ # should only succeed if it's the right return type
-+ self.assert_(value in success_values, "EmitSignal(%s) should fail when we ask it to return %r" % (signal, values[value]))
-+
-+ # FIXME: wait for the signal here
-+
-+ print
-+
-+ def testInheritance(self):
-+ print "\n********* Testing inheritance from dbus.method.Interface ***********"
-+ ret = self.iface.CheckInheritance()
-+ print "CheckInheritance returned %s" % ret
-+ self.assert_(ret, "overriding CheckInheritance from TestInterface failed")
-+
-+ def testAsyncMethods(self):
-+ print "\n********* Testing asynchronous method implementation *******"
-+ for (async, fail) in ((False, False), (False, True), (True, False), (True, True)):
-+ try:
-+ val = ('a', 1, False, [1,2], {1:2})
-+ print "calling AsynchronousMethod with %s %s %s" % (async, fail, val)
-+ ret = self.iface.AsynchronousMethod(async, fail, val)
-+ except Exception, e:
-+ print "%s:\n%s" % (e.__class__, e)
-+ self.assert_(fail)
-+ else:
-+ self.assert_(not fail)
-+ print val, ret
-+ self.assert_(val == ret)
-+
-+ def testBusInstanceCaching(self):
-+ print "\n********* Testing dbus.Bus instance sharing *********"
-+
-+ # unfortunately we can't test the system bus here
-+ # but the codepaths are the same
-+ for (cls, type, func) in ((dbus.SessionBus, dbus.Bus.TYPE_SESSION, dbus.Bus.get_session), (dbus.StarterBus, dbus.Bus.TYPE_STARTER, dbus.Bus.get_starter)):
-+ print "\nTesting %s:" % cls.__name__
-+
-+ share_cls = cls()
-+ share_type = dbus.Bus(bus_type=type)
-+ share_func = func()
-+
-+ private_cls = cls(private=True)
-+ private_type = dbus.Bus(bus_type=type, private=True)
-+ private_func = func(private=True)
-+
-+ print " - checking shared instances are the same..."
-+ self.assert_(share_cls == share_type, '%s should equal %s' % (share_cls, share_type))
-+ self.assert_(share_type == share_func, '%s should equal %s' % (share_type, share_func))
-+
-+ print " - checking private instances are distinct from the shared instance..."
-+ self.assert_(share_cls != private_cls, '%s should not equal %s' % (share_cls, private_cls))
-+ self.assert_(share_type != private_type, '%s should not equal %s' % (share_type, private_type))
-+ self.assert_(share_func != private_func, '%s should not equal %s' % (share_func, private_func))
-+
-+ print " - checking private instances are distinct from each other..."
-+ self.assert_(private_cls != private_type, '%s should not equal %s' % (private_cls, private_type))
-+ self.assert_(private_type != private_func, '%s should not equal %s' % (private_type, private_func))
-+ self.assert_(private_func != private_cls, '%s should not equal %s' % (private_func, private_cls))
-+
-+ def testSenderName(self):
-+ print '\n******** Testing sender name keyword ********'
-+ myself = self.iface.WhoAmI()
-+ print "I am", myself
-+
-+ def testBusNameCreation(self):
-+ print '\n******** Testing BusName creation ********'
-+ test = [('org.freedesktop.DBus.Python.TestName', True),
-+ ('org.freedesktop.DBus.Python.TestName', True),
-+ ('org.freedesktop.DBus.Python.InvalidName&^*%$', False)]
-+ # Do some more intelligent handling/testing of queueing vs success?
-+ # ('org.freedesktop.DBus.TestSuitePythonService', False)]
-+ # For some reason this actually succeeds
-+ # ('org.freedesktop.DBus', False)]
-+
-+ # make a method call to ensure the test service is active
-+ self.iface.Echo("foo")
-+
-+ names = {}
-+ for (name, succeed) in test:
-+ try:
-+ print "requesting %s" % name
-+ busname = dbus.service.BusName(name)
-+ except Exception, e:
-+ print "%s:\n%s" % (e.__class__, e)
-+ self.assert_(not succeed, 'did not expect registering bus name %s to fail' % name)
-+ else:
-+ print busname
-+ self.assert_(succeed, 'expected registering bus name %s to fail'% name)
-+ if name in names:
-+ self.assert_(names[name] == busname, 'got a new instance for same name %s' % name)
-+ print "instance of %s re-used, good!" % name
-+ else:
-+ names[name] = busname
-+
-+ del busname
-+
-+ print
-+
-+ del names
-+
-+ bus = dbus.Bus()
-+ ret = dbus.dbus_bindings.bus_name_has_owner(bus._connection, 'org.freedesktop.DBus.Python.TestName')
-+ self.assert_(not ret, 'deleting reference failed to release BusName org.freedesktop.DBus.Python.TestName')
-+
-+
-+class TestDBusPythonToGLibBindings(unittest.TestCase):
-+ def setUp(self):
-+ self.bus = dbus.SessionBus()
-+ self.remote_object = self.bus.get_object("org.freedesktop.DBus.TestSuiteGLibService", "/org/freedesktop/DBus/Tests/MyTestObject")
-+ self.iface = dbus.Interface(self.remote_object, "org.freedesktop.DBus.Tests.MyObject")
-+
-+ def testIntrospection(self):
-+ #test introspection
-+ print "\n********* Introspection Test ************"
-+ print self.remote_object.Introspect(dbus_interface="org.freedesktop.DBus.Introspectable")
-+ print "Introspection test passed"
-+ self.assert_(True)
-+
-+ def testCalls(self):
-+ print "\n********* Call Test ************"
-+ result = self.iface.ManyArgs(1000, 'Hello GLib', 2)
-+ print result
-+ self.assert_(result == [2002.0, 'HELLO GLIB'])
-+
-+ arg0 = {"Dude": 1, "john": "palmieri", "python": 2.4}
-+ result = self.iface.ManyStringify(arg0)
-+ print result
-+
-+ print "Call test passed"
-+ self.assert_(True)
-+
-+ def testPythonTypes(self):
-+ print "\n********* Testing Python Types ***********"
-+
-+ for send_val in test_types_vals:
-+ print "Testing %s"% str(send_val)
-+ recv_val = self.iface.EchoVariant(send_val)
-+ self.assertEquals(send_val, recv_val)
-+
-+if __name__ == '__main__':
-+ gobject.threads_init()
-+ dbus.glib.init_threads()
-+
-+ unittest.main()
-diff -Naur dbus-0.61.orig/test/python/test-service.py dbus-0.61/test/python/test-service.py
---- dbus-0.61.orig/test/python/test-service.py 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/python/test-service.py 2005-11-14 03:53:30.000000000 +0100
-@@ -0,0 +1,141 @@
-+#!/usr/bin/env python
-+import sys
-+import os
-+
-+builddir = os.environ["DBUS_TOP_BUILDDIR"]
-+pydir = builddir + "/python"
-+
-+sys.path.insert(0, pydir)
-+sys.path.insert(0, pydir + '/.libs')
-+
-+import dbus
-+
-+if not dbus.__file__.startswith(pydir):
-+ raise Exception("DBus modules are not being picked up from the package")
-+
-+import dbus.service
-+import dbus.glib
-+import gobject
-+import random
-+
-+class TestInterface(dbus.service.Interface):
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='', out_signature='b')
-+ def CheckInheritance(self):
-+ return False
-+
-+class TestObject(dbus.service.Object, TestInterface):
-+ def __init__(self, bus_name, object_path="/org/freedesktop/DBus/TestSuitePythonObject"):
-+ dbus.service.Object.__init__(self, bus_name, object_path)
-+
-+ """ Echo whatever is sent
-+ """
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface")
-+ def Echo(self, arg):
-+ return arg
-+
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface")
-+ def GetComplexArray(self):
-+ ret = []
-+ for i in range(0,100):
-+ ret.append((random.randint(0,100), random.randint(0,100), str(random.randint(0,100))))
-+
-+ return dbus.Array(ret, signature="(uus)")
-+
-+ def returnValue(self, test):
-+ if test == 0:
-+ return ""
-+ elif test == 1:
-+ return "",""
-+ elif test == 2:
-+ return "","",""
-+ elif test == 3:
-+ return []
-+ elif test == 4:
-+ return {}
-+ elif test == 5:
-+ return ["",""]
-+ elif test == 6:
-+ return ["","",""]
-+
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='s')
-+ def ReturnOneString(self, test):
-+ return self.returnValue(test)
-+
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='ss')
-+ def ReturnTwoStrings(self, test):
-+ return self.returnValue(test)
-+
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='(ss)')
-+ def ReturnStruct(self, test):
-+ return self.returnValue(test)
-+
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='as')
-+ def ReturnArray(self, test):
-+ return self.returnValue(test)
-+
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='a{ss}')
-+ def ReturnDict(self, test):
-+ return self.returnValue(test)
-+
-+ @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='s')
-+ def SignalOneString(self, test):
-+ pass
-+
-+ @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='ss')
-+ def SignalTwoStrings(self, test, test2):
-+ pass
-+
-+ @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='(ss)')
-+ def SignalStruct(self, test):
-+ pass
-+
-+ @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='as')
-+ def SignalArray(self, test):
-+ pass
-+
-+ @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='a{ss}')
-+ def SignalDict(self, test):
-+ pass
-+
-+ @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='su', out_signature='')
-+ def EmitSignal(self, signal, value):
-+ sig = getattr(self, signal, None)
-+ assert(sig != None)
-+
-+ val = self.returnValue(value)
-+ # make two string case work by passing arguments in by tuple
-+ if (signal == 'SignalTwoStrings' and (value == 1 or value == 5)):
-+ val = tuple(val)
-+ else:
-+ val = tuple([val])
-+
-+ sig(*val)
-+
-+ def CheckInheritance(self):
-+ return True
-+
-+ @dbus.service.method('org.freedesktop.DBus.TestSuiteInterface', in_signature='bbv', out_signature='v', async_callbacks=('return_cb', 'error_cb'))
-+ def AsynchronousMethod(self, async, fail, variant, return_cb, error_cb):
-+ try:
-+ if async:
-+ gobject.timeout_add(500, self.AsynchronousMethod, False, fail, variant, return_cb, error_cb)
-+ return
-+ else:
-+ if fail:
-+ raise RuntimeError
-+ else:
-+ return_cb(variant)
-+
-+ return False # do not run again
-+ except Exception, e:
-+ error_cb(e)
-+
-+ @dbus.service.method('org.freedesktop.DBus.TestSuiteInterface', in_signature='', out_signature='s', sender_keyword='sender')
-+ def WhoAmI(self, sender):
-+ return sender
-+
-+session_bus = dbus.SessionBus()
-+name = dbus.service.BusName("org.freedesktop.DBus.TestSuitePythonService", bus=session_bus)
-+object = TestObject(name)
-+loop = gobject.MainLoop()
-+loop.run()
-diff -Naur dbus-0.61.orig/test/qt/Makefile.am dbus-0.61/test/qt/Makefile.am
---- dbus-0.61.orig/test/qt/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/qt/Makefile.am 2006-02-15 18:06:41.000000000 +0100
-@@ -0,0 +1,35 @@
-+INCLUDES=-I$(top_srcdir) -I$(top_srcdir)/qt $(DBUS_CLIENT_CFLAGS) $(DBUS_QT_CFLAGS) $(DBUS_QTESTLIB_CFLAGS) -DDBUS_COMPILATION
-+
-+if DBUS_BUILD_TESTS
-+TEST_BINARIES=qdbusconnection qdbusobject qdbusinterface qdbustype qdbusxmlparser hal
-+TESTS=
-+else
-+TEST_BINARIES=
-+TESTS=
-+endif
-+
-+
-+noinst_PROGRAMS= $(TEST_BINARIES)
-+
-+qdbusconnection_SOURCES= tst_qdbusconnection.cpp
-+qdbusobject_SOURCES= tst_qdbusobject.cpp
-+qdbusinterface_SOURCES= tst_qdbusinterface.cpp
-+qdbustype_SOURCES= tst_qdbustype.cpp
-+qdbusxmlparser_SOURCES= tst_qdbusxmlparser.cpp
-+hal_SOURCES = tst_hal.cpp
-+
-+tst_qdbusconnection.o: tst_qdbusconnection.moc
-+tst_qdbusobject.o: tst_qdbusobject.moc
-+tst_qdbusinterface.o: tst_qdbusinterface.moc
-+tst_qdbustype.o: tst_qdbustype.moc
-+tst_qdbusxmlparser.o: tst_qdbusxmlparser.moc
-+tst_hal.o: tst_hal.moc
-+
-+%.moc: %.cpp
-+ $(QT_MOC) $< > $@
-+
-+TEST_LIBS=$(DBUS_QTESTLIB_LIBS) $(top_builddir)/qt/libdbus-qt4-1.la
-+
-+LDADD=$(TEST_LIBS)
-+
-+CLEANFILES=tst_qdbusconnection.moc
-diff -Naur dbus-0.61.orig/test/qt/Makefile.in dbus-0.61/test/qt/Makefile.in
---- dbus-0.61.orig/test/qt/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/qt/Makefile.in 2006-02-27 22:34:41.000000000 +0100
-@@ -0,0 +1,727 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ../..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+noinst_PROGRAMS = $(am__EXEEXT_1)
-+subdir = test/qt
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+ at DBUS_BUILD_TESTS_TRUE@am__EXEEXT_1 = qdbusconnection$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ qdbusobject$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ qdbusinterface$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ qdbustype$(EXEEXT) \
-+ at DBUS_BUILD_TESTS_TRUE@ qdbusxmlparser$(EXEEXT) hal$(EXEEXT)
-+PROGRAMS = $(noinst_PROGRAMS)
-+am_hal_OBJECTS = tst_hal.$(OBJEXT)
-+hal_OBJECTS = $(am_hal_OBJECTS)
-+hal_LDADD = $(LDADD)
-+am__DEPENDENCIES_1 =
-+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
-+ $(top_builddir)/qt/libdbus-qt4-1.la
-+hal_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_qdbusconnection_OBJECTS = tst_qdbusconnection.$(OBJEXT)
-+qdbusconnection_OBJECTS = $(am_qdbusconnection_OBJECTS)
-+qdbusconnection_LDADD = $(LDADD)
-+qdbusconnection_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_qdbusinterface_OBJECTS = tst_qdbusinterface.$(OBJEXT)
-+qdbusinterface_OBJECTS = $(am_qdbusinterface_OBJECTS)
-+qdbusinterface_LDADD = $(LDADD)
-+qdbusinterface_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_qdbusobject_OBJECTS = tst_qdbusobject.$(OBJEXT)
-+qdbusobject_OBJECTS = $(am_qdbusobject_OBJECTS)
-+qdbusobject_LDADD = $(LDADD)
-+qdbusobject_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_qdbustype_OBJECTS = tst_qdbustype.$(OBJEXT)
-+qdbustype_OBJECTS = $(am_qdbustype_OBJECTS)
-+qdbustype_LDADD = $(LDADD)
-+qdbustype_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+am_qdbusxmlparser_OBJECTS = tst_qdbusxmlparser.$(OBJEXT)
-+qdbusxmlparser_OBJECTS = $(am_qdbusxmlparser_OBJECTS)
-+qdbusxmlparser_LDADD = $(LDADD)
-+qdbusxmlparser_DEPENDENCIES = $(am__DEPENDENCIES_2)
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-+LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CXXFLAGS) $(CXXFLAGS)
-+CXXLD = $(CXX)
-+CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-+ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(hal_SOURCES) $(qdbusconnection_SOURCES) \
-+ $(qdbusinterface_SOURCES) $(qdbusobject_SOURCES) \
-+ $(qdbustype_SOURCES) $(qdbusxmlparser_SOURCES)
-+DIST_SOURCES = $(hal_SOURCES) $(qdbusconnection_SOURCES) \
-+ $(qdbusinterface_SOURCES) $(qdbusobject_SOURCES) \
-+ $(qdbustype_SOURCES) $(qdbusxmlparser_SOURCES)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/qt $(DBUS_CLIENT_CFLAGS) $(DBUS_QT_CFLAGS) $(DBUS_QTESTLIB_CFLAGS) -DDBUS_COMPILATION
-+ at DBUS_BUILD_TESTS_FALSE@TEST_BINARIES =
-+ at DBUS_BUILD_TESTS_TRUE@TEST_BINARIES = qdbusconnection qdbusobject qdbusinterface qdbustype qdbusxmlparser hal
-+ at DBUS_BUILD_TESTS_FALSE@TESTS =
-+ at DBUS_BUILD_TESTS_TRUE@TESTS =
-+qdbusconnection_SOURCES = tst_qdbusconnection.cpp
-+qdbusobject_SOURCES = tst_qdbusobject.cpp
-+qdbusinterface_SOURCES = tst_qdbusinterface.cpp
-+qdbustype_SOURCES = tst_qdbustype.cpp
-+qdbusxmlparser_SOURCES = tst_qdbusxmlparser.cpp
-+hal_SOURCES = tst_hal.cpp
-+TEST_LIBS = $(DBUS_QTESTLIB_LIBS) $(top_builddir)/qt/libdbus-qt4-1.la
-+LDADD = $(TEST_LIBS)
-+CLEANFILES = tst_qdbusconnection.moc
-+all: all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .cpp .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/qt/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu test/qt/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+clean-noinstPROGRAMS:
-+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+hal$(EXEEXT): $(hal_OBJECTS) $(hal_DEPENDENCIES)
-+ @rm -f hal$(EXEEXT)
-+ $(CXXLINK) $(hal_LDFLAGS) $(hal_OBJECTS) $(hal_LDADD) $(LIBS)
-+qdbusconnection$(EXEEXT): $(qdbusconnection_OBJECTS) $(qdbusconnection_DEPENDENCIES)
-+ @rm -f qdbusconnection$(EXEEXT)
-+ $(CXXLINK) $(qdbusconnection_LDFLAGS) $(qdbusconnection_OBJECTS) $(qdbusconnection_LDADD) $(LIBS)
-+qdbusinterface$(EXEEXT): $(qdbusinterface_OBJECTS) $(qdbusinterface_DEPENDENCIES)
-+ @rm -f qdbusinterface$(EXEEXT)
-+ $(CXXLINK) $(qdbusinterface_LDFLAGS) $(qdbusinterface_OBJECTS) $(qdbusinterface_LDADD) $(LIBS)
-+qdbusobject$(EXEEXT): $(qdbusobject_OBJECTS) $(qdbusobject_DEPENDENCIES)
-+ @rm -f qdbusobject$(EXEEXT)
-+ $(CXXLINK) $(qdbusobject_LDFLAGS) $(qdbusobject_OBJECTS) $(qdbusobject_LDADD) $(LIBS)
-+qdbustype$(EXEEXT): $(qdbustype_OBJECTS) $(qdbustype_DEPENDENCIES)
-+ @rm -f qdbustype$(EXEEXT)
-+ $(CXXLINK) $(qdbustype_LDFLAGS) $(qdbustype_OBJECTS) $(qdbustype_LDADD) $(LIBS)
-+qdbusxmlparser$(EXEEXT): $(qdbusxmlparser_OBJECTS) $(qdbusxmlparser_DEPENDENCIES)
-+ @rm -f qdbusxmlparser$(EXEEXT)
-+ $(CXXLINK) $(qdbusxmlparser_LDFLAGS) $(qdbusxmlparser_OBJECTS) $(qdbusxmlparser_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_hal.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_qdbusconnection.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_qdbusinterface.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_qdbusobject.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_qdbustype.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_qdbusxmlparser.Po at am__quote@
-+
-+.cpp.o:
-+ at am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
-+
-+.cpp.obj:
-+ at am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-+
-+.cpp.lo:
-+ at am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+check-TESTS: $(TESTS)
-+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
-+ srcdir=$(srcdir); export srcdir; \
-+ list='$(TESTS)'; \
-+ if test -n "$$list"; then \
-+ for tst in $$list; do \
-+ if test -f ./$$tst; then dir=./; \
-+ elif test -f $$tst; then dir=; \
-+ else dir="$(srcdir)/"; fi; \
-+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xpass=`expr $$xpass + 1`; \
-+ failed=`expr $$failed + 1`; \
-+ echo "XPASS: $$tst"; \
-+ ;; \
-+ *) \
-+ echo "PASS: $$tst"; \
-+ ;; \
-+ esac; \
-+ elif test $$? -ne 77; then \
-+ all=`expr $$all + 1`; \
-+ case " $(XFAIL_TESTS) " in \
-+ *" $$tst "*) \
-+ xfail=`expr $$xfail + 1`; \
-+ echo "XFAIL: $$tst"; \
-+ ;; \
-+ *) \
-+ failed=`expr $$failed + 1`; \
-+ echo "FAIL: $$tst"; \
-+ ;; \
-+ esac; \
-+ else \
-+ skip=`expr $$skip + 1`; \
-+ echo "SKIP: $$tst"; \
-+ fi; \
-+ done; \
-+ if test "$$failed" -eq 0; then \
-+ if test "$$xfail" -eq 0; then \
-+ banner="All $$all tests passed"; \
-+ else \
-+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-+ fi; \
-+ else \
-+ if test "$$xpass" -eq 0; then \
-+ banner="$$failed of $$all tests failed"; \
-+ else \
-+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-+ fi; \
-+ fi; \
-+ dashes="$$banner"; \
-+ skipped=""; \
-+ if test "$$skip" -ne 0; then \
-+ skipped="($$skip tests were not run)"; \
-+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$skipped"; \
-+ fi; \
-+ report=""; \
-+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-+ report="Please report to $(PACKAGE_BUGREPORT)"; \
-+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-+ dashes="$$report"; \
-+ fi; \
-+ dashes=`echo "$$dashes" | sed s/./=/g`; \
-+ echo "$$dashes"; \
-+ echo "$$banner"; \
-+ test -z "$$skipped" || echo "$$skipped"; \
-+ test -z "$$report" || echo "$$report"; \
-+ echo "$$dashes"; \
-+ test "$$failed" -eq 0; \
-+ else :; fi
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-+check: check-am
-+all-am: Makefile $(PROGRAMS)
-+installdirs:
-+install: install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+clean: clean-am
-+
-+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
-+ mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am:
-+
-+install-exec-am:
-+
-+install-info: install-info-am
-+
-+install-man:
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-info-am
-+
-+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
-+ clean-generic clean-libtool clean-noinstPROGRAMS ctags \
-+ distclean distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags distdir dvi dvi-am html \
-+ html-am info info-am install install-am install-data \
-+ install-data-am install-exec install-exec-am install-info \
-+ install-info-am install-man install-strip installcheck \
-+ installcheck-am installdirs maintainer-clean \
-+ maintainer-clean-generic mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-+ tags uninstall uninstall-am uninstall-info-am
-+
-+
-+tst_qdbusconnection.o: tst_qdbusconnection.moc
-+tst_qdbusobject.o: tst_qdbusobject.moc
-+tst_qdbusinterface.o: tst_qdbusinterface.moc
-+tst_qdbustype.o: tst_qdbustype.moc
-+tst_qdbusxmlparser.o: tst_qdbusxmlparser.moc
-+tst_hal.o: tst_hal.moc
-+
-+%.moc: %.cpp
-+ $(QT_MOC) $< > $@
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/test/qt/tst_hal.cpp dbus-0.61/test/qt/tst_hal.cpp
---- dbus-0.61.orig/test/qt/tst_hal.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/qt/tst_hal.cpp 2006-02-15 18:06:41.000000000 +0100
-@@ -0,0 +1,78 @@
-+#include <qcoreapplication.h>
-+#include <qdebug.h>
-+
-+#include <QtTest/QtTest>
-+#include <dbus/qdbus.h>
-+
-+class tst_Hal: public QObject
-+{
-+ Q_OBJECT
-+
-+private slots:
-+ void getDevices();
-+ void lock();
-+};
-+
-+class Spy: public QObject
-+{
-+ Q_OBJECT
-+public:
-+ int count;
-+ QDBusConnection conn;
-+
-+ Spy(QDBusConnection c) : count(0), conn(c)
-+ { }
-+
-+public slots:
-+ void spySlot(int, const QVariantList&)
-+ {
-+ ++count;
-+ QDBusMessage msg = QDBusMessage::methodCall("org.freedesktop.Hal",
-+ "/org/freedesktop/Hal/devices/acpi_CPU0",
-+ "org.freedesktop.Hal.Device", "GetProperty");
-+ msg << "info.locked";
-+
-+ QDBusMessage reply = conn.sendWithReply(msg);
-+ QVERIFY(!reply.isEmpty());
-+ }
-+};
-+
-+
-+void tst_Hal::getDevices()
-+{
-+ QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SystemBus);
-+ QVERIFY(con.isConnected());
-+
-+ QDBusMessage msg = QDBusMessage::methodCall("org.freedesktop.Hal",
-+ "/org/freedesktop/Hal/Manager", "org.freedesktop.Hal.Manager",
-+ "GetAllDevices");
-+
-+ QDBusMessage reply = con.sendWithReply(msg);
-+ QVERIFY(!reply.isEmpty());
-+ qDebug() << reply;
-+}
-+
-+void tst_Hal::lock()
-+{
-+ QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SystemBus);
-+ QVERIFY(con.isConnected());
-+
-+ Spy spy( con );
-+
-+ con.connect("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/acpi_CPU0",
-+ "org.freedesktop.Hal.Device", "PropertyModified",
-+ &spy, SLOT(spySlot(int, QVariantList)));
-+ QDBusMessage msg = QDBusMessage::methodCall("org.freedesktop.Hal",
-+ "/org/freedesktop/Hal/devices/acpi_CPU0", "org.freedesktop.Hal.Device",
-+ "Lock");
-+ msg << "No reason...";
-+
-+ QDBusMessage reply = con.sendWithReply(msg);
-+ qDebug() << reply;
-+ QCOMPARE(spy.count, 3);
-+ QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
-+}
-+
-+QTEST_MAIN(tst_Hal)
-+
-+#include "tst_hal.moc"
-diff -Naur dbus-0.61.orig/test/qt/tst_qdbusconnection.cpp dbus-0.61/test/qt/tst_qdbusconnection.cpp
---- dbus-0.61.orig/test/qt/tst_qdbusconnection.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/qt/tst_qdbusconnection.cpp 2006-02-15 18:06:41.000000000 +0100
-@@ -0,0 +1,268 @@
-+#include <qcoreapplication.h>
-+#include <qdebug.h>
-+
-+#include <QtTest/QtTest>
-+
-+#include <dbus/qdbus.h>
-+
-+class tst_QDBusConnection: public QObject
-+{
-+ Q_OBJECT
-+
-+private slots:
-+ void init();
-+ void cleanupTestCase();
-+ void addConnection();
-+ void connect();
-+ void send();
-+ void sendAsync();
-+ void sendSignal();
-+ void requestName_data();
-+ void requestName();
-+ void getNameOwner_data();
-+ void getNameOwner();
-+ void releaseName_data();
-+ void releaseName();
-+};
-+
-+class QDBusSpy: public QObject
-+{
-+ Q_OBJECT
-+public slots:
-+ void handlePing(const QString &str) { args.clear(); args << str; }
-+ void asyncReply(const QDBusMessage &msg) { args << msg; serial = msg.replySerialNumber(); }
-+
-+public:
-+ QList<QVariant> args;
-+ int serial;
-+};
-+
-+void tst_QDBusConnection::init()
-+{
-+ if (qstrcmp(QTest::currentTestFunction(), "addConnection") == 0)
-+ return;
-+
-+ QDBusConnection::addConnection(QDBusConnection::SessionBus);
-+ QVERIFY(QDBusConnection().isConnected());
-+}
-+
-+void tst_QDBusConnection::cleanupTestCase()
-+{
-+ QDBusConnection::closeConnection();
-+
-+ QVERIFY(!QDBusConnection().isConnected());
-+}
-+
-+void tst_QDBusConnection::sendSignal()
-+{
-+ QDBusConnection con;
-+
-+ QVERIFY(con.isConnected());
-+
-+ QDBusMessage msg = QDBusMessage::signal("/org/kde/selftest", "org.kde.selftest",
-+ "Ping");
-+ msg << QLatin1String("ping");
-+
-+ QVERIFY(con.send(msg));
-+
-+ QTest::qWait(1000);
-+}
-+
-+void tst_QDBusConnection::send()
-+{
-+ QDBusConnection con;
-+
-+ QVERIFY(con.isConnected());
-+
-+ QDBusMessage msg = QDBusMessage::methodCall("org.freedesktop.DBus",
-+ "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListNames");
-+
-+ QDBusMessage reply = con.sendWithReply(msg);
-+
-+ QCOMPARE(reply.count(), 1);
-+ QCOMPARE(reply.at(0).typeName(), "QStringList");
-+ QVERIFY(reply.at(0).toStringList().contains(con.baseService()));
-+}
-+
-+void tst_QDBusConnection::sendAsync()
-+{
-+ QDBusConnection con;
-+ QVERIFY(con.isConnected());
-+
-+ QDBusSpy spy;
-+
-+ QDBusMessage msg = QDBusMessage::methodCall("org.freedesktop.DBus",
-+ "/org/freedesktop/DBus", "org.freedesktop.DBus", "ListNames");
-+ int msgId = con.sendWithReplyAsync(msg, &spy, SLOT(asyncReply(QDBusMessage)));
-+ QVERIFY(msgId != 0);
-+
-+ QTest::qWait(1000);
-+
-+ QCOMPARE(spy.args.value(0).typeName(), "QStringList");
-+ QVERIFY(spy.args.at(0).toStringList().contains(con.baseService()));
-+ QCOMPARE(spy.serial, msgId);
-+}
-+
-+void tst_QDBusConnection::connect()
-+{
-+ QDBusSpy spy;
-+
-+ QDBusConnection con;
-+
-+ con.connect(con.baseService(), "/org/kde/selftest", "org.kde.selftest", "ping", &spy,
-+ SLOT(handlePing(QString)));
-+
-+ QDBusMessage msg = QDBusMessage::signal("/org/kde/selftest", "org.kde.selftest",
-+ "ping");
-+ msg << QLatin1String("ping");
-+
-+ QVERIFY(con.send(msg));
-+
-+ QTest::qWait(1000);
-+
-+ QCOMPARE(spy.args.count(), 1);
-+ QCOMPARE(spy.args.at(0).toString(), QString("ping"));
-+}
-+
-+void tst_QDBusConnection::addConnection()
-+{
-+ {
-+ QDBusConnection con = QDBusConnection::addConnection(
-+ QDBusConnection::SessionBus, "bubu");
-+
-+ QVERIFY(con.isConnected());
-+ QVERIFY(!con.lastError().isValid());
-+
-+ QDBusConnection con2;
-+ QVERIFY(!con2.isConnected());
-+ QVERIFY(!con2.lastError().isValid());
-+
-+ con2 = con;
-+ QVERIFY(con.isConnected());
-+ QVERIFY(con2.isConnected());
-+ QVERIFY(!con.lastError().isValid());
-+ QVERIFY(!con2.lastError().isValid());
-+ }
-+
-+ {
-+ QDBusConnection con("bubu");
-+ QVERIFY(con.isConnected());
-+ QVERIFY(!con.lastError().isValid());
-+ }
-+
-+ QDBusConnection::closeConnection("bubu");
-+
-+ {
-+ QDBusConnection con("bubu");
-+ QVERIFY(!con.isConnected());
-+ QVERIFY(!con.lastError().isValid());
-+ }
-+
-+ {
-+ {
-+ QDBusConnection con = QDBusConnection::addConnection(
-+ QDBusConnection::SessionBus);
-+ QVERIFY(con.isConnected());
-+ }
-+
-+ {
-+ QDBusConnection con;
-+ QVERIFY(con.isConnected());
-+ QDBusConnection::closeConnection();
-+ QVERIFY(con.isConnected());
-+ }
-+
-+ {
-+ QDBusConnection con;
-+ QVERIFY(!con.isConnected());
-+ }
-+ }
-+}
-+
-+void tst_QDBusConnection::requestName_data()
-+{
-+ QTest::addColumn<QString>("requestedName");
-+ QTest::addColumn<int>("flags");
-+ QTest::addColumn<bool>("expectedResult");
-+
-+ QTest::newRow("null") << QString() << (int)QDBusConnection::NoReplace << false;
-+ QTest::newRow("empty") << QString("") << (int)QDBusConnection::NoReplace << false;
-+ QTest::newRow("invalid") << "./invalid name" << (int)QDBusConnection::NoReplace << false;
-+// QTest::newRow("existing") << "org.freedesktop.DBus"
-+// << (int)QDBusConnection::NoReplace << false;
-+
-+ QTest::newRow("ok1") << "com.trolltech.QtDBUS.tst_qdbusconnection"
-+ << (int)QDBusConnection::NoReplace << true;
-+}
-+
-+void tst_QDBusConnection::requestName()
-+{
-+ QDBusConnection con;
-+
-+ QVERIFY(con.isConnected());
-+
-+ QFETCH(QString, requestedName);
-+ QFETCH(int, flags);
-+ QFETCH(bool, expectedResult);
-+
-+ bool result = con.requestName(requestedName, (QDBusConnection::NameRequestMode)flags);
-+
-+// QEXPECT_FAIL("existing", "For whatever reason, the bus lets us replace this name", Abort);
-+ QCOMPARE(result, expectedResult);
-+}
-+
-+void tst_QDBusConnection::getNameOwner_data()
-+{
-+ QTest::addColumn<QString>("name");
-+ QTest::addColumn<QString>("expectedResult");
-+
-+ QTest::newRow("null") << QString() << QString();
-+ QTest::newRow("empty") << QString("") << QString();
-+
-+ QTest::newRow("invalid") << ".invalid" << QString();
-+ QTest::newRow("non-existent") << "com.trolltech.QtDBUS.foo" << QString();
-+
-+ QTest::newRow("bus") << "org.freedesktop.DBus" << "org.freedesktop.DBus";
-+
-+ QString base = QDBusConnection().baseService();
-+ QTest::newRow("address") << base << base;
-+ QTest::newRow("self") << "com.trolltech.QtDBUS.tst_qdbusconnection" << base;
-+}
-+
-+void tst_QDBusConnection::getNameOwner()
-+{
-+ QFETCH(QString, name);
-+ QFETCH(QString, expectedResult);
-+
-+ QDBusConnection con;
-+ QVERIFY(con.isConnected());
-+
-+ QString result = con.getNameOwner(name);
-+
-+ QCOMPARE(result, expectedResult);
-+}
-+
-+void tst_QDBusConnection::releaseName_data()
-+{
-+ requestName_data();
-+}
-+
-+void tst_QDBusConnection::releaseName()
-+{
-+ QDBusConnection con;
-+
-+ QVERIFY(con.isConnected());
-+
-+ QFETCH(QString, requestedName);
-+ //QFETCH(int, flags);
-+ QFETCH(bool, expectedResult);
-+
-+ bool result = con.releaseName(requestedName);
-+
-+ QCOMPARE(result, expectedResult);
-+}
-+
-+QTEST_MAIN(tst_QDBusConnection)
-+
-+#include "tst_qdbusconnection.moc"
-+
-diff -Naur dbus-0.61.orig/test/qt/tst_qdbusinterface.cpp dbus-0.61/test/qt/tst_qdbusinterface.cpp
---- dbus-0.61.orig/test/qt/tst_qdbusinterface.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/qt/tst_qdbusinterface.cpp 2006-02-15 18:06:41.000000000 +0100
-@@ -0,0 +1,325 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+#include <qcoreapplication.h>
-+#include <qmetatype.h>
-+#include <QtTest/QtTest>
-+
-+#include <dbus/qdbus.h>
-+#include <QtCore/qvariant.h>
-+
-+Q_DECLARE_METATYPE(QVariantList)
-+
-+#define TEST_INTERFACE_NAME "com.trolltech.QtDBus.MyObject"
-+#define TEST_SERVICE_NAME "com.trolltech.QtDBus.tst_qdbusinterface"
-+#define TEST_SIGNAL_NAME "somethingHappened"
-+
-+const char introspectionData[] =
-+ "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
-+ "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
-+ "<node>"
-+
-+ "<interface name=\"org.freedesktop.DBus.Introspectable\">"
-+ "<method name=\"Introspect\">"
-+ "<arg name=\"data\" direction=\"out\" type=\"s\"/>"
-+ "</method>"
-+ "</interface>"
-+
-+ "<interface name=\"" TEST_INTERFACE_NAME "\">"
-+ "<method name=\"ping\">"
-+ "<arg name=\"ping\" direction=\"in\" type=\"v\"/>"
-+ "<arg name=\"pong\" direction=\"out\" type=\"v\"/>"
-+ "</method>"
-+ "<method name=\"ping\">"
-+ "<arg name=\"ping1\" direction=\"in\" type=\"v\"/>"
-+ "<arg name=\"ping2\" direction=\"in\" type=\"v\"/>"
-+ "<arg name=\"pong1\" direction=\"out\" type=\"v\"/>"
-+ "<arg name=\"pong2\" direction=\"out\" type=\"v\"/>"
-+ "</method>"
-+ "<signal name=\"" TEST_SIGNAL_NAME "\">"
-+ "<arg type=\"s\"/>"
-+ "</signal>"
-+ "<property name=\"prop1\" access=\"readwrite\" type=\"i\" />"
-+ "</interface>"
-+ "<node name=\"subObject\"/>"
-+ "</node>";
-+
-+class MyObject: public QObject
-+{
-+ Q_OBJECT
-+public slots:
-+
-+ void ping(const QDBusMessage &msg)
-+ {
-+ QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SessionBus);
-+ QDBusMessage reply = QDBusMessage::methodReply(msg);
-+ reply << static_cast<QList<QVariant> >(msg);
-+ if (!con.send(reply))
-+ exit(1);
-+ }
-+
-+ void Introspect(const QDBusMessage &msg)
-+ {
-+ QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SessionBus);
-+ QDBusMessage reply = QDBusMessage::methodReply(msg);
-+ reply << ::introspectionData;
-+ if (!con.send(reply))
-+ exit(1);
-+ }
-+};
-+
-+class Spy: public QObject
-+{
-+ Q_OBJECT
-+public:
-+ QString received;
-+ int count;
-+
-+ Spy() : count(0)
-+ { }
-+
-+public slots:
-+ void spySlot(const QString& arg)
-+ {
-+ received = arg;
-+ ++count;
-+ }
-+};
-+
-+// helper function
-+void emitSignal(const QString &interface, const QString &name, const QString &arg)
-+{
-+ QDBusMessage msg = QDBusMessage::signal("/", interface, name);
-+ msg << arg;
-+ QDBusConnection().send(msg);
-+
-+ QTest::qWait(200);
-+}
-+
-+class tst_QDBusInterface: public QObject
-+{
-+ Q_OBJECT
-+ MyObject obj;
-+private slots:
-+ void initTestCase();
-+ void cleanupTestCase();
-+
-+ void call_data();
-+ void call();
-+
-+ void introspect_data();
-+ void introspect();
-+
-+ void signal();
-+};
-+
-+void tst_QDBusInterface::initTestCase()
-+{
-+ QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SessionBus);
-+ QVERIFY(con.isConnected());
-+ QVERIFY(con.requestName( TEST_SERVICE_NAME ));
-+
-+ con.registerObject("/", "org.freedesktop.DBus.Introspectable", &obj);
-+ con.registerObject("/", TEST_INTERFACE_NAME, &obj);
-+}
-+
-+void tst_QDBusInterface::cleanupTestCase()
-+{
-+ QDBusConnection::closeConnection();
-+ QVERIFY(!QDBusConnection().isConnected());
-+}
-+
-+void tst_QDBusInterface::call_data()
-+{
-+ QTest::addColumn<QString>("method");
-+ QTest::addColumn<QVariantList>("input");
-+ QTest::addColumn<QVariantList>("output");
-+
-+ QVariantList input;
-+ QTest::newRow("empty") << "ping" << input << input;
-+
-+ input << qVariantFromValue(1);
-+ QTest::newRow("int") << "ping" << input << input;
-+ QTest::newRow("int-int") << "ping.i" << input << input;
-+ QTest::newRow("int-int16") << "ping.n" << input << input;
-+
-+ // try doing some conversions
-+ QVariantList output;
-+ output << qVariantFromValue(1U);
-+ QTest::newRow("int-uint") << "ping.u" << input << output;
-+ QTest::newRow("int-uint16") << "ping.q" << input << output;
-+
-+ QTest::newRow("int-int64") << "ping.x" << input << (QVariantList() << qVariantFromValue(1LL));
-+ QTest::newRow("int-uint64") << "ping.t" << input << (QVariantList() << qVariantFromValue(1ULL));
-+ QTest::newRow("int-double") << "ping.d" << input << (QVariantList() << qVariantFromValue(1.0));
-+
-+ output.clear();
-+ output << QString("1");
-+ QTest::newRow("int-string") << "ping.s" << input << output;
-+
-+ // try from string now
-+ input = output;
-+ QTest::newRow("string") << "ping" << input << output;
-+ QTest::newRow("string-string") << "ping.s" << input << output;
-+
-+ output.clear();
-+ output << qVariantFromValue(1);
-+ QTest::newRow("string-int") << "ping.i" << input << input;
-+ QTest::newRow("string-int16") << "ping.n" << input << input;
-+
-+ output.clear();
-+ output << qVariantFromValue(1U);
-+ QTest::newRow("string-uint") << "ping.u" << input << output;
-+ QTest::newRow("string-uint16") << "ping.q" << input << output;
-+
-+ QTest::newRow("string-int64") << "ping.x" << input << (QVariantList() << qVariantFromValue(1LL));
-+ QTest::newRow("string-uint64") << "ping.t" << input << (QVariantList() << qVariantFromValue(1ULL));
-+ QTest::newRow("string-double") << "ping.d" << input << (QVariantList() << qVariantFromValue(1.0));
-+
-+ // two args (must be strings!)
-+ input.clear();
-+ input << QString("Hello") << QString("World");
-+ output = input;
-+ QTest::newRow("two-strings") << "ping" << input << output;
-+ QTest::newRow("two-strings") << "ping.ss" << input << output;
-+
-+ // this should drop one of the arguments
-+ output.removeLast();
-+ QTest::newRow("last-dropped") << "ping.s" << input << output;
-+}
-+
-+void tst_QDBusInterface::call()
-+{
-+ QDBusConnection con;
-+ QDBusInterface iface(con, con.baseService(), QLatin1String("/"),
-+ TEST_INTERFACE_NAME);
-+
-+ QFETCH(QString, method);
-+ QFETCH(QVariantList, input);
-+ QFETCH(QVariantList, output);
-+
-+ QDBusMessage reply;
-+ // try first callWithArgs:
-+ reply = iface.callWithArgs(method, input);
-+
-+ QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
-+ if (!output.isEmpty()) {
-+ QCOMPARE(reply.count(), output.count());
-+ QCOMPARE(static_cast<QVariantList>(reply), output);
-+ }
-+
-+ // try the template methods
-+ if (input.isEmpty())
-+ reply = iface.call(method);
-+ else if (input.count() == 1)
-+ switch (input.at(0).type())
-+ {
-+ case QVariant::Int:
-+ reply = iface.call(method, input.at(0).toInt());
-+ break;
-+
-+ case QVariant::UInt:
-+ reply = iface.call(method, input.at(0).toUInt());
-+ break;
-+
-+ case QVariant::String:
-+ reply = iface.call(method, input.at(0).toString());
-+ break;
-+
-+ default:
-+ QFAIL("Unknown type. Please update the test case");
-+ break;
-+ }
-+ else
-+ reply = iface.call(method, input.at(0).toString(), input.at(1).toString());
-+
-+ QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
-+ if (!output.isEmpty()) {
-+ QCOMPARE(reply.count(), output.count());
-+ QCOMPARE(static_cast<QVariantList>(reply), output);
-+ }
-+}
-+
-+void tst_QDBusInterface::introspect_data()
-+{
-+ QTest::addColumn<QString>("service");
-+ QTest::newRow("base") << QDBusConnection().baseService();
-+ QTest::newRow("name") << TEST_SERVICE_NAME;
-+}
-+
-+void tst_QDBusInterface::introspect()
-+{
-+ QFETCH(QString, service);
-+ QDBusConnection con;
-+ QDBusInterface iface(con, service, QLatin1String("/"),
-+ TEST_INTERFACE_NAME);
-+
-+ QDBusIntrospection::Methods mm = iface.methodData();
-+ QVERIFY(mm.count() == 2);
-+
-+ QDBusIntrospection::Signals sm = iface.signalData();
-+ QVERIFY(sm.count() == 1);
-+ QVERIFY(sm.contains(TEST_SIGNAL_NAME));
-+
-+ QDBusIntrospection::Properties pm = iface.propertyData();
-+ QVERIFY(pm.count() == 1);
-+ QVERIFY(pm.contains("prop1"));
-+}
-+
-+void tst_QDBusInterface::signal()
-+{
-+ QDBusConnection con;
-+ QDBusInterface iface(con, con.baseService(), QLatin1String("/"),
-+ TEST_INTERFACE_NAME);
-+
-+ QString signalName = TEST_SIGNAL_NAME;
-+
-+ QString arg = "So long and thanks for all the fish";
-+ {
-+ Spy spy;
-+ iface.connect(signalName, &spy, SLOT(spySlot(QString)));
-+
-+ emitSignal(TEST_INTERFACE_NAME, signalName, arg);
-+ QVERIFY(spy.count == 1);
-+ QCOMPARE(spy.received, arg);
-+ }
-+
-+ QDBusIntrospection::Signals sm = iface.signalData();
-+ QVERIFY(sm.contains(signalName));
-+
-+ const QDBusIntrospection::Signal& signal = sm.value(signalName);
-+ QCOMPARE(signal.name, signalName);
-+ QVERIFY(!signal.outputArgs.isEmpty());
-+ {
-+ Spy spy;
-+ iface.connect(signal, &spy, SLOT(spySlot(QString)));
-+
-+ emitSignal(TEST_INTERFACE_NAME, signalName, arg);
-+ QVERIFY(spy.count == 1);
-+ QCOMPARE(spy.received, arg);
-+ }
-+}
-+
-+QTEST_MAIN(tst_QDBusInterface)
-+
-+#include "tst_qdbusinterface.moc"
-+
-diff -Naur dbus-0.61.orig/test/qt/tst_qdbusobject.cpp dbus-0.61/test/qt/tst_qdbusobject.cpp
---- dbus-0.61.orig/test/qt/tst_qdbusobject.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/qt/tst_qdbusobject.cpp 2006-02-15 18:06:41.000000000 +0100
-@@ -0,0 +1,198 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+#include <qcoreapplication.h>
-+#include <qmetatype.h>
-+#include <QtTest/QtTest>
-+
-+#include <dbus/qdbus.h>
-+
-+const char introspectionData[] =
-+ "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
-+ "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n"
-+ "<node>"
-+
-+ "<interface name=\"org.freedesktop.DBus.Introspectable\">"
-+ "<method name=\"Introspect\">"
-+ "<arg name=\"data\" direction=\"out\" type=\"s\"/>"
-+ "</method>"
-+ "</interface>"
-+
-+ "<interface name=\"com.trolltech.tst_qdbusobject.MyObject\">"
-+ "<method name=\"ping\">"
-+ "<arg name=\"ping\" direction=\"in\" type=\"v\"/>"
-+ "<arg name=\"pong\" direction=\"out\" type=\"v\"/>"
-+ "</method>"
-+ "</interface>"
-+ "<node name=\"subObject\"/>"
-+ "</node>";
-+
-+class MyObject: public QObject
-+{
-+ Q_OBJECT
-+public slots:
-+
-+ void ping(const QDBusMessage &msg)
-+ {
-+ QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SessionBus);
-+ QDBusMessage reply = QDBusMessage::methodReply(msg);
-+ reply << static_cast<QList<QVariant> >(msg);
-+ if (!con.send(reply))
-+ exit(1);
-+ }
-+
-+ void Introspect(const QDBusMessage &msg)
-+ {
-+ QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SessionBus);
-+ QDBusMessage reply = QDBusMessage::methodReply(msg);
-+ reply << ::introspectionData;
-+ if (!con.send(reply))
-+ exit(1);
-+ }
-+};
-+
-+class tst_QDBusObject: public QObject
-+{
-+ Q_OBJECT
-+ MyObject obj;
-+
-+private slots:
-+ void initTestCase(); // connect to D-Bus
-+ void cleanupTestCase(); // disconnect from D-Bus
-+
-+ void construction_data();
-+ void construction();
-+
-+ void introspection_data();
-+ void introspection();
-+};
-+
-+void tst_QDBusObject::initTestCase()
-+{
-+ QDBusConnection con = QDBusConnection::addConnection(QDBusConnection::SessionBus);
-+ QVERIFY(con.isConnected());
-+ QVERIFY(con.requestName("com.trolltech.tst_qdbusobject"));
-+
-+ con.registerObject("/", "org.freedesktop.DBus.Introspectable", &obj);
-+ con.registerObject("/", "com.trolltech.tst_qdbusobject.MyObject", &obj);
-+}
-+
-+void tst_QDBusObject::cleanupTestCase()
-+{
-+ QDBusConnection::closeConnection();
-+ QVERIFY(!QDBusConnection().isConnected());
-+}
-+
-+void tst_QDBusObject::construction_data()
-+{
-+ QTest::addColumn<QString>("service");
-+ QTest::addColumn<QString>("path");
-+ QTest::addColumn<bool>("isValid");
-+ QTest::addColumn<bool>("exists");
-+
-+ QTest::newRow("null") << QString() << QString() << false << false;
-+
-+ QTest::newRow("invalid1") << "foo.foo1" << "" << false << false;
-+ QTest::newRow("invalid2") << "foo.foo1" << "foo.bar" << false << false;
-+ QTest::newRow("invalid3") << "foo.foo1" << "/foo.bar" << false << false;
-+ QTest::newRow("invalid4") << "" << "/" << false << false;
-+ QTest::newRow("invalid5") << "foo" << "/" << false << false;
-+ QTest::newRow("invalid6") << ".foo" << "/" << false << false;
-+
-+ QTest::newRow("invalid7") << "org.freedesktop.DBus" << "" << false << false;
-+ QTest::newRow("invalid8") << "org.freedesktop.DBus" << "foo.bar" << false << false;
-+ QTest::newRow("invalid9") << "org.freedesktop.DBus" << "/foo.bar" << false << false;
-+
-+ QTest::newRow("existing") << "org.freedesktop.DBus" << "/" << true << true;
-+ QTest::newRow("non-existing") << "org.freedesktop.DBus" << "/foo" << true << false;
-+}
-+
-+void tst_QDBusObject::construction()
-+{
-+ QDBusConnection con; // default
-+
-+ QFETCH(QString, service);
-+ QFETCH(QString, path);
-+ QFETCH(bool, isValid);
-+ //QFETCH(bool, exists);
-+
-+ QDBusObject o(con, service, path);
-+ QCOMPARE(o.isValid(), isValid);
-+
-+ if (isValid) {
-+ QCOMPARE(o.service(), service);
-+ QCOMPARE(o.path(), path);
-+ }
-+ else {
-+ QVERIFY(o.service().isNull());
-+ QVERIFY(o.path().isNull());
-+ }
-+
-+ //QCOMPARE(o.exists(), exists);
-+}
-+
-+void tst_QDBusObject::introspection_data()
-+{
-+ QTest::addColumn<QString>("service");
-+ QTest::addColumn<QString>("path");
-+ QTest::addColumn<QStringList>("interfaces");
-+
-+ QStringList interfaces;
-+ QTest::newRow("nowhere") << QString() << QString() << interfaces;
-+
-+ // IMPORTANT!
-+ // Keep the interface list sorted!
-+ interfaces << "org.freedesktop.DBus" << DBUS_INTERFACE_INTROSPECTABLE;
-+ QTest::newRow("server") << "org.freedesktop.DBus" << "/" << interfaces;
-+
-+ QDBusConnection con;
-+ interfaces.clear();
-+ interfaces << "com.trolltech.tst_qdbusobject.MyObject" << DBUS_INTERFACE_INTROSPECTABLE;
-+
-+ QTest::newRow("self1") << con.baseService() << "/" << interfaces;
-+ QTest::newRow("self2") << "com.trolltech.tst_qdbusobject" << "/" << interfaces;
-+}
-+
-+void tst_QDBusObject::introspection()
-+{
-+ QDBusConnection con;
-+
-+ QFETCH(QString, service);
-+ QFETCH(QString, path);
-+
-+ QDBusObject o(con, service, path);
-+
-+ if (!o.isValid())
-+ QVERIFY(o.introspect().isEmpty());
-+ else {
-+ QFETCH(QStringList, interfaces);
-+ QStringList parsed = o.interfaces();
-+ parsed.sort();
-+ QCOMPARE(parsed.count(), interfaces.count());
-+ QCOMPARE(parsed, interfaces);
-+ }
-+}
-+
-+QTEST_MAIN(tst_QDBusObject)
-+
-+#include "tst_qdbusobject.moc"
-+
-diff -Naur dbus-0.61.orig/test/qt/tst_qdbustype.cpp dbus-0.61/test/qt/tst_qdbustype.cpp
---- dbus-0.61.orig/test/qt/tst_qdbustype.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/qt/tst_qdbustype.cpp 2006-02-15 18:06:41.000000000 +0100
-@@ -0,0 +1,272 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+#include <qcoreapplication.h>
-+#include <QtTest/QtTest>
-+
-+#include <dbus/qdbus.h>
-+
-+class tst_QDBusType: public QObject
-+{
-+ Q_OBJECT
-+
-+private slots:
-+ void fromType_data();
-+ void fromType();
-+ void fromSignature_data();
-+ void fromSignature();
-+ void arrayOf_data();
-+ void arrayOf();
-+ void mapOf_data();
-+ void mapOf();
-+};
-+
-+inline QTestData &operator<<(QTestData &data, QVariant::Type t)
-+{
-+ return data << int(t);
-+}
-+
-+void tst_QDBusType::fromType_data()
-+{
-+ fromSignature_data();
-+}
-+
-+void tst_QDBusType:: arrayOf_data()
-+{
-+ fromSignature_data();
-+}
-+
-+void tst_QDBusType::mapOf_data()
-+{
-+ fromSignature_data();
-+}
-+
-+void tst_QDBusType::fromSignature_data()
-+{
-+ QTest::addColumn<QString>("signature");
-+ QTest::addColumn<char>("type");
-+ QTest::addColumn<int>("qvariantType");
-+ QTest::addColumn<bool>("isValid");
-+ QTest::addColumn<bool>("isBasic");
-+ QTest::addColumn<bool>("isContainer");
-+ QTest::addColumn<int>("subtypeCount");
-+
-+ QTest::newRow("null") << QString() << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("empty") << QString("") << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("invalid") << QString("~") << '\0' << QVariant::Invalid << false << false << false << 0;
-+
-+ // integers:
-+ QTest::newRow("byte") << "y" << 'y' << QVariant::UInt << true << true << false << 0;
-+ QTest::newRow("boolean") << "b" << 'b' << QVariant::Bool << true << true << false << 0;
-+ QTest::newRow("int16") << "n" << 'n' << QVariant::Int << true << true << false << 0;
-+ QTest::newRow("uint16") << "q" << 'q' << QVariant::UInt << true << true << false << 0;
-+ QTest::newRow("int32") << "i" << 'i' << QVariant::Int << true << true << false << 0;
-+ QTest::newRow("uint32") << "u" << 'u' << QVariant::UInt << true << true << false << 0;
-+ QTest::newRow("int64") << "x" << 'x' << QVariant::LongLong << true << true << false << 0;
-+ QTest::newRow("uint64") << "t" << 't' << QVariant::ULongLong << true << true << false << 0;
-+
-+ // double:
-+ QTest::newRow("double") << "d" << 'd' << QVariant::Double << true << true << false << 0;
-+
-+ // string types:
-+ QTest::newRow("string") << "s" << 's' << QVariant::String << true << true << false << 0;
-+ QTest::newRow("objpath") << "o" << 'o' << QVariant::String << true << true << false << 0;
-+ QTest::newRow("signature")<<"g" << 'g' << QVariant::String << true << true << false << 0;
-+
-+ // variant
-+ QTest::newRow("variant") << "v" << 'v' << QVariant::UserType << true << false << true << 0;
-+
-+ // compound types:
-+ QTest::newRow("struct-empty") << "()" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("struct-invalid") << "(~)" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("struct-unterminated")<< "(iii" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("struct-bad-nest") << "(i(i)((i)i)" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("struct1") << "(i)" << 'r' << QVariant::List << true << false << true << 1;
-+ QTest::newRow("struct2") << "(ii)" << 'r' << QVariant::List << true << false << true << 2;
-+
-+ QTest::newRow("array-empty") << "a" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("array-invalid") << "a~" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("array-simple") << "ab" << 'a' << QVariant::List << true << false << true << 1;
-+ QTest::newRow("bytearray") << "ay" << 'a' << QVariant::ByteArray << true << false << true << 1;
-+ QTest::newRow("stringlist") << "as" << 'a' << QVariant::StringList << true << false << true << 1;
-+
-+ QTest::newRow("map-empty") << "e" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("map-invalid1") << "a{}" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("map-invalid2") << "a{~}" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("map-invalid3") << "a{e}" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("map-invalid4") << "a{i}" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("map-invalid5") << "a{(i)d}" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("map-invalid6") << "{}" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("map-invalid7") << "{i}" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ //QTest::newRow("map-invalid8") << "{is}" << '\0' << QVariant::Invalid << false << false << false << 0; // this is valid when "a" is prepended
-+ QTest::newRow("map-bad-nesting") << "a{i(s}" << '\0' << QVariant::Invalid << false << false << false << 0;
-+ QTest::newRow("map-ok1") << "a{is}" << 'a' << QVariant::Map << true << false << true << 1;
-+ QTest::newRow("map-ok2") << "a{sv}" << 'a' << QVariant::Map << true << false << true << 1;
-+
-+ // compound of compounds:
-+ QTest::newRow("struct-struct") << "((i))" << 'r' << QVariant::List << true << false << true << 1;
-+ QTest::newRow("struct-structs") << "((ii)d(i))" << 'r' << QVariant::List << true << false << true << 3;
-+ QTest::newRow("map-struct") << "a{s(ii)}" << 'a' << QVariant::Map << true << false << true << 1;
-+ QTest::newRow("map-stringlist") << "a{sas}" << 'a' << QVariant::Map << true << false << true << 1;
-+ QTest::newRow("map-map") << "a{ia{sv}}" << 'a' << QVariant::Map << true << false << true << 1;
-+ QTest::newRow("array-struct") << "a(ii)" << 'a' << QVariant::List << true << false << true << 1;
-+ QTest::newRow("array-array") << "aai" << 'a' << QVariant::List << true << false << true << 1;
-+ QTest::newRow("array-map") << "aa{sv}" << 'a' << QVariant::List << true << false << true << 1;
-+}
-+
-+void tst_QDBusType::fromType()
-+{
-+ QFETCH(QString, signature);
-+ if (signature.length() != 1)
-+ // can't transform to typecode
-+ return;
-+
-+ QFETCH(char, type);
-+ QFETCH(int, qvariantType);
-+ QFETCH(bool, isValid);
-+ QFETCH(bool, isBasic);
-+ QFETCH(bool, isContainer);
-+
-+ QDBusType t(signature.at(0).toLatin1());
-+
-+ QCOMPARE((char)t.dbusType(), type);
-+ QCOMPARE(t.qvariantType(), QVariant::Type(qvariantType));
-+ QCOMPARE(t.isValid(), isValid);
-+ QCOMPARE(t.isBasic(), isBasic);
-+ QCOMPARE(t.isContainer(), isContainer);
-+}
-+
-+void tst_QDBusType::fromSignature()
-+{
-+ QFETCH(QString, signature);
-+ QFETCH(char, type);
-+ QFETCH(int, qvariantType);
-+ QFETCH(bool, isValid);
-+ QFETCH(bool, isBasic);
-+ QFETCH(bool, isContainer);
-+ QFETCH(int, subtypeCount);
-+
-+ QDBusType t(signature);
-+
-+ QCOMPARE((char)t.dbusType(), type);
-+ QCOMPARE(t.qvariantType(), QVariant::Type(qvariantType));
-+ QCOMPARE(t.isValid(), isValid);
-+ QCOMPARE(t.isBasic(), isBasic);
-+ QCOMPARE(t.isContainer(), isContainer);
-+
-+ if (isValid)
-+ QCOMPARE(QLatin1String(t.dbusSignature()), signature);
-+
-+ QCOMPARE(t.subTypes().count(), subtypeCount);
-+}
-+
-+void tst_QDBusType::arrayOf()
-+{
-+ QFETCH(QString, signature);
-+ QFETCH(char, type);
-+ QFETCH(int, qvariantType);
-+ QFETCH(bool, isValid);
-+ QFETCH(bool, isBasic);
-+ QFETCH(bool, isContainer);
-+ QFETCH(int, subtypeCount);
-+
-+ QDBusType arr("a" + signature.toLatin1());
-+ QCOMPARE(arr.isValid(), isValid);
-+ QVERIFY(!arr.isBasic());
-+
-+ if (isValid) {
-+ QVERIFY(arr.isContainer());
-+ QVERIFY(arr.isArray());
-+ QCOMPARE((char)arr.dbusType(), 'a');
-+ QCOMPARE(arr.subTypes().count(), 1);
-+
-+ // handle special cases:
-+ if (type == 'y')
-+ QCOMPARE(arr.qvariantType(), QVariant::ByteArray);
-+ else if (type == 's' || type == 'o' || type == 'g')
-+ QCOMPARE(arr.qvariantType(), QVariant::StringList);
-+ else
-+ QCOMPARE(arr.qvariantType(), QVariant::List);
-+
-+ // handle the array element now:
-+ QDBusType t = arr.arrayElement();
-+
-+ QCOMPARE((char)t.dbusType(), type);
-+ QCOMPARE(t.qvariantType(), QVariant::Type(qvariantType));
-+ QCOMPARE(t.isValid(), isValid);
-+ QCOMPARE(t.isBasic(), isBasic);
-+ QCOMPARE(t.isContainer(), isContainer);
-+
-+ QCOMPARE(QLatin1String(t.dbusSignature()), signature);
-+
-+ QCOMPARE(t.subTypes().count(), subtypeCount);
-+ }
-+}
-+
-+void tst_QDBusType::mapOf()
-+{
-+ QFETCH(QString, signature);
-+ QFETCH(char, type);
-+ QFETCH(int, qvariantType);
-+ QFETCH(bool, isValid);
-+ QFETCH(bool, isBasic);
-+ QFETCH(bool, isContainer);
-+ QFETCH(int, subtypeCount);
-+
-+ QDBusType map("a{s" + signature.toLatin1() + '}');
-+ QCOMPARE(map.isValid(), isValid);
-+ QVERIFY(!map.isBasic());
-+
-+ if (isValid) {
-+ QVERIFY(map.isContainer());
-+ QVERIFY(map.isArray());
-+ QVERIFY(map.isMap());
-+ QCOMPARE((char)map.dbusType(), 'a');
-+ QCOMPARE(map.subTypes().count(), 1);
-+
-+ // handle the array element now:
-+ QDBusType dict_entry = map.arrayElement();
-+ QVERIFY(dict_entry.isValid());
-+ QVERIFY(dict_entry.isContainer());
-+ QVERIFY(!dict_entry.isMap());
-+ QVERIFY(!dict_entry.isArray());
-+
-+ QVERIFY(map.mapKey().isBasic());
-+
-+ // handle the value:
-+ QDBusType t = map.mapValue();
-+
-+ QCOMPARE((char)t.dbusType(), type);
-+ QCOMPARE(t.qvariantType(), QVariant::Type(qvariantType));
-+ QCOMPARE(t.isValid(), isValid);
-+ QCOMPARE(t.isBasic(), isBasic);
-+ QCOMPARE(t.isContainer(), isContainer);
-+
-+ QCOMPARE(QLatin1String(t.dbusSignature()), signature);
-+
-+ QCOMPARE(t.subTypes().count(), subtypeCount);
-+ }
-+}
-+
-+QTEST_MAIN(tst_QDBusType)
-+
-+#include "tst_qdbustype.moc"
-diff -Naur dbus-0.61.orig/test/qt/tst_qdbusxmlparser.cpp dbus-0.61/test/qt/tst_qdbusxmlparser.cpp
---- dbus-0.61.orig/test/qt/tst_qdbusxmlparser.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/qt/tst_qdbusxmlparser.cpp 2006-02-15 18:06:41.000000000 +0100
-@@ -0,0 +1,709 @@
-+/* -*- C++ -*-
-+ *
-+ * Copyright (C) 2006 Trolltech AS. All rights reserved.
-+ * Author: Thiago Macieira <thiago.macieira at trolltech.com>
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software Foundation,
-+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ */
-+#include <qcoreapplication.h>
-+#include <qmetatype.h>
-+#include <QtTest/QtTest>
-+
-+#include <dbus/qdbus.h>
-+
-+class tst_QDBusXmlParser: public QObject
-+{
-+ Q_OBJECT
-+
-+private:
-+ void parsing_common(const QString&);
-+
-+private slots:
-+ void parsing_data();
-+ void parsing();
-+ void parsingWithDoctype_data();
-+ void parsingWithDoctype();
-+
-+ void objectWithContent_data();
-+ void objectWithContent();
-+
-+ void methods_data();
-+ void methods();
-+ void signals__data();
-+ void signals_();
-+ void properties_data();
-+ void properties();
-+};
-+
-+// just to make it easier:
-+typedef QDBusIntrospection::Interfaces InterfaceMap;
-+typedef QDBusIntrospection::Objects ObjectMap;
-+typedef QDBusIntrospection::Arguments ArgumentList;
-+typedef QDBusIntrospection::Annotations AnnotationsMap;
-+typedef QDBusIntrospection::Methods MethodMap;
-+typedef QDBusIntrospection::Signals SignalMap;
-+typedef QDBusIntrospection::Properties PropertyMap;
-+
-+Q_DECLARE_METATYPE(QDBusIntrospection::Method)
-+Q_DECLARE_METATYPE(QDBusIntrospection::Signal)
-+Q_DECLARE_METATYPE(QDBusIntrospection::Property)
-+Q_DECLARE_METATYPE(MethodMap)
-+Q_DECLARE_METATYPE(SignalMap)
-+Q_DECLARE_METATYPE(PropertyMap)
-+
-+inline QDBusIntrospection::Argument arg(const char* type, const char *name = 0)
-+{
-+ QDBusIntrospection::Argument retval;
-+ retval.type = QDBusType(type);
-+ retval.name = QLatin1String(name);
-+ return retval;
-+}
-+
-+template<typename T>
-+inline QMap<QString, T>& operator<<(QMap<QString, T>& map, const T& m)
-+{ map.insert(m.name, m); return map; }
-+
-+inline const char* mapName(const MethodMap&)
-+{ return "MethodMap"; }
-+
-+inline const char* mapName(const SignalMap&)
-+{ return "SignalMap"; }
-+
-+inline const char* mapName(const PropertyMap&)
-+{ return "PropertyMap"; }
-+
-+QString printable(const QDBusIntrospection::Method& m)
-+{
-+ QString result = m.name + "(";
-+ foreach (QDBusIntrospection::Argument arg, m.inputArgs)
-+ result += QString("in %1 %2, ")
-+ .arg(arg.type.toString(QDBusType::ConventionalNames))
-+ .arg(arg.name);
-+ foreach (QDBusIntrospection::Argument arg, m.outputArgs)
-+ result += QString("out %1 %2, ")
-+ .arg(arg.type.toString(QDBusType::ConventionalNames))
-+ .arg(arg.name);
-+ AnnotationsMap::const_iterator it = m.annotations.begin();
-+ for ( ; it != m.annotations.end(); ++it)
-+ result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value());
-+
-+ if (result.length() > 1)
-+ result.truncate(result.length() - 2);
-+ result += ")";
-+ return result;
-+}
-+
-+QString printable(const QDBusIntrospection::Signal& s)
-+{
-+ QString result = s.name + "(";
-+ foreach (QDBusIntrospection::Argument arg, s.outputArgs)
-+ result += QString("out %1 %2, ")
-+ .arg(arg.type.toString(QDBusType::ConventionalNames))
-+ .arg(arg.name);
-+ AnnotationsMap::const_iterator it = s.annotations.begin();
-+ for ( ; it != s.annotations.end(); ++it)
-+ result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value());
-+
-+ if (result.length() > 1)
-+ result.truncate(result.length() - 2);
-+ result += ")";
-+ return result;
-+}
-+
-+QString printable(const QDBusIntrospection::Property& p)
-+{
-+ QString result;
-+ if (p.access == QDBusIntrospection::Property::Read)
-+ result = "read %1 %2, ";
-+ else if (p.access == QDBusIntrospection::Property::Write)
-+ result = "write %1 %2, ";
-+ else
-+ result = "readwrite %1 %2, ";
-+ result = result.arg(p.type.toString(QDBusType::ConventionalNames)).arg(p.name);
-+
-+ AnnotationsMap::const_iterator it = p.annotations.begin();
-+ for ( ; it != p.annotations.end(); ++it)
-+ result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value());
-+
-+ if (result.length() > 1)
-+ result.truncate(result.length() - 2);
-+ return result;
-+}
-+
-+template<typename T>
-+char* printableMap(const QMap<QString, T>& map)
-+{
-+ QString contents = "\n";
-+ typename QMap<QString, T>::const_iterator it = map.begin();
-+ for ( ; it != map.end(); ++it) {
-+ if (it.key() != it.value().name)
-+ contents += it.value().name + ":";
-+ contents += printable(it.value());
-+ contents += ";\n";
-+ }
-+
-+ QString result("%1(size = %2): {%3}");
-+ return qstrdup(qPrintable(result
-+ .arg(mapName(map))
-+ .arg(map.size())
-+ .arg(contents)));
-+}
-+
-+namespace QTest {
-+ template<>
-+ inline char* toString(const MethodMap& map)
-+ {
-+ return printableMap(map);
-+ }
-+
-+ template<>
-+ inline char* toString(const SignalMap& map)
-+ {
-+ return printableMap(map);
-+ }
-+
-+ template<>
-+ inline char* toString(const PropertyMap& map)
-+ {
-+ return printableMap(map);
-+ }
-+}
-+
-+void tst_QDBusXmlParser::parsing_data()
-+{
-+ QTest::addColumn<QString>("xmlData");
-+ QTest::addColumn<int>("interfaceCount");
-+ QTest::addColumn<int>("objectCount");
-+
-+ QTest::newRow("null") << QString() << 0 << 0;
-+ QTest::newRow("empty") << QString("") << 0 << 0;
-+
-+ QTest::newRow("junk") << "<junk/>" << 0 << 0;
-+ QTest::newRow("interface-inside-junk") << "<junk><interface name=\"iface.iface1\" /></junk>"
-+ << 0 << 0;
-+ QTest::newRow("object-inside-junk") << "<junk><node name=\"obj1\" /></junk>"
-+ << 0 << 0;
-+
-+ QTest::newRow("zero-interfaces") << "<node/>" << 0 << 0;
-+ QTest::newRow("one-interface") << "<node><interface name=\"iface.iface1\" /></node>" << 1 << 0;
-+
-+
-+ QTest::newRow("two-interfaces") << "<node><interface name=\"iface.iface1\" />"
-+ "<interface name=\"iface.iface2\"></node>"
-+ << 2 << 0;
-+
-+
-+ QTest::newRow("one-object") << "<node><node name=\"obj1\"/></node>" << 0 << 1;
-+ QTest::newRow("two-objects") << "<node><node name=\"obj1\"/><node name=\"obj2\"></node>" << 0 << 2;
-+
-+ QTest::newRow("i1o1") << "<node><interface name=\"iface.iface1\"><node name=\"obj1\"></node>" << 1 << 1;
-+
-+}
-+
-+void tst_QDBusXmlParser::parsing_common(const QString &xmlData)
-+{
-+ QDBusIntrospection::ObjectTree obj =
-+ QDBusIntrospection::parseObjectTree(xmlData, "local.testing", "/");
-+ QFETCH(int, interfaceCount);
-+ QFETCH(int, objectCount);
-+ QCOMPARE(obj.interfaces.count(), interfaceCount);
-+ QCOMPARE(obj.childObjects.count(), objectCount);
-+
-+ // also verify the naming
-+ int i = 0;
-+ foreach (QString name, obj.interfaces)
-+ QCOMPARE(name, QString("iface.iface%1").arg(++i));
-+
-+ i = 0;
-+ foreach (QString name, obj.childObjects)
-+ QCOMPARE(name, QString("obj%1").arg(++i));
-+}
-+
-+void tst_QDBusXmlParser::parsing()
-+{
-+ QFETCH(QString, xmlData);
-+
-+ parsing_common(xmlData);
-+}
-+
-+void tst_QDBusXmlParser::parsingWithDoctype_data()
-+{
-+ parsing_data();
-+}
-+
-+void tst_QDBusXmlParser::parsingWithDoctype()
-+{
-+ QString docType = "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n"
-+ "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n";
-+ QFETCH(QString, xmlData);
-+
-+ parsing_common(docType + xmlData);
-+}
-+
-+void tst_QDBusXmlParser::objectWithContent_data()
-+{
-+ QTest::addColumn<QString>("xmlData");
-+ QTest::addColumn<QString>("probedObject");
-+ QTest::addColumn<int>("interfaceCount");
-+ QTest::addColumn<int>("objectCount");
-+
-+ QTest::newRow("zero") << "<node><node name=\"obj\"/></node>" << "obj" << 0 << 0;
-+
-+ QString xmlData = "<node><node name=\"obj\">"
-+ "<interface name=\"iface.iface1\" />"
-+ "</node></node>";
-+ QTest::newRow("one-interface") << xmlData << "obj" << 1 << 0;
-+ QTest::newRow("one-interface2") << xmlData << "obj2" << 0 << 0;
-+
-+ xmlData = "<node><node name=\"obj\">"
-+ "<interface name=\"iface.iface1\" />"
-+ "<interface name=\"iface.iface2\" />"
-+ "</node></node>";
-+ QTest::newRow("two-interfaces") << xmlData << "obj" << 2 << 0;
-+ QTest::newRow("two-interfaces2") << xmlData << "obj2" << 0 << 0;
-+
-+ xmlData = "<node><node name=\"obj\">"
-+ "<interface name=\"iface.iface1\" />"
-+ "<interface name=\"iface.iface2\" />"
-+ "</node><node name=\"obj2\">"
-+ "<interface name=\"iface.iface1\" />"
-+ "</node></node>";
-+ QTest::newRow("two-nodes-two-interfaces") << xmlData << "obj" << 2 << 0;
-+ QTest::newRow("two-nodes-one-interface") << xmlData << "obj2" << 1 << 0;
-+
-+ xmlData = "<node><node name=\"obj\">"
-+ "<node name=\"obj1\" />"
-+ "</node></node>";
-+ QTest::newRow("one-object") << xmlData << "obj" << 0 << 1;
-+ QTest::newRow("one-object2") << xmlData << "obj2" << 0 << 0;
-+
-+ xmlData = "<node><node name=\"obj\">"
-+ "<node name=\"obj1\" />"
-+ "<node name=\"obj2\" />"
-+ "</node></node>";
-+ QTest::newRow("two-objects") << xmlData << "obj" << 0 << 2;
-+ QTest::newRow("two-objects2") << xmlData << "obj2" << 0 << 0;
-+
-+ xmlData = "<node><node name=\"obj\">"
-+ "<node name=\"obj1\" />"
-+ "<node name=\"obj2\" />"
-+ "</node><node name=\"obj2\">"
-+ "<node name=\"obj1\" />"
-+ "</node></node>";
-+ QTest::newRow("two-nodes-two-objects") << xmlData << "obj" << 0 << 2;
-+ QTest::newRow("two-nodes-one-object") << xmlData << "obj2" << 0 << 1;
-+}
-+
-+void tst_QDBusXmlParser::objectWithContent()
-+{
-+ QFETCH(QString, xmlData);
-+ QFETCH(QString, probedObject);
-+
-+ QDBusIntrospection::ObjectTree tree =
-+ QDBusIntrospection::parseObjectTree(xmlData, "local.testing", "/");
-+
-+ const ObjectMap &om = tree.childObjectData;
-+
-+ if (om.contains(probedObject)) {
-+ const QSharedDataPointer<QDBusIntrospection::ObjectTree>& obj = om.value(probedObject);
-+ QVERIFY(obj != 0);
-+
-+ QFETCH(int, interfaceCount);
-+ QFETCH(int, objectCount);
-+
-+ QCOMPARE(obj->interfaces.count(), interfaceCount);
-+ QCOMPARE(obj->childObjects.count(), objectCount);
-+
-+ // verify the object names
-+ int i = 0;
-+ foreach (QString name, obj->interfaces)
-+ QCOMPARE(name, QString("iface.iface%1").arg(++i));
-+
-+ i = 0;
-+ foreach (QString name, obj->childObjects)
-+ QCOMPARE(name, QString("obj%1").arg(++i));
-+ }
-+}
-+
-+void tst_QDBusXmlParser::methods_data()
-+{
-+ QTest::addColumn<QString>("xmlDataFragment");
-+ QTest::addColumn<MethodMap>("methodMap");
-+
-+ MethodMap map;
-+ QTest::newRow("no-methods") << QString() << map;
-+
-+ // one method without arguments
-+ QDBusIntrospection::Method method;
-+ method.name = "Foo";
-+ map << method;
-+ QTest::newRow("one-method") << "<method name=\"Foo\"/>" << map;
-+
-+ // add another method without arguments
-+ method.name = "Bar";
-+ map << method;
-+ QTest::newRow("two-methods") << "<method name=\"Foo\"/>"
-+ "<method name=\"Bar\"/>"
-+ << map;
-+
-+ // invert the order of the XML declaration
-+ QTest::newRow("two-methods-inverse") << "<method name=\"Bar\"/>"
-+ "<method name=\"Foo\"/>"
-+ << map;
-+
-+ // add a third, with annotations
-+ method.name = "Baz";
-+ method.annotations.insert("foo.testing", "nothing to see here");
-+ map << method;
-+ QTest::newRow("method-with-annotation") <<
-+ "<method name=\"Foo\"/>"
-+ "<method name=\"Bar\"/>"
-+ "<method name=\"Baz\"><annotation name=\"foo.testing\" value=\"nothing to see here\"></method>"
-+ << map;
-+
-+ // arguments
-+ map.clear();
-+ method.annotations.clear();
-+
-+ method.name = "Method";
-+ method.inputArgs << arg("s");
-+ map << method;
-+ QTest::newRow("one-in") <<
-+ "<method name=\"Method\">"
-+ "<arg type=\"s\" direction=\"in\"/>"
-+ "</method>" << map;
-+
-+ // two arguments
-+ method.inputArgs << arg("v");
-+ map.clear();
-+ map << method;
-+ QTest::newRow("two-in") <<
-+ "<method name=\"Method\">"
-+ "<arg type=\"s\" direction=\"in\"/>"
-+ "<arg type=\"v\" direction=\"in\"/>"
-+ "</method>" << map;
-+
-+ // one invalid arg
-+ QTest::newRow("two-in-one-invalid") <<
-+ "<method name=\"Method\">"
-+ "<arg type=\"s\" direction=\"in\"/>"
-+ "<arg type=\"~\" name=\"invalid\" direction=\"in\"/>" // this line should be ignored
-+ "<arg type=\"v\" direction=\"in\"/>"
-+ "</method>" << map;
-+
-+ // one out argument
-+ method.inputArgs.clear();
-+ method.outputArgs << arg("s");
-+ map.clear();
-+ map << method;
-+ QTest::newRow("one-out") <<
-+ "<method name=\"Method\">"
-+ "<arg type=\"s\" direction=\"out\"/>"
-+ "</method>" << map;
-+
-+ // two in and one out
-+ method.inputArgs << arg("s") << arg("v");
-+ map.clear();
-+ map << method;
-+ QTest::newRow("two-in-one-out") <<
-+ "<method name=\"Method\">"
-+ "<arg type=\"s\" direction=\"in\"/>"
-+ "<arg type=\"v\" direction=\"in\"/>"
-+ "<arg type=\"s\" direction=\"out\"/>"
-+ "</method>" << map;
-+
-+ // let's try an arg with name
-+ method.outputArgs.clear();
-+ method.inputArgs.clear();
-+ method.inputArgs << arg("s", "foo");
-+ map.clear();
-+ map << method;
-+ QTest::newRow("one-in-with-name") <<
-+ "<method name=\"Method\">"
-+ "<arg type=\"s\" name=\"foo\" direction=\"in\"/>"
-+ "</method>" << map;
-+
-+ // two args with name
-+ method.inputArgs << arg("i", "bar");
-+ map.clear();
-+ map << method;
-+ QTest::newRow("two-in-with-name") <<
-+ "<method name=\"Method\">"
-+ "<arg type=\"s\" name=\"foo\" direction=\"in\"/>"
-+ "<arg type=\"i\" name=\"bar\" direction=\"in\"/>"
-+ "</method>" << map;
-+
-+ // one complex
-+ map.clear();
-+ method = QDBusIntrospection::Method();
-+
-+ // Method1(in STRING arg1, in BYTE arg2, out ARRAY of STRING)
-+ method.inputArgs << arg("s", "arg1") << arg("y", "arg2");
-+ method.outputArgs << arg("as");
-+ method.name = "Method1";
-+ map << method;
-+
-+ // Method2(in ARRAY of DICT_ENTRY of (STRING,VARIANT) variantMap, in UINT32 index,
-+ // out STRING key, out VARIANT value)
-+ // with annotation "foo.equivalent":"QVariantMap"
-+ method = QDBusIntrospection::Method();
-+ method.inputArgs << arg("a{sv}", "variantMap") << arg("u", "index");
-+ method.outputArgs << arg("s", "key") << arg("v", "value");
-+ method.annotations.insert("foo.equivalent", "QVariantMap");
-+ method.name = "Method2";
-+ map << method;
-+
-+ QTest::newRow("complex") <<
-+ "<method name=\"Method1\">"
-+ "<arg name=\"arg1\" type=\"s\" direction=\"in\"/>"
-+ "<arg name=\"arg2\" type=\"y\" direction=\"in\"/>"
-+ "<arg type=\"as\" direction=\"out\"/>"
-+ "</method>"
-+ "<method name=\"Method2\">"
-+ "<arg name=\"variantMap\" type=\"a{sv}\" direction=\"in\"/>"
-+ "<arg name=\"index\" type=\"u\" direction=\"in\"/>"
-+ "<arg name=\"key\" type=\"s\" direction=\"out\"/>"
-+ "<arg name=\"value\" type=\"v\" direction=\"out\"/>"
-+ "<annotation name=\"foo.equivalent\" value=\"QVariantMap\"/>"
-+ "</method>" << map;
-+}
-+
-+void tst_QDBusXmlParser::methods()
-+{
-+ QString xmlHeader = "<node>"
-+ "<interface name=\"iface.iface1\">",
-+ xmlFooter = "</interface>"
-+ "</node>";
-+
-+ QFETCH(QString, xmlDataFragment);
-+
-+ QDBusIntrospection::Interface iface =
-+ QDBusIntrospection::parseInterface(xmlHeader + xmlDataFragment + xmlFooter);
-+
-+ QCOMPARE(iface.name, QString("iface.iface1"));
-+
-+ QFETCH(MethodMap, methodMap);
-+ MethodMap parsedMap = iface.methods;
-+
-+ QCOMPARE(methodMap.count(), parsedMap.count());
-+ QCOMPARE(methodMap, parsedMap);
-+}
-+
-+void tst_QDBusXmlParser::signals__data()
-+{
-+ QTest::addColumn<QString>("xmlDataFragment");
-+ QTest::addColumn<SignalMap>("signalMap");
-+
-+ SignalMap map;
-+ QTest::newRow("no-signals") << QString() << map;
-+
-+ // one signal without arguments
-+ QDBusIntrospection::Signal signal;
-+ signal.name = "Foo";
-+ map << signal;
-+ QTest::newRow("one-signal") << "<signal name=\"Foo\"/>" << map;
-+
-+ // add another signal without arguments
-+ signal.name = "Bar";
-+ map << signal;
-+ QTest::newRow("two-signals") << "<signal name=\"Foo\"/>"
-+ "<signal name=\"Bar\"/>"
-+ << map;
-+
-+ // invert the order of the XML declaration
-+ QTest::newRow("two-signals-inverse") << "<signal name=\"Bar\"/>"
-+ "<signal name=\"Foo\"/>"
-+ << map;
-+
-+ // add a third, with annotations
-+ signal.name = "Baz";
-+ signal.annotations.insert("foo.testing", "nothing to see here");
-+ map << signal;
-+ QTest::newRow("signal-with-annotation") <<
-+ "<signal name=\"Foo\"/>"
-+ "<signal name=\"Bar\"/>"
-+ "<signal name=\"Baz\"><annotation name=\"foo.testing\" value=\"nothing to see here\"></signal>"
-+ << map;
-+
-+ // one out argument
-+ map.clear();
-+ signal.annotations.clear();
-+ signal.outputArgs << arg("s");
-+ signal.name = "Signal";
-+ map.clear();
-+ map << signal;
-+ QTest::newRow("one-out") <<
-+ "<signal name=\"Signal\">"
-+ "<arg type=\"s\" direction=\"out\"/>"
-+ "</signal>" << map;
-+
-+ // without saying which direction it is
-+ QTest::newRow("one-out-no-direction") <<
-+ "<signal name=\"Signal\">"
-+ "<arg type=\"s\"/>"
-+ "</signal>" << map;
-+
-+ // two args with name
-+ signal.outputArgs << arg("i", "bar");
-+ map.clear();
-+ map << signal;
-+ QTest::newRow("two-out-with-name") <<
-+ "<signal name=\"Signal\">"
-+ "<arg type=\"s\" direction=\"out\"/>"
-+ "<arg type=\"i\" name=\"bar\"/>"
-+ "</signal>" << map;
-+
-+ // one complex
-+ map.clear();
-+ signal = QDBusIntrospection::Signal();
-+
-+ // Signal1(out ARRAY of STRING)
-+ signal.outputArgs << arg("as");
-+ signal.name = "Signal1";
-+ map << signal;
-+
-+ // Signal2(out STRING key, out VARIANT value)
-+ // with annotation "foo.equivalent":"QVariantMap"
-+ signal = QDBusIntrospection::Signal();
-+ signal.outputArgs << arg("s", "key") << arg("v", "value");
-+ signal.annotations.insert("foo.equivalent", "QVariantMap");
-+ signal.name = "Signal2";
-+ map << signal;
-+
-+ QTest::newRow("complex") <<
-+ "<signal name=\"Signal1\">"
-+ "<arg type=\"as\" direction=\"out\"/>"
-+ "</signal>"
-+ "<signal name=\"Signal2\">"
-+ "<arg name=\"key\" type=\"s\" direction=\"out\"/>"
-+ "<arg name=\"value\" type=\"v\" direction=\"out\"/>"
-+ "<annotation name=\"foo.equivalent\" value=\"QVariantMap\"/>"
-+ "</signal>" << map;
-+}
-+
-+void tst_QDBusXmlParser::signals_()
-+{
-+ QString xmlHeader = "<node>"
-+ "<interface name=\"iface.iface1\">",
-+ xmlFooter = "</interface>"
-+ "</node>";
-+
-+ QFETCH(QString, xmlDataFragment);
-+
-+ QDBusIntrospection::Interface iface =
-+ QDBusIntrospection::parseInterface(xmlHeader + xmlDataFragment + xmlFooter);
-+
-+ QCOMPARE(iface.name, QString("iface.iface1"));
-+
-+ QFETCH(SignalMap, signalMap);
-+ SignalMap parsedMap = iface.signals_;
-+
-+ QCOMPARE(signalMap.count(), parsedMap.count());
-+ QCOMPARE(signalMap, parsedMap);
-+}
-+
-+void tst_QDBusXmlParser::properties_data()
-+{
-+ QTest::addColumn<QString>("xmlDataFragment");
-+ QTest::addColumn<PropertyMap>("propertyMap");
-+
-+ PropertyMap map;
-+ QTest::newRow("no-signals") << QString() << map;
-+
-+ // one readable signal
-+ QDBusIntrospection::Property prop;
-+ prop.name = "foo";
-+ prop.type = QDBusType("s");
-+ prop.access = QDBusIntrospection::Property::Read;
-+ map << prop;
-+ QTest::newRow("one-readable") << "<property name=\"foo\" type=\"s\" access=\"read\"/>" << map;
-+
-+ // one writable signal
-+ prop.access = QDBusIntrospection::Property::Write;
-+ map.clear();
-+ map << prop;
-+ QTest::newRow("one-writable") << "<property name=\"foo\" type=\"s\" access=\"write\"/>" << map;
-+
-+ // one read- & writable signal
-+ prop.access = QDBusIntrospection::Property::ReadWrite;
-+ map.clear();
-+ map << prop;
-+ QTest::newRow("one-read-writable") << "<property name=\"foo\" type=\"s\" access=\"readwrite\"/>"
-+ << map;
-+
-+ // two, mixed properties
-+ prop.name = "bar";
-+ prop.type = QDBusType("i");
-+ prop.access = QDBusIntrospection::Property::Read;
-+ map << prop;
-+ QTest::newRow("two") <<
-+ "<property name=\"foo\" type=\"s\" access=\"readwrite\"/>"
-+ "<property name=\"bar\" type=\"i\" access=\"read\"/>" << map;
-+
-+ // invert the order of the declaration
-+ QTest::newRow("two") <<
-+ "<property name=\"bar\" type=\"i\" access=\"read\"/>"
-+ "<property name=\"foo\" type=\"s\" access=\"readwrite\"/>" << map;
-+
-+ // add a third with annotations
-+ prop.name = "baz";
-+ prop.type = QDBusType("as");
-+ prop.access = QDBusIntrospection::Property::Write;
-+ prop.annotations.insert("foo.annotation", "Hello, World");
-+ prop.annotations.insert("foo.annotation2", "Goodbye, World");
-+ map << prop;
-+ QTest::newRow("complex") <<
-+ "<property name=\"bar\" type=\"i\" access=\"read\"/>"
-+ "<property name=\"baz\" type=\"as\" access=\"write\">"
-+ "<annotation name=\"foo.annotation\" value=\"Hello, World\" />"
-+ "<annotation name=\"foo.annotation2\" value=\"Goodbye, World\" />"
-+ "<property name=\"foo\" type=\"s\" access=\"readwrite\"/>" << map;
-+
-+ // and now change the order
-+ QTest::newRow("complex2") <<
-+ "<property name=\"baz\" type=\"as\" access=\"write\">"
-+ "<annotation name=\"foo.annotation2\" value=\"Goodbye, World\" />"
-+ "<annotation name=\"foo.annotation\" value=\"Hello, World\" />"
-+ "<property name=\"bar\" type=\"i\" access=\"read\"/>"
-+ "<property name=\"foo\" type=\"s\" access=\"readwrite\"/>" << map;
-+}
-+
-+void tst_QDBusXmlParser::properties()
-+{
-+ QString xmlHeader = "<node>"
-+ "<interface name=\"iface.iface1\">",
-+ xmlFooter = "</interface>"
-+ "</node>";
-+
-+ QFETCH(QString, xmlDataFragment);
-+
-+ QDBusIntrospection::Interface iface =
-+ QDBusIntrospection::parseInterface(xmlHeader + xmlDataFragment + xmlFooter);
-+
-+ QCOMPARE(iface.name, QString("iface.iface1"));
-+
-+ QFETCH(PropertyMap, propertyMap);
-+ PropertyMap parsedMap = iface.properties;
-+
-+ QCOMPARE(propertyMap.count(), parsedMap.count());
-+ QCOMPARE(propertyMap, parsedMap);
-+}
-+
-+QTEST_MAIN(tst_QDBusXmlParser)
-+
-+#include "tst_qdbusxmlparser.moc"
-diff -Naur dbus-0.61.orig/test/shell-test.c dbus-0.61/test/shell-test.c
---- dbus-0.61.orig/test/shell-test.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/shell-test.c 2005-07-14 22:44:15.000000000 +0200
-@@ -0,0 +1,107 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+#define DBUS_COMPILATION
-+#include <dbus/dbus-internals.h>
-+#include <dbus/dbus-list.h>
-+#include <dbus/dbus-memory.h>
-+#include <dbus/dbus-shell.h>
-+#include <dbus/dbus-string.h>
-+
-+static dbus_bool_t
-+test_command_line (const char *arg1, ...)
-+{
-+ int i, original_argc, shell_argc;
-+ char **shell_argv;
-+ char **original_argv;
-+ char *command_line, *tmp;
-+ DBusString str;
-+ DBusList *list = NULL, *node;
-+ va_list var_args;
-+ DBusError error;
-+
-+ va_start (var_args, arg1);
-+ _dbus_list_append (&list, arg1);
-+ do
-+ {
-+ tmp = va_arg (var_args, char *);
-+ if (!tmp)
-+ break;
-+ _dbus_list_append (&list, tmp);
-+ } while (tmp);
-+ va_end (var_args);
-+
-+ original_argc = _dbus_list_get_length (&list);
-+ original_argv = dbus_new (char *, original_argc);
-+ _dbus_string_init (&str);
-+ for (i = 0, node = _dbus_list_get_first_link (&list); i < original_argc && node;
-+ i++, node = _dbus_list_get_next_link (&list, node))
-+ {
-+ original_argv[i] = node->data;
-+ if (i > 0)
-+ _dbus_string_append_byte (&str, ' ');
-+ _dbus_string_append (&str, original_argv[i]);
-+ }
-+
-+ _dbus_list_clear (&list);
-+ command_line = _dbus_string_get_data (&str);
-+ printf ("\n\nTesting command line '%s'\n", command_line);
-+
-+ dbus_error_init (&error);
-+ if (!_dbus_shell_parse_argv (command_line, &shell_argc, &shell_argv, &error))
-+ {
-+ fprintf (stderr, "Error parsing command line: %s\n", error.message ? error.message : "");
-+ return FALSE;
-+ }
-+ else
-+ {
-+ if (shell_argc != original_argc)
-+ {
-+ printf ("Number of arguments returned (%d) don't match original (%d)\n",
-+ shell_argc, original_argc);
-+ return FALSE;
-+ }
-+ printf ("Number of arguments: %d\n", shell_argc);
-+ for (i = 0; i < shell_argc; i++)
-+ {
-+ char *unquoted;
-+
-+ unquoted = _dbus_shell_unquote (original_argv[i]);
-+ if (strcmp (unquoted ? unquoted : "",
-+ shell_argv[i] ? shell_argv[i] : ""))
-+ {
-+ printf ("Position %d, returned argument (%s) does not match original (%s)\n",
-+ i, shell_argv[i], unquoted);
-+ dbus_free (unquoted);
-+ return FALSE;
-+ }
-+ dbus_free (unquoted);
-+ if (shell_argv[i])
-+ printf ("Argument %d = %s\n", i, shell_argv[i]);
-+ }
-+
-+ dbus_free_string_array (shell_argv);
-+ }
-+
-+ _dbus_string_free (&str);
-+
-+ return TRUE;
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ if (!test_command_line ("command", "-s", "--force-shutdown", "\"a string\"", "123", NULL)
-+ || !test_command_line ("command", "-s", NULL)
-+ || !test_command_line ("/opt/gnome/bin/service-start", NULL)
-+ || !test_command_line ("grep", "-l", "-r", "-i", "'whatever'", "files*.c", NULL)
-+ || !test_command_line ("/home/boston/johnp/devel-local/dbus/test/test-segfault", NULL)
-+ || !test_command_line ("ls", "-l", "-a", "--colors", "/tmp", NULL)
-+ || !test_command_line ("rsync-to-server", NULL)
-+ || !test_command_line ("test-segfault", "--no-segfault", NULL)
-+ || !test_command_line ("evolution", "mailto:pepe at cuco.com", NULL)
-+ || !test_command_line ("run", "\"a \n multiline\"", NULL)
-+ || test_command_line ("ls", "\"a wrong string'", NULL) /* invalid command line */ )
-+ return -1;
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/spawn-test.c dbus-0.61/test/spawn-test.c
---- dbus-0.61.orig/test/spawn-test.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/spawn-test.c 2003-04-05 02:37:17.000000000 +0200
-@@ -0,0 +1,41 @@
-+#include <dbus/dbus.h>
-+
-+#define DBUS_COMPILATION /* cheat and use dbus-sysdeps */
-+#include <dbus/dbus-sysdeps.h>
-+#include <dbus/dbus-spawn.h>
-+#undef DBUS_COMPILATION
-+#include <stdio.h>
-+
-+static void
-+setup_func (void *data)
-+{
-+ printf ("entering setup func.\n");
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ char **argv_copy;
-+ int i;
-+ DBusError error;
-+
-+ if (argc < 2)
-+ {
-+ fprintf (stderr, "You need to specify a program to launch.\n");
-+
-+ return -1;
-+ }
-+
-+ argv_copy = dbus_new (char *, argc);
-+ for (i = 0; i < argc - 1; i++)
-+ argv_copy [i] = argv[i + 1];
-+ argv_copy[argc - 1] = NULL;
-+
-+ if (!_dbus_spawn_async_with_babysitter (NULL, argv_copy, setup_func, NULL, &error))
-+ {
-+ fprintf (stderr, "Could not launch application: \"%s\"\n",
-+ error.message);
-+ }
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/test-exit.c dbus-0.61/test/test-exit.c
---- dbus-0.61.orig/test/test-exit.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/test-exit.c 2003-04-05 02:37:17.000000000 +0200
-@@ -0,0 +1,8 @@
-+/* This is a process that just exits with a failure code */
-+
-+int
-+main (int argc, char **argv)
-+{
-+
-+ return 1;
-+}
-diff -Naur dbus-0.61.orig/test/test-names.c dbus-0.61/test/test-names.c
---- dbus-0.61.orig/test/test-names.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/test-names.c 2005-09-12 10:19:33.000000000 +0200
-@@ -0,0 +1,79 @@
-+
-+#include "test-utils.h"
-+
-+static DBusLoop *loop;
-+
-+static void
-+die (const char *message)
-+{
-+ fprintf (stderr, "*** test-names: %s", message);
-+ exit (1);
-+}
-+
-+static void
-+TestName(DBusConnection *connection, const char *name, int expectedSuccess)
-+{
-+ DBusError error;
-+ dbus_error_init (&error);
-+
-+ (void) dbus_bus_request_name (connection, name, 0, &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ if (expectedSuccess)
-+ fprintf (stderr, "Error acquiring name '%s': %s\n", name, error.message);
-+ else
-+ fprintf (stdout, "Expected Error acquiring name '%s': %s\n", name, error.message);
-+ _dbus_verbose ("*** Failed to acquire name '%s': %s\n", name,
-+ error.message);
-+ dbus_error_free (&error);
-+ if (expectedSuccess)
-+ exit (1);
-+ }
-+ else
-+ {
-+ if (!expectedSuccess)
-+ fprintf (stderr, "Unexpected Success acquiring name '%s'\n", name);
-+ else
-+ fprintf (stdout, "Successfully acquired name '%s'\n", name);
-+ _dbus_verbose ("*** Managed to acquire name '%s'\n", name);
-+ if (!expectedSuccess)
-+ exit (1);
-+ }
-+}
-+
-+int
-+main (int argc,
-+ char **argv)
-+{
-+ DBusError error;
-+ int result;
-+ DBusConnection *connection;
-+
-+ dbus_error_init (&error);
-+ connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
-+ if (connection == NULL)
-+ {
-+ fprintf (stderr, "*** Failed to open connection to system bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ loop = _dbus_loop_new ();
-+ if (loop == NULL)
-+ die ("No memory\n");
-+
-+ if (!test_connection_setup (loop, connection))
-+ die ("No memory\n");
-+
-+ TestName(connection, "org.freedesktop.DBus.Test", TRUE);
-+ TestName(connection, "org.freedesktop.DBus.Test-2", TRUE);
-+ TestName(connection, "org.freedesktop.DBus.Test_2", TRUE);
-+#if 0
-+ TestName(connection, "Test_2", TRUE);
-+#endif
-+
-+ _dbus_verbose ("*** Test service name exiting\n");
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/test-segfault.c dbus-0.61/test/test-segfault.c
---- dbus-0.61.orig/test/test-segfault.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/test-segfault.c 2005-11-30 20:32:26.000000000 +0100
-@@ -0,0 +1,25 @@
-+/* This is simply a process that segfaults */
-+#include <stdlib.h>
-+#include <signal.h>
-+
-+#include <sys/time.h>
-+#include <sys/resource.h>
-+
-+int
-+main (int argc, char **argv)
-+{
-+ char *p;
-+
-+ struct rlimit r = { 0, };
-+
-+ getrlimit (RLIMIT_CORE, &r);
-+ r.rlim_cur = 0;
-+ setrlimit (RLIMIT_CORE, &r);
-+
-+ raise (SIGSEGV);
-+
-+ p = NULL;
-+ *p = 'a';
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/test-service.c dbus-0.61/test/test-service.c
---- dbus-0.61.orig/test/test-service.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/test-service.c 2005-07-15 17:21:43.000000000 +0200
-@@ -0,0 +1,401 @@
-+
-+#include "test-utils.h"
-+
-+static DBusLoop *loop;
-+static dbus_bool_t already_quit = FALSE;
-+static dbus_bool_t hello_from_self_reply_recived = FALSE;
-+
-+static void
-+quit (void)
-+{
-+ if (!already_quit)
-+ {
-+ _dbus_loop_quit (loop);
-+ already_quit = TRUE;
-+ }
-+}
-+
-+static void
-+die (const char *message)
-+{
-+ fprintf (stderr, "*** test-service: %s", message);
-+ exit (1);
-+}
-+
-+static void
-+check_hello_from_self_reply (DBusPendingCall *pcall,
-+ void *user_data)
-+{
-+ DBusMessage *reply;
-+ DBusMessage *echo_message, *echo_reply;
-+ DBusError error;
-+ DBusConnection *connection;
-+
-+ int type;
-+
-+ dbus_error_init (&error);
-+
-+ connection = dbus_bus_get (DBUS_BUS_STARTER, &error);
-+ if (connection == NULL)
-+ {
-+ fprintf (stderr, "*** Failed to open connection to activating message bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ die("no memory");
-+ }
-+
-+
-+ echo_message = (DBusMessage *)user_data;
-+
-+ reply = dbus_pending_call_steal_reply (pcall);
-+
-+ type = dbus_message_get_type (reply);
-+
-+ if (type == DBUS_MESSAGE_TYPE_METHOD_RETURN)
-+ {
-+ const char *s;
-+ printf ("Reply from HelloFromSelf recived\n");
-+
-+ if (!dbus_message_get_args (echo_message,
-+ &error,
-+ DBUS_TYPE_STRING, &s,
-+ DBUS_TYPE_INVALID))
-+ {
-+ echo_reply = dbus_message_new_error (echo_message,
-+ error.name,
-+ error.message);
-+
-+ if (echo_reply == NULL)
-+ die ("No memory\n");
-+
-+ }
-+ else
-+ {
-+ echo_reply = dbus_message_new_method_return (echo_message);
-+ if (echo_reply == NULL)
-+ die ("No memory\n");
-+
-+ if (!dbus_message_append_args (echo_reply,
-+ DBUS_TYPE_STRING, &s,
-+ DBUS_TYPE_INVALID))
-+ die ("No memory");
-+ }
-+
-+ if (!dbus_connection_send (connection, echo_reply, NULL))
-+ die ("No memory\n");
-+
-+ dbus_message_unref (echo_reply);
-+ }
-+ else if (type == DBUS_MESSAGE_TYPE_ERROR)
-+ {
-+ dbus_set_error_from_message (&error, reply);
-+ printf ("Error type in reply: %s\n", error.message);
-+
-+ if (strcmp (error.name, DBUS_ERROR_NO_MEMORY) != 0)
-+ {
-+ echo_reply = dbus_message_new_error (echo_reply,
-+ error.name,
-+ error.message);
-+
-+ if (echo_reply == NULL)
-+ die ("No memory\n");
-+
-+ if (!dbus_connection_send (connection, echo_reply, NULL))
-+ die ("No memory\n");
-+
-+ dbus_message_unref (echo_reply);
-+ }
-+ dbus_error_free (&error);
-+ }
-+ else
-+ _dbus_assert_not_reached ("Unexpected message recived\n");
-+
-+ hello_from_self_reply_recived = TRUE;
-+
-+ dbus_message_unref (reply);
-+ dbus_message_unref (echo_message);
-+ dbus_pending_call_unref (pcall);
-+}
-+
-+static DBusHandlerResult
-+handle_run_hello_from_self (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ DBusError error;
-+ DBusMessage *reply, *self_message;
-+ DBusPendingCall *pcall;
-+ char *s;
-+
-+ _dbus_verbose ("sending reply to Echo method\n");
-+
-+ dbus_error_init (&error);
-+
-+ if (!dbus_message_get_args (message,
-+ &error,
-+ DBUS_TYPE_STRING, &s,
-+ DBUS_TYPE_INVALID))
-+ {
-+ reply = dbus_message_new_error (message,
-+ error.name,
-+ error.message);
-+
-+ if (reply == NULL)
-+ die ("No memory\n");
-+
-+ if (!dbus_connection_send (connection, reply, NULL))
-+ die ("No memory\n");
-+
-+ dbus_message_unref (reply);
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+ printf ("Sending HelloFromSelf\n");
-+
-+ _dbus_verbose ("*** Sending message to self\n");
-+ self_message = dbus_message_new_method_call ("org.freedesktop.DBus.TestSuiteEchoService",
-+ "/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "HelloFromSelf");
-+
-+ if (self_message == NULL)
-+ die ("No memory");
-+
-+ if (!dbus_connection_send_with_reply (connection, self_message, &pcall, -1))
-+ die("No memory");
-+
-+ dbus_message_ref (message);
-+ if (!dbus_pending_call_set_notify (pcall, check_hello_from_self_reply, (void *)message, NULL))
-+ die("No memory");
-+
-+ printf ("Sent HelloFromSelf\n");
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+}
-+
-+static DBusHandlerResult
-+handle_echo (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ DBusError error;
-+ DBusMessage *reply;
-+ char *s;
-+
-+ _dbus_verbose ("sending reply to Echo method\n");
-+
-+ dbus_error_init (&error);
-+
-+ if (!dbus_message_get_args (message,
-+ &error,
-+ DBUS_TYPE_STRING, &s,
-+ DBUS_TYPE_INVALID))
-+ {
-+ reply = dbus_message_new_error (message,
-+ error.name,
-+ error.message);
-+
-+ if (reply == NULL)
-+ die ("No memory\n");
-+
-+ if (!dbus_connection_send (connection, reply, NULL))
-+ die ("No memory\n");
-+
-+ dbus_message_unref (reply);
-+
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ die ("No memory\n");
-+
-+ if (!dbus_message_append_args (reply,
-+ DBUS_TYPE_STRING, &s,
-+ DBUS_TYPE_INVALID))
-+ die ("No memory");
-+
-+ if (!dbus_connection_send (connection, reply, NULL))
-+ die ("No memory\n");
-+
-+ fprintf (stderr, "Echo service echoed string: \"%s\"\n", s);
-+
-+ dbus_message_unref (reply);
-+
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+}
-+
-+static void
-+path_unregistered_func (DBusConnection *connection,
-+ void *user_data)
-+{
-+ /* connection was finalized */
-+}
-+
-+static DBusHandlerResult
-+path_message_func (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ if (dbus_message_is_method_call (message,
-+ "org.freedesktop.TestSuite",
-+ "Echo"))
-+ return handle_echo (connection, message);
-+ else if (dbus_message_is_method_call (message,
-+ "org.freedesktop.TestSuite",
-+ "Exit"))
-+ {
-+ dbus_connection_close (connection);
-+ quit ();
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+ else if (dbus_message_is_method_call (message,
-+ "org.freedesktop.TestSuite",
-+ "EmitFoo"))
-+ {
-+ /* Emit the Foo signal */
-+ DBusMessage *signal;
-+ double v_DOUBLE;
-+
-+ _dbus_verbose ("emitting signal Foo\n");
-+
-+ signal = dbus_message_new_signal ("/org/freedesktop/TestSuite",
-+ "org.freedesktop.TestSuite",
-+ "Foo");
-+ if (signal == NULL)
-+ die ("No memory\n");
-+
-+ v_DOUBLE = 42.6;
-+ if (!dbus_message_append_args (signal,
-+ DBUS_TYPE_DOUBLE, &v_DOUBLE,
-+ DBUS_TYPE_INVALID))
-+ die ("No memory");
-+
-+ if (!dbus_connection_send (connection, signal, NULL))
-+ die ("No memory\n");
-+
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+
-+ else if (dbus_message_is_method_call (message,
-+ "org.freedesktop.TestSuite",
-+ "RunHelloFromSelf"))
-+ {
-+ return handle_run_hello_from_self (connection, message);
-+ }
-+ else if (dbus_message_is_method_call (message,
-+ "org.freedesktop.TestSuite",
-+ "HelloFromSelf"))
-+ {
-+ DBusMessage *reply;
-+ printf ("Recived the HelloFromSelf message\n");
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ die ("No memory");
-+
-+ if (!dbus_connection_send (connection, reply, NULL))
-+ die ("No memory");
-+ }
-+ else
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static DBusObjectPathVTable
-+echo_vtable = {
-+ path_unregistered_func,
-+ path_message_func,
-+ NULL,
-+};
-+
-+
-+static const char* echo_path = "/org/freedesktop/TestSuite" ;
-+
-+static DBusHandlerResult
-+filter_func (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ {
-+ dbus_connection_close (connection);
-+ quit ();
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+ else
-+ {
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+}
-+
-+int
-+main (int argc,
-+ char **argv)
-+{
-+ DBusError error;
-+ int result;
-+ DBusConnection *connection;
-+
-+ dbus_error_init (&error);
-+ connection = dbus_bus_get (DBUS_BUS_STARTER, &error);
-+ if (connection == NULL)
-+ {
-+ fprintf (stderr, "*** Failed to open connection to activating message bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ loop = _dbus_loop_new ();
-+ if (loop == NULL)
-+ die ("No memory\n");
-+
-+ if (!test_connection_setup (loop, connection))
-+ die ("No memory\n");
-+
-+ if (!dbus_connection_add_filter (connection,
-+ filter_func, NULL, NULL))
-+ die ("No memory");
-+
-+ if (!dbus_connection_register_object_path (connection,
-+ echo_path,
-+ &echo_vtable,
-+ (void*) 0xdeadbeef))
-+ die ("No memory");
-+
-+ {
-+ void *d;
-+ if (!dbus_connection_get_object_path_data (connection, echo_path, &d))
-+ die ("No memory");
-+ if (d != (void*) 0xdeadbeef)
-+ die ("dbus_connection_get_object_path_data() doesn't seem to work right\n");
-+ }
-+
-+ result = dbus_bus_request_name (connection, "org.freedesktop.DBus.TestSuiteEchoService",
-+ 0, &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "Error %s\n", error.message);
-+ _dbus_verbose ("*** Failed to acquire service: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ _dbus_verbose ("*** Test service entering main loop\n");
-+ _dbus_loop_run (loop);
-+
-+ test_connection_shutdown (loop, connection);
-+
-+ dbus_connection_remove_filter (connection, filter_func, NULL);
-+
-+ dbus_connection_unref (connection);
-+
-+ _dbus_loop_unref (loop);
-+ loop = NULL;
-+
-+ dbus_shutdown ();
-+
-+ _dbus_verbose ("*** Test service exiting\n");
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/test-shell-service.c dbus-0.61/test/test-shell-service.c
---- dbus-0.61.orig/test/test-shell-service.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/test-shell-service.c 2005-07-14 22:44:15.000000000 +0200
-@@ -0,0 +1,198 @@
-+
-+#include "test-utils.h"
-+
-+static DBusLoop *loop;
-+static dbus_bool_t already_quit = FALSE;
-+static const char* echo_path = "/org/freedesktop/TestSuite";
-+
-+typedef struct
-+{
-+ int argc;
-+ char **argv;
-+} EchoData;
-+
-+static void
-+quit (void)
-+{
-+ if (!already_quit)
-+ {
-+ _dbus_loop_quit (loop);
-+ already_quit = TRUE;
-+ }
-+}
-+
-+static void
-+die (const char *message)
-+{
-+ fprintf (stderr, "*** test-service: %s", message);
-+ exit (1);
-+}
-+
-+static DBusHandlerResult
-+handle_echo (DBusConnection *connection,
-+ DBusMessage *message)
-+{
-+ DBusError error;
-+ DBusMessage *reply;
-+ DBusMessageIter iter;
-+ int i;
-+ char *s;
-+ EchoData *d;
-+
-+ _dbus_verbose ("sending reply to Echo method\n");
-+
-+ if (!dbus_connection_get_object_path_data (connection, echo_path, &d))
-+ die ("No memory");
-+
-+
-+ dbus_error_init (&error);
-+
-+ reply = dbus_message_new_method_return (message);
-+ if (reply == NULL)
-+ die ("No memory\n");
-+
-+ dbus_message_iter_init_append (reply, &iter);
-+ for (i = 0; i < d->argc; ++i)
-+ if (!dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &(d->argv[i])))
-+ die ("No memory\n");
-+
-+ if (!dbus_connection_send (connection, reply, NULL))
-+ die ("No memory\n");
-+
-+ fprintf (stderr, "Shell echo service echoed the command line\n");
-+
-+ dbus_message_unref (reply);
-+
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+}
-+
-+static void
-+path_unregistered_func (DBusConnection *connection,
-+ void *user_data)
-+{
-+ /* connection was finalized */
-+}
-+
-+static DBusHandlerResult
-+path_message_func (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ if (dbus_message_is_method_call (message,
-+ "org.freedesktop.TestSuite",
-+ "Echo"))
-+ return handle_echo (connection, message);
-+ else if (dbus_message_is_method_call (message,
-+ "org.freedesktop.TestSuite",
-+ "Exit"))
-+ {
-+ dbus_connection_close (connection);
-+ quit ();
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+ else
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+}
-+
-+static DBusObjectPathVTable
-+echo_vtable = {
-+ path_unregistered_func,
-+ path_message_func,
-+ NULL,
-+};
-+
-+static DBusHandlerResult
-+filter_func (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ {
-+ dbus_connection_close (connection);
-+ quit ();
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+ }
-+ else
-+ {
-+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-+ }
-+}
-+
-+int
-+main (int argc,
-+ char **argv)
-+{
-+ DBusConnection *connection;
-+ DBusError error;
-+ EchoData echo_data;
-+ int result;
-+
-+ echo_data.argc = argc;
-+ echo_data.argv = argv;
-+
-+ dbus_error_init (&error);
-+ connection = dbus_bus_get (DBUS_BUS_STARTER, &error);
-+ if (connection == NULL)
-+ {
-+ fprintf (stderr, "*** Failed to open connection to activating message bus: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ return 1;
-+ }
-+
-+ loop = _dbus_loop_new ();
-+ if (loop == NULL)
-+ die ("No memory\n");
-+
-+ if (!test_connection_setup (loop, connection))
-+ die ("No memory\n");
-+
-+ if (!dbus_connection_add_filter (connection,
-+ filter_func, NULL, NULL))
-+ die ("No memory");
-+
-+ if (!dbus_connection_register_object_path (connection,
-+ echo_path,
-+ &echo_vtable,
-+ (void*) &echo_data))
-+ die ("No memory");
-+
-+ {
-+ void *d;
-+ if (!dbus_connection_get_object_path_data (connection, echo_path, &d))
-+ die ("No memory");
-+ if (d != (void*) &echo_data)
-+ die ("dbus_connection_get_object_path_data() doesn't seem to work right\n");
-+ }
-+
-+ result = dbus_bus_request_name (connection, "org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess",
-+ 0, &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "Error %s\n", error.message);
-+ _dbus_verbose ("*** Failed to acquire service: %s\n",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ _dbus_verbose ("*** Test service entering main loop\n");
-+ _dbus_loop_run (loop);
-+
-+ test_connection_shutdown (loop, connection);
-+
-+ dbus_connection_remove_filter (connection, filter_func, NULL);
-+
-+ dbus_connection_unref (connection);
-+
-+ _dbus_loop_unref (loop);
-+ loop = NULL;
-+
-+ dbus_shutdown ();
-+
-+ _dbus_verbose ("*** Test service exiting\n");
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/test/test-sleep-forever.c dbus-0.61/test/test-sleep-forever.c
---- dbus-0.61.orig/test/test-sleep-forever.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/test-sleep-forever.c 2003-04-05 02:37:17.000000000 +0200
-@@ -0,0 +1,12 @@
-+/* This is a process that just sleeps infinitely. */
-+
-+#include <unistd.h>
-+
-+int
-+main (int argc, char **argv)
-+{
-+ while (1)
-+ sleep (10000000);
-+
-+ return 1;
-+}
-diff -Naur dbus-0.61.orig/test/test-utils.c dbus-0.61/test/test-utils.c
---- dbus-0.61.orig/test/test-utils.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/test-utils.c 2005-11-30 20:32:26.000000000 +0100
-@@ -0,0 +1,189 @@
-+#include "test-utils.h"
-+
-+typedef struct
-+{
-+ DBusLoop *loop;
-+ DBusConnection *connection;
-+
-+} CData;
-+
-+static dbus_bool_t
-+connection_watch_callback (DBusWatch *watch,
-+ unsigned int condition,
-+ void *data)
-+{
-+ return dbus_watch_handle (watch, condition);
-+}
-+
-+static dbus_bool_t
-+add_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ CData *cd = data;
-+
-+ return _dbus_loop_add_watch (cd->loop,
-+ watch,
-+ connection_watch_callback,
-+ cd, NULL);
-+}
-+
-+static void
-+remove_watch (DBusWatch *watch,
-+ void *data)
-+{
-+ CData *cd = data;
-+
-+ _dbus_loop_remove_watch (cd->loop,
-+ watch, connection_watch_callback, cd);
-+}
-+
-+static void
-+connection_timeout_callback (DBusTimeout *timeout,
-+ void *data)
-+{
-+ /* Can return FALSE on OOM but we just let it fire again later */
-+ dbus_timeout_handle (timeout);
-+}
-+
-+static dbus_bool_t
-+add_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ CData *cd = data;
-+
-+ return _dbus_loop_add_timeout (cd->loop,
-+ timeout, connection_timeout_callback, cd, NULL);
-+}
-+
-+static void
-+remove_timeout (DBusTimeout *timeout,
-+ void *data)
-+{
-+ CData *cd = data;
-+
-+ _dbus_loop_remove_timeout (cd->loop,
-+ timeout, connection_timeout_callback, cd);
-+}
-+
-+static void
-+dispatch_status_function (DBusConnection *connection,
-+ DBusDispatchStatus new_status,
-+ void *data)
-+{
-+ DBusLoop *loop = data;
-+
-+ if (new_status != DBUS_DISPATCH_COMPLETE)
-+ {
-+ while (!_dbus_loop_queue_dispatch (loop, connection))
-+ _dbus_wait_for_memory ();
-+ }
-+}
-+
-+static void
-+cdata_free (void *data)
-+{
-+ CData *cd = data;
-+
-+ dbus_connection_unref (cd->connection);
-+ _dbus_loop_unref (cd->loop);
-+
-+ dbus_free (cd);
-+}
-+
-+static CData*
-+cdata_new (DBusLoop *loop,
-+ DBusConnection *connection)
-+{
-+ CData *cd;
-+
-+ cd = dbus_new0 (CData, 1);
-+ if (cd == NULL)
-+ return NULL;
-+
-+ cd->loop = loop;
-+ cd->connection = connection;
-+
-+ dbus_connection_ref (cd->connection);
-+ _dbus_loop_ref (cd->loop);
-+
-+ return cd;
-+}
-+
-+dbus_bool_t
-+test_connection_setup (DBusLoop *loop,
-+ DBusConnection *connection)
-+{
-+ CData *cd;
-+
-+ cd = NULL;
-+
-+ dbus_connection_set_dispatch_status_function (connection, dispatch_status_function,
-+ loop, NULL);
-+
-+ cd = cdata_new (loop, connection);
-+ if (cd == NULL)
-+ goto nomem;
-+
-+ /* Because dbus-mainloop.c checks dbus_timeout_get_enabled(),
-+ * dbus_watch_get_enabled() directly, we don't have to provide
-+ * "toggled" callbacks.
-+ */
-+
-+ if (!dbus_connection_set_watch_functions (connection,
-+ add_watch,
-+ remove_watch,
-+ NULL,
-+ cd, cdata_free))
-+ goto nomem;
-+
-+
-+ cd = cdata_new (loop, connection);
-+ if (cd == NULL)
-+ goto nomem;
-+
-+ if (!dbus_connection_set_timeout_functions (connection,
-+ add_timeout,
-+ remove_timeout,
-+ NULL,
-+ cd, cdata_free))
-+ goto nomem;
-+
-+ if (dbus_connection_get_dispatch_status (connection) != DBUS_DISPATCH_COMPLETE)
-+ {
-+ if (!_dbus_loop_queue_dispatch (loop, connection))
-+ goto nomem;
-+ }
-+
-+ return TRUE;
-+
-+ nomem:
-+ if (cd)
-+ cdata_free (cd);
-+
-+ dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
-+ dbus_connection_set_watch_functions (connection, NULL, NULL, NULL, NULL, NULL);
-+ dbus_connection_set_timeout_functions (connection, NULL, NULL, NULL, NULL, NULL);
-+
-+ return FALSE;
-+}
-+
-+void
-+test_connection_shutdown (DBusLoop *loop,
-+ DBusConnection *connection)
-+{
-+ if (!dbus_connection_set_watch_functions (connection,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL, NULL))
-+ _dbus_assert_not_reached ("setting watch functions to NULL failed");
-+
-+ if (!dbus_connection_set_timeout_functions (connection,
-+ NULL,
-+ NULL,
-+ NULL,
-+ NULL, NULL))
-+ _dbus_assert_not_reached ("setting timeout functions to NULL failed");
-+
-+ dbus_connection_set_dispatch_status_function (connection, NULL, NULL, NULL);
-+}
-diff -Naur dbus-0.61.orig/test/test-utils.h dbus-0.61/test/test-utils.h
---- dbus-0.61.orig/test/test-utils.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/test/test-utils.h 2003-04-08 01:28:16.000000000 +0200
-@@ -0,0 +1,20 @@
-+#ifndef TEST_UTILS_H
-+#define TEST_UTILS_H
-+#include <config.h>
-+#define DBUS_COMPILATION /* Cheat and use private stuff */
-+#include <dbus/dbus.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <dbus/dbus-mainloop.h>
-+#include <dbus/dbus-internals.h>
-+#undef DBUS_COMPILATION
-+
-+dbus_bool_t test_connection_setup (DBusLoop *loop,
-+ DBusConnection *connection);
-+void test_connection_shutdown (DBusLoop *loop,
-+ DBusConnection *connection);
-+void test_connection_dispatch_all_messages (DBusConnection *connection);
-+dbus_bool_t test_connection_dispatch_one_message (DBusConnection *connection);
-+
-+
-+#endif
-diff -Naur dbus-0.61.orig/tools/Makefile.am dbus-0.61/tools/Makefile.am
---- dbus-0.61.orig/tools/Makefile.am 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/Makefile.am 2005-09-07 00:38:54.000000000 +0200
-@@ -0,0 +1,64 @@
-+INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_X_CFLAGS) $(DBUS_GTK_THREADS_CFLAGS) -DDBUS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" -DDBUS_COMPILATION
-+
-+if HAVE_GLIB
-+GLIB_TOOLS=dbus-monitor
-+
-+nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h
-+libdbus_glibdir = $(includedir)/dbus-1.0/dbus
-+
-+dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/glib/dbus-binding-tool$(EXEEXT)
-+ $(top_builddir)/glib/dbus-binding-tool --mode=glib-client --output=dbus-glib-bindings.h dbus-bus-introspect.xml
-+
-+BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml
-+
-+else
-+GLIB_TOOLS=
-+endif
-+
-+if HAVE_GTK
-+GTK_TOOLS=dbus-viewer
-+else
-+GTK_TOOLS=
-+endif
-+
-+if HAVE_GLIB
-+dbus-bus-introspect.xml: $(top_builddir)/bus/dbus-daemon$(EXEEXT) dbus-launch$(EXEEXT) dbus-send$(EXEEXT) $(top_builddir)/bus/dbus-daemon$(EXEEXT) Makefile
-+ DBUS_TOP_BUILDDIR=$(top_builddir) $(srcdir)/run-with-tmp-session-bus.sh ./dbus-send --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
-+endif
-+
-+bin_PROGRAMS=dbus-send $(GLIB_TOOLS) dbus-launch dbus-cleanup-sockets $(GTK_TOOLS)
-+
-+dbus_send_SOURCES= \
-+ dbus-print-message.c \
-+ dbus-print-message.h \
-+ dbus-send.c
-+
-+dbus_monitor_SOURCES= \
-+ dbus-monitor.c \
-+ dbus-print-message.c \
-+ dbus-print-message.h
-+
-+dbus_launch_SOURCES= \
-+ dbus-launch.c
-+
-+dbus_cleanup_sockets_SOURCES= \
-+ dbus-cleanup-sockets.c
-+
-+dbus_viewer_SOURCES= \
-+ dbus-names-model.c \
-+ dbus-names-model.h \
-+ dbus-tree-view.c \
-+ dbus-tree-view.h \
-+ dbus-viewer.c
-+
-+dbus_send_LDADD= $(top_builddir)/dbus/libdbus-1.la
-+dbus_monitor_LDADD= $(top_builddir)/glib/libdbus-glib-1.la
-+dbus_launch_LDADD= $(DBUS_X_LIBS)
-+dbus_viewer_LDADD= $(top_builddir)/glib/libdbus-gtool.la $(DBUS_GTK_THREADS_LIBS) $(DBUS_GLIB_TOOL_LIBS)
-+
-+man_MANS = dbus-send.1 dbus-monitor.1 dbus-launch.1 dbus-cleanup-sockets.1
-+EXTRA_DIST = $(man_MANS) run-with-tmp-session-bus.sh
-+CLEANFILES = \
-+ run-with-tmp-session-bus.conf \
-+ dbus-bus-introspect.xml \
-+ dbus-glib-bindings.h
-diff -Naur dbus-0.61.orig/tools/Makefile.in dbus-0.61/tools/Makefile.in
---- dbus-0.61.orig/tools/Makefile.in 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/Makefile.in 2006-02-27 22:34:42.000000000 +0100
-@@ -0,0 +1,776 @@
-+# Makefile.in generated by automake 1.9.6 from Makefile.am.
-+# @configure_input@
-+
-+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-+# 2003, 2004, 2005 Free Software Foundation, Inc.
-+# This Makefile.in is free software; the Free Software Foundation
-+# gives unlimited permission to copy and/or distribute it,
-+# with or without modifications, as long as this notice is preserved.
-+
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-+# PARTICULAR PURPOSE.
-+
-+ at SET_MAKE@
-+
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+pkgdatadir = $(datadir)/@PACKAGE@
-+pkglibdir = $(libdir)/@PACKAGE@
-+pkgincludedir = $(includedir)/@PACKAGE@
-+top_builddir = ..
-+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-+INSTALL = @INSTALL@
-+install_sh_DATA = $(install_sh) -c -m 644
-+install_sh_PROGRAM = $(install_sh) -c
-+install_sh_SCRIPT = $(install_sh) -c
-+INSTALL_HEADER = $(INSTALL_DATA)
-+transform = $(program_transform_name)
-+NORMAL_INSTALL = :
-+PRE_INSTALL = :
-+POST_INSTALL = :
-+NORMAL_UNINSTALL = :
-+PRE_UNINSTALL = :
-+POST_UNINSTALL = :
-+build_triplet = @build@
-+host_triplet = @host@
-+target_triplet = @target@
-+bin_PROGRAMS = dbus-send$(EXEEXT) $(am__EXEEXT_1) dbus-launch$(EXEEXT) \
-+ dbus-cleanup-sockets$(EXEEXT) $(am__EXEEXT_2)
-+subdir = tools
-+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-+ $(top_srcdir)/configure.in
-+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-+ $(ACLOCAL_M4)
-+mkinstalldirs = $(install_sh) -d
-+CONFIG_HEADER = $(top_builddir)/config.h
-+CONFIG_CLEAN_FILES =
-+ at HAVE_GLIB_TRUE@am__EXEEXT_1 = dbus-monitor$(EXEEXT)
-+ at HAVE_GTK_TRUE@am__EXEEXT_2 = dbus-viewer$(EXEEXT)
-+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
-+ "$(DESTDIR)$(libdbus_glibdir)"
-+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-+PROGRAMS = $(bin_PROGRAMS)
-+am_dbus_cleanup_sockets_OBJECTS = dbus-cleanup-sockets.$(OBJEXT)
-+dbus_cleanup_sockets_OBJECTS = $(am_dbus_cleanup_sockets_OBJECTS)
-+dbus_cleanup_sockets_LDADD = $(LDADD)
-+am_dbus_launch_OBJECTS = dbus-launch.$(OBJEXT)
-+dbus_launch_OBJECTS = $(am_dbus_launch_OBJECTS)
-+am__DEPENDENCIES_1 =
-+dbus_launch_DEPENDENCIES = $(am__DEPENDENCIES_1)
-+am_dbus_monitor_OBJECTS = dbus-monitor.$(OBJEXT) \
-+ dbus-print-message.$(OBJEXT)
-+dbus_monitor_OBJECTS = $(am_dbus_monitor_OBJECTS)
-+dbus_monitor_DEPENDENCIES = $(top_builddir)/glib/libdbus-glib-1.la
-+am_dbus_send_OBJECTS = dbus-print-message.$(OBJEXT) \
-+ dbus-send.$(OBJEXT)
-+dbus_send_OBJECTS = $(am_dbus_send_OBJECTS)
-+dbus_send_DEPENDENCIES = $(top_builddir)/dbus/libdbus-1.la
-+am_dbus_viewer_OBJECTS = dbus-names-model.$(OBJEXT) \
-+ dbus-tree-view.$(OBJEXT) dbus-viewer.$(OBJEXT)
-+dbus_viewer_OBJECTS = $(am_dbus_viewer_OBJECTS)
-+dbus_viewer_DEPENDENCIES = $(top_builddir)/glib/libdbus-gtool.la \
-+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
-+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-+depcomp = $(SHELL) $(top_srcdir)/depcomp
-+am__depfiles_maybe = depfiles
-+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-+ $(AM_CFLAGS) $(CFLAGS)
-+CCLD = $(CC)
-+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
-+SOURCES = $(dbus_cleanup_sockets_SOURCES) $(dbus_launch_SOURCES) \
-+ $(dbus_monitor_SOURCES) $(dbus_send_SOURCES) \
-+ $(dbus_viewer_SOURCES)
-+DIST_SOURCES = $(dbus_cleanup_sockets_SOURCES) $(dbus_launch_SOURCES) \
-+ $(dbus_monitor_SOURCES) $(dbus_send_SOURCES) \
-+ $(dbus_viewer_SOURCES)
-+man1dir = $(mandir)/man1
-+NROFF = nroff
-+MANS = $(man_MANS)
-+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-+am__vpath_adj = case $$p in \
-+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-+ *) f=$$p;; \
-+ esac;
-+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-+nodist_libdbus_glibHEADERS_INSTALL = $(INSTALL_HEADER)
-+HEADERS = $(nodist_libdbus_glib_HEADERS)
-+ETAGS = etags
-+CTAGS = ctags
-+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-+ABSOLUTE_TOP_BUILDDIR = @ABSOLUTE_TOP_BUILDDIR@
-+ACLOCAL = @ACLOCAL@
-+AMDEP_FALSE = @AMDEP_FALSE@
-+AMDEP_TRUE = @AMDEP_TRUE@
-+AMTAR = @AMTAR@
-+AR = @AR@
-+AUTOCONF = @AUTOCONF@
-+AUTOHEADER = @AUTOHEADER@
-+AUTOMAKE = @AUTOMAKE@
-+AWK = @AWK@
-+CATALOGS = @CATALOGS@
-+CATOBJEXT = @CATOBJEXT@
-+CC = @CC@
-+CCDEPMODE = @CCDEPMODE@
-+CFLAGS = @CFLAGS@
-+CPP = @CPP@
-+CPPFLAGS = @CPPFLAGS@
-+CSC = @CSC@
-+CXX = @CXX@
-+CXXCPP = @CXXCPP@
-+CXXDEPMODE = @CXXDEPMODE@
-+CXXFLAGS = @CXXFLAGS@
-+CYGPATH_W = @CYGPATH_W@
-+DATADIRNAME = @DATADIRNAME@
-+DBUS_BUILD_TESTS_FALSE = @DBUS_BUILD_TESTS_FALSE@
-+DBUS_BUILD_TESTS_TRUE = @DBUS_BUILD_TESTS_TRUE@
-+DBUS_BUS_CFLAGS = @DBUS_BUS_CFLAGS@
-+DBUS_BUS_LIBS = @DBUS_BUS_LIBS@
-+DBUS_CLIENT_CFLAGS = @DBUS_CLIENT_CFLAGS@
-+DBUS_CLIENT_LIBS = @DBUS_CLIENT_LIBS@
-+DBUS_CONSOLE_AUTH_DIR = @DBUS_CONSOLE_AUTH_DIR@
-+DBUS_DOXYGEN_DOCS_ENABLED_FALSE = @DBUS_DOXYGEN_DOCS_ENABLED_FALSE@
-+DBUS_DOXYGEN_DOCS_ENABLED_TRUE = @DBUS_DOXYGEN_DOCS_ENABLED_TRUE@
-+DBUS_GCOV_ENABLED_FALSE = @DBUS_GCOV_ENABLED_FALSE@
-+DBUS_GCOV_ENABLED_TRUE = @DBUS_GCOV_ENABLED_TRUE@
-+DBUS_GLIB_CFLAGS = @DBUS_GLIB_CFLAGS@
-+DBUS_GLIB_LIBS = @DBUS_GLIB_LIBS@
-+DBUS_GLIB_THREADS_CFLAGS = @DBUS_GLIB_THREADS_CFLAGS@
-+DBUS_GLIB_THREADS_LIBS = @DBUS_GLIB_THREADS_LIBS@
-+DBUS_GLIB_TOOL_CFLAGS = @DBUS_GLIB_TOOL_CFLAGS@
-+DBUS_GLIB_TOOL_LIBS = @DBUS_GLIB_TOOL_LIBS@
-+DBUS_GTK_CFLAGS = @DBUS_GTK_CFLAGS@
-+DBUS_GTK_LIBS = @DBUS_GTK_LIBS@
-+DBUS_GTK_THREADS_CFLAGS = @DBUS_GTK_THREADS_CFLAGS@
-+DBUS_GTK_THREADS_LIBS = @DBUS_GTK_THREADS_LIBS@
-+DBUS_HAVE_INT64 = @DBUS_HAVE_INT64@
-+DBUS_INIT_SCRIPTS_RED_HAT_FALSE = @DBUS_INIT_SCRIPTS_RED_HAT_FALSE@
-+DBUS_INIT_SCRIPTS_RED_HAT_TRUE = @DBUS_INIT_SCRIPTS_RED_HAT_TRUE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_FALSE = @DBUS_INIT_SCRIPTS_SLACKWARE_FALSE@
-+DBUS_INIT_SCRIPTS_SLACKWARE_TRUE = @DBUS_INIT_SCRIPTS_SLACKWARE_TRUE@
-+DBUS_INT16_TYPE = @DBUS_INT16_TYPE@
-+DBUS_INT32_TYPE = @DBUS_INT32_TYPE@
-+DBUS_INT64_CONSTANT = @DBUS_INT64_CONSTANT@
-+DBUS_INT64_TYPE = @DBUS_INT64_TYPE@
-+DBUS_PATH_OR_ABSTRACT = @DBUS_PATH_OR_ABSTRACT@
-+DBUS_QT3_CXXFLAGS = @DBUS_QT3_CXXFLAGS@
-+DBUS_QT3_LIBS = @DBUS_QT3_LIBS@
-+DBUS_QTESTLIB_CFLAGS = @DBUS_QTESTLIB_CFLAGS@
-+DBUS_QTESTLIB_LIBS = @DBUS_QTESTLIB_LIBS@
-+DBUS_QT_CFLAGS = @DBUS_QT_CFLAGS@
-+DBUS_QT_LIBS = @DBUS_QT_LIBS@
-+DBUS_SESSION_SOCKET_DIR = @DBUS_SESSION_SOCKET_DIR@
-+DBUS_SYSTEM_BUS_DEFAULT_ADDRESS = @DBUS_SYSTEM_BUS_DEFAULT_ADDRESS@
-+DBUS_SYSTEM_PID_FILE = @DBUS_SYSTEM_PID_FILE@
-+DBUS_SYSTEM_SOCKET = @DBUS_SYSTEM_SOCKET@
-+DBUS_TEST_CFLAGS = @DBUS_TEST_CFLAGS@
-+DBUS_TEST_LIBS = @DBUS_TEST_LIBS@
-+DBUS_UINT64_CONSTANT = @DBUS_UINT64_CONSTANT@
-+DBUS_USER = @DBUS_USER@
-+DBUS_USE_CSC_FALSE = @DBUS_USE_CSC_FALSE@
-+DBUS_USE_CSC_TRUE = @DBUS_USE_CSC_TRUE@
-+DBUS_USE_EXPAT_FALSE = @DBUS_USE_EXPAT_FALSE@
-+DBUS_USE_EXPAT_TRUE = @DBUS_USE_EXPAT_TRUE@
-+DBUS_USE_GCJ_FALSE = @DBUS_USE_GCJ_FALSE@
-+DBUS_USE_GCJ_TRUE = @DBUS_USE_GCJ_TRUE@
-+DBUS_USE_LIBXML_FALSE = @DBUS_USE_LIBXML_FALSE@
-+DBUS_USE_LIBXML_TRUE = @DBUS_USE_LIBXML_TRUE@
-+DBUS_XML_DOCS_ENABLED_FALSE = @DBUS_XML_DOCS_ENABLED_FALSE@
-+DBUS_XML_DOCS_ENABLED_TRUE = @DBUS_XML_DOCS_ENABLED_TRUE@
-+DBUS_X_CFLAGS = @DBUS_X_CFLAGS@
-+DBUS_X_LIBS = @DBUS_X_LIBS@
-+DEFS = @DEFS@
-+DEPDIR = @DEPDIR@
-+DOXYGEN = @DOXYGEN@
-+ECHO = @ECHO@
-+ECHO_C = @ECHO_C@
-+ECHO_N = @ECHO_N@
-+ECHO_T = @ECHO_T@
-+EGREP = @EGREP@
-+ENABLE_MONODOC_FALSE = @ENABLE_MONODOC_FALSE@
-+ENABLE_MONODOC_TRUE = @ENABLE_MONODOC_TRUE@
-+EXEEXT = @EXEEXT@
-+EXPANDED_BINDIR = @EXPANDED_BINDIR@
-+EXPANDED_DATADIR = @EXPANDED_DATADIR@
-+EXPANDED_LIBDIR = @EXPANDED_LIBDIR@
-+EXPANDED_LOCALSTATEDIR = @EXPANDED_LOCALSTATEDIR@
-+EXPANDED_SYSCONFDIR = @EXPANDED_SYSCONFDIR@
-+F77 = @F77@
-+FFLAGS = @FFLAGS@
-+GACUTIL = @GACUTIL@
-+GCJ = @GCJ@
-+GCJDEPMODE = @GCJDEPMODE@
-+GCJFLAGS = @GCJFLAGS@
-+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-+GMOFILES = @GMOFILES@
-+GMSGFMT = @GMSGFMT@
-+HAVE_GLIB_FALSE = @HAVE_GLIB_FALSE@
-+HAVE_GLIB_THREADS_FALSE = @HAVE_GLIB_THREADS_FALSE@
-+HAVE_GLIB_THREADS_TRUE = @HAVE_GLIB_THREADS_TRUE@
-+HAVE_GLIB_TRUE = @HAVE_GLIB_TRUE@
-+HAVE_GTK_FALSE = @HAVE_GTK_FALSE@
-+HAVE_GTK_TRUE = @HAVE_GTK_TRUE@
-+HAVE_PYTHON_FALSE = @HAVE_PYTHON_FALSE@
-+HAVE_PYTHON_TRUE = @HAVE_PYTHON_TRUE@
-+HAVE_QT3_FALSE = @HAVE_QT3_FALSE@
-+HAVE_QT3_TRUE = @HAVE_QT3_TRUE@
-+HAVE_QTESTLIB_FALSE = @HAVE_QTESTLIB_FALSE@
-+HAVE_QTESTLIB_TRUE = @HAVE_QTESTLIB_TRUE@
-+HAVE_QT_FALSE = @HAVE_QT_FALSE@
-+HAVE_QT_TRUE = @HAVE_QT_TRUE@
-+HAVE_SELINUX_FALSE = @HAVE_SELINUX_FALSE@
-+HAVE_SELINUX_TRUE = @HAVE_SELINUX_TRUE@
-+INSTALL_DATA = @INSTALL_DATA@
-+INSTALL_PROGRAM = @INSTALL_PROGRAM@
-+INSTALL_SCRIPT = @INSTALL_SCRIPT@
-+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-+INSTOBJEXT = @INSTOBJEXT@
-+INTLLIBS = @INTLLIBS@
-+JAR = @JAR@
-+LDFLAGS = @LDFLAGS@
-+LIBOBJS = @LIBOBJS@
-+LIBS = @LIBS@
-+LIBTOOL = @LIBTOOL@
-+LIBXML_CFLAGS = @LIBXML_CFLAGS@
-+LIBXML_LIBS = @LIBXML_LIBS@
-+LIB_PREFIX = @LIB_PREFIX@
-+LIB_SUFFIX = @LIB_SUFFIX@
-+LN_S = @LN_S@
-+LTLIBOBJS = @LTLIBOBJS@
-+LT_AGE = @LT_AGE@
-+LT_CURRENT = @LT_CURRENT@
-+LT_REVISION = @LT_REVISION@
-+MAINT = @MAINT@
-+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
-+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
-+MAKEINFO = @MAKEINFO@
-+MKINSTALLDIRS = @MKINSTALLDIRS@
-+MONODOC = @MONODOC@
-+MONODOC_DEPENDENCY_CFLAGS = @MONODOC_DEPENDENCY_CFLAGS@
-+MONODOC_DEPENDENCY_LIBS = @MONODOC_DEPENDENCY_LIBS@
-+MONODOC_REQUIRED_VERSION = @MONODOC_REQUIRED_VERSION@
-+MONO_DEPENDENCY_CFLAGS = @MONO_DEPENDENCY_CFLAGS@
-+MONO_DEPENDENCY_LIBS = @MONO_DEPENDENCY_LIBS@
-+MONO_REQUIRED_VERSION = @MONO_REQUIRED_VERSION@
-+MSGFMT = @MSGFMT@
-+OBJEXT = @OBJEXT@
-+PACKAGE = @PACKAGE@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+PACKAGE_NAME = @PACKAGE_NAME@
-+PACKAGE_STRING = @PACKAGE_STRING@
-+PACKAGE_TARNAME = @PACKAGE_TARNAME@
-+PACKAGE_VERSION = @PACKAGE_VERSION@
-+PATH_SEPARATOR = @PATH_SEPARATOR@
-+PKG_CONFIG = @PKG_CONFIG@
-+POFILES = @POFILES@
-+POSUB = @POSUB@
-+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-+PYREX = @PYREX@
-+PYTHON = @PYTHON@
-+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-+PYTHON_INCLUDES = @PYTHON_INCLUDES@
-+PYTHON_PLATFORM = @PYTHON_PLATFORM@
-+PYTHON_PREFIX = @PYTHON_PREFIX@
-+PYTHON_VERSION = @PYTHON_VERSION@
-+QT3_MOC = @QT3_MOC@
-+QT_MOC = @QT_MOC@
-+RANLIB = @RANLIB@
-+RUNTIME = @RUNTIME@
-+SET_MAKE = @SET_MAKE@
-+SHELL = @SHELL@
-+STRIP = @STRIP@
-+TEST_EXIT_BINARY = @TEST_EXIT_BINARY@
-+TEST_GLIB_SERVICE_BINARY = @TEST_GLIB_SERVICE_BINARY@
-+TEST_PYTHON_SERVICE_BINARY = @TEST_PYTHON_SERVICE_BINARY@
-+TEST_SEGFAULT_BINARY = @TEST_SEGFAULT_BINARY@
-+TEST_SERVICE_BINARY = @TEST_SERVICE_BINARY@
-+TEST_SERVICE_DIR = @TEST_SERVICE_DIR@
-+TEST_SHELL_SERVICE_BINARY = @TEST_SHELL_SERVICE_BINARY@
-+TEST_SLEEP_FOREVER_BINARY = @TEST_SLEEP_FOREVER_BINARY@
-+TEST_SOCKET_DIR = @TEST_SOCKET_DIR@
-+USE_NLS = @USE_NLS@
-+VERSION = @VERSION@
-+XGETTEXT = @XGETTEXT@
-+XMLTO = @XMLTO@
-+X_CFLAGS = @X_CFLAGS@
-+X_EXTRA_LIBS = @X_EXTRA_LIBS@
-+X_LIBS = @X_LIBS@
-+X_PRE_LIBS = @X_PRE_LIBS@
-+ac_ct_AR = @ac_ct_AR@
-+ac_ct_CC = @ac_ct_CC@
-+ac_ct_CXX = @ac_ct_CXX@
-+ac_ct_F77 = @ac_ct_F77@
-+ac_ct_RANLIB = @ac_ct_RANLIB@
-+ac_ct_STRIP = @ac_ct_STRIP@
-+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-+am__fastdepGCJ_FALSE = @am__fastdepGCJ_FALSE@
-+am__fastdepGCJ_TRUE = @am__fastdepGCJ_TRUE@
-+am__include = @am__include@
-+am__leading_dot = @am__leading_dot@
-+am__quote = @am__quote@
-+am__tar = @am__tar@
-+am__untar = @am__untar@
-+bindir = @bindir@
-+build = @build@
-+build_alias = @build_alias@
-+build_cpu = @build_cpu@
-+build_os = @build_os@
-+build_vendor = @build_vendor@
-+datadir = @datadir@
-+exec_prefix = @exec_prefix@
-+host = @host@
-+host_alias = @host_alias@
-+host_cpu = @host_cpu@
-+host_os = @host_os@
-+host_vendor = @host_vendor@
-+includedir = @includedir@
-+infodir = @infodir@
-+install_sh = @install_sh@
-+libdir = @libdir@
-+libexecdir = @libexecdir@
-+localstatedir = @localstatedir@
-+mandir = @mandir@
-+mkdir_p = @mkdir_p@
-+oldincludedir = @oldincludedir@
-+pkgpyexecdir = @pkgpyexecdir@
-+pkgpythondir = @pkgpythondir@
-+prefix = @prefix@
-+program_transform_name = @program_transform_name@
-+pyexecdir = @pyexecdir@
-+pythondir = @pythondir@
-+sbindir = @sbindir@
-+sharedstatedir = @sharedstatedir@
-+sysconfdir = @sysconfdir@
-+target = @target@
-+target_alias = @target_alias@
-+target_cpu = @target_cpu@
-+target_os = @target_os@
-+target_vendor = @target_vendor@
-+INCLUDES = -I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_X_CFLAGS) $(DBUS_GTK_THREADS_CFLAGS) -DDBUS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" -DDBUS_COMPILATION
-+ at HAVE_GLIB_FALSE@GLIB_TOOLS =
-+ at HAVE_GLIB_TRUE@GLIB_TOOLS = dbus-monitor
-+ at HAVE_GLIB_TRUE@nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h
-+ at HAVE_GLIB_TRUE@libdbus_glibdir = $(includedir)/dbus-1.0/dbus
-+ at HAVE_GLIB_TRUE@BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml
-+ at HAVE_GTK_FALSE@GTK_TOOLS =
-+ at HAVE_GTK_TRUE@GTK_TOOLS = dbus-viewer
-+dbus_send_SOURCES = \
-+ dbus-print-message.c \
-+ dbus-print-message.h \
-+ dbus-send.c
-+
-+dbus_monitor_SOURCES = \
-+ dbus-monitor.c \
-+ dbus-print-message.c \
-+ dbus-print-message.h
-+
-+dbus_launch_SOURCES = \
-+ dbus-launch.c
-+
-+dbus_cleanup_sockets_SOURCES = \
-+ dbus-cleanup-sockets.c
-+
-+dbus_viewer_SOURCES = \
-+ dbus-names-model.c \
-+ dbus-names-model.h \
-+ dbus-tree-view.c \
-+ dbus-tree-view.h \
-+ dbus-viewer.c
-+
-+dbus_send_LDADD = $(top_builddir)/dbus/libdbus-1.la
-+dbus_monitor_LDADD = $(top_builddir)/glib/libdbus-glib-1.la
-+dbus_launch_LDADD = $(DBUS_X_LIBS)
-+dbus_viewer_LDADD = $(top_builddir)/glib/libdbus-gtool.la $(DBUS_GTK_THREADS_LIBS) $(DBUS_GLIB_TOOL_LIBS)
-+man_MANS = dbus-send.1 dbus-monitor.1 dbus-launch.1 dbus-cleanup-sockets.1
-+EXTRA_DIST = $(man_MANS) run-with-tmp-session-bus.sh
-+CLEANFILES = \
-+ run-with-tmp-session-bus.conf \
-+ dbus-bus-introspect.xml \
-+ dbus-glib-bindings.h
-+
-+all: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) all-am
-+
-+.SUFFIXES:
-+.SUFFIXES: .c .lo .o .obj
-+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
-+ @for dep in $?; do \
-+ case '$(am__configure_deps)' in \
-+ *$$dep*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-+ && exit 0; \
-+ exit 1;; \
-+ esac; \
-+ done; \
-+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \
-+ cd $(top_srcdir) && \
-+ $(AUTOMAKE) --gnu tools/Makefile
-+.PRECIOUS: Makefile
-+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-+ @case '$?' in \
-+ *config.status*) \
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-+ *) \
-+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-+ esac;
-+
-+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+
-+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-+install-binPROGRAMS: $(bin_PROGRAMS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ if test -f $$p \
-+ || test -f $$p1 \
-+ ; then \
-+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
-+ else :; fi; \
-+ done
-+
-+uninstall-binPROGRAMS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
-+ done
-+
-+clean-binPROGRAMS:
-+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
-+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-+ echo " rm -f $$p $$f"; \
-+ rm -f $$p $$f ; \
-+ done
-+dbus-cleanup-sockets$(EXEEXT): $(dbus_cleanup_sockets_OBJECTS) $(dbus_cleanup_sockets_DEPENDENCIES)
-+ @rm -f dbus-cleanup-sockets$(EXEEXT)
-+ $(LINK) $(dbus_cleanup_sockets_LDFLAGS) $(dbus_cleanup_sockets_OBJECTS) $(dbus_cleanup_sockets_LDADD) $(LIBS)
-+dbus-launch$(EXEEXT): $(dbus_launch_OBJECTS) $(dbus_launch_DEPENDENCIES)
-+ @rm -f dbus-launch$(EXEEXT)
-+ $(LINK) $(dbus_launch_LDFLAGS) $(dbus_launch_OBJECTS) $(dbus_launch_LDADD) $(LIBS)
-+dbus-monitor$(EXEEXT): $(dbus_monitor_OBJECTS) $(dbus_monitor_DEPENDENCIES)
-+ @rm -f dbus-monitor$(EXEEXT)
-+ $(LINK) $(dbus_monitor_LDFLAGS) $(dbus_monitor_OBJECTS) $(dbus_monitor_LDADD) $(LIBS)
-+dbus-send$(EXEEXT): $(dbus_send_OBJECTS) $(dbus_send_DEPENDENCIES)
-+ @rm -f dbus-send$(EXEEXT)
-+ $(LINK) $(dbus_send_LDFLAGS) $(dbus_send_OBJECTS) $(dbus_send_LDADD) $(LIBS)
-+dbus-viewer$(EXEEXT): $(dbus_viewer_OBJECTS) $(dbus_viewer_DEPENDENCIES)
-+ @rm -f dbus-viewer$(EXEEXT)
-+ $(LINK) $(dbus_viewer_LDFLAGS) $(dbus_viewer_OBJECTS) $(dbus_viewer_LDADD) $(LIBS)
-+
-+mostlyclean-compile:
-+ -rm -f *.$(OBJEXT)
-+
-+distclean-compile:
-+ -rm -f *.tab.c
-+
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-cleanup-sockets.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-launch.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-monitor.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-names-model.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-print-message.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-send.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-tree-view.Po at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dbus-viewer.Po at am__quote@
-+
-+.c.o:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-+
-+.c.obj:
-+ at am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-+
-+.c.lo:
-+ at am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-+ at am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-+
-+mostlyclean-libtool:
-+ -rm -f *.lo
-+
-+clean-libtool:
-+ -rm -rf .libs _libs
-+
-+distclean-libtool:
-+ -rm -f libtool
-+uninstall-info-am:
-+install-man1: $(man1_MANS) $(man_MANS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
-+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-+ for i in $$l2; do \
-+ case "$$i" in \
-+ *.1*) list="$$list $$i" ;; \
-+ esac; \
-+ done; \
-+ for i in $$list; do \
-+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-+ else file=$$i; fi; \
-+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-+ case "$$ext" in \
-+ 1*) ;; \
-+ *) ext='1' ;; \
-+ esac; \
-+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
-+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
-+ done
-+uninstall-man1:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-+ for i in $$l2; do \
-+ case "$$i" in \
-+ *.1*) list="$$list $$i" ;; \
-+ esac; \
-+ done; \
-+ for i in $$list; do \
-+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-+ case "$$ext" in \
-+ 1*) ;; \
-+ *) ext='1' ;; \
-+ esac; \
-+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
-+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
-+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
-+ done
-+install-nodist_libdbus_glibHEADERS: $(nodist_libdbus_glib_HEADERS)
-+ @$(NORMAL_INSTALL)
-+ test -z "$(libdbus_glibdir)" || $(mkdir_p) "$(DESTDIR)$(libdbus_glibdir)"
-+ @list='$(nodist_libdbus_glib_HEADERS)'; for p in $$list; do \
-+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-+ f=$(am__strip_dir) \
-+ echo " $(nodist_libdbus_glibHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libdbus_glibdir)/$$f'"; \
-+ $(nodist_libdbus_glibHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libdbus_glibdir)/$$f"; \
-+ done
-+
-+uninstall-nodist_libdbus_glibHEADERS:
-+ @$(NORMAL_UNINSTALL)
-+ @list='$(nodist_libdbus_glib_HEADERS)'; for p in $$list; do \
-+ f=$(am__strip_dir) \
-+ echo " rm -f '$(DESTDIR)$(libdbus_glibdir)/$$f'"; \
-+ rm -f "$(DESTDIR)$(libdbus_glibdir)/$$f"; \
-+ done
-+
-+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ mkid -fID $$unique
-+tags: TAGS
-+
-+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-+ test -n "$$unique" || unique=$$empty_fix; \
-+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-+ $$tags $$unique; \
-+ fi
-+ctags: CTAGS
-+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
-+ $(TAGS_FILES) $(LISP)
-+ tags=; \
-+ here=`pwd`; \
-+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-+ unique=`for i in $$list; do \
-+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-+ done | \
-+ $(AWK) ' { files[$$0] = 1; } \
-+ END { for (i in files) print i; }'`; \
-+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
-+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-+ $$tags $$unique
-+
-+GTAGS:
-+ here=`$(am__cd) $(top_builddir) && pwd` \
-+ && cd $(top_srcdir) \
-+ && gtags -i $(GTAGS_ARGS) $$here
-+
-+distclean-tags:
-+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-+
-+distdir: $(DISTFILES)
-+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-+ list='$(DISTFILES)'; for file in $$list; do \
-+ case $$file in \
-+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-+ esac; \
-+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-+ dir="/$$dir"; \
-+ $(mkdir_p) "$(distdir)$$dir"; \
-+ else \
-+ dir=''; \
-+ fi; \
-+ if test -d $$d/$$file; then \
-+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-+ fi; \
-+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-+ else \
-+ test -f $(distdir)/$$file \
-+ || cp -p $$d/$$file $(distdir)/$$file \
-+ || exit 1; \
-+ fi; \
-+ done
-+check-am: all-am
-+check: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) check-am
-+all-am: Makefile $(PROGRAMS) $(MANS) $(HEADERS)
-+installdirs:
-+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(libdbus_glibdir)"; do \
-+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
-+ done
-+install: $(BUILT_SOURCES)
-+ $(MAKE) $(AM_MAKEFLAGS) install-am
-+install-exec: install-exec-am
-+install-data: install-data-am
-+uninstall: uninstall-am
-+
-+install-am: all-am
-+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-+
-+installcheck: installcheck-am
-+install-strip:
-+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-+ `test -z '$(STRIP)' || \
-+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-+mostlyclean-generic:
-+
-+clean-generic:
-+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-+
-+distclean-generic:
-+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-+
-+maintainer-clean-generic:
-+ @echo "This command is intended for maintainers to use"
-+ @echo "it deletes files that may require special tools to rebuild."
-+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-+clean: clean-am
-+
-+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
-+
-+distclean: distclean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+distclean-am: clean-am distclean-compile distclean-generic \
-+ distclean-libtool distclean-tags
-+
-+dvi: dvi-am
-+
-+dvi-am:
-+
-+html: html-am
-+
-+info: info-am
-+
-+info-am:
-+
-+install-data-am: install-man install-nodist_libdbus_glibHEADERS
-+
-+install-exec-am: install-binPROGRAMS
-+
-+install-info: install-info-am
-+
-+install-man: install-man1
-+
-+installcheck-am:
-+
-+maintainer-clean: maintainer-clean-am
-+ -rm -rf ./$(DEPDIR)
-+ -rm -f Makefile
-+maintainer-clean-am: distclean-am maintainer-clean-generic
-+
-+mostlyclean: mostlyclean-am
-+
-+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-+ mostlyclean-libtool
-+
-+pdf: pdf-am
-+
-+pdf-am:
-+
-+ps: ps-am
-+
-+ps-am:
-+
-+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man \
-+ uninstall-nodist_libdbus_glibHEADERS
-+
-+uninstall-man: uninstall-man1
-+
-+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
-+ clean-generic clean-libtool ctags distclean distclean-compile \
-+ distclean-generic distclean-libtool distclean-tags distdir dvi \
-+ dvi-am html html-am info info-am install install-am \
-+ install-binPROGRAMS install-data install-data-am install-exec \
-+ install-exec-am install-info install-info-am install-man \
-+ install-man1 install-nodist_libdbus_glibHEADERS install-strip \
-+ installcheck installcheck-am installdirs maintainer-clean \
-+ maintainer-clean-generic mostlyclean mostlyclean-compile \
-+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-+ tags uninstall uninstall-am uninstall-binPROGRAMS \
-+ uninstall-info-am uninstall-man uninstall-man1 \
-+ uninstall-nodist_libdbus_glibHEADERS
-+
-+
-+ at HAVE_GLIB_TRUE@dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/glib/dbus-binding-tool$(EXEEXT)
-+ at HAVE_GLIB_TRUE@ $(top_builddir)/glib/dbus-binding-tool --mode=glib-client --output=dbus-glib-bindings.h dbus-bus-introspect.xml
-+
-+ at HAVE_GLIB_TRUE@dbus-bus-introspect.xml: $(top_builddir)/bus/dbus-daemon$(EXEEXT) dbus-launch$(EXEEXT) dbus-send$(EXEEXT) $(top_builddir)/bus/dbus-daemon$(EXEEXT) Makefile
-+ at HAVE_GLIB_TRUE@ DBUS_TOP_BUILDDIR=$(top_builddir) $(srcdir)/run-with-tmp-session-bus.sh ./dbus-send --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
-+# Tell versions [3.59,3.63) of GNU make to not export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff -Naur dbus-0.61.orig/tools/dbus-cleanup-sockets.1 dbus-0.61/tools/dbus-cleanup-sockets.1
---- dbus-0.61.orig/tools/dbus-cleanup-sockets.1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-cleanup-sockets.1 2003-06-01 09:33:59.000000000 +0200
-@@ -0,0 +1,30 @@
-+.\"
-+.\" dbus-cleanup-sockets manual page.
-+.\" Copyright (C) 2003 Red Hat, Inc.
-+.\"
-+.TH dbus-cleanup-sockets 1
-+.SH NAME
-+dbus-cleanup-sockets \- clean up leftover sockets in a directory
-+.SH SYNOPSIS
-+.PP
-+.B dbus-cleanup-sockets [DIRECTORY]
-+
-+.SH DESCRIPTION
-+
-+The \fIdbus-cleanup-sockets\fP command cleans up sockets used for
-+D-BUS connections. See http://www.freedesktop.org/software/dbus/ for
-+more information about the big picture.
-+
-+.PP
-+If given no arguments, \fIdbus-cleanup-sockets\fP cleans up sockets
-+in the standard default socket directory for the
-+per-user-login-session message bus; this is usually /tmp.
-+Optionally, you can pass a different directory on the command line.
-+
-+.SH AUTHOR
-+dbus-cleanup-sockets was adapted by Havoc Pennington from
-+linc-cleanup-sockets written by Michael Meeks.
-+
-+.SH BUGS
-+Please send bug reports to the D-BUS mailing list or bug tracker,
-+see http://www.freedesktop.org/software/dbus/
-diff -Naur dbus-0.61.orig/tools/dbus-cleanup-sockets.c dbus-0.61/tools/dbus-cleanup-sockets.c
---- dbus-0.61.orig/tools/dbus-cleanup-sockets.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-cleanup-sockets.c 2005-11-30 20:32:27.000000000 +0100
-@@ -0,0 +1,431 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-cleanup-sockets.c dbus-cleanup-sockets utility
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ * Copyright (C) 2002 Michael Meeks
-+ *
-+ * Note that this file is NOT licensed under the Academic Free License,
-+ * as it is based on linc-cleanup-sockets which is LGPL.
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <config.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <stdio.h>
-+#include <fcntl.h>
-+#include <unistd.h>
-+#include <dirent.h>
-+#include <sys/socket.h>
-+#include <sys/un.h>
-+#include <errno.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#ifndef TRUE
-+#define TRUE (1)
-+#endif
-+
-+#ifndef FALSE
-+#define FALSE (0)
-+#endif
-+
-+#ifndef NULL
-+#define NULL ((void*) 0)
-+#endif
-+
-+static void*
-+xmalloc (size_t bytes)
-+{
-+ void *mem;
-+
-+ if (bytes == 0)
-+ return NULL;
-+
-+ mem = malloc (bytes);
-+
-+ if (mem == NULL)
-+ {
-+ fprintf (stderr, "Allocation of %d bytes failed\n",
-+ (int) bytes);
-+ exit (1);
-+ }
-+
-+ return mem;
-+}
-+
-+static void*
-+xrealloc (void *old, size_t bytes)
-+{
-+ void *mem;
-+
-+ if (bytes == 0)
-+ {
-+ free (old);
-+ return NULL;
-+ }
-+
-+ mem = realloc (old, bytes);
-+
-+ if (mem == NULL)
-+ {
-+ fprintf (stderr, "Reallocation of %d bytes failed\n",
-+ (int) bytes);
-+ exit (1);
-+ }
-+
-+ return mem;
-+}
-+
-+#ifdef AF_UNIX
-+
-+typedef enum
-+ {
-+ SOCKET_UNKNOWN,
-+ SOCKET_FAILED_TO_HANDLE,
-+ SOCKET_DEAD,
-+ SOCKET_ALIVE,
-+ SOCKET_UNLINKED
-+ } SocketStatus;
-+
-+static int alive_count = 0;
-+static int cleaned_count = 0;
-+static int unhandled_count = 0;
-+
-+typedef struct
-+{
-+ char *name;
-+ int fd;
-+ SocketStatus status;
-+ int n_retries;
-+} SocketEntry;
-+
-+static SocketEntry*
-+socket_entry_new (const char *dir,
-+ const char *fname)
-+{
-+ SocketEntry *se;
-+ int len;
-+
-+ se = xmalloc (sizeof (SocketEntry));
-+
-+ len = strlen (dir) + strlen (fname) + 2; /* 2 = nul and '/' */
-+ se->name = xmalloc (len);
-+
-+ strcpy (se->name, dir);
-+ strcat (se->name, "/");
-+ strcat (se->name, fname);
-+
-+ se->fd = -1;
-+
-+ se->status = SOCKET_UNKNOWN;
-+
-+ se->n_retries = 0;
-+
-+ return se;
-+}
-+
-+#if 0
-+static void
-+free_socket_entry (SocketEntry *se)
-+{
-+ free (se->name);
-+ if (se->fd >= 0)
-+ close (se->fd);
-+ free (se);
-+}
-+#endif
-+
-+static void
-+read_sockets (const char *dir,
-+ SocketEntry ***entries_p,
-+ int *n_entries_p)
-+{
-+ DIR *dirh;
-+ struct dirent *dent;
-+ SocketEntry **entries;
-+ int n_entries;
-+ int allocated;
-+
-+ n_entries = 0;
-+ allocated = 2;
-+ entries = xmalloc (sizeof (SocketEntry*) * allocated);
-+
-+ dirh = opendir (dir);
-+ if (dirh == NULL)
-+ {
-+ fprintf (stderr, "Failed to open directory %s: %s\n",
-+ dir, strerror (errno));
-+ exit (1);
-+ }
-+
-+ while ((dent = readdir (dirh)))
-+ {
-+ SocketEntry *se;
-+
-+ if (strncmp (dent->d_name, "dbus-", 5) != 0)
-+ continue;
-+
-+ se = socket_entry_new (dir, dent->d_name);
-+
-+ if (n_entries == allocated)
-+ {
-+ allocated *= 2;
-+ entries = xrealloc (entries, sizeof (SocketEntry*) * allocated);
-+ }
-+
-+ entries[n_entries] = se;
-+ n_entries += 1;
-+ }
-+
-+ closedir (dirh);
-+
-+ *entries_p = entries;
-+ *n_entries_p = n_entries;
-+}
-+
-+static SocketStatus
-+open_socket (SocketEntry *se)
-+{
-+ int ret;
-+ struct sockaddr_un saddr;
-+
-+ if (se->n_retries > 5)
-+ {
-+ fprintf (stderr, "Warning: giving up on socket %s after several retries; unable to determine socket's status\n",
-+ se->name);
-+ return SOCKET_FAILED_TO_HANDLE;
-+ }
-+
-+ se->n_retries += 1;
-+
-+ se->fd = socket (AF_UNIX, SOCK_STREAM, 0);
-+ if (se->fd < 0)
-+ {
-+ fprintf (stderr, "Warning: failed to open a socket to use for connecting: %s\n",
-+ strerror (errno));
-+ return SOCKET_UNKNOWN;
-+ }
-+
-+ if (fcntl (se->fd, F_SETFL, O_NONBLOCK) < 0)
-+ {
-+ fprintf (stderr, "Warning: failed set socket %s nonblocking: %s\n",
-+ se->name, strerror (errno));
-+ return SOCKET_UNKNOWN;
-+ }
-+
-+
-+ memset (&saddr, '\0', sizeof (saddr)); /* nul-terminates the sun_path */
-+
-+ saddr.sun_family = AF_UNIX;
-+ strncpy (saddr.sun_path, se->name, sizeof (saddr.sun_path) - 1);
-+
-+ do
-+ {
-+ ret = connect (se->fd, (struct sockaddr*) &saddr, sizeof (saddr));
-+ }
-+ while (ret < 0 && errno == EINTR);
-+
-+ if (ret >= 0)
-+ return SOCKET_ALIVE;
-+ else
-+ {
-+ switch (errno)
-+ {
-+ case EINPROGRESS:
-+ case EAGAIN:
-+ return SOCKET_UNKNOWN;
-+ case ECONNREFUSED:
-+ return SOCKET_DEAD;
-+ default:
-+ fprintf (stderr, "Warning: unexpected error connecting to socket %s: %s\n",
-+ se->name, strerror (errno));
-+ return SOCKET_FAILED_TO_HANDLE;
-+ }
-+ }
-+}
-+
-+static int
-+handle_sockets (SocketEntry **entries,
-+ int n_entries)
-+{
-+ int i;
-+ int n_unknown;
-+
-+ n_unknown = 0;
-+
-+ i = 0;
-+ while (i < n_entries)
-+ {
-+ SocketEntry *se;
-+ SocketStatus status;
-+
-+ se = entries[i];
-+ ++i;
-+
-+ if (se->fd >= 0)
-+ {
-+ fprintf (stderr, "Internal error, socket has fd kept open while status = %d\n",
-+ se->status);
-+ exit (1);
-+ }
-+
-+ if (se->status != SOCKET_UNKNOWN)
-+ continue;
-+
-+ status = open_socket (se);
-+
-+ switch (status)
-+ {
-+ case SOCKET_DEAD:
-+ cleaned_count += 1;
-+ if (unlink (se->name) < 0)
-+ {
-+ fprintf (stderr, "Warning: Failed to delete %s: %s\n",
-+ se->name, strerror (errno));
-+
-+ se->status = SOCKET_FAILED_TO_HANDLE;
-+ }
-+ else
-+ se->status = SOCKET_UNLINKED;
-+ break;
-+
-+ case SOCKET_ALIVE:
-+ alive_count += 1;
-+ /* FALL THRU */
-+
-+ case SOCKET_FAILED_TO_HANDLE:
-+ case SOCKET_UNKNOWN:
-+ se->status = status;
-+ break;
-+
-+ case SOCKET_UNLINKED:
-+ fprintf (stderr, "Bad status from open_socket(), should not happen\n");
-+ exit (1);
-+ break;
-+ }
-+
-+ if (se->fd >= 0)
-+ {
-+ close (se->fd);
-+ se->fd = -1;
-+ }
-+
-+ if (se->status == SOCKET_UNKNOWN)
-+ n_unknown += 1;
-+ }
-+
-+ return n_unknown == 0;
-+}
-+
-+static void
-+clean_dir (const char *dir)
-+{
-+ SocketEntry **entries;
-+ int n_entries;
-+
-+ read_sockets (dir, &entries, &n_entries);
-+
-+ /* open_socket() will fail conclusively after
-+ * several retries, so this loop is guaranteed
-+ * to terminate eventually
-+ */
-+ while (!handle_sockets (entries, n_entries))
-+ {
-+ fprintf (stderr, "Unable to determine state of some sockets, retrying in 2 seconds\n");
-+ sleep (2);
-+ }
-+
-+ unhandled_count += (n_entries - alive_count - cleaned_count);
-+}
-+
-+#endif /* AF_UNIX */
-+
-+static void
-+usage (int ecode)
-+{
-+ fprintf (stderr, "dbus-cleanup-sockets [--version] [--help] <socketdir>\n");
-+ exit (ecode);
-+}
-+
-+static void
-+version (void)
-+{
-+ printf ("D-BUS Socket Cleanup Utility %s\n"
-+ "Copyright (C) 2003 Red Hat, Inc.\n"
-+ "Copyright (C) 2002 Michael Meeks\n"
-+ "This is free software; see the source for copying conditions.\n"
-+ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
-+ VERSION);
-+ exit (0);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ int i;
-+ int saw_doubledash;
-+ const char *dirname;
-+
-+ saw_doubledash = FALSE;
-+ dirname = NULL;
-+ i = 1;
-+ while (i < argc)
-+ {
-+ const char *arg = argv[i];
-+
-+ if (strcmp (arg, "--help") == 0 ||
-+ strcmp (arg, "-h") == 0 ||
-+ strcmp (arg, "-?") == 0)
-+ usage (0);
-+ else if (strcmp (arg, "--version") == 0)
-+ version ();
-+ else if (!saw_doubledash)
-+ {
-+ if (strcmp (arg, "--") == 0)
-+ saw_doubledash = TRUE;
-+ else if (*arg == '-')
-+ usage (1);
-+ }
-+ else
-+ {
-+ if (dirname != NULL)
-+ {
-+ fprintf (stderr, "dbus-cleanup-sockets only supports a single directory name\n");
-+ exit (1);
-+ }
-+
-+ dirname = arg;
-+ }
-+
-+ ++i;
-+ }
-+
-+ /* Default to session socket dir, usually /tmp */
-+ if (dirname == NULL)
-+ dirname = DBUS_SESSION_SOCKET_DIR;
-+
-+#ifdef AF_UNIX
-+ clean_dir (dirname);
-+
-+ printf ("Cleaned up %d sockets in %s; %d sockets are still in use; %d in unknown state\n",
-+ cleaned_count, dirname, alive_count, unhandled_count);
-+#else
-+ printf ("This system does not support UNIX domain sockets, so dbus-cleanup-sockets does nothing\n");
-+#endif
-+
-+ return 0;
-+}
-diff -Naur dbus-0.61.orig/tools/dbus-launch.1 dbus-0.61/tools/dbus-launch.1
---- dbus-0.61.orig/tools/dbus-launch.1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-launch.1 2005-01-18 23:20:38.000000000 +0100
-@@ -0,0 +1,105 @@
-+.\"
-+.\" dbus-launch manual page.
-+.\" Copyright (C) 2003 Red Hat, Inc.
-+.\"
-+.TH dbus-launch 1
-+.SH NAME
-+dbus-launch \- Utility to start a message bus from a shell script
-+.SH SYNOPSIS
-+.PP
-+.B dbus-launch [\-\-version] [\-\-sh-syntax] [\-\-csh-syntax] [\-\-auto-syntax] [\-\-exit-with-session] [\-\-config-file=FILENAME] [PROGRAM] [ARGS...]
-+
-+.SH DESCRIPTION
-+
-+The \fIdbus-launch\fP command is used to start \fIdbus-daemon\fP
-+from a shell script. It would normally be called from a user's login
-+scripts. Unlike the daemon itself, \fIdbus-launch\fP exits, so
-+backticks or the $() construct can be used to read information from
-+\fIdbus-launch\fP.
-+
-+With no arguments, \fIdbus-launch\fP will simply print the values of
-+DBUS_SESSION_BUS_ADDRESS and DBUS_SESSION_BUS_PID.
-+
-+You may specify a program to be run; in this case, \fIdbus-launch\fP
-+will then set the appropriate environment variables and execute the
-+specified program, with the specified arguments. See below for
-+examples.
-+
-+Finally, you may use the \-\-sh-syntax, \-\-csh-syntax, or
-+\-\-auto-syntax commands to cause \fIdbus-launch\fP to emit shell code
-+to set up the environment. This is useful in shell scripts.
-+
-+With the \-\-auto-syntax option, \fIdbus-launch\fP looks at the value
-+of the SHELL environment variable to determine which shell syntax
-+should be used. If SHELL ends in "csh", then csh-compatible code is
-+emitted; otherwise Bourne shell code is emitted. Instead of passing
-+\-\-auto-syntax, you may explicity specify a particular one by using
-+\-\-sh-syntax for Bourne syntax, or \-\-csh-syntax for csh syntax.
-+In scripts, it's more robust to avoid \-\-auto-syntax and you hopefully
-+know which shell your script is written in.
-+
-+.PP
-+See http://www.freedesktop.org/software/dbus/ for more information
-+about D-BUS. See also the man page for \fIdbus-daemon\fP.
-+
-+.PP
-+Here is an example of how to use \fIdbus-launch\fP with an
-+sh-compatible shell to start the per-session bus daemon:
-+.nf
-+
-+ ## test for an existing bus daemon, just to be safe
-+ if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
-+ ## if not found, launch a new one
-+ eval `dbus-launch --sh-syntax --exit-with-session`
-+ echo "D-BUS per-session daemon address is: $DBUS_SESSION_BUS_ADDRESS"
-+ fi
-+
-+.fi
-+You might run something like that in your login scripts.
-+
-+.PP
-+Another way to use \fIdbus-launch\fP is to run your main session
-+program, like so:
-+.nf
-+
-+dbus-launch gnome-session
-+
-+.fi
-+The above would likely be appropriate for ~/.xsession or ~/.Xclients.
-+
-+.SH OPTIONS
-+The following options are supported:
-+.TP
-+.I "--auto-syntax"
-+Choose \-\-csh-syntax or \-\-sh-syntax based on the SHELL environment variable.
-+
-+.TP
-+.I "--config-file=FILENAME"
-+Pass \-\-config-file=FILENAME to the bus daemon, instead of passing it
-+the \-\-session argument. See the man page for dbus-daemon
-+
-+.TP
-+.I "--csh-syntax"
-+Emit csh compatible code to set up environment variables.
-+
-+.TP
-+.I "--exit-with-session"
-+If this option is provided, a persistent "babysitter" process will be
-+created that watches stdin for HUP and tries to connect to the X
-+server. If this process gets a HUP on stdin or loses its X connection,
-+it kills the message bus daemon.
-+
-+.TP
-+.I "--sh-syntax"
-+Emit Bourne-shell compatible code to set up environment variables.
-+
-+.TP
-+.I "--version"
-+Print the version of dbus-launch
-+
-+.SH AUTHOR
-+See http://www.freedesktop.org/software/dbus/doc/AUTHORS
-+
-+.SH BUGS
-+Please send bug reports to the D-BUS mailing list or bug tracker,
-+see http://www.freedesktop.org/software/dbus/
-diff -Naur dbus-0.61.orig/tools/dbus-launch.c dbus-0.61/tools/dbus-launch.c
---- dbus-0.61.orig/tools/dbus-launch.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-launch.c 2006-02-13 22:01:32.000000000 +0100
-@@ -0,0 +1,914 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-launch.c dbus-launch utility
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <config.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <fcntl.h>
-+#include <signal.h>
-+#include <sys/wait.h>
-+#include <errno.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <signal.h>
-+#include <stdarg.h>
-+#include <sys/select.h>
-+#ifdef DBUS_BUILD_X11
-+#include <X11/Xlib.h>
-+#endif
-+
-+#ifndef TRUE
-+#define TRUE (1)
-+#endif
-+
-+#ifndef FALSE
-+#define FALSE (0)
-+#endif
-+
-+#undef MAX
-+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-+
-+static void
-+verbose (const char *format,
-+ ...)
-+{
-+ va_list args;
-+ static int verbose = TRUE;
-+ static int verbose_initted = FALSE;
-+
-+ /* things are written a bit oddly here so that
-+ * in the non-verbose case we just have the one
-+ * conditional and return immediately.
-+ */
-+ if (!verbose)
-+ return;
-+
-+ if (!verbose_initted)
-+ {
-+ verbose = getenv ("DBUS_VERBOSE") != NULL;
-+ verbose_initted = TRUE;
-+ if (!verbose)
-+ return;
-+ }
-+
-+ fprintf (stderr, "%lu: ", (unsigned long) getpid ());
-+
-+ va_start (args, format);
-+ vfprintf (stderr, format, args);
-+ va_end (args);
-+}
-+
-+static void
-+usage (int ecode)
-+{
-+ fprintf (stderr, "dbus-launch [--version] [--help] [--sh-syntax] [--csh-syntax] [--auto-syntax] [--exit-with-session]\n");
-+ exit (ecode);
-+}
-+
-+static void
-+version (void)
-+{
-+ printf ("D-BUS Message Bus Launcher %s\n"
-+ "Copyright (C) 2003 Red Hat, Inc.\n"
-+ "This is free software; see the source for copying conditions.\n"
-+ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
-+ VERSION);
-+ exit (0);
-+}
-+
-+static char *
-+xstrdup (const char *str)
-+{
-+ int len;
-+ char *copy;
-+
-+ if (str == NULL)
-+ return NULL;
-+
-+ len = strlen (str);
-+
-+ copy = malloc (len + 1);
-+ if (copy == NULL)
-+ return NULL;
-+
-+ memcpy (copy, str, len + 1);
-+
-+ return copy;
-+}
-+
-+typedef enum
-+{
-+ READ_STATUS_OK, /**< Read succeeded */
-+ READ_STATUS_ERROR, /**< Some kind of error */
-+ READ_STATUS_EOF /**< EOF returned */
-+} ReadStatus;
-+
-+static ReadStatus
-+read_line (int fd,
-+ char *buf,
-+ size_t maxlen)
-+{
-+ size_t bytes = 0;
-+ ReadStatus retval;
-+
-+ memset (buf, '\0', maxlen);
-+ maxlen -= 1; /* ensure nul term */
-+
-+ retval = READ_STATUS_OK;
-+
-+ while (TRUE)
-+ {
-+ ssize_t chunk;
-+ size_t to_read;
-+
-+ again:
-+ to_read = maxlen - bytes;
-+
-+ if (to_read == 0)
-+ break;
-+
-+ chunk = read (fd,
-+ buf + bytes,
-+ to_read);
-+ if (chunk < 0 && errno == EINTR)
-+ goto again;
-+
-+ if (chunk < 0)
-+ {
-+ retval = READ_STATUS_ERROR;
-+ break;
-+ }
-+ else if (chunk == 0)
-+ {
-+ retval = READ_STATUS_EOF;
-+ break; /* EOF */
-+ }
-+ else /* chunk > 0 */
-+ bytes += chunk;
-+ }
-+
-+ if (retval == READ_STATUS_EOF &&
-+ bytes > 0)
-+ retval = READ_STATUS_OK;
-+
-+ /* whack newline */
-+ if (retval != READ_STATUS_ERROR &&
-+ bytes > 0 &&
-+ buf[bytes-1] == '\n')
-+ buf[bytes-1] = '\0';
-+
-+ return retval;
-+}
-+
-+static ReadStatus
-+read_pid (int fd,
-+ pid_t *buf)
-+{
-+ size_t bytes = 0;
-+ ReadStatus retval;
-+
-+ retval = READ_STATUS_OK;
-+
-+ while (TRUE)
-+ {
-+ ssize_t chunk;
-+ size_t to_read;
-+
-+ again:
-+ to_read = sizeof (pid_t) - bytes;
-+
-+ if (to_read == 0)
-+ break;
-+
-+ chunk = read (fd,
-+ ((char*)buf) + bytes,
-+ to_read);
-+ if (chunk < 0 && errno == EINTR)
-+ goto again;
-+
-+ if (chunk < 0)
-+ {
-+ retval = READ_STATUS_ERROR;
-+ break;
-+ }
-+ else if (chunk == 0)
-+ {
-+ retval = READ_STATUS_EOF;
-+ break; /* EOF */
-+ }
-+ else /* chunk > 0 */
-+ bytes += chunk;
-+ }
-+
-+ return retval;
-+}
-+
-+static void
-+do_write (int fd, const void *buf, size_t count)
-+{
-+ size_t bytes_written;
-+ int ret;
-+
-+ bytes_written = 0;
-+
-+ again:
-+
-+ ret = write (fd, ((const char*)buf) + bytes_written, count - bytes_written);
-+
-+ if (ret < 0)
-+ {
-+ if (errno == EINTR)
-+ goto again;
-+ else
-+ {
-+ fprintf (stderr, "Failed to write data to pipe! %s\n",
-+ strerror (errno));
-+ exit (1); /* give up, we suck */
-+ }
-+ }
-+ else
-+ bytes_written += ret;
-+
-+ if (bytes_written < count)
-+ goto again;
-+}
-+
-+static void
-+write_pid (int fd,
-+ pid_t pid)
-+{
-+ do_write (fd, &pid, sizeof (pid));
-+}
-+
-+static int
-+do_waitpid (pid_t pid)
-+{
-+ int ret;
-+
-+ again:
-+ ret = waitpid (pid, NULL, 0);
-+
-+ if (ret < 0 &&
-+ errno == EINTR)
-+ goto again;
-+
-+ return ret;
-+}
-+
-+static pid_t bus_pid_to_kill = -1;
-+
-+static void
-+kill_bus_and_exit (void)
-+{
-+ verbose ("Killing message bus and exiting babysitter\n");
-+
-+ /* in case these point to any NFS mounts, get rid of them immediately */
-+ close (0);
-+ close (1);
-+ close (2);
-+
-+ kill (bus_pid_to_kill, SIGTERM);
-+ sleep (3);
-+ kill (bus_pid_to_kill, SIGKILL);
-+
-+ exit (0);
-+}
-+
-+#ifdef DBUS_BUILD_X11
-+static int
-+x_io_error_handler (Display *xdisplay)
-+{
-+ verbose ("X IO error\n");
-+ kill_bus_and_exit ();
-+ return 0;
-+}
-+#endif
-+
-+static int got_sighup = FALSE;
-+
-+static void
-+signal_handler (int sig)
-+{
-+ switch (sig)
-+ {
-+ case SIGHUP:
-+ got_sighup = TRUE;
-+ break;
-+ }
-+}
-+
-+static void
-+kill_bus_when_session_ends (void)
-+{
-+ int tty_fd;
-+ int x_fd;
-+ fd_set read_set;
-+ fd_set err_set;
-+ struct sigaction act;
-+ sigset_t empty_mask;
-+#ifdef DBUS_BUILD_X11
-+ Display *xdisplay;
-+#endif
-+
-+ /* install SIGHUP handler */
-+ got_sighup = FALSE;
-+ sigemptyset (&empty_mask);
-+ act.sa_handler = signal_handler;
-+ act.sa_mask = empty_mask;
-+ act.sa_flags = 0;
-+ sigaction (SIGHUP, &act, NULL);
-+
-+#ifdef DBUS_BUILD_X11
-+ xdisplay = XOpenDisplay (NULL);
-+ if (xdisplay != NULL)
-+ {
-+ verbose ("Successfully opened X display\n");
-+ x_fd = ConnectionNumber (xdisplay);
-+ XSetIOErrorHandler (x_io_error_handler);
-+ }
-+ else
-+ x_fd = -1;
-+#else
-+ verbose ("Compiled without X11 support\n");
-+ x_fd = -1;
-+#endif
-+
-+ if (isatty (0))
-+ tty_fd = 0;
-+ else
-+ tty_fd = -1;
-+
-+ if (tty_fd >= 0)
-+ verbose ("stdin isatty(), monitoring it\n");
-+ else
-+ verbose ("stdin was not a TTY, not monitoring it\n");
-+
-+ if (tty_fd < 0 && x_fd < 0)
-+ {
-+ fprintf (stderr, "No terminal on standard input and no X display; cannot attach message bus to session lifetime\n");
-+ exit (1);
-+ }
-+
-+ while (TRUE)
-+ {
-+ FD_ZERO (&read_set);
-+ FD_ZERO (&err_set);
-+
-+ if (tty_fd >= 0)
-+ {
-+ FD_SET (tty_fd, &read_set);
-+ FD_SET (tty_fd, &err_set);
-+ }
-+
-+ if (x_fd >= 0)
-+ {
-+ FD_SET (x_fd, &read_set);
-+ FD_SET (x_fd, &err_set);
-+ }
-+
-+ select (MAX (tty_fd, x_fd) + 1,
-+ &read_set, NULL, &err_set, NULL);
-+
-+ if (got_sighup)
-+ {
-+ verbose ("Got SIGHUP, exiting\n");
-+ kill_bus_and_exit ();
-+ }
-+
-+#ifdef DBUS_BUILD_X11
-+ /* Dump events on the floor, and let
-+ * IO error handler run if we lose
-+ * the X connection
-+ */
-+ if (x_fd >= 0)
-+ verbose ("X fd condition reading = %d error = %d\n",
-+ FD_ISSET (x_fd, &read_set),
-+ FD_ISSET (x_fd, &err_set));
-+
-+ if (xdisplay != NULL)
-+ {
-+ while (XPending (xdisplay))
-+ {
-+ XEvent ignored;
-+ XNextEvent (xdisplay, &ignored);
-+ }
-+ }
-+#endif
-+
-+ if (tty_fd >= 0)
-+ {
-+ if (FD_ISSET (tty_fd, &read_set))
-+ {
-+ int bytes_read;
-+ char discard[512];
-+
-+ verbose ("TTY ready for reading\n");
-+
-+ bytes_read = read (tty_fd, discard, sizeof (discard));
-+
-+ verbose ("Read %d bytes from TTY errno = %d\n",
-+ bytes_read, errno);
-+
-+ if (bytes_read == 0)
-+ kill_bus_and_exit (); /* EOF */
-+ else if (bytes_read < 0 && errno != EINTR)
-+ {
-+ /* This shouldn't happen I don't think; to avoid
-+ * spinning on the fd forever we exit.
-+ */
-+ fprintf (stderr, "dbus-launch: error reading from stdin: %s\n",
-+ strerror (errno));
-+ kill_bus_and_exit ();
-+ }
-+ }
-+ else if (FD_ISSET (tty_fd, &err_set))
-+ {
-+ verbose ("TTY has error condition\n");
-+
-+ kill_bus_and_exit ();
-+ }
-+ }
-+ }
-+}
-+
-+static void
-+babysit (int exit_with_session,
-+ pid_t child_pid,
-+ int read_bus_pid_fd, /* read pid from here */
-+ int write_bus_pid_fd) /* forward pid to here */
-+{
-+ int ret;
-+#define MAX_PID_LEN 64
-+ char buf[MAX_PID_LEN];
-+ long val;
-+ char *end;
-+ int dev_null_fd;
-+ const char *s;
-+
-+ verbose ("babysitting, exit_with_session = %d, child_pid = %ld, read_bus_pid_fd = %d, write_bus_pid_fd = %d\n",
-+ exit_with_session, (long) child_pid, read_bus_pid_fd, write_bus_pid_fd);
-+
-+ /* We chdir ("/") since we are persistent and daemon-like, and fork
-+ * again so dbus-launch can reap the parent. However, we don't
-+ * setsid() or close fd 0 because the idea is to remain attached
-+ * to the tty and the X server in order to kill the message bus
-+ * when the session ends.
-+ */
-+
-+ if (chdir ("/") < 0)
-+ {
-+ fprintf (stderr, "Could not change to root directory: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ /* Close stdout/stderr so we don't block an "eval" or otherwise
-+ * lock up. stdout is still chaining through to dbus-launch
-+ * and in turn to the parent shell.
-+ */
-+ dev_null_fd = open ("/dev/null", O_RDWR);
-+ if (dev_null_fd >= 0)
-+ {
-+ if (!exit_with_session)
-+ dup2 (dev_null_fd, 0);
-+ dup2 (dev_null_fd, 1);
-+ s = getenv ("DBUS_DEBUG_OUTPUT");
-+ if (s == NULL || *s == '\0')
-+ dup2 (dev_null_fd, 2);
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Failed to open /dev/null: %s\n",
-+ strerror (errno));
-+ /* continue, why not */
-+ }
-+
-+ ret = fork ();
-+
-+ if (ret < 0)
-+ {
-+ fprintf (stderr, "fork() failed in babysitter: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ if (ret > 0)
-+ {
-+ /* Parent reaps pre-fork part of bus daemon, then exits and is
-+ * reaped so the babysitter isn't a zombie
-+ */
-+
-+ verbose ("=== Babysitter's intermediate parent continues again\n");
-+
-+ if (do_waitpid (child_pid) < 0)
-+ {
-+ /* shouldn't happen */
-+ fprintf (stderr, "Failed waitpid() waiting for bus daemon's parent\n");
-+ exit (1);
-+ }
-+
-+ verbose ("Babysitter's intermediate parent exiting\n");
-+
-+ exit (0);
-+ }
-+
-+ /* Child continues */
-+ verbose ("=== Babysitter process created\n");
-+
-+ verbose ("Reading PID from daemon\n");
-+ /* Now read data */
-+ switch (read_line (read_bus_pid_fd, buf, MAX_PID_LEN))
-+ {
-+ case READ_STATUS_OK:
-+ break;
-+ case READ_STATUS_EOF:
-+ fprintf (stderr, "EOF reading PID from bus daemon\n");
-+ exit (1);
-+ break;
-+ case READ_STATUS_ERROR:
-+ fprintf (stderr, "Error reading PID from bus daemon: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ break;
-+ }
-+
-+ end = NULL;
-+ val = strtol (buf, &end, 0);
-+ if (buf == end || end == NULL)
-+ {
-+ fprintf (stderr, "Failed to parse bus PID \"%s\": %s\n",
-+ buf, strerror (errno));
-+ exit (1);
-+ }
-+
-+ bus_pid_to_kill = val;
-+
-+ verbose ("Got PID %ld from daemon\n",
-+ (long) bus_pid_to_kill);
-+
-+ /* Write data to launcher */
-+ write_pid (write_bus_pid_fd, bus_pid_to_kill);
-+ close (write_bus_pid_fd);
-+
-+ if (exit_with_session)
-+ {
-+ /* Bus is now started and launcher has needed info;
-+ * we connect to X display and tty and wait to
-+ * kill bus if requested.
-+ */
-+
-+ kill_bus_when_session_ends ();
-+ }
-+
-+ verbose ("Babysitter exiting\n");
-+
-+ exit (0);
-+}
-+
-+#define READ_END 0
-+#define WRITE_END 1
-+
-+int
-+main (int argc, char **argv)
-+{
-+ const char *prev_arg;
-+ const char *shname;
-+ const char *runprog = NULL;
-+ int remaining_args = 0;
-+ int exit_with_session;
-+ int c_shell_syntax = FALSE;
-+ int bourne_shell_syntax = FALSE;
-+ int auto_shell_syntax = FALSE;
-+ int i;
-+ int ret;
-+ int bus_pid_to_launcher_pipe[2];
-+ int bus_pid_to_babysitter_pipe[2];
-+ int bus_address_to_launcher_pipe[2];
-+ char *config_file;
-+
-+ exit_with_session = FALSE;
-+ config_file = NULL;
-+
-+ prev_arg = NULL;
-+ i = 1;
-+ while (i < argc)
-+ {
-+ const char *arg = argv[i];
-+
-+ if (strcmp (arg, "--help") == 0 ||
-+ strcmp (arg, "-h") == 0 ||
-+ strcmp (arg, "-?") == 0)
-+ usage (0);
-+ else if (strcmp (arg, "--auto-syntax") == 0)
-+ auto_shell_syntax = TRUE;
-+ else if (strcmp (arg, "-c") == 0 ||
-+ strcmp (arg, "--csh-syntax") == 0)
-+ c_shell_syntax = TRUE;
-+ else if (strcmp (arg, "-s") == 0 ||
-+ strcmp (arg, "--sh-syntax") == 0)
-+ bourne_shell_syntax = TRUE;
-+ else if (strcmp (arg, "--version") == 0)
-+ version ();
-+ else if (strcmp (arg, "--exit-with-session") == 0)
-+ exit_with_session = TRUE;
-+ else if (strstr (arg, "--config-file=") == arg)
-+ {
-+ const char *file;
-+
-+ if (config_file != NULL)
-+ {
-+ fprintf (stderr, "--config-file given twice\n");
-+ exit (1);
-+ }
-+
-+ file = strchr (arg, '=');
-+ ++file;
-+
-+ config_file = xstrdup (file);
-+ }
-+ else if (prev_arg &&
-+ strcmp (prev_arg, "--config-file") == 0)
-+ {
-+ if (config_file != NULL)
-+ {
-+ fprintf (stderr, "--config-file given twice\n");
-+ exit (1);
-+ }
-+
-+ config_file = xstrdup (arg);
-+ }
-+ else if (strcmp (arg, "--config-file") == 0)
-+ ; /* wait for next arg */
-+ else
-+ {
-+ runprog = arg;
-+ remaining_args = i+1;
-+ break;
-+ }
-+
-+ prev_arg = arg;
-+
-+ ++i;
-+ }
-+
-+ if (exit_with_session)
-+ verbose ("--exit-with-session enabled\n");
-+
-+ if (auto_shell_syntax)
-+ {
-+ if ((shname = getenv ("SHELL")) != NULL)
-+ {
-+ if (!strncmp (shname + strlen (shname) - 3, "csh", 3))
-+ c_shell_syntax = TRUE;
-+ else
-+ bourne_shell_syntax = TRUE;
-+ }
-+ else
-+ bourne_shell_syntax = TRUE;
-+ }
-+
-+ if (pipe (bus_pid_to_launcher_pipe) < 0 ||
-+ pipe (bus_address_to_launcher_pipe) < 0)
-+ {
-+ fprintf (stderr,
-+ "Failed to create pipe: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ bus_pid_to_babysitter_pipe[READ_END] = -1;
-+ bus_pid_to_babysitter_pipe[WRITE_END] = -1;
-+
-+ ret = fork ();
-+ if (ret < 0)
-+ {
-+ fprintf (stderr, "Failed to fork: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ if (ret == 0)
-+ {
-+ /* Child */
-+#define MAX_FD_LEN 64
-+ char write_pid_fd_as_string[MAX_FD_LEN];
-+ char write_address_fd_as_string[MAX_FD_LEN];
-+
-+ verbose ("=== Babysitter's intermediate parent created\n");
-+
-+ /* Fork once more to create babysitter */
-+
-+ if (pipe (bus_pid_to_babysitter_pipe) < 0)
-+ {
-+ fprintf (stderr,
-+ "Failed to create pipe: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ ret = fork ();
-+ if (ret < 0)
-+ {
-+ fprintf (stderr, "Failed to fork: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ if (ret > 0)
-+ {
-+ /* In babysitter */
-+ verbose ("=== Babysitter's intermediate parent continues\n");
-+
-+ close (bus_pid_to_launcher_pipe[READ_END]);
-+ close (bus_address_to_launcher_pipe[READ_END]);
-+ close (bus_address_to_launcher_pipe[WRITE_END]);
-+ close (bus_pid_to_babysitter_pipe[WRITE_END]);
-+
-+ /* babysit() will fork *again*
-+ * and will also reap the pre-forked bus
-+ * daemon
-+ */
-+ babysit (exit_with_session, ret,
-+ bus_pid_to_babysitter_pipe[READ_END],
-+ bus_pid_to_launcher_pipe[WRITE_END]);
-+ exit (0);
-+ }
-+
-+ verbose ("=== Bus exec process created\n");
-+
-+ /* Now we are the bus process (well, almost;
-+ * dbus-daemon itself forks again)
-+ */
-+ close (bus_pid_to_launcher_pipe[READ_END]);
-+ close (bus_address_to_launcher_pipe[READ_END]);
-+ close (bus_pid_to_babysitter_pipe[READ_END]);
-+ close (bus_pid_to_launcher_pipe[WRITE_END]);
-+
-+ sprintf (write_pid_fd_as_string,
-+ "%d", bus_pid_to_babysitter_pipe[WRITE_END]);
-+
-+ sprintf (write_address_fd_as_string,
-+ "%d", bus_address_to_launcher_pipe[WRITE_END]);
-+
-+ verbose ("Calling exec()\n");
-+
-+ execlp ("dbus-daemon",
-+ "dbus-daemon",
-+ "--fork",
-+ "--print-pid", write_pid_fd_as_string,
-+ "--print-address", write_address_fd_as_string,
-+ config_file ? "--config-file" : "--session",
-+ config_file, /* has to be last in this varargs list */
-+ NULL);
-+
-+ fprintf (stderr,
-+ "Failed to execute message bus daemon: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+ else
-+ {
-+ /* Parent */
-+#define MAX_ADDR_LEN 512
-+ pid_t bus_pid;
-+ char bus_address[MAX_ADDR_LEN];
-+
-+ verbose ("=== Parent dbus-launch continues\n");
-+
-+ close (bus_pid_to_launcher_pipe[WRITE_END]);
-+ close (bus_address_to_launcher_pipe[WRITE_END]);
-+
-+ verbose ("Waiting for babysitter's intermediate parent\n");
-+
-+ /* Immediately reap parent of babysitter
-+ * (which was created just for us to reap)
-+ */
-+ if (do_waitpid (ret) < 0)
-+ {
-+ fprintf (stderr, "Failed to waitpid() for babysitter intermediate process: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ }
-+
-+ verbose ("Reading address from bus\n");
-+
-+ /* Read the pipe data, print, and exit */
-+ switch (read_line (bus_address_to_launcher_pipe[READ_END],
-+ bus_address, MAX_ADDR_LEN))
-+ {
-+ case READ_STATUS_OK:
-+ break;
-+ case READ_STATUS_EOF:
-+ fprintf (stderr, "EOF in dbus-launch reading address from bus daemon\n");
-+ exit (1);
-+ break;
-+ case READ_STATUS_ERROR:
-+ fprintf (stderr, "Error in dbus-launch reading address from bus daemon: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ break;
-+ }
-+
-+ close (bus_address_to_launcher_pipe[READ_END]);
-+
-+ verbose ("Reading PID from babysitter\n");
-+
-+ switch (read_pid (bus_pid_to_launcher_pipe[READ_END], &bus_pid))
-+ {
-+ case READ_STATUS_OK:
-+ break;
-+ case READ_STATUS_EOF:
-+ fprintf (stderr, "EOF in dbus-launch reading address from bus daemon\n");
-+ exit (1);
-+ break;
-+ case READ_STATUS_ERROR:
-+ fprintf (stderr, "Error in dbus-launch reading address from bus daemon: %s\n",
-+ strerror (errno));
-+ exit (1);
-+ break;
-+ }
-+
-+ close (bus_pid_to_launcher_pipe[READ_END]);
-+
-+ if (runprog)
-+ {
-+ char *envvar;
-+ char **args;
-+
-+ envvar = malloc (strlen ("DBUS_SESSION_BUS_ADDRESS=") + strlen (bus_address) + 1);
-+ args = malloc (sizeof (char *) * ((argc-remaining_args)+2));
-+
-+ if (envvar == NULL || args == NULL)
-+ goto oom;
-+
-+ args[0] = xstrdup (runprog);
-+ if (!args[0])
-+ goto oom;
-+ for (i = 1; i <= (argc-remaining_args); i++)
-+ {
-+ size_t len = strlen (argv[remaining_args+i-1])+1;
-+ args[i] = malloc (len);
-+ if (!args[i])
-+ goto oom;
-+ strncpy (args[i], argv[remaining_args+i-1], len);
-+ }
-+ args[i] = NULL;
-+
-+ strcpy (envvar, "DBUS_SESSION_BUS_ADDRESS=");
-+ strcat (envvar, bus_address);
-+ putenv (envvar);
-+
-+ execvp (runprog, args);
-+ fprintf (stderr, "Couldn't exec %s: %s\n", runprog, strerror (errno));
-+ exit (1);
-+ }
-+ else
-+ {
-+ if (c_shell_syntax)
-+ printf ("setenv DBUS_SESSION_BUS_ADDRESS '%s';\n", bus_address);
-+ else
-+ {
-+ printf ("DBUS_SESSION_BUS_ADDRESS='%s';\n", bus_address);
-+ if (bourne_shell_syntax)
-+ printf ("export DBUS_SESSION_BUS_ADDRESS;\n");
-+ }
-+ if (c_shell_syntax)
-+ printf ("set DBUS_SESSION_BUS_PID=%ld;\n", (long) bus_pid);
-+ else
-+ printf ("DBUS_SESSION_BUS_PID=%ld;\n", (long) bus_pid);
-+ }
-+
-+ verbose ("dbus-launch exiting\n");
-+
-+ fflush (stdout);
-+ fflush (stderr);
-+ close (1);
-+ close (2);
-+
-+ exit (0);
-+ }
-+
-+ return 0;
-+ oom:
-+ fprintf (stderr, "Out of memory!");
-+ exit (1);
-+}
-diff -Naur dbus-0.61.orig/tools/dbus-monitor.1 dbus-0.61/tools/dbus-monitor.1
---- dbus-0.61.orig/tools/dbus-monitor.1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-monitor.1 2005-10-29 19:02:58.000000000 +0200
-@@ -0,0 +1,60 @@
-+.\"
-+.\" dbus-monitor manual page.
-+.\" Copyright (C) 2003 Red Hat, Inc.
-+.\"
-+.TH dbus-monitor 1
-+.SH NAME
-+dbus-monitor \- debug probe to print message bus messages
-+.SH SYNOPSIS
-+.PP
-+.B dbus-monitor
-+[\-\-system | \-\-session]
-+[watch expressions]
-+
-+.SH DESCRIPTION
-+
-+The \fIdbus-monitor\fP command is used to monitor messages going
-+through a D-BUS message bus. See
-+http://www.freedesktop.org/software/dbus/ for more information about
-+the big picture.
-+
-+.PP
-+There are two well-known message buses: the systemwide message bus
-+(installed on many systems as the "messagebus" service) and the
-+per-user-login-session message bus (started each time a user logs in).
-+The \-\-system and \-\-session options direct \fIdbus-monitor\fP to
-+monitor the system or session buses respectively. If neither is
-+specified, \fIdbus-monitor\fP monitors the session bus.
-+
-+.PP
-+In order to get \fIdbus-monitor\fP to see the messages you are interested
-+in, you should specify a set of watch expressions as you would expect to
-+be passed to the \fIdbus_bus_add_watch\fP function.
-+
-+.PP
-+The message bus configuration may keep \fIdbus-monitor\fP from seeing
-+all messages, especially if you run the monitor as a non-root user.
-+
-+.SH OPTIONS
-+.TP
-+.I "--system"
-+Monitor the system message bus.
-+.TP
-+.I "--session"
-+Monitor the session message bus. (This is the default.)
-+
-+.SH EXAMPLE
-+Here is an example of using dbus-monitor to watch for the gnome typing
-+monitor to say things
-+.nf
-+
-+ dbus-monitor "type='signal',sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'"
-+
-+.fi
-+
-+.SH AUTHOR
-+dbus-monitor was written by Philip Blundell.
-+
-+.SH BUGS
-+Please send bug reports to the D-BUS mailing list or bug tracker,
-+see http://www.freedesktop.org/software/dbus/
-diff -Naur dbus-0.61.orig/tools/dbus-monitor.c dbus-0.61/tools/dbus-monitor.c
---- dbus-0.61.orig/tools/dbus-monitor.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-monitor.c 2005-10-29 19:02:58.000000000 +0200
-@@ -0,0 +1,153 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-monitor.c Utility program to monitor messages on the bus
-+ *
-+ * Copyright (C) 2003 Philip Blundell <philb at gnu.org>
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include <glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include "dbus-print-message.h"
-+
-+static DBusHandlerResult
-+filter_func (DBusConnection *connection,
-+ DBusMessage *message,
-+ void *user_data)
-+{
-+ print_message (message, FALSE);
-+
-+ if (dbus_message_is_signal (message,
-+ DBUS_INTERFACE_LOCAL,
-+ "Disconnected"))
-+ exit (0);
-+
-+ /* Conceptually we want this to be
-+ * DBUS_HANDLER_RESULT_NOT_YET_HANDLED, but this raises
-+ * some problems. See bug 1719.
-+ */
-+ return DBUS_HANDLER_RESULT_HANDLED;
-+}
-+
-+static void
-+usage (char *name, int ecode)
-+{
-+ fprintf (stderr, "Usage: %s [--system | --session] [watch expressions]\n", name);
-+ exit (ecode);
-+}
-+
-+int
-+main (int argc, char *argv[])
-+{
-+ DBusConnection *connection;
-+ DBusError error;
-+ DBusBusType type = DBUS_BUS_SESSION;
-+ GMainLoop *loop;
-+ int i = 0, j = 0, numFilters = 0;
-+ char **filters = NULL;
-+ for (i = 1; i < argc; i++)
-+ {
-+ char *arg = argv[i];
-+
-+ if (!strcmp (arg, "--system"))
-+ type = DBUS_BUS_SYSTEM;
-+ else if (!strcmp (arg, "--session"))
-+ type = DBUS_BUS_SESSION;
-+ else if (!strcmp (arg, "--help"))
-+ usage (argv[0], 0);
-+ else if (!strcmp (arg, "--"))
-+ continue;
-+ else if (arg[0] == '-')
-+ usage (argv[0], 1);
-+ else {
-+ numFilters++;
-+ filters = (char **)realloc(filters, numFilters * sizeof(char *));
-+ filters[j] = (char *)malloc((strlen(arg) + 1) * sizeof(char *));
-+ snprintf(filters[j], strlen(arg) + 1, "%s", arg);
-+ j++;
-+ }
-+ }
-+
-+ loop = g_main_loop_new (NULL, FALSE);
-+
-+ dbus_error_init (&error);
-+ connection = dbus_bus_get (type, &error);
-+ if (connection == NULL)
-+ {
-+ fprintf (stderr, "Failed to open connection to %s message bus: %s\n",
-+ (type == DBUS_BUS_SYSTEM) ? "system" : "session",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ dbus_connection_setup_with_g_main (connection, NULL);
-+
-+ if (numFilters)
-+ {
-+ for (i = 0; i < j; i++)
-+ {
-+ dbus_bus_add_match (connection, filters[i], &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "Failed to setup match \"%s\": %s\n",
-+ filters[i], error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+ free(filters[i]);
-+ }
-+ }
-+ else
-+ {
-+ dbus_bus_add_match (connection,
-+ "type='signal'",
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ goto lose;
-+ dbus_bus_add_match (connection,
-+ "type='method_call'",
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ goto lose;
-+ dbus_bus_add_match (connection,
-+ "type='method_return'",
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ goto lose;
-+ dbus_bus_add_match (connection,
-+ "type='error'",
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ goto lose;
-+ }
-+
-+ if (!dbus_connection_add_filter (connection, filter_func, NULL, NULL)) {
-+ fprintf (stderr, "Couldn't add filter!\n");
-+ exit (1);
-+ }
-+
-+ g_main_loop_run (loop);
-+
-+ exit (0);
-+ lose:
-+ fprintf (stderr, "Error: %s\n", error.message);
-+ exit (1);
-+}
-diff -Naur dbus-0.61.orig/tools/dbus-names-model.c dbus-0.61/tools/dbus-names-model.c
---- dbus-0.61.orig/tools/dbus-names-model.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-names-model.c 2005-07-06 23:27:45.000000000 +0200
-@@ -0,0 +1,388 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-names-model.c GtkTreeModel for names on the bus
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-names-model.h"
-+#include <glib/gi18n.h>
-+#include <string.h>
-+#include <dbus/dbus-protocol.h>
-+
-+enum
-+{
-+ MODEL_COLUMN_NAME,
-+
-+ MODEL_COLUMN_LAST
-+};
-+
-+
-+typedef struct NamesModel NamesModel;
-+typedef struct NamesModelClass NamesModelClass;
-+
-+GType names_model_get_type (void);
-+
-+struct NamesModel
-+{
-+ GtkListStore parent;
-+ DBusGConnection *connection;
-+ DBusGProxy *driver_proxy;
-+ DBusGProxyCall *pending_list_names;
-+};
-+
-+struct NamesModelClass
-+{
-+ GtkListStoreClass parent;
-+};
-+
-+#define TYPE_NAMES_MODEL (names_model_get_type ())
-+#define NAMES_MODEL(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), TYPE_NAMES_MODEL, NamesModel))
-+#define NAMES_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_NAMES_MODEL, NamesModelClass))
-+#define IS_NAMES_MODEL(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), TYPE_NAMES_MODEL))
-+#define IS_NAMES_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_NAMES_MODEL))
-+#define NAMES_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_NAMES_MODEL, NamesModelClass))
-+
-+static void
-+have_names_notify (DBusGProxy *proxy,
-+ DBusGProxyCall *call,
-+ void *data)
-+{
-+ NamesModel *names_model;
-+ GError *error;
-+ char **names;
-+ int i;
-+
-+ names_model = NAMES_MODEL (data);
-+
-+ g_assert (names_model->pending_list_names == call);
-+ g_assert (names_model->driver_proxy);
-+
-+ names = NULL;
-+ error = NULL;
-+ if (!dbus_g_proxy_end_call (names_model->driver_proxy,
-+ names_model->pending_list_names,
-+ &error,
-+ G_TYPE_STRV, &names, G_TYPE_INVALID))
-+ {
-+ g_assert (names == NULL);
-+ g_assert (error != NULL);
-+
-+ g_printerr (_("Failed to load names on the bus: %s\n"), error->message);
-+ g_error_free (error);
-+ return;
-+ }
-+
-+ i = 0;
-+ while (names[i])
-+ {
-+ GtkTreeIter iter;
-+
-+#if 0
-+ g_printerr ("%d of %d: %s\n",
-+ i, n_elements, names[i]);
-+#endif
-+
-+ gtk_list_store_append (GTK_LIST_STORE (names_model),
-+ &iter);
-+
-+ gtk_list_store_set (GTK_LIST_STORE (names_model),
-+ &iter,
-+ MODEL_COLUMN_NAME, names[i],
-+ -1);
-+
-+ ++i;
-+ }
-+
-+ g_strfreev (names);
-+}
-+
-+static gboolean
-+names_model_find_name (NamesModel *names_model,
-+ const char *name,
-+ GtkTreeIter *iter_p)
-+{
-+ GtkTreeIter iter;
-+
-+ if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (names_model),
-+ &iter))
-+ return FALSE;
-+
-+ do
-+ {
-+ char *s;
-+
-+ gtk_tree_model_get (GTK_TREE_MODEL (names_model),
-+ &iter,
-+ MODEL_COLUMN_NAME, &s,
-+ -1);
-+ if (s && strcmp (s, name) == 0)
-+ {
-+ *iter_p = iter;
-+ g_free (s);
-+ return TRUE;
-+ }
-+
-+ g_free (s);
-+ }
-+ while (gtk_tree_model_iter_next (GTK_TREE_MODEL (names_model),
-+ &iter));
-+
-+ return FALSE;
-+}
-+
-+static void
-+name_owner_changed (DBusGProxy *driver_proxy,
-+ const char *name,
-+ const char *old_owner,
-+ const char *new_owner,
-+ void *data)
-+{
-+ NamesModel *names_model = NAMES_MODEL (data);
-+
-+#if 0
-+ g_printerr ("Name '%s' changed owner '%s' -> '%s'\n",
-+ name, old_owner, new_owner);
-+#endif
-+
-+ if (*new_owner == '\0')
-+ {
-+ /* this name has vanished */
-+ GtkTreeIter iter;
-+
-+ if (names_model_find_name (names_model, name, &iter))
-+ gtk_list_store_remove (GTK_LIST_STORE (names_model),
-+ &iter);
-+ }
-+ else if (*old_owner == '\0')
-+ {
-+ /* this name has been added */
-+ GtkTreeIter iter;
-+
-+ if (!names_model_find_name (names_model, name, &iter))
-+ {
-+ gtk_list_store_append (GTK_LIST_STORE (names_model),
-+ &iter);
-+
-+ gtk_list_store_set (GTK_LIST_STORE (names_model),
-+ &iter,
-+ MODEL_COLUMN_NAME, name,
-+ -1);
-+ }
-+ }
-+}
-+
-+static void
-+names_model_reload (NamesModel *names_model)
-+{
-+ GtkListStore *list_store;
-+
-+ list_store = GTK_LIST_STORE (names_model);
-+
-+ if (names_model->pending_list_names)
-+ {
-+ dbus_g_proxy_cancel_call (names_model->driver_proxy,
-+ names_model->pending_list_names);
-+ names_model->pending_list_names = NULL;
-+ }
-+
-+ gtk_list_store_clear (list_store);
-+
-+ if (names_model->connection == NULL)
-+ return;
-+
-+ names_model->pending_list_names =
-+ dbus_g_proxy_begin_call (names_model->driver_proxy,
-+ "ListNames",
-+ have_names_notify, names_model, NULL,
-+ G_TYPE_INVALID);
-+}
-+
-+static void
-+names_model_set_connection (NamesModel *names_model,
-+ DBusGConnection *connection)
-+{
-+ g_return_if_fail (IS_NAMES_MODEL (names_model));
-+
-+ if (connection == names_model->connection)
-+ return;
-+
-+ if (names_model->connection)
-+ {
-+ dbus_g_proxy_disconnect_signal (names_model->driver_proxy,
-+ "NameOwnerChanged",
-+ G_CALLBACK (name_owner_changed),
-+ names_model);
-+
-+ g_object_unref (names_model->driver_proxy);
-+ names_model->driver_proxy = NULL;
-+ dbus_g_connection_unref (names_model->connection);
-+ names_model->connection = NULL;
-+ }
-+
-+ if (connection)
-+ {
-+ names_model->connection = connection;
-+ dbus_g_connection_ref (names_model->connection);
-+
-+ names_model->driver_proxy =
-+ dbus_g_proxy_new_for_name (names_model->connection,
-+ DBUS_SERVICE_DBUS,
-+ DBUS_PATH_DBUS,
-+ DBUS_INTERFACE_DBUS);
-+ g_assert (names_model->driver_proxy);
-+
-+ dbus_g_proxy_add_signal (names_model->driver_proxy,
-+ "NameOwnerChanged",
-+ G_TYPE_STRING,
-+ G_TYPE_STRING,
-+ G_TYPE_STRING,
-+ G_TYPE_INVALID);
-+
-+ dbus_g_proxy_connect_signal (names_model->driver_proxy,
-+ "NameOwnerChanged",
-+ G_CALLBACK (name_owner_changed),
-+ names_model,
-+ NULL);
-+ }
-+
-+ names_model_reload (names_model);
-+}
-+
-+G_DEFINE_TYPE(NamesModel, names_model, GTK_TYPE_LIST_STORE)
-+
-+/* Properties */
-+enum
-+{
-+ PROP_0,
-+ PROP_CONNECTION
-+};
-+
-+static void
-+names_model_dispose (GObject *object)
-+{
-+ NamesModel *names_model = NAMES_MODEL (object);
-+
-+ names_model_set_connection (names_model, NULL);
-+
-+ g_assert (names_model->connection == NULL);
-+ g_assert (names_model->driver_proxy == NULL);
-+ g_assert (names_model->pending_list_names == NULL);
-+
-+ (G_OBJECT_CLASS (names_model_parent_class)->dispose) (object);
-+}
-+
-+static void
-+names_model_finalize (GObject *object)
-+{
-+ NamesModel *names_model = NAMES_MODEL (object);
-+
-+ g_assert (names_model->connection == NULL);
-+ g_assert (names_model->driver_proxy == NULL);
-+ g_assert (names_model->pending_list_names == NULL);
-+
-+ (G_OBJECT_CLASS (names_model_parent_class)->finalize) (object);
-+}
-+
-+static void
-+names_model_set_property (GObject *object,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *pspec)
-+{
-+ NamesModel *names_model;
-+
-+ names_model = NAMES_MODEL (object);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_CONNECTION:
-+ names_model_set_connection (names_model, g_value_get_boxed (value));
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+names_model_get_property (GObject *object,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *pspec)
-+{
-+ NamesModel *names_model;
-+
-+ names_model = NAMES_MODEL (object);
-+
-+ switch (prop_id)
-+ {
-+ case PROP_CONNECTION:
-+ g_value_set_boxed (value, names_model->connection);
-+ break;
-+
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+ break;
-+ }
-+}
-+
-+static void
-+names_model_init (NamesModel *names_model)
-+{
-+ GtkListStore *list_store;
-+ GType types[MODEL_COLUMN_LAST];
-+
-+ list_store = GTK_LIST_STORE (names_model);
-+
-+ types[0] = G_TYPE_STRING; /* name */
-+ gtk_list_store_set_column_types (list_store, MODEL_COLUMN_LAST, types);
-+}
-+
-+static void
-+names_model_class_init (NamesModelClass *names_model_class)
-+{
-+ GObjectClass *gobject_class = G_OBJECT_CLASS (names_model_class);
-+
-+ gobject_class->finalize = names_model_finalize;
-+ gobject_class->dispose = names_model_dispose;
-+ gobject_class->set_property = names_model_set_property;
-+ gobject_class->get_property = names_model_get_property;
-+
-+ g_object_class_install_property (gobject_class,
-+ PROP_CONNECTION,
-+ g_param_spec_boxed ("connection",
-+ _("Bus connection"),
-+ _("Connection to the message bus"),
-+ DBUS_TYPE_G_CONNECTION,
-+ G_PARAM_READWRITE));
-+}
-+
-+GtkTreeModel*
-+names_model_new (DBusGConnection *connection)
-+{
-+ NamesModel *names_model;
-+
-+ names_model = g_object_new (TYPE_NAMES_MODEL,
-+ "connection", connection,
-+ NULL);
-+
-+ return GTK_TREE_MODEL (names_model);
-+}
-+
-diff -Naur dbus-0.61.orig/tools/dbus-names-model.h dbus-0.61/tools/dbus-names-model.h
---- dbus-0.61.orig/tools/dbus-names-model.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-names-model.h 2005-01-31 00:06:32.000000000 +0100
-@@ -0,0 +1,31 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-names-model.h GtkTreeModel for names on the bus
-+ *
-+ * Copyright (C) 2005 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_NAMES_MODEL_H
-+#define DBUS_NAMES_MODEL_H
-+
-+#include <gtk/gtk.h>
-+#include <dbus/dbus-glib.h>
-+
-+GtkTreeModel* names_model_new (DBusGConnection *connection);
-+
-+#endif /* DBUS_NAMES_MODEL_H */
-diff -Naur dbus-0.61.orig/tools/dbus-print-message.c dbus-0.61/tools/dbus-print-message.c
---- dbus-0.61.orig/tools/dbus-print-message.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-print-message.c 2005-08-26 17:41:31.000000000 +0200
-@@ -0,0 +1,195 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-print-message.h Utility function to print out a message
-+ *
-+ * Copyright (C) 2003 Philip Blundell <philb at gnu.org>
-+ * Copyright (C) 2003 Red Hat, 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include "dbus-print-message.h"
-+
-+static const char*
-+type_to_name (int message_type)
-+{
-+ switch (message_type)
-+ {
-+ case DBUS_MESSAGE_TYPE_SIGNAL:
-+ return "signal";
-+ case DBUS_MESSAGE_TYPE_METHOD_CALL:
-+ return "method call";
-+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
-+ return "method return";
-+ case DBUS_MESSAGE_TYPE_ERROR:
-+ return "error";
-+ default:
-+ return "(unknown message type)";
-+ }
-+}
-+
-+static void
-+print_iter (DBusMessageIter *iter, dbus_bool_t literal, int depth)
-+{
-+ do
-+ {
-+ int type = dbus_message_iter_get_arg_type (iter);
-+ const char *str;
-+ dbus_uint32_t uint32;
-+ dbus_int32_t int32;
-+ double d;
-+ unsigned char byte;
-+ dbus_bool_t boolean;
-+
-+ if (type == DBUS_TYPE_INVALID)
-+ break;
-+
-+ while (depth-- > 0)
-+ putc (' ', stdout);
-+
-+ switch (type)
-+ {
-+ case DBUS_TYPE_STRING:
-+ dbus_message_iter_get_basic (iter, &str);
-+ if (!literal)
-+ printf ("string \"");
-+ printf ("%s", str);
-+ if (!literal)
-+ printf ("\"\n");
-+ break;
-+
-+ case DBUS_TYPE_INT32:
-+ dbus_message_iter_get_basic (iter, &int32);
-+ printf ("int32 %d\n", int32);
-+ break;
-+
-+ case DBUS_TYPE_UINT32:
-+ dbus_message_iter_get_basic (iter, &uint32);
-+ printf ("uint32 %u\n", uint32);
-+ break;
-+
-+ case DBUS_TYPE_DOUBLE:
-+ dbus_message_iter_get_basic (iter, &d);
-+ printf ("double %g\n", d);
-+ break;
-+
-+ case DBUS_TYPE_BYTE:
-+ dbus_message_iter_get_basic (iter, &byte);
-+ printf ("byte %d\n", byte);
-+ break;
-+
-+ case DBUS_TYPE_BOOLEAN:
-+ dbus_message_iter_get_basic (iter, &boolean);
-+ printf ("boolean %s\n", boolean ? "true" : "false");
-+ break;
-+
-+ case DBUS_TYPE_VARIANT:
-+ {
-+ DBusMessageIter subiter;
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ printf ("variant:");
-+ print_iter (&subiter, literal, depth);
-+ break;
-+ }
-+ case DBUS_TYPE_ARRAY:
-+ {
-+ int current_type;
-+ DBusMessageIter subiter;
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ printf("[");
-+ while ((current_type = dbus_message_iter_get_arg_type (&subiter)) != DBUS_TYPE_INVALID)
-+ {
-+ print_iter (&subiter, literal, depth);
-+ dbus_message_iter_next (&subiter);
-+ if (dbus_message_iter_get_arg_type (&subiter) != DBUS_TYPE_INVALID)
-+ printf (",");
-+ }
-+ printf("]");
-+ break;
-+ }
-+ case DBUS_TYPE_DICT_ENTRY:
-+ {
-+ DBusMessageIter subiter;
-+
-+ dbus_message_iter_recurse (iter, &subiter);
-+
-+ printf("{");
-+ print_iter (&subiter, literal, depth);
-+ dbus_message_iter_next (&subiter);
-+ print_iter (&subiter, literal, depth);
-+ printf("}");
-+ break;
-+ }
-+
-+ default:
-+ printf (" (dbus-monitor too dumb to decipher arg type '%c')\n", type);
-+ break;
-+ }
-+
-+ } while (dbus_message_iter_next (iter));
-+}
-+
-+void
-+print_message (DBusMessage *message, dbus_bool_t literal)
-+{
-+ DBusMessageIter iter;
-+ const char *sender;
-+ const char *destination;
-+ int message_type;
-+
-+ message_type = dbus_message_get_type (message);
-+ sender = dbus_message_get_sender (message);
-+ destination = dbus_message_get_destination (message);
-+
-+ if (!literal)
-+ {
-+ printf ("%s sender=%s -> dest=%s",
-+ type_to_name (message_type),
-+ sender ? sender : "(null sender)",
-+ destination ? destination : "(null destination)");
-+
-+ switch (message_type)
-+ {
-+ case DBUS_MESSAGE_TYPE_METHOD_CALL:
-+ case DBUS_MESSAGE_TYPE_SIGNAL:
-+ printf (" interface=%s; member=%s\n",
-+ dbus_message_get_interface (message),
-+ dbus_message_get_member (message));
-+ break;
-+
-+ case DBUS_MESSAGE_TYPE_METHOD_RETURN:
-+ printf ("\n");
-+ break;
-+
-+ case DBUS_MESSAGE_TYPE_ERROR:
-+ printf (" error_name=%s\n",
-+ dbus_message_get_error_name (message));
-+ break;
-+
-+ default:
-+ printf ("\n");
-+ break;
-+ }
-+ }
-+
-+ dbus_message_iter_init (message, &iter);
-+ print_iter (&iter, literal, 1);
-+ fflush (stdout);
-+
-+}
-+
-diff -Naur dbus-0.61.orig/tools/dbus-print-message.h dbus-0.61/tools/dbus-print-message.h
---- dbus-0.61.orig/tools/dbus-print-message.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-print-message.h 2005-07-06 23:27:45.000000000 +0200
-@@ -0,0 +1,31 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-print-message.h Utility function to print out a message
-+ *
-+ * Copyright (C) 2003 Philip Blundell <philb at gnu.org>
-+ * Copyright (C) 2003 Red Hat, 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_PRINT_MESSAGE_H
-+#define DBUS_PRINT_MESSAGE_H
-+
-+#include <stdio.h>
-+#include <string.h>
-+#include <dbus/dbus.h>
-+
-+void print_message (DBusMessage *message, dbus_bool_t literal);
-+
-+#endif /* DBUS_PRINT_MESSAGE_H */
-diff -Naur dbus-0.61.orig/tools/dbus-send.1 dbus-0.61/tools/dbus-send.1
---- dbus-0.61.orig/tools/dbus-send.1 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-send.1 2005-01-18 21:42:15.000000000 +0100
-@@ -0,0 +1,79 @@
-+.\"
-+.\" dbus-send manual page.
-+.\" Copyright (C) 2003 Red Hat, Inc.
-+.\"
-+.TH dbus-send 1
-+.SH NAME
-+dbus-send \- Send a message to a message bus
-+.SH SYNOPSIS
-+.PP
-+.B dbus-send
-+[\-\-system | \-\-session] [\-\-dest=NAME] [\-\-print-reply]
-+[\-\-type=TYPE] <destination object path> <message name> [contents ...]
-+
-+.SH DESCRIPTION
-+
-+The \fIdbus-send\fP command is used to send a message to a D-BUS message
-+bus. See http://www.freedesktop.org/software/dbus/ for more
-+information about the big picture.
-+
-+.PP
-+There are two well-known message buses: the systemwide message bus
-+(installed on many systems as the "messagebus" service) and the
-+per-user-login-session message bus (started each time a user logs in).
-+The \-\-system and \-\-session options direct \fIdbus-send\fP to send
-+messages to the system or session buses respectively. If neither is
-+specified, \fIdbus-send\fP sends to the session bus.
-+
-+.PP
-+Nearly all uses of \fIdbus-send\fP must provide the \-\-dest argument
-+which is the name of a connection on the bus to send the message to. If
-+\-\-dest is omitted, no destination is set.
-+
-+.PP
-+The object path and the name of the message to send must always be
-+specified. Following arguments, if any, are the message contents
-+(message arguments). These are given as a type name, a colon, and
-+then the value of the argument. The possible type names are: string,
-+int32, uint32, double, byte, boolean. (D-BUS supports more types than
-+these, but \fIdbus-send\fP currently does not.)
-+
-+.PP
-+Here is an example invocation:
-+.nf
-+
-+ dbus-send \-\-dest='org.freedesktop.ExampleName \\
-+ /org/freedesktop/sample/object/name \\
-+ org.freedesktop.ExampleInterface.ExampleMethod \\
-+ int32:47 string:'hello world' double:65.32
-+
-+.fi
-+
-+Note that the interface is separated from a method or signal
-+name by a dot, though in the actual protocol the interface
-+and the interface member are separate fields.
-+
-+.SH OPTIONS
-+The following options are supported:
-+.TP
-+.I "--dest=NAME"
-+Specify the name of the connection to receive the message.
-+.TP
-+.I "--print-reply"
-+Block for a reply to the message sent, and print any reply received.
-+.TP
-+.I "--system"
-+Send to the system message bus.
-+.TP
-+.I "--session"
-+Send to the session message bus. (This is the default.)
-+.TP
-+.I "--type=TYPE"
-+Specify "method_call" or "signal" (defaults to "signal").
-+
-+.SH AUTHOR
-+dbus-send was written by Philip Blundell.
-+
-+.SH BUGS
-+Please send bug reports to the D-BUS mailing list or bug tracker,
-+see http://www.freedesktop.org/software/dbus/
-diff -Naur dbus-0.61.orig/tools/dbus-send.c dbus-0.61/tools/dbus-send.c
---- dbus-0.61.orig/tools/dbus-send.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-send.c 2005-08-01 18:10:34.000000000 +0200
-@@ -0,0 +1,490 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-send.c Utility program to send messages from the command line
-+ *
-+ * Copyright (C) 2003 Philip Blundell <philb at gnu.org>
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include <dbus/dbus.h>
-+
-+#include "dbus-print-message.h"
-+
-+static const char *appname;
-+
-+static void
-+usage (int ecode)
-+{
-+ fprintf (stderr, "Usage: %s [--help] [--system | --session] [--dest=NAME] [--type=TYPE] [--print-reply=(literal)] [--reply-timeout=MSEC] <destination object path> <message name> [contents ...]\n", appname);
-+ exit (ecode);
-+}
-+
-+static void
-+append_arg (DBusMessageIter *iter, int type, const char *value)
-+{
-+ dbus_uint16_t uint16;
-+ dbus_int16_t int16;
-+ dbus_uint32_t uint32;
-+ dbus_int32_t int32;
-+ dbus_uint64_t uint64;
-+ dbus_int64_t int64;
-+ double d;
-+ unsigned char byte;
-+ dbus_bool_t v_BOOLEAN;
-+
-+ /* FIXME - we are ignoring OOM returns on all these functions */
-+ switch (type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ byte = strtoul (value, NULL, 0);
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_BYTE, &byte);
-+ break;
-+
-+ case DBUS_TYPE_DOUBLE:
-+ d = strtod (value, NULL);
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_DOUBLE, &d);
-+ break;
-+
-+ case DBUS_TYPE_INT16:
-+ int16 = strtol (value, NULL, 0);
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_INT16, &int16);
-+ break;
-+
-+ case DBUS_TYPE_UINT16:
-+ uint16 = strtoul (value, NULL, 0);
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_UINT16, &uint16);
-+ break;
-+
-+ case DBUS_TYPE_INT32:
-+ int32 = strtol (value, NULL, 0);
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_INT32, &int32);
-+ break;
-+
-+ case DBUS_TYPE_UINT32:
-+ uint32 = strtoul (value, NULL, 0);
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_UINT32, &uint32);
-+ break;
-+
-+ case DBUS_TYPE_INT64:
-+ int64 = strtoll (value, NULL, 0);
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_INT64, &int64);
-+ break;
-+
-+ case DBUS_TYPE_UINT64:
-+ uint64 = strtoull (value, NULL, 0);
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_UINT64, &uint64);
-+ break;
-+
-+ case DBUS_TYPE_STRING:
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_STRING, &value);
-+ break;
-+
-+ case DBUS_TYPE_OBJECT_PATH:
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_OBJECT_PATH, &value);
-+ break;
-+
-+ case DBUS_TYPE_BOOLEAN:
-+ if (strcmp (value, "true") == 0)
-+ {
-+ v_BOOLEAN = TRUE;
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_BOOLEAN, &v_BOOLEAN);
-+ }
-+ else if (strcmp (value, "false") == 0)
-+ {
-+ v_BOOLEAN = FALSE;
-+ dbus_message_iter_append_basic (iter, DBUS_TYPE_BOOLEAN, &v_BOOLEAN);
-+ }
-+ else
-+ {
-+ fprintf (stderr, "%s: Expected \"true\" or \"false\" instead of \"%s\"\n", appname, value);
-+ exit (1);
-+ }
-+ break;
-+
-+ default:
-+ fprintf (stderr, "%s: Unsupported data type %c\n", appname, (char) type);
-+ exit (1);
-+ }
-+}
-+
-+static void
-+append_array (DBusMessageIter *iter, int type, const char *value)
-+{
-+ const char *val;
-+ char *dupval = strdup (value);
-+
-+ val = strtok (dupval, ",");
-+ while (val != NULL)
-+ {
-+ append_arg (iter, type, val);
-+ val = strtok (NULL, ",");
-+ }
-+ free (dupval);
-+}
-+
-+static void
-+append_dict (DBusMessageIter *iter, int keytype, int valtype, const char *value)
-+{
-+ const char *val;
-+ char *dupval = strdup (value);
-+
-+ val = strtok (dupval, ",");
-+ while (val != NULL)
-+ {
-+ DBusMessageIter subiter;
-+ char sig[3];
-+ sig[0] = keytype;
-+ sig[1] = valtype;
-+ sig[2] = '\0';
-+
-+ dbus_message_iter_open_container (iter,
-+ DBUS_TYPE_DICT_ENTRY,
-+ sig,
-+ &subiter);
-+
-+ append_arg (&subiter, keytype, val);
-+ val = strtok (NULL, ",");
-+ if (val == NULL)
-+ {
-+ fprintf (stderr, "%s: Malformed dictionary\n", appname);
-+ exit (1);
-+ }
-+ append_arg (&subiter, valtype, val);
-+
-+ dbus_message_iter_close_container (iter, &subiter);
-+ val = strtok (NULL, ",");
-+ }
-+ free (dupval);
-+}
-+
-+static int
-+type_from_name (const char *arg)
-+{
-+ int type;
-+ if (!strcmp (arg, "string"))
-+ type = DBUS_TYPE_STRING;
-+ else if (!strcmp (arg, "int16"))
-+ type = DBUS_TYPE_INT16;
-+ else if (!strcmp (arg, "uint16"))
-+ type = DBUS_TYPE_UINT16;
-+ else if (!strcmp (arg, "int32"))
-+ type = DBUS_TYPE_INT32;
-+ else if (!strcmp (arg, "uint32"))
-+ type = DBUS_TYPE_UINT32;
-+ else if (!strcmp (arg, "int64"))
-+ type = DBUS_TYPE_INT64;
-+ else if (!strcmp (arg, "uint64"))
-+ type = DBUS_TYPE_UINT64;
-+ else if (!strcmp (arg, "double"))
-+ type = DBUS_TYPE_DOUBLE;
-+ else if (!strcmp (arg, "byte"))
-+ type = DBUS_TYPE_BYTE;
-+ else if (!strcmp (arg, "boolean"))
-+ type = DBUS_TYPE_BOOLEAN;
-+ else if (!strcmp (arg, "objpath"))
-+ type = DBUS_TYPE_OBJECT_PATH;
-+ else
-+ {
-+ fprintf (stderr, "%s: Unknown type \"%s\"\n", appname, arg);
-+ exit (1);
-+ }
-+ return type;
-+}
-+
-+int
-+main (int argc, char *argv[])
-+{
-+ DBusConnection *connection;
-+ DBusError error;
-+ DBusMessage *message;
-+ int print_reply;
-+ int print_reply_literal;
-+ int reply_timeout;
-+ DBusMessageIter iter;
-+ int i;
-+ DBusBusType type = DBUS_BUS_SESSION;
-+ const char *dest = NULL;
-+ const char *name = NULL;
-+ const char *path = NULL;
-+ int message_type = DBUS_MESSAGE_TYPE_SIGNAL;
-+ const char *type_str = NULL;
-+
-+ appname = argv[0];
-+
-+ if (argc < 3)
-+ usage (1);
-+
-+ print_reply = FALSE;
-+ print_reply_literal = FALSE;
-+ reply_timeout = -1;
-+
-+ for (i = 1; i < argc && name == NULL; i++)
-+ {
-+ char *arg = argv[i];
-+
-+ if (strcmp (arg, "--system") == 0)
-+ type = DBUS_BUS_SYSTEM;
-+ else if (strcmp (arg, "--session") == 0)
-+ type = DBUS_BUS_SESSION;
-+ else if (strncmp (arg, "--print-reply", 13) == 0)
-+ {
-+ print_reply = TRUE;
-+ message_type = DBUS_MESSAGE_TYPE_METHOD_CALL;
-+ if (*(arg + 13) != '\0')
-+ print_reply_literal = TRUE;
-+ }
-+ else if (strstr (arg, "--reply-timeout=") == arg)
-+ {
-+ reply_timeout = strtol (strchr (arg, '=') + 1,
-+ NULL, 10);
-+ }
-+ else if (strstr (arg, "--dest=") == arg)
-+ dest = strchr (arg, '=') + 1;
-+ else if (strstr (arg, "--type=") == arg)
-+ type_str = strchr (arg, '=') + 1;
-+ else if (!strcmp(arg, "--help"))
-+ usage (0);
-+ else if (arg[0] == '-')
-+ usage (1);
-+ else if (path == NULL)
-+ path = arg;
-+ else if (name == NULL)
-+ name = arg;
-+ else
-+ usage (1);
-+ }
-+
-+ if (name == NULL)
-+ usage (1);
-+
-+ if (type_str != NULL)
-+ {
-+ message_type = dbus_message_type_from_string (type_str);
-+ if (!(message_type == DBUS_MESSAGE_TYPE_METHOD_CALL ||
-+ message_type == DBUS_MESSAGE_TYPE_SIGNAL))
-+ {
-+ fprintf (stderr, "Message type \"%s\" is not supported\n",
-+ type_str);
-+ exit (1);
-+ }
-+ }
-+
-+ dbus_error_init (&error);
-+ connection = dbus_bus_get (type, &error);
-+ if (connection == NULL)
-+ {
-+ fprintf (stderr, "Failed to open connection to %s message bus: %s\n",
-+ (type == DBUS_BUS_SYSTEM) ? "system" : "session",
-+ error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+
-+ if (message_type == DBUS_MESSAGE_TYPE_METHOD_CALL)
-+ {
-+ char *last_dot;
-+
-+ last_dot = strrchr (name, '.');
-+ if (last_dot == NULL)
-+ {
-+ fprintf (stderr, "Must use org.mydomain.Interface.Method notation, no dot in \"%s\"\n",
-+ name);
-+ exit (1);
-+ }
-+ *last_dot = '\0';
-+
-+ message = dbus_message_new_method_call (NULL,
-+ path,
-+ name,
-+ last_dot + 1);
-+ dbus_message_set_auto_start (message, TRUE);
-+ }
-+ else if (message_type == DBUS_MESSAGE_TYPE_SIGNAL)
-+ {
-+ char *last_dot;
-+
-+ last_dot = strrchr (name, '.');
-+ if (last_dot == NULL)
-+ {
-+ fprintf (stderr, "Must use org.mydomain.Interface.Signal notation, no dot in \"%s\"\n",
-+ name);
-+ exit (1);
-+ }
-+ *last_dot = '\0';
-+
-+ message = dbus_message_new_signal (path, name, last_dot + 1);
-+ }
-+ else
-+ {
-+ fprintf (stderr, "Internal error, unknown message type\n");
-+ exit (1);
-+ }
-+
-+ if (message == NULL)
-+ {
-+ fprintf (stderr, "Couldn't allocate D-BUS message\n");
-+ exit (1);
-+ }
-+
-+ if (dest && !dbus_message_set_destination (message, dest))
-+ {
-+ fprintf (stderr, "Not enough memory\n");
-+ exit (1);
-+ }
-+
-+ dbus_message_iter_init_append (message, &iter);
-+
-+ while (i < argc)
-+ {
-+ char *arg;
-+ char *c;
-+ int type;
-+ int secondary_type;
-+ int container_type;
-+ DBusMessageIter *target_iter;
-+ DBusMessageIter container_iter;
-+
-+ type = DBUS_TYPE_INVALID;
-+ arg = argv[i++];
-+ c = strchr (arg, ':');
-+
-+ if (c == NULL)
-+ {
-+ fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg);
-+ exit (1);
-+ }
-+
-+ *(c++) = 0;
-+
-+ container_type = DBUS_TYPE_INVALID;
-+
-+ if (strcmp (arg, "variant") == 0)
-+ container_type = DBUS_TYPE_VARIANT;
-+ else if (strcmp (arg, "array") == 0)
-+ container_type = DBUS_TYPE_ARRAY;
-+ else if (strcmp (arg, "dict") == 0)
-+ container_type = DBUS_TYPE_DICT_ENTRY;
-+
-+ if (container_type != DBUS_TYPE_INVALID)
-+ {
-+ arg = c;
-+ c = strchr (arg, ':');
-+ if (c == NULL)
-+ {
-+ fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg);
-+ exit (1);
-+ }
-+ *(c++) = 0;
-+ }
-+
-+ if (arg[0] == 0)
-+ type = DBUS_TYPE_STRING;
-+ else
-+ type = type_from_name (arg);
-+
-+ if (container_type == DBUS_TYPE_DICT_ENTRY)
-+ {
-+ char sig[5];
-+ arg = c;
-+ c = strchr (c, ':');
-+ if (c == NULL)
-+ {
-+ fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg);
-+ exit (1);
-+ }
-+ *(c++) = 0;
-+ secondary_type = type_from_name (arg);
-+ sig[0] = DBUS_DICT_ENTRY_BEGIN_CHAR;
-+ sig[1] = type;
-+ sig[2] = secondary_type;
-+ sig[3] = DBUS_DICT_ENTRY_END_CHAR;
-+ sig[4] = '\0';
-+ dbus_message_iter_open_container (&iter,
-+ DBUS_TYPE_ARRAY,
-+ sig,
-+ &container_iter);
-+ target_iter = &container_iter;
-+ }
-+ else if (container_type != DBUS_TYPE_INVALID)
-+ {
-+ char sig[2];
-+ sig[0] = type;
-+ sig[1] = '\0';
-+ dbus_message_iter_open_container (&iter,
-+ container_type,
-+ sig,
-+ &container_iter);
-+ target_iter = &container_iter;
-+ }
-+ else
-+ target_iter = &iter;
-+
-+ if (container_type == DBUS_TYPE_ARRAY)
-+ {
-+ append_array (target_iter, type, c);
-+ }
-+ else if (container_type == DBUS_TYPE_DICT_ENTRY)
-+ {
-+ append_dict (target_iter, type, secondary_type, c);
-+ }
-+ else
-+ append_arg (target_iter, type, c);
-+
-+ if (container_type != DBUS_TYPE_INVALID)
-+ {
-+ dbus_message_iter_close_container (&iter,
-+ &container_iter);
-+ }
-+ }
-+
-+ if (print_reply)
-+ {
-+ DBusMessage *reply;
-+
-+ dbus_error_init (&error);
-+ reply = dbus_connection_send_with_reply_and_block (connection,
-+ message, reply_timeout,
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "Error %s: %s\n",
-+ error.name,
-+ error.message);
-+ exit (1);
-+ }
-+
-+ if (reply)
-+ {
-+ print_message (reply, print_reply_literal);
-+ dbus_message_unref (reply);
-+ }
-+ }
-+ else
-+ {
-+ dbus_connection_send (connection, message, NULL);
-+ dbus_connection_flush (connection);
-+ }
-+
-+ dbus_message_unref (message);
-+
-+ dbus_connection_close (connection);
-+
-+ exit (0);
-+}
-diff -Naur dbus-0.61.orig/tools/dbus-tree-view.c dbus-0.61/tools/dbus-tree-view.c
---- dbus-0.61.orig/tools/dbus-tree-view.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-tree-view.c 2005-11-30 20:32:27.000000000 +0100
-@@ -0,0 +1,374 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-tree-view.c GtkTreeView for a D-BUS interface description
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <string.h>
-+#include <config.h>
-+#include "dbus-tree-view.h"
-+#include <glib/gi18n.h>
-+
-+enum
-+{
-+ MODEL_COLUMN_INFO,
-+
-+ MODEL_COLUMN_LAST
-+};
-+
-+enum
-+{
-+ VIEW_COLUMN_NAME,
-+
-+ VIEW_COLUMN_LAST
-+};
-+
-+/* We stuff the node tree into a GtkTreeStore, rather
-+ * than bothering to write a custom model
-+ */
-+static GtkTreeModel*
-+model_new (void)
-+{
-+ GtkTreeModel *model;
-+ GtkTreeStore *store;
-+
-+ store = gtk_tree_store_new (MODEL_COLUMN_LAST,
-+ BASE_INFO_TYPE);
-+
-+ model = GTK_TREE_MODEL (store);
-+
-+ return model;
-+}
-+
-+static void set_info (GtkTreeModel *model,
-+ GtkTreeIter *root,
-+ BaseInfo *info);
-+
-+static void
-+append_child_list (GtkTreeModel *model,
-+ GtkTreeIter *parent,
-+ GSList *children)
-+{
-+ GSList *tmp;
-+ GtkTreeStore *store;
-+
-+ store = GTK_TREE_STORE (model);
-+
-+ /* parent may be NULL for root */
-+
-+ tmp = children;
-+ while (tmp != NULL)
-+ {
-+ GtkTreeIter iter;
-+
-+ gtk_tree_store_append (store, &iter, parent);
-+
-+ set_info (model, &iter, tmp->data);
-+
-+ tmp = tmp->next;
-+ }
-+}
-+
-+static void
-+set_info (GtkTreeModel *model,
-+ GtkTreeIter *root,
-+ BaseInfo *info)
-+{
-+ GtkTreeStore *store;
-+ GtkTreeIter child;
-+
-+ store = GTK_TREE_STORE (model);
-+
-+ /* Remeber that root is NULL for "/" path */
-+
-+ /* Clear existing children */
-+ while (gtk_tree_model_iter_children (model, &child, root))
-+ gtk_tree_store_remove (store, &child);
-+
-+ /* Set our new value; we simply discard NodeInfo for "/" at the
-+ * moment.
-+ */
-+ if (root != NULL)
-+ {
-+ gtk_tree_store_set (store, root,
-+ MODEL_COLUMN_INFO, info,
-+ -1);
-+ }
-+
-+ /* Fill in new children */
-+ switch (base_info_get_type (info))
-+ {
-+ case INFO_TYPE_NODE:
-+ append_child_list (model, root,
-+ node_info_get_interfaces ((NodeInfo*)info));
-+ append_child_list (model, root,
-+ node_info_get_nodes ((NodeInfo*)info));
-+ break;
-+ case INFO_TYPE_INTERFACE:
-+ append_child_list (model, root,
-+ interface_info_get_methods ((InterfaceInfo*)info));
-+ append_child_list (model, root,
-+ interface_info_get_signals ((InterfaceInfo*)info));
-+ append_child_list (model, root,
-+ interface_info_get_properties ((InterfaceInfo*)info));
-+ break;
-+ case INFO_TYPE_METHOD:
-+ append_child_list (model, root,
-+ method_info_get_args ((MethodInfo*)info));
-+ break;
-+ case INFO_TYPE_SIGNAL:
-+ append_child_list (model, root,
-+ signal_info_get_args ((SignalInfo*)info));
-+ break;
-+ case INFO_TYPE_PROPERTY:
-+ /* no children */
-+ break;
-+ case INFO_TYPE_ARG:
-+ /* no children */
-+ break;
-+ }
-+}
-+
-+static void
-+ensure_tree_node (GtkTreeModel *model,
-+ const char **path,
-+ GtkTreeIter *iter)
-+{
-+ GtkTreeStore *store;
-+ int i;
-+ GtkTreeIter child;
-+ GtkTreeIter *parent;
-+ GtkTreeIter prev;
-+
-+ store = GTK_TREE_STORE (model);
-+
-+ /* The path[0] == NULL case for path "/" can't happen since no tree
-+ * node is created for that
-+ */
-+ g_assert (path[0] != NULL);
-+
-+ parent = NULL;
-+
-+ i = 0;
-+ while (path[i] != NULL)
-+ {
-+ gboolean found;
-+
-+ found = FALSE;
-+
-+ if (gtk_tree_model_iter_children (model, &child, parent))
-+ {
-+ /* Scan for the right path */
-+ do
-+ {
-+ BaseInfo *info;
-+
-+ info = NULL;
-+ gtk_tree_model_get (model, &child,
-+ MODEL_COLUMN_INFO, &info,
-+ -1);
-+
-+ if (info != NULL &&
-+ base_info_get_type (info) == INFO_TYPE_NODE &&
-+ strcmp (base_info_get_name (info), path[i]) == 0)
-+ {
-+ /* Found it */
-+ found = TRUE;
-+ break;
-+ }
-+ }
-+ while (gtk_tree_model_iter_next (model, &child));
-+ }
-+
-+ if (!found)
-+ {
-+ NodeInfo *node;
-+
-+ node = node_info_new (path[i]);
-+
-+ gtk_tree_store_append (store, &child, parent);
-+ gtk_tree_store_set (store, &child,
-+ MODEL_COLUMN_INFO, node,
-+ -1);
-+ }
-+
-+ prev = child;
-+ parent = &prev;
-+
-+ ++i;
-+ }
-+
-+ g_assert (parent == &prev);
-+ *iter = prev;
-+}
-+
-+static void
-+model_update (GtkTreeModel *model,
-+ const char **path,
-+ NodeInfo *node)
-+{
-+ if (path[0] == NULL)
-+ {
-+ /* Setting '/' */
-+
-+ set_info (model, NULL, (BaseInfo*) node);
-+ }
-+ else
-+ {
-+ GtkTreeIter iter;
-+ BaseInfo *old;
-+
-+ /* Be sure we have the parent node */
-+ ensure_tree_node (model, path, &iter);
-+
-+ /* Force the canonical relative path name on the node */
-+ old = NULL;
-+ gtk_tree_model_get (model, &iter,
-+ MODEL_COLUMN_INFO, &old,
-+ -1);
-+ base_info_set_name ((BaseInfo*) node,
-+ base_info_get_name (old));
-+
-+ /* Fill in the new children */
-+ set_info (model, &iter, (BaseInfo*) node);
-+ }
-+}
-+
-+static void
-+info_set_func_text (GtkTreeViewColumn *tree_column,
-+ GtkCellRenderer *cell,
-+ GtkTreeModel *model,
-+ GtkTreeIter *iter,
-+ gpointer data)
-+{
-+ BaseInfo *info;
-+ GString *str;
-+
-+ info = NULL;
-+ gtk_tree_model_get (model, iter,
-+ MODEL_COLUMN_INFO, &info,
-+ -1);
-+
-+ if (info == NULL)
-+ return;
-+
-+ str = g_string_new (NULL);
-+
-+ switch (base_info_get_type (info))
-+ {
-+ case INFO_TYPE_NODE:
-+ g_string_append (str, "<i>path</i>");
-+ break;
-+ case INFO_TYPE_INTERFACE:
-+ g_string_append (str, "<i>interface</i>");
-+ break;
-+ case INFO_TYPE_METHOD:
-+ g_string_append (str, "<i>method</i>");
-+ break;
-+ case INFO_TYPE_SIGNAL:
-+ g_string_append (str, "<i>signal</i>");
-+ break;
-+ case INFO_TYPE_PROPERTY:
-+ g_string_append (str, "<i>property</i>");
-+ g_string_append_printf (str, " <b>%s</b>",
-+ property_info_get_type ((PropertyInfo*)info));
-+ break;
-+ case INFO_TYPE_ARG:
-+ g_string_append_printf (str, "<i>arg</i> %s",
-+ arg_info_get_direction ((ArgInfo*)info) == ARG_IN ?
-+ "in" : "out");
-+ g_string_append_printf (str, " <b>%s</b>",
-+ arg_info_get_type ((ArgInfo*)info));
-+ break;
-+ }
-+
-+ g_string_append (str, " ");
-+ g_string_append (str, base_info_get_name (info));
-+
-+ g_object_set (GTK_CELL_RENDERER (cell),
-+ "markup", str->str,
-+ NULL);
-+
-+ g_string_free (str, TRUE);
-+
-+ /* base_info_unref (info); */
-+}
-+
-+GtkWidget*
-+dbus_tree_view_new (void)
-+{
-+ GtkWidget *treeview;
-+ GtkCellRenderer *cell_renderer;
-+ GtkTreeViewColumn *column;
-+
-+ treeview = gtk_tree_view_new ();
-+
-+ column = gtk_tree_view_column_new ();
-+ gtk_tree_view_column_set_title (column, _("Name"));
-+
-+ cell_renderer = gtk_cell_renderer_text_new ();
-+ gtk_tree_view_column_pack_start (column,
-+ cell_renderer,
-+ TRUE);
-+ gtk_tree_view_column_set_cell_data_func (column, cell_renderer,
-+ info_set_func_text, NULL, NULL);
-+
-+ gtk_tree_view_append_column (GTK_TREE_VIEW (treeview),
-+ column);
-+
-+ return treeview;
-+}
-+
-+void
-+dbus_tree_view_update (GtkTreeView *view,
-+ const char **path,
-+ NodeInfo *node)
-+{
-+ GtkTreeModel *model;
-+
-+ g_return_if_fail (GTK_IS_TREE_VIEW (view));
-+
-+ model = gtk_tree_view_get_model (view);
-+
-+ if (model == NULL)
-+ {
-+ model = model_new ();
-+ model_update (model, path, node);
-+ gtk_tree_view_set_model (view, model);
-+ g_object_unref (G_OBJECT (model));
-+ }
-+ else
-+ {
-+ model_update (model, path, node);
-+ }
-+}
-+
-+void
-+dbus_tree_view_clear (GtkTreeView *view)
-+{
-+ GtkTreeModel *model;
-+
-+ g_return_if_fail (GTK_IS_TREE_VIEW (view));
-+
-+ model = gtk_tree_view_get_model (view);
-+
-+ if (model != NULL)
-+ gtk_tree_store_clear (GTK_TREE_STORE (model));
-+}
-+
-diff -Naur dbus-0.61.orig/tools/dbus-tree-view.h dbus-0.61/tools/dbus-tree-view.h
---- dbus-0.61.orig/tools/dbus-tree-view.h 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-tree-view.h 2004-08-10 05:07:01.000000000 +0200
-@@ -0,0 +1,36 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-tree-view.h GtkTreeView for a D-BUS interface description
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef DBUS_TREE_VIEW_H
-+#define DBUS_TREE_VIEW_H
-+
-+#include <gtk/gtk.h>
-+#include <dbus/dbus-glib.h>
-+#include <glib/dbus-gidl.h>
-+
-+GtkWidget* dbus_tree_view_new (void);
-+void dbus_tree_view_update (GtkTreeView *view,
-+ const char **path,
-+ NodeInfo *info);
-+void dbus_tree_view_clear (GtkTreeView *view);
-+
-+#endif /* DBUS_TREE_VIEW_H */
-diff -Naur dbus-0.61.orig/tools/dbus-viewer.c dbus-0.61/tools/dbus-viewer.c
---- dbus-0.61.orig/tools/dbus-viewer.c 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/dbus-viewer.c 2005-11-30 20:32:27.000000000 +0100
-@@ -0,0 +1,617 @@
-+/* -*- mode: C; c-file-style: "gnu" -*- */
-+/* dbus-viewer.c Graphical D-BUS frontend utility
-+ *
-+ * Copyright (C) 2003 Red Hat, Inc.
-+ *
-+ * Licensed under the Academic Free License version 2.1
-+ *
-+ * 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 2 of the License, or
-+ * (at your option) 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#include <config.h>
-+#include <stdlib.h>
-+#include <errno.h>
-+#include <stdio.h>
-+#include <string.h>
-+#include <gtk/gtk.h>
-+#include "dbus-tree-view.h"
-+#include "dbus-names-model.h"
-+#include <glib/dbus-gparser.h>
-+#include <glib/dbus-gutils.h>
-+#include <dbus/dbus-glib.h>
-+#include <glib/gi18n.h>
-+
-+static void
-+show_error_dialog (GtkWindow *transient_parent,
-+ GtkWidget **weak_ptr,
-+ const char *message_format,
-+ ...)
-+{
-+ char *message;
-+ va_list args;
-+
-+ if (message_format)
-+ {
-+ va_start (args, message_format);
-+ message = g_strdup_vprintf (message_format, args);
-+ va_end (args);
-+ }
-+ else
-+ message = NULL;
-+
-+ if (weak_ptr == NULL || *weak_ptr == NULL)
-+ {
-+ GtkWidget *dialog;
-+ dialog = gtk_message_dialog_new (transient_parent,
-+ GTK_DIALOG_DESTROY_WITH_PARENT,
-+ GTK_MESSAGE_ERROR,
-+ GTK_BUTTONS_CLOSE,
-+ message);
-+
-+ g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), NULL);
-+
-+ if (weak_ptr != NULL)
-+ {
-+ *weak_ptr = dialog;
-+ g_object_add_weak_pointer (G_OBJECT (dialog), (void**)weak_ptr);
-+ }
-+
-+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-+
-+ gtk_widget_show_all (dialog);
-+ }
-+ else
-+ {
-+ g_return_if_fail (GTK_IS_MESSAGE_DIALOG (*weak_ptr));
-+
-+ gtk_label_set_text (GTK_LABEL (GTK_MESSAGE_DIALOG (*weak_ptr)->label), message);
-+
-+ gtk_window_present (GTK_WINDOW (*weak_ptr));
-+ }
-+}
-+
-+typedef struct
-+{
-+ DBusGConnection *connection;
-+
-+ GtkWidget *window;
-+ GtkWidget *treeview;
-+ GtkWidget *name_menu;
-+
-+ GtkTreeModel *names_model;
-+
-+ GtkWidget *error_dialog;
-+
-+} TreeWindow;
-+
-+
-+static void
-+tree_window_set_node (TreeWindow *w,
-+ NodeInfo *node)
-+{
-+ char **path;
-+ const char *name;
-+
-+ name = node_info_get_name (node);
-+ if (name == NULL ||
-+ name[0] != '/')
-+ {
-+ g_printerr (_("Assuming root node is at path /, since no absolute path is specified"));
-+ name = "/";
-+ }
-+
-+ path = _dbus_gutils_split_path (name);
-+
-+ dbus_tree_view_update (GTK_TREE_VIEW (w->treeview),
-+ (const char**) path,
-+ node);
-+
-+ g_strfreev (path);
-+}
-+
-+typedef struct
-+{
-+ DBusGConnection *connection;
-+ char *service_name;
-+ GError *error;
-+ NodeInfo *node;
-+ TreeWindow *window; /* Not touched from child thread */
-+} LoadFromServiceData;
-+
-+static gboolean
-+load_child_nodes (const char *service_name,
-+ NodeInfo *parent,
-+ GString *path,
-+ GError **error)
-+{
-+ DBusGConnection *connection;
-+ GSList *tmp;
-+
-+ connection = dbus_g_bus_get (DBUS_BUS_SESSION, error);
-+ if (connection == NULL)
-+ return FALSE;
-+
-+ tmp = node_info_get_nodes (parent);
-+ while (tmp != NULL)
-+ {
-+ DBusGProxy *proxy;
-+ char *data;
-+ NodeInfo *child;
-+ NodeInfo *complete_child;
-+ int save_len;
-+
-+ complete_child = NULL;
-+
-+ child = tmp->data;
-+
-+ save_len = path->len;
-+
-+ if (save_len > 1)
-+ g_string_append (path, "/");
-+ g_string_append (path, base_info_get_name ((BaseInfo*)child));
-+
-+ if (*service_name == ':')
-+ {
-+ proxy = dbus_g_proxy_new_for_name (connection,
-+ service_name,
-+ path->str,
-+ DBUS_INTERFACE_INTROSPECTABLE);
-+ g_assert (proxy != NULL);
-+ }
-+ else
-+ {
-+ proxy = dbus_g_proxy_new_for_name_owner (connection,
-+ service_name,
-+ path->str,
-+ DBUS_INTERFACE_INTROSPECTABLE,
-+ error);
-+ if (proxy == NULL)
-+ goto done;
-+ }
-+
-+ if (!dbus_g_proxy_call (proxy, "Introspect", error,
-+ G_TYPE_INVALID,
-+ G_TYPE_STRING, &data,
-+ G_TYPE_INVALID))
-+ goto done;
-+
-+ complete_child = description_load_from_string (data, -1, error);
-+ g_free (data);
-+ if (complete_child == NULL)
-+ {
-+ g_printerr ("%s\n", data);
-+ goto done;
-+ }
-+
-+ done:
-+ g_object_unref (proxy);
-+
-+ if (complete_child == NULL)
-+ return FALSE;
-+
-+ /* change complete_child's name to relative */
-+ base_info_set_name ((BaseInfo*)complete_child,
-+ base_info_get_name ((BaseInfo*)child));
-+
-+ /* Stitch in complete_child rather than child */
-+ node_info_replace_node (parent, child, complete_child);
-+ node_info_unref (complete_child); /* ref still held by parent */
-+
-+ /* Now recurse */
-+ if (!load_child_nodes (service_name, complete_child, path, error))
-+ return FALSE;
-+
-+ /* restore path */
-+ g_string_set_size (path, save_len);
-+
-+ tmp = tmp->next;
-+ }
-+
-+ return TRUE;
-+}
-+
-+static gboolean
-+load_from_service_complete_idle (void *data)
-+{
-+ /* Called in main thread */
-+ GThread *thread = data;
-+ LoadFromServiceData *d;
-+ NodeInfo *node;
-+
-+ d = g_thread_join (thread);
-+
-+ node = d->node;
-+
-+ if (d->error)
-+ {
-+ g_assert (d->node == NULL);
-+ show_error_dialog (GTK_WINDOW (d->window->window), &d->window->error_dialog,
-+ _("Unable to load \"%s\": %s\n"),
-+ d->service_name, d->error->message);
-+ g_error_free (d->error);
-+ }
-+ else
-+ {
-+ g_assert (d->error == NULL);
-+
-+ tree_window_set_node (d->window, node);
-+ node_info_unref (node);
-+ }
-+
-+ g_free (d->service_name);
-+ dbus_g_connection_unref (d->connection);
-+ g_free (d);
-+
-+ return FALSE;
-+}
-+
-+static void*
-+load_from_service_thread_func (void *thread_data)
-+{
-+ DBusGProxy *root_proxy;
-+ const char *data;
-+ NodeInfo *node;
-+ GString *path;
-+ LoadFromServiceData *lfsd;
-+
-+ lfsd = thread_data;
-+
-+ node = NULL;
-+ path = NULL;
-+
-+#if 1
-+ /* this will end up autolaunching the service when we introspect it */
-+ root_proxy = dbus_g_proxy_new_for_name (lfsd->connection,
-+ lfsd->service_name,
-+ "/",
-+ DBUS_INTERFACE_INTROSPECTABLE);
-+ g_assert (root_proxy != NULL);
-+#else
-+ /* this will be an error if the service doesn't exist */
-+ root_proxy = dbus_g_proxy_new_for_name_owner (lfsd->connection,
-+ lfsd->service_name,
-+ "/",
-+ DBUS_INTERFACE_INTROSPECTABLE,
-+ &lfsd->error);
-+ if (root_proxy == NULL)
-+ {
-+ g_printerr ("Failed to get owner of '%s'\n", lfsd->service_name);
-+ return lfsd->data;
-+ }
-+#endif
-+
-+ if (!dbus_g_proxy_call (root_proxy, "Introspect", &lfsd->error,
-+ G_TYPE_INVALID,
-+ G_TYPE_STRING, &data,
-+ G_TYPE_INVALID))
-+ {
-+ g_printerr ("Failed to Introspect() %s\n",
-+ dbus_g_proxy_get_bus_name (root_proxy));
-+ goto out;
-+ }
-+
-+ node = description_load_from_string (data, -1, &lfsd->error);
-+
-+ /* g_print ("%s\n", data); */
-+
-+ if (node == NULL)
-+ goto out;
-+
-+ base_info_set_name ((BaseInfo*)node, "/");
-+
-+ path = g_string_new ("/");
-+
-+ if (!load_child_nodes (dbus_g_proxy_get_bus_name (root_proxy),
-+ node, path, &lfsd->error))
-+ {
-+ node_info_unref (node);
-+ node = NULL;
-+ goto out;
-+ }
-+
-+ out:
-+ g_object_unref (root_proxy);
-+
-+ if (path)
-+ g_string_free (path, TRUE);
-+
-+ lfsd->node = node;
-+ g_assert (lfsd->node || lfsd->error);
-+ g_assert (lfsd->node == NULL || lfsd->error == NULL);
-+
-+ /* Add idle to main thread that will join us back */
-+ g_idle_add (load_from_service_complete_idle, g_thread_self ());
-+
-+ return lfsd;
-+}
-+
-+static void
-+start_load_from_service (TreeWindow *w,
-+ DBusGConnection *connection,
-+ const char *service_name)
-+{
-+ LoadFromServiceData *d;
-+
-+ d = g_new0 (LoadFromServiceData, 1);
-+
-+ d->connection = dbus_g_connection_ref (connection);
-+ d->service_name = g_strdup (service_name);
-+ d->error = NULL;
-+ d->node = NULL;
-+ d->window = w;
-+
-+ g_thread_create (load_from_service_thread_func, d, TRUE, NULL);
-+}
-+
-+static void
-+tree_window_set_service (TreeWindow *w,
-+ const char *service_name)
-+{
-+ start_load_from_service (w, w->connection, service_name);
-+}
-+
-+static void
-+name_combo_changed_callback (GtkComboBox *combo,
-+ TreeWindow *w)
-+{
-+ GtkTreeIter iter;
-+
-+ if (gtk_combo_box_get_active_iter (combo, &iter))
-+ {
-+ GtkTreeModel *model;
-+ char *text;
-+
-+ model = gtk_combo_box_get_model (combo);
-+ gtk_tree_model_get (model, &iter, 0, &text, -1);
-+
-+ if (text)
-+ {
-+ tree_window_set_service (w, text);
-+ g_free (text);
-+ }
-+ }
-+}
-+
-+static void
-+window_closed_callback (GtkWidget *window,
-+ TreeWindow *w)
-+{
-+ g_assert (window == w->window);
-+ w->window = NULL;
-+ gtk_main_quit ();
-+}
-+
-+static TreeWindow*
-+tree_window_new (DBusGConnection *connection,
-+ GtkTreeModel *names_model)
-+{
-+ TreeWindow *w;
-+ GtkWidget *sw;
-+ GtkWidget *vbox;
-+ GtkWidget *hbox;
-+ GtkWidget *combo;
-+
-+ /* Should use glade, blah */
-+
-+ w = g_new0 (TreeWindow, 1);
-+ w->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-+
-+ gtk_window_set_title (GTK_WINDOW (w->window), "D-BUS Viewer");
-+ gtk_window_set_default_size (GTK_WINDOW (w->window), 400, 500);
-+
-+ g_signal_connect (w->window, "destroy", G_CALLBACK (window_closed_callback),
-+ w);
-+ gtk_container_set_border_width (GTK_CONTAINER (w->window), 6);
-+
-+ vbox = gtk_vbox_new (FALSE, 6);
-+ gtk_container_add (GTK_CONTAINER (w->window), vbox);
-+
-+ /* Create names option menu */
-+ if (connection)
-+ {
-+ GtkCellRenderer *cell;
-+
-+ w->connection = connection;
-+
-+ w->names_model = names_model;
-+
-+ combo = gtk_combo_box_new_with_model (w->names_model);
-+
-+ cell = gtk_cell_renderer_text_new ();
-+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE);
-+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell,
-+ "text", 0,
-+ NULL);
-+
-+ gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0);
-+
-+ g_signal_connect (combo, "changed",
-+ G_CALLBACK (name_combo_changed_callback),
-+ w);
-+ }
-+
-+ /* Create tree view */
-+ hbox = gtk_hbox_new (FALSE, 6);
-+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
-+
-+ sw = gtk_scrolled_window_new (NULL, NULL);
-+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
-+ GTK_POLICY_AUTOMATIC,
-+ GTK_POLICY_AUTOMATIC);
-+
-+ gtk_box_pack_start (GTK_BOX (hbox), sw, TRUE, TRUE, 0);
-+
-+ w->treeview = dbus_tree_view_new ();
-+
-+ gtk_container_add (GTK_CONTAINER (sw), w->treeview);
-+
-+ /* Show everything */
-+ gtk_widget_show_all (w->window);
-+
-+ return w;
-+}
-+
-+static void
-+usage (int ecode)
-+{
-+ fprintf (stderr, "dbus-viewer [--version] [--help]\n");
-+ exit (ecode);
-+}
-+
-+static void
-+version (void)
-+{
-+ printf ("D-BUS Message Bus Viewer %s\n"
-+ "Copyright (C) 2003 Red Hat, Inc.\n"
-+ "This is free software; see the source for copying conditions.\n"
-+ "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
-+ VERSION);
-+ exit (0);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ int i;
-+ GSList *files;
-+ gboolean end_of_args;
-+ GSList *tmp;
-+ gboolean services;
-+ DBusGConnection *connection;
-+ GError *error;
-+ GtkTreeModel *names_model;
-+
-+ g_thread_init (NULL);
-+ dbus_g_thread_init ();
-+
-+ bindtextdomain (GETTEXT_PACKAGE, DBUS_LOCALEDIR);
-+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-+ textdomain (GETTEXT_PACKAGE);
-+
-+ gtk_init (&argc, &argv);
-+
-+ services = FALSE;
-+ end_of_args = FALSE;
-+ files = NULL;
-+ i = 1;
-+ while (i < argc)
-+ {
-+ const char *arg = argv[i];
-+
-+ if (!end_of_args)
-+ {
-+ if (strcmp (arg, "--help") == 0 ||
-+ strcmp (arg, "-h") == 0 ||
-+ strcmp (arg, "-?") == 0)
-+ usage (0);
-+ else if (strcmp (arg, "--version") == 0)
-+ version ();
-+ else if (strcmp (arg, "--services") == 0)
-+ services = TRUE;
-+ else if (arg[0] == '-' &&
-+ arg[1] == '-' &&
-+ arg[2] == '\0')
-+ end_of_args = TRUE;
-+ else if (arg[0] == '-')
-+ {
-+ usage (1);
-+ }
-+ else
-+ {
-+ files = g_slist_prepend (files, (char*) arg);
-+ }
-+ }
-+ else
-+ files = g_slist_prepend (files, (char*) arg);
-+
-+ ++i;
-+ }
-+
-+ if (services || files == NULL)
-+ {
-+ error = NULL;
-+ connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-+ if (connection == NULL)
-+ {
-+ g_printerr ("Could not open bus connection: %s\n",
-+ error->message);
-+ g_error_free (error);
-+ exit (1);
-+ }
-+
-+ g_assert (connection == dbus_g_bus_get (DBUS_BUS_SESSION, NULL));
-+
-+ names_model = names_model_new (connection);
-+ }
-+ else
-+ {
-+ connection = NULL;
-+ names_model = NULL;
-+ }
-+
-+ if (files == NULL)
-+ {
-+ TreeWindow *w;
-+
-+ w = tree_window_new (connection, names_model);
-+ }
-+
-+ files = g_slist_reverse (files);
-+
-+ tmp = files;
-+ while (tmp != NULL)
-+ {
-+ const char *filename;
-+ TreeWindow *w;
-+
-+ filename = tmp->data;
-+
-+ if (services)
-+ {
-+ w = tree_window_new (connection, names_model);
-+ tree_window_set_service (w, filename);
-+ }
-+ else
-+ {
-+ NodeInfo *node;
-+
-+ error = NULL;
-+ node = description_load_from_file (filename,
-+ &error);
-+
-+ if (node == NULL)
-+ {
-+ g_assert (error != NULL);
-+ show_error_dialog (NULL, NULL,
-+ _("Unable to load \"%s\": %s\n"),
-+ filename, error->message);
-+ g_error_free (error);
-+ }
-+ else
-+ {
-+ w = tree_window_new (connection, names_model);
-+ tree_window_set_node (w, node);
-+ node_info_unref (node);
-+ }
-+ }
-+
-+ tmp = tmp->next;
-+ }
-+
-+ gtk_main ();
-+
-+ return 0;
-+}
-+
-diff -Naur dbus-0.61.orig/tools/run-with-tmp-session-bus.sh dbus-0.61/tools/run-with-tmp-session-bus.sh
---- dbus-0.61.orig/tools/run-with-tmp-session-bus.sh 1970-01-01 01:00:00.000000000 +0100
-+++ dbus-0.61/tools/run-with-tmp-session-bus.sh 2005-03-17 18:48:29.000000000 +0100
-@@ -0,0 +1,65 @@
-+#! /bin/bash
-+
-+SCRIPTNAME=$0
-+WRAPPED_SCRIPT=$1
-+shift
-+
-+function die()
-+{
-+ if ! test -z "$DBUS_SESSION_BUS_PID" ; then
-+ echo "killing message bus "$DBUS_SESSION_BUS_PID >&2
-+ kill -9 $DBUS_SESSION_BUS_PID
-+ fi
-+ echo $SCRIPTNAME: $* >&2
-+ exit 1
-+}
-+
-+if test -z "$DBUS_TOP_BUILDDIR" ; then
-+ die "Must set DBUS_TOP_BUILDDIR"
-+fi
-+
-+## convenient to be able to ctrl+C without leaking the message bus process
-+trap 'die "Received SIGINT"' SIGINT
-+
-+CONFIG_FILE=./run-with-tmp-session-bus.conf
-+SERVICE_DIR="$DBUS_TOP_BUILDDIR/test/data/valid-service-files"
-+ESCAPED_SERVICE_DIR=`echo $SERVICE_DIR | sed -e 's/\//\\\\\\//g'`
-+echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2
-+
-+## create a configuration file based on the standard session.conf
-+cat $DBUS_TOP_BUILDDIR/bus/session.conf | \
-+ sed -e 's/<servicedir>.*$/<servicedir>'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \
-+ sed -e 's/<include.*$//g' \
-+ > $CONFIG_FILE
-+
-+echo "Created configuration file $CONFIG_FILE" >&2
-+
-+export PATH=$DBUS_TOP_BUILDDIR/bus:$PATH
-+## the libtool script found by the path search should already do this, but
-+export LD_LIBRARY_PATH=$DBUS_TOP_BUILDDIR/dbus/.libs:$LD_LIBRARY_PATH
-+
-+unset DBUS_SESSION_BUS_ADDRESS
-+unset DBUS_SESSION_BUS_PID
-+
-+echo "Running $DBUS_TOP_BUILDDIR/tools/dbus-launch --sh-syntax --config-file=$CONFIG_FILE" >&2
-+
-+eval `$DBUS_TOP_BUILDDIR/tools/dbus-launch --sh-syntax --config-file=$CONFIG_FILE`
-+
-+if test -z "$DBUS_SESSION_BUS_PID" ; then
-+ die "Failed to launch message bus for introspection generation to run"
-+fi
-+
-+echo "Started bus pid $DBUS_SESSION_BUS_PID at $DBUS_SESSION_BUS_ADDRESS" >&2
-+
-+# Execute wrapped script
-+echo "Running $WRAPPED_SCRIPT $@" >&2
-+$WRAPPED_SCRIPT "$@" || die "script \"$WRAPPED_SCRIPT\" failed"
-+
-+kill -TERM $DBUS_SESSION_BUS_PID || die "Message bus vanished! should not have happened" && echo "Killed daemon $DBUS_SESSION_BUS_PID" >&2
-+
-+sleep 2
-+
-+## be sure it really died
-+kill -9 $DBUS_SESSION_BUS_PID > /dev/null 2>&1 || true
-+
-+exit 0
+
+ @HAVE_QT_TRUE@%.moc: %.h
+ @HAVE_QT_TRUE@ $(QT_MOC) $< > $@
More information about the Pkg-utopia-commits
mailing list