static int retrieveJobCcsid()

in util/src/platforms/os400/platformSpecificOS400.c [50:89]


static int retrieveJobCcsid(int *ccsid, char *langID)
{
  char receiverVariable[RTV_CCSID_ATTR_LEN];
  char format[8] = {'R', 'T', 'V', 'C', '0', '1', '0', '0'};
  int numberOfAttributes = 3;
  int attributeKeys[3] = {QWCA_KEY_CCSID, QWCA_KEY_DEFAULTCCSID,  QWCA_KEY_LANGID};
  Qwc_RTVC_Attribute_Data_t *attribute;
  int defaultCcsid;
  char errorCode[8];
  int i;
  memset(errorCode, 0x00, sizeof(errorCode));

#pragma exception_handler(RetrieveJobCcsidError,0,_C1_ALL,_C2_ALL,_CTLA_HANDLE)
  QWCRTVCA(receiverVariable,RTV_CCSID_ATTR_LEN,format,numberOfAttributes,attributeKeys,&errorCode);
#pragma disable_handler        
  if (((Qwc_RTVC0100_t *)receiverVariable)->Number_Fields_Rtnd != 3)
  {
    /* Unable to retrieve the ccsid information */
    return -1;
  }
  /* Retrieved ccsid, default CCSID and language ID */
  attribute = (Qwc_RTVC_Attribute_Data_t *)(receiverVariable + sizeof(int));
  for (i=0; i < 3; i++)
    {
      if (attribute->Key_Field == QWCA_KEY_CCSID)
          *ccsid = *(int *)((char *)attribute + sizeof(Qwc_RTVC_Attribute_Data_t));
      else if (attribute->Key_Field == QWCA_KEY_DEFAULTCCSID)
          defaultCcsid = *(int *)((char *)attribute + sizeof(Qwc_RTVC_Attribute_Data_t));
      else
          strncpy(langID, ((char *)attribute + sizeof(Qwc_RTVC_Attribute_Data_t)), 3);
      attribute = (Qwc_RTVC_Attribute_Data_t *)((char *)attribute + attribute->Length_Field_Info_Rtnd); 
  }
  if (*ccsid == 65535)
      *ccsid = defaultCcsid;

  return 0;

  RetrieveJobCcsidError:
    return -1;
}