libpwdgrp: make db->def[] one byte shorter

In the future I will need another uint8_t, want to fit it
w/o using another word on 32 bits.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2015-01-03 19:12:49 +01:00
parent 5e62a3d016
commit 20c0a16334

View File

@ -34,13 +34,13 @@
struct const_passdb { struct const_passdb {
const char *filename; const char *filename;
const char def[10]; const char def[9];
const uint8_t off[9]; const uint8_t off[9];
uint8_t numfields; uint8_t numfields;
}; };
struct passdb { struct passdb {
const char *filename; const char *filename;
const char def[10]; const char def[9];
const uint8_t off[9]; const uint8_t off[9];
uint8_t numfields; uint8_t numfields;
FILE *fp; FILE *fp;
@ -51,6 +51,11 @@ struct passdb {
IF_USE_BB_SHADOW(sizeof(struct spwd)) IF_USE_BB_SHADOW(sizeof(struct spwd))
]; ];
}; };
/* Note: for shadow db, def[9] will not contain terminating NUL,
* but convert_to_struct() logic detects def[] end by "less than SP?",
* not by "is it NUL?" condition; and off[0] happens to be zero
* for every db anyway, so there _is_ in fact a terminating NUL there.
*/
/* S = string not empty, s = string maybe empty, /* S = string not empty, s = string maybe empty,
* I = uid,gid, l = long maybe empty, m = members, * I = uid,gid, l = long maybe empty, m = members,
@ -122,7 +127,7 @@ static void free_static(void)
free(S.db[0].malloced); free(S.db[0].malloced);
free(S.db[1].malloced); free(S.db[1].malloced);
# if ENABLE_USE_BB_SHADOW # if ENABLE_USE_BB_SHADOW
S.db[2].malloced); free(S.db[2].malloced);
# endif # endif
free(ptr_to_statics); free(ptr_to_statics);
} }
@ -286,8 +291,8 @@ static void *convert_to_struct(struct passdb *db,
* at the end of malloced buffer! * at the end of malloced buffer!
*/ */
members = (char **) members = (char **)
( ((intptr_t)S.tokenize_end + sizeof(char**)) ( ((intptr_t)S.tokenize_end + sizeof(members[0]))
& -(intptr_t)sizeof(char**) & -(intptr_t)sizeof(members[0])
); );
((struct group *)result)->gr_mem = members; ((struct group *)result)->gr_mem = members;
@ -300,7 +305,7 @@ static void *convert_to_struct(struct passdb *db,
/* def "r" does nothing */ /* def "r" does nothing */
def++; def++;
if (*def == '\0') if ((unsigned char)*def < (unsigned char)' ')
break; break;
buffer += strlen(buffer) + 1; buffer += strlen(buffer) + 1;
} }