Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libfsfat for openSUSE:Factory 
checked in at 2026-08-24 12:12:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libfsfat (Old)
 and      /work/SRC/openSUSE:Factory/.libfsfat.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libfsfat"

Mon Aug 24 12:12:07 2026 rev:14 rq:1373342 version:20260823

Changes:
--------
--- /work/SRC/openSUSE:Factory/libfsfat/libfsfat.changes        2026-08-22 
21:38:58.000279662 +0200
+++ /work/SRC/openSUSE:Factory/.libfsfat.new.1258/libfsfat.changes      
2026-08-24 12:17:33.510685067 +0200
@@ -1,0 +2,7 @@
+Mon Aug 24 07:41:32 UTC 2026 - Jan Engelhardt <[email protected]>
+
+- Update to release 20260823
+  * Improved error handling about timestamp reading
+  * A bit of EXFAT support: support for directory data stream flags
+
+-------------------------------------------------------------------

Old:
----
  libfsfat-experimental-20260822.tar.gz

New:
----
  libfsfat-experimental-20260823.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libfsfat.spec ++++++
--- /var/tmp/diff_new_pack.HA6DjN/_old  2026-08-24 12:17:34.335714416 +0200
+++ /var/tmp/diff_new_pack.HA6DjN/_new  2026-08-24 12:17:34.338714523 +0200
@@ -20,7 +20,7 @@
 
 Name:           libfsfat
 %define lname  libfsfat1
-Version:        20260822
+Version:        20260823
 Release:        0
 Summary:        Library and tools for accessing the FAT filesystem
 License:        LGPL-3.0-or-later

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.HA6DjN/_old  2026-08-24 12:17:34.418717369 +0200
+++ /var/tmp/diff_new_pack.HA6DjN/_new  2026-08-24 12:17:34.425717618 +0200
@@ -1,5 +1,5 @@
-mtime: 1787409833
-commit: cd7644cf810477b404170bae21e7e605a68b60db80502d86baf0ff7ec66cde23
+mtime: 1787557355
+commit: ee7e87f13078860afd76726f88c8fa1ebadde6076583652ee921c6d04e90baa5
 url: https://src.opensuse.org/security-forensics/libfsfat
 revision: master
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-08-24 09:42:35.000000000 +0200
@@ -0,0 +1 @@
+.osc

++++++ libfsfat-experimental-20260822.tar.gz -> 
libfsfat-experimental-20260823.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/common/config.h 
new/libfsfat-20260823/common/config.h
--- old/libfsfat-20260822/common/config.h       2026-08-22 12:52:14.000000000 
+0200
+++ new/libfsfat-20260823/common/config.h       2026-08-22 18:58:30.000000000 
+0200
@@ -611,7 +611,7 @@
 #define PACKAGE_NAME "libfsfat"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libfsfat 20260822"
+#define PACKAGE_STRING "libfsfat 20260823"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "libfsfat"
@@ -620,7 +620,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "20260822"
+#define PACKAGE_VERSION "20260823"
 
 /* The size of 'int', as computed by sizeof. */
 #define SIZEOF_INT 4
@@ -649,7 +649,7 @@
 /* #undef TM_IN_SYS_TIME */
 
 /* Version number of package */
-#define VERSION "20260822"
+#define VERSION "20260823"
 
 /* Number of bits in a file offset, on hosts where this is settable. */
 /* #undef _FILE_OFFSET_BITS */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/configure 
new/libfsfat-20260823/configure
--- old/libfsfat-20260822/configure     2026-08-22 12:52:06.000000000 +0200
+++ new/libfsfat-20260823/configure     2026-08-22 18:58:22.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for libfsfat 20260822.
+# Generated by GNU Autoconf 2.72 for libfsfat 20260823.
 #
 # Report bugs to <https://github.com/libyal/libfsfat/issues>.
 #
@@ -614,8 +614,8 @@
 # Identity of this package.
 PACKAGE_NAME='libfsfat'
 PACKAGE_TARNAME='libfsfat'
-PACKAGE_VERSION='20260822'
-PACKAGE_STRING='libfsfat 20260822'
+PACKAGE_VERSION='20260823'
+PACKAGE_STRING='libfsfat 20260823'
 PACKAGE_BUGREPORT='https://github.com/libyal/libfsfat/issues'
 PACKAGE_URL=''
 
@@ -1700,7 +1700,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-'configure' configures libfsfat 20260822 to adapt to many kinds of systems.
+'configure' configures libfsfat 20260823 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1771,7 +1771,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libfsfat 20260822:";;
+     short | recursive ) echo "Configuration of libfsfat 20260823:";;
    esac
   cat <<\_ACEOF
 
@@ -2048,7 +2048,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libfsfat configure 20260822
+libfsfat configure 20260823
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2790,7 +2790,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libfsfat $as_me 20260822, which was
+It was created by libfsfat $as_me 20260823, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -4487,7 +4487,7 @@
 
 # Define the identity of the package.
  PACKAGE='libfsfat'
