/* mailcheck.c -- The check is in the mail... */
-/* Copyright (C) 1987-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
This file is part of GNU Bash, the Bourne Again SHell.
#endif
#include "posixtime.h"
#include "bashansi.h"
+#include "bashintl.h"
#include "shell.h"
#include "execute_cmd.h"
} \
while (0)
+#define UPDATE_MAIL_FILE(i, finfo) \
+ do \
+ { \
+ mailfiles[i]->access_time = finfo.st_atime; \
+ mailfiles[i]->mod_time = finfo.st_mtime; \
+ mailfiles[i]->file_size = finfo.st_size; \
+ } \
+ while (0)
+
static void
update_mail_file (i)
int i;
file = mailfiles[i]->name;
if (mailstat (file, &finfo) == 0)
- {
- mailfiles[i]->access_time = finfo.st_atime;
- mailfiles[i]->mod_time = finfo.st_mtime;
- mailfiles[i]->file_size = finfo.st_size;
- }
+ UPDATE_MAIL_FILE (i, finfo);
else
RESET_MAIL_FILE (i);
}
if (i >= 0)
{
if (mailstat (filename, &finfo) == 0)
- {
- mailfiles[i]->mod_time = finfo.st_mtime;
- mailfiles[i]->access_time = finfo.st_atime;
- mailfiles[i]->file_size = finfo.st_size;
- }
+ UPDATE_MAIL_FILE (i, finfo);
+
free (filename);
return i;
}
register int i;
for (i = 0; i < mailfiles_count; i++)
- {
- RESET_MAIL_FILE (i);
- }
+ RESET_MAIL_FILE (i);
}
/* Free the information that we have about the remembered mail files. */
}
/* Return non-zero if FILE's mod date has changed and it has not been
- accessed since modified. */
+ accessed since modified. If the size has dropped to zero, reset
+ the cached mail file info. */
static int
file_mod_date_changed (i)
int i;
if ((mailstat (file, &finfo) == 0) && (finfo.st_size > 0))
return (mtime != finfo.st_mtime);
+ if (finfo.st_size == 0 && mailfiles[i]->file_size > 0)
+ UPDATE_MAIL_FILE (i, finfo);
+
return (0);
}
char *
make_default_mailpath ()
{
+#if defined (DEFAULT_MAIL_DIRECTORY)
char *mp;
get_current_user_info ();
mp[sizeof(DEFAULT_MAIL_DIRECTORY) - 1] = '/';
strcpy (mp + sizeof (DEFAULT_MAIL_DIRECTORY), current_user.user_name);
return (mp);
+#else
+ return ((char *)NULL);
+#endif
}
/* Remember the dates of the files specified by MAILPATH, or if there is
if (mailpaths == 0)
{
mailpaths = make_default_mailpath ();
- add_mail_file (mailpaths, (char *)NULL);
- free (mailpaths);
+ if (mailpaths)
+ {
+ add_mail_file (mailpaths, (char *)NULL);
+ free (mailpaths);
+ }
return;
}
int file_is_bigger;
use_user_notification = mailfiles[i]->msg != (char *)NULL;
- message = mailfiles[i]->msg ? mailfiles[i]->msg : "You have mail in $_";
+ message = mailfiles[i]->msg ? mailfiles[i]->msg : _("You have mail in $_");
- bind_variable ("_", current_mail_file);
+ bind_variable ("_", current_mail_file, 0);
#define atime mailfiles[i]->access_time
#define mtime mailfiles[i]->mod_time
the access time to be equal to the modification time when
the mail in the file is manipulated, check the size also. If
the file has not grown, continue. */
- if ((atime >= mtime) || !file_is_bigger)
+ if ((atime >= mtime) && !file_is_bigger)
continue;
/* If the mod time is later than the access time and the file
has grown, note the fact that this is *new* mail. */
if (use_user_notification == 0 && (atime < mtime) && file_is_bigger)
- message = "You have new mail in $_";
+ message = _("You have new mail in $_");
#undef atime
#undef mtime
if (mail_warning && file_access_date_changed (i))
{
update_mail_file (i);
- printf ("The mail in %s has been read\n", current_mail_file);
+ printf (_("The mail in %s has been read\n"), current_mail_file);
}
}
if (dollar_underscore)
{
- bind_variable ("_", dollar_underscore);
+ bind_variable ("_", dollar_underscore, 0);
free (dollar_underscore);
}
else