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 * prelude
* *
* @param[in] registry registry * @param[in] menu menu
* @param[in] size registry * @param[in] size menu
* @param[in] input * @param[in] input
* @param[out] target Target_t * @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) #define iterate_menu(ary, input, target) iterate_menu_(ary, xy_arylen(ary), input, target)
bool 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++) 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) if (entry->prelude)
{ {
@ -564,7 +564,7 @@ iterate_menu_ (TargetRegisterInfo_t registry[], size_t size, const char *input,
} }
else else
{ {
chsrc_warn ("该target未定义 prelude()"); chsrc_error ("该target未定义 prelude()");
} }
*target = entry->target; *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 int
use_specific_mirror_or_auto_select (char *input, Target_t *t) use_specific_mirror_or_auto_select (char *input, Target_t *t)
{ {
if (input) 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 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 typedef struct Target_t
{ {
/* 以 / 为分隔符的多个目标别名 */
char *aliases;
void (*getfn) (char *option); void (*getfn) (char *option);
void (*setfn) (char *option); void (*setfn) (char *option);
void (*resetfn) (char *option); void (*resetfn) (char *option);
@ -159,12 +162,11 @@ typedef struct TargetRegisterInfo_t
{ {
Target_t *target; /* target 本身 */ Target_t *target; /* target 本身 */
void (*prelude) (void); /* 填充 target 信息等预置操作 */ void (*prelude) (void); /* 填充 target 信息等预置操作 */
char *aliases; /* 以空格分隔的 alias 字符串 */
} }
TargetRegisterInfo_t; 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() 中使用 */ /* 以下宏仅能放在 prelude() 中使用 */
#define use_this(t) Target_t *this = &t##_target; #define use_this(t) Target_t *this = &t##_target;