Lines Matching defs:file
23 static ssize_t tftp_err(int err, char *packet, char *mess, char *file);
24 static ssize_t tftp_err_oops(char *packet, char *file);
159 transfer->file = NULL;
265 /* check permissions and open file */
266 if ((transfer->file = check_tftp_fileperm(&len)))
291 struct tftp_file *file;
305 *len = tftp_err(ERR_FNF, packet, _("file %s not found"), namebuff);
314 /* stat the file descriptor to avoid stat->open races */
328 /* If we're doing many tranfers from the same file, only
329 open it once this saves lots of file descriptors
334 if (t->file->dev == statbuf.st_dev &&
335 t->file->inode == statbuf.st_ino &&
336 strcmp(t->file->filename, namebuff) == 0)
339 t->file->refcount++;
340 return t->file;
343 if (!(file = whine_malloc(sizeof(struct tftp_file) + strlen(namebuff) + 1)))
349 file->fd = fd;
350 file->size = statbuf.st_size;
351 file->dev = statbuf.st_dev;
352 file->inode = statbuf.st_ino;
353 file->refcount = 1;
354 strcpy(file->filename, namebuff);
355 return file;
439 len = tftp_err_oops(daemon->packet, transfer->file->filename);
448 transfer->file->filename, inet_ntoa(transfer->peer.sin_addr));
472 if (transfer->file && (--transfer->file->refcount) == 0)
474 close(transfer->file->fd);
475 free(transfer->file);
494 static ssize_t tftp_err(int err, char *packet, char *message, char *file)
505 ret += (snprintf(mess->message, 500, message, file, errstr) + 1);
511 static ssize_t tftp_err_oops(char *packet, char *file)
513 return tftp_err(ERR_NOTDEF, packet, _("cannot read %s: %s"), file);
538 p += (sprintf(p, "%u", (unsigned int)transfer->file->size) + 1);
551 size_t size = transfer->file->size - transfer->offset;
553 if (transfer->offset > transfer->file->size)
562 if (lseek(transfer->file->fd, transfer->offset, SEEK_SET) == (off_t)-1 ||
563 !read_write(transfer->file->fd, mess->data, size, 1))