| /* |
| * |
| * Copyright 2010 Samsung Electronics S.LSI Co. LTD |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* |
| * @file SEC_OSAL_ETC.c |
| * @brief |
| * @author SeungBeom Kim (sbcrux.kim@samsung.com) |
| * @version 1.1.0 |
| * @history |
| * 2010.7.15 : Create |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include "SEC_OSAL_Memory.h" |
| #include "SEC_OSAL_ETC.h" |
| |
| |
| #ifndef HAVE_GETLINE |
| ssize_t getline(char **ppLine, size_t *pLen, FILE *pStream) |
| { |
| char *pCurrentPointer = NULL; |
| size_t const chunk = 512; |
| |
| size_t defaultBufferSize = chunk + 1; |
| size_t retSize = 0; |
| |
| if (*ppLine == NULL) { |
| *ppLine = (char *)malloc(defaultBufferSize); |
| if (*ppLine == NULL) { |
| retSize = -1; |
| goto EXIT; |
| } |
| *pLen = defaultBufferSize; |
| } |
| else { |
| if (*pLen < defaultBufferSize) { |
| *ppLine = (char *)realloc(*ppLine, defaultBufferSize); |
| if (*ppLine == NULL) { |
| retSize = -1; |
| goto EXIT; |
| } |
| *pLen = defaultBufferSize; |
| } |
| } |
| |
| while (1) { |
| size_t i; |
| size_t j = 0; |
| size_t readByte = 0; |
| |
| pCurrentPointer = *ppLine + readByte; |
| |
| i = fread(pCurrentPointer, 1, chunk, pStream); |
| if (i < chunk && ferror(pStream)) { |
| retSize = -1; |
| goto EXIT; |
| } |
| while (j < i) { |
| ++j; |
| if (*pCurrentPointer++ == (char)'\n') { |
| *pCurrentPointer = '\0'; |
| if (j != i) { |
| if (fseek(pStream, j - i, SEEK_CUR)) { |
| retSize = -1; |
| goto EXIT; |
| } |
| if (feof(pStream)) |
| clearerr(pStream); |
| } |
| readByte += j; |
| retSize = readByte; |
| goto EXIT; |
| } |
| } |
| |
| readByte += j; |
| if (feof(pStream)) { |
| if (readByte) { |
| retSize = readByte; |
| goto EXIT; |
| } |
| if (!i) { |
| retSize = -1; |
| goto EXIT; |
| } |
| } |
| |
| i = ((readByte + (chunk * 2)) / chunk) * chunk; |
| if (i != *pLen) { |
| *ppLine = (char *)realloc(*ppLine, i); |
| if (*ppLine == NULL) { |
| retSize = -1; |
| goto EXIT; |
| } |
| *pLen = i; |
| } |
| } |
| |
| EXIT: |
| return retSize; |
| } |
| #endif /* HAVE_GETLINE */ |
| |
| OMX_PTR SEC_OSAL_Strcpy(OMX_PTR dest, OMX_PTR src) |
| { |
| return strcpy(dest, src); |
| } |
| |
| OMX_PTR SEC_OSAL_Strncpy(OMX_PTR dest, OMX_PTR src, size_t num) |
| { |
| return strncpy(dest, src, num); |
| } |
| |
| OMX_S32 SEC_OSAL_Strcmp(OMX_PTR str1, OMX_PTR str2) |
| { |
| return strcmp(str1, str2); |
| } |
| |
| OMX_S32 SEC_OSAL_Strncmp(OMX_PTR str1, OMX_PTR str2, size_t num) |
| { |
| return strncmp(str1, str2, num); |
| } |
| |
| OMX_PTR SEC_OSAL_Strcat(OMX_PTR dest, OMX_PTR src) |
| { |
| return strcat(dest, src); |
| } |
| |
| OMX_PTR SEC_OSAL_Strncat(OMX_PTR dest, OMX_PTR src, size_t num) |
| { |
| return strncat(dest, src, num); |
| } |
| |
| size_t SEC_OSAL_Strlen(const char *str) |
| { |
| return strlen(str); |
| } |