[haiku-commits] haiku: hrev46226 - src/add-ons/kernel/file_systems/cdda

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 14 Oct 2013 00:47:51 +0200 (CEST)

hrev46226 adds 3 changesets to branch 'master'
old head: bab0501f325dfaab12e7d10b050d2edf87a6f2fb
new head: ae527df336f44a3a7f12353def921078e2bfabf0
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=ae527df+%5Ebab0501

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

9499ef8: cdda: Fixed include order.

a2d3d3a: cdda: got rid of kernel_cpp.h - it should not be used.
  
  * It's "new" operator does not fail or throw on allocation problems, but
    just lets the constructor do its work (and likely crash because of
    accessing a null pointer).

ae527df: cdda: Use MemoryDeleter where it makes sense.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

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

2 files changed, 23 insertions(+), 31 deletions(-)
src/add-ons/kernel/file_systems/cdda/Jamfile     |  3 +-
.../file_systems/cdda/kernel_interface.cpp       | 51 +++++++++-----------

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

Commit:      9499ef8e512249d5308c0395a96f070b53b6b52b
URL:         http://cgit.haiku-os.org/haiku/commit/?id=9499ef8
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Sun Oct 13 21:40:37 2013 UTC

cdda: Fixed include order.

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

diff --git a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp 
b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
index fafd3a6..bdc1558 100644
--- a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
+++ b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
@@ -1,12 +1,15 @@
 /*
- * Copyright 2007-2011, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
+ * Copyright 2007-2013, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
  * Distributed under the terms of the MIT License.
  */
 
 
-#include "cdda.h"
-#include "cddb.h"
-#include "Lock.h"
+#include <dirent.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
 
 #include <FindDirectory.h>
 #include <fs_info.h>
@@ -19,12 +22,9 @@
 #include <util/kernel_cpp.h>
 #include <util/DoublyLinkedList.h>
 
-#include <dirent.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
+#include "cdda.h"
+#include "cddb.h"
+#include "Lock.h"
 
 
 //#define TRACE_CDDA

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

Commit:      a2d3d3ae54ed643a6d04c4de3a91ec2ed77c3201
URL:         http://cgit.haiku-os.org/haiku/commit/?id=a2d3d3a
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Sun Oct 13 21:40:59 2013 UTC

cdda: got rid of kernel_cpp.h - it should not be used.

* It's "new" operator does not fail or throw on allocation problems, but
  just lets the constructor do its work (and likely crash because of
  accessing a null pointer).

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

diff --git a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp 
b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
index bdc1558..45bc7f1 100644
--- a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
+++ b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
@@ -19,7 +19,6 @@
 #include <NodeMonitor.h>
 #include <TypeConstants.h>
 
-#include <util/kernel_cpp.h>
 #include <util/DoublyLinkedList.h>
 
 #include "cdda.h"
@@ -432,7 +431,7 @@ read_attributes(int fd, Inode* inode)
                size = B_BENDIAN_TO_HOST_INT32(size);
                name[length] = '\0';
 
