Extend assertions by checking passed in proplib type.
This commit is contained in:
parent
a80df68b15
commit
9fb3c38aa2
@ -46,6 +46,8 @@ xbps_init_virtual_pkgs(struct xbps_handle *xh)
|
|||||||
prop_string_t vpkgdir;
|
prop_string_t vpkgdir;
|
||||||
char *vpkgfile;
|
char *vpkgfile;
|
||||||
|
|
||||||
|
assert(xh != NULL);
|
||||||
|
|
||||||
if (prop_object_type(xh->confdir) != PROP_TYPE_STRING) {
|
if (prop_object_type(xh->confdir) != PROP_TYPE_STRING) {
|
||||||
vpkgdir = prop_string_create_cstring(XBPS_SYSCONF_PATH);
|
vpkgdir = prop_string_create_cstring(XBPS_SYSCONF_PATH);
|
||||||
prop_string_append_cstring(vpkgdir, "/");
|
prop_string_append_cstring(vpkgdir, "/");
|
||||||
|
@ -42,7 +42,7 @@ xbps_entry_is_a_conf_file(prop_dictionary_t propsd,
|
|||||||
char *cffile;
|
char *cffile;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(propsd != NULL);
|
assert(prop_object_type(propsd) == PROP_TYPE_DICTIONARY);
|
||||||
assert(entry_pname != NULL);
|
assert(entry_pname != NULL);
|
||||||
|
|
||||||
if (!prop_dictionary_get(propsd, "conf_files"))
|
if (!prop_dictionary_get(propsd, "conf_files"))
|
||||||
@ -89,7 +89,7 @@ xbps_entry_install_conf_file(prop_dictionary_t filesd,
|
|||||||
char *buf, *sha256_cur = NULL, *sha256_orig = NULL;
|
char *buf, *sha256_cur = NULL, *sha256_orig = NULL;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(filesd != NULL);
|
assert(prop_object_type(filesd) == PROP_TYPE_DICTIONARY);
|
||||||
assert(entry != NULL);
|
assert(entry != NULL);
|
||||||
assert(entry_pname != NULL);
|
assert(entry_pname != NULL);
|
||||||
assert(pkgname != NULL);
|
assert(pkgname != NULL);
|
||||||
|
@ -55,6 +55,7 @@ remove_pkg_metadata(const char *pkgname, const char *rootdir)
|
|||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(pkgname != NULL);
|
assert(pkgname != NULL);
|
||||||
|
assert(rootdir != NULL);
|
||||||
|
|
||||||
metadir = xbps_xasprintf("%s/%s/metadata/%s", rootdir,
|
metadir = xbps_xasprintf("%s/%s/metadata/%s", rootdir,
|
||||||
XBPS_META_PATH, pkgname);
|
XBPS_META_PATH, pkgname);
|
||||||
|
@ -50,6 +50,8 @@ xbps_register_pkg(prop_dictionary_t pkgrd)
|
|||||||
int rv = 0;
|
int rv = 0;
|
||||||
bool autoinst = false;
|
bool autoinst = false;
|
||||||
|
|
||||||
|
assert(prop_object_type(pkgrd) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
xhp = xbps_handle_get();
|
xhp = xbps_handle_get();
|
||||||
plist = xbps_xasprintf("%s/%s/%s",
|
plist = xbps_xasprintf("%s/%s/%s",
|
||||||
prop_string_cstring_nocopy(xhp->rootdir),
|
prop_string_cstring_nocopy(xhp->rootdir),
|
||||||
|
@ -81,7 +81,7 @@ xbps_remove_pkg_files(prop_dictionary_t dict, const char *key)
|
|||||||
char *path = NULL;
|
char *path = NULL;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(dict != NULL);
|
assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
|
||||||
assert(key != NULL);
|
assert(key != NULL);
|
||||||
xhp = xbps_handle_get();
|
xhp = xbps_handle_get();
|
||||||
|
|
||||||
|
@ -48,8 +48,8 @@ xbps_remove_obsoletes(prop_dictionary_t oldd, prop_dictionary_t newd)
|
|||||||
int rv = 0;
|
int rv = 0;
|
||||||
bool found, dodirs = false, dolinks = false;
|
bool found, dodirs = false, dolinks = false;
|
||||||
|
|
||||||
assert(oldd != NULL);
|
assert(prop_object_type(oldd) == PROP_TYPE_DICTIONARY);
|
||||||
assert(newd != NULL);
|
assert(prop_object_type(newd) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
again:
|
again:
|
||||||
iter = xbps_array_iter_from_dict(oldd, array_str);
|
iter = xbps_array_iter_from_dict(oldd, array_str);
|
||||||
|
@ -43,6 +43,9 @@ xbps_repository_pkg_replaces(prop_dictionary_t transd,
|
|||||||
const char *pattern, *pkgname, *curpkgname;
|
const char *pattern, *pkgname, *curpkgname;
|
||||||
bool instd_auto = false;
|
bool instd_auto = false;
|
||||||
|
|
||||||
|
assert(prop_object_type(transd) == PROP_TYPE_DICTIONARY);
|
||||||
|
assert(prop_object_type(pkg_repod) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
replaces = prop_dictionary_get(pkg_repod, "replaces");
|
replaces = prop_dictionary_get(pkg_repod, "replaces");
|
||||||
if (replaces == NULL || prop_array_count(replaces) == 0)
|
if (replaces == NULL || prop_array_count(replaces) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -38,6 +38,8 @@ add_pkg_into_reqby(prop_dictionary_t pkgd, const char *pkgver)
|
|||||||
prop_string_t reqstr;
|
prop_string_t reqstr;
|
||||||
bool alloc = false;
|
bool alloc = false;
|
||||||
|
|
||||||
|
assert(prop_object_type(pkgd) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
if ((reqby = prop_dictionary_get(pkgd, "requiredby")) == NULL) {
|
if ((reqby = prop_dictionary_get(pkgd, "requiredby")) == NULL) {
|
||||||
alloc = true;
|
alloc = true;
|
||||||
if ((reqby = prop_array_create()) == NULL)
|
if ((reqby = prop_array_create()) == NULL)
|
||||||
@ -150,8 +152,8 @@ xbps_requiredby_pkg_add(prop_array_t pkgs_array, prop_dictionary_t pkgd)
|
|||||||
const char *pkgver, *str;
|
const char *pkgver, *str;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(pkgs_array != NULL);
|
assert(prop_object_type(pkgs_array) == PROP_TYPE_ARRAY);
|
||||||
assert(pkgd != NULL);
|
assert(prop_object_type(pkgd) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
prop_dictionary_get_cstring_nocopy(pkgd, "pkgver", &pkgver);
|
prop_dictionary_get_cstring_nocopy(pkgd, "pkgver", &pkgver);
|
||||||
pkg_rdeps = prop_dictionary_get(pkgd, "run_depends");
|
pkg_rdeps = prop_dictionary_get(pkgd, "run_depends");
|
||||||
|
@ -59,7 +59,7 @@ set_new_state(prop_dictionary_t dict, pkg_state_t state)
|
|||||||
const struct state *stp;
|
const struct state *stp;
|
||||||
const char *pkgname;
|
const char *pkgname;
|
||||||
|
|
||||||
assert(dict != NULL);
|
assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
for (stp = states; stp->string != NULL; stp++)
|
for (stp = states; stp->string != NULL; stp++)
|
||||||
if (state == stp->number)
|
if (state == stp->number)
|
||||||
@ -85,7 +85,7 @@ get_state(prop_dictionary_t dict)
|
|||||||
const struct state *stp;
|
const struct state *stp;
|
||||||
const char *state_str;
|
const char *state_str;
|
||||||
|
|
||||||
assert(dict != NULL);
|
assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
if (!prop_dictionary_get_cstring_nocopy(dict,
|
if (!prop_dictionary_get_cstring_nocopy(dict,
|
||||||
"state", &state_str))
|
"state", &state_str))
|
||||||
@ -121,7 +121,7 @@ xbps_pkg_state_installed(const char *pkgname, pkg_state_t *state)
|
|||||||
int
|
int
|
||||||
xbps_pkg_state_dictionary(prop_dictionary_t dict, pkg_state_t *state)
|
xbps_pkg_state_dictionary(prop_dictionary_t dict, pkg_state_t *state)
|
||||||
{
|
{
|
||||||
assert(dict != NULL);
|
assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
|
||||||
assert(state != NULL);
|
assert(state != NULL);
|
||||||
|
|
||||||
if ((*state = get_state(dict)) == 0)
|
if ((*state = get_state(dict)) == 0)
|
||||||
@ -133,7 +133,7 @@ xbps_pkg_state_dictionary(prop_dictionary_t dict, pkg_state_t *state)
|
|||||||
int
|
int
|
||||||
xbps_set_pkg_state_dictionary(prop_dictionary_t dict, pkg_state_t state)
|
xbps_set_pkg_state_dictionary(prop_dictionary_t dict, pkg_state_t state)
|
||||||
{
|
{
|
||||||
assert(dict != NULL);
|
assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
return set_new_state(dict, state);
|
return set_new_state(dict, state);
|
||||||
}
|
}
|
||||||
|
@ -165,8 +165,8 @@ unpack_archive(prop_dictionary_t pkg_repod,
|
|||||||
int rv, flags;
|
int rv, flags;
|
||||||
bool preserve, update;
|
bool preserve, update;
|
||||||
|
|
||||||
|
assert(prop_object_type(pkg_repod) == PROP_TYPE_DICTIONARY);
|
||||||
assert(ar != NULL);
|
assert(ar != NULL);
|
||||||
assert(pkg_repod != NULL);
|
|
||||||
assert(pkgname != NULL);
|
assert(pkgname != NULL);
|
||||||
assert(version != NULL);
|
assert(version != NULL);
|
||||||
|
|
||||||
@ -467,7 +467,7 @@ xbps_unpack_binary_pkg(prop_dictionary_t pkg_repod)
|
|||||||
char *bpkg;
|
char *bpkg;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(pkg_repod != NULL);
|
assert(prop_object_type(pkg_repod) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
prop_dictionary_get_cstring_nocopy(pkg_repod, "pkgname", &pkgname);
|
prop_dictionary_get_cstring_nocopy(pkg_repod, "pkgname", &pkgname);
|
||||||
prop_dictionary_get_cstring_nocopy(pkg_repod, "version", &version);
|
prop_dictionary_get_cstring_nocopy(pkg_repod, "version", &version);
|
||||||
|
@ -50,7 +50,7 @@ find_pkg_in_array(prop_array_t array,
|
|||||||
prop_object_t obj = NULL;
|
prop_object_t obj = NULL;
|
||||||
const char *pkgver, *dpkgn;
|
const char *pkgver, *dpkgn;
|
||||||
|
|
||||||
assert(array != NULL);
|
assert(prop_object_type(array) == PROP_TYPE_ARRAY);
|
||||||
assert(str != NULL);
|
assert(str != NULL);
|
||||||
|
|
||||||
iter = prop_array_iterator(array);
|
iter = prop_array_iterator(array);
|
||||||
@ -172,7 +172,7 @@ find_virtualpkg_user_in_array(prop_array_t array,
|
|||||||
prop_object_iterator_t iter;
|
prop_object_iterator_t iter;
|
||||||
const char *pkgver, *virtualpkg;
|
const char *pkgver, *virtualpkg;
|
||||||
|
|
||||||
assert(array != NULL);
|
assert(prop_object_type(array) == PROP_TYPE_ARRAY);
|
||||||
assert(str != NULL);
|
assert(str != NULL);
|
||||||
|
|
||||||
virtualpkg = find_virtualpkg_user_in_conf(str, bypattern);
|
virtualpkg = find_virtualpkg_user_in_conf(str, bypattern);
|
||||||
@ -201,7 +201,7 @@ find_virtualpkg_user_in_dict(prop_dictionary_t d,
|
|||||||
{
|
{
|
||||||
prop_array_t array;
|
prop_array_t array;
|
||||||
|
|
||||||
assert(d != NULL);
|
assert(prop_object_type(d) == PROP_TYPE_DICTIONARY);
|
||||||
assert(str != NULL);
|
assert(str != NULL);
|
||||||
assert(key != NULL);
|
assert(key != NULL);
|
||||||
|
|
||||||
@ -221,7 +221,7 @@ find_pkg_in_dict(prop_dictionary_t d,
|
|||||||
{
|
{
|
||||||
prop_array_t array;
|
prop_array_t array;
|
||||||
|
|
||||||
assert(d != NULL);
|
assert(prop_object_type(d) == PROP_TYPE_DICTIONARY);
|
||||||
assert(str != NULL);
|
assert(str != NULL);
|
||||||
assert(key != NULL);
|
assert(key != NULL);
|
||||||
|
|
||||||
|
@ -47,6 +47,8 @@ xbps_match_virtual_pkg_in_dict(prop_dictionary_t d,
|
|||||||
prop_array_t provides;
|
prop_array_t provides;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
|
assert(prop_object_type(d) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
if ((provides = prop_dictionary_get(d, "provides"))) {
|
if ((provides = prop_dictionary_get(d, "provides"))) {
|
||||||
if (bypattern)
|
if (bypattern)
|
||||||
found = xbps_match_pkgpattern_in_array(provides, str);
|
found = xbps_match_pkgpattern_in_array(provides, str);
|
||||||
@ -65,7 +67,7 @@ match_string_in_array(prop_array_t array, const char *str, int mode)
|
|||||||
char *curpkgname;
|
char *curpkgname;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
assert(array != NULL);
|
assert(prop_object_type(array) == PROP_TYPE_ARRAY);
|
||||||
assert(str != NULL);
|
assert(str != NULL);
|
||||||
|
|
||||||
iter = prop_array_iterator(array);
|
iter = prop_array_iterator(array);
|
||||||
|
@ -48,6 +48,8 @@ remove_string_from_array(prop_array_t array, const char *str, int mode)
|
|||||||
size_t i, idx = 0;
|
size_t i, idx = 0;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
|
assert(prop_object_type(array) == PROP_TYPE_ARRAY);
|
||||||
|
|
||||||
for (i = 0; i < prop_array_count(array); i++) {
|
for (i = 0; i < prop_array_count(array); i++) {
|
||||||
obj = prop_array_get(array, i);
|
obj = prop_array_get(array, i);
|
||||||
if (mode == 0) {
|
if (mode == 0) {
|
||||||
@ -111,7 +113,7 @@ xbps_remove_pkg_from_dict_by_name(prop_dictionary_t dict,
|
|||||||
{
|
{
|
||||||
prop_array_t array;
|
prop_array_t array;
|
||||||
|
|
||||||
assert(dict != NULL);
|
assert(prop_object_type(dict) == PROP_TYPE_DICTIONARY);
|
||||||
assert(key != NULL);
|
assert(key != NULL);
|
||||||
assert(pkgname != NULL);
|
assert(pkgname != NULL);
|
||||||
|
|
||||||
|
@ -39,8 +39,8 @@ store_dependency(prop_dictionary_t transd, prop_dictionary_t repo_pkgd)
|
|||||||
int rv = 0;
|
int rv = 0;
|
||||||
pkg_state_t state = 0;
|
pkg_state_t state = 0;
|
||||||
|
|
||||||
assert(transd != NULL);
|
assert(prop_object_type(transd) == PROP_TYPE_DICTIONARY);
|
||||||
assert(repo_pkgd != NULL);
|
assert(prop_object_type(repo_pkgd) == PROP_TYPE_DICTIONARY);
|
||||||
/*
|
/*
|
||||||
* Get some info about dependencies and current repository.
|
* Get some info about dependencies and current repository.
|
||||||
*/
|
*/
|
||||||
@ -122,7 +122,7 @@ add_missing_reqdep(prop_array_t missing_rdeps, const char *reqpkg)
|
|||||||
bool add_pkgdep, pkgfound, update_pkgdep;
|
bool add_pkgdep, pkgfound, update_pkgdep;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(missing_rdeps != NULL);
|
assert(prop_object_type(missing_rdeps) == PROP_TYPE_ARRAY);
|
||||||
assert(reqpkg != NULL);
|
assert(reqpkg != NULL);
|
||||||
|
|
||||||
add_pkgdep = update_pkgdep = pkgfound = false;
|
add_pkgdep = update_pkgdep = pkgfound = false;
|
||||||
@ -214,6 +214,10 @@ find_repo_deps(prop_dictionary_t transd, /* transaction dictionary */
|
|||||||
char *pkgname;
|
char *pkgname;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
|
assert(prop_object_type(transd) == PROP_TYPE_DICTIONARY);
|
||||||
|
assert(prop_object_type(mrdeps) == PROP_TYPE_ARRAY);
|
||||||
|
assert(prop_object_type(pkg_rdeps_array) == PROP_TYPE_ARRAY);
|
||||||
|
|
||||||
if (depth >= MAX_DEPTH)
|
if (depth >= MAX_DEPTH)
|
||||||
return ELOOP;
|
return ELOOP;
|
||||||
|
|
||||||
@ -445,9 +449,9 @@ xbps_repository_find_pkg_deps(prop_dictionary_t transd,
|
|||||||
const char *pkgver;
|
const char *pkgver;
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
|
|
||||||
assert(transd != NULL);
|
assert(prop_object_type(transd) == PROP_TYPE_DICTIONARY);
|
||||||
assert(mdeps != NULL);
|
assert(prop_object_type(mdeps) == PROP_TYPE_ARRAY);
|
||||||
assert(repo_pkgd != NULL);
|
assert(prop_object_type(repo_pkgd) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
pkg_rdeps = prop_dictionary_get(repo_pkgd, "run_depends");
|
pkg_rdeps = prop_dictionary_get(repo_pkgd, "run_depends");
|
||||||
if (pkg_rdeps == NULL)
|
if (pkg_rdeps == NULL)
|
||||||
|
@ -48,6 +48,8 @@ repo_find_virtualpkg_cb(struct repository_pool_index *rpi, void *arg, bool *done
|
|||||||
{
|
{
|
||||||
struct repo_pool_fpkg *rpf = arg;
|
struct repo_pool_fpkg *rpf = arg;
|
||||||
|
|
||||||
|
assert(rpi != NULL);
|
||||||
|
|
||||||
if (rpf->bypattern) {
|
if (rpf->bypattern) {
|
||||||
rpf->pkgd =
|
rpf->pkgd =
|
||||||
xbps_find_virtualpkg_conf_in_dict_by_pattern(rpi->rpi_repod,
|
xbps_find_virtualpkg_conf_in_dict_by_pattern(rpi->rpi_repod,
|
||||||
@ -77,6 +79,8 @@ repo_find_pkg_cb(struct repository_pool_index *rpi, void *arg, bool *done)
|
|||||||
{
|
{
|
||||||
struct repo_pool_fpkg *rpf = arg;
|
struct repo_pool_fpkg *rpf = arg;
|
||||||
|
|
||||||
|
assert(rpi != NULL);
|
||||||
|
|
||||||
if (rpf->bypattern) {
|
if (rpf->bypattern) {
|
||||||
rpf->pkgd = xbps_find_pkg_in_dict_by_pattern(rpi->rpi_repod,
|
rpf->pkgd = xbps_find_pkg_in_dict_by_pattern(rpi->rpi_repod,
|
||||||
"packages", rpf->pattern);
|
"packages", rpf->pattern);
|
||||||
@ -122,6 +126,8 @@ repo_find_best_pkg_cb(struct repository_pool_index *rpi,
|
|||||||
prop_dictionary_t instpkgd;
|
prop_dictionary_t instpkgd;
|
||||||
const char *instver, *repover;
|
const char *instver, *repover;
|
||||||
|
|
||||||
|
assert(rpi != NULL);
|
||||||
|
|
||||||
rpf->pkgd = xbps_find_pkg_in_dict_by_name(rpi->rpi_repod,
|
rpf->pkgd = xbps_find_pkg_in_dict_by_name(rpi->rpi_repod,
|
||||||
"packages", rpf->pattern);
|
"packages", rpf->pattern);
|
||||||
if (rpf->pkgd == NULL) {
|
if (rpf->pkgd == NULL) {
|
||||||
|
@ -248,7 +248,7 @@ xbps_path_from_repository_uri(prop_dictionary_t pkg_repod, const char *repoloc)
|
|||||||
const char *filen, *arch;
|
const char *filen, *arch;
|
||||||
char *lbinpkg = NULL;
|
char *lbinpkg = NULL;
|
||||||
|
|
||||||
assert(pkg_repod != NULL);
|
assert(prop_object_type(pkg_repod) == PROP_TYPE_DICTIONARY);
|
||||||
assert(repoloc != NULL);
|
assert(repoloc != NULL);
|
||||||
|
|
||||||
if (!prop_dictionary_get_cstring_nocopy(pkg_repod,
|
if (!prop_dictionary_get_cstring_nocopy(pkg_repod,
|
||||||
@ -278,13 +278,13 @@ xbps_path_from_repository_uri(prop_dictionary_t pkg_repod, const char *repoloc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
xbps_pkg_has_rundeps(prop_dictionary_t pkg)
|
xbps_pkg_has_rundeps(prop_dictionary_t pkgd)
|
||||||
{
|
{
|
||||||
prop_array_t array;
|
prop_array_t array;
|
||||||
|
|
||||||
assert(pkg != NULL);
|
assert(prop_object_type(pkgd) == PROP_TYPE_DICTIONARY);
|
||||||
|
|
||||||
array = prop_dictionary_get(pkg, "run_depends");
|
array = prop_dictionary_get(pkgd, "run_depends");
|
||||||
if (array && prop_array_count(array) > 0)
|
if (array && prop_array_count(array) > 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ xbps_file_hash_dictionary(prop_dictionary_t d,
|
|||||||
prop_object_iterator_t iter;
|
prop_object_iterator_t iter;
|
||||||
const char *curfile, *sha256;
|
const char *curfile, *sha256;
|
||||||
|
|
||||||
assert(d != NULL);
|
assert(prop_object_type(d) == PROP_TYPE_DICTIONARY);
|
||||||
assert(key != NULL);
|
assert(key != NULL);
|
||||||
assert(file != NULL);
|
assert(file != NULL);
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ xbps_file_hash_check_dictionary(prop_dictionary_t d,
|
|||||||
const char *sha256d;
|
const char *sha256d;
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
assert(d != NULL);
|
assert(prop_object_type(d) == PROP_TYPE_DICTIONARY);
|
||||||
assert(key != NULL);
|
assert(key != NULL);
|
||||||
assert(file != NULL);
|
assert(file != NULL);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user