]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
Update bcachefs sources to e318fabeb4 bcachefs: Fix pr_tab_rjust()
authorKent Overstreet <kent.overstreet@gmail.com>
Sun, 6 Mar 2022 19:07:16 +0000 (14:07 -0500)
committerKent Overstreet <kent.overstreet@gmail.com>
Sun, 6 Mar 2022 19:07:16 +0000 (14:07 -0500)
.bcachefs_revision
libbcachefs/util.c
libbcachefs/util.h

index 619cb82895a8aecc2a929376f00b8452c1fb9019..8e1032accb68c1c3ecc486daf3f79cd4720660f8 100644 (file)
@@ -1 +1 @@
-259ff916050fb6a9ff742891fb8aa379924a187f
+e318fabeb424d4b8fdd46329125c30aaa4f9006a
index 766d08aede7123384e765e1bcef52c9d5c04bd07..37fc2041376489738339670a5fbac71e4eca9560 100644 (file)
@@ -101,8 +101,14 @@ STRTO_H(strtou64, u64)
 
 static int bch2_printbuf_realloc(struct printbuf *out, unsigned extra)
 {
-       unsigned new_size = roundup_pow_of_two(out->size + extra);
-       char *buf = krealloc(out->buf, new_size, !out->atomic ? GFP_KERNEL : GFP_ATOMIC);
+       unsigned new_size;
+       char *buf;
+
+       if (out->pos + extra + 1 < out->size)
+               return 0;
+
+       new_size = roundup_pow_of_two(out->size + extra);
+       buf = krealloc(out->buf, new_size, !out->atomic ? GFP_KERNEL : GFP_ATOMIC);
 
        if (!buf) {
                out->allocation_failure = true;
@@ -131,6 +137,33 @@ void bch2_pr_buf(struct printbuf *out, const char *fmt, ...)
        out->pos += len;
 }
 
+void bch2_pr_tab_rjust(struct printbuf *buf)
+{
+       BUG_ON(buf->tabstop > ARRAY_SIZE(buf->tabstops));
+
+       if (printbuf_linelen(buf) < buf->tabstops[buf->tabstop]) {
+               unsigned move = buf->pos - buf->last_field;
+               unsigned shift = buf->tabstops[buf->tabstop] -
+                       printbuf_linelen(buf);
+
+               bch2_printbuf_realloc(buf, shift);
+
+               if (buf->last_field + shift + 1 < buf->size) {
+                       move = min(move, buf->size - 1 - buf->last_field - shift);
+
+                       memmove(buf->buf + buf->last_field + shift,
+                               buf->buf + buf->last_field,
+                               move);
+                       memset(buf->buf + buf->last_field, ' ', shift);
+                       buf->pos += shift;
+                       buf->buf[buf->pos] = 0;
+               }
+       }
+
+       buf->last_field = buf->pos;
+       buf->tabstop++;
+}
+
 void bch2_hprint(struct printbuf *buf, s64 v)
 {
        int u, t = 0;
index 4095df2fcded750170317f47926ef6bd65de3327..2c9e91023bb96a6c80bc4d81e43cce075b046549 100644 (file)
@@ -334,27 +334,11 @@ static inline void pr_tab(struct printbuf *buf)
        buf->tabstop++;
 }
 
+void bch2_pr_tab_rjust(struct printbuf *);
+
 static inline void pr_tab_rjust(struct printbuf *buf)
 {
-       ssize_t shift = min_t(ssize_t, buf->tabstops[buf->tabstop] -
-                             printbuf_linelen(buf),
-                             printbuf_remaining(buf));
-       ssize_t move = min_t(ssize_t, buf->pos - buf->last_field,
-                            printbuf_remaining(buf) - shift);
-
-       BUG_ON(buf->tabstop > ARRAY_SIZE(buf->tabstops));
-
-       if (shift > 0) {
-               memmove(buf->buf + buf->last_field + shift,
-                       buf->buf + buf->last_field,
-                       move);
-               memset(buf->buf + buf->last_field, ' ', shift);
-               buf->pos += shift;
-               buf->buf[buf->pos] = 0;
-       }
-
-       buf->last_field = buf->pos;
-       buf->tabstop++;
+       bch2_pr_tab_rjust(buf);
 }
 
 void bch2_pr_units(struct printbuf *, s64, s64);