#include <h/tws.h>
#include <h/utils.h>
#include <fcntl.h>
-#include <errno.h>
#include <utime.h>
int i, fd;
struct utimbuf b;
struct stat s;
+ int failed_to_lock = 0;
/* open and lock the file to be annotated */
- if ((fd = lkopen (file, O_RDWR, 0)) == NOTOK) {
+ if ((fd = lkopendata (file, O_RDWR, 0, &failed_to_lock)) == NOTOK) {
switch (errno) {
case ENOENT:
break;
default:
- admonish (file, "unable to lock and open");
+ if (failed_to_lock) {
+ admonish (file, "unable to lock");
+ } else {
+ admonish (file, "unable to open");
+ }
break;
}
return 1;
if (preserve_actime_and_modtime && utime(file, &b) == -1)
advise("can't set access and modification times for %s", file);
- lkclose (fd, file);
+ lkclosedata (fd, file);
return i;
}
int length; /* length of field name */
int n; /* number of bytes written */
- mode = fstat (fd, &st) != NOTOK ? (st.st_mode & 0777) : m_gmprot ();
+ mode = fstat (fd, &st) != NOTOK ? (int) (st.st_mode & 0777) : m_gmprot ();
- strncpy (tmpfil, m_mktemp2(file, "annotate", NULL, &tmp), sizeof(tmpfil));
+ if ((cp = m_mktemp2(file, "annotate", NULL, &tmp)) == NULL) {
+ adios(NULL, "unable to create temporary file in %s", get_temp_dir());
+ }
+ strncpy (tmpfil, cp, sizeof(tmpfil));
chmod (tmpfil, mode);
/*
cpydata (tmpfd, fd, tmpfil, file);
close (tmpfd);
- unlink (tmpfil);
+ (void) m_unlink (tmpfil);
} else {
strncpy (buffer, m_backup (file), sizeof(buffer));
if (rename (file, buffer) == NOTOK) {
switch (errno) {
case ENOENT: /* unlinked early - no annotations */
- unlink (tmpfil);
+ (void) m_unlink (tmpfil);
break;
default: