From patchwork Mon Jan 13 13:44:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 17323 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 610BF44AAA9 for ; Mon, 13 Jan 2020 16:10:11 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 38A1968AD9D; Mon, 13 Jan 2020 16:10:11 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2669368AD48 for ; Mon, 13 Jan 2020 16:10:04 +0200 (EET) Received: by mail-pf1-f195.google.com with SMTP id p14so4944821pfn.4 for ; Mon, 13 Jan 2020 06:10:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=NCDBvDgqeoYXsnuWg2RMwjXLD4bfASTPWyRhSaF5XiQ=; b=JgW9usP4FFz15OBunJT7yUT4eC39hhD5eGGDMYmzNHbfwQ+qq7FKp1AYnQk5Hi38y8 HARfYyoJZxn5vwYczA1xyQZZqVSihUl4841TPfhsfP7zPLp5U1vOAewnme5Fj8pyRUc0 34KVMCDpwQvZ+aCSpST/HAaxDHkLEYdqNdmA4hDlghEFBvrwK5oC6tQZZB+pdedm8g+u LP9Iju2VELUvNGF4FZzgWcJWLumDoSg2L689WhPjcEiajMHJ9VAw07xIQF7LjgwVmssH bWgMmzNtvyFr0vPCPjw56AzE32XUOIfYE7iSdl10ppMUw21s0CNUblvMCoEKvNtC2WYs fxoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=NCDBvDgqeoYXsnuWg2RMwjXLD4bfASTPWyRhSaF5XiQ=; b=ZrXMEscxoKvuWjh1u7oztAr9n72B9OcXNQlCP9jFoiLZzkq+q/92d1N6TAfmwx7Tvi +fgej2qQW6HFGY2qpMxhPm4+W61CUGT3yDGFXQdNIkCiXEph3C7XbjMUkS1xvife6D1l eF1Rrk7i587FynoQrprSKWnXBsGc0oFQtN/3gvMwo9fsyFUxQg5d0doq5/RLksog9OOc ZdVPz2sfY68QImsbk5NP/gdm/Y6UmLqWojy1nk91dBu4f58alFxsSksSvXKd6DFBv3Qb K3A3du6OEC1ZMJVkUD/wdgVvCJppiR2U/9jVPsDVEJIL0QWBRTqffz9xmCykdlBz06h/ nryg== X-Gm-Message-State: APjAAAWuT9U1SU1H56b5/yp5LvLOOO4MEm4/OlEQJn45n/8zjw2HGUJw 4Iv9TAF/zAbjKRb3jH5Btcbrpfmz X-Google-Smtp-Source: APXvYqx+NLamsnWM5N3pKiSSgG6qeRIE1SloNGXqQpfN8ikL3cOpLBvU6E41nyDhMPAkFgZrp24X1Q== X-Received: by 2002:a63:6b07:: with SMTP id g7mr20430967pgc.243.1578923099490; Mon, 13 Jan 2020 05:44:59 -0800 (PST) Received: from vpn.localdomain ([47.90.99.151]) by smtp.gmail.com with ESMTPSA id 13sm14413773pfi.78.2020.01.13.05.44.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Jan 2020 05:44:59 -0800 (PST) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 13 Jan 2020 21:44:50 +0800 Message-Id: <20200113134451.9511-2-lance.lmwang@gmail.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20200113134451.9511-1-lance.lmwang@gmail.com> References: <20200113134451.9511-1-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v1 2/3] avutil/avstring: add support for '\\' seperator for the path append X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang I don't have a windows develoment system yet, so I had to test with modified avutil/tests/avstring.c like below, (change / to \\) and change HAVE_DOS_PATHS to 1 in config.h: - TEST_APPEND_PATH_COMPONENT("path", "/", "path"); - TEST_APPEND_PATH_COMPONENT("path", "comp", "path/comp"); - TEST_APPEND_PATH_COMPONENT("path/", "comp", "path/comp"); - TEST_APPEND_PATH_COMPONENT("path", "/comp", "path/comp"); - TEST_APPEND_PATH_COMPONENT("path/", "/comp", "path/comp"); - TEST_APPEND_PATH_COMPONENT("path/path2/", "/comp/comp2", "path/path2/comp/comp2"); + TEST_APPEND_PATH_COMPONENT("path", "\\", "path"); + TEST_APPEND_PATH_COMPONENT("path", "comp", "path\\comp"); + TEST_APPEND_PATH_COMPONENT("path\\", "comp", "path\\comp"); + TEST_APPEND_PATH_COMPONENT("path", "\\comp", "path\\comp"); + TEST_APPEND_PATH_COMPONENT("path\\", "\\comp", "path\\comp"); + TEST_APPEND_PATH_COMPONENT("path\\path2\\", "\\comp\\comp2", "path\\path2\\comp\\comp2"); Then do test with fate-avstring for valid checking: make fate-avstring SAMPLES=../fate-suite master: -path/comp = path/comp -path/comp = path/comp -path/comp = path/comp -path/comp = path/comp -path/path2/comp/comp2 = path/path2/comp/comp2 +path/comp = path\comp +path\/comp = path\comp +path/\comp = path\comp +path\/\comp = path\comp +path\path2\/\comp\comp2 = path\path2\comp\comp2 Applied the patch: -path/comp = path/comp -path/comp = path/comp -path/comp = path/comp -path/comp = path/comp -path/path2/comp/comp2 = path/path2/comp/comp2 +path\comp = path\comp +path\comp = path\comp +path\comp = path\comp +path\comp = path\comp +path\path2\comp\comp2 = path\path2\comp\comp2 Signed-off-by: Limin Wang --- libavutil/avstring.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/libavutil/avstring.c b/libavutil/avstring.c index f4b8ed2..24bcc7d 100644 --- a/libavutil/avstring.c +++ b/libavutil/avstring.c @@ -299,14 +299,20 @@ const char *av_dirname(char *path) return path; } +#if HAVE_DOS_PATHS +#define SEPARATOR '\\' +#else +#define SEPARATOR '/' +#endif + char *av_append_path_component(const char *path, const char *component) { size_t p_len, c_len; char *fullpath; - if (!path) + if (!path || strlen(path) == 0 ) return av_strdup(component); - if (!component) + if (!component || strlen(component) == 0) return av_strdup(path); p_len = strlen(path); @@ -315,18 +321,16 @@ char *av_append_path_component(const char *path, const char *component) return NULL; fullpath = av_malloc(p_len + c_len + 2); if (fullpath) { - if (p_len) { - av_strlcpy(fullpath, path, p_len + 1); - if (c_len) { - if (fullpath[p_len - 1] != '/' && component[0] != '/') - fullpath[p_len++] = '/'; - else if (fullpath[p_len - 1] == '/' && component[0] == '/') - p_len--; - } - } - av_strlcpy(&fullpath[p_len], component, c_len + 1); - fullpath[p_len + c_len] = 0; + const char *component1 = component; + + av_strlcpy(fullpath, path, p_len + 1); + if (fullpath[p_len - 1] != SEPARATOR) + fullpath[p_len++] = SEPARATOR; + if (*component1 == SEPARATOR) + component1++; + av_strlcpy(fullpath + p_len, component1, strlen(component1) + 1); } + return fullpath; }