Hello community,

here is the log from the commit of package libzypp for openSUSE:Factory checked 
in at 2011-11-14 13:16:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libzypp (Old)
 and      /work/SRC/openSUSE:Factory/.libzypp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libzypp", Maintainer is "[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libzypp/libzypp.changes  2011-11-07 
17:24:58.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libzypp.new/libzypp.changes     2011-11-14 
13:17:00.000000000 +0100
@@ -1,0 +2,8 @@
+Fri Nov 11 13:38:42 CET 2011 - [email protected]
+
+- Try to find and use some CD/DVD device even if HAL/UDEV detection 
+  fails (bnc#724807)
+- Static initialization problem fixes (by Harald Fernengel)
+- version 10.3.4 (3)
+
+-------------------------------------------------------------------

Old:
----
  libzypp-10.3.3.tar.bz2

New:
----
  libzypp-10.3.4.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libzypp.spec ++++++
--- /var/tmp/diff_new_pack.PEUGng/_old  2011-11-14 13:17:02.000000000 +0100
+++ /var/tmp/diff_new_pack.PEUGng/_new  2011-11-14 13:17:02.000000000 +0100
@@ -23,7 +23,7 @@
 Group:          System/Packages
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Summary:        Package, Patch, Pattern, and Product Management
-Version:        10.3.3
+Version:        10.3.4
 Release:        1
 Source:         %{name}-%{version}.tar.bz2
 Source1:        %{name}-rpmlintrc

++++++ libzypp-10.3.3.tar.bz2 -> libzypp-10.3.4.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/VERSION.cmake 
new/libzypp-10.3.4/VERSION.cmake
--- old/libzypp-10.3.3/VERSION.cmake    2011-11-07 15:56:50.000000000 +0100
+++ new/libzypp-10.3.4/VERSION.cmake    2011-11-11 13:47:39.000000000 +0100
@@ -61,8 +61,8 @@
 SET(LIBZYPP_MAJOR "10")
 SET(LIBZYPP_COMPATMINOR "3")
 SET(LIBZYPP_MINOR "3")
-SET(LIBZYPP_PATCH "3")
+SET(LIBZYPP_PATCH "4")
 #
-# LAST RELEASED: 10.3.3 (3)
+# LAST RELEASED: 10.3.4 (3)
 # (The number in parenthesis is LIBZYPP_COMPATMINOR)
 #=======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/doc/autodoc/Doxyfile.cmake 
new/libzypp-10.3.4/doc/autodoc/Doxyfile.cmake
--- old/libzypp-10.3.3/doc/autodoc/Doxyfile.cmake       2011-11-07 
15:56:51.000000000 +0100
+++ new/libzypp-10.3.4/doc/autodoc/Doxyfile.cmake       2011-11-11 
13:47:40.000000000 +0100
@@ -89,8 +89,8 @@
 SOURCE_BROWSER         = YES
 INLINE_SOURCES         = NO
 STRIP_CODE_COMMENTS    = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
 USE_HTAGS              = NO
 VERBATIM_HEADERS       = NO
 #---------------------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/package/libzypp.changes 
new/libzypp-10.3.4/package/libzypp.changes
--- old/libzypp-10.3.3/package/libzypp.changes  2011-11-07 15:56:50.000000000 
+0100
+++ new/libzypp-10.3.4/package/libzypp.changes  2011-11-11 13:47:39.000000000 
+0100
@@ -1,4 +1,12 @@
 -------------------------------------------------------------------
+Fri Nov 11 13:38:42 CET 2011 - [email protected]
+
+- Try to find and use some CD/DVD device even if HAL/UDEV detection 
+  fails (bnc#724807)
+- Static initialization problem fixes (by Harald Fernengel)
+- version 10.3.4 (3)
+
+-------------------------------------------------------------------
 Mon Nov  7 15:45:28 CET 2011 - [email protected]
 
 - Don't use proxy if disabled (bnc#696805)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/zypp/Arch.cc 
new/libzypp-10.3.4/zypp/Arch.cc
--- old/libzypp-10.3.3/zypp/Arch.cc     2011-11-07 15:56:51.000000000 +0100
+++ new/libzypp-10.3.4/zypp/Arch.cc     2011-11-11 13:47:41.000000000 +0100
@@ -152,7 +152,7 @@
     // NOTE: Thake care CompatBits::IntT is able to provide one
     //       bit for each architecture.
     //
-#define DEF_BUILTIN(A) const IdString  _##A( #A );
+#define DEF_BUILTIN(A) static inline const IdString & _##A () { static 
IdString __str(#A); return __str; }
     DEF_BUILTIN( noarch );
 
     DEF_BUILTIN( i386 );
@@ -273,63 +273,63 @@
         // _noarch must have _idBit 0.
         // Other builtins have 1-bit set
         // and are initialized done on the fly.
-        _compatSet.insert( Arch::CompatEntry( _noarch, 0 ) );
+        _compatSet.insert( Arch::CompatEntry( _noarch(), 0 ) );
         ///////////////////////////////////////////////////////////////////
         // Define the CompatibleWith relation:
         //
         // NOTE: Order of definition is significant! (Arch::compare)
        //       - define compatible (less) architectures first!
         //
-        defCompatibleWith( _i386,      _noarch );
-        defCompatibleWith( _i486,      _noarch,_i386 );
-        defCompatibleWith( _i586,      _noarch,_i386,_i486 );
-        defCompatibleWith( _i686,      _noarch,_i386,_i486,_i586 );
-        defCompatibleWith( _athlon,    _noarch,_i386,_i486,_i586,_i686 );
-        defCompatibleWith( _x86_64,    _noarch,_i386,_i486,_i586,_i686,_athlon 
);
+        defCompatibleWith( _i386(),            _noarch() );
+        defCompatibleWith( _i486(),            _noarch(),_i386() );
+        defCompatibleWith( _i586(),            _noarch(),_i386(),_i486() );
+        defCompatibleWith( _i686(),            
_noarch(),_i386(),_i486(),_i586() );
+        defCompatibleWith( _athlon(),          
_noarch(),_i386(),_i486(),_i586(),_i686() );
+        defCompatibleWith( _x86_64(),          
_noarch(),_i386(),_i486(),_i586(),_i686(),_athlon() );
 
-        defCompatibleWith( _pentium3,  _noarch,_i386,_i486,_i586,_i686 );
-        defCompatibleWith( _pentium4,  
_noarch,_i386,_i486,_i586,_i686,_pentium3 );
+        defCompatibleWith( _pentium3(),                
_noarch(),_i386(),_i486(),_i586(),_i686() );
+        defCompatibleWith( _pentium4(),                
_noarch(),_i386(),_i486(),_i586(),_i686(),_pentium3() );
 
-        defCompatibleWith( _ia64,      _noarch,_i386,_i486,_i586,_i686 );
+        defCompatibleWith( _ia64(),            
_noarch(),_i386(),_i486(),_i586(),_i686() );
         //
-        defCompatibleWith( _s390,      _noarch );
-        defCompatibleWith( _s390x,     _noarch,_s390 );
+        defCompatibleWith( _s390(),            _noarch() );
+        defCompatibleWith( _s390x(),           _noarch(),_s390() );
         //
-        defCompatibleWith( _ppc,       _noarch );
-        defCompatibleWith( _ppc64,     _noarch,_ppc );
+        defCompatibleWith( _ppc(),             _noarch() );
+        defCompatibleWith( _ppc64(),           _noarch(),_ppc() );
         //
-        defCompatibleWith( _alpha,     _noarch );
-        defCompatibleWith( _alphaev5,  _noarch,_alpha );
-        defCompatibleWith( _alphaev56, _noarch,_alpha,_alphaev5 );
-        defCompatibleWith( _alphapca56,        
_noarch,_alpha,_alphaev5,_alphaev56 );
-        defCompatibleWith( _alphaev6,  
_noarch,_alpha,_alphaev5,_alphaev56,_alphapca56 );
-        defCompatibleWith( _alphaev67, 
_noarch,_alpha,_alphaev5,_alphaev56,_alphapca56,_alphaev6 );
+        defCompatibleWith( _alpha(),           _noarch() );
+        defCompatibleWith( _alphaev5(),                _noarch(),_alpha() );
+        defCompatibleWith( _alphaev56(),       _noarch(),_alpha(),_alphaev5() 
);
+        defCompatibleWith( _alphapca56(),      
_noarch(),_alpha(),_alphaev5(),_alphaev56() );
+        defCompatibleWith( _alphaev6(),                
_noarch(),_alpha(),_alphaev5(),_alphaev56(),_alphapca56() );
+        defCompatibleWith( _alphaev67(),       
_noarch(),_alpha(),_alphaev5(),_alphaev56(),_alphapca56(),_alphaev6() );
         //
-        defCompatibleWith( _sparc,     _noarch );
-        defCompatibleWith( _sparcv8,   _noarch,_sparc );
-        defCompatibleWith( _sparcv9,   _noarch,_sparc,_sparcv8 );
-       defCompatibleWith( _sparcv9v,   _noarch,_sparc,_sparcv8,_sparcv9 );
+        defCompatibleWith( _sparc(),           _noarch() );
+        defCompatibleWith( _sparcv8(),         _noarch(),_sparc() );
+        defCompatibleWith( _sparcv9(),         _noarch(),_sparc(),_sparcv8() );
+       defCompatibleWith( _sparcv9v(),         
_noarch(),_sparc(),_sparcv8(),_sparcv9() );
        //
-        defCompatibleWith( _sparc64,   _noarch,_sparc,_sparcv8,_sparcv9 );
-       defCompatibleWith( _sparc64v,   
_noarch,_sparc,_sparcv8,_sparcv9,_sparcv9v,_sparc64 );
+        defCompatibleWith( _sparc64(),         
_noarch(),_sparc(),_sparcv8(),_sparcv9() );
+       defCompatibleWith( _sparc64v(),         
_noarch(),_sparc(),_sparcv8(),_sparcv9(),_sparcv9v(),_sparc64() );
         //
-        defCompatibleWith( _armv3l,    _noarch );
-        defCompatibleWith( _armv4l,    _noarch,_armv3l );
-        defCompatibleWith( _armv4tl,   _noarch,_armv3l,_armv4l );
-        defCompatibleWith( _armv5l,    _noarch,_armv3l,_armv4l,_armv4tl );
-        defCompatibleWith( _armv5tel,  
_noarch,_armv3l,_armv4l,_armv4tl,_armv5l );
-        defCompatibleWith( _armv5tejl, 
_noarch,_armv3l,_armv4l,_armv4tl,_armv5l,_armv5tel );
-        defCompatibleWith( _armv6l,    
_noarch,_armv3l,_armv4l,_armv4tl,_armv5l,_armv5tel,_armv5tejl );
-        defCompatibleWith( _armv7l,    
_noarch,_armv3l,_armv4l,_armv4tl,_armv5l,_armv5tel,_armv5tejl,_armv6l );
-        defCompatibleWith( _armv7hl,    _noarch );
-        defCompatibleWith( _armv7nhl,   _noarch,_armv7hl );
-        defCompatibleWith( _armv7thl,   _noarch,_armv7hl );
-        defCompatibleWith( _armv7tnhl,  _noarch,_armv7hl,_armv7nhl,_armv7thl);
+        defCompatibleWith( _armv3l(),          _noarch() );
+        defCompatibleWith( _armv4l(),          _noarch(),_armv3l() );
+        defCompatibleWith( _armv4tl(),         _noarch(),_armv3l(),_armv4l() );
+        defCompatibleWith( _armv5l(),          
_noarch(),_armv3l(),_armv4l(),_armv4tl() );
+        defCompatibleWith( _armv5tel(),                
_noarch(),_armv3l(),_armv4l(),_armv4tl(),_armv5l() );
+        defCompatibleWith( _armv5tejl(),       
_noarch(),_armv3l(),_armv4l(),_armv4tl(),_armv5l(),_armv5tel() );
+        defCompatibleWith( _armv6l(),          
_noarch(),_armv3l(),_armv4l(),_armv4tl(),_armv5l(),_armv5tel(),_armv5tejl() );
+        defCompatibleWith( _armv7l(),          
_noarch(),_armv3l(),_armv4l(),_armv4tl(),_armv5l(),_armv5tel(),_armv5tejl(),_armv6l()
 );
+        defCompatibleWith( _armv7hl(),         _noarch() );
+        defCompatibleWith( _armv7nhl(),                _noarch(),_armv7hl() );
+        defCompatibleWith( _armv7thl(),                _noarch(),_armv7hl() );
+        defCompatibleWith( _armv7tnhl(),       
_noarch(),_armv7hl(),_armv7nhl(),_armv7thl() );
         //
-        defCompatibleWith( _sh3,       _noarch );
+        defCompatibleWith( _sh3(),             _noarch() );
         //
-        defCompatibleWith( _sh4,       _noarch );
-        defCompatibleWith( _sh4a,      _noarch,_sh4 );
+        defCompatibleWith( _sh4(),             _noarch() );
+        defCompatibleWith( _sh4a(),            _noarch(),_sh4() );
         //
         ///////////////////////////////////////////////////////////////////
         // dumpOn( USR ) << endl;
@@ -396,57 +396,57 @@
   ///////////////////////////////////////////////////////////////////
 
   const Arch Arch_empty ( IdString::Empty );
-  const Arch Arch_noarch( _noarch );
+  const Arch Arch_noarch( _noarch() );
 
-  const Arch Arch_i386( _i386 );
-  const Arch Arch_i486( _i486 );
-  const Arch Arch_i586( _i586 );
-  const Arch Arch_i686( _i686 );
-  const Arch Arch_athlon( _athlon );
-  const Arch Arch_x86_64( _x86_64 );
-
-  const Arch Arch_pentium3( _pentium3 );
-  const Arch Arch_pentium4( _pentium4 );
-
-  const Arch Arch_s390( _s390 );
-  const Arch Arch_s390x( _s390x );
-
-  const Arch Arch_ppc( _ppc );
-  const Arch Arch_ppc64( _ppc64 );
-
-  const Arch Arch_ia64( _ia64 );
-
-  const Arch Arch_alphaev67( _alphaev67 );
-  const Arch Arch_alphaev6( _alphaev6 );
-  const Arch Arch_alphapca56( _alphapca56 );
-  const Arch Arch_alphaev56( _alphaev56 );
-  const Arch Arch_alphaev5( _alphaev5 );
-  const Arch Arch_alpha( _alpha );
-
-  const Arch Arch_sparc64v( _sparc64v );
-  const Arch Arch_sparc64( _sparc64 );
-  const Arch Arch_sparcv9v( _sparcv9v );
-  const Arch Arch_sparcv9( _sparcv9 );
-  const Arch Arch_sparcv8( _sparcv8 );
-  const Arch Arch_sparc( _sparc );
-
-  const Arch Arch_armv7tnhl( _armv7tnhl );
-  const Arch Arch_armv7thl( _armv7thl );
-  const Arch Arch_armv7nhl( _armv7nhl );
-  const Arch Arch_armv7hl( _armv7hl );
-  const Arch Arch_armv7l( _armv7l );
-  const Arch Arch_armv6l( _armv6l );
-  const Arch Arch_armv5tejl( _armv5tejl );
-  const Arch Arch_armv5tel( _armv5tel );
-  const Arch Arch_armv5l( _armv5l );
-  const Arch Arch_armv4tl( _armv4tl );
-  const Arch Arch_armv4l( _armv4l );
-  const Arch Arch_armv3l( _armv3l );
+  const Arch Arch_i386( _i386() );
+  const Arch Arch_i486( _i486() );
+  const Arch Arch_i586( _i586() );
+  const Arch Arch_i686( _i686() );
+  const Arch Arch_athlon( _athlon() );
+  const Arch Arch_x86_64( _x86_64() );
+
+  const Arch Arch_pentium3( _pentium3() );
+  const Arch Arch_pentium4( _pentium4() );
+
+  const Arch Arch_s390( _s390() );
+  const Arch Arch_s390x( _s390x() );
+
+  const Arch Arch_ppc( _ppc() );
+  const Arch Arch_ppc64( _ppc64() );
+
+  const Arch Arch_ia64( _ia64() );
+
+  const Arch Arch_alphaev67( _alphaev67() );
+  const Arch Arch_alphaev6( _alphaev6() );
+  const Arch Arch_alphapca56( _alphapca56() );
+  const Arch Arch_alphaev56( _alphaev56() );
+  const Arch Arch_alphaev5( _alphaev5() );
+  const Arch Arch_alpha( _alpha() );
+
+  const Arch Arch_sparc64v( _sparc64v() );
+  const Arch Arch_sparc64( _sparc64() );
+  const Arch Arch_sparcv9v( _sparcv9v() );
+  const Arch Arch_sparcv9( _sparcv9() );
+  const Arch Arch_sparcv8( _sparcv8() );
+  const Arch Arch_sparc( _sparc() );
+
+  const Arch Arch_armv7tnhl( _armv7tnhl() );
+  const Arch Arch_armv7thl( _armv7thl() );
+  const Arch Arch_armv7nhl ( _armv7nhl() );
+  const Arch Arch_armv7hl ( _armv7hl() );
+  const Arch Arch_armv7l( _armv7l() );
+  const Arch Arch_armv6l( _armv6l() );
+  const Arch Arch_armv5tejl( _armv5tejl() );
+  const Arch Arch_armv5tel( _armv5tel() );
+  const Arch Arch_armv5l( _armv5l() );
+  const Arch Arch_armv4tl( _armv4tl() );
+  const Arch Arch_armv4l( _armv4l() );
+  const Arch Arch_armv3l( _armv3l() );
 
-  const Arch Arch_sh3( _sh3 );
+  const Arch Arch_sh3( _sh3() );
 
-  const Arch Arch_sh4( _sh4 );
-  const Arch Arch_sh4a( _sh4a );
+  const Arch Arch_sh4( _sh4() );
+  const Arch Arch_sh4a( _sh4a() );
 
   ///////////////////////////////////////////////////////////////////
   //
@@ -454,7 +454,7 @@
   //   METHOD TYPE : Ctor
   //
   Arch::Arch()
-  : _entry( &ArchCompatSet::instance().assertDef( _noarch ) )
+  : _entry( &ArchCompatSet::instance().assertDef( _noarch() ) )
   {}
 
   Arch::Arch( IdString::IdType id_r )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/zypp/Url.cc 
new/libzypp-10.3.4/zypp/Url.cc
--- old/libzypp-10.3.3/zypp/Url.cc      2011-11-07 15:56:51.000000000 +0100
+++ new/libzypp-10.3.4/zypp/Url.cc      2011-11-11 13:47:41.000000000 +0100
@@ -379,7 +379,7 @@
     catch( ... )
     {}
 
-    if(ret && out.size() == 5)
+    if(ret && out.size() == 6)
     {
       std::string scheme = out[1];
       if (scheme.size() > 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/zypp/base/Regex.cc 
new/libzypp-10.3.4/zypp/base/Regex.cc
--- old/libzypp-10.3.3/zypp/base/Regex.cc       2011-11-07 15:56:51.000000000 
+0100
+++ new/libzypp-10.3.4/zypp/base/Regex.cc       2011-11-11 13:47:40.000000000 
+0100
@@ -85,15 +85,14 @@
 
 unsigned smatch::size() const
 {
-  unsigned matches = 0;
+  unsigned matches = unsigned(-1);
   // Get highest (pmatch[i].rm_so != -1). Just looking for the 1st
   // (pmatch[i].rm_so == -1) is wrong as optional mayches "()?"
   // may be embeded.
-  // NOTE: index is submatch size beacause match[0] is not counted
   for ( unsigned i = 0; i < sizeof(pmatch)/sizeof(*pmatch); ++i )
   {
     if ( pmatch[i].rm_so != -1 )
       matches = i;
   }
-  return matches;
+  return ++matches;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/zypp/base/Regex.h 
new/libzypp-10.3.4/zypp/base/Regex.h
--- old/libzypp-10.3.3/zypp/base/Regex.h        2011-11-07 15:56:51.000000000 
+0100
+++ new/libzypp-10.3.4/zypp/base/Regex.h        2011-11-11 13:47:40.000000000 
+0100
@@ -18,73 +18,82 @@
 
 #include "zypp/base/Exception.h"
 
-///////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////
 namespace zypp
-{ /////////////////////////////////////////////////////////////////
-  ///////////////////////////////////////////////////////////////////
-  /** String related utilities and \ref ZYPP_STR_REGEX.
-   \see \ref ZYPP_STR_REGEX
-  */
+{
+  //////////////////////////////////////////////////////////////////
+  /// \namespace str
+  /// \brief String related utilities and \ref ZYPP_STR_REGEX.
   namespace str
-  { /////////////////////////////////////////////////////////////////
-
-    ///////////////////////////////////////////////////////////////////
-    /** \defgroup ZYPP_STR_REGEX Regular expressions
-     *
-     * \brief Namespace zypp::str regular expressions \b using the glibc regex 
library.
-     * \see also \ref sat::AttrMatcher string matcher supporing regex, 
globing, etc.
-     *
-     * \code
-     *  str::regex rxexpr( "^(A)?([0-9]*) im" );
-     *  str::smatch what;
-     *
-     *  std::string mytext( "Y123 imXXXX" );
-     *  if ( str::regex_match( mytext, what, rxexpr ) )
-     *  {
-     *    MIL << "MATCH '" << what[0] << "'" << endl;
-     *    MIL << " subs: " << what.size()-1 << endl;
-     *    for_( i, 1U, what.size() )
-     *      MIL << "      [" << i << "] " << what[i] << endl;
-     *  }
-     *  else
-     *  {
-     *    WAR << "NO MATCH '" << rxexpr << "' in '" <<  mytext << endl;
-     *  }
-     * \endcode
-     */
+  {
+    //////////////////////////////////////////////////////////////////
+    /// \defgroup ZYPP_STR_REGEX Regular expression matching
+    /// \brief Regular expressions using the glibc regex library.
+    ///
+    /// \see also \ref sat::AttrMatcher string matcher also supporting 
globing, etc.
+    ///
+    /// \code
+    ///  str::regex rxexpr( "^(A)?([0-9]*) im" );
+    ///  str::smatch what;
+    ///
+    ///  std::string mytext( "Y123 imXXXX" );
+    ///  if ( str::regex_match( mytext, what, rxexpr ) )
+    ///  {
+    ///    MIL << "MATCH '" << what[0] << "'" << endl;
+    ///    MIL << " subs: " << what.size()-1 << endl;
+    ///    for_( i, 1U, what.size() )
+    ///      MIL << "      [" << i << "] " << what[i] << endl;
+    ///  }
+    ///  else
+    ///  {
+    ///    WAR << "NO MATCH '" << rxexpr << "' in '" <<  mytext << endl;
+    ///  }
+    /// \endcode
+    //////////////////////////////////////////////////////////////////
 
     typedef Exception regex_error;
 
     class smatch;
     class regex;
 
-    /**
-     * \ingroup ZYPP_STR_REGEX
-     */
-    bool regex_match(const char * s, str::smatch& matches, const regex& regex);
-    inline bool regex_match(const std::string& s, str::smatch& matches, const 
regex& regex)
+    //////////////////////////////////////////////////////////////////
+    /// \brief Regular expression matching
+    ///
+    /// \ingroup ZYPP_STR_REGEX
+    /// \relates regex
+    /// Return whether a \ref regex matches a specific string. An optionally
+    /// passed \ref smatch object will contain the match reults.
+    //////////////////////////////////////////////////////////////////
+    bool regex_match( const char * s, smatch & matches, const regex & regex );
+
+    /** \copydoc regex_match \relates regex \ingroup ZYPP_STR_REGEX */
+    inline bool regex_match(const std::string & s, smatch & matches, const 
regex & regex)
     { return regex_match( s.c_str(), matches, regex ); }
 
-    /**
-     * \ingroup ZYPP_STR_REGEX
-     */
-    bool regex_match(const char * s, const regex& regex);
-    inline bool regex_match(const std::string& s, const regex& regex)
+    /** \copydoc regex_match \relates regex \ingroup ZYPP_STR_REGEX */
+    bool regex_match( const char * s, const regex & regex );
+
+    /** \copydoc regex_match \relates regex \ingroup ZYPP_STR_REGEX */
+    inline bool regex_match( const std::string & s, const regex & regex )
     { return regex_match( s.c_str(), regex ); }
 
-    /**
-     * \ingroup ZYPP_STR_REGEX
-     */
-    class regex {
+    //////////////////////////////////////////////////////////////////
+    /// \class regex
+    /// \brief Regular expression
+    ///
+    /// \ingroup ZYPP_STR_REGEX
+    //////////////////////////////////////////////////////////////////
+    class regex
+    {
     public:
 
       enum RegFlags {
-        optimize = 0,
-        match_extra = 0,
-        icase = REG_ICASE,
-        nosubs = REG_NOSUB,
-        match_extended = REG_EXTENDED,
-        normal = 1<<16
+        optimize       = 0,            ///< \deprecated legacy, obsolete
+        match_extra    = 0,            ///< \deprecated legacy, obsolete
+        icase          = REG_ICASE,    ///< Do not differentiate case
+        nosubs         = REG_NOSUB,    ///< Support for substring addressing 
of matches is not required
+        match_extended = REG_EXTENDED, ///< Use POSIX Extended Regular 
Expression syntax when interpreting regex.
+        normal         = 1<<16         ///< \deprecated legacy, use 
match_extended
       };
 
       regex();
@@ -125,10 +134,19 @@
     inline std::ostream & operator<<( std::ostream & str, const regex & obj )
     { return str << obj.asString(); }
 
-    /**
-     * \ingroup ZYPP_STR_REGEX
-     */
-    class smatch {
+    //////////////////////////////////////////////////////////////////
+    /// \class smatch
+    /// \brief Regular expression match result
+    ///
+    /// \ingroup ZYPP_STR_REGEX
+    ///
+    /// Index \c n=0 returns the string object representing the character
+    /// sequence that matched the whole regular expression.
+    /// If \c n is out of range, or if \c n is an unmatched sub-expression,
+    /// then an empty string is returned.
+    //////////////////////////////////////////////////////////////////
+    class smatch
+    {
     public:
       smatch();
 
@@ -140,12 +158,8 @@
       regmatch_t pmatch[12];
     };
 
-
-
-    /////////////////////////////////////////////////////////////////
   } // namespace str
-  ///////////////////////////////////////////////////////////////////
-  /////////////////////////////////////////////////////////////////
+  //////////////////////////////////////////////////////////////////
 } // namespace zypp
-///////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////
 #endif // ZYPP_BASE_STRING_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/zypp/media/CredentialManager.cc 
new/libzypp-10.3.4/zypp/media/CredentialManager.cc
--- old/libzypp-10.3.3/zypp/media/CredentialManager.cc  2011-11-07 
15:56:51.000000000 +0100
+++ new/libzypp-10.3.4/zypp/media/CredentialManager.cc  2011-11-11 
13:47:41.000000000 +0100
@@ -39,16 +39,16 @@
   //
   //////////////////////////////////////////////////////////////////////
 
-  const url::ViewOption AuthDataComparator::vopt =
-    url::ViewOption::DEFAULTS
-    - url::ViewOption::WITH_USERNAME
-    - url::ViewOption::WITH_PASSWORD
-    - url::ViewOption::WITH_QUERY_STR;
-
   bool
   AuthDataComparator::operator()(
       const AuthData_Ptr & lhs, const AuthData_Ptr & rhs)
   {
+    static const url::ViewOption vopt =
+        url::ViewOption::DEFAULTS
+        - url::ViewOption::WITH_USERNAME
+        - url::ViewOption::WITH_PASSWORD
+        - url::ViewOption::WITH_QUERY_STR;
+
     if (lhs->username() != rhs->username())
       return true;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/zypp/media/CredentialManager.h 
new/libzypp-10.3.4/zypp/media/CredentialManager.h
--- old/libzypp-10.3.3/zypp/media/CredentialManager.h   2011-11-07 
15:56:51.000000000 +0100
+++ new/libzypp-10.3.4/zypp/media/CredentialManager.h   2011-11-11 
13:47:41.000000000 +0100
@@ -48,7 +48,6 @@
   // comparator for CredentialSet
   struct AuthDataComparator
   {
-    static const url::ViewOption vopt;
     bool operator()(const AuthData_Ptr & lhs, const AuthData_Ptr & rhs);
   };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/zypp/media/MediaCD.cc 
new/libzypp-10.3.4/zypp/media/MediaCD.cc
--- old/libzypp-10.3.3/zypp/media/MediaCD.cc    2011-11-07 15:56:51.000000000 
+0100
+++ new/libzypp-10.3.4/zypp/media/MediaCD.cc    2011-11-11 13:47:41.000000000 
+0100
@@ -52,59 +52,180 @@
 
 using namespace std;
 
-namespace zypp {
-  namespace media {
+//////////////////////////////////////////////////////////////////
+namespace zypp
+{
+  //////////////////////////////////////////////////////////////////
+  namespace media
+  {
+
+    //////////////////////////////////////////////////////////////////
+    namespace
+    {
+      typedef std::list<MediaSource> DeviceList;
+
+      //////////////////////////////////////////////////////////////////
+      /// \brief Try to detect cd/dvd devices using hal/udev
+      ///
+      /// Returns an empty device list on error.
+      ///
+      /// \todo I took the code more or less as it was from 
MediaCD::detectDevices
+      /// into this function. Semantic between HAL and UDEV seems to be 
slightly
+      /// different, esp. in supportingDVD mode. This should be investigated 
and fixed.
+      //////////////////////////////////////////////////////////////////
+      DeviceList systemDetectDevices( bool supportingDVD_r )
+      {
+       DeviceList detected;
 
-///////////////////////////////////////////////////////////////////
-//
-//  CLASS NAME : MediaCD
-//
-///////////////////////////////////////////////////////////////////
+#ifdef HAVE_UDEV
+       // 
http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/index.html
+       zypp::AutoDispose<struct udev *> udev( ::udev_new(), ::udev_unref );
+       if ( ! udev )
+       {
+         ERR << "Can't create udev context." << endl;
+         return DeviceList();
+       }
+
+       zypp::AutoDispose<struct udev_enumerate *> enumerate( 
::udev_enumerate_new(udev), ::udev_enumerate_unref );
+       if ( ! enumerate )
+       {
+         ERR << "Can't create udev list entry." << endl;
+         return DeviceList();
+       }
+
+       ::udev_enumerate_add_match_subsystem( enumerate, "block" );
+       ::udev_enumerate_add_match_property( enumerate, "ID_CDROM", "1" );
+       ::udev_enumerate_scan_devices( enumerate );
+
+       struct udev_list_entry * entry = 0;
+       udev_list_entry_foreach( entry, ::udev_enumerate_get_list_entry( 
enumerate ) )
+       {
+         zypp::AutoDispose<struct udev_device *> device( 
::udev_device_new_from_syspath( ::udev_enumerate_get_udev( enumerate ),
+                                                                               
          ::udev_list_entry_get_name( entry ) ),
+                                                         ::udev_device_unref );
+         if ( ! device )
+         {
+           ERR << "Can't create udev device." << endl;
+           continue;
+         }
+
+         if ( supportingDVD_r && ! ::udev_device_get_property_value( device, 
"ID_CDROM_DVD" ) )
+         {
+           continue;   // looking for dvd only
+         }
+
+         const char * devnodePtr( ::udev_device_get_devnode( device ) );
+         if ( ! devnodePtr )
+         {
+           ERR << "Got NULL devicenode." << endl;
+           continue;
+         }
+
+         // In case we need it someday:
+         //const char * mountpath = ::udev_device_get_property_value( device, 
"FSTAB_DIR" );
+
+         PathInfo devnode( devnodePtr );
+         if ( devnode.isBlk() )
+         {
+           MediaSource media( "cdrom", devnode.path().asString(), 
devnode.major(), devnode.minor() );
+           DBG << "Found (udev): " << media << std::endl;
+           detected.push_back( media );
+         }
+       }
+       if ( detected.empty() )
+       {
+         WAR << "Did not find any CD/DVD device." << endl;
+       }
+#elif HAVE_HAL
+       using namespace zypp::target::hal;
+       try
+       {
+         HalContext hal(true);
+
+         std::vector<std::string> drv_udis;
+         drv_udis = hal.findDevicesByCapability("storage.cdrom");
+
+         DBG << "Found " << drv_udis.size() << " cdrom drive udis" << 
std::endl;
+         for(size_t d = 0; d < drv_udis.size(); d++)
+         {
+           HalDrive drv( hal.getDriveFromUDI( drv_udis[d]));
+
+           if( drv)
+           {
+             bool supportsDVD=false;
+             if( supportingDVD_r)
+             {
+               std::vector<std::string> caps;
+               try {
+                 caps = drv.getCdromCapabilityNames();
+               }
+               catch(const HalException &e)
+               {
+                 ZYPP_CAUGHT(e);
+               }
+
+               std::vector<std::string>::const_iterator ci;
+               for( ci=caps.begin(); ci != caps.end(); ++ci)
+               {
+                 if( *ci == "dvd")
+                   supportsDVD = true;
+               }
+             }
+
+             MediaSource media("cdrom", drv.getDeviceFile(),
+                     drv.getDeviceMajor(),
+                     drv.getDeviceMinor());
+                 DBG << "Found " << drv_udis[d] << ": "
+                 << media.asString() << std::endl;
+                 if( supportingDVD_r && supportsDVD)
+                 {
+                   detected.push_front(media);
+                 }
+                 else
+                 {
+                   detected.push_back(media);
+                 }
+           }
+         }
+       }
+       catch(const zypp::target::hal::HalException &e)
+       {
+         ZYPP_CAUGHT(e);
+       }
+#endif
+       return detected;
+      }
 
+    } // namespace
+    //////////////////////////////////////////////////////////////////
 
-  ///////////////////////////////////////////////////////////////////
-  //
-  //
-  //  METHOD NAME : MediaCD::MediaCD
-  //  METHOD TYPE : Constructor
-  //
-  //  DESCRIPTION :
-  //
-  MediaCD::MediaCD( const Url &      url_r,
-                    const Pathname & attach_point_hint_r )
-    : MediaHandler( url_r, attach_point_hint_r,
-                    url_r.getPathName(), // urlpath below attachpoint
-                    false ),
-      _lastdev(-1), _lastdev_tried(-1)
+
+  MediaCD::MediaCD( const Url & url_r, const Pathname & attach_point_hint_r )
+    : MediaHandler( url_r, attach_point_hint_r, url_r.getPathName(), false )
+    , _lastdev( -1 )
+    , _lastdev_tried( -1 )
   {
-    MIL << "MediaCD::MediaCD(" << url_r << ", " << attach_point_hint_r << ")"
-        << endl;
+    MIL << "MediaCD::MediaCD(" << url_r << ", " << attach_point_hint_r << ")" 
<< endl;
 
-    if( url_r.getScheme() != "dvd" && url_r.getScheme() != "cd")
+    if ( url_r.getScheme() != "dvd" && url_r.getScheme() != "cd" )
     {
       ERR << "Unsupported schema in the Url: " << url_r.asString() << endl;
       ZYPP_THROW(MediaUnsupportedUrlSchemeException(_url));
     }
 
-    string devices = _url.getQueryParam("devices");
-    if (!devices.empty())
+    string devices = _url.getQueryParam( "devices" );
+    if ( ! devices.empty() )
     {
-      string::size_type pos;
-      DBG << "parse " << devices << endl;
-      while(!devices.empty())
-      {
-        pos = devices.find(',');
-        string device = devices.substr(0,pos);
-        if (!device.empty())
-        {
-          MediaSource media("cdrom", device, 0, 0);
-          _devices.push_back( media);
-          DBG << "use device (delayed verify)" << device << endl;
-        }
-        if (pos!=string::npos)
-          devices=devices.substr(pos+1);
-        else
-          devices.erase();
+      std::vector<std::string> words;
+      str::split( devices, std::back_inserter(words), "," );
+      for ( const std::string & device : words )
+      {
+       if ( device.empty() )
+         continue;
+
+       MediaSource media( "cdrom", device, 0, 0 );
+       _devices.push_back( media );
+       DBG << "use device (delayed verify)" << device << endl;
       }
     }
     else
@@ -113,7 +234,7 @@
       return;
     }
 
-    if( _devices.empty())
+    if ( _devices.empty() )
     {
       ERR << "Unable to find any cdrom drive for " << _url.asString() << endl;
       ZYPP_THROW(MediaBadUrlEmptyDestinationException(_url));
@@ -202,147 +323,71 @@
     return true;
   }
 
-  ///////////////////////////////////////////////////////////////////
-  //
-  //
-  //  METHOD NAME : MediaCD::detectDevices
-  //  METHOD TYPE : MediaCD::DeviceList
-  //
-  MediaCD::DeviceList MediaCD::detectDevices( bool supportingDVD ) const
-  {
-    DeviceList detected;
-#ifdef HAVE_UDEV
-    // http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/index.html
-    zypp::AutoDispose<struct udev *> udev( ::udev_new(), ::udev_unref );
-    if ( ! udev )
-    {
-      ERR << "Can't create udev context." << endl;
-      return DeviceList();
-    }
-
-    zypp::AutoDispose<struct udev_enumerate *> enumerate( 
::udev_enumerate_new(udev), ::udev_enumerate_unref );
-    if ( ! enumerate )
-    {
-      ERR << "Can't create udev list entry." << endl;
-      return DeviceList();
-    }
 
-    ::udev_enumerate_add_match_subsystem( enumerate, "block" );
-    ::udev_enumerate_add_match_property( enumerate, "ID_CDROM", "1" );
-    ::udev_enumerate_scan_devices( enumerate );
+  MediaCD::DeviceList MediaCD::detectDevices( bool supportingDVD_r ) const
+  {
+    DeviceList detected( systemDetectDevices( supportingDVD_r ) );
 
-    struct udev_list_entry * entry = 0;
-    udev_list_entry_foreach( entry, ::udev_enumerate_get_list_entry( enumerate 
) )
+    if ( detected.empty() )
     {
-      zypp::AutoDispose<struct udev_device *> device( 
::udev_device_new_from_syspath( ::udev_enumerate_get_udev( enumerate ),
-                                                                               
      ::udev_list_entry_get_name( entry ) ),
-                                                     ::udev_device_unref );
-      if ( ! device )
+      WAR << "CD/DVD drive detection with HAL/UDEV failed! Guessing..." << 
std::endl;
+      PathInfo dvdinfo( "/dev/dvd" );
+      PathInfo cdrinfo( "/dev/cdrom" );
+      if ( dvdinfo.isBlk() )
       {
-       ERR << "Can't create udev device." << endl;
-       continue;
+       MediaSource media( "cdrom", dvdinfo.path().asString(), dvdinfo.major(), 
dvdinfo.minor() );
+       DBG << "Found (GUESS): " << media << std::endl;
+       detected.push_back( media );
       }
-
-      if ( supportingDVD && ! ::udev_device_get_property_value( device, 
"ID_CDROM_DVD" ) )
+      if ( cdrinfo.isBlk()
+       && ! ( cdrinfo.major() == dvdinfo.major() && cdrinfo.minor() == 
dvdinfo.minor() ) )
       {
-       continue;       // looking for dvd only
+       MediaSource media( "cdrom", cdrinfo.path().asString(), cdrinfo.major(), 
cdrinfo.minor() );
+       DBG << "Found (GUESS): " << media << std::endl;
+       detected.push_back( media );
       }
+    }
 
-      const char * devnodePtr( ::udev_device_get_devnode( device ) );
-      if ( ! devnodePtr )
+    // NOTE: On the fly build on-demand device list. Code was moved to
+    // here to get rid of code duplication, while keeping the ABI. Acuallty
+    // this code should be moved to a _devices accessor method.
+    if ( _devices.empty() )
+    {
+      DBG << "creating on-demand device list" << endl;
+      //default is /dev/cdrom; for dvd: /dev/dvd if it exists
+      string device( "/dev/cdrom" );
+      if ( _url.getScheme() == "dvd" && PathInfo( "/dev/dvd" ).isBlk() )
       {
-       ERR << "Got NULL devicenode." << endl;
-       continue;
+        device = "/dev/dvd";
       }
 
-      // In case we need it someday:
-      //const char * mountpath = ::udev_device_get_property_value( device, 
"FSTAB_DIR" );
-
-      PathInfo devnode( devnodePtr );
-      if ( devnode.isBlk() )
+      PathInfo dinfo( device );
+      if ( dinfo.isBlk() )
       {
-       MediaSource media( "cdrom", devnode.path().asString(), devnode.major(), 
devnode.minor() );
-       DBG << "Found (udev): " << media << std::endl;
-       detected.push_back( media );
+       MediaSource media( "cdrom", device, dinfo.major(), dinfo.minor() );
+       if ( detected.empty() )
+       {
+         _devices.push_front( media ); // better try this than nothing
+       }
+       else
+       {
+         for( const auto & d : detected )
+         {
+           // /dev/cdrom or /dev/dvd to the front
+           if ( media.equals( d ) )
+             _devices.push_front( d );
+           else
+             _devices.push_back( d );
+         }
+       }
       }
-    }
-    if ( detected.empty() )
-      WAR << "Did not find any CD/DVD device." << endl;
-#elif HAVE_HAL
-    using namespace zypp::target::hal;
-    try
-    {
-      HalContext hal(true);
-
-      std::vector<std::string> drv_udis;
-      drv_udis = hal.findDevicesByCapability("storage.cdrom");
-
-      DBG << "Found " << drv_udis.size() << " cdrom drive udis" << std::endl;
-      for(size_t d = 0; d < drv_udis.size(); d++)
+      else
       {
-        HalDrive drv( hal.getDriveFromUDI( drv_udis[d]));
-
-        if( drv)
-        {
-          bool supportsDVD=false;
-          if( supportingDVD)
-          {
-            std::vector<std::string> caps;
-            try {
-              caps = drv.getCdromCapabilityNames();
-            }
-            catch(const HalException &e)
-            {
-              ZYPP_CAUGHT(e);
-            }
-
-            std::vector<std::string>::const_iterator ci;
-            for( ci=caps.begin(); ci != caps.end(); ++ci)
-            {
-              if( *ci == "dvd")
-                supportsDVD = true;
-            }
-          }
-
-          MediaSource media("cdrom", drv.getDeviceFile(),
-                            drv.getDeviceMajor(),
-                            drv.getDeviceMinor());
-          DBG << "Found " << drv_udis[d] << ": "
-              << media.asString() << std::endl;
-          if( supportingDVD && supportsDVD)
-          {
-            detected.push_front(media);
-          }
-          else
-          {
-            detected.push_back(media);
-          }
-        }
+       // no /dev/cdrom or /dev/dvd link
+       _devices = detected;
       }
     }
-    catch(const zypp::target::hal::HalException &e)
-    {
-      ZYPP_CAUGHT(e);
-    }
-#else // manual way
-#warning Poor CDROM devices detection without udev/HAL
-    WAR << "Cdrom drive detection without HAL! " << std::endl;
-    PathInfo dvdinfo( "/dev/dvd" );
-    PathInfo cdrinfo( "/dev/cdrom" );
-    if ( dvdinfo.isBlk() )
-    {
-      MediaSource media( "cdrom", dvdinfo.path().asString(), dvdinfo.major(), 
dvdinfo.minor() );
-      DBG << "Found (NO_HAL): " << media << std::endl;
-      detected.push_back( media );
-    }
-    if ( cdrinfo.isBlk()
-         && ! ( cdrinfo.major() == dvdinfo.major() && cdrinfo.minor() == 
dvdinfo.minor() ) )
-    {
-      MediaSource media( "cdrom", cdrinfo.path().asString(), cdrinfo.major(), 
cdrinfo.minor() );
-      DBG << "Found (NO_HAL): " << media << std::endl;
-      detected.push_back( media );
-    }
-#endif
+
     return detected;
   }
 
@@ -355,55 +400,21 @@
   //
   //  DESCRIPTION : Asserted that not already attached, and attachPoint is a 
directory.
   //
-  void MediaCD::attachTo(bool next)
+  void MediaCD::attachTo( bool next )
   {
     DBG << "next " << next << " last " << _lastdev << " last tried " << 
_lastdev_tried << endl;
-    if (next && _lastdev == -1)
+    if ( next && _lastdev == -1 )
       ZYPP_THROW(MediaNotSupportedException(url()));
 
-    DeviceList detected(
-      detectDevices(_url.getScheme() == "dvd" ? true : false));
-
-    if(_devices.empty())
-    {
-      DBG << "creating on-demand device list" << endl;
-      //default is /dev/cdrom; for dvd: /dev/dvd if it exists
-      string device( "/dev/cdrom" );
-      if ( _url.getScheme() == "dvd" && PathInfo( "/dev/dvd" ).isBlk() )
-      {
-        device = "/dev/dvd";
-      }
-
-      PathInfo dinfo(device);
-      if( dinfo.isBlk())
-      {
-        MediaSource media("cdrom", device, dinfo.major(), dinfo.minor());
-
-        DeviceList::const_iterator d( detected.begin());
-        for( ; d != detected.end(); ++d)
-        {
-          // /dev/cdrom or /dev/dvd to the front
-          if( media.equals( *d))
-            _devices.push_front( *d);
-          else
-            _devices.push_back( *d);
-        }
-      }
-      else
-      {
-        // no /dev/cdrom or /dev/dvd link
-        _devices = detected;
-      }
-    }
+    // This also fills the _devices list on demand
+    DeviceList detected( detectDevices( _url.getScheme() == "dvd" ? true : 
false ) );
 
     Mount mount;
-    string mountpoint = attachPoint().asString();
-    bool mountsucceeded = false;
-    int count = 0;
     MediaMountException merr;
+    string mountpoint = attachPoint().asString();
 
-    string options = _url.getQueryParam("mountoptions");
-    if (options.empty())
+    string options = _url.getQueryParam( "mountoptions" );
+    if ( options.empty() )
     {
       options="ro";
     }
@@ -418,9 +429,9 @@
     filesystems.push_back("iso9660");
 
     // try all devices in sequence
-    for (DeviceList::iterator it = _devices.begin()
-    ; !mountsucceeded && it != _devices.end()
-    ; ++it, count++ )
+    int count = 0;
+    bool mountsucceeded = false;
+    for ( DeviceList::iterator it = _devices.begin() ; ! mountsucceeded && it 
!= _devices.end() ; ++it, ++count )
     {
       DBG << "count " << count << endl;
       if (next && count <=_lastdev_tried )
@@ -428,28 +439,32 @@
         DBG << "skipping device " << it->name << endl;
         continue;
       }
+      DBG << "trying device " << it->name << endl;
 
       _lastdev_tried = count;
+      bool valid( false );
 
-      MediaSource temp( *it);
-      bool        valid=false;
-      PathInfo    dinfo(temp.name);
-      if( dinfo.isBlk())
+      MediaSource temp( *it );
+      PathInfo dinfo( temp.name );
+      if ( dinfo.isBlk() )
       {
         temp.maj_nr = dinfo.major();
         temp.min_nr = dinfo.minor();
 
-        DeviceList::const_iterator d( detected.begin());
-        for( ; d != detected.end(); ++d)
-        {
-          if( temp.equals( *d))
-          {
-            valid = true;
-            break;
-          }
-        }
+       if ( detected.empty() )
+         valid = true; // better try this than nothing
+       else
+         for ( const auto & d : detected )
+         {
+           if ( temp.equals( d ) )
+           {
+             valid = true;
+             break;
+           }
+         }
       }
-      if( !valid)
+
+      if ( ! valid )
       {
         DBG << "skipping invalid device: " << it->name << endl;
         continue;
@@ -656,42 +671,11 @@
   //
   void MediaCD::forceEject(const std::string & ejectDev)
   {
-    bool ejected=false;
-    if ( !isAttached()) {      // no device mounted in this instance
-
-      DeviceList detected(
-          detectDevices(_url.getScheme() == "dvd" ? true : false));
-
-      if(_devices.empty())
-      {
-        DBG << "creating on-demand device list" << endl;
-        //default is /dev/cdrom; for dvd: /dev/dvd if it exists
-        string device( "/dev/cdrom" );
-        if ( _url.getScheme() == "dvd" && PathInfo( "/dev/dvd" ).isBlk() ) {
-          device = "/dev/dvd";
-        }
-
-        PathInfo dinfo(device);
-        if( dinfo.isBlk())
-        {
-          MediaSource media("cdrom", device, dinfo.major(), dinfo.minor());
-
-          DeviceList::const_iterator d( detected.begin());
-          for( ; d != detected.end(); ++d)
-          {
-            // /dev/cdrom or /dev/dvd to the front
-            if( media.equals( *d))
-              _devices.push_front( *d);
-            else
-              _devices.push_back( *d);
-          }
-        }
-        else
-        {
-          // no /dev/cdrom or /dev/dvd link
-          _devices = detected;
-        }
-      }
+    bool ejected = false;
+    if ( ! isAttached() )      // no device mounted in this instance
+    {
+      // This also fills the _devices list on demand
+      DeviceList detected( detectDevices( _url.getScheme() == "dvd" ? true : 
false ) );
 
       DeviceList::iterator it;
       for( it = _devices.begin(); it != _devices.end(); ++it ) {
@@ -802,17 +786,18 @@
   //
   //  DESCRIPTION : Asserted that media is attached and retlist is empty.
   //
-  void MediaCD::getDirInfo( filesystem::DirContent & retlist,
-                            const Pathname & dirname, bool dots ) const
+  void MediaCD::getDirInfo( filesystem::DirContent & retlist, const Pathname & 
dirname, bool dots ) const
   {
     MediaHandler::getDirInfo( retlist, dirname, dots );
   }
 
+
   bool MediaCD::getDoesFileExist( const Pathname & filename ) const
   {
     return MediaHandler::getDoesFileExist( filename );
   }
 
+
   bool MediaCD::hasMoreDevices()
   {
     if (_devices.size() == 0)
@@ -823,44 +808,27 @@
     return (unsigned) _lastdev_tried < _devices.size() - 1;
   }
 
-  void
-  MediaCD::getDetectedDevices(std::vector<std::string> & devices,
-                              unsigned int & index) const
+
+  void MediaCD::getDetectedDevices( std::vector<std::string> & devices, 
unsigned int & index ) const
   {
-    index = 0;
-    if (!devices.empty())
+    if ( ! devices.empty() )
       devices.clear();
 
-    for (DeviceList::const_iterator it = _devices.begin();
-         it != _devices.end(); ++it)
-      devices.push_back(it->name);
-
-    if (_lastdev >= 0)
-      index = _lastdev;
-
-    // try to detect again if _devices are empty (maybe this method will be
-    // called before _devices get actually filled)
-    if (devices.empty())
-    {
-      DBG << "no device list so far, trying to detect" << endl;
+    if ( _devices.empty() )
+      // This also fills the _devices list on demand
+      detectDevices( _url.getScheme() == "dvd" ? true : false );
 
-      DeviceList detected(
-        detectDevices(_url.getScheme() == "dvd" ? true : false));
+    for ( const auto & it : _devices )
+      devices.push_back( it.name );
 
-      for (DeviceList::const_iterator it = detected.begin();
-           it != detected.end(); ++it)
-        devices.push_back(it->name);
-
-      // don't know which one is in use in this case
-      index = 0;
-    }
+    index = ( _lastdev >= 0  ? (unsigned)_lastdev : 0 );
 
     MIL << "got " << devices.size() << " detected devices, current: "
         << (index < devices.size() ? devices[index] : "<none>")
         << "(" << index << ")" << endl;
   }
 
-
   } // namespace media
+  //////////////////////////////////////////////////////////////////
 } // namespace zypp
-// vim: set ts=8 sts=2 sw=2 ai noet:
+//////////////////////////////////////////////////////////////////
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libzypp-10.3.3/zypp/media/MediaCD.h 
new/libzypp-10.3.4/zypp/media/MediaCD.h
--- old/libzypp-10.3.3/zypp/media/MediaCD.h     2011-11-07 15:56:51.000000000 
+0100
+++ new/libzypp-10.3.4/zypp/media/MediaCD.h     2011-11-11 13:47:41.000000000 
+0100
@@ -28,10 +28,9 @@
     class MediaCD : public MediaHandler {
 
       private:
-
         typedef std::list<MediaSource> DeviceList;
         /** list of devices to try to mount */
-        DeviceList _devices;
+        mutable DeviceList _devices;
 
         /** number of last successful mounted device in list */
         int        _lastdev;

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to