diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-02-11 15:48:40 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-02-11 15:53:33 +0300 |
commit | 1a8cd3a8a7ef57a982995cc399f496206980049d (patch) | |
tree | a04c786d7c64df656585d46497faa5cd7c5348c2 /source/blender/makesdna/intern | |
parent | 3f8e26370925c94e07f0bbdd51cddad6601fa125 (diff) |
Cleanup: avoid string copy for comparing int id's
More direct and readable.
Diffstat (limited to 'source/blender/makesdna/intern')
-rw-r--r-- | source/blender/makesdna/intern/dna_genfile.c | 38 |
1 files changed, 20 insertions, 18 deletions
diff --git a/source/blender/makesdna/intern/dna_genfile.c b/source/blender/makesdna/intern/dna_genfile.c index 70389430ddc..650ee29594f 100644 --- a/source/blender/makesdna/intern/dna_genfile.c +++ b/source/blender/makesdna/intern/dna_genfile.c @@ -124,6 +124,15 @@ * - the sdna functions have several error prints builtin, always check blender running from a console. */ + +#ifdef __BIG_ENDIAN__ +/* Big Endian */ +# define MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d)) +#else +/* Little Endian */ +# define MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a)) +#endif + /* ************************* MAKE DNA ********************** */ /* allowed duplicate code from makesdna.c */ @@ -367,11 +376,9 @@ static bool init_structDNA( bool data_alloc, const char **r_error_message) { - int *data, *verg, gravity_fix = -1; + int *data, gravity_fix = -1; short *sp; - char str[8]; - verg = (int *)str; data = (int *)sdna->data; /* clear pointers incase of error */ @@ -382,8 +389,8 @@ static bool init_structDNA( sdna->structs_map = NULL; #endif - strcpy(str, "SDNA"); - if (*data != *verg) { + /* Struct DNA ('SDNA') */ + if (*data != MAKE_ID('S', 'D', 'N', 'A')) { *r_error_message = "SDNA error in SDNA file"; return false; } @@ -391,10 +398,8 @@ static bool init_structDNA( const char *cp; data++; - - /* load names array */ - strcpy(str, "NAME"); - if (*data == *verg) { + /* Names array ('NAME') */ + if (*data == MAKE_ID('N', 'A', 'M', 'E')) { data++; sdna->nr_names = *data; @@ -456,10 +461,9 @@ static bool init_structDNA( cp = pad_up_4(cp); - /* load type names array */ + /* Type names array ('TYPE') */ data = (int *)cp; - strcpy(str, "TYPE"); - if (*data == *verg) { + if (*data == MAKE_ID('T', 'Y', 'P', 'E')) { data++; sdna->nr_types = *data; @@ -509,10 +513,9 @@ static bool init_structDNA( cp = pad_up_4(cp); - /* load typelen array */ + /* Type lengths array ('TLEN') */ data = (int *)cp; - strcpy(str, "TLEN"); - if (*data == *verg) { + if (*data == MAKE_ID('T', 'L', 'E', 'N')) { data++; sp = (short *)data; sdna->typelens = sp; @@ -529,10 +532,9 @@ static bool init_structDNA( } if (sdna->nr_types & 1) sp++; /* prevent BUS error */ - /* load struct array */ + /* Struct array ('STRC') */ data = (int *)sp; - strcpy(str, "STRC"); - if (*data == *verg) { + if (*data == MAKE_ID('S', 'T', 'R', 'C')) { data++; sdna->nr_structs = *data; |