/**
|
* @file shell_companion.c
|
* @author Letter (nevermindzzt@gmail.com)
|
* @brief shell companion object support
|
* @version 3.0.3
|
* @date 2020-07-22
|
*
|
* @copyright (c) 2020 Letter
|
*
|
*/
|
#include "shell.h"
|
|
#if SHELL_USING_COMPANION == 1
|
/**
|
* @brief shell添加伴生对象
|
*
|
* @param shell shell对象
|
* @param id 伴生对象ID
|
* @param object 伴生对象
|
* @return signed char 0 添加成功 -1 添加失败
|
*/
|
signed char shellCompanionAdd(Shell *shell, int id, void *object)
|
{
|
ShellCompanionObj *companions = shell->info.companions;
|
ShellCompanionObj *node = SHELL_MALLOC(sizeof(ShellCompanionObj));
|
SHELL_ASSERT(node, return -1);
|
node->id = id;
|
node->obj = object;
|
node->next = companions;
|
shell->info.companions = node;
|
return 0;
|
}
|
|
/**
|
* @brief shell删除伴生对象
|
*
|
* @param shell shell对象
|
* @param id 伴生对象ID
|
* @return signed char 0 删除成功 -1 无匹配对象
|
*/
|
signed char shellCompanionDel(Shell *shell, int id)
|
{
|
ShellCompanionObj *companions = shell->info.companions;
|
ShellCompanionObj *front = companions;
|
while (companions)
|
{
|
if (companions->id == id)
|
{
|
if (companions == shell->info.companions && !(companions->next))
|
{
|
shell->info.companions = (void *)0;
|
}
|
else
|
{
|
front->next = companions->next;
|
}
|
SHELL_FREE(companions);
|
return 0;
|
}
|
front = companions;
|
companions = companions->next;
|
}
|
return -1;
|
}
|
|
/**
|
* @brief shell获取伴生对象
|
*
|
* @param shell shell对象
|
* @param id 伴生对象ID
|
* @return void* 伴生对象,无匹配对象时返回NULL
|
*/
|
void *shellCompanionGet(Shell *shell, int id)
|
{
|
SHELL_ASSERT(shell, return (void *)0);
|
ShellCompanionObj *companions = shell->info.companions;
|
while (companions)
|
{
|
if (companions->id == id)
|
{
|
return companions->obj;
|
}
|
companions = companions->next;
|
}
|
return (void *)0;
|
}
|
#endif /** SHELL_USING_COMPANION == 1 */
|