summaryrefslogtreecommitdiffstats
path: root/src/logicalfile/LMI_SymbolicLinkProvider.c
diff options
context:
space:
mode:
authorJan Synacek <jsynacek@redhat.com>2014-04-23 12:52:16 +0200
committerJan Synacek <jsynacek@redhat.com>2014-04-24 13:48:25 +0200
commit47f3990370bf8f2cba429fce53287fa4e67ce04e (patch)
tree558a68cc1e94bd44aaa1c9fbba4803404fdd9721 /src/logicalfile/LMI_SymbolicLinkProvider.c
parent799820bf4b9208f76b290213f501f2cf2a9735dc (diff)
downloadopenlmi-providers-47f3990370bf8f2cba429fce53287fa4e67ce04e.tar.gz
openlmi-providers-47f3990370bf8f2cba429fce53287fa4e67ce04e.tar.xz
openlmi-providers-47f3990370bf8f2cba429fce53287fa4e67ce04e.zip
logicalfile: add support for symlink creation
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: */