45 Commits
Author SHA1 Message Date
lgcosta 293e6a7280 Fix real bugs and clean up the build with -Wall -Wextra
build / build (clang, ) (push) Failing after 12s
build / build (gcc, ) (push) Failing after 9s
build / build (gcc, --enable-io-failure-emulation) (push) Failing after 8s
build / build (gcc, --enable-warnings) (push) Failing after 6s
Build: add --enable-warnings (-Wall -Wextra); the tree is now warning-free
with it, so distributions can opt in without risking a surprise -Werror
breakage from a future compiler.

Real bugs fixed (each verified by a reproducer):

- lib/io.c: open_rollback_file() read 28 bytes into char[28] with no NUL
  and then strcmp()'d it against a 28-character magic, reading one byte
  past the array. The condition was also inverted, so a *valid* rollback
  file was rejected -- but only sometimes: the missing NUL made the result
  depend on stack garbage (verified: -O0 rejects, -O2 accepts). The whole
  --save-rollback/--rollback-changes path was unreliable. Now the buffer is
  sized for the terminator, zeroed, and the comparison is `!= 0`.
  Verified end to end: save -> reopen -> restore reports "2 blocks
  restored, 0 skipped"; a random file is rejected.

- reiserfscore/reiserfslib.c, reiserfscore/journal.c: asprintf() was
  called with &fs->fs_file_name / &fs->fs_j_file_name, but those fields
  are `char *`, not `char **`. Passing a `char **` where `char *` is
  expected wrote through the wrong pointer -- silent memory corruption on
  any allocation. Fixed by using the new checked helper.

- reiserfscore/node_formats.c: `code < 0` on an unsigned parameter was
  dead code; the guard never fired.

- resize_reiserfs: missing `break` after -j made -j fall into -f, so
  "-j dev" silently also forced the operation. Sign-compare on the
  count_blocks() ternary and on count + blocks.

- lib/misc.c: strncat with bound == strlen(src) (equivalent to strcat) into
  char[256] from a char[256] dirent name -- up to 261 bytes. Replaced with
  snprintf plus an explicit fit check.

- lib/misc.c: die() used vsprintf into a fixed 1024-byte buffer.

- strncpy with bound == destination size (mkreiserfs, tune, progbar) never
  terminated; replaced with snprintf.

Allocator: drop the homegrown magic-header allocator. It wrote "_mem_begin_"
/ "mem_end" through strcpy inside the allocation, kept the size in an
`int`, and its only safety check (checkmem) was never called -- every call
site is commented out. Replaced with a size_t header that is over-aligned
via max_align_t, so malloc alignment guarantees still hold. expandmem()
now takes the old size from the header instead of a caller-supplied value
that could disagree with it.

Warnings: annotate the deliberate fallthroughs (fsck pass cascade, unit
suffix parsing, percentage parsing), fix the remaining sign-compare and
missing-field-initializer sites, and compute addresses of packed members
via char* + offsetof instead of &member.

Portability: asm/types.h -> linux/types.h, malloc.h and sys/vfs.h dropped
from includes.h (nothing used them), sys/vfs.h -> sys/statfs.h for
statfs(2).

Version: reiserfsprogs.spec said 3.6.23 while configure.ac said 3.6.25.

Remove the dead `#if 0` main() from hashes.c.

Add .github/workflows/build.yml: gcc, clang, --enable-warnings and
--enable-io-failure-emulation, each followed by a format/check/inspect
smoke test on a real image.

Verified: ./autogen.sh && ./configure --enable-warnings && make is clean
from scratch (0 warnings, 51 compile/link steps). mkreiserfs, reiserfsck
--check, debugreiserfs -S, reiserfstune -l and a real resize_reiserfs
128M -> 256M all succeed, and fsck reports the resized image clean.
2026-11-11 22:02:38 -03:00
lgcosta d3925f1521 Modernize the build system so it builds on current toolchains
The autotools setup could not bootstrap with modern autoconf/libtool:
`autoreconf -fi` failed with "possibly undefined macro: AC_PROG_LIBTOOL",
and several other macros used here were removed or deprecated long ago.

