| 84 |
|
int oflags = O_CLOEXEC; |
| 85 |
|
switch (flags & (RDSread|RDSwrite)) { |
| 86 |
|
case RDSread|RDSwrite: |
| 87 |
< |
oflags |= O_RDWR; |
| 87 |
> |
oflags |= O_RDWR|O_CREAT; |
| 88 |
|
break; |
| 89 |
+ |
case RDSwrite: |
| 90 |
+ |
oflags |= O_WRONLY|O_CREAT; |
| 91 |
+ |
break; |
| 92 |
|
case RDSread: |
| 93 |
|
oflags |= O_RDONLY; |
| 94 |
|
break; |
| 92 |
– |
case RDSwrite: |
| 93 |
– |
oflags |= O_WRONLY; |
| 94 |
– |
break; |
| 95 |
|
} |
| 96 |
< |
if (flags & RDSexcl) oflags |= O_CREAT|O_EXCL; |
| 96 |
> |
if (flags & RDSexcl) oflags |= O_EXCL; |
| 97 |
|
else if (flags & RDSextend && !siz) oflags |= O_TRUNC; |
| 98 |
|
fd = open(name, oflags, 0666); |
| 99 |
|
if (fd < 0) { |
| 108 |
|
else if (fstat(fd, &sbuf) >= 0) |
| 109 |
|
siz = sbuf.st_size; |
| 110 |
|
else { |
| 111 |
< |
sprintf(errmsg, "cannot stat '%s'", chName); |
| 111 |
> |
sprintf(errmsg, "cannot stat '%s'", name); |
| 112 |
|
error(SYSTEM, errmsg); |
| 113 |
|
close(fd); fd = -1; |
| 114 |
|
return; |
| 153 |
|
return osiz = sbuf.st_size; |
| 154 |
|
} // else attempt to resize file |
| 155 |
|
if (ftruncate(fd, new_siz) < 0) { |
| 156 |
< |
sprintf(errmsg, "cannot truncate '%s'", chName); |
| 156 |
> |
sprintf(errmsg, "cannot resize '%s'", chName); |
| 157 |
|
return 0; |
| 158 |
|
} |
| 159 |
|
return osiz = new_siz; |