for (fsp=Files;fsp;fsp=fsp->next,count++) {
if (fsp->open &&
+ fsp->fd_ptr != NULL &&
fsp->fd_ptr->dev == dev &&
fsp->fd_ptr->inode == inode &&
(tval ? (fsp->open_time.tv_sec == tval->tv_sec) : True ) &&
return NULL;
}
+/****************************************************************************
+ Find the first fsp given a device and inode.
+****************************************************************************/
+
+files_struct *file_find_di_first(SMB_DEV_T dev, SMB_INO_T inode)
+{
+ files_struct *fsp;
+
+ for (fsp=Files;fsp;fsp=fsp->next) {
+ if (fsp->open &&
+ fsp->fd_ptr != NULL &&
+ fsp->fd_ptr->dev == dev &&
+ fsp->fd_ptr->inode == inode )
+ return fsp;
+ }
+
+ return NULL;
+}
+
+/****************************************************************************
+ Find the next fsp having the same device and inode.
+****************************************************************************/
+
+files_struct *file_find_di_next(files_struct *start_fsp)
+{
+ files_struct *fsp;
+
+ for (fsp = start_fsp->next;fsp;fsp=fsp->next) {
+ if (fsp->open &&
+ fsp->fd_ptr != NULL &&
+ fsp->fd_ptr->dev == start_fsp->fd_ptr->dev &&
+ fsp->fd_ptr->inode == start_fsp->fd_ptr->inode )
+ return fsp;
+ }
+
+ return NULL;
+}
/****************************************************************************
find a fsp that is open for printing
for (fsp=Files;fsp;fsp=next) {
next=fsp->next;
- if (fsp->open && conn == fsp->conn) {
+ if (fsp->open && (conn == fsp->conn) && (fsp->fd_ptr != NULL)) {
sync_file(conn,fsp);
}
}
string_free(&fsp->fsp_name);
- if (fsp->fd_ptr && fsp->fd_ptr->ref_count == 0) {
+ if ((fsp->fd_ptr != NULL) && fsp->fd_ptr->ref_count == 0) {
fd_ptr_free(fsp->fd_ptr);
}