From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0084.outbound.protection.outlook.com [104.47.42.84]) by dpdk.org (Postfix) with ESMTP id 0B02A379E for ; Fri, 16 Dec 2016 12:51:28 +0100 (CET) Received: from BY2PR03CA068.namprd03.prod.outlook.com (10.141.249.41) by BN6PR03MB2467.namprd03.prod.outlook.com (10.168.223.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.771.8; Fri, 16 Dec 2016 11:51:26 +0000 Received: from BN1BFFO11FD005.protection.gbl (2a01:111:f400:7c10::1:164) by BY2PR03CA068.outlook.office365.com (2a01:111:e400:2c5d::41) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.771.8 via Frontend Transport; Fri, 16 Dec 2016 11:51:26 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; 6wind.com; dkim=none (message not signed) header.d=none;6wind.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BN1BFFO11FD005.mail.protection.outlook.com (10.58.144.68) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.771.7 via Frontend Transport; Fri, 16 Dec 2016 11:51:22 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1479; Count:13 Received: from [10.232.14.87] ([10.232.14.87]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id uBGBpHmf019744; Fri, 16 Dec 2016 04:51:18 -0700 To: Adrien Mazarguil , Jan Blunck References: <1480846288-2517-1-git-send-email-shreyansh.jain@nxp.com> <1481636232-2300-1-git-send-email-shreyansh.jain@nxp.com> <1481636232-2300-2-git-send-email-shreyansh.jain@nxp.com> <3310c320-fa39-cd8c-ab77-ced20daa5073@nxp.com> <20161216092306.GD10340@6wind.com> <20161216112140.GE10340@6wind.com> CC: , David Marchand , Thomas Monjalon , Ferruh Yigit , , Jan Viktorin From: Shreyansh Jain Message-ID: Date: Fri, 16 Dec 2016 17:24:02 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: <20161216112140.GE10340@6wind.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-IncomingHeaderCount: 13 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131263626854511094; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(336005)(39860400002)(39380400002)(39850400002)(39840400002)(39410400002)(39450400003)(39400400002)(2980300002)(1110001)(1109001)(339900001)(189002)(377454003)(199003)(24454002)(83506001)(104016004)(8936002)(2950100002)(229853002)(81156014)(47776003)(65806001)(65956001)(23746002)(8676002)(64126003)(81166006)(305945005)(105606002)(626004)(106466001)(50986999)(2906002)(54356999)(76176999)(31686004)(189998001)(230700001)(65826007)(68736007)(50466002)(93886004)(69596002)(4001350100001)(356003)(36756003)(5001770100001)(85426001)(97736004)(31696002)(92566002)(33646002)(6666003)(86362001)(77096006)(38730400001)(5660300001)(4326007); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR03MB2467; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD005; 1:SNXvROgBUqmOzfPyM4WuDttkWRvy0Q+9Kc0juMvV82/3dullQK1cgNU6ahqqEWYNa2+ID2oPqY1pa9j7spwR7/v/P8gesdxukc3tsxP9gq+3AYXUeip7gQ99s24giROkjm6b+CEnu3c1HhcTELng1+NhLpS86YWVYZkrXm9EEkwDGZcFPITjvl8fUDK1firLzlO5+Y0mAAgQCZNxQ5OdbcrMsSjLLhjm6sRQRebZk/D9NLIPZo9zxnkAlQ2xQQvlyBHpRVLzPbvU3M+FOi0vWgLGij476fpGyCYrVGRVXfV/M/ZS4HWv0LvFvtZ72bO3eG69Dyd7HpErL+2xlb2KG3mjnMAS6D/VBpl7baDJ0mKLMaUg85NXAYOWqvtV5sXYASYpe59RTisSX+6Ci5R8E0iG8ywfRxvsYUYOyEtMajF4s1Z80YYKZ1gJABGA2RV+Xks309yQOjhJ/n+w3t1G7BR69OJBnsLfr3aaLisDqQxwGUvBsF/EUWLJ1T7ULrAij4M/R47EPWZopQKBVNMtjptmUMLhfF/PBm8gYyh/Cz1O8YL+lA9D4rIIyETUxXcGkNluBz2l7CSeoefMS0l1XJ9FqNGGEUPrF4immoF50qvlG4EFUy7Ye4QP71fFwivL3PCwMidNN/z7YoEqvhzhYg== X-MS-Office365-Filtering-Correlation-Id: 3a0ea0d0-1b37-4e28-5095-08d425a9dd0c X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:BN6PR03MB2467; X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2467; 3:nzrUBsUxudZWd+Rk9R3iQKzr6lDyTV+cD+hwfzFynIFmMoAdyqfEW4Xj6dPtRMeuNWiWYDWd5PJm3fbtaL+y/HJwmXvKVm9jma+As6BR14NdHhJ1WrPfqSdwnK3HIUT6n1OCY0rBS3t+QWZLfiQ/m3JVrDsQkEUSckbtCtkeDP6IPQGrS3jJcm2sSJR8CQi9t1O8rcWYPmCS5edj+DTyTsr4fd0hM7kj34D00XhPH+iRrDI5fmJySgB/2lfU1o7ohYBMOh3bjGYZhkAjBrqWysqUERGpHSxVbHAfTHzpjHO+3yl7cr3PhLo/ky3fuc53fTFPBXCmEvquW6+x0aP32VaRzuh//yiAzntmNKck5duv1nKRXiTSaX4QLRgqDt+D; 25:tQ6i+gohMEZR0YiJlsYKWXAf7ztnKro2kmVePouKdUd4kNM/8mScAqZYjhOVyP62ZGWr7Ft/JkiuZtI/Juw5JxfWNd0M/V8/oKDnA5R1e1dIU4tOTCBV7jfIDQQ1H3G3bi0W+pEurSpAeLtZy2lslODTyBKBr/KkyqgJrx8p+gwDdFx8msECWfkYbq9XXEVNCKwqe8bqWEsz9KczB6Gv+hVh6c+ooV6mBRJ2zmAg8Aj3FTPbrSOFlTnk0jC+hmzhn+qoSJ7wc1XlBetl4pxCTfR9u0m9LngCIEy+fr/nudB3lp1DpU7uJLku/pcZCxFBeQ3l7qxZPuI0nvOO6Jp4RLqVmd5OWW9eJzibQsB59r50cFsCU9/koA5F0kpwbACRXbTrdnGDixw8RRGcT3uZsp8s1hjqolMbWw8BpxLmrP0MxJAt00zav808jjViJUczrDVg+glvflCuESFuB8sUwA== X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2467; 31:FTjEvEeMWpjmhlJRs0tu91rzPcZfqy2KJqt1fwHlBLtPnZoWT1fwq2zb5sdAhIGRJAX48uXentkfrJf/S3SQZxDovKfZbYDLlqWXTZrbKdR9s/IBGVdCkx4KO8wEDJq2dw3gKnCxFddftozwo/CgfZxIHpyVaVYeF+SXnSnxM6MbpQa9gI47nnMIEsy+JwcwX9NtcCZ38LUwiXginntF31XC6hUsWLGjzEHYI6pj1aJjCDjC80ONqCC1GGQJ3MmMq2P3FatvhLA7DL2iIo7hmg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(5005006)(13018025)(8121501046)(13024025)(13015025)(13023025)(13017025)(10201501046)(3002001)(6055026)(6096035)(20161123556025)(20161123559025)(20161123561025)(20161123563025)(20161123565025); SRVR:BN6PR03MB2467; BCL:0; PCL:0; RULEID:(400006); SRVR:BN6PR03MB2467; X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2467; 4:m5f14jYlIpyT6OzRsOneayviMUBIDTwgwlMod21zxtmz4J2ROVRb/WFjeeCH/d/bZ6yTK+gKA6l/82pIRnd28GaMiCHfkM5AvFJpNsmHcyVjoRo0YadX/iMxMcszEfvne9LAGOwWreZq4Att6R0+yQqSLrNy+RgZKqKQ5I/qsJ0VoaPhu+YBgLKPzWFSEBq39BtI9+/gMW1ULDK9K9GGa6Ll1UAy24y+aZ7AV7E+BPhMe8MkgapWEJu43+dEFXJKJkS5pCr0cOFBYTXQu7CS9JiuWsXJz+on62XB4k5b+ZCSN/cAr6Qmzp6T7KMImqDkP9Lvlk//TFxUf+6O7nLWy9uloyV1TJe8VwyDThsPFTk+ybn+yaIDg5K997St2rfDh0o8g2+uigiSXdhrIj4HK4GHpRXs2e/B4DarCGbLYws/WbEagoqSA1X8qHz/yNRrALSGyaAY6Ya3P9fI4/HasESeWQX1heeJVOqgpsDIdbmDJrvD46nGqsCD5e42kOi5lKBAFolz7jc9KhyPueFtfV1+ZJcQ/rGrxWYNBvc5MB7myUPa7/SPlMTMJVftG3FWJm2BcN1DxKejkSMYyLj7izHX3X1FsMoK13IYdp9OZ3n3AEx2udfulfgRGS0FffGjdPGuJIFEUv6JlttemPbKXFD+3HEI2ufSEkGTW/5g4lq6XTv7YMLHJCHsB4vFt7EvKktxe60/CDYsVwigXtLw0nvm+DerVQKuEPo3kzvaLm8lr+HJNBFveCN3ymcUQoRU X-Forefront-PRVS: 01583E185C X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1; BN6PR03MB2467; 23:JvWhcG/yJwHwdJUNjPzFLKAhp2bDmJqrMLU3a?= =?Windows-1252?Q?/hhs0HUEZhiq9sXvq7N1RCY5CCg+Hm1i30XQz4iULZbjayEQIWpGmEis?= =?Windows-1252?Q?7Jl8TE+09tPfbDgkr4ifnAOPBTWqND8AkmK+xO7u3gYloR7btz5nE5w0?= =?Windows-1252?Q?cUKTQQYdFCGbsOhNMnfNCs/tkKCaIg+HV6tQbLdHizsfiyy/oMsZTz9v?= =?Windows-1252?Q?Ijigs4s3C1l2FzrJ2dXLBBMQwQYB05LHjqj2mBuu9gVSAEQqxM4yj+Ds?= =?Windows-1252?Q?+Bz3vuIJfQi/smJx5XOmf5f0J/bp8v4Wu/tE4thn/16eo87ZvHMJD77g?= =?Windows-1252?Q?LWIE8Pe7W+lfxwFDwgs5gp+atkGx7EM+PMVtyu2tznuLwnwo96xyOJcE?= =?Windows-1252?Q?4OVenMMh3OPzruUMdjCRgmLBnQBhPA/ITg3T52kaZF3A1ftBwq10EoCw?= =?Windows-1252?Q?KlvbsZBevL5ICr+XsvjqYP8oPX6NisIEvJ9RTkx6UzT+BIKkmawNbmpj?= =?Windows-1252?Q?KrNp2s+I0jKhKjibmNjzJ9ne6d6y6cEpnVmT63admPdHM5dbEy2vDlzh?= =?Windows-1252?Q?Qva53VGjY22NAXZtkbA1dst9g8Uei+A2/VTULr9ANKX5JjlQKBuCBu2F?= =?Windows-1252?Q?M0EC7kQikSkGZWhoNE0xKyOPcfsM+RkFNqaygK4q9DE823cLhyf4g38j?= =?Windows-1252?Q?rrZIUCy2G5cgqdkK9rQ9+JfZ3W8e1IauyU3OproEQ9o4npKz1zlJ9XgQ?= =?Windows-1252?Q?EdXTPZfkASIFK0glUwZU9yC862CWegCbjBYJwR9HX0hRF1VyJxSZDDyC?= =?Windows-1252?Q?7hhBJ76FRnfpuoLzphSv4t5yOIMqWdH7C45Q0k3J8FwxryNfD5ZjNWtp?= =?Windows-1252?Q?ktc7S91cYvuUzmbHwqPWelVYzUEhrINgp8IuRvsrqEEsL2i+MSUC7vzW?= =?Windows-1252?Q?OpJFvobNIZqfGbGOdT5h0hKK3StF4nI9ZsvSMrohmiarV66lxHzrdJQo?= =?Windows-1252?Q?B2jxUyEJdFlmpyt5m8qYf/JQDwC3HVkoDPXFCWmy+L+TOrSEGgKcRmpJ?= =?Windows-1252?Q?pTMIexcM0prWYYJW6N6hT4o6c7EwKENMTenU0SD79RLrtN7t4Ih0IKjM?= =?Windows-1252?Q?cBxGg7vjZbjIzfI28OjQu6rlUDkpULpIcW92T5qq9ozBqJ6ca9bhdlhL?= =?Windows-1252?Q?63NHySY64cSzrZiqGl8Keh8Oifca2Cy2g2ZU9YMMMxcQZxVLwoxdyyDc?= =?Windows-1252?Q?vcODnERYQFkhZ4pi21Y5tRomwTrx/YGObdfrzV+qX7uyt2usHnliEYwt?= =?Windows-1252?Q?lbscRQ/9NhYp/87xZvdpYU6W1IQ1/YkPojg53x7TypyfACf5UfGlC+NJ?= =?Windows-1252?Q?9Ysa0IuYT7ZTKwVGk/akhXLZF3QOmDZBzafFSGWrCcM3hgeYbTGaHAEY?= =?Windows-1252?Q?cn2kfIbhgr5ItvvjLWgngLnW+nHF2E58BM8jqHmzWogOZU3CxvaIrDSz?= =?Windows-1252?Q?9rSSPcRFIlS8yW5d9SuRulJkucQgy8AsvrCakKrxuQMr4NPoazrU5bXQ?= =?Windows-1252?Q?3391+t3RS6+T/HNH11dM5rAXXmlpwooQmHCr8I5huKs5oUmGK5Cq49Sm?= =?Windows-1252?Q?G9tNpJgMNGd1dcn/pwHsHI=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2467; 6:SMx7JH9PSeo9rLeJatyoGN5jQ4ecisgEk4EvyDubO4z8kAMhgDqxWU0WVkPBwFTvprYmpuQRass1k/FWMOW7fRqSk5QVmwzwENRAwYi77JCLIIAW+61LGMBV6ZPviwhQBqOmFimB2/E0mr1zOgndDka+r/v+ahIJ014FjvePo7kIq8NyczgdJFz7rv2yUN4G7dyh4M2lfBF8wYEXZt64i1/wdjcLj1ullsy06B967KHj+mYO0eDZSbABdzIIbzqbPiUg5Pg96VXs9B5VWOzjYifmTHSlzRu+qMqrNZJzvzxiA7N5Sb57y9oi6/QShZlFSbryNTfy22cJCMkyfmhhIy1YVQzbv80sZYyvvlZIBpTpoPBsgga9/qYCdBBrHV/dmVHMOIJMsF1/gOvH43XgZ+O39NqVHcPdyNuroRIit6/IAe7P/VOrKiOMlFO4+58U; 5:UPaD8nOF4iC9cFRt38ZSso9PhbnVq7BIbZLTFFP0Mwvi+EGawJ/wBaQGtWAA12jJagqW0+z1GP3ldNfM/apf1QfNw+SIZDkNBKOkE/LqygaLFig4uZVCNiq4cukoTrgQFHpq2IjRd39GUE8UQhvdWcp1nt6zpVsK+nl40RKCQ20hgBTVAQ2xrUAFnTnBEgjm; 24:BpqcNWz9x2Q/AEbCC4ARjwu02Hi//Q+EiaGiG4grW5HmgPBHQKP8Hv6YmcvgnFj/FeVKOA8vn1vW5DXVgstfEu6jcEDBKW7E1KNgKdjWv9U= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR03MB2467; 7:ydPmCrUOFf4KzyBUzptdipw7wFcNCkmD4Yk7canoY242koZRjGzoG8hx6Dd7TkJBfun/tYthDvtC847XsO4kfEkNlfNgs+o3sZ8+NviF6SVzTqJiYtWy9d71mZor0jkHaxL09PlNzXe4CFLTTAl9uOY3Ibw2pfTcZfpcHliFMIDmOXdWKr3hO3ccr063gG7JMoe8xIK0FiL8nC56iBZgiuPksMlcc+Fg4qCdh4eJMPxtddB9Ptoq+UGEzgtICv01h/w76rWyhX04DMxWWRB6+Q0XsKWtRCF+w0C2FAJ9a/piMs9/0uY5q6Ki2yEC0gS0f/hk/4LF+7NDNMzT6fbjo+toOGUNS16SD4oTqh7XfnrAQlXOMJ1VBQ7AjhFl5+AhuaXZQ7FgB0wIEZj9T+0kkHJKsZJlRL70GQ1lGiMpaUxUVuPluNleAWMO0v90+4e23xUYyjt3vTAfSYhghXfsBg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Dec 2016 11:51:22.6430 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR03MB2467 Subject: Re: [dpdk-dev] [PATCH v2 01/12] eal: define container_of macro X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Dec 2016 11:51:28 -0000 On Friday 16 December 2016 04:51 PM, Adrien Mazarguil wrote: > On Fri, Dec 16, 2016 at 11:47:14AM +0100, Jan Blunck wrote: >> On Fri, Dec 16, 2016 at 10:23 AM, Adrien Mazarguil >> wrote: >>> On Fri, Dec 16, 2016 at 09:14:29AM +0100, Jan Blunck wrote: >>>> On Wed, Dec 14, 2016 at 6:12 AM, Shreyansh Jain wrote: >>>>> On Wednesday 14 December 2016 03:54 AM, Jan Blunck wrote: >>>>>> >>>>>> On Tue, Dec 13, 2016 at 2:37 PM, Shreyansh Jain >>>>>> wrote: >>>>>>> >>>>>>> From: Jan Blunck >>>>>>> >>>>>>> This macro is based on Jan Viktorin's original patch but also checks the >>>>>>> type of the passed pointer against the type of the member. >>>>>>> >>>>>>> Signed-off-by: Jan Viktorin >>>>>>> [shreyansh.jain@nxp.com: Fix checkpatch error] >>>>>>> Signed-off-by: Shreyansh Jain >>>>>>> [jblunck@infradead.org: add type checking and __extension__] >>>>>>> Signed-off-by: Jan Blunck >>>>>>> >>>>>>> -- >>>>>>> v2: >>>>>>> - fix checkpatch error >>>>>>> --- >>>>>>> lib/librte_eal/common/include/rte_common.h | 21 +++++++++++++++++++++ >>>>>>> 1 file changed, 21 insertions(+) >>>>>>> >>>>>>> diff --git a/lib/librte_eal/common/include/rte_common.h >>>>>>> b/lib/librte_eal/common/include/rte_common.h >>>>>>> index db5ac91..3eb8d11 100644 >>>>>>> --- a/lib/librte_eal/common/include/rte_common.h >>>>>>> +++ b/lib/librte_eal/common/include/rte_common.h >>>>>>> @@ -331,6 +331,27 @@ rte_bsf32(uint32_t v) >>>>>>> #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) >>>>>>> #endif >>>>>>> >>>>>>> +/** >>>>>>> + * Return pointer to the wrapping struct instance. >>>>>>> + * >>>>>>> + * Example: >>>>>>> + * >>>>>>> + * struct wrapper { >>>>>>> + * ... >>>>>>> + * struct child c; >>>>>>> + * ... >>>>>>> + * }; >>>>>>> + * >>>>>>> + * struct child *x = obtain(...); >>>>>>> + * struct wrapper *w = container_of(x, struct wrapper, c); >>>>>>> + */ >>>>>>> +#ifndef container_of >>>>>>> +#define container_of(ptr, type, member) (__extension__ ({ >>>>>>> \ >>>>>>> + typeof(((type *)0)->member) * _ptr = (ptr); \ >>>>>>> + (type *)(((char *)_ptr) - offsetof(type, >>>>>>> member));\ >>>>>>> + })) >>>>>> >>>>>> >>>>>> This is a checkpatch false positive. It should be fine to ignore this. >>>>>> IIRC we already discussed this before. >>>>> >>>>> >>>>> I too thought something similar was discussed. I tried searching the >>>>> archives but couldn't find anything - thus, I thought probably I was >>>>> hallucinating :P >>>>> >>>>> So, you want me to revert back the '()' change? Does it impact the expansion >>>>> of this macro? >>>> >>>> We haven't added this on any other usage of the __extension__ keyword >>>> in the existing code. From my perspective it is more consistent to >>>> revert it. >>>> >>>> Anyone else with an opinion here? David? Thomas? >>> >>> As an exported header, rte_common.h must pass check-includes.sh. Both >>> typeof() and the ({ ... }) construct are non-standard GCC extensions and >>> would fail to compile with pedantic options. >>> >> >> Thanks Adrien. These extensions are already in use by rte_common.h and >> other headers. I don't believe we can remove the usage of typeof() >> that easily without making the code really ugly. > > Sure, no problem with that, I misread and thought you wanted to drop > __extension__ as well. > > Parentheses may perhaps cause more accurate warnings in case of syntax > errors. That is not significant so either way is fine by me. > If that is the case, and it is OK to ignore the checkpatche warnings because of missing '(' and ')' (or, something else), I too prefer not to touch the patch unnecessarily. I will remove my changes and revert back to original patch as created by Jan Blunck. Thanks for clarifications. - Shreyansh