libxbps: simplify package states code.
--HG-- branch : progress_callback
This commit is contained in:
parent
27c2ca3732
commit
f6ab3a28c3
@ -1,5 +1,5 @@
|
|||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2009-2010 Juan Romero Pardines.
|
* Copyright (c) 2009-2011 Juan Romero Pardines.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -32,6 +32,21 @@
|
|||||||
#include <xbps_api.h>
|
#include <xbps_api.h>
|
||||||
#include "xbps_api_impl.h"
|
#include "xbps_api_impl.h"
|
||||||
|
|
||||||
|
struct state {
|
||||||
|
const char *string;
|
||||||
|
pkg_state_t number;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct state states[] = {
|
||||||
|
{ "unpacked", XBPS_PKG_STATE_UNPACKED },
|
||||||
|
{ "installed", XBPS_PKG_STATE_INSTALLED },
|
||||||
|
{ "broken", XBPS_PKG_STATE_BROKEN },
|
||||||
|
{ "config-files", XBPS_PKG_STATE_CONFIG_FILES },
|
||||||
|
{ "not-installed", XBPS_PKG_STATE_NOT_INSTALLED },
|
||||||
|
{ NULL, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file lib/package_state.c
|
* @file lib/package_state.c
|
||||||
* @brief Package state handling routines
|
* @brief Package state handling routines
|
||||||
@ -41,36 +56,23 @@
|
|||||||
static int
|
static int
|
||||||
set_new_state(prop_dictionary_t dict, pkg_state_t state)
|
set_new_state(prop_dictionary_t dict, pkg_state_t state)
|
||||||
{
|
{
|
||||||
const char *pkgname, *state_str;
|
const struct state *stp;
|
||||||
|
const char *pkgname;
|
||||||
|
|
||||||
assert(dict != NULL);
|
|
||||||
|
|
||||||
switch (state) {
|
for (stp = states; stp->string != NULL; stp++)
|
||||||
case XBPS_PKG_STATE_UNPACKED:
|
if (state == stp->number)
|
||||||
state_str = "unpacked";
|
break;
|
||||||
break;
|
|
||||||
case XBPS_PKG_STATE_INSTALLED:
|
if (stp->string == NULL)
|
||||||
state_str = "installed";
|
|
||||||
break;
|
|
||||||
case XBPS_PKG_STATE_BROKEN:
|
|
||||||
state_str = "broken";
|
|
||||||
break;
|
|
||||||
case XBPS_PKG_STATE_CONFIG_FILES:
|
|
||||||
state_str = "config-files";
|
|
||||||
break;
|
|
||||||
case XBPS_PKG_STATE_NOT_INSTALLED:
|
|
||||||
state_str = "not-installed";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
|
|
||||||
if (!prop_dictionary_set_cstring_nocopy(dict, "state", state_str))
|
if (!prop_dictionary_set_cstring_nocopy(dict, "state", stp->string))
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
|
||||||
if (prop_dictionary_get_cstring_nocopy(dict, "pkgname", &pkgname)) {
|
if (prop_dictionary_get_cstring_nocopy(dict, "pkgname", &pkgname)) {
|
||||||
xbps_dbg_printf("%s: changed pkg state to '%s'\n",
|
xbps_dbg_printf("%s: changed pkg state to '%s'\n",
|
||||||
pkgname, state_str);
|
pkgname, stp->string);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -79,28 +81,19 @@ set_new_state(prop_dictionary_t dict, pkg_state_t state)
|
|||||||
static pkg_state_t
|
static pkg_state_t
|
||||||
get_state(prop_dictionary_t dict)
|
get_state(prop_dictionary_t dict)
|
||||||
{
|
{
|
||||||
|
const struct state *stp;
|
||||||
const char *state_str;
|
const char *state_str;
|
||||||
pkg_state_t state = 0;
|
|
||||||
|
|
||||||
assert(dict != NULL);
|
assert(dict != NULL);
|
||||||
|
|
||||||
prop_dictionary_get_cstring_nocopy(dict, "state", &state_str);
|
prop_dictionary_get_cstring_nocopy(dict, "state", &state_str);
|
||||||
assert(state_str != NULL);
|
assert(state_str != NULL);
|
||||||
|
|
||||||
if (strcmp(state_str, "unpacked") == 0)
|
for (stp = states; stp->string != NULL; stp++)
|
||||||
state = XBPS_PKG_STATE_UNPACKED;
|
if (strcmp(state_str, stp->string) == 0)
|
||||||
else if (strcmp(state_str, "installed") == 0)
|
break;
|
||||||
state = XBPS_PKG_STATE_INSTALLED;
|
|
||||||
else if (strcmp(state_str, "broken") == 0)
|
|
||||||
state = XBPS_PKG_STATE_BROKEN;
|
|
||||||
else if (strcmp(state_str, "config-files") == 0)
|
|
||||||
state = XBPS_PKG_STATE_CONFIG_FILES;
|
|
||||||
else if (strcmp(state_str, "not-installed") == 0)
|
|
||||||
state = XBPS_PKG_STATE_NOT_INSTALLED;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return state;
|
return stp->number;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
Loading…
Reference in New Issue
Block a user