]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
terminal-util: modernize ptsname_malloc a bit
authorMike Yuan <me@yhndnzj.com>
Sun, 15 Jun 2025 19:25:34 +0000 (21:25 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Jun 2025 11:08:52 +0000 (20:08 +0900)
src/basic/terminal-util.c

index 5f7b6703891bed59b9cd7e39ca6293526d1ebe1a..13337b805646424ce96dd198facaf9bec8dfdc5e 100644 (file)
@@ -1583,33 +1583,25 @@ int get_ctty(pid_t pid, dev_t *ret_devnr, char **ret) {
 }
 
 int ptsname_malloc(int fd, char **ret) {
-        size_t l = 100;
-
         assert(fd >= 0);
         assert(ret);
 
-        for (;;) {
-                char *c;
+        for (size_t l = 50;;) {
+                _cleanup_free_ char *c = NULL;
 
                 c = new(char, l);
                 if (!c)
                         return -ENOMEM;
 
-                if (ptsname_r(fd, c, l) == 0) {
-                        *ret = c;
+                if (ptsname_r(fd, c, l) >= 0) {
+                        *ret = TAKE_PTR(c);
                         return 0;
                 }
-                if (errno != ERANGE) {
-                        free(c);
+                if (errno != ERANGE)
                         return -errno;
-                }
-
-                free(c);
 
-                if (l > SIZE_MAX / 2)
+                if (!MUL_ASSIGN_SAFE(&l, 2))
                         return -ENOMEM;
-
-                l *= 2;
         }
 }