All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] cld: Create cldc_call_opts_get_data API for GET
@ 2010-02-04 11:30 Colin McCabe
  2010-02-04 11:30 ` [PATCH 2/3] cld: Add XDR files to gitignore Colin McCabe
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Colin McCabe @ 2010-02-04 11:30 UTC (permalink / raw)
  To: Project Hail List; +Cc: Pete Zaitcev, Jeff Garzik, Colin McCabe

Create the cldc_call_opts_get_data API. This allows users of the async CLD api
to access the GET buffer returned from CLD without playing with parts of the
cld_call_opts marked 'private, lib-owned.'

Signed-off-by: Colin McCabe <cmccabe@alumni.cmu.edu>
---
 include/cldc.h         |    2 ++
 lib/cldc.c             |    7 +++++++
 test/load-file-event.c |    7 +++++--
 tools/cldcli.c         |   23 ++++++++++++++++-------
 4 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/include/cldc.h b/include/cldc.h
index 0f4242e..afcba71 100644
--- a/include/cldc.h
+++ b/include/cldc.h
@@ -209,6 +209,8 @@ extern int cldc_dirent_next(struct cld_dirent_cur *dc);
 extern void cldc_dirent_cur_init(struct cld_dirent_cur *dc, const void *buf, size_t buflen);
 extern void cldc_dirent_cur_fini(struct cld_dirent_cur *dc);
 extern char *cldc_dirent_name(struct cld_dirent_cur *dc);
+extern void cldc_call_opts_get_data(const struct cldc_call_opts *copts,
+				const char **data, size_t *data_len);
 
 /* cldc-udp */
 extern void cldc_udp_free(struct cldc_udp *udp);
diff --git a/lib/cldc.c b/lib/cldc.c
index 50f102f..56070e2 100644
--- a/lib/cldc.c
+++ b/lib/cldc.c
@@ -1308,6 +1308,13 @@ char *cldc_dirent_name(struct cld_dirent_cur *dc)
 	return s;
 }
 
+void cldc_call_opts_get_data(const struct cldc_call_opts *copts,
+				const char **data, size_t *data_len)
+{
+	*data = copts->u.get.buf;
+	*data_len = copts->u.get.size;
+}
+
 /*
  * For extra safety, call cldc_init after g_thread_init, if present.
  * Currently we just call srand(), but since we use GLib, we may need
diff --git a/test/load-file-event.c b/test/load-file-event.c
index 94e0421..477cad8 100644
--- a/test/load-file-event.c
+++ b/test/load-file-event.c
@@ -147,18 +147,21 @@ static int read_1_cb(struct cldc_call_opts *coptarg, enum cle_err_codes errc)
 	struct run *rp = coptarg->private;
 	struct cldc_call_opts copts;
 	int rc;
+	const char *data;
+	size_t data_len;
 
 	if (errc != CLE_OK) {
 		fprintf(stderr, "first-get failed: %d\n", errc);
 		exit(1);
 	}
 
-	if (coptarg->u.get.size != TESTLEN) {
+	cldc_call_opts_get_data(coptarg, &data, &data_len);
+	if (data_len != TESTLEN) {
 		fprintf(stderr, "Bad CLD file length %d\n", coptarg->u.get.size);
 		exit(1);
 	}
 
-	if (memcmp(coptarg->u.get.buf, TESTSTR, TESTLEN)) {
+	if (memcmp(data, TESTSTR, TESTLEN)) {
 		fprintf(stderr, "Bad CLD file content\n");
 		exit(1);
 	}
diff --git a/tools/cldcli.c b/tools/cldcli.c
index c4735d0..567a5c5 100644
--- a/tools/cldcli.c
+++ b/tools/cldcli.c
@@ -217,6 +217,8 @@ static int cb_ls_2(struct cldc_call_opts *copts_in, enum cle_err_codes errc)
 	struct cldc_call_opts copts = { NULL, };
 	struct cld_dirent_cur dc;
 	int rc, i;
+	const char *data;
+	size_t data_len;
 	bool first = true;
 
 	if (errc != CLE_OK) {
@@ -224,8 +226,9 @@ static int cb_ls_2(struct cldc_call_opts *copts_in, enum cle_err_codes errc)
 		write_from_thread(&cresp, sizeof(cresp));
 		return 0;
 	}
+	cldc_call_opts_get_data(copts_in, &data, &data_len);
 
-	rc = cldc_dirent_count(copts_in->u.get.buf, copts_in->u.get.size);
+	rc = cldc_dirent_count(data, data_len);
 	if (rc < 0) {
 		write_from_thread(&cresp, sizeof(cresp));
 		return 0;
@@ -236,7 +239,7 @@ static int cb_ls_2(struct cldc_call_opts *copts_in, enum cle_err_codes errc)
 
 	write_from_thread(&cresp, sizeof(cresp));
 
-	cldc_dirent_cur_init(&dc, copts_in->u.get.buf, copts_in->u.get.size);
+	cldc_dirent_cur_init(&dc, data, data_len);
 
 	for (i = 0; i < rc; i++) {
 		struct ls_rec lsr;
@@ -294,6 +297,8 @@ static int cb_cat_2(struct cldc_call_opts *copts_in, enum cle_err_codes errc)
 {
 	struct cresp cresp = { .tcode = TC_FAILED, };
 	struct cldc_call_opts copts = { NULL, };
+	const char *data;
+	size_t data_len;
 
 	if (errc != CLE_OK) {
 		errc_msg(&cresp, errc);
@@ -301,11 +306,13 @@ static int cb_cat_2(struct cldc_call_opts *copts_in, enum cle_err_codes errc)
 		return 0;
 	}
 
+	cldc_call_opts_get_data(copts_in, &data, &data_len);
+
 	cresp.tcode = TC_OK;
-	cresp.u.file_len = copts_in->u.get.size;
+	cresp.u.file_len = data_len;
 
 	write_from_thread(&cresp, sizeof(cresp));
-	write_from_thread(copts_in->u.get.buf, copts_in->u.get.size);
+	write_from_thread(data, data_len);
 
 	/* FIXME: race; should wait until close succeeds/fails before
 	 * returning any data.  'fh' may still be in use, otherwise.
@@ -338,18 +345,20 @@ static int cb_cp_cf_2(struct cldc_call_opts *copts_in, enum cle_err_codes errc)
 {
 	struct cresp cresp = { .tcode = TC_FAILED, };
 	struct cldc_call_opts copts = { NULL, };
+	const char *data;
+	size_t data_len;
 
 	if (errc != CLE_OK) {
 		errc_msg(&cresp, errc);
 		write_from_thread(&cresp, sizeof(cresp));
 		return 0;
 	}
-
+	cldc_call_opts_get_data(copts_in, &data, &data_len);
 	cresp.tcode = TC_OK;
-	cresp.u.file_len = copts_in->u.get.size;
+	cresp.u.file_len = data_len;
 
 	write_from_thread(&cresp, sizeof(cresp));
-	write_from_thread(copts_in->u.get.buf, copts_in->u.get.size);
+	write_from_thread(data, data_len);
 
 	/* FIXME: race; should wait until close succeeds/fails before
 	 * returning any data.  'fh' may still be in use, otherwise.
-- 
1.6.2.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2010-02-04 23:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-04 11:30 [PATCH 1/3] cld: Create cldc_call_opts_get_data API for GET Colin McCabe
2010-02-04 11:30 ` [PATCH 2/3] cld: Add XDR files to gitignore Colin McCabe
2010-02-04 22:30   ` Jeff Garzik
2010-02-04 11:30 ` [PATCH 3/3] cld: Add XDR support to lib/Makefile.am Colin McCabe
2010-02-04 23:52 ` [PATCH 1/3] cld: Create cldc_call_opts_get_data API for GET Jeff Garzik

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.