summaryrefslogtreecommitdiffstats
path: root/src/lib/kadm5/srv/svr_iters.c
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2002-07-17 22:39:18 +0000
committerKen Raeburn <raeburn@mit.edu>2002-07-17 22:39:18 +0000
commit8c6bae550553fa429732190e968b234f0f2555dc (patch)
treeb81befae9af54fa2fc628a4ab3be3b59daaa6ed6 /src/lib/kadm5/srv/svr_iters.c
parent845b5ba1257917d8234036d6769abfe111b5c419 (diff)
downloadkrb5-8c6bae550553fa429732190e968b234f0f2555dc.tar.gz
krb5-8c6bae550553fa429732190e968b234f0f2555dc.tar.xz
krb5-8c6bae550553fa429732190e968b234f0f2555dc.zip
remove dependence on libdyn; open-code the array manipulation
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@14658 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/kadm5/srv/svr_iters.c')
-rw-r--r--src/lib/kadm5/srv/svr_iters.c53
1 files changed, 36 insertions, 17 deletions
diff --git a/src/lib/kadm5/srv/svr_iters.c b/src/lib/kadm5/srv/svr_iters.c
index 1ed7eeb87e..d91f368fdc 100644
--- a/src/lib/kadm5/srv/svr_iters.c
+++ b/src/lib/kadm5/srv/svr_iters.c
@@ -22,7 +22,6 @@ static char *rcsid = "$Header$";
#include <string.h>
#include <kadm5/admin.h>
#include "adb.h"
-#include <dyn.h>
#ifdef SOLARIS_REGEXPS
#include <regexpr.h>
#endif
@@ -35,7 +34,9 @@ static char *rcsid = "$Header$";
struct iter_data {
krb5_context context;
- DynObject matches;
+ char **names;
+ int n_names, sz_names;
+ unsigned int malloc_failed;
char *exp;
#ifdef SOLARIS_REGEXPS
char *expbuf;
@@ -129,19 +130,31 @@ static kadm5_ret_t glob_to_regexp(char *glob, char *realm, char **regexp)
static void get_either_iter(struct iter_data *data, char *name)
{
- if (
+ int match;
#ifdef SOLARIS_REGEXPS
- (step(name, data->expbuf) != 0)
+ match = (step(name, data->expbuf) != 0);
#endif
#ifdef POSIX_REGEXPS
- (regexec(&data->preg, name, 0, NULL, 0) == 0)
+ match = (regexec(&data->preg, name, 0, NULL, 0) == 0);
#endif
#ifdef BSD_REGEXPS
- (re_exec(name) != 0)
+ match = (re_exec(name) != 0);
#endif
- )
- {
- (void) DynAdd(data->matches, &name);
+ if (match) {
+ if (data->n_names == data->sz_names) {
+ int new_sz = data->sz_names * 2;
+ char **new_names = realloc(data->names,
+ new_sz * sizeof(char *));
+ if (new_names) {
+ data->names = new_names;
+ data->sz_names = new_sz;
+ } else {
+ data->malloc_failed = 1;
+ free(name);
+ return;
+ }
+ }
+ data->names[data->n_names++] = name;
} else
free(name);
}
@@ -176,7 +189,7 @@ static kadm5_ret_t kadm5_get_either(int princ,
char *msg;
#endif
char *regexp;
- int ret;
+ int i, ret;
kadm5_server_handle_t handle = server_handle;
*count = 0;
@@ -206,7 +219,11 @@ static kadm5_ret_t kadm5_get_either(int princ,
return EINVAL;
}
- if ((data.matches = DynCreate(sizeof(char *), -4)) == NULL) {
+ data.n_names = 0;
+ data.sz_names = 10;
+ data.malloc_failed = 0;
+ data.names = malloc(sizeof(char *) * data.sz_names);
+ if (data.names == NULL) {
free(regexp);
return ENOMEM;
}
@@ -218,16 +235,18 @@ static kadm5_ret_t kadm5_get_either(int princ,
ret = osa_adb_iter_policy(handle->policy_db, get_pols_iter, (void *)&data);
}
+ free(regexp);
+ if (ret == OSA_ADB_OK && data.malloc_failed)
+ ret = ENOMEM;
if (ret != OSA_ADB_OK) {
- free(regexp);
- DynDestroy(data.matches);
+ for (i = 0; i < data.n_names; i++)
+ free(data.names[i]);
+ free(data.names);
return ret;
}
- (*princs) = (char **) DynArray(data.matches);
- *count = DynSize(data.matches);
- DynRelease(data.matches);
- free(regexp);
+ *princs = data.names;
+ *count = data.n_names;
return KADM5_OK;
}