short ExExeUtilTcb::extractObjectParts( char * objectName, char * sys, char * &cat, char * &sch, char * &tab, char * ansiNameBuf) { Lng32 error = 0; error = ComRtGetOSClusterName(sys, 10, NULL); if (error <= 0) { return -1; } char * parts[3]; Lng32 numParts; if (LateNameInfo::extractParts(objectName, ansiNameBuf, numParts, parts, FALSE) || (numParts != 3)) { return -1; } cat = parts[0]; sch = parts[1]; tab = parts[2]; return 0; }
// ----------------------------------------------------------------------- // Get the MP system catalog name. // the guardian name of the system catalog is returned in sysCatBuffer and // its size in sysCatLength. // Error code or 0 is returned for error case and success case respectively. // ----------------------------------------------------------------------- Lng32 ComRtGetMPSysCatName( char *sysCatBuffer, // in/out Lng32 inputBufferLength, // in char *inputSysName, // in, must set to NULL if no name is passed. Lng32 *sysCatLength, // out short *detailError, // out CollHeap *heap) // in { // the following enum is replicated from ComMPSysCat.h for detail error enum MPSysCatErr { NSK_SYSTEM_NAME_ERROR , NSK_CANNOT_LOCATE_MP_SYSTEM_CATALOG , NSK_DEVICE_GETINFOBYLDEV_ERROR , NSK_FILE_GETINFOBYNAME_ERROR }; const Int32 DISPLAYBUFSIZE = 8000; const Int32 FILENAMELEN = 36; char mpSysCat[FILENAMELEN]; Lng32 nameSize = 0; Lng32 error = 0; *detailError = 0; char *sysCatLoc = NULL; #ifdef _DEBUG sysCatLoc = getenv("MP_SYSTEM_CATALOG"); // for Dev+QA convenience #endif if (sysCatLoc) { if (inputBufferLength < str_len(sysCatLoc)) return -1; Int32 locLen = str_len (sysCatLoc); // add local system name if not specified. // if ((sysCatLoc[0] != '\\') && (sysCatLoc[0] == '$')) { mpSysCat[0] = '\\'; error = ComRtGetOSClusterName (&mpSysCat[1], sizeof(mpSysCat), &nameSize); if (error || nameSize == 0) { *detailError = NSK_SYSTEM_NAME_ERROR; return -1; } nameSize++; mpSysCat[nameSize] = '.'; str_cpy_all(&mpSysCat[nameSize+1], sysCatLoc, locLen); locLen = locLen + nameSize + 1; str_cpy_all (sysCatBuffer, mpSysCat,locLen ); } else { if (sysCatLoc[0] != '\\') return -1; str_cpy_all (sysCatBuffer, sysCatLoc, locLen); } sysCatBuffer[locLen] = '\0'; *sysCatLength = locLen; } else { sysCatLoc = sysCatBuffer; *sysCatLoc = '\0'; *sysCatLength = 0; // Allows some debugging/testing of this code while on NT. struct la_display_table_struct { char cat_volname[10], cat_subvolname[10]; }; la_display_table_struct la = { "??MPVOL ", "MPSYSCAT" }; la_display_table_struct *tab = &la; char sysName[8] = "\\MPSYS "; size_t i, z; for (i = 0; i < 8; i++) //padded with blanks { if (sysName[i] == ' ') break; } #pragma nowarn(1506) // warning elimination str_cpy_all(sysCatLoc, sysName, i); #pragma warn(1506) // warning elimination if (i) sysCatLoc[i++] = '.'; z = i; for (i = 2; i < 8; i++) // the first 2 chars are the sysnum, and the volume // name is blank-padded { if (tab->cat_volname[i] == ' ') break; } //ComDEBUG(i > 2); sysCatLoc[z++] = '$'; #pragma nowarn(1506) // warning elimination #pragma nowarn(252) // warning elimination str_cpy_all(sysCatLoc + z, tab->cat_volname + 2, i - 2); #pragma warn(252) // warning elimination #pragma warn(1506) // warning elimination z += i - 2; sysCatLoc[z++] = '.'; for (i = 0; i < 8; i++) //padded with blanks { if (tab->cat_subvolname[i] == ' ') break; } #pragma nowarn(252) // warning elimination #pragma nowarn(1506) // warning elimination str_cpy_all(sysCatLoc + z, tab->cat_subvolname, i); #pragma warn(252) // warning elimination #pragma warn(1506) // warning elimination sysCatLoc[z+i] = '\0'; #pragma nowarn(1506) // warning elimination *sysCatLength = (Lng32)z+i; #pragma warn(1506) // warning elimination } return 0; }