From patchwork Wed Jan 7 13:03:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Marchand X-Patchwork-Id: 2217 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 911FD5A6F; Wed, 7 Jan 2015 14:03:41 +0100 (CET) Received: from mail-wi0-f169.google.com (mail-wi0-f169.google.com [209.85.212.169]) by dpdk.org (Postfix) with ESMTP id 244C15A6A for ; Wed, 7 Jan 2015 14:03:39 +0100 (CET) Received: by mail-wi0-f169.google.com with SMTP id r20so8007036wiv.4 for ; Wed, 07 Jan 2015 05:03:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=XVFfZ75SF94EkKVww/eWzomBXShB7by0RJuSU1EkBNM=; b=iFWZSirnFsRWm6iqkNhzfG830c2Rfeue16TmxnxED3xpq2F6Fakp0PkVCVBtMo/zQR K9My9vF3ewXISesNKGctD3E/O/MsowH8q+fzn3+MI/PIKbdUURPAdVEPOVCIU3N5CxSE FWFHXGeRWxQfzNqesB/8tFhjBYxs7b9IcwQDpX3UbiLM1Z0iu8VacgCBVSYA8mvNXJMl 8i/3euMx82kR7PH/M5j26XU2AvdK8FAr4h5iaXv5WHL+FwX6Sj50eKVF5ET0n4cS+bNl obgg3RcWv3shKybE1dwmitQYUJaoisG1TNkUBIBNnFmKxV0R5G4BMV30whjl7nJMbC7H hlKg== X-Gm-Message-State: ALoCoQl7U7v3Q9S+283CK1yVderNTmqWo53fl52RzHZNuYtQ0X1o1rKkl2oelc4b2TS7XC4YsY/M X-Received: by 10.180.93.167 with SMTP id cv7mr7525201wib.12.1420635818976; Wed, 07 Jan 2015 05:03:38 -0800 (PST) Received: from alcyon.dev.6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by mx.google.com with ESMTPSA id eu8sm2476343wib.21.2015.01.07.05.03.37 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 07 Jan 2015 05:03:38 -0800 (PST) From: David Marchand To: dev@dpdk.org Date: Wed, 7 Jan 2015 14:03:29 +0100 Message-Id: <1420635809-30976-3-git-send-email-david.marchand@6wind.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1420635809-30976-1-git-send-email-david.marchand@6wind.com> References: <1420635809-30976-1-git-send-email-david.marchand@6wind.com> Subject: [dpdk-dev] [PATCH 2/2] devargs: remove limit on parameters length X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" As far as I know, there is no reason why we should have a limit on the length of parameters that can be given for a device. Remove this limit by using dynamic allocations. Signed-off-by: David Marchand --- lib/librte_eal/common/eal_common_devargs.c | 26 +++++++++++++++++--------- lib/librte_eal/common/include/rte_devargs.h | 4 ++-- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index 8c9b31a..3aace08 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -49,17 +49,10 @@ int rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) { struct rte_devargs *devargs = NULL; - char buf[RTE_DEVARGS_LEN]; + char *buf = NULL; char *sep; int ret; - ret = snprintf(buf, sizeof(buf), "%s", devargs_str); - if (ret < 0 || ret >= (int)sizeof(buf)) { - RTE_LOG(ERR, EAL, "user device args too large: <%s>\n", - devargs_str); - goto fail; - } - /* use malloc instead of rte_malloc as it's called early at init */ devargs = malloc(sizeof(*devargs)); if (devargs == NULL) { @@ -69,11 +62,21 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) memset(devargs, 0, sizeof(*devargs)); devargs->type = devtype; + buf = strdup(devargs_str); + if (buf == NULL) { + RTE_LOG(ERR, EAL, "cannot allocate temp memory for devargs\n"); + goto fail; + } + /* set the first ',' to '\0' to split name and arguments */ sep = strchr(buf, ','); if (sep != NULL) { sep[0] = '\0'; - snprintf(devargs->args, sizeof(devargs->args), "%s", sep + 1); + devargs->args = strdup(sep + 1); + if (devargs->args == NULL) { + RTE_LOG(ERR, EAL, "cannot allocate for devargs args\n"); + goto fail; + } } switch (devargs->type) { @@ -97,10 +100,15 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) break; } + free(buf); TAILQ_INSERT_TAIL(&devargs_list, devargs, next); return 0; fail: + if (devargs->args) + free(devargs->args); + if (buf) + free(buf); if (devargs) free(devargs); return -1; diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h index 9f9c98f..996e180 100644 --- a/lib/librte_eal/common/include/rte_devargs.h +++ b/lib/librte_eal/common/include/rte_devargs.h @@ -88,8 +88,8 @@ struct rte_devargs { char drv_name[32]; } virtual; }; -#define RTE_DEVARGS_LEN 256 - char args[RTE_DEVARGS_LEN]; /**< Arguments string as given by user. */ + /** Arguments string as given by user. */ + char *args; }; /** user device double-linked queue type definition */