svn commit: samba r19828 - in branches/SAMBA_3_0/source/registry: .

vlendec at samba.org vlendec at samba.org
Tue Nov 21 21:19:51 GMT 2006


Author: vlendec
Date: 2006-11-21 21:19:51 +0000 (Tue, 21 Nov 2006)
New Revision: 19828

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19828

Log:
Add a helper function to pull *and* unparse local registry values
Modified:
   branches/SAMBA_3_0/source/registry/reg_frontend.c


Changeset:
Modified: branches/SAMBA_3_0/source/registry/reg_frontend.c
===================================================================
--- branches/SAMBA_3_0/source/registry/reg_frontend.c	2006-11-21 21:18:53 UTC (rev 19827)
+++ branches/SAMBA_3_0/source/registry/reg_frontend.c	2006-11-21 21:19:51 UTC (rev 19828)
@@ -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