xref: /haiku/src/apps/debuganalyzer/util/DataSource.cpp (revision 58481f0f6ef1a61ba07283f012cafbc2ed874ead)
1 /*
2  * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #include "DataSource.h"
7 
8 #include <new>
9 
10 #include <String.h>
11 
12 
13 // #pragma mark - DataSource
14 
15 
16 DataSource::DataSource()
17 {
18 }
19 
20 
21 DataSource::~DataSource()
22 {
23 }
24 
25 
26 status_t
27 DataSource::GetName(BString& name)
28 {
29 	return B_UNSUPPORTED;
30 }
31 
32 
33 // #pragma mark - FileDataSource
34 
35 
36 
37 status_t
38 FileDataSource::CreateDataIO(BDataIO** _io)
39 {
40 	BFile* file = new(std::nothrow) BFile;
41 	if (file == NULL)
42 		return B_NO_MEMORY;
43 
44 	status_t error = OpenFile(*file);
45 	if (error != B_OK) {
46 		delete file;
47 		return error;
48 	}
49 
50 	*_io = file;
51 	return B_OK;
52 }
53 
54 
55 // #pragma mark - PathDataSource
56 
57 
58 status_t
59 PathDataSource::Init(const char* path)
60 {
61 	return fPath.SetTo(path);
62 }
63 
64 
65 status_t
66 PathDataSource::GetName(BString& name)
67 {
68 	if (fPath.Path() == NULL)
69 		return B_NO_INIT;
70 
71 	name = fPath.Path();
72 	return B_OK;
73 }
74 
75 
76 status_t
77 PathDataSource::OpenFile(BFile& file)
78 {
79 	return file.SetTo(fPath.Path(), B_READ_ONLY);
80 }
81 
82 
83 // #pragma mark - EntryRefDataSource
84 
85 
86 status_t
87 EntryRefDataSource::Init(const entry_ref* ref)
88 {
89 	if (ref->name == NULL)
90 		return B_BAD_VALUE;
91 
92 	fRef = *ref;
93 	if (fRef.name == NULL)
94 		return B_NO_MEMORY;
95 
96 	return B_OK;
97 }
98 
99 
100 status_t
101 EntryRefDataSource::GetName(BString& name)
102 {
103 	BEntry entry;
104 	status_t error = entry.SetTo(&fRef);
105 	if (error != B_OK)
106 		return error;
107 
108 	BPath path;
109 	error = entry.GetPath(&path);
110 	if (error != B_OK)
111 		return error;
112 
113 	name = path.Path();
114 	return B_OK;
115 }
116 
117 
118 status_t
119 EntryRefDataSource::OpenFile(BFile& file)
120 {
121 	return file.SetTo(&fRef, B_READ_ONLY);
122 }
123