- VERSION='20260822'
+ VERSION='20260823'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -72502,7 +72502,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libfsfat $as_me 20260822, which was
+This file was extended by libfsfat $as_me 20260823, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -72570,7 +72570,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-libfsfat config.status 20260822
+libfsfat config.status 20260823
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/configure.ac 
new/libfsfat-20260823/configure.ac
--- old/libfsfat-20260822/configure.ac  2026-08-22 12:42:13.000000000 +0200
+++ new/libfsfat-20260823/configure.ac  2026-08-22 18:40:46.000000000 +0200
@@ -2,7 +2,7 @@
 
 AC_INIT(
   [libfsfat],
-  [20260822],
+  [20260823],
   [https://github.com/libyal/libfsfat/issues])
 
 AC_CONFIG_SRCDIR(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/dpkg/changelog 
new/libfsfat-20260823/dpkg/changelog
--- old/libfsfat-20260822/dpkg/changelog        2026-08-22 12:52:14.000000000 
+0200
+++ new/libfsfat-20260823/dpkg/changelog        2026-08-22 18:58:30.000000000 
+0200
@@ -1,5 +1,5 @@
-libfsfat (20260822-1) unstable; urgency=low
+libfsfat (20260823-1) unstable; urgency=low
 
   * Auto-generated
 
- -- Joachim Metz <[email protected]>  Sat, 22 Aug 2026 12:52:13 +0200
+ -- Joachim Metz <[email protected]>  Sat, 22 Aug 2026 18:58:30 +0200
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/fsfattools/mount_file_entry.c 
new/libfsfat-20260823/fsfattools/mount_file_entry.c
--- old/libfsfat-20260822/fsfattools/mount_file_entry.c 2026-08-19 
06:24:10.000000000 +0200
+++ new/libfsfat-20260823/fsfattools/mount_file_entry.c 2026-08-22 
18:29:31.000000000 +0200
@@ -254,6 +254,7 @@
 {
        static char *function  = "mount_file_entry_get_creation_time";
        uint64_t fat_timestamp = 0;
+       int result             = 0;
 
 #if defined( WINAPI )
        uint64_t filetime      = 0;
@@ -283,10 +284,12 @@
 
                return( -1 );
        }
-       if( libfsfat_file_entry_get_creation_time(
-            file_entry->fsfat_file_entry,
-            &fat_timestamp,
-            error ) != 1 )
+       result = libfsfat_file_entry_get_creation_time(
+                 file_entry->fsfat_file_entry,
+                 &fat_timestamp,
+                 error );
+
+       if( result == -1 )
        {
                libcerror_error_set(
                 error,
@@ -297,19 +300,26 @@
 
                return( -1 );
        }
-#if defined( WINAPI )
-       if( fat_timestamp != 0 )
+       else if( result == 0 )
        {
-               filetime = ( fat_timestamp + 1196000640000UL ) * 100000UL;
+               *creation_time = 0;
        }
-       *creation_time = filetime;
-#else
-       if( fat_timestamp != 0 )
+       else
        {
-               posix_time = (int64_t) ( ( fat_timestamp + 3155328000000UL ) * 
10000000UL );
-       }
-       *creation_time = (uint64_t) posix_time;
+#if defined( WINAPI )
+               if( fat_timestamp != 0 )
+               {
+                       filetime = ( fat_timestamp + 1196000640000UL ) * 
100000UL;
+               }
+               *creation_time = filetime;
+#else
+               if( fat_timestamp != 0 )
+               {
+                       posix_time = (int64_t) ( ( fat_timestamp + 
3155328000000UL ) * 10000000UL );
+               }
+               *creation_time = (uint64_t) posix_time;
 #endif
+       }
        return( 1 );
 }
 
@@ -325,6 +335,7 @@
 {
        static char *function  = "mount_file_entry_get_access_time";
        uint64_t fat_timestamp = 0;
+       int result             = 0;
 
 #if defined( WINAPI )
        uint64_t filetime      = 0;
@@ -354,10 +365,12 @@
 
                return( -1 );
        }
-       if( libfsfat_file_entry_get_access_time(
-            file_entry->fsfat_file_entry,
-            &fat_timestamp,
-            error ) != 1 )
+       result = libfsfat_file_entry_get_access_time(
+                 file_entry->fsfat_file_entry,
+                 &fat_timestamp,
+                 error );
+
+       if( result == -1 )
        {
                libcerror_error_set(
                 error,
@@ -368,19 +381,26 @@
 
                return( -1 );
        }
-#if defined( WINAPI )
-       if( fat_timestamp != 0 )
+       else if( result == 0 )
        {
-               filetime = ( fat_timestamp + 1196000640000UL ) * 100000UL;
+               *access_time = 0;
        }
-       *access_time = filetime;
-#else
-       if( fat_timestamp != 0 )
+       else
        {
-               posix_time = (int64_t) ( ( fat_timestamp + 3155328000000UL ) * 
10000000UL );
-       }
-       *access_time = (uint64_t) posix_time;
+#if defined( WINAPI )
+               if( fat_timestamp != 0 )
+               {
+                       filetime = ( fat_timestamp + 1196000640000UL ) * 
100000UL;
+               }
+               *access_time = filetime;
+#else
+               if( fat_timestamp != 0 )
+               {
+                       posix_time = (int64_t) ( ( fat_timestamp + 
3155328000000UL ) * 10000000UL );
+               }
+               *access_time = (uint64_t) posix_time;
 #endif
+       }
        return( 1 );
 }
 
@@ -396,6 +416,7 @@
 {
        static char *function  = "mount_file_entry_get_modification_time";
        uint64_t fat_timestamp = 0;
+       int result             = 0;
 
 #if defined( WINAPI )
        uint64_t filetime      = 0;
@@ -425,10 +446,12 @@
 
                return( -1 );
        }
-       if( libfsfat_file_entry_get_modification_time(
-            file_entry->fsfat_file_entry,
-            &fat_timestamp,
-            error ) != 1 )
+       result = libfsfat_file_entry_get_modification_time(
+                 file_entry->fsfat_file_entry,
+                 &fat_timestamp,
+                 error );
+
+       if( result == -1 )
        {
                libcerror_error_set(
                 error,
@@ -439,19 +462,26 @@
 
                return( -1 );
        }
-#if defined( WINAPI )
-       if( fat_timestamp != 0 )
+       else if( result == 0 )
        {
-               filetime = ( fat_timestamp + 1196000640000UL ) * 100000UL;
+               *modification_time = 0;
        }
-       *modification_time = filetime;
-#else
-       if( fat_timestamp != 0 )
+       else
        {
-               posix_time = (int64_t) ( ( fat_timestamp + 3155328000000UL ) * 
10000000UL );
-       }
-       *modification_time = (uint64_t) posix_time;
+#if defined( WINAPI )
+               if( fat_timestamp != 0 )
+               {
+                       filetime = ( fat_timestamp + 1196000640000UL ) * 
100000UL;
+               }
+               *modification_time = filetime;
+#else
+               if( fat_timestamp != 0 )
+               {
+                       posix_time = (int64_t) ( ( fat_timestamp + 
3155328000000UL ) * 10000000UL );
+               }
+               *modification_time = (uint64_t) posix_time;
 #endif
+       }
        return( 1 );
 }
 