configure.ac:
  - AC_PROG_LIBTOOL -> LT_INIT (with AC_CONFIG_MACRO_DIRS/AC_CONFIG_AUX_DIR);
    add AM_PROG_AR required by newer libtool/automake.
  - AM_CONFIG_HEADER -> AC_CONFIG_HEADERS; AC_OUTPUT(files...) -> AC_OUTPUT
    with an explicit AC_CONFIG_FILES list.
  - AC_TRY_COMPILE -> AC_COMPILE_IFELSE; drop AC_HEADER_STDC,
    AC_PROG_GCC_TRADITIONAL, AC_STRUCT_ST_RDEV, AC_C_CONST and AC_C_INLINE
    (all obsolete or unconditionally available).
  - Drop AC_FUNC_MEMCMP/STRFTIME/VPRINTF; the corresponding HAVE_* macros
    were never referenced. Keep the register_printf_* check but test the
    ac_cv_func_* names that AC_CHECK_FUNCS actually sets.
  - Pin -std=gnu11 (the sources predate C99 and rely on implicit-int-era
    behaviour that newer C standards reject) and fix the -Wuninitialized
    probe, which never set its cache variable.
  - off_t/blkcnt_t sizeof fallbacks 64 -> 8 (bytes, not bits).

reiserfscore.pc.in: substitute @PACKAGE_VERSION@; REISERFSPROGS_VERSION was
never defined, so the generated .pc always carried an empty Version.

lib/parse_time.c: define _GNU_SOURCE, not _XOPEN_SOURCE. The valueless
_XOPEN_SOURCE disables _DEFAULT_SOURCE, which hides loff_t in <sys/types.h>
and broke the build. Every other translation unit already uses _GNU_SOURCE.

reiserfscore/xattr.c: drop the unused <sys/acl.h> include; no libacl symbol
is used (the reiserfs_acl_* structs come from reiserfs_fs.h), and the header
is not a declared build dependency.

Add autogen.sh to regenerate the build system after a fresh clone, and
update .gitignore for the build-aux/m4 layout and generated artifacts.

Verified: ./autogen.sh && ./configure && make completes on gcc 16 /
automake 1.18 / autoconf 2.72. mkreiserfs, reiserfsck --check,
debugreiserfs -S and reiserfstune all run against a freshly formatted
64 MiB image.
2026-11-11 21:29:42 -03:00
Jeff Mahoney 278866b5be reiserfscore: add reiserfs_err.et to EXTRA_DIST
Without it, 'make dist' will not include it in the tarball.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2016-06-07 10:29:09 -04:00
Jeff Mahoney 3c0f2812b0 reiserfsprogs: use com_err in reiserfs_open
We dump failure messages to the terminal regardless of whether the caller
wants them or not.  This can be annoying when used as part of a general
tool that tests to see which file system is on a device by calling
its open routine.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2016-06-06 14:05:36 -04:00
Jeff Mahoney 59dc067e79 reiserfscore: fix "new_insert_key may be used uninitialized..."
new_insert_key only makes any sense when it's associated with a
new_insert_ptr, which is initialized to NULL and changed to a
buffer_head when we also initialize new_insert_key.  We can key off
of that to avoid the uninitialized warning.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2016-06-06 13:32:40 -04:00
Jeff Mahoney 6daa8a9c5a reiserfscore: constify struct pointer arguments
There are many cases where functions take pointers to keys, item heads,
paths, etc and don't modify them. Let's annotate them properly.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2014-03-13 17:42:58 -04:00
Jeff Mahoney 9b52a79ba2 reiserfscore: constify strings
There are many calls in which strings are passed as "char *" yet aren't
modified. This patch marks them const so callers can depend on it.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2014-03-13 17:42:57 -04:00
Jeff Mahoney 6bdb171b9e reiserfslib: add basic extended attribute helpers
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2014-03-11 16:39:52 -04:00
Jeff Mahoney e51777cf55 reiserfslib: add file data and directory iterators
This adds reiserfs_iterate_dir and reiserfs_iterate_file_data to
iterate over directories and file block/tail mapping.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2014-03-11 15:44:45 -04:00
Jeff Mahoney 1f65941572 mkreiserfs: move block_size_ok out of reiserfscore
block_size_ok is only used in mkreiserfs. We can pull it out of the
library.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2014-01-24 11:21:19 -05:00
Jeff Mahoney c3084a6d48 reiserfsprogs: remove dead code
gcc with -Wall was complaining about defined but unused code. I've removed
the functions/variables that weren't used.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2014-01-23 17:42:39 -05:00
Jeff Mahoney 57eac8416c reiserfsprogs: add helpers for constant endian routines
Initializing structures with little endian values requires a const
value. This means that the endian routines that are macro blocks
cause build failures.

