13
13
* See the License for the specific language governing permissions and
14
14
* limitations under the License.
15
15
*/
16
+ #include < cstring>
17
+
16
18
#include " platform/FileBase.h"
17
19
#include " platform/FileLike.h"
18
20
#include " platform/FileHandle.h"
@@ -21,6 +23,7 @@ namespace mbed {
21
23
22
24
FileBase *FileBase::_head = NULL ;
23
25
SingletonPtr<PlatformMutex> FileBase::_mutex;
26
+ FileBase *FileBase::_default = NULL ;
24
27
25
28
FileBase::FileBase (const char *name, PathType t) : _next(NULL ),
26
29
_name (name),
@@ -52,26 +55,41 @@ FileBase::~FileBase()
52
55
p->_next = _next;
53
56
}
54
57
}
58
+
59
+ if (_default == this ) {
60
+ _default == NULL ;
61
+ }
62
+
55
63
_mutex->unlock ();
56
64
57
65
if (getPathType () == FilePathType) {
58
- extern void remove_filehandle (FileHandle * file);
59
- remove_filehandle (static_cast <FileHandle *>( static_cast < FileLike *>(this ) ));
66
+ extern void remove_filehandle (FileHandle *file);
67
+ remove_filehandle (static_cast <FileLike *>(this ));
60
68
}
61
69
}
62
70
71
+ void FileBase::set_as_default ()
72
+ {
73
+ _mutex->lock ();
74
+ _default = this ;
75
+ _mutex->unlock ();
76
+ }
77
+
63
78
FileBase *FileBase::lookup (const char *name, unsigned int len)
64
79
{
65
80
_mutex->lock ();
66
81
FileBase *p = _head;
67
82
while (p != NULL ) {
68
83
/* Check that p->_name matches name and is the correct length */
69
- if (p->_name != NULL && std::strncmp (p->_name , name, len) == 0 && std::strlen (p->_name ) == len ) {
84
+ if (p->_name != NULL && len == std::strlen (p->_name ) && std::memcmp (p->_name , name, len ) == 0 ) {
70
85
_mutex->unlock ();
71
86
return p;
72
87
}
73
88
p = p->_next ;
74
89
}
90
+ if (len == (sizeof " default" ) - 1 && std::memcmp (" default" , name, len) == 0 ) {
91
+ return _default;
92
+ }
75
93
_mutex->unlock ();
76
94
return NULL ;
77
95
}
0 commit comments