int msDBFJoinConnect(layerObj *layer, joinObj *join) { int i; char szPath[MS_MAXPATHLEN]; msDBFJoinInfo *joininfo; if(join->joininfo) return(MS_SUCCESS); /* already open */ if ( msCheckParentPointer(layer->map,"map")==MS_FAILURE ) return MS_FAILURE; /* allocate a msDBFJoinInfo struct */ joininfo = (msDBFJoinInfo *) malloc(sizeof(msDBFJoinInfo)); if(!joininfo) { msSetError(MS_MEMERR, "Error allocating XBase table info structure.", "msDBFJoinConnect()"); return(MS_FAILURE); } /* initialize any members that won't get set later on in this function */ joininfo->target = NULL; joininfo->nextrecord = 0; join->joininfo = joininfo; /* open the XBase file */ if((joininfo->hDBF = msDBFOpen( msBuildPath3(szPath, layer->map->mappath, layer->map->shapepath, join->table), "rb" )) == NULL) { if((joininfo->hDBF = msDBFOpen( msBuildPath(szPath, layer->map->mappath, join->table), "rb" )) == NULL) { msSetError(MS_IOERR, "(%s)", "msDBFJoinConnect()", join->table); return(MS_FAILURE); } } /* get "to" item index */ if((joininfo->toindex = msDBFGetItemIndex(joininfo->hDBF, join->to)) == -1) { msSetError(MS_DBFERR, "Item %s not found in table %s.", "msDBFJoinConnect()", join->to, join->table); return(MS_FAILURE); } /* get "from" item index */ for(i=0; i<layer->numitems; i++) { if(strcasecmp(layer->items[i],join->from) == 0) { /* found it */ joininfo->fromindex = i; break; } } if(i == layer->numitems) { msSetError(MS_JOINERR, "Item %s not found in layer %s.", "msDBFJoinConnect()", join->from, layer->name); return(MS_FAILURE); } /* finally store away the item names in the XBase table */ join->numitems = msDBFGetFieldCount(joininfo->hDBF); join->items = msDBFGetItems(joininfo->hDBF); if(!join->items) return(MS_FAILURE); return(MS_SUCCESS); }
int *msDBFGetItemIndexes(DBFHandle dbffile, char **items, int numitems) { int *itemindexes=NULL, i; if(numitems == 0) return(NULL); itemindexes = (int *)malloc(sizeof(int)*numitems); MS_CHECK_ALLOC(itemindexes, sizeof(int)*numitems, NULL); for(i=0; i<numitems; i++) { itemindexes[i] = msDBFGetItemIndex(dbffile, items[i]); if(itemindexes[i] == -1) { free(itemindexes); return(NULL); /* item not found */ } } return(itemindexes); }
int *msDBFGetItemIndexes(DBFHandle dbffile, char **items, int numitems) { int *itemindexes=NULL, i; if(numitems == 0) return(NULL); itemindexes = (int *)malloc(sizeof(int)*numitems); if(!itemindexes) { msSetError(MS_MEMERR, NULL, "msGetItemIndexes()"); return(NULL); } for(i=0;i<numitems;i++) { itemindexes[i] = msDBFGetItemIndex(dbffile, items[i]); if(itemindexes[i] == -1) { free(itemindexes); return(NULL); /* item not found */ } } return(itemindexes); }