/* wrapper/rvs.c -- general and machine specific functions for rvs. system depends: Copyright (C) 2009 Luke Shumaker This file is part of rvs. rvs 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, or (at your option) any later version. rvs 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 rvs; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include "rvs.h" void * xmalloc (size_t size) { void *value = malloc (size); if (value == NULL) { perror(program_invocation_name); exit(EXIT_FAILURE); } return value; } void * xrealloc (void *ptr, size_t size) { void *value = realloc (ptr, size); if (value == NULL) { perror(program_invocation_name); exit(EXIT_FAILURE); } return value; } void xfree (void *ptr) { if (ptr!=NULL) free (ptr); } void xsystem (const char *command) { int stat=system(command); if (stat!=0) { if (stat==-1) { fprintf(stderr, "%s: unable to launch run command", program_invocation_name); exit(EXIT_FAILURE); } else exit(EXIT_FAILURE); } } /* unistd.h */ int xchdir (const char *filename) { int ret=chdir(filename); if (ret != 0) error(EXIT_FAILURE,errno,"%s/",filename); return ret; } /* stdio.h */ FILE * xfopen (const char *filename, const char *opentype) { FILE *file = fopen(filename,opentype); /* fopen gives NULL on failure */ if ( file == NULL ) error(EXIT_FAILURE,errno,"%s",filename); return file; } /* string funtions */ void stradds(size_t *size, char **dest, char *str) { if (*size > ( strlen(*dest) + strlen(str) )) strcat(*dest, str); else { *size = strlen(*dest) + strlen(str) + 1; *dest = (char *) xrealloc (*dest, *size); strcat(*dest, str); } } char * stralloc (const char *string) { char *copy = (char *)xmalloc(strlen(string)+1); strcpy(copy,string); return copy; }