@@ -504,6 +534,7 @@
 {
        static char *function         = "mount_file_entry_get_file_mode";
        uint16_t file_attribute_flags = 0;
+       int result                    = 0;
 
        if( file_entry == NULL )
        {
@@ -527,10 +558,12 @@
 
                return( -1 );
        }
-       if( libfsfat_file_entry_get_file_attribute_flags(
-            file_entry->fsfat_file_entry,
-            &file_attribute_flags,
-            error ) != 1 )
+       result = libfsfat_file_entry_get_file_attribute_flags(
+                 file_entry->fsfat_file_entry,
+                 &file_attribute_flags,
+                 error );
+
+       if( result == -1 )
        {
                libcerror_error_set(
                 error,
@@ -541,7 +574,8 @@
 
                return( -1 );
        }
-       if( ( file_attribute_flags & LIBFSFAT_FILE_ATTRIBUTE_FLAG_DIRECTORY ) 
!= 0 )
+       if( ( result == 0 )
+        || ( ( file_attribute_flags & LIBFSFAT_FILE_ATTRIBUTE_FLAG_DIRECTORY ) 
!= 0 ) )
        {
                *file_mode = S_IFDIR | 0555;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/include/libfsfat/definitions.h 
new/libfsfat-20260823/include/libfsfat/definitions.h
--- old/libfsfat-20260822/include/libfsfat/definitions.h        2026-08-22 
12:52:14.000000000 +0200
+++ new/libfsfat-20260823/include/libfsfat/definitions.h        2026-08-22 
18:58:30.000000000 +0200
@@ -24,11 +24,11 @@
 
 #include <libfsfat/types.h>
 
-#define LIBFSFAT_VERSION                               20260822
+#define LIBFSFAT_VERSION                               20260823
 
 /* The version string
  */
-#define LIBFSFAT_VERSION_STRING                                "20260822"
+#define LIBFSFAT_VERSION_STRING                                "20260823"
 
 /* The file access
  * bit 1        set to 1 for read access
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/libfsfat/fsfat_directory_entry.h 
new/libfsfat-20260823/libfsfat/fsfat_directory_entry.h
--- old/libfsfat-20260822/libfsfat/fsfat_directory_entry.h      2026-08-19 
06:20:59.000000000 +0200
+++ new/libfsfat-20260823/libfsfat/fsfat_directory_entry.h      2026-08-22 
17:02:58.000000000 +0200
@@ -183,10 +183,10 @@
         */
        uint8_t entry_type;
 
-       /* Unknown
+       /* The entry flags
         * Consists of 1 byte
         */
-       uint8_t unknown1;
+       uint8_t entry_flags;
 
        /* Unknown
         * Consists of 1 byte
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/libfsfat/libfsfat.rc 
new/libfsfat-20260823/libfsfat/libfsfat.rc
--- old/libfsfat-20260822/libfsfat/libfsfat.rc  2026-08-22 12:52:14.000000000 
+0200
+++ new/libfsfat-20260823/libfsfat/libfsfat.rc  2026-08-22 18:58:30.000000000 
+0200
@@ -22,12 +22,12 @@
     BLOCK "040904E4"
     BEGIN
       VALUE "FileDescription",         "Library to access the File Allocation 
Table (FAT) file system format\0"
-      VALUE "FileVersion",             "20260822" "\0"
+      VALUE "FileVersion",             "20260823" "\0"
       VALUE "InternalName",            "libfsfat.dll\0"
       VALUE "LegalCopyright",          "(C) 2021-2026, Joachim Metz 
<[email protected]>\0"
       VALUE "OriginalFilename",                "libfsfat.dll\0"
       VALUE "ProductName",             "libfsfat\0"
-      VALUE "ProductVersion",          "20260822" "\0"
+      VALUE "ProductVersion",          "20260823" "\0"
       VALUE "Comments",                        "For more information visit 
https://github.com/libyal/libfsfat/\0";
     END
   END
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/libfsfat/libfsfat_definitions.h 
new/libfsfat-20260823/libfsfat/libfsfat_definitions.h
--- old/libfsfat-20260822/libfsfat/libfsfat_definitions.h       2026-08-22 
12:52:14.000000000 +0200
+++ new/libfsfat-20260823/libfsfat/libfsfat_definitions.h       2026-08-22 
18:58:30.000000000 +0200
@@ -37,11 +37,11 @@
  * for local use of libfsfat
  */
 #else
-#define LIBFSFAT_VERSION                                       20260822
+#define LIBFSFAT_VERSION                                       20260823
 
 /* The version string
  */
-#define LIBFSFAT_VERSION_STRING                                        
"20260822"
+#define LIBFSFAT_VERSION_STRING                                        
"20260823"
 
 /* The file access
  * bit 1        set to 1 for read access
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libfsfat-20260822/libfsfat/libfsfat_directory_entry.c 
new/libfsfat-20260823/libfsfat/libfsfat_directory_entry.c
--- old/libfsfat-20260822/libfsfat/libfsfat_directory_entry.c   2026-08-19 
06:20:59.000000000 +0200
+++ new/libfsfat-20260823/libfsfat/libfsfat_directory_entry.c   2026-08-22 
17:19:33.000000000 +0200
@@ -812,6 +812,8 @@
                 ( (fsfat_directory_entry_exfat_data_stream_t *) data 
)->valid_data_size,
                 directory_entry->valid_data_size );
 
+               directory_entry->data_stream_flags = ( 
(fsfat_directory_entry_exfat_data_stream_t *) data )->entry_flags;
+
                byte_stream_copy_to_uint32_little_endian(
                 ( (fsfat_directory_entry_exfat_data_stream_t *) data 
)->data_start_cluster,
                 directory_entry->data_start_cluster );
@@ -831,9 +833,9 @@
                          ( (fsfat_directory_entry_exfat_allocation_bitmap_t *) 
data )->entry_type ) );
 
                        libcnotify_printf(
-                        "%s: unknown1\t\t\t\t: 0x%02" PRIx8 "\n",
+                        "%s: entry flags\t\t\t\t: 0x%02" PRIx8 "\n",
                         function,
-                        ( (fsfat_directory_entry_exfat_data_stream_t *) data 
)->unknown1 );
+                        ( (fsfat_directory_entry_exfat_data_stream_t *) data 
)->entry_flags );
 
                        libcnotify_printf(
                         "%s: unknown2\t\t\t\t: 0x%02" PRIx8 "\n",
@@ -862,6 +864,11 @@
                         function,
                         value_16bit );
 
+                       libcnotify_printf(
+                        "%s: valid data size\t\t\t: %" PRIu64 "\n",
+                        function,
+                        directory_entry->valid_data_size );
+
                        byte_stream_copy_to_uint32_little_endian(
                         ( (fsfat_directory_entry_exfat_data_stream_t *) data 
)->unknown4,
                         value_32bit );
@@ -871,11 +878,6 @@
                         value_32bit );
 
                        libcnotify_printf(
-                        "%s: valid data size\t\t\t: %" PRIu64 "\n",
-                        function,
-                        directory_entry->valid_data_size );
-
-                       libcnotify_printf(
                         "%s: data start cluster\t\t\t: %" PRIu32 "\n",
                         function,
                         directory_entry->data_start_cluster );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libfsfat-20260822/libfsfat/libfsfat_directory_entry.h 
new/libfsfat-20260823/libfsfat/libfsfat_directory_entry.h
--- old/libfsfat-20260822/libfsfat/libfsfat_directory_entry.h   2026-08-19 
06:20:59.000000000 +0200
+++ new/libfsfat-20260823/libfsfat/libfsfat_directory_entry.h   2026-08-22 
17:03:45.000000000 +0200
@@ -129,6 +129,10 @@
         */
        uint64_t valid_data_size;
 
+       /* The data stream flags
+        */
+       uint8_t data_stream_flags;
+
        /* The flags
         */
        uint8_t flags;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/libfsfat/libfsfat_file_entry.c 
new/libfsfat-20260823/libfsfat/libfsfat_file_entry.c
--- old/libfsfat-20260822/libfsfat/libfsfat_file_entry.c        2026-08-19 
06:20:59.000000000 +0200
+++ new/libfsfat-20260823/libfsfat/libfsfat_file_entry.c        2026-08-22 
18:30:02.000000000 +0200
@@ -1997,6 +1997,17 @@
        }
        internal_file_entry = (libfsfat_internal_file_entry_t *) file_entry;
 
+       if( internal_file_entry->directory_entry == NULL )
+       {
+               libcerror_error_set(
+                error,
+                LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                LIBCERROR_RUNTIME_ERROR_VALUE_MISSING,
+                "%s: invalid file entry - missing directory entry.",
+                function );
+
+               return( -1 );
+       }
        if( ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_DEVICE ) != 0 )
         && ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_DIRECTORY ) != 0 )
         && ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_VOLUME_LABEL ) != 0 ) )
@@ -2031,6 +2042,7 @@
                     internal_file_entry->file_system,
                     internal_file_entry->cluster_number,
                     internal_file_entry->data_size,
+                    internal_file_entry->directory_entry->data_stream_flags,
                     internal_file_entry->data_extents_array,
                     &( internal_file_entry->cluster_block_stream ),
                     error ) != 1 )
@@ -2113,6 +2125,17 @@
        }
        internal_file_entry = (libfsfat_internal_file_entry_t *) file_entry;
 
+       if( internal_file_entry->directory_entry == NULL )
+       {
+               libcerror_error_set(
+                error,
+                LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                LIBCERROR_RUNTIME_ERROR_VALUE_MISSING,
+                "%s: invalid file entry - missing directory entry.",
+                function );
+
+               return( -1 );
+       }
        if( ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_DEVICE ) != 0 )
         && ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_DIRECTORY ) != 0 )
         && ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_VOLUME_LABEL ) != 0 ) )
@@ -2147,6 +2170,7 @@
                     internal_file_entry->file_system,
                     internal_file_entry->cluster_number,
                     internal_file_entry->data_size,
+                    internal_file_entry->directory_entry->data_stream_flags,
                     internal_file_entry->data_extents_array,
                     &( internal_file_entry->cluster_block_stream ),
                     error ) != 1 )
