/***************************************************************************
 *   Copyright (C) 2004 by Christian Bucher                                *
 *   christian.bucher@amadyne.net                                          *
 *                                                                         *
 *   This program 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 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program 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 this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#include "stringutils.h"
 
char *fh_strcpy(char *dest, const char *src)
  {
  char *d = dest;
  
  // das ist weder schön noch sicher, get aber nicht besser.
  while ((*dest++ = *src++));
  
  return d;
  }

// mit Längenbegrenzung kopieren und dafür sorgen, 
// dass auch die Null noch platz hat!
char *fh_strnscpy(char *dest, const char *src, size_t n)
  {
  char *d = dest;
  
  // der predekrement Operator erstart das n-1 vorher :-)
  while ((--n) && (*dest++ = *src++));
  
  // falls wir in die Begrenzung gelaufen sind terminieren
  if (!n) *dest = '\0'; 
  
  return d;
  }


// diese Funktion wird uminterpretiert. n gibt die Grösse des Zielstrings an
// Dieser soll wie bei fh_strncpy gegen BO geschützt werden
char *fh_strnscat(char *dest, const char *src, size_t n)
  {
  size_t   i;
  char *d = dest;
  
  // wir "könnten" auch strlen() verwenden...
  for (i = 0; *dest++; i++);
  
  // i steht jetzt eigentlich eins zu hoch, aber das passt gerade gut...
  i = n - i; // das hat ausser der Null noch platz;
  dest--;    // die derzeitige Null muss überschrieben werden
  
  // mit neter Begrenzung kopieren. Wir könnten hier auch  
  // fh_strnscpy() aufrufen, aber das ist weniger effizient.
  // (und es sind eh nur 2 Zeilen)
  while ((--i) && (*dest++ = *src++));
  
  // falls wir in die Begrenzung gelaufen sind terminieren
  if (!i) *dest = '\0'; 
  
  return d;
  
  }

syntax highlighted by Code2HTML, v. 0.9.1