Revision: 54139
http://brlcad.svn.sourceforge.net/brlcad/?rev=54139&view=rev
Author: popescuandrei
Date: 2013-01-06 06:54:56 +0000 (Sun, 06 Jan 2013)
Log Message:
-----------
removed globals from gtools/g_transfer
Modified Paths:
--------------
brlcad/trunk/include/pkg.h
brlcad/trunk/src/gtools/g_transfer.c
Modified: brlcad/trunk/include/pkg.h
===================================================================
--- brlcad/trunk/include/pkg.h 2013-01-05 22:00:28 UTC (rev 54138)
+++ brlcad/trunk/include/pkg.h 2013-01-06 06:54:56 UTC (rev 54139)
@@ -107,6 +107,7 @@
/* neg->read new hdr, 0->all here, >0 ->more to come */
char *pkc_buf; /**< @brief start of dynamic
buf */
char *pkc_curpos; /**< @brief current position in
pkg_buf */
+ void *pkc_server_data; /**< @brief used to hold server
data for callbacks */
};
#define PKC_NULL ((struct pkg_conn *)0)
#define PKC_ERROR ((struct pkg_conn *)(-1L))
Modified: brlcad/trunk/src/gtools/g_transfer.c
===================================================================
--- brlcad/trunk/src/gtools/g_transfer.c 2013-01-05 22:00:28 UTC (rev
54138)
+++ brlcad/trunk/src/gtools/g_transfer.c 2013-01-06 06:54:56 UTC (rev
54139)
@@ -69,12 +69,27 @@
/* in-memory geometry database filled in by the server as it receives
* geometry from the client.
*/
-struct db_i *DBIP = NULL;
+/*
+ * Struct DBIP = null;
+ * srv_argc = 0;
+ * char **srv_argv = NULL;
+ */
+typedef struct _server_data_ {
+ struct db_i *DBIP;
+ /* used by server to stash what it should shoot at */
+ int srv_argc;
+ char **srv_argv;
+} server_data;
-/* used by server to stash what it should shoot at */
-int srv_argc = 0;
-char **srv_argv = NULL;
+server_data*
+init_srv_data () {
+ server_data *stash = bu_malloc(sizeof *stash, "server data
memory");
+ stash->DBIP = NULL;
+ stash->srv_argc = 0;
+ stash->srv_argv = NULL;
+ return stash;
+}
/** print a usage statement when invoked with bad, help, or no arguments
*/
@@ -111,18 +126,18 @@
}
void
-do_something() {
+do_something(server_data *stash) {
/* shoot a ray at some geometry just to show that we can */
struct application ap;
struct rt_i *rtip;
int i;
- if (!DBIP) {
+ if (!stash->DBIP) {
return;
}
RT_APPLICATION_INIT(&ap);
- rtip = rt_new_rti(DBIP); /* clone dbip */
+ rtip = rt_new_rti(stash->DBIP); /* clone dbip */
if (!rtip) {
bu_log("Unable to create a database instance off of the raytrace
instance\n");
return;
@@ -135,13 +150,13 @@
VSET(ap.a_ray.r_dir, 0, 0, -1);
/* shoot at any geometry specified */
- for (i = 0; i < srv_argc; i++) {
- if (rt_gettree(rtip, srv_argv[i]) != 0) {
- bu_log("Unable to validate %s for raytracing\n", srv_argv[i]);
+ for (i = 0; i < stash->srv_argc; i++) {
+ if (rt_gettree(rtip, stash->srv_argv[i]) != 0) {
+ bu_log("Unable to validate %s for raytracing\n",
stash->srv_argv[i]);
continue;
}
rt_prep(rtip);
- bu_log("Shooting at %s from (0, 0, 10000) in the (0, 0, -1)
direction\n", srv_argv[i]);
+ bu_log("Shooting at %s from (0, 0, 10000) in the (0, 0, -1)
direction\n", stash->srv_argv[i]);
(void)rt_shootray(&ap);
rt_clean(rtip);
}
@@ -161,36 +176,41 @@
void
-server_args(struct pkg_conn *UNUSED(connection), char *buf)
+server_args(struct pkg_conn *connection, char *buf)
{
/* updates the srv_argc and srv_argv application globals used to
* show that we can shoot at geometry in-memory.
*/
- srv_argc++;
- if (!srv_argv) {
- srv_argv = bu_calloc(1, srv_argc * sizeof(char *), "server_args()
srv_argv calloc");
+ server_data *stash;
+ stash = init_srv_data();
+ stash->srv_argc++;
+ if (!stash->srv_argv) {
+ stash->srv_argv = bu_calloc(1, stash->srv_argc * sizeof(char *),
"server_args() srv_argv calloc");
} else {
- srv_argv = bu_realloc(srv_argv, srv_argc * sizeof(char *),
"server_args() srv_argv realloc");
+ stash->srv_argv = bu_realloc(stash->srv_argv, stash->srv_argc *
sizeof(char *), "server_args() srv_argv realloc");
}
- srv_argv[srv_argc - 1] = bu_calloc(1, strlen(buf)+1, "server_args()
srv_argv[] calloc");
- bu_strlcpy(srv_argv[srv_argc - 1], buf, strlen(buf)+1);
+ stash->srv_argv[stash->srv_argc - 1] = bu_calloc(1, strlen(buf)+1,
"server_args() srv_argv[] calloc");
+ bu_strlcpy(stash->srv_argv[stash->srv_argc - 1], buf, strlen(buf)+1);
bu_log("Planning to shoot at %s\n", buf);
-
+ connection->pkc_server_data = stash;;
free(buf);
}
void
-server_geom(struct pkg_conn *UNUSED(connection), char *buf)
+server_geom(struct pkg_conn *connection, char *buf)
{
struct bu_external ext;
struct db5_raw_internal raw;
int flags;
- if (DBIP == NULL) {
+ server_data *stash;
+ stash =(server_data*) connection->pkc_server_data;
+
+ if (stash->DBIP == NULL) {
/* first geometry received, initialize */
- DBIP = db_open_inmem();
+ stash->DBIP = db_open_inmem();
}
if (db5_get_raw_internal_ptr(&raw, (const unsigned char *)buf) == NULL) {
@@ -206,27 +226,29 @@
ext.ext_buf = (uint8_t *)buf;
ext.ext_nbytes = raw.object_length;
flags = db_flags_raw_internal(&raw) | RT_DIR_INMEM;
- wdb_export_external(DBIP->dbi_wdbp, &ext, (const char *)raw.name.ext_buf,
flags, raw.minor_type);
+ wdb_export_external(stash->DBIP->dbi_wdbp, &ext, (const char
*)raw.name.ext_buf, flags, raw.minor_type);
bu_log("Received %s (MAJOR=%d, MINOR=%d)\n", raw.name.ext_buf,
raw.major_type, raw.minor_type);
}
void
-server_ciao(struct pkg_conn *UNUSED(connection), char *buf)
+server_ciao(struct pkg_conn* connection, char *buf)
{
+ server_data *stash;
+
bu_log("CIAO encountered\n");
-
+ stash = (server_data*) connection->pkc_server_data;
/* shoot some rays just to show that we can if server was
* invoked with specific geometry.
*/
- do_something();
+ do_something(stash);
- if (DBIP != NULL) {
+ if (stash->DBIP != NULL) {
/* uncomment to avoid an in-mem dbip close bug */
/* DBIP->dbi_fp = fopen("/dev/null", "rb");*/
- db_close(DBIP);
- DBIP = NULL;
+ db_close(stash->DBIP);
+ stash->DBIP = NULL;
}
free(buf);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnmore_123012
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits