Example #1
0
File: iap.c Project: bhavik86/Dicom
static CONDITION
parseImageInstanceUID(DCM_OBJECT ** object, int *elementCount)
{
    static DCM_FLAGGED_ELEMENT 		localList[] = {
										{DCM_IDSOPINSTANCEUID, DCM_UI, "", 1, sizeof(q.Image.ImageUID), (void *) &q.Image.ImageUID[0], DB_K_QIMAGEUID, &q.Image.Query_Flag},
									};
    CONDITION						cond;
    DCM_ELEMENT						e;
    U32								l;
    char		    				*c;
    int			    				index;

    cond = DCM_GetElementSize(object, DCM_IDSOPINSTANCEUID, &l);
    if (cond != DCM_NORMAL) {
    	(void) COND_PopCondition(FALSE);
    	return IAP_NORMAL;
    }

    cond = DCM_GetElement(object, DCM_IDSOPINSTANCEUID, &e);
    if (cond != DCM_NORMAL) {
    	(void) COND_PopCondition(FALSE);
    	return IAP_NORMAL;
    }

    if (e.multiplicity == 1) {
    	cond = DCM_ParseObject(object, NULL, 0, localList, (int) DIM_OF(localList), elementCount);
    	if (cond != DCM_NORMAL) return COND_PushCondition(IAP_OBJECTACCESSFAILED, IAP_Message(IAP_OBJECTACCESSFAILED), "parseImageInstanceUID");
    	q.Image.Query_Flag |= DB_K_QIMAGEUID;
    	q.Image.ImageMultUIDCount = 0;
    	q.Image.ImageMultUID = NULL;
    }else{
    	c = malloc((l + 1) + (e.multiplicity * sizeof(char *)));
    	if (c == NULL) return COND_PushCondition(IAP_MALLOCFAILURE, IAP_Message(IAP_MALLOCFAILURE), (l + 1) + (e.multiplicity * sizeof(char *)), "parseImageInstanceUID");

    	q.Image.ImageMultUIDCount = e.multiplicity;
    	q.Image.ImageMultUID = (char **) c;
    	c += e.multiplicity * sizeof(char *);

    	e.d.string = c;

    	cond = DCM_ParseObject(object, &e, 1, NULL, 0, elementCount);
    	if (cond != DCM_NORMAL) return COND_PushCondition(IAP_OBJECTACCESSFAILED, IAP_Message(IAP_OBJECTACCESSFAILED), "parseImageInstanceUID");

    	for (index = 0; (unsigned long) index < e.multiplicity; index++) {
    		q.Image.ImageMultUID[index] = c;
    		while ((*c != '\\') && (*c != '\0')){
    			c++;
    		}
    		*c++ = '\0';
    	}
    	q.Image.Query_Flag |= DB_K_QIMAGEMULTUID;
    }
    return IAP_NORMAL;
}
Example #2
0
static char* getString(DCM_OBJECT* obj, DCM_TAG tag)
{
  DCM_ELEMENT e;
  CONDITION cond;

  memset(&e, 0, sizeof(e));
  e.tag = tag;
  cond = DCM_GetElement(&obj, tag, &e);
  if (cond != DCM_NORMAL)
    return 0;

  e.d.string = malloc(e.length + 1);
  cond = DCM_ParseObject(&obj, &e, 1, 0, 0, 0);
  if (cond != DCM_NORMAL) {
    COND_DumpConditions();
    exit(1);
  }

  return e.d.string;
}