X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=muttlib.c;h=1f6b7514bbb97f8b58a720d5315a2d498b9e5213;hp=4b1352645b105138eb9bf845bd89f1424fce6d22;hb=8336b26fc23c7943bf6681ba2c290bb5cd2c54b8;hpb=9fde23d2b9a4ba8076eb425a1af4342de1e485b5 diff --git a/muttlib.c b/muttlib.c index 4b13526..1f6b751 100644 --- a/muttlib.c +++ b/muttlib.c @@ -12,7 +12,6 @@ #include #include -#include #include #include @@ -40,34 +39,15 @@ */ void mutt_adv_mktemp (const char* dir, char *s, ssize_t l) { - char buf[_POSIX_PATH_MAX]; - char tmp[_POSIX_PATH_MAX]; - char *period; - ssize_t sl; - struct stat sb; - - m_strcpy(buf, sizeof(buf), m_strisempty(dir) ? NONULL(Tempdir) : dir); - mutt_expand_path (buf, sizeof (buf)); - if (s[0] == '\0') { - snprintf (s, l, "%s/muttXXXXXX", buf); - mktemp (s); - } - else { - m_strcpy(tmp, sizeof(tmp), s); - mutt_sanitize_filename (tmp, 1); - snprintf (s, l, "%s/%s", buf, tmp); - if (lstat (s, &sb) == -1 && errno == ENOENT) - return; - if ((period = strrchr (tmp, '.')) != NULL) - *period = 0; - snprintf (s, l, "%s/%s.XXXXXX", buf, tmp); - mktemp (s); - if (period != NULL) { - *period = '.'; - sl = m_strlen(s); - m_strcpy(s + sl, l - sl, period); + int fd; + + fd = m_tempfd(s, l, m_strisempty(dir) ? NONULL(Tempdir) : dir, s); + if (fd < 0) { + *s = '\0'; + } else { + close(fd); + unlink(s); } - } } /* returns true if the header contained in "s" is in list "t" */ @@ -190,13 +170,15 @@ ssize_t _mutt_expand_path(char *s, ssize_t slen, int rx) return m_strcpy(s, slen, tmp); } -void mutt_mktemp (char *s) +void mutt_mktemp(char *s) { - - snprintf (s, _POSIX_PATH_MAX, "%s/madmutt-%s-%d-%d-%d-%x%x", NONULL (Tempdir), - NONULL (Hostname), (int) getuid (), (int) getpid (), Counter++, - (unsigned int) rand(), (unsigned int) rand()); - unlink (s); + int fd = m_tempfd(s, _POSIX_PATH_MAX, NONULL(Tempdir), NULL); + if (fd < 0) { + *s = '\0'; + } else { + close(fd); + unlink(s); + } } /* collapse the pathname using ~ or = when possible */ @@ -250,14 +232,6 @@ void mutt_pretty_mailbox (char *s) } } -void -mutt_expand_file_fmt(char *dst, ssize_t n, const char *fmt, const char *src) -{ - char tmp[LONG_STRING]; - mutt_quote_filename(tmp, sizeof(tmp), src); - m_snsubst(dst, n, fmt, tmp); -} - /* return 0 on success, -1 on abort, 1 on error */ int mutt_check_overwrite (const char *attname, const char *path, char *fname, ssize_t flen, int *append, @@ -630,29 +604,6 @@ void mutt_sleep (short s) sleep(MAX(s, SleepTime)); } -/* Decrease a file's modification time by 1 second */ -time_t mutt_decrease_mtime (const char *f, struct stat *st) -{ - struct utimbuf utim; - struct stat _st; - time_t mtime; - - if (!st) { - if (stat (f, &_st) == -1) - return -1; - st = &_st; - } - - if ((mtime = st->st_mtime) == time (NULL)) { - mtime -= 1; - utim.actime = mtime; - utim.modtime = mtime; - utime (f, &utim); - } - - return mtime; -} - const char *mutt_make_version (int full) { static char vstring[STRING]; @@ -921,7 +872,7 @@ int mutt_extract_token(BUFFER *dest, BUFFER *tok, int flags) /* read line */ p_clear(&expn, 1); expn.data = mutt_read_line(NULL, &expn.dsize, fp, &line); - fclose(fp); + m_fclose(&fp); mutt_wait_filter(pid); /* if we got output, make a new string consiting of the shell ouptput