diff options
Diffstat (limited to 'lib-src')
| -rw-r--r-- | lib-src/movemail.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/lib-src/movemail.c b/lib-src/movemail.c index d1294788a9b..de766e6d609 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c | |||
| @@ -96,7 +96,6 @@ main (argc, argv) | |||
| 96 | { | 96 | { |
| 97 | char *inname, *outname; | 97 | char *inname, *outname; |
| 98 | int indesc, outdesc; | 98 | int indesc, outdesc; |
| 99 | char buf[1024]; | ||
| 100 | int nread; | 99 | int nread; |
| 101 | 100 | ||
| 102 | #ifndef MAIL_USE_FLOCK | 101 | #ifndef MAIL_USE_FLOCK |
| @@ -182,8 +181,7 @@ main (argc, argv) | |||
| 182 | to bug-gnu-emacs@prep.ai.mit.edu so we can fix it. */ | 181 | to bug-gnu-emacs@prep.ai.mit.edu so we can fix it. */ |
| 183 | 182 | ||
| 184 | lockname = concat (inname, ".lock", ""); | 183 | lockname = concat (inname, ".lock", ""); |
| 185 | tempname = (char *) xmalloc (strlen (inname) + 20); | 184 | tempname = strcpy (xmalloc (strlen (inname)+1), inname); |
| 186 | strcpy (tempname, inname); | ||
| 187 | p = tempname + strlen (tempname); | 185 | p = tempname + strlen (tempname); |
| 188 | while (p != tempname && p[-1] != '/') | 186 | while (p != tempname && p[-1] != '/') |
| 189 | p--; | 187 | p--; |
| @@ -249,19 +247,23 @@ main (argc, argv) | |||
| 249 | #endif | 247 | #endif |
| 250 | #endif /* MAIL_USE_FLOCK */ | 248 | #endif /* MAIL_USE_FLOCK */ |
| 251 | 249 | ||
| 252 | while (1) | 250 | { |
| 253 | { | 251 | char buf[1024]; |
| 254 | nread = read (indesc, buf, sizeof buf); | 252 | |
| 255 | if (nread != write (outdesc, buf, nread)) | 253 | while (1) |
| 256 | { | 254 | { |
| 257 | int saved_errno = errno; | 255 | nread = read (indesc, buf, sizeof buf); |
| 258 | unlink (outname); | 256 | if (nread != write (outdesc, buf, nread)) |
| 259 | errno = saved_errno; | 257 | { |
| 260 | pfatal_with_name (outname); | 258 | int saved_errno = errno; |
| 261 | } | 259 | unlink (outname); |
| 262 | if (nread < sizeof buf) | 260 | errno = saved_errno; |
| 263 | break; | 261 | pfatal_with_name (outname); |
| 264 | } | 262 | } |
| 263 | if (nread < sizeof buf) | ||
| 264 | break; | ||
| 265 | } | ||
| 266 | } | ||
| 265 | 267 | ||
| 266 | #ifdef BSD | 268 | #ifdef BSD |
| 267 | if (fsync (outdesc) < 0) | 269 | if (fsync (outdesc) < 0) |