This patch introduces constant_ macros that don't involve an
assignment. These can only be used with constant values or
unexpected results may occur.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-09-17 13:28:53 -04:00
Jeff Mahoney 19566d0878 build: introduce shared libreiserfscore.so and export it
In order to use reiserfs functionality in external programs, we need to
make a shared library and includes available.

This converts both libmisc and libreiserfscore into shared libraries, and
links libmisc into libreiserfscore. We also export the includes and
a pkg-config file.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 19:02:20 -04:00
Jeff Mahoney 97fa944851 reiserfsprogs: convert reiserfs_filsys_t from structure to pointer-to-structure
This makes it more consistent with e2fsprogs.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 19:02:20 -04:00
Jeff Mahoney 81aeadf510 reiserfsprogs: annotate for endian safeness
By annotating structure members and other on-disk structures as little
endian, we can catch bugs more easily.

The code was already endian safe except for three minor spots:
1) The badblock list code was initializing its key in an endian-unsafe way.
2) Indirect block pointer sequence printing was treating cpu-order values
   as little endian.
3) reiserfsck was trying to do endian switching on the lost+found key,
   but it was before it was even initialized to anything, so we can
   just remove that completely.

These issues were fixed as part of this commit.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 19:02:20 -04:00
Jeff Mahoney 767f7b85df reiserfsprogs: fix remaining sparse warnings
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 19:02:19 -04:00
Jeff Mahoney 20357cf349 reiserfsprogs: Fix sparse "warning: Using plain integer as NULL pointer"
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 19:02:18 -04:00
Jeff Mahoney a1623ca6b3 reiserfscore: rename usearch_by_position to reiserfs_search_by_position
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 19:00:03 -04:00
Jeff Mahoney b94873771b reiserfscore: make reiserfs_open's filename argument const
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 19:00:03 -04:00
Jeff Mahoney ad42b07bcf reiserfscore: move endian helpers for offset_v2 into header
We'll need to use these helpers from library callers.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 19:00:02 -04:00
Jeff Mahoney d442d18969 cleanup: remove unused argument to reiserfs_invalidate_buffer
reiserfs_invalidate_buffer contains an argument to specify whether a block
should be freed after being invalidated. It is always passed as 1, so
let's just get rid of it.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 17:21:08 -04:00
Jeff Mahoney 863ef57982 cleanup: remove dead code
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 17:17:38 -04:00
Jeff Mahoney 45964148f5 cleanup: remove unnecessary fs pointer passed with buffer_infos
There are a bunch of leaf helpers that accept a reiserfs_filsys_t when
one is passed via the buffer_info.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 17:15:33 -04:00
Jeff Mahoney 867cfbbb3e cleanup: factor out buffer_info initialization into helpers
We open code buffer_info initialization all over the place. Let's
factor that out so we don't reproduce the code everywhere.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 17:15:33 -04:00
Jeff Mahoney c1ff1d5d2d cleanup: rename key and item_head accessors to more friendly names
This patch does a quick search and replace:
B_N_PITEM_HEAD() -> item_head()
B_N_PDELIM_KEY() -> internal_key()
B_N_PKEY() -> leaf_key()
B_N_PITEM() -> item_body()

And the item_head version:
B_I_PITEM() -> ih_item_body()
I_ENTRY_COUNT() -> ih_entry_count()

And the treepath variants:
get_ih() -> tp_item_head()
PATH_PITEM_HEAD() -> tp_item_head()
get_item() -> tp_item_body()

... which makes the code much easier on the eyes.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 17:15:33 -04:00
Jeff Mahoney 290bb8c378 cleanup: remove trailing whitespace
This patch just removes trailing whitespace.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 17:15:32 -04:00
Jeff Mahoney 47cff72748 cleanup: run indent with the Linux Kernel style across all code
Over the years, the reiserfs kernel code has been gradually cleaned up
to be more readable. This patch does the same to the progs code.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 17:14:42 -04:00
Jeff Mahoney b23d40f723 cleanup: rename common structure names
In order to convert reiserfscore into a externally-usable library,
we need to rename structures so they won't collide with other
namespaces.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-26 17:12:09 -04:00
Victor Leschuck 14e8805a08 journal: fix division by 0 with one transaction in log
We have met a situation when reiserfsck segfaulted on one of our
partitions. I have performed a small research and the cause appeared
to be wrong detection of transaction count.

