svn commit: samba r23428 - in
branches/SAMBA_3_0_26/source/registry: .
obnox at samba.org
obnox at samba.org
Tue Jun 12 10:02:08 GMT 2007
Author: obnox
Date: 2007-06-12 10:02:08 +0000 (Tue, 12 Jun 2007)
New Revision: 23428
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23428
Log:
Merge r19828 from 3_0: Add registry_fetch_values.
Michael
Modified:
branches/SAMBA_3_0_26/source/registry/reg_frontend.c
Changeset:
Modified: branches/SAMBA_3_0_26/source/registry/reg_frontend.c
===================================================================
--- branches/SAMBA_3_0_26/source/registry/reg_frontend.c 2007-06-12 09:12:29 UTC (rev 23427)
+++ branches/SAMBA_3_0_26/source/registry/reg_frontend.c 2007-06-12 10:02:08 UTC (rev 23428)
@@ -263,7 +263,63 @@
return result;
}
+NTSTATUS registry_fetch_values(TALLOC_CTX *mem_ctx, REGISTRY_KEY *key,
+ uint32 *pnum_values, char ***pnames,
+ struct registry_value ***pvalues)
+{
+ REGVAL_CTR *ctr;
+ char **names;
+ struct registry_value **values;
+ uint32 i;
+ if (!(ctr = TALLOC_ZERO_P(mem_ctx, REGVAL_CTR))) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ if (fetch_reg_values(key, ctr) == -1) {
+ TALLOC_FREE(ctr);
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ if (ctr->num_values == 0) {
+ *pnum_values = 0;
+ TALLOC_FREE(ctr);
+ return NT_STATUS_OK;
+ }
+
+ if ((!(names = TALLOC_ARRAY(ctr, char *, ctr->num_values))) ||
+ (!(values = TALLOC_ARRAY(ctr, struct registry_value *,
+ ctr->num_values)))) {
+ TALLOC_FREE(ctr);
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ for (i=0; i<ctr->num_values; i++) {
+ REGISTRY_VALUE *val = ctr->values[i];
+ NTSTATUS status;
+
+ if (!(names[i] = talloc_strdup(names, val->valuename))) {
+ TALLOC_FREE(ctr);
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ status = registry_pull_value(values, &values[i],
+ val->type, val->data_p,
+ val->size, val->size);
+ if (!NT_STATUS_IS_OK(status)) {
+ TALLOC_FREE(ctr);
+ return status;
+ }
+ }
+
+ *pnum_values = ctr->num_values;
+ *pnames = talloc_move(mem_ctx, &names);
+ *pvalues = talloc_move(mem_ctx, &values);
+
+ TALLOC_FREE(ctr);
+ return NT_STATUS_OK;
+}
+
/***********************************************************************
retreive a specific subkey specified by index. Caller is
responsible for freeing memory
More information about the samba-cvs
mailing list