@@ -2228,6 +2252,17 @@
        }
        internal_file_entry = (libfsfat_internal_file_entry_t *) file_entry;
 
+       if( internal_file_entry->directory_entry == NULL )
+       {
+               libcerror_error_set(
+                error,
+                LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                LIBCERROR_RUNTIME_ERROR_VALUE_MISSING,
+                "%s: invalid file entry - missing directory entry.",
+                function );
+
+               return( -1 );
+       }
        if( ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_DEVICE ) != 0 )
         && ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_DIRECTORY ) != 0 )
         && ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_VOLUME_LABEL ) != 0 ) )
@@ -2262,6 +2297,7 @@
                     internal_file_entry->file_system,
                     internal_file_entry->cluster_number,
                     internal_file_entry->data_size,
+                    internal_file_entry->directory_entry->data_stream_flags,
                     internal_file_entry->data_extents_array,
                     &( internal_file_entry->cluster_block_stream ),
                     error ) != 1 )
@@ -2340,6 +2376,17 @@
        }
        internal_file_entry = (libfsfat_internal_file_entry_t *) file_entry;
 
+       if( internal_file_entry->directory_entry == NULL )
+       {
+               libcerror_error_set(
+                error,
+                LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                LIBCERROR_RUNTIME_ERROR_VALUE_MISSING,
+                "%s: invalid file entry - missing directory entry.",
+                function );
+
+               return( -1 );
+       }
        if( ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_DEVICE ) != 0 )
         && ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_DIRECTORY ) != 0 )
         && ( ( internal_file_entry->file_attribute_flags & 
LIBFSFAT_FILE_ATTRIBUTE_FLAG_VOLUME_LABEL ) != 0 ) )
@@ -2374,6 +2421,7 @@
                     internal_file_entry->file_system,
                     internal_file_entry->cluster_number,
                     internal_file_entry->data_size,
+                    internal_file_entry->directory_entry->data_stream_flags,
                     internal_file_entry->data_extents_array,
                     &( internal_file_entry->cluster_block_stream ),
                     error ) != 1 )
@@ -2519,6 +2567,17 @@
        }
        internal_file_entry = (libfsfat_internal_file_entry_t *) file_entry;
 
+       if( internal_file_entry->directory_entry == NULL )
+       {
+               libcerror_error_set(
+                error,
+                LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                LIBCERROR_RUNTIME_ERROR_VALUE_MISSING,
+                "%s: invalid file entry - missing directory entry.",
+                function );
+
+               return( -1 );
+       }
 #if defined( HAVE_LIBFSFAT_MULTI_THREAD_SUPPORT )
        if( libcthreads_read_write_lock_grab_for_read(
             internal_file_entry->read_write_lock,
@@ -2540,6 +2599,7 @@
                     internal_file_entry->file_system,
                     internal_file_entry->cluster_number,
                     internal_file_entry->data_size,
+                    internal_file_entry->directory_entry->data_stream_flags,
                     internal_file_entry->data_extents_array,
                     &( internal_file_entry->cluster_block_stream ),
                     error ) != 1 )
@@ -2619,6 +2679,17 @@
        }
        internal_file_entry = (libfsfat_internal_file_entry_t *) file_entry;
 
