We should define aliases in target

This commit is contained in:
Aoran Zeng 2025-08-10 22:39:05 +08:00
parent 5af9e5a2b1
commit 4da60f0c7d
No known key found for this signature in database
GPG Key ID: 8F8BA8488E10ED98
3 changed files with 21 additions and 11 deletions

View File

@ -538,11 +538,11 @@ match_alias_callback (const char *alias, void *user_data)
/**
* @param:input @param:registry target
* @param:input @param:menu target
* prelude
*
* @param[in] registry registry
* @param[in] size registry
* @param[in] menu menu
* @param[in] size menu
* @param[in] input
* @param[out] target Target_t
*
@ -550,13 +550,13 @@ match_alias_callback (const char *alias, void *user_data)
*/
#define iterate_menu(ary, input, target) iterate_menu_(ary, xy_arylen(ary), input, target)
bool
iterate_menu_ (TargetRegisterInfo_t registry[], size_t size, const char *input, Target_t **target)
iterate_menu_ (TargetRegisterInfo_t menu[], size_t size, const char *input, Target_t **target)
{
for (int i = 0; i < size; i++)
{
TargetRegisterInfo_t *entry = &registry[i];
TargetRegisterInfo_t *entry = &menu[i];
if (iterate_aliases (entry->aliases, match_alias_callback, (void *)input))
if (iterate_aliases (entry->target->aliases, match_alias_callback, (void *)input))
{
if (entry->prelude)
{
@ -564,7 +564,7 @@ iterate_menu_ (TargetRegisterInfo_t registry[], size_t size, const char *input,
}
else
{
chsrc_warn ("该target未定义 prelude()");
chsrc_error ("该target未定义 prelude()");
}
*target = entry->target;

View File

@ -935,17 +935,25 @@ auto_select_mirror (Source_t *sources, size_t size, const char *target_name)
}
/**
* menu target alias
*/
char *get_first_alias_of_target (Target_t *t)
{
}
int
use_specific_mirror_or_auto_select (char *input, Target_t *t)
{
if (input)
{
return query_mirror_exist (t->sources, t->sources_n, t->name, input);
return query_mirror_exist (t->sources, t->sources_n, t->aliases, input);
}
else
{
return auto_select_mirror (t->sources, t->sources_n, t->name);
return auto_select_mirror (t->sources, t->sources_n, t->aliases);
}
}

View File

@ -117,6 +117,9 @@ Contributor_t;
typedef struct Target_t
{
/* 以 / 为分隔符的多个目标别名 */
char *aliases;
void (*getfn) (char *option);
void (*setfn) (char *option);
void (*resetfn) (char *option);
@ -159,12 +162,11 @@ typedef struct TargetRegisterInfo_t
{
Target_t *target; /* target 本身 */
void (*prelude) (void); /* 填充 target 信息等预置操作 */
char *aliases; /* 以空格分隔的 alias 字符串 */
}
TargetRegisterInfo_t;
#define def_target(t) void t##_getsrc(char *option);void t##_setsrc(char *option);void t##_resetsrc(char *option); Target_t t##_target={name};
#define def_target(t, aliases) void t##_getsrc(char *option);void t##_setsrc(char *option);void t##_resetsrc(char *option); Target_t t##_target={aliases};
/* 以下宏仅能放在 prelude() 中使用 */
#define use_this(t) Target_t *this = &t##_target;