commit:     faf1a61fa73e2ec62da03cfc81255b4fbdeaf0e1
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Nov 27 11:15:37 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Nov 27 11:15:37 2025 +0000
URL:        https://gitweb.gentoo.org/proj/steve.git/commit/?id=faf1a61f

Use std::print for formatting

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 steve.cxx | 61 +++++++++++++++++++++++++++++++------------------------------
 1 file changed, 31 insertions(+), 30 deletions(-)

diff --git a/steve.cxx b/steve.cxx
index 5397a19..52ff9e6 100644
--- a/steve.cxx
+++ b/steve.cxx
@@ -19,6 +19,7 @@
 #include <deque>
 #include <functional>
 #include <memory>
+#include <print>
 #include <string>
 #include <unordered_map>
 
@@ -87,7 +88,7 @@ static void steve_wake_waiters(steve_state *state)
                state->tokens--;
                state->processes[read_waiter->pid].tokens_held++;
                if (state->verbose)
-                       fprintf(stderr, "Giving job token to PID %ld, %d left, 
%d tokens held by process\n",
+                       std::print(stderr, "Giving job token to PID {}, {} 
left, {} tokens held by process\n",
                                        read_waiter->pid, state->tokens, 
state->processes[read_waiter->pid].tokens_held);
                fuse_reply_buf(read_waiter->req, "+", 1);
                state->read_waiters.pop_front();
@@ -96,7 +97,7 @@ static void steve_wake_waiters(steve_state *state)
        if (state->tokens > 0) {
                for (auto &poll_waiter : state->poll_waiters) {
                        if (state->verbose)
-                               fprintf(stderr, "Notifying PID %ld about 
POLLIN, %d tokens left, %d tokens held by process\n",
+                               std::print(stderr, "Notifying PID {} about 
POLLIN, {} tokens left, {} tokens held by process\n",
                                                poll_waiter.pid, state->tokens, 
state->processes[poll_waiter.pid].tokens_held);
                        fuse_lowlevel_notify_poll(poll_waiter.poll_handle);
                }
@@ -111,8 +112,8 @@ static void steve_handle_pidfd(evutil_socket_t pid_fd, 
short, void *userdata) {
                if (it->second.pid_fd == pid_fd) {
                        state->tokens += it->second.tokens_held;
                        if (state->verbose || it->second.tokens_held > 0) {
-                               fprintf(stderr, "Process %ld exited while 
holding %d tokens, "
-                                               "%d tokens available after 
returning them\n",
+                               std::print(stderr, "Process {} exited while 
holding {} tokens, "
+                                               "{} tokens available after 
returning them\n",
                                                it->first, 
it->second.tokens_held, state->tokens);
                        }
                        state->processes.erase(it);
@@ -130,7 +131,7 @@ static void steve_init(void *userdata, struct 
fuse_conn_info *)
 
        state->tokens = state->jobs;
 
-       fprintf(stderr, "steve running on /dev/steve for %d jobs\n", 
state->jobs);
+       std::print(stderr, "steve running on /dev/steve for {} jobs\n", 
state->jobs);
 }
 
 static void steve_destroy(void *userdata)
@@ -167,13 +168,13 @@ static void steve_open(fuse_req_t req, struct 
fuse_file_info *fi)
                std::unique_ptr<struct event, std::function<void(struct 
event*)>>
                        pidfd_event{event_new(state->evb, pid_fd, 
EV_READ|EV_PERSIST, steve_handle_pidfd, state), event_free};
                if (!pidfd_event) {
-                       fprintf(stderr, "unable to allocate event for pidfd");
+                       std::print(stderr, "unable to allocate event for 
pidfd");
                        close(pid_fd);
                        fuse_reply_err(req, EIO);
                        return;
                }
                if (event_add(pidfd_event.get(), nullptr) == -1) {
-                       fprintf(stderr, "failed to enable pidfd handler");
+                       std::print(stderr, "failed to enable pidfd handler");
                        close(pid_fd);
                        fuse_reply_err(req, EIO);
                        return;
@@ -184,7 +185,7 @@ static void steve_open(fuse_req_t req, struct 
fuse_file_info *fi)
        }
 
        if (state->verbose)
-               fprintf(stderr, "Device open by PID %ld (pidfd %d)\n", fi->fh, 
pid_fd);
+               std::print(stderr, "Device open by PID {} (pidfd {})\n", 
fi->fh, pid_fd);
 
        fuse_reply_open(req, fi);
 }
@@ -194,7 +195,7 @@ static void steve_release(fuse_req_t req, struct 
fuse_file_info *fi)
        steve_state *state = static_cast<steve_state *>(fuse_req_userdata(req));
 
        if (state->verbose)
-               fprintf(stderr, "Device closed by PID %ld\n", fi->fh);
+               std::print(stderr, "Device closed by PID {}\n", fi->fh);
 
        fuse_reply_err(req, 0);
 }
@@ -207,7 +208,7 @@ static void steve_interrupt(fuse_req_t req, void *userdata)
        for (auto it = state->read_waiters.begin(); it != 
state->read_waiters.end(); ++it) {
                if (it->req == req) {
                        if (state->verbose)
-                               fprintf(stderr, "Passed EINTR to PID %ld\n", 
it->pid);
+                               std::print(stderr, "Passed EINTR to PID {}\n", 
it->pid);
                        state->read_waiters.erase(it);
                        break;
                }
@@ -233,7 +234,7 @@ static void steve_read(
                state->tokens--;
                state->processes[fi->fh].tokens_held++;
                if (state->verbose)
-                       fprintf(stderr, "Giving job token to PID %ld, %d left, 
%d tokens held by process\n",
+                       std::print(stderr, "Giving job token to PID {}, {} 
left, {} tokens held by process\n",
                                        fi->fh, state->tokens, 
state->processes[fi->fh].tokens_held);
                fuse_reply_buf(req, "+", 1);
                return;
@@ -246,7 +247,7 @@ static void steve_read(
 
        state->read_waiters.emplace_back(steve_read_waiter{req, fi->fh});
        if (state->verbose)
-               fprintf(stderr, "No free job token for PID %ld, waiting, %d 
tokens held by process\n",
+               std::print(stderr, "No free job token for PID {}, waiting, {} 
tokens held by process\n",
                                fi->fh, state->processes[fi->fh].tokens_held);
        fuse_req_interrupt_func(req, steve_interrupt, state);
 }
@@ -263,7 +264,7 @@ static void steve_write(
        }
 
        if (state->processes[fi->fh].tokens_held < size) {
-               fprintf(stderr, "Warning: process %ld tried to return %zd 
tokens while holding only %d tokens, capping\n",
+               std::print(stderr, "Warning: process {} tried to return {} 
tokens while holding only {} tokens, capping\n",
                                fi->fh, size, 
state->processes[fi->fh].tokens_held);
                size = state->processes[fi->fh].tokens_held;
        }
@@ -275,7 +276,7 @@ static void steve_write(
        state->tokens += size;
        state->processes[fi->fh].tokens_held -= size;
        if (state->verbose)
-               fprintf(stderr, "PID %ld returned %zd tokens, %d available now, 
%d tokens held by process\n",
+               std::print(stderr, "PID {} returned {} tokens, {} available 
now, {} tokens held by process\n",
                                fi->fh, size, state->tokens, 
state->processes[fi->fh].tokens_held);
        fuse_reply_write(req, size);
 
@@ -290,7 +291,7 @@ static void steve_poll(
        int events = fi->poll_events & (POLLIN | POLLOUT);
 
        if (state->verbose)
-               fprintf(stderr, "PID %ld requested poll, %d tokens available, 
%d tokens held by process\n",
+               std::print(stderr, "PID {} requested poll, {} tokens available, 
{} tokens held by process\n",
                                fi->fh, state->tokens, 
state->processes[fi->fh].tokens_held);
 
        /* POLLOUT is always possible, POLLIN only if we have any tokens */
@@ -318,10 +319,10 @@ static const struct cuse_lowlevel_ops steve_ops = {
 static void steve_handle_sigusr1(evutil_socket_t, short, void *userdata) {
        steve_state *state = static_cast<steve_state *>(userdata);
 
-       fprintf(stderr, "steve: currently %d tokens available out of %d\n",
+       std::print(stderr, "steve: currently {} tokens available out of {}\n",
                        state->tokens, state->jobs);
        for (auto &it : state->processes) {
-               fprintf(stderr, "PID %ld holds %d tokens\n", it.first, 
it.second.tokens_held);
+               std::print(stderr, "PID {} holds {} tokens\n", it.first, 
it.second.tokens_held);
        }
 }
 
@@ -332,8 +333,8 @@ static void steve_handle_cuse(evutil_socket_t, short, void 
*userdata) {
                fuse_session_process_buf(state->session, &state->buf);
 }
 
-static const char *steve_usage =
-"usage: %s [options]\n"
+static constexpr char steve_usage[] =
+"usage: {} [options]\n"
 "\n"
 "options:\n"
 "    --help, -h             print this help message\n"
@@ -365,10 +366,10 @@ int main(int argc, char **argv)
        while ((opt = getopt_long(argc, argv, "hVj:vd", steve_opts, nullptr)) 
!= -1) {
                switch (opt) {
                        case 'h':
-                               printf(steve_usage, argv[0]);
+                               std::print(steve_usage, argv[0]);
                                return 0;
                        case 'V':
-                               printf("steve %s\n", STEVE_VERSION);
+                               std::print("steve {}\n", STEVE_VERSION);
                                return 0;
                        case 'j':
                                {
@@ -376,7 +377,7 @@ int main(int argc, char **argv)
                                        errno = 0;
                                        long jobs_arg = strtol(optarg, &endptr, 
10);
                                        if (*endptr || errno == ERANGE || 
jobs_arg < 0 || jobs_arg > INT_MAX) {
-                                               fprintf(stderr, "invalid job 
number: %s\n", optarg);
+                                               std::print(stderr, "invalid job 
number: {}\n", optarg);
                                                return 1;
                                        }
                                        state.jobs = jobs_arg;
@@ -389,7 +390,7 @@ int main(int argc, char **argv)
                                debug = true;
                                break;
                        default:
-                               fprintf(stderr, steve_usage, argv[0]);
+                               std::print(stderr, steve_usage, argv[0]);
                                return 1;
                }
        }
@@ -397,7 +398,7 @@ int main(int argc, char **argv)
        std::unique_ptr<struct event_base, std::function<void(struct 
event_base*)>>
                evb{event_base_new(), event_base_free};
        if (!evb) {
-               fprintf(stderr, "failed to initialize libevent\n");
+               std::print(stderr, "failed to initialize libevent\n");
                return 1;
        }
        state.evb = evb.get();
@@ -427,7 +428,7 @@ int main(int argc, char **argv)
        std::unique_ptr<struct fuse_session, std::function<void(struct 
fuse_session*)>> session{
                cuse_lowlevel_new(args_ptr.get(), &ci, &steve_ops, &state), 
fuse_session_destroy};
        if (!session) {
-               fprintf(stderr, "failed to initialize FUSE");
+               std::print(stderr, "failed to initialize FUSE");
                return 1;
        }
        state.session = session.get();
@@ -435,28 +436,28 @@ int main(int argc, char **argv)
        std::unique_ptr<struct event, std::function<void(struct event*)>>
                cuse_event{event_new(evb.get(), cuse_fd, EV_READ|EV_PERSIST, 
steve_handle_cuse, &state), event_free};
        if (!cuse_event) {
-               fprintf(stderr, "failed to initialize CUSE handler");
+               std::print(stderr, "failed to initialize CUSE handler");
                return 1;
        }
        if (event_add(cuse_event.get(), nullptr) == -1) {
-               fprintf(stderr, "failed to enable CUSE handler");
+               std::print(stderr, "failed to enable CUSE handler");
                return 1;
        }
 
        std::unique_ptr<struct event, std::function<void(struct event*)>>
                sigusr1_event{evsignal_new(evb.get(), SIGUSR1, 
steve_handle_sigusr1, &state), event_free};
        if (!sigusr1_event) {
-               fprintf(stderr, "failed to initialize SIGUSR1 handler");
+               std::print(stderr, "failed to initialize SIGUSR1 handler");
                return 1;
        }
        if (event_add(sigusr1_event.get(), nullptr) == -1) {
-               fprintf(stderr, "failed to enable SIGUSR1 handler");
+               std::print(stderr, "failed to enable SIGUSR1 handler");
                return 1;
        }
 
        std::string mountpoint = "/dev/fd/" + std::to_string(cuse_fd);
        if (fuse_session_mount(session.get(), mountpoint.c_str()) == -1) {
-               fprintf(stderr, "failed to mount the filesystem");
+               std::print(stderr, "failed to mount the filesystem");
                return 1;
        }
 

Reply via email to