summaryrefslogtreecommitdiffstats
path: root/src/logicalfile/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/logicalfile/file.c')
-rw-r--r--src/logicalfile/file.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/logicalfile/file.c b/src/logicalfile/file.c
index a9a13a6..6c482f0 100644
--- a/src/logicalfile/file.c
+++ b/src/logicalfile/file.c
@@ -69,6 +69,32 @@ CMPIStatus lmi_check_required(
CMReturn(CMPI_RC_OK);
}
+void get_class_from_stat(const struct stat *sb, char *fileclass) {
+ (S_ISREG(sb->st_mode)) ? strcpy(fileclass, "LMI_DataFile") :
+ (S_ISDIR(sb->st_mode)) ? strcpy(fileclass, "LMI_UnixDirectory") :
+ (S_ISCHR(sb->st_mode)) ? strcpy(fileclass, "LMI_UnixDeviceFile") :
+ (S_ISBLK(sb->st_mode)) ? strcpy(fileclass, "LMI_UnixDeviceFile") :
+ (S_ISLNK(sb->st_mode)) ? strcpy(fileclass, "LMI_SymbolicLink") :
+ (S_ISFIFO(sb->st_mode)) ? strcpy(fileclass, "LMI_FIFOPipeFile") :
+ (S_ISSOCK(sb->st_mode)) ? strcpy(fileclass, "LMI_UnixSocket") :
+ strcpy(fileclass, "Unknown");
+ assert(strcmp(fileclass, "Unknown") != 0);
+}
+
+int get_class_from_path(const char *path, char *fileclass)
+{
+ int rc = 0;
+ struct stat sb;
+
+ if (lstat(path, &sb) < 0) {
+ rc = 1;
+ } else {
+ get_class_from_stat(&sb, fileclass);
+ }
+
+ return rc;
+}
+
void _dump_objectpath(const CMPIObjectPath *o)
{
printf("OP: %s\n", CMGetCharsPtr(o->ft->toString(o, NULL), NULL));