17cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines/*
27cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * Copyright 2012, The Android Open Source Project
37cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines *
47cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
57cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * you may not use this file except in compliance with the License.
67cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * You may obtain a copy of the License at
77cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines *
87cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines *     http://www.apache.org/licenses/LICENSE-2.0
97cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines *
107cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * Unless required by applicable law or agreed to in writing, software
117cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
127cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * See the License for the specific language governing permissions and
147cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines * limitations under the License.
157cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines */
167cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines
177cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines#include <stdlib.h>
187cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines
197cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines#include "bcinfo/Wrap/file_wrapper_output.h"
207cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines
217cd4c49d575478b2380f129dcd376a4e5e37939cStephen HinesFileWrapperOutput::FileWrapperOutput(const char* name)
227cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    : _name(name) {
237cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  _file = fopen(name, "wb");
24900c6c1f08f7c572125d7d39abe0f0f9eafbfa14Chris Wailes  if (nullptr == _file) {
257cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    fprintf(stderr, "Unable to open: %s\n", name);
267cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    exit(1);
277cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  }
287cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines}
297cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines
307cd4c49d575478b2380f129dcd376a4e5e37939cStephen HinesFileWrapperOutput::~FileWrapperOutput() {
317cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  fclose(_file);
327cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines}
337cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines
347cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hinesbool FileWrapperOutput::Write(uint8_t byte) {
357cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  return EOF != fputc(byte, _file);
367cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines}
377cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines
387cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hinesbool FileWrapperOutput::Write(const uint8_t* buffer, size_t buffer_size) {
393f782a74b1a44bdf6e13aa1ddd5aea11ece1f12cStephen Hines  if (!buffer) {
403f782a74b1a44bdf6e13aa1ddd5aea11ece1f12cStephen Hines    return false;
413f782a74b1a44bdf6e13aa1ddd5aea11ece1f12cStephen Hines  }
423f782a74b1a44bdf6e13aa1ddd5aea11ece1f12cStephen Hines
437cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  if (buffer_size > 0) {
447cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    return buffer_size == fwrite(buffer, 1, buffer_size, _file);
457cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  } else {
467cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines    return true;
477cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines  }
487cd4c49d575478b2380f129dcd376a4e5e37939cStephen Hines}
49