#endif
#ifdef I_UTIME
-# ifdef WIN32
+# ifdef _MSC_VER
# include <sys/utime.h>
# else
# include <utime.h>
#ifdef HAS_FCHMOD
(void)fchmod(lastfd,filemode);
#else
+# if !(defined(WIN32) && defined(__BORLANDC__))
+ /* Borland runtime creates a readonly file! */
(void)chmod(oldname,filemode);
+# endif
#endif
if (fileuid != statbuf.st_uid || filegid != statbuf.st_gid) {
#ifdef HAS_FCHOWN
if (PerlIO_eof(fp))
(void)PerlIO_seek(fp, 0L, 2); /* ultrix 1.2 workaround */
#endif
- if (op->op_type == OP_SYSTELL)
- return lseek(PerlIO_fileno(fp), 0L, 1);
- else
- return PerlIO_tell(fp);
+ return PerlIO_tell(fp);
}
if (dowarn)
- warn("%s() on unopened file", op_name[op->op_type]);
+ warn("tell() on unopened file");
SETERRNO(EBADF,RMS$_IFI);
return -1L;
}
if (PerlIO_eof(fp))
(void)PerlIO_seek(fp, 0L, 2); /* ultrix 1.2 workaround */
#endif
- if (op->op_type == OP_SYSSEEK)
- return lseek(PerlIO_fileno(fp), pos, whence) >= 0;
- else
- return PerlIO_seek(fp, pos, whence) >= 0;
+ return PerlIO_seek(fp, pos, whence) >= 0;
}
if (dowarn)
- warn("%s() on unopened file", op_name[op->op_type]);
+ warn("seek() on unopened file");
SETERRNO(EBADF,RMS$_IFI);
return FALSE;
}
+long
+do_sysseek(gv, pos, whence)
+GV *gv;
+long pos;
+int whence;
+{
+ register IO *io;
+ register PerlIO *fp;
+
+ if (gv && (io = GvIO(gv)) && (fp = IoIFP(io)))
+ return lseek(PerlIO_fileno(fp), pos, whence);
+ if (dowarn)
+ warn("sysseek() on unopened file");
+ SETERRNO(EBADF,RMS$_IFI);
+ return -1L;
+}
+
#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
/* code courtesy of William Kucharski */
#define HAS_CHSIZE
I32 fd; /* file descriptor */
Off_t length; /* length to set file to */
{
- extern long lseek();
struct flock fl;
struct stat filebuf;
char *a;
I32 id, n, cmd, infosize, getinfo;
I32 ret = -1;
+#ifdef __linux__ /* XXX Need metaconfig test */
+ union semun unsemds;
+#endif
id = SvIVx(*++mark);
n = (optype == OP_SEMCTL) ? SvIVx(*++mark) : 0;
infosize = sizeof(struct semid_ds);
else if (cmd == GETALL || cmd == SETALL)
{
+#ifdef __linux__ /* XXX Need metaconfig test */
+/* linux uses :
+ int semctl (int semid, int semnun, int cmd, union semun arg)
+
+ union semun {
+ int val;
+ struct semid_ds *buf;
+ ushort *array;
+ };
+*/
+ union semun semds;
+ if (semctl(id, 0, IPC_STAT, semds) == -1)
+#else
struct semid_ds semds;
if (semctl(id, 0, IPC_STAT, &semds) == -1)
+#endif
return -1;
getinfo = (cmd == GETALL);
+#ifdef __linux__ /* XXX Need metaconfig test */
+ infosize = semds.buf->sem_nsems * sizeof(short);
+#else
infosize = semds.sem_nsems * sizeof(short);
+#endif
/* "short" is technically wrong but much more portable
than guessing about u_?short(_t)? */
}
#endif
#ifdef HAS_SEM
case OP_SEMCTL:
+#ifdef __linux__ /* XXX Need metaconfig test */
+ unsemds.buf = (struct semid_ds *)a;
+ ret = semctl(id, n, cmd, unsemds);
+#else
ret = semctl(id, n, cmd, (struct semid_ds *)a);
+#endif
break;
#endif
#ifdef HAS_SHM