#include "defines.h"
-#define ALLOCARRAY(n, type) ((type *) alloca(sizeof(type) * (n)))
#define CALLOC(n, type) ((type *) calloc(n, sizeof(type)))
#define XCALLOC(n, type) ((type *) xcalloc(n, sizeof(type)))
#define MALLOCARRAY(n, type) ((type *) mallocarray(n, sizeof(type)))
#define XMALLOCARRAY(n, type) ((type *) xmallocarray(n, sizeof(type)))
-#define ALLOCA(type) ALLOCARRAY(1, type)
#define MALLOC(type) MALLOCARRAY(1, type)
#define XMALLOC(type) XMALLOCARRAY(1, type)
#define REALLOC(ptr, type) REALLOCARRAY(ptr, 1, type)
if (strcasecmp (create_mail_spool, "yes") == 0) {
const char *spool;
char *file;
+ size_t size;
int fd;
struct group *gr;
gid_t gid;
if (NULL == spool) {
return;
}
- file = ALLOCARRAY (strlen (prefix) + strlen (spool) + strlen (user_name) + 3, char);
+ size = strlen(prefix) + strlen(spool) + strlen(user_name) + 3;
+ file = XMALLOCARRAY(size, char);
if (prefix[0])
sprintf (file, "%s/%s/%s", prefix, spool, user_name);
else
#endif
fd = open (file, O_CREAT | O_WRONLY | O_TRUNC | O_EXCL, 0);
+ free(file);
+
if (fd < 0) {
perror (_("Creating mailbox file"));
return;
{
const char *maildir;
char* mailfile;
- char* newmailfile;
int fd;
struct stat st;
- size_t len;
+ size_t size;
maildir = getdef_str ("MAIL_DIR");
#ifdef MAIL_SPOOL_DIR
if (NULL == maildir) {
return;
}
- len = strlen (prefix) + strlen (maildir) + strlen (user_name) + 3;
- mailfile = ALLOCARRAY (len, char);
+ size = strlen(prefix) + strlen(maildir) + strlen(user_name) + 3;
+ mailfile = XMALLOCARRAY(size, char);
/*
* O_NONBLOCK is to make sure open won't hang on mandatory locks.
* between stat and chown). --marekm
*/
if (prefix[0]) {
- (void) snprintf (mailfile, len, "%s/%s/%s",
+ (void) snprintf (mailfile, size, "%s/%s/%s",
prefix, maildir, user_name);
}
else {
- (void) snprintf (mailfile, len, "%s/%s",
+ (void) snprintf (mailfile, size, "%s/%s",
maildir, user_name);
}
- mailfile[len-1] = '\0';
fd = open (mailfile, O_RDONLY | O_NONBLOCK, 0);
if (fd < 0) {
if (errno != ENOENT) {
perror (mailfile);
}
+ free(mailfile);
return;
}
if (fstat (fd, &st) < 0) {
perror ("fstat");
(void) close (fd);
+ free(mailfile);
return;
}
if (st.st_uid != user_id) {
fprintf (stderr, _("%s: warning: %s not owned by %s\n"),
Prog, mailfile, user_name);
(void) close (fd);
+ free(mailfile);
return;
}
if (uflg) {
(void) close (fd);
if (lflg) {
- len = strlen (prefix) + strlen (maildir) + strlen (user_newname) + 3;
- newmailfile = ALLOCARRAY(len, char);
+ char* newmailfile;
+ size_t newsize;
+
+ newsize = strlen(prefix) + strlen(maildir) + strlen(user_newname) + 3;
+ newmailfile = XMALLOCARRAY(newsize, char);
if (prefix[0]) {
- (void) snprintf (newmailfile, len, "%s/%s/%s",
+ (void) snprintf (newmailfile, newsize, "%s/%s/%s",
prefix, maildir, user_newname);
}
else {
- (void) snprintf (newmailfile, len, "%s/%s",
+ (void) snprintf (newmailfile, newsize, "%s/%s",
maildir, user_newname);
}
- newmailfile[len - 1] = '\0';
if ( (link (mailfile, newmailfile) != 0)
|| (unlink (mailfile) != 0)) {
perror (_("failed to rename mailbox"));
"changing mail file name",
user_newname, user_newid, 1);
}
+
+ free(newmailfile);
#endif
}
+
+ free(mailfile);
}
#endif