Hello community,
here is the log from the commit of package yast2-storage
checked in at Tue Apr 11 16:57:15 CEST 2006.
--------
--- yast2-storage/yast2-storage.changes 2006-04-10 15:17:39.000000000 +0200
+++ STABLE/yast2-storage/yast2-storage.changes 2006-04-11 15:20:39.000000000 +0200
@@ -1,0 +2,15 @@
+Tue Apr 11 12:52:41 CEST 2006 - fehr@suse.de
+
+- fix crash when bogus EVMS container is present (#163124)
+- fix detection of duplicate lv names
+- fix lost setting of crypt passwd when changing lv name (#163983)
+- allow partition id 0x06 as boot partition in Prep (#162482)
+
+-------------------------------------------------------------------
+Mon Apr 10 18:46:19 CEST 2006 - fehr@suse.de
+
+- fix bug in proposal handling partitions with "max_cyl" set (#158552)
+- prevent superfluous boot partition on xen guests (#158552)
+- version 2.13.49
+
+-------------------------------------------------------------------
Old:
----
yast2-storage-2.13.48.tar.bz2
New:
----
yast2-storage-2.13.49.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-storage.spec ++++++
--- /var/tmp/diff_new_pack.c5QtE1/_old 2006-04-11 16:56:12.000000000 +0200
+++ /var/tmp/diff_new_pack.c5QtE1/_new 2006-04-11 16:56:12.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package yast2-storage (Version 2.13.48)
+# spec file for package yast2-storage (Version 2.13.49)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -11,12 +11,12 @@
# norootforbuild
Name: yast2-storage
-Version: 2.13.48
+Version: 2.13.49
Release: 1
License: GPL
Group: System/YaST
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-Source0: yast2-storage-2.13.48.tar.bz2
+Source0: yast2-storage-2.13.49.tar.bz2
prefix: /usr
BuildRequires: blocxx-devel docbook-xsl-stylesheets doxygen evms gcc-c++ libxcrypt-devel libxslt openssl-devel perl-XML-Writer sablot sgml-skel swig update-desktop-files yast2 yast2-devtools yast2-installation yast2-perl-bindings yast2-testsuite
Requires: yast2 parted yast2-installation yast2-storage-lib yast2-perl-bindings
@@ -40,7 +40,7 @@
%prep
-%setup -n yast2-storage-2.13.48
+%setup -n yast2-storage-2.13.49
%build
%{prefix}/bin/y2tool y2autoconf
@@ -164,6 +164,15 @@
%doc %{prefix}/share/doc/packages/yast2-storage/libstorage
%changelog -n yast2-storage
+* Tue Apr 11 2006 - fehr@suse.de
+- fix crash when bogus EVMS container is present (#163124)
+- fix detection of duplicate lv names
+- fix lost setting of crypt passwd when changing lv name (#163983)
+- allow partition id 0x06 as boot partition in Prep (#162482)
+* Mon Apr 10 2006 - fehr@suse.de
+- fix bug in proposal handling partitions with "max_cyl" set (#158552)
+- prevent superfluous boot partition on xen guests (#158552)
+- version 2.13.49
* Mon Apr 10 2006 - fehr@suse.de
- correctly handle Cancel button on loop file creation (#163963)
- automatically use -F 32 on large FAT filesystems
++++++ yast2-storage-2.13.48.tar.bz2 -> yast2-storage-2.13.49.tar.bz2 ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/VERSION new/yast2-storage-2.13.49/VERSION
--- old/yast2-storage-2.13.48/VERSION 2006-04-10 11:16:56.000000000 +0200
+++ new/yast2-storage-2.13.49/VERSION 2006-04-10 18:46:35.000000000 +0200
@@ -1 +1 @@
-2.13.48
+2.13.49
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/libstorage/src/EvmsAccess.cc new/yast2-storage-2.13.49/libstorage/src/EvmsAccess.cc
--- old/yast2-storage-2.13.48/libstorage/src/EvmsAccess.cc 2006-03-16 18:50:49.000000000 +0100
+++ new/yast2-storage-2.13.49/libstorage/src/EvmsAccess.cc 2006-04-11 12:48:39.000000000 +0200
@@ -306,6 +306,7 @@
free = 0;
pe_size = 0;
lvm1 = true;
+ lvm = false;
}
storage_container_info_t* EvmsContainerObject::getInfop()
@@ -399,7 +400,17 @@
if( sinfo_p->plugin>0 )
{
EvmsObject *plugin = Acc->addObject( sinfo_p->plugin );
+ y2mil( "plugin id:" << sinfo_p->plugin
+ << " name:" << plugin->name() );
ctype = plugin->name();
+ string tmp = ctype;
+ tolower(tmp);
+ lvm = (tmp == "lvm2") || (tmp == "lvmregmgr");
+ if( lvm )
+ {
+ lvm1 = tmp == "lvmregmgr";
+ }
+ y2mil( "isLvm:" << isLvm() << " isLvm1:" << isLvm1() );
}
}
}
@@ -1792,6 +1803,39 @@
}
}
+void EvmsAccess::listLibstorage( std::ostream &str ) const
+ {
+ for( list::const_iterator Ptr_Ci = objects.begin();
+ Ptr_Ci != objects.end(); Ptr_Ci++ )
+ {
+ switch( (*Ptr_Ci)->type() )
+ {
+ case EVMS_DISK:
+ case EVMS_SEGMENT:
+ case EVMS_REGION:
+ case EVMS_OBJ:
+ str << *(EvmsDataObject*)*Ptr_Ci;
+ break;
+ case EVMS_CONTAINER:
+ {
+ EvmsContainerObject* co = (EvmsContainerObject*)*Ptr_Ci;
+ if( co->isLvm() )
+ {
+ str << *co;
+ }
+ }
+ break;
+ case EVMS_VOLUME:
+ str << *(EvmsVolumeObject*)*Ptr_Ci;
+ break;
+ default:
+ str << **Ptr_Ci;
+ break;
+ }
+ }
+ }
+
+
namespace storage
{
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/libstorage/src/EvmsAccess.h new/yast2-storage-2.13.49/libstorage/src/EvmsAccess.h
--- old/yast2-storage-2.13.48/libstorage/src/EvmsAccess.h 2005-11-07 12:15:51.000000000 +0100
+++ new/yast2-storage-2.13.49/libstorage/src/EvmsAccess.h 2006-04-11 12:17:54.000000000 +0200
@@ -94,6 +94,8 @@
const string& typeName() const { return ctype; };
void output( std::ostream& Stream ) const;
virtual void addRelation( EvmsAccess* Acc );
+ bool isLvm() const { return lvm; }
+ bool isLvm1() const { return lvm1; }
protected:
void init();
@@ -106,6 +108,7 @@
std::list creat;
string ctype;
bool lvm1;
+ bool lvm;
};
class EvmsVolumeObject : public EvmsObject
@@ -143,6 +146,7 @@
EvmsAccess();
~EvmsAccess();
void output( std::ostream &Stream ) const;
+ void listLibstorage( std::ostream &Stream ) const;
void listVolumes( std::list& l ) const;
void listContainer(std::list& l ) const;
const string& getErrorText() {return Error_C;};
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/libstorage/src/EvmsCo.cc new/yast2-storage-2.13.49/libstorage/src/EvmsCo.cc
--- old/yast2-storage-2.13.48/libstorage/src/EvmsCo.cc 2006-04-06 18:59:25.000000000 +0200
+++ new/yast2-storage-2.13.49/libstorage/src/EvmsCo.cc 2006-04-11 11:58:03.000000000 +0200
@@ -1252,13 +1252,25 @@
pe.id = 0;
list<string> fields = splitString( *i, "," );
list<string>::const_iterator f = fields.begin();
- *f >> pe.id;
- f++;
- *f >> pe.size;
- f++;
- *f >> pe.free;
- f++;
- pe.uuid = *f;
+ if( f != fields.end() )
+ {
+ *f >> pe.id;
+ f++;
+ }
+ if( f != fields.end() )
+ {
+ *f >> pe.size;
+ f++;
+ }
+ if( f != fields.end() )
+ {
+ *f >> pe.free;
+ f++;
+ }
+ if( f != fields.end() )
+ {
+ pe.uuid = *f;
+ }
if( pe.id>0 )
obj.consumes.push_back(pe);
++i;
@@ -1280,6 +1292,7 @@
++i;
}
}
+ y2mil( "cont:" << obj );
data.cont.push_back( obj );
}
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/libstorage/src/EvmsCo.h new/yast2-storage-2.13.49/libstorage/src/EvmsCo.h
--- old/yast2-storage-2.13.48/libstorage/src/EvmsCo.h 2006-04-06 15:22:33.000000000 +0200
+++ new/yast2-storage-2.13.49/libstorage/src/EvmsCo.h 2006-04-11 11:55:36.000000000 +0200
@@ -75,6 +75,9 @@
};
std::ostream& operator<< (std::ostream&, const EvmsTree& );
+std::ostream& operator<< (std::ostream&, const EvmsCont& );
+std::ostream& operator<< (std::ostream&, const EvmsVol& );
+std::ostream& operator<< (std::ostream&, const EvmsObj& );
class EvmsCo : public PeContainer
{
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/libstorage/src/EvmsHelper.cc new/yast2-storage-2.13.49/libstorage/src/EvmsHelper.cc
--- old/yast2-storage-2.13.48/libstorage/src/EvmsHelper.cc 2006-03-30 20:01:12.000000000 +0200
+++ new/yast2-storage-2.13.49/libstorage/src/EvmsHelper.cc 2006-04-11 12:09:45.000000000 +0200
@@ -222,7 +222,7 @@
}
else if( cmd=="list" )
{
- output << evms;
+ evms.listLibstorage( output );
output << endl;
}
else
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/libstorage/src/Storage.cc new/yast2-storage-2.13.49/libstorage/src/Storage.cc
--- old/yast2-storage-2.13.48/libstorage/src/Storage.cc 2006-04-06 16:05:45.000000000 +0200
+++ new/yast2-storage-2.13.49/libstorage/src/Storage.cc 2006-04-11 11:59:02.000000000 +0200
@@ -423,6 +423,7 @@
EvmsCo::activate( true );
EvmsTree data;
EvmsCo::getEvmsList( data );
+ y2mil( "EVMS TREE:" << data );
if( !data.volumes.empty() )
{
EvmsCo * e = new EvmsCo( this, data );
@@ -430,6 +431,7 @@
for( list<EvmsCont>::const_iterator i=data.cont.begin();
i!=data.cont.end(); ++i )
{
+ y2mil( "EVMS Container:" << *i );
EvmsCo * e = new EvmsCo( this, *i, data );
addToList( e );
e->checkConsistency();
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/storage/src/include/custom_part_check_generated.ycp new/yast2-storage-2.13.49/storage/src/include/custom_part_check_generated.ycp
--- old/yast2-storage-2.13.48/storage/src/include/custom_part_check_generated.ycp 2006-04-06 16:15:49.000000000 +0200
+++ new/yast2-storage-2.13.49/storage/src/include/custom_part_check_generated.ycp 2006-04-11 15:20:53.000000000 +0200
@@ -24,7 +24,7 @@
*
*************************************************************
- $Id: custom_part_check_generated.ycp 29810 2006-04-06 14:15:47Z fehr $
+ $Id: custom_part_check_generated.ycp 29984 2006-04-11 13:20:49Z fehr $
*/
{
@@ -255,7 +255,7 @@
else if ( mountpoint == "" )
{
if( Partitions::PrepBoot() &&
- fsid == Partitions::fsid_prep_chrp_boot )
+ (fsid == Partitions::fsid_prep_chrp_boot || fsid==6) )
{
boot_found = true;
boot_end = part["region",0]:0 + part["region",1]:1-1;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/storage/src/include/do_proposal_flexible.ycp new/yast2-storage-2.13.49/storage/src/include/do_proposal_flexible.ycp
--- old/yast2-storage-2.13.48/storage/src/include/do_proposal_flexible.ycp 2006-04-10 13:34:20.000000000 +0200
+++ new/yast2-storage-2.13.49/storage/src/include/do_proposal_flexible.ycp 2006-04-10 18:50:03.000000000 +0200
@@ -14,7 +14,7 @@
*
*************************************************************
- $Id: do_proposal_flexible.ycp 29913 2006-04-10 11:34:17Z fehr $
+ $Id: do_proposal_flexible.ycp 29953 2006-04-10 16:49:57Z fehr $
*/
{
@@ -44,6 +44,7 @@
symbol cur_mode = `free;
integer cur_weight = -10000;
map cur_gap = $[];
+integer big_cyl = 4 * 1024 * 1024 * 1024;
define boolean ignore_disk( string dev, map entry, boolean soft )
``{
@@ -802,7 +803,6 @@
define map add_cylinder_info( map conf, map gap )
``{
- integer big_cyl = 4 * 1024 * 1024 * 1024;
integer cyl_size = gap["cyl_size"]:1;
conf["partitions"] =
sort( map a, map b, conf["partitions"]:[],
@@ -940,8 +940,21 @@
foreach( map e, lg["gap"]:[],
``{
y2milestone( "add_part_recursive e %1", e );
- if( (!haskey( part, "max_cyl" ) || part["max_cyl"]:0 >= e["end"]:0) &&
- part["cylinders"]:0 <= e["cylinders"]:0 &&
+ boolean max_cyl_ok = !haskey( part, "max_cyl" ) ||
+ part["max_cyl"]:0 >= e["end"]:0;
+ if( !max_cyl_ok )
+ {
+ integer cyl = 0;
+ foreach( list a, lg["gap",gindex,"added"]:[],
+ ``{
+ cyl = cyl + ps[a[0]:0,"cylinders"]:0;
+ });
+ cyl = cyl + part["cylinders"]:0;
+ y2milestone( "max_cyl_ok cyl %1", cyl );
+ max_cyl_ok = e["start"]:0 + cyl <= part["max_cyl"]:0;
+ }
+ y2milestone( "add_part_recursive max_cyl_ok %1", max_cyl_ok );
+ if( max_cyl_ok && part["cylinders"]:0 <= e["cylinders"]:0 &&
((!e["extended"]:false && size(lg["free_pnr"]:[])>0) ||
(part["primary"]:false && e["created"]:false && e["extended"]:false && size(lg["free_pnr"]:[])>0) ||
(!part["primary"]:false && e["extended"]:false && size(lg["ext_pnr"]:[])>0)))
@@ -1163,8 +1176,16 @@
list nums = maplist( list l, e["added"]:[], ``(l[1]:-1));
y2milestone( "normalize_gaps old nums %1", nums );
list sdd = sort( list a, list b, e["added"]:[],
- ``(sort_map[ps[a[0]:0,"mount"]:""]:3 <
- sort_map[ps[b[0]:0,"mount"]:""]:3) );
+ ``({
+ integer ai = a[0]:0;
+ integer bi = b[0]:0;
+ if( ps[ai,"primary"]:false != ps[bi,"primary"]:false )
+ return( true );
+ else if( ps[ai,"max_cyl"]:big_cyl != ps[bi,"max_cyl"]:big_cyl )
+ return( ps[ai,"max_cyl"]:big_cyl < ps[bi,"max_cyl"]:big_cyl );
+ else
+ return( sort_map[ps[ai,"mount"]:""]:3 < sort_map[ps[bi,"mount"]:""]:3);
+ }));
integer idx = 0;
foreach( list e, (list<list>)sdd,
``{
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/storage/src/include/lvm_lv_lib.ycp new/yast2-storage-2.13.49/storage/src/include/lvm_lv_lib.ycp
--- old/yast2-storage-2.13.48/storage/src/include/lvm_lv_lib.ycp 2006-04-03 18:28:09.000000000 +0200
+++ new/yast2-storage-2.13.49/storage/src/include/lvm_lv_lib.ycp 2006-04-11 15:12:35.000000000 +0200
@@ -9,7 +9,7 @@
* Authors:
* mike
*
- * $Id: lvm_lv_lib.ycp 27442 2006-01-30 14:53:09Z fehr $
+ * $Id: lvm_lv_lib.ycp 29983 2006-04-11 13:12:27Z fehr $
*
*
*----------------------------------------------------
@@ -191,7 +191,7 @@
define list get_lv_names( map targetMap, string current_vg )
``{
list<map> part = targetMap["/dev/"+current_vg,"partitions"]:[];
- list ret = maplist( map e, part, ``(e["nr"]:"") );
+ list ret = maplist( map e, part, ``(e["name"]:"") );
return( ret );
};
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/storage/src/include/lvm_pv_lib.ycp new/yast2-storage-2.13.49/storage/src/include/lvm_pv_lib.ycp
--- old/yast2-storage-2.13.48/storage/src/include/lvm_pv_lib.ycp 2006-04-03 18:28:10.000000000 +0200
+++ new/yast2-storage-2.13.49/storage/src/include/lvm_pv_lib.ycp 2006-04-11 15:12:35.000000000 +0200
@@ -11,7 +11,7 @@
* mike
*
*
- * $Id: lvm_pv_lib.ycp 29279 2006-03-22 17:41:43Z fehr $
+ * $Id: lvm_pv_lib.ycp 29983 2006-04-11 13:12:27Z fehr $
*
*/
@@ -257,7 +257,10 @@
``{
if( x["maindev"]:"" == y["maindev"]:"")
{
- return( x["nr"]:(any)"" < y["nr"]:(any)"");
+ if( haskey( x, "nr" ))
+ return( x["nr"]:0 < y["nr"]:0);
+ else
+ return( x["name"]:"" < y["name"]:"");
}
else
{
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/storage/src/include/lvm_ui_dialogs.ycp new/yast2-storage-2.13.49/storage/src/include/lvm_ui_dialogs.ycp
--- old/yast2-storage-2.13.48/storage/src/include/lvm_ui_dialogs.ycp 2006-04-03 18:28:10.000000000 +0200
+++ new/yast2-storage-2.13.49/storage/src/include/lvm_ui_dialogs.ycp 2006-04-11 15:12:35.000000000 +0200
@@ -12,7 +12,7 @@
* mike
*
*
- * $Id: lvm_ui_dialogs.ycp 29279 2006-03-22 17:41:43Z fehr $
+ * $Id: lvm_ui_dialogs.ycp 29983 2006-04-11 13:12:27Z fehr $
*
*/
@@ -49,6 +49,7 @@
``{
y2milestone( "DlgCreateEditLogicaVolume %4 dev=%1 pesize=%2 max_size=%3",
dev, pesize, max_size, create_or_edit );
+ y2milestone( "DlgCreateEditLogicaVolume lvs %1", lvs );
integer new_size = Lv["size_k"]:0 * 1024;
integer old_size = new_size;
@@ -346,6 +347,7 @@
continue;
}
+ retval["device"] = "/dev/"+vgname+"/"+volume_name;
ret_mp = CheckCryptOk( retval );
if( !ret_mp["ok"]:false )
input_is_ok = false;
@@ -360,7 +362,6 @@
retval["stripesize"] = stripesize;
}
retval["name"] = volume_name;
- retval["device"] = "/dev/"+vgname+"/"+volume_name;
if( new_size!=old_size )
{
retval["size_k"] = (new_size+1023)/1024;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/storage/src/inst_lvm_lv.ycp new/yast2-storage-2.13.49/storage/src/inst_lvm_lv.ycp
--- old/yast2-storage-2.13.48/storage/src/inst_lvm_lv.ycp 2006-04-03 18:28:13.000000000 +0200
+++ new/yast2-storage-2.13.49/storage/src/inst_lvm_lv.ycp 2006-04-11 15:12:35.000000000 +0200
@@ -10,7 +10,7 @@
* Authors:
* mike
*
- * $Id: inst_lvm_lv.ycp 26548 2005-12-15 16:37:09Z fehr $
+ * $Id: inst_lvm_lv.ycp 29983 2006-04-11 13:12:27Z fehr $
*
*
*----------------------------------------------------
@@ -151,7 +151,7 @@
/////////////////////////////////////////////////////////////////
// Wait for User input
ret = (symbol)Wizard::UserInput();
- y2milestone(" ret %1", ret );
+ y2milestone("USERINPUT ret %1", ret );
////////////////////////////////////////
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/storage/src/modules/Partitions.ycp new/yast2-storage-2.13.49/storage/src/modules/Partitions.ycp
--- old/yast2-storage-2.13.48/storage/src/modules/Partitions.ycp 2006-04-03 18:37:20.000000000 +0200
+++ new/yast2-storage-2.13.49/storage/src/modules/Partitions.ycp 2006-04-10 18:50:03.000000000 +0200
@@ -5,7 +5,7 @@
*
* Purpose: Provides information about partitions
*
- * $Id: Partitions.ycp 29641 2006-04-03 16:37:17Z fehr $
+ * $Id: Partitions.ycp 29953 2006-04-10 16:49:57Z fehr $
*/
{
module "Partitions";
@@ -184,6 +184,16 @@
list internal_bios = (list<map>) SCR::Read (.probe.bios);
boolean lba = internal_bios[0, "lba_support"]:false;
y2milestone( "BootCyl lba_support %1", lba );
+ if( !lba )
+ {
+ map st = (map)SCR::Read( .target.stat,
+ "/proc/xen/capabilities" );
+ y2milestone( "BootCyl /proc/xen/capabilities %1", st );
+ if( size(st)>0 )
+ lba = (integer)SCR::Execute( .target.bash,
+ "grep control_d /proc/xen/capabilities" )>0;
+ y2milestone( "BootCyl lba_support %1", lba );
+ }
if( lba )
{
boot_cyl = 4*1024*1024*1024;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/yast2-storage-2.13.48/storage/src/modules/Storage.ycp new/yast2-storage-2.13.49/storage/src/modules/Storage.ycp
--- old/yast2-storage-2.13.48/storage/src/modules/Storage.ycp 2006-04-10 11:17:25.000000000 +0200
+++ new/yast2-storage-2.13.49/storage/src/modules/Storage.ycp 2006-04-11 15:12:35.000000000 +0200
@@ -19,7 +19,7 @@
* wurde versucht * "intelligent" zu gestallten und ist im einzelen bei den
* entspechenden Funktionen * näher erklärt.
*
- * $Id: Storage.ycp 29909 2006-04-10 09:17:22Z fehr $
+ * $Id: Storage.ycp 29983 2006-04-11 13:12:27Z fehr $
*/
{
@@ -2536,7 +2536,7 @@
if( ret==LibStorage::STORAGE_VOLUME_NOT_FOUND() )
{
ClassifiedSettings[device] = pwd;
- y2milestone( "SHOULD NOT HAPPEN!!!" );
+ y2milestone( "setting classified %1 pwd size %2", device, size(pwd) );
ret = 0;
}
else if( ret<0 )
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...