Author: phoudoin Date: 2011-01-18 21:08:48 +0100 (Tue, 18 Jan 2011) New Revision: 40247 Changeset: http://dev.haiku-os.org/changeset/40247 Modified: haiku/trunk/src/add-ons/kernel/network/devices/dialup/dialup.cpp Log: Okay, by quick and dirty, one should read broken. Modified: haiku/trunk/src/add-ons/kernel/network/devices/dialup/dialup.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/network/devices/dialup/dialup.cpp 2011-01-18 19:57:22 UTC (rev 40246) +++ haiku/trunk/src/add-ons/kernel/network/devices/dialup/dialup.cpp 2011-01-18 20:08:48 UTC (rev 40247) @@ -53,7 +53,7 @@ char escape_string[8]; bigtime_t escape_silence; char hangup_string[16]; - bigtime_t flag_timeout; + bigtime_t tx_flag_timeout; uint32 rx_accm; uint32 tx_accm[8]; }; @@ -226,8 +226,8 @@ device->tx_flag_timeout = 1000000; // default rx & tx Async-Control-Character-Map - memset(device->rx_accm, 0xFF, sizeof(device->rx_accm)); - memset(device->tx_accm, 0xFF, sizeof(device->tx_accm)); + memset(&device->rx_accm, 0xFF, sizeof(device->rx_accm)); + memset(&device->tx_accm, 0xFF, sizeof(device->tx_accm)); *_device = device; return B_OK; @@ -401,8 +401,9 @@ // more than a second ago. // Otherwise, the prior closing flag sequence is the open flag of this // frame - if (device->flag_timeout - && system_time() - device->last_closing_flag_sequence_time > device->flagt_timeout) { + if (device->tx_flag_timeout + && system_time() - device->last_closing_flag_sequence_time + > device->tx_flag_timeout) { packet[packetSize++] = HDLC_FLAG_SEQUENCE; } @@ -463,15 +464,17 @@ if (buffer == NULL) return ENOBUFS; + status_t status; ssize_t bytesRead; - uint8* data; - packet = (uint8*)malloc(2 + 2 * buffer->size); + uint8* data = NULL; + uint8* packet = (uint8*)malloc(2 + 2 * buffer->size); if (packet == NULL) { status = B_NO_MEMORY; goto err; } - status_t status = gBufferModule->append_size(buffer, device->mtu + HDLC_HEADER_LENGTH, &data); + status = gBufferModule->append_size(buffer, + device->mtu + HDLC_HEADER_LENGTH, (void**)&data); if (status == B_OK && data == NULL) { dprintf("scattered I/O is not yet supported by dialup device.\n"); status = B_NOT_SUPPORTED; @@ -480,9 +483,10 @@ goto err; while (true) { - bytesRead = read(device->fd, data, device->frame_size); + bytesRead = read(device->fd, data, device->mtu + HDLC_HEADER_LENGTH); if (bytesRead < 0) { - + // TODO + } } status = gBufferModule->trim(buffer, bytesRead); @@ -495,10 +499,12 @@ device->stats.receive.packets++; *_buffer = buffer; - return B_OK; + status = B_OK; + goto done; err: gBufferModule->free(buffer); + device->stats.receive.errors++; done: free(packet);