Browse Source

[PATCH] Compilation: zero-length array declaration.

ISO C99 (and GCC 3.x or later) lets you write a flexible array
at the end of a structure, like this:

	struct frotz {
		int xyzzy;
		char nitfol[]; /* more */
	};

GCC 2.95 and 2.96 let you to do this with "char nitfol[0]";
unfortunately this is not allowed by ISO C90.

This declares such construct like this:

	struct frotz {
		int xyzzy;
		char nitfol[FLEX_ARRAY]; /* more */
	};

and git-compat-util.h defines FLEX_ARRAY to 0 for gcc 2.95 and
empty for others.

If you are using a C90 C compiler, you should be able
to override this with CFLAGS=-DFLEX_ARRAY=1 from the
command line of "make".

Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Junio C Hamano 19 years ago
parent
commit
8f1d2e6f49
  1. 2
      blob.c
  2. 9
      cache.h
  3. 2
      commit.c
  4. 8
      git-compat-util.h
  5. 2
      ls-files.c
  6. 2
      object.c
  7. 2
      object.h
  8. 2
      receive-pack.c
  9. 2
      tag.c
  10. 2
      tree.c

2
blob.c

@ -1,5 +1,5 @@
#include "blob.h"
#include "cache.h" #include "cache.h"
#include "blob.h"
#include <stdlib.h> #include <stdlib.h>


const char *blob_type = "blob"; const char *blob_type = "blob";

9
cache.h

@ -81,7 +81,7 @@ struct cache_entry {
unsigned int ce_size; unsigned int ce_size;
unsigned char sha1[20]; unsigned char sha1[20];
unsigned short ce_flags; unsigned short ce_flags;
char name[0]; char name[FLEX_ARRAY]; /* more */
}; };


#define CE_NAMEMASK (0x0fff) #define CE_NAMEMASK (0x0fff)
@ -257,7 +257,7 @@ extern int checkout_entry(struct cache_entry *ce, struct checkout *state);
extern struct alternate_object_database { extern struct alternate_object_database {
struct alternate_object_database *next; struct alternate_object_database *next;
char *name; char *name;
char base[0]; /* more */ char base[FLEX_ARRAY]; /* more */
} *alt_odb_list; } *alt_odb_list;
extern void prepare_alt_odb(void); extern void prepare_alt_odb(void);


@ -271,7 +271,8 @@ extern struct packed_git {
unsigned int pack_use_cnt; unsigned int pack_use_cnt;
int pack_local; int pack_local;
unsigned char sha1[20]; unsigned char sha1[20];
char pack_name[0]; /* something like ".git/objects/pack/xxxxx.pack" */ /* something like ".git/objects/pack/xxxxx.pack" */
char pack_name[FLEX_ARRAY]; /* more */
} *packed_git; } *packed_git;


struct pack_entry { struct pack_entry {
@ -286,7 +287,7 @@ struct ref {
unsigned char new_sha1[20]; unsigned char new_sha1[20];
unsigned char force; unsigned char force;
struct ref *peer_ref; /* when renaming */ struct ref *peer_ref; /* when renaming */
char name[0]; char name[FLEX_ARRAY]; /* more */
}; };


extern int git_connect(int fd[2], char *url, const char *prog); extern int git_connect(int fd[2], char *url, const char *prog);

2
commit.c

@ -1,6 +1,6 @@
#include "cache.h"
#include "tag.h" #include "tag.h"
#include "commit.h" #include "commit.h"
#include "cache.h"


int save_commit_buffer = 1; int save_commit_buffer = 1;



8
git-compat-util.h

@ -1,6 +1,14 @@
#ifndef GIT_COMPAT_UTIL_H #ifndef GIT_COMPAT_UTIL_H
#define GIT_COMPAT_UTIL_H #define GIT_COMPAT_UTIL_H


#ifndef FLEX_ARRAY
#if defined(__GNUC__) && (__GNUC__ < 3)
#define FLEX_ARRAY 0
#else
#define FLEX_ARRAY /* empty */
#endif
#endif

#include <unistd.h> #include <unistd.h>
#include <stdio.h> #include <stdio.h>
#include <sys/stat.h> #include <sys/stat.h>

2
ls-files.c

@ -208,7 +208,7 @@ static int excluded(const char *pathname)


struct nond_on_fs { struct nond_on_fs {
int len; int len;
char name[0]; char name[FLEX_ARRAY]; /* more */
}; };


static struct nond_on_fs **dir; static struct nond_on_fs **dir;

2
object.c

@ -1,8 +1,8 @@
#include "cache.h"
#include "object.h" #include "object.h"
#include "blob.h" #include "blob.h"
#include "tree.h" #include "tree.h"
#include "commit.h" #include "commit.h"
#include "cache.h"
#include "tag.h" #include "tag.h"


struct object **objs; struct object **objs;

2
object.h

@ -9,7 +9,7 @@ struct object_list {


struct object_refs { struct object_refs {
unsigned count; unsigned count;
struct object *ref[0]; struct object *ref[FLEX_ARRAY]; /* more */
}; };


struct object { struct object {

2
receive-pack.c

@ -24,7 +24,7 @@ struct command {
unsigned char updated; unsigned char updated;
unsigned char old_sha1[20]; unsigned char old_sha1[20];
unsigned char new_sha1[20]; unsigned char new_sha1[20];
char ref_name[0]; char ref_name[FLEX_ARRAY]; /* more */
}; };


static struct command *commands = NULL; static struct command *commands = NULL;

2
tag.c

@ -1,5 +1,5 @@
#include "tag.h"
#include "cache.h" #include "cache.h"
#include "tag.h"


const char *tag_type = "tag"; const char *tag_type = "tag";



2
tree.c

@ -1,8 +1,8 @@
#include "cache.h"
#include "tree.h" #include "tree.h"
#include "blob.h" #include "blob.h"
#include "commit.h" #include "commit.h"
#include "tag.h" #include "tag.h"
#include "cache.h"
#include <stdlib.h> #include <stdlib.h>


const char *tree_type = "tree"; const char *tree_type = "tree";

Loading…
Cancel
Save