This is str.c in view mode; [Download] [Up]
/*********************************************************************** * * String Functions * * $Revision: 1.3 $ * $Date: 1995/06/06 15:58:47 $ * $Author: sbb $ * ***********************************************************************/ /*********************************************************************** * * Copyright (C) 1990, 1991, 1992, 1994, 1995 Free Software Foundation, Inc. * Written by Steve Byrne. * * This file is part of GNU Smalltalk. * * GNU Smalltalk is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 1, or (at your option) any later * version. * * GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * GNU Smalltalk; see the file COPYING. If not, write to the Free Software * Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * ***********************************************************************/ /* * Change Log * ============================================================================ * Author Date Change * sbb 6 Jun 95 Switched to new file naming scheme. * * sbyrne 27 Dec 88 created. */ #include <stdio.h> #include "gst.h" #include "str.h" #if STDC_HEADERS #include <stdlib.h> #include <string.h> #endif /* STDC_HEADERS */ #define STRING_GRANULARITY 128 static void reallocStrBase(); static char *strBase = NULL, *strPtr; static long maxStrLen; /* * void initStrBuf() * * Description * * Initializes the string buffer to accumulate new characters. * */ void initStrBuf() { if (strBase == NULL) { reallocStrBase(0L, STRING_GRANULARITY); } strPtr = strBase; } /* * char *curStrBuf() * * Description * * Returns the currently accumulated string, as a C string. Note that the * actual string returned is not a unique string, and should be copied as * soon as possible. * * Outputs * * Pointer to NUL terminated C string that is the accumulated string. */ char *curStrBuf() { addStrBufChar('\0'); return (strBase); } /* * void addStrBufChar(c) * * Description * * Adds a character "c" to the string being accumulated. The character can * be any valid ASCII character. * * Inputs * * c : the character to add to the string. * */ void addStrBufChar(c) char c; { if (strPtr - strBase >= maxStrLen) { reallocStrBase(maxStrLen, STRING_GRANULARITY); } *strPtr++ = c; } /* * static void reallocStrBase(len, delta) * * Description * * Called to allocate a new string to be accumulated. If there is an * existing string, it is copied into the new string and then free; * otherwise the new string is created. * * Inputs * * len : current length of current string, in bytes * delta : increment to add to string length in bytes. New string length * is len+delta. * * Outputs * * strBase, maxStrLen, and strPtr are all globals that are affected by * this routine. */ static void reallocStrBase(len, delta) long len; int delta; { char *newStr; long l; maxStrLen = len + delta; newStr = (char *)malloc(maxStrLen); if (strBase) { l = strPtr - strBase; strncpy(newStr, strBase, len); free(strBase); } else { l = 0L; } strBase = newStr; strPtr = strBase + l; } /* * char *copyStr(str) * * Description * * Returns a newly allocated copy of the string "str". * * Inputs * * str : NUL terminated C string to be copied. * * Outputs * * Pointer to new NUL terminated C string that is a copy of "str". */ char *copyStr(str) char *str; { char *newStr; long l; l = strlen(str) + 1; newStr = (char *)malloc(l); strncpy(newStr, str, l); return (newStr); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.