+       if( internal_file_entry->directory_entry == NULL )
+       {
+               libcerror_error_set(
+                error,
+                LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                LIBCERROR_RUNTIME_ERROR_VALUE_MISSING,
+                "%s: invalid file entry - missing directory entry.",
+                function );
+
+               return( -1 );
+       }
 #if defined( HAVE_LIBFSFAT_MULTI_THREAD_SUPPORT )
        if( libcthreads_read_write_lock_grab_for_read(
             internal_file_entry->read_write_lock,
@@ -2640,6 +2711,7 @@
                     internal_file_entry->file_system,
                     internal_file_entry->cluster_number,
                     internal_file_entry->data_size,
+                    internal_file_entry->directory_entry->data_stream_flags,
                     internal_file_entry->data_extents_array,
                     &( internal_file_entry->cluster_block_stream ),
                     error ) != 1 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/libfsfat/libfsfat_file_system.c 
new/libfsfat-20260823/libfsfat/libfsfat_file_system.c
--- old/libfsfat-20260822/libfsfat/libfsfat_file_system.c       2026-08-19 
06:20:59.000000000 +0200
+++ new/libfsfat-20260823/libfsfat/libfsfat_file_system.c       2026-08-22 
18:40:04.000000000 +0200
@@ -943,6 +943,7 @@
                                current_file_entry->data_start_cluster = 
directory_entry->data_start_cluster;
                                current_file_entry->data_size          = 
directory_entry->data_size;
                                current_file_entry->valid_data_size    = 
directory_entry->valid_data_size;
+                               current_file_entry->data_stream_flags  = 
directory_entry->data_stream_flags;
                        }
                        else if( directory_entry->entry_type == 
LIBFSFAT_DIRECTORY_ENTRY_TYPE_EXFAT_FILE_ENTRY )
                        {
@@ -1847,6 +1848,7 @@
                                        current_file_entry->data_start_cluster 
= safe_directory_entry->data_start_cluster;
                                        current_file_entry->data_size          
= safe_directory_entry->data_size;
                                        current_file_entry->valid_data_size    
= safe_directory_entry->valid_data_size;
+                                       current_file_entry->data_stream_flags  
= safe_directory_entry->data_stream_flags;
                                }
                                else if( safe_directory_entry->entry_type == 
LIBFSFAT_DIRECTORY_ENTRY_TYPE_EXFAT_FILE_ENTRY_NAME )
                                {
@@ -2067,6 +2069,7 @@
      libfsfat_file_system_t *file_system,
      uint32_t cluster_number,
      size64_t size,
+     uint8_t data_stream_flags,
      libcdata_array_t *data_extents_array,
      libfdata_stream_t **data_stream,
      libcerror_error_t **error )
@@ -2077,6 +2080,7 @@
        static char *function                     = 
"libfsfat_file_system_get_data_stream";
        size64_t segment_size                     = 0;
        off64_t cluster_offset                    = 0;
+       off64_t next_cluster_offset               = 0;
        off64_t segment_end_offset                = 0;
        off64_t segment_start_offset              = 0;
        uint32_t last_cluster_number              = 0;
@@ -2203,35 +2207,184 @@
 
                goto on_error;
        }
