diff options
Diffstat (limited to 'src/logicalfile/file.c')
-rw-r--r-- | src/logicalfile/file.c | 26 |
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)); |