Annotation of embedaddon/hping2/datafiller.c, revision 1.1
1.1 ! misho 1: /*
! 2: * $smu-mark$
! 3: * $name: datafiller.c$
! 4: * $author: Salvatore Sanfilippo <antirez@invece.org>$
! 5: * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$
! 6: * $license: This software is under GPL version 2 of license$
! 7: * $date: Fri Nov 5 11:55:47 MET 1999$
! 8: * $rev: 8$
! 9: */
! 10:
! 11: #include <stdio.h>
! 12: #include <stdlib.h>
! 13: #include <unistd.h>
! 14: #include <sys/types.h>
! 15: #include <sys/stat.h>
! 16: #include <fcntl.h>
! 17: #include <string.h> /* memset */
! 18:
! 19: #include "hping2.h"
! 20: #include "globals.h"
! 21:
! 22: void datafiller(char *p, int size)
! 23: {
! 24: static int fd = 0;
! 25: int readed, diff;
! 26:
! 27: if (!fd) {
! 28: fd = open(datafilename, O_RDONLY);
! 29: if (fd == -1) {
! 30: perror("[datafiller] open()");
! 31: fd = 0; /* will retry to open the file for
! 32: * the next packet */
! 33: memset(p, 'X', size);
! 34: return;
! 35: }
! 36: }
! 37:
! 38: if (p == NULL && fd != -1) { /* seek operation */
! 39: /* size-1 because packet with id 1 start from 0 */
! 40: lseek(fd, (data_size-signlen)*(size-1), SEEK_SET);
! 41: return;
! 42: }
! 43:
! 44: restart: /* if EOF occurs, after rewind, restart */
! 45:
! 46: readed = read(fd, p, size);
! 47: if (readed == size)
! 48: return;
! 49: else if (readed == -1) {
! 50: perror("[datafiller] read()");
! 51: close(fd);
! 52: fd = 0; /* will retry to open the file for the next packet */
! 53: memset(p, 'X', size);
! 54: return;
! 55: }
! 56: else if (readed < size && opt_end == FALSE) {
! 57: lseek(fd, 0, SEEK_SET);
! 58: if (readed == 0)
! 59: goto restart;
! 60: }
! 61: else if (readed < size && opt_end == TRUE) {
! 62: fprintf(stderr, "EOF reached, wait some second than press "
! 63: "ctrl+c\n");
! 64: eof_reached = TRUE;
! 65: } else {
! 66: printf("[datafiller.c INTERNAL ERROR] readed = %d - "
! 67: "opt_end == %d\n", readed, opt_end);
! 68: exit(1);
! 69: }
! 70: diff = size - readed;
! 71: memset(p+readed, '\0', diff); /* padding */
! 72: lseek(fd, 0, SEEK_SET);
! 73: return;
! 74: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>