From 41faf78f9faca8bf1bc2eea98d2be3ae93c72544 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Mon, 20 Apr 2020 18:05:39 +0200
Subject: [PATCH] Using strtol

---
 inc/lektor/macro.h | 8 ++++++++
 src/mkv/write.c    | 7 +++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/inc/lektor/macro.h b/inc/lektor/macro.h
index 468f1de0..f5a32090 100644
--- a/inc/lektor/macro.h
+++ b/inc/lektor/macro.h
@@ -64,3 +64,11 @@
 #define GOTO_UNLESS(cond, msg, label)   GOTO_IF(!(cond), msg, ret)
 #define RETURN_UNLESS(cond, msg, ret)   RETURN_IF(!(cond), msg, ret)
 #define NOTHING                         /* Usefull to return nothing. */
+
+#define STRTOL(ret, str, endptr, err_flag)                              \
+{                                                                       \
+    err_flag = 0;                                                       \
+    errno    = 0;                                                       \
+    ret      = str == NULL ? 0 : strtol(str, &(endptr), 0);             \
+    err_flag = errno != 0 || endptr == str;                             \
+}
diff --git a/src/mkv/write.c b/src/mkv/write.c
index 08d2764f..4ebd6b9c 100644
--- a/src/mkv/write.c
+++ b/src/mkv/write.c
@@ -147,6 +147,7 @@ metadata_from_path(char *const mkvfile, struct kara_metadata *meta)
     regmatch_t pmatch[nmatch];
     int reti, sta = false;
     char msgbuf[LEKTOR_TAG_MAX];
+    char *endptr;
 
     static const char *rgx =
         "^/(.+)/(vo|va|amv|cdg|autres|vocaloid)/"
@@ -178,10 +179,8 @@ metadata_from_path(char *const mkvfile, struct kara_metadata *meta)
         goto error;
     }
 
-    if (msgbuf[0] != '\0') {
-        meta->song_number = atoi(msgbuf);   /* TODO: Use strtol */
-        meta->song_number = MAX(1, meta->song_number);
-    } else
+    STRTOL(meta->song_number, msgbuf, endptr, reti);
+    if (reti || meta->song_number <= 0)
         meta->song_number = 1;
 
     sta = true;
-- 
GitLab