Use stpeprintf() where appropriate
This function allows reducing error checking (since errors are propagated across chained calls), and also simplifies the calculation of the start and end of the buffer where the string should be written. Moreover, the new code is more optimized, since many calls to strlen(3) have been removed. Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
committed by
Iker Pedrosa
parent
7e213cfb50
commit
46610792e9
@@ -35,6 +35,7 @@
|
||||
#include "sgroupio.h"
|
||||
#endif
|
||||
#include "shadowlog.h"
|
||||
#include "stpeprintf.h"
|
||||
/*
|
||||
* exit status values
|
||||
*/
|
||||
@@ -543,46 +544,49 @@ static void close_files (void)
|
||||
*/
|
||||
static void prepare_failure_reports (void)
|
||||
{
|
||||
char *gr, *gr_end;
|
||||
#ifdef SHADOWGRP
|
||||
char *sgr, *sgr_end;
|
||||
#endif
|
||||
char *pw, *pw_end;
|
||||
|
||||
info_group.name = group_name;
|
||||
#ifdef SHADOWGRP
|
||||
info_gshadow.name = group_name;
|
||||
#endif
|
||||
info_passwd.name = group_name;
|
||||
|
||||
info_group.audit_msg = xmalloc (512);
|
||||
gr = xmalloc (512);
|
||||
info_group.audit_msg = gr;
|
||||
gr_end = gr + 512;
|
||||
#ifdef SHADOWGRP
|
||||
info_gshadow.audit_msg = xmalloc (512);
|
||||
sgr = xmalloc (512);
|
||||
info_gshadow.audit_msg = sgr;
|
||||
sgr_end = sgr + 512;
|
||||
#endif
|
||||
info_passwd.audit_msg = xmalloc (512);
|
||||
pw = xmalloc (512);
|
||||
info_passwd.audit_msg = pw;
|
||||
pw_end = pw + 512;
|
||||
|
||||
(void) snprintf (info_group.audit_msg, 512,
|
||||
"changing %s; ", gr_dbname ());
|
||||
gr = stpeprintf(gr, gr_end, "changing %s; ", gr_dbname ());
|
||||
#ifdef SHADOWGRP
|
||||
(void) snprintf (info_gshadow.audit_msg, 512,
|
||||
"changing %s; ", sgr_dbname ());
|
||||
sgr = stpeprintf(sgr, sgr_end, "changing %s; ", sgr_dbname ());
|
||||
#endif
|
||||
(void) snprintf (info_passwd.audit_msg, 512,
|
||||
"changing %s; ", pw_dbname ());
|
||||
pw = stpeprintf(pw, pw_end, "changing %s; ", pw_dbname ());
|
||||
|
||||
info_group.action = info_group.audit_msg
|
||||
+ strlen (info_group.audit_msg);
|
||||
info_group.action = gr;
|
||||
#ifdef SHADOWGRP
|
||||
info_gshadow.action = info_gshadow.audit_msg
|
||||
+ strlen (info_gshadow.audit_msg);
|
||||
info_gshadow.action = sgr;
|
||||
#endif
|
||||
info_passwd.action = info_passwd.audit_msg
|
||||
+ strlen (info_passwd.audit_msg);
|
||||
info_passwd.action = pw;
|
||||
|
||||
(void) snprintf (info_group.action,
|
||||
512 - strlen (info_group.audit_msg),
|
||||
gr = stpeprintf(gr, gr_end,
|
||||
"group %s/%ju", group_name, (uintmax_t) group_id);
|
||||
#ifdef SHADOWGRP
|
||||
(void) snprintf (info_gshadow.action,
|
||||
512 - strlen (info_gshadow.audit_msg),
|
||||
sgr = stpeprintf(sgr, sgr_end,
|
||||
"group %s", group_name);
|
||||
#endif
|
||||
(void) snprintf (info_passwd.action,
|
||||
512 - strlen (info_passwd.audit_msg),
|
||||
pw = stpeprintf(pw, pw_end,
|
||||
"group %s/%ju", group_name, (uintmax_t) group_id);
|
||||
|
||||
if (nflg) {
|
||||
@@ -615,15 +619,13 @@ static void prepare_failure_reports (void)
|
||||
if (gflg) {
|
||||
strncat (info_group.action, ", new gid: ",
|
||||
511 - strlen (info_group.audit_msg));
|
||||
(void) snprintf (info_group.action+strlen (info_group.action),
|
||||
512 - strlen (info_group.audit_msg),
|
||||
"%ju", (uintmax_t) group_newid);
|
||||
stpeprintf(info_group.action+strlen (info_group.action),
|
||||
gr_end, "%ju", (uintmax_t) group_newid);
|
||||
|
||||
strncat (info_passwd.action, ", new gid: ",
|
||||
511 - strlen (info_passwd.audit_msg));
|
||||
(void) snprintf (info_passwd.action+strlen (info_passwd.action),
|
||||
512 - strlen (info_passwd.audit_msg),
|
||||
"%ju", (uintmax_t) group_newid);
|
||||
stpeprintf(info_passwd.action+strlen (info_passwd.action),
|
||||
pw_end, "%ju", (uintmax_t) group_newid);
|
||||
}
|
||||
info_group.audit_msg[511] = '\0';
|
||||
#ifdef SHADOWGRP
|
||||
|
||||
Reference in New Issue
Block a user