@@ -136,172 +136,7 @@ static int sync_db_validate(alpm_db_t *db)
136
136
return 0 ;
137
137
}
138
138
139
- int SYMEXPORT alpm_db_update (int force , alpm_db_t * db )
140
- {
141
- char * syncpath ;
142
- const char * dbext ;
143
- alpm_list_t * i ;
144
- int updated = 0 ;
145
- int ret = -1 ;
146
- mode_t oldmask ;
147
- alpm_handle_t * handle ;
148
- int siglevel ;
149
-
150
- /* Sanity checks */
151
- ASSERT (db != NULL , return - 1 );
152
- handle = db -> handle ;
153
- handle -> pm_errno = ALPM_ERR_OK ;
154
- ASSERT (db != handle -> db_local , RET_ERR (handle , ALPM_ERR_WRONG_ARGS , -1 ));
155
- ASSERT (db -> servers != NULL , RET_ERR (handle , ALPM_ERR_SERVER_NONE , -1 ));
156
-
157
- if (!(db -> usage & ALPM_DB_USAGE_SYNC )) {
158
- return 0 ;
159
- }
160
-
161
- syncpath = get_sync_dir (handle );
162
- if (!syncpath ) {
163
- return -1 ;
164
- }
165
-
166
- /* force update of invalid databases to fix potential mismatched database/signature */
167
- if (db -> status & DB_STATUS_INVALID ) {
168
- force = 1 ;
169
- }
170
-
171
- /* make sure we have a sane umask */
172
- oldmask = umask (0022 );
173
-
174
- siglevel = alpm_db_get_siglevel (db );
175
-
176
- /* attempt to grab a lock */
177
- if (_alpm_handle_lock (handle )) {
178
- free (syncpath );
179
- umask (oldmask );
180
- RET_ERR (handle , ALPM_ERR_HANDLE_LOCK , -1 );
181
- }
182
-
183
- dbext = db -> handle -> dbext ;
184
-
185
- for (i = db -> servers ; i ; i = i -> next ) {
186
- const char * server = i -> data , * final_db_url = NULL ;
187
- struct dload_payload payload = {0 };
188
- size_t len ;
189
- int sig_ret = 0 ;
190
-
191
- /* set hard upper limit of 128MiB */
192
- payload .max_size = 128 * 1024 * 1024 ;
193
-
194
- /* print server + filename into a buffer */
195
- len = strlen (server ) + strlen (db -> treename ) + strlen (dbext ) + 2 ;
196
- MALLOC (payload .fileurl , len ,
197
- {
198
- free (syncpath );
199
- umask (oldmask );
200
- RET_ERR (handle , ALPM_ERR_MEMORY , -1 );
201
- }
202
- );
203
- snprintf (payload .fileurl , len , "%s/%s%s" , server , db -> treename , dbext );
204
- payload .handle = handle ;
205
- payload .force = force ;
206
- payload .unlink_on_fail = 1 ;
207
-
208
- ret = _alpm_download (& payload , syncpath , NULL , & final_db_url );
209
- _alpm_dload_payload_reset (& payload );
210
- updated = (updated || ret == 0 );
211
-
212
- if (ret != -1 && updated && (siglevel & ALPM_SIG_DATABASE )) {
213
- /* an existing sig file is no good at this point */
214
- char * sigpath = _alpm_sigpath (handle , _alpm_db_path (db ));
215
- if (!sigpath ) {
216
- ret = -1 ;
217
- break ;
218
- }
219
- unlink (sigpath );
220
- free (sigpath );
221
-
222
-
223
- /* check if the final URL from internal downloader looks reasonable */
224
- if (final_db_url != NULL ) {
225
- if (strlen (final_db_url ) < 3
226
- || strcmp (final_db_url + strlen (final_db_url ) - strlen (dbext ),
227
- dbext ) != 0 ) {
228
- final_db_url = NULL ;
229
- }
230
- }
231
-
232
- /* if we downloaded a DB, we want the .sig from the same server */
233
- if (final_db_url != NULL ) {
234
- /* print final_db_url into a buffer (leave space for .sig) */
235
- len = strlen (final_db_url ) + 5 ;
236
- } else {
237
- /* print server + filename into a buffer (leave space for separator and .sig) */
238
- len = strlen (server ) + strlen (db -> treename ) + strlen (dbext ) + 6 ;
239
- }
240
-
241
- MALLOC (payload .fileurl , len ,
242
- {
243
- free (syncpath );
244
- umask (oldmask );
245
- RET_ERR (handle , ALPM_ERR_MEMORY , -1 );
246
- }
247
- );
248
-
249
- if (final_db_url != NULL ) {
250
- snprintf (payload .fileurl , len , "%s.sig" , final_db_url );
251
- } else {
252
- snprintf (payload .fileurl , len , "%s/%s%s.sig" , server , db -> treename , dbext );
253
- }
254
-
255
- payload .handle = handle ;
256
- payload .force = 1 ;
257
- payload .errors_ok = (siglevel & ALPM_SIG_DATABASE_OPTIONAL );
258
-
259
- /* set hard upper limit of 16KiB */
260
- payload .max_size = 16 * 1024 ;
261
-
262
- sig_ret = _alpm_download (& payload , syncpath , NULL , NULL );
263
- /* errors_ok suppresses error messages, but not the return code */
264
- sig_ret = payload .errors_ok ? 0 : sig_ret ;
265
- _alpm_dload_payload_reset (& payload );
266
- }
267
-
268
- if (ret != -1 && sig_ret != -1 ) {
269
- break ;
270
- }
271
- }
272
-
273
- if (updated ) {
274
- /* Cache needs to be rebuilt */
275
- _alpm_db_free_pkgcache (db );
276
-
277
- /* clear all status flags regarding validity/existence */
278
- db -> status &= ~DB_STATUS_VALID ;
279
- db -> status &= ~DB_STATUS_INVALID ;
280
- db -> status &= ~DB_STATUS_EXISTS ;
281
- db -> status &= ~DB_STATUS_MISSING ;
282
-
283
- /* if the download failed skip validation to preserve the download error */
284
- if (ret != -1 && sync_db_validate (db ) != 0 ) {
285
- /* pm_errno should be set */
286
- ret = -1 ;
287
- }
288
- }
289
-
290
- if (ret == -1 ) {
291
- /* pm_errno was set by the download code */
292
- _alpm_log (handle , ALPM_LOG_DEBUG , "failed to sync db: %s\n" ,
293
- alpm_strerror (handle -> pm_errno ));
294
- } else {
295
- handle -> pm_errno = ALPM_ERR_OK ;
296
- }
297
-
298
- _alpm_handle_unlock (handle );
299
- free (syncpath );
300
- umask (oldmask );
301
- return ret ;
302
- }
303
-
304
- int SYMEXPORT alpm_dbs_update (alpm_handle_t * handle , alpm_list_t * dbs , int force ) {
139
+ int SYMEXPORT alpm_db_update (alpm_handle_t * handle , alpm_list_t * dbs , int force ) {
305
140
char * syncpath ;
306
141
const char * dbext = handle -> dbext ;
307
142
alpm_list_t * i ;
0 commit comments