static char * saveloc(char *path) { char *rval = NULL; char ptmp[MAX_PATH_LEN + 2]; if (STlength(path) > MAX_PATH_LEN) { i4 maxl = MAX_PATH_LEN; IIUGmsg(ERget(E_XF0130_Path_Too_Long), FALSE, 2, path, &maxl); /* Truncate and save */ (void) STlcopy(path, ptmp, MAX_PATH_LEN); rval = STalloc(ptmp); } else { rval = STalloc(path); } /* Truncate and save */ (void) STlcopy(path, ptmp, MAX_PATH_LEN); rval = STalloc(ptmp); return (rval); }
STATUS xfsetdirs(char *dir, char *frompath, char *intopath) { auto i2 dirflag; auto char *s; char *locbuf; STATUS status; locbuf = XF_REQMEM(MAX_LOC + 1, FALSE); if (dir == NULL || *dir == EOS) { /* Default to current directory. */ status = LOgt(locbuf, &Xf_dir); if(status != OK) { #ifdef UNIX status = LOfakepwd(locbuf, &Xf_dir); #endif if(status != OK) { IIUGerr(E_XF0061_Can_Not_Determine_Dir, UG_ERR_ERROR, 0); return(FAIL); } } dir = NULL; } else { STlcopy(dir, locbuf, MAX_LOC); if (LOfroms(PATH, locbuf, &Xf_dir) != OK) { IIUGerr(E_XF0006_Invalid_directory_pat, UG_ERR_ERROR, 1, dir); return (FAIL); } if (!LOisfull(&Xf_dir)) { auto LOCATION xloc; char xbuf[MAX_LOC + 1]; /* ** path spec. is a relative specification -- we must expand it ** to a full pathname. */ LOcopy(&Xf_dir, xbuf, &xloc); status = LOgt(locbuf, &Xf_dir); if(status != OK) { IIUGerr(E_XF0061_Can_Not_Determine_Dir, UG_ERR_ERROR, 0); return(FAIL); } LOaddpath(&Xf_dir, &xloc, &Xf_dir); } /* LOisdir and LOexist are archaic and should be replaced by LOinfo. */ LOisdir(&Xf_dir, &dirflag); if (dirflag != ISDIR || LOexist(&Xf_dir) != OK) { IIUGerr(E_XF0006_Invalid_directory_pat, UG_ERR_ERROR, 1, dir); return (FAIL); } } LOtos(&Xf_dir, &s); /* the COPY FROM path doesn't have to exist. */ if (frompath != NULL && *frompath != EOS) Xf_from_path = saveloc(frompath); /* the COPY INTO path doesn't have to exist. */ if (intopath != NULL && *intopath != EOS) Xf_into_path = saveloc(intopath); IIUGmsg(ERget(S_XF0064_Unload_Directory_is), FALSE, 1, (PTR)(Xf_into_path == NULL ? s : Xf_into_path)); IIUGmsg(ERget(S_XF0065_Reload_Directory_is), FALSE, 1, (PTR)(Xf_from_path == NULL ? s : Xf_from_path)); return (OK); }
void rf_att_dflt(i4 NumRels, char *RelList[]) { FE_ATT_QBLK qblk; FE_ATT_INFO attinfo; FE_REL_INFO relinfo; register ATTRIB id; i4 i = 0; bool RepeatedField; char ColName [FE_MAXNAME + 1]; i4 ins = 0; FE_RSLV_NAME *rfa_ferslv[MQ_MAXRELS]; RFCOLDESC *coldesc; ATT *attptr; char *cname; ATTRIB did; i4 real_cols; char dsply_name[(FE_UNRML_MAXNAME + 1)]; /* ** If the user went through the choose columns path, we will ** use that information to create the structures since we ** alredy have all the needed information. */ if (IIRFcccount != 0) { En_n_attribs = IIRFcccount; real_cols = IIRFcccount - IIRFcdcount; /* Allocate memory for the ATT array. */ if ((Ptr_att_top = (ATT *)FEreqmem((u_i4)Rst4_tag, (u_i4)(IIRFcccount*(sizeof(ATT))), TRUE, (STATUS *)NULL)) == NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - Ptr_att_top")); } /* ** Step through the set of column names. Deleted ones are ** placed at the end of the array. We need to keep them ** around so that the user can add them back in the layout ** frame. */ for (i = 0, id = 0, did = real_cols, coldesc = IIRFcollist; i < IIRFcccount; i++, coldesc++) { if (coldesc->deleted) { attptr = &(Ptr_att_top[did++]); attptr->pre_deleted = TRUE; } else { attptr = &(Ptr_att_top[id++]); } cname = coldesc->name; attptr->att_name = FEtsalloc(Rst4_tag, cname); /* check if attribute name is a keyword */ if (!St_silent && (r_gt_pcode(cname) != PC_ERROR || r_gt_wcode(cname) != A_ERROR || r_gt_vcode(cname) != VC_NONE || r_gt_cagg(cname) || STcompare(cname, NAM_REPORT) == 0 || STcompare(cname, NAM_PAGE) == 0 || STcompare(cname, NAM_DETAIL) == 0)) { IIUGmsg(ERget(S_RF0047_Column_name_keyword), (bool) FALSE, 1, cname); } /* set up the data type field */ attptr->att_value.db_datatype = coldesc->datatype; attptr->att_prev_val.db_datatype = coldesc->datatype; attptr->att_value.db_length = coldesc->length; attptr->att_prev_val.db_length = coldesc->length; attptr->att_value.db_prec = coldesc->prec; attptr->att_prev_val.db_prec = coldesc->prec; /* ** Do not allocate value buffers for un-supported datatypes. ** We already let the user know that they're being ignored ** when we passed through ChooseColumns, so don't do it again! */ if (!IIAFfedatatype(&attptr->att_value)) { attptr->att_value.db_data = (PTR)NULL; attptr->att_prev_val.db_data = (PTR)NULL; } else { if ((attptr->att_value.db_data = (PTR)FEreqmem((u_i4)Rst4_tag, (u_i4)(attptr->att_value.db_length), TRUE, (STATUS *)NULL)) == NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - db_data")); } if ((attptr->att_prev_val.db_data = (PTR)FEreqmem((u_i4)Rst4_tag, (u_i4)(attptr->att_prev_val.db_length), TRUE, (STATUS *)NULL)) == NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - prev db_data")); } } /* flag to indicate when done */ attptr->att_position = 0; attptr->att_lac = NULL; } return; } /* ** determine number of attributes in base table: */ for (i = 0; i < NumRels; i ++) { /* ** Decompose any owner.tablename, validate the components, ** and normalize them for later use. */ if ((rfa_ferslv[i] = (FE_RSLV_NAME *)MEreqmem((u_i4)0, (u_i4)sizeof(FE_RSLV_NAME),TRUE, (STATUS *)NULL)) == (FE_RSLV_NAME *)NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - rfa_ferslv")); } if ((rfa_ferslv[i]->name_dest = (char *)MEreqmem((u_i4)0, (u_i4)(FE_UNRML_MAXNAME+1),TRUE,(STATUS *)NULL)) == NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - name_dest")); } if ((rfa_ferslv[i]->owner_dest = (char *)MEreqmem((u_i4)0, (u_i4)(FE_UNRML_MAXNAME+1),TRUE,(STATUS *)NULL)) == NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - owner_dest")); } rfa_ferslv[i]->name = RelList[i]; rfa_ferslv[i]->is_nrml = FALSE; FE_decompose(rfa_ferslv[i]); if ((rfa_ferslv[i]->owner_spec) && (((STcompare(IIUIcsl_CommonSQLLevel(),UI_LEVEL_65) < 0) && (IIUIdcd_dist() == FALSE) || IIUIdcd_dist() == TRUE && (STcompare(IIUIcsl_CommonSQLLevel(), UI_LEVEL_61) < 0)))) { continue; } if ((IIUGdlm_ChkdlmBEobject(rfa_ferslv[i]->name_dest, rfa_ferslv[i]->name_dest, rfa_ferslv[i]->is_nrml) == UI_BOGUS_ID) || ((rfa_ferslv[i]->owner_spec) && ((IIUGdlm_ChkdlmBEobject(rfa_ferslv[i]->owner_dest, rfa_ferslv[i]->owner_dest, rfa_ferslv[i]->is_nrml) == UI_BOGUS_ID) && STcompare(rfa_ferslv[i]->owner_dest, UI_FE_CAT_ID_65)))) { continue; } if (FE_resolve(rfa_ferslv[i],rfa_ferslv[i]->name_dest, rfa_ferslv[i]->owner_dest)) { En_n_attribs += FEnumatts(rfa_ferslv[i]->name_dest, rfa_ferslv[i]->owner_dest); } } /* ** Allocate array of ATT structures: */ if ((Ptr_att_top = (ATT *)FEreqmem((u_i4)Rst4_tag, (u_i4)(En_n_attribs*(sizeof(ATT))), TRUE, (STATUS *)NULL)) == NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - Ptr_att_top")); } /* ** For each relation fill out the ATT structures: */ id = 0; if (En_SrcTyp == JDRepSrc) _VOID_ r_JDMaintTabList(JD_TAB_INIT_INS_CNT, NULL, NULL, NULL, NULL); for (i = 0; i < NumRels; i ++) { /* ** open access to base table */ /* ** Fill out relinfo with table information, including table owner. */ FErel_ffetch(rfa_ferslv[i]->name_dest,rfa_ferslv[i]->owner_dest, &relinfo); MEfree((PTR)rfa_ferslv[i]->name_dest); MEfree((PTR)rfa_ferslv[i]->owner_dest); MEfree((PTR)rfa_ferslv[i]); FEatt_fopen(&qblk, &relinfo); if (En_SrcTyp == JDRepSrc) _VOID_ r_JDMaintTabList(JD_TAB_TAB_ADV_INS_CNT, NULL, relinfo.name, relinfo.owner, &ins); /* ** For each attribute in table, fill ATT structure ** (make sure no DB access will take place in this loop!) */ while (FEatt_fetch(&qblk, &attinfo) == OK) { register ATT *r_att; register ATTRIB chk_id; register char *attname; attname = attinfo.column_name; /* ** Check for duplicate column names. If found one, and ** the source of data is not a JoinDef we have a problem, ** Bug #5952: */ RepeatedField = FALSE; chk_id = id - 1; while ((--chk_id >= 0) && (!RepeatedField)) { register ATT *chk_p = &(Ptr_att_top[chk_id]); if (STcompare(chk_p->att_name, attname) == 0) RepeatedField = TRUE; } if ((RepeatedField) && (En_SrcTyp == TabRepSrc)) { r_error(0x2C8, FATAL, attname, NULL); } /* ** Make sure that if the source of data is a JoinDef ** the attribute is being used, and if it's being used ** in more than one table get the constructed name for ** it. Be sure and include the owner in the table look-up! */ if (En_SrcTyp == JDRepSrc) { i4 cnt = 0; /* ** If we can't find the field then it's not being used so ** skip it: */ if (!r_JDMaintAttrList(JD_ATT_GET_FIELD_CNT, r_JDTabNameToRv(relinfo.name, relinfo.owner, ins), attname, &cnt)) continue; if (cnt > 1) { _VOID_ r_JDMaintAttrList(JD_ATT_GET_ATTR_NAME, r_JDTabNameToRv(relinfo.name, relinfo.owner, ins), attname, &ColName [0]); attname = ColName; } } r_att = &(Ptr_att_top[id++]); r_att->att_name = FEtsalloc(Rst4_tag, attname); /* check if attribute name is a keyword */ if (!St_silent && (r_gt_pcode(attname) != PC_ERROR || r_gt_wcode(attname) != A_ERROR || r_gt_vcode(attname) != VC_NONE || r_gt_cagg(attname) || STcompare(attname, NAM_REPORT) == 0 || STcompare(attname, NAM_PAGE) == 0 || STcompare(attname, NAM_DETAIL) == 0)) { IIUGmsg(ERget(S_RF0047_Column_name_keyword), (bool) FALSE, 1, attname); } /* set up the data type field */ r_att->att_value.db_datatype = attinfo.adf_type; r_att->att_prev_val.db_datatype = attinfo.adf_type; r_att->att_value.db_length = attinfo.intern_length; r_att->att_prev_val.db_length = attinfo.intern_length; r_att->att_value.db_prec = attinfo.intern_prec; r_att->att_prev_val.db_prec = attinfo.intern_prec; /* ** Do not allocate value buffers for un-supported datatypes. ** Let the user know that they're being ignored. */ if (!IIAFfedatatype(&r_att->att_value)) { _VOID_ IIUGxri_id(&attinfo.column_name[0], &dsply_name[0]); IIUGerr(E_RW1414_ignored_attrib, UG_ERR_ERROR,1,&dsply_name[0]); r_att->att_value.db_data = (PTR)NULL; r_att->att_prev_val.db_data = (PTR)NULL; } else { if ((r_att->att_value.db_data = (PTR)FEreqmem((u_i4)Rst4_tag, (u_i4)(r_att->att_value.db_length), TRUE, (STATUS *)NULL)) == NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - db_data")); } if ((r_att->att_prev_val.db_data = (PTR)FEreqmem((u_i4)Rst4_tag, (u_i4)(r_att->att_prev_val.db_length), TRUE, (STATUS *)NULL)) == NULL) { IIUGbmaBadMemoryAllocation(ERx("rf_att_dflt - prev db_data")); } } r_att->att_position = 0; /* flag to indicate when done */ r_att->att_lac = NULL; } FEatt_close(&qblk); } /* for */ /* ** Just in case if we have skipped any attributes, ** we're leaking memory though: Note that unsupported ** datatypes will not be reflected as skipped as far as the ** id count is concerned! */ En_n_attribs = id; return; }