aboutsummaryrefslogtreecommitdiff
path: root/src/PJ_pipeline.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/PJ_pipeline.c')
-rw-r--r--src/PJ_pipeline.c52
1 files changed, 16 insertions, 36 deletions
diff --git a/src/PJ_pipeline.c b/src/PJ_pipeline.c
index a26f3ccf..9352b4fd 100644
--- a/src/PJ_pipeline.c
+++ b/src/PJ_pipeline.c
@@ -260,29 +260,17 @@ static LP pipeline_reverse (XY xy, PJ *P) {
return point.coo.lp;
}
-static void freeup(PJ *P) { /* Destructor */
- if (P==0)
- return;
- /* Projection specific deallocation goes here */
- pj_dealloc (P->opaque);
- pj_dealloc (P);
- return;
-}
-
-static void *pipeline_freeup (PJ *P, int errlev) { /* Destructor */
+static void *destructor (PJ *P, int errlev) {
int i;
if (0==P)
return 0;
- if (errlev)
- proj_errno_set (P, errlev);
-
if (0==P->opaque)
- return pj_dealloc (P);
+ return pj_default_destructor (P, errlev);
for (i = 0; i < P->opaque->steps; i++)
- pj_free (P->opaque->pipeline[i+1]);
+ pj_default_destructor (P->opaque->pipeline[i+1], errlev);
pj_dealloc (P->opaque->reverse_step);
pj_dealloc (P->opaque->omit_forward);
@@ -291,15 +279,7 @@ static void *pipeline_freeup (PJ *P, int errlev) { /* Destructor */
pj_dealloc (P->opaque->current_argv);
pj_dealloc (P->opaque->pipeline);
- pj_dealloc (P->opaque);
- return pj_dealloc(P);
-}
-
-
-/* Adapts pipeline_freeup to the format defined for the PJ object */
-static void pipeline_freeup_wrapper (PJ *P) {
- pipeline_freeup (P, 0);
- return;
+ return pj_default_destructor(P, errlev);
}
@@ -364,27 +344,27 @@ PJ *PROJECTION(pipeline) {
P->inv3d = pipeline_reverse_3d;
P->fwd = pipeline_forward;
P->inv = pipeline_reverse;
- P->pfree = pipeline_freeup_wrapper;
+ P->destructor = destructor;
P->opaque = pj_calloc (1, sizeof(struct pj_opaque));
if (0==P->opaque)
- return 0;
+ return pj_default_destructor(P, ENOMEM);
argc = (int)argc_params (P->params);
P->opaque->argv = argv = argv_params (P->params, argc);
if (0==argv)
- return pipeline_freeup (P, ENOMEM);
+ return destructor (P, ENOMEM);
P->opaque->current_argv = current_argv = pj_calloc (argc, sizeof (char *));
if (0==current_argv)
- return pipeline_freeup (P, ENOMEM);
+ return destructor (P, ENOMEM);
/* Do some syntactical sanity checking */
for (i = 0; i < argc; i++) {
if (0==strcmp ("step", argv[i])) {
if (-1==i_pipeline) {
proj_log_error (P, "Pipeline: +step before +proj=pipeline");
- return pipeline_freeup (P, -50);
+ return destructor (P, PJD_ERR_MALFORMED_PIPELINE);
}
if (0==nsteps)
i_first_step = i;
@@ -395,7 +375,7 @@ PJ *PROJECTION(pipeline) {
if (0==strcmp ("proj=pipeline", argv[i])) {
if (-1 != i_pipeline) {
proj_log_error (P, "Pipeline: Nesting invalid");
- return pipeline_freeup (P, -50); /* ERROR: nested pipelines */
+ return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: nested pipelines */
}
i_pipeline = i;
}
@@ -404,14 +384,14 @@ PJ *PROJECTION(pipeline) {
P->opaque->steps = nsteps;
if (-1==i_pipeline)
- return pipeline_freeup (P, -50); /* ERROR: no pipeline def */
+ return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: no pipeline def */
if (0==nsteps)
- return pipeline_freeup (P, -50); /* ERROR: no pipeline def */
+ return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: no pipeline def */
/* Make room for the pipeline and execution indicators */
if (0==pj_create_pipeline (P, nsteps))
- return pipeline_freeup (P, ENOMEM);
+ return destructor (P, ENOMEM);
/* Now loop over all steps, building a new set of arguments for each init */
for (i_current_step = i_first_step, i = 0; i < nsteps; i++) {
@@ -454,7 +434,7 @@ PJ *PROJECTION(pipeline) {
proj_log_trace (P, "Pipeline: Step %d at %p", i, next_step);
if (0==next_step) {
proj_log_error (P, "Pipeline: Bad step definition: %s", current_argv[0]);
- return pipeline_freeup (P, -50); /* ERROR: bad pipeline def */
+ return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: bad pipeline def */
}
P->opaque->pipeline[i+1] = next_step;
proj_log_trace (P, "Pipeline: step done");
@@ -470,7 +450,7 @@ PJ *PROJECTION(pipeline) {
break;
if (i==nsteps) {
proj_log_error (P, "Pipeline: No forward steps");
- return pipeline_freeup (P, -50);
+ return destructor (P, PJD_ERR_MALFORMED_PIPELINE);
}
if (P->opaque->reverse_step[i + 1])
@@ -493,7 +473,7 @@ PJ *PROJECTION(pipeline) {
break;
if (i==-1) {
proj_log_error (P, "Pipeline: No reverse steps");
- return pipeline_freeup (P, -50);
+ return destructor (P, PJD_ERR_MALFORMED_PIPELINE);
}
if (P->opaque->reverse_step[i + 1])