-               Attribute* attribute = new Attribute(name, type);
+               Attribute* attribute = new(std::nothrow) Attribute(name, type);
                if (attribute->IsProtectedNamespace()) {
                        // Attributes in the protected namespace are handled 
internally
                        // so we do not load them even if they are present in 
the
@@ -853,7 +852,8 @@ Inode*
 Volume::_CreateNode(Inode* parent, const char* name, uint64 start,
        uint64 frames, int32 type)
 {
-       Inode* inode = new Inode(this, parent, name, start, frames, type);
+       Inode* inode = new(std::nothrow) Inode(this, parent, name, start, 
frames,
+               type);
        if (inode == NULL)
                return NULL;
 
@@ -1276,7 +1276,7 @@ status_t
 Inode::AddAttribute(const char* name, type_code type, bool overwrite,
        const uint8* data, size_t length)
 {
-       Attribute* attribute = new Attribute(name, type);
+       Attribute* attribute = new(std::nothrow) Attribute(name, type);
        if (attribute == NULL)
                return B_NO_MEMORY;
 
@@ -1476,7 +1476,7 @@ cdda_mount(fs_volume* fsVolume, const char* device, 
uint32 flags,
 {
        TRACE(("cdda_mount: entry\n"));
 
-       Volume* volume = new Volume(fsVolume);
+       Volume* volume = new(std::nothrow) Volume(fsVolume);
        if (volume == NULL)
                return B_NO_MEMORY;
 

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

Revision:    hrev46226
Commit:      ae527df336f44a3a7f12353def921078e2bfabf0
URL:         http://cgit.haiku-os.org/haiku/commit/?id=ae527df
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Sun Oct 13 21:48:41 2013 UTC

cdda: Use MemoryDeleter where it makes sense.

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

diff --git a/src/add-ons/kernel/file_systems/cdda/Jamfile 
b/src/add-ons/kernel/file_systems/cdda/Jamfile
index d63d6a7..900880b 100644
--- a/src/add-ons/kernel/file_systems/cdda/Jamfile
+++ b/src/add-ons/kernel/file_systems/cdda/Jamfile
@@ -1,8 +1,7 @@
 SubDir HAIKU_TOP src add-ons kernel file_systems cdda ;
 
-UsePrivateHeaders drivers kernel ;
+UsePrivateHeaders drivers kernel shared storage ;
 UsePrivateHeaders [ FDirName kernel disk_device_manager ] ;
-UsePrivateHeaders [ FDirName storage ] ;
 
 KernelAddon cdda :
        kernel_interface.cpp
diff --git a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp 
b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
index 45bc7f1..158b8c5 100644
--- a/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
+++ b/src/add-ons/kernel/file_systems/cdda/kernel_interface.cpp
@@ -19,6 +19,7 @@
 #include <NodeMonitor.h>
 #include <TypeConstants.h>
 
+#include <AutoDeleter.h>
 #include <util/DoublyLinkedList.h>
 
 #include "cdda.h"
@@ -458,11 +459,11 @@ open_attributes(uint32 cddbID, int deviceFD, int mode,
        if (path == NULL)
                return -1;
 
+       MemoryDeleter deleter(path);
        bool create = (mode & O_WRONLY) != 0;
 
        if (find_directory(B_USER_SETTINGS_DIRECTORY, -1, create, path,
                        B_PATH_NAME_LENGTH) != B_OK) {
-               free(path);
                return -1;
        }
 
@@ -479,7 +480,6 @@ open_attributes(uint32 cddbID, int deviceFD, int mode,
                char* deviceName = path + length;
                if (ioctl(deviceFD, B_GET_PATH_FOR_DEVICE, deviceName,
                                B_PATH_NAME_LENGTH - length) < B_OK) {
-                       free(path);
                        return B_ERROR;
                }
 
@@ -495,10 +495,7 @@ open_attributes(uint32 cddbID, int deviceFD, int mode,
        } else
                strlcat(path, "/shared", B_PATH_NAME_LENGTH);
 
-       int fd = open(path, mode | (create ? O_CREAT | O_TRUNC : 0), 0644);
-
-       free(path);
-       return fd;
+       return open(path, mode | (create ? O_CREAT | O_TRUNC : 0), 0644);
 }
 
 
@@ -623,15 +620,15 @@ Volume::Mount(const char* device)
        if (toc == NULL)
                return B_NO_MEMORY;
 
+       MemoryDeleter deleter(toc);
+
        status_t status = read_table_of_contents(fDevice, toc, 1024);
        // there has to be at least one audio track
        if (status == B_OK && count_audio_tracks(toc) == 0)
                status = B_BAD_TYPE;
 
-       if (status != B_OK) {
-               free(toc);
+       if (status != B_OK)
                return status;
-       }
 
        fDiscID = compute_cddb_disc_id(*toc);
 
@@ -643,10 +640,8 @@ Volume::Mount(const char* device)
                status = publish_vnode(FSVolume(), fRootNode->ID(), fRootNode,
                        &gCDDAVnodeOps, fRootNode->Type(), 0);
        }
-       if (status != B_OK) {
-               free(toc);
+       if (status != B_OK)
                return status;
-       }
 
        bool doLookup = true;
        cdtext text;
@@ -743,8 +738,6 @@ Volume::Mount(const char* device)
        if (fd >= 0)
                _RestoreAttributes(fd);
 
-       free(toc);
-
        // determine volume title
        DetermineName(fDiscID, fDevice, title, sizeof(title));
 


Other related posts: