Modified for BG96

Fork of mbed-dev by mbed official

Committer:
WaleedElmughrabi
Date:
Thu Sep 20 16:11:23 2018 +0000
Revision:
188:60408c49b6d4
Parent:
187:0387e8f68319
Fork modified for BG96 error

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /* mbed Microcontroller Library
AnnaBridge 167:e84263d55307 2 * Copyright (c) 2006-2013 ARM Limited
AnnaBridge 167:e84263d55307 3 *
AnnaBridge 167:e84263d55307 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 167:e84263d55307 5 * you may not use this file except in compliance with the License.
AnnaBridge 167:e84263d55307 6 * You may obtain a copy of the License at
AnnaBridge 167:e84263d55307 7 *
AnnaBridge 167:e84263d55307 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 167:e84263d55307 9 *
AnnaBridge 167:e84263d55307 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 167:e84263d55307 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 167:e84263d55307 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 167:e84263d55307 13 * See the License for the specific language governing permissions and
AnnaBridge 167:e84263d55307 14 * limitations under the License.
AnnaBridge 167:e84263d55307 15 */
AnnaBridge 167:e84263d55307 16 #include "platform/Stream.h"
AnnaBridge 167:e84263d55307 17 #include "platform/mbed_error.h"
AnnaBridge 167:e84263d55307 18 #include <errno.h>
AnnaBridge 167:e84263d55307 19
AnnaBridge 167:e84263d55307 20 namespace mbed {
AnnaBridge 167:e84263d55307 21
AnnaBridge 187:0387e8f68319 22 Stream::Stream(const char *name) : FileLike(name), _file(NULL)
AnnaBridge 187:0387e8f68319 23 {
AnnaBridge 167:e84263d55307 24 // No lock needed in constructor
AnnaBridge 167:e84263d55307 25 /* open ourselves */
AnnaBridge 167:e84263d55307 26 _file = fdopen(this, "w+");
AnnaBridge 167:e84263d55307 27 // fdopen() will make us buffered because Stream::isatty()
AnnaBridge 167:e84263d55307 28 // wrongly returns zero which is not being changed for
AnnaBridge 187:0387e8f68319 29 // backward compatibility
AnnaBridge 167:e84263d55307 30 if (_file) {
AnnaBridge 167:e84263d55307 31 mbed_set_unbuffered_stream(_file);
AnnaBridge 167:e84263d55307 32 } else {
Anna Bridge 186:707f6e361f3e 33 MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_OPEN_FAILED), "Stream obj failure", _file);
AnnaBridge 167:e84263d55307 34 }
AnnaBridge 167:e84263d55307 35 }
AnnaBridge 167:e84263d55307 36
AnnaBridge 187:0387e8f68319 37 Stream::~Stream()
AnnaBridge 187:0387e8f68319 38 {
AnnaBridge 167:e84263d55307 39 // No lock can be used in destructor
AnnaBridge 167:e84263d55307 40 fclose(_file);
AnnaBridge 167:e84263d55307 41 }
AnnaBridge 167:e84263d55307 42
AnnaBridge 187:0387e8f68319 43 int Stream::putc(int c)
AnnaBridge 187:0387e8f68319 44 {
AnnaBridge 167:e84263d55307 45 lock();
AnnaBridge 167:e84263d55307 46 fflush(_file);
AnnaBridge 167:e84263d55307 47 int ret = std::fputc(c, _file);
AnnaBridge 167:e84263d55307 48 unlock();
AnnaBridge 167:e84263d55307 49 return ret;
AnnaBridge 167:e84263d55307 50 }
AnnaBridge 187:0387e8f68319 51 int Stream::puts(const char *s)
AnnaBridge 187:0387e8f68319 52 {
AnnaBridge 167:e84263d55307 53 lock();
AnnaBridge 167:e84263d55307 54 fflush(_file);
AnnaBridge 167:e84263d55307 55 int ret = std::fputs(s, _file);
AnnaBridge 167:e84263d55307 56 unlock();
AnnaBridge 167:e84263d55307 57 return ret;
AnnaBridge 167:e84263d55307 58 }
AnnaBridge 187:0387e8f68319 59 int Stream::getc()
AnnaBridge 187:0387e8f68319 60 {
AnnaBridge 167:e84263d55307 61 lock();
AnnaBridge 167:e84263d55307 62 fflush(_file);
AnnaBridge 167:e84263d55307 63 int ret = mbed_getc(_file);
AnnaBridge 167:e84263d55307 64 unlock();
AnnaBridge 167:e84263d55307 65 return ret;
AnnaBridge 167:e84263d55307 66 }
AnnaBridge 187:0387e8f68319 67 char *Stream::gets(char *s, int size)
AnnaBridge 187:0387e8f68319 68 {
AnnaBridge 167:e84263d55307 69 lock();
AnnaBridge 167:e84263d55307 70 fflush(_file);
AnnaBridge 187:0387e8f68319 71 char *ret = mbed_gets(s, size, _file);
AnnaBridge 167:e84263d55307 72 unlock();
AnnaBridge 167:e84263d55307 73 return ret;
AnnaBridge 167:e84263d55307 74 }
AnnaBridge 167:e84263d55307 75
AnnaBridge 187:0387e8f68319 76 int Stream::close()
AnnaBridge 187:0387e8f68319 77 {
AnnaBridge 167:e84263d55307 78 return 0;
AnnaBridge 167:e84263d55307 79 }
AnnaBridge 167:e84263d55307 80
AnnaBridge 187:0387e8f68319 81 ssize_t Stream::write(const void *buffer, size_t length)
AnnaBridge 187:0387e8f68319 82 {
AnnaBridge 187:0387e8f68319 83 const char *ptr = (const char *)buffer;
AnnaBridge 187:0387e8f68319 84 const char *end = ptr + length;
AnnaBridge 167:e84263d55307 85
AnnaBridge 167:e84263d55307 86 lock();
AnnaBridge 167:e84263d55307 87 while (ptr != end) {
AnnaBridge 167:e84263d55307 88 if (_putc(*ptr++) == EOF) {
AnnaBridge 167:e84263d55307 89 break;
AnnaBridge 167:e84263d55307 90 }
AnnaBridge 167:e84263d55307 91 }
AnnaBridge 167:e84263d55307 92 unlock();
AnnaBridge 167:e84263d55307 93
AnnaBridge 187:0387e8f68319 94 return ptr - (const char *)buffer;
AnnaBridge 167:e84263d55307 95 }
AnnaBridge 167:e84263d55307 96
AnnaBridge 187:0387e8f68319 97 ssize_t Stream::read(void *buffer, size_t length)
AnnaBridge 187:0387e8f68319 98 {
AnnaBridge 187:0387e8f68319 99 char *ptr = (char *)buffer;
AnnaBridge 187:0387e8f68319 100 char *end = ptr + length;
AnnaBridge 167:e84263d55307 101
AnnaBridge 167:e84263d55307 102 lock();
AnnaBridge 167:e84263d55307 103 while (ptr != end) {
AnnaBridge 167:e84263d55307 104 int c = _getc();
AnnaBridge 187:0387e8f68319 105 if (c == EOF) {
AnnaBridge 187:0387e8f68319 106 break;
AnnaBridge 187:0387e8f68319 107 }
AnnaBridge 167:e84263d55307 108 *ptr++ = c;
AnnaBridge 167:e84263d55307 109 }
AnnaBridge 167:e84263d55307 110 unlock();
AnnaBridge 167:e84263d55307 111
AnnaBridge 187:0387e8f68319 112 return ptr - (const char *)buffer;
AnnaBridge 167:e84263d55307 113 }
AnnaBridge 167:e84263d55307 114
AnnaBridge 187:0387e8f68319 115 off_t Stream::seek(off_t offset, int whence)
AnnaBridge 187:0387e8f68319 116 {
AnnaBridge 167:e84263d55307 117 return 0;
AnnaBridge 167:e84263d55307 118 }
AnnaBridge 167:e84263d55307 119
AnnaBridge 187:0387e8f68319 120 off_t Stream::tell()
AnnaBridge 187:0387e8f68319 121 {
AnnaBridge 167:e84263d55307 122 return 0;
AnnaBridge 167:e84263d55307 123 }
AnnaBridge 167:e84263d55307 124
AnnaBridge 187:0387e8f68319 125 void Stream::rewind()
AnnaBridge 187:0387e8f68319 126 {
AnnaBridge 167:e84263d55307 127 }
AnnaBridge 167:e84263d55307 128
AnnaBridge 187:0387e8f68319 129 int Stream::isatty()
AnnaBridge 187:0387e8f68319 130 {
AnnaBridge 167:e84263d55307 131 return 0;
AnnaBridge 167:e84263d55307 132 }
AnnaBridge 167:e84263d55307 133
AnnaBridge 187:0387e8f68319 134 int Stream::sync()
AnnaBridge 187:0387e8f68319 135 {
AnnaBridge 167:e84263d55307 136 return 0;
AnnaBridge 167:e84263d55307 137 }
AnnaBridge 167:e84263d55307 138
AnnaBridge 187:0387e8f68319 139 off_t Stream::size()
AnnaBridge 187:0387e8f68319 140 {
AnnaBridge 167:e84263d55307 141 return 0;
AnnaBridge 167:e84263d55307 142 }
AnnaBridge 167:e84263d55307 143
AnnaBridge 187:0387e8f68319 144 int Stream::printf(const char *format, ...)
AnnaBridge 187:0387e8f68319 145 {
AnnaBridge 167:e84263d55307 146 lock();
AnnaBridge 167:e84263d55307 147 std::va_list arg;
AnnaBridge 167:e84263d55307 148 va_start(arg, format);
AnnaBridge 167:e84263d55307 149 fflush(_file);
AnnaBridge 167:e84263d55307 150 int r = vfprintf(_file, format, arg);
AnnaBridge 167:e84263d55307 151 va_end(arg);
AnnaBridge 167:e84263d55307 152 unlock();
AnnaBridge 167:e84263d55307 153 return r;
AnnaBridge 167:e84263d55307 154 }
AnnaBridge 167:e84263d55307 155
AnnaBridge 187:0387e8f68319 156 int Stream::scanf(const char *format, ...)
AnnaBridge 187:0387e8f68319 157 {
AnnaBridge 167:e84263d55307 158 lock();
AnnaBridge 167:e84263d55307 159 std::va_list arg;
AnnaBridge 167:e84263d55307 160 va_start(arg, format);
AnnaBridge 167:e84263d55307 161 fflush(_file);
AnnaBridge 167:e84263d55307 162 int r = vfscanf(_file, format, arg);
AnnaBridge 167:e84263d55307 163 va_end(arg);
AnnaBridge 167:e84263d55307 164 unlock();
AnnaBridge 167:e84263d55307 165 return r;
AnnaBridge 167:e84263d55307 166 }
AnnaBridge 167:e84263d55307 167
AnnaBridge 187:0387e8f68319 168 int Stream::vprintf(const char *format, std::va_list args)
AnnaBridge 187:0387e8f68319 169 {
AnnaBridge 167:e84263d55307 170 lock();
AnnaBridge 167:e84263d55307 171 fflush(_file);
AnnaBridge 167:e84263d55307 172 int r = vfprintf(_file, format, args);
AnnaBridge 167:e84263d55307 173 unlock();
AnnaBridge 167:e84263d55307 174 return r;
AnnaBridge 167:e84263d55307 175 }
AnnaBridge 167:e84263d55307 176
AnnaBridge 187:0387e8f68319 177 int Stream::vscanf(const char *format, std::va_list args)
AnnaBridge 187:0387e8f68319 178 {
AnnaBridge 167:e84263d55307 179 lock();
AnnaBridge 167:e84263d55307 180 fflush(_file);
AnnaBridge 167:e84263d55307 181 int r = vfscanf(_file, format, args);
AnnaBridge 167:e84263d55307 182 unlock();
AnnaBridge 167:e84263d55307 183 return r;
AnnaBridge 167:e84263d55307 184 }
AnnaBridge 167:e84263d55307 185
AnnaBridge 167:e84263d55307 186 } // namespace mbed