#include <sys/file.h>
#include <sys/mount.h>
#include <sys/stat.h>
+#include <sys/utsname.h>
#include <sys/types.h>
#include <syslog.h>
#include <unistd.h>
return 0;
}
+static int pakfire_lock_running_kernel(struct pakfire* pakfire) {
+ struct utsname utsname;
+ char buffer[NAME_MAX];
+
+ // Call uname()
+ int r = uname(&utsname);
+ if (r) {
+ ERROR(pakfire, "uname() failed: %m\n");
+ return r;
+ }
+
+ DEBUG(pakfire, "Locking running kernel %s\n", utsname.release);
+
+ r = pakfire_string_format(buffer, "kernel(%s)", utsname.release);
+ if (r)
+ return r;
+
+ // Add a locking pool job
+ Id id = pool_str2id(pakfire->pool, buffer, 1);
+ if (id)
+ queue_push2(&pakfire->pool->pooljobs, SOLVER_LOCK|SOLVER_SOLVABLE_PROVIDES, id);
+
+ return 0;
+}
+
static int pakfire_populate_pool(struct pakfire* pakfire) {
struct pakfire_db* db = NULL;
struct pakfire_repo* commandline = NULL;
if (r)
goto ERROR;
+ // Lock the running kernel
+ if (pakfire_on_root(pakfire)) {
+ r = pakfire_lock_running_kernel(pakfire);
+ if (r)
+ goto ERROR;
+ }
+
ERROR:
if (db)
pakfire_db_unref(db);
#include <errno.h>
#include <linux/limits.h>
#include <stdlib.h>
-#include <sys/utsname.h>
#include <solv/queue.h>
#include <solv/selection.h>
free(request);
}
-static void pakfire_request_lock_running_kernel(struct pakfire_request* request) {
- struct utsname utsname;
- char buffer[NAME_MAX];
-
- // Call uname()
- int r = uname(&utsname);
- if (r) {
- ERROR(request->pakfire, "uname() failed: %m\n");
- return;
- }
-
- DEBUG(request->pakfire, "Locking running kernel %s\n", utsname.release);
-
- r = pakfire_string_format(buffer, "kernel(%s)", utsname.release);
- if (r)
- return;
-
- Pool* pool = pakfire_get_solv_pool(request->pakfire);
-
- // Add a locking pool job
- Id id = pool_str2id(pool, buffer, 1);
- if (id)
- queue_push2(&request->jobs, SOLVER_LOCK|SOLVER_SOLVABLE_PROVIDES, id);
-}
-
static int setup_solver(struct pakfire_request* request, int flags) {
// Automatically update when installation is requested
solver_set_flag(request->solver, SOLVER_FLAG_INSTALL_ALSO_UPDATES, 1);
if (flags & PAKFIRE_REQUEST_WITHOUT_RECOMMENDED)
solver_set_flag(request->solver, SOLVER_FLAG_IGNORE_RECOMMENDED, 1);
- // Lock the running kernel
- if (pakfire_on_root(request->pakfire))
- pakfire_request_lock_running_kernel(request);
-
return 0;
}