Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .cirrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ common_meson_steps: &common_meson_steps
common_freebsd_steps: &common_freebsd_steps
pkginstall_script:
- pkg update -f
- pkg install -y git meson ninja gettext pkgconf
- pkg install -y git meson ninja gettext pkgconf glib

freebsd_task:
<<: *filter_template
Expand Down Expand Up @@ -46,7 +46,7 @@ macos_task:
env:
CIRRUS_CLONE_SUBMODULES: true
pkginstall_script:
- brew install meson ninja ncurses
- brew install meson ninja ncurses glib
setup_script:
- meson setup builddir
<<: *common_meson_steps
5 changes: 4 additions & 1 deletion .github/workflows/c-cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ jobs:
sudo apt upgrade -y
sudo apt-get install -y \
gettext \
libglib2.0-dev \
meson \
ninja-build

Expand Down Expand Up @@ -123,7 +124,7 @@ jobs:
with:
usesh: true
prepare: |
pkg_add gettext-tools git meson ninja
pkg_add gettext-tools git glib2 meson ninja

run: |
meson setup builddir -Db_sanitize=none -Dnls=false ${SETUP_OPTIONS:-} || cat builddir/meson-logs/meson-log.txt
Expand Down Expand Up @@ -156,6 +157,7 @@ jobs:
brew update
brew install \
gettext \
glib \
meson \
ninja \
ncurses \
Expand Down Expand Up @@ -212,6 +214,7 @@ jobs:
sudo apt-get install -y \
faketime \
gettext \
libglib2.0-dev \
meson \
ninja-build \
xvfb
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/coverity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ jobs:
with:
submodules: false
- name: Install Dependencies
run: sudo -H python3 -m pip install meson ninja
run: |
sudo -H python3 -m pip install meson ninja
sudo apt-get install -y libglib2.0-dev
- run: meson setup builddir
- uses: vapier/coverity-scan-action@v1
with:
Expand Down
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ rmw (in-progress):
waste folder are on separate subvolumes (#526); use generic FICLONE ioctl
(linux/fs.h) instead of BTRFS_IOC_CLONE, and fall back to 'mv' when
rename() returns EXDEV on a same-device move
* Add GLib/GIO as a dependency; use GLib for directory moves across btrfs
and bcachefs subvolumes (requires glib2 >= 2.50); replace several
internal utility functions with GLib equivalents
* ficlone: Add bcachefs filesystem detection; directories containing
special files (FIFOs, sockets, devices) now fail gracefully instead
of hanging; fix missing errno propagation on early failures; preserve
timestamps and ownership after clone

2026-04-07

Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ the [releases section][releases-url].

### Dependencies

* glib2
* libncursesw (ncurses-devel on some systems, such as CentOS)
* gettext (or use '-Dnls=false' when configuring with meson if you only need English language support)

Expand Down
1 change: 1 addition & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ RUN git clone --depth 1 https://github.com/theimpossibleastronaut/rmw \
FROM alpine
COPY --from=0 /tmp/rmw/ /
RUN apk add \
glib \
libmenuw \
mandoc \
musl-fts \
Expand Down
2 changes: 1 addition & 1 deletion docker/Dockerfile-build-env_alpine
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ RUN apk update && apk upgrade && \
gcc \
gettext \
git \
glib-dev \
linux-headers \
meson \
musl-dev \
musl-fts-dev \
musl-libintl \
ncurses-dev

CMD ["/bin/sh","-l"]
1 change: 1 addition & 0 deletions docker/Dockerfile-build-env_bookworm
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ RUN apt-get update \
&& apt-get install -y \
gettext \
git \
libglib2.0-dev \
libncurses-dev \
meson \
ninja-build \
Expand Down
1 change: 1 addition & 0 deletions docker/Dockerfile-build-env_tumbleweed
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ RUN zypper --non-interactive refresh && \
gettext \
gcc \
git \
glib2-devel \
ncurses-devel \
meson \
ninja && \
Expand Down
3 changes: 3 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ canfigger_dep = dependency(
default_options: 'default_library=static',
)

glib_dep = dependency('glib-2.0', version: '>=2.50')
gio_dep = dependency('gio-2.0', version: '>=2.50')

subdir('src')

main_bin = executable('rmw', 'src/main.c', dependencies: rmw_dep, install: true)
Expand Down
2 changes: 1 addition & 1 deletion packaging/appimage/pre-appimage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ fi

# Install necessary dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install -y libncursesw5-dev
sudo apt install -y libglib2.0-dev libncursesw5-dev

# Set up build directory
BUILD_DIR="$SOURCE_ROOT/appimage_build"
Expand Down
1 change: 1 addition & 0 deletions packaging/debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Section: utils
Priority: optional
Maintainer: Andy Alt <arch_stanton5995@proton.me>
Build-Depends: debhelper (>= 12~),
libglib2.0-dev,
libncurses-dev,
meson (>= 0.59.0)
Standards-Version: 4.6.2
Expand Down
1 change: 1 addition & 0 deletions po/POTFILES
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

src/parse_cli_options.c
src/main.c
src/ficlone.c
src/config_rmw.c
src/messages.c
src/restore.c
Expand Down
15 changes: 7 additions & 8 deletions src/config_rmw.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,22 +284,20 @@ parse_line_waste(st_waste *waste_curr, struct Canfigger *node,
waste_curr->dev_num = st.st_dev;

// printf("actual: %ld |major: %d | minor: %d\n", st.st_dev, major(st.st_dev), minor(st.st_dev));
char tmp[PATH_MAX];
strcpy(tmp, waste_curr->parent);
char *media_root_ptr = rmw_dirname(tmp);
gchar *media_root_ptr = g_path_get_dirname(waste_curr->parent);
if (!media_root_ptr)
{
fputs("Error getting media root pointer.\n\
char *media_root_ptr = rmw_dirname(tmp)\n", stderr);
fputs("Error getting media root pointer.\n", stderr);
exit(EXIT_FAILURE);
}

if (!(waste_curr->media_root = malloc(strlen(media_root_ptr) + 1)))
fatal_malloc();
strcpy(waste_curr->media_root, media_root_ptr);
sn_check(snprintf(tmp, sizeof tmp, "%s", waste_curr->media_root),
sizeof tmp);
if (!lstat(rmw_dirname(tmp), &mp_st))
g_free(media_root_ptr);

gchar *media_root_parent = g_path_get_dirname(waste_curr->media_root);
if (!lstat(media_root_parent, &mp_st))
{
if (mp_st.st_dev == waste_curr->dev_num)
{
Expand All @@ -309,6 +307,7 @@ parse_line_waste(st_waste *waste_curr, struct Canfigger *node,
}
else
msg_err_lstat(waste_curr->parent, __func__, __LINE__);
g_free(media_root_parent);
}
else
msg_err_lstat(waste_curr->parent, __func__, __LINE__);
Expand Down
Loading
Loading