Our FS had only one journal transaction, however trans_count which was
passed to progbar_update() as maximum transaction value was detected
as (last_transaction - first_transaction) which in our case was 0.
Thus progbar_update() resulted in segmentation fault:

(gdb) bt
"Replaying journal", curr=1, max=0, dpynum=1) at progbar.c:80

Here is part of debugreiserfs -j output

Journal header (block #8210 of ./partition.bug):
    j_last_flush_trans_id 0
    j_first_unflushed_offset 0
    j_mount_id 10
    Device [0x0]
    Magic [0x4f0a099e]
    Size 8193 blocks (including 1 for journal header) (first block 18)
    Max transaction length 1024 blocks
    Max batch size 900 blocks
    Max commit age 30
Mountid 10, transid 10, desc 18, length 2, commit 21

I successfully reproduced it on versions 3.6.21 (which we were using)
and 3.6.23 (which I believe is the latest).

Attaching patch. Let me know your opinion. If I am wrong, please
comment, if I am correct, feel free to include patch into sources.

Thanks.

Signed-off-by: Victor Leschuk <vleschuk@gmail.com>
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2013-08-23 10:26:41 -04:00
Jeff Mahoney 3466b34d99 reiserfscore: add support for register_printf_specifier
register_printf_modifier is causing build warnings complaining that
it is deprecated. This patch adds support for register_printf_specifier
and uses it if it's present. Otherwise, it will fall back to
register_printf_modifier.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2012-10-11 15:57:28 -04:00
Jeff Mahoney f8b66d8084 reiserfscore: fix uninitialized variable warning in print_indirect_item
This patch fixes the following warning:
prints.c:403:20: warning: ‘num’ may be used uninitialized in this function [-Wmaybe-uninitialized]

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2012-10-11 15:57:26 -04:00
Jeff Mahoney b337b2b190 reiserfsprogs: fix -Wpointer-sign warnings for blocksize and position
This patch fixes the following warnings:
pointer targets in passing argument 5 of ‘reiserfs_bin_search’ differ in signedness [-Wpointer-sign]
pointer targets in passing argument 2 of ‘init_rollback_file’ differ in signedness [-Wpointer-sign]

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2012-10-11 15:57:26 -04:00
Jeff Mahoney 0edf890eec reiserfsprogs: fix printf formatting warnings
This patch fixes:
main.c:968:11: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 3 has type ‘time_t’ [-Wformat]
prints.c:152:7: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘__u32’ [-Wformat]

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2012-10-11 15:57:24 -04:00
Jeff Mahoney eba9abb84d reiserfsprogs: fix set-but-not-used gcc warnings
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2012-10-11 15:57:23 -04:00
Jeff Mahoney 8f95bdb15d reiserfsprogs: remove autoconf-generated files
These files change every time configure.in or Makefile.am is changed,
we can autogenerate them when exporting a tarball.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
2012-10-11 15:57:23 -04:00
Jeff Mahoney 0265fd70c1 reiserfs: Fix signedness issues for large file systems
Now that we handle file systems > 8 TB, we end up printing large negative
numbers instead of actual block numbers. This patch fixes those places
to use unsigned ints for block numbers.

Signed-by: Jeff Mahoney <jeffm@suse.com>
2012-10-11 11:56:48 -04:00
Jeff Mahoney 149a82e2e9 Imported reiserfsprogs-3.6.21 2012-10-11 11:32:39 -04:00
Jeff Mahoney dac518d099 Imported reiserfsprogs-3.6.20 2012-10-11 11:32:09 -04:00
Jeff Mahoney 0ed773997f Imported reiserfsprogs-3.6.19 2012-10-11 11:31:31 -04:00
Jeff Mahoney 3078c83c48 Imported reiserfsprogs-3.6.18 2012-10-11 11:30:57 -04:00
Jeff Mahoney 18057cdad6 Imported reiserfsprogs-3.6.13 2012-10-11 11:30:27 -04:00
Jeff Mahoney cccefa4d84 Imported reiserfsprogs-3.6.9 2012-10-11 11:29:29 -04:00
Jeff Mahoney 99c89460c3 Imported reiserfsprogs-3.6.4 2012-10-11 11:28:37 -04:00
Jeff Mahoney b69459eb80 Imported reiserfsprogs-3.6.2 2012-10-11 11:27:42 -04:00
Jeff Mahoney e7102bdb66 Initial commit -- seeded with reiserfsprogs 3.x.0j 2012-10-11 11:26:22 -04:00