summaryrefslogtreecommitdiffstats
path: root/src/logicalfile/LMI_SymbolicLinkProvider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/logicalfile/LMI_SymbolicLinkProvider.c')
-rw-r--r--src/logicalfile/LMI_SymbolicLinkProvider.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/logicalfile/LMI_SymbolicLinkProvider.c b/src/logicalfile/LMI_SymbolicLinkProvider.c
index bab03d8..8060307 100644
--- a/src/logicalfile/LMI_SymbolicLinkProvider.c
+++ b/src/logicalfile/LMI_SymbolicLinkProvider.c
@@ -83,7 +83,25 @@ static CMPIStatus LMI_SymbolicLinkCreateInstance(
const CMPIObjectPath* cop,
const CMPIInstance* ci)
{
- CMReturn(CMPI_RC_ERR_NOT_SUPPORTED);
+ CMPIStatus st = {.rc = CMPI_RC_OK};
+ CMPIObjectPath *iop = CMGetObjectPath(ci, &st);
+ check_status(st);
+ st = lmi_check_required(_cb, cc, iop);
+ check_status(st);
+
+ const char *path = get_string_property_from_instance(ci, "Name");
+ const char *target = get_string_property_from_instance(ci, "TargetFile");
+
+ if (symlink(target, path) < 0) {
+ char errmsg[BUFLEN];
+ char strerr[BUFLEN];
+ snprintf(errmsg, BUFLEN, "Can't create symlink: %s pointing to %s (%s)",
+ path, target,
+ strerror_r(errno, strerr, BUFLEN));
+ CMReturnWithChars(_cb, CMPI_RC_ERR_FAILED, errmsg);
+ }
+
+ return CMReturnObjectPath(cr, iop);
}
static CMPIStatus LMI_SymbolicLinkModifyInstance(
@@ -158,4 +176,5 @@ KONKRET_REGISTRATION(
/* vi: set et: */
/* Local Variables: */
/* indent-tabs-mode: nil */
+/* c-basic-offset: 4 */
/* End: */