Skip to content

Commit d766a6f

Browse files
committed
重新实现 chef_set_smURL()
1 parent c830c50 commit d766a6f

File tree

1 file changed

+46
-5
lines changed

1 file changed

+46
-5
lines changed

src/framework/chef.c

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,31 +142,72 @@ chef_set_repoURL (Target_t *target, SourceProvider_t *provider, char *url)
142142
xy_unreached();
143143
}
144144

145+
145146
/**
146-
* @breif 设置 或 修改 某个镜像站的 *精准*测速链接,即修改 Source_t.speed_measure_url
147+
* @brief 提供一个函数,这个函数基于 "换源链接" 和用户提供的数据来构造和填充精准测速链接
147148
*/
148149
void
149-
chef_set_smURL (Target_t *target, SourceProvider_t *provider, char *url)
150+
chef_set_smURL_with_func (
151+
Target_t *target,
152+
SourceProvider_t *provider,
153+
char *(*func)(const char *url, const char *user_data),
154+
char *user_data)
150155
{
151156
xy_cant_be_null (target);
152157
xy_cant_be_null (provider);
153-
xy_cant_be_null (url);
158+
xy_cant_be_null (func);
154159

155160
for (int i=0; i < target->sources_n; i++)
156161
{
157162
Source_t *src = &target->sources[i];
158163
SourceProvider_t *p = src->provider;
159164
if (p == provider)
160165
{
161-
src->speed_measure_url = xy_strdup (url);
162-
return;
166+
if (src->url)
167+
{
168+
src->speed_measure_url = func (src->url, user_data);
169+
return;
170+
}
171+
else
172+
{
173+
chsrc_panic ("该函数基于已有的换源链接来生成测速链接,但该源的换源链接为空");
174+
}
163175
}
164176
}
165177

166178
xy_unreached();
167179
}
168180

169181

182+
/**
183+
* @brief 给 "换源链接" 增加一个后缀来构造和填充专用测速链接
184+
*/
185+
void
186+
chef_set_smURL_with_postfix (Target_t *target, SourceProvider_t *provider, char *postfix)
187+
{
188+
chef_set_smURL_with_func (target, provider, xy_2strcat, postfix);
189+
}
190+
191+
192+
/**
193+
* @internal 该函数仅用于实现 chef_set_smURL()
194+
*/
195+
void
196+
_chef_strdup_2nd_argument (const char *DUMMY, const char *str)
197+
{
198+
return xy_strdup (str);
199+
}
200+
201+
/**
202+
* @breif 设置 或 修改 某个镜像站的 *精准*测速链接,即修改 Source_t.speed_measure_url
203+
*/
204+
void
205+
chef_set_smURL (Target_t *target, SourceProvider_t *provider, char *url)
206+
{
207+
chef_set_smURL_with_func (target, provider, _chef_strdup_2nd_argument, url);
208+
}
209+
210+
170211
/**
171212
* @brief 提供一个函数,这个函数基于 "换源链接" 和用户提供的数据来构造和填充精准测速链接
172213
*/

0 commit comments

Comments
 (0)