+/* ==========================================================================
+ * ftrylockfile()
+ */
+int ftrylockfile(FILE *fp)
+{
+ semaphore *lock;
+ int fd;
+
+ fd = fileno(fp);
+ lock = &(fd_table[fd]->lock);
+ while (SEMAPHORE_TEST_AND_SET(lock)) {
+ pthread_yield();
+ }
+
+ if (fd_table[fd]->r_owner != pthread_run) {
+ if (!(fd_table[fd]->r_owner && fd_table[fd]->w_owner)) {
+ fd_basic_lock(fd, FD_RDWR, lock);
+ fd = OK;
+ } else {
+ fd = NOTOK;
+ }
+ } else {
+ fd_table[fd]->lockcount++;
+ fd = OK;
+ }
+ SEMAPHORE_RESET(lock);
+ return(fd);
+}
+