Subject: Re: [PATCH 08/10] Integrate wildmatch to git

From: "Joachim Schmitz" <[email-masked]>
Date: Sat, 6 Oct 2012 11:25:35 +0200

Thiago Farina wrote:
> On Fri, Oct 5, 2012 at 1:41 AM, Nguyễn Thái Ngọc Duy
> <[email-masked]> wrote:
>> This makes wildmatch.c part of libgit.a and builds test-wildmatch;
>> the dependency on libpopt in the original has been replaced with the
>> use
>> of our parse-options. Global variables in test-wildmatch are marked
>> static to avoid sparse warnings.
>>
>> Signed-off-by: Nguyễn Thái Ngọc Duy <[email-masked]>
>> Signed-off-by: Ramsay Jones <[email-masked]>
>> Signed-off-by: Junio C Hamano <[email-masked]>
>> ---
>>  .gitignore           |  1 +
>>  Makefile             |  3 ++
>>  t/t3070-wildmatch.sh | 27 ++++++++++++++++
>>  test-wildmatch.c     | 88
>>  ++++++++++++++++++++++------------------------------ wildmatch.c
>>  | 26 +++++----------- 5 files changed, 75 insertions(+), 70
>>  deletions(-) create mode 100755 t/t3070-wildmatch.sh
>>
>> diff --git a/test-wildmatch.c b/test-wildmatch.c
>> index 88585c2..bb726c8 100644
>> --- a/test-wildmatch.c
>> +++ b/test-wildmatch.c
>> @@ -19,34 +19,38 @@
>>
>>  /*#define COMPARE_WITH_FNMATCH*/
>>
>> -#define WILD_TEST_ITERATIONS
>> -#include "lib/wildmatch.c"
>> +#include "cache.h"
>> +#include "parse-options.h"
>> +#include "wildmatch.h"
>>
>> -#include <popt.h>
>> +#ifndef MAXPATHLEN
>> +#define MAXPATHLEN 1024
>> +#endif
>> +#ifdef NO_STRLCPY
>> +#include "compat/strlcpy.c"
>> +#define strlcpy gitstrlcpy
>> +#endif
>>
>>  #ifdef COMPARE_WITH_FNMATCH
>>  #include <fnmatch.h>
>>
>> -int fnmatch_errors = 0;
>> +static int fnmatch_errors = 0;
>>  #endif
>>
>> -int wildmatch_errors = 0;
>> -char number_separator = ',';
>> +static int wildmatch_errors = 0;
>>
>>  typedef char bool;
>>
>> -int output_iterations = 0;
>> -int explode_mod = 0;
>> -int empties_mod = 0;
>> -int empty_at_start = 0;
>> -int empty_at_end = 0;
>> -
>> -static struct poptOption long_options[] = {
>> -  /* longName, shortName, argInfo, argPtr, value, descrip, argDesc
>> */
>> -  {"iterations",     'i', POPT_ARG_NONE,   &output_iterations, 0,
>> 0, 0},
>> -  {"empties",        'e', POPT_ARG_STRING, 0, 'e', 0, 0},
>> -  {"explode",        'x', POPT_ARG_INT,    &explode_mod, 0, 0, 0},
>> -  {0,0,0,0, 0, 0, 0}
>> +static int explode_mod = 0;
> Isn't static variables like this initialized to zero by default? There
> is a high chance that I might be wrong though.

C99,
5.1.2.1: All objects with static storage duration shall be initialized (set 
to their initial values) before program startup.
6.2.4.2: An object whose identifier is declared with external or internal 
linkage, or with the storage-class specifier static has static storage 
duration. Its lifetime is the entire execution of the program and its stored 
value is initialized only once, prior to program startup.
6.7.8.10: If an object that has automatic storage duration is not 
initialized explicitly, its value is indeterminate. If an object that has 
static storage duration is not initialized explicitly, then:
— if it has pointer type, it is initialized to a null pointer;
— if it has arithmetic type, it is initialized to (positive or unsigned) 
zero;
— if it is an aggregate, every member is initialized (recursively) according 
to these rules;
— if it is a union, the first named member is initialized (recursively) 
according to these rules.

So seems you're right ;-)