Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ifuse for openSUSE:Factory checked in at 2026-06-15 19:43:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ifuse (Old) and /work/SRC/openSUSE:Factory/.ifuse.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ifuse" Mon Jun 15 19:43:47 2026 rev:16 rq:1359287 version:1.2.1 Changes: -------- --- /work/SRC/openSUSE:Factory/ifuse/ifuse.changes 2025-06-20 16:51:17.640936911 +0200 +++ /work/SRC/openSUSE:Factory/.ifuse.new.1981/ifuse.changes 2026-06-15 19:46:56.212196888 +0200 @@ -1,0 +2,8 @@ +Wed Jun 03 15:40:25 UTC 2026 - Kilian Knörzer <[email protected]> + +- Update to version 1.2.1: + * Fixed several issues and updated compatibility with newer iOS + devices. +- Delete ifuse-1.1.4-fuse3.patch + +------------------------------------------------------------------- Old: ---- ifuse-1.1.4-fuse3.patch ifuse-1.1.4.tar.bz2 New: ---- ifuse-1.2.1.tar.bz2 ----------(Old B)---------- Old: devices. - Delete ifuse-1.1.4-fuse3.patch ----------(Old E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ifuse.spec ++++++ --- /var/tmp/diff_new_pack.T0UZWE/_old 2026-06-15 19:46:59.320327141 +0200 +++ /var/tmp/diff_new_pack.T0UZWE/_new 2026-06-15 19:46:59.328327477 +0200 @@ -18,17 +18,14 @@ Name: ifuse -Version: 1.1.4 +Version: 1.2.1 Release: 0 Summary: Filesystem access for Apple devices License: LGPL-2.0-or-later Group: System/Filesystems URL: https://www.libimobiledevice.org Source: https://github.com/libimobiledevice/ifuse/releases/download/%{version}/%{name}-%{version}.tar.bz2 -Patch0: ifuse-1.1.4-fuse3.patch -# for ifuse-1.1.4-fuse3.patch -BuildRequires: autoconf -BuildRequires: automake + BuildRequires: libimobiledevice-devel >= 1.3.0 BuildRequires: libplist-2_0-devel >= 2.2.0 BuildRequires: pkgconfig @@ -45,8 +42,6 @@ %build export CPPFLAGS=-D_FILE_OFFSET_BITS=64 -# for ifuse-1.1.4-fuse3.patch -autoreconf -fiv %configure %make_build ++++++ ifuse-1.1.4.tar.bz2 -> ifuse-1.2.1.tar.bz2 ++++++ ++++ 44145 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ifuse-1.1.4/NEWS new/ifuse-1.2.1/NEWS --- old/ifuse-1.1.4/NEWS 2020-06-15 20:41:50.000000000 +0200 +++ new/ifuse-1.2.1/NEWS 2026-04-22 09:55:30.000000000 +0200 @@ -1,3 +1,18 @@ +Version 1.2.1 +~~~~~~~~~~~~~ + +Bugfix Release + +* Changes: + - Fix FUSE capability flags set during initialization causing data corruption + +Version 1.2.0 +~~~~~~~~~~~~~ + +* Changes: + - Switch to libfuse 3 + - Require libimobiledevice 1.4.0 + Version 1.1.4 ~~~~~~~~~~~~~ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ifuse-1.1.4/README.md new/ifuse-1.2.1/README.md --- old/ifuse-1.1.4/README.md 2020-06-15 19:01:17.000000000 +0200 +++ new/ifuse-1.2.1/README.md 2026-04-22 10:02:53.000000000 +0200 @@ -2,6 +2,26 @@ *A fuse filesystem implementation to access the contents of iOS devices.* + + +:warning: **Version 1.2.0 has a serious bug that results in data corruption. +Regression was introduced in commit [36956a](/../../commit/36956a5179e224f57ebb9d0f01314c09c8bf0f97) +and fixed in Version 1.2.1 with commit [903a29](/../../commit/903a29c7424028304aeef137d7c24e176b73fccf).** + +## Table of Contents +- [Features](#features) +- [Building](#building) + - [Prerequisites](#prerequisites) + - [Linux (Debian/Ubuntu based)](#linux-debianubuntu-based) + - [macOS](#macos) + - [Configuring the source tree](#configuring-the-source-tree) + - [Building and installation](#building-and-installation) +- [Usage](#usage) +- [Contributing](#contributing) +- [Links](#links) +- [License](#license) +- [Credits](#credits) + ## Features This project allows mounting various directories of an iOS device locally using @@ -15,56 +35,167 @@ - **Browse**: Allows to retrieve a list of installed file-sharing enabled apps - **Implementation**: Uses [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice) for communication with the device -## Installation / Getting started +## Building + +### Prerequisites + +You need to have a working compiler (gcc/clang) and development environent +available. This project uses autotools for the build process, allowing to +have common build steps across different platforms. +Only the prerequisites differ and they are described in this section. + +#### Linux (Debian/Ubuntu based) + +* Install all required dependencies and build tools: + ```shell + sudo apt-get install \ + build-essential \ + pkg-config \ + checkinstall \ + git \ + autoconf \ + automake \ + libtool-bin \ + libplist-dev \ + libimobiledevice-dev \ + libfuse3-dev \ + usbmuxd + ``` + +* [usbmuxd](https://github.com/libimobiledevice/usbmuxd) must be properly installed for `ifuse` to be able to +communicate with devices. + +* Note: On some systems, you may have to load the `fuse` kernel +module first and to ensure that you are a member of the `fuse` group: + + ```shell + sudo modprobe fuse + sudo adduser $USER fuse + ``` + + You can check your membership of the `fuse` group with: + + ```shell + id | grep fuse && echo yes! || echo not yet... + ``` + + If you have just added yourself, you will need to logout and log back + in for the group change to become visible. + + +#### macOS + +* Make sure the Xcode command line tools are installed. + + Use either [MacPorts](https://www.macports.org/) + or [Homebrew](https://brew.sh/) to install `automake`, `autoconf`, and `libtool`. + + Using MacPorts: + ```shell + sudo port install libtool autoconf automake + ``` + + Using Homebrew: + ```shell + brew install libtool autoconf automake + ``` + + `ifuse` has a few dependencies from the libimobiledevice project. + You will have to build and install the following: + * [libplist](https://github.com/libimobiledevice/libplist) + * [libimobiledevice-glue](https://github.com/libimobiledevice/libimobiledevice-glue) + * [libusbmuxd](https://github.com/libimobiledevice/libusbmuxd) + * [libimobiledevice](https://github.com/libimobiledevice/libimobiledevice) + + Check their `README.md` for building and installation instructions. + +* Download [macFUSE](https://github.com/macfuse/macfuse/releases/) dmg, mount it, and double click the `Install macFUSE` installer. + This will also install the libfuse library and development files. + + Note: For macFUSE to work, you need to allow the macFUSE system extension in *Settings* -> *Privacy & Security* -> *Security*. Note that changes will require a system restart. + -### Debian / Ubuntu Linux +### Configuring the source tree + +You can build the source code from a git checkout, or from a `.tar.bz2` release tarball from [Releases](https://github.com/libimobiledevice/ifuse/releases). +Before we can build it, the source tree has to be configured for building. The steps depend on where you got the source from. + +* **From git** + + If you haven't done already, clone the actual project repository and change into the directory. + ```shell + git clone https://github.com/libimobiledevice/ifuse.git + cd ifuse + ``` + + Configure the source tree for building: + ```shell + ./autogen.sh + ``` + +* **From release tarball (.tar.bz2)** + + When using an official [release tarball](https://github.com/libimobiledevice/ifuse/releases) (`ifuse-x.y.z.tar.bz2`) + the procedure is slightly different. + + Extract the tarball: + ```shell + tar xjf ifuse-x.y.z.tar.bz2 + cd ifuse-x.y.z + ``` + + Configure the source tree for building: + ```shell + ./configure + ``` + +Both `./configure` and `./autogen.sh` (which generates and calls `configure`) accept a few options, for example `--prefix` to allow +building for a different target folder. You can simply pass them like this: -First install all required dependencies and build tools: ```shell -sudo apt-get install \ - build-essential \ - checkinstall \ - git \ - autoconf \ - automake \ - libtool-bin \ - libplist-dev \ - libimobiledevice-dev \ - libfuse-dev \ - usbmuxd +./autogen.sh --prefix=/usr/local ``` - -Then clone the actual project repository: +or ```shell -git clone https://github.com/libimobiledevice/ifuse.git -cd ifuse +./configure --prefix=/usr/local ``` -Now you can build and install it: -```shell -./autogen.sh -make -sudo make install +Once the command is successful, the last few lines of output will look like this: ``` +[...] +config.status: creating config.h +config.status: config.h is unchanged +config.status: executing depfiles commands +config.status: executing libtool commands -### Setting up FUSE +Configuration for ifuse 1.2.0: +------------------------------------------- -Note that on some systems, you may have to load the `fuse` kernel -module first and to ensure that you are a member of the `fuse` group: + Install prefix: .........: /usr/local -```shell -sudo modprobe fuse -sudo adduser $USER fuse + Now type 'make' to build ifuse 1.2.0, + and then 'make install' for installation. ``` -You can check your membership of the `fuse` group with: +### Building and installation + +If you followed all the steps successfully, and `autogen.sh` or `configure` did not print any errors, +you are ready to build the project. This is simply done with ```shell -id | grep fuse && echo yes! || echo not yet... +make ``` -If you have just added yourself, you will need to logout and log back -in for the group change to become visible. +If no errors are emitted you are ready for installation. Depending on whether +the current user has permissions to write to the destination directory or not, +you would either run +```shell +make install +``` +_OR_ +```shell +sudo make install +``` ## Usage @@ -82,7 +213,7 @@ fusermount -u <mountpoint> ``` -By default, ifuse (via the AFC protocol) gives access to the `/var/root/Media/` +By default, ifuse (via the AFC protocol) gives access to the `/var/mobile/Media/` chroot on the device (containing music/pictures). This is the right and safe way to access the device. However, if the device has been jailbroken, a full view of the device's filesystem might be available using the following command @@ -96,10 +227,9 @@ install it and thus does not enable root filesystem access by default! Use with care as the AFC protocol was not made to access the root filesystem. -If using libimobiledevice >= 1.1.0, ifuse can also be used with the iTunes -file/document sharing feature. It allows you to exchange files with an -application on the device directly through it's documents folder by specifing -the application identifier like this: +**ifuse** can also be used with the iTunes file/document sharing feature. +It allows you to exchange files with an application on the device directly +through it's documents folder by specifing the application identifier like this: ```shell ifuse --documents <appid> <mountpoint> ``` @@ -140,7 +270,7 @@ Please make sure your contribution adheres to: * Try to follow the code style of the project -* Commit messages should describe the change well without being to short +* Commit messages should describe the change well without being too short * Try to split larger changes into individual commits of a common domain * Use your real name and a valid email address for your commits @@ -149,8 +279,8 @@ ## Links * Homepage: https://libimobiledevice.org/ -* Repository: https://git.libimobiledevice.org/ifuse.git -* Repository (Mirror): https://github.com/libimobiledevice/ifuse.git +* Repository: https://github.com/libimobiledevice/ifuse.git +* Repository (Mirror): https://git.libimobiledevice.org/ifuse.git * Issue Tracker: https://github.com/libimobiledevice/ifuse/issues * Mailing List: https://lists.libimobiledevice.org/mailman/listinfo/libimobiledevice-devel * Twitter: https://twitter.com/libimobiledev @@ -168,4 +298,4 @@ This project is an independent software application and has not been authorized, sponsored, or otherwise approved by Apple Inc. -README Updated on: 2020-06-13 +README Updated on: 2026-04-22 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ifuse-1.1.4/compile new/ifuse-1.2.1/compile --- old/ifuse-1.1.4/compile 2020-05-13 19:42:15.000000000 +0200 +++ new/ifuse-1.2.1/compile 2024-08-19 08:01:58.000000000 +0200 @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2018-03-07.03; # UTC +scriptversion=2024-06-19.01; # UTC -# Copyright (C) 1999-2018 Free Software Foundation, Inc. +# Copyright (C) 1999-2024 Free Software Foundation, Inc. # Written by Tom Tromey <[email protected]>. # # This program is free software; you can redistribute it and/or modify @@ -53,7 +53,7 @@ MINGW*) file_conv=mingw ;; - CYGWIN*) + CYGWIN* | MSYS*) file_conv=cygwin ;; *) @@ -67,7 +67,7 @@ mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; - cygwin/*) + cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) @@ -143,7 +143,7 @@ # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in - *.o | *.[oO][bB][jJ]) + *.o | *.lo | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift @@ -248,14 +248,17 @@ right script to run: please start by reading the file 'INSTALL'. Report bugs to <[email protected]>. +GNU Automake home page: <https://www.gnu.org/software/automake/>. +General help using GNU software: <https://www.gnu.org/gethelp/>. EOF exit $? ;; -v | --v*) - echo "compile $scriptversion" + echo "compile (GNU Automake) $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + clang-cl | *[/\\]clang-cl | clang-cl.exe | *[/\\]clang-cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ifuse-1.1.4/config.h.in new/ifuse-1.2.1/config.h.in --- old/ifuse-1.1.4/config.h.in 2020-06-13 04:35:58.000000000 +0200 +++ new/ifuse-1.2.1/config.h.in 2026-04-22 10:46:42.000000000 +0200 @@ -1,35 +1,35 @@ /* config.h.in. Generated from configure.ac by autoheader. */ -/* Define to 1 if you have the <arpa/inet.h> header file. */ -#undef HAVE_ARPA_INET_H +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if your system has a GNU libc compatible `malloc' function, and +/* Define to 1 if your system has a GNU libc compatible 'malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC -/* Define to 1 if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if your system has a GNU libc compatible `realloc' function, +/* Define to 1 if your system has a GNU libc compatible 'realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H +/* Define to 1 if you have the <stdio.h> header file. */ +#undef HAVE_STDIO_H + /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H -/* Define to 1 if you have the `strcasecmp' function. */ +/* Define to 1 if you have the 'strcasecmp' function. */ #undef HAVE_STRCASECMP -/* Define to 1 if you have the `strdup' function. */ +/* Define to 1 if you have the 'strdup' function. */ #undef HAVE_STRDUP -/* Define to 1 if you have the `strerror' function. */ +/* Define to 1 if you have the 'strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the <strings.h> header file. */ @@ -38,7 +38,7 @@ /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H -/* Define to 1 if you have the `strndup' function. */ +/* Define to 1 if you have the 'strndup' function. */ #undef HAVE_STRNDUP /* Define to 1 if you have the <sys/stat.h> header file. */ @@ -50,6 +50,9 @@ /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + /* Name of package */ #undef PACKAGE @@ -71,7 +74,9 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C89 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Version number of package */ @@ -87,7 +92,7 @@ #define below would cause a syntax error. */ #undef _UINT8_T -/* Define to empty if `const' does not conform to ANSI C. */ +/* Define to empty if 'const' does not conform to ANSI C. */ #undef const /* Define to rpl_malloc if the replacement function should be used. */ @@ -96,10 +101,10 @@ /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc -/* Define to `unsigned int' if <sys/types.h> does not define. */ +/* Define as 'unsigned int' if <stddef.h> doesn't define. */ #undef size_t -/* Define to `int' if <sys/types.h> does not define. */ +/* Define as 'int' if <sys/types.h> doesn't define. */ #undef ssize_t /* Define to the type of an unsigned integer type of width exactly 16 bits if diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ifuse-1.1.4/configure.ac new/ifuse-1.2.1/configure.ac --- old/ifuse-1.1.4/configure.ac 2020-06-09 18:20:32.000000000 +0200 +++ new/ifuse-1.2.1/configure.ac 2026-04-22 10:46:22.000000000 +0200 @@ -1,25 +1,30 @@ # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -AC_PREREQ(2.64) -AC_INIT([ifuse], [1.1.4], [https://github.com/libimobiledevice/ifuse/issues],, [https://libimobiledevice.org]) +AC_PREREQ(2.68) +AC_INIT([ifuse], [m4_esyscmd(./git-version-gen $RELEASE_VERSION)], [https://github.com/libimobiledevice/ifuse/issues],, [https://libimobiledevice.org]) AM_INIT_AUTOMAKE([dist-bzip2 no-dist-gzip check-news]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES]) AC_CONFIG_SRCDIR([src/]) AC_CONFIG_HEADERS([config.h]) +# Check if we have a version defined +if test -z $PACKAGE_VERSION; then + AC_MSG_ERROR([PACKAGE_VERSION is not defined. Make sure to configure a source tree checked out from git or that .tarball-version is present.]) +fi + # Checks for programs. AC_PROG_CC AM_PROG_CC_C_O +LT_INIT # Checks for libraries. -PKG_CHECK_MODULES(libimobiledevice, libimobiledevice-1.0 >= 1.3.0) -PKG_CHECK_MODULES(libfuse, fuse >= 2.7.0) -PKG_CHECK_MODULES(libplist, libplist-2.0 >= 2.2.0) +PKG_CHECK_MODULES(libimobiledevice, libimobiledevice-1.0 >= 1.4.0) +PKG_CHECK_MODULES(libfuse, fuse3 >= 3.0.0) +PKG_CHECK_MODULES(libplist, libplist-2.0 >= 2.3.0) # Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS([arpa/inet.h stdint.h stdlib.h string.h]) +AC_CHECK_HEADERS([stdint.h stdlib.h string.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST @@ -36,18 +41,18 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) -AC_OUTPUT([ +AC_CONFIG_FILES([ Makefile src/Makefile docs/Makefile ]) +AC_OUTPUT echo " Configuration for $PACKAGE $VERSION: ------------------------------------------- - Install prefix ..........: $prefix - libimobiledevice API ....: $libimobiledevice_VERSION + Install prefix: .........: $prefix Now type 'make' to build $PACKAGE $VERSION, and then 'make install' for installation. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ifuse-1.1.4/missing new/ifuse-1.2.1/missing --- old/ifuse-1.1.4/missing 2020-05-13 19:42:15.000000000 +0200 +++ new/ifuse-1.2.1/missing 2024-08-19 08:01:58.000000000 +0200 @@ -1,9 +1,11 @@ #! /bin/sh -# Common wrapper for a few potentially missing GNU programs. +# Common wrapper for a few potentially missing GNU and other programs. -scriptversion=2018-03-07.03; # UTC +scriptversion=2024-06-07.14; # UTC -# Copyright (C) 1996-2018 Free Software Foundation, Inc. +# shellcheck disable=SC2006,SC2268 # we must support pre-POSIX shells + +# Copyright (C) 1996-2024 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard <[email protected]>, 1996. # This program is free software; you can redistribute it and/or modify @@ -54,18 +56,20 @@ -v, --version output version information and exit Supported PROGRAM values: - aclocal autoconf autoheader autom4te automake makeinfo - bison yacc flex lex help2man +aclocal autoconf autogen autoheader autom4te automake autoreconf +bison flex help2man lex makeinfo perl yacc Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. -Send bug reports to <[email protected]>." +Report bugs to <[email protected]>. +GNU Automake home page: <https://www.gnu.org/software/automake/>. +General help using GNU software: <https://www.gnu.org/gethelp/>." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" + echo "missing (GNU Automake) $scriptversion" exit $? ;; @@ -108,7 +112,7 @@ program_details () { case $1 in - aclocal|automake) + aclocal|automake|autoreconf) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" @@ -123,6 +127,9 @@ echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; + *) + : + ;; esac } @@ -137,48 +144,55 @@ printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + autoheader_deps="'acconfig.h'" + automake_deps="'Makefile.am'" + aclocal_deps="'acinclude.m4'" case $normalized_program in + aclocal*) + echo "You should only need it if you modified $aclocal_deps or" + echo "$configure_deps." + ;; autoconf*) - echo "You should only need it if you modified 'configure.ac'," - echo "or m4 files included by it." - program_details 'autoconf' + echo "You should only need it if you modified $configure_deps." + ;; + autogen*) + echo "You should only need it if you modified a '.def' or '.tpl' file." + echo "You may want to install the GNU AutoGen package:" + echo "<$gnu_software_URL/autogen/>" ;; autoheader*) - echo "You should only need it if you modified 'acconfig.h' or" + echo "You should only need it if you modified $autoheader_deps or" echo "$configure_deps." - program_details 'autoheader' ;; automake*) - echo "You should only need it if you modified 'Makefile.am' or" - echo "$configure_deps." - program_details 'automake' - ;; - aclocal*) - echo "You should only need it if you modified 'acinclude.m4' or" + echo "You should only need it if you modified $automake_deps or" echo "$configure_deps." - program_details 'aclocal' ;; - autom4te*) + autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." - program_details 'autom4te' + ;; + autoreconf*) + echo "You should only need it if you modified $aclocal_deps or" + echo "$automake_deps or $autoheader_deps or $automake_deps or" + echo "$configure_deps." ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; - lex*|flex*) - echo "You should only need it if you modified a '.l' file." - echo "You may want to install the Fast Lexical Analyzer package:" - echo "<$flex_URL>" - ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." @@ -189,6 +203,12 @@ echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; + perl*) + echo "You should only need it to run GNU Autoconf, GNU Automake, " + echo " assorted other tools, or if you modified a Perl source file." + echo "You may want to install the Perl 5 language interpreter:" + echo "<$perl_URL>" + ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" @@ -197,6 +217,7 @@ echo "case some other package contains this missing '$1' program." ;; esac + program_details "$normalized_program" } give_advice "$1" | sed -e '1s/^/WARNING: /' \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ifuse-1.1.4/src/ifuse.c new/ifuse-1.2.1/src/ifuse.c --- old/ifuse-1.1.4/src/ifuse.c 2020-06-09 18:20:32.000000000 +0200 +++ new/ifuse-1.2.1/src/ifuse.c 2026-04-22 09:24:37.000000000 +0200 @@ -19,7 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#define FUSE_USE_VERSION 26 +#define FUSE_USE_VERSION 30 +#define FUSE_DARWIN_ENABLE_EXTENSIONS 0 #ifdef HAVE_CONFIG_H #include <config.h> @@ -205,77 +206,69 @@ return 0; } -static int ifuse_getattr(const char *path, struct stat *stbuf) +static int ifuse_getattr(const char *path, struct stat *stbuf, struct fuse_file_info *fi) { - int i; int res = 0; - char **info = NULL; + plist_t info = NULL; afc_client_t afc = fuse_get_context()->private_data; - afc_error_t ret = afc_get_file_info(afc, path, &info); + afc_error_t ret = afc_get_file_info_plist(afc, path, &info); memset(stbuf, 0, sizeof(struct stat)); if (ret != AFC_E_SUCCESS) { int e = get_afc_error_as_errno(ret); - res = -e; + return -e; } else if (!info) { - res = -1; - } else { - // get file attributes from info list - for (i = 0; info[i]; i += 2) { - if (!strcmp(info[i], "st_size")) { - stbuf->st_size = atoll(info[i+1]); - } else if (!strcmp(info[i], "st_blocks")) { - stbuf->st_blocks = atoi(info[i+1]); - } else if (!strcmp(info[i], "st_ifmt")) { - if (!strcmp(info[i+1], "S_IFREG")) { - stbuf->st_mode = S_IFREG; - } else if (!strcmp(info[i+1], "S_IFDIR")) { - stbuf->st_mode = S_IFDIR; - } else if (!strcmp(info[i+1], "S_IFLNK")) { - stbuf->st_mode = S_IFLNK; - } else if (!strcmp(info[i+1], "S_IFBLK")) { - stbuf->st_mode = S_IFBLK; - } else if (!strcmp(info[i+1], "S_IFCHR")) { - stbuf->st_mode = S_IFCHR; - } else if (!strcmp(info[i+1], "S_IFIFO")) { - stbuf->st_mode = S_IFIFO; - } else if (!strcmp(info[i+1], "S_IFSOCK")) { - stbuf->st_mode = S_IFSOCK; - } - } else if (!strcmp(info[i], "st_nlink")) { - stbuf->st_nlink = atoi(info[i+1]); - } else if (!strcmp(info[i], "st_mtime")) { - stbuf->st_mtime = (time_t)(atoll(info[i+1]) / 1000000000); - } + return -1; + } + + stbuf->st_size = plist_dict_get_uint(info, "st_size"); + stbuf->st_blocks = plist_dict_get_uint(info, "st_blocks"); + const char* s_ifmt = plist_get_string_ptr(plist_dict_get_item(info, "st_ifmt"), NULL); + if (s_ifmt) { + if (!strcmp(s_ifmt, "S_IFREG")) { + stbuf->st_mode = S_IFREG; + } else if (!strcmp(s_ifmt, "S_IFDIR")) { + stbuf->st_mode = S_IFDIR; + } else if (!strcmp(s_ifmt, "S_IFLNK")) { + stbuf->st_mode = S_IFLNK; + } else if (!strcmp(s_ifmt, "S_IFBLK")) { + stbuf->st_mode = S_IFBLK; + } else if (!strcmp(s_ifmt, "S_IFCHR")) { + stbuf->st_mode = S_IFCHR; + } else if (!strcmp(s_ifmt, "S_IFIFO")) { + stbuf->st_mode = S_IFIFO; + } else if (!strcmp(s_ifmt, "S_IFSOCK")) { + stbuf->st_mode = S_IFSOCK; + } + } + stbuf->st_nlink = plist_dict_get_uint(info, "st_nlink"); + stbuf->st_mtime = (time_t)(plist_dict_get_uint(info, "st_mtime") / 1000000000); #ifdef _DARWIN_FEATURE_64_BIT_INODE - else if (!strcmp(info[i], "st_birthtime")) { /* available on iOS 7+ */ - stbuf->st_birthtime = (time_t)(atoll(info[i+1]) / 1000000000); - } + /* available on iOS 7+ */ + stbuf->st_birthtime = (time_t)(plist_dict_get_uint(info, "st_birthtime") / 1000000000); #endif - } - free_dictionary(info); + plist_free(info); - // set permission bits according to the file type - if (S_ISDIR(stbuf->st_mode)) { - stbuf->st_mode |= 0755; - } else if (S_ISLNK(stbuf->st_mode)) { - stbuf->st_mode |= 0777; - } else { - stbuf->st_mode |= 0644; - } + // set permission bits according to the file type + if (S_ISDIR(stbuf->st_mode)) { + stbuf->st_mode |= 0755; + } else if (S_ISLNK(stbuf->st_mode)) { + stbuf->st_mode |= 0777; + } else { + stbuf->st_mode |= 0644; + } - // and set some additional info - stbuf->st_uid = getuid(); - stbuf->st_gid = getgid(); + // and set some additional info + stbuf->st_uid = getuid(); + stbuf->st_gid = getgid(); - stbuf->st_blksize = g_blocksize; - } + stbuf->st_blksize = g_blocksize; return res; } -static int ifuse_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) +static int ifuse_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi, enum fuse_readdir_flags flags) { int i; char **dirs = NULL; @@ -287,7 +280,7 @@ return -ENOENT; for (i = 0; dirs[i]; i++) { - filler(buf, dirs[i], NULL, 0); + filler(buf, dirs[i], NULL, 0, 0); } free_dictionary(dirs); @@ -366,7 +359,7 @@ return bytes; } -static int ifuse_utimens(const char *path, const struct timespec tv[2]) +static int ifuse_utimens(const char *path, const struct timespec tv[2], struct fuse_file_info *fi) { afc_client_t afc = fuse_get_context()->private_data; uint64_t mtime = (uint64_t)tv[1].tv_sec * (uint64_t)1000000000 + (uint64_t)tv[1].tv_nsec; @@ -398,11 +391,11 @@ return 0; } -void *ifuse_init(struct fuse_conn_info *conn) +void *ifuse_init(struct fuse_conn_info *conn, struct fuse_config *cfg) { afc_client_t afc = NULL; - conn->async_read = 0; + conn->want &= ~FUSE_CAP_ASYNC_READ; if (house_arrest) { afc_client_new_from_house_arrest_client(house_arrest, &afc); @@ -415,16 +408,9 @@ if (afc) { // get file system block size - int i; - char **info_raw = NULL; - if ((AFC_E_SUCCESS == afc_get_device_info(afc, &info_raw)) && info_raw) { - for (i = 0; info_raw[i]; i+=2) { - if (!strcmp(info_raw[i], "FSBlockSize")) { - g_blocksize = atoi(info_raw[i + 1]); - break; - } - } - free_dictionary(info_raw); + plist_t info = NULL; + if ((AFC_E_SUCCESS == afc_get_device_info_plist(afc, &info)) && info) { + g_blocksize = plist_dict_get_uint(info, "FSBlockSize"); } } @@ -447,6 +433,16 @@ return 0; } +int ifuse_chmod(const char *path, mode_t mode, struct fuse_file_info *fi) +{ + return 0; +} + +int ifuse_chown(const char *file, uid_t user, gid_t group, struct fuse_file_info *fi) +{ + return 0; +} + int ifuse_statfs(const char *path, struct statvfs *stats) { afc_client_t afc = fuse_get_context()->private_data; @@ -482,7 +478,7 @@ return 0; } -int ifuse_truncate(const char *path, off_t size) +int ifuse_truncate(const char *path, off_t size, struct fuse_file_info *fi) { afc_client_t afc = fuse_get_context()->private_data; afc_error_t err = afc_truncate(afc, path, size); @@ -493,18 +489,6 @@ return 0; } -int ifuse_ftruncate(const char *path, off_t size, struct fuse_file_info *fi) -{ - afc_client_t afc = fuse_get_context()->private_data; - - afc_error_t err = afc_file_truncate(afc, fi->fh, size); - if (err != AFC_E_SUCCESS) { - int res = get_afc_error_as_errno(err); - return -res; - } - return 0; -} - int ifuse_readlink(const char *path, char *linktarget, size_t buflen) { int i, ret; @@ -566,7 +550,7 @@ return -get_afc_error_as_errno(err); } -int ifuse_rename(const char *from, const char *to) +int ifuse_rename(const char *from, const char *to, unsigned int flags) { afc_client_t afc = fuse_get_context()->private_data; @@ -599,7 +583,6 @@ .read = ifuse_read, .write = ifuse_write, .truncate = ifuse_truncate, - .ftruncate = ifuse_ftruncate, .readlink = ifuse_readlink, .symlink = ifuse_symlink, .link = ifuse_link, @@ -607,6 +590,8 @@ .rename = ifuse_rename, .utimens = ifuse_utimens, .fsync = ifuse_fsync, + .chmod = ifuse_chmod, + .chown = ifuse_chown, .release = ifuse_release, .init = ifuse_init, .destroy = ifuse_cleanup @@ -820,9 +805,7 @@ } else { printf("ERROR: No device found!\n"); } - fprintf(stderr, "Is the device properly connected?\n"); - fprintf(stderr, "If it is make sure that your user has permissions to access the raw USB device.\n"); - fprintf(stderr, "If you're still having issues try unplugging the device and reconnecting it.\n"); + fprintf(stderr, "Ensure that the device is connected and usbmuxd is properly installed.\n"); return EXIT_FAILURE; }
