~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to vio/vio.c

  • Committer: Brian Aker
  • Date: 2008-07-28 18:01:38 UTC
  • Revision ID: brian@tangent.org-20080728180138-q2pxlq0qiapvqsdn
Remove YEAR field type

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
  the file descriptior.
21
21
*/
22
22
 
23
 
#include "config.h"
24
 
 
25
 
#define DONT_MAP_VIO
26
 
#include "vio.h"
27
 
 
28
 
#include <fcntl.h>
29
 
 
30
 
#include <cstdio>
31
 
#include <cstring>
32
 
#include <cstdlib>
33
 
#include <memory>
34
 
 
35
 
using namespace std;
 
23
#include "vio_priv.h"
36
24
 
37
25
/*
38
26
 * Helper to fill most of the Vio* with defaults.
39
27
 */
40
28
 
41
 
static void drizzleclient_vio_init(Vio* vio, enum enum_vio_type type,
42
 
                     int sd, uint32_t flags)
 
29
static void vio_init(Vio* vio, enum enum_vio_type type,
 
30
                     my_socket sd, uint32_t flags)
43
31
{
44
 
  memset(vio, 0, sizeof(*vio));
 
32
#ifndef HAVE_VIO_READ_BUFF
 
33
  flags&= ~VIO_BUFFERED_READ;
 
34
#endif
 
35
  bzero((char*) vio, sizeof(*vio));
45
36
  vio->type     = type;
46
37
  vio->sd       = sd;
47
38
  if ((flags & VIO_BUFFERED_READ) &&
48
 
      !(vio->read_buffer= (char*)malloc(VIO_READ_BUFFER_SIZE)))
 
39
      !(vio->read_buffer= (char*)my_malloc(VIO_READ_BUFFER_SIZE, MYF(MY_WME))))
49
40
    flags&= ~VIO_BUFFERED_READ;
50
41
  {
51
 
    vio->viodelete      =drizzleclient_vio_delete;
52
 
    vio->vioerrno       =drizzleclient_vio_errno;
53
 
    vio->read= (flags & VIO_BUFFERED_READ) ? drizzleclient_vio_read_buff : drizzleclient_vio_read;
54
 
    vio->write          =drizzleclient_vio_write;
55
 
    vio->fastsend       =drizzleclient_vio_fastsend;
56
 
    vio->viokeepalive   =drizzleclient_vio_keepalive;
57
 
    vio->should_retry   =drizzleclient_vio_should_retry;
58
 
    vio->was_interrupted=drizzleclient_vio_was_interrupted;
59
 
    vio->vioclose       =drizzleclient_vio_close;
60
 
    vio->peer_addr      =drizzleclient_vio_peer_addr;
61
 
    vio->vioblocking    =drizzleclient_vio_blocking;
62
 
    vio->is_blocking    =drizzleclient_vio_is_blocking;
63
 
    vio->timeout        =drizzleclient_vio_timeout;
 
42
    vio->viodelete      =vio_delete;
 
43
    vio->vioerrno       =vio_errno;
 
44
    vio->read= (flags & VIO_BUFFERED_READ) ? vio_read_buff : vio_read;
 
45
    vio->write          =vio_write;
 
46
    vio->fastsend       =vio_fastsend;
 
47
    vio->viokeepalive   =vio_keepalive;
 
48
    vio->should_retry   =vio_should_retry;
 
49
    vio->was_interrupted=vio_was_interrupted;
 
50
    vio->vioclose       =vio_close;
 
51
    vio->peer_addr      =vio_peer_addr;
 
52
    vio->vioblocking    =vio_blocking;
 
53
    vio->is_blocking    =vio_is_blocking;
 
54
    vio->timeout        =vio_timeout;
64
55
  }
65
56
}
66
57
 
67
58
 
68
59
/* Reset initialized VIO to use with another transport type */
69
60
 
70
 
void drizzleclient_vio_reset(Vio* vio, enum enum_vio_type type,
71
 
               int sd, uint32_t flags)
 
61
void vio_reset(Vio* vio, enum enum_vio_type type,
 
62
               my_socket sd, uint flags)
72
63
{
73
 
  free(vio->read_buffer);
74
 
  drizzleclient_vio_init(vio, type, sd, flags);
 
64
  my_free(vio->read_buffer, MYF(MY_ALLOW_ZERO_PTR));
 
65
  vio_init(vio, type, sd, flags);
75
66
}
76
67
 
77
68
 
78
69
/* Open the socket or TCP/IP connection and read the fnctl() status */
79
70
 
80
 
Vio *drizzleclient_vio_new(int sd, enum enum_vio_type type, uint32_t flags)
 
71
Vio *vio_new(my_socket sd, enum enum_vio_type type, uint flags)
81
72
{
82
 
  Vio *vio = (Vio*) malloc(sizeof(Vio));
 
73
  Vio *vio;
83
74
 
84
 
  if (vio != NULL)
 
75
  if ((vio = (Vio*) my_malloc(sizeof(*vio),MYF(MY_WME))))
85
76
  {
86
 
    drizzleclient_vio_init(vio, type, sd, flags);
 
77
    vio_init(vio, type, sd, flags);
87
78
    sprintf(vio->desc, "TCP/IP (%d)", vio->sd);
88
79
    /*
89
80
      We call fcntl() to set the flags and then immediately read them back
102
93
}
103
94
 
104
95
 
105
 
void drizzleclient_vio_delete(Vio* vio)
 
96
void vio_delete(Vio* vio)
106
97
{
107
98
  if (!vio)
108
99
    return; /* It must be safe to delete null pointers. */
109
100
 
110
101
  if (vio->type != VIO_CLOSED)
111
102
    vio->vioclose(vio);
112
 
  free((unsigned char*) vio->read_buffer);
113
 
  free((unsigned char*) vio);
 
103
  my_free((uchar*) vio->read_buffer, MYF(MY_ALLOW_ZERO_PTR));
 
104
  my_free((uchar*) vio, MYF(0));
114
105
}
115
106
 
116
107
 
119
110
  components below it when application finish
120
111
 
121
112
*/
122
 
void drizzleclient_vio_end(void)
 
113
void vio_end(void)
123
114
{
124
115
}