#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <locale.h>
#include <libintl.h>
#include <pkglocs.h>
#include <pkglib.h>
#include "libinst.h"
#define ERR_INVALID_CAS "%d is an invalid class action script type."
#define ERR_NO_NONE "Cannot find the default archive install script."
#define ERR_NO_PATH "No paths for finding class action scripts."
extern struct cl_attr **cl_Classes;
extern int cl_NClasses;
extern char *cl_nam(int idx);
static int pkg_has_arch;
char *
cl_iscript(int idx)
{
if (cl_Classes && idx >= 0 && idx < cl_NClasses)
return (cl_Classes[idx]->inst_script);
return (NULL);
}
int
cl_deliscript(int idx)
{
if (cl_Classes && idx >= 0 && idx < cl_NClasses)
if (cl_Classes[idx]->inst_script) {
free(cl_Classes[idx]->inst_script);
cl_Classes[idx]->inst_script = NULL;
cl_Classes[idx]->src_verify = DEFAULT;
cl_Classes[idx]->dst_verify = DEFAULT;
cl_Classes[idx]->relpath_2_CAS = DEFAULT;
} else
return (0);
return (1);
}
char *
cl_rscript(int idx)
{
if (cl_Classes && idx >= 0 && idx < cl_NClasses)
return (cl_Classes[idx]->rem_script);
return (NULL);
}
void
find_CAS(int CAS_type, char *pkgbin, char *instdir)
{
int i;
char path[PATH_MAX];
if (instdir == NULL || pkgbin == NULL) {
progerr(gettext(ERR_NO_PATH));
quit(99);
}
if (CAS_type == I_ONLY) {
for (i = 0; i < cl_NClasses; i++) {
(void) sprintf(path, "%s/install/i.%s", instdir,
cl_nam(i));
if (access(path, R_OK) == 0) {
(void) sprintf(path, "%s/i.%s", pkgbin,
cl_nam(i));
cl_Classes[i]->inst_script = qstrdup(path);
continue;
}
(void) sprintf(path, "%s/i.%s", PKGSCR, cl_nam(i));
if (access(path, R_OK) == 0) {
cl_Classes[i]->inst_script = qstrdup(path);
continue;
}
(void) sprintf(path, "%s/%s", PKGSCR, DEF_NONE_SCR);
if (pkg_has_arch &&
cl_Classes[i]->inst_script == NULL) {
cl_Classes[i]->src_verify = NOVERIFY;
cl_Classes[i]->dst_verify = QKVERIFY;
cl_Classes[i]->relpath_2_CAS = REL_2_CAS;
if (access(path, R_OK) == 0) {
cl_Classes[i]->inst_script =
qstrdup(path);
continue;
} else {
progerr(gettext(ERR_NO_NONE));
quit(99);
}
}
}
} else if (CAS_type == R_ONLY) {
for (i = 0; i < cl_NClasses; i++) {
(void) sprintf(path, "%s/install/r.%s", instdir,
cl_nam(i));
if (access(path, R_OK) == 0) {
(void) sprintf(path, "%s/r.%s", pkgbin,
cl_nam(i));
cl_Classes[i]->rem_script = qstrdup(path);
continue;
}
(void) sprintf(path, "%s/r.%s", PKGSCR, cl_nam(i));
if (access(path, R_OK) == 0) {
cl_Classes[i]->rem_script = qstrdup(path);
continue;
}
}
} else {
progerr(gettext(ERR_INVALID_CAS), CAS_type);
quit(99);
}
}
void
is_WOS_arch(void)
{
pkg_has_arch++;
}