From: Michael Tremer Date: Mon, 8 Mar 2021 22:21:23 +0000 (+0000) Subject: file: Keep type in mode_t and remove file type check functions X-Git-Tag: 0.9.28~1285^2~599 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9770f1980e384807106b295ef71553a47affa7e;p=pakfire.git file: Keep type in mode_t and remove file type check functions Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/file.c b/src/libpakfire/file.c index 8138ac592..c7b92fe68 100644 --- a/src/libpakfire/file.c +++ b/src/libpakfire/file.c @@ -76,33 +76,6 @@ PAKFIRE_EXPORT int pakfire_file_copy_stat(PakfireFile file, struct stat* stat) { if (!stat) return EINVAL; - // Set type - switch (stat->st_mode & S_IFMT) { - case S_IFREG: - pakfire_file_set_type(file, REGTYPE); - break; - - case S_IFDIR: - pakfire_file_set_type(file, DIRTYPE); - break; - - case S_IFLNK: - pakfire_file_set_type(file, SYMTYPE); - break; - - case S_IFBLK: - pakfire_file_set_type(file, BLKTYPE); - break; - - case S_IFCHR: - pakfire_file_set_type(file, CHRTYPE); - break; - - case S_IFIFO: - pakfire_file_set_type(file, FIFOTYPE); - break; - } - // Set mode pakfire_file_set_mode(file, stat->st_mode); @@ -172,67 +145,6 @@ PAKFIRE_EXPORT int pakfire_file_cmp(PakfireFile file1, PakfireFile file2) { return strcmp(path1, path2); } -static char pakfire_file_sprintf_type(PakfireFile file) { - if (pakfire_file_is_dir(file)) - return 'd'; - - if (pakfire_file_is_symlink(file)) - return 'l'; - - if (pakfire_file_is_char(file)) - return 'c'; - - return '-'; -} - -static char* pakfire_file_format_perms(PakfireFile file) { - char buffer[11]; - - mode_t mode = pakfire_file_get_mode(file); - - buffer[0] = pakfire_file_sprintf_type(file); - buffer[1] = (S_IRUSR & mode) ? 'r' : '-'; - buffer[2] = (S_IWUSR & mode) ? 'w' : '-'; - buffer[3] = (S_IXUSR & mode) ? 'x' : '-'; - buffer[4] = (S_IRGRP & mode) ? 'r' : '-'; - buffer[5] = (S_IWGRP & mode) ? 'w' : '-'; - buffer[6] = (S_IXGRP & mode) ? 'x' : '-'; - buffer[7] = (S_IROTH & mode) ? 'r' : '-'; - buffer[8] = (S_IWOTH & mode) ? 'w' : '-'; - buffer[9] = (S_IXOTH & mode) ? 'x' : '-'; - buffer[10] = '\0'; - - #warning TODO SUID bits, etc... - - return strdup(buffer); -} - -static char* pakfire_file_format_mtime(PakfireFile file) { - struct tm* timer = gmtime((time_t *)&file->time); - - char buffer[STRING_SIZE]; - strftime(buffer, sizeof(buffer), "%d %b %Y %T", timer); - - return strdup(buffer); -} - -PAKFIRE_EXPORT void pakfire_file_sprintf(PakfireFile file, char* str, size_t len) { - const char* path = pakfire_file_get_path(file); - ssize_t size = pakfire_file_get_size(file); - - const char* user = pakfire_file_get_user(file); - const char* group = pakfire_file_get_group(file); - - char* perms = pakfire_file_format_perms(file); - char* mtime = pakfire_file_format_mtime(file); - - snprintf(str, len, "%s %-8s %-8s %8d %s %s", perms, user, group, - (int)size, mtime, path); - - free(perms); - free(mtime); -} - PAKFIRE_EXPORT const char* pakfire_file_get_path(PakfireFile file) { return file->path; } @@ -252,36 +164,8 @@ PAKFIRE_EXPORT int pakfire_file_set_path(PakfireFile file, const char* path) { return 0; } -PAKFIRE_EXPORT char pakfire_file_get_type(PakfireFile file) { - return file->type; -} - -PAKFIRE_EXPORT void pakfire_file_set_type(PakfireFile file, char type) { - file->type = type; -} - -PAKFIRE_EXPORT int pakfire_file_is_file(PakfireFile file) { - return (file->type == REGTYPE) || (file->type == AREGTYPE); -} - -PAKFIRE_EXPORT int pakfire_file_is_link(PakfireFile file) { - return (file->type == LNKTYPE); -} - -PAKFIRE_EXPORT int pakfire_file_is_symlink(PakfireFile file) { - return (file->type == SYMTYPE); -} - -PAKFIRE_EXPORT int pakfire_file_is_char(PakfireFile file) { - return (file->type == CHRTYPE); -} - -PAKFIRE_EXPORT int pakfire_file_is_block(PakfireFile file) { - return (file->type == BLKTYPE); -} - -PAKFIRE_EXPORT int pakfire_file_is_dir(PakfireFile file) { - return (file->type == DIRTYPE); +PAKFIRE_EXPORT int pakfire_file_get_type(PakfireFile file) { + return file->mode & S_IFMT; } PAKFIRE_EXPORT ssize_t pakfire_file_get_size(PakfireFile file) { diff --git a/src/libpakfire/filelist.c b/src/libpakfire/filelist.c index df2014bb6..05ded0123 100644 --- a/src/libpakfire/filelist.c +++ b/src/libpakfire/filelist.c @@ -163,7 +163,6 @@ static int pakfire_filelist_parse_line(PakfireFile* file, Pakfire pakfire, switch (i) { // type case 0: - pakfire_file_set_type(*file, *word); break; // size @@ -215,7 +214,6 @@ static int pakfire_filelist_parse_line(PakfireFile* file, Pakfire pakfire, // type case 1: - pakfire_file_set_type(*file, *word); break; // size diff --git a/src/libpakfire/include/pakfire/file.h b/src/libpakfire/include/pakfire/file.h index 764068d14..b608ef844 100644 --- a/src/libpakfire/include/pakfire/file.h +++ b/src/libpakfire/include/pakfire/file.h @@ -34,22 +34,13 @@ PakfireFile pakfire_file_ref(PakfireFile file); PakfireFile pakfire_file_unref(PakfireFile file); int pakfire_file_cmp(PakfireFile file1, PakfireFile file2); -void pakfire_file_sprintf(PakfireFile file, char* str, size_t len); int pakfire_file_copy_stat(PakfireFile file, struct stat* stat); const char* pakfire_file_get_path(PakfireFile file); int pakfire_file_set_path(PakfireFile file, const char* path); -char pakfire_file_get_type(PakfireFile file); -void pakfire_file_set_type(PakfireFile file, char type); - -int pakfire_file_is_file(PakfireFile file); -int pakfire_file_is_link(PakfireFile file); -int pakfire_file_is_symlink(PakfireFile file); -int pakfire_file_is_char(PakfireFile file); -int pakfire_file_is_block(PakfireFile file); -int pakfire_file_is_dir(PakfireFile file); +int pakfire_file_get_type(PakfireFile file); ssize_t pakfire_file_get_size(PakfireFile file); void pakfire_file_set_size(PakfireFile file, ssize_t size); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 2534ae7c2..2d67e3ff6 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -99,18 +99,11 @@ global: pakfire_file_get_path; pakfire_file_get_time; pakfire_file_get_user; - pakfire_file_is_file; - pakfire_file_is_link; - pakfire_file_is_symlink; - pakfire_file_is_char; - pakfire_file_is_block; - pakfire_file_is_dir; pakfire_file_set_group; pakfire_file_set_mode; pakfire_file_set_path; pakfire_file_set_time; pakfire_file_set_user; - pakfire_file_sprintf; pakfire_file_ref; pakfire_file_unref; diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index d73b6c742..248d2ec7a 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -253,23 +253,12 @@ static int pakfire_packager_write_filelist(struct pakfire_packager* packager, for (unsigned int i = 0; i < pakfire_filelist_size(packager->filelist); i++) { PakfireFile file = pakfire_filelist_get(packager->filelist, i); - char type = '-'; - - if (pakfire_file_is_dir(file)) - type = 'd'; - - if (pakfire_file_is_symlink(file)) - type = 'l'; - - if (pakfire_file_is_char(file)) - type = 'c'; - const char* chksum = pakfire_file_get_chksum(file); asprintf(&buffer, "%s%c %-10zu %-10s %-10s %-6d %-12ld %s %s %s\n", (buffer) ? buffer : "", - type, + '-', pakfire_file_get_size(file), pakfire_file_get_user(file), pakfire_file_get_group(file),