Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package hfsfuse for openSUSE:Factory checked in at 2025-05-26 18:46:46 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/hfsfuse (Old) and /work/SRC/openSUSE:Factory/.hfsfuse.new.2732 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hfsfuse" Mon May 26 18:46:46 2025 rev:2 rq:1280286 version:0.292 Changes: -------- --- /work/SRC/openSUSE:Factory/hfsfuse/hfsfuse.changes 2025-04-22 17:30:33.880831822 +0200 +++ /work/SRC/openSUSE:Factory/.hfsfuse.new.2732/hfsfuse.changes 2025-05-26 18:46:47.523755806 +0200 @@ -1,0 +2,11 @@ +Mon May 26 14:22:47 UTC 2025 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to 0.292 + * Adds support for the FUSE version 3 API. If available this + will be detected and used at build time. hfsfuse remains + compatible with FUSE version 2 implementations if v3 is + not available. (bsc#1243039) +- Add missing license information for vendored libraries +- Pass WITH_UBILIO=local WITH_UTF8PROC=system to %make_install + +------------------------------------------------------------------- Old: ---- hfsfuse-0.289.tar.gz New: ---- hfsfuse-0.292.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ hfsfuse.spec ++++++ --- /var/tmp/diff_new_pack.No3Qfa/_old 2025-05-26 18:46:48.095779790 +0200 +++ /var/tmp/diff_new_pack.No3Qfa/_new 2025-05-26 18:46:48.095779790 +0200 @@ -17,14 +17,14 @@ Name: hfsfuse -Version: 0.289 +Version: 0.292 Release: 0 Summary: FUSE driver for HFS+ filesystems -License: MIT +License: BSD-1-Clause AND BSD-2-Clause AND BSD-3-Clause AND MIT Group: System/Filesystems URL: https://github.com/0x09/hfsfuse Source: https://github.com/0x09/hfsfuse/releases/download/%{version}/%{name}-%{version}.tar.gz -BuildRequires: fuse-devel +BuildRequires: fuse3-devel BuildRequires: libarchive-devel BuildRequires: lzfse-devel BuildRequires: utf8proc-devel @@ -65,7 +65,7 @@ %make_build WITH_UBILIO=local WITH_UTF8PROC=system %install -%make_install PREFIX=%{_prefix} +%make_install WITH_UBILIO=local WITH_UTF8PROC=system PREFIX=%{_prefix} %files %license COPYING ++++++ hfsfuse-0.289.tar.gz -> hfsfuse-0.292.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hfsfuse-0.289/Makefile new/hfsfuse-0.292/Makefile --- old/hfsfuse-0.289/Makefile 2025-03-29 18:44:37.000000000 +0100 +++ new/hfsfuse-0.292/Makefile 2025-05-21 00:46:21.000000000 +0200 @@ -19,8 +19,6 @@ LOCAL_CFLAGS+=-Wno-missing-field-initializers -Wno-missing-braces TARGETS = hfsfuse hfsdump -FUSE_FLAGS = -DFUSE_USE_VERSION=28 -FUSE_LIB = -lfuse XATTR_NAMESPACE ?= user. ifeq ($(OS), Darwin) @@ -30,8 +28,8 @@ ifeq ($(shell [ -e /usr/local/lib/libosxfuse.dylib ] && echo 1), 1) FUSE_FLAGS += -I/usr/local/include/osxfuse FUSE_LIB = -losxfuse - else ifeq ($(shell [ -e /usr/local/lib/libfuse.dylib ] && echo 1), 1) - FUSE_FLAGS += -I/usr/local/include + else ifeq ($(shell [ -e /usr/local/lib/libfuse.dylib -o -e /usr/local/lib/libfuse3.dylib ] && echo 1), 1) + FUSE_FLAGS += -I/usr/local/include -Wno-language-extension-token else ifeq ($(shell [ -e /usr/local/lib/libfuse-t.dylib ] && echo 1), 1) FUSE_FLAGS += -I/usr/local/include/fuse FUSE_LIB = -lfuse-t @@ -59,8 +57,7 @@ else ifeq ($(OS), NetBSD) APP_FLAGS += -I/usr/pkg/include APP_LIB += -L/usr/pkg/lib -Wl,-R/usr/pkg/lib - FUSE_FLAGS += -I/usr/pkg/include - FUSE_LIB += -L/usr/pkg/lib/ -Wl,-R/usr/pkg/lib + FUSE_FLAGS += -I/usr/pkg/include -L/usr/pkg/lib/ -Wl,-R/usr/pkg/lib else ifeq ($(OS), SunOS) FUSE_FLAGS += -I/usr/include/fuse else ifeq (MSYS, $(findstring MSYS, $(OS))) @@ -146,6 +143,17 @@ else $(info libarchive not found, hfstar will not be built) endif + + CEXPR_CFLAGS =$(CFLAGS) $(LOCAL_CFLAGS) $(FUSE_FLAGS) -DFUSE_USE_VERSION=30 + $(eval $(call cccheck,HAVE_FUSE3,,fuse3/fuse.h)) + + ifeq ($(HAVE_FUSE3),1) + FUSE_FLAGS += -DFUSE_USE_VERSION=35 + FUSE_LIB ?= -lfuse3 + else + FUSE_FLAGS += -DFUSE_USE_VERSION=29 + FUSE_LIB ?= -lfuse + endif endif $(foreach cfg,OS CC AR RANLIB INSTALL TAR PREFIX WITH_UBLIO WITH_UTF8PROC XATTR_NAMESPACE CONFIG_CFLAGS $(FEATURES),$(eval CONFIG:=$(CONFIG)$(cfg)=$$($(cfg))\n)) @@ -256,7 +264,7 @@ echo \#define HFSFUSE_VERSION_STRING $(VERSION_STRING) > src/version.h authors: - git shortlog -sne $(RELEASE_BRANCH) | cut -d $$'\t' -f 2- > AUTHORS + git shortlog -sne $(RELEASE_BRANCH) | cut -f 2- > AUTHORS showconfig: @echo "$$CONFIG" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hfsfuse-0.289/README.md new/hfsfuse-0.292/README.md --- old/hfsfuse-0.289/README.md 2025-03-29 18:44:37.000000000 +0100 +++ new/hfsfuse-0.292/README.md 2025-05-21 00:46:21.000000000 +0200 @@ -29,7 +29,7 @@ hfsfuse's supporting libraries and standalone hfsdump tool require only a POSIX-2008 compatible libc, and can also be built natively on Windows with either Mingw-w64 or msys2. -The FUSE driver requires a version 2 compatible FUSE library, and is known to work with the following implementations: +The FUSE driver requires a version 2 or 3 compatible FUSE library, and is known to work with the following implementations: * [libfuse](https://libfuse.github.io) on Linux and *BSD * [macFUSE](https://osxfuse.github.io) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hfsfuse-0.289/src/hfsfuse.c new/hfsfuse-0.292/src/hfsfuse.c --- old/hfsfuse-0.289/src/hfsfuse.c 2025-03-29 18:44:37.000000000 +0100 +++ new/hfsfuse-0.292/src/hfsfuse.c 2025-05-21 00:46:21.000000000 +0200 @@ -9,7 +9,13 @@ #include <errno.h> #include <limits.h> #include <inttypes.h> + +#if FUSE_USE_VERSION < 30 #include <fuse.h> +#else +#include <fuse3/fuse.h> +#endif + #include <syslog.h> #ifndef HFSFUSE_VERSION_STRING @@ -24,6 +30,14 @@ #endif #endif +#if FUSE_VERSION >= 30 +static void* hfsfuse_init(struct fuse_conn_info *conn, struct fuse_config *cfg) { + cfg->use_ino = 1; + cfg->nullpath_ok = 1; + return fuse_get_context()->private_data; // the hfs_volume +} +#endif + static void hfsfuse_destroy(void* vol) { hfslib_close_volume(vol, NULL); } @@ -115,22 +129,31 @@ return 0; } -static int hfsfuse_getattr(const char* path, struct stat* st) { - hfs_volume* vol = fuse_get_context()->private_data; - hfs_catalog_keyed_record_t rec; hfs_catalog_key_t key; uint8_t fork; - int ret = hfs_lookup(vol,path,&rec,&key,&fork); - if(ret) - return ret; - - struct hfs_decmpfs_header h,* hp = NULL; - if(rec.type == HFS_REC_FILE && fork == HFS_DATAFORK && !hfs_decmpfs_lookup(vol,&rec.file,&h,NULL,NULL)) - hp = &h; - hfs_stat(vol,&rec,st,fork,hp); - - return 0; -} +#if FUSE_DARWIN_ENABLE_EXTENSIONS +#define stat_to_fuse_darwin_attr(rec,st) ((struct fuse_darwin_attr){\ + .ino = (st).st_ino,\ + .mode = (st).st_mode,\ + .nlink = (st).st_nlink,\ + .uid = (st).st_uid,\ + .gid = (st).st_gid,\ + .rdev = (st).st_rdev,\ + .atimespec.tv_sec = (st).st_atime,\ + .mtimespec.tv_sec = (st).st_mtime,\ + .ctimespec.tv_sec = (st).st_ctime,\ + .crtimespec.tv_sec = (st).st_birthtime,\ + .bkuptimespec.tv_sec = HFSTIMETOEPOCH((rec).file.date_backedup),\ + .size = (st).st_size,\ + .blocks = (st).st_blocks,\ + .blksize = (st).st_blksize,\ + .flags = (st).st_flags,\ +}) +#endif +#if FUSE_DARWIN_ENABLE_EXTENSIONS +static int hfsfuse_fgetattr(const char* path, struct fuse_darwin_attr* darwin_attrs, struct fuse_file_info* info) { +#else static int hfsfuse_fgetattr(const char* path, struct stat* st, struct fuse_file_info* info) { +#endif hfs_volume* vol = fuse_get_context()->private_data; struct hf_file* f = (struct hf_file*)info->fh; hfs_catalog_keyed_record_t rec; hfs_catalog_key_t key; @@ -141,12 +164,53 @@ struct hfs_decmpfs_header h,* hp = NULL; if(f->fork == HFS_DATAFORK && hfs_decmpfs_get_header(f->decmpfs,&h)) hp = &h; + +#if FUSE_DARWIN_ENABLE_EXTENSIONS + struct stat st; + hfs_stat(vol,&rec,&st,f->fork,hp); + *darwin_attrs = stat_to_fuse_darwin_attr(rec,st); +#else hfs_stat(vol,&rec,st,f->fork,hp); +#endif return 0; } +#if FUSE_DARWIN_ENABLE_EXTENSIONS +static int hfsfuse_getattr(const char* path, struct fuse_darwin_attr* st, struct fuse_file_info *fi) { +#elif FUSE_VERSION >= 30 +static int hfsfuse_getattr(const char* path, struct stat* st, struct fuse_file_info *fi) { +#else +static int hfsfuse_getattr(const char* path, struct stat* st) { +#endif + +#if FUSE_DARWIN_ENABLE_EXTENSIONS || FUSE_VERSION >= 30 + if(fi) + return hfsfuse_fgetattr(path,st,fi); +#endif + + hfs_volume* vol = fuse_get_context()->private_data; + hfs_catalog_keyed_record_t rec; hfs_catalog_key_t key; uint8_t fork; + int ret = hfs_lookup(vol,path,&rec,&key,&fork); + if(ret) + return ret; + + struct hfs_decmpfs_header h,* hp = NULL; + if(rec.type == HFS_REC_FILE && fork == HFS_DATAFORK && !hfs_decmpfs_lookup(vol,&rec.file,&h,NULL,NULL)) + hp = &h; + +#if FUSE_DARWIN_ENABLE_EXTENSIONS + struct stat statbuf; + hfs_stat(vol,&rec,&statbuf,fork,hp); + *st = stat_to_fuse_darwin_attr(rec,statbuf); +#else + hfs_stat(vol,&rec,st,fork,hp); +#endif + + return 0; +} + struct hf_dir { hfs_catalog_keyed_record_t dir_record; hfs_cnid_t parent_cnid; @@ -212,26 +276,48 @@ return 0; } +#if FUSE_DARWIN_ENABLE_EXTENSIONS +static int hfsfuse_readdir(const char* path, void* buf, fuse_darwin_fill_dir_t filler, off_t offset, struct fuse_file_info* info, enum fuse_readdir_flags flags) { +#elif FUSE_VERSION >= 30 +static int hfsfuse_readdir(const char* path, void* buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info* info, enum fuse_readdir_flags flags) { +#else static int hfsfuse_readdir(const char* path, void* buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info* info) { +#endif hfs_volume* vol = fuse_get_context()->private_data; struct hf_dir* d = (struct hf_dir*)info->fh; if(offset < 1) { struct stat st = {0}; hfs_stat(vol, &d->dir_record, &st, 0, NULL); - if(filler(buf, ".", &st, 1)) + int ret; +#if FUSE_DARWIN_ENABLE_EXTENSIONS + ret = filler(buf, ".", &stat_to_fuse_darwin_attr(d->dir_record,st), 1, FUSE_FILL_DIR_PLUS); +#elif FUSE_VERSION >= 30 + ret = filler(buf, ".", &st, 1, FUSE_FILL_DIR_PLUS); +#else + ret = filler(buf, ".", &st, 1); +#endif + if(ret) return 0; } if(offset < 2) { struct stat st = {0}; struct stat* stp = NULL; + hfs_catalog_keyed_record_t rec = {0}; if(d->dir_record.folder.cnid != HFS_CNID_ROOT_FOLDER) { hfs_catalog_key_t key; - hfs_catalog_keyed_record_t rec; hfslib_find_catalog_record_with_cnid(vol, d->parent_cnid, &rec, &key, NULL); stp = &st; hfs_stat(vol, &rec, stp, 0, NULL); } - if(filler(buf, "..", stp, 2)) + int ret; +#if FUSE_DARWIN_ENABLE_EXTENSIONS + ret = filler(buf, "..", stp ? &stat_to_fuse_darwin_attr(rec,*stp) : NULL, 2, stp ? FUSE_FILL_DIR_PLUS : 0); +#elif FUSE_VERSION >= 30 + ret = filler(buf, "..", stp, 2, stp ? FUSE_FILL_DIR_PLUS : 0); +#else + ret = filler(buf, "..", stp, 2); +#endif + if(ret) return 0; } @@ -252,14 +338,33 @@ struct stat st = {0}; hfs_stat(vol,d->records+i,&st,0,NULL); - if(filler(buf,pelem,&st,i+3)) + int ret; +#if FUSE_DARWIN_ENABLE_EXTENSIONS + ret = filler(buf,pelem,&stat_to_fuse_darwin_attr(d->records[i],st),i+3,FUSE_FILL_DIR_PLUS); +#elif FUSE_VERSION >= 30 + ret = filler(buf,pelem,&st,i+3,FUSE_FILL_DIR_PLUS); +#else + ret = filler(buf,pelem,&st,i+3); +#endif + if(ret) break; } free(fullpath); return min(ret,0); } - +#if FUSE_DARWIN_ENABLE_EXTENSIONS +static int hfsfuse_statfs(const char* path, struct statfs* st) { + hfs_volume* vol = fuse_get_context()->private_data; + st->f_bsize = vol->vh.block_size; + st->f_blocks = vol->vh.total_blocks; + st->f_bfree = vol->vh.free_blocks; + st->f_bavail = st->f_bfree; + st->f_files = UINT32_MAX - HFS_CNID_USER; + st->f_ffree = st->f_files - vol->vh.file_count - vol->vh.folder_count; + return 0; +} +#else static int hfsfuse_statfs(const char* path, struct statvfs* st) { hfs_volume* vol = fuse_get_context()->private_data; st->f_bsize = vol->vh.block_size; @@ -274,8 +379,9 @@ st->f_namemax = HFS_NAME_MAX; return 0; } +#endif -#ifdef __APPLE__ +#if defined(__APPLE__) && FUSE_VERSION < 30 static int hfsfuse_getxtimes(const char* path, struct timespec* bkuptime, struct timespec* crtime) { hfs_volume* vol = fuse_get_context()->private_data; hfs_catalog_keyed_record_t rec; hfs_catalog_key_t key; @@ -471,7 +577,7 @@ return ret; } -#ifndef __APPLE__ +#if !(FUSE_DARWIN_ENABLE_EXTENSIONS || (defined(__APPLE__) && FUSE_VERSION < 30)) #ifdef __HAIKU__ static inline char hex4b(uint8_t dec) { return dec < 10 ? '0' + dec : 'a' + (dec-10); @@ -500,6 +606,9 @@ #endif static struct fuse_operations hfsfuse_ops = { +#if FUSE_VERSION >= 30 + .init = hfsfuse_init, +#endif .destroy = hfsfuse_destroy, .open = hfsfuse_open, .opendir = hfsfuse_opendir, @@ -510,20 +619,22 @@ .statfs = hfsfuse_statfs, .getattr = hfsfuse_getattr, .readlink = hfsfuse_readlink, +#if FUSE_VERSION < 30 .fgetattr = hfsfuse_fgetattr, +#endif .listxattr = hfsfuse_listxattr, -#ifdef __APPLE__ +#if FUSE_DARWIN_ENABLE_EXTENSIONS || (defined(__APPLE__) && FUSE_VERSION < 30) .getxattr = hfsfuse_getxattr_offset, #else .getxattr = hfsfuse_getxattr, #endif -#ifdef __APPLE__ +#if defined(__APPLE__) && FUSE_VERSION < 30 .getxtimes = hfsfuse_getxtimes, #endif -#if FUSE_VERSION >= 29 +#if FUSE_VERSION >= 29 && FUSE_VERSION < 30 .flag_nopath = 1, #endif -#if FUSE_VERSION >= 28 +#if FUSE_VERSION >= 28 && FUSE_VERSION < 30 .flag_nullpath_ok = 1 #endif }; @@ -668,14 +779,19 @@ case HFSFUSE_OPT_KEY_HELP: case HFSFUSE_OPT_KEY_FULLHELP: { help(args->argv[0], cfg); - fuse_opt_add_arg(args, "-ho"); -#ifndef __HAIKU__ // this is declared in the userlandfs headers but isn't actually in the library +#if FUSE_VERSION < 30 && !defined(__HAIKU__) // this is declared in the userlandfs headers but isn't actually in the library fuse_parse_cmdline(args, NULL, NULL, NULL); #endif if(key == HFSFUSE_OPT_KEY_FULLHELP) { +#if FUSE_VERSION < 30 + fuse_opt_add_arg(args, "-ho"); // fuse_mount and fuse_new print their own set of options fuse_mount("", args); fuse_new(NULL, args, NULL, 0, NULL); +#else + fuse_opt_add_arg(args, "-h"); + fuse_main(args->argc, args->argv, &hfsfuse_ops, NULL); +#endif } fuse_opt_free_args(args); exit(0); @@ -745,7 +861,9 @@ fuse_opt_add_opt(&opts, "ro"); if(!cfg.noallow_other) fuse_opt_add_opt(&opts, "allow_other"); +#if FUSE_VERSION < 30 fuse_opt_add_opt(&opts, "use_ino"); +#endif fuse_opt_add_opt(&opts, "subtype=hfs"); hfsfuse_opt_add_opt_escaped(&opts, fsname); fuse_opt_add_arg(&args, "-o"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hfsfuse-0.289/src/version.h new/hfsfuse-0.292/src/version.h --- old/hfsfuse-0.289/src/version.h 2025-03-29 18:44:37.000000000 +0100 +++ new/hfsfuse-0.292/src/version.h 2025-05-21 00:46:21.000000000 +0200 @@ -1 +1 @@ -#define HFSFUSE_VERSION_STRING "0.289-b0dcb93" +#define HFSFUSE_VERSION_STRING "0.292-11bb8da"