-       while( ( cluster_number >= 2 )
-           && ( cluster_number < last_cluster_number ) )
+       if( ( file_system->io_handle->file_system_format == 
LIBFSFAT_FILE_SYSTEM_FORMAT_EXFAT )
+        && ( ( data_stream_flags & 0x02 ) != 0 ) )
        {
-               if( size == 0 )
+               cluster_offset = file_system->io_handle->first_cluster_offset + 
( (off64_t) ( cluster_number - 2 ) * file_system->io_handle->cluster_block_size 
);
+
+               if( libfsfat_extent_initialize(
+                    &extent,
+                    error ) != 1 )
                {
-                       break;
+                       libcerror_error_set(
+                        error,
+                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                        LIBCERROR_RUNTIME_ERROR_INITIALIZE_FAILED,
+                        "%s: unable to create extent.",
+                        function );
+
+                       goto on_error;
                }
-               cluster_offset = file_system->io_handle->first_cluster_offset + 
( (off64_t) ( cluster_number - 2 ) * file_system->io_handle->cluster_block_size 
);
+               extent->offset = cluster_offset;
+               extent->size   = size;
 
-               if( libfsfat_file_system_check_if_cluster_block_first_read(
-                    file_system,
-                    cluster_block_tree,
-                    cluster_number,
+               if( libcdata_array_append_entry(
+                    data_extents_array,
+                    &entry_index,
+                    (intptr_t *) extent,
+                    error ) != 1 )
+               {
+                       libcerror_error_set(
+                        error,
+                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                        LIBCERROR_RUNTIME_ERROR_APPEND_FAILED,
+                        "%s: unable to append data extent to array.",
+                        function );
+
+                       goto on_error;
+               }
+               extent = NULL;
+
+               if( libfdata_stream_append_segment(
+                    safe_data_stream,
+                    &segment_index,
+                    0,
                     cluster_offset,
+                    size,
+                    0,
                     error ) != 1 )
                {
                        libcerror_error_set(
                         error,
                         LIBCERROR_ERROR_DOMAIN_RUNTIME,
-                        LIBCERROR_RUNTIME_ERROR_GENERIC,
-                        "%s: unable to check if first read of cluster number: 
%" PRIu32 " (offset: %" PRIu64 ").",
-                        function,
-                        cluster_number,
-                        cluster_offset );
+                        LIBCERROR_RUNTIME_ERROR_APPEND_FAILED,
+                        "%s: unable to append stream segment.",
+                        function );
 
                        goto on_error;
                }
-               if( ( segment_start_offset != 0 )
-                && ( cluster_offset > segment_end_offset ) )
+       }
+       else
+       {
+               while( ( cluster_number >= 2 )
+                   && ( cluster_number < last_cluster_number ) )
+               {
+                       if( size == 0 )
+                       {
+                               break;
+                       }
+                       cluster_offset = 
file_system->io_handle->first_cluster_offset + ( (off64_t) ( cluster_number - 2 
) * file_system->io_handle->cluster_block_size );
+
+                       if( 
libfsfat_file_system_check_if_cluster_block_first_read(
+                            file_system,
+                            cluster_block_tree,
+                            cluster_number,
+                            cluster_offset,
+                            error ) != 1 )
+                       {
+                               libcerror_error_set(
+                                error,
+                                LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                                LIBCERROR_RUNTIME_ERROR_GENERIC,
+                                "%s: unable to check if first read of cluster 
number: %" PRIu32 " (offset: %" PRIu64 ").",
+                                function,
+                                cluster_number,
+                                cluster_offset );
+
+                               goto on_error;
+                       }
+                       if( ( segment_start_offset != 0 )
+                        && ( cluster_offset != next_cluster_offset ) )
+                       {
+                               segment_size = segment_end_offset - 
segment_start_offset;
+
+                               if( libfsfat_extent_initialize(
+                                    &extent,
+                                    error ) != 1 )
+                               {
+                                       libcerror_error_set(
+                                        error,
+                                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                                        
LIBCERROR_RUNTIME_ERROR_INITIALIZE_FAILED,
+                                        "%s: unable to create extent.",
+                                        function );
+
+                                       goto on_error;
+                               }
+                               extent->offset = segment_start_offset;
+                               extent->size   = segment_size;
+
+                               if( libcdata_array_append_entry(
+                                    data_extents_array,
+                                    &entry_index,
+                                    (intptr_t *) extent,
+                                    error ) != 1 )
+                               {
+                                       libcerror_error_set(
+                                        error,
+                                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                                        LIBCERROR_RUNTIME_ERROR_APPEND_FAILED,
+                                        "%s: unable to append data extent to 
array.",
+                                        function );
+
+                                       goto on_error;
+                               }
+                               extent = NULL;
+
+                               if( segment_size > size )
+                               {
+                                       segment_size = size;
+                               }
+                               if( libfdata_stream_append_segment(
+                                    safe_data_stream,
+                                    &segment_index,
+                                    0,
+                                    segment_start_offset,
+                                    segment_size,
+                                    0,
+                                    error ) != 1 )
+                               {
+                                       libcerror_error_set(
+                                        error,
+                                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                                        LIBCERROR_RUNTIME_ERROR_APPEND_FAILED,
+                                        "%s: unable to append stream segment.",
+                                        function );
+
+                                       goto on_error;
+                               }
+                               size -= segment_size;
+
+                               segment_start_offset = 0;
+                               next_cluster_offset  = cluster_offset;
+                       }
+                       if( segment_start_offset == 0 )
+                       {
+                               segment_start_offset = cluster_offset;
+                               segment_end_offset   = cluster_offset;
+                       }
+                       segment_end_offset  += 
file_system->io_handle->cluster_block_size;
+                       next_cluster_offset += 
file_system->io_handle->cluster_block_size;
+
+                       if( 
libfsfat_allocation_table_get_cluster_number_by_index(
+                            file_system->allocation_table,
+                            (int) cluster_number,
+                            &cluster_number,
+                            error ) != 1 )
+                       {
+                               libcerror_error_set(
+                                error,
+                                LIBCERROR_ERROR_DOMAIN_RUNTIME,
+                                LIBCERROR_RUNTIME_ERROR_GET_FAILED,
+                                "%s: unable to retrieve cluster number: %" 
PRIu32 ".",
+                                function,
+                                cluster_number );
+
+                               goto on_error;
+                       }
+               }
+               if( ( size > 0 )
+                && ( segment_start_offset != 0 ) )
                {
                        segment_size = segment_end_offset - 
segment_start_offset;
 
@@ -2290,93 +2443,6 @@
 
                                goto on_error;
                        }
-                       size -= segment_size;
-
-                       segment_start_offset = 0;
-               }
-               if( segment_start_offset == 0 )
-               {
-                       segment_start_offset = cluster_offset;
-                       segment_end_offset   = cluster_offset;
-               }
-               segment_end_offset += 
file_system->io_handle->cluster_block_size;
-
-               if( libfsfat_allocation_table_get_cluster_number_by_index(
-                    file_system->allocation_table,
-                    (int) cluster_number,
-                    &cluster_number,
-                    error ) != 1 )
-               {
-                       libcerror_error_set(
-                        error,
-                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
-                        LIBCERROR_RUNTIME_ERROR_GET_FAILED,
-                        "%s: unable to retrieve cluster number: %" PRIu32 ".",
-                        function,
-                        cluster_number );
-
-                       goto on_error;
-               }
-       }
-       if( ( size > 0 )
-        && ( segment_start_offset != 0 ) )
-       {
-               segment_size = segment_end_offset - segment_start_offset;
-
-               if( libfsfat_extent_initialize(
-                    &extent,
-                    error ) != 1 )
-               {
-                       libcerror_error_set(
-                        error,
-                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
-                        LIBCERROR_RUNTIME_ERROR_INITIALIZE_FAILED,
-                        "%s: unable to create extent.",
-                        function );
-
-                       goto on_error;
-               }
-               extent->offset = segment_start_offset;
-               extent->size   = segment_size;
-
-               if( libcdata_array_append_entry(
-                    data_extents_array,
-                    &entry_index,
-                    (intptr_t *) extent,
-                    error ) != 1 )
-               {
-                       libcerror_error_set(
-                        error,
-                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
-                        LIBCERROR_RUNTIME_ERROR_APPEND_FAILED,
-                        "%s: unable to append data extent to array.",
-                        function );
-
-                       goto on_error;
-               }
-               extent = NULL;
-
-               if( segment_size > size )
-               {
-                       segment_size = size;
-               }
-               if( libfdata_stream_append_segment(
-                    safe_data_stream,
-                    &segment_index,
-                    0,
-                    segment_start_offset,
-                    segment_size,
-                    0,
-                    error ) != 1 )
-               {
-                       libcerror_error_set(
-                        error,
-                        LIBCERROR_ERROR_DOMAIN_RUNTIME,
-                        LIBCERROR_RUNTIME_ERROR_APPEND_FAILED,
-                        "%s: unable to append stream segment.",
-                        function );
-
-                       goto on_error;
                }
        }
        if( libfsfat_block_tree_free(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/libfsfat/libfsfat_file_system.h 
new/libfsfat-20260823/libfsfat/libfsfat_file_system.h
--- old/libfsfat-20260822/libfsfat/libfsfat_file_system.h       2026-08-19 
06:20:59.000000000 +0200
+++ new/libfsfat-20260823/libfsfat/libfsfat_file_system.h       2026-08-22 
17:06:06.000000000 +0200
@@ -133,6 +133,7 @@
      libfsfat_file_system_t *file_system,
      uint32_t cluster_number,
      size64_t size,
+     uint8_t data_stream_flags,
      libcdata_array_t *data_extents_array,
      libfdata_stream_t **data_stream,
      libcerror_error_t **error );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/libfsfat.spec 
new/libfsfat-20260823/libfsfat.spec
--- old/libfsfat-20260822/libfsfat.spec 2026-08-22 12:52:14.000000000 +0200
+++ new/libfsfat-20260823/libfsfat.spec 2026-08-22 18:58:30.000000000 +0200
@@ -1,5 +1,5 @@
 Name: libfsfat
-Version: 20260822
+Version: 20260823
 Release: 1
 Summary: Library to access the File Allocation Table (FAT) file system format
 Group: System Environment/Libraries
@@ -95,6 +95,6 @@
 %{_mandir}/man1/*
 
 %changelog
-* Sat Aug 22 2026 Joachim Metz <[email protected]> 20260822-1
+* Sat Aug 22 2026 Joachim Metz <[email protected]> 20260823-1
 - Auto-generated
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/pyproject.toml 
new/libfsfat-20260823/pyproject.toml
--- old/libfsfat-20260822/pyproject.toml        2026-08-22 12:52:14.000000000 
+0200
+++ new/libfsfat-20260823/pyproject.toml        2026-08-22 18:58:30.000000000 
+0200
@@ -4,7 +4,7 @@
 
 [project]
 name = "libfsfat-python"
-version = "20260822"
+version = "20260823"
 description = "Python bindings for libfsfat"
 maintainers = [
     { name = "Joachim Metz", email = "[email protected]" },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libfsfat-20260822/tests/package.m4 
new/libfsfat-20260823/tests/package.m4
--- old/libfsfat-20260822/tests/package.m4      2026-08-22 12:45:56.000000000 
+0200
+++ new/libfsfat-20260823/tests/package.m4      2026-08-22 18:41:19.000000000 
+0200
@@ -1,5 +1,5 @@
 m4_define([AT_PACKAGE_NAME], [libfsfat])
 m4_define([AT_PACKAGE_TARNAME], [libfsfat])
-m4_define([AT_PACKAGE_VERSION], [20260822])
-m4_define([AT_PACKAGE_STRING], [libfsfat 20260822])
+m4_define([AT_PACKAGE_VERSION], [20260823])
+m4_define([AT_PACKAGE_STRING], [libfsfat 20260823])
 m4_define([AT_PACKAGE_BUGREPORT], [https://github.com/libyal/libfsfat/issues])

Reply via email to