On 10/5/22 23:18, Andreas Rheinhardt wrote:

+int av_uuid_parse_range(const char *in_start, const char *in_end, AVUUID uu)
+{
+    int i;
+    const char *cp;
+    char buf[3];
+
+    if ((in_end - in_start) != 36)
+        return -1;
+
+    for (i = 0, cp = in_start; i < 36; i++, cp++) {
+        if (i == 8 || i == 13 || i == 18 || i == 23) {
+            if (*cp == '-')
+                continue;
+            return AVERROR(EINVAL);
+        }
+
+        if (!av_isxdigit(*cp))
+            return AVERROR(EINVAL);
+    }
+
+    buf[2] = '\0';
+    for (i = 0, cp = in_start; i < 16; i++) {
+        if (i == 4 || i == 6 || i == 8 || i == 10)
+            cp++;
+
+        buf[0] = *cp++;
+        buf[1] = *cp++;
+
+        errno = 0;
+        uu[i] = strtoul(buf, NULL, 16);
+        if (errno)
+            return AVERROR(errno);

How could this ever happen given that you have already checked that the
buffer only contains hex digits? And isn't using strtoul a bit overkill
anyway? I'd just check and parse this stuff in one loop.


Yeah, good point. It's based off libuuid's, which has some time/clock uuid 
handling
between the two loops. I'll tidy it up in the next few days... hopefully...

+/**
+ * @file
+ * UUID parsing and serialization utilities.
+ * The library treat the UUID as an opaque sequence of 16 unsigned bytes,
                        ^
                        s

Fixed.

+/**
+ * Parses a string representation of a UUID formatted according to IETF RFC 
4122
+ * into an AVUUID. The parsing is case-insensitive. The string must be 37
+ * characters long, including the terminating NULL character.

NUL, NULL is for pointers.


Changed.

+/**
+ * Parses a string representation of a UUID formatted according to IETF RFC 
4122
+ * into an AVUUID. The parsing is case-insensitive. The string must consist of
+ * 36 characters, i.e. `in_end - in_start == 36`
+ *
+ * @param[in]  in_start Pointer to the first character of the string 
representation
+ * @param[in]  in_end   Pointer to the character after the last character of 
the
+ *                      string representation. That memory location is never
+ *                      accessed
+ * @param[out] uu       AVUUID
+ * @return              A non-zero value in case of an error.
+ */
+int av_uuid_parse_range(const char *in_start, const char *in_end, AVUUID uu);

This sounds like in_end is actually redundant. Does retaining it improve
extensibility?


I believe so. The main difference is av_uuid_parse_range() can handle non 
NUL-termiated
strings. I can just remove the entire last sentence (or change "must" to 
"should").

+
+/**
+ * Serializes a AVUUID into a string representation according to IETF RFC 4122.
+ * The string is lowercase and always 37 characters long, including the
+ * terminating NULL character.
+ *
+ * @param[in]  uu  AVUUID
+ * @param[out] out Pointer to a array of no less than 37 characters.
                                   ^
                                   n


Fixed.


+/**
+ * Sets a UUID to nil
+ *
+ * @param[in,out]  uu  UUID to be set to nil
+ */
+void av_uuid_nil_set(AVUUID uu);

Why are these three functions not static inline? Exporting them seems
like a waste.


No particular reason, it's easy enough to change.

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to