• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  * fs/driver/fs_unregisterdriver.c
3  *
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.  The
7  * ASF licenses this file to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance with the
9  * License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
16  * License for the specific language governing permissions and limitations
17  * under the License.
18  *
19  ****************************************************************************/
20 
21 /****************************************************************************
22  * Included Files
23  ****************************************************************************/
24 
25 #include "vfs_config.h"
26 #include "fs/driver.h"
27 #include "vnode.h"
28 #include "string.h"
29 #include "errno.h"
30 
31 /****************************************************************************
32  * Public Functions
33  ****************************************************************************/
34 
35 /****************************************************************************
36  * Name: unregister_driver
37  *
38  * Description:
39  *   Remove the character driver vnode at 'path' from the pseudo-file system
40  *
41  ****************************************************************************/
42 
unregister_driver(const char * path)43 int unregister_driver(const char *path)
44 {
45   struct Vnode *vnode = NULL;
46   int ret;
47   if (path == NULL)
48     {
49       return -EINVAL;
50     }
51   VnodeHold();
52   ret = VnodeLookup(path, &vnode, V_DUMMY);
53   if (ret != OK)
54     {
55       VnodeDrop();
56       return ret;
57     }
58   if (vnode->type != VNODE_TYPE_CHR && vnode->type != VNODE_TYPE_BLK)
59     {
60       VnodeDrop();
61       return -EPERM;
62     }
63   ret = VnodeFree(vnode);
64   VnodeDrop();
65 
66   return ret;
67 }
68