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; }
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; }