This repository was archived by the owner on Aug 2, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlibinst.h
576 lines (481 loc) · 19.2 KB
/
libinst.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2018 Peter Tribble.
*/
/*
* Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef __HDRS_LIBINST_H__
#define __HDRS_LIBINST_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pkgstrct.h>
#include <pkginfo.h>
#include "pkglib.h"
#include <cfext.h>
#include "install.h"
#define DEF_NONE_SCR "i.CompCpio"
#define BL_ALL -1 /* refers to all allocated lists */
/* signal handler function definition */
typedef void (sighdlrFunc_t)(int);
/* maximum parameter length */
#define MAX_PKG_PARAM_LENGTH (64+1) /* +1 for null termination */
/* flag for check_applicability */
typedef unsigned long CAF_T;
/* flags for check_applicability */
#define CAF_IN_GLOBAL_ZONE 0x00000001 /* in global zone */
#define CAF_SCOPE_GLOBAL 0x00000002 /* -G specified */
/* path to the request file in the package directory */
#define REQUEST_FILE "install/request"
/* path to the copyright file in the package directory */
#define COPYRIGHT_FILE "install/copyright"
/* path to the depend file in the package directory */
#define DEPEND_FILE "install/depend"
/*
* name of environment variable set to non-global zone name being installed:
* pkgadd/pkginstall expects this name and passes it on to any scripts that
* are run if it is set.
*/
#define PKG_ZONENAME_VARIABLE "SUNW_PKG_INSTALL_ZONENAME"
/*
* name of environment variable set to indicate this package should be installed
* in the current zone only - see PSARC/2004/789 - New Pkginfo(4) attributes
* for zones
*/
#define PKG_THISZONE_VARIABLE "SUNW_PKG_THISZONE"
/*
* name of environment variable set to indicate this package should be installed
* in all zones, and only from the global zone - see PSARC/2003/460
*/
#define PKG_ALLZONES_VARIABLE "SUNW_PKG_ALLZONES"
/*
* name of environment variable set to indicate this package should be installed
* hollow (db update only) when installed in nonglobal zone - see PSARC/2003/460
*/
#define PKG_HOLLOW_VARIABLE "SUNW_PKG_HOLLOW"
/*
* General purpose return codes used for functions which don't return a basic
* success or failure. For those functions wherein a yes/no result is
* possible, then 1 means OK and 0 means FAIL.
*/
#define RESULT_OK 0x0
#define RESULT_WRN 0x1
#define RESULT_ERR 0x2
/* These are the file status indicators for the contents file */
#define INST_RDY '+' /* entry is ready to installf -f */
#define RM_RDY '-' /* entry is ready for removef -f */
#define NOT_FND '!' /* entry (or part of entry) was not found */
#define SERVED_FILE '%' /* using the file server's RO partition */
#define STAT_NEXT '@' /* this is awaiting eptstat */
#define DUP_ENTRY '#' /* there's a duplicate of this */
#define CONFIRM_CONT '*' /* need to confirm contents */
#define CONFIRM_ATTR '~' /* need to confirm attributes */
#define ENTRY_OK '\0' /* entry is a confirmed file */
/* control bits for pkgdbmerg() */
#define NO_COPY 0x0001
#define CLIENT_PATHS 0x0002 /* working with a client database */
/* control bits for file verification by class */
#define DEFAULT 0x0 /* standard full verification */
#define NOVERIFY 0x1 /* do not verify */
#define QKVERIFY 0x2 /* do a quick verification instead */
/* control bit for path type to pass to CAS */
#define DEFAULT 0x0 /* standard server-relative absolute path */
#define REL_2_CAS 0x1 /* pass pkgmap-type relative path */
/* findscripts() argument */
#define I_ONLY 0x0 /* find install class action scripts */
#define R_ONLY 0x1 /* find removal class action scripts */
struct cl_attr {
char name[CLSSIZ+1]; /* name of class */
char *inst_script; /* install class action script */
char *rem_script; /* remove class action script */
unsigned src_verify:3; /* source verification level */
unsigned dst_verify:4; /* destination verification level */
unsigned relpath_2_CAS:1; /* CAS gets relative paths */
};
#if defined(__STDC__)
#define __P(protos) protos
#else /* __STDC__ */
#define __P(protos) ()
#endif /* __STDC__ */
/* Common quit declaration used across many package commands */
extern void quit(int) __NORETURN;
/* listmgr.c */
extern int bl_create __P((int count_per_block, int struct_size,
char *desc));
extern char *bl_next_avail __P((int list_handle));
extern char *bl_get_record __P((int list_handle, int recno));
extern void bl_free __P((int list_handle));
extern int ar_create __P((int count_per_block, int struct_size,
char *desc));
extern char **ar_next_avail __P((int list_handle));
extern char **ar_get_head __P((int list_handle));
extern int ar_delete __P((int list_handle, int index));
extern void ar_free __P((int list_handle));
/* doulimit.c */
extern int set_ulimit __P((char *script, char *err_msg));
extern int clr_ulimit __P((void));
extern int assign_ulimit __P((char *fslimit));
/* dryrun.c */
extern void set_continue_not_ok __P((void));
extern int continue_is_ok __P((void));
extern int in_dryrun_mode __P((void));
extern int in_continue_mode __P((void));
extern void init_dryrunfile __P((char *dr_dir));
extern void init_contfile __P((char *cn_dir));
extern void set_dr_exitmsg __P((char *value));
extern void set_dr_info __P((int type, int value));
extern void write_dryrun_file __P((struct cfextra **extlist));
/* instvol.c */
extern void regfiles_free __P((void));
/* lockinst.c */
extern int lockinst __P((char *util_name, char *pkg_name, char *place));
extern void lockupd __P((char *place));
extern void unlockinst __P((void));
extern char *pathdup __P((char *s));
extern char *pathalloc __P((int n));
extern char *fixpath __P((char *path));
extern char *get_info_basedir __P((void));
extern char *get_basedir __P((void));
extern char *get_client_basedir __P((void));
extern int set_basedirs __P((int reloc, char *adm_basedir,
char *pkginst, int nointeract));
extern int eval_path __P((char **server_ptr, char **client_ptr,
char **map_ptr, char *path));
extern int get_orig_offset __P((void));
extern char *get_inst_root __P((void));
extern char *get_mount_point __P((uint32_t n));
extern char *get_remote_path __P((uint32_t n));
extern void set_env_cbdir __P((void));
extern int set_inst_root __P((char *path));
extern void put_path_params __P((void));
extern int mkpath __P((char *p));
extern void mkbasedir __P((int flag, char *path));
extern int is_an_inst_root __P((void));
extern int is_a_basedir __P((void));
extern int is_a_cl_basedir __P((void));
extern int is_relocatable __P((void));
extern char *orig_path __P((char *path));
extern char *orig_path_ptr __P((char *path));
extern char *qreason __P((int caller, int retcode, int started,
int includeZonename));
extern char *qstrdup __P((char *s));
extern char *srcpath __P((char *d, char *p, int part, int nparts));
extern char *trans_srcp_pi __P((char *local_path));
extern int copyf __P((char *from, char *to, time_t mytime));
extern int copyFile __P((int, int, char *, char *, struct stat *, long));
extern int openLocal __P((char *a_path, int a_oflag, char *a_tmpdir));
extern int dockdeps __P((char *depfile, int removeFlag,
boolean_t a_preinstallCheck));
extern int finalck __P((struct cfent *ept, int attrchg, int contchg,
boolean_t a_warning));
/* dockdeps.c */
extern void setUpdate __P((void));
extern int isUpdate __P((void));
/* mntinfo.c */
extern int get_mntinfo __P((int map_client, char *vfstab_file));
extern uint32_t fsys __P((char *path));
extern struct fstable *get_fs_entry __P((uint32_t n));
extern int mount_client __P((void));
extern int unmount_client __P((void));
extern uint32_t resolved_fsys __P((char *path));
extern char *get_server_host __P((uint32_t n));
extern char *server_map __P((char *path, uint32_t fsys_value));
extern int use_srvr_map __P((char *path, uint32_t *fsys_value));
extern int use_srvr_map_n __P((uint32_t n));
extern int is_fs_writeable __P((char *path, uint32_t *fsys_value));
extern int is_remote_fs __P((char *path, uint32_t *fsys_value));
extern int is_served __P((char *path, uint32_t *fsys_value));
extern int is_mounted __P((char *path, uint32_t *fsys_value));
extern int is_fs_writeable_n __P((uint32_t n));
extern int is_remote_fs_n __P((uint32_t n));
extern int is_served_n __P((uint32_t n));
extern int is_mounted_n __P((uint32_t n));
extern fsblkcnt_t get_blk_size_n __P((uint32_t n));
extern fsblkcnt_t get_frag_size_n __P((uint32_t n));
extern fsblkcnt_t get_blk_used_n __P((uint32_t n));
extern fsblkcnt_t get_blk_free_n __P((uint32_t n));
extern fsblkcnt_t get_inode_used_n __P((uint32_t n));
extern fsblkcnt_t get_inode_free_n __P((uint32_t n));
extern void set_blk_used_n __P((uint32_t n, fsblkcnt_t value));
extern char *get_source_name_n __P((uint32_t n));
extern char *get_fs_name_n __P((uint32_t n));
extern int load_fsentry __P((struct fstable *fs_entry, char *name,
char *fstype, char *remote_name));
extern int isreloc __P((char *pkginstdir));
extern int is_local_host __P((char *hostname));
extern void fs_tab_free __P((void));
/* pkgdbmerg.c */
extern int pkgdbmerg __P((PKGserver server, VFP_T *tmpvfp,
struct cfextra **extlist));
extern int files_installed __P((void));
/* ocfile.c */
extern int trunc_tcfile __P((int fd));
extern int ocfile __P((PKGserver *serverp, VFP_T **tmpvfp,
fsblkcnt_t map_blks));
extern int swapcfile __P((PKGserver server, VFP_T **a_tmpvfp,
char *pkginst, int dbchg));
extern int set_cfdir __P((char *cfdir));
extern int socfile __P((PKGserver *server, boolean_t quiet));
extern int relslock __P((void));
extern int pkgWlock __P((int verbose));
extern int iscfile __P((void));
extern int vcfile __P((void));
extern fsblkcnt_t nblk __P((fsblkcnt_t size, ulong_t bsize,
ulong_t frsize));
extern struct cfent **procmap __P((VFP_T *vfp, int mapflag, char *ir));
extern void repl_cfent __P((struct cfent *new, struct cfent *old));
extern struct cfextra **pkgobjmap __P((VFP_T *vfp, int mapflag, char *ir));
extern void pkgobjinit __P((void));
extern int seed_pkgobjmap __P((struct cfextra *ext_entry, char *path,
char *local));
extern int init_pkgobjspace __P((void));
/* eptstat.c */
extern void pinfo_free __P((void));
extern struct pinfo *eptstat __P((struct cfent *entry, char *pkg, char c));
/* echo.c */
/*PRINTFLIKE1*/
extern void echo __P((char *a_fmt, ...));
/*PRINTFLIKE1*/
extern void echoDebug __P((char *a_fmt, ...));
extern boolean_t echoGetFlag __P((void));
extern boolean_t echoDebugGetFlag __P((void));
extern boolean_t echoSetFlag __P((boolean_t a_debugFlag));
extern boolean_t echoDebugSetFlag __P((boolean_t a_debugFlag));
/* ptext.c */
/*PRINTFLIKE2*/
extern void ptext __P((FILE *fp, char *fmt, ...));
/* putparam.c */
extern void putparam __P((char *param, char *value));
extern void getuserlocale __P((void));
extern void putuserlocale __P((void));
extern void putConditionInfo __P((char *, char *));
/* setadmin.c */
extern void setadminFile __P((char *file));
extern char *setadminSetting __P((char *a_paramName,
char *a_paramValue));
/* setlist.c */
extern char *cl_iscript __P((int idx));
extern char *cl_rscript __P((int idx));
extern void find_CAS __P((int CAS_type, char *bin_ptr, char *inst_ptr));
extern int setlist __P((struct cl_attr ***plist, char *slist));
extern void addlist __P((struct cl_attr ***plist, char *item));
extern char *cl_nam __P((int cl_idx));
extern char *flex_device(char *device_name, int dev_ok);
extern int cl_getn __P((void));
extern int cl_idx __P((char *cl_nam));
extern void cl_sets __P((char *slist));
extern void cl_setl __P((struct cl_attr **cl_lst));
extern void cl_putl __P((char *parm_name, struct cl_attr **list));
extern int cl_deliscript __P((int i));
extern unsigned cl_svfy __P((int i));
extern unsigned cl_dvfy __P((int i));
extern unsigned cl_pthrel __P((int i));
/* fixpath.c */
extern void __P(export_client_env(char *));
extern void __P(set_partial_inst(void));
extern int __P(is_partial_inst(void));
extern void __P(set_depend_pkginfo_DB(boolean_t a_setting));
extern boolean_t __P(is_depend_pkginfo_DB(void));
extern void __P(disable_spool_create(void));
extern int __P(is_spool_create(void));
/* open_package_datastream.c */
extern boolean_t open_package_datastream(int a_argc, char **a_argv,
char *a_spoolto, char *a_device,
int *r_repeat, char **r_idsName,
char *a_tmpdir, struct pkgdev *a_pkgdev,
int a_optind);
/* setup_temporary_directory.c */
extern boolean_t setup_temporary_directory(char **r_dirname,
char *a_tmpdir, char *a_suffix);
/* unpack_package_from_stream.c */
extern boolean_t unpack_package_from_stream(char *a_idsName,
char *a_pkginst, char *a_tempDir);
/* pkgops.c */
extern boolean_t pkgAddPackageToGzonlyList(char *a_pkgInst,
char *a_rootPath);
extern void pkgAddThisZonePackage(char *a_pkgInst);
extern boolean_t pkgRemovePackageFromGzonlyList(char *a_rootPath,
char *a_pkgInst);
extern FILE *pkgOpenInGzOnlyFile(char *a_rootPath);
extern void pkginfoFree(struct pkginfo **r_info);
extern boolean_t pkginfoIsPkgInstalled(struct pkginfo **r_pinfo,
char *a_pkgInst);
extern boolean_t pkgIsPkgInGzOnly(char *a_rootPath, char *a_pkgInst);
extern boolean_t pkgIsPkgInGzOnlyFP(FILE *a_fp, char *a_pkgInst);
extern boolean_t pkginfoParamTruth(FILE *a_fp, char *a_param,
char *a_value, boolean_t a_default);
extern int pkgGetPackageList(char ***r_pkgList, char **a_argv,
int a_optind, char *a_categories,
char **a_categoryList, struct pkgdev *a_pkgdev);
extern void pkgLocateHighestInst(char *r_path, int r_pathLen,
char *r_pkgInst, int r_pkgInstLen,
char *a_rootPath, char *a_pkgInst);
extern boolean_t pkgPackageIsThisZone(char *a_pkgInst);
extern char *pkgGetGzOnlyPath(void);
extern boolean_t pkgTestInstalled(char *a_packageName, char *a_rootPath);
/* depchk.c */
struct depckErrorRecord {
int ier_numZones;
char *ier_packageName;
char **ier_zones;
char **ier_values;
};
typedef struct depckErrorRecord depckErrorRecord_t;
struct depckError {
int er_numEntries;
depckErrorRecord_t *er_theEntries;
};
typedef struct depckError depckError_t;
typedef int (depcklFunc_t)(char *a_msg, char *a_pkg);
/*
* ignore_values:
* == NULL - record one message for each instance of "name" found
* == "" - record multiple instances
* != "" - record multiple instances if value not in ignore_values
*/
struct depckl_struct {
char *name;
char *ignore_values;
char **err_msg;
depcklFunc_t *depcklFunc;
depckError_t *record;
};
typedef struct depckl_struct depckl_t;
extern int depchkReportErrors(depckl_t *depckl);
extern void depchkRecordError(depckError_t *a_erc,
char *a_pkginst, char *a_zoneName,
char *a_value);
/* log.c */
/* types of log messages we recognize */
typedef enum {
LOG_MSG_ERR,
LOG_MSG_WRN,
LOG_MSG_INFO,
LOG_MSG_DEBUG
} LogMsgType;
/*PRINTFLIKE2*/
extern void log_msg(LogMsgType, const char *, ...);
extern void log_set_verbose(boolean_t);
extern boolean_t log_get_verbose(void);
/*
* typedef for the 'ckreturn' function
*/
typedef void (ckreturnFunc_t)(int a_retcode);
/* sml.c */
/* null reference to SML_TAG object */
#define SML_TAG__NULL ((SML_TAG*)NULL)
/* null reference to SML_TAG * object */
#define SML_TAG__R_NULL ((SML_TAG**)NULL)
/* is reference to SML_TAG object valid? */
#define SML_TAG__ISVALID(tag) ((tag) != (SML_TAG__NULL))
/* is indirect reference to SML_TAG object valid? */
#define SML_TAG__R_ISVALID(r_tag) \
((r_tag) != ((SML_TAG**)(SML_TAG__NULL)))
/* definitions for sml passed from pkginstall to pkgcond */
#define PKGCOND_GLOBAL_VARIABLE "SUNW_PKGCOND_GLOBAL_DATA"
#define TAG_COND_TOPLEVEL "environmentConditionInformation"
#define TAG_COND_PARENT_ZONE "parentZone"
#define TAG_COND_CURRENT_ZONE "currentZone"
#define TAG_COND_ZONE_NAME "zoneName"
#define TAG_COND_ZONE_TYPE "zoneType"
#define TAG_COND_FS_NAME "fileSystemName"
#define TAG_VALUE_GLOBAL_ZONE "global"
#define TAG_VALUE_NONGLOBAL_ZONE "nonglobal"
typedef struct _sml_tag_struct SML_TAG;
typedef struct _sml_parameter_struct SML_PARAM;
struct _sml_tag_struct {
char *name; /* tag name */
int params_num; /* # params in *params */
SML_PARAM *params; /* tag parameters */
int tags_num; /* # subtags in *tags */
SML_TAG *tags; /* tag subtags */
};
struct _sml_parameter_struct {
char *name; /* tag name */
char *value; /* parameters */
};
SML_TAG *smlAddTag(SML_TAG **r_tag, int a_index,
SML_TAG *a_subTag);
boolean_t smlFstatCompareEq(struct stat *statbuf,
SML_TAG *tag, char *path);
char *smlConvertTagToString(SML_TAG *tag);
/*PRINTFLIKE2*/
void smlDbgPrintTag(SML_TAG *a_tag, char *a_format, ...);
void smlDelTag(SML_TAG *tag, SML_TAG *sub_tag);
void smlDelParam(SML_TAG *tag, char *name);
SML_TAG *smlDup(SML_TAG *tag);
boolean_t smlFindAndDelTag(SML_TAG *tag, char *findTag);
void smlFreeTag(SML_TAG *tag);
char *smlGetElementName(SML_TAG *a_tag);
int smlGetNumParams(SML_TAG *a_tag);
char *smlGetParam(SML_TAG *tag, char *name);
/*PRINTFLIKE2*/
char *smlGetParamF(SML_TAG *tag, char *format, ...);
void smlGetParam_r(SML_TAG *tag, char *name, char *buf,
int bufLen);
char *smlGetParamByTag(SML_TAG *tag, int index,
char *tagName, char *parmName);
char *smlGetParamByTagParam(SML_TAG *tag, int index,
char *tagName, char *parmName, char *parmValue,
char *parmReturn);
char *smlGetParamName(SML_TAG *tag, int index);
SML_TAG *smlGetTag(SML_TAG *tag, int index);
SML_TAG *smlGetTagByName(SML_TAG *tag, int index, char *name);
SML_TAG *smlGetTagByTagParam(SML_TAG *tag, int index,
char *tagName, char *paramName, char *paramValue);
boolean_t smlGetVerbose(void);
int smlLoadTagFromFile(SML_TAG **r_tag, char *a_fileName);
SML_TAG *smlNewTag(char *name);
boolean_t smlParamEq(SML_TAG *tag, char *findTag,
char *findParam, char *str);
/*PRINTFLIKE4*/
boolean_t smlParamEqF(SML_TAG *tag, char *findTag, char *findParam,
char *format, ...);
void smlPrintTag(SML_TAG *tag);
int smlReadOneTag(SML_TAG **r_tag, char *a_str);
int smlConvertStringToTag(SML_TAG **r_tag, char *str);
void smlSetFileStatInfo(SML_TAG **tag,
struct stat *statbuf, char *path);
void smlSetParam(SML_TAG *tag, char *name, char *value);
/*PRINTFLIKE3*/
void smlSetParamF(SML_TAG *tag, char *name, char *format, ...);
void smlSetVerbose(boolean_t a_setting);
int smlWriteTagToFd(SML_TAG *tag, int fd);
int smlWriteTagToFile(SML_TAG *tag, char *filename);
/*PRINTFLIKE3*/
void sml_strPrintf_r(char *a_buf, int a_bufLen, char *a_format, ...);
/*PRINTFLIKE1*/
char *sml_strPrintf(char *a_format, ...);
char *sml_XmlEncodeString(char *a_plainTextString);
char *sml_XmlDecodeString(char *a_xmlEncodedString);
#if defined(lint) && !defined(gettext)
#define gettext(x) x
#endif /* defined(lint) && !defined(gettext) */
#ifdef __cplusplus
}
#endif
#endif /* __HDRS_LIBINST_H__ */