--- a/usr/src/cmd/rad/mod/smf/mod_smf.c Tue Feb 15 20:42:05 2011 -0500
+++ b/usr/src/cmd/rad/mod/smf/mod_smf.c Thu Feb 17 16:14:36 2011 -0800
@@ -32,17 +32,13 @@
#include <stddef.h>
#include <unistd.h>
#include <fcntl.h>
-
#include <libscf.h>
#include <libscf_priv.h>
-
#include <rad/adr.h>
#include <rad/rad_modapi.h>
#include "api_smf.h"
-
-extern int rad_read_propvec(const char *, const char *, boolean_t,
- scf_propvec_t *, scf_propvec_t **);
+#include "propvec.h"
static pthread_mutex_t service_lock = PTHREAD_MUTEX_INITIALIZER;
static list_t service_list;
@@ -250,8 +246,8 @@
{
servinst_t *si = instance_getdata(inst);
char *title, *section, *path;
- scf_propvec_t *badprop;
- scf_propvec_t evec[] = {
+ rad_propvec_t *badprop;
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_TM_MANPATH, NULL, SCF_TYPE_USTRING, &path, 0 },
{ SCF_PROPERTY_TM_TITLE, NULL, SCF_TYPE_USTRING, &title, 0 },
{ SCF_PROPERTY_TM_SECTION, NULL, SCF_TYPE_USTRING, §ion,
@@ -285,7 +281,7 @@
struct_set(mp, "section", data_new_string(section, lt_copy));
struct_set(mp, "path", data_new_string(path, lt_copy));
array_add(result, mp);
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
}
data_free(pgs);
*data = result;
@@ -300,8 +296,8 @@
{
servinst_t *si = instance_getdata(inst);
char *uri;
- scf_propvec_t *badprop;
- scf_propvec_t evec[] = {
+ rad_propvec_t *badprop;
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_TM_URI, NULL, SCF_TYPE_USTRING, &uri, 0 },
{ NULL }
};
@@ -326,7 +322,7 @@
if (rad_read_propvec(si->fmri, str, B_FALSE, evec,
&badprop) == 0) {
array_add(result, data_new_string(uri, lt_copy));
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
}
}
data_free(pgs);
@@ -345,17 +341,17 @@
return (error_scf(error, SCF_ERROR_INVALID_ARGUMENT));
boolean_t enabled;
- scf_propvec_t evec[] = {
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_ENABLED, NULL, SCF_TYPE_BOOLEAN, &enabled, 0 },
{ NULL }
};
- scf_propvec_t *badprop;
+ rad_propvec_t *badprop;
int scferr = rad_read_propvec(si->fmri, SCF_PG_GENERAL, B_FALSE,
evec, &badprop);
if (scferr != 0)
return (error_scf(error, scferr));
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
*data = data_new_boolean(enabled);
return (ce_ok);
@@ -371,17 +367,17 @@
return (error_scf(error, SCF_ERROR_INVALID_ARGUMENT));
boolean_t enabled;
- scf_propvec_t evec[] = {
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_ENABLED, NULL, SCF_TYPE_BOOLEAN, &enabled, 0 },
{ NULL }
};
- scf_propvec_t *badprop;
+ rad_propvec_t *badprop;
if (rad_read_propvec(si->fmri, SCF_PG_GENERAL_OVR, B_FALSE, evec,
&badprop) != 0)
return (api_serviceInfo_read_PersistentlyEnabled(inst, attr,
data, error));
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
*data = data_new_boolean(enabled);
return (ce_ok);
@@ -419,16 +415,16 @@
return (error_scf(error, SCF_ERROR_INVALID_ARGUMENT));
char *fmri = NULL;
- scf_propvec_t evec[] = {
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_RESTARTER, NULL, SCF_TYPE_USTRING, &fmri, 0 },
{ NULL }
};
- scf_propvec_t *badprop;
+ rad_propvec_t *badprop;
if (rad_read_propvec(si->fmri, SCF_PG_GENERAL, B_FALSE, evec,
&badprop) == 0) {
*data = data_new_string(fmri, lt_copy);
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
} else {
*data = data_new_fstring("svc:/%s:%s",
"system/svc/restarter", "default");
@@ -479,19 +475,19 @@
return (error_scf(error, SCF_ERROR_INVALID_ARGUMENT));
char *state = NULL;
- scf_propvec_t evec[] = {
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_NEXT_STATE, NULL, SCF_TYPE_ASTRING, &state, 0 },
{ NULL }
};
- scf_propvec_t *badprop;
+ rad_propvec_t *badprop;
int scferr = rad_read_propvec(si->fmri, SCF_PG_RESTARTER, B_FALSE, evec,
&badprop);
if (scferr != 0)
return (error_scf(error, scferr));
*data = state2enum(state);
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
return (*data != NULL ? ce_ok : ce_system);
}
@@ -504,12 +500,12 @@
return (error_scf(error, SCF_ERROR_INVALID_ARGUMENT));
char *aux;
- scf_propvec_t evec[] = {
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_AUX_STATE, NULL, SCF_TYPE_ASTRING, &aux, 0 },
{ NULL }
};
- scf_propvec_t *badprop;
+ rad_propvec_t *badprop;
int scferr = rad_read_propvec(si->fmri, SCF_PG_RESTARTER, B_FALSE, evec,
&badprop);
if (scferr != 0) {
@@ -521,7 +517,7 @@
}
*data = data_new_string(aux, lt_copy);
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
return (*data != NULL ? ce_ok : ce_system);
}
@@ -536,18 +532,18 @@
return (error_scf(error, SCF_ERROR_INVALID_ARGUMENT));
scf_time_t time;
- scf_propvec_t evec[] = {
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_STATE_TIMESTAMP, NULL, SCF_TYPE_TIME, &time, 0 },
{ NULL }
};
- scf_propvec_t *badprop;
+ rad_propvec_t *badprop;
int scferr = rad_read_propvec(si->fmri, SCF_PG_RESTARTER, B_FALSE, evec,
&badprop);
if (scferr != 0)
return (error_scf(error, scferr));
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
*data = data_new_time(time.t_seconds);
@@ -564,17 +560,17 @@
return (error_scf(error, SCF_ERROR_INVALID_ARGUMENT));
uint64_t count;
- scf_propvec_t evec[] = {
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_CONTRACT, NULL, SCF_TYPE_COUNT, &count, 0 },
{ NULL }
};
- scf_propvec_t *badprop;
+ rad_propvec_t *badprop;
int scferr = rad_read_propvec(si->fmri, SCF_PG_RESTARTER, B_FALSE, evec,
&badprop);
if (scferr != 0)
return (error_scf(error, scferr));
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
*data = data_new_long(count);
@@ -1409,8 +1405,8 @@
data_t **ret, data_t **error)
{
char *str;
- scf_propvec_t *badprop;
- scf_propvec_t evec[] = {
+ rad_propvec_t *badprop;
+ rad_propvec_t evec[] = {
{ locale, NULL, SCF_TYPE_ASTRING, &str, 0 },
{ NULL }
};
@@ -1426,7 +1422,7 @@
}
*ret = data_new_string(str, lt_copy);
- scf_clean_propvec(evec);
+ rad_clean_propvec(evec);
return (ce_ok);
}
@@ -1468,12 +1464,12 @@
return (error_scf(error, SCF_ERROR_INVALID_ARGUMENT));
char *logname = NULL;
- scf_propvec_t evec[] = {
+ rad_propvec_t evec[] = {
{ SCF_PROPERTY_LOGFILE, NULL, SCF_TYPE_USTRING, &logname, 0 },
{ NULL }
};
- scf_propvec_t *badprop;
+ rad_propvec_t *badprop;
int errval = rad_read_propvec(si->fmri, SCF_PG_RESTARTER, B_FALSE,
evec, &badprop);
if (errval != 0)
--- a/usr/src/cmd/rad/mod/smf/propvec.c Tue Feb 15 20:42:05 2011 -0500
+++ b/usr/src/cmd/rad/mod/smf/propvec.c Thu Feb 17 16:14:36 2011 -0800
@@ -20,12 +20,7 @@
*/
/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Shame.
+ * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
*/
#include <assert.h>
@@ -36,7 +31,7 @@
#include <sys/param.h>
#include <errno.h>
#include <libscf.h>
-#include <libscf_priv.h>
+#include "propvec.h"
extern scf_handle_t *handle_create(void);
@@ -60,15 +55,15 @@
* Like free(3C), this function preserves the value of errno.
*/
void
-rad_clean_propvec(scf_propvec_t *propvec)
+rad_clean_propvec(rad_propvec_t *propvec)
{
int saved_errno = errno;
- scf_propvec_t *prop;
+ rad_propvec_t *prop;
for (prop = propvec; prop->pv_prop != NULL; prop++) {
assert(prop->pv_type != SCF_TYPE_INVALID);
if (prop->pv_type == SCF_TYPE_OPAQUE) {
- scf_opaque_t *o = prop->pv_ptr;
+ rad_opaque_t *o = prop->pv_ptr;
if (o->so_addr != NULL)
free(o->so_addr);
@@ -83,7 +78,7 @@
}
static int
-count_props(scf_propvec_t *props)
+count_props(rad_propvec_t *props)
{
int count = 0;
@@ -105,7 +100,7 @@
*
* For opaque types, a buffer is allocated using malloc(3C) to hold the
* opaque data. A pointer to this buffer and its size are stored in
- * the caller-provided scf_opaque_t. It is the caller's responsibility
+ * the caller-provided rad_opaque_t. It is the caller's responsibility
* to free this buffer. To simplify error handling, the address fields
* for unread opaque data are initialized to NULL.
*
@@ -119,7 +114,7 @@
*/
int
rad_read_propvec(const char *fmri, const char *pgname, boolean_t running,
- scf_propvec_t *properties, scf_propvec_t **badprop)
+ rad_propvec_t *properties, rad_propvec_t **badprop)
{
scf_handle_t *h = handle_create();
scf_service_t *s = scf_service_create(h);
@@ -129,12 +124,12 @@
scf_property_t *p = scf_property_create(h);
scf_value_t *v = scf_value_create(h);
boolean_t instance = B_TRUE;
- scf_propvec_t *prop;
+ rad_propvec_t *prop;
int error = 0;
for (prop = properties; prop->pv_prop != NULL; prop++) {
if (prop->pv_type == SCF_TYPE_OPAQUE)
- ((scf_opaque_t *)prop->pv_ptr)->so_addr = NULL;
+ ((rad_opaque_t *)prop->pv_ptr)->so_addr = NULL;
else if (scf_true_base_type(prop->pv_type) == SCF_TYPE_ASTRING)
*((char **)prop->pv_ptr) = NULL;
}
@@ -206,7 +201,7 @@
break;
}
case SCF_TYPE_OPAQUE: {
- scf_opaque_t *opaque = prop->pv_ptr;
+ rad_opaque_t *opaque = prop->pv_ptr;
ssize_t size = scf_value_get_opaque(v, NULL, 0);
if (size == -1) {