/** * asb_package_deb_ensure_simple: **/ static gboolean asb_package_deb_ensure_simple (AsbPackage *pkg, GError **error) { const gchar *argv[4] = { "dpkg", "--field", "fn", NULL }; gchar *tmp; gchar **vr; guint i; guint j; _cleanup_free_ gchar *output = NULL; _cleanup_ptrarray_unref_ GPtrArray *deps = NULL; _cleanup_strv_free_ gchar **lines = NULL; /* spawn sync */ argv[2] = asb_package_get_filename (pkg); if (!g_spawn_sync (NULL, (gchar **) argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &output, NULL, NULL, error)) return FALSE; /* parse output */ deps = g_ptr_array_new_with_free_func (g_free); lines = g_strsplit (output, "\n", -1); for (i = 0; lines[i] != NULL; i++) { if (g_str_has_prefix (lines[i], "Package: ")) { asb_package_set_name (pkg, lines[i] + 9); continue; } if (g_str_has_prefix (lines[i], "Source: ")) { asb_package_set_source (pkg, lines[i] + 8); continue; } if (g_str_has_prefix (lines[i], "Version: ")) { vr = g_strsplit (lines[i] + 9, "-", 2); tmp = g_strstr_len (vr[0], -1, ":"); if (tmp == NULL) { asb_package_set_version (pkg, vr[0]); } else { *tmp = '\0'; j = g_ascii_strtoll (vr[0], NULL, 10); asb_package_set_epoch (pkg, j); asb_package_set_version (pkg, tmp + 1); } asb_package_set_release (pkg, vr[1]); g_strfreev (vr); continue; } if (g_str_has_prefix (lines[i], "Depends: ")) { vr = g_strsplit (lines[i] + 9, ", ", -1); for (j = 0; vr[j] != NULL; j++) { tmp = g_strstr_len (vr[j], -1, " "); if (tmp != NULL) *tmp = '\0'; g_ptr_array_add (deps, vr[j]); } continue; } } g_ptr_array_add (deps, NULL); asb_package_set_deps (pkg, (gchar **) deps->pdata); return TRUE; }
/** * asb_package_deb_ensure_simple: **/ static gboolean asb_package_deb_ensure_simple (AsbPackage *pkg, GError **error) { const gchar *argv[4] = { "dpkg", "--field", "fn", NULL }; gchar *tmp; guint i; guint j; g_autofree gchar *output = NULL; g_auto(GStrv) lines = NULL; /* spawn sync */ argv[2] = asb_package_get_filename (pkg); if (!g_spawn_sync (NULL, (gchar **) argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &output, NULL, NULL, error)) return FALSE; /* parse output */ lines = g_strsplit (output, "\n", -1); for (i = 0; lines[i] != NULL; i++) { if (g_str_has_prefix (lines[i], "Package: ")) { asb_package_set_name (pkg, lines[i] + 9); continue; } if (g_str_has_prefix (lines[i], "Source: ")) { asb_package_set_source (pkg, lines[i] + 8); continue; } if (g_str_has_prefix (lines[i], "Version: ")) { g_auto(GStrv) vr = NULL; vr = g_strsplit (lines[i] + 9, "-", 2); tmp = g_strstr_len (vr[0], -1, ":"); if (tmp == NULL) { asb_package_set_version (pkg, vr[0]); } else { *tmp = '\0'; j = g_ascii_strtoll (vr[0], NULL, 10); asb_package_set_epoch (pkg, j); asb_package_set_version (pkg, tmp + 1); } if (vr[1] != NULL) { asb_package_set_release (pkg, vr[1]); } else { /* packages don't actually have to have a * release value like rpm; in this case fake * something plausible */ asb_package_set_release (pkg, "0"); } continue; } if (g_str_has_prefix (lines[i], "Depends: ")) { g_auto(GStrv) vr = NULL; vr = g_strsplit (lines[i] + 9, ", ", -1); for (j = 0; vr[j] != NULL; j++) { tmp = g_strstr_len (vr[j], -1, " "); if (tmp != NULL) *tmp = '\0'; asb_package_add_dep (pkg, vr[j]); } continue; } } return TRUE; }