Author: aschnell
Date: Sat Jul 26 14:53:58 2008
New Revision: 49429
URL: http://svn.opensuse.org/viewcvs/yast?rev=49429&view=rev
Log:
- merged part-redesign/libstorage branch changes r44410:49428 into the trunk
Modified:
trunk/storage/VERSION
trunk/storage/libstorage/bindings/ycp/LibStorage.i
trunk/storage/libstorage/src/AppUtil.cc
trunk/storage/libstorage/src/AppUtil.h
trunk/storage/libstorage/src/Disk.cc
trunk/storage/libstorage/src/Disk.h
trunk/storage/libstorage/src/Makefile.am
trunk/storage/libstorage/src/Md.cc
trunk/storage/libstorage/src/Storage.cc
trunk/storage/libstorage/src/Storage.h
trunk/storage/libstorage/src/StorageInterface.h
trunk/storage/libstorage/src/Volume.cc
trunk/storage/package/yast2-storage.changes
Modified: trunk/storage/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/VERSION?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/VERSION (original)
+++ trunk/storage/VERSION Sat Jul 26 14:53:58 2008
@@ -1 +1 @@
-2.17.3
+2.17.4
Modified: trunk/storage/libstorage/bindings/ycp/LibStorage.i
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/bindings/ycp/LibStorage.i?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/bindings/ycp/LibStorage.i (original)
+++ trunk/storage/libstorage/bindings/ycp/LibStorage.i Sat Jul 26 14:53:58 2008
@@ -14,6 +14,7 @@
%include "std_string.i"
%include "std_deque.i"
+%include "std_list.i"
specialize_sequence(storage::ContainerInfo, TO_PACK, FROM_PACK, CHECK)
specialize_sequence(storage::DiskInfo, TO_PACK, FROM_PACK, CHECK)
@@ -32,6 +33,7 @@
specialize_sequence(storage::DmraidCoInfo, TO_PACK, FROM_PACK, CHECK)
specialize_sequence(storage::DmPartInfo, TO_PACK, FROM_PACK, CHECK)
specialize_sequence(storage::DmraidInfo, TO_PACK, FROM_PACK, CHECK)
+specialize_sequence(storage::PartitionSlotInfo, TO_PACK, FROM_PACK, CHECK)
%include "../../src/StorageInterface.h"
Modified: trunk/storage/libstorage/src/AppUtil.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/AppUtil.cc?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/AppUtil.cc (original)
+++ trunk/storage/libstorage/src/AppUtil.cc Sat Jul 26 14:53:58 2008
@@ -149,36 +149,6 @@
S_ISREG(Stat_ri.st_mode));
}
-string kbyteToHumanString( unsigned long long sizeK )
- {
- unsigned num;
- unsigned fract;
- string unit;
- if( sizeK<1024*1024 )
- {
- num = (unsigned)(sizeK / 1024);
- sizeK -= num*1024;
- fract = (unsigned)(sizeK / 103);
- unit = " MB";
- }
- else if( sizeK<1024*1024*1024 )
- {
- num = (unsigned)(sizeK / (1024*1024));
- sizeK -= num * (1024*1024);
- fract = (unsigned)(sizeK / 104858);
- unit = " GB";
- }
- else
- {
- num = (unsigned)(sizeK / (1024*1024*1024));
- sizeK -= num * (1024*1024*1024);
- fract = (unsigned)(sizeK / 107374183);
- unit = " TB";
- }
- return( decString(num)+"."+decString(fract)+unit );
- }
-
-
string extractNthWord(int Num_iv, string Line_Cv, bool GetRest_bi)
{
string::size_type pos;
Modified: trunk/storage/libstorage/src/AppUtil.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/AppUtil.h?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/AppUtil.h (original)
+++ trunk/storage/libstorage/src/AppUtil.h Sat Jul 26 14:53:58 2008
@@ -44,7 +44,6 @@
bool unique=true );
void getFindRevMap( const char* path, std::map& m );
void removeLastIf(string& Text_Cr, char Char_cv);
-string kbyteToHumanString( unsigned long long size );
string normalizeDevice( const string& dev );
void normalizeDevice( string& dev );
string undevDevice( const string& dev );
Modified: trunk/storage/libstorage/src/Disk.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Disk.cc?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Disk.cc (original)
+++ trunk/storage/libstorage/src/Disk.cc Sat Jul 26 14:53:58 2008
@@ -1110,16 +1110,45 @@
return( make_pair(disk,nr) );
}
+
+static bool notDeletedPri( const Partition& p )
+{
+ return !p.deleted() && p.type()==PRIMARY;
+}
+
+static bool notDeletedExt( const Partition& p )
+{
+ return !p.deleted() && p.type()==EXTENDED;
+}
+
+static bool notDeletedLog( const Partition& p )
+{
+ return !p.deleted() && p.type()==LOGICAL;
+}
+
+
static bool isExtended( const Partition& p )
{
return( Volume::notDeleted(p) && p.type()==EXTENDED );
}
+
+unsigned int Disk::numPrimary() const
+{
+ return partPair(notDeletedPri).length();
+}
+
bool Disk::hasExtended() const
{
return( ext_possible && !partPair(isExtended).empty() );
}
+unsigned int Disk::numLogical() const
+{
+ return partPair(notDeletedLog).length();
+}
+
+
unsigned Disk::availablePartNumber( PartitionType type )
{
y2milestone( "begin name:%s type %d", name().c_str(), type );
@@ -1176,11 +1205,6 @@
return( ret );
}
-static bool notDeletedLog( const Partition& p )
- {
- return( !p.deleted() && p.type()==LOGICAL );
- }
-
static bool notDeletedNotLog( const Partition& p )
{
return( !p.deleted() && p.type()!=LOGICAL );
Modified: trunk/storage/libstorage/src/Disk.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Disk.h?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Disk.h (original)
+++ trunk/storage/libstorage/src/Disk.h Sat Jul 26 14:53:58 2008
@@ -41,6 +41,7 @@
unsigned long numMinor() const { return range; }
unsigned long cylSizeB() const { return byte_cyl; }
unsigned maxPrimary() const { return max_primary; }
+ bool extendedPossible() const { return ext_possible; };
unsigned maxLogical() const { return max_logical; }
const string& labelName() const { return label; }
const string& udevPath() const { return udev_path; }
@@ -90,7 +91,9 @@
int removeVolume( Volume* v );
void getUnusedSpace( std::list<Region>& free, bool all=true,
bool logical=false );
+ unsigned int numPrimary() const;
bool hasExtended() const;
+ unsigned int numLogical() const;
string setDiskLabelText( bool doing=true ) const;
unsigned long long cylinderToKb( unsigned long ) const;
unsigned long kbToCylinder( unsigned long long ) const;
@@ -198,7 +201,6 @@
virtual int doSetType( Volume* v );
virtual int doCreateLabel();
- //std::list<Region> getUnusedRegions();
void logData( const string& Dir );
bool haveBsdPart( const std::list& pl) const;
void setLabelData( const string& );
Modified: trunk/storage/libstorage/src/Makefile.am
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Makefile.am?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Makefile.am (original)
+++ trunk/storage/libstorage/src/Makefile.am Sat Jul 26 14:53:58 2008
@@ -71,7 +71,7 @@
StorageCallbacks.h StorageCallbacks.cc
libpy2StorageCallbacks_la_LDFLAGS = -version-info 2:0
-libpy2StorageCallbacks_la_LIBADD = -ly2 -lycp liby2storage.la
+libpy2StorageCallbacks_la_LIBADD = -L$(libdir) -ly2 -lycp liby2storage.la
pkgincludedir = $(includedir)/y2storage
Modified: trunk/storage/libstorage/src/Md.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Md.cc?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Md.cc (original)
+++ trunk/storage/libstorage/src/Md.cc Sat Jul 26 14:53:58 2008
@@ -278,46 +278,11 @@
void
Md::computeSize()
- {
- unsigned long long sum = 0;
- unsigned long long smallest = 0;
- list<string>::const_iterator i=devs.begin();
- while( i!=devs.end() )
- {
- const Volume* v = getContainer()->getStorage()->getVolume( *i );
- sum += v->sizeK();
- if( smallest==0 )
- smallest = v->sizeK();
- else
- smallest = min( smallest, v->sizeK() );
- ++i;
- }
- unsigned long long rsize = 0;
- switch( md_type )
- {
- case RAID0:
- rsize = sum;
- break;
- case RAID1:
- case MULTIPATH:
- rsize = smallest;
- break;
- case RAID5:
- rsize = devs.size()==0 ? 0 : smallest*(devs.size()-1);
- break;
- case RAID6:
- rsize = devs.size()<2 ? 0 : smallest*(devs.size()-2);
- break;
- case RAID10:
- rsize = smallest*devs.size()/2;
- break;
- default:
- rsize = 0;
- }
- y2milestone( "type:%d smallest:%llu sum:%llu size:%llu", md_type,
- smallest, sum, rsize );
- setSize( rsize );
- }
+{
+ unsigned long long size_k;
+ getContainer()->getStorage()->computeMdSize(md_type, devs, size_k);
+ setSize(size_k);
+}
void
Md::addSpareDevice( const string& dev )
Modified: trunk/storage/libstorage/src/Storage.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Storage.cc?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Storage.cc (original)
+++ trunk/storage/libstorage/src/Storage.cc Sat Jul 26 14:53:58 2008
@@ -16,6 +16,7 @@
#include <fstream>
#include <sstream>
#include <iostream>
+#include
#include
@@ -1716,6 +1717,66 @@
return( ret );
}
+
+int
+Storage::getUnusedPartitionSlots(const string& disk, list<PartitionSlotInfo>& slots)
+{
+ int ret = 0;
+ slots.clear();
+ assertInit();
+ DiskIterator i = findDisk( disk );
+ if( i != dEnd() )
+ {
+ // maxPrimary() and maxLogical() include limits from partition table type and
+ // minor number range
+
+ // TODO: check these restrictions
+
+ bool primaryPossible = i->numPrimary() + (i->hasExtended() ? 1 : 0) < i->maxPrimary();
+ bool extendedPossible = primaryPossible && i->extendedPossible() && !i->hasExtended();
+ bool logicalPossible = i->hasExtended() && i->numLogical() < (i->maxLogical() - i->maxPrimary());
+
+ list<Region> regions;
+
+ i->getUnusedSpace(regions, false, false);
+ for( list<Region>::const_iterator region=regions.begin(); region!=regions.end(); region++ )
+ {
+ PartitionSlotInfo slot;
+ slot.cylStart = region->start();
+ slot.cylSize = region->len();
+ slot.primarySlot = true;
+ slot.primaryPossible = primaryPossible;
+ slot.extendedSlot = true;
+ slot.extendedPossible = extendedPossible;
+ slot.logicalSlot = false;
+ slot.logicalPossible = false;
+ slots.push_back(slot);
+ }
+
+ i->getUnusedSpace(regions, false, true);
+ for( list<Region>::const_iterator region=regions.begin(); region!=regions.end(); region++ )
+ {
+ PartitionSlotInfo slot;
+ slot.cylStart = region->start();
+ slot.cylSize = region->len();
+ slot.primarySlot = false;
+ slot.primaryPossible = false;
+ slot.extendedSlot = false;
+ slot.extendedPossible = false;
+ slot.logicalSlot = true;
+ slot.logicalPossible = logicalPossible;
+ slots.push_back(slot);
+ }
+ }
+ else
+ {
+ ret = STORAGE_DISK_NOT_FOUND;
+ }
+ y2milestone( "ret:%d", ret );
+ return ret;
+}
+
+
int
Storage::destroyPartitionTable( const string& disk, const string& label )
{
@@ -3288,6 +3349,20 @@
}
int
+Storage::nextFreeMd(int &nr, string &device)
+{
+ int ret = 0;
+ assertInit();
+ MdCo *md = NULL;
+ nr = 0;
+ if (haveMd(md))
+ nr = md->unusedNumber();
+ device = "/dev/md" + decString(nr);
+ y2milestone("ret:%d nr:%d device:%s", ret, nr, device.c_str());
+ return ret;
+}
+
+int
Storage::createMd( const string& name, MdType rtype,
const deque<string>& devs )
{
@@ -3578,6 +3653,7 @@
return( ret );
}
+
int Storage::getMdState(const string& name, MdStateInfo& info)
{
int ret = 0;
@@ -3600,6 +3676,60 @@
return ret;
}
+
+int
+Storage::computeMdSize(MdType md_type, list<string> devices, unsigned long long& sizeK)
+{
+ int ret = 0;
+
+ unsigned long long sumK = 0;
+ unsigned long long smallestK = 0;
+
+ for (list<string>::const_iterator i = devices.begin(); i != devices.end(); i++)
+ {
+ const Volume* v = getVolume(*i);
+ if (!v)
+ {
+ ret = STORAGE_VOLUME_NOT_FOUND;
+ break;
+ }
+
+ sumK += v->sizeK();
+ if (smallestK == 0)
+ smallestK = v->sizeK();
+ else
+ smallestK = min(smallestK, v->sizeK());
+ }
+
+ switch (md_type)
+ {
+ case RAID0:
+ sizeK = sumK;
+ break;
+ case RAID1:
+ case MULTIPATH:
+ sizeK = smallestK;
+ break;
+ case RAID5:
+ sizeK = devices.size()<1 ? 0 : smallestK*(devices.size()-1);
+ break;
+ case RAID6:
+ sizeK = devices.size()<2 ? 0 : smallestK*(devices.size()-2);
+ break;
+ case RAID10:
+ sizeK = smallestK*devices.size()/2;
+ break;
+ default:
+ break;
+ }
+
+ y2milestone ("type:%d smallest:%llu sum:%llu size:%llu", md_type,
+ smallestK, sumK, sizeK);
+
+ return ret;
+}
+
+
bool Storage::haveMd( MdCo*& md )
{
md = NULL;
@@ -6405,6 +6535,107 @@
no_evms=val;
}
+
+static int numSuffixes()
+{
+ return 6;
+}
+
+
+static string suffixes(int i, bool classic)
+{
+ switch (i)
+ {
+ case 0:
+ /* Byte abbreviated */
+ return classic ? "B" : _("B");
+
+ case 1:
+ /* KiloByte abbreviated */
+ return classic ? "kB" : _("kB");
+
+ case 2:
+ /* MegaByte abbreviated */
+ return classic ? "MB" : _("MB");
+
+ case 3:
+ /* GigaByte abbreviated */
+ return classic ? "GB" : _("GB");
+
+ case 4:
+ /* TeraByte abbreviated */
+ return classic ? "TB" : _("TB");
+
+ case 5:
+ /* PetaByte abbreviated */
+ return classic ? "PB" : _("PB");
+ }
+
+ return string("error");
+}
+
+
+string Storage::byteToHumanString(unsigned long long size, bool classic, int precision,
+ bool omit_zeroes) const
+{
+ const locale loc = classic ? locale::classic() : locale();
+
+ double f = (double)(size);
+ int suffix = 0;
+
+ while (f >= 1024.0 && suffix + 1 < numSuffixes())
+ {
+ f /= 1024.0;
+ suffix++;
+ }
+
+ if (omit_zeroes && (f == (unsigned long long)(f)))
+ {
+ precision = 0;
+ }
+
+ ostringstream s;
+ s.imbue(loc);
+ s.setf(ios::fixed);
+ s.precision(precision);
+
+ s << f << ' ' << suffixes(suffix, classic);
+
+ return s.str();
+}
+
+
+bool Storage::humanStringToByte(const string& str, bool classic, unsigned long long& size) const
+{
+ const locale loc = classic ? locale::classic() : locale();
+
+ istringstream s(boost::trim_copy(str, loc));
+ s.imbue(loc);
+
+ double f;
+ string suffix;
+ s >> f >> suffix;
+
+ if (s.fail() || !s.eof() || f < 0.0)
+ return false;
+
+ boost::to_lower(suffix, loc);
+
+ for(int i = 0; i < numSuffixes(); i++)
+ {
+ if (suffix == boost::to_lower_copy(suffixes(i, classic)))
+ {
+ size = f;
+ return true;
+ }
+
+ f *= 1024.0;
+ }
+
+ return false;
+}
+
+
namespace storage
{
std::ostream& operator<< (std::ostream& s, Storage &v )
Modified: trunk/storage/libstorage/src/Storage.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Storage.h?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Storage.h (original)
+++ trunk/storage/libstorage/src/Storage.h Sat Jul 26 14:53:58 2008
@@ -315,6 +315,7 @@
int removePartition( const string& partition );
int changePartitionId( const string& partition, unsigned id );
int forgetChangePartitionId( const string& partition );
+ int getUnusedPartitionSlots(const string& disk, list<PartitionSlotInfo>& slots);
int destroyPartitionTable( const string& disk, const string& label );
int initializeDisk( const string& disk, bool value );
string defaultDiskLabel() const;
@@ -422,6 +423,7 @@
bool getNoEvms() { return( no_evms ); }
static bool getNoEv() { return( no_evms ); }
+ int nextFreeMd(int &nr, string &device);
int createMd( const string& name, storage::MdType rtype,
const deque<string>& devs );
int createMdAny( storage::MdType rtype, const deque<string>& devs,
@@ -434,6 +436,8 @@
int changeMdParity( const string& name, storage::MdParity ptype );
int checkMd( const string& name );
int getMdState(const string& name, MdStateInfo& info);
+ int computeMdSize(MdType md_type, list<string> devices,
+ unsigned long long& sizeK);
int addNfsDevice( const string& nfsDev, const string& opts,
unsigned long long sizeK, const string& mp );
@@ -471,6 +475,9 @@
void updateDmEmptyPeMap();
void dumpObjectList();
+ string byteToHumanString(unsigned long long size, bool classic, int precision, bool omit_zeroes) const;
+ bool humanStringToByte(const string& str, bool classic, unsigned long long& size) const;
+
void setCallbackProgressBar( storage::CallbackProgressBar pfnc )
{ progress_bar_cb=pfnc; }
storage::CallbackProgressBar getCallbackProgressBar() const
Modified: trunk/storage/libstorage/src/StorageInterface.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/StorageInterface.h?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/StorageInterface.h (original)
+++ trunk/storage/libstorage/src/StorageInterface.h Sat Jul 26 14:53:58 2008
@@ -4,10 +4,12 @@
#include <string>
#include <deque>
+#include <list>
#include <ostream>
using std::string;
using std::deque;
+using std::list;
/*!
@@ -419,6 +421,22 @@
};
/**
+ * Contains info about a partition slot.
+ */
+ struct PartitionSlotInfo
+ {
+ PartitionSlotInfo() {}
+ unsigned long cylStart;
+ unsigned long cylSize;
+ bool primarySlot;
+ bool primaryPossible;
+ bool extendedSlot;
+ bool extendedPossible;
+ bool logicalSlot;
+ bool logicalPossible;
+ };
+
+ /**
* preliminary list of error codes, must have negative values
*/
enum ErrorCodes
@@ -1051,6 +1069,18 @@
virtual int forgetChangePartitionId (const string& partition ) = 0;
/**
+ * Query unused slots on a disk suitable for creating partitions.
+ *
+ * This functions ignores size limitations of the partition table type,
+ * e.g. on MSDOS labels partitions cannot exceed 2TB.
+ *
+ * @param partition name of partition, e.g. /dev/hda1
+ * @param slots list of records that get filled with partition slot specific info
+ * @return zero if all is ok, a negative number to indicate an error
+ */
+ virtual int getUnusedPartitionSlots(const string& disk, list<PartitionSlotInfo>& slots) = 0;
+
+ /**
* Destroys the partition table of a disk. An empty disk label
* of the given type without any partition is created.
*
@@ -1676,6 +1706,15 @@
virtual int evmsActivate( bool force ) = 0;
/**
+ * Determine the device name of the next created software raid device
+ *
+ * @param nr is set to the number of the next created software raid device
+ * @param device is set to the device name of the next created software raid device
+ * @return zero if all is ok, a negative number to indicate an error
+ */
+ virtual int nextFreeMd(int &nr, string &device) = 0;
+
+ /**
* Create a Software raid device by name
*
* @param name name of software raid device to create (e.g. /dev/md0)
@@ -1776,6 +1815,19 @@
virtual int getMdState(const string& name, MdStateInfo& info) = 0;
/**
+ * Compute the size of a raid device.
+ *
+ * The size compute may not be accurate. It should not be used for
+ * further computations.
+ *
+ * @param md_type raid type of the software raid
+ * @param devices list with physical devices for the software raid
+ * @return zero if all is ok, a negative number to indicate an error
+ */
+ virtual int computeMdSize(MdType md_type, list<string> devices,
+ unsigned long long& sizeK) = 0;
+
+ /**
* Add knowledge about existence of nfs device.
*
* @param nfsDev name of nfs device
@@ -2162,6 +2214,38 @@
*/
virtual int getContVolInfo( const string& dev, ContVolInfo& info) = 0;
+ /**
+ * Return a pretty description of a size with required precision
+ * and using B, kB, MB, GB or TB as unit as appropriate.
+ *
+ * @param size size in bytes
+ * @param classic use classic locale
+ * @param precision number of fraction digits in output
+ * @param omit_zeroes if true omit trailing zeroes for exact values
+ * @return formatted string
+ *
+ * @example byteToHumanString(128, true, 2, true) -> "128 B"
+ * @example byteToHumanString(4096, true, 2, true) -> "4 kB"
+ * @example byteToHumanString(4096, true, 2, false) -> "4.00 kB"
+ * @example byteToHumanString(1024*1024, true, 2, true) -> "1 MB"
+ */
+ virtual string byteToHumanString(unsigned long long size, bool classic, int precision,
+ bool omit_zeroes) const = 0;
+
+ /**
+ * Converts a size description using B, kB, MB, GB or TB into an integer.
+ *
+ * @param str size string
+ * @param classic use classic locale
+ * @param size size in bytes
+ * @return true on successful conversion
+ *
+ * @example humanStringToByte("4kB", true, size) -> true and size = 4*1024
+ * @example humanStringToByte("4 MB", true, size) -> true and size = 4*1024*1024
+ * @example humanStringToByte("0.5 GB", true, size) -> true and size = 512*1024*1024
+ */
+ virtual bool humanStringToByte(const string& str, bool classic, unsigned long long&
+ size) const = 0;
};
Modified: trunk/storage/libstorage/src/Volume.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/libstorage/src/Volume.cc?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/libstorage/src/Volume.cc (original)
+++ trunk/storage/libstorage/src/Volume.cc Sat Jul 26 14:53:58 2008
@@ -2587,9 +2587,9 @@
}
string Volume::sizeString() const
- {
- return( kbyteToHumanString( size_k ));
- }
+{
+ return cont->getStorage()->byteToHumanString(1024 * size_k, false, 2, false);
+}
bool Volume::canUseDevice() const
{
Modified: trunk/storage/package/yast2-storage.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/storage/package/yast2-storage.changes?rev=49429&r1=49428&r2=49429&view=diff
==============================================================================
--- trunk/storage/package/yast2-storage.changes (original)
+++ trunk/storage/package/yast2-storage.changes Sat Jul 26 14:53:58 2008
@@ -1,4 +1,11 @@
-------------------------------------------------------------------
+Sat Jul 26 13:39:53 CEST 2008 - aschnell@suse.de
+
+- added getUnusedPartitionSlots, nextFreeMd, computeMdSize,
+ byteToHumanString and humanStringToByte to libstorage
+- version 2.17.4
+
+-------------------------------------------------------------------
Tue Jul 22 17:07:05 CEST 2008 - aschnell@suse.de
- added querying md state to libstorage (fate #303613)
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org