commit:     efed52c9078a89265fa5d7710fa53bd589be66be
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 16 21:00:26 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Nov 16 21:00:26 2025 +0000
URL:        https://gitweb.gentoo.org/proj/steve.git/commit/?id=efed52c9

Start rewriting in C++

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

 meson.build          |  4 ++--
 steve.c => steve.cxx | 48 ++++++++++++++++++++++++------------------------
 2 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/meson.build b/meson.build
index cf63031..d5b4328 100644
--- a/meson.build
+++ b/meson.build
@@ -1,7 +1,7 @@
-project('steve', 'c')
+project('steve', 'cpp')
 
 fuse3 = dependency('fuse3')
 libbsd = dependency('libbsd')
 
-executable('steve', ['steve.c'],
+executable('steve', ['steve.cxx'],
            dependencies: [fuse3, libbsd])

diff --git a/steve.c b/steve.cxx
similarity index 85%
rename from steve.c
rename to steve.cxx
index dd72df4..efbd0ea 100644
--- a/steve.c
+++ b/steve.cxx
@@ -9,17 +9,17 @@
 
 #define FUSE_USE_VERSION 31
 
+#include <cstddef>
+#include <cstdio>
+#include <cstdlib>
+#include <cerrno>
+
+#include <sys/queue.h>
+#include <unistd.h>
+
 #include <cuse_lowlevel.h>
 #include <fuse.h>
 #include <fuse_opt.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/queue.h>
-#include <unistd.h>
-#include <errno.h>
 
 static const char *usage =
 "usage: steve [options]\n"
@@ -45,7 +45,7 @@ struct steve_state {
        bool verbose;
        unsigned int jobs;
        unsigned int tokens;
-       struct steve_read_waiters_head read_waiters;
+       steve_read_waiters_head read_waiters;
 };
 
 enum steve_arg_keys {
@@ -53,7 +53,7 @@ enum steve_arg_keys {
        STEVE_VERBOSE,
 };
 
-#define STEVE_OPT(t, p) { t, offsetof(struct steve_state, p), 1 }
+#define STEVE_OPT(t, p) { t, offsetof(steve_state, p), 1 }
 
 static const struct fuse_opt steve_opts[] = {
        STEVE_OPT("-j %u", jobs),
@@ -68,7 +68,7 @@ static const struct fuse_opt steve_opts[] = {
 static int steve_process_arg(
        void *userdata, const char *arg, int key, struct fuse_args *outargs)
 {
-       struct steve_state *state = userdata;
+       steve_state *state = static_cast<steve_state *>(userdata);
 
        (void) outargs;
        (void) arg;
@@ -89,7 +89,7 @@ static int steve_process_arg(
 
 static void steve_init(void *userdata, struct fuse_conn_info *conn)
 {
-       struct steve_state *state = userdata;
+       steve_state *state = static_cast<steve_state *>(userdata);
 
        /* Disable the receiving and processing of FUSE_INTERRUPT requests */
        conn->no_interrupt = 1;
@@ -102,12 +102,12 @@ static void steve_init(void *userdata, struct 
fuse_conn_info *conn)
 
 static void steve_destroy(void *userdata)
 {
-       struct steve_state *state = userdata;
+       steve_state *state = static_cast<steve_state *>(userdata);
 
        while (!STAILQ_EMPTY(&state->read_waiters)) {
-               struct steve_read_waiter *read_waiter = 
STAILQ_FIRST(&state->read_waiters);
+               steve_read_waiter *read_waiter = 
STAILQ_FIRST(&state->read_waiters);
                STAILQ_REMOVE_HEAD(&state->read_waiters, waiters);
-               free(read_waiter);
+               delete read_waiter;
        }
        STAILQ_INIT(&state->read_waiters);
 }
@@ -119,8 +119,8 @@ static void steve_open(fuse_req_t req, struct 
fuse_file_info *fi)
 
 static void steve_interrupt(fuse_req_t req, void *userdata)
 {
-       struct steve_state *state = userdata;
-       struct steve_read_waiter *it, *read_waiter;
+       steve_state *state = static_cast<steve_state *>(userdata);
+       steve_read_waiter *it, *read_waiter;
 
        fuse_reply_err(req, EINTR);
        STAILQ_FOREACH(it, &state->read_waiters, waiters) {
@@ -141,8 +141,8 @@ static void steve_read(
        fuse_req_t req, size_t size, off_t off, struct fuse_file_info *fi)
 {
        const struct fuse_ctx *context = fuse_req_ctx(req);
-       struct steve_state *state = fuse_req_userdata(req);
-       struct steve_read_waiter *read_waiter;
+       steve_state *state = static_cast<steve_state *>(fuse_req_userdata(req));
+       steve_read_waiter *read_waiter;
 
        if (off != 0) {
                fuse_reply_err(req, EIO);
@@ -168,7 +168,7 @@ static void steve_read(
                return;
        }
 
-       read_waiter = malloc(sizeof(struct steve_read_waiter));
+       read_waiter = new steve_read_waiter();
        if (!read_waiter) {
                fuse_reply_err(req, ENOMEM);
                return;
@@ -182,10 +182,10 @@ static void steve_read(
        fuse_req_interrupt_func(req, steve_interrupt, state);
 }
 
-static void steve_wake_waiters(struct steve_state *state)
+static void steve_wake_waiters(steve_state *state)
 {
        while (state->tokens > 0 && !STAILQ_EMPTY(&state->read_waiters)) {
-               struct steve_read_waiter *read_waiter = STAILQ_FIRST(
+               steve_read_waiter *read_waiter = STAILQ_FIRST(
                                &state->read_waiters);
 
                state->tokens--;
@@ -202,7 +202,7 @@ static void steve_write(
        struct fuse_file_info *fi)
 {
        const struct fuse_ctx *context = fuse_req_ctx(req);
-       struct steve_state *state = fuse_req_userdata(req);
+       steve_state *state = static_cast<steve_state *>(fuse_req_userdata(req));
 
        if (off != 0) {
                fuse_reply_err(req, EIO);
@@ -233,7 +233,7 @@ int main(int argc, char **argv)
        const char *dev_name = "DEVNAME=steve";
        const char *dev_info_argv[] = { dev_name };
        struct cuse_info ci = { 0 };
-       struct steve_state state = { 0 };
+       steve_state state = { 0 };
        int ret;
 
        if (fuse_opt_parse(&args, &state, steve_opts, steve_process_arg)) {

Reply via email to