diff options
Diffstat (limited to 'src/xine-engine/utils.c')
-rw-r--r-- | src/xine-engine/utils.c | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/src/xine-engine/utils.c b/src/xine-engine/utils.c new file mode 100644 index 000000000..3c6c0f532 --- /dev/null +++ b/src/xine-engine/utils.c @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2000-2001 the xine project + * + * This file is part of xine, a unix video player. + * + * xine 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. + * + * xine 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 + * + * $Id: utils.c,v 1.1 2001/04/18 22:36:04 f1rmb Exp $ + * + */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> +#include <unistd.h> +#include <pwd.h> +#include <sys/types.h> + +/* + * + */ +void *xmalloc(size_t size) { + void *ptrmalloc, *ptrmemset; + + if((ptrmalloc = malloc(size)) == NULL) { + fprintf(stderr, "%s: malloc() failed: %s.\n", + __FUNCTION__, strerror(errno)); + return NULL; + } + + if((ptrmemset = memset(ptrmalloc, 0, size)) == NULL) { + fprintf(stderr, "%s: memset() failed: %s.\n", + __FUNCTION__, strerror(errno)); + return NULL; + } + + return ptrmemset; +} + +/* + * + */ +void *xmalloc_aligned (size_t alignment, size_t size) { + void *pMem; + + pMem = xmalloc (size+alignment); + + while ((int) pMem % alignment) + pMem++; + + return pMem; +} + +/* + * + */ +const char *get_homedir(void) { + struct passwd *pw = NULL; + char *homedir = NULL; +#ifdef HAVE_GETPWUID_R + int ret; + struct passwd pwd; + char *buffer = NULL; + int bufsize = 128; + + buffer = (char *) xmalloc(bufsize); + + if((ret = getpwuid_r(getuid(), &pwd, buffer, bufsize, &pw)) < 0) { +#else + if((pw = getpwuid(getuid())) == NULL) { +#endif + if((homedir = getenv("HOME")) == NULL) { + fprintf(stderr, "Unable to get home directory, set it to /tmp.\n"); + homedir = strdup("/tmp"); + } + } + else { + if(pw) + homedir = strdup(pw->pw_dir); + } + + +#ifdef HAVE_GETPWUID_R + if(buffer) + free(buffer); +#endif + + return homedir; +} + +/* + * + */ +char *chomp(char *str) { + char *pbuf; + + pbuf = str; + + while(*pbuf != '\0') pbuf++; + + while(pbuf > str) { + if(*pbuf == '\r' || *pbuf == '\n' || *pbuf == '"') pbuf = '\0'; + pbuf--; + } + + while(*pbuf == '=' || *pbuf == '"') pbuf++; + + return pbuf; +} |