[haiku-commits] haiku.r1alpha4: hrevr1alpha4-44592 - src/preferences/virtualmemory build/jam src/system/kernel/vm src/bin src/data/beos_mime/text

  • From: leavengood@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 10 Sep 2012 01:33:05 +0200 (CEST)

hrevr1alpha4-44592 adds 21 changesets to branch 'r1alpha4'
old head: eec876e163fe562ac8278022a36e25b4527ca3da
new head: 9f36741b8aefda8e3c8684698c89f9b04dba9040

----------------------------------------------------------------------------

c9ac74f: Kernel VM: Style cleanup; No functional change

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

81d8910: Kernel VM: Improve swap file selection
  
  * Heavily based on Hamish Morrison's GCI work with some
    modified logic and cleanup. #3723
  * Adds automatic swap as well as user specified swap
  * Limits:
    Automatic: (ram * 2) up to 25% of the disk
    User: user specified up to 90% of the disk
  * Supports changing the swap disk location

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

33b1bc7: Kernel VM: Add compatibility logic
  
  * If old-format swap config file found, parse it properly

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

21556b6: Kernel VM: A few changes as per Axel in #7742
  
  * Avoid floating point numbers in the kernel
  * Warning would always show if custom swap file in use
  * Don't change a custom swap file size if low space occurs
  * Ram > 1GB? Don't double the memory for the automatic size

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

10fb1ad: Update several more packages for R1A4
  
  Conflicts:
  
        build/jam/OptionalPackages

                                     [ Scott McCreary <scottmc2@xxxxxxxxx> ]

9b844fb: Fix typo

                                     [ Scott McCreary <scottmc2@xxxxxxxxx> ]

d034e58: New icons for source code and patch files.
  
  Both are from #8867, created by Justin Stressman. The previous source code 
icon
  was not friendly to those with green color blindness. I also think it was an
  ugly green.
  
  Fixes #8867 of course.

                                  [ Ryan Leavengood <leavengood@xxxxxxxxx> ]

775ca69: Updated the list of contributers.
  
  Added people to the list contributers.
  Moved people to the list of past maintainers.
  Added GCI to our Google thanks.

                                        [ Humdinger <humdingerb@xxxxxxxxx> ]

8b84d1a: Small corrections to AboutSystem.
  
  Thanks Rene.

                                        [ Humdinger <humdingerb@xxxxxxxxx> ]

09cdc7f: Fixed warnings, 80 character line limit.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

e7c570c: Added fallback model string parsing for Intel CPUs.
  
  * When we do not have a predefined model string, we now try to parse
    the reported model string into something that is at least usable,
    and should look comparable to what we have now.
  * For models where the parsed type string is acceptable, we could remove
    the predefined ones.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

994ed1b: VM Preflet: Add support for device selection
  
  * Enables swap file to be placed on non-boot partition
  * Changes tied closely to recent kernel virtual memory change

                                    [ Hamish Morrison <hamish@xxxxxxxxxxx> ]

df015ac: VM Preflet: More throughly translate BAlert window titles
  
  * Ensure we call translate BAlert window titles

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

749ab62: VM Preflet: Style fix. bootDev to gBootDev. No functional change

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

a9816d4: VM Preflet: Add an automatic swap option swap_auto
  
  * Add swap_auto to the virtual memory settings file
  * Disable controls based on the context of what is enabled
  * hamishm gave permission to adjust his copyrights to Haiku, Inc.

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

39792a3: Kernel VM: Utilize swap_auto option
  
  * Refine the swap logic a little
  * Refine header copyright to preferred format
    I had hamishm's verbal permission to change his entry

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

45f231f: VM Preflet: Center properly on screen
  
  * On first run, dialog was at 0,0
  * Rename window location/settings file
    from VM_data to virtualmemory_preferences

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

c6a63eb: VM Preflet: More correctly calculate default swap

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

c7df018: VM Preflet: Style cleanup; check for success of fs_stat_dev
  
  * Cleanup as per Axel on the ML
  * Remove superfluous else statements

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

52d3e2e: VM Preflet: Add a BStatusBar to show swap file usage
  
  * Correct a situation where disabling the auto swap without
    adjusting the swap size would result in an invalid swap
    size getting written to the configuration

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

9f36741: VM Preflet: Fix user prompt string typo. Thanks ttcoder!

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

17 files changed, 1238 insertions(+), 768 deletions(-)
build/jam/OptionalBuildFeatures                  |   36 +-
build/jam/OptionalLibPackages                    |  204 +++----
build/jam/OptionalPackages                       |  124 ++--
headers/private/shared/cpu_type.h                |   62 +-
src/apps/aboutsystem/AboutSystem.cpp             |   29 +-
src/bin/sysinfo.cpp                              |   82 +--
src/data/beos_mime/text/x-patch                  |   20 +-
src/data/beos_mime/text/x-source-code            |   20 +-
src/preferences/virtualmemory/Jamfile            |   22 +-
src/preferences/virtualmemory/Settings.cpp       |  323 +++++-----
src/preferences/virtualmemory/Settings.h         |   82 ++-
src/preferences/virtualmemory/SettingsWindow.cpp |  574 +++++++++---------
src/preferences/virtualmemory/SettingsWindow.h   |   89 ++-
src/preferences/virtualmemory/VirtualMemory.cpp  |    1 +
src/preferences/virtualmemory/VirtualMemory.h    |   21 +-
src/system/kernel/vm/Jamfile                     |    2 +
src/system/kernel/vm/VMAnonymousCache.cpp        |  315 ++++++++--

############################################################################

Commit:      c9ac74f01852e42934552f2dbd3f9f891b147841
URL:         http://cgit.haiku-os.org/haiku/commit/?id=c9ac74f
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Tue Sep  4 13:42:36 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:00:08 2012 UTC

Kernel VM: Style cleanup; No functional change

----------------------------------------------------------------------------

diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp 
b/src/system/kernel/vm/VMAnonymousCache.cpp
index d9047df..eae0b54 100644
--- a/src/system/kernel/vm/VMAnonymousCache.cpp
+++ b/src/system/kernel/vm/VMAnonymousCache.cpp
@@ -159,7 +159,7 @@ protected:
 class ReadPage : public SwapTraceEntry {
 public:
        ReadPage(VMAnonymousCache* cache, page_num_t pageIndex,
-                       swap_addr_t swapSlotIndex)
+               swap_addr_t swapSlotIndex)
                :
                SwapTraceEntry(cache),
                fPageIndex(pageIndex),
@@ -183,7 +183,7 @@ private:
 class WritePage : public SwapTraceEntry {
 public:
        WritePage(VMAnonymousCache* cache, page_num_t pageIndex,
-                       swap_addr_t swapSlotIndex)
+               swap_addr_t swapSlotIndex)
                :
                SwapTraceEntry(cache),
                fPageIndex(pageIndex),
@@ -220,7 +220,7 @@ dump_swap_info(int argc, char** argv)
        kprintf("swap files:\n");
 
        for (SwapFileList::Iterator it = sSwapFileList.GetIterator();
-                       swap_file* file = it.Next();) {
+               swap_file* file = it.Next();) {
                swap_addr_t total = file->last_slot - file->first_slot;
                kprintf("  vnode: %p, pages: total: %lu, free: %lu\n",
                        file->vnode, total, file->bmp->free_slots);
@@ -283,9 +283,10 @@ swap_slot_alloc(uint32 count)
 
        // if this swap file has used more than 90% percent of its space
        // switch to another
-    if (sSwapFileAlloc->bmp->free_slots
-                       < (sSwapFileAlloc->last_slot - 
sSwapFileAlloc->first_slot) / 10)
+       if (sSwapFileAlloc->bmp->free_slots
+               < (sSwapFileAlloc->last_slot - sSwapFileAlloc->first_slot) / 
10) {
                sSwapFileAlloc = sSwapFileList.GetNext(sSwapFileAlloc);
+       }
 
        mutex_unlock(&sSwapFileListLock);
 
@@ -297,10 +298,11 @@ static swap_file*
 find_swap_file(swap_addr_t slotIndex)
 {
        for (SwapFileList::Iterator it = sSwapFileList.GetIterator();
-                       swap_file* swapFile = it.Next();) {
+               swap_file* swapFile = it.Next();) {
                if (slotIndex >= swapFile->first_slot
-                               && slotIndex < swapFile->last_slot)
+                       && slotIndex < swapFile->last_slot) {
                        return swapFile;
+               }
        }
 
        panic("find_swap_file(): can't find swap file for slot %ld\n", 
slotIndex);
@@ -426,7 +428,7 @@ VMAnonymousCache::~VMAnonymousCache()
 {
        // free allocated swap space and swap block
        for (off_t offset = virtual_base, toFree = fAllocatedSwapSize;
-                       offset < virtual_end && toFree > 0; offset += 
B_PAGE_SIZE) {
+               offset < virtual_end && toFree > 0; offset += B_PAGE_SIZE) {
                swap_addr_t slotIndex = _SwapBlockGetAddress(offset >> 
PAGE_SHIFT);
                if (slotIndex == SWAP_SLOT_NONE)
                        continue;
@@ -474,8 +476,8 @@ VMAnonymousCache::Resize(off_t newSize, int priority)
                swap_block* swapBlock = NULL;
 
                for (page_num_t pageIndex = (newSize + B_PAGE_SIZE - 1) >> 
PAGE_SHIFT;
-                               pageIndex < oldPageCount && fAllocatedSwapSize 
> 0;
-                               pageIndex++) {
+                       pageIndex < oldPageCount && fAllocatedSwapSize > 0; 
pageIndex++) {
+
                        WriteLocker locker(sSwapHashLock);
 
                        // Get the swap slot index for the page.
@@ -718,7 +720,7 @@ VMAnonymousCache::WriteAsync(off_t offset, const 
generic_io_vec* vecs,
 
        // create our callback
        WriteCallback* callback = (flags & B_VIP_IO_REQUEST) != 0
-               ? new(malloc_flags(HEAP_PRIORITY_VIP)) WriteCallback(this, 
_callback)
+               ? new(malloc_flags(HEAP_PRIORITY_VIP)) WriteCallback(this, 
_callback)
                : new(std::nothrow) WriteCallback(this, _callback);
        if (callback == NULL) {
                if (newSlot) {
@@ -731,8 +733,8 @@ VMAnonymousCache::WriteAsync(off_t offset, const 
generic_io_vec* vecs,
                _callback->IOFinished(B_NO_MEMORY, true, 0);
                return B_NO_MEMORY;
        }
-// TODO: If the page already had swap space assigned, we don't need an own
-// callback.
+       // TODO: If the page already had swap space assigned, we don't need an 
own
+       // callback.
 
        callback->SetTo(pageIndex, slotIndex, newSlot);
 
@@ -1038,7 +1040,7 @@ 
VMAnonymousCache::_MergePagesSmallerConsumer(VMAnonymousCache* source)
        // all pages of the source back to the consumer.
 
        for (VMCachePagesTree::Iterator it = pages.GetIterator();
-                       vm_page* page = it.Next();) {
+               vm_page* page = it.Next();) {
                // If a source page is in the way, remove and free it.
                vm_page* sourcePage = source->LookupPage(
                        (off_t)page->cache_offset << PAGE_SHIFT);
@@ -1067,9 +1069,9 @@ VMAnonymousCache::_MergeSwapPages(VMAnonymousCache* 
source)
                return;
 
        for (off_t offset = source->virtual_base
-                               & ~(off_t)(B_PAGE_SIZE * SWAP_BLOCK_PAGES - 1);
-                       offset < source->virtual_end;
-                       offset += B_PAGE_SIZE * SWAP_BLOCK_PAGES) {
+               & ~(off_t)(B_PAGE_SIZE * SWAP_BLOCK_PAGES - 1);
+               offset < source->virtual_end;
+               offset += B_PAGE_SIZE * SWAP_BLOCK_PAGES) {
 
                WriteLocker locker(sSwapHashLock);
 
@@ -1291,8 +1293,8 @@ void
 swap_init(void)
 {
        // create swap block cache
-       sSwapBlockCache = create_object_cache("swapblock",
-                       sizeof(swap_block), sizeof(void*), NULL, NULL, NULL);
+       sSwapBlockCache = create_object_cache("swapblock", sizeof(swap_block),
+               sizeof(void*), NULL, NULL, NULL);
        if (sSwapBlockCache == NULL)
                panic("swap_init(): can't create object cache for swap 
blocks\n");
 
@@ -1352,8 +1354,9 @@ swap_init_post_modules()
                size = string ? atoll(string) : 0;
 
                unload_driver_settings(settings);
-       } else
+       } else {
                size = (off_t)vm_page_num_pages() * B_PAGE_SIZE * 2;
+       }
 
        if (size < B_PAGE_SIZE)
                return;
@@ -1397,7 +1400,7 @@ swap_free_page_swap_space(vm_page* page)
        cache->fAllocatedSwapSize -= B_PAGE_SIZE;
        cache->_SwapBlockFree(page->cache_offset, 1);
 
-       return true;
+       return true;
 }
 
 
@@ -1419,16 +1422,19 @@ swap_total_swap_pages()
 
        uint32 totalSwapSlots = 0;
        for (SwapFileList::Iterator it = sSwapFileList.GetIterator();
-                       swap_file* swapFile = it.Next();)
+               swap_file* swapFile = it.Next();) {
                totalSwapSlots += swapFile->last_slot - swapFile->first_slot;
+       }
 
        mutex_unlock(&sSwapFileListLock);
 
        return totalSwapSlots;
 }
 
+
 #endif // ENABLE_SWAP_SUPPORT
 
+
 void
 swap_get_info(struct system_memory_info* info)
 {

############################################################################

Commit:      81d8910bd54584e42fd141c13e81bd5073805fe1
URL:         http://cgit.haiku-os.org/haiku/commit/?id=81d8910
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Tue Sep  4 15:58:38 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:00:20 2012 UTC

Ticket:      https://dev.haiku-os.org/ticket/3723

Kernel VM: Improve swap file selection

* Heavily based on Hamish Morrison's GCI work with some
  modified logic and cleanup. #3723
* Adds automatic swap as well as user specified swap
* Limits:
  Automatic: (ram * 2) up to 25% of the disk
  User: user specified up to 90% of the disk
* Supports changing the swap disk location

----------------------------------------------------------------------------

diff --git a/src/system/kernel/vm/Jamfile b/src/system/kernel/vm/Jamfile
index fa0282d..a646e71 100644
--- a/src/system/kernel/vm/Jamfile
+++ b/src/system/kernel/vm/Jamfile
@@ -3,6 +3,8 @@ SubDir HAIKU_TOP src system kernel vm ;
 UsePrivateHeaders shared ;
 
 UseHeaders [ FDirName $(SUBDIR) $(DOTDOT) device_manager ] ;
+UsePrivateHeaders [ FDirName kernel disk_device_manager ] ;
+UsePrivateHeaders [ FDirName kernel util ] ;
 
 KernelMergeObject kernel_vm.o :
        PageCacheLocker.cpp
diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp 
b/src/system/kernel/vm/VMAnonymousCache.cpp
index eae0b54..a9d4bc8 100644
--- a/src/system/kernel/vm/VMAnonymousCache.cpp
+++ b/src/system/kernel/vm/VMAnonymousCache.cpp
@@ -1,4 +1,6 @@
 /*
+ * Copyright 2012, Alexander von Gluck IV, kallisti5@xxxxxxxxxxxx
+ * Copyright 2011, Hamish Morrison, hamish@xxxxxxxxxxxx
  * Copyright 2008, Zhao Shuai, upczhsh@xxxxxxxx
  * Copyright 2008-2011, Ingo Weinhold, ingo_weinhold@xxxxxxx
  * Copyright 2002-2009, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx
@@ -17,13 +19,20 @@
 #include <string.h>
 #include <unistd.h>
 
+#include <FindDirectory.h>
 #include <KernelExport.h>
 #include <NodeMonitor.h>
 
 #include <arch_config.h>
 #include <boot_device.h>
+#include <disk_device_manager/KDiskDevice.h>
+#include <disk_device_manager/KDiskDeviceManager.h>
+#include <disk_device_manager/KDiskSystem.h>
+#include <disk_device_manager/KPartitionVisitor.h>
 #include <driver_settings.h>
 #include <fs/fd.h>
+#include <fs/KPath.h>
+#include <fs_info.h>
 #include <fs_interface.h>
 #include <heap.h>
 #include <kernel_daemon.h>
@@ -69,6 +78,8 @@
 #define SWAP_BLOCK_MASK  (SWAP_BLOCK_PAGES - 1)
 
 
+static const char* const kDefaultSwapPath = "/var/swap";
+
 struct swap_file : DoublyLinkedListLinkImpl<swap_file> {
        int                             fd;
        struct vnode*   vnode;
@@ -1167,6 +1178,93 @@ VMAnonymousCache::_MergeSwapPages(VMAnonymousCache* 
source)
 // #pragma mark -
 
 
+// TODO: This can be removed if we get BFS uuid's
+struct VolumeInfo {
+       char name[B_FILE_NAME_LENGTH];
+       char device[B_FILE_NAME_LENGTH];
+       char filesystem[B_OS_NAME_LENGTH];
+       off_t capacity;
+};
+
+
+class PartitionScorer : public KPartitionVisitor {
+public:
+       PartitionScorer(VolumeInfo& volumeInfo)
+               :
+               fBestPartition(NULL),
+               fBestScore(-1),
+               fVolumeInfo(volumeInfo)
+       {
+       }
+
+       virtual bool VisitPre(KPartition* partition)
+       {
+               if (!partition->ContainsFileSystem())
+                       return false;
+
+               KPath path;
+               partition->GetPath(&path);
+
+               int score = 0;
+               if (strcmp(fVolumeInfo.name, partition->ContentName()) == 0)
+                       score += 4;
+               if (strcmp(fVolumeInfo.device, path.Path()) == 0)
+                       score += 3;
+               if (fVolumeInfo.capacity == partition->Size())
+                       score += 2;
+               if (strcmp(fVolumeInfo.filesystem,
+                       partition->DiskSystem()->ShortName()) == 0) {
+                       score += 1;
+               }
+               if (score >= 4 && score > fBestScore) {
+                       fBestPartition = partition;
+                       fBestScore = score;
+               }
+
+               return false;
+       }
+
+       KPartition* fBestPartition;
+
+private:
+       int32           fBestScore;
+       VolumeInfo      fVolumeInfo;
+};
+
+
+status_t
+get_mount_point(KPartition* partition, KPath* mountPoint)
+{
+       if (!mountPoint || !partition->ContainsFileSystem())
+               return B_BAD_VALUE;
+
+       const char* volumeName = partition->ContentName();
+       if (!volumeName || strlen(volumeName) == 0)
+               volumeName = partition->Name();
+       if (!volumeName || strlen(volumeName) == 0)
+               volumeName = "unnamed volume";
+
+       char basePath[B_PATH_NAME_LENGTH];
+       int32 len = snprintf(basePath, sizeof(basePath), "/%s", volumeName);
+       for (int32 i = 1; i < len; i++)
+               if (basePath[i] == '/')
+               basePath[i] = '-';
+       char* path = mountPoint->LockBuffer();
+       int32 pathLen = mountPoint->BufferSize();
+       strncpy(path, basePath, pathLen);
+
+       struct stat dummy;
+       for (int i = 1; ; i++) {
+               if (stat(path, &dummy) != 0)
+                       break;
+               snprintf(path, pathLen, "%s%d", basePath, i);
+       }
+
+       mountPoint->UnlockBuffer();
+       return B_OK;
+}
+
+
 status_t
 swap_file_add(const char* path)
 {
@@ -1340,47 +1438,161 @@ swap_init_post_modules()
        if (gReadOnlyBootDevice)
                return;
 
-       off_t size = 0;
+       bool swapEnabled = true;
+       bool swapAutomatic = true;
+       off_t swapSize = 0;
+       VolumeInfo selectedVolume = {};
 
        void* settings = load_driver_settings("virtual_memory");
+
        if (settings != NULL) {
-               if (!get_driver_boolean_parameter(settings, "vm", false, 
false)) {
-                       unload_driver_settings(settings);
-                       return;
+               // We pass a lot of information on the swap device, this is 
mostly to
+               // ensure that we are dealing with the same device that was 
configured.
+
+               // TODO: Some kind of BFS uuid would be great here :)
+               const char* enabled = get_driver_parameter(settings, "vm", 
NULL, NULL);
+
+               if (enabled != NULL) {
+                       swapEnabled = get_driver_boolean_parameter(settings, 
"vm",
+                               false, false);
+
+                       const char* size = get_driver_parameter(settings, 
"swap_size",
+                               NULL, NULL);
+                       const char* volume = get_driver_parameter(settings,
+                               "swap_volume_name", NULL, NULL);
+                       const char* device = get_driver_parameter(settings,
+                               "swap_volume_device", NULL, NULL);
+                       const char* filesystem = get_driver_parameter(settings,
+                               "swap_volume_filesystem", NULL, NULL);
+                       const char* capacity = get_driver_parameter(settings,
+                               "swap_volume_capacity", NULL, NULL);
+
+                       if (size != NULL && device != NULL && volume != NULL
+                               && filesystem != NULL && capacity != NULL) {
+                               // User specified a size / volume
+                               swapAutomatic = false;
+                               swapSize = atoll(size);
+                               strncpy(selectedVolume.name, volume,
+                                       sizeof(selectedVolume.name));
+                               strncpy(selectedVolume.device, device,
+                                       sizeof(selectedVolume.device));
+                               strncpy(selectedVolume.filesystem, filesystem,
+                                       sizeof(selectedVolume.filesystem));
+                               selectedVolume.capacity = atoll(capacity);
+                       }
                }
+               unload_driver_settings(settings);
+       }
 
-               const char* string = get_driver_parameter(settings, 
"swap_size", NULL,
-                       NULL);
-               size = string ? atoll(string) : 0;
+       if (swapAutomatic) {
+               swapEnabled = true;
+               swapSize = (off_t)vm_page_num_pages() * B_PAGE_SIZE * 2;
+       }
 
-               unload_driver_settings(settings);
+       if (!swapEnabled || swapSize < B_PAGE_SIZE)
+               return;
+
+       dev_t dev = -1;
+
+       if (!swapAutomatic) {
+               KDiskDeviceManager::CreateDefault();
+               KDiskDeviceManager* manager = KDiskDeviceManager::Default();
+               PartitionScorer visitor(selectedVolume);
+
+               KDiskDevice* device;
+               int32 cookie = 0;
+               while ((device = manager->NextDevice(&cookie)) != NULL) {
+                       if (device->IsReadOnlyMedia() || device->IsWriteOnce()
+                               || device->IsRemovable()) {
+                               continue;
+                       }
+                       device->VisitEachDescendant(&visitor);
+               }
+
+               if (!visitor.fBestPartition) {
+                       dprintf("%s: Can't find configured swap partition 
'%s'\n",
+                               __func__, selectedVolume.name);
+               } else {
+                       if (visitor.fBestPartition->IsMounted())
+                               dev = visitor.fBestPartition->VolumeID();
+                       else {
+                               KPath devPath, mountPoint;
+                               visitor.fBestPartition->GetPath(&devPath);
+                               get_mount_point(visitor.fBestPartition, 
&mountPoint);
+                               const char* mountPath = mountPoint.Path();
+                               mkdir(mountPath, S_IRWXU | S_IRWXG | S_IRWXO);
+                               dev = _kern_mount(mountPath, devPath.Path(),
+                                       NULL, 0, NULL, 0);
+                               if (dev < 0) {
+                                       dprintf("%s: Can't mount configured 
swap partition '%s'\n",
+                                               __func__, selectedVolume.name);
+                               }
+                       }
+               }
+       }
+
+       if (dev < 0)
+               dev = gBootDevice;
+
+       KPath path;
+       struct fs_info info;
+       _kern_read_fs_info(dev, &info);
+       if (dev == gBootDevice)
+               path = kDefaultSwapPath;
+       else {
+               vfs_entry_ref_to_path(info.dev, info.root,
+                       ".", path.LockBuffer(), path.BufferSize());
+               path.UnlockBuffer();
+               path.Append("swap");
+       }
+
+       const char* swapPath = path.Path();
+
+       // Swap size limits prevent oversized swap files
+       off_t existingSwapSize = 0;
+       struct stat existingSwapStat;
+       if (stat(swapPath, &existingSwapStat) == 0)
+               existingSwapSize = existingSwapStat.st_size;
+
+       off_t freeSpace = info.free_blocks * info.block_size + existingSwapSize;
+       off_t maxSwap = freeSpace;
+       if (swapAutomatic) {
+               // Adjust automatic swap to a maximum of 25% of the free space
+               maxSwap = (off_t)(0.25 * freeSpace);
        } else {
-               size = (off_t)vm_page_num_pages() * B_PAGE_SIZE * 2;
+               // If user specified, leave 10% of the disk free
+               maxSwap = freeSpace - (off_t)(0.10 * freeSpace);
+               dprintf("%s: Warning: User specified swap file consumes over 
90%% of "
+                       "the available free space, limiting to 90%%\n", 
__func__);
        }
 
-       if (size < B_PAGE_SIZE)
-               return;
+       if (swapSize > maxSwap)
+               swapSize = maxSwap;
 
-       int fd = open("/var/swap", O_RDWR | O_CREAT | O_NOCACHE, S_IRUSR | 
S_IWUSR);
+       // Create swap file
+       int fd = open(swapPath, O_RDWR | O_CREAT | O_NOCACHE, S_IRUSR | 
S_IWUSR);
        if (fd < 0) {
-               dprintf("Can't open/create /var/swap: %s\n", strerror(errno));
+               dprintf("%s: Can't open/create %s: %s\n", __func__,
+                       swapPath, strerror(errno));
                return;
        }
 
        struct stat stat;
-       stat.st_size = size;
+       stat.st_size = swapSize;
        status_t error = _kern_write_stat(fd, NULL, false, &stat,
                sizeof(struct stat), B_STAT_SIZE | B_STAT_SIZE_INSECURE);
        if (error != B_OK) {
-               dprintf("Failed to resize /var/swap to %lld bytes: %s\n", size,
-                       strerror(error));
+               dprintf("%s: Failed to resize %s to %lld bytes: %s\n", __func__,
+                       swapPath, swapSize, strerror(error));
        }
 
        close(fd);
 
-       error = swap_file_add("/var/swap");
-       if (error != B_OK)
-               dprintf("Failed to add swap file /var/swap: %s\n", 
strerror(error));
+       error = swap_file_add(swapPath);
+       if (error != B_OK) {
+               dprintf("%s: Failed to add swap file %s: %s\n", __func__, 
swapPath,
+                       strerror(error));
+       }
 }
 
 

############################################################################

Commit:      33b1bc7bf7db79dfac105a7d8f6ecfb83c4372dd
URL:         http://cgit.haiku-os.org/haiku/commit/?id=33b1bc7
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Tue Sep  4 18:27:33 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:02:32 2012 UTC

Kernel VM: Add compatibility logic

* If old-format swap config file found, parse it properly

----------------------------------------------------------------------------

diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp 
b/src/system/kernel/vm/VMAnonymousCache.cpp
index a9d4bc8..4c597d9 100644
--- a/src/system/kernel/vm/VMAnonymousCache.cpp
+++ b/src/system/kernel/vm/VMAnonymousCache.cpp
@@ -1441,6 +1441,8 @@ swap_init_post_modules()
        bool swapEnabled = true;
        bool swapAutomatic = true;
        off_t swapSize = 0;
+
+       dev_t swapDeviceID = -1;
        VolumeInfo selectedVolume = {};
 
        void* settings = load_driver_settings("virtual_memory");
@@ -1479,6 +1481,11 @@ swap_init_post_modules()
                                strncpy(selectedVolume.filesystem, filesystem,
                                        sizeof(selectedVolume.filesystem));
                                selectedVolume.capacity = atoll(capacity);
+                       } else if (size != NULL) {
+                               // Older file format, no location information 
(assume /var/swap)
+                               swapAutomatic = false;
+                               swapSize = atoll(size);
+                               swapDeviceID = gBootDevice;
                        }
                }
                unload_driver_settings(settings);
@@ -1492,9 +1499,8 @@ swap_init_post_modules()
        if (!swapEnabled || swapSize < B_PAGE_SIZE)
                return;
 
-       dev_t dev = -1;
-
-       if (!swapAutomatic) {
+       if (!swapAutomatic && swapDeviceID < 0) {
+               // If user-specified swap, and no swap device has been chosen 
yet...
                KDiskDeviceManager::CreateDefault();
                KDiskDeviceManager* manager = KDiskDeviceManager::Default();
                PartitionScorer visitor(selectedVolume);
@@ -1514,16 +1520,16 @@ swap_init_post_modules()
                                __func__, selectedVolume.name);
                } else {
                        if (visitor.fBestPartition->IsMounted())
-                               dev = visitor.fBestPartition->VolumeID();
+                               swapDeviceID = 
visitor.fBestPartition->VolumeID();
                        else {
                                KPath devPath, mountPoint;
                                visitor.fBestPartition->GetPath(&devPath);
                                get_mount_point(visitor.fBestPartition, 
&mountPoint);
                                const char* mountPath = mountPoint.Path();
                                mkdir(mountPath, S_IRWXU | S_IRWXG | S_IRWXO);
-                               dev = _kern_mount(mountPath, devPath.Path(),
+                               swapDeviceID = _kern_mount(mountPath, 
devPath.Path(),
                                        NULL, 0, NULL, 0);
-                               if (dev < 0) {
+                               if (swapDeviceID < 0) {
                                        dprintf("%s: Can't mount configured 
swap partition '%s'\n",
                                                __func__, selectedVolume.name);
                                }
@@ -1531,13 +1537,15 @@ swap_init_post_modules()
                }
        }
 
-       if (dev < 0)
-               dev = gBootDevice;
+       if (swapDeviceID < 0)
+               swapDeviceID = gBootDevice;
+
+       // We now have a swapDeviceID which is used for the swap file
 
        KPath path;
        struct fs_info info;
-       _kern_read_fs_info(dev, &info);
-       if (dev == gBootDevice)
+       _kern_read_fs_info(swapDeviceID, &info);
+       if (swapDeviceID == gBootDevice)
                path = kDefaultSwapPath;
        else {
                vfs_entry_ref_to_path(info.dev, info.root,

############################################################################

Commit:      21556b610da23d0def04f9dca801714141c6b057
URL:         http://cgit.haiku-os.org/haiku/commit/?id=21556b6
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Tue Sep  4 20:35:10 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:03:22 2012 UTC

Ticket:      https://dev.haiku-os.org/ticket/7742

Kernel VM: A few changes as per Axel in #7742

* Avoid floating point numbers in the kernel
* Warning would always show if custom swap file in use
* Don't change a custom swap file size if low space occurs
* Ram > 1GB? Don't double the memory for the automatic size

----------------------------------------------------------------------------

diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp 
b/src/system/kernel/vm/VMAnonymousCache.cpp
index 4c597d9..ae0d979 100644
--- a/src/system/kernel/vm/VMAnonymousCache.cpp
+++ b/src/system/kernel/vm/VMAnonymousCache.cpp
@@ -1493,7 +1493,11 @@ swap_init_post_modules()
 
        if (swapAutomatic) {
                swapEnabled = true;
-               swapSize = (off_t)vm_page_num_pages() * B_PAGE_SIZE * 2;
+               swapSize = (off_t)vm_page_num_pages() * B_PAGE_SIZE;
+               if (swapSize <= (1024 * 1024 * 1024)) {
+                       // Memory under 1GB? double the swap
+                       swapSize *= 2;
+               }
        }
 
        if (!swapEnabled || swapSize < B_PAGE_SIZE)
@@ -1557,26 +1561,19 @@ swap_init_post_modules()
        const char* swapPath = path.Path();
 
        // Swap size limits prevent oversized swap files
-       off_t existingSwapSize = 0;
-       struct stat existingSwapStat;
-       if (stat(swapPath, &existingSwapStat) == 0)
-               existingSwapSize = existingSwapStat.st_size;
-
-       off_t freeSpace = info.free_blocks * info.block_size + existingSwapSize;
-       off_t maxSwap = freeSpace;
        if (swapAutomatic) {
+               off_t existingSwapSize = 0;
+               struct stat existingSwapStat;
+               if (stat(swapPath, &existingSwapStat) == 0)
+                       existingSwapSize = existingSwapStat.st_size;
+
+               off_t freeSpace = info.free_blocks * info.block_size + 
existingSwapSize;
+
                // Adjust automatic swap to a maximum of 25% of the free space
-               maxSwap = (off_t)(0.25 * freeSpace);
-       } else {
-               // If user specified, leave 10% of the disk free
-               maxSwap = freeSpace - (off_t)(0.10 * freeSpace);
-               dprintf("%s: Warning: User specified swap file consumes over 
90%% of "
-                       "the available free space, limiting to 90%%\n", 
__func__);
+               if (swapSize > (freeSpace / 4))
+                       swapSize = (freeSpace / 4);
        }
 
-       if (swapSize > maxSwap)
-               swapSize = maxSwap;
-
        // Create swap file
        int fd = open(swapPath, O_RDWR | O_CREAT | O_NOCACHE, S_IRUSR | 
S_IWUSR);
        if (fd < 0) {

############################################################################

Commit:      10fb1ad5bfbf6d8034979827dac8f22897e901d6
URL:         http://cgit.haiku-os.org/haiku/commit/?id=10fb1ad
Author:      Scott McCreary <scottmc2@xxxxxxxxx>
Date:        Wed Sep  5 04:19:22 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:05:51 2012 UTC

Update several more packages for R1A4

Conflicts:

        build/jam/OptionalPackages

----------------------------------------------------------------------------

diff --git a/build/jam/OptionalBuildFeatures b/build/jam/OptionalBuildFeatures
index ca6c869..a13e19e 100644
--- a/build/jam/OptionalBuildFeatures
+++ b/build/jam/OptionalBuildFeatures
@@ -66,8 +66,8 @@ if $(HAIKU_BUILD_FEATURE_SSL) {
 # ICU
 
 # Note ICU isn't actually optional, but is still an external package
-HAIKU_ICU_GCC_2_PACKAGE = icu-4.8.1-x86-gcc2-2011-11-02a.zip ;
-HAIKU_ICU_GCC_4_PACKAGE = icu-4.8.1-x86-gcc4-2011-11-02.zip ;
+HAIKU_ICU_GCC_2_PACKAGE = icu-4.8.1.1-r1a4-x86-gcc2-2012-08-29.zip ;
+HAIKU_ICU_GCC_4_PACKAGE = icu-4.8.1.1-r1a4-x86-gcc4-2012-08-29.zip ;
 HAIKU_ICU_PPC_PACKAGE = icu-4.8.1-ppc-2011-08-20.zip ;
 
 if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 {
@@ -224,19 +224,19 @@ if $(TARGET_ARCH) = x86 {
 local ffmpegBaseURL = $(baseURL)/lib ;
 if $(TARGET_ARCH) = x86 {
        if $(HAIKU_GCC_VERSION[1]) >= 4 {
-               HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-x86-gcc4-2012-03-28.zip ;
-               HAIKU_SPEEX_FILE = speex-1.2rc1-x86-gcc4-2012-03-12.zip ;
-               HAIKU_LIBTHEORA_FILE = libtheora-1.1.1-x86-gcc4-2012-03-12.zip ;
-               HAIKU_LIBVORBIS_FILE = libvorbis-1.3.2-x86-gcc4-2012-03-12.zip ;
-               HAIKU_LIBOGG_FILE = libogg-1.3.0-x86-gcc4-2012-03-12.zip ;
-               HAIKU_LIBVPX_FILE = libvpx-1.0.0-x86-gcc4-2012-03-14.zip ;
+               HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-r1a4-x86-gcc4-2012-09-02.zip ;
+               HAIKU_SPEEX_FILE = speex-1.2rc1-r1a4-x86-gcc4-2012-09-02.zip ;
+               HAIKU_LIBTHEORA_FILE = 
libtheora-1.1.1-r1a4-x86-gcc4-2012-09-02.zip ;
+               HAIKU_LIBVORBIS_FILE = 
libvorbis-1.3.2-r1a4-x86-gcc4-2012-09-02.zip ;
+               HAIKU_LIBOGG_FILE = libogg-1.3.0-r1a4-x86-gcc4-2012-09-02.zip ;
+               HAIKU_LIBVPX_FILE = libvpx-1.0.0-r1a4-x86-gcc4-2012-09-02.zip ;
        } else {
-               HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-x86-gcc2-2012-03-28.zip ;
-               HAIKU_SPEEX_FILE = speex-1.2rc1-x86-gcc2-2012-03-11.zip ;
-               HAIKU_LIBTHEORA_FILE = libtheora-1.1.1-x86-gcc2-2012-03-11.zip ;
-               HAIKU_LIBVORBIS_FILE = libvorbis-1.3.2-x86-gcc2-2012-03-11.zip ;
-               HAIKU_LIBOGG_FILE = libogg-1.3.0-x86-gcc2-2012-03-11.zip ;
-               HAIKU_LIBVPX_FILE = libvpx-1.0.0-x86-gcc2-2012-03-14.zip ;
+               HAIKU_FFMPEG_FILE = ffmpeg-0.10.2-r1a4-x86-gcc2-2012-08-30.zip ;
+               HAIKU_SPEEX_FILE = speex-1.2rc1-r1a4-x86-gcc2-2012-08-29.zip ;
+               HAIKU_LIBTHEORA_FILE = 
libtheora-1.1.1-r1a4-x86-gcc2-2012-08-29.zip ;
+               HAIKU_LIBVORBIS_FILE = 
libvorbis-1.3.2-r1a4-x86-gcc2-2012-08-29.zip ;
+               HAIKU_LIBOGG_FILE = libogg-1.3.0-r1a4-x86-gcc2-2012-08-29.zip ;
+               HAIKU_LIBVPX_FILE = libvpx-1.0.0-r1a4-x86-gcc2-2012-08-29.zip ;
        }
 
        local ffmpegZipFile = [ DownloadFile $(HAIKU_FFMPEG_FILE)
@@ -346,9 +346,9 @@ if $(TARGET_ARCH) = x86 {
 local mikmodBaseURL = http://haiku-files.org/files/optional-packages/lib ;
 if $(TARGET_ARCH) = x86 {
        if $(HAIKU_GCC_VERSION[1]) >= 4 {
-               HAIKU_MIKMOD_FILE = 
libmikmod-3.1.11-r1a3-x86-gcc4-2011-05-26.zip ;
+               HAIKU_MIKMOD_FILE = 
libmikmod-3.1.11-r1a4-x86-gcc4-2012-09-02.zip ;
        } else {
-               HAIKU_MIKMOD_FILE = 
libmikmod-3.1.11-r1a3-x86-gcc2-2011-05-19.zip ;
+               HAIKU_MIKMOD_FILE = 
libmikmod-3.1.11-r1a4-x86-gcc2-2012-08-29.zip ;
        }
 
        local mikmodZipFile = [ DownloadFile $(HAIKU_MIKMOD_FILE)
@@ -380,7 +380,7 @@ if $(TARGET_ARCH) = ppc || $(TARGET_ARCH) = x86 {
        if $(TARGET_ARCH) = ppc {
                HAIKU_FREETYPE_FILE = freetype-2.4.9-ppc-gcc4-2012-06-26.zip ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
-               HAIKU_FREETYPE_FILE = freetype-2.4.9-x86-gcc4-2012-06-15.zip ;
+               HAIKU_FREETYPE_FILE = 
freetype-2.4.9-r1a4-x86-gcc4-2012-09-02.zip ;
        } else {
                HAIKU_FREETYPE_FILE = 
freetype-2.4.9-r1a4-x86-gcc2-2012-08-28.zip ;
        }
@@ -425,7 +425,7 @@ if [ IsOptionalHaikuImagePackageAdded TagLib ] {
        HAIKU_BUILD_FEATURE_TAGLIB = 1 ;
 }
 
-HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a3-x86-gcc2-2011-05-20.zip ;
+HAIKU_TAGLIB_PACKAGE = taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ;
 HAIKU_TAGLIB_URL = $(baseURL)/$(HAIKU_TAGLIB_PACKAGE) ;
 
 if $(HAIKU_BUILD_FEATURE_TAGLIB) {
diff --git a/build/jam/OptionalLibPackages b/build/jam/OptionalLibPackages
index d1902ea..b02eada 100644
--- a/build/jam/OptionalLibPackages
+++ b/build/jam/OptionalLibPackages
@@ -83,13 +83,13 @@ if [ IsOptionalHaikuImagePackageAdded fribidi ] {
                Echo "No optional package fribidi available for $(TARGET_ARCH)" 
;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       fribidi-0.19.2-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/fribidi-0.19.2-r1a3-x86-gcc4-2011-05-26.zip
+                       fribidi-0.19.2-r1a4-x86-gcc4-2012-09-01.zip
+                       : 
$(baseURL)/lib/fribidi-0.19.2-r1a4-x86-gcc4-2012-09-01.zip
                        : : true ;
        } else {
                InstallOptionalHaikuImagePackage
-                       fribidi-0.19.2-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/fribidi-0.19.2-r1a3-x86-gcc2-2011-05-19.zip
+                       fribidi-0.19.2-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/fribidi-0.19.2-r1a4-x86-gcc2-2012-08-29.zip
                        : : true ;
        }
 }
@@ -101,13 +101,13 @@ if [ IsOptionalHaikuImagePackageAdded lcms ] {
                Echo "No optional package lcms available for $(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       lcms-2.1-r1a3-x86-gcc4-2011-05-26.zip
-                       : $(baseURL)/lib/lcms-2.1-r1a3-x86-gcc4-2011-05-26.zip
+                       lcms-2.1-r1a4-x86-gcc4-2012-09-02.zip
+                       : $(baseURL)/lib/lcms-2.1-r1a4-x86-gcc4-2012-09-02.zip
                        : : true ;
        } else {
                InstallOptionalHaikuImagePackage
-                       lcms-2.1-r1a3-x86-gcc2-2011-05-19.zip
-                       : $(baseURL)/lib/lcms-2.1-r1a3-x86-gcc2-2011-05-19.zip
+                       lcms-2.1-r1a4-x86-gcc2-2012-08-29.zip
+                       : $(baseURL)/lib/lcms-2.1-r1a4-x86-gcc2-2012-08-29.zip
                        : : true ;
        }
 }
@@ -119,13 +119,13 @@ if [ IsOptionalHaikuImagePackageAdded libart_lgpl ] {
                Echo "No optional package libart_lgpl available for 
$(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       libart_lgpl-2.3.21-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libart_lgpl-2.3.21-r1a3-x86-gcc4-2011-05-26.zip
+                       libart_lgpl-2.3.21-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libart_lgpl-2.3.21-r1a4-x86-gcc4-2012-09-02.zip
                        : : true ;
        } else {
                InstallOptionalHaikuImagePackage
-                       libart_lgpl-2.3.21-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libart_lgpl-2.3.21-r1a3-x86-gcc2-2011-05-19.zip
+                       libart_lgpl-2.3.21-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libart_lgpl-2.3.21-r1a4-x86-gcc2-2012-08-29.zip
                        : : true ;
        }
 }
@@ -137,13 +137,13 @@ if [ IsOptionalHaikuImagePackageAdded libmad ] {
                Echo "No optional package libmad available for $(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       libmad-0.15.1b-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libmad-0.15.1b-r1a3-x86-gcc4-2011-05-26.zip
+                       libmad-0.15.1b-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libmad-0.15.1b-r1a4-x86-gcc4-2012-09-02.zip
                        : : true ;
        } else {
                InstallOptionalHaikuImagePackage
-                       libmad-0.15.1b-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libmad-0.15.1b-r1a3-x86-gcc2-2011-05-19.zip
+                       libmad-0.15.1b-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libmad-0.15.1b-r1a4-x86-gcc2-2012-08-29.zip
                        : : true ;
        }
 }
@@ -155,13 +155,13 @@ if [ IsOptionalHaikuImagePackageAdded libmikmod ] {
                Echo "No optional package libmikmod available for 
$(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       libmikmod-3.1.11-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libmikmod-3.1.11-r1a3-x86-gcc4-2011-05-26.zip
+                       libmikmod-3.1.11-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libmikmod-3.1.11-r1a4-x86-gcc4-2012-09-02.zip
                        : : true ;
        } else {
                InstallOptionalHaikuImagePackage
-                       libmikmod-3.1.11-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libmikmod-3.1.11-r1a3-x86-gcc2-2011-05-19.zip
+                       libmikmod-3.1.11-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libmikmod-3.1.11-r1a4-x86-gcc2-2012-08-29.zip
                        : : true ;
        }
 }
@@ -173,13 +173,13 @@ if [ IsOptionalHaikuImagePackageAdded libmodplug ] {
                Echo "No optional package libmodplug available for 
$(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       libmodplug-0.8.8.1-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libmodplug-0.8.8.1-r1a3-x86-gcc4-2011-05-26.zip
+                       libmodplug-0.8.8.4-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libmodplug-0.8.8.4-r1a4-x86-gcc4-2012-09-02.zip
                        : : true ;
        } else {
                InstallOptionalHaikuImagePackage
-                       libmodplug-0.8.8.1-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libmodplug-0.8.8.1-r1a3-x86-gcc2-2011-05-19.zip
+                       libmodplug-0.8.8.4-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libmodplug-0.8.8.4-r1a4-x86-gcc2-2012-08-29.zip
                        : : true ;
        }
 }
@@ -191,13 +191,13 @@ if [ IsOptionalHaikuImagePackageAdded libpaper ] {
                Echo "No optional package libpaper available for 
$(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       libpaper-1.1.24-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libpaper-1.1.24-r1a3-x86-gcc4-2011-05-26.zip
+                       libpaper-1.1.24-r1a4-x86-gcc4-2012-09-01.zip
+                       : 
$(baseURL)/lib/libpaper-1.1.24-r1a4-x86-gcc4-2012-09-01.zip
                        : : true ;
        } else {
                InstallOptionalHaikuImagePackage
-                       libpaper-1.1.24-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libpaper-1.1.24-r1a3-x86-gcc2-2011-05-19.zip
+                       libpaper-1.1.24-r1a4-x86-gcc4-2012-09-01.zip
+                       : 
$(baseURL)/lib/libpaper-1.1.24-r1a4-x86-gcc4-2012-09-01.zip
                        : : true ;
        }
 }
@@ -227,78 +227,78 @@ if [ IsOptionalHaikuImagePackageAdded SDLLibs ] {
                Echo "No optional package SDLLibs available for $(TARGET_ARCH)" 
;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       libsdl-1.2.15-x86-gcc4-2012-05-31.zip
-                       : $(baseURL)/lib/libsdl-1.2.15-x86-gcc4-2012-05-31.zip ;
+                       libsdl-1.2.15-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libsdl-1.2.15-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       guilib-1.2.1-x86-gcc4-2012-05-31.zip
-                       : $(baseURL)/lib/guilib-1.2.1-x86-gcc4-2012-05-31.zip ;
+                       guilib-1.2.1-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/guilib-1.2.1-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-gfx-2.0.23-x86-gcc4-2012-05-31.zip
-                       : $(baseURL)/lib/sdl-gfx-2.0.23-x86-gcc4-2012-05-31.zip 
;
+                       sdl-gfx-2.0.23-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/sdl-gfx-2.0.23-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-image-1.2.12-x86-gcc4-2012-05-31.zip
-                       : 
$(baseURL)/lib/sdl-image-1.2.12-x86-gcc4-2012-05-31.zip ;
+                       sdl-image-1.2.12-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/sdl-image-1.2.12-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-mixer-1.2.11-x86-gcc4-2012-05-31.zip
-                       : 
$(baseURL)/lib/sdl-mixer-1.2.11-x86-gcc4-2012-05-31.zip ;
+                       sdl-mixer-1.2.11-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/sdl-mixer-1.2.11-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-net-1.2.8-x86-gcc4-2012-05-31.zip
-                       : $(baseURL)/lib/sdl-net-1.2.8-x86-gcc4-2012-05-31.zip ;
+                       sdl-net-1.2.8-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/sdl-net-1.2.8-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-sound-1.0.3-x86-gcc4-2012-05-31.zip
-                       : 
$(baseURL)/lib/sdl-sound-1.0.3-x86-gcc4-2012-05-31.zip ;
+                       sdl-sound-1.0.3-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/sdl-sound-1.0.3-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-rtf-0.1.0-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/sdl-rtf-0.1.0-r1a3-x86-gcc4-2011-05-26.zip ;
+                       sdl-rtf-0.1.0-r1a4-x86-gcc4-2012-09-03.zip
+                       : 
$(baseURL)/lib/sdl-rtf-0.1.0-r1a4-x86-gcc4-2012-09-03.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-ttf-2.0.11-x86-gcc4-2012-05-31.zip
-                       : $(baseURL)/lib/sdl-ttf-2.0.11-x86-gcc4-2012-05-31.zip 
;
+                       sdl-ttf-2.0.11-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/sdl-ttf-2.0.11-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       sge-030809-x86-gcc4-2012-05-31.zip
-                       : $(baseURL)/lib/sge-030809-x86-gcc4-2012-05-31.zip ;
+                       sge-030809-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/sge-030809-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       smjpeg-0.2.1-x86-gcc4-2012-05-31.zip
-                       : $(baseURL)/lib/smjpeg-0.2.1-x86-gcc4-2012-05-31.zip ;
+                       smjpeg-0.2.1-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/smjpeg-0.2.1-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       smpeg-0.4.5-x86-gcc4-2011-05-31.zip
-                       : $(baseURL)/lib/smpeg-0.4.5-x86-gcc4-2012-05-31.zip ;
+                       smpeg-0.4.5-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/smpeg-0.4.5-r1a4-x86-gcc4-2012-09-02.zip ;
        } else {
                InstallOptionalHaikuImagePackage
-                       libsdl-1.2.15-x86-gcc2-2012-06-24.zip
-                       : $(baseURL)/lib/libsdl-1.2.15-x86-gcc2-2012-06-24.zip ;
+                       libsdl-1.2.15-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libsdl-1.2.15-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       guilib-1.2.1-x86-gcc2-2012-06-24.zip
-                       : $(baseURL)/lib/guilib-1.2.1-x86-gcc2-2012-06-24.zip ;
+                       guilib-1.2.1-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/guilib-1.2.1-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-gfx-2.0.23-x86-gcc2-2012-06-24.zip
-                       : $(baseURL)/lib/sdl-gfx-2.0.23-x86-gcc2-2012-06-24.zip 
;
+                       sdl-gfx-2.0.23-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/sdl-gfx-2.0.23-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-image-1.2.12-x86-x86-gcc2-2012-06-24.zip
-                       : 
$(baseURL)/lib/sdl-image-1.2.12-x86-gcc2-2012-06-24.zip ;
+                       sdl-image-1.2.12-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/sdl-image-1.2.12-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-mixer-1.2.11-x86-gcc2-2012-06-25.zip
-                       : 
$(baseURL)/lib/sdl-mixer-1.2.11-x86-gcc2-2012-06-25.zip ;
+                       sdl-mixer-1.2.11-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/sdl-mixer-1.2.11-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-net-1.2.8-x86-gcc2-2012-06-24.zip
-                       : $(baseURL)/lib/sdl-net-1.2.8-x86-gcc2-2012-06-24.zip ;
+                       sdl-net-1.2.8-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/sdl-net-1.2.8-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-sound-1.0.3-x86-gcc2-2012-06-24.zip
-                       : 
$(baseURL)/lib/sdl-sound-1.0.3-x86-gcc2-2012-06-24.zip ;
+                       sdl-sound-1.0-hg-r1a4-x86-gcc2-2012-08-30.zip
+                       : 
$(baseURL)/lib/sdl-sound-1.0-hg-r1a4-x86-gcc2-2012-08-30.zip ;
                InstallOptionalHaikuImagePackage
                        sdl-rtf-0.1.0-r1a3-x86-gcc2-2011-05-20.zip
                        : 
$(baseURL)/lib/sdl-rtf-0.1.0-r1a3-x86-gcc2-2011-05-20.zip ;
                InstallOptionalHaikuImagePackage
-                       sdl-ttf-2.0.11-x86-gcc2-2012-06-24.zip
-                       : $(baseURL)/lib/sdl-ttf-2.0.11-x86-gcc2-2012-06-24.zip 
;
+                       sdl-ttf-2.0.11-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/sdl-ttf-2.0.11-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       sge-030809-x86-gcc2-2012-06-24.zip
-                       : $(baseURL)/lib/sge-030809-x86-gcc2-2012-06-24.zip ;
+                       sge-030809-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/sge-030809-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       smjpeg-0.2.1-x86-gcc2-2012-06-24.zip
-                       : $(baseURL)/lib/smjpeg-0.2.1-x86-gcc2-2012-06-24.zip ;
+                       smjpeg-0.2.1-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/smjpeg-0.2.1-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       smpeg-0.4.5-x86-gcc2-2012-06-24.zip
-                       : $(baseURL)/lib/smpeg-0.4.5-x86-gcc2-2012-06-24.zip ;
+                       smpeg-0.4.5-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/smpeg-0.4.5-r1a4-x86-gcc2-2012-08-29.zip ;
        }
 }
 
@@ -309,48 +309,48 @@ if [ IsOptionalHaikuImagePackageAdded XiphLibs ] {
                Echo "No optional package XiphLibs available for 
$(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       flac-1.2.1-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/flac-1.2.1-r1a3-x86-gcc4-2011-05-26.zip ;
+                       flac-1.2.1-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/flac-1.2.1-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       libao-1.0.0-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libao-1.0.0-r1a3-x86-gcc4-2011-05-26.zip ;
+                       libao-1.0.0-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libao-1.0.0-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       libogg-1.2.2-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libogg-1.2.2-r1a3-x86-gcc4-2011-05-26.zip ;
+                       libogg-1.3.0-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libogg-1.3.0-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       libtheora-1.1.1-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libtheora-1.1.1-r1a3-x86-gcc4-2011-05-26.zip ;
+                       libtheora-1.1.1-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libtheora-1.1.1-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       libvorbis-1.3.2-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/libvorbis-1.3.2-r1a3-x86-gcc4-2011-05-26.zip ;
+                       libvorbis-1.3.2-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libvorbis-1.3.2-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       speex-1.2rc1-x86-gcc4-2012-03-12.zip
-                       : $(baseURL)/lib/speex-1.2rc1-x86-gcc4-2012-03-12.zip ;
+                       speex-1.2rc1-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/speex-1.2rc1-r1a4-x86-gcc4-2012-09-02.zip ;
                InstallOptionalHaikuImagePackage
-                       vorbis-tools-1.4.0-r1a3-x86-gcc4-2011-05-26.zip
-                       : 
$(baseURL)/lib/vorbis-tools-1.4.0-r1a3-x86-gcc4-2011-05-26.zip ;
+                       vorbis-tools-1.4.0-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/vorbis-tools-1.4.0-r1a4-x86-gcc4-2012-09-02.zip ;
        } else {
                InstallOptionalHaikuImagePackage
-                       flac-1.2.1-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/flac-1.2.1-r1a3-x86-gcc2-2011-05-19.zip ;
+                       flac-1.2.1-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/flac-1.2.1-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       libao-1.0.0-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libao-1.0.0-r1a3-x86-gcc2-2011-05-19.zip ;
+                       libao-1.0.0-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libao-1.0.0-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       libogg-1.2.2-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libogg-1.2.2-r1a3-x86-gcc2-2011-05-19.zip ;
+                       libogg-1.3.0-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libogg-1.3.0-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       libtheora-1.1.1-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libtheora-1.1.1-r1a3-x86-gcc2-2011-05-19.zip ;
+                       libtheora-1.1.1-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libtheora-1.1.1-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       libvorbis-1.3.2-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/libvorbis-1.3.2-r1a3-x86-gcc2-2011-05-19.zip ;
+                       libvorbis-1.3.2-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/libvorbis-1.3.2-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       speex-1.2-git-r1a3-x86-gcc2-2011-05-26.zip
-                       : 
$(baseURL)/lib/speex-1.2-git-r1a3-x86-gcc2-2011-05-26.zip ;
+                       speex-1.2rc1-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/speex-1.2rc1-r1a4-x86-gcc2-2012-08-29.zip ;
                InstallOptionalHaikuImagePackage
-                       vorbis-tools-1.4.0-r1a3-x86-gcc2-2011-05-19.zip
-                       : 
$(baseURL)/lib/vorbis-tools-1.4.0-r1a3-x86-gcc2-2011-05-19.zip ;
+                       vorbis-tools-1.4.0-r1a4-x86-gcc2-2012-08-29.zip
+                       : 
$(baseURL)/lib/vorbis-tools-1.4.0-r1a4-x86-gcc2-2012-08-29.zip ;
        }
 }
 
diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages
index 00ddc7f..a0defdd 100644
--- a/build/jam/OptionalPackages
+++ b/build/jam/OptionalPackages
@@ -383,12 +383,12 @@ if [ IsOptionalHaikuImagePackageAdded Caya ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 || $(isHybridBuild) {
                        InstallOptionalHaikuImagePackage
-                               caya-264-x86-gcc4-2012-05-20.zip
-                               : $(baseURL)/caya-264-x86-gcc4-2012-05-20.zip
+                               caya-264-r1a4-x86-gcc4-2012-08-31.zip
+                               : 
$(baseURL)/caya-264-r1a4-x86-gcc4-2012-08-31.zip
                                : : true ;
                        InstallOptionalHaikuImagePackage
-                               caya-gpl-protocols-35-x86-gcc4-2012-05-20.zip
-                               : 
$(baseURL)/caya-gpl-protocols-35-x86-gcc4-2012-05-20.zip
+                               
caya-gpl-protocols-35-r1a4-x86-gcc4-2012-09-03.zip
+                               : 
$(baseURL)/caya-gpl-protocols-35-r1a4-x86-gcc4-2012-09-03.zip
                                : : true ;
                        AddSymlinkToHaikuImage home config be Applications
                                : /boot/apps/Caya/Caya ;
@@ -526,13 +526,13 @@ if [ IsOptionalHaikuImagePackageAdded Ctags ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               ctags-5.8-x86-gcc4-2012-01-23.zip
-                               : $(baseURL)/ctags-5.8-x86-gcc4-2012-01-23.zip
+                               ctags-5.8-r1a4-x86-gcc4-2012-08-30.zip
+                               : 
$(baseURL)/ctags-5.8-r1a4-x86-gcc4-2012-08-30.zip
                                : : true ;
                } else {
                        InstallOptionalHaikuImagePackage
-                               ctags-5.8-x86-gcc2-2010-05-24.zip
-                               : $(baseURL)/ctags-5.8-x86-gcc2-2010-05-24.zip
+                               ctags-5.8-r1a4-x86-gcc2-2012-09-03.zip
+                               : 
$(baseURL)/ctags-5.8-r1a4-x86-gcc2-2012-09-03.zip
                                : : true ;
                }
        }
@@ -882,12 +882,12 @@ if [ IsOptionalHaikuImagePackageAdded DMIDecode ] {
                Echo "No optional package DMIDecode available for 
$(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       dmidecode-2.11-x86-gcc4-2011-11-02.zip
-                       : 
http://revolf.free.fr/beos/dmidecode-2.11-x86-gcc4-2011-11-02.zip ;
+                       dmidecode-2.11-r1a4-x86-gcc4-2012-09-04.zip
+                       : 
$(baseURL)/dmidecode-2.11-r1a4-x86-gcc4-2012-09-04.zip ;
        } else {
                InstallOptionalHaikuImagePackage
-                       dmidecode-2.11-x86-gcc2-2011-11-02.zip
-                       : 
http://revolf.free.fr/beos/dmidecode-2.11-x86-gcc2-2011-11-02.zip ;
+                       dmidecode-2.11-r1a4-x86-gcc2-2012-09-03.zip
+                       : 
$(baseURL)/dmidecode-2.11-r1a4-x86-gcc2-2012-09-03.zip ;
        }
 }
 
@@ -904,8 +904,8 @@ if [ IsOptionalHaikuImagePackageAdded Doxygen ] {
                                : : true ;
                } else {
                        InstallOptionalHaikuImagePackage
-                               doxygen-1.6.3-x86-gcc2-2010-05-17.zip
-                               : 
$(baseURL)/doxygen-1.6.3-x86-gcc2-2010-05-17.zip
+                               doxygen-1.6.3-r1a4-x86-gcc2-2012-09-05.zip
+                               : 
$(baseURL)/doxygen-1.6.3-r1a4-x86-gcc2-2012-09-05.zip
                                : : true ;
                }
        }
@@ -1015,8 +1015,8 @@ if [ IsOptionalHaikuImagePackageAdded GitDoc ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               gitdoc-1.7.10.2-x86-gcc4-2012-06-20.zip
-                               : 
$(baseURL)/gitdoc-1.7.10.2-x86-gcc4-2012-06-20.zip
+                               gitdoc-1.7.10.2-r1a4-x86-gcc4-2012-09-03.zip
+                               : 
$(baseURL)/gitdoc-1.7.10.2-r1a4-x86-gcc4-2012-09-03.zip
                                : : true ;
                } else {
                        InstallOptionalHaikuImagePackage
@@ -1210,11 +1210,11 @@ if [ IsOptionalHaikuImagePackageAdded LibLayout ] {
        if $(TARGET_ARCH) != x86 {
                Echo "No optional package LibLayout available for 
$(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
-               InstallOptionalHaikuImagePackage 
liblayout-1.4.1-r1a4-gcc4-2012-08-30.zip
-                       : $(baseURL)/liblayout-1.4.1-r1a4-gcc4-2012-08-30.zip ;
+               InstallOptionalHaikuImagePackage 
liblayout-1.4.1-r1a4-x86-gcc4-2012-08-30.zip
+                       : 
$(baseURL)/liblayout-1.4.1-r1a4-x86-gcc4-2012-08-30.zip ;
        } else {
-               InstallOptionalHaikuImagePackage 
liblayout-1.4.1-r1a4-gcc2-2012-08-28.zip
-                       : $(baseURL)/liblayout-1.4.1-r1a4-gcc2-2012-08-28.zip ;
+               InstallOptionalHaikuImagePackage 
liblayout-1.4.0-gcc2-2009-03-08.zip
+                       : $(baseURL)/liblayout-1.4.0-gcc2-2009-03-08.zip ;
        }
 }
 
@@ -1225,12 +1225,12 @@ if [ IsOptionalHaikuImagePackageAdded Libmng ] {
                Echo "No optional package Libmng available for $(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       libmng-1.0.10-r1a3-x86-gcc4-2011-05-24.zip
-                       : $(baseURL)/libmng-1.0.10-r1a3-x86-gcc4-2011-05-24.zip 
;
+                       libmng-1.0.10-r1a4-x86-gcc4-2012-09-02.zip
+                       : 
$(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc4-2012-09-02.zip ;
        } else {
                InstallOptionalHaikuImagePackage
                        libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip
-                       : $(baseURL)/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip 
 ;
+                       : 
$(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip  ;
        }
 }
 
@@ -1293,13 +1293,13 @@ if [ IsOptionalHaikuImagePackageAdded Lua ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               lua-5.1.4-x86-gcc4-2010-10-30.zip
-                               : $(baseURL)/lua-5.1.4-x86-gcc4-2010-10-30.zip
+                               lua-5.1.4-3-r1a4-x86-gcc4-2012-09-01.zip
+                               : 
$(baseURL)/lua-5.1.4-3-r1a4-x86-gcc4-2012-09-01.zip
                                : : true ;
                } else {
                        InstallOptionalHaikuImagePackage
-                               lua-5.1.4-3-r1a4-x86-gcc2-2012-08-29.zip
-                               : 
$(baseURL)/lua-5.1.4-3-r1a4-x86-gcc2-2012-08-29.zip
+                               lua-5.1.4-3-r1a4-x86-gcc2-2012-09-01.zip
+                               : 
$(baseURL)/lua-5.1.4-3-r1a4-x86-gcc2-2012-09-01.zip
                                : : true ;
                }
        }
@@ -1507,8 +1507,8 @@ if [ IsOptionalHaikuImagePackageAdded P7zip ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               p7zip-9.20.1-x86-gcc4-2012-06-19.zip
-                               : 
$(baseURL)/p7zip-9.20.1-x86-gcc4-2012-06-19.zip ;
+                               p7zip-9.20.1-r1a4-x86-gcc4-2012-08-30.zip
+                               : 
$(baseURL)/p7zip-9.20.1-r1a4-x86-gcc4-2012-08-30.zip ;
                } else {
                        InstallOptionalHaikuImagePackage
                                p7zip-9.20.1-r1a4-x86-gcc2-2012-08-29.zip
@@ -1530,8 +1530,8 @@ if [ IsOptionalHaikuImagePackageAdded Paladin ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               paladin-1.3-r1a3-x86-gcc4-2011-05-24.zip
-                               : 
$(baseURL)/paladin-1.3-r1a3-x86-gcc4-2011-05-24.zip ;
+                               paladin-1.3-r1a4-x86-gcc4-2012-08-30.zip
+                               : 
$(baseURL)/paladin-1.3-r1a4-x86-gcc4-2012-08-30.zip ;
                } else {
                        InstallOptionalHaikuImagePackage
                                paladin-1.3-r1a3-x86-gcc2-2011-05-18.zip
@@ -1553,8 +1553,8 @@ if [ IsOptionalHaikuImagePackageAdded PCRE ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               libpcre-8.12-r1a3-x86-gcc4-2011-05-24.zip
-                               : 
$(baseURL)/libpcre-8.12-r1a3-x86-gcc4-2011-05-24.zip ;
+                               libpcre-8.21-r1a4-x86-gcc4-2012-09-03.zip
+                               : 
$(baseURL)/libpcre-8.21-r1a4-x86-gcc4-2012-09-03.zip ;
                } else {
                        InstallOptionalHaikuImagePackage
                                libpcre-8.21-r1a4-x86-gcc2-2012-08-28.zip
@@ -1572,7 +1572,7 @@ if [ IsOptionalHaikuImagePackageAdded Pe ] {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
                                pe-2.4.3-600-x86-gcc4-2011-12-18.zip
-                               : 
$(baseURL)/pe-2.4.3-600-x86-gcc4-2011-12-18.zip ;
+                               : 
$(baseURL)/pe-2.4.3-hg-r1a4-x86-gcc4-2012-09-04.zip ;
                } else {
                        InstallOptionalHaikuImagePackage
                                pe-2.4.3-hg-r1a4-x86-gcc2-2012-08-29.zip
@@ -1606,6 +1606,22 @@ if [ IsOptionalHaikuImagePackageAdded Perl ] {
 }
 
 
+# Puri
+if [ IsOptionalHaikuImagePackageAdded Puri ] {
+       if $(TARGET_ARCH) != x86 {
+               Echo "No optional package Puri available for $(TARGET_ARCH)" ;
+       } else if $(HAIKU_GCC_VERSION[1]) < 4 && ! $(isHybridBuild) {
+               Echo "No optional package Puri for gcc2" ;
+       } else {
+               InstallOptionalHaikuImagePackage
+                       puri-0.3.9.1-r1a4-x86-gcc4-2012-08-31.zip
+                       : $(baseURL)/puri-0.3.9.1-r1a4-x86-gcc4-2012-08-31.zip ;
+               AddSymlinkToHaikuImage home config settings deskbar Applications
+                       : /boot/apps/Puri/Puri ;
+       }
+}
+
+
 # Python
 if [ IsOptionalHaikuImagePackageAdded Python ] {
        if $(TARGET_ARCH) != x86 {
@@ -1613,8 +1629,8 @@ if [ IsOptionalHaikuImagePackageAdded Python ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               python-2.6.7-x86-gcc4-2011-06-24.zip
-                               : 
$(baseURL)/python-2.6.7-x86-gcc4-2011-06-24.zip
+                               python-2.6.8-r1a4-x86-gcc4-2012-09-03.zip
+                               : 
$(baseURL)/python-2.6.8-r1a4-x86-gcc4-2012-09-03.zip
                                : : true ;
                } else {
                        InstallOptionalHaikuImagePackage
@@ -1633,8 +1649,8 @@ if [ IsOptionalHaikuImagePackageAdded Rsync ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               rsync-3.0.7-r1a3-x86-gcc4-2011-05-24.zip
-                               : 
$(baseURL)/rsync-3.0.7-r1a3-x86-gcc4-2011-05-24.zip
+                               rsync-3.0.7-r1a4-x86-gcc4-2012-08-31.zip
+                               : 
$(baseURL)/rsync-3.0.7-r1a4-x86-gcc4-2012-08-31.zip
                                : : true ;
                } else {
                        InstallOptionalHaikuImagePackage
@@ -1652,8 +1668,8 @@ if [ IsOptionalHaikuImagePackageAdded Ruby ] {
                Echo "No optional package Ruby available for $(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       ruby-1.9.1-r1a3-x86-gcc4-2011-05-24.zip
-                       : $(baseURL)/ruby-1.9.1-r1a3-x86-gcc4-2011-05-24.zip ;
+                       ruby-1.9.1-r1a4-x86-gcc4-2012-08-31.zip
+                       : $(baseURL)/ruby-1.9.1-r1a4-x86-gcc4-2012-08-31.zip ;
        } else {
                InstallOptionalHaikuImagePackage
                        ruby-1.9.1-r1a4-x86-gcc2-2012-08-29.zip
@@ -1668,8 +1684,8 @@ if [ IsOptionalHaikuImagePackageAdded Sed ] {
                Echo "No optional package Sed available for $(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       sed-4.2.1-r1a3-x86-gcc4-2011-05-24.zip
-                       : $(baseURL)/sed-4.2.1-r1a3-x86-gcc4-2011-05-24.zip ;
+                       sed-4.2.1-r1a4-x86-gcc4-2012-08-31.zip
+                       : $(baseURL)/sed-4.2.1-r1a4-x86-gcc4-2012-08-31.zip ;
        } else {
                InstallOptionalHaikuImagePackage
                        sed-4.2.1-r1a4-x86-gcc2-2012-08-27.zip
@@ -1722,12 +1738,12 @@ if [ IsOptionalHaikuImagePackageAdded TagLib ] {
                Echo "No optional package TagLib available for $(TARGET_ARCH)" ;
        } else if $(HAIKU_GCC_VERSION[1]) >= 4 {
                InstallOptionalHaikuImagePackage
-                       taglib-1.6.3-r1r3-x86-gcc4-2011-05-24.zip
-                       : $(baseURL)/taglib-1.6.3-r1r3-x86-gcc4-2011-05-24.zip ;
+                       taglib-1.6.3-r1a4-x86-gcc4-2012-09-03.zip
+                       : $(baseURL)/taglib-1.6.3-r1a4-x86-gcc4-2012-09-03.zip ;
        } else {
                InstallOptionalHaikuImagePackage
-                       taglib-1.7.2-r1a4-x86-gcc2-2012-08-30.zip
-                       : $(baseURL)/taglib-1.7.2-r1a4-x86-gcc2-2012-08-30.zip ;
+                       taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip
+                       : $(baseURL)/taglib-1.6.3-r1a4-x86-gcc2-2012-09-03.zip ;
        }
 }
 
@@ -1739,8 +1755,8 @@ if [ IsOptionalHaikuImagePackageAdded Tar ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               tar-1.26-x86-gcc4-2012-06-19.zip
-                               : $(baseURL)/tar-1.26-x86-gcc4-2012-06-19.zip ;
+                               tar-1.26-r1a4-x86-gcc4-2012-09-03.zip
+                               : 
$(baseURL)/tar-1.26-r1a4-x86-gcc4-2012-09-03.zip ;
                } else {
                        InstallOptionalHaikuImagePackage
                                tar-1.26-r1a4-x86-gcc2-2012-08-29.zip
@@ -1773,8 +1789,8 @@ if [ IsOptionalHaikuImagePackageAdded Transmission ] {
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
                        InstallOptionalHaikuImagePackage
-                               transmission-2.21-r1a3-x86-gcc4-2011-05-27.zip
-                               : 
$(baseURL)/transmission-2.21-r1a3-x86-gcc4-2011-05-27.zip
+                               transmission-2.21-r1a4-x86-gcc4-2012-09-03.zip
+                               : 
$(baseURL)/transmission-2.21-r1a4-x86-gcc4-2012-09-03.zip
                                : : true ;
                } else {
                        InstallOptionalHaikuImagePackage
@@ -1867,8 +1883,8 @@ if [ IsOptionalHaikuImagePackageAdded Vision ] {
                Echo "No optional package Vision available for $(TARGET_ARCH)" ;
        } else {
                if $(HAIKU_GCC_VERSION[1]) >= 4 {
-                       InstallOptionalHaikuImagePackage 
vision-908-x86-gcc4-2012-02-26.zip
-                               : $(baseURL)/vision-908-x86-gcc4-2012-02-26.zip 
;
+                       InstallOptionalHaikuImagePackage 
vision-908-r1a4-x86-gcc4-2012-09-04.zip
+                               : 
$(baseURL)/vision-908-r1a4-x86-gcc4-2012-09-04.zip ;
                } else {
                        InstallOptionalHaikuImagePackage
                                vision-908-r1a4-x86-gcc2-2012-08-29.zip
@@ -2029,8 +2045,8 @@ if [ IsOptionalHaikuImagePackageAdded XZ-Utils ] {
                Echo "No optional package XZ-Utils available for 
$(TARGET_ARCH)" ;
        } else {
                InstallOptionalHaikuImagePackage
-                       xz-utils-5.0.1-x86-gcc4-2012-07-18.zip
-                       : $(baseURL)/xz-utils-5.0.1-x86-gcc4-2012-07-18.zip ;
+                       xz-utils-5.0.1-r1a4-x86-gcc4-2012-09-03.zip
+                       : 
$(baseURL)/xz-utils-5.0.1-r1a4-x86-gcc4-2012-09-03.zip ;
                AddExpanderRuleToHaikuImage "application/x-xz" : .tar.xz
                        : "tar -Jtvf \\0045s"
                        : "tar -Jxvf \\0045s"

############################################################################

Commit:      9b844fbc7b3051beda857e77a7b6e9fd3d4603cc
URL:         http://cgit.haiku-os.org/haiku/commit/?id=9b844fb
Author:      Scott McCreary <scottmc2@xxxxxxxxx>
Date:        Wed Sep  5 04:38:00 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:06:26 2012 UTC

Fix typo

----------------------------------------------------------------------------

diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages
index a0defdd..038e993 100644
--- a/build/jam/OptionalPackages
+++ b/build/jam/OptionalPackages
@@ -1230,7 +1230,7 @@ if [ IsOptionalHaikuImagePackageAdded Libmng ] {
        } else {
                InstallOptionalHaikuImagePackage
                        libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip
-                       : 
$(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip  ;
+                       : 
$(baseURL)/lib/libmng-1.0.10-r1a4-x86-gcc2-2012-08-28.zip ;
        }
 }
 

############################################################################

Commit:      d034e5839dfa3697dc8e794e5e26789dc90d3247
URL:         http://cgit.haiku-os.org/haiku/commit/?id=d034e58
Author:      Ryan Leavengood <leavengood@xxxxxxxxx>
Date:        Wed Sep  5 05:07:36 2012 UTC

Ticket:      https://dev.haiku-os.org/ticket/8867

New icons for source code and patch files.

Both are from #8867, created by Justin Stressman. The previous source code icon
was not friendly to those with green color blindness. I also think it was an
ugly green.

Fixes #8867 of course.

----------------------------------------------------------------------------

diff --git a/src/data/beos_mime/text/x-patch b/src/data/beos_mime/text/x-patch
index 1d0d240..42dfc3e 100644
--- a/src/data/beos_mime/text/x-patch
+++ b/src/data/beos_mime/text/x-patch
@@ -18,15 +18,17 @@ resource(4, "META:EXTENS") message(234) {
 resource(5, "META:PREF_APP") #'MSIG' "application/x-vnd.beunited.pe";
 
 resource(6, "META:ICON") #'VICN' array {
-       $"6E6369660505010200060338D2F73CD163BF82B23B84A94B88504870C900B6F5"
-       $"5CBDDCFFB3FFD7FFBA020106023E49240000000000003CAAAA4940004A3000FF"
-       $"CCFF897C4FB009040192020006023A55A6BAC2293F0DA33E958646C2EB4870EB"
-       $"00010101FF85CB520B0606AE0BB40BBF4D33C3AFB75DC173BDEFC607C13EC804"
+       $"6E6369660505010200060338D2F73CD163BF82B23B84A94B88504870C901BFDE"
+       $"F4BDFFFFFFFFE7EEFB020106023E49240000000000003CAAAA4940004A3000FF"
+       $"CEE5FF7C7588AD040192020006023A55A6BAC2293F0DA33E958646C2EB4870EB"
+       $"00010101FF5296CB0A0606AE0BB40BBF4D33C3AFB75DC173BDEFC607C13EC804"
        $"CA28BD82C118B920C51BBB40BF07B8083AB6BC0605AE02B57D3EB9B9C3EFB7BB"
        $"44BBB751BD75C936CA8EC1B1402F0A093B593D5BBFCDC93E455BC516C5F16046"
-       $"5B435D4544510A045A425E3F5A3D574008022E40BDB53308023142BE34BC0308"
-       $"023444C0E5BB5108023746C0D8BD7508023A48C270BDB508023D4A4CBD820802"
-       $"404CC408BFE6080A03020203000A0001011001178400040A020101000A000100"
-       $"1001178400040A010100000A04040604080A1815FF01178100040A0404060408"
-       $"0A18001501178200040A04030907051815FF0117810004"
+       $"5B435D4544510A045A425E3F5A3D574008022E45373C0802364441390802364B"
+       $"463B08023A4E4A3E08032D422E4430450803373839393A3B0C0A03020203000A"
+       $"0001011001178400040A020101000A0001001001178400040A010100000A0403"
+       $"04060738201B16FF01178100040A0402060438201B001601178200040A040105"
+       $"38201B16FF01178100040A000108382B1116FF01178100040A00010938231916"
+       $"FF01178100040A00010838251E16FF01178100040A00010938283116FF011781"
+       $"0004"
 };
diff --git a/src/data/beos_mime/text/x-source-code 
b/src/data/beos_mime/text/x-source-code
index f002060..e83af7d 100644
--- a/src/data/beos_mime/text/x-source-code
+++ b/src/data/beos_mime/text/x-source-code
@@ -34,15 +34,17 @@ resource(4, "META:EXTENS") message(234) {
 resource(5, "META:PREF_APP") #'MSIG' "application/x-vnd.beunited.pe";
 
 resource(6, "META:ICON") #'VICN' array {
-       $"6E6369660505010200060338D2F73CD163BF82B23B84A94B88504870C900B6F5"
-       $"5CBDDCFFB3FFD7FFBA020106023E49240000000000003CAAAA4940004A3000FF"
-       $"CCFF897C4FB009040192020006023A55A6BAC2293F0DA33E958646C2EB4870EB"
-       $"00010101FF85CB520B0606AE0BB40BBF4D33C3AFB75DC173BDEFC607C13EC804"
+       $"6E6369660505010200060338D2F73CD163BF82B23B84A94B88504870C901BFDE"
+       $"F4BDFFFFFFFFE7EEFB020106023E49240000000000003CAAAA4940004A3000FF"
+       $"CEE5FF7C7588AD040192020006023A55A6BAC2293F0DA33E958646C2EB4870EB"
+       $"00010101FF5296CB0A0606AE0BB40BBF4D33C3AFB75DC173BDEFC607C13EC804"
        $"CA28BD82C118B920C51BBB40BF07B8083AB6BC0605AE02B57D3EB9B9C3EFB7BB"
        $"44BBB751BD75C936CA8EC1B1402F0A093B593D5BBFCDC93E455BC516C5F16046"
-       $"5B435D4544510A045A425E3F5A3D574008022E40BDB53308023142BE34BC0308"
-       $"023444C0E5BB5108023746C0D8BD7508023A48C270BDB508023D4A4CBD820802"
-       $"404CC408BFE6080A03020203000A0001011001178400040A020101000A000100"
-       $"1001178400040A010100000A04040604080A1815FF01178100040A0404060408"
-       $"0A18001501178200040A04030907051815FF0117810004"
+       $"5B435D4544510A045A425E3F5A3D574008022E45373C0802364441390802364B"
+       $"463B08023A4E4A3E08032D422E4430450803373839393A3B0C0A03020203000A"
+       $"0001011001178400040A020101000A0001001001178400040A010100000A0403"
+       $"04060738201B16FF01178100040A0402060438201B001601178200040A040105"
+       $"38201B16FF01178100040A000108382B1116FF01178100040A00010938231916"
+       $"FF01178100040A00010838251E16FF01178100040A00010938283116FF011781"
+       $"0004"
 };

############################################################################

Commit:      775ca691cdb67f62977f7dab357604a74c063c5d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=775ca69
Author:      Humdinger <humdingerb@xxxxxxxxx>
Date:        Wed Sep  5 16:19:40 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:08:22 2012 UTC

Updated the list of contributers.

Added people to the list contributers.
Moved people to the list of past maintainers.
Added GCI to our Google thanks.

----------------------------------------------------------------------------

diff --git a/src/apps/aboutsystem/AboutSystem.cpp 
b/src/apps/aboutsystem/AboutSystem.cpp
index ec3303c..73551b8 100644
--- a/src/apps/aboutsystem/AboutSystem.cpp
+++ b/src/apps/aboutsystem/AboutSystem.cpp
@@ -999,7 +999,6 @@ AboutView::_CreateCreditsView()
                "Ithamar R. Adema\n"
                "Bruno G. Albuquerque\n"
                "Stephan Aßmus\n"
-               "Salvatore Benedetto\n"
                "Stefano Ceccherini\n"
                "Rudolf Cornelissen\n"
                "Alexandre Deckner\n"
@@ -1010,25 +1009,19 @@ AboutView::_CreateCreditsView()
                "René Gollent\n"
                "Bryce Groff\n"
                "Colin Günther\n"
-               "Karsten Heimrich\n"
                "Fredrik Holmqvist\n"
                "Philippe Houdoin\n"
-               "Maurice Kalinowski\n"
-               "Euan Kirkhope\n"
                "Ryan Leavengood\n"
                "Michael Lotz\n"
-               "Brecht Machiels\n"
                "Matt Madia\n"
                "Scott McCreary\n"
                "David McPaul\n"
-               "Wim van der Meer\n"
                "Fredrik Modéen\n"
                "Marcus Overhagen\n"
                "Michael Pfeiffer\n"
                "François Revol\n"
                "Philippe Saint-Pierre\n"
                "John Scipione\n"
-               "Andrej Spielmann\n"
                "Jonas Sundström\n"
                "Oliver Tappe\n"
                "Gerasim Troeglazov\n"
@@ -1046,13 +1039,19 @@ AboutView::_CreateCreditsView()
        fCreditsView->SetFontAndColor(be_plain_font, B_FONT_ALL, &kDarkGrey);
        fCreditsView->Insert(
                "Andrew Bachmann\n"
+               "Salvatore Benedetto\n"
                "Tyler Dauwalder\n"
                "Daniel Furrer\n"
                "Andre Alves Garzia\n"
+               "Karsten Heimrich\n"
                "Erik Jaesler\n"
+               "Maurice Kalinowski\n"
+               "Euan Kirkhope\n"
                "Marcin Konicki\n"
                "Waldemar Kornewald\n"
                "Thomas Kurschel\n"
+               "Brecht Machiels\n"
+               "Wim van der Meer\n"
                "Frans Van Nispen\n"
                "Adi Oanca\n"
                "Michael Phipps\n"
@@ -1060,6 +1059,7 @@ AboutView::_CreateCreditsView()
                "David Reid\n"
                "Hugo Santos\n"
                "Alexander G. M. Smith\n"
+               "Andrej Spielmann\n"
                "Bryan Varner\n"
                "Nathan Whitehorn\n"
                "Michael Wilber\n"
@@ -1096,8 +1096,10 @@ AboutView::_CreateCreditsView()
                "Michael Davidson\n"
                "David Dengg\n"
                "John Drinkwater\n"
+               "Yongcong Du\n"
                "Cian Duffy\n"
                "Vincent Duvert\n"
+               "Pawel Dziepak\n"
                "Mikael Eiman\n"
                "Fredrik Ekdahl\n"
                "Joshua R. Elsasser\n"
@@ -1112,7 +1114,9 @@ AboutView::_CreateCreditsView()
                "Deyan Genovski\n"
                "Pete Goodeve\n"
                "Lucian Adrian Grijincu\n"
+               "Jessica Hamilton\n"
                "Sean Healy\n"
+               "Andreas Henriksson\n"
                "Matthijs Hollemans\n"
                "Mathew Hounsell\n"
                "Morgan Howe\n"
@@ -1171,12 +1175,14 @@ AboutView::_CreateCreditsView()
                "Reznikov Sergei\n"
                "Zousar Shaker\n"
                "Caitlin Shaw\n"
+               "Alex Smith\n"
                "Geoffry Song\n"
                "Daniel Switkin\n"
                "Atsushi Takamatsu\n"
                "James Urquhart\n"
                "Jason Vandermark\n"
                "Sandor Vroemisse\n"
+               "Jürgen Wall\n"
                "Denis Washington\n"
                "Ulrich Wimboeck\n"
                "Johannes Wischert\n"
@@ -1188,7 +1194,7 @@ AboutView::_CreateCreditsView()
                "Zhao Shuai\n");
        fCreditsView->Insert(
                B_TRANSLATE("\n" B_UTF8_ELLIPSIS
-                       " and probably some more we forgot to mention (sorry!)"
+                       "and probably some more we forgot to mention (sorry!)"
                        "\n\n"));
 
        fCreditsView->SetFontAndColor(&font, B_FONT_ALL, &kHaikuOrange);
@@ -1256,11 +1262,12 @@ AboutView::_CreateCreditsView()
        fCreditsView->Insert(
                B_TRANSLATE("The BeGeistert team\n"));
        fCreditsView->Insert(
-               B_TRANSLATE("Google & their Google Summer of Code program\n"));
+               B_TRANSLATE("Google & their Google Summer of Code and Google 
Code In "
+                       "program\n"));
        fCreditsView->Insert(
                B_TRANSLATE("The University of Auckland and Christof 
Lutteroth\n\n"));
        fCreditsView->Insert(
-               B_TRANSLATE("... and the many people making donations!\n\n"));
+               B_TRANSLATE(B_UTF8_ELLIPSIS "and the many people making 
donations!\n\n"));
 
        // copyrights for various projects we use
 

############################################################################

Commit:      8b84d1a475ab1a26417ed7c20fe296fb5ea57eb1
URL:         http://cgit.haiku-os.org/haiku/commit/?id=8b84d1a
Author:      Humdinger <humdingerb@xxxxxxxxx>
Date:        Wed Sep  5 17:38:14 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:08:45 2012 UTC

Small corrections to AboutSystem.

Thanks Rene.

----------------------------------------------------------------------------

diff --git a/src/apps/aboutsystem/AboutSystem.cpp 
b/src/apps/aboutsystem/AboutSystem.cpp
index 73551b8..e6d259c 100644
--- a/src/apps/aboutsystem/AboutSystem.cpp
+++ b/src/apps/aboutsystem/AboutSystem.cpp
@@ -1167,12 +1167,12 @@ AboutView::_CreateCreditsView()
                "Jeremy Rand\n"
                "Hartmut Reh\n"
                "Daniel Reinhold\n"
+               "Sergei Reznikov\n"
                "Chris Roberts\n"
                "Samuel Rodríguez Pérez\n"
                "Thomas Roell\n"
                "Rafael Romo\n"
                "Ralf Schülke\n"
-               "Reznikov Sergei\n"
                "Zousar Shaker\n"
                "Caitlin Shaw\n"
                "Alex Smith\n"
@@ -1262,8 +1262,8 @@ AboutView::_CreateCreditsView()
        fCreditsView->Insert(
                B_TRANSLATE("The BeGeistert team\n"));
        fCreditsView->Insert(
-               B_TRANSLATE("Google & their Google Summer of Code and Google 
Code In "
-                       "program\n"));
+               B_TRANSLATE("Google and their Google Summer of Code and Google 
Code In "
+                       "programs\n"));
        fCreditsView->Insert(
                B_TRANSLATE("The University of Auckland and Christof 
Lutteroth\n\n"));
        fCreditsView->Insert(

############################################################################

Commit:      09cdc7f2d363bad28537606f2bf74ef0304e5038
URL:         http://cgit.haiku-os.org/haiku/commit/?id=09cdc7f
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Thu Sep  6 18:14:54 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:09:18 2012 UTC

Fixed warnings, 80 character line limit.

----------------------------------------------------------------------------

diff --git a/src/bin/sysinfo.cpp b/src/bin/sysinfo.cpp
index 52a9f8d..931d057 100644
--- a/src/bin/sysinfo.cpp
+++ b/src/bin/sysinfo.cpp
@@ -1,6 +1,6 @@
 /*
- * Copyright 2004-2008, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx
- * Copyright (c) 2002, Carlos Hasan, for Haiku.
+ * Copyright 2004-2012, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx
+ * Copyright 2002, Carlos Hasan.
  *
  * Distributed under the terms of the MIT license.
  */
@@ -15,8 +15,8 @@
 #include <cpu_type.h>
 
 
-// ToDo: -disable_cpu_sn option is not yet implemented
-// ToDo: most of this file should go into an architecture dependent source file
+// TODO: -disable_cpu_sn option is not yet implemented
+// TODO: most of this file should go into an architecture dependent source file
 #ifdef __INTEL__
 
 struct cache_description {
@@ -196,8 +196,8 @@ print_intel_cache_descriptors(enum cpu_types type, 
cpuid_info *info)
                                if (cacheDescriptors[i] == 0x40) {
                                        printf("\tNo integrated L%u cache\n",
                                                type >= B_CPU_INTEL_PENTIUM_IV
-                                               && (type & 
B_CPU_x86_VENDOR_MASK) == B_CPU_INTEL_x86 ?
-                                                       3 : 2);
+                                               && (type & 
B_CPU_x86_VENDOR_MASK) == B_CPU_INTEL_x86
+                                                       ? 3 : 2);
                                } else
                                        printf("\t%s\n", 
sIntelCacheDescriptions[j].description);
                                break;
@@ -242,7 +242,8 @@ print_level2_cache(uint32 reg, const char *name)
 {
        uint32 size = (reg >> 16) & 0xffff;
        uint32 ways = (reg >> 12) & 0xf;
-       uint32 linesPerTag = (reg >> 8) & 0xf;          // intel does not 
define this
+       uint32 linesPerTag = (reg >> 8) & 0xf;
+               // intel does not define this
        uint32 lineSize = reg & 0xff;
 
        printf("\t%s: %lu KB, ", name, size);
@@ -295,12 +296,14 @@ print_cache_desc(int32 cpu)
        print_level2_cache(info.regs.ecx, "L2 cache");
 }
 
+
 static void
 print_intel_cache_desc(int32 cpu)
 {
        cpuid_info info;
-       
-       // A second parameters needs to be passed to CPUID which determines the 
cache level to query
+
+       // A second parameters needs to be passed to CPUID which determines the
+       // cache level to query
        get_cpuid(&info, 0x00000004, cpu);
 
        putchar('\n');
@@ -459,24 +462,31 @@ print_features(uint32 features)
 #ifdef __INTEL__
 
 static void
-print_processor_signature(system_info *sys_info, cpuid_info *info, const char 
*prefix)
+print_processor_signature(system_info *sys_info, cpuid_info *info,
+       const char *prefix)
 {
 
        if ((sys_info->cpu_type & B_CPU_x86_VENDOR_MASK) == B_CPU_AMD_x86) {
-               printf("\t%s%sype %lu, family %lu, model %u, stepping %lu, 
features 0x%08lx\n",
-                       prefix ? prefix : "", prefix && prefix[0] ? "t" : "T",
+               printf("\t%s%sype %lu, family %lu, model %lu, stepping %lu, 
features "
+                       "0x%08lx\n", prefix ? prefix : "", prefix && prefix[0] 
? "t" : "T",
                        info->eax_1.type,
-                       info->eax_1.family + (info->eax_1.family == 0xf ? 
info->eax_1.extended_family : 0),
-                       info->eax_1.model + (info->eax_1.model == 0xf ? 
info->eax_1.extended_model << 4 : 0),
+                       info->eax_1.family + (info->eax_1.family == 0xf
+                               ? info->eax_1.extended_family : 0),
+                       info->eax_1.model + (info->eax_1.model == 0xf
+                               ? info->eax_1.extended_model << 4 : 0),
                        info->eax_1.stepping,
                        info->eax_1.features);
-       } else if ((sys_info->cpu_type & B_CPU_x86_VENDOR_MASK) == 
B_CPU_INTEL_x86) {
+       } else if ((sys_info->cpu_type & B_CPU_x86_VENDOR_MASK)
+                       == B_CPU_INTEL_x86) {
                // model calculation is different for INTEL
-               printf("\t%s%sype %lu, family %lu, model %u, stepping %lu, 
features 0x%08lx\n",
-                       prefix ? prefix : "", prefix && prefix[0] ? "t" : "T",
+               printf("\t%s%sype %lu, family %lu, model %lu, stepping %lu, 
features "
+                       "0x%08lx\n", prefix ? prefix : "", prefix && prefix[0] 
? "t" : "T",
                        info->eax_1.type,
-                       info->eax_1.family + (info->eax_1.family == 0xf ? 
info->eax_1.extended_family : 0),
-                       info->eax_1.model + ((info->eax_1.family == 0xf || 
info->eax_1.family == 0x6) ? info->eax_1.extended_model << 4 : 0),
+                       info->eax_1.family + (info->eax_1.family == 0xf
+                               ? info->eax_1.extended_family : 0),
+                       info->eax_1.model
+                               + ((info->eax_1.family == 0xf || 
info->eax_1.family == 0x6)
+                                       ? info->eax_1.extended_model << 4 : 0),
                        info->eax_1.stepping,
                        info->eax_1.features);
        }
@@ -500,12 +510,10 @@ dump_platform(system_info *info)
 static void
 dump_cpu(system_info *info, int32 cpu)
 {
-       /* references:
-        *
-        * http://grafi.ii.pw.edu.pl/gbm/x86/cpuid.html
-        * http://www.sandpile.org/ia32/cpuid.htm
-        * 
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/TN13.pdf
 (Duron erratum)
-        */
+       // References:
+       // http://grafi.ii.pw.edu.pl/gbm/x86/cpuid.html
+       // http://www.sandpile.org/ia32/cpuid.htm
+       // 
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/TN13.pdf
 (Duron erratum)
 
        cpuid_info baseInfo;
        if (get_cpuid(&baseInfo, 0, cpu) != B_OK) {
@@ -514,15 +522,18 @@ dump_cpu(system_info *info, int32 cpu)
        }
 
        int32 maxStandardFunction = baseInfo.eax_0.max_eax;
-       if (maxStandardFunction >= 500)
-               maxStandardFunction = 0; /* old Pentium sample chips has cpu 
signature here */
+       if (maxStandardFunction >= 500) {
+               // old Pentium sample chips has cpu signature here
+               maxStandardFunction = 0;
+       }
 
-       /* Extended cpuid */
+       // Extended cpuid
 
        cpuid_info cpuInfo;
        get_cpuid(&cpuInfo, 0x80000000, cpu);
 
-       // extended cpuid is only supported if max_eax is greater than the 
service id
+       // Extended cpuid is only supported if max_eax is greater than the
+       // service id
        int32 maxExtendedFunction = 0;
        if (cpuInfo.eax_0.max_eax > 0x80000000)
                maxExtendedFunction = cpuInfo.eax_0.max_eax & 0xff;
@@ -586,7 +597,8 @@ dump_cpu(system_info *info, int32 cpu)
                                get_cpuid(&cpuInfo, 0x80000007, cpu);
                                
print_amd_power_management_features(cpuInfo.regs.edx);
                        }
-               } else if ((info->cpu_type & B_CPU_x86_VENDOR_MASK) == 
B_CPU_TRANSMETA_x86)
+               } else if ((info->cpu_type & B_CPU_x86_VENDOR_MASK)
+                               == B_CPU_TRANSMETA_x86)
                        print_transmeta_features(cpuInfo.regs.edx);
        }
 
@@ -595,7 +607,8 @@ dump_cpu(system_info *info, int32 cpu)
                if (!strncmp(baseInfo.eax_0.vendor_id, "CyrixInstead", 12)) {
                        get_cpuid(&cpuInfo, 0x00000002, cpu);
                        print_intel_cache_descriptors(info->cpu_type, &cpuInfo);
-               } else if ((info->cpu_type & B_CPU_x86_VENDOR_MASK) == 
B_CPU_INTEL_x86) {
+               } else if ((info->cpu_type & B_CPU_x86_VENDOR_MASK)
+                               == B_CPU_INTEL_x86) {
                        // Intel does not support extended function 5 (but it 
does 6 hmm)
                        print_intel_cache_desc(cpu);
                } else {
@@ -620,7 +633,8 @@ dump_cpu(system_info *info, int32 cpu)
                if (flagsInfo.eax_1.features & (1UL << 18)) {
                        get_cpuid(&cpuInfo, 3, cpu);
                        printf("Serial number: 
%04lx-%04lx-%04lx-%04lx-%04lx-%04lx\n",
-                               flagsInfo.eax_1.features >> 16, 
flagsInfo.eax_1.features & 0xffff,
+                               flagsInfo.eax_1.features >> 16,
+                               flagsInfo.eax_1.features & 0xffff,
                                cpuInfo.regs.edx >> 16, cpuInfo.regs.edx & 
0xffff,
                                cpuInfo.regs.ecx >> 16, cpuInfo.regs.edx & 
0xffff);
                }
@@ -646,8 +660,8 @@ dump_cpus(system_info *info)
                snprintf(modelString, 32, "(Unknown %x)", info->cpu_type);
        }
 
-       printf("%ld %s%s%s, revision %04lx running at %LdMHz (ID: 0x%08lx 
0x%08lx)\n\n",
-               info->cpu_count,
+       printf("%ld %s%s%s, revision %04lx running at %LdMHz (ID: 0x%08lx "
+               "0x%08lx)\n\n", info->cpu_count,
                vendor ? vendor : "", vendor ? " " : "", model,
                info->cpu_revision,
                info->cpu_clock_speed / 1000000,

############################################################################

Commit:      e7c570cbc81c980910905421d0f16260b6abdfb0
URL:         http://cgit.haiku-os.org/haiku/commit/?id=e7c570c
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Thu Sep  6 20:00:51 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:09:20 2012 UTC

Added fallback model string parsing for Intel CPUs.

* When we do not have a predefined model string, we now try to parse
  the reported model string into something that is at least usable,
  and should look comparable to what we have now.
* For models where the parsed type string is acceptable, we could remove
  the predefined ones.

----------------------------------------------------------------------------

diff --git a/headers/private/shared/cpu_type.h 
b/headers/private/shared/cpu_type.h
index 2c1f7c6..7a4f7f6 100644
--- a/headers/private/shared/cpu_type.h
+++ b/headers/private/shared/cpu_type.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004-2005, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx All rights 
reserved.
+ * Copyright 2004-2012, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx
  * Distributed under the terms of the MIT License.
  */
 
@@ -12,6 +12,7 @@
 
 #include <OS.h>
 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -27,6 +28,58 @@ int32 get_rounded_cpu_speed(void);
 #endif
 
 
+#if __INTEL__
+/*!    Tries to parse an Intel CPU ID string to match our usual naming scheme.
+       Note, this function is not thread safe, and must only be called once
+       at a time.
+*/
+static const char*
+parse_intel(const char* name)
+{
+       static char buffer[49];
+
+       // ignore initial spaces
+       int index = 0;
+       for (; name[index] != '\0'; index++) {
+               if (name[index] != ' ')
+                       break;
+       }
+
+       // ignore vendor
+       for (; name[index] != '\0'; index++) {
+               if (name[index] == ' ') {
+                       index++;
+                       break;
+               }
+       }
+
+       // parse model
+       int outIndex = 0;
+       for (; name[index] != '\0'; index++) {
+               if (!strncmp(&name[index], "(R)", 3)) {
+                       outIndex += strlcpy(&buffer[outIndex], "®",
+                               sizeof(buffer) - outIndex);
+                       index += 2;
+               } else if (!strncmp(&name[index], "(TM)", 4)) {
+                       outIndex += strlcpy(&buffer[outIndex], "™",
+                               sizeof(buffer) - outIndex);
+                       index += 3;
+               } else if (!strncmp(&name[index], " CPU", 4)) {
+                       // Cut out the CPU string
+                       index += 3;
+               } else if (!strncmp(&name[index], " @", 2)) {
+                       // Cut off the remainder
+                       break;
+               } else
+                       buffer[outIndex++] = name[index];
+       }
+
+       buffer[outIndex] = '\0';
+       return buffer;
+}
+#endif
+
+
 const char *
 get_cpu_vendor_string(enum cpu_types type)
 {
@@ -61,7 +114,7 @@ get_cpu_vendor_string(enum cpu_types type)
 
 
 #ifdef __INTEL__
-/* Parameter 'name' needs to point to an allocated array of 49 characters. */
+/*! Parameter 'name' needs to point to an allocated array of 49 characters. */
 void
 get_cpuid_model_string(char *name)
 {
@@ -345,6 +398,11 @@ get_cpu_model_string(system_info *info)
 #endif /* __INTEL__ */
 
                default:
+                       if ((info->cpu_type & B_CPU_x86_VENDOR_MASK) == 
B_CPU_INTEL_x86) {
+                               // Fallback to manual parsing of the model 
string
+                               get_cpuid_model_string(cpuidName);
+                               return parse_intel(cpuidName);
+                       }
                        return NULL;
        }
 }

############################################################################

Commit:      994ed1bff9b219e6127f11ccf9aa884b8c5d32a9
URL:         http://cgit.haiku-os.org/haiku/commit/?id=994ed1b
Author:      Hamish Morrison <hamish@xxxxxxxxxxx>
Date:        Thu Sep  6 16:53:58 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:12:33 2012 UTC

VM Preflet: Add support for device selection

* Enables swap file to be placed on non-boot partition
* Changes tied closely to recent kernel virtual memory change

----------------------------------------------------------------------------

diff --git a/src/preferences/virtualmemory/Jamfile 
b/src/preferences/virtualmemory/Jamfile
index ca114bd..672552e 100644
--- a/src/preferences/virtualmemory/Jamfile
+++ b/src/preferences/virtualmemory/Jamfile
@@ -1,23 +1,25 @@
 SubDir HAIKU_TOP src preferences virtualmemory ;
 
-Preference VirtualMemory : 
+UsePrivateHeaders shared system ;
+
+Preference VirtualMemory :
        VirtualMemory.cpp
        SettingsWindow.cpp
        Settings.cpp
        $(DRIVER_SETTINGS)
 
-       : be $(TARGET_LIBSTDC++) $(HAIKU_LOCALE_LIBS)
+       : be libshared.a $(TARGET_LIBSTDC++) $(HAIKU_LOCALE_LIBS)
        : VirtualMemory.rdef
-       ;
+;
 
 if ! $(TARGET_PLATFORM_HAIKU_COMPATIBLE) {
-       SEARCH on [ FGristFiles driver_settings.c ] += 
+       SEARCH on [ FGristFiles driver_settings.c ] +=
                [ FDirName $(HAIKU_TOP) src system libroot os ] ;
 }
 
-DoCatalogs VirtualMemory : 
-    x-vnd.Haiku-VirtualMemory 
-    : 
-    VirtualMemory.cpp 
-    SettingsWindow.cpp 
-; 
+DoCatalogs VirtualMemory :
+    x-vnd.Haiku-VirtualMemory
+    :
+    VirtualMemory.cpp
+    SettingsWindow.cpp
+;
diff --git a/src/preferences/virtualmemory/Settings.cpp 
b/src/preferences/virtualmemory/Settings.cpp
index 4706248..89d39f8 100644
--- a/src/preferences/virtualmemory/Settings.cpp
+++ b/src/preferences/virtualmemory/Settings.cpp
@@ -7,186 +7,179 @@
 
 #include "Settings.h"
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
 #include <File.h>
-#include <Entry.h>
 #include <FindDirectory.h>
 #include <Path.h>
-#include <Volume.h>
 #include <VolumeRoster.h>
-#include <driver_settings.h>
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <driver_settings.h>
 
 
-static const char* kWindowSettingsFile = "VM_data";
-static const char* kVirtualMemorySettings = "virtual_memory";
-static const int64 kMegaByte = 1024 * 1024;
+static const char* const kWindowSettingsFile = "VM_data";
+static const char* const kVirtualMemorySettings = "virtual_memory";
+static const off_t kMegaByte = 1024 * 1024;
 
 
 Settings::Settings()
-       :
-       fPositionUpdated(false)
 {
-       _ReadWindowSettings();
-       _ReadSwapSettings();
-}
+       fDefaultSettings.enabled = true;
 
-
-Settings::~Settings()
-{
-       _WriteWindowSettings();
-       _WriteSwapSettings();
+       system_info sysInfo;
+       get_system_info(&sysInfo);
+       fDefaultSettings.size = (off_t)sysInfo.max_pages * B_PAGE_SIZE * 2;
+       fDefaultSettings.volume = dev_for_path("/boot");
 }
 
 
 void
-Settings::SetWindowPosition(BPoint position)
+Settings::SetSwapEnabled(bool enabled, bool revertable)
 {
-       if (position == fWindowPosition)
-               return;
-
-       fWindowPosition = position;
-       fPositionUpdated = true;
+       fCurrentSettings.enabled = enabled;
+       if (!revertable)
+               fInitialSettings.enabled = enabled;
 }
 
 
 void
-Settings::SetSwapEnabled(bool enabled)
+Settings::SetSwapSize(off_t size, bool revertable)
 {
-       fSwapEnabled = enabled;
+       fCurrentSettings.size = size;
+       if (!revertable)
+               fInitialSettings.size = size;
 }
 
 
 void
-Settings::SetSwapSize(off_t size)
+Settings::SetSwapVolume(dev_t volume, bool revertable)
 {
-       fSwapSize = size;
-}
-
-
-void 
-Settings::SetSwapVolume(BVolume &volume)
-{
-       if (volume.Device() == SwapVolume().Device()
-               || volume.InitCheck() != B_OK)
-               return;
+       fCurrentSettings.volume = volume;
+       if (!revertable)
+               fInitialSettings.volume = volume;
 
-       fSwapVolume.SetTo(volume.Device());
 }
 
 
 void
-Settings::RevertSwapChanges()
-{
-       fSwapEnabled = fInitialSwapEnabled;
-       fSwapSize = fInitialSwapSize;
-       fSwapVolume.SetTo(fInitialSwapVolume);
-}
-
-
-bool
-Settings::IsRevertible()
+Settings::SetWindowPosition(BPoint position)
 {
-       return fSwapEnabled != fInitialSwapEnabled
-               || fSwapSize != fInitialSwapSize
-               || fSwapVolume.Device() != fInitialSwapVolume;
+       fWindowPosition = position;
 }
 
 
-void
-Settings::_ReadWindowSettings()
+status_t
+Settings::ReadWindowSettings()
 {
-       bool success = false;
-
        BPath path;
-       if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
-               path.Append(kWindowSettingsFile);
-               BFile file;
-               if (file.SetTo(path.Path(), B_READ_ONLY) == B_OK)
-                       if (file.Read(&fWindowPosition, sizeof(BPoint)) == 
sizeof(BPoint))
-                               success = true;
-       }
+       if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
+               return B_ERROR;
 
-       if (!success)
-               fWindowPosition.Set(-1, -1);
+       path.Append(kWindowSettingsFile);
+       BFile file;
+       if (file.SetTo(path.Path(), B_READ_ONLY) != B_OK)
+               return B_ERROR;
+
+       if (file.Read(&fWindowPosition, sizeof(BPoint)) == sizeof(BPoint))
+               return B_OK;
+       else
+               return B_ERROR;
 }
 
 
-void
-Settings::_WriteWindowSettings()
+status_t
+Settings::WriteWindowSettings()
 {
-       if (!fPositionUpdated)
-               return;
-
        BPath path;
        if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) < B_OK)
-               return;
+               return B_ERROR;
 
        path.Append(kWindowSettingsFile);
 
        BFile file;
-       if (file.SetTo(path.Path(), B_WRITE_ONLY | B_CREATE_FILE | 
B_ERASE_FILE) == B_OK)
-               file.Write(&fWindowPosition, sizeof(BPoint));
+       if (file.SetTo(path.Path(), B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE)
+               != B_OK)
+               return B_ERROR;
+
+       file.Write(&fWindowPosition, sizeof(BPoint));
+       return B_OK;
 }
 
 
-void
-Settings::_ReadSwapSettings()
+status_t
+Settings::ReadSwapSettings()
 {
        void* settings = load_driver_settings(kVirtualMemorySettings);
-       if (settings != NULL) {
-               SetSwapEnabled(get_driver_boolean_parameter(settings, "vm", 
false, false));
-               const char* swapSize = get_driver_parameter(settings, 
"swap_size", NULL, NULL);
-               SetSwapSize(swapSize ? atoll(swapSize) : 0);
-               
-#ifdef SWAP_VOLUME_IMPLEMENTED
-               // we need to hang onto this one
-               fBadVolName = strdup(get_driver_parameter(settings, 
"swap_volume", NULL, NULL));
-               
-               BVolumeRoster volumeRoster;
-               BVolume temporaryVolume;
-               
-               if (fBadVolName != NULL) {
-                       status_t result = 
volumeRoster.GetNextVolume(&temporaryVolume);
-                       char volumeName[B_FILE_NAME_LENGTH];
-                       while (result != B_BAD_VALUE) {
-                               temporaryVolume.GetName(volumeName);
-                               if (strcmp(volumeName, fBadVolName) == 0 
-                                       && temporaryVolume.IsPersistent() && 
volumeName[0]) {
-                                       SetSwapVolume(temporaryVolume);
-                                       break;
-                               }
-                               result = 
volumeRoster.GetNextVolume(&temporaryVolume);
+       if (settings == NULL)
+               return kErrorSettingsNotFound;
+
+       const char* enabled = get_driver_parameter(settings, "vm", NULL, NULL);
+       const char* size = get_driver_parameter(settings, "swap_size", NULL, 
NULL);
+       const char* volume = get_driver_parameter(settings, "swap_volume_name",
+               NULL, NULL);
+       const char* device = get_driver_parameter(settings,
+               "swap_volume_device", NULL, NULL);
+       const char* filesystem = get_driver_parameter(settings,
+               "swap_volume_filesystem", NULL, NULL);
+       const char* capacity = get_driver_parameter(settings,
+               "swap_volume_capacity", NULL, NULL);
+
+       if (enabled == NULL     || size == NULL || device == NULL || volume == 
NULL
+               || capacity == NULL || filesystem == NULL)
+               return kErrorSettingsInvalid;
+
+       off_t volCapacity = atoll(capacity);
+
+       SetSwapEnabled(get_driver_boolean_parameter(settings,
+               "vm", false, false));
+       SetSwapSize(atoll(size));
+       unload_driver_settings(settings);
+
+       int32 bestScore = -1;
+       dev_t bestVol = -1;
+
+       BVolume vol;
+       fs_info volStat;
+       BVolumeRoster roster;
+       while (roster.GetNextVolume(&vol) == B_OK) {
+               if (!vol.IsPersistent() || vol.IsReadOnly() || vol.IsRemovable()
+                       || vol.IsShared())
+                       continue;
+               if (fs_stat_dev(vol.Device(), &volStat) == 0) {
+                       int32 score = 0;
+                       if (strcmp(volume, volStat.volume_name) == 0)
+                               score += 4;
+                       if (strcmp(device, volStat.device_name) == 0)
+                               score += 3;
+                       if (volCapacity == volStat.total_blocks * 
volStat.block_size)
+                               score += 2;
+                       if (strcmp(filesystem, volStat.fsh_name) == 0)
+                               score += 1;
+                       if (score >= 4 && score > bestScore) {
+                               bestVol = vol.Device();
+                               bestScore = score;
                        }
-               } else
-                       volumeRoster.GetBootVolume(&fSwapVolume);
-#endif
-               unload_driver_settings(settings);
-       } else
-               _SetSwapNull();
-
-#ifndef SWAP_VOLUME_IMPLEMENTED
-       BVolumeRoster volumeRoster;
-       volumeRoster.GetBootVolume(&fSwapVolume);
-#endif
-
-       fInitialSwapEnabled = fSwapEnabled;
-       fInitialSwapSize = fSwapSize;
-       fInitialSwapVolume = fSwapVolume.Device();
-}
+               }
+       }
 
+       SetSwapVolume(bestVol);
+       fInitialSettings = fCurrentSettings;
+
+       if (bestVol < 0)
+               return kErrorVolumeNotFound;
+       else
+               return B_OK;
+}
 
-void
-Settings::_WriteSwapSettings()
-{      
-       if (!IsRevertible())
-               return;
 
+status_t
+Settings::WriteSwapSettings()
+{
        BPath path;
        if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) != B_OK)
-               return;
+               return B_ERROR;
 
        path.Append("kernel/drivers");
        path.Append(kVirtualMemorySettings);
@@ -194,36 +187,56 @@ Settings::_WriteSwapSettings()
        BFile file;
        if (file.SetTo(path.Path(), B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE)
                != B_OK)
-               return;
-       
-       char buffer[256];
-#ifdef SWAP_VOLUME_IMPLEMENTED
-       char volumeName[B_FILE_NAME_LENGTH] = {0};
-       if (SwapVolume().InitCheck() != B_NO_INIT)
-               SwapVolume().GetName(volumeName);
-       else if (fBadVolName)
-               strcpy(volumeName, fBadVolName);
-       snprintf(buffer, sizeof(buffer), "vm %s\nswap_size %Ld\nswap_volume 
%s\n",
-               SwapEnabled() ? "on" : "off", SwapSize(), 
-               volumeName[0] ? volumeName : NULL);
-#else
-       snprintf(buffer, sizeof(buffer), "vm %s\nswap_size %Ld\n",
-               fSwapEnabled ? "on" : "off", fSwapSize);
-#endif
+               return B_ERROR;
+
+       fs_info info;
+       fs_stat_dev(SwapVolume(), &info);
+
+       char buffer[1024];
+       snprintf(buffer, sizeof(buffer), "vm %s\nswap_size %lld\n"
+               "swap_volume_name %s\nswap_volume_device %s\n"
+               "swap_volume_filesystem %s\nswap_volume_capacity %lld\n",
+               SwapEnabled() ? "on" : "off", SwapSize(), info.volume_name,
+               info.device_name, info.fsh_name, info.total_blocks * 
info.block_size);
 
        file.Write(buffer, strlen(buffer));
+       return B_OK;
+}
+
+
+bool
+Settings::IsRevertable()
+{
+       return SwapEnabled() != fInitialSettings.enabled
+               || SwapSize() != fInitialSettings.size
+               || SwapVolume() != fInitialSettings.volume;
 }
 
 
 void
-Settings::_SetSwapNull()
+Settings::RevertSwapSettings()
 {
-       SetSwapEnabled(false);
-       BVolumeRoster volumeRoster;
-       BVolume temporaryVolume;
-       volumeRoster.GetBootVolume(&temporaryVolume);
-       SetSwapVolume(temporaryVolume);
-       SetSwapSize(0);
+       SetSwapEnabled(fInitialSettings.enabled);
+       SetSwapSize(fInitialSettings.size);
+       SetSwapVolume(fInitialSettings.volume);
 }
 
 
+bool
+Settings::IsDefaultable()
+{
+       return SwapEnabled() != fDefaultSettings.enabled
+               || SwapSize() != fDefaultSettings.size
+               || SwapVolume() != fDefaultSettings.volume;
+}
+
+
+void
+Settings::DefaultSwapSettings(bool revertable)
+{
+       SetSwapEnabled(fDefaultSettings.enabled);
+       SetSwapSize(fDefaultSettings.size);
+       SetSwapVolume(fDefaultSettings.volume);
+       if (!revertable)
+               fInitialSettings = fDefaultSettings;
+}
diff --git a/src/preferences/virtualmemory/Settings.h 
b/src/preferences/virtualmemory/Settings.h
index d53e088..20ce0b6 100644
--- a/src/preferences/virtualmemory/Settings.h
+++ b/src/preferences/virtualmemory/Settings.h
@@ -1,54 +1,63 @@
 /*
- * Copyright 2005, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx All rights reserved.
- * Distributed under the terms of the MIT License.
+ * Copyright 2011, Hamish Morrison, hamish@xxxxxxxxxxx
+ * Copyright 2005, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx
+ * All rights reserved. Distributed under the terms of the MIT License.
  */
 #ifndef SETTINGS_H
 #define SETTINGS_H
 
 
-#include <Point.h>
-#include <Volume.h>
-
-
-class Settings {
-       public :
-               Settings();
-               virtual ~Settings();
-
-               BPoint WindowPosition() const { return fWindowPosition; }
-               void SetWindowPosition(BPoint position);
+#include <stdio.h>
+#include <stdlib.h>
 
-               bool SwapEnabled() const { return fSwapEnabled; }
-               off_t SwapSize() const { return fSwapSize; }
-               BVolume& SwapVolume() { return fSwapVolume; }
-               void SetSwapEnabled(bool enabled);
-               void SetSwapSize(off_t size);
-               void SetSwapVolume(BVolume& volume);
-
-               void RevertSwapChanges();
-               bool IsRevertible();
-
-       private:
-               void _ReadWindowSettings();
-               void _WriteWindowSettings();
-
-               void _ReadSwapSettings();
-               void _WriteSwapSettings();
+#include <Point.h>
 
-               void _SetSwapNull();
 
-               BPoint          fWindowPosition;
+static const int32 kErrorSettingsNotFound = B_ERRORS_END + 1;
+static const int32 kErrorSettingsInvalid = B_ERRORS_END + 2;
+static const int32 kErrorVolumeNotFound = B_ERRORS_END + 3;
 
-               bool            fSwapEnabled;
-               off_t           fSwapSize;
-               BVolume         fSwapVolume;
 
-               bool            fInitialSwapEnabled;
-               off_t           fInitialSwapSize;
-               dev_t           fInitialSwapVolume;
 
-               bool            fPositionUpdated;
-               const char*     fBadVolName;
+class Settings {
+public:
+                                                       Settings();
+
+                       bool                    SwapEnabled() const
+                                                               { return 
fCurrentSettings.enabled; }
+                       off_t                   SwapSize() const { return 
fCurrentSettings.size; }
+                       dev_t                   SwapVolume() { return 
fCurrentSettings.volume; }
+                       BPoint                  WindowPosition() const { return 
fWindowPosition; }
+
+                       void                    SetSwapEnabled(bool enabled,
+                                                               bool revertable 
= true);
+                       void                    SetSwapSize(off_t size, bool 
revertable = true);
+                       void                    SetSwapVolume(dev_t volume,
+                                                               bool revertable 
= true);
+                       void                    SetWindowPosition(BPoint 
position);
+
+                       status_t                ReadWindowSettings();
+                       status_t                WriteWindowSettings();
+                       status_t                ReadSwapSettings();
+                       status_t                WriteSwapSettings();
+
+                       bool                    IsRevertable();
+                       void                    RevertSwapSettings();
+
+                       bool                    IsDefaultable();
+                       void                    DefaultSwapSettings(bool 
revertable = true);
+private:
+                       struct SwapSettings {
+                               bool enabled;
+                               off_t size;
+                               dev_t volume;
+                       };
+
+                       BPoint                  fWindowPosition;
+
+                       SwapSettings    fCurrentSettings;
+                       SwapSettings    fInitialSettings;
+                       SwapSettings    fDefaultSettings;
 };
 
 #endif /* SETTINGS_H */
diff --git a/src/preferences/virtualmemory/SettingsWindow.cpp 
b/src/preferences/virtualmemory/SettingsWindow.cpp
index 3443d9a..f093281 100644
--- a/src/preferences/virtualmemory/SettingsWindow.cpp
+++ b/src/preferences/virtualmemory/SettingsWindow.cpp
@@ -6,7 +6,6 @@
 
 
 #include "SettingsWindow.h"
-#include "Settings.h"
 
 #include <Application.h>
 #include <Alert.h>
@@ -14,22 +13,25 @@
 #include <Button.h>
 #include <Catalog.h>
 #include <CheckBox.h>
-#include <GroupLayout.h>
-#include <GroupLayoutBuilder.h>
-#include <Locale.h>
-#include <StringView.h>
-#include <String.h>
-#include <Slider.h>
-#include <PopUpMenu.h>
+#include <Directory.h>
+#include <FindDirectory.h>
+#include <LayoutBuilder.h>
 #include <MenuItem.h>
 #include <MenuField.h>
-#include <Screen.h>
-#include <FindDirectory.h>
+#include <NodeMonitor.h>
 #include <Path.h>
+#include <PopUpMenu.h>
+#include <Screen.h>
+#include <StringForSize.h>
+#include <StringView.h>
+#include <String.h>
+#include <Slider.h>
+#include <system_info.h>
 #include <Volume.h>
 #include <VolumeRoster.h>
 
-#include <stdio.h>
+#include "Settings.h"
+
 
 #undef B_TRANSLATION_CONTEXT
 #define B_TRANSLATION_CONTEXT "SettingsWindow"
@@ -40,90 +42,70 @@ static const uint32 kMsgRevert = 'rvrt';
 static const uint32 kMsgSliderUpdate = 'slup';
 static const uint32 kMsgSwapEnabledUpdate = 'swen';
 static const uint32 kMsgVolumeSelected = 'vlsl';
-static const int64 kMegaByte = 1024 * 1024;
-
-
-class SizeSlider : public BSlider {
-       public:
-               SizeSlider(const char* name, const char* label,
-                       BMessage* message, int32 min, int32 max, uint32 flags);
-               virtual ~SizeSlider();
-
-               virtual const char* UpdateText() const;
-
-       private:
-               mutable BString fText;
-};
+static const off_t kMegaByte = 1024 * 1024;
+static dev_t bootDev = -1;
 
 
 SizeSlider::SizeSlider(const char* name, const char* label,
        BMessage* message, int32 min, int32 max, uint32 flags)
-       : BSlider(name, label, message, min, max, B_HORIZONTAL, B_BLOCK_THUMB, 
flags)
+       :
+       BSlider(name, label, message, min, max, B_HORIZONTAL,
+               B_BLOCK_THUMB, flags)
 {
        rgb_color color = ui_color(B_CONTROL_HIGHLIGHT_COLOR);
        UseFillColor(true, &color);
 }
 
 
-SizeSlider::~SizeSlider()
+const char*
+SizeSlider::UpdateText() const
 {
+       return string_for_size(Value() * kMegaByte, fText, sizeof(fText));
 }
 
 
-const char*
-byte_string(int64 size)
+VolumeMenuItem::VolumeMenuItem(BVolume volume, BMessage* message)
+       :
+       BMenuItem("", message),
+       fVolume(volume)
 {
-       double value = 1. * size;
-       static char string[256];
-
-       if (value < 1024)
-               snprintf(string, sizeof(string), B_TRANSLATE("%Ld B"), size);
-       else {
-               static const char *units[] = {
-                       B_TRANSLATE_MARK("KB"),
-                       B_TRANSLATE_MARK("MB"),
-                       B_TRANSLATE_MARK("GB"),
-                       NULL
-               };
-               int32 i = -1;
-
-               do {
-                       value /= 1024.0;
-                       i++;
-               } while (value >= 1024 && units[i + 1]);
-
-               off_t rounded = off_t(value * 100LL);

[ *** diff truncated: 695 lines dropped *** ]


############################################################################

Commit:      df015ac1ce16bbd73327b09f503abb9ead1905a7
URL:         http://cgit.haiku-os.org/haiku/commit/?id=df015ac
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Thu Sep  6 17:23:34 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:12:37 2012 UTC

VM Preflet: More throughly translate BAlert window titles

* Ensure we call translate BAlert window titles

----------------------------------------------------------------------------

############################################################################

Commit:      749ab628209de7bc532a9609a043ab10543fbcdc
URL:         http://cgit.haiku-os.org/haiku/commit/?id=749ab62
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Thu Sep  6 17:28:24 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:12:40 2012 UTC

VM Preflet: Style fix. bootDev to gBootDev. No functional change

----------------------------------------------------------------------------

############################################################################

Commit:      a9816d43728c43beef4b974503e4db24bf97b7e4
URL:         http://cgit.haiku-os.org/haiku/commit/?id=a9816d4
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Thu Sep  6 19:53:03 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:12:42 2012 UTC

VM Preflet: Add an automatic swap option swap_auto

* Add swap_auto to the virtual memory settings file
* Disable controls based on the context of what is enabled
* hamishm gave permission to adjust his copyrights to Haiku, Inc.

----------------------------------------------------------------------------

############################################################################

Commit:      39792a320892ddbe253ab85815cee7f96b84a13e
URL:         http://cgit.haiku-os.org/haiku/commit/?id=39792a3
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Thu Sep  6 20:37:58 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:12:49 2012 UTC

Kernel VM: Utilize swap_auto option

* Refine the swap logic a little
* Refine header copyright to preferred format
  I had hamishm's verbal permission to change his entry

----------------------------------------------------------------------------

############################################################################

Commit:      45f231f0b5d6e1d6b8048a217c861c4f785ff2de
URL:         http://cgit.haiku-os.org/haiku/commit/?id=45f231f
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Fri Sep  7 00:34:00 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:12:52 2012 UTC

VM Preflet: Center properly on screen

* On first run, dialog was at 0,0
* Rename window location/settings file
  from VM_data to virtualmemory_preferences

----------------------------------------------------------------------------

############################################################################

Commit:      c6a63ebb278ef82884c1e58acf99a9d22b252b59
URL:         http://cgit.haiku-os.org/haiku/commit/?id=c6a63eb
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Fri Sep  7 00:46:14 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:12:55 2012 UTC

VM Preflet: More correctly calculate default swap

----------------------------------------------------------------------------

############################################################################

Commit:      c7df01860aa029959512e984aceb76b21b2d9bf2
URL:         http://cgit.haiku-os.org/haiku/commit/?id=c7df018
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Fri Sep  7 12:18:20 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:13:23 2012 UTC

VM Preflet: Style cleanup; check for success of fs_stat_dev

* Cleanup as per Axel on the ML
* Remove superfluous else statements

----------------------------------------------------------------------------

############################################################################

Commit:      52d3e2efaeb1be0b473ae4caa517f4e1b85b3c9e
URL:         http://cgit.haiku-os.org/haiku/commit/?id=52d3e2e
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Fri Sep  7 17:40:56 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:13:25 2012 UTC

VM Preflet: Add a BStatusBar to show swap file usage

* Correct a situation where disabling the auto swap without
  adjusting the swap size would result in an invalid swap
  size getting written to the configuration

----------------------------------------------------------------------------

############################################################################

Revision:    hrevr1alpha4-44592
Commit:      9f36741b8aefda8e3c8684698c89f9b04dba9040
URL:         http://cgit.haiku-os.org/haiku/commit/?id=9f36741
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Fri Sep  7 23:04:17 2012 UTC
Committer:   Ryan Leavengood <leavengood@xxxxxxxxx>
Commit-Date: Sun Sep  9 23:13:42 2012 UTC

VM Preflet: Fix user prompt string typo. Thanks ttcoder!

----------------------------------------------------------------------------


Other related posts:

  • » [haiku-commits] haiku.r1alpha4: hrevr1alpha4-44592 - src/preferences/virtualmemory build/jam src/system/kernel/vm src/bin src/data/beos_mime/text - leavengood