|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: Mrmhier.c /main/17 1996/11/13 14:01:19 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
* FACILITY:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UIL Resource Manager (URM):
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ABSTRACT:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This file contains routines which assist in managing URM hierarchies
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* INCLUDE FILES
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <Mrm/MrmAppl.h>
|
|
Packit |
b099d7 |
#include <Mrm/Mrm.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <Xm/XmosI.h> /* for _XmOSInitPath() */
|
|
Packit |
b099d7 |
#include <Xm/XmI.h> /* for _XmGetDefaultDisplay() */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include "MrmMsgI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifndef NO_MESSAGE_CATALOG
|
|
Packit |
b099d7 |
#if !defined(NL_CAT_LOCALE)
|
|
Packit |
b099d7 |
#define NL_CAT_LOCALE 0
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* TABLE OF CONTENTS
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Urm__OpenHierarchy Open hierarchy (internal version)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Urm__CloseHierarchy Close hierarchy (internal version)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmHGetIndexedResource Get resource from hierarchy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* DEFINE and MACRO DEFINITIONS
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Cardinal I18NOpenFile (Display *display,
|
|
Packit |
b099d7 |
String name ,
|
|
Packit |
b099d7 |
MrmOsOpenParamPtr os_ext ,
|
|
Packit |
b099d7 |
IDBFile *file_id_return );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* OWN VARIABLE DECLARATIONS
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static char *uidPath;
|
|
Packit |
b099d7 |
static SubstitutionRec uidSubs[1];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine allocates a hierarchy descriptor, and opens
|
|
Packit |
b099d7 |
* all the IDB files in the hierarchy. It initializes the
|
|
Packit |
b099d7 |
* optimized search lists in the hierarchy from the open files.
|
|
Packit |
b099d7 |
* All files are closed if there are any errors.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* num_files The number of files in the name list
|
|
Packit |
b099d7 |
* name_list A list of the file names
|
|
Packit |
b099d7 |
* os_ext_list A list of system-dependent ancillary
|
|
Packit |
b099d7 |
* structures corresponding to the files.
|
|
Packit |
b099d7 |
* This parameter may be NULL.
|
|
Packit |
b099d7 |
* hierarchy_id_return To return the hierarchy id
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmFAILURE allocation or other failure
|
|
Packit |
b099d7 |
* MrmDISPLAY_NOT_OPENED Display hasn't been opened yet
|
|
Packit |
b099d7 |
* Others see UrmIdbOpenFileRead
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__OpenHierarchy (MrmCount num_files,
|
|
Packit |
b099d7 |
String *name_list,
|
|
Packit |
b099d7 |
MrmOsOpenParamPtr *os_ext_list,
|
|
Packit |
b099d7 |
MrmHierarchy *hierarchy_id_return,
|
|
Packit |
b099d7 |
MrmFlag in_memory,
|
|
Packit |
b099d7 |
unsigned char *uid_buffer)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function result */
|
|
Packit |
b099d7 |
MrmHierarchy hiptr ; /* hierarchy descriptor */
|
|
Packit |
b099d7 |
MrmCount list_size ; /* # bytes for file lists */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
IDBFile *idvec ; /* current file id vector */
|
|
Packit |
b099d7 |
int file_ndx ; /* file loop index */
|
|
Packit |
b099d7 |
IDBFile cur_file ; /* current IDB file */
|
|
Packit |
b099d7 |
URMResourceContextPtr class_ctx; /* for class compression table */
|
|
Packit |
b099d7 |
URMResourceContextPtr resource_ctx; /* for resource compression table */
|
|
Packit |
b099d7 |
Display *display; /* display for XtResolvePathNames */
|
|
Packit |
b099d7 |
char err_stg[300];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifndef NO_MESSAGE_CATALOG
|
|
Packit |
b099d7 |
static Boolean first = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* We open the message catalog from MrmOpenHierarchy... routines.
|
|
Packit |
b099d7 |
* We cannot open it from MrmInitialize, since this call can be done
|
|
Packit |
b099d7 |
* before Xt has been initialized, so at that time the locale could
|
|
Packit |
b099d7 |
* be wrong.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* We only want to open the message catalog once. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (first)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Mrm_catd = catopen("Mrm", NL_CAT_LOCALE);
|
|
Packit |
b099d7 |
first = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( os_ext_list == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
display = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
MrmOsOpenParamPtr os_data;
|
|
Packit |
b099d7 |
os_data = *os_ext_list;
|
|
Packit |
b099d7 |
if (os_data->display == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
display = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
display = os_data->display;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (display == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
display = _XmGetDefaultDisplay();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (display == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__OpenHierarchy", _MrmMMsg_0030,
|
|
Packit |
b099d7 |
NULL, NULL, MrmDISPLAY_NOT_OPENED);
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If the uidPath was previously set, XtFree it so we can try any
|
|
Packit |
b099d7 |
* new paths that may have been setup.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (uidPath != 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree (uidPath);
|
|
Packit |
b099d7 |
uidPath = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Allocate a hierarchy, and allocate all file lists.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
hiptr = (MrmHierarchy) XtMalloc (sizeof(MrmHierarchyDesc)) ;
|
|
Packit |
b099d7 |
if ( hiptr == NULL ) return MrmFAILURE ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
hiptr->validation = MrmHIERARCHY_VALID;
|
|
Packit |
b099d7 |
hiptr->num_file = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
list_size = num_files * sizeof(IDBFile) ;
|
|
Packit |
b099d7 |
hiptr->file_list = (IDBFile *) XtMalloc (list_size) ;
|
|
Packit |
b099d7 |
if ( hiptr->file_list == NULL ) return MrmFAILURE ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ndx=URMgMin ; ndx<=URMgMax ; ndx++ )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
hiptr->grp_num[ndx] = 0 ;
|
|
Packit |
b099d7 |
idvec = (IDBFile *) XtMalloc (list_size) ;
|
|
Packit |
b099d7 |
if ( idvec == NULL ) return MrmFAILURE ;
|
|
Packit |
b099d7 |
hiptr->grp_ids[ndx] = idvec ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
hiptr->name_registry = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now open each file. Any failure causes an error return, with any
|
|
Packit |
b099d7 |
* open files closed and the descriptor and lists freed.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
for ( file_ndx=0 ; file_ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if ( in_memory == TRUE )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = UrmIdbOpenBuffer(uid_buffer, &cur_file) ;
|
|
Packit |
b099d7 |
switch ( result )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case MrmSUCCESS:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MrmNOT_VALID:
|
|
Packit Service |
4d6e9e |
sprintf (err_stg, "%s", _MrmMMsg_0113);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit Service |
4d6e9e |
sprintf (err_stg, "%s", _MrmMMsg_0114);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if ( os_ext_list == NULL )
|
|
Packit |
b099d7 |
result = I18NOpenFile (display, name_list[file_ndx], NULL, &cur_file) ;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
result = I18NOpenFile (display, name_list[file_ndx],
|
|
Packit |
b099d7 |
os_ext_list[file_ndx], &cur_file) ;
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree (uidPath);
|
|
Packit |
b099d7 |
uidPath = 0;
|
|
Packit |
b099d7 |
Urm__CloseHierarchy (hiptr) ;
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
hiptr->file_list[hiptr->num_file] = cur_file ;
|
|
Packit |
b099d7 |
hiptr->num_file++ ;
|
|
Packit |
b099d7 |
for ( ndx=URMgMin ; ndx<=URMgMax ; ndx++ )
|
|
Packit |
b099d7 |
if ( cur_file->group_counts[ndx] > 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
idvec = hiptr->grp_ids[ndx] ;
|
|
Packit |
b099d7 |
idvec[hiptr->grp_num[ndx]] = cur_file ;
|
|
Packit |
b099d7 |
hiptr->grp_num[ndx]++ ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Attempt to read in compression tables for this UID file.
|
|
Packit |
b099d7 |
* Retain and fixup the tables if they are found.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
cur_file->class_ctable = NULL;
|
|
Packit |
b099d7 |
cur_file->resource_ctable = NULL;
|
|
Packit |
b099d7 |
result = UrmGetResourceContext ((char *(*)())NULL, (void(*)())NULL,
|
|
Packit |
b099d7 |
0, &class_ctx);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result;
|
|
Packit |
b099d7 |
result = UrmGetResourceContext ((char *(*)())NULL, (void(*)())NULL,
|
|
Packit |
b099d7 |
0, &resource_ctx);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result;
|
|
Packit |
b099d7 |
result = UrmGetIndexedLiteral (cur_file, UilMrmClassTableIndex,
|
|
Packit |
b099d7 |
class_ctx);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) continue;
|
|
Packit |
b099d7 |
result = UrmGetIndexedLiteral (cur_file, UilMrmResourceTableIndex,
|
|
Packit |
b099d7 |
resource_ctx);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Retain the buffers from the contexts, but free the contexts
|
|
Packit |
b099d7 |
* themselves. Fixup the tables.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
cur_file->class_ctable = (UidCompressionTablePtr)
|
|
Packit |
b099d7 |
UrmRCBuffer (class_ctx);
|
|
Packit |
b099d7 |
UrmRCSetBuffer (class_ctx, NULL);
|
|
Packit |
b099d7 |
UrmFreeResourceContext (class_ctx);
|
|
Packit |
b099d7 |
Urm__FixupCompressionTable (cur_file->class_ctable, TRUE,
|
|
Packit |
b099d7 |
cur_file->byte_swapped);
|
|
Packit |
b099d7 |
cur_file->resource_ctable = (UidCompressionTablePtr)
|
|
Packit |
b099d7 |
UrmRCBuffer (resource_ctx);
|
|
Packit |
b099d7 |
UrmRCSetBuffer (resource_ctx, NULL);
|
|
Packit |
b099d7 |
UrmFreeResourceContext (resource_ctx);
|
|
Packit |
b099d7 |
Urm__FixupCompressionTable (cur_file->resource_ctable, FALSE,
|
|
Packit |
b099d7 |
cur_file->byte_swapped);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully opened. Free the uidPath at this point
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XtFree (uidPath);
|
|
Packit |
b099d7 |
uidPath = 0;
|
|
Packit |
b099d7 |
*hierarchy_id_return = hiptr ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This is the internal routine which closes a URM search hierarchy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id ID of an open URM database hierarchy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmBAD_HIERARCHY invalid URM hierarchy
|
|
Packit |
b099d7 |
* MrmFAILURE operation failed, no further reason
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__CloseHierarchy (MrmHierarchy hierarchy_id)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
URMHashTableEntryPtr cp, np; /* for fixing 7303 */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* validity check the hierarchy, then close all files, deallocate all
|
|
Packit |
b099d7 |
* lists, and deallocate the descriptor
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( hierarchy_id == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__CloseHierarchy", _MrmMMsg_0023,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY) ;
|
|
Packit |
b099d7 |
if ( ! MrmHierarchyValid(hierarchy_id) )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__CloseHierarchy", _MrmMMsg_0024,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx<hierarchy_id->num_file ; ndx++ )
|
|
Packit |
b099d7 |
if (hierarchy_id->file_list[ndx]->in_memory == FALSE )
|
|
Packit |
b099d7 |
UrmIdbCloseFile (hierarchy_id->file_list[ndx], FALSE) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Begin fixing DTS 7303 */
|
|
Packit |
b099d7 |
if(hierarchy_id->name_registry){
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
if((cp = hierarchy_id->name_registry[ndx]) != NULL)
|
|
Packit |
b099d7 |
while(cp){
|
|
Packit |
b099d7 |
np = cp->az_next_entry;
|
|
Packit |
b099d7 |
XtFree((char*)cp);
|
|
Packit |
b099d7 |
cp = np;
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
XtFree ((char*)hierarchy_id->name_registry);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/* End fixing DTS 7303 */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree ((char*)hierarchy_id->file_list);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ndx=URMgMin ; ndx<=URMgMax ; ndx++ )
|
|
Packit |
b099d7 |
XtFree ((char*)hierarchy_id->grp_ids[ndx]) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
hierarchy_id->validation = 0;
|
|
Packit |
b099d7 |
XtFree ((char*)hierarchy_id) ;
|
|
Packit |
b099d7 |
return MrmSUCCESS ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UrmHGetIndexedResource attempts to retrieve a resource
|
|
Packit |
b099d7 |
* from an open URM hierarchy. It functions exactly like
|
|
Packit |
b099d7 |
* UrmIdbGetIndexedResource except that it queries each file
|
|
Packit |
b099d7 |
* in the hierarchy in turn. It uses the optimized search lists
|
|
Packit |
b099d7 |
* where possible.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id open URM hierarchy to search
|
|
Packit |
b099d7 |
* index case-sensitive index for the entry to match
|
|
Packit |
b099d7 |
* group_filter if not null, entry found must match this group
|
|
Packit |
b099d7 |
* type_filter if not null, entry found must match this type
|
|
Packit |
b099d7 |
* context_id URM resource context to receieve data block
|
|
Packit |
b099d7 |
* file_id_return to return file in which resource was found
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmBAD_HIERARCHY invalid URM hierarchy
|
|
Packit |
b099d7 |
* MrmNOT_FOUND entry not found
|
|
Packit |
b099d7 |
* MrmWRONG_GROUP entry didn't match group filter
|
|
Packit |
b099d7 |
* MrmWRONG_TYPE entry didn't match type filter
|
|
Packit |
b099d7 |
* MrmFAILURE operation failed, no further reason
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmHGetIndexedResource (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String index ,
|
|
Packit |
b099d7 |
MrmGroup group_filter,
|
|
Packit |
b099d7 |
MrmType type_filter,
|
|
Packit |
b099d7 |
URMResourceContextPtr context_id,
|
|
Packit |
b099d7 |
IDBFile *file_id_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result ; /* function results */
|
|
Packit |
b099d7 |
IDBFile *file_ids ; /* list of files to search */
|
|
Packit |
b099d7 |
int num_ids ; /* number of entries in file_ids */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate hierarchy. Then loop through the files which define the resource,
|
|
Packit |
b099d7 |
* searching for the desired resource.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( hierarchy_id == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmHGetIndexedResource", _MrmMMsg_0023,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY) ;
|
|
Packit |
b099d7 |
if ( ! MrmHierarchyValid(hierarchy_id) )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmHGetIndexedResource", _MrmMMsg_0024,
|
|
Packit |
b099d7 |
NULL, context_id, MrmBAD_HIERARCHY) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( group_filter>=URMgMin && group_filter<=URMgMax)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
file_ids = hierarchy_id->grp_ids[group_filter] ;
|
|
Packit |
b099d7 |
num_ids = hierarchy_id->grp_num[group_filter] ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
file_ids = hierarchy_id->file_list ;
|
|
Packit |
b099d7 |
num_ids = hierarchy_id->num_file ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*file_id_return = file_ids[ndx] ;
|
|
Packit |
b099d7 |
result = UrmIdbGetIndexedResource
|
|
Packit |
b099d7 |
(*file_id_return, index, group_filter, type_filter, context_id) ;
|
|
Packit |
b099d7 |
if ( result == MrmSUCCESS ) return result ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Not found
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return MrmNOT_FOUND ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine inserts the names and their associated values into
|
|
Packit |
b099d7 |
* the hierarchy's name registration hash table (which is constructed
|
|
Packit |
b099d7 |
* if needed). In all respects it functions like Urm__WCI_RegisterNames.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id open URM hierarchy in which to register names.
|
|
Packit |
b099d7 |
* names A vector of case-sensitive callback routine names.
|
|
Packit |
b099d7 |
* values A vector of the corresponding routine addresses
|
|
Packit |
b099d7 |
* num_cb The number of entries in names and values.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__RegisterNamesInHierarchy (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String *names,
|
|
Packit |
b099d7 |
XtPointer *values,
|
|
Packit |
b099d7 |
MrmCount num_cb)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
URMHashTableEntryPtr *name_table;
|
|
Packit |
b099d7 |
Boolean inited = FALSE;
|
|
Packit |
b099d7 |
int ndx;
|
|
Packit |
b099d7 |
URMHashTableEntryPtr hash_entry;
|
|
Packit |
b099d7 |
char *current_name;
|
|
Packit |
b099d7 |
char *current_value;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Make sure the hash table is initialized
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
name_table = hierarchy_id->name_registry;
|
|
Packit |
b099d7 |
if ( name_table == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
name_table = (URMHashTableEntryPtr *)
|
|
Packit |
b099d7 |
XtMalloc(sizeof(URMHashTableEntryPtr)*k_hash_table_size);
|
|
Packit |
b099d7 |
/* Begin fixing DTS 7303 */
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
name_table[ndx] = NULL;
|
|
Packit |
b099d7 |
/* End fixing DTS 7303 */
|
|
Packit |
b099d7 |
hierarchy_id->name_registry = name_table;
|
|
Packit |
b099d7 |
hash_initialize (name_table, &inited);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Store each name-value pair in the hash table.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
for (ndx = 0 ; ndx < num_cb ; ndx++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
current_name = names [ndx];
|
|
Packit |
b099d7 |
current_value = values [ndx];
|
|
Packit |
b099d7 |
hash_entry = (URMHashTableEntryPtr)
|
|
Packit |
b099d7 |
hash_insert_name (name_table, current_name);
|
|
Packit |
b099d7 |
hash_entry->az_value = current_value;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine returns the value registered for a name. It first
|
|
Packit |
b099d7 |
* attempts to look up the name in the hierarchy's name registry.
|
|
Packit |
b099d7 |
* If that fails, or their is no registry, then a global lookup is
|
|
Packit |
b099d7 |
* attempted.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id open URM hierarchy to search.
|
|
Packit |
b099d7 |
* name case-sensitive name to be matched
|
|
Packit |
b099d7 |
* value_return to return value.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmNOT_FOUND no match found
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__LookupNameInHierarchy (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
XtPointer *value_return)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
URMHashTableEntryPtr *name_table;
|
|
Packit |
b099d7 |
URMHashTableEntryPtr hash_entry;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Look up in hierarchy first (if there is a registry)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
name_table = hierarchy_id->name_registry;
|
|
Packit |
b099d7 |
if ( name_table != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
hash_entry = (URMHashTableEntryPtr) hash_find_name (name_table, name);
|
|
Packit |
b099d7 |
if (hash_entry != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*value_return = hash_entry->az_value;
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Fall back on global table
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return Urm__WCI_LookupRegisteredName (name, value_return);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine opens a single UID file in a platform-dependent way,
|
|
Packit |
b099d7 |
* performing i18n language switching in order to do so.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Per the latest agreement on semantics, this routine does:
|
|
Packit |
b099d7 |
* - first, try to open in the local directory (that is, with
|
|
Packit |
b099d7 |
* no switching).
|
|
Packit |
b099d7 |
* - second, try language switching and open
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* name A system-dependent string specifying the IDB file
|
|
Packit |
b099d7 |
* to be opened.
|
|
Packit |
b099d7 |
* os_ext An operating-system specific structure which
|
|
Packit |
b099d7 |
* supports using specific file system features
|
|
Packit |
b099d7 |
* file_id_return returns the IDB file id used in all other IDB routines
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Cardinal
|
|
Packit |
b099d7 |
I18NOpenFile (Display *display,
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
MrmOsOpenParamPtr os_ext,
|
|
Packit |
b099d7 |
IDBFile *file_id_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
char dummy[300]; /* file name (unused) */
|
|
Packit |
b099d7 |
char err_stg[300];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Use XtResolvePathName. If the last 4 characters of the file name
|
|
Packit |
b099d7 |
* are not .uid then pass in the suffix of .uid. If a file is not
|
|
Packit |
b099d7 |
* found with the suffix passed in then try without the suffix.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
char *resolvedname; /* current resolved name */
|
|
Packit |
b099d7 |
Boolean user_path ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
uidSubs[0].substitution = name;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (uidPath == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
uidPath = _XmOSInitPath(name, "UIDPATH", &user_path);
|
|
Packit |
b099d7 |
if (user_path) uidSubs[0].match = 'U';
|
|
Packit |
b099d7 |
else uidSubs[0].match = MATCH_CHAR ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
resolvedname = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Check and see if the .uid suffix is already on the file. If not then try to
|
|
Packit |
b099d7 |
* resolve the pathname with .uid suffix first. If that fails or the suffix is
|
|
Packit |
b099d7 |
* already on the file then just try to resolve the pathname.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( strcmp (&name[strlen(name)-4],".uid") != 0 )
|
|
Packit |
b099d7 |
resolvedname = XtResolvePathname (display,
|
|
Packit |
b099d7 |
"uid",
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
".uid",
|
|
Packit |
b099d7 |
uidPath,
|
|
Packit |
b099d7 |
uidSubs,
|
|
Packit |
b099d7 |
XtNumber(uidSubs),
|
|
Packit |
b099d7 |
(XtFilePredicate)NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* No .uid suffix or a failure to resolve the pathname with the .uid suffix
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (resolvedname == 0)
|
|
Packit |
b099d7 |
resolvedname = XtResolvePathname (display,
|
|
Packit |
b099d7 |
"uid",
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
uidPath,
|
|
Packit |
b099d7 |
uidSubs,
|
|
Packit |
b099d7 |
XtNumber(uidSubs),
|
|
Packit |
b099d7 |
(XtFilePredicate)NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (resolvedname == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sprintf (err_stg, _MrmMMsg_0031, name) ;
|
|
Packit |
b099d7 |
return Urm__UT_Error ("I18NOpenFile", err_stg, NULL, NULL, MrmNOT_FOUND);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = UrmIdbOpenFileRead (resolvedname, os_ext, file_id_return, dummy) ;
|
|
Packit |
b099d7 |
switch ( result )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case MrmSUCCESS:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MrmNOT_VALID:
|
|
Packit |
b099d7 |
sprintf (err_stg, _MrmMMsg_0032, resolvedname) ;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MrmNOT_FOUND:
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
sprintf (err_stg, _MrmMMsg_0031, resolvedname) ;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree(resolvedname); /* allocated in XtResolvePathName() */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (result == MrmSUCCESS)
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
return Urm__UT_Error ("I18NOpenFile", err_stg, NULL, NULL, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|