From patchwork Mon Jun 15 08:26:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stijn Devriendt X-Patchwork-Id: 1309321 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::238; helo=mail-lj1-x238.google.com; envelope-from=swupdate+bncbclnzfwotyirbxhbtt3qkgqeuaxlwaq@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=NSQH5Tcg; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=VwfAyD1F; dkim-atps=neutral Received: from mail-lj1-x238.google.com (mail-lj1-x238.google.com [IPv6:2a00:1450:4864:20::238]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49lkw14bWzz9sSg for ; Mon, 15 Jun 2020 18:27:12 +1000 (AEST) Received: by mail-lj1-x238.google.com with SMTP id u10sf1366095ljk.3 for ; Mon, 15 Jun 2020 01:27:12 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1592209628; cv=pass; d=google.com; s=arc-20160816; b=VBkzkM/MK2cM8z+yXucZp6uD1R0PfwXaXAKFkhmYIxOUXYdM/mTvIcdCNoz9vm0WjS j6V2ITf5lLjID+v683aalJfLbLEB7Nrpm4j45NIsxcg414elwSr/mE2hON8J1T2Bnd/5 JCqKq2Dm/I28ZuNBKgroXS5zLFSIcyfx+Br/iccxMOIt4QFSTaKYKU6iJqwX2MkdBIoU p7znAR7dOL0RJ5Yn5zLaQS558uDs9ZMROnZutN8nuyrXDaE8AI6YGheCmUXkGnE6CSdC Yy4rpOruk/bOfOUrokJvL+E0QCqfrOXn6CpOtQ+qwZlP8Vi843aZhMYYp0JwBqYqTwAe 4luw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:mime-version:sender:dkim-signature :dkim-signature; bh=F1CfENYuSP18Nx+2JguHjaZWXyxr34ispjJN0cLDtvs=; b=R9ehvBUXbcO5/H0eFpYtzPEG+RsKTIxXT0q4/kpuzYBMblcmaQUDsFrs+yzH9fsr7L vWYRwEDE3fgEMBVgXG/Vqzud+kWaeWwmlQkbCW1lWy6l9oPCYOC2TJKW89coIAktT3qM DUuMM4fNP1fav+/UqHVlWCzaALe2UjIBBu8YeTpJpNyJcr/2IR+fQy8AHvPUeprgF/Qv QGkjT2xO7yAvICU6v3sQceeKF1KqosrSUAmk9xC9/7C2lzNGvxFYyRWQXdyiNbB1cQ2e js6JOLLpQvnIENL+QCjB7UsdwV/1def8c2ovUpB8S9A2C5W3IT4oFPH+zvWcR+jl5H5P TwMA== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=l162PuiG; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::543 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=F1CfENYuSP18Nx+2JguHjaZWXyxr34ispjJN0cLDtvs=; b=NSQH5Tcgf7xlKHynXmQacueZLWjYQhzmMDTqtDD05zS7rF+MCADHop0OPcVnpDUqYS sQ2BniF0bWADESSJVJRepH5/v5k8Q+YeEHjKUvD99bi9RwY+TtrSb55quyMJTrDCR68b epnICP7SJgkdHlITVDp+NixWs02MJZGensTN78Rkht7Em2c3SO5wrOmn4lh3Cc++FSni Ougr5lNE5h0JbMFzfRoGRU9BqI9JCGbcnnlthBixS9iVTYEPpXAegemC9sXmHgMGO0nY xBrt3Yv3OB1u6XLsM38klNzYpRLhORv01kOGEDmZmnDOFQo8brCT9MUuJ/jYfh8GADhV SoGg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=F1CfENYuSP18Nx+2JguHjaZWXyxr34ispjJN0cLDtvs=; b=VwfAyD1Fnvm894ASB8Z3zhKjobLcY/DArCzn8EF+HJC1eklQquiQsj+PkRLaRTvaQT uI4KTz6J2QFsP1qSbnZ7Te2O9W8pJtQbXw+OmSjOhukk9UIgZ8bl0AH918SVQBxiWa49 G6eDibxOb6m9nbaGY9i12bOHgd29XXpiKbqB80GCwmKzJRQq9Dm5bPaOL5MFOCGJjzFa Pxb/CwUgAblHEIRazWq5UL1L+WNJTZl2v0heGNhC++hV8w5G/NQPqIMX/P4SwdGIB6dj A6SnMcpoEf0aA91cRP281Zwm7SkZKPCq2Z+w7jr3b8Bxc/0JlbOySshpC5mGagVW6/ra jBYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=F1CfENYuSP18Nx+2JguHjaZWXyxr34ispjJN0cLDtvs=; b=LOz2tV6n/ep8Y4faUDICgZTXVpJDcCnLVgfsgBNLfI9Xjbkhr69OluSxBXkQynneGT UVN0b/86iyVegXvj2rTsUJtmHIqRlWw5EtCVRAcxFZHOSFgGRfZ7QvrM7Z4ksc7w43Ta rrjigXbGPjjBii7zc4TVfjm4fYM13wtR1/mfxigm2fjKoMqvy85TaPm96+qc0lwpjipO 5+DuDg9iRkOt5rz10s3tKkpNZw90LoGocTgQrZhDxoNYleBAZphGAYmxulSJrzqyZ0ya a/EcXIYfqumCFsQWyLxpC/7U5VlTS20RCh41h673ZI5okJvh4nk0eGozxFzOfW36M40b HJyw== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM533Et5lh1rZojYpEFeq0+aggBdeRr9SyYO91m+mAFUvWc2nBUpBs yWLl41xp6gAXinptYPFcIMc= X-Google-Smtp-Source: ABdhPJz+2K3n4/xy8GOMWhQFkjihVi11kq8FD8t6U0mTbJ3MgT8Mkc2okN2aXOoWV4/T53JgoxW8xw== X-Received: by 2002:a2e:810d:: with SMTP id d13mr11847469ljg.174.1592209628732; Mon, 15 Jun 2020 01:27:08 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:a2e:8843:: with SMTP id z3ls2422772ljj.11.gmail; Mon, 15 Jun 2020 01:27:07 -0700 (PDT) X-Received: by 2002:a2e:7311:: with SMTP id o17mr12216748ljc.35.1592209627870; Mon, 15 Jun 2020 01:27:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592209627; cv=none; d=google.com; s=arc-20160816; b=l1Qthc+/zFufyGg9gyaimJK3wDWJqB/uo34yktPid+G7Y7s82DPF9hG08W3/9SpQKu ng0lGbCjmEXlmdOYHtw48omxJe5Z3sWoj0cGSp9a8zv9C2D/Msp8ZU7/AluXZFmUOnmk cY8ME3FL1jXSDkIDqtUdxBaE3HTOtznnERaNsbhotO00Xsp4mEWNNnnKMQqIKP8zzx4s rL/hh/N3KkFzLSxFq48WgXxaghl6H7A/hzGV2D/EaMw49qsOXTy7+ox4UjbLl/zPbhhT UHPATP281HeYam1+zSAqELjCzV9HaDsDX+FF8Qpp5WQ8+5vMCgHwIgzv3000rhzhKX0a WC0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=kNEGeoIivLOih1IS9PiqfmezEzGOJu5rPWwSBFD1+7k=; b=b7goZ9xwtBKv6NBGiQ/OkX0NjcqY2xVIm+ErBJotGaGXp+cTBnn0kozj64rv/bwFQa d3Yz3F8psjuPsqxHevfNHLaZTjcPwj4P1YLQTe5K4CvBxn61eWopqv5vehYHd9P8wSGs ubq2KIMFDR0ANphUunrGlafsbcukl/0HHoqT6vocAC9VH9b4O6zdJchQXJnnSX6hl9sy ZoMR894LFKMATDPlEVyE4k06V/9LorVJA+KrKVWuPJsUOHP9CSb/+HbyemoepK/EOGB0 S1I/k/CeoTGmmHrmP+9t6A6vNuxToh8xJYCUWDtwXY4FXGvvAohiGAGDbDk4P7ikYYFO W+rg== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=l162PuiG; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::543 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-ed1-x543.google.com (mail-ed1-x543.google.com. [2a00:1450:4864:20::543]) by gmr-mx.google.com with ESMTPS id z3si117430lfe.5.2020.06.15.01.27.07 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 01:27:07 -0700 (PDT) Received-SPF: pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::543 as permitted sender) client-ip=2a00:1450:4864:20::543; Received: by mail-ed1-x543.google.com with SMTP id x93so10837708ede.9 for ; Mon, 15 Jun 2020 01:27:07 -0700 (PDT) X-Received: by 2002:a05:6402:1d96:: with SMTP id dk22mr23419929edb.258.1592209627196; Mon, 15 Jun 2020 01:27:07 -0700 (PDT) Received: from sde1.telecom-it.be (ptr-dv4l9auv4w1m1i5kotr.18120a2.ip6.access.telenet.be. [2a02:1811:ce13:ba00:717d:f0a2:e207:f7af]) by smtp.googlemail.com with ESMTPSA id fi13sm8656314ejb.34.2020.06.15.01.27.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:27:06 -0700 (PDT) From: Stijn Devriendt To: HIGHGuY@gmail.com, sbabic@denx.de Cc: tomas@aparicio.me, swupdate@googlegroups.com, Stijn Devriendt Subject: [swupdate] [PATCH v3 1/7] Add semver library Date: Mon, 15 Jun 2020 10:26:56 +0200 Message-Id: <20200615082702.32693-2-sde@unmatched.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200612100354.3591-1-sde@unmatched.eu> References: <20200612100354.3591-1-sde@unmatched.eu> X-Original-Sender: HIGHGuY@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=l162PuiG; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::543 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , Originally from: https://github.com/h2non/semver.c.git Original commit: bd1db234a68f305ed10268bd023df1ad672061d7 License: MIT Signed-off-by: Stijn Devriendt --- core/Makefile | 3 +- core/semver.c | 638 +++++++++++++++++++++++++++++++++++++++++++++++ include/semver.h | 105 ++++++++ 3 files changed, 745 insertions(+), 1 deletion(-) create mode 100644 core/semver.c create mode 100644 include/semver.h diff --git a/core/Makefile b/core/Makefile index a1d5f09..ad94120 100644 --- a/core/Makefile +++ b/core/Makefile @@ -23,4 +23,5 @@ obj-y += swupdate.o \ progress_thread.o \ parsing_library.o \ artifacts_versions.o \ - swupdate_dict.o + swupdate_dict.o \ + semver.o diff --git a/core/semver.c b/core/semver.c new file mode 100644 index 0000000..77a11ba --- /dev/null +++ b/core/semver.c @@ -0,0 +1,638 @@ +/* + * semver.c + * + * Copyright (c) 2015-2017 Tomas Aparicio + * MIT licensed + */ + +#include +#include +#include +#include "semver.h" + +#define SLICE_SIZE 50 +#define DELIMITER "." +#define PR_DELIMITER "-" +#define MT_DELIMITER "+" +#define NUMBERS "0123456789" +#define ALPHA "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" +#define DELIMITERS DELIMITER PR_DELIMITER MT_DELIMITER +#define VALID_CHARS NUMBERS ALPHA DELIMITERS + +static const size_t MAX_SIZE = sizeof(char) * 255; +static const int MAX_SAFE_INT = (unsigned int) -1 >> 1; + +/** + * Define comparison operators, storing the + * ASCII code per each symbol in hexadecimal notation. + */ + +enum operators { + SYMBOL_GT = 0x3e, + SYMBOL_LT = 0x3c, + SYMBOL_EQ = 0x3d, + SYMBOL_TF = 0x7e, + SYMBOL_CF = 0x5e +}; + +/** + * Private helpers + */ + +/* + * Remove [begin:len-begin] from str by moving len data from begin+len to begin. + * If len is negative cut out to the end of the string. + */ +static int +strcut (char *str, int begin, int len) { + size_t l; + l = strlen(str); + + if((int)l < 0 || (int)l > MAX_SAFE_INT) return -1; + + if (len < 0) len = l - begin + 1; + if (begin + len > (int)l) len = l - begin; + memmove(str + begin, str + begin + len, l - len + 1 - begin); + + return len; +} + +static int +contains (const char c, const char *matrix, size_t len) { + size_t x; + for (x = 0; x < len; x++) + if ((char) matrix[x] == c) return 1; + return 0; +} + +static int +has_valid_chars (const char *str, const char *matrix) { + size_t i, len, mlen; + len = strlen(str); + mlen = strlen(matrix); + + for (i = 0; i < len; i++) + if (contains(str[i], matrix, mlen) == 0) + return 0; + + return 1; +} + +static int +binary_comparison (int x, int y) { + if (x == y) return 0; + if (x > y) return 1; + return -1; +} + +static int +parse_int (const char *s) { + int valid, num; + valid = has_valid_chars(s, NUMBERS); + if (valid == 0) return -1; + + num = strtol(s, NULL, 10); + if (num > MAX_SAFE_INT) return -1; + + return num; +} + +/* + * Return a string allocated on the heap with the content from sep to end and + * terminate buf at sep. + */ +static char * +parse_slice (char *buf, char sep) { + char *pr, *part; + int plen; + + /* Find separator in buf */ + pr = strchr(buf, sep); + if (pr == NULL) return NULL; + /* Length from separator to end of buf */ + plen = strlen(pr); + + /* Copy from buf into new string */ + part = (char*)calloc(plen + 1, sizeof(*part)); + if (part == NULL) return NULL; + memcpy(part, pr + 1, plen); + /* Null terminate new string */ + part[plen] = '\0'; + + /* Terminate buf where separator was */ + *pr = '\0'; + + return part; +} + +/** + * Parses a string as semver expression. + * + * Returns: + * + * `0` - Parsed successfully + * `-1` - In case of error + */ + +int +semver_parse (const char *str, semver_t *ver) { + int valid, res; + size_t len; + char *buf; + valid = semver_is_valid(str); + if (!valid) return -1; + + len = strlen(str); + buf = (char*)calloc(len + 1, sizeof(*buf)); + if (buf == NULL) return -1; + strcpy(buf, str); + + ver->metadata = parse_slice(buf, MT_DELIMITER[0]); + ver->prerelease = parse_slice(buf, PR_DELIMITER[0]); + + res = semver_parse_version(buf, ver); + free(buf); +#if DEBUG > 0 + printf("[debug] semver.c %s = %d.%d.%d, %s %s\n", str, ver->major, ver->minor, ver->patch, ver->prerelease, ver->metadata); +#endif + return res; +} + +/** + * Parses a given string as semver expression. + * + * Returns: + * + * `0` - Parsed successfully + * `-1` - Parse error or invalid + */ + +int +semver_parse_version (const char *str, semver_t *ver) { + size_t len; + int index, value; + char *slice, *next, *endptr; + slice = (char *) str; + index = 0; + + while (slice != NULL && index++ < 4) { + next = strchr(slice, DELIMITER[0]); + if (next == NULL) + len = strlen(slice); + else + len = next - slice; + if (len > SLICE_SIZE) return -1; + + /* Cast to integer and store */ + value = strtol(slice, &endptr, 10); + if (endptr != next && *endptr != '\0') return -1; + + switch (index) { + case 1: ver->major = value; break; + case 2: ver->minor = value; break; + case 3: ver->patch = value; break; + } + + /* Continue with the next slice */ + if (next == NULL) + slice = NULL; + else + slice = next + 1; + } + + return 0; +} + +static int +compare_prerelease (char *x, char *y) { + char *lastx, *lasty, *xptr, *yptr, *endptr; + int xlen, ylen, xisnum, yisnum, xnum, ynum; + int xn, yn, min, res; + if (x == NULL && y == NULL) return 0; + if (y == NULL && x) return -1; + if (x == NULL && y) return 1; + + lastx = x; + lasty = y; + xlen = strlen(x); + ylen = strlen(y); + + while (1) { + if ((xptr = strchr(lastx, DELIMITER[0])) == NULL) + xptr = x + xlen; + if ((yptr = strchr(lasty, DELIMITER[0])) == NULL) + yptr = y + ylen; + + xnum = strtol(lastx, &endptr, 10); + xisnum = endptr == xptr ? 1 : 0; + ynum = strtol(lasty, &endptr, 10); + yisnum = endptr == yptr ? 1 : 0; + + if (xisnum && !yisnum) return -1; + if (!xisnum && yisnum) return 1; + + if (xisnum && yisnum) { + /* Numerical comparison */ + if (xnum != ynum) return xnum < ynum ? -1 : 1; + } else { + /* String comparison */ + xn = xptr - lastx; + yn = yptr - lasty; + min = xn < yn ? xn : yn; + if ((res = strncmp(lastx, lasty, min))) return res < 0 ? -1 : 1; + if (xn != yn) return xn < yn ? -1 : 1; + } + + lastx = xptr + 1; + lasty = yptr + 1; + if (lastx == x + xlen + 1 && lasty == y + ylen + 1) break; + if (lastx == x + xlen + 1) return -1; + if (lasty == y + ylen + 1) return 1; + } + + return 0; +} + +int +semver_compare_prerelease (semver_t x, semver_t y) { + return compare_prerelease(x.prerelease, y.prerelease); +} + +/** + * Performs a major, minor and patch binary comparison (x, y). + * This function is mostly used internally + * + * Returns: + * + * `0` - If versiona are equal + * `1` - If x is higher than y + * `-1` - If x is lower than y + */ + +int +semver_compare_version (semver_t x, semver_t y) { + int res; + + if ((res = binary_comparison(x.major, y.major)) == 0) { + if ((res = binary_comparison(x.minor, y.minor)) == 0) { + return binary_comparison(x.patch, y.patch); + } + } + + return res; +} + +/** + * Compare two semantic versions (x, y). + * + * Returns: + * - `1` if x is higher than y + * - `0` if x is equal to y + * - `-1` if x is lower than y + */ + +int +semver_compare (semver_t x, semver_t y) { + int res; + + if ((res = semver_compare_version(x, y)) == 0) { + return semver_compare_prerelease(x, y); + } + + return res; +} + +/** + * Performs a `greater than` comparison + */ + +int +semver_gt (semver_t x, semver_t y) { + return semver_compare(x, y) == 1; +} + +/** + * Performs a `lower than` comparison + */ + +int +semver_lt (semver_t x, semver_t y) { + return semver_compare(x, y) == -1; +} + +/** + * Performs a `equality` comparison + */ + +int +semver_eq (semver_t x, semver_t y) { + return semver_compare(x, y) == 0; +} + +/** + * Performs a `non equal to` comparison + */ + +int +semver_neq (semver_t x, semver_t y) { + return semver_compare(x, y) != 0; +} + +/** + * Performs a `greater than or equal` comparison + */ + +int +semver_gte (semver_t x, semver_t y) { + return semver_compare(x, y) >= 0; +} + +/** + * Performs a `lower than or equal` comparison + */ + +int +semver_lte (semver_t x, semver_t y) { + return semver_compare(x, y) <= 0; +} + +/** + * Checks if version `x` can be satisfied by `y` + * performing a comparison with caret operator. + * + * See: https://docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4 + * + * Returns: + * + * `1` - Can be satisfied + * `0` - Cannot be satisfied + */ + +int +semver_satisfies_caret (semver_t x, semver_t y) { + /* Major versions must always match. */ + if (x.major == y.major) { + /* If major version is 0, minor versions must match */ + if (x.major == 0) { + /* If minor version is 0, patch must match */ + if (x.minor == 0){ + return (x.minor == y.minor) && (x.patch == y.patch); + } + /* If minor version is not 0, patch must be >= */ + else if (x.minor == y.minor){ + return x.patch >= y.patch; + } + else{ + return 0; + } + } + else if (x.minor > y.minor){ + return 1; + } + else if (x.minor == y.minor) + { + return x.patch >= y.patch; + } + else { + return 0; + } + } + return 0; +} + +/** + * Checks if version `x` can be satisfied by `y` + * performing a comparison with tilde operator. + * + * See: https://docs.npmjs.com/misc/semver#tilde-ranges-1-2-3-1-2-1 + * + * Returns: + * + * `1` - Can be satisfied + * `0` - Cannot be satisfied + */ + +int +semver_satisfies_patch (semver_t x, semver_t y) { + return x.major == y.major + && x.minor == y.minor; +} + +/** + * Checks if both versions can be satisfied + * based on the given comparison operator. + * + * Allowed operators: + * + * - `=` - Equality + * - `>=` - Higher or equal to + * - `<=` - Lower or equal to + * - `<` - Lower than + * - `>` - Higher than + * - `^` - Caret comparison (see https://docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4) + * - `~` - Tilde comparison (see https://docs.npmjs.com/misc/semver#tilde-ranges-1-2-3-1-2-1) + * + * Returns: + * + * `1` - Can be satisfied + * `0` - Cannot be satisfied + */ + +int +semver_satisfies (semver_t x, semver_t y, const char *op) { + int first, second; + /* Extract the comparison operator */ + first = op[0]; + second = op[1]; + + /* Caret operator */ + if (first == SYMBOL_CF) + return semver_satisfies_caret(x, y); + + /* Tilde operator */ + if (first == SYMBOL_TF) + return semver_satisfies_patch(x, y); + + /* Strict equality */ + if (first == SYMBOL_EQ) + return semver_eq(x, y); + + /* Greater than or equal comparison */ + if (first == SYMBOL_GT) { + if (second == SYMBOL_EQ) { + return semver_gte(x, y); + } + return semver_gt(x, y); + } + + /* Lower than or equal comparison */ + if (first == SYMBOL_LT) { + if (second == SYMBOL_EQ) { + return semver_lte(x, y); + } + return semver_lt(x, y); + } + + return 0; +} + +/** + * Free heep allocated memory of a given semver. + * This is just a convenient function that you + * should call when you're done. + */ + +void +semver_free (semver_t *x) { + if (x->metadata) { + free(x->metadata); + x->metadata = NULL; + } + if (x->prerelease) { + free(x->prerelease); + x->prerelease = NULL; + } +} + +/** + * Renders + */ + +static void +concat_num (char * str, int x, char * sep) { + char buf[SLICE_SIZE] = {0}; + if (sep == NULL) sprintf(buf, "%d", x); + else sprintf(buf, "%s%d", sep, x); + strcat(str, buf); +} + +static void +concat_char (char * str, char * x, char * sep) { + char buf[SLICE_SIZE] = {0}; + sprintf(buf, "%s%s", sep, x); + strcat(str, buf); +} + +/** + * Render a given semver as string + */ + +void +semver_render (semver_t *x, char *dest) { + concat_num(dest, x->major, NULL); + concat_num(dest, x->minor, DELIMITER); + concat_num(dest, x->patch, DELIMITER); + if (x->prerelease) concat_char(dest, x->prerelease, PR_DELIMITER); + if (x->metadata) concat_char(dest, x->metadata, MT_DELIMITER); +} + +/** + * Version bump helpers + */ + +void +semver_bump (semver_t *x) { + x->major++; +} + +void +semver_bump_minor (semver_t *x) { + x->minor++; +} + +void +semver_bump_patch (semver_t *x) { + x->patch++; +} + +/** + * Helpers + */ + +static int +has_valid_length (const char *s) { + return strlen(s) <= MAX_SIZE; +} + +/** + * Checks if a given semver string is valid + * + * Returns: + * + * `1` - Valid expression + * `0` - Invalid + */ + +int +semver_is_valid (const char *s) { + return has_valid_length(s) + && has_valid_chars(s, VALID_CHARS); +} + +/** + * Removes non-valid characters in the given string. + * + * Returns: + * + * `0` - Valid + * `-1` - Invalid input + */ + +int +semver_clean (char *s) { + size_t i, len, mlen; + int res; + if (has_valid_length(s) == 0) return -1; + + len = strlen(s); + mlen = strlen(VALID_CHARS); + + for (i = 0; i < len; i++) { + if (contains(s[i], VALID_CHARS, mlen) == 0) { + res = strcut(s, i, 1); + if(res == -1) return -1; + --len; --i; + } + } + + return 0; +} + +static int +char_to_int (const char * str) { + int buf; + size_t i,len, mlen; + buf = 0; + len = strlen(str); + mlen = strlen(VALID_CHARS); + + for (i = 0; i < len; i++) + if (contains(str[i], VALID_CHARS, mlen)) + buf += (int) str[i]; + + return buf; +} + +/** + * Render a given semver as numeric value. + * Useful for ordering and filtering. + */ + +int +semver_numeric (semver_t *x) { + int num; + char buf[SLICE_SIZE * 3]; + memset(&buf, 0, SLICE_SIZE * 3); + + if (x->major) concat_num(buf, x->major, NULL); + if (x->major || x->minor) concat_num(buf, x->minor, NULL); + if (x->major || x->minor || x->patch) concat_num(buf, x->patch, NULL); + + num = parse_int(buf); + if(num == -1) return -1; + + if (x->prerelease) num += char_to_int(x->prerelease); + if (x->metadata) num += char_to_int(x->metadata); + + return num; +} diff --git a/include/semver.h b/include/semver.h new file mode 100644 index 0000000..1b48670 --- /dev/null +++ b/include/semver.h @@ -0,0 +1,105 @@ +/* + * semver.h + * + * Copyright (c) 2015-2017 Tomas Aparicio + * MIT licensed + */ + +#ifndef __SEMVER_H +#define __SEMVER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SEMVER_VERSION +#define SEMVER_VERSION "0.2.0" +#endif + +/** + * semver_t struct + */ + +typedef struct semver_version_s { + int major; + int minor; + int patch; + char * metadata; + char * prerelease; +} semver_t; + +/** + * Set prototypes + */ + +int +semver_satisfies (semver_t x, semver_t y, const char *op); + +int +semver_satisfies_caret (semver_t x, semver_t y); + +int +semver_satisfies_patch (semver_t x, semver_t y); + +int +semver_compare (semver_t x, semver_t y); + +int +semver_compare_version (semver_t x, semver_t y); + +int +semver_compare_prerelease (semver_t x, semver_t y); + +int +semver_gt (semver_t x, semver_t y); + +int +semver_gte (semver_t x, semver_t y); + +int +semver_lt (semver_t x, semver_t y); + +int +semver_lte (semver_t x, semver_t y); + +int +semver_eq (semver_t x, semver_t y); + +int +semver_neq (semver_t x, semver_t y); + +int +semver_parse (const char *str, semver_t *ver); + +int +semver_parse_version (const char *str, semver_t *ver); + +void +semver_render (semver_t *x, char *dest); + +int +semver_numeric (semver_t *x); + +void +semver_bump (semver_t *x); + +void +semver_bump_minor (semver_t *x); + +void +semver_bump_patch (semver_t *x); + +void +semver_free (semver_t *x); + +int +semver_is_valid (const char *s); + +int +semver_clean (char *s); + +#ifdef __cplusplus +} +#endif + +#endif From patchwork Mon Jun 15 08:26:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stijn Devriendt X-Patchwork-Id: 1309324 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::53a; helo=mail-ed1-x53a.google.com; envelope-from=swupdate+bncbclnzfwotyirbxhbtt3qkgqeuaxlwaq@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=QbBgriLK; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=qoiU0s6x; dkim-atps=neutral Received: from mail-ed1-x53a.google.com (mail-ed1-x53a.google.com [IPv6:2a00:1450:4864:20::53a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49lkw14VMLz9sRf for ; Mon, 15 Jun 2020 18:27:12 +1000 (AEST) Received: by mail-ed1-x53a.google.com with SMTP id dn27sf4647683edb.15 for ; Mon, 15 Jun 2020 01:27:12 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1592209629; cv=pass; d=google.com; s=arc-20160816; b=ELn+uDtt9eXKuvil6gPCLSOm4Z2x5GUQSIu0yeBkOb6JXJ5/lKR2Ax8TktJ2pP2yQr uTOomDKkauHfmCdMR3Kw0Ow+FnAFUunULyMlQnmEcRYy2fWvR1EN1f4tPHgYKFOfyqxT gYTmfuWi9UbmqJWTOw6XiR+8bAZSIjSTfs3bP+XdCDjUHHFw7GC6CQubKTpaI7rWF9tJ ABVTMBpk08k57iSFYqBCJHUGzIGGy6vQoiswDcXgLQK/C4++22xtRlvcqUSglrSi2a07 DMaT/ue8b7jg2I2Dc21QJIQc9OL8UA10lv0F2eCKkwU92+sy1HGD0CegS7dSt+32Q8T+ 4hdA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:mime-version:sender:dkim-signature :dkim-signature; bh=EsC5XRqsrT7zu3eHkQXZqUPxDQ0cIECQMb3JFvNN7Hk=; b=pxOuYgat1rGRS3ckKHAYYguHZoTseRUlEOzocptLwjnV0HQSfpMUYNj9nnpMc99t7G 5ByqTDgAow70UL4/8/RsGBi7VKjK9HYhnl8QC0r9lydNHkKv9hTujdXSUiQxMKh/qFtD z+59iPG4/djEuJ3yDKlOrmAwkG2QQF/zQBEk6AcsUTYv0ZBqb4iAr3njVf6TfRXuL58E YZ7aDLXBsrIRr80jMVr19rfSPmsw8Qt0SvRVouVkR27fw+as4AmrwvLADYrG/oyPKi/5 BioX2lZr2b3II9Y3ult20n6xr3EBLzz/IFnVASohdgCdloYFjyx/tfe3J5O0Cju8x+4Y /6Gw== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gj1DP266; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::641 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=EsC5XRqsrT7zu3eHkQXZqUPxDQ0cIECQMb3JFvNN7Hk=; b=QbBgriLKxR0vftThgveb53qrOlzslH+RwhBYG28y7D0m1m6S/7+BixcINDg8lq28oJ lk4Gnf2sQjd52QQWcGyjT+1Vgku68vnMqTyY06WfYelQwkaHiqN6pfTb79LG1HMaftd8 +4ln7i0/znkZD6jtK8wYMrcMYFdY9ZyV3PikbNgJgxJNlqZfVTe8nTH6rXOUzGkqZYjo LQR+AWkNTd0UhNfg+M36FVgEKefZgTW6u22MXNNNH2SwSR7MdUQnlmKCI0JtQbmpRRCr zERviCXe4bsq/gkgGGkkMSWokbutdyaL45YzidvAYZE93tVepM3vKmr34AXDRweHR0GD fcQA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=EsC5XRqsrT7zu3eHkQXZqUPxDQ0cIECQMb3JFvNN7Hk=; b=qoiU0s6xRtR7mWT9tysopN7e8Y+EeIqRXt0tflIdMkqW6hPTV8FB/g8D8PK1TQ92K2 eh3L3Y7Jc7lagF1qItKy3PpKFABhw69vNhXDrSr2tfSp97Epri3HSrFTpNB+T2SA3Tac y/1eOt4VEP406S54iqsvNV9e+kJkwncFVn2I6Do3hfmuJ22hwBoJ7z98iqFSc8NNBFZ1 YU8zKTnQcz0cYMCMNXuDHVk3Y6z0bxMj8qelr2gUy+1LJdCGoikH9kyxEZK4IHI7BYi7 u853qwwDSiQEb9ZcT0G2MZ3yKL8bqXfjoxS2LwaFFYwkt7DuBl+dN/YLJRYK7cstQTUE E7Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=EsC5XRqsrT7zu3eHkQXZqUPxDQ0cIECQMb3JFvNN7Hk=; b=IEStuqO3o+dH64klW3yUoD46XjTx3sxrXpslntXtyig4PC2W5CDEmHEp2qQqxXN9Cu zotTHBn8KXr4KQTKKKMYzhvZfJLymNLUfCCSZL41nIfBcHdXB+zuMoiTmwp8WKglCYDM x+o7jpKc+DmHJ47txZUEkxxvm6mkC+evZ0P5QHC4EeDNCu4eBl+Nlj5gnkRE4POmZTJ4 rVTITpsSdoFBKkLVDg8Vs1ug5jic8XqYJUVKW+48nLrJnypA5rkpHDAwmjW7KJwL10HX lEeeQJUvVJRXYMz4s9GKRuObBsoG9D3pqaObZkOozwWAxxCZJq5H8PJXmbxXG9pALPfU nTGA== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM532M0n9KxbZ9CLpse14jqVowFTObCsVyWlIxwKgpifw96S6wWLBG xTNHtz6fuOCvEWyzvJq70y0= X-Google-Smtp-Source: ABdhPJwGaobM65/rBOmafbzH2Y05bkRoXwjWVGM1o53qqRcqgnivh9VEBEbgh1BJ2dKiuxNyjqiRSQ== X-Received: by 2002:a17:906:c828:: with SMTP id dd8mr25438934ejb.550.1592209628989; Mon, 15 Jun 2020 01:27:08 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:a17:906:7248:: with SMTP id n8ls5865909ejk.2.gmail; Mon, 15 Jun 2020 01:27:08 -0700 (PDT) X-Received: by 2002:a17:906:cb97:: with SMTP id mf23mr13127078ejb.468.1592209628316; Mon, 15 Jun 2020 01:27:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592209628; cv=none; d=google.com; s=arc-20160816; b=si1t/Kxfy59vyn83Mbk1TuZMyZCA2ixX+10O3b3TMpUe5ev1HcSLieZCjHNvU2c1df VUpY4yPrENU9e9NTWV8gkgnnFKKGcCAAM4FeJtQRmF3TYiQ0QYVbEIT3w/44dDvcgiNl Dmw65wemc6ztjYu1XrqHwhgNtOpR3GhV+96ug9Dd4Odsqarp5zKroQFI0Tspur15KELn N3zJF/DBUQoeW99Z5V6I1J0npHZvoQSdVD0d2q77gYEKFZOH4lBcb+vlyvuezZrCI1sZ pwK1lJNytoEmJTQSB/bLX1w9K1yLfcOZqzz2mG6/dEMtoctMz4JsAS9yNgRaWRNqK4cZ bbMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=v1CHmbE4clmR997wYgZvZLSVUApS+BgK/6RM+Mim21g=; b=y09PGo/fkD3VcCmnMXvy0r0Gq4hhSM3cL2WIgULQsMGHW8SIJmj/tkxVvQMikjPHwL N0JC5+O+zYko6YCwB8wyg/siOl10erlAxtjdcShHDEpQqVCtkL0cRkQb+J8HuaBMDU8O WnDcG06EyzazSiIjMGO0NzEf6pYwSkg6kCYUSVGZAb1ZEUUtE6G9eQn0RgK9y0SxDsj0 6lQIbhK5zqD7YfORz9rpwtbhR9JimkVCIrm4/XtOEhmY9yeAM4nm44RTVXOiw9wuIJtV wUV+NIuQe8+DO5AF0FxRK79TSv9wmJVaOIhsemyviLngnfLK82kb3kFIEIv3hOb/9p0U Pk8Q== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gj1DP266; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::641 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-ej1-x641.google.com (mail-ej1-x641.google.com. [2a00:1450:4864:20::641]) by gmr-mx.google.com with ESMTPS id m17si833051eda.1.2020.06.15.01.27.08 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 01:27:08 -0700 (PDT) Received-SPF: pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::641 as permitted sender) client-ip=2a00:1450:4864:20::641; Received: by mail-ej1-x641.google.com with SMTP id w16so15924288ejj.5 for ; Mon, 15 Jun 2020 01:27:08 -0700 (PDT) X-Received: by 2002:a17:906:7103:: with SMTP id x3mr22027251ejj.363.1592209628156; Mon, 15 Jun 2020 01:27:08 -0700 (PDT) Received: from sde1.telecom-it.be (ptr-dv4l9auv4w1m1i5kotr.18120a2.ip6.access.telenet.be. [2a02:1811:ce13:ba00:717d:f0a2:e207:f7af]) by smtp.googlemail.com with ESMTPSA id fi13sm8656314ejb.34.2020.06.15.01.27.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:27:07 -0700 (PDT) From: Stijn Devriendt To: HIGHGuY@gmail.com, sbabic@denx.de Cc: tomas@aparicio.me, swupdate@googlegroups.com, Stijn Devriendt Subject: [swupdate] [PATCH v3 2/7] Fix semver compilation warnings Date: Mon, 15 Jun 2020 10:26:57 +0200 Message-Id: <20200615082702.32693-3-sde@unmatched.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200612100354.3591-1-sde@unmatched.eu> References: <20200612100354.3591-1-sde@unmatched.eu> X-Original-Sender: HIGHGuY@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gj1DP266; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::641 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , Signed-off-by: Stijn Devriendt --- core/semver.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/semver.c b/core/semver.c index 77a11ba..95df3fa 100644 --- a/core/semver.c +++ b/core/semver.c @@ -152,9 +152,6 @@ semver_parse (const char *str, semver_t *ver) { res = semver_parse_version(buf, ver); free(buf); -#if DEBUG > 0 - printf("[debug] semver.c %s = %d.%d.%d, %s %s\n", str, ver->major, ver->minor, ver->patch, ver->prerelease, ver->metadata); -#endif return res; } @@ -499,7 +496,7 @@ semver_free (semver_t *x) { */ static void -concat_num (char * str, int x, char * sep) { +concat_num (char * str, int x, const char * sep) { char buf[SLICE_SIZE] = {0}; if (sep == NULL) sprintf(buf, "%d", x); else sprintf(buf, "%s%d", sep, x); @@ -507,7 +504,7 @@ concat_num (char * str, int x, char * sep) { } static void -concat_char (char * str, char * x, char * sep) { +concat_char (char * str, const char * x, const char * sep) { char buf[SLICE_SIZE] = {0}; sprintf(buf, "%s%s", sep, x); strcat(str, buf); From patchwork Mon Jun 15 08:26:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stijn Devriendt X-Patchwork-Id: 1309323 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::33a; helo=mail-wm1-x33a.google.com; envelope-from=swupdate+bncbclnzfwotyirbxpbtt3qkgqeuzdob6i@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=BOHGYY/h; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=RAXiOKSv; dkim-atps=neutral Received: from mail-wm1-x33a.google.com (mail-wm1-x33a.google.com [IPv6:2a00:1450:4864:20::33a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49lkw14YXpz9sRh for ; Mon, 15 Jun 2020 18:27:13 +1000 (AEST) Received: by mail-wm1-x33a.google.com with SMTP id u15sf4709940wmm.5 for ; Mon, 15 Jun 2020 01:27:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1592209630; cv=pass; d=google.com; s=arc-20160816; b=IBWTlQI9YpZ84FZJLUswk7qmISLjlrACa/eZbQrnEw6NzL4+XI3V3N9fwybCOi6pUS AdlCzqA+Cy9iAYz4xzQfU0oo/PTWFD7UZAFax/duAXmJ0kgMVUWA8SyKIYZ8oH9ZVMSk t7xZ9qWuQngIgVGYQ29t0smmToR+EayDaFsk9kNjqNLWecq8JCva/mqfGrtkEee1bQZo tPHI7moxBdA0fniENPPcap/f5o393178ChEdXP+/TVfb5p3+h6QyRZOS6GTgAj7abGcM LAfnWFvulk/BXtq300zFjkad5CTA+7Bb/CTpSQKDK2yLCgBjKwd/Wz1g2+aGvQG2EC0i 093g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:mime-version:sender:dkim-signature :dkim-signature; bh=x9KYDiViBobNAC6FrwoaZo9hxvoTPnXUAkEmrXWdWDQ=; b=ZCLTF+7MY/+8sGRRQraSyyBLiR+UudIyxYHXl2s0RBGaZJPXjGpl00IP2hBO9cYbgZ ItpUMVp+OY1NExRNFVwWgpcTGKKS7nuW9vFXREIF9ArwGqPY4BjmXqpj7HUBRvYsc59r PozLdV6BaoqDXFQAQLf2l8/I/ltGL9wUV7zWkm8jIOY19tGgQkcBakjHh7aD2P6Rg5Rv dx6Bz8wYRc2OG+c6faoPHEVfieITiVzlRwx+0jHuM/IC2ASTBX612T8XGW1HLhYZgd9C wqX1N3MjaWIWNPQ87485vX4nAFRQrrIPvlHClz7APU63FhD8PO9burmMv5mW4kkVd3RF kLSw== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="bvB/fdug"; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::529 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=x9KYDiViBobNAC6FrwoaZo9hxvoTPnXUAkEmrXWdWDQ=; b=BOHGYY/hMFi5Lh8j2JQfAyXQtfEldU4fA/ELi1ohv3Ulkuo/rHnn3PMOvv1K+nUdX+ FATsmvsyR9je0jaiNWNJQu9uwnNU8uR1rDL4FXyX6fgifvY2UwgsFFI2x00RxMbJQVjt sx4L+fxAUpH+8krpTA2yTjE6hxW0ShBxtl/3vopBV6ZhFRtu7tWWHFTvHyCJsy7Bd9Qc hSZL+qc2WjJKRBKo6sSM7bftt3CusgpaTqcp6yXK1wCWsDcgT0JlCMk01EIEeMhPoS4I TAvxfWFS65O+67EX+XNHQyftr0PRbwVqZjrhgsnSJeKgAYNTHk+MryYIQmjsWLh+VkbD Kuyg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=x9KYDiViBobNAC6FrwoaZo9hxvoTPnXUAkEmrXWdWDQ=; b=RAXiOKSvk/GkwpuHBFcpBI91ItPq87LFttPi2IRYJUu8pO2s1NuqJmspDyShadA7+n lKwT+nbNsEq2zUoy17yrAbzINnvKK7Kub1TDyf8BgvVzmvEZT+s2esR/1BD5ED+/xVf4 aYlZnQqSEhgdtEDgLKXlNuHRl9FQdJOnxnxRpGNWq+Mc69DGD3Urh8i5h2YWJILy7BMy QCurRvQ0B5hHf2VkCkyBPH/i0Dqp+15R0KGQ+7jnuZwxQHHvjK5qEHs93rWOrPoBbfq1 OOl8xBAzlY5DX6oH8QG78fP7qqzuJjSXRlmTnDh7yRPvW3d2tZlhRPF83fm9NkOukU5k 6vKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=x9KYDiViBobNAC6FrwoaZo9hxvoTPnXUAkEmrXWdWDQ=; b=spK5ltA+ypNomxbNniX/sqTd6T7WnI6GC5w5w4Y9naz/AFddSE4lCVX1/QGimrjwk3 Y6L+jODw95dHBLIDbZAXpf+APXMxjAb5UhIMjIE40RLk2X0Vk8J6dZWl3GWhhqVTk4qw ytYFE6OlpJbsCYJKeuIXgjUZFC1hOQjjiJ/YvT7G6+1eaQW1Ayc5FgPY2ZUliOqXY/iR wuxFUTwd7KpVQk41P5ff7tkgMDNkMBt9gX+MaxIbpDb6ww0DIbOKfV4gU/lXCeoTKCAo ftL3QkWUzGhKiXIW9o6haGbN1PQikaR19jWpEippW/V9PVgP578STOt4kcOCx13X5b5+ EjMw== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM533F2Hve2shB8P9IW62hfd66L5xzUcwedMBhZTkwLSJ36sXD8nC+ eK19ZRACM/HKNsdph5nCTnU= X-Google-Smtp-Source: ABdhPJxt5haTjdwJlOXIdgp4OF6q9EWpUc8/7gb+FkyAGsl4Mr/zceBRMGQuxBloudoW1mn79gvnog== X-Received: by 2002:adf:f988:: with SMTP id f8mr29866123wrr.81.1592209630216; Mon, 15 Jun 2020 01:27:10 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:adf:db45:: with SMTP id f5ls8042909wrj.0.gmail; Mon, 15 Jun 2020 01:27:09 -0700 (PDT) X-Received: by 2002:a5d:518b:: with SMTP id k11mr29725500wrv.58.1592209629491; Mon, 15 Jun 2020 01:27:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592209629; cv=none; d=google.com; s=arc-20160816; b=EPy4w/dHV/JwRvGc9q6M7IsahgE/iOkKK6Hjy0QtcEvkLY9w7umMc9P2VJSsRjlX7A oPZh+/nSxwX1EbSSLKUllcgIMU1xDGplHoiaAYrkOQTfsRFZeVMtybFCyq4pI6rwbH5n rMuGKUligQ0jvGyNBoEgLQvZP6D4QNNPVQLvjElVinDe1HQ4/wJWc5ZUi2c6ZObqJuSJ 1ySJ73FF5v/8bswE/H0Sgvs42QgbvSVtRPEfUcrBMyW3dW8YDWqpCpjN6GwJik8rEo+4 MKEtyJOe2VOMNETPyz/sHnuAPAsXEEuufyCEsksYnfpFVJ6V3dFXNZg1+SJakQjubXuT tplw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=PaD93I92E6oILZ0h7Xfw92LuWZCmwgWjtQx0sATBhII=; b=x9xTewINj4FqEsyLyToS1KwW6U0pQlUqQ1GcEOTEHMLnJ4UUmwFIk3BTHg60NGfU/N Kw746frK6wgHjrRqOT2YZLjGGR1CMiqnIHSnMl7nLe6yQtcEfQoUZ8vr2MfPGlqtidLX 1Uylwm4CSxh0JNpyF1uBcLL1BUkTGVjCA3hvmVmUAKX3cg2U1852Tg5wjAXyScCbyoUy kTTs0tdoMz6eEZPrDmYWQGT6+F6jOW4yjbIwBnq+GMtnHfx5nNnhveNkP/pHtmuGGwhz NRsQ3MGIeb90PIPRQTTIERXxw86bAWlhbxbX0F2/SmgC2DMbcleHuVbeMWvrHGud2j9b OI2w== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="bvB/fdug"; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::529 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-ed1-x529.google.com (mail-ed1-x529.google.com. [2a00:1450:4864:20::529]) by gmr-mx.google.com with ESMTPS id z18si815982wml.2.2020.06.15.01.27.09 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 01:27:09 -0700 (PDT) Received-SPF: pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::529 as permitted sender) client-ip=2a00:1450:4864:20::529; Received: by mail-ed1-x529.google.com with SMTP id o26so10836066edq.0 for ; Mon, 15 Jun 2020 01:27:09 -0700 (PDT) X-Received: by 2002:a50:ee8f:: with SMTP id f15mr23058369edr.168.1592209629262; Mon, 15 Jun 2020 01:27:09 -0700 (PDT) Received: from sde1.telecom-it.be (ptr-dv4l9auv4w1m1i5kotr.18120a2.ip6.access.telenet.be. [2a02:1811:ce13:ba00:717d:f0a2:e207:f7af]) by smtp.googlemail.com with ESMTPSA id fi13sm8656314ejb.34.2020.06.15.01.27.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:27:08 -0700 (PDT) From: Stijn Devriendt To: HIGHGuY@gmail.com, sbabic@denx.de Cc: tomas@aparicio.me, swupdate@googlegroups.com, Stijn Devriendt Subject: [swupdate] [PATCH v3 3/7] Add SPDX license identifiers Date: Mon, 15 Jun 2020 10:26:58 +0200 Message-Id: <20200615082702.32693-4-sde@unmatched.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200612100354.3591-1-sde@unmatched.eu> References: <20200612100354.3591-1-sde@unmatched.eu> X-Original-Sender: HIGHGuY@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="bvB/fdug"; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::529 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , --- core/semver.c | 3 ++- include/semver.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/semver.c b/core/semver.c index 95df3fa..d778e57 100644 --- a/core/semver.c +++ b/core/semver.c @@ -2,7 +2,8 @@ * semver.c * * Copyright (c) 2015-2017 Tomas Aparicio - * MIT licensed + * + * SPDX-License-Identifier: MIT */ #include diff --git a/include/semver.h b/include/semver.h index 1b48670..e4d9295 100644 --- a/include/semver.h +++ b/include/semver.h @@ -2,7 +2,8 @@ * semver.h * * Copyright (c) 2015-2017 Tomas Aparicio - * MIT licensed + * + * SPDX-License-Identifier: MIT */ #ifndef __SEMVER_H From patchwork Mon Jun 15 08:26:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stijn Devriendt X-Patchwork-Id: 1309325 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::63a; helo=mail-ej1-x63a.google.com; envelope-from=swupdate+bncbclnzfwotyirbxxbtt3qkgqeqqowtji@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=Qntg+Pie; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=alfZW9Sk; dkim-atps=neutral Received: from mail-ej1-x63a.google.com (mail-ej1-x63a.google.com [IPv6:2a00:1450:4864:20::63a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49lkw23dv0z9sT6 for ; Mon, 15 Jun 2020 18:27:14 +1000 (AEST) Received: by mail-ej1-x63a.google.com with SMTP id d14sf7502187ejt.14 for ; Mon, 15 Jun 2020 01:27:14 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1592209631; cv=pass; d=google.com; s=arc-20160816; b=h9/FTmIgqkKFF8hIeNmWfadpka7p/NjjaZYP5NYFt2kQWhRaJc9kxYFt/8lwJpAHZm c47AY4eIbBoQZay8Rxo/S1moN6zvbw3F13MQyVJU9Ne69fxYU7lpTotZbRlrOjxDg6IJ qfVNFbNUAQ6HNUmGXiUnDSFlxvJVaHGFtAZxLh7eop0MOQm39RGjg5kp14cjsxgY8uyA HXvKB3E6tidFZQ0g7YHSaOIfGaRaud3Nh4tNEWug1u4XBRHPlgZweSg98kcPOuimbhDE yZMN0kTxWuOYJxnvWvJsmFU+fxcotIZk2D31CbQZR9AF3v9GjEpV2ZZFaH9oc0gNQ9Gw ZLYw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:mime-version:sender:dkim-signature :dkim-signature; bh=kTPOl+NlSnBuRRbnEeV30YhLrxOAK5y+niyYs57Njzs=; b=v8+1+1Mq24TCwYJ0s2IlqHqkIyBjpIFICSwr+g7rs40SK8a+ODhwCSgNNPHhYRVQ2t bs4ehaFBx1cJQtPeMthnRh8VOKWSp8maYsxOM1jgIht+PK3icd5i1hr5zV1Rb130dIxq YZDI1HfQZawi1vxQ+/1F/crv+Mq2UBcxFKN1a2fTlrWQUV1RErnlfH4ePQsuF1Zkcgjx frrW5h0QcgUijrrSdtFc2I+3Oy4zib4Y5+A4TQYswiVnDRCeDAkCxrdiO1/0xY9ysDXN 1TVSWfpmzBZWADBptCirT1gK2vOPuOKlKTx9U20t4WDdXeVYdP0P6i8CWWc8IddxNcw9 pQWg== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=TXCfL5rW; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::641 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=kTPOl+NlSnBuRRbnEeV30YhLrxOAK5y+niyYs57Njzs=; b=Qntg+PieOuPR4qQbcgxrs5FhJC4xsq2zIdNpJCQ2R25YtkIFxObOggfiy9iOSZH+Z6 R5ttEjXx30we2XSc+JWz1Oujr/EqdD0JmUuidBpqr4bcTewL9QReKYxhTCoZ216d+NUs erofvJ/iFpEnC8KS8RzzwhvrykAgCP8vOQXFXwY+uj2bgry4Vu+J1GAL/41cYt9XR0kL qU4lgtk9cNjuTxKH+Ji8BMKeSLP3cFfDp+TlUyy8dEHYGEM+RIJCQhXiNd0vAqEz3WB3 UVN2kUN2B6a0kaIjOO/oQ+zscqDqMuHTghlxzzK5il7BRDsAURh7hYmi6lG/+H7Lo/3Q 83Wg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=kTPOl+NlSnBuRRbnEeV30YhLrxOAK5y+niyYs57Njzs=; b=alfZW9SkhD9OAuqSrQzAl1ykuKVO86ROwWEUk8Qwy57GS2JqtrCE9Hl6KoUGiHGEMY GS9DXVs/LEw9ut/rl5VnmksQH/BHcQC4dTW5gklsjfvLxveysT8kMzcUjj1BCV3/Mrcv 8bZy8e9xhEqAQvdrTmyTx9IjXpPArouXNvNk4NgEPtNV/uOcWRWHVZc/XTTi0kS6D40H ICQttVvwrhMgfqQQZls5CKkv1RHHos+yniA39XUuIlEqVIs2JsMN3ohR0J2PduQn7Gt6 NpBxZmNctRlMa7QH17w5DsStpxzsRYnfAv7J1XFl0V/EtBjW3oP3J76Rc2BbGqeGbsw6 8esw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=kTPOl+NlSnBuRRbnEeV30YhLrxOAK5y+niyYs57Njzs=; b=N5l9JxAOU753rtUgSoukUQz5JclrCokmJ3itBaw9izH4lZAnLjGUdjKL+QLtypojyf j5zenSGAKn0UJ4eFZP/WxleGAYI+r2BfT0j+VqaV/t8WFKZ2Nkpeun2QZTnQCyhtKeXC rgwfTM8uOnXEjsDT6IWnCx+qomnNVraf+kpchlLr1K67yGAGm5NBhHMdSXvPEmc2iuo8 vTMgsH+Cdzpt9nFRt4twfrULXWgeQAL5xXvvZRsl2+PqZ+KqINh2Sti9ISso3A+nfu+W tTm4AfuEdZ61E0kJjJvtq1c5NUpGXEA8ONaot/i53CSUbOMmD3nTWFsPRykuM/f6uUZa rnGQ== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM533eZNpyCETOPSkDXfEde/kXUTn1nqN8o3Tb79aahElk17Nm14sO VHLagbL9Gl2dZz4QHmWbJds= X-Google-Smtp-Source: ABdhPJwFpywztTbPRYufx0KaVjz5jyRinDkmhG2JZjjbG8S9LMGZgiIadKTbxTWddQ35LDvNORELGA== X-Received: by 2002:a17:906:2655:: with SMTP id i21mr12529921ejc.18.1592209631262; Mon, 15 Jun 2020 01:27:11 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:a17:906:1d52:: with SMTP id o18ls5854634ejh.6.gmail; Mon, 15 Jun 2020 01:27:10 -0700 (PDT) X-Received: by 2002:a17:906:d963:: with SMTP id rp3mr12498852ejb.326.1592209630570; Mon, 15 Jun 2020 01:27:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592209630; cv=none; d=google.com; s=arc-20160816; b=vV4NMvFrCuzYmI3aFLhVn8XkMUOZckSbSiUG2vL3D1F8yBftSRh3rYaHc+AQ0UmkPB x9m1Y0jXcb0vOTBnHA0yZaBzFngbPLluwKWgjKmq/44+kWIVvuDcwguZtfxwHnMPO8GP 2jIMomJaxJ8CUY4SnGyh+6GkFsVS2Y0jhD89IWCA1imL+ksOjM0Bn7boHlAX/EMjkIDL uYs3luzhqUAKqmqI9npnxZL/7OkbE+cT0M8FhxNGqLS7DxyAPMoXRVvBd8sRAGu4tcll J15rg7tLsFCTLZ4w5rPPhWuWPeuwi2s/Uz23XuT+2wm6VfcwYkmJvtOtNND5sgGhNfHM EjwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=B7Wz+1l527YhhaIFYnwm3WIkhqGmfparQ9X++pWfBsM=; b=sR8glCyFBemVKfh1Tm4ndDvBpfdA/Ub+MgoH5NEUSYdyEC4VsZSU+w3ptKCC64OkQ+ PO4AxvQObGurJurH2Iy8+ojj1kkB/2ARqRrWKodhvzsbT+vktW/OI1kcUMXeaOPjTifo cW+Iy1kgzuzSD5w29JB6KXs5+oWKxcBtJSHAX7i9r2attQwMMtMydMv9Cv1lUcUt6QVn hi3vCh/lMvqnxaY7hfaVe8j5N+cRatN2FVMklaA56/PzaRVfVANPcEtGLSAFkcivd5N6 APwZxqyO0QRDCCf9ARn16047zTMkg/0f0lNZaHBF+spT03zCU1BfFlYKSAqWymjlg6Rb qYaQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=TXCfL5rW; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::641 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-ej1-x641.google.com (mail-ej1-x641.google.com. [2a00:1450:4864:20::641]) by gmr-mx.google.com with ESMTPS id l10si763843edf.4.2020.06.15.01.27.10 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 01:27:10 -0700 (PDT) Received-SPF: pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::641 as permitted sender) client-ip=2a00:1450:4864:20::641; Received: by mail-ej1-x641.google.com with SMTP id y13so16483536eju.2 for ; Mon, 15 Jun 2020 01:27:10 -0700 (PDT) X-Received: by 2002:a17:907:11c8:: with SMTP id va8mr26474374ejb.90.1592209630294; Mon, 15 Jun 2020 01:27:10 -0700 (PDT) Received: from sde1.telecom-it.be (ptr-dv4l9auv4w1m1i5kotr.18120a2.ip6.access.telenet.be. [2a02:1811:ce13:ba00:717d:f0a2:e207:f7af]) by smtp.googlemail.com with ESMTPSA id fi13sm8656314ejb.34.2020.06.15.01.27.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:27:09 -0700 (PDT) From: Stijn Devriendt To: HIGHGuY@gmail.com, sbabic@denx.de Cc: tomas@aparicio.me, swupdate@googlegroups.com, Stijn Devriendt Subject: [swupdate] [PATCH v3 4/7] Cleanup input string to be semantic-version compliant Date: Mon, 15 Jun 2020 10:26:59 +0200 Message-Id: <20200615082702.32693-5-sde@unmatched.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200612100354.3591-1-sde@unmatched.eu> References: <20200612100354.3591-1-sde@unmatched.eu> X-Original-Sender: HIGHGuY@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=TXCfL5rW; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::641 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , When the string is malformed, we'll treat it as 0.0.0 and emit a warning. This matches the approach from the previous code, to ignore incorrect version parts, ending up with a NUL-version. Signed-off-by: Stijn Devriendt --- core/artifacts_versions.c | 46 +++++++++++++++++++++++++++++++++++++++ core/swupdate.c | 2 ++ include/util.h | 1 + parser/parser.c | 3 +++ 4 files changed, 52 insertions(+) diff --git a/core/artifacts_versions.c b/core/artifacts_versions.c index 6fe5d60..ccc283e 100644 --- a/core/artifacts_versions.c +++ b/core/artifacts_versions.c @@ -25,6 +25,7 @@ #include "swupdate.h" #include "parselib.h" #include "swupdate_settings.h" +#include "semver.h" /* * Read versions of components from a file, if provided @@ -66,6 +67,9 @@ static int read_sw_version_file(struct swupdate_cfg *sw) } strlcpy(swcomp->name, name, sizeof(swcomp->name)); strlcpy(swcomp->version, version, sizeof(swcomp->version)); + + cleanup_version(swcomp->version); + LIST_INSERT_HEAD(&sw->installed_sw_list, swcomp, next); TRACE("Installed %s: Version %s", swcomp->name, @@ -118,6 +122,8 @@ static int versions_settings(void *setting, void *data) GET_FIELD_STRING(LIBCFG_PARSER, elem, "name", swcomp->name); GET_FIELD_STRING(LIBCFG_PARSER, elem, "version", swcomp->version); + cleanup_version(swcomp->version); + LIST_INSERT_HEAD(&sw->installed_sw_list, swcomp, next); TRACE("Installed %s: Version %s", swcomp->name, @@ -154,6 +160,46 @@ void get_sw_versions(char __attribute__ ((__unused__)) *cfgname, } #endif +static const char ACCEPTED_CHARS[] = "0123456789."; + +static bool is_oldstyle_version(const char* version_string) +{ + while (*version_string) + { + if (strchr(ACCEPTED_CHARS, *version_string) == NULL) + return false; + } + return true; +} + +void cleanup_version(char* str) +{ + semver_t version = {}; + int res = semver_clean(str); + + /* This is only expected for overly long version strings. + * Is SWUPDATE_GENERAL_STRING_SIZE > semver.c:MAX_SIZE + 1??? + */ + assert(res == 0); + if (res == -1) { + WARN("Version string too long. Using 0.0.0 instead!"); + str[0] = '\0'; + return; + } + + if (is_oldstyle_version(str)) + return; + + if (semver_parse(str, &version) == 0) { + semver_render(&version, str); + } else { + WARN("Unparseable version string. Using 0.0.0 instead!"); + str[0] = '\0'; + } + + semver_free(&version); +} + /* * convert a version string into a number * version string is in the format: diff --git a/core/swupdate.c b/core/swupdate.c index 74dfbbe..8e85127 100644 --- a/core/swupdate.c +++ b/core/swupdate.c @@ -792,11 +792,13 @@ int main(int argc, char **argv) swcfg.globals.no_downgrading = 1; strlcpy(swcfg.globals.minimum_version, optarg, sizeof(swcfg.globals.minimum_version)); + cleanup_version(swcfg.globals.minimum_version); break; case 'R': swcfg.globals.no_reinstalling = 1; strlcpy(swcfg.globals.current_version, optarg, sizeof(swcfg.globals.current_version)); + cleanup_version(swcfg.globals.current_version); break; case 'M': swcfg.globals.no_transaction_marker = 1; diff --git a/include/util.h b/include/util.h index 55fe70f..6a027c6 100644 --- a/include/util.h +++ b/include/util.h @@ -216,6 +216,7 @@ size_t snescape(char *dst, size_t n, const char *src); void freeargs (char **argv); int get_hw_revision(struct hw_type *hw); void get_sw_versions(char *cfgfname, struct swupdate_cfg *sw); +void cleanup_version(char* str); __u64 version_to_number(const char *version_string); int hwid_match(const char* rev, const char* hwrev); int check_hw_compatibility(struct swupdate_cfg *cfg); diff --git a/parser/parser.c b/parser/parser.c index 31efe46..981d40d 100644 --- a/parser/parser.c +++ b/parser/parser.c @@ -273,6 +273,9 @@ static int parse_common_attributes(parsertype p, void *elem, struct img_type *im GET_FIELD_STRING(p, elem, "name", image->id.name); GET_FIELD_STRING(p, elem, "version", image->id.version); + + cleanup_version(image->id.version); + GET_FIELD_STRING(p, elem, "filename", image->fname); GET_FIELD_STRING(p, elem, "path", image->path); GET_FIELD_STRING(p, elem, "volume", image->volname); From patchwork Mon Jun 15 08:27:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stijn Devriendt X-Patchwork-Id: 1309326 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::438; helo=mail-wr1-x438.google.com; envelope-from=swupdate+bncbclnzfwotyirbx7btt3qkgqe6sx4xja@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=Cp9LFxqP; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=nxB93yV6; dkim-atps=neutral Received: from mail-wr1-x438.google.com (mail-wr1-x438.google.com [IPv6:2a00:1450:4864:20::438]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49lkw35cpCz9sT8 for ; Mon, 15 Jun 2020 18:27:15 +1000 (AEST) Received: by mail-wr1-x438.google.com with SMTP id e1sf6769442wrm.3 for ; Mon, 15 Jun 2020 01:27:15 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1592209632; cv=pass; d=google.com; s=arc-20160816; b=JTsoge+m1e6lhr5XSRJahAA0CsNg/p13G2J2LriOfkIJ7GVt5T/JIRP+0+SRyefJMk chPgt6+u3YspCaeoglcerO4WVf/9M8U3s+U2zZRP2Gsm3DmpUBdUhWceXq/7v0k8oZU6 M+fgQ+uRkgjBPbMcVBS2a39EJwnLoWhiybHT6OzgLxVW9RT31EH1WGtW/1Auja1qip+x mDFtDTyolHA0kaCAlRtDyegr0zg3vkZgHl1aChWSRDC0YbKWmtdj3KXalorrRbHW7+l0 5B2pz72C8qO4EV3IC6NADDJaZMEhLpR2Hah7mM38eAg7kU42kP/ZkIuGBBo8UVyPmz9E vkgg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:mime-version:sender:dkim-signature :dkim-signature; bh=/PvI0kGyPLEEeGtshXvjvXM2RuRAo9Z5pSwiZJqxr6A=; b=KUQNJqwMIrMT8x+8ui7TBDrFZFoAj+7qCT+tMHpdru157YpGsA/OV+V0ln6XxHqk6E ahVvpaXtkJN+JhIhWXUGmdDFjDNGoJYYI38ZpY/63tIYUNIHORlRlHtefqFzCc96ZzVq nUjHq9a1Rp78wSnm1c+KD8gh8qU2ZqA2TS0vRzG2+PO0XPwDF4KH9M+QSgbYLXOTWVg5 vHzfTyO5WPxZ0wh6bik8deauChh+C/Adj5zzczVPqCXnFoEY/yf9u+89xLWMC+PQWqDs tcEGzDzamNwlv+16QUSANTkj8ArZfggqkyV3HKXZmn9kkTl6wPKKGMFEO4UyndtfGdOF jMOQ== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=S7N0y+wa; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::531 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=/PvI0kGyPLEEeGtshXvjvXM2RuRAo9Z5pSwiZJqxr6A=; b=Cp9LFxqPgoThY9wb4vAh8Z9OwU0JUsPswrrqO4TDPLx559lOiWIxrrqcTvjgkzK3Mh U9PIVXStMR4pBhwGfXnn2Kb0UK7NPcAjsdPFIkfCCVWMiK5x030dVVR5TJv3jKh8oCKB YfEnE4TxSIl6qIeDOI28Cz5CFfaF6h3zdV4q96gd/wKUNsfzYory8TrsNDGBvc+7KzCe VTty/1f9ePzikvrV2cRH3pLVmZNBpESnVqpMHmIdVYH99vMVU9FVhe0Vl0a0FfGW7H1i 9F2PiPHAOjgthtksyliPi13he5IJqjsq07WJyAMV7brx4CmX1xISJlHSmqALEizD57DK tLCQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=/PvI0kGyPLEEeGtshXvjvXM2RuRAo9Z5pSwiZJqxr6A=; b=nxB93yV6qEaFQNlNLVMw1EJdo3m+ooiz8Rue5afRbSXF1urg//TPpePhcqv/Tbfrn2 oPX15Kp+cMZYlVn0bRQDkeVQpB77vAljAKS2aGdqXL/11spGlAyo8avIRzN8oaeoCoM2 SW7NmKsjlVXaJC8FK7DogJZTpq8HPtmjIAZkiAbMbbwi8izxzlx34oNvzsnGo7FVIH+T TysTuaDcP0vNE3E+6OW09hL0s4oMEZTB+9teFBc88krp601B82n5I4uW0dFacAhVxXxK mi/0ZKpQEwrBoLRV6jk6WbBP7Rwl50oQfKzPJobHzkCf7LF2IGjLD+sXUbH0/QGAVKNO 8QOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=/PvI0kGyPLEEeGtshXvjvXM2RuRAo9Z5pSwiZJqxr6A=; b=DE/SuxPVZ36Mi303E/TOFd7M+o0jBjpS9GiSRSBVZW0y6C0j8WLXmulgxb0byXA5SJ PRgZwDJXOG7yDyIWk0OufEh0AH73Lp/2kDv7+SzIT1wlQ9C/ofcxTtYF8qABi0sFFa12 JCxg8/Gh10bibDmsm3qcEcfWoWEAk5N4UJ+KxYm9unFkIRWiAggiwpaQjUnQdLXyUfnZ vopSCLp50jOkfZMJoN222tliNHIh50+jKyMB8+qJMgJ/EEjxnIo58rI7guEZ/a9mVvQ+ /AxyNQXLqbE6iowdFD20jDGga1TyQII8DK+PtNplUL2dU2p+ruZXwY1y9fvK8W524q0H NLkQ== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM532SVyjGKi/Ls1ebnhV96mV2N477IzaUjXta9ZKSM7+D0kh3HNaU vhsFbQqYH0rxLOp061ikrcg= X-Google-Smtp-Source: ABdhPJxVfoXvO6ITco8BeChoa1Yvlwykske3KKfLxHiu4x1GvQP1Q/gcwypreg1ZBxX3FXuOd470iQ== X-Received: by 2002:a5d:690b:: with SMTP id t11mr29766105wru.213.1592209632217; Mon, 15 Jun 2020 01:27:12 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:adf:db45:: with SMTP id f5ls8043028wrj.0.gmail; Mon, 15 Jun 2020 01:27:11 -0700 (PDT) X-Received: by 2002:a5d:6444:: with SMTP id d4mr28461490wrw.239.1592209631630; Mon, 15 Jun 2020 01:27:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592209631; cv=none; d=google.com; s=arc-20160816; b=Rwa7W//CjvdJ7nYbhNHmyTRa2X5cg7LCM68dyYisD7A30VGBpQMELlJPt1lLJ1Tnr6 YPtVe9xyQU8ud6WJjcStX+ZTWxoIUIP5kj6XjHVhHu1Y9RiO+ZQxTJB2RppYAo/TuHR9 4sCyy7MYCr2rwnZvPvaC59mPGcBaBioHXvMjD7cOucFMNqMwoGiDCpa6UrRK8JFXxLwW fR63itLhNN82bKKlVOMo+5q2dvGxGXZkKOpUced1Di+n59fdMsWVb07qnBfbGYbpQOIi 6wYaM1155PAxPi3F+9/fdgix4858ZDiK+2e94AB/z/MMjmY/qZr4slxnnVD/Z54wIo3h bwNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xCL7d3eUhF5xsK7KmRYFzG4Ln1kq4+YOeZCO+nz/Ue8=; b=JznSq/oomynHkuQGlwFaCVi/3Z+m/5J/pVhhz3pAl0fDlPso0YmhfYGr07OtCbWAY5 irIuIVRewHTCrXt5pofmLrBdV62abeTS+IRLyd4Ag/Cyuda5tthAhOUpwMZJVYmkK9jq a+c2JsL8WKhQI+ut9nrKO2QPwl0rOwuSuwGMQjgYhcHbnuQAt7uTFVV3GuXJHA122Xuy 8f4yKzezDvIudAb6Z3DOVrBEgOAKA0HkFWM0IDfJNqWE795T84Fy+VPQUzpUm0TicS9C 2iCsD7TJwyUZjOoowlsPVToeXzsqhYu5JgwznM5hh5UHUHiBq7RBkr7SSL7nXTz55onH oEcw== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=S7N0y+wa; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::531 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-ed1-x531.google.com (mail-ed1-x531.google.com. [2a00:1450:4864:20::531]) by gmr-mx.google.com with ESMTPS id 12si969111wmk.3.2020.06.15.01.27.11 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 01:27:11 -0700 (PDT) Received-SPF: pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::531 as permitted sender) client-ip=2a00:1450:4864:20::531; Received: by mail-ed1-x531.google.com with SMTP id p18so10827285eds.7 for ; Mon, 15 Jun 2020 01:27:11 -0700 (PDT) X-Received: by 2002:a05:6402:b37:: with SMTP id bo23mr23335860edb.24.1592209631309; Mon, 15 Jun 2020 01:27:11 -0700 (PDT) Received: from sde1.telecom-it.be (ptr-dv4l9auv4w1m1i5kotr.18120a2.ip6.access.telenet.be. [2a02:1811:ce13:ba00:717d:f0a2:e207:f7af]) by smtp.googlemail.com with ESMTPSA id fi13sm8656314ejb.34.2020.06.15.01.27.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:27:10 -0700 (PDT) From: Stijn Devriendt To: HIGHGuY@gmail.com, sbabic@denx.de Cc: tomas@aparicio.me, swupdate@googlegroups.com, Stijn Devriendt Subject: [swupdate] [PATCH v3 5/7] Compare versions according to semver Date: Mon, 15 Jun 2020 10:27:00 +0200 Message-Id: <20200615082702.32693-6-sde@unmatched.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200612100354.3591-1-sde@unmatched.eu> References: <20200612100354.3591-1-sde@unmatched.eu> X-Original-Sender: HIGHGuY@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=S7N0y+wa; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::531 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , Still, fallback to legacy versioning scheme if needed. Signed-off-by: Stijn Devriendt --- core/artifacts_versions.c | 48 ++++++++++++++++++++++++++++++++++++++- core/parser.c | 11 ++++----- include/util.h | 2 +- 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/core/artifacts_versions.c b/core/artifacts_versions.c index ccc283e..2ccba85 100644 --- a/core/artifacts_versions.c +++ b/core/artifacts_versions.c @@ -210,7 +210,7 @@ void cleanup_version(char* str) * Also major.minor or major.minor.revision are allowed * The conversion generates a 64 bit value that can be compared */ -__u64 version_to_number(const char *version_string) +static __u64 version_to_number(const char *version_string) { char **versions = NULL; char **ver; @@ -235,3 +235,49 @@ __u64 version_to_number(const char *version_string) return version; } + +/* + * Compare 2 versions. + * + * Mind that this function accepts both version types: + * - old-style: major.minor.revision.buildinfo + * - semantic versioning: major.minor.patch[-prerelease][+buildinfo] + * see https://semver.org + * + * Returns -1, 0 or 1 of left is respectively lower than, equal to or greater than right. + */ +int compare_versions(const char* left_version, const char* right_version) +{ + if (is_oldstyle_version(left_version) && is_oldstyle_version(right_version)) + { + __u64 left_u64 = version_to_number(left_version); + __u64 right_u64 = version_to_number(right_version); + + if (left_u64 < right_u64) + return -1; + else if (left_u64 > right_u64) + return 1; + else + return 0; + } + else + { + semver_t left_sem = {}; + semver_t right_sem = {}; + int comparison; + + /* There's no error checking here. + * Oldstyle code also defaults to treating unparseable version as 0. + * Failed semver_parse also leads to 0.0.0 if properly initialized. + */ + semver_parse(left_version, &left_sem); + semver_parse(right_version, &right_sem); + + comparison = semver_compare(left_sem, right_sem); + + semver_free(&left_sem); + semver_free(&right_sem); + + return comparison; + } +} diff --git a/core/parser.c b/core/parser.c index e7e68ea..ba0d2a6 100644 --- a/core/parser.c +++ b/core/parser.c @@ -172,15 +172,15 @@ static int is_image_higher(struct swver *sw_ver_list, return false; LIST_FOREACH(swver, sw_ver_list, next) { - __u64 minimum_version = version_to_number(swver->version); - __u64 newversion = version_to_number(img->id.version); + const char* current_version = swver->version; + const char* proposed_version = img->id.version; /* * Check if name are identical and the new version is lower * or equal. */ if (!strncmp(img->id.name, swver->name, sizeof(img->id.name)) && - (minimum_version >= newversion)) { + (compare_versions(proposed_version, current_version) < 0)) { TRACE("%s(%s) has a higher version installed, skipping...", img->id.name, img->id.version); @@ -306,10 +306,7 @@ int parse(struct swupdate_cfg *sw, const char *descfile) * newer version */ if (sw->globals.no_downgrading) { - __u64 minimum_version = version_to_number(sw->globals.minimum_version); - __u64 newversion = version_to_number(sw->version); - - if (newversion < minimum_version) { + if (compare_versions(sw->version, sw->globals.minimum_version) < 0) { ERROR("No downgrading allowed: new version %s <= installed %s", sw->version, sw->globals.minimum_version); return -EPERM; diff --git a/include/util.h b/include/util.h index 6a027c6..adf585e 100644 --- a/include/util.h +++ b/include/util.h @@ -217,7 +217,7 @@ void freeargs (char **argv); int get_hw_revision(struct hw_type *hw); void get_sw_versions(char *cfgfname, struct swupdate_cfg *sw); void cleanup_version(char* str); -__u64 version_to_number(const char *version_string); +int compare_versions(const char* left_version, const char* right_version); int hwid_match(const char* rev, const char* hwrev); int check_hw_compatibility(struct swupdate_cfg *cfg); int count_elem_list(struct imglist *list); From patchwork Mon Jun 15 08:27:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stijn Devriendt X-Patchwork-Id: 1309327 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::337; helo=mail-wm1-x337.google.com; envelope-from=swupdate+bncbclnzfwotyirbypbtt3qkgqehcl752q@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=iJOZWrcb; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=bkFF5rnp; dkim-atps=neutral Received: from mail-wm1-x337.google.com (mail-wm1-x337.google.com [IPv6:2a00:1450:4864:20::337]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49lkw46sxMz9sSg for ; Mon, 15 Jun 2020 18:27:16 +1000 (AEST) Received: by mail-wm1-x337.google.com with SMTP id j128sf6387356wmj.6 for ; Mon, 15 Jun 2020 01:27:16 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1592209633; cv=pass; d=google.com; s=arc-20160816; b=ewY1YCQZfzdHl1+D5HLwGKr4ltMqazV4VYipwvbk+hKpCHMmMbTXhsjngEDkYa2QX0 WcTm07JCOioLhGgGWNBxnHHGJKBqsJvmf/Foysq//Pc5KZDTTKwfHUdDhK7/c9MMn1ti xJEwQRudJhG1n0zk4B2qAefAd9dCk+poYXDgrL3y55DQDXzQxgXtV3LkjW7isltzELgT SoJvSheERy+Rog8q/MCY6fEgDoluafvsmV6HyT9Ht4Q9NzmTaARJLy1jp/BHbMp2n+Of Wga4bTO3TNwVdMQpRQjTfmGQ2jPiblfOQRnaYVyneT+4MhE7WJFMaiUqt10gncSHYwpJ 87DQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:mime-version:sender:dkim-signature :dkim-signature; bh=AcaXIkAc8SxX6VphG4ijP4/rG69FgUom25hAM/XDkgk=; b=p35k5PykX8shYiHWOGtlFprb3vgXfe2EFD88/QOKh3amuYAid8QhIuAAivOmLnhcHs 4bUJsc1Br5CX6j5hrPd9QyUiS6jZ70iuuXqmEa3A7/qpFtCdaKo4bADpLrbDRDq0rxAt nOof3W4YdDDFxvXyR/JnjBuN1bqR0XMAa2VPRMLQw0hBdQM4xfWhuaCg6J0tpk6M80Yq IthYir/+HnYihZVlechxkGpcQ+XGeT8IrkB06FJgPuFKlFWLgCrwyS9LPW8QOG0eyxrt IAkrBNmPx8wQLSvD/eEnZ5JpAOWsr7RXRaPUkH+U04bVZBW0dxflUqVZPSpZqLQX0ITT D+Mw== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=G1KZFwik; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::536 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=AcaXIkAc8SxX6VphG4ijP4/rG69FgUom25hAM/XDkgk=; b=iJOZWrcb9FBmmX+oHR0m7pfTvG9PHMUjxSYbNQId83sdfqkeA7JUDqBu7tWkWHoEbE kdbo/GFurzom/4Yj8j0+NqF+vAnkucfa/hRDhKmJ/X6Ura2W25ekIkZeNCkDv6ow1xV/ UZZbHwbQbjas//9ao+mEs3mKfXLcZ2BG8PsIbHiyMQGPykfUlgsgqtjE2C7iWDugorbN Pb8yN5O3+joK4Uc1C2vBJBmcSmGxJhAbiOf8/XWwDZXFTe0PfdxKP10mw/5NzVBXP9He OFDF1vN79QAgBZnWtfIuEJICM59NRHz2VHiHdrviXj/rwoSKDRmdsFIDbBLNHMZgla5F LF3Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=AcaXIkAc8SxX6VphG4ijP4/rG69FgUom25hAM/XDkgk=; b=bkFF5rnpOdnzGdp84v3rF+SeHf6bwoBMsgBdQsXJPkVzStm4WICe0zZ454DRHQnodn 04dHEApazvVLxeJWZjCJ+Obi/NXknGEa3PWkTMBImFIqTcJ8Z8eQBY7goeLtUNiCbT3z Yo9zr2L2C4M+tlDnAb7z5RZpSnTb8i0WGDrLXtUCca2jBzw9y2fWo3rQxRIw7c97mhg6 tmbGtUgIJjvrLMGPEeOrf/wRNufPfxorgGrZ7JNKXRZc6iMtGWoo1Rs3WYHllfIJuTyB yG/HLaSJoYZQWaPbU+E3x9Wqq77abfyhpJ3afij5rA+Ud2tGLD8gL0UcPORpLXuOC94g nBWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=AcaXIkAc8SxX6VphG4ijP4/rG69FgUom25hAM/XDkgk=; b=E7lQ/Kpiqo9wNjPJUGEd09YQfirkAmYRnU/cKqZv6aqwPq9yVb+ajAj88QZXde14h9 c3O+MPP2invedGDoY5oVemD4XGiiYs0c/H6mN/Zkj4tkgJ/ttqZKtd/b+U43wm9FYlKu slEMNyXP/s0VwHprIqhRWXHmVBW9ly68Jn5kNpDaAMWYxxmIJqSmkUqlAOeVhbAc2WT+ UfyZlzGQwVac4loein7hFMzRROCfCaJLja+5tH3ji1YFuhUKIkVus0FojR3f7bGiSaiI +AJ2G20LhFtYW8fZhyPkreaQ5JlS8lAfjzcCiqjc82z8AoKC2qDv73GTKgnHIvmFY5RX 4nzA== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM533TprXgcD+qW/L+zB3SQpENV8PnQbe/H3flQuwt1BPrEV+z7u4o NW85IrSykvhui/1Ig2qgE0w= X-Google-Smtp-Source: ABdhPJzVnZCWsOH+0H8EXzArrQFYD30RTYJJ4R1CnmXV0PNEMQ8hVPR9mne9zoyFqd2dD2l+MQVcZg== X-Received: by 2002:a1c:2d4d:: with SMTP id t74mr12679658wmt.177.1592209633733; Mon, 15 Jun 2020 01:27:13 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:a1c:a70e:: with SMTP id q14ls7039608wme.0.gmail; Mon, 15 Jun 2020 01:27:12 -0700 (PDT) X-Received: by 2002:a7b:c8d6:: with SMTP id f22mr11933122wml.188.1592209632756; Mon, 15 Jun 2020 01:27:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592209632; cv=none; d=google.com; s=arc-20160816; b=Us24/J7QORz/UmtucDH8K5itydkJEGGB81VJM1zTJNv3Y3vyFyWyFmx1msW9OGfDiC gEkrpOC8f9baakbwmA+E97SQ7CplPAhCERjpiMW/2aUFqocxr66maNN9dWahzkoHhypT LhndxXyoaUYBpdJA6iNy0r3t4d1kEKSSz1eVP8BK6Xfy7KufugNkuG6BC+FURvmzn/He Ft/D7S4mT7zc2QEBwZDWvPm6Rd24J7miwqSwIJixLNMFrE/NYlPdCeaPkkPaDZuweE6k 43gdghiDvXqNBfJ6zF0d6V6D4UD/MXLfRgcwOR4prXK20N6H2Be/LjYkAG4XVSZTPgLK uWjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=v2NODpLEJ8LpRGFgLSLj7+s+VN3v6p2ac4sIeLftVwA=; b=Pcns/lQBOCJ/xY/VZXtjfEe9E4xObUHduz3FbR+u3ajadAGk0PSHBhp9IzVPJK68C/ pGaI8tUOut5B7ZWKERGXrZwOts87SIW+fcFqKlUDTYi+cpTdbi42ZRG5MogZ7drFMGAF RZP87Dsawikbf2nMxySsMnvn0f+F7RnZnoyeuXw/8y4GuznU3VcErHQ4CZ4gG1VAyby2 1p+5aguFi/5ggFTLG3Jfsq9zAoB2cmLRVBit9x8pjYkh9m/tZ+8s+ED3SJxVIEz/lusb 4pnOgyb7cN0CpMWoRMNg/JDXOQITPHzSiz5fJAf1KdxpKb6y9coSFkQmUapRQ8MclszV Vmow== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=G1KZFwik; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::536 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com. [2a00:1450:4864:20::536]) by gmr-mx.google.com with ESMTPS id f1si747016wrp.4.2020.06.15.01.27.12 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 01:27:12 -0700 (PDT) Received-SPF: pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::536 as permitted sender) client-ip=2a00:1450:4864:20::536; Received: by mail-ed1-x536.google.com with SMTP id w7so10855412edt.1 for ; Mon, 15 Jun 2020 01:27:12 -0700 (PDT) X-Received: by 2002:a50:f044:: with SMTP id u4mr23030176edl.226.1592209632484; Mon, 15 Jun 2020 01:27:12 -0700 (PDT) Received: from sde1.telecom-it.be (ptr-dv4l9auv4w1m1i5kotr.18120a2.ip6.access.telenet.be. [2a02:1811:ce13:ba00:717d:f0a2:e207:f7af]) by smtp.googlemail.com with ESMTPSA id fi13sm8656314ejb.34.2020.06.15.01.27.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:27:11 -0700 (PDT) From: Stijn Devriendt To: HIGHGuY@gmail.com, sbabic@denx.de Cc: tomas@aparicio.me, swupdate@googlegroups.com, Stijn Devriendt Subject: [swupdate] [PATCH v3 6/7] doc: Describe semantic versioning Date: Mon, 15 Jun 2020 10:27:01 +0200 Message-Id: <20200615082702.32693-7-sde@unmatched.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200612100354.3591-1-sde@unmatched.eu> References: <20200612100354.3591-1-sde@unmatched.eu> X-Original-Sender: HIGHGuY@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=G1KZFwik; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::536 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , --- doc/source/sw-description.rst | 31 +++++++++++++++++++++++-------- doc/source/swupdate.rst | 7 ++++--- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/doc/source/sw-description.rst b/doc/source/sw-description.rst index 86e2393..63be19f 100644 --- a/doc/source/sw-description.rst +++ b/doc/source/sw-description.rst @@ -1062,24 +1062,39 @@ The file must contains pairs with the name of image and his version, as: -Version is a string and can have any value. For example: - -:: - - bootloader 2015.01-rc3-00456-gd4978d - kernel 3.17.0-00215-g2e876af - In sw-description, the optional attributes "name", "version" and "install-if-different" provide the connection. Name and version are then compared with the data in the versions file. install-if-different is a boolean that enables the check for this image. It is then possible to check the version just for a subset of the images to be installed. -There is also an attribute "install-if-higher" that check if the version +If used with "install-if-different", then version can be any string. +For example: + +:: + + bootloader 2015.01-rc3-00456-gd4978d + kernel 3.17.0-00215-g2e876af + +There is also an attribute "install-if-higher" that checks if the version of the new software is higher than the version of the installed software. If it's false, the new software isn't installed. The goal is to avoid installing an older version of software. +In this case, version can be any of 2 formats. Either the version consists +of *up to* 4 numbers separated by a dot, e.g. `...`, +or it is a `semantic version `_. + +:: + + bootloader 2018.03.01 + kernel 3.17.0-pre1+g2e876af + rfs 0.17-foo3.bar5+2020.07.01 + app 1.7 + +It is advised not to mix version formats! Semantic versions only support 3 +numbers (major, minor, patch) and the fourth number will be silently dropped +if present. Embedded Script --------------- diff --git a/doc/source/swupdate.rst b/doc/source/swupdate.rst index 2c2661a..8e140de 100644 --- a/doc/source/swupdate.rst +++ b/doc/source/swupdate.rst @@ -456,9 +456,10 @@ Command line parameters | | | software. This will be checked with the | | | | version of new software and forbids | | | | downgrading. | -| | | Version consists of 4 number: | -| | | major.minor.rev.build | -| | | each field is in the range 0..65535 | +| | | Version consists of either 4 numbers | +| | | (major.minor.rev.build with each field in | +| | | the range 0..65535) or it is a semantic | +| | | version. | +-------------+----------+--------------------------------------------+ | -R | string | passed the current installed version of | | | | software. This will be checked with the | From patchwork Mon Jun 15 08:27:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stijn Devriendt X-Patchwork-Id: 1309328 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::53e; helo=mail-ed1-x53e.google.com; envelope-from=swupdate+bncbclnzfwotyirbyxbtt3qkgqe375txbq@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=biIc9VJw; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=DvrUx3I8; dkim-atps=neutral Received: from mail-ed1-x53e.google.com (mail-ed1-x53e.google.com [IPv6:2a00:1450:4864:20::53e]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49lkw5272Gz9sRN for ; Mon, 15 Jun 2020 18:27:17 +1000 (AEST) Received: by mail-ed1-x53e.google.com with SMTP id 92sf4612333edl.8 for ; Mon, 15 Jun 2020 01:27:17 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1592209634; cv=pass; d=google.com; s=arc-20160816; b=T1PrB3IEHvpj1+JMhFcJYQ0rNHZzGGtnwwEgHyLB6vSCh3zvjxdkNw+rgw/arddfpS DA6JvZZgCuB6kFxlqyWc+q2ArknASfO5fodyJPdD63C86UUITwxuXJmuzWLqZSa7ce/x Rv5A1/otsxDlK3jotLf9WyL9gMecZ8kgDrYjdXZZq2UVLQKd9700nLbls4HW6hjILliz JMCyJK0BoYfN1Tv1WtZfHJFNpSn49PGzbP/OCKUrCrE1Pt7bbLOWt+wSkkw4CJPIbheb ZI2b5j4lq8OEUMAy8wgbpCKabz1AT/q997LvdMY+GJflT1UGszSksGdv1X1XZG145DSj vZjw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:mime-version:sender:dkim-signature :dkim-signature; bh=2TeRGq50uHihjtwmlo6+g/HXUa+9KDSuULm1Yst1oy0=; b=COjG0EFP4UajVog/uwNxX67aAQSevRCKtjeaXTNQIoHsv6/9H21n8R00oRLP66Vq+t ikc6/pIlnoQdHLP+yWjTWTvC243EnMRXcOiKER+GSuGPLQWIDIA512F+TSaJ8pBGgHam co0ZL9MvYDH/Lhj6RZJqLoG4hQ2yjTfJtTzGQhCIs0t5c6cqdprDm2T93bxi2ErDhIhw gq9w6CcHQIllL/2JuLiS6HLjRGb1DD5BBxMa3vMJk9uCWGTfUDAmQGWKw4YCptNkvcov Avl2GsHnd6ucxmhEc7Oedg7Hyb2zqFQMhdnNr58aB8AfEGbKzRIEom5u/G5aWq+XPRM1 /DBA== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=MgCtRvu2; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::544 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=2TeRGq50uHihjtwmlo6+g/HXUa+9KDSuULm1Yst1oy0=; b=biIc9VJwU4rZo8UL/6qgp2ha/nA6ZlantfPUqCP+PwtzFxke81eqmVzdGeBmxuEDYC yo/Q57CV2S+Xmio7Q7JqOgAmkSuszih2tgNDNAZPbz50+sMk6HOk8J+q7+TGllxcEnNi MAdrJ/aUUEt7m2F27/MoXvLf9smn+w0StKqfZJjgSF46c3SjGYen9IrhOzVcY0xD+F+j q+bq3NM+ytJ3lhkew8pAuFeCKXoMIj1/IiahZ9TAD84vN1ZZzDWkrnSHFQMyZ0nWR0Q7 F8RCFOS97LRqCa7ot7tbLv8YaLDfRIJ5h6YFb8dBoZULAxwiXTXgJp2djuP2cvhK/ZoR 9mkQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=2TeRGq50uHihjtwmlo6+g/HXUa+9KDSuULm1Yst1oy0=; b=DvrUx3I89oWeIhxpCCelp3ae02M+oLtukps3XG1uSc92ocglAVrfNtwlWKi3DsaJYJ vvA0S1eFmtyYOwvJVXHyLDxzCRLRqZ9UawmdYiSUKdXLcsvR59P0kKYGB9HGyr/USo23 z1ZVkaHrL4emCxIo9vfBlc2JwLboPavUfMW+zhGdhZRY9tb3RxC0uoKXcsNMLeybvAe+ HxhhvrodujP0hWvdfdORD7OSagjBChUtxCYXBwswa81SIdVqRjiNTk+t6NoFfue8e7wR +rJNZC8nb0S3ADmfj8RTWf6w+L+OKmHVWhUgLoHO2E+W2HHRjBjBtMg73XOfbwM0UrmA uKRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:in-reply-to:references:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=2TeRGq50uHihjtwmlo6+g/HXUa+9KDSuULm1Yst1oy0=; b=Q7JZ56/1pXJzQfhsbYTRXWT6z+4mB5VBCIildFzRfrMt9DfB4V7HwAuGrYhH8HhRWl hmqijKNXIxtQybj1nsONc0Qvv6el7wHDAPbsq8cOwDG0RsuMojSI15Zi1lPQMB6v4YJg K6U2H7CnqhcUduHxFzukU1lK9o1K3Idhi275qdlfS3Mz0ueorYD1KFFEMtzVH+b1dxuy Ey0I5owpg+wAXEgeRdcSXzWLUox2Ba+nyCV8m8t1mdmOxSpTo9coJVB+8bdE7YZLw7PH +Hpt28vaQ0j8SUu6JYOf/fA7VUw/Bxmiut2p0L0J/mf8fiOeqPFL6Cr1zWfrsZHDN8rk 4L3Q== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM532Pa74SSSGkkhvMrGPC58ZS3Odu9wxrJkCx4rDsZWnbWAY4iPDE icJ1fSjXJHlzd0EDWWKZeeE= X-Google-Smtp-Source: ABdhPJwtpMncYqNKoCnnJRsV3OkXD5gSVu83dXwStHA86aXwLowvwCZho79DLrTR+zs7xU07aTZLfg== X-Received: by 2002:a17:906:4b50:: with SMTP id j16mr25935362ejv.415.1592209634222; Mon, 15 Jun 2020 01:27:14 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:a17:906:1315:: with SMTP id w21ls4719041ejb.3.gmail; Mon, 15 Jun 2020 01:27:13 -0700 (PDT) X-Received: by 2002:a17:906:4dc2:: with SMTP id f2mr25555942ejw.402.1592209633643; Mon, 15 Jun 2020 01:27:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592209633; cv=none; d=google.com; s=arc-20160816; b=C6/Ugw/1+7dOQRNshwVHby1YNYdtNZHN0RVHAPQ4x8MTTtad0YGCMNvDBNCRcE76Oy oPMoWj3IZQ3FDEKLBgam/3r2VKC5RzVSpOCinQWUYJcAdkcVgXqXxvaUm76yJfGghdUE PSy/nUPOu2KFSiELzD0LOAdB2v4V2D1Kx8eTggfXO+LTLwpCYp8AC7rtLBiA/oyQpHUO JMofOA9AlXv1drSwhEUL9bwhW9c6uykfGsKuT/SJUhrAXqPgAnnTnZ4kFylycWO2udjT URXLE5FRaIv+vtNndtJjK+XKmjUy9pAmpaYKhf/ed7TKt6uhz4cnyHQuy0l1Dn78g1L4 iPWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Ki8+fNNWUK3h2FWSohrZfSxv9/+C2Ys+z9e69/4RiiU=; b=r+Tc5JOiiEmPFJEWXryasGktkBXjT3BtYwh9FsLE3VWOqJxa2/PiL5FO/Nt8o9FrlU sGJrtDa1mZHSch9wsykP2LckVqY9RJW1Cvi5aWbWvWna4NzmHfw5dt+rqEf55cKpvcmu WxDQvT+PnFcid1DBGOCl2s4VDtfRZDddnf8hLy/c1TBPLTEZbx+8kxvpU4O53r6f+gIx J6taaZLiY4+MVIZ8A2vEO7whWii069VzJFEef9P/oyNFqKyrbGccnOl3xtQVCJPjb5kp SJk0tIRcZCPo07n2AHVv9R/rQK4pto7OdfkaR/EzpTQTmdEo3AiFx23YOduKzYxjMbi9 1u2w== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=MgCtRvu2; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::544 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com. [2a00:1450:4864:20::544]) by gmr-mx.google.com with ESMTPS id b6si624973edr.3.2020.06.15.01.27.13 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 15 Jun 2020 01:27:13 -0700 (PDT) Received-SPF: pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::544 as permitted sender) client-ip=2a00:1450:4864:20::544; Received: by mail-ed1-x544.google.com with SMTP id w7so10856363edt.1 for ; Mon, 15 Jun 2020 01:27:13 -0700 (PDT) X-Received: by 2002:a50:f985:: with SMTP id q5mr22519425edn.180.1592209633478; Mon, 15 Jun 2020 01:27:13 -0700 (PDT) Received: from sde1.telecom-it.be (ptr-dv4l9auv4w1m1i5kotr.18120a2.ip6.access.telenet.be. [2a02:1811:ce13:ba00:717d:f0a2:e207:f7af]) by smtp.googlemail.com with ESMTPSA id fi13sm8656314ejb.34.2020.06.15.01.27.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jun 2020 01:27:12 -0700 (PDT) From: Stijn Devriendt To: HIGHGuY@gmail.com, sbabic@denx.de Cc: tomas@aparicio.me, swupdate@googlegroups.com, Stijn Devriendt Subject: [swupdate] [PATCH v3 7/7] Fix coverity reports (#304621, #304620) Date: Mon, 15 Jun 2020 10:27:02 +0200 Message-Id: <20200615082702.32693-8-sde@unmatched.eu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200612100354.3591-1-sde@unmatched.eu> References: <20200612100354.3591-1-sde@unmatched.eu> X-Original-Sender: HIGHGuY@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=MgCtRvu2; spf=pass (google.com: domain of highguy@gmail.com designates 2a00:1450:4864:20::544 as permitted sender) smtp.mailfrom=highguy@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , Comparisons against MAX_SAFE_INT were done in the int domain, rather than the source domain. --- core/semver.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/semver.c b/core/semver.c index d778e57..763e7a0 100644 --- a/core/semver.c +++ b/core/semver.c @@ -49,7 +49,7 @@ strcut (char *str, int begin, int len) { size_t l; l = strlen(str); - if((int)l < 0 || (int)l > MAX_SAFE_INT) return -1; + if(l > (size_t)MAX_SAFE_INT) return -1; if (len < 0) len = l - begin + 1; if (begin + len > (int)l) len = l - begin; @@ -88,14 +88,17 @@ binary_comparison (int x, int y) { static int parse_int (const char *s) { - int valid, num; + int valid; + long int num; valid = has_valid_chars(s, NUMBERS); if (valid == 0) return -1; num = strtol(s, NULL, 10); if (num > MAX_SAFE_INT) return -1; + /* Shouldn't happen because '-' is a delimiter! */ + if (num < 0) return -1; - return num; + return